diff -prauN linux-2.6.0-test5/CREDITS wli-2.6.0-test5-bk12-25/CREDITS --- linux-2.6.0-test5/CREDITS 2003-09-08 12:50:17.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/CREDITS 2003-09-25 19:15:42.000000000 -0700 @@ -771,7 +771,7 @@ W: http://www.dell.com/linux W: http://domsch.com/linux D: Linux/IA-64 D: Dell PowerEdge server, SCSI layer, misc drivers, and other patches -S: Dell Computer Corporation +S: Dell Inc. S: One Dell Way S: Round Rock, TX 78682 S: USA @@ -1394,7 +1394,8 @@ S: USA N: Marcel Holtmann E: marcel@holtmann.org W: http://www.holtmann.org -D: Author of the Linux Bluetooth Subsystem PC Card drivers +D: Author and maintainer of the various Bluetooth HCI drivers +D: Various other Bluetooth related patches, cleanups and fixes S: Germany N: Rob W. W. Hooft @@ -2795,7 +2796,7 @@ E: gt8134b@prism.gatech.edu D: Dosemu N: Duncan Sands -E: duncan.sands@wanadoo.fr +E: duncan.sands@free.fr W: http://topo.math.u-psud.fr/~sands D: Alcatel SpeedTouch USB driver S: 69 rue Dunois @@ -3460,11 +3461,11 @@ S: Cambridge. CB1 7EG S: England N: Chris Wright -E: chris@wirex.com +E: chrisw@osdl.org D: hacking on LSM framework and security modules. -S: c/o WireX -S: 920 SW 3rd, Ste. 100 -S: Portland, OR 97204 +S: c/o OSDL +S: 12725 SW Millikan Way, Suite 400 +S: Beaverton, OR 97005 S: USA N: Frank Xia diff -prauN linux-2.6.0-test5/Documentation/00-INDEX wli-2.6.0-test5-bk12-25/Documentation/00-INDEX --- linux-2.6.0-test5/Documentation/00-INDEX 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/Documentation/00-INDEX 2003-09-25 19:15:42.000000000 -0700 @@ -116,8 +116,6 @@ kernel-docs.txt - listing of various WWW + books that document kernel internals. kernel-parameters.txt - summary listing of command line / boot prompt args for the kernel. -kmod.txt - - info on the kernel module loader/unloader (kerneld replacement). ldm.txt - a brief description of LDM (Windows Dynamic Disks). locks.txt @@ -144,8 +142,6 @@ mkdev.cciss - script to make /dev entries for SMART controllers (see cciss.txt) mkdev.ida - script to make /dev entries for Intelligent Disk Array Controllers. -modules.txt - - short guide on how to make kernel parts into loadable modules moxa-smartio - info on installing/using Moxa multiport serial driver. mtrr.txt diff -prauN linux-2.6.0-test5/Documentation/Changes wli-2.6.0-test5-bk12-25/Documentation/Changes --- linux-2.6.0-test5/Documentation/Changes 2003-09-08 12:50:28.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/Documentation/Changes 2003-09-25 19:15:42.000000000 -0700 @@ -52,7 +52,7 @@ o Gnu C 2.95.3 o Gnu make 3.78 # make --version o binutils 2.12 # ld -v o util-linux 2.10o # fdformat --version -o module-init-tools 0.9.9 # depmod -V +o module-init-tools 0.9.10 # depmod -V o e2fsprogs 1.29 # tune2fs o jfsutils 1.1.3 # fsck.jfs -V o reiserfsprogs 3.6.3 # reiserfsck -V 2>&1|grep reiserfsprogs @@ -62,7 +62,7 @@ o quota-tools 3.09 o PPP 2.4.0 # pppd --version o isdn4k-utils 3.1pre1 # isdnctrl 2>&1|grep version o nfs-utils 1.0.5 # showmount --version -o procps 2.0.9 # ps --version +o procps 3.1.13 # ps --version o oprofile 0.5.3 # oprofiled --version Kernel compilation diff -prauN linux-2.6.0-test5/Documentation/DocBook/gadget.tmpl wli-2.6.0-test5-bk12-25/Documentation/DocBook/gadget.tmpl --- linux-2.6.0-test5/Documentation/DocBook/gadget.tmpl 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/Documentation/DocBook/gadget.tmpl 2003-09-25 19:15:42.000000000 -0700 @@ -468,6 +468,15 @@ contact NetChip Technologies for develop information. +For users of Intel's PXA 2xx series processors, +a pxa2xx_udc driver is available. + + +At this writing, there are people at work on drivers in +this framework for several other USB device controllers, +with plans to make many of them be widely available. + + A partial USB simulator, @@ -500,7 +509,7 @@ for usb controller hardware), other gadg There's an ethernet gadget driver, which implements one of the most useful -Communications Device Class models. +Communications Device Class (CDC) models. One of the standards for cable modem interoperability even specifies the use of this ethernet model as one of two mandatory options. @@ -509,6 +518,11 @@ an Ethernet adapter. It provides access to a network where the gadget's CPU is one host, which could easily be bridging, routing, or firewalling access to other networks. +Since some hardware can't fully implement the CDC Ethernet +requirements, this driver also implements a "good parts only" +subset of CDC Ethernet. +(That subset doesn't advertise itself as CDC Ethernet, +to avoid creating problems.) There is also support for user mode gadget drivers, @@ -522,6 +536,17 @@ controller driver is available many appl won't require new kernel mode software. +There's a USB Mass Storage class driver, which provides +a different solution for interoperability with systems such +as MS-Windows and MacOS. +That File-backed Storage driver uses a +file or block device as backing store for a drive, +like the loop driver. +The USB host uses the BBB, CB, or CBI versions of the mass +storage class specification, using transparent SCSI commands +to access the data from the backing store. + + Support for other kinds of gadget is expected to be developed and contributed over time, as this driver framework evolves. diff -prauN linux-2.6.0-test5/Documentation/DocBook/kernel-hacking.tmpl wli-2.6.0-test5-bk12-25/Documentation/DocBook/kernel-hacking.tmpl --- linux-2.6.0-test5/Documentation/DocBook/kernel-hacking.tmpl 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/Documentation/DocBook/kernel-hacking.tmpl 2003-09-25 19:15:42.000000000 -0700 @@ -241,7 +241,7 @@ You can tell you are in a softirq (or bottom half, or tasklet) using the in_softirq() macro - (include/asm/softirq.h). + (include/asm/hardirq.h). @@ -690,7 +690,7 @@ printk(KERN_INFO "my ip: %d.%d.%d.%d\n", <function>local_bh_disable()</function>/<function>local_bh_enable()</function> - <filename class=headerfile>include/asm/softirq.h</filename> + include/linux/interrupt.h These routines disable soft interrupts on the local CPU, and diff -prauN linux-2.6.0-test5/Documentation/DocBook/kernel-locking.tmpl wli-2.6.0-test5-bk12-25/Documentation/DocBook/kernel-locking.tmpl --- linux-2.6.0-test5/Documentation/DocBook/kernel-locking.tmpl 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/Documentation/DocBook/kernel-locking.tmpl 2003-09-25 19:15:42.000000000 -0700 @@ -306,7 +306,7 @@ This works perfectly for UP as well: the spin lock vanishes, and this macro simply becomes local_bh_disable() - (include/asm/softirq.h), which + (include/linux/interrupt.h), which protects you from the bottom half being run. diff -prauN linux-2.6.0-test5/Documentation/DocBook/writing_usb_driver.tmpl wli-2.6.0-test5-bk12-25/Documentation/DocBook/writing_usb_driver.tmpl --- linux-2.6.0-test5/Documentation/DocBook/writing_usb_driver.tmpl 2003-09-08 12:50:04.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/Documentation/DocBook/writing_usb_driver.tmpl 2003-09-25 19:15:42.000000000 -0700 @@ -209,7 +209,7 @@ static int skel_probe(struct usb_interfa The driver now needs to verify that this device is actually one that it can accept. If so, it returns 0. If not, or if any error occurs during initialization, an errorcode - (such as -ENOMEM or -ENODEV) + (such as -ENOMEM or -ENODEV) is returned from the probe function. @@ -327,6 +327,7 @@ if (!retval) { talk to the device, the release function in the driver is called. In this function we decrement our private usage count and wait for possible pending writes: + /* decrement our usage count for the device */ --skel->open_count; diff -prauN linux-2.6.0-test5/Documentation/as-iosched.txt wli-2.6.0-test5-bk12-25/Documentation/as-iosched.txt --- linux-2.6.0-test5/Documentation/as-iosched.txt 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/Documentation/as-iosched.txt 2003-09-25 19:15:42.000000000 -0700 @@ -0,0 +1,53 @@ +Anticipatory IO scheduler +------------------------- +Nick Piggin 13 Sep 2003 + +Attention! Database servers, especially those using "TCQ" disks should +investigate performance with the 'deadline' IO scheduler. Any system with high +disk performance requirements should do so, in fact. + +If you see unusual performance characteristics of your disk systems, or you +see big performance regressions versus the deadline scheduler, please email +me. Database users don't bother unless you're willing to test a lot of patches +from me ;) its a known issue. + + +Selecting IO schedulers +----------------------- +To choose IO schedulers at boot time, use the argument 'elevator=deadline'. +'noop' and 'as' (the default) are also available. IO schedulers are assigned +globally at boot time only presently. + + +Tuning the anticipatory IO scheduler +------------------------------------ +When using 'as', the anticipatory IO scheduler there are 5 parameters under +/sys/block/*/iosched/. All are units of milliseconds. + +The parameters are: +* read_expire + Controls how long until a request becomes "expired". It also controls the + interval between which expired requests are served, so set to 50, a request + might take anywhere < 100ms to be serviced _if_ it is the next on the + expired list. Obviously it won't make the disk go faster. The result + basically equates to the timeslice a single reader gets in the presence of + other IO. 100*((seek time / read_expire) + 1) is very roughly the % + streaming read efficiency your disk should get with multiple readers. + +* read_batch_expire + Controls how much time a batch of reads is given before pending writes are + served. Higher value is more efficient. This might be set below read_expire + if writes are to be given higher priority than reads, but reads are to be + as efficient as possible when there are no writes. Generally though, it + should be some multiple of read_expire. + +* write_expire, and +* write_batch_expire are equivalent to the above, for writes. + +* antic_expire + Controls the maximum amount of time we can anticipate a good read before + giving up. Many other factors may cause anticipation to be stopped early, + or some processes will not be "anticipated" at all. Should be a bit higher + for big seek time devices though not a linear correspondence - most + processes have only a few ms thinktime. + diff -prauN linux-2.6.0-test5/Documentation/block/biodoc.txt wli-2.6.0-test5-bk12-25/Documentation/block/biodoc.txt --- linux-2.6.0-test5/Documentation/block/biodoc.txt 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/Documentation/block/biodoc.txt 2003-09-25 19:15:42.000000000 -0700 @@ -6,6 +6,8 @@ Notes Written on Jan 15, 2002: Suparna Bhattacharya Last Updated May 2, 2002 +September 2003: Updated I/O Scheduler portions + Nick Piggin Introduction: @@ -220,42 +222,8 @@ i/o scheduling algorithm aspects and det It also makes it possible to completely hide the implementation details of the i/o scheduler from block drivers. -New routines to be used instead of accessing the queue directly: - -elv_add_request: Should be called to queue a request -elv_next_request: Should be called to pull of the next request to be serviced - of the queue. It takes care of several things like skipping active requests, - invoking the command pre-builder etc. - -Some new plugins: -e->elevator_next_req_fn - Plugin called to extract the next request to service from the - queue -e->elevator_add_req_fn - Plugin called to add a new request to the queue -e->elevator_init_fn - Plugin called when initializing the queue -e->elevator_exit_fn - Plugin called when destrying the queue - -Elevator Linus and Elevator noop are the existing combinations that can be -directly used, but a driver can provide relevant callbacks, in case -it needs to do something different. - -Elevator noop only attempts to merge requests, but doesn't reorder (sort) -them. Even merging requires a linear scan today (except for the last merged -hint case discussed later) though, which takes take up some CPU cycles. - -[Note: Merging usually helps in general, because there's usually non-trivial -command overhead associated with setting up and starting a command. Sorting, -on the other hand, may not be relevant for intelligent devices that reorder -requests anyway] - -Elevator Linus attempts merging as well as sorting of requests on the queue. -The sorting happens via an insert scan whenever a request comes in. -Often some sorting still makes sense as the depth which most hardware can -handle may be less than the queue lengths during i/o loads. - +I/O scheduler wrappers are to be used instead of accessing the queue directly. +See section 4. The I/O scheduler for details. 1.2 Tuning Based on High level code capabilities @@ -317,32 +285,6 @@ Arjan's proposed request priority scheme requests. Some bits in the bi_rw flags field in the bio structure are intended to be used for this priority information. - Jens has an implementation of a simple deadline i/o scheduler that - makes a best effort attempt to start requests within a given expiry - time limit, along with trying to optimize disk seeks as in the current - elevator. It does this by sorting a request on two lists, one by - the deadline and one by the sector order. It employs a policy that - follows sector ordering as long as a deadline is not violated, and - tries to keep up with deadlines in so far as it can batch up to at - least a certain minimum number of sector ordered requests to reduce - arbitrary disk seeks. This implementation is constructed in a way - that makes it possible to support advanced compound i/o schedulers - as a combination of several low level schedulers with an overall - class-independent scheduler layered above. - -The current elevator scheme provides a latency bound over how many future -requests can "pass" (get placed before) a given request, and this bound -is determined by the request type (read, write). However, it doesn't -prioritize a new request over existing requests in the queue based on its -latency requirement. A new request could of course get serviced before -earlier requests based on the position on disk which it accesses. This is -due to the sort/merge in the basic elevator scan logic, but irrespective -of the request's own priority/latency value. Interestingly the elevator -sequence or the latency bound setting of the new request is unaffected by the -number of existing requests it has passed, i.e. doesn't depend on where -it is positioned in the queue, but only on the number of requests that pass -it in the future. - 1.3 Direct Access to Low level Device/Driver Capabilities (Bypass mode) (e.g Diagnostics, Systems Management) @@ -964,7 +906,74 @@ Aside: 4. The I/O scheduler +I/O schedulers are now per queue. They should be runtime switchable and modular +but aren't yet. Jens has most bits to do this, but the sysfs implementation is +missing. + +A block layer call to the i/o scheduler follows the convention elv_xxx(). This +calls elevator_xxx_fn in the elevator switch (drivers/block/elevator.c). Oh, +xxx and xxx might not match exactly, but use your imagination. If an elevator +doesn't implement a function, the switch does nothing or some minimal house +keeping work. + +4.1. I/O scheduler API + +The functions an elevator may implement are: (* are mandatory) +elevator_merge_fn called to query requests for merge with a bio + +elevator_merge_req_fn " " " with another request + +elevator_merged_fn called when a request in the scheduler has been + involved in a merge. It is used in the deadline + scheduler for example, to reposition the request + if its sorting order has changed. + +*elevator_next_req_fn returns the next scheduled request, or NULL + if there are none (or none are ready). + +*elevator_add_req_fn called to add a new request into the scheduler + +elevator_queue_empty_fn returns true if the merge queue is empty. + Drivers shouldn't use this, but rather check + if elv_next_request is NULL (without losing the + request if one exists!) + +elevator_remove_req_fn This is called when a driver claims ownership of + the target request - it now belongs to the + driver. It must not be modified or merged. + Drivers must not lose the request! A subsequent + call of elevator_next_req_fn must return the + _next_ request. + +elevator_requeue_req_fn called to add a request to the scheduler. This + is used when the request has alrnadebeen + returned by elv_next_request, but hasn't + completed. If this is not implemented then + elevator_add_req_fn is called instead. + +elevator_former_req_fn +elevator_latter_req_fn These return the request before or after the + one specified in disk sort order. Used by the + block layer to find merge possibilities. + +elevator_completed_req_fn called when a request is completed. This might + come about due to being merged with another or + when the device completes the request. + +elevator_may_queue_fn returns true if the scheduler wants to allow the + current context to queue a new request even if + it is over the queue limit. This must be used + very carefully!! + +elevator_set_req_fn +elevator_put_req_fn Must be used to allocate and free any elevator + specific storate for a request. + +elevator_init_fn +elevator_exit_fn Allocate and free any elevator specific storage + for a queue. +4.2 I/O scheduler implementation The generic i/o scheduler algorithm attempts to sort/merge/batch requests for optimal disk scan and request servicing performance (based on generic principles and device capabilities), optimized for: @@ -974,49 +983,58 @@ iii. better utilization of h/w & CPU tim Characteristics: -i. Linked list for O(n) insert/merge (linear scan) right now - -This is just the same as it was in 2.4. - -There is however an added level of abstraction in the operations for adding -and extracting a request to/from the queue, which makes it possible to -try out alternative queue structures without changes to the users of the queue. -Some things like head-active are thus now handled within elv_next_request -making it possible to mark more than one request to be left alone. - -Aside: -1. The use of a merge hash was explored to reduce merge times and to make - elevator_noop close to noop by avoiding the scan for merge. However the - complexity and locking issues introduced wasn't desirable especially as - with multi-page bios the incidence of merges is expected to be lower. -2. The use of binomial/fibonacci heaps was explored to reduce the scan time; - however the idea was given up due to the complexity and added weight of - data structures, complications for handling barriers, as well as the - advantage of O(1) extraction and deletion (performance critical path) with - the existing list implementation vs heap based implementations. - -ii. Utilizes max_phys/hw_segments, and max_request_size parameters, to merge - within the limits that the device can handle (See 3.2.2) - -iii. Last merge hint - -In 2.5, information about the last merge is saved as a hint for the subsequent -request. This way, if sequential data is coming down the pipe, the hint can -be used to speed up merges without going through a scan. +i. Binary tree +AS and deadline i/o schedulers use red black binary trees for disk position +sorting and searching, and a fifo linked list for time-based searching. This +gives good scalability and good availablility of information. Requests are +almost always dispatched in disk sort order, so a cache is kept of the next +request in sort order to prevent binary tree lookups. + +This arrangement is not a generic block layer characteristic however, so +elevators may implement queues as they please. + +ii. Last merge hint +The last merge hint is part of the generic queue layer. I/O schedulers must do +some management on it. For the most part, the most important thing is to make +sure q->last_merge is cleared (set to NULL) when the request on it is no longer +a candidate for merging (for example if it has been sent to the driver). + +The last merge performed is cached as a hint for the subsequent request. If +sequential data is being submitted, the hint is used to perform merges without +any scanning. This is not sufficient when there are multiple processes doing +I/O though, so a "merge hash" is used by some schedulers. + +iii. Merge hash +AS and deadline use a hash table indexed by the last sector of a request. This +enables merging code to quickly look up "back merge" candidates, even when +multiple I/O streams are being performed at once on one disk. + +"Front merges", a new request being merged at the front of an existing request, +are far less common than "back merges" due to the nature of most I/O patterns. +Front merges are handled by the binary trees in AS and deadline schedulers. iv. Handling barrier cases +A request with flags REQ_HARDBARRIER or REQ_SOFTBARRIER must not be ordered +around. That is, they must be processed after all older requests, and before +any newer ones. This includes merges! + +In AS and deadline schedulers, barriers have the effect of flushing the reorder +queue. The performance cost of this will vary from nothing to a lot depending +on i/o patterns and device characteristics. Obviously they won't improve +performance, so their use should be kept to a minimum. + +v. Handling insertion position directives +A request may be inserted with a position directive. The directives are one of +ELEVATOR_INSERT_BACK, ELEVATOR_INSERT_FRONT, ELEVATOR_INSERT_SORT. + +ELEVATOR_INSERT_SORT is a general directive for non-barrier requests. +ELEVATOR_INSERT_BACK is used to insert a barrier to the back of the queue. +ELEVATOR_INSERT_FRONT is used to insert a barrier to the front of the queue, and +overrides the ordering requested by any previous barriers. In practice this is +harmless and required, because it is used for SCSI requeueing. This does not +require flushing the reorder queue, so does not impose a performance penalty. -As mentioned earlier, barrier support is new to 2.5, and the i/o scheduler -has been modified accordingly. - -When a barrier comes in, then since insert happens in the form of a -linear scan, starting from the end, it just needs to be ensured that this -and future scans stops barrier point. This is achieved by skipping the -entire merge/scan logic for a barrier request, so it gets placed at the -end of the queue, and specifying a zero latency for the request containing -the bio so that no future requests can pass it. - -v. Plugging the queue to batch requests in anticipation of opportunities for +vi. Plugging the queue to batch requests in anticipation of opportunities for merge/sort optimizations This is just the same as in 2.4 so far, though per-device unplugging @@ -1051,6 +1069,12 @@ Aside: blk_kick_queue() to unplug a specific queue (right away ?) or optionally, all queues, is in the plan. +4.3 I/O contexts +I/O contexts provide a dynamically allocated per process data area. They may +be used in I/O schedulers, and in the block layer (could be used for IO statis, +priorities for example). See *io_context in drivers/block/ll_rw_blk.c, and +as-iosched.c for an example of usage in an i/o scheduler. + 5. Scalability related changes diff -prauN linux-2.6.0-test5/Documentation/filesystems/Locking wli-2.6.0-test5-bk12-25/Documentation/filesystems/Locking --- linux-2.6.0-test5/Documentation/filesystems/Locking 2003-09-08 12:50:23.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/Documentation/filesystems/Locking 2003-09-28 23:04:07.000000000 -0700 @@ -204,7 +204,7 @@ currently-in-progress I/O. If the filesystem is not called for "sync" and it determines that it would need to block against in-progress I/O to be able to start new I/O against the page the filesystem shoud redirty the page (usually with -__set_page_dirty_nobuffers()), then unlock the page and return zero. +set_page_dirty_nobuffers()), then unlock the page and return zero. This may also be done to avoid internal deadlocks, but rarely. If the filesytem is called for sync then it must wait on any diff -prauN linux-2.6.0-test5/Documentation/filesystems/ntfs.txt wli-2.6.0-test5-bk12-25/Documentation/filesystems/ntfs.txt --- linux-2.6.0-test5/Documentation/filesystems/ntfs.txt 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/Documentation/filesystems/ntfs.txt 2003-09-25 19:15:43.000000000 -0700 @@ -6,8 +6,9 @@ Table of contents ================= - Overview -- Supported mount options +- Web site - Features +- Supported mount options - Known bugs and (mis-)features - Using Software RAID with NTFS - Limitiations when using the MD driver @@ -17,13 +18,59 @@ Table of contents Overview ======== -To mount an NTFS 1.2/3.x (Windows NT4/2000/XP) volume, use the filesystem -type 'ntfs'. The driver currently works only in read-only mode, with no -fault-tolerance or journalling supported. - -For fault tolerance and raid support (i.e. volume and stripe sets), you can use -the kernel's Software RAID / MD driver. See section "Using Software RAID with -NTFS" for details. +Linux-NTFS comes with a number of user-space programs known as ntfsprogs. +These include mkntfs, a full-featured ntfs file system format utility, +ntfsundelete used for recovering files that were unintentionally deleted +from an NTFS volume and ntfsresize which is used to resize an NTFS partition. +See the web site for more information. + +To mount an NTFS 1.2/3.x (Windows NT4/2000/XP/2003) volume, use the file +system type 'ntfs'. The driver currently supports read-only mode (with no +fault-tolerance, encryption or journalling) and very limited, but safe, write +support. + +For fault tolerance and raid support (i.e. volume and stripe sets), you can +use the kernel's Software RAID / MD driver. See section "Using Software RAID +with NTFS" for details. + + +Web site +======== + +There is plenty of additional information on the linux-ntfs web site +at http://linux-ntfs.sourceforge.net/ + +The web site has a lot of additional information, such as a comprehensive +FAQ, documentation on the NTFS on-disk format, informaiton on the Linux-NTFS +userspace utilities, etc. + + +Features +======== + +- This is a complete rewrite of the NTFS driver that used to be in the kernel. + This new driver implements NTFS read support and is functionally equivalent + to the old ntfs driver. +- The new driver has full support for sparse files on NTFS 3.x volumes which + the old driver isn't happy with. +- The new driver supports execution of binaries due to mmap() now being + supported. +- The new driver supports loopback mounting of files on NTFS which is used by + some Linux distributions to enable the user to run Linux from an NTFS + partition by creating a large file while in Windows and then loopback + mounting the file while in Linux and creating a Linux filesystem on it that + is used to install Linux on it. +- A comparison of the two drivers using: + time find . -type f -exec md5sum "{}" \; + run three times in sequence with each driver (after a reboot) on a 1.4GiB + NTFS partition, showed the new driver to be 20% faster in total time elapsed + (from 9:43 minutes on average down to 7:53). The time spent in user space + was unchanged but the time spent in the kernel was decreased by a factor of + 2.5 (from 85 CPU seconds down to 33). +- The driver does not support short file names in general. For backwards + compatibility, we implement access to files using their short file names if + they exist. The driver will not create short file names however, and a rename + will discard any existing short file name. Supported mount options @@ -33,31 +80,31 @@ In addition to the generic mount options mount command (man 8 mount, also see man 5 fstab), the NTFS driver supports the following mount options: -iocharset=name Deprecated option. Still supported but please use - nls=name in the future. See description for nls=name. +iocharset=name Deprecated option. Still supported but please use + nls=name in the future. See description for nls=name. nls=name Character set to use when returning file names. Unlike VFAT, NTFS suppresses names that contain - unconvertible characters. Note that most character + unconvertible characters. Note that most character sets contain insufficient characters to represent all - possible Unicode characters that can exist on NTFS. To - be sure you are not missing any files, you are advised - to use nls=utf8 which is capable of representing all - Unicode characters. + possible Unicode characters that can exist on NTFS. + To be sure you are not missing any files, you are + advised to use nls=utf8 which is capable of + representing all Unicode characters. -utf8= Option no longer supported. Currently mapped to +utf8= Option no longer supported. Currently mapped to nls=utf8 but please use nls=utf8 in the future and make sure utf8 is compiled either as module or into - the kernel. See description for nls=name. + the kernel. See description for nls=name. uid= gid= umask= Provide default owner, group, and access mode mask. - These options work as documented in mount(8). By + These options work as documented in mount(8). By default, the files/directories are owned by root and he/she has read and write permissions, as well as - browse permission for directories. No one else has any - access permissions. I.e. the mode on all files is by + browse permission for directories. No one else has any + access permissions. I.e. the mode on all files is by default rw------- and for directories rwx------, a consequence of the default fmask=0177 and dmask=0077. Using a umask of zero will grant all permissions to @@ -74,7 +121,7 @@ sloppy= If sloppy is specified, i any unknown options are found. show_sys_files= If show_sys_files is specified, show the system files - in directory listings. Otherwise the default behaviour + in directory listings. Otherwise the default behaviour is to hide the system files. Note that even when show_sys_files is specified, "$MFT" will not be visible due to bugs/mis-features in glibc. @@ -85,15 +132,15 @@ show_sys_files= If show_sys_files case_sensitive= If case_sensitive is specified, treat all file names as case sensitive and create file names in the POSIX - namespace. Otherwise the default behaviour is to treat + namespace. Otherwise the default behaviour is to treat file names as case insensitive and to create file names - in the WIN32/LONG name space. Note, the Linux NTFS + in the WIN32/LONG name space. Note, the Linux NTFS driver will never create short file names and will remove them on rename/delete of the corresponding long file name. Note that files remain accessible via their short file - name, if it exists. If case_sensitive, you will need to - provide the correct case of the short file name. + name, if it exists. If case_sensitive, you will need + to provide the correct case of the short file name. errors=opt What to do when critical file system errors are found. Following values can be used for "opt": @@ -102,27 +149,27 @@ errors=opt What to do when critical fil bad so it is no longer accessed, and then continue. recover: At present only supported is recovery of - the boot sector from the backup copy. If a - read-only mount, the recovery is done in - memory only and not written to disk. + the boot sector from the backup copy. + If read-only mount, the recovery is done + in memory only and not written to disk. Note that the options are additive, i.e. specifying: errors=continue,errors=recover - This means the driver will attempt to recover and if - that fails it will clean-up as much as possible and + means the driver will attempt to recover and if that + fails it will clean-up as much as possible and continue. mft_zone_multiplier= Set the MFT zone multiplier for the volume (this setting is not persistent across mounts and can be changed from mount to mount but cannot be changed on - remount). Values of 1 to 4 are allowed, 1 being the - default. The MFT zone multiplier determines how much - space is reserved for the MFT on the volume. If all + remount). Values of 1 to 4 are allowed, 1 being the + default. The MFT zone multiplier determines how much + space is reserved for the MFT on the volume. If all other space is used up, then the MFT zone will be shrunk dynamically, so this has no impact on the - amount of free space. However, it can have an impact + amount of free space. However, it can have an impact on performance by affecting fragmentation of the MFT. - In general use the default. If you have a lot of small - files then use a higher value. The values have the + In general use the default. If you have a lot of small + files then use a higher value. The values have the following meaning: Value MFT zone size (% of volume size) 1 12.5% @@ -132,37 +179,14 @@ mft_zone_multiplier= Set the MFT zone mu Note this option is irrelevant for read-only mounts. -Features -======== - -- This is a complete rewrite of the NTFS driver that used to be in the kernel. - This new driver implements NTFS read support and is functionally equivalent - to the old ntfs driver. -- The new driver has full support for sparse files on NTFS 3.x volumes which - the old driver isn't happy with. -- The new driver supports execution of binaries due to mmap() now being - supported. -- A comparison of the two drivers using: - time find . -type f -exec md5sum "{}" \; - run three times in sequence with each driver (after a reboot) on a 1.4GiB - NTFS partition, showed the new driver to be 20% faster in total time elapsed - (from 9:43 minutes on average down to 7:53). The time spent in user space - was unchanged but the time spent in the kernel was decreased by a factor of - 2.5 (from 85 CPU seconds down to 33). -- The driver does not support short file names in general. For backwards - compatibility, we implement access to files using their short file names if - they exist. The driver will not create short file names however, and a rename - will discard any existing short file name. - - Known bugs and (mis-)features ============================= - The link count on each directory inode entry is set to 1, due to Linux not - supporting directory hard links. This may well confuse some user space + supporting directory hard links. This may well confuse some user space applications, since the directory names will have the same inode numbers. - This also speeds up ntfs_read_inode() immensely. And we haven't found any - problems with this approach so far. If you find a problem with this, please + This also speeds up ntfs_read_inode() immensely. And we haven't found any + problems with this approach so far. If you find a problem with this, please let us know. @@ -176,11 +200,11 @@ Using Software RAID with NTFS For support of volume and stripe sets, use the kernel's Software RAID / MD driver and set up your /etc/raidtab appropriately (see man 5 raidtab). -Linear volume sets, i.e. linear raid, as well as stripe sets, i.e. raid level 0, -have been tested and work fine (though see section "Limitiations when using the -MD driver with NTFS volumes" especially if you want to use linear raid). Even -though untested, there is no reason why mirrors, i.e. raid level 1, and stripes -with parity, i.e. raid level 5, should not work, too. +Linear volume sets, i.e. linear raid, as well as stripe sets, i.e. raid level +0, have been tested and work fine (though see section "Limitiations when using +the MD driver with NTFS volumes" especially if you want to use linear raid). +Even though untested, there is no reason why mirrors, i.e. raid level 1, and +stripes with parity, i.e. raid level 5, should not work, too. You have to use the "persistent-superblock 0" option for each raid-disk in the NTFS volume/stripe you are configuring in /etc/raidtab as the persistent @@ -207,15 +231,16 @@ For linear raid, just change the raid-le mirrors, change it to "raid-level 1", and for stripe sets with parity, change it to "raid-level 5". -Note for stripe sets with parity you will also need to tell the MD driver which -parity algorithm to use by specifying the option "parity-algorithm which", -where you need to replace "which" with the name of the algorithm to use (see -man 5 raidtab for available algorithms) and you will have to try the different -available algorithms until you find one that works. Make sure you are working -read-only when playing with this as you may damage your data otherwise. If you -find which algorithm works please let us know (email the linux-ntfs developers -list linux-ntfs-dev@lists.sourceforge.net or drop in on IRC in channel #ntfs -on the irc.openprojects.net network) so we can update this documentation. +Note for stripe sets with parity you will also need to tell the MD driver +which parity algorithm to use by specifying the option "parity-algorithm +which", where you need to replace "which" with the name of the algorithm to +use (see man 5 raidtab for available algorithms) and you will have to try the +different available algorithms until you find one that works. Make sure you +are working read-only when playing with this as you may damage your data +otherwise. If you find which algorithm works please let us know (email the +linux-ntfs developers list linux-ntfs-dev@lists.sourceforge.net or drop in on +IRC in channel #ntfs on the irc.freenode.net network) so we can update this +documentation. Once the raidtab is setup, run for example raid0run -a to start all devices or raid0run /dev/md0 to start a particular md device, in this case /dev/md0. @@ -232,14 +257,14 @@ Limitiations when using the MD driver ===================================== Using the md driver will not work properly if any of your NTFS partitions have -an odd number of sectors. This is especially important for linear raid as all +an odd number of sectors. This is especially important for linear raid as all data after the first partition with an odd number of sectors will be offset by one or more sectors so if you mount such a partition with write support you will cause massive damage to the data on the volume which will only become apparent when you try to use the volume again under Windows. So when using linear raid, make sure that all your partitions have an even -number of sectors BEFORE attempting to use it. You have been warned! +number of sectors BEFORE attempting to use it. You have been warned! ChangeLog diff -prauN linux-2.6.0-test5/Documentation/kbuild/00-INDEX wli-2.6.0-test5-bk12-25/Documentation/kbuild/00-INDEX --- linux-2.6.0-test5/Documentation/kbuild/00-INDEX 2003-09-08 12:49:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/Documentation/kbuild/00-INDEX 2003-09-25 19:15:43.000000000 -0700 @@ -4,3 +4,5 @@ kconfig-language.txt - specification of Config Language, the language in Kconfig files makefiles.txt - developer information for linux kernel makefiles +modules.txt + - how to build modules and to install them diff -prauN linux-2.6.0-test5/Documentation/kbuild/makefiles.txt wli-2.6.0-test5-bk12-25/Documentation/kbuild/makefiles.txt --- linux-2.6.0-test5/Documentation/kbuild/makefiles.txt 2003-09-08 12:50:19.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/Documentation/kbuild/makefiles.txt 2003-09-25 19:15:43.000000000 -0700 @@ -256,7 +256,7 @@ more details, with real examples. Example: #fs/Makefile - obj-$(CONfIG_EXT2_FS) += ext2/ + obj-$(CONFIG_EXT2_FS) += ext2/ If CONFIG_EXT2_FS is set to either 'y' (built-in) or 'm' (modular) the corresponding obj- variable will be set, and kbuild will descend diff -prauN linux-2.6.0-test5/Documentation/kbuild/modules.txt wli-2.6.0-test5-bk12-25/Documentation/kbuild/modules.txt --- linux-2.6.0-test5/Documentation/kbuild/modules.txt 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/Documentation/kbuild/modules.txt 2003-09-25 19:15:43.000000000 -0700 @@ -0,0 +1,28 @@ +For now this is a raw copy from the old Documentation/modules.txt, +which was removed in 2.6.0-test5. +The information herein is correct but not complete. + +Installing modules in a non-standard location +--------------------------------------------- +When the modules needs to be installed under another directory +the INSTALL_MOD_PATH can be used to prefix "/lib/modules" as seen +in the following example: + +make INSTALL_MOD_PATH=/frodo modules_install + +This will install the modules in the directory /frodo/lib/modules. +/frodo can be a NFS mounted filesystem on another machine, allowing +out-of-the-box support for installation on remote machines. + + +Compiling modules outside the official kernel +--------------------------------------------- +Often modules are developed outside the official kernel. +To keep up with changes in the build system the most portable way +to compile a module outside the kernel is to use the following command-line: + +make -C path/to/kernel/src SUBDIRS=$PWD modules + +This requires that a makefile exits made in accordance to +Documentation/kbuild/makefiles.txt. + diff -prauN linux-2.6.0-test5/Documentation/kernel-parameters.txt wli-2.6.0-test5-bk12-25/Documentation/kernel-parameters.txt --- linux-2.6.0-test5/Documentation/kernel-parameters.txt 2003-09-08 12:50:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/Documentation/kernel-parameters.txt 2003-09-25 19:15:43.000000000 -0700 @@ -393,7 +393,7 @@ running once the system is up. See Documentation/ide.txt. idle= [HW] - Format: poll + Format: idle=poll or idle=halt in2000= [HW,SCSI] See header of drivers/scsi/in2000.c. @@ -788,6 +788,10 @@ running once the system is up. psmouse_noext [HW,MOUSE] Disable probing for PS2 mouse protocol extensions + psmouse_resetafter= + [HW,MOUSE] Try to reset Synaptics Touchpad after so many + bad packets (0 = never). + pss= [HW,OSS] Personal Sound System (ECHO ESC614) Format: ,,,,, diff -prauN linux-2.6.0-test5/Documentation/modules.txt wli-2.6.0-test5-bk12-25/Documentation/modules.txt --- linux-2.6.0-test5/Documentation/modules.txt 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/Documentation/modules.txt 1969-12-31 16:00:00.000000000 -0800 @@ -1,264 +0,0 @@ -This file describes the strategy for dynamically loadable modules -in the Linux kernel. This is not a technical description on -the internals of module, but mostly a sample of how to compile -and use modules. - -Note: You should ensure that the module-init-tools-X.Y.Z.tar.gz you -are using is the most up to date one for this kernel. Some older -modules packages aren't aware of some of the newer modular features -that the kernel now supports. The current required version is listed -in the file linux/Documentation/Changes. - -In the beginning... -------------------- - -Anyway, your first step is to compile the kernel, as explained in the -file linux/README. It generally goes like: - - make *config <= usually menuconfig or xconfig - make clean - make zImage or make zlilo - -In "make config", you select what you want to include in the "resident" -kernel and what features you want to have available as loadable modules. -You will generally select the minimal resident set that is needed to boot: - - The filesystem of your root partition - A scsi driver, but see below for a list of SCSI modules! - Normal hard drive support - Net support (CONFIG_NET) - TCP/IP support (CONFIG_INET), but no drivers! - - plus those things that you just can't live without... - -The set of modules is constantly increasing, and you will be able to select -the option "m" in "make menuconfig" for those features that the current kernel -can offer as loadable modules. - -You also have a possibility to create modules that are less dependent on -the kernel version. This option can be selected during "make *config", by -enabling CONFIG_MODVERSIONS, and is most useful on "stable" kernel versions, -such as the kernels from the 2. series. -If you have modules that are based on sources that are not included in -the official kernel sources, you will certainly like this option... -See below how to compile modules outside the official kernel. - -Here is a sample of the available modules included in the kernel sources: - - Most filesystems: minix, msdos, umsdos, sysv, isofs, hpfs, - smbfs, nfs - - Mid-level SCSI support (required by top and low level scsi drivers). - Most low-level SCSI drivers: (i.e. aha1542, in2000) - All SCSI high-level drivers: disk, tape, cdrom, generic. - - Most Ethernet drivers: (too many to list, please see the file - ./Documentation/networking/net-modules.txt) - - Most CDROM drivers: - aztcd: Aztech,Orchid,Okano,Wearnes - cm206: Philips/LMS CM206 - gscd: Goldstar GCDR-420 - mcd, mcdx: Mitsumi LU005, FX001 - optcd: Optics Storage Dolphin 8000AT - sjcd: Sanyo CDR-H94A - sbpcd: Matsushita/Panasonic CR52x, CR56x, CD200, - Longshine LCS-7260, TEAC CD-55A - sonycd535: Sony CDU-531/535, CDU-510/515 - - And a lot of misc modules, such as: - lp: line printer - binfmt_elf: elf loader - binfmt_java: java loader - isp16: cdrom interface - serial: the serial (tty) interface - -When you have made the kernel, you create the modules by doing: - - make modules - -This will compile all modules. A module is identified by the -extension .ko, for kernel object. -Now, after you have created all your modules, you should also do: - - make modules_install - -This will copy all newly made modules into subdirectories under -"/lib/modules/kernel_release/", where "kernel_release" is something -like 2.5.54, or whatever the current kernel version is. -Note: Installing modules may require root privileges. - -As soon as you have rebooted the newly made kernel, you can install -and remove modules at will with the utilities: "insmod" and "rmmod". -After reading the man-page for insmod, you will also know how easy -it is to configure a module when you do "insmod" (hint: symbol=value). - -Installing modules in a non-standard location ---------------------------------------------- -When the modules needs to be installed under another directory -the INSTALL_MOD_PATH can be used to prefix "/lib/modules" as seen -in the following example: - -make INSTALL_MOD_PATH=/frodo modules_install - -This will install the modules in the directory /frodo/lib/modules. -/frodo can be a NFS mounted filesystem on another machine, allowing -out-of-the-box support for installation on remote machines. - - -Compiling modules outside the official kernel ---------------------------------------------- -Often modules are developed outside the official kernel. -To keep up with changes in the build system the most portable way -to compile a module outside the kernel is to use the following command-line: - -make -C path/to/kernel/src SUBDIRS=$PWD modules - -This requires that a makefile exits made in accordance to -Documentation/kbuild/makefiles.txt. - -Nifty features: ---------------- - -You also have access to two utilities: "modprobe" and "depmod", where -modprobe is a "wrapper" for (or extension to) "insmod". -These utilities use (and maintain) a set of files that describe all the -modules that are available for the current kernel in the /lib/modules -hierarchy as well as their interdependencies. - -Using the modprobe utility, you can load any module like this: - - /sbin/modprobe module - -without paying much attention to which kernel you are running, or what -other modules this module depends on. - -With the help of the modprobe configuration file: "/etc/modules.conf" -you can tune the behaviour of modprobe in many ways, including an -automatic setting of insmod options for each module. -And, yes, there _are_ man-pages for all this... - -To use modprobe successfully, you generally place the following -command in your /etc/rc.d/rc.S script. (Read more about this in the -"rc.hints" file in the module utilities package, -"module-init-tools-x.y.z.tar.gz".) - - /sbin/depmod -a - -This computes the dependencies between the different modules. -Then if you do, for example - - /sbin/modprobe umsdos - -you will automatically load _both_ the msdos and umsdos modules, -since umsdos runs piggyback on msdos. - - -Using modinfo: --------------- - -Sometimes you need to know what parameters are accepted by a -module or you've found a bug and want to contact the maintainer. -Then modinfo comes in very handy. - -Every module (normally) contains the author/maintainer, -a description and a list of parameters. - -For example "modinfo -a eepro100" will return: - - Maintainer: Andrey V. Savochkin - -and "modinfo -d eepro100" will return a description: - - Intel i82557/i82558 PCI EtherExpressPro driver - -and more important "modinfo -p eepro100" will return this list: - - debug int - options int array (min = 1, max = 8) - full_duplex int array (min = 1, max = 8) - congenb int - txfifo int - rxfifo int - txdmacount int - rxdmacount int - rx_copybreak int - max_interrupt_work int - multicast_filter_limit int - - -The "ultimate" utility: ------------------------ - -OK, you have read all of the above, and feel amply impressed... -Now, we tell you to forget all about how to install and remove -loadable modules... -With the kerneld daemon, all of these chores will be taken care of -automatically. Just answer "Y" to CONFIG_KERNELD in "make config", -and make sure that /sbin/kerneld is started as soon as possible -after boot and that "/sbin/depmod -a" has been executed for the -current kernel. (Read more about this in the module utilities package.) - -Whenever a program wants the kernel to use a feature that is only -available as a loadable module, and if the kernel hasn't got the -module installed yet, the kernel will ask the kerneld daemon to take -care of the situation and make the best of it. - -This is what happens: - - - The kernel notices that a feature is requested that is not - resident in the kernel. - - The kernel sends a message to kerneld, with a symbolic - description of the requested feature. - - The kerneld daemon asks e.g. modprobe to load a module that - fits this symbolic description. - - modprobe looks into its internal "alias" translation table - to see if there is a match. This table can be reconfigured - and expanded by having "alias" lines in "/etc/modules.conf". - - insmod is then asked to insert the module(s) that modprobe - has decided that the kernel needs. Every module will be - configured according to the "options" lines in "/etc/modules.conf". - - modprobe exits and kerneld tells the kernel that the request - succeeded (or failed...) - - The kernel uses the freshly installed feature just as if it - had been configured into the kernel as a "resident" part. - -The icing of the cake is that when an automatically installed module -has been unused for a period of time (usually 1 minute), the module -will be automatically removed from the kernel as well. - -This makes the kernel use the minimal amount of memory at any given time, -making it available for more productive use than as just a placeholder for -unused code. - -Actually, this is only a side-effect from the _real_ benefit of kerneld: -You only have to create a minimal kernel, that is more or less independent -of the actual hardware setup. The setup of the "virtual" kernel is -instead controlled by a configuration file as well as the actual usage -pattern of the current machine and its kernel. -This should be good news for maintainers of multiple machines as well as -for maintainers of distributions. - -To use kerneld with the least amount of "hassle", you need modprobe from -a release that can be considered "recent" w.r.t. your kernel, and also -a configuration file for modprobe ("/etc/modules.conf"). -Since modprobe already knows about most modules, the minimal configuration -file could look something like this: - - alias scsi_hostadapter aha1542 # or whatever SCSI adapter you have - alias eth0 3c509 # or whatever net adapter you have - # you might need an "options" line for some net adapters: - options 3c509 io=0x300 irq=10 - # you might also need an "options" line for some other module: - options cdu31a cdu31a_port=0x1f88 sony_pas_init=1 - -You could add these lines as well, but they are only "cosmetic": - - alias net-pf-3 off # no ax25 module available (yet) - alias net-pf-4 off # if you don't use the ipx module - alias net-pf-5 off # if you don't use the appletalk module - - -Written by: - Jacques Gelinas - Bjorn Ekwall diff -prauN linux-2.6.0-test5/Documentation/networking/bonding.txt wli-2.6.0-test5-bk12-25/Documentation/networking/bonding.txt --- linux-2.6.0-test5/Documentation/networking/bonding.txt 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/Documentation/networking/bonding.txt 2003-09-25 19:15:43.000000000 -0700 @@ -527,9 +527,9 @@ Verifying Bond Configuration 1) Bonding information files ---------------------------- -The bonding driver information files reside in the /proc/net/bond* directories. +The bonding driver information files reside in the /proc/net/bonding directory. -Sample contents of /proc/net/bond0/info after the driver is loaded with +Sample contents of /proc/net/bonding/bond0 after the driver is loaded with parameters of mode=0 and miimon=1000 is shown below. Bonding Mode: load balancing (round-robin) diff -prauN linux-2.6.0-test5/Documentation/networking/ifenslave.c wli-2.6.0-test5-bk12-25/Documentation/networking/ifenslave.c --- linux-2.6.0-test5/Documentation/networking/ifenslave.c 2003-09-08 12:49:54.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/Documentation/networking/ifenslave.c 2003-09-25 19:15:43.000000000 -0700 @@ -140,6 +140,7 @@ static const char *howto_msg = #include #include #include +#include #include #include #include diff -prauN linux-2.6.0-test5/Documentation/smp.tex wli-2.6.0-test5-bk12-25/Documentation/smp.tex --- linux-2.6.0-test5/Documentation/smp.tex 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/Documentation/smp.tex 1969-12-31 16:00:00.000000000 -0800 @@ -1,346 +0,0 @@ -From: michael@Physik.Uni-Dortmund.DE (Michael Dirkmann) - -thanks for your information. Attached is the tex-code of your -SMP-documentation : --=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -\documentclass[]{article} -\parindent0.0cm -\parskip0.2cm - -\begin{document} - -\begin{center} -\LARGE \bf -An Implementation Of Multiprocessor Linux -\normalsize -\end{center} - -{ \it -This document describes the implementation of a simple SMP -Linux kernel extension and how to use this to develop SMP Linux kernels for -architectures other than the Intel MP v1.1 architecture for Pentium and 486 -processors.} - -\hfill Alan Cox, 1995 - - -The author wishes to thank Caldera Inc. ( http://www.caldera.com ) -whose donation of an ASUS dual Pentium board made this project possible, -and Thomas Radke, whose initial work on multiprocessor Linux formed -the backbone of this project. - -\section{Background: The Intel MP specification.} -Most IBM PC style multiprocessor motherboards combine Intel 486 or Pentium -processors and glue chipsets with a hardware/software specification. The -specification places much of the onus for hard work on the chipset and -hardware rather than the operating system. - -The Intel Pentium processors have a wide variety of inbuilt facilities for -supporting multiprocessing, including hardware cache coherency, built in -interprocessor interrupt handling and a set of atomic test and set, -exchange and similar operations. The cache coherency in particular makes the -operating system's job far easier. - -The specification defines a detailed configuration structure in ROM that -the boot up processor can read to find the full configuration of the -processors and buses. It also defines a procedure for starting up the -other processors. - - -\section{Mutual Exclusion Within A Single Processor Linux Kernel} -For any kernel to function in a sane manner it has to provide internal -locking and protection of its own tables to prevent two processes updating -them at once and for example allocating the same memory block. There are -two strategies for this within current Unix and Unixlike kernels. -Traditional Unix systems from the earliest of days use a scheme of 'Coarse -Grained Locking' where the entire kernel is protected by a small number of -locks only. Some modern systems use fine grained locking. Because fine -grained locking has more overhead it is normally used only on -multiprocessor kernels and real time kernels. In a real time kernel the -fine grained locking reduces the amount of time locks are held and reduces -the critical (to real time programming at least) latency times. - -Within the Linux kernel certain guarantees are made. No process running in -kernel mode will be pre-empted by another kernel mode process unless it -voluntarily sleeps. This ensures that blocks of kernel code are -effectively atomic with respect to other processes and greatly simplifies -many operations. Secondly interrupts may pre-empt a kernel running process, -but will always return to that process. A process in kernel mode may -disable interrupts on the processor and guarantee such an interruption will -not occur. The final guarantee is that an interrupt will not be pre-empted -by a kernel task. That is interrupts will run to completion or be -pre-empted by other interrupts only. - -The SMP kernel chooses to continue these basic guarantees in order to make -initial implementation and deployment easier. A single lock is maintained -across all processors. This lock is required to access the kernel space. -Any processor may hold it and once it is held may also re-enter the kernel -for interrupts and other services whenever it likes until the lock is -relinquished. This lock ensures that a kernel mode process will not be -pre-empted and ensures that blocking interrupts in kernel mode behaves -correctly. This is guaranteed because only the processor holding the lock -can be in kernel mode, only kernel mode processes can disable interrupts -and only the processor holding the lock may handle an interrupt. - -Such a choice is however poor for performance. In the longer term it is -necessary to move to finer grained parallelism in order to get the best -system performance. This can be done hierarchically by gradually refining -the locks to cover smaller areas. With the current kernel highly CPU bound -process sets perform well but I/O bound task sets can easily degenerate to -near single processor performance levels. This refinement will be needed to -get the best from Linux/SMP. - -\subsection{Changes To The Portable Kernel Components} -The kernel changes are split into generic SMP support changes and -architecture specific changes necessary to accommodate each different -processor type Linux is ported to. - - -\subsubsection{Initialisation} -The first problem with a multiprocessor kernel is starting the other -processors up. Linux/SMP defines that a single processor enters the normal -kernel entry point start\_kernel(). Other processors are assumed not to be -started or to have been captured elsewhere. The first processor begins the -normal Linux initialisation sequences and sets up paging, interrupts and -trap handlers. After it has obtained the processor information about the -boot CPU, the architecture specific function - - -{\tt \bf{void smp\_store\_cpu\_info(int processor\_id) }} - -is called to store any information about the processor into a per processor -array. This includes things like the bogomips speed ratings. - -Having completed the kernel initialisation the architecture specific -function - -{\tt \bf void smp\_boot\_cpus(void) } - -is called and is expected to start up each other processor and cause it to -enter start\_kernel() with its paging registers and other control -information correctly loaded. Each other processor skips the setup except -for calling the trap and irq initialisation functions that are needed on -some processors to set each CPU up correctly. These functions will -probably need to be modified in existing kernels to cope with this. - - -Each additional CPU then calls the architecture specific function - -{\tt \bf void smp\_callin(void)} - -which does any final setup and then spins the processor while the boot -up processor forks off enough idle threads for each processor. This is -necessary because the scheduler assumes there is always something to run. -Having generated these threads and forked init the architecture specific - -{\tt \bf void smp\_commence(void)} - -function is invoked. This does any final setup and indicates to the system -that multiprocessor mode is now active. All the processors spinning in the -smp\_callin() function are now released to run the idle processes, which -they will run when they have no real work to process. - - -\subsubsection{Scheduling} -The kernel scheduler implements a simple but very effective task -scheduler. The basic structure of this scheduler is unchanged in the -multiprocessor kernel. A processor field is added to each task, and this -maintains the number of the processor executing a given task, or a magic -constant (NO\_PROC\_ID) indicating the job is not allocated to a processor. - -Each processor executes the scheduler itself and will select the next task -to run from all runnable processes not allocated to a different processor. -The algorithm used by the selection is otherwise unchanged. This is -actually inadequate for the final system because there are advantages to -keeping a process on the same CPU, especially on processor boards with per -processor second level caches. - -Throughout the kernel the variable 'current' is used as a global for the -current process. In Linux/SMP this becomes a macro which expands to -current\_set[smp\_processor\_id()]. This enables almost the entire kernel to -be unaware of the array of running processors, but still allows the SMP -aware kernel modules to see all of the running processes. - -The fork system call is modified to generate multiple processes with a -process id of zero until the SMP kernel starts up properly. This is -necessary because process number 1 must be init, and it is desirable that -all the system threads are process 0. - -The final area within the scheduling of processes that does cause problems -is the fact the uniprocessor kernel hard codes tests for the idle threads -as task[0] and the init process as task[1]. Because there are multiple idle -threads it is necessary to replace these with tests that the process id is -0 and a search for process ID 1, respectively. - -\subsubsection{Memory Management} -The memory management core of the existing Linux system functions -adequately within the multiprocessor framework providing the locking is -used. Certain processor specific areas do need changing, in particular -invalidate() must invalidate the TLBs of all processors before it returns. - - -\subsubsection{Miscellaneous Functions} -The portable SMP code rests on a small set of functions and variables -that are provided by the processor specification functionality. These are - -{\tt \bf int smp\_processor\_id(void) } - -which returns the identity of the processor the call is executed upon. This -call is assumed to be valid at all times. This may mean additional tests -are needed during initialisation. - - -{\tt \bf int smp\_num\_cpus;} - -This is the number of processors in the system. \ - -{\tt \bf void smp\_message\_pass(int target, int msg, unsigned long data, - int wait)} - -This function passes messages between processors. At the moment it is not -sufficiently defined to sensibly document and needs cleaning up and further -work. Refer to the processor specific code documentation for more details. - - -\subsection{Architecture Specific Code For the Intel MP Port} -The architecture specific code for the Intel port splits fairly cleanly -into four sections. Firstly the initialisation code used to boot the -system, secondly the message handling and support code, thirdly the -interrupt and kernel syscall entry function handling and finally the -extensions to standard kernel facilities to cope with multiple processors. - -\subsubsection{Initialisation} -The Intel MP architecture captures all the processors except for a single -processor known as the 'boot processor' in the BIOS at boot time. Thus a -single processor enters the kernel bootup code. The first processor -executes the bootstrap code, loads and uncompresses the kernel. Having -unpacked the kernel it sets up the paging and control registers then enters -the C kernel startup. - -The assembler startup code for the kernel is modified so that it can be -used by the other processors to do the processor identification and various -other low level configurations but does not execute those parts of the -startup code that would damage the running system (such as clearing the BSS -segment). - -In the initialisation done by the first processor the arch/i386/mm/init -code is modified to scan the low page, top page and BIOS for intel MP -signature blocks. This is necessary because the MP signature blocks must -be read and processed before the kernel is allowed to allocate and destroy -the page at the top of low memory. Having established the number of -processors it reserves a set of pages to provide a stack come boot up area -for each processor in the system. These must be allocated at startup to -ensure they fall below the 1Mb boundary. - -Further processors are started up in smp\_boot\_cpus() by programming the -APIC controller registers and sending an inter-processor interrupt (IPI) to -the processor. This message causes the target processor to begin executing -code at the start of any page of memory within the lowest 1Mb, in 16bit -real mode. The kernel uses the single page it allocated for each processor -to use as stack. Before booting a given CPU the relocatable code from -trampoline.S and trampoline32.S is copied to the bottom of its stack page -and used as the target for the startup. - -The trampoline code calculates the desired stack base from the code -segment (since the code segment on startup is the bottom of the stack), - enters 32bit mode and jumps to the kernel entry assembler. This as -described above is modified to only execute the parts necessary for each -processor, and then to enter start\_kernel(). On entering the kernel the -processor initialises its trap and interrupt handlers before entering -smp\_callin(), where it reports its status and sets a flag that causes the -boot processor to continue and look for further processors. The processor -then spins until smp\_commence() is invoked. - -Having started each processor up the smp\_commence( ) function flips a -flag. Each processor spinning in smp\_callin() then loads the task register -with the task state segment (TSS) of its idle thread as is needed for task -switching. - -\subsubsection{Message Handling and Support Code} -The architecture specific code implements the smp\_processor\_id() function -by querying the APIC logical identity register. Because the APIC isn't -mapped into the kernel address space at boot, the initial value returned is -rigged by setting the APIC base pointer to point at a suitable constant. -Once the system starts doing the SMP setup (in smp\_boot\_cpus()), the APIC -is mapped with a vremap() call and the apic pointer is adjusted -appropriately. From then on the real APIC logical identity register is -read. - -Message passing is accomplished using a pair of IPIs on interrupt 13 -(unused by the 80486 FPUs in SMP mode) and interrupt 16. Two are used in -order to separate messages that cannot be processed until the receiver -obtains the kernel spinlock from messages that can be processed -immediately. In effect IRQ 13 is a fast IRQ handler that does not obtain -the locks, and cannot cause a reschedule, while IRQ 16 is a slow IRQ that -must acquire the kernel spinlocks and can cause a reschedule. This -interrupt is used for passing on slave timer messages from the processor -that receives the timer interrupt to the rest of the processors, so that -they can reschedule running tasks. - - -\subsubsection{Entry And Exit Code} -A single spinlock protects the entire kernel. The interrupt handlers, the -syscall entry code and the exception handlers all acquire the lock before -entering the kernel proper. When the processor is trying to acquire the -spinlock it spins continually on the lock with interrupts disabled. This -causes a specific deadlock problem. The lock owner may need to send an -invalidate request to the rest of the processors and wait for these to -complete before continuing. A processor spinning on the lock would not be -able to do this. Thus the loop of the spinlock tests and handles invalidate -requests. If the invalidate bit for the spinning CPU is set the processor -invalidates its TLB and atomically clears the bit. When the spinlock is -obtained that processor will take an IPI and in the IPI test the bit and -skip the invalidate as the bit is clear. - -One complexity of the spinlock is that a process running in kernel mode -can sleep voluntarily and be pre-empted. A switch from such a process to a -process executing in user space may reduce the lock count. To track this -the kernel uses a syscall\_count and a per process lock\_depth parameter to -track the kernel lock state. The switch\_to() function is modified in SMP -mode to adjust the lock appropriately. - -The final problem is the idle thread. In the single processor kernel the -idle thread executes 'hlt' instructions. This saves power and reduces the -running temperature of the processors when they are idle. However it means -the process spends all its time in kernel mode and would thus hold the -kernel spinlock. The SMP idle thread continually reschedules a new task and -returns to user mode. This is far from ideal and will be modified to use -'hlt' instructions and release the spinlock soon. Using 'hlt' is even more -beneficial on a multiprocessor system as it almost completely takes an idle -processor off the bus. - -Interrupts are distributed by an i82489 APIC. This chip is set up to work -as an emulation of the traditional PC interrupt controllers when the -machine boots (so that an Intel MP machine boots one CPU and PC -compatible). The kernel has all the relevant locks but does not yet -reprogram the 82489 to deliver interrupts to arbitrary processors as it -should. This requires further modification of the standard Linux interrupt -handling code, and is particularly messy as the interrupt handler behaviour -has to change as soon as the 82489 is switched into SMP mode. - - -\subsubsection{Extensions To Standard Facilities} -The kernel maintains a set of per processor control information such as -the speed of the processor for delay loops. These functions on the SMP -kernel look the values up in a per processor array that is set up from the -data generated at boot up by the smp\_store\_cpu\_info() function. This -includes other facts such as whether there is an FPU on the processor. The -current kernel does not handle floating point correctly, this requires some -changes to the techniques the single CPU kernel uses to minimise floating -point processor reloads. - -The highly useful atomic bit operations are prefixed with the 'lock' -prefix in the SMP kernel to maintain their atomic properties when used -outside of (and by) the spinlock and message code. Amongst other things -this is needed for the invalidate handler, as all CPU's will invalidate at -the same time without any locks. - -Interrupt 13 floating point error reporting is removed. This facility is -not usable on a multiprocessor board, nor relevant to the Intel MP -architecture which does not cover the 80386/80387 processor pair. \ - -The /proc filesystem support is changed so that the /proc/cpuinfo file -contains a column for each processor present. This information is extracted -from the data saved by smp\_store\_cpu\_info(). - -\end{document} diff -prauN linux-2.6.0-test5/Documentation/video4linux/Zoran wli-2.6.0-test5-bk12-25/Documentation/video4linux/Zoran --- linux-2.6.0-test5/Documentation/video4linux/Zoran 2003-09-08 12:50:13.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/Documentation/video4linux/Zoran 2003-09-25 19:15:43.000000000 -0700 @@ -28,7 +28,7 @@ Iomega Buz: * Philips saa7111 TV decoder * Philips saa7185 TV encoder Drivers to use: videodev, i2c-core, i2c-algo-bit, - videocodec, saa7111, saa7185, zr36060, zoran + videocodec, saa7111, saa7185, zr36060, zr36067 Inputs/outputs: Composite and S-video Norms: PAL, SECAM (720x576 @ 25 fps), NTSC (720x480 @ 29.97 fps) Card number: 7 @@ -39,7 +39,7 @@ Linux Media Labs LML33: * Brooktree bt819 TV decoder * Brooktree bt856 TV encoder Drivers to use: videodev, i2c-core, i2c-algo-bit, - videocodec, bt819, bt856, zr36060, zoran + videocodec, bt819, bt856, zr36060, zr36067 Inputs/outputs: Composite and S-video Norms: PAL (720x576 @ 25 fps), NTSC (720x480 @ 29.97 fps) Card number: 5 @@ -50,7 +50,7 @@ Linux Media Labs LML33R10: * Philips saa7114 TV decoder * Analog Devices adv7170 TV encoder Drivers to use: videodev, i2c-core, i2c-algo-bit, - videocodec, saa7114, adv7170, zr36060, zoran + videocodec, saa7114, adv7170, zr36060, zr36067 Inputs/outputs: Composite and S-video Norms: PAL (720x576 @ 25 fps), NTSC (720x480 @ 29.97 fps) Card number: 6 @@ -61,7 +61,7 @@ Pinnacle/Miro DC10(new): * Philips saa7110a TV decoder * Analog Devices adv7176 TV encoder Drivers to use: videodev, i2c-core, i2c-algo-bit, - videocodec, saa7110, adv7175, zr36060, zoran + videocodec, saa7110, adv7175, zr36060, zr36067 Inputs/outputs: Composite, S-video and Internal Norms: PAL, SECAM (768x576 @ 25 fps), NTSC (640x480 @ 29.97 fps) Card number: 1 @@ -72,7 +72,7 @@ Pinnacle/Miro DC10+: * Philips saa7110a TV decoder * Analog Devices adv7176 TV encoder Drivers to use: videodev, i2c-core, i2c-algo-bit, - videocodec, sa7110, adv7175, zr36060, zoran + videocodec, sa7110, adv7175, zr36060, zr36067 Inputs/outputs: Composite, S-video and Internal Norms: PAL, SECAM (768x576 @ 25 fps), NTSC (640x480 @ 29.97 fps) Card number: 2 @@ -84,7 +84,7 @@ Pinnacle/Miro DC10(old): * * Micronas vpx3220a TV decoder * mse3000 TV encoder or Analog Devices adv7176 TV encoder * Drivers to use: videodev, i2c-core, i2c-algo-bit, - videocodec, vpx3220, mse3000/adv7175, zr36050, zr36016, zoran + videocodec, vpx3220, mse3000/adv7175, zr36050, zr36016, zr36067 Inputs/outputs: Composite, S-video and Internal Norms: PAL, SECAM (768x576 @ 25 fps), NTSC (640x480 @ 29.97 fps) Card number: 0 @@ -96,7 +96,7 @@ Pinnacle/Miro DC30: * * Micronas vpx3225d/vpx3220a/vpx3216b TV decoder * Analog Devices adv7176 TV encoder Drivers to use: videodev, i2c-core, i2c-algo-bit, - videocodec, vpx3220/vpx3224, adv7175, zr36050, zr36016, zoran + videocodec, vpx3220/vpx3224, adv7175, zr36050, zr36016, zr36067 Inputs/outputs: Composite, S-video and Internal Norms: PAL, SECAM (768x576 @ 25 fps), NTSC (640x480 @ 29.97 fps) Card number: 3 @@ -108,7 +108,7 @@ Pinnacle/Miro DC30+: * * Micronas vpx3225d/vpx3220a/vpx3216b TV decoder * Analog Devices adv7176 TV encoder Drivers to use: videodev, i2c-core, i2c-algo-bit, - videocodec, vpx3220/vpx3224, adv7175, zr36050, zr36015, zoran + videocodec, vpx3220/vpx3224, adv7175, zr36050, zr36015, zr36067 Inputs/outputs: Composite, S-video and Internal Norms: PAL, SECAM (768x576 @ 25 fps), NTSC (640x480 @ 29.97 fps) Card number: 4 @@ -229,16 +229,16 @@ to generate PAL N, maybe it would work i 2. How do I get this damn thing to work -Load zoran.o. If it can't autodetect your card, use the card=X insmod +Load zr36067.o. If it can't autodetect your card, use the card=X insmod option with X being the card number as given in the previous section. To have more than one card, use card=X1[,X2[,X3,[X4[..]]]] To automate this, add the following to your /etc/modules.conf: -options zoran card=X1[,X2[,X3[,X4[..]]]] -alias char-major-81-0 zoran +options zr36067 card=X1[,X2[,X3[,X4[..]]]] +alias char-major-81-0 zr36067 -One thing to keep in mind is that this doesn't load zoran.o itself yet. It +One thing to keep in mind is that this doesn't load zr36067.o itself yet. It just automates loading. If you start using xawtv, the device won't load on some systems, since you're trying to load modules as a user, which is not allowed ("permission denied"). A quick workaround is to add 'Load "v4l"' to @@ -500,7 +500,7 @@ proven by the Buz. 7. It hangs/crashes/fails/whatevers! Help! Make sure that the card has its own interrupts (see /proc/interrupts), check -the output of dmesg at high verbosity (load zoran.o/zr36067.o with debug=2, +the output of dmesg at high verbosity (load zr36067.o with debug=2, load all other modules with debug=1). Check that your mainboard is favorable (see question 2) and if not, test the card in another computer. Also see the notes given in question 3 and try lowering quality/buffersize/capturesize diff -prauN linux-2.6.0-test5/Documentation/vm/locking wli-2.6.0-test5-bk12-25/Documentation/vm/locking --- linux-2.6.0-test5/Documentation/vm/locking 2003-09-08 12:49:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/Documentation/vm/locking 2003-09-28 22:48:27.000000000 -0700 @@ -66,7 +66,7 @@ in some cases it is not really needed. E expand_stack(), it is hard to come up with a destructive scenario without having the vmlist protection in this case. -The page_table_lock nests with the inode i_shared_sem and the kmem cache +The page_table_lock nests with the inode i_shared_lock and the kmem cache c_spinlock spinlocks. This is okay, since the kmem code asks for pages after dropping c_spinlock. The page_table_lock also nests with pagecache_lock and pagemap_lru_lock spinlocks, and no code asks for memory with these locks diff -prauN linux-2.6.0-test5/MAINTAINERS wli-2.6.0-test5-bk12-25/MAINTAINERS --- linux-2.6.0-test5/MAINTAINERS 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/MAINTAINERS 2003-09-25 19:15:43.000000000 -0700 @@ -169,8 +169,8 @@ W: http://domsch.com/linux S: Supported ACPI -P: Andy Grover -M: andrew.grover@intel.com +P: Len Brown +M: len.brown@intel.com L: acpi-devel@lists.sourceforge.net W: http://sf.net/projects/acpi/ S: Maintained @@ -212,7 +212,7 @@ S: Maintained ALCATEL SPEEDTOUCH USB DRIVER P: Duncan Sands -M: duncan.sands@wanadoo.fr +M: duncan.sands@free.fr L: linux-usb-users@lists.sourceforge.net L: linux-usb-devel@lists.sourceforge.net W: http://www.linux-usb.org/SpeedTouch/ @@ -328,18 +328,66 @@ M: axboe@suse.de L: linux-kernel@vger.kernel.org S: Maintained -BLUETOOTH SUBSYSTEM (BlueZ) +BLUETOOTH SUBSYSTEM P: Maxim Krasnyansky M: maxk@qualcomm.com W: http://bluez.sf.net S: Maintained -BLUETOOTH SUBSYSTEM (PC Card Drivers) +BLUETOOTH RFCOMM LAYER +P: Maxim Krasnyansky +M: maxk@qualcomm.com +W: http://bluez.sf.net +S: Maintained + +BLUETOOTH BNEP LAYER +P: Maxim Krasnyansky +M: maxk@qualcomm.com +W: http://bluez.sf.net +S: Maintained + +BLUETOOTH HCI USB DRIVER +P: Maxim Krasnyansky +M: maxk@qualcomm.com +W: http://bluez.sf.net +S: Maintained + +BLUETOOTH HCI UART DRIVER +P: Maxim Krasnyansky +M: maxk@qualcomm.com +W: http://bluez.sf.net +S: Maintained + +BLUETOOTH HCI DTL1 DRIVER +P: Marcel Holtmann +M: marcel@holtmann.org +W: http://www.holtmann.org/linux/bluetooth/ +S: Maintained + +BLUETOOTH HCI BLUECARD DRIVER +P: Marcel Holtmann +M: marcel@holtmann.org +W: http://www.holtmann.org/linux/bluetooth/ +S: Maintained + +BLUETOOTH HCI BT3C DRIVER +P: Marcel Holtmann +M: marcel@holtmann.org +W: http://www.holtmann.org/linux/bluetooth/ +S: Maintained + +BLUETOOTH HCI BTUART DRIVER P: Marcel Holtmann M: marcel@holtmann.org W: http://www.holtmann.org/linux/bluetooth/ S: Maintained +BLUETOOTH HCI VHCI DRIVER +P: Maxim Krasnyansky +M: maxk@qualcomm.com +W: http://bluez.sf.net +S: Maintained + BONDING DRIVER P: Chad Tindel M: ctindel@users.sourceforge.net @@ -557,10 +605,7 @@ L: linux-kernel@vger.kernel.org S: Maintained DEVICE FILESYSTEM -P: Richard Gooch -M: rgooch@atnf.csiro.au -L: linux-kernel@vger.kernel.org -S: Maintained +S: Obsolete DIGI INTL. EPCA DRIVER P: Digi International, Inc @@ -1159,6 +1204,13 @@ W: http://linuxppc64.org L: linuxppc64-dev@lists.linuxppc.org S: Supported +LINUX SECURITY MODULE (LSM) FRAMEWORK +P: Chris Wright +M: chrisw@osdl.org +L: linux-security-module@wirex.com +W: http://lsm.immunix.org +S: Supported + LOGICAL DISK MANAGER SUPPORT (LDM, Windows 2000/XP Dynamic Disks) P: Richard Russon (FlatCap) M: ldm@flatcap.org diff -prauN linux-2.6.0-test5/Makefile wli-2.6.0-test5-bk12-25/Makefile --- linux-2.6.0-test5/Makefile 2003-09-08 12:50:12.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/Makefile 2003-09-25 19:15:43.000000000 -0700 @@ -1,7 +1,7 @@ VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 0 -EXTRAVERSION = -test5 +EXTRAVERSION = -test5-bk12 # *DOCUMENTATION* # To see a list of typical targets execute "make help" @@ -9,6 +9,9 @@ EXTRAVERSION = -test5 # Comments in this file are targeted only to the developer, do not # expect to learn how to build the kernel reading this file. +# Do not print "Entering directory ..." +MAKEFLAGS += --no-print-directory + # We are using a recursive build, so we need to do a little thinking # to get the ordering right. # @@ -25,6 +28,87 @@ EXTRAVERSION = -test5 # descending is started. They are now explicitly listed as the # prepare rule. +# To put more focus on warnings, be less verbose as default +# Use 'make V=1' to see the full commands + +ifdef V + ifeq ("$(origin V)", "command line") + KBUILD_VERBOSE = $(V) + endif +endif +ifndef KBUILD_VERBOSE + KBUILD_VERBOSE = 0 +endif + +# Call sparse as part of compilation of C files +# Use 'make C=1' to enable sparse checking + +ifdef C + ifeq ("$(origin C)", "command line") + KBUILD_CHECKSRC = $(C) + endif +endif +ifndef KBUILD_CHECKSRC + KBUILD_CHECKSRC = 0 +endif + +# kbuild supports saving output files in a separate directory. +# To locate output files in a separate directory two syntax'es are supported. +# In both cases the working directory must be the root of the kernel src. +# 1) O= +# Use "make O=dir/to/store/output/files/" +# +# 2) Set KBUILD_OUTPUT +# Set the environment variable KBUILD_OUTPUT to point to the directory +# where the output files shall be placed. +# export KBUILD_OUTPUT=dir/to/store/output/files/ +# make +# +# The O= assigment takes precedence over the KBUILD_OUTPUT environment variable. + + +# KBUILD_SRC is set on invocation of make in OBJ directory +# KBUILD_SRC is not intended to be used by the regular user (for now) +ifeq ($(KBUILD_SRC),) + +# OK, Make called in directory where kernel src resides +# Do we want to locate output files in a separate directory? +ifdef O + ifeq ("$(origin O)", "command line") + KBUILD_OUTPUT := $(O) + endif +endif + +ifneq ($(KBUILD_OUTPUT),) +# Invoke a second make in the output directory, passing relevant variables + KBUILD_OUTPUT := $(shell cd $(KBUILD_OUTPUT); /bin/pwd) + +.PHONY: $(MAKECMDGOALS) all + +$(MAKECMDGOALS) all: + $(if $(KBUILD_VERBOSE:1=),@)$(MAKE) -C $(KBUILD_OUTPUT) \ + KBUILD_SRC=$(CURDIR) KBUILD_VERBOSE=$(KBUILD_VERBOSE) \ + KBUILD_CHECK=$(KBUILD_CHECK) -f $(CURDIR)/Makefile $(MAKECMDGOALS) + +# Leave processing to above invocation of make +skip-makefile := 1 +endif # ifneq ($(KBUILD_OUTPUT),) +endif # ifeq ($(KBUILD_SRC),) + +# We process the rest of the Makefile if this is the final invocation of make +ifeq ($(skip-makefile),) + +srctree := $(if $(KBUILD_SRC),$(KBUILD_SRC),$(CURDIR)) +TOPDIR := $(srctree) +# FIXME - TOPDIR is obsolete, use srctree/objtree +objtree := $(CURDIR) +src := $(srctree) +obj := $(objtree) + +VPATH := $(srctree) + +export srctree objtree VPATH TOPDIR + KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) # SUBARCH tells the usermode build what the underlying arch is. That is set @@ -37,9 +121,6 @@ SUBARCH := $(shell uname -m | sed -e s/i -e s/arm.*/arm/ -e s/sa110/arm/ \ -e s/s390x/s390/ -e s/parisc64/parisc/ ) -# Remove hyphens since they have special meaning in RPM filenames -KERNELPATH=kernel-$(subst -,,$(KERNELRELEASE)) - # Cross compiling and selecting different set of gcc/bin-utils # --------------------------------------------------------------------------- # @@ -69,7 +150,6 @@ UTS_MACHINE := $(ARCH) CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \ else if [ -x /bin/bash ]; then echo /bin/bash; \ else echo sh; fi ; fi) -TOPDIR := $(CURDIR) HOSTCC = gcc HOSTCXX = g++ @@ -110,40 +190,8 @@ ifeq ($(MAKECMDGOALS),) KBUILD_MODULES := 1 endif -export KBUILD_MODULES KBUILD_BUILTIN KBUILD_VERBOSE KBUILD_CHECKSRC - -# To put more focus on warnings, less verbose as default -# Use 'make V=1' to see the full commands - -ifdef V - ifeq ("$(origin V)", "command line") - KBUILD_VERBOSE = $(V) - endif -endif -ifndef KBUILD_VERBOSE - KBUILD_VERBOSE = 0 -endif - -# Call sparse as part of compilation of C files -# Use 'make C=1' to enable sparse checking - -ifdef C - ifeq ("$(origin C)", "command line") - KBUILD_CHECKSRC = $(C) - endif -endif -ifndef KBUILD_CHECKSRC - KBUILD_CHECKSRC = 0 -endif - -# Do not print 'Entering directory ...' - -MAKEFLAGS += --no-print-directory - -# For maximum performance (+ possibly random breakage, uncomment -# the following) - -#MAKEFLAGS += -rR +export KBUILD_MODULES KBUILD_BUILTIN KBUILD_VERBOSE +export KBUILD_CHECKSRC KBUILD_SRC # Beautify output # --------------------------------------------------------------------------- @@ -183,16 +231,17 @@ ifneq ($(findstring s,$(MAKEFLAGS)),) quiet=silent_ endif -export quiet Q KBUILD_VERBOSE +check_gcc = $(shell if $(CC) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi ;) -# Paths to obj / src tree +export quiet Q KBUILD_VERBOSE check_gcc -src := . -obj := . -srctree := . -objtree := . +# Look for make include files relative to root of kernel src +MAKEFLAGS += --include-dir=$(srctree) + +# For maximum performance (+ possibly random breakage, uncomment +# the following) -export srctree objtree +#MAKEFLAGS += -rR # Make variables (CC, etc...) @@ -222,13 +271,15 @@ AFLAGS_KERNEL = NOSTDINC_FLAGS = -nostdinc -iwithprefix include -CPPFLAGS := -D__KERNEL__ -Iinclude +CPPFLAGS := -D__KERNEL__ -Iinclude \ + $(if $(KBUILD_SRC),-Iinclude2 -I$(srctree)/include) + CFLAGS := -Wall -Wstrict-prototypes -Wno-trigraphs -O2 \ -fno-strict-aliasing -fno-common AFLAGS := -D__ASSEMBLY__ export VERSION PATCHLEVEL SUBLEVEL EXTRAVERSION KERNELRELEASE ARCH \ - CONFIG_SHELL TOPDIR HOSTCC HOSTCFLAGS CROSS_COMPILE AS LD CC \ + CONFIG_SHELL HOSTCC HOSTCFLAGS CROSS_COMPILE AS LD CC \ CPP AR NM STRIP OBJCOPY OBJDUMP MAKE AWK GENKSYMS PERL UTS_MACHINE \ HOSTCXX HOSTCXXFLAGS LDFLAGS_BLOB LDFLAGS_MODULE CHECK @@ -253,12 +304,15 @@ RCS_TAR_IGNORE := --exclude SCCS --exclu # Helpers built in scripts/ -scripts/docproc scripts/fixdep scripts/split-include : scripts ; +scripts/docproc scripts/split-include : scripts ; -.PHONY: scripts +.PHONY: scripts scripts/fixdep scripts: $(Q)$(MAKE) $(build)=scripts +scripts/fixdep: + $(Q)$(MAKE) $(build)=scripts $@ + # To make sure we do not include .config for any of the *config targets # catch them early, and hand them over to scripts/kconfig/Makefile @@ -294,7 +348,7 @@ ifeq ($(mixed-targets),1) # Handle them one by one. %:: FORCE - $(Q)$(MAKE) $@ + $(Q)$(MAKE) -C $(srctree) KBUILD_SRC= $@ else ifeq ($(config-targets),1) @@ -336,12 +390,12 @@ include .config # If .config is newer than include/linux/autoconf.h, someone tinkered # with it and forgot to run make oldconfig -include/linux/autoconf.h: scripts/fixdep .config - $(Q)$(MAKE) $(build)=scripts/kconfig silentoldconfig +include/linux/autoconf.h: .config + $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig endif -include arch/$(ARCH)/Makefile +include $(srctree)/arch/$(ARCH)/Makefile # Let architecture Makefiles change CPPFLAGS if needed CFLAGS := $(CPPFLAGS) $(CFLAGS) @@ -378,6 +432,9 @@ ifdef CONFIG_DEBUG_INFO CFLAGS += -g endif +# warn about C99 declaration after statement +CFLAGS += $(call check_gcc,-Wdeclaration-after-statement,) + # # INSTALL_PATH specifies where to place the updated kernel and system map # images. Uncomment if you want to place them anywhere other than root. @@ -487,14 +544,34 @@ $(sort $(vmlinux-objs)) arch/$(ARCH)/ker # Handle descending into subdirectories listed in $(SUBDIRS) .PHONY: $(SUBDIRS) -$(SUBDIRS): prepare +$(SUBDIRS): prepare-all $(Q)$(MAKE) $(build)=$@ -# Things we need done before we descend to build or make -# module versions are listed in "prepare" +# Things we need to do before we recursively start building the kernel +# or the modules are listed in "prepare-all". +# A multi level approach is used. prepare1 is updated first, then prepare0. +# prepare-all is the collection point for the prepare targets. + +.PHONY: prepare-all prepare prepare0 prepare1 + +# prepare1 is used to check if we are building in a separate output directory, +# and if so do: +# 1) Check that make has not been executed in the kernel src $(srctree) +# 2) Create the include2 directory, used for the second asm symlink + +prepare1: +ifneq ($(KBUILD_SRC),) + @echo ' Using $(srctree) as source for kernel' + $(Q)if [ -h $(srctree)/include/asm -o -f $(srctree)/.config ]; then \ + echo " $(srctree) is not clean, please run 'make mrproper'";\ + echo " in the '$(srctree)' directory.";\ + /bin/false; \ + fi; + $(Q)if [ ! -d include2 ]; then mkdir -p include2; fi; + $(Q)ln -fsn $(srctree)/include/asm-$(ARCH) include2/asm +endif -.PHONY: prepare -prepare: include/linux/version.h include/asm include/config/MARKER +prepare0: prepare1 include/linux/version.h include/asm include/config/MARKER ifdef KBUILD_MODULES ifeq ($(origin SUBDIRS),file) $(Q)rm -rf $(MODVERDIR) @@ -505,6 +582,9 @@ endif endif $(if $(CONFIG_MODULES),$(Q)mkdir -p $(MODVERDIR)) +# All the preparing.. +prepare-all: prepare0 prepare + # Leave this as default for preprocessing vmlinux.lds.S, which is now # done in arch/$(ARCH)/kernel/Makefile @@ -533,8 +613,9 @@ export AFLAGS_vmlinux.lds.o += -P -C -U$ # before switching between archs anyway. include/asm: - @echo ' Making asm->asm-$(ARCH) symlink' - @ln -s asm-$(ARCH) $@ + @echo ' SYMLINK $@ -> include/asm-$(ARCH)' + $(Q)if [ ! -d include ]; then mkdir -p include; fi; + @ln -fsn asm-$(ARCH) $@ # Split autoconf.h into include/linux/config/* @@ -585,7 +666,7 @@ all: modules .PHONY: modules modules: $(SUBDIRS) $(if $(KBUILD_BUILTIN),vmlinux) @echo ' Building modules, stage 2.'; - $(Q)$(MAKE) -rR -f scripts/Makefile.modpost + $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modpost # Install modules @@ -603,7 +684,7 @@ _modinst_: @rm -f $(MODLIB)/build @mkdir -p $(MODLIB)/kernel @ln -s $(TOPDIR) $(MODLIB)/build - $(Q)$(MAKE) -rR -f scripts/Makefile.modinst + $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modinst # If System.map exists, run depmod. This deliberately does not have a # dependency on System.map since that would run the dependency tree on @@ -672,7 +753,7 @@ MRPROPER_FILES += \ .menuconfig.log \ include/asm \ .hdepend include/linux/modversions.h \ - tags TAGS cscope kernel.spec \ + tags TAGS cscope.out kernel.spec \ .tmp* # Directories removed with 'make mrproper' @@ -680,7 +761,8 @@ MRPROPER_DIRS += \ $(MODVERDIR) \ .tmp_export-objs \ include/config \ - include/linux/modules + include/linux/modules \ + include2 # clean - Delete all intermediate files # @@ -759,31 +841,32 @@ tags: FORCE .PHONY: rpm +# Remove hyphens since they have special meaning in RPM filenames +KERNELPATH=kernel-$(subst -,,$(KERNELRELEASE)) + # If you do a make spec before packing the tarball you can rpm -ta it spec: - . $(srctree)/scripts/mkspec >kernel.spec + $(CONFIG_SHELL) $(srctree)/scripts/mkspec > $(objtree)/kernel.spec -# Build a tar ball, generate an rpm from it and pack the result -# There are two bits of magic here -# 1) The use of /. to avoid tar packing just the symlink -# 2) Removing the .dep files as they have source paths in them that -# will become invalid +# a) Build a tar ball +# b) generate an rpm from it +# c) and pack the result +# - Use /. to avoid tar packing just the symlink rpm: clean spec - find . $(RCS_FIND_IGNORE) \ - \( -size 0 -o -name .depend -o -name .hdepend \) \ - -type f -print | xargs rm -f set -e; \ - cd $(TOPDIR)/.. ; \ - ln -sf $(TOPDIR) $(KERNELPATH) ; \ + cd .. ; \ + ln -sf $(srctree) $(KERNELPATH) ; \ tar -cvz $(RCS_TAR_IGNORE) -f $(KERNELPATH).tar.gz $(KERNELPATH)/. ; \ - rm $(KERNELPATH) ; \ - cd $(TOPDIR) ; \ - $(CONFIG_SHELL) $(srctree)/scripts/mkversion > .tmp_version ; \ - mv -f .tmp_version .version; \ - $(RPM) -ta $(TOPDIR)/../$(KERNELPATH).tar.gz ; \ - rm $(TOPDIR)/../$(KERNELPATH).tar.gz + rm $(KERNELPATH) + + set -e; \ + $(CONFIG_SHELL) $(srctree)/scripts/mkversion > $(objtree)/.tmp_version;\ + mv -f $(objtree)/.tmp_version $(objtree)/.version; + + $(RPM) -ta ../$(KERNELPATH).tar.gz + rm ../$(KERNELPATH).tar.gz # Brief documentation of the typical targets used # --------------------------------------------------------------------------- @@ -814,6 +897,7 @@ help: echo ' No architecture specific help defined for $(ARCH)') @echo '' @echo ' make V=0|1 [targets] 0 => quiet build (default), 1 => verbose build' + @echo ' make O=dir [targets] Locate all output files in "dir", including .config' @echo ' make C=1 [targets] Check all c source with checker tool' @echo '' @echo 'Execute "make" or "make all" to build all targets marked with [*] ' @@ -849,7 +933,8 @@ endif #ifeq ($(mixed-targets),1) # FIXME Should go into a make.lib or something # =========================================================================== -a_flags = -Wp,-MD,$(depfile) $(AFLAGS) $(AFLAGS_KERNEL) $(NOSTDINC_FLAGS) \ +a_flags = -Wp,-MD,$(depfile) $(AFLAGS) $(AFLAGS_KERNEL) \ + $(NOSTDINC_FLAGS) $(CPPFLAGS) \ $(modkern_aflags) $(EXTRA_AFLAGS) $(AFLAGS_$(*F).o) quiet_cmd_as_o_S = AS $@ @@ -907,6 +992,7 @@ cmd = @$(if $($(quiet)cmd_$(1)),echo ' define filechk @set -e; \ echo ' CHK $@'; \ + mkdir -p $(dir $@); \ $(filechk_$(1)) < $< > $@.tmp; \ if [ -r $@ ] && cmp -s $@ $@.tmp; then \ rm -f $@.tmp; \ @@ -919,16 +1005,18 @@ endef # Shorthand for $(Q)$(MAKE) -f scripts/Makefile.build obj=dir # Usage: # $(Q)$(MAKE) $(build)=dir -build := -f scripts/Makefile.build obj +build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj # Shorthand for $(Q)$(MAKE) -f scripts/Makefile.clean obj=dir # Usage: # $(Q)$(MAKE) $(clean)=dir -clean := -f scripts/Makefile.clean obj +clean := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.clean obj # $(call descend,,) # Recursively call a sub-make in with target # Usage is deprecated, because make does not see this as an invocation of make. -descend =$(Q)$(MAKE) -f scripts/Makefile.build obj=$(1) $(2) +descend =$(Q)$(MAKE) -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj=$(1) $(2) + +endif # skip-makefile FORCE: diff -prauN linux-2.6.0-test5/README wli-2.6.0-test5-bk12-25/README --- linux-2.6.0-test5/README 2003-09-08 12:50:23.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/README 2003-09-25 19:15:43.000000000 -0700 @@ -108,11 +108,26 @@ SOFTWARE REQUIREMENTS you can just update packages when obvious problems arise during build or operation. -CONFIGURING the kernel: +BUILD directory for the kernel: + + When compiling the kernel all output files will per default be + stored together with the kernel source code. + Using the option "make O=output/dir" allow you to specify an alternate + place for the output files (including .config). + Example: + kernel source code: /usr/src/linux-2.6.N + build directory: /home/name/build/kernel + + To configure and build the kernel use: + cd /usr/src/linux-2.6.N + make O=/home/name/build/kernel menuconfig + make O=/home/name/build/kernel + sudo make O=/home/name/build/kernel install_modules install - - Do a "make config" to configure the basic kernel. "make config" needs - bash to work: it will search for bash in $BASH, /bin/bash and /bin/sh - (in that order), so one of those must be correct for it to work. + Please note: If the 'O=output/dir' option is used then it must be + used for all invocations of make. + +CONFIGURING the kernel: Do not skip this step even if you are only upgrading one minor version. New configuration options are added in each release, and diff -prauN linux-2.6.0-test5/arch/alpha/Kconfig wli-2.6.0-test5-bk12-25/arch/alpha/Kconfig --- linux-2.6.0-test5/arch/alpha/Kconfig 2003-09-08 12:50:20.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/alpha/Kconfig 2003-09-25 19:15:43.000000000 -0700 @@ -484,6 +484,9 @@ config EISA Otherwise, say N. +config EISA_ALWAYS + def_bool EISA + config SMP bool "Symmetric multi-processing support" depends on ALPHA_SABLE || ALPHA_LYNX || ALPHA_RAWHIDE || ALPHA_DP264 || ALPHA_WILDFIRE || ALPHA_TITAN || ALPHA_GENERIC || ALPHA_SHARK || ALPHA_MARVEL diff -prauN linux-2.6.0-test5/arch/alpha/boot/misc.c wli-2.6.0-test5-bk12-25/arch/alpha/boot/misc.c --- linux-2.6.0-test5/arch/alpha/boot/misc.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/alpha/boot/misc.c 2003-09-25 19:15:43.000000000 -0700 @@ -106,8 +106,8 @@ static void *malloc(int size) { void *p; - if (size <0) error("Malloc error\n"); - if (free_mem_ptr <= 0) error("Memory error\n"); + if (size <0) error("Malloc error"); + if (free_mem_ptr <= 0) error("Memory error"); free_mem_ptr = (free_mem_ptr + 3) & ~3; /* Align */ @@ -140,7 +140,7 @@ static void gzip_release(void **ptr) int fill_inbuf(void) { if (insize != 0) - error("ran out of input data\n"); + error("ran out of input data"); inbuf = input_data; insize = input_data_size; diff -prauN linux-2.6.0-test5/arch/alpha/mm/remap.c wli-2.6.0-test5-bk12-25/arch/alpha/mm/remap.c --- linux-2.6.0-test5/arch/alpha/mm/remap.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/alpha/mm/remap.c 2003-09-25 20:03:30.000000000 -0700 @@ -73,7 +73,7 @@ __alpha_remap_area_pages(unsigned long a spin_lock(&init_mm.page_table_lock); do { pmd_t *pmd; - pmd = pmd_alloc(&init_mm, dir, address); + pmd = pmd_alloc_kernel(&init_mm, dir, address); error = -ENOMEM; if (!pmd) break; diff -prauN linux-2.6.0-test5/arch/arm/Kconfig wli-2.6.0-test5-bk12-25/arch/arm/Kconfig --- linux-2.6.0-test5/arch/arm/Kconfig 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/Kconfig 2003-09-25 19:15:43.000000000 -0700 @@ -213,198 +213,7 @@ config FORCE_MAX_ZONEORDER depends on SA1111 default "9" -comment "Processor Type" - -# Figure out whether this system uses 26-bit or 32-bit CPUs. -config CPU_32 - bool - default y - -# Select CPU types depending on the architecture selected. This selects -# which CPUs we support in the kernel image, and the compiler instruction -# optimiser behaviour. -# ARM610 -config CPU_ARM610 - bool "Support ARM610 processor" - depends on ARCH_RPC - help - The ARM610 is the successor to the ARM3 processor - and was produced by VLSI Technology Inc. - - Say Y if you want support for the ARM610 processor. - Otherwise, say N. - -# ARM710 -config CPU_ARM710 - bool "Support ARM710 processor" if !ARCH_CLPS7500 && ARCH_RPC - default y if ARCH_CLPS7500 - help - A 32-bit RISC microprocessor based on the ARM7 processor core - designed by Advanced RISC Machines Ltd. The ARM710 is the - successor to the ARM610 processor. It was released in - July 1994 by VLSI Technology Inc. - - Say Y if you want support for the ARM710 processor. - Otherwise, say N. - -# ARM720T -config CPU_ARM720T - bool "Support ARM720T processor" if !ARCH_CLPS711X && !ARCH_L7200 && !ARCH_CDB89712 && ARCH_INTEGRATOR - default y if ARCH_CLPS711X || ARCH_L7200 || ARCH_CDB89712 - help - A 32-bit RISC processor with 8kByte Cache, Write Buffer and - MMU built around an ARM7TDMI core. - - Say Y if you want support for the ARM720T processor. - Otherwise, say N. - -# ARM920T -config CPU_ARM920T - bool "Support ARM920T processor" - depends on ARCH_INTEGRATOR - help - The ARM920T is licensed to be produced by numerous vendors, - and is used in the Maverick EP9312. More information at - . - - Say Y if you want support for the ARM920T processor. - Otherwise, say N. - -# ARM922T -config CPU_ARM922T - bool - depends on ARCH_CAMELOT - default y - help - The ARM922T is a version of the ARM920T, but with smaller - instruction and data caches. It is used in Altera's - Excalibur XA device family. - - Say Y if you want support for the ARM922T processor. - Otherwise, say N. - -# ARM926T -config CPU_ARM926T - bool "Support ARM926T processor" - depends on ARCH_INTEGRATOR - help - This is a variant of the ARM920. It has slightly different - instruction sequences for cache and TLB operations. Curiously, - there is no documentation on it at the ARM corporate website. - - Say Y if you want support for the ARM926T processor. - Otherwise, say N. - -# ARM1020 -config CPU_ARM1020 - bool "Support ARM1020 processor" - depends on ARCH_INTEGRATOR - help - The ARM1020 is the cached version of the ARM10 processor, - with an addition of a floating-point unit. - - Say Y if you want support for the ARM1020 processor. - Otherwise, say N. - -# SA110 -config CPU_SA110 - bool "Support StrongARM(R) SA-110 processor" if !ARCH_EBSA110 && !FOOTBRIDGE && !ARCH_TBOX && !ARCH_SHARK && !ARCH_NEXUSPCI && !ARCH_ANAKIN && ARCH_RPC - default y if ARCH_EBSA110 || FOOTBRIDGE || ARCH_TBOX || ARCH_SHARK || ARCH_NEXUSPCI || ARCH_ANAKIN - help - The Intel StrongARM(R) SA-110 is a 32-bit microprocessor and - is available at five speeds ranging from 100 MHz to 233 MHz. - More information is available at - . - - Say Y if you want support for the SA-110 processor. - Otherwise, say N. - -# SA1100 -config CPU_SA1100 - bool - depends on ARCH_SA1100 - default y - -# XScale -config CPU_XSCALE - bool - depends on ARCH_IOP3XX || ARCH_ADIFCC || ARCH_PXA - default y - -# Figure out what processor architecture version we should be using. -# This defines the compiler instruction set which depends on the machine type. -config CPU_32v3 - bool - depends on ARCH_RPC || ARCH_CLPS7500 - default y - -config CPU_32v4 - bool - depends on ARCH_EBSA110 || FOOTBRIDGE || ARCH_TBOX || ARCH_SHARK || ARCH_NEXUSPCI || ARCH_CLPS711X || ARCH_INTEGRATOR || ARCH_SA1100 || ARCH_L7200 || ARCH_ANAKIN || ARCH_CAMELOT - default y - -config CPU_32v5 - bool - depends on ARCH_IOP3XX || ARCH_ADIFCC || ARCH_PXA - default y - -comment "Processor Features" - -config ARM_THUMB - bool "Support Thumb instructions (EXPERIMENTAL)" - depends on (CPU_ARM720T || CPU_ARM920T || CPU_ARM922T || CPU_ARM926T || CPU_ARM1020 || CPU_XSCALE) && EXPERIMENTAL - help - Say Y if you want to have kernel support for ARM Thumb instructions, - fault handlers, and system calls. - - The Thumb instruction set is a compressed form of the standard ARM - instruction set resulting in smaller binaries at the expense of - slightly less efficient code. - - If you don't know what this all is, saying Y is a safe choice. - -config CPU_BIG_ENDIAN - bool "Build big-endian kernel" - depends on ARCH_SUPPORTS_BIG_ENDIAN - help - Say Y if you plan on running a kernel in big-endian mode. - Note that your board must be properly built and your board - port must properly enable and big-endian related features - of your chipset/board/processor. - -config CPU_ICACHE_DISABLE - bool "Disable I-Cache" - depends on CPU_ARM920T || CPU_ARM922T || CPU_ARM926T || CPU_ARM1020 - help - Say Y here to disable the processor instruction cache. Unless - you have a reason not to or are unsure, say N. - -config CPU_DCACHE_DISABLE - bool "Disable D-Cache" - depends on CPU_ARM920T || CPU_ARM922T || CPU_ARM926T || CPU_ARM1020 - help - Say Y here to disable the processor data cache. Unless - you have a reason not to or are unsure, say N. - -config CPU_DCACHE_WRITETHROUGH - bool "Force write through D-cache" - depends on (CPU_ARM920T || CPU_ARM922T || CPU_ARM926T || CPU_ARM1020) && !CPU_DISABLE_DCACHE - help - Say Y here to use the data cache in writethough mode. Unless you - specifically require this or are unsure, say N. - -config CPU_CACHE_ROUND_ROBIN - bool "Round robin I and D cache replacement algorithm" - depends on (CPU_ARM926T || CPU_ARM1020) && (!CPU_ICACHE_DISABLE || !CPU_DCACHE_DISABLE) - help - Say Y here to use the predictable round-robin cache replacement - policy. Unless you specifically require this or are unsure, say N. - -config CPU_BPREDICT_DISABLE - bool "Disable branch prediction" - depends on CPU_ARM1020 - help - Say Y here to disable branch prediction. If unsure, say N. +source arch/arm/mm/Kconfig # bool 'Use XScale PMU as timer source' CONFIG_XSCALE_PMU_TIMER config XSCALE_PMU @@ -723,10 +532,8 @@ config APM 11) exchange RAM chips 12) exchange the motherboard. - To compile this driver as a module ( = code which can be inserted in - and removed from the running kernel whenever you want), say M here - and read . The module will be called - apm. + To compile this driver as a module, choose M here: the + module will be called apm. config ARTHUR tristate "RISC OS personality" @@ -842,11 +649,6 @@ source "drivers/input/Kconfig" source "drivers/char/Kconfig" -config KBDMOUSE - bool - depends on ARCH_ACORN && BUSMOUSE=y && !ARCH_RPC - default y - source "drivers/media/Kconfig" source "fs/Kconfig" diff -prauN linux-2.6.0-test5/arch/arm/Makefile wli-2.6.0-test5-bk12-25/arch/arm/Makefile --- linux-2.6.0-test5/arch/arm/Makefile 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/Makefile 2003-09-25 19:15:43.000000000 -0700 @@ -27,7 +27,6 @@ LD += -EB AFLAGS += -mbig-endian endif -check_gcc = $(shell if $(CC) $(1) -S -o /dev/null -xc /dev/null > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi) comma = , # This selects which instruction set is used. @@ -172,22 +171,6 @@ bp:; $(Q)$(MAKE) $(build)=$(boot) $(boot i:; $(Q)$(MAKE) $(build)=$(boot) install zi:; $(Q)$(MAKE) $(build)=$(boot) zinstall -# -# Configuration targets. Use these to select a -# configuration for your architecture -%_config: - @( \ - CFG=$(@:_config=); \ - if [ -f arch/arm/def-configs/$$CFG ]; then \ - [ -f .config ] && mv -f .config .config.old; \ - cp arch/arm/def-configs/$$CFG .config; \ - echo "*** Default configuration for $$CFG installed"; \ - echo "*** Next, you may run 'make oldconfig'"; \ - else \ - echo "$$CFG does not exist"; \ - fi; \ - ) - arch/$(ARCH)/kernel/asm-offsets.s: include/asm include/linux/version.h \ include/asm-arm/.arch \ include/config/MARKER diff -prauN linux-2.6.0-test5/arch/arm/boot/bootp/init.S wli-2.6.0-test5-bk12-25/arch/arm/boot/bootp/init.S --- linux-2.6.0-test5/arch/arm/boot/bootp/init.S 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/boot/bootp/init.S 2003-09-25 19:15:43.000000000 -0700 @@ -1,86 +1,69 @@ /* * linux/arch/arm/boot/bootp/init.S * - * Copyright (C) 2000-2002 Russell King + * Copyright (C) 2000-2003 Russell King. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * - * Header file for splitting kernel + initrd. Note that we pass + * "Header" file for splitting kernel + initrd. Note that we pass * r0 through to r3 straight through. + * + * This demonstrates how to append code to the start of the kernel + * zImage, and boot the kernel without copying it around. This + * example would be simpler; if we didn't have an object of unknown + * size immediately following the kernel, we could build this into + * a binary blob, and concatenate the zImage using the cat command. */ .section .start,#alloc,#execinstr .type _start, #function .globl _start -_start: adr r10, initdata - ldr r11, initdata - sub r11, r10, r11 @ work out exec offset - b splitify - .size _entry,. - _entry - - .type initdata, #object -initdata: .word initdata @ compiled address of this - .size initdata,. - initdata - -splitify: adr r13, data - ldmia r13!, {r4-r6} @ move the initrd - add r4, r4, r11 @ correction - bl move + +_start: adr r12, kernel_start @ offset of kernel zImage + ldr r4, [r12, #0x2c] @ length of zImage + adr r13, data + add r4, r4, r12 @ end of zImage, start of initrd + ldmia r13!, {r5-r6} @ r5 = dest, r6 = length + bl move @ move the initrd /* - * Setup the initrd parameters to pass to the kernel. This can either be - * passed in via a param_struct or a tag list. We spot the param_struct - * method by looking at the first word; this should either indicate a page - * size of 4K, 16K or 32K. + * Setup the initrd parameters to pass to the kernel. This can only be + * passed in via the tagged list. */ - ldmia r13, {r4-r8} @ get size and addr of initrd - @ r5 = ATAG_INITRD - @ r6 = initrd start - @ r7 = initrd end - @ r8 = param_struct address - ldr r9, [r8, #0] @ no param struct? - teq r9, #0x1000 @ 4K? - teqne r9, #0x4000 @ 16K? - teqne r9, #0x8000 @ 32K? - beq param_struct - - ldr r9, [r8, #4] @ get first tag - teq r9, r4 - bne taglist @ ok, we have a tag list + ldmia r13, {r5-r9} @ get size and addr of initrd + @ r5 = ATAG_CORE + @ r6 = ATAG_INITRD2 + @ r7 = initrd start + @ r8 = initrd end + @ r9 = param_struct address + ldr r10, [r9, #4] @ get first tag + teq r10, r5 @ is it ATAG_CORE? /* - * We didn't find a valid tag list - create one. + * If we didn't find a valid tag list, create a dummy ATAG_CORE entry. */ - str r4, [r8, #4] - mov r4, #8 - str r4, [r8, #0] - mov r4, #0 - str r4, [r8, #8] + movne r10, #0 @ terminator + movne r4, #2 @ Size of this entry (2 words) + stmneia r8, {r4, r5, r10} @ Size, ATAG_CORE, terminator /* * find the end of the tag list, and then add an INITRD tag on the end. * If there is already an INITRD tag, then we ignore it; the last INITRD * tag takes precidence. */ -taglist: ldr r9, [r8, #0] @ tag length - teq r9, #0 @ last tag? - addne r8, r8, r9 +taglist: ldr r10, [r9, #0] @ tag length + teq r10, #0 @ last tag (zero length)? + addne r9, r9, r10, lsl #2 bne taglist - mov r4, #16 @ length of initrd tag - mov r9, #0 @ end of tag list terminator - stmia r8, {r4, r5, r6, r7, r9} - adr r12, kernel_start + mov r5, #4 @ Size of initrd tag (4 words) + stmia r9, {r5, r6, r7, r8, r10} mov pc, r12 @ call kernel /* - * We found a param struct. Modify the param struct for the initrd + * Move the block of memory length r6 from address r4 to address r5 */ -param_struct: add r8, r8, #16*4 - stmia r8, {r6,r7} @ save in param_struct - mov pc, r12 @ call kernel - move: ldmia r4!, {r7 - r10} @ move 32-bytes at a time stmia r5!, {r7 - r10} ldmia r4!, {r7 - r10} @@ -89,15 +72,18 @@ move: ldmia r4!, {r7 - r10} @ move 32- bcs move mov pc, lr -data: .word initrd_start - .word initrd_addr - .word initrd_len + .size _start, . - _start + + .type data,#object +data: .word initrd_addr @ destination initrd address + .word initrd_len @ initrd size .word 0x54410001 @ r4 = ATAG_CORE - .word 0x54420005 @ r5 = ATAG_INITRD + .word 0x54420005 @ r5 = ATAG_INITRD2 .word initrd_addr @ r6 .word initrd_len @ r7 .word params @ r8 + .size data, . - _data .type initrd_start,#object diff -prauN linux-2.6.0-test5/arch/arm/boot/compressed/head-sa1100.S wli-2.6.0-test5-bk12-25/arch/arm/boot/compressed/head-sa1100.S --- linux-2.6.0-test5/arch/arm/boot/compressed/head-sa1100.S 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/boot/compressed/head-sa1100.S 2003-09-25 19:15:43.000000000 -0700 @@ -34,6 +34,10 @@ __SA1100_start: @ REVISIT_PFS168: Temporary until firmware updated to use assigned machine number mov r7, #MACH_TYPE_PFS168 #endif +#ifdef CONFIG_SA1100_SIMPAD + @ UNTIL we've something like an open bootldr + mov r7, #MACH_TYPE_SIMPAD @should be 87 +#endif #ifdef CONFIG_SA1100_VICTOR teq r7, #MACH_TYPE_VICTOR diff -prauN linux-2.6.0-test5/arch/arm/boot/compressed/misc.c wli-2.6.0-test5-bk12-25/arch/arm/boot/compressed/misc.c --- linux-2.6.0-test5/arch/arm/boot/compressed/misc.c 2003-09-08 12:50:17.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/boot/compressed/misc.c 2003-09-25 19:15:43.000000000 -0700 @@ -191,8 +191,8 @@ static void *malloc(int size) { void *p; - if (size <0) error("Malloc error\n"); - if (free_mem_ptr <= 0) error("Memory error\n"); + if (size <0) error("Malloc error"); + if (free_mem_ptr <= 0) error("Memory error"); free_mem_ptr = (free_mem_ptr + 3) & ~3; /* Align */ @@ -236,7 +236,7 @@ static void gzip_release(void **ptr) int fill_inbuf(void) { if (insize != 0) - error("ran out of input data\n"); + error("ran out of input data"); inbuf = input_data; insize = &input_data_end[0] - &input_data[0]; diff -prauN linux-2.6.0-test5/arch/arm/common/sa1111-pcipool.c wli-2.6.0-test5-bk12-25/arch/arm/common/sa1111-pcipool.c --- linux-2.6.0-test5/arch/arm/common/sa1111-pcipool.c 2003-09-08 12:50:16.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/common/sa1111-pcipool.c 2003-09-25 19:15:43.000000000 -0700 @@ -51,7 +51,7 @@ struct pci_page { /* cacheable header fo static inline const char *slot_name(const struct pci_pool *pool) { - const struct pci_dev *pdev = pool->dev; + struct pci_dev *pdev = (struct pci_dev *)pool->dev; if (pdev == 0) return "[0]"; diff -prauN linux-2.6.0-test5/arch/arm/common/sa1111.c wli-2.6.0-test5-bk12-25/arch/arm/common/sa1111.c --- linux-2.6.0-test5/arch/arm/common/sa1111.c 2003-09-08 12:50:28.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/common/sa1111.c 2003-09-25 19:15:43.000000000 -0700 @@ -14,6 +14,7 @@ * All initialization functions provided here are intended to be called * from machine specific code with proper arguments when required. */ +#include #include #include #include @@ -54,87 +55,74 @@ struct sa1111 { */ static struct sa1111 *g_sa1111; -static struct sa1111_dev usb_dev = { - .skpcr_mask = SKPCR_UCLKEN, - .devid = SA1111_DEVID_USB, - .irq = { - IRQ_USBPWR, - IRQ_HCIM, - IRQ_HCIBUFFACC, - IRQ_HCIRMTWKP, - IRQ_NHCIMFCIR, - IRQ_USB_PORT_RESUME - }, +struct sa1111_dev_info { + unsigned long offset; + unsigned long skpcr_mask; + unsigned int devid; + unsigned int irq[6]; }; -static struct sa1111_dev sac_dev = { - .skpcr_mask = SKPCR_I2SCLKEN | SKPCR_L3CLKEN, - .devid = SA1111_DEVID_SAC, - .irq = { - AUDXMTDMADONEA, - AUDXMTDMADONEB, - AUDRCVDMADONEA, - AUDRCVDMADONEB +static struct sa1111_dev_info sa1111_devices[] = { + { + .offset = SA1111_USB, + .skpcr_mask = SKPCR_UCLKEN, + .devid = SA1111_DEVID_USB, + .irq = { + IRQ_USBPWR, + IRQ_HCIM, + IRQ_HCIBUFFACC, + IRQ_HCIRMTWKP, + IRQ_NHCIMFCIR, + IRQ_USB_PORT_RESUME + }, }, -}; - -static struct sa1111_dev ssp_dev = { - .skpcr_mask = SKPCR_SCLKEN, - .devid = SA1111_DEVID_SSP, -}; - -static struct sa1111_dev kbd_dev = { - .skpcr_mask = SKPCR_PTCLKEN, - .devid = SA1111_DEVID_PS2, - .irq = { - IRQ_TPRXINT, - IRQ_TPTXINT + { + .offset = 0x0600, + .skpcr_mask = SKPCR_I2SCLKEN | SKPCR_L3CLKEN, + .devid = SA1111_DEVID_SAC, + .irq = { + AUDXMTDMADONEA, + AUDXMTDMADONEB, + AUDRCVDMADONEA, + AUDRCVDMADONEB + }, }, -}; - -static struct sa1111_dev mse_dev = { - .skpcr_mask = SKPCR_PMCLKEN, - .devid = SA1111_DEVID_PS2, - .irq = { - IRQ_MSRXINT, - IRQ_MSTXINT + { + .offset = 0x0800, + .skpcr_mask = SKPCR_SCLKEN, + .devid = SA1111_DEVID_SSP, }, -}; - -static struct sa1111_dev int_dev = { - .skpcr_mask = 0, - .devid = SA1111_DEVID_INT, -}; - -static struct sa1111_dev pcmcia_dev = { - .skpcr_mask = 0, - .devid = SA1111_DEVID_PCMCIA, - .irq = { - IRQ_S0_READY_NINT, - IRQ_S0_CD_VALID, - IRQ_S0_BVD1_STSCHG, - IRQ_S1_READY_NINT, - IRQ_S1_CD_VALID, - IRQ_S1_BVD1_STSCHG, + { + .offset = SA1111_KBD, + .skpcr_mask = SKPCR_PTCLKEN, + .devid = SA1111_DEVID_PS2, + .irq = { + IRQ_TPRXINT, + IRQ_TPTXINT + }, + }, + { + .offset = SA1111_MSE, + .skpcr_mask = SKPCR_PMCLKEN, + .devid = SA1111_DEVID_PS2, + .irq = { + IRQ_MSRXINT, + IRQ_MSTXINT + }, + }, + { + .offset = 0x1800, + .skpcr_mask = 0, + .devid = SA1111_DEVID_PCMCIA, + .irq = { + IRQ_S0_READY_NINT, + IRQ_S0_CD_VALID, + IRQ_S0_BVD1_STSCHG, + IRQ_S1_READY_NINT, + IRQ_S1_CD_VALID, + IRQ_S1_BVD1_STSCHG, + }, }, -}; - -static struct sa1111_dev *devs[] = { - &usb_dev, - &sac_dev, - &ssp_dev, - &kbd_dev, - &mse_dev, - &pcmcia_dev, -}; - -static unsigned int dev_offset[] = { - SA1111_USB, - 0x0600, - 0x0800, - SA1111_KBD, - SA1111_MSE, - 0x1800, }; /* @@ -372,44 +360,45 @@ static struct irqchip sa1111_high_chip = .wake = sa1111_wake_highirq, }; -static void __init sa1111_init_irq(struct sa1111_dev *sadev) +static void sa1111_setup_irq(struct sa1111 *sachip) { + void *irqbase = sachip->base + SA1111_INTC; unsigned int irq; /* * We're guaranteed that this region hasn't been taken. */ - request_mem_region(sadev->res.start, 512, "irqs"); + request_mem_region(sachip->phys + SA1111_INTC, 512, "irq"); /* disable all IRQs */ - sa1111_writel(0, sadev->mapbase + SA1111_INTEN0); - sa1111_writel(0, sadev->mapbase + SA1111_INTEN1); - sa1111_writel(0, sadev->mapbase + SA1111_WAKEEN0); - sa1111_writel(0, sadev->mapbase + SA1111_WAKEEN1); + sa1111_writel(0, irqbase + SA1111_INTEN0); + sa1111_writel(0, irqbase + SA1111_INTEN1); + sa1111_writel(0, irqbase + SA1111_WAKEEN0); + sa1111_writel(0, irqbase + SA1111_WAKEEN1); /* * detect on rising edge. Note: Feb 2001 Errata for SA1111 * specifies that S0ReadyInt and S1ReadyInt should be '1'. */ - sa1111_writel(0, sadev->mapbase + SA1111_INTPOL0); + sa1111_writel(0, irqbase + SA1111_INTPOL0); sa1111_writel(SA1111_IRQMASK_HI(IRQ_S0_READY_NINT) | SA1111_IRQMASK_HI(IRQ_S1_READY_NINT), - sadev->mapbase + SA1111_INTPOL1); + irqbase + SA1111_INTPOL1); /* clear all IRQs */ - sa1111_writel(~0, sadev->mapbase + SA1111_INTSTATCLR0); - sa1111_writel(~0, sadev->mapbase + SA1111_INTSTATCLR1); + sa1111_writel(~0, irqbase + SA1111_INTSTATCLR0); + sa1111_writel(~0, irqbase + SA1111_INTSTATCLR1); for (irq = IRQ_GPAIN0; irq <= SSPROR; irq++) { set_irq_chip(irq, &sa1111_low_chip); - set_irq_chipdata(irq, sadev->mapbase); + set_irq_chipdata(irq, irqbase); set_irq_handler(irq, do_edge_IRQ); set_irq_flags(irq, IRQF_VALID | IRQF_PROBE); } for (irq = AUDXMTDMADONEA; irq <= IRQ_S1_BVD1_STSCHG; irq++) { set_irq_chip(irq, &sa1111_high_chip); - set_irq_chipdata(irq, sadev->mapbase); + set_irq_chipdata(irq, irqbase); set_irq_handler(irq, do_edge_IRQ); set_irq_flags(irq, IRQF_VALID | IRQF_PROBE); } @@ -417,9 +406,9 @@ static void __init sa1111_init_irq(struc /* * Register SA1111 interrupt */ - set_irq_type(sadev->irq[0], IRQT_RISING); - set_irq_data(sadev->irq[0], sadev->mapbase); - set_irq_chained_handler(sadev->irq[0], sa1111_irq_handler); + set_irq_type(sachip->irq, IRQT_RISING); + set_irq_data(sachip->irq, irqbase); + set_irq_chained_handler(sachip->irq, sa1111_irq_handler); } /* @@ -529,37 +518,64 @@ sa1111_configure_smc(struct sa1111 *sach #endif -static void +static void sa1111_dev_release(struct device *_dev) +{ + struct sa1111_dev *dev = SA1111_DEV(_dev); + + release_resource(&dev->res); + kfree(dev); +} + +static int sa1111_init_one_child(struct sa1111 *sachip, struct resource *parent, - struct sa1111_dev *sadev, unsigned int offset) + struct sa1111_dev_info *info) { - snprintf(sadev->dev.bus_id, sizeof(sadev->dev.bus_id), - "%4.4x", offset); + struct sa1111_dev *dev; + int ret; + + dev = kmalloc(sizeof(struct sa1111_dev), GFP_KERNEL); + if (!dev) { + ret = -ENOMEM; + goto out; + } + memset(dev, 0, sizeof(struct sa1111_dev)); + + snprintf(dev->dev.bus_id, sizeof(dev->dev.bus_id), + "%4.4lx", info->offset); /* * If the parent device has a DMA mask associated with it, * propagate it down to the children. */ if (sachip->dev->dma_mask) { - sadev->dma_mask = *sachip->dev->dma_mask; - sadev->dev.dma_mask = &sadev->dma_mask; + dev->dma_mask = *sachip->dev->dma_mask; + dev->dev.dma_mask = &dev->dma_mask; } - sadev->dev.parent = sachip->dev; - sadev->dev.bus = &sa1111_bus_type; - sadev->res.start = sachip->phys + offset; - sadev->res.end = sadev->res.start + 511; - sadev->res.name = sadev->dev.bus_id; - sadev->res.flags = IORESOURCE_MEM; - sadev->mapbase = sachip->base + offset; + dev->devid = info->devid; + dev->dev.parent = sachip->dev; + dev->dev.bus = &sa1111_bus_type; + dev->dev.release = sa1111_dev_release; + dev->res.start = sachip->phys + info->offset; + dev->res.end = dev->res.start + 511; + dev->res.name = dev->dev.bus_id; + dev->res.flags = IORESOURCE_MEM; + dev->mapbase = sachip->base + info->offset; - if (request_resource(parent, &sadev->res)) { + ret = request_resource(parent, &dev->res); + if (ret) { printk("SA1111: failed to allocate resource for %s\n", - sadev->res.name); - return; + dev->res.name); + goto out; } - device_register(&sadev->dev); + ret = device_register(&dev->dev); + if (ret) { + release_resource(&dev->res); + out: + kfree(dev); + } + return ret; } /** @@ -655,11 +671,8 @@ __sa1111_probe(struct device *me, struct * The interrupt controller must be initialised before any * other device to ensure that the interrupts are available. */ - if (irq != NO_IRQ) { - int_dev.irq[0] = irq; - sa1111_init_one_child(sachip, mem, &int_dev, SA1111_INTC); - sa1111_init_irq(&int_dev); - } + if (sachip->irq != NO_IRQ) + sa1111_setup_irq(sachip); g_sa1111 = sachip; @@ -670,9 +683,9 @@ __sa1111_probe(struct device *me, struct else has_devs &= ~(1 << 1); - for (i = 0; i < ARRAY_SIZE(devs); i++) + for (i = 0; i < ARRAY_SIZE(sa1111_devices); i++) if (has_devs & (1 << i)) - sa1111_init_one_child(sachip, mem, devs[i], dev_offset[i]); + sa1111_init_one_child(sachip, mem, &sa1111_devices[i]); return 0; @@ -685,11 +698,26 @@ __sa1111_probe(struct device *me, struct static void __sa1111_remove(struct sa1111 *sachip) { - int i; + struct list_head *l, *n; + void *irqbase = sachip->base + SA1111_INTC; + + list_for_each_safe(l, n, &sachip->dev->children) { + struct device *d = list_to_dev(l); - for (i = 0; i < ARRAY_SIZE(devs); i++) { - put_device(&devs[i]->dev); - release_resource(&devs[i]->res); + device_unregister(d); + } + + /* disable all IRQs */ + sa1111_writel(0, irqbase + SA1111_INTEN0); + sa1111_writel(0, irqbase + SA1111_INTEN1); + sa1111_writel(0, irqbase + SA1111_WAKEEN0); + sa1111_writel(0, irqbase + SA1111_WAKEEN1); + + if (sachip->irq != NO_IRQ) { + set_irq_chained_handler(sachip->irq, NULL); + set_irq_data(sachip->irq, NULL); + + release_mem_region(sachip->phys + SA1111_INTC, 512); } iounmap(sachip->base); @@ -958,17 +986,6 @@ static struct device_driver sa1111_devic }; /* - * Register the SA1111 driver with LDM. - */ -static int sa1111_driver_init(void) -{ - driver_register(&sa1111_device_driver); - return 0; -} - -arch_initcall(sa1111_driver_init); - -/* * Get the parent device driver (us) structure * from a child function device */ @@ -1180,13 +1197,6 @@ struct bus_type sa1111_bus_type = { .resume = sa1111_bus_resume, }; -static int sa1111_rab_bus_init(void) -{ - return bus_register(&sa1111_bus_type); -} - -postcore_initcall(sa1111_rab_bus_init); - int sa1111_driver_register(struct sa1111_driver *driver) { driver->drv.probe = sa1111_bus_probe; @@ -1200,6 +1210,26 @@ void sa1111_driver_unregister(struct sa1 driver_unregister(&driver->drv); } +static int __init sa1111_init(void) +{ + int ret = bus_register(&sa1111_bus_type); + if (ret == 0) + driver_register(&sa1111_device_driver); + return ret; +} + +static void __exit sa1111_exit(void) +{ + driver_unregister(&sa1111_device_driver); + bus_unregister(&sa1111_bus_type); +} + +module_init(sa1111_init); +module_exit(sa1111_exit); + +MODULE_DESCRIPTION("Intel Corporation SA1111 core driver"); +MODULE_LICENSE("GPL"); + EXPORT_SYMBOL(sa1111_check_dma_bug); EXPORT_SYMBOL(sa1111_select_audio_mode); EXPORT_SYMBOL(sa1111_set_audio_rate); diff -prauN linux-2.6.0-test5/arch/arm/configs/a5k_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/a5k_defconfig --- linux-2.6.0-test5/arch/arm/configs/a5k_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/a5k_defconfig 2003-09-25 19:15:43.000000000 -0700 @@ -0,0 +1,526 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +# CONFIG_SBUS is not set +CONFIG_UID16=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +CONFIG_OBSOLETE=y + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +CONFIG_KMOD=y + +# +# System Type +# +CONFIG_ARCH_ARCA5K=y +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Archimedes/A5000 Implementations (select only ONE) +# +# CONFIG_ARCH_ARC is not set +CONFIG_ARCH_A5K=y + +# +# Footbridge Implementations +# + +# +# SA11x0 Implementations +# +CONFIG_ARCH_ACORN=y +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +# CONFIG_CPU_32 is not set +CONFIG_CPU_26=y +# CONFIG_PAGESIZE_16 is not set + +# +# Processor Type +# +# CONFIG_DISCONTIGMEM is not set + +# +# General setup +# +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +# CONFIG_HOTPLUG is not set +# CONFIG_PCMCIA is not set +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +CONFIG_NWFPE=y +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +CONFIG_BINFMT_AOUT=y +# CONFIG_BINFMT_ELF is not set +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set + +# +# Parallel port support +# +CONFIG_PARPORT=m +CONFIG_PARPORT_PC=m +# CONFIG_PARPORT_PC_FIFO is not set +CONFIG_PARPORT_PC_SUPERIO=y +# CONFIG_PARPORT_ARC is not set +# CONFIG_PARPORT_AMIGA is not set +# CONFIG_PARPORT_MFC3 is not set +# CONFIG_PARPORT_ATARI is not set +# CONFIG_PARPORT_SUNBPP is not set +# CONFIG_PARPORT_OTHER is not set +# CONFIG_PARPORT_1284 is not set + +# +# Memory Technology Devices (MTD) +# +# CONFIG_MTD is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set + +# +# Block devices +# +CONFIG_BLK_DEV_FD=y +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +CONFIG_BLK_DEV_LOOP=m +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_INITRD=y + +# +# Acorn-specific block devices +# +# CONFIG_BLK_DEV_FD1772 is not set +CONFIG_BLK_DEV_MFM=m +CONFIG_BLK_DEV_MFM_AUTODETECT=y + +# +# Networking options +# +# CONFIG_PACKET is not set +# CONFIG_NETLINK is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set + +# +# +# +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_NET_SB1000 is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +CONFIG_ARM_ETHER1=y +CONFIG_ARM_ETHER3=y +# CONFIG_ARM_ETHERH is not set +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_LANCE is not set +# CONFIG_NET_VENDOR_SMC is not set +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_AT1700 is not set +# CONFIG_DEPCA is not set +# CONFIG_NET_ISA is not set +# CONFIG_NET_PCI is not set +# CONFIG_NET_POCKET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PLIP is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=y + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=y + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=y +# CONFIG_IDEDISK_MULTI_MODE is not set +# CONFIG_BLK_DEV_IDECS is not set +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set + +# +# IDE chipset support/bugfixes +# +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +CONFIG_BLK_DEV_IDE_ICSIDE=y +# CONFIG_BLK_DEV_IDEDMA_ICS is not set +# CONFIG_IDEDMA_ICS_AUTO is not set +# CONFIG_BLK_DEV_IDEDMA is not set +# CONFIG_BLK_DEV_IDE_RAPIDE is not set +# CONFIG_IDE_CHIPSETS is not set +# CONFIG_IDEDMA_AUTO is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_SERIAL=y +CONFIG_SERIAL_CONSOLE=y +# CONFIG_ATOMWIDE_SERIAL is not set +# CONFIG_DUALSP_SERIAL is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_UNIX98_PTYS is not set +# CONFIG_PRINTER is not set +# CONFIG_PPDEV is not set + +# +# I2C support +# +CONFIG_I2C=y +CONFIG_I2C_ALGOBIT=y +# CONFIG_I2C_PHILIPSPAR is not set +# CONFIG_I2C_ELV is not set +# CONFIG_I2C_VELLEMAN is not set +# CONFIG_I2C_ALGOPCF is not set +CONFIG_I2C_CHARDEV=y + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +CONFIG_MOUSE=y +# CONFIG_PSMOUSE is not set +# CONFIG_82C710_MOUSE is not set +# CONFIG_PC110_PAD is not set + +# +# Joysticks +# +# CONFIG_JOYSTICK is not set + +# +# Input core support is needed for joysticks +# +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +CONFIG_AUTOFS4_FS=y +CONFIG_ADFS_FS=y +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +# CONFIG_UMSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +# CONFIG_CRAMFS is not set +# CONFIG_RAMFS is not set +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_MINIX_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +# CONFIG_DEVPTS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_SYSV_FS_WRITE is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +CONFIG_NFS_FS=y +# CONFIG_NFS_V3 is not set +# CONFIG_ROOT_NFS is not set +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +CONFIG_SUNRPC=y +CONFIG_LOCKD=y +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_MOUNT_SUBDIR is not set +# CONFIG_NCPFS_NDS_DOMAINS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +CONFIG_ACORN_PARTITION=y +CONFIG_ACORN_PARTITION_ADFS=y +CONFIG_ACORN_PARTITION_ICS=y +CONFIG_ACORN_PARTITION_POWERTEC=y +CONFIG_ACORN_PARTITION_RISCIX=y +CONFIG_NLS=y + +# +# Native Language Support +# +CONFIG_NLS_DEFAULT="iso8859-1" +# CONFIG_NLS_CODEPAGE_437 is not set +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_ISO8859_1 is not set +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_UTF8 is not set + +# +# Console drivers +# +CONFIG_FB=y + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +CONFIG_FB_ACORN=y +# CONFIG_FB_CYBER2000 is not set +# CONFIG_FB_VIRTUAL is not set +# CONFIG_FBCON_ADVANCED is not set +CONFIG_FBCON_MFB=y +CONFIG_FBCON_CFB2=y +CONFIG_FBCON_CFB4=y +CONFIG_FBCON_CFB8=y +# CONFIG_FBCON_FONTWIDTH8_ONLY is not set +CONFIG_FBCON_FONTS=y +# CONFIG_FONT_8x8 is not set +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_PEARL_8x8 is not set +CONFIG_FONT_ACORN_8x8=y + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_USER=y +# CONFIG_DEBUG_INFO is not set +CONFIG_MAGIC_SYSRQ=y +CONFIG_NO_PGT_CACHE=y +CONFIG_DEBUG_LL=y diff -prauN linux-2.6.0-test5/arch/arm/configs/adi_evb_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/adi_evb_defconfig --- linux-2.6.0-test5/arch/arm/configs/adi_evb_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/adi_evb_defconfig 2003-09-25 19:15:43.000000000 -0700 @@ -0,0 +1,681 @@ +# +# Automatically generated by make menuconfig: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set +# CONFIG_GENERIC_BUST_SPINLOCK is not set +# CONFIG_GENERIC_ISA_DMA is not set + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set + +# +# System Type +# +CONFIG_ARCH_ADIFCC=y +# CONFIG_ARCH_ANAKIN is not set +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_CAMELOT is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_IOP310 is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_SHARK is not set + +# +# Archimedes/A5000 Implementations +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_ADSBITSY is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_H3600 is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FLEXANET is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_GRAPHICSMASTER is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_SIMPAD is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +# CONFIG_SA1100_USB is not set +# CONFIG_SA1100_USB_NETLINK is not set +# CONFIG_SA1100_USB_CHAR is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_CDB89712 is not set +# CONFIG_ARCH_CLEP7312 is not set +# CONFIG_ARCH_EDB7211 is not set +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_EP7211 is not set +# CONFIG_ARCH_EP7212 is not set +CONFIG_ARCH_ADI_EVB=y +CONFIG_XSCALE_PMU_TIMER=y +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set +# CONFIG_CPU_32v3 is not set +# CONFIG_CPU_32v4 is not set +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM926T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +# CONFIG_CPU_SA1100 is not set +CONFIG_CPU_32v4=y +CONFIG_CPU_XSCALE=y +CONFIG_ARM_THUMB=y +# CONFIG_XSCALE_TOOLS is not set +CONFIG_XSCALE_WRITE_ALLOC=y +CONFIG_XSCALE_PMU=y +CONFIG_ARM_THUMB=y +# CONFIG_DISCONTIGMEM is not set + +# +# General setup +# +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +# CONFIG_HOTPLUG is not set +# CONFIG_PCMCIA is not set +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +CONFIG_BINFMT_AOUT=y +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="console=ttyS0,115200 root=/dev/mtdblock1 mem=32M initrd=0xc0800000,3M" +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_BOOTLDR_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +# CONFIG_MTD_OBSOLETE_CHIPS is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set +# CONFIG_MTD_JEDEC is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_CDB89712 is not set +# CONFIG_MTD_SA1100 is not set +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set +CONFIG_MTD_ADI_EVB=y +# CONFIG_MTD_PCI is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLKMTD is not set +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set +# CONFIG_PNPBIOS is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_CISS_SCSI_TAPE is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=8192 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_MD_MULTIPATH is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +# CONFIG_PACKET is not set +CONFIG_NETLINK=y +CONFIG_RTNETLINK=y +# CONFIG_NETLINK_DEV is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_PNP=y +# CONFIG_IP_PNP_DHCP is not set +CONFIG_IP_PNP_BOOTP=y +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_ETHERTAP is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_ARM_AM79C961A is not set +# CONFIG_SUNLANCE is not set +# CONFIG_SUNBMAC is not set +# CONFIG_SUNQE is not set +# CONFIG_SUNLANCE is not set +# CONFIG_SUNGEM is not set +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_LANCE is not set +# CONFIG_NET_VENDOR_SMC is not set +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_NET_ISA is not set +# CONFIG_NET_PCI is not set +# CONFIG_NET_POCKET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_DL2K is not set +# CONFIG_MYRI_SBUS is not set +# CONFIG_NS83820 is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PLIP is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# ATA/IDE/MFM/RLL support +# +# CONFIG_IDE is not set +# CONFIG_BLK_DEV_HD is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +# CONFIG_INPUT is not set +# CONFIG_INPUT_KEYBDEV is not set +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set + +# +# Character devices +# +# CONFIG_VT is not set +CONFIG_SERIAL=y +CONFIG_SERIAL_CONSOLE=y +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_ANAKIN is not set +# CONFIG_SERIAL_ANAKIN_CONSOLE is not set +# CONFIG_SERIAL_AMBA is not set +# CONFIG_SERIAL_AMBA_CONSOLE is not set +# CONFIG_SERIAL_CLPS711X is not set +# CONFIG_SERIAL_CLPS711X_CONSOLE is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +# CONFIG_SERIAL_UART00 is not set +# CONFIG_SERIAL_UART00_CONSOLE is not set +# CONFIG_SERIAL_SA1100 is not set +# CONFIG_SERIAL_SA1100_CONSOLE is not set +# CONFIG_SERIAL_8250 is not set +# CONFIG_SERIAL_8250_CONSOLE is not set +# CONFIG_SERIAL_8250_EXTENDED is not set +# CONFIG_SERIAL_8250_MANY_PORTS is not set +# CONFIG_SERIAL_8250_SHARE_IRQ is not set +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +# CONFIG_SERIAL_8250_MULTIPORT is not set +# CONFIG_SERIAL_8250_HUB6 is not set +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=256 + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# L3 serial bus support +# +# CONFIG_L3 is not set +# CONFIG_L3_ALGOBIT is not set +# CONFIG_L3_BIT_SA1100_GPIO is not set +# CONFIG_L3_SA1111 is not set +# CONFIG_BIT_SA1100_GPIO is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +CONFIG_MOUSE=y +CONFIG_PSMOUSE=y +# CONFIG_82C710_MOUSE is not set +# CONFIG_PC110_PAD is not set + +# +# Joysticks +# +# CONFIG_INPUT_GAMEPORT is not set +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_CMS_FS is not set +# CONFIG_EXT3_FS is not set +# CONFIG_JBD is not set +# CONFIG_JBD_DEBUG is not set +# CONFIG_FAT_FS is not set +# CONFIG_MSDOS_FS is not set +# CONFIG_UMSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +# CONFIG_CRAMFS is not set +# CONFIG_TMPFS is not set +CONFIG_RAMFS=y +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_ZISOFS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_FREEVXFS_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +# CONFIG_INTERMEZZO_FS is not set +# CONFIG_NFS_FS is not set +# CONFIG_NFS_V3 is not set +# CONFIG_ROOT_NFS is not set +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +# CONFIG_SUNRPC is not set +# CONFIG_LOCKD is not set +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set +# CONFIG_ZISOFS_FS is not set +# CONFIG_ZLIB_FS_INFLATE is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +# CONFIG_MSDOS_PARTITION is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_SMB_NLS is not set +# CONFIG_NLS is not set + +# +# Multimedia Capabilities Port drivers +# +# CONFIG_MCP is not set +# CONFIG_MCP_SA1100 is not set +# CONFIG_MCP_UCB1200 is not set +# CONFIG_MCP_UCB1200_AUDIO is not set +# CONFIG_MCP_UCB1200_TS is not set + +# +# USB support +# +# CONFIG_USB is not set +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +# CONFIG_USB_OHCI is not set +# CONFIG_USB_OHCI_SA1111 is not set +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_HPUSBSCSI is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_CDCETHER is not set +# CONFIG_USB_USBNET is not set +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_IR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set +# CONFIG_USB_SERIAL_OMNINET is not set +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_ID75 is not set + +# +# Bluetooth support +# +# CONFIG_BT is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_USER=y +# CONFIG_DEBUG_INFO is not set +CONFIG_DEBUG_SLAB=y +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_NO_PGT_CACHE is not set +CONFIG_DEBUG_LL=y +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -prauN linux-2.6.0-test5/arch/arm/configs/adsbitsy_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/adsbitsy_defconfig --- linux-2.6.0-test5/arch/arm/configs/adsbitsy_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/adsbitsy_defconfig 2003-09-25 19:15:43.000000000 -0700 @@ -0,0 +1,664 @@ +# +# Automatically generated by make menuconfig: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set + +# +# System Type +# +# CONFIG_ARCH_ANAKIN is not set +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_SHARK is not set + +# +# Archimedes/A5000 Implementations +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_BITSY is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FLEXANET is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_SIMPAD is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +# CONFIG_SA1100_GRAPHICSMASTER is not set +CONFIG_SA1100_ADSBITSY=y +CONFIG_SA1111=y +# CONFIG_SA1100_USB is not set +# CONFIG_SA1100_USB_NETLINK is not set +# CONFIG_SA1100_USB_CHAR is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +CONFIG_CPU_SA1100=y +CONFIG_DISCONTIGMEM=y +# CONFIG_CPU_BIG_ENDIAN is not set + +# +# General setup +# +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +# CONFIG_CPU_FREQ is not set +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=y +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_CLPS6700 is not set +CONFIG_PCMCIA_SA1100=y +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_APM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="ip=off mem=32M root=/dev/ram ramdisk=8192 initrd=0xc0800000,4M" +# CONFIG_PFS168_CMDLINE is not set +# CONFIG_LEDS is not set +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +# CONFIG_MTD is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +CONFIG_BLK_DEV_LOOP=y +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=8192 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +# CONFIG_NETLINK is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_PNP=y +# CONFIG_IP_PNP_DHCP is not set +CONFIG_IP_PNP_BOOTP=y +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_SUNLANCE is not set +# CONFIG_SUNBMAC is not set +# CONFIG_SUNQE is not set +# CONFIG_SUNLANCE is not set +# CONFIG_SUNGEM is not set +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_LANCE is not set +# CONFIG_NET_VENDOR_SMC is not set +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_NET_ISA is not set +# CONFIG_NET_PCI is not set +# CONFIG_NET_POCKET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_MYRI_SBUS is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PLIP is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +# CONFIG_PCMCIA_3C589 is not set +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +CONFIG_PCMCIA_PCNET=y +# CONFIG_PCMCIA_NMCLAN is not set +# CONFIG_PCMCIA_SMC91C92 is not set +# CONFIG_PCMCIA_XIRC2PS is not set +# CONFIG_ARCNET_COM20020_CS is not set +# CONFIG_PCMCIA_IBMTR is not set +# CONFIG_NET_PCMCIA_RADIO is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=y + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=y +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=y +# CONFIG_IDEDISK_MULTI_MODE is not set +CONFIG_BLK_DEV_IDECS=y +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +# CONFIG_IDE_CHIPSETS is not set +# CONFIG_IDEDMA_AUTO is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +CONFIG_INPUT=y +# CONFIG_INPUT_KEYBDEV is not set +CONFIG_INPUT_MOUSEDEV=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=640 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480 +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set + +# +# Character devices +# +CONFIG_VT=y +# CONFIG_VT_CONSOLE is not set +# CONFIG_SERIAL is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +# CONFIG_SERIAL_AMBA is not set +# CONFIG_SERIAL_AMBA_CONSOLE is not set +# CONFIG_SERIAL_CLPS711X is not set +# CONFIG_SERIAL_CLPS711X_CONSOLE is not set +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=38400 +# CONFIG_SERIAL_8250 is not set +# CONFIG_SERIAL_8250_CONSOLE is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=32 +CONFIG_UCB1200=y +CONFIG_TOUCHSCREEN_UCB1200=y +CONFIG_AUDIO_UCB1200=y +CONFIG_ADC_UCB1200=y +# CONFIG_TOUCHSCREEN_BITSY is not set +# CONFIG_PROFILER is not set +# CONFIG_PFS168_SPI is not set +# CONFIG_PFS168_DTMF is not set +# CONFIG_PFS168_MISC is not set + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_MOUSE is not set + +# +# Joysticks +# +# CONFIG_JOYSTICK is not set +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_SA1100_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# PCMCIA character devices +# + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +CONFIG_FAT_FS=y +# CONFIG_MSDOS_FS is not set +# CONFIG_UMSDOS_FS is not set +CONFIG_VFAT_FS=y +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +# CONFIG_JFFS2_FS is not set +CONFIG_CRAMFS=y +# CONFIG_TMPFS is not set +CONFIG_RAMFS=y +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_MINIX_FS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +CONFIG_NFS_FS=y +# CONFIG_NFS_V3 is not set +CONFIG_ROOT_NFS=y +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +CONFIG_SUNRPC=y +CONFIG_LOCKD=y +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_SMB_NLS is not set +CONFIG_NLS=y + +# +# Native Language Support +# +CONFIG_NLS_DEFAULT="iso8859-1" +# CONFIG_NLS_CODEPAGE_437 is not set +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ISO8859_1 is not set +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_UTF8 is not set + +# +# Console drivers +# +CONFIG_PC_KEYMAP=y +# CONFIG_VGA_CONSOLE is not set + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_ACORN is not set +# CONFIG_FB_CLPS711X is not set +# CONFIG_FB_CYBER2000 is not set +CONFIG_FB_SA1100=y +# CONFIG_FB_ANAKIN is not set +# CONFIG_FB_E1355 is not set +# CONFIG_FB_VIRTUAL is not set +# CONFIG_FBCON_ADVANCED is not set +CONFIG_FBCON_CFB2=y +CONFIG_FBCON_CFB4=y +CONFIG_FBCON_CFB8=y +CONFIG_FBCON_CFB16=y +CONFIG_FBCON_FONTWIDTH8_ONLY=y +CONFIG_FBCON_FONTS=y +# CONFIG_FONT_8x8 is not set +CONFIG_FONT_8x16=y +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# USB support +# +CONFIG_USB=y +# CONFIG_USB_DEBUG is not set +CONFIG_USB_DEVICEFS=y +# CONFIG_USB_BANDWIDTH is not set +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +CONFIG_USB_OHCI=y +CONFIG_USB_OHCI_NOPCI=y +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set +# CONFIG_USB_HID is not set +# CONFIG_USB_KBD is not set +CONFIG_USB_MOUSE=y +# CONFIG_USB_WACOM is not set +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_IBMCAM is not set +# CONFIG_USB_OV511 is not set +# CONFIG_USB_PWC is not set +# CONFIG_USB_SE401 is not set +# CONFIG_USB_DSBR is not set +# CONFIG_USB_DABUSB is not set +# CONFIG_USB_PLUSB is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_NET1080 is not set +# CONFIG_USB_USBNET is not set +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set +# CONFIG_USB_RIO500 is not set + +# +# Bluetooth support +# +# CONFIG_BT is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_ERRORS=y +# CONFIG_DEBUG_USER is not set +# CONFIG_DEBUG_INFO is not set +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_NO_PGT_CACHE is not set +# CONFIG_DEBUG_LL is not set +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -prauN linux-2.6.0-test5/arch/arm/configs/anakin_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/anakin_defconfig --- linux-2.6.0-test5/arch/arm/configs/anakin_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/anakin_defconfig 2003-09-25 19:15:43.000000000 -0700 @@ -0,0 +1,632 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set +# CONFIG_GENERIC_BUST_SPINLOCK is not set +# CONFIG_GENERIC_ISA_DMA is not set + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y + +# +# General setup +# +CONFIG_NET=y +# CONFIG_SYSVIPC is not set +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_SYSCTL is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set + +# +# System Type +# +# CONFIG_ARCH_ADIFCC is not set +CONFIG_ARCH_ANAKIN=y +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_CAMELOT is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_IOP310 is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_SHARK is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Archimedes/A5000 Implementations (select only ONE) +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_ADSBITSY is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_H3100 is not set +# CONFIG_SA1100_H3600 is not set +# CONFIG_SA1100_H3800 is not set +# CONFIG_SA1100_H3XXX is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FLEXANET is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_GRAPHICSMASTER is not set +# CONFIG_SA1100_BADGE4 is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_PT_SYSTEM3 is not set +# CONFIG_SA1100_SHANNON is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_SIMPAD is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +# CONFIG_SA1100_STORK is not set +# CONFIG_SA1100_USB is not set +# CONFIG_SA1100_USB_NETLINK is not set +# CONFIG_SA1100_USB_CHAR is not set +# CONFIG_H3600_SLEEVE is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_AUTCPU12 is not set +# CONFIG_ARCH_CDB89712 is not set +# CONFIG_ARCH_CLEP7312 is not set +# CONFIG_ARCH_EDB7211 is not set +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_FORTUNET is not set +# CONFIG_ARCH_EP7211 is not set +# CONFIG_ARCH_EP7212 is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set + +# +# Processor Type +# +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_32v5 is not set +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM922T is not set +# CONFIG_CPU_ARM926T is not set +# CONFIG_CPU_ARM1020 is not set +CONFIG_CPU_SA110=y +# CONFIG_CPU_SA1100 is not set +# CONFIG_CPU_XSCALE is not set +# CONFIG_XSCALE_PMU is not set + +# +# Processor Features +# + +# +# General setup +# +# CONFIG_DISCONTIGMEM is not set +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +# CONFIG_FIQ is not set +# CONFIG_ZBOOT_ROM is not set +CONFIG_ZBOOT_ROM_TEXT=0 +CONFIG_ZBOOT_ROM_BSS=0 +# CONFIG_HOTPLUG is not set +# CONFIG_PCMCIA is not set + +# +# At least one math emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +CONFIG_BINFMT_AOUT=y +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_PREEMPT is not set +# CONFIG_APM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="root=/dev/ram initrd=0xc0800000,4M" +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +# CONFIG_MTD is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set +# CONFIG_PNPBIOS is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_CISS_SCSI_TAPE is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_UMEM is not set +# CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=8192 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_MD_MULTIPATH is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +# CONFIG_PACKET is not set +# CONFIG_NETLINK_DEV is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set +# CONFIG_VLAN_8021Q is not set + +# +# +# +# CONFIG_IPX is not set +# CONFIG_ATALK is not set + +# +# Appletalk devices +# +# CONFIG_DEV_APPLETALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +# CONFIG_NETDEVICES is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +CONFIG_IRDA=y + +# +# IrDA protocols +# +# CONFIG_IRLAN is not set +# CONFIG_IRCOMM is not set +# CONFIG_IRDA_ULTRA is not set + +# +# IrDA options +# +# CONFIG_IRDA_CACHE_LAST_LSAP is not set +# CONFIG_IRDA_FAST_RR is not set +# CONFIG_IRDA_DEBUG is not set + +# +# Infrared-port device drivers +# + +# +# SIR device drivers +# +CONFIG_IRTTY_SIR=y +# CONFIG_IRPORT_SIR is not set + +# +# Dongle support +# +# CONFIG_DONGLE is not set + +# +# FIR device drivers +# +# CONFIG_USB_IRDA is not set +# CONFIG_NSC_FIR is not set +# CONFIG_WINBOND_FIR is not set +# CONFIG_TOSHIBA_FIR is not set +# CONFIG_SMC_IRCC_FIR is not set +# CONFIG_ALI_FIR is not set +# CONFIG_VLSI_FIR is not set + +# +# ATA/IDE/MFM/RLL support +# +# CONFIG_IDE is not set +# CONFIG_BLK_DEV_HD is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN_BOOL is not set + +# +# Input device support +# +# CONFIG_INPUT is not set +# CONFIG_INPUT_KEYBDEV is not set +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set +# CONFIG_GAMEPORT is not set +CONFIG_SOUND_GAMEPORT=y +# CONFIG_GAMEPORT_NS558 is not set +# CONFIG_GAMEPORT_L4 is not set +# CONFIG_INPUT_EMU10K1 is not set +# CONFIG_GAMEPORT_PCIGAME is not set +# CONFIG_GAMEPORT_FM801 is not set +# CONFIG_GAMEPORT_CS461x is not set +# CONFIG_SERIO is not set +# CONFIG_SERIO_SERPORT is not set + +# +# Character devices +# +CONFIG_VT=y +# CONFIG_VT_CONSOLE is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set +# CONFIG_SERIAL_8250_CONSOLE is not set +# CONFIG_SERIAL_8250_EXTENDED is not set +# CONFIG_SERIAL_8250_MANY_PORTS is not set +# CONFIG_SERIAL_8250_SHARE_IRQ is not set +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +# CONFIG_SERIAL_8250_MULTIPORT is not set +# CONFIG_SERIAL_8250_RSA is not set + +# +# Non-8250 serial port support +# + +# +# ARM Serial drivers +# +# CONFIG_ATOMWIDE_SERIAL is not set +# CONFIG_DUALSP_SERIAL is not set +CONFIG_SERIAL_ANAKIN=y +CONFIG_SERIAL_ANAKIN_CONSOLE=y +CONFIG_ANAKIN_DEFAULT_BAUDRATE=115200 +# CONFIG_SERIAL_AMBA is not set +# CONFIG_SERIAL_AMBA_CONSOLE is not set +# CONFIG_SERIAL_CLPS711X is not set +# CONFIG_SERIAL_CLPS711X_CONSOLE is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +# CONFIG_SERIAL_UART00 is not set +# CONFIG_SERIAL_UART00_CONSOLE is not set +# CONFIG_SERIAL_SA1100 is not set +# CONFIG_SERIAL_SA1100_CONSOLE is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_TOUCHSCREEN_ANAKIN=y +# CONFIG_UNIX98_PTYS is not set + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# L3 serial bus support +# +# CONFIG_L3 is not set +# CONFIG_L3_ALGOBIT is not set +# CONFIG_L3_BIT_SA1100_GPIO is not set + +# +# Other L3 adapters +# +# CONFIG_L3_SA1111 is not set +# CONFIG_BIT_SA1100_GPIO is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_MOUSE is not set +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_QFMT_V1 is not set +# CONFIG_QFMT_V2 is not set +# CONFIG_QIFACE_COMPAT is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_REISERFS_PROC_INFO is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EXT3_FS is not set +# CONFIG_JBD is not set +# CONFIG_JBD_DEBUG is not set +# CONFIG_FAT_FS is not set +# CONFIG_MSDOS_FS is not set +# CONFIG_UMSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +# CONFIG_JFFS2_FS is not set +# CONFIG_CRAMFS is not set +# CONFIG_TMPFS is not set +CONFIG_RAMFS=y +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_ZISOFS is not set +# CONFIG_JFS_FS is not set +# CONFIG_JFS_DEBUG is not set +# CONFIG_JFS_STATISTICS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +# CONFIG_DEVPTS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +# CONFIG_INTERMEZZO_FS is not set +# CONFIG_NFS_FS is not set +# CONFIG_NFS_V3 is not set +# CONFIG_ROOT_NFS is not set +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +# CONFIG_NFSD_TCP is not set +# CONFIG_SUNRPC is not set +# CONFIG_LOCKD is not set +# CONFIG_EXPORTFS is not set +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set +# CONFIG_ZISOFS_FS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +# CONFIG_SMB_NLS is not set +# CONFIG_NLS is not set + +# +# Console drivers +# +CONFIG_PC_KEYMAP=y +# CONFIG_VGA_CONSOLE is not set + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_ACORN is not set +CONFIG_FB_ANAKIN=y +# CONFIG_FB_CLPS711X is not set +# CONFIG_FB_SA1100 is not set +# CONFIG_FB_CYBER2000 is not set +# CONFIG_FB_VIRTUAL is not set +# CONFIG_FBCON_ADVANCED is not set +CONFIG_FBCON_CFB16=y +# CONFIG_FBCON_FONTWIDTH8_ONLY is not set +# CONFIG_FBCON_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y + +# +# Multimedia Capabilities Port drivers +# +# CONFIG_MCP is not set +# CONFIG_MCP_SA1100 is not set +# CONFIG_MCP_UCB1200 is not set +# CONFIG_MCP_UCB1200_AUDIO is not set +# CONFIG_MCP_UCB1200_TS is not set + +# +# Console Switches +# +# CONFIG_SWITCHES is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# Bluetooth support +# +# CONFIG_BT is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_USER=y +# CONFIG_DEBUG_INFO is not set +# CONFIG_DEBUG_KERNEL is not set +# CONFIG_DEBUG_SLAB is not set +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_WAITQ is not set +# CONFIG_DEBUG_BUGVERBOSE is not set +# CONFIG_DEBUG_ERRORS is not set +# CONFIG_DEBUG_LL is not set +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set + +# +# Library routines +# +# CONFIG_CRC32 is not set +# CONFIG_ZLIB_INFLATE is not set +# CONFIG_ZLIB_DEFLATE is not set diff -prauN linux-2.6.0-test5/arch/arm/configs/assabet_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/assabet_defconfig --- linux-2.6.0-test5/arch/arm/configs/assabet_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/assabet_defconfig 2003-09-25 19:15:43.000000000 -0700 @@ -0,0 +1,966 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set +# CONFIG_GENERIC_BUST_SPINLOCK is not set +# CONFIG_GENERIC_ISA_DMA is not set + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set + +# +# System Type +# +# CONFIG_ARCH_ANAKIN is not set +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_CAMELOT is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_SHARK is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Archimedes/A5000 Implementations (select only ONE) +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +CONFIG_SA1100_ASSABET=y +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_ADSBITSY is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_H3600 is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FLEXANET is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_GRAPHICSMASTER is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_SIMPAD is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +CONFIG_SA1100_USB=m +CONFIG_SA1100_USB_NETLINK=m +# CONFIG_SA1100_USB_CHAR is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_CDB89712 is not set +# CONFIG_ARCH_CLEP7312 is not set +# CONFIG_ARCH_EDB7211 is not set +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_EP7211 is not set +# CONFIG_ARCH_EP7212 is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set + +# +# Processor Type +# +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +CONFIG_CPU_SA1100=y +# CONFIG_ARM_THUMB is not set +CONFIG_DISCONTIGMEM=y + +# +# General setup +# +# CONFIG_PCI is not set +CONFIG_ISA=y +# CONFIG_ISA_DMA is not set +CONFIG_CPU_FREQ=y +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=y +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_CLPS6700 is not set +CONFIG_PCMCIA_SA1100=y +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y + +# +# At least one math emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +CONFIG_PM=y +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="mem=32M console=ttySA0,38400n8 initrd=0xc0800000,3M root=/dev/ram" +CONFIG_LEDS=y +CONFIG_LEDS_TIMER=y +CONFIG_LEDS_CPU=y +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_PARTITIONS=y +CONFIG_MTD_REDBOOT_PARTS=y +# CONFIG_MTD_BOOTLDR_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_NOSWAP=y +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +CONFIG_MTD_CFI_GEOMETRY=y +# CONFIG_MTD_CFI_B1 is not set +# CONFIG_MTD_CFI_B2 is not set +CONFIG_MTD_CFI_B4=y +# CONFIG_MTD_CFI_I1 is not set +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +# CONFIG_MTD_OBSOLETE_CHIPS is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set +# CONFIG_MTD_JEDEC is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_CDB89712 is not set +CONFIG_MTD_SA1100=y +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set +# CONFIG_MTD_PCI is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLKMTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set +# CONFIG_PNPBIOS is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_CISS_SCSI_TAPE is not set +# CONFIG_BLK_DEV_DAC960 is not set +CONFIG_BLK_DEV_LOOP=m +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_MD_MULTIPATH is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +# CONFIG_PACKET is not set +# CONFIG_NETLINK is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set + +# +# +# +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_ARM_AM79C961A is not set +# CONFIG_SUNLANCE is not set +# CONFIG_SUNBMAC is not set +# CONFIG_SUNQE is not set +# CONFIG_SUNLANCE is not set +# CONFIG_SUNGEM is not set +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_LANCE is not set +# CONFIG_NET_VENDOR_SMC is not set +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_AT1700 is not set +# CONFIG_DEPCA is not set +# CONFIG_HP100 is not set +# CONFIG_NET_ISA is not set +# CONFIG_NET_PCI is not set +# CONFIG_NET_POCKET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_DL2K is not set +# CONFIG_MYRI_SBUS is not set +# CONFIG_NS83820 is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PLIP is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +# CONFIG_PCMCIA_3C589 is not set +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +CONFIG_PCMCIA_PCNET=y +# CONFIG_PCMCIA_NMCLAN is not set +# CONFIG_PCMCIA_SMC91C92 is not set +# CONFIG_PCMCIA_XIRC2PS is not set +# CONFIG_ARCNET_COM20020_CS is not set +# CONFIG_PCMCIA_IBMTR is not set +# CONFIG_NET_PCMCIA_RADIO is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +CONFIG_IRDA=m + +# +# IrDA protocols +# +CONFIG_IRLAN=m +# CONFIG_IRNET is not set +# CONFIG_IRCOMM is not set +# CONFIG_IRDA_ULTRA is not set +# CONFIG_IRDA_OPTIONS is not set + +# +# Infrared-port device drivers +# + +# +# SIR device drivers +# +# CONFIG_IRTTY_SIR is not set +# CONFIG_IRPORT_SIR is not set + +# +# Dongle support +# +# CONFIG_DONGLE is not set + +# +# FIR device drivers +# +# CONFIG_USB_IRDA is not set +# CONFIG_NSC_FIR is not set +# CONFIG_WINBOND_FIR is not set +# CONFIG_TOSHIBA_FIR is not set +# CONFIG_SMC_IRCC_FIR is not set +# CONFIG_ALI_FIR is not set +# CONFIG_VLSI_FIR is not set +CONFIG_SA1100_FIR=m + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=y + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=y + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=y +# CONFIG_IDEDISK_MULTI_MODE is not set +CONFIG_BLK_DEV_IDECS=y +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set + +# +# IDE chipset support/bugfixes +# +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +# CONFIG_IDE_CHIPSETS is not set +# CONFIG_IDEDMA_AUTO is not set +# CONFIG_BLK_DEV_ATARAID is not set +# CONFIG_BLK_DEV_ATARAID_PDC is not set +# CONFIG_BLK_DEV_ATARAID_HPT is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +# CONFIG_INPUT is not set +# CONFIG_INPUT_KEYBDEV is not set +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set + +# +# Character devices +# +CONFIG_VT=y +# CONFIG_VT_CONSOLE is not set +# CONFIG_SERIAL is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_ANAKIN is not set +# CONFIG_SERIAL_ANAKIN_CONSOLE is not set +# CONFIG_SERIAL_AMBA is not set +# CONFIG_SERIAL_AMBA_CONSOLE is not set +# CONFIG_SERIAL_CLPS711X is not set +# CONFIG_SERIAL_CLPS711X_CONSOLE is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +# CONFIG_SERIAL_UART00 is not set +# CONFIG_SERIAL_UART00_CONSOLE is not set +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=38400 +CONFIG_SERIAL_8250=m +# CONFIG_SERIAL_8250_CONSOLE is not set +# CONFIG_SERIAL_8250_EXTENDED is not set +# CONFIG_SERIAL_8250_MANY_PORTS is not set +# CONFIG_SERIAL_8250_SHARE_IRQ is not set +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +# CONFIG_SERIAL_8250_MULTIPORT is not set +# CONFIG_SERIAL_8250_HUB6 is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=32 + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# L3 serial bus support +# +CONFIG_L3=y +CONFIG_L3_ALGOBIT=y +CONFIG_L3_BIT_SA1100_GPIO=y + +# +# Other L3 adapters +# +# CONFIG_L3_SA1111 is not set +CONFIG_BIT_SA1100_GPIO=y + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_MOUSE is not set + +# +# Joysticks +# +# CONFIG_INPUT_GAMEPORT is not set + +# +# Input core support is needed for gameports +# + +# +# Input core support is needed for joysticks +# +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +CONFIG_SA1100_RTC=y +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# PCMCIA character devices +# +CONFIG_PCMCIA_SERIAL_CS=m +# CONFIG_MWAVE is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_CMS_FS is not set +# CONFIG_EXT3_FS is not set +# CONFIG_JBD is not set +# CONFIG_JBD_DEBUG is not set +CONFIG_FAT_FS=y +CONFIG_MSDOS_FS=y +# CONFIG_UMSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +# CONFIG_CRAMFS is not set +CONFIG_TMPFS=y +# CONFIG_RAMFS is not set +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_ZISOFS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_FREEVXFS_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +# CONFIG_INTERMEZZO_FS is not set +CONFIG_NFS_FS=y +# CONFIG_NFS_V3 is not set +# CONFIG_ROOT_NFS is not set +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +CONFIG_SUNRPC=y +CONFIG_LOCKD=y +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set +# CONFIG_ZISOFS_FS is not set +# CONFIG_ZLIB_FS_INFLATE is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_SMB_NLS is not set +CONFIG_NLS=y + +# +# Native Language Support +# +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=y +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ISO8859_1 is not set +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_UTF8 is not set + +# +# Console drivers +# +CONFIG_PC_KEYMAP=y +# CONFIG_VGA_CONSOLE is not set + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_ACORN is not set +# CONFIG_FB_ANAKIN is not set +# CONFIG_FB_CLPS711X is not set +CONFIG_FB_SA1100=y +# CONFIG_FB_CYBER2000 is not set +# CONFIG_FB_VIRTUAL is not set +# CONFIG_FBCON_ADVANCED is not set +CONFIG_FBCON_CFB2=y +CONFIG_FBCON_CFB4=y +CONFIG_FBCON_CFB8=y +CONFIG_FBCON_CFB16=y +CONFIG_FBCON_FONTWIDTH8_ONLY=y +CONFIG_FBCON_FONTS=y +CONFIG_FONT_8x8=y +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set + +# +# Sound +# +CONFIG_SOUND=y +# CONFIG_SOUND_BT878 is not set +# CONFIG_SOUND_CMPCI is not set +# CONFIG_SOUND_EMU10K1 is not set +# CONFIG_MIDI_EMU10K1 is not set +# CONFIG_SOUND_FUSION is not set +# CONFIG_SOUND_CS4281 is not set +# CONFIG_SOUND_ES1370 is not set +# CONFIG_SOUND_ES1371 is not set +# CONFIG_SOUND_ESSSOLO1 is not set +# CONFIG_SOUND_MAESTRO is not set +# CONFIG_SOUND_MAESTRO3 is not set +# CONFIG_SOUND_ICH is not set +# CONFIG_SOUND_RME96XX is not set +# CONFIG_SOUND_SONICVIBES is not set +# CONFIG_SOUND_TRIDENT is not set +# CONFIG_SOUND_MSNDCLAS is not set +# CONFIG_SOUND_MSNDPIN is not set +# CONFIG_SOUND_VIA82CXXX is not set +# CONFIG_MIDI_VIA82CXXX is not set +CONFIG_SOUND_SA1100=y +CONFIG_SOUND_UDA1341=y +CONFIG_SOUND_ASSABET_UDA1341=y +# CONFIG_SOUND_H3600_UDA1341 is not set +# CONFIG_SOUND_PANGOLIN_UDA1341 is not set +# CONFIG_SOUND_SA1111_UDA1341 is not set +# CONFIG_SOUND_SA1100SSP is not set +# CONFIG_SOUND_OSS is not set +# CONFIG_SOUND_WAVEARTIST is not set +# CONFIG_SOUND_TVMIXER is not set + +# +# Multimedia Capabilities Port drivers +# +CONFIG_MCP=y +CONFIG_MCP_SA1100=y +CONFIG_MCP_UCB1200=y +CONFIG_MCP_UCB1200_AUDIO=m +CONFIG_MCP_UCB1200_TS=y + +# +# Console Switches +# +CONFIG_SWITCHES=y +CONFIG_SWITCHES_SA1100=y +CONFIG_SWITCHES_UCB1X00=y + +# +# USB support +# +# CONFIG_USB is not set + +# +# USB Controllers +# +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +# CONFIG_USB_OHCI is not set +# CONFIG_USB_OHCI_SA1111 is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# USB Human Interface Devices (HID) +# + +# +# Input core support is needed for USB HID +# + +# +# USB Imaging devices +# +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_HPUSBSCSI is not set + +# +# USB Multimedia devices +# + +# +# Video4Linux support is needed for USB Multimedia device support +# + +# +# USB Network adaptors +# +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_CDCETHER is not set +# CONFIG_USB_USBNET is not set + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_IR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set +# CONFIG_USB_SERIAL_OMNINET is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_ID75 is not set + +# +# Bluetooth support +# +# CONFIG_BT is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_USER=y +# CONFIG_DEBUG_INFO is not set +# CONFIG_DEBUG_SLAB is not set +CONFIG_MAGIC_SYSRQ=y +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_NO_PGT_CACHE is not set +# CONFIG_DEBUG_LL is not set +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -prauN linux-2.6.0-test5/arch/arm/configs/badge4_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/badge4_defconfig --- linux-2.6.0-test5/arch/arm/configs/badge4_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/badge4_defconfig 2003-09-25 19:15:43.000000000 -0700 @@ -0,0 +1,1162 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set +# CONFIG_GENERIC_BUST_SPINLOCK is not set +# CONFIG_GENERIC_ISA_DMA is not set + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y + +# +# General setup +# +CONFIG_NET=y +# CONFIG_SYSVIPC is not set +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y + +# +# Loadable module support +# +CONFIG_MODULES=y +CONFIG_MODVERSIONS=y +CONFIG_KMOD=y + +# +# System Type +# +# CONFIG_ARCH_ADIFCC is not set +# CONFIG_ARCH_ANAKIN is not set +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_CAMELOT is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_IOP310 is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_SHARK is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Archimedes/A5000 Implementations (select only ONE) +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_ADSBITSY is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_H3100 is not set +# CONFIG_SA1100_H3600 is not set +# CONFIG_SA1100_H3800 is not set +# CONFIG_SA1100_H3XXX is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FLEXANET is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_GRAPHICSMASTER is not set +CONFIG_SA1100_BADGE4=y +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_PT_SYSTEM3 is not set +# CONFIG_SA1100_SHANNON is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_SIMPAD is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +# CONFIG_SA1100_STORK is not set +CONFIG_SA1111=y +CONFIG_FORCE_MAX_ZONEORDER=9 +# CONFIG_SA1100_USB is not set +# CONFIG_SA1100_USB_NETLINK is not set +# CONFIG_SA1100_USB_CHAR is not set +# CONFIG_H3600_SLEEVE is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_AUTCPU12 is not set +# CONFIG_ARCH_CDB89712 is not set +# CONFIG_ARCH_CLEP7312 is not set +# CONFIG_ARCH_EDB7211 is not set +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_FORTUNET is not set +# CONFIG_ARCH_EP7211 is not set +# CONFIG_ARCH_EP7212 is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set + +# +# Processor Type +# +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM922T is not set +# CONFIG_CPU_ARM926T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +CONFIG_CPU_SA1100=y +# CONFIG_XSCALE_PMU is not set +# CONFIG_ARM_THUMB is not set +CONFIG_DISCONTIGMEM=y + +# +# General setup +# +# CONFIG_PCI is not set +CONFIG_ISA=y +# CONFIG_ISA_DMA is not set +# CONFIG_FIQ is not set +CONFIG_CPU_FREQ=y +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=y +CONFIG_PCMCIA_PROBE=y +# CONFIG_I82092 is not set +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_CLPS6700 is not set +CONFIG_PCMCIA_SA1100=y + +# +# At least one math emulation must be selected +# +CONFIG_FPE_NWFPE=y +CONFIG_FPE_FASTFPE=m +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +CONFIG_BINFMT_AOUT=m +CONFIG_BINFMT_ELF=y +CONFIG_BINFMT_MISC=m +# CONFIG_PM is not set +# CONFIG_PREEMPT is not set +# CONFIG_APM is not set +CONFIG_ARTHUR=m +CONFIG_CMDLINE="init=/linuxrc root=/dev/mtdblock3" +# CONFIG_LEDS is not set +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +CONFIG_PARPORT=m +# CONFIG_PARPORT_PC is not set +# CONFIG_PARPORT_ARC is not set +# CONFIG_PARPORT_AMIGA is not set +# CONFIG_PARPORT_MFC3 is not set +# CONFIG_PARPORT_ATARI is not set +# CONFIG_PARPORT_GSC is not set +# CONFIG_PARPORT_SUNBPP is not set +# CONFIG_PARPORT_OTHER is not set +# CONFIG_PARPORT_1284 is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +CONFIG_MTD_DEBUG=y +CONFIG_MTD_DEBUG_VERBOSE=0 +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_BOOTLDR_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_NOSWAP=y +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +CONFIG_MTD_CFI_GEOMETRY=y +# CONFIG_MTD_CFI_B1 is not set +CONFIG_MTD_CFI_B2=y +# CONFIG_MTD_CFI_B4 is not set +CONFIG_MTD_CFI_I1=y +# CONFIG_MTD_CFI_I2 is not set +# CONFIG_MTD_CFI_I4 is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +CONFIG_MTD_RAM=y +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +# CONFIG_MTD_OBSOLETE_CHIPS is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set +# CONFIG_MTD_JEDEC is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_CDB89712 is not set +CONFIG_MTD_SA1100=y +# CONFIG_MTD_2PARTS_IPAQ is not set +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set +# CONFIG_MTD_EPXA10DB is not set +# CONFIG_MTD_PCI is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLKMTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set +# CONFIG_PNPBIOS is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_CISS_SCSI_TAPE is not set +# CONFIG_BLK_DEV_DAC960 is not set +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_NBD=m +# CONFIG_BLK_DEV_RAM is not set +# CONFIG_BLK_DEV_INITRD is not set + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_MD_MULTIPATH is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +# CONFIG_NETLINK_DEV is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set +# CONFIG_VLAN_8021Q is not set + +# +# +# +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_ETHERTAP is not set + +# +# Ethernet (10 or 100Mbit) +# +# CONFIG_NET_ETHERNET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_DL2K is not set +# CONFIG_MYRI_SBUS is not set +# CONFIG_NS83820 is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PLIP is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +CONFIG_NET_RADIO=y +# CONFIG_STRIP is not set +# CONFIG_ARLAN is not set +# CONFIG_AIRONET4500 is not set +# CONFIG_AIRONET4500_NONCS is not set +# CONFIG_AIRONET4500_PROC is not set + +# +# Wireless ISA/PCI cards support +# +# CONFIG_WAVELAN is not set +# CONFIG_AIRO is not set +CONFIG_HERMES=y + +# +# Wireless Pcmcia/Cardbus cards support +# +CONFIG_PCMCIA_NETWAVE=m +CONFIG_PCMCIA_WAVELAN=m +CONFIG_PCMCIA_HERMES=y +CONFIG_AIRO_CS=m +CONFIG_NET_WIRELESS=y + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +CONFIG_PCMCIA_3C589=y +CONFIG_PCMCIA_3C574=m +CONFIG_PCMCIA_FMVJ18X=m +CONFIG_PCMCIA_PCNET=y +CONFIG_PCMCIA_NMCLAN=m +CONFIG_PCMCIA_SMC91C92=m +CONFIG_PCMCIA_XIRC2PS=m +CONFIG_PCMCIA_AXNET=m +# CONFIG_ARCNET_COM20020_CS is not set +# CONFIG_PCMCIA_IBMTR is not set +CONFIG_NET_PCMCIA_RADIO=y +CONFIG_PCMCIA_RAYCS=m +# CONFIG_AIRONET4500_CS is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +CONFIG_IRDA=y + +# +# IrDA protocols +# +CONFIG_IRLAN=y +# CONFIG_IRNET is not set +CONFIG_IRCOMM=y +CONFIG_IRDA_ULTRA=y + +# +# IrDA options +# +# CONFIG_IRDA_CACHE_LAST_LSAP is not set +# CONFIG_IRDA_FAST_RR is not set +# CONFIG_IRDA_DEBUG is not set + +# +# Infrared-port device drivers +# + +# +# SIR device drivers +# +# CONFIG_IRTTY_SIR is not set +# CONFIG_IRPORT_SIR is not set + +# +# Dongle support +# +# CONFIG_DONGLE is not set + +# +# FIR device drivers +# +# CONFIG_USB_IRDA is not set +# CONFIG_NSC_FIR is not set +# CONFIG_WINBOND_FIR is not set +# CONFIG_TOSHIBA_FIR is not set +# CONFIG_SMC_IRCC_FIR is not set +# CONFIG_ALI_FIR is not set +# CONFIG_VLSI_FIR is not set +CONFIG_SA1100_FIR=y + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=m + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=m + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=m +# CONFIG_IDEDISK_MULTI_MODE is not set +# CONFIG_IDEDISK_STROKE is not set +# CONFIG_BLK_DEV_IDECS is not set +CONFIG_BLK_DEV_IDECD=m +# CONFIG_BLK_DEV_IDETAPE is not set +CONFIG_BLK_DEV_IDEFLOPPY=m +CONFIG_BLK_DEV_IDESCSI=m + +# +# IDE chipset support/bugfixes +# +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +# CONFIG_IDE_CHIPSETS is not set +# CONFIG_IDEDMA_AUTO is not set +# CONFIG_BLK_DEV_ATARAID is not set +# CONFIG_BLK_DEV_ATARAID_PDC is not set +# CONFIG_BLK_DEV_ATARAID_HPT is not set + +# +# SCSI support +# +CONFIG_SCSI=y + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=y +CONFIG_SD_EXTRA_DEVS=40 +CONFIG_CHR_DEV_ST=m +# CONFIG_CHR_DEV_OSST is not set +CONFIG_BLK_DEV_SR=m +# CONFIG_BLK_DEV_SR_VENDOR is not set +CONFIG_SR_EXTRA_DEVS=2 +CONFIG_CHR_DEV_SG=y + +# +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs +# +# CONFIG_SCSI_MULTI_LUN is not set +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set + +# +# SCSI low-level drivers +# +# CONFIG_SCSI_7000FASST is not set +# CONFIG_SCSI_ACARD is not set +# CONFIG_SCSI_AHA152X is not set +# CONFIG_SCSI_AHA1542 is not set +# CONFIG_SCSI_AHA1740 is not set +# CONFIG_SCSI_AIC7XXX is not set +# CONFIG_SCSI_AIC7XXX_OLD is not set +# CONFIG_SCSI_DPT_I2O is not set +# CONFIG_SCSI_ADVANSYS is not set +# CONFIG_SCSI_IN2000 is not set +# CONFIG_SCSI_AM53C974 is not set +# CONFIG_SCSI_MEGARAID is not set +# CONFIG_SCSI_BUSLOGIC is not set +# CONFIG_SCSI_DMX3191D is not set +# CONFIG_SCSI_DTC3280 is not set +# CONFIG_SCSI_EATA is not set +# CONFIG_SCSI_EATA_DMA is not set +# CONFIG_SCSI_EATA_PIO is not set +# CONFIG_SCSI_FUTURE_DOMAIN is not set +# CONFIG_SCSI_GDTH is not set +# CONFIG_SCSI_GENERIC_NCR5380 is not set +# CONFIG_SCSI_INITIO is not set +# CONFIG_SCSI_INIA100 is not set +# CONFIG_SCSI_PPA is not set +# CONFIG_SCSI_IMM is not set +# CONFIG_SCSI_NCR53C406A is not set +# CONFIG_SCSI_NCR53C7xx is not set +# CONFIG_SCSI_PAS16 is not set +# CONFIG_SCSI_PCI2000 is not set +# CONFIG_SCSI_PCI2220I is not set +# CONFIG_SCSI_PSI240I is not set +# CONFIG_SCSI_QLOGIC_FAS is not set +# CONFIG_SCSI_SIM710 is not set +# CONFIG_SCSI_SYM53C416 is not set +# CONFIG_SCSI_T128 is not set +# CONFIG_SCSI_U14_34F is not set +# CONFIG_SCSI_DEBUG is not set + +# +# PCMCIA SCSI adapter support +# +# CONFIG_SCSI_PCMCIA is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input device support +# +# CONFIG_INPUT is not set +# CONFIG_INPUT_KEYBDEV is not set +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set +# CONFIG_GAMEPORT is not set +CONFIG_SOUND_GAMEPORT=y +# CONFIG_GAMEPORT_NS558 is not set +# CONFIG_GAMEPORT_L4 is not set +# CONFIG_INPUT_EMU10K1 is not set +# CONFIG_GAMEPORT_PCIGAME is not set +# CONFIG_GAMEPORT_FM801 is not set +# CONFIG_GAMEPORT_CS461x is not set +# CONFIG_SERIO is not set +# CONFIG_SERIO_SERPORT is not set + +# +# Character devices +# +# CONFIG_VT is not set +# CONFIG_SERIAL is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_ANAKIN is not set +# CONFIG_SERIAL_ANAKIN_CONSOLE is not set +# CONFIG_SERIAL_AMBA is not set +# CONFIG_SERIAL_AMBA_CONSOLE is not set +# CONFIG_SERIAL_CLPS711X is not set +# CONFIG_SERIAL_CLPS711X_CONSOLE is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +# CONFIG_SERIAL_UART00 is not set +# CONFIG_SERIAL_UART00_CONSOLE is not set +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=115200 +# CONFIG_SERIAL_8250 is not set +# CONFIG_SERIAL_8250_CONSOLE is not set +# CONFIG_ATOMWIDE_SERIAL is not set +# CONFIG_DUALSP_SERIAL is not set +# CONFIG_SERIAL_8250_EXTENDED is not set +# CONFIG_SERIAL_8250_MANY_PORTS is not set +# CONFIG_SERIAL_8250_SHARE_IRQ is not set +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +# CONFIG_SERIAL_8250_MULTIPORT is not set +# CONFIG_SERIAL_8250_RSA is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=256 +# CONFIG_PRINTER is not set +# CONFIG_PPDEV is not set + +# +# I2C support +# +CONFIG_I2C=m +CONFIG_I2C_ALGOBIT=m +# CONFIG_I2C_PHILIPSPAR is not set +CONFIG_I2C_ELV=m +CONFIG_I2C_VELLEMAN=m +# CONFIG_I2C_BIT_SA1100_GPIO is not set +CONFIG_I2C_ALGOPCF=m +CONFIG_I2C_ELEKTOR=m +CONFIG_I2C_CHARDEV=m +CONFIG_I2C_PROC=m + +# +# L3 serial bus support +# +CONFIG_L3=y +# CONFIG_L3_ALGOBIT is not set +# CONFIG_L3_BIT_SA1100_GPIO is not set + +# +# Other L3 adapters +# +CONFIG_L3_SA1111=y +# CONFIG_BIT_SA1100_GPIO is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_MOUSE is not set +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +CONFIG_WATCHDOG=y +# CONFIG_WATCHDOG_NOWAYOUT is not set +CONFIG_SOFT_WATCHDOG=m +# CONFIG_WDT is not set +# CONFIG_WDTPCI is not set +# CONFIG_PCWATCHDOG is not set +# CONFIG_ACQUIRE_WDT is not set +# CONFIG_ADVANTECH_WDT is not set +# CONFIG_21285_WATCHDOG is not set +# CONFIG_977_WATCHDOG is not set +CONFIG_SA1100_WATCHDOG=m +# CONFIG_EUROTECH_WDT is not set +# CONFIG_IB700_WDT is not set +# CONFIG_I810_TCO is not set +# CONFIG_MIXCOMWD is not set +# CONFIG_60XX_WDT is not set +# CONFIG_W83877F_WDT is not set +# CONFIG_MACHZ_WDT is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +CONFIG_RTC=m +CONFIG_SA1100_RTC=m +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# PCMCIA character devices +# + +# +# Multimedia devices +# +CONFIG_VIDEO_DEV=y + +# +# Video For Linux +# +CONFIG_VIDEO_PROC_FS=y +# CONFIG_I2C_PARPORT is not set + +# +# Video Adapters +# +# CONFIG_VIDEO_BT848 is not set +# CONFIG_VIDEO_PMS is not set +# CONFIG_VIDEO_BWQCAM is not set +# CONFIG_VIDEO_CQCAM is not set +# CONFIG_VIDEO_CPIA is not set +# CONFIG_VIDEO_SAA5249 is not set +# CONFIG_TUNER_3036 is not set +# CONFIG_VIDEO_STRADIS is not set +# CONFIG_VIDEO_ZORAN is not set +# CONFIG_VIDEO_ZORAN_BUZ is not set +# CONFIG_VIDEO_ZORAN_DC10 is not set +# CONFIG_VIDEO_ZORAN_LML33 is not set +# CONFIG_VIDEO_ZR36120 is not set +# CONFIG_VIDEO_MEYE is not set +# CONFIG_VIDEO_CYBERPRO is not set + +# +# Radio Adapters +# +# CONFIG_RADIO_CADET is not set +# CONFIG_RADIO_RTRACK is not set +# CONFIG_RADIO_RTRACK2 is not set +# CONFIG_RADIO_AZTECH is not set +# CONFIG_RADIO_GEMTEK is not set +# CONFIG_RADIO_GEMTEK_PCI is not set +# CONFIG_RADIO_MAXIRADIO is not set +# CONFIG_RADIO_MAESTRO is not set +# CONFIG_RADIO_MIROPCM20 is not set +# CONFIG_RADIO_MIROPCM20_RDS is not set +# CONFIG_RADIO_SF16FMI is not set +# CONFIG_RADIO_TERRATEC is not set +# CONFIG_RADIO_TRUST is not set +# CONFIG_RADIO_TYPHOON is not set +# CONFIG_RADIO_ZOLTRIX is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_REISERFS_PROC_INFO is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +CONFIG_EXT3_FS=m +CONFIG_JBD=m +# CONFIG_JBD_DEBUG is not set +CONFIG_FAT_FS=y +CONFIG_MSDOS_FS=y +# CONFIG_UMSDOS_FS is not set +CONFIG_VFAT_FS=m +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_CRAMFS=m +CONFIG_TMPFS=y +CONFIG_RAMFS=y +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_ZISOFS is not set +CONFIG_MINIX_FS=m +# CONFIG_VXFS_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +CONFIG_DEVFS_FS=y +CONFIG_DEVFS_MOUNT=y +# CONFIG_DEVFS_DEBUG is not set +# CONFIG_DEVPTS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=m +# CONFIG_SYSV_FS is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +# CONFIG_INTERMEZZO_FS is not set +CONFIG_NFS_FS=m +CONFIG_NFS_V3=y +# CONFIG_ROOT_NFS is not set +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +CONFIG_SUNRPC=m +CONFIG_LOCKD=m +CONFIG_LOCKD_V4=y +CONFIG_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set +# CONFIG_ZISOFS_FS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +CONFIG_SMB_NLS=y +CONFIG_NLS=y + +# +# Native Language Support +# +CONFIG_NLS_DEFAULT="iso8859-1" +# CONFIG_NLS_CODEPAGE_437 is not set +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ISO8859_1 is not set +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_UTF8 is not set + +# +# Sound +# +CONFIG_SOUND=y + +# +# Open Sound System +# +CONFIG_SOUND_PRIME=y +# CONFIG_SOUND_BT878 is not set +# CONFIG_SOUND_CMPCI is not set +# CONFIG_SOUND_EMU10K1 is not set +# CONFIG_MIDI_EMU10K1 is not set +# CONFIG_SOUND_FUSION is not set +# CONFIG_SOUND_CS4281 is not set +# CONFIG_SOUND_ES1370 is not set +# CONFIG_SOUND_ES1371 is not set +# CONFIG_SOUND_ESSSOLO1 is not set +# CONFIG_SOUND_MAESTRO is not set +# CONFIG_SOUND_MAESTRO3 is not set +# CONFIG_SOUND_ICH is not set +# CONFIG_SOUND_RME96XX is not set +# CONFIG_SOUND_SONICVIBES is not set +# CONFIG_SOUND_TRIDENT is not set +# CONFIG_SOUND_MSNDCLAS is not set +# CONFIG_SOUND_MSNDPIN is not set +# CONFIG_SOUND_VIA82CXXX is not set +# CONFIG_MIDI_VIA82CXXX is not set +CONFIG_SOUND_SA1100=y +CONFIG_SOUND_UDA1341=y +# CONFIG_SOUND_ASSABET_UDA1341 is not set +# CONFIG_SOUND_H3600_UDA1341 is not set +# CONFIG_SOUND_PANGOLIN_UDA1341 is not set +CONFIG_SOUND_SA1111_UDA1341=y +# CONFIG_SOUND_STORK_UDA1341 is not set +# CONFIG_SOUND_SA1100SSP is not set +# CONFIG_SOUND_STORK_AC97 is not set +# CONFIG_SOUND_OSS is not set +# CONFIG_SOUND_WAVEARTIST is not set +# CONFIG_SOUND_TVMIXER is not set + +# +# Advanced Linux Sound Architecture +# +# CONFIG_SND is not set + +# +# Multimedia Capabilities Port drivers +# +CONFIG_MCP=y +CONFIG_MCP_SA1100=y +# CONFIG_MCP_UCB1200 is not set +# CONFIG_MCP_UCB1200_AUDIO is not set +# CONFIG_MCP_UCB1200_TS is not set + +# +# USB support +# +CONFIG_USB=y +CONFIG_USB_DEBUG=y + +# +# Miscellaneous USB options +# +CONFIG_USB_DEVICEFS=y +# CONFIG_USB_BANDWIDTH is not set +# CONFIG_USB_LONG_TIMEOUT is not set + +# +# USB Host Controller Drivers +# +# CONFIG_USB_EHCI_HCD is not set +# CONFIG_USB_OHCI_HCD is not set +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +# CONFIG_USB_OHCI is not set +CONFIG_USB_OHCI_SA1111=y + +# +# USB Device Class drivers +# +CONFIG_USB_AUDIO=y +CONFIG_USB_BLUETOOTH=m +CONFIG_USB_STORAGE=y +CONFIG_USB_STORAGE_DEBUG=y +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +CONFIG_USB_ACM=m +CONFIG_USB_PRINTER=m + +# +# USB Human Interface Devices (HID) +# + +# +# Input core support is needed for USB HID +# + +# +# USB Imaging devices +# +CONFIG_USB_DC2XX=m +CONFIG_USB_MDC800=m +CONFIG_USB_SCANNER=m +CONFIG_USB_MICROTEK=m +CONFIG_USB_HPUSBSCSI=m + +# +# USB Multimedia devices +# +CONFIG_USB_IBMCAM=m +CONFIG_USB_OV511=m +CONFIG_USB_PWC=m +CONFIG_USB_SE401=m +# CONFIG_USB_STV680 is not set +CONFIG_USB_VICAM=m +CONFIG_USB_DSBR=m +CONFIG_USB_DABUSB=m +CONFIG_USB_KONICAWC=m + +# +# USB Network adaptors +# +CONFIG_USB_PEGASUS=m +CONFIG_USB_KAWETH=m +CONFIG_USB_CATC=m +CONFIG_USB_CDCETHER=m +CONFIG_USB_USBNET=m + +# +# USB port drivers +# +CONFIG_USB_USS720=m + +# +# USB Serial Converter support +# +CONFIG_USB_SERIAL=m +CONFIG_USB_SERIAL_GENERIC=y +CONFIG_USB_SERIAL_BELKIN=m +CONFIG_USB_SERIAL_WHITEHEAT=m +CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m +CONFIG_USB_SERIAL_EMPEG=m +CONFIG_USB_SERIAL_FTDI_SIO=m +CONFIG_USB_SERIAL_VISOR=m +# CONFIG_USB_SERIAL_IPAQ is not set +CONFIG_USB_SERIAL_IR=m +CONFIG_USB_SERIAL_EDGEPORT=m +CONFIG_USB_SERIAL_KEYSPAN_PDA=m +CONFIG_USB_SERIAL_KEYSPAN=m +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +CONFIG_USB_SERIAL_MCT_U232=m +# CONFIG_USB_SERIAL_KLSI is not set +CONFIG_USB_SERIAL_PL2303=m +CONFIG_USB_SERIAL_CYBERJACK=m +CONFIG_USB_SERIAL_XIRCOM=m +CONFIG_USB_SERIAL_OMNINET=m + +# +# USB Miscellaneous drivers +# +CONFIG_USB_RIO500=m +# CONFIG_USB_AUERSWALD is not set + +# +# Bluetooth support +# +CONFIG_BT=m +CONFIG_BT_L2CAP=m + +# +# Bluetooth device drivers +# +CONFIG_BT_HCIUSB=m +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIVHCI=m + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_USER=y +CONFIG_DEBUG_INFO=y +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_SLAB is not set +CONFIG_MAGIC_SYSRQ=y +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_WAITQ is not set +CONFIG_DEBUG_BUGVERBOSE=y +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_LL=y +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set + +# +# Library routines +# +# CONFIG_CRC32 is not set +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y diff -prauN linux-2.6.0-test5/arch/arm/configs/brutus_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/brutus_defconfig --- linux-2.6.0-test5/arch/arm/configs/brutus_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/brutus_defconfig 2003-09-25 19:15:43.000000000 -0700 @@ -0,0 +1,296 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +# CONFIG_SBUS is not set +CONFIG_UID16=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set + +# +# System Type +# +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +CONFIG_SA1100_BRUTUS=y +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_BITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_THINCLIENT is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +CONFIG_ANGELBOOT=y +# CONFIG_SA1100_FREQUENCY_SCALE is not set +# CONFIG_SA1100_VOLTAGE_SCALE is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set +CONFIG_CPU_32v4=y +CONFIG_CPU_SA1100=y +CONFIG_DISCONTIGMEM=y +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +CONFIG_PC_KEYMAP=y + +# +# General setup +# +# CONFIG_HOTPLUG is not set +# CONFIG_PCMCIA is not set +# CONFIG_NET is not set +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +CONFIG_NWFPE=y +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +CONFIG_BINFMT_AOUT=y +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="mem=4M@0xc0000000 mem=4M@0xc8000000 mem=4M@0xd0000000 mem=4M@0xd8000000 keepinitrd root=/dev/ram ramdisk=8192 initrd=0xd8000000,3M" +CONFIG_LEDS=y +CONFIG_LEDS_TIMER=y +CONFIG_LEDS_CPU=y +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +# CONFIG_MTD is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_LVM is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_INITRD=y +# CONFIG_BLK_DEV_FLASH is not set + +# +# ATA/IDE/MFM/RLL support +# +# CONFIG_IDE is not set +# CONFIG_BLK_DEV_HD is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Character devices +# +CONFIG_VT=y +# CONFIG_VT_CONSOLE is not set +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +# CONFIG_TOUCHSCREEN_UCB1200 is not set +# CONFIG_TOUCHSCREEN_BITSY is not set +# CONFIG_SERIAL is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=32 + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_MOUSE is not set + +# +# Joysticks +# +# CONFIG_JOYSTICK is not set +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set + +# +# Video For Linux +# +# CONFIG_VIDEO_DEV is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_FAT_FS is not set +# CONFIG_MSDOS_FS is not set +# CONFIG_UMSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +# CONFIG_CRAMFS is not set +# CONFIG_RAMFS is not set +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_MINIX_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_SYSV_FS_WRITE is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set +# CONFIG_NCPFS_NLS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_NLS is not set + +# +# Console drivers +# +# CONFIG_VGA_CONSOLE is not set +CONFIG_FB=y + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_CYBER2000 is not set +CONFIG_FB_SA1100=y +# CONFIG_FB_VIRTUAL is not set +# CONFIG_FBCON_ADVANCED is not set +CONFIG_FBCON_CFB2=y +CONFIG_FBCON_CFB4=y +CONFIG_FBCON_CFB8=y +CONFIG_FBCON_CFB16=y +CONFIG_FBCON_FONTWIDTH8_ONLY=y +CONFIG_FBCON_FONTS=y +CONFIG_FONT_8x8=y +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_USER=y +CONFIG_DEBUG_INFO=y +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_DEBUG_LL is not set diff -prauN linux-2.6.0-test5/arch/arm/configs/cerfcube_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/cerfcube_defconfig --- linux-2.6.0-test5/arch/arm/configs/cerfcube_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/cerfcube_defconfig 2003-09-25 19:15:43.000000000 -0700 @@ -0,0 +1,873 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set + +# +# System Type +# +# CONFIG_ARCH_ANAKIN is not set +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_SHARK is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Archimedes/A5000 Implementations (select only ONE) +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_ADSBITSY is not set +# CONFIG_SA1100_BRUTUS is not set +CONFIG_SA1100_CERF=y +# CONFIG_SA1100_CERF_FLASH_8MB is not set +CONFIG_SA1100_CERF_FLASH_16MB=y +# CONFIG_SA1100_CERF_FLASH_32MB is not set +# CONFIG_SA1100_CERF_CPLD is not set +# CONFIG_SA1100_H3600 is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FLEXANET is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_GRAPHICSMASTER is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_SIMPAD is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +CONFIG_SA1100_USB=y +CONFIG_SA1100_USB_NETLINK=y +CONFIG_SA1100_USB_CHAR=y + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_CDB89712 is not set +# CONFIG_ARCH_CLEP7312 is not set +# CONFIG_ARCH_EDB7211 is not set +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_EP7211 is not set +# CONFIG_ARCH_EP7212 is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set + +# +# Processor Type +# +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +CONFIG_CPU_SA1100=y +# CONFIG_ARM_THUMB is not set +CONFIG_DISCONTIGMEM=y + +# +# General setup +# +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +CONFIG_CPU_FREQ=y +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=y +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_CLPS6700 is not set +CONFIG_PCMCIA_SA1100=y +CONFIG_NET=y +CONFIG_SYSVIPC=y +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_SYSCTL=y + +# +# At least one math emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_APM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="console=ttySA0 root=/dev/mtdblock3 rw mem=32M" +# CONFIG_PFS168_CMDLINE is not set +CONFIG_LEDS=y +CONFIG_LEDS_TIMER=y +CONFIG_LEDS_CPU=y +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_BOOTLDR_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +# CONFIG_MTD_OBSOLETE_CHIPS is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_SUN_UFLASH is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_PNC2000 is not set +# CONFIG_MTD_RPXLITE is not set +# CONFIG_MTD_TQM8XXL is not set +# CONFIG_MTD_SC520CDP is not set +# CONFIG_MTD_NETSC520 is not set +# CONFIG_MTD_SBC_GXX is not set +# CONFIG_MTD_ELAN_104NC is not set +# CONFIG_MTD_DBOX2 is not set +# CONFIG_MTD_CSTM_MIPS_IXX is not set +# CONFIG_MTD_CFI_FLAGADM is not set +# CONFIG_MTD_SOLUTIONENGINE is not set +# CONFIG_MTD_MIXMEM is not set +# CONFIG_MTD_OCTAGON is not set +# CONFIG_MTD_VMAX is not set +# CONFIG_MTD_OCELOT is not set +# CONFIG_MTD_L440GX is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_CDB89712 is not set +CONFIG_MTD_SA1100=y +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_LART is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLKMTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set +# CONFIG_PNPBIOS is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +CONFIG_BLK_DEV_LOOP=y +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +CONFIG_NETLINK=y +CONFIG_RTNETLINK=y +# CONFIG_NETLINK_DEV is not set +# CONFIG_NETFILTER is not set +CONFIG_FILTER=y +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set + +# +# +# +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_ETHERTAP is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_SUNLANCE is not set +# CONFIG_SUNBMAC is not set +# CONFIG_SUNQE is not set +# CONFIG_SUNLANCE is not set +# CONFIG_SUNGEM is not set +CONFIG_NET_VENDOR_3COM=y +# CONFIG_EL1 is not set +# CONFIG_EL2 is not set +# CONFIG_ELPLUS is not set +# CONFIG_EL16 is not set +# CONFIG_ELMC is not set +# CONFIG_ELMC_II is not set +CONFIG_CERF_CS8900A=y +# CONFIG_LANCE is not set +# CONFIG_NET_VENDOR_SMC is not set +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_NET_ISA is not set +# CONFIG_NET_PCI is not set +# CONFIG_NET_POCKET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_DL2K is not set +# CONFIG_MYRI_SBUS is not set +# CONFIG_NS83820 is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PLIP is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +# CONFIG_PCMCIA_3C589 is not set +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +CONFIG_PCMCIA_PCNET=m +# CONFIG_PCMCIA_NMCLAN is not set +# CONFIG_PCMCIA_SMC91C92 is not set +# CONFIG_PCMCIA_XIRC2PS is not set +# CONFIG_ARCNET_COM20020_CS is not set +# CONFIG_PCMCIA_IBMTR is not set +# CONFIG_NET_PCMCIA_RADIO is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=y + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=y + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=y +# CONFIG_IDEDISK_MULTI_MODE is not set +CONFIG_BLK_DEV_IDECS=m +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set + +# +# IDE chipset support/bugfixes +# +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +# CONFIG_IDE_CHIPSETS is not set +# CONFIG_IDEDMA_AUTO is not set +# CONFIG_BLK_DEV_ATARAID is not set +# CONFIG_BLK_DEV_ATARAID_PDC is not set +# CONFIG_BLK_DEV_ATARAID_HPT is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +# CONFIG_INPUT is not set +# CONFIG_INPUT_KEYBDEV is not set +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set + +# +# Character devices +# +CONFIG_VT=y +# CONFIG_VT_CONSOLE is not set +# CONFIG_SERIAL is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_ANAKIN is not set +# CONFIG_SERIAL_ANAKIN_CONSOLE is not set +# CONFIG_SERIAL_AMBA is not set +# CONFIG_SERIAL_AMBA_CONSOLE is not set +# CONFIG_SERIAL_CLPS711X is not set +# CONFIG_SERIAL_CLPS711X_CONSOLE is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=9600 +# CONFIG_SERIAL_8250 is not set +# CONFIG_SERIAL_8250_CONSOLE is not set +# CONFIG_SERIAL_8250_EXTENDED is not set +# CONFIG_SERIAL_8250_MANY_PORTS is not set +# CONFIG_SERIAL_8250_SHARE_IRQ is not set +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +# CONFIG_SERIAL_8250_MULTIPORT is not set +# CONFIG_SERIAL_8250_HUB6 is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=32 +# CONFIG_UCB1200 is not set +# CONFIG_TOUCHSCREEN_UCB1200 is not set +# CONFIG_AUDIO_UCB1200 is not set +# CONFIG_ADC_UCB1200 is not set +# CONFIG_TOUCHSCREEN_H3600 is not set +# CONFIG_PROFILER is not set +# CONFIG_PFS168_SPI is not set +# CONFIG_PFS168_DTMF is not set +# CONFIG_PFS168_MISC is not set + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# L3 serial bus support +# +# CONFIG_L3 is not set +# CONFIG_L3_ALGOBIT is not set +# CONFIG_L3_BIT_SA1100_GPIO is not set +# CONFIG_BIT_SA1100_UCB1200 is not set + +# +# Other L3 adapters +# +# CONFIG_L3_SA1111 is not set + +# +# L3 driver support +# +# CONFIG_L3_DRV_UDA1341 is not set +# CONFIG_BIT_SA1100_GPIO is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_MOUSE is not set + +# +# Joysticks +# +# CONFIG_INPUT_GAMEPORT is not set + +# +# Input core support is needed for gameports +# + +# +# Input core support is needed for joysticks +# +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +CONFIG_SA1100_RTC=y +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set +# CONFIG_SONYPI is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# PCMCIA character devices +# + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +CONFIG_AUTOFS_FS=y +CONFIG_AUTOFS4_FS=y +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_REISERFS_PROC_INFO is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_CMS_FS is not set +# CONFIG_EXT3_FS is not set +# CONFIG_JBD is not set +# CONFIG_JBD_DEBUG is not set +CONFIG_FAT_FS=y +CONFIG_MSDOS_FS=y +CONFIG_UMSDOS_FS=y +CONFIG_VFAT_FS=y +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +# CONFIG_CRAMFS is not set +# CONFIG_TMPFS is not set +CONFIG_RAMFS=y +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_MINIX_FS is not set +# CONFIG_FREEVXFS_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +CONFIG_ROMFS_FS=y +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +# CONFIG_INTERMEZZO_FS is not set +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +# CONFIG_ROOT_NFS is not set +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +CONFIG_SUNRPC=y +CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_SMB_NLS is not set +CONFIG_NLS=y + +# +# Native Language Support +# +CONFIG_NLS_DEFAULT="iso8859-1" +# CONFIG_NLS_CODEPAGE_437 is not set +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ISO8859_1 is not set +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_UTF8 is not set + +# +# Console drivers +# +CONFIG_PC_KEYMAP=y +# CONFIG_VGA_CONSOLE is not set + +# +# Frame-buffer support +# +# CONFIG_FB is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# USB Controllers +# +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +# CONFIG_USB_OHCI is not set +# CONFIG_USB_OHCI_SA1111 is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# USB Human Interface Devices (HID) +# + +# +# Input core support is needed for USB HID +# + +# +# USB Imaging devices +# +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_HPUSBSCSI is not set + +# +# USB Multimedia devices +# + +# +# Video4Linux support is needed for USB Multimedia device support +# +# CONFIG_USB_DABUSB is not set + +# +# USB Network adaptors +# +# CONFIG_USB_PLUSB is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_CDCETHER is not set +# CONFIG_USB_USBNET is not set + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_OMNINET is not set + +# +# Miscellaneous USB drivers +# +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_ID75 is not set + +# +# Bluetooth support +# +# CONFIG_BT is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_USER=y +# CONFIG_DEBUG_INFO is not set +CONFIG_MAGIC_SYSRQ=y +# CONFIG_NO_PGT_CACHE is not set +# CONFIG_DEBUG_LL is not set +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -prauN linux-2.6.0-test5/arch/arm/configs/cerfpda_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/cerfpda_defconfig --- linux-2.6.0-test5/arch/arm/configs/cerfpda_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/cerfpda_defconfig 2003-09-25 19:15:43.000000000 -0700 @@ -0,0 +1,967 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set + +# +# System Type +# +# CONFIG_ARCH_ANAKIN is not set +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_SHARK is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Archimedes/A5000 Implementations (select only ONE) +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_ADSBITSY is not set +# CONFIG_SA1100_BRUTUS is not set +CONFIG_SA1100_CERF=y +# CONFIG_SA1100_CERF_FLASH_8MB is not set +# CONFIG_SA1100_CERF_FLASH_16MB is not set +CONFIG_SA1100_CERF_FLASH_32MB=y +CONFIG_SA1100_CERF_CPLD=y +# CONFIG_SA1100_H3600 is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FLEXANET is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_GRAPHICSMASTER is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_SIMPAD is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +CONFIG_SA1100_USB=y +CONFIG_SA1100_USB_NETLINK=y +CONFIG_SA1100_USB_CHAR=y + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_CDB89712 is not set +# CONFIG_ARCH_CLEP7312 is not set +# CONFIG_ARCH_EDB7211 is not set +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_EP7211 is not set +# CONFIG_ARCH_EP7212 is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set + +# +# Processor Type +# +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +CONFIG_CPU_SA1100=y +# CONFIG_ARM_THUMB is not set +CONFIG_DISCONTIGMEM=y + +# +# General setup +# +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +CONFIG_CPU_FREQ=y +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=y +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_CLPS6700 is not set +CONFIG_PCMCIA_SA1100=y +CONFIG_NET=y +CONFIG_SYSVIPC=y +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_SYSCTL=y + +# +# At least one math emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_APM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="console=ttySA0 cpufreq_max=221200 root=/dev/mtdblock3 rw mem=64M" +# CONFIG_PFS168_CMDLINE is not set +# CONFIG_LEDS is not set +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_BOOTLDR_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_NOSWAP=y +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +CONFIG_MTD_CFI_GEOMETRY=y +# CONFIG_MTD_CFI_B1 is not set +# CONFIG_MTD_CFI_B2 is not set +CONFIG_MTD_CFI_B4=y +# CONFIG_MTD_CFI_I1 is not set +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +# CONFIG_MTD_OBSOLETE_CHIPS is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_SUN_UFLASH is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_PNC2000 is not set +# CONFIG_MTD_RPXLITE is not set +# CONFIG_MTD_TQM8XXL is not set +# CONFIG_MTD_SC520CDP is not set +# CONFIG_MTD_NETSC520 is not set +# CONFIG_MTD_SBC_GXX is not set +# CONFIG_MTD_ELAN_104NC is not set +# CONFIG_MTD_DBOX2 is not set +# CONFIG_MTD_CSTM_MIPS_IXX is not set +# CONFIG_MTD_CFI_FLAGADM is not set +# CONFIG_MTD_SOLUTIONENGINE is not set +# CONFIG_MTD_MIXMEM is not set +# CONFIG_MTD_OCTAGON is not set +# CONFIG_MTD_VMAX is not set +# CONFIG_MTD_OCELOT is not set +# CONFIG_MTD_L440GX is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_CDB89712 is not set +CONFIG_MTD_SA1100=y +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_LART is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLKMTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set +# CONFIG_PNPBIOS is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +CONFIG_BLK_DEV_LOOP=y +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_PACKET_MMAP=y +CONFIG_NETLINK=y +CONFIG_RTNETLINK=y +# CONFIG_NETLINK_DEV is not set +# CONFIG_NETFILTER is not set +CONFIG_FILTER=y +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_IP_MROUTE is not set +# CONFIG_ARPD is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set + +# +# +# +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_ETHERTAP is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_SUNLANCE is not set +# CONFIG_SUNBMAC is not set +# CONFIG_SUNQE is not set +# CONFIG_SUNLANCE is not set +# CONFIG_SUNGEM is not set +CONFIG_NET_VENDOR_3COM=y +# CONFIG_EL1 is not set +# CONFIG_EL2 is not set +# CONFIG_ELPLUS is not set +# CONFIG_EL16 is not set +# CONFIG_ELMC is not set +# CONFIG_ELMC_II is not set +CONFIG_CERF_CS8900A=y +# CONFIG_LANCE is not set +# CONFIG_NET_VENDOR_SMC is not set +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_NET_ISA is not set +# CONFIG_NET_PCI is not set +# CONFIG_NET_POCKET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_DL2K is not set +# CONFIG_MYRI_SBUS is not set +# CONFIG_NS83820 is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PLIP is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +CONFIG_NET_RADIO=y +CONFIG_STRIP=m +CONFIG_WAVELAN=m +CONFIG_ARLAN=m +CONFIG_AIRONET4500=m +CONFIG_AIRONET4500_NONCS=m +# CONFIG_AIRONET4500_PNP is not set +# CONFIG_AIRONET4500_PCI is not set +# CONFIG_AIRONET4500_ISA is not set +# CONFIG_AIRONET4500_I365 is not set +CONFIG_AIRONET4500_PROC=m + +# +# Wireless Pcmcia cards support +# +CONFIG_PCMCIA_HERMES=m +CONFIG_AIRO_CS=m +CONFIG_NET_WIRELESS=y + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +CONFIG_PCMCIA_3C589=m +CONFIG_PCMCIA_3C574=m +CONFIG_PCMCIA_FMVJ18X=m +CONFIG_PCMCIA_PCNET=m +CONFIG_PCMCIA_NMCLAN=m +CONFIG_PCMCIA_SMC91C92=m +CONFIG_PCMCIA_XIRC2PS=m +# CONFIG_ARCNET_COM20020_CS is not set +# CONFIG_PCMCIA_IBMTR is not set +CONFIG_NET_PCMCIA_RADIO=y +CONFIG_PCMCIA_RAYCS=m +CONFIG_PCMCIA_NETWAVE=m +CONFIG_PCMCIA_WAVELAN=m +CONFIG_AIRONET4500_CS=m + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=y + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=y + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=y +# CONFIG_IDEDISK_MULTI_MODE is not set +CONFIG_BLK_DEV_IDECS=m +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set + +# +# IDE chipset support/bugfixes +# +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +# CONFIG_IDE_CHIPSETS is not set +# CONFIG_IDEDMA_AUTO is not set +# CONFIG_BLK_DEV_ATARAID is not set +# CONFIG_BLK_DEV_ATARAID_PDC is not set +# CONFIG_BLK_DEV_ATARAID_HPT is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +# CONFIG_INPUT is not set +# CONFIG_INPUT_KEYBDEV is not set +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +# CONFIG_SERIAL is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_ANAKIN is not set +# CONFIG_SERIAL_ANAKIN_CONSOLE is not set +# CONFIG_SERIAL_AMBA is not set +# CONFIG_SERIAL_AMBA_CONSOLE is not set +# CONFIG_SERIAL_CLPS711X is not set +# CONFIG_SERIAL_CLPS711X_CONSOLE is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=38400 +CONFIG_SERIAL_8250=y +# CONFIG_SERIAL_8250_CONSOLE is not set +# CONFIG_SERIAL_8250_EXTENDED is not set +# CONFIG_SERIAL_8250_MANY_PORTS is not set +# CONFIG_SERIAL_8250_SHARE_IRQ is not set +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +# CONFIG_SERIAL_8250_MULTIPORT is not set +# CONFIG_SERIAL_8250_HUB6 is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=32 +CONFIG_UCB1200=y +CONFIG_TOUCHSCREEN_UCB1200=y +CONFIG_CERF_TS_MANUAL=y +CONFIG_CERF_TS_MAXX="924" +CONFIG_CERF_TS_MAXY="920" +CONFIG_CERF_TS_MINX="57" +CONFIG_CERF_TS_MINY="52" +CONFIG_CERF_TS_RESX="240" +CONFIG_CERF_TS_RESY="320" +# CONFIG_AUDIO_UCB1200 is not set +# CONFIG_ADC_UCB1200 is not set +# CONFIG_TOUCHSCREEN_H3600 is not set +# CONFIG_PROFILER is not set +# CONFIG_PFS168_SPI is not set +# CONFIG_PFS168_DTMF is not set +# CONFIG_PFS168_MISC is not set +CONFIG_SA1100_CERF_KEYPAD=y + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# L3 serial bus support +# +# CONFIG_L3 is not set +# CONFIG_L3_ALGOBIT is not set +# CONFIG_L3_BIT_SA1100_GPIO is not set +# CONFIG_BIT_SA1100_UCB1200 is not set + +# +# Other L3 adapters +# +# CONFIG_L3_SA1111 is not set + +# +# L3 driver support +# +# CONFIG_L3_DRV_UDA1341 is not set +# CONFIG_BIT_SA1100_GPIO is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_MOUSE is not set + +# +# Joysticks +# +# CONFIG_INPUT_GAMEPORT is not set + +# +# Input core support is needed for gameports +# + +# +# Input core support is needed for joysticks +# +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +CONFIG_SA1100_RTC=y +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set +# CONFIG_SONYPI is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# PCMCIA character devices +# + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_REISERFS_PROC_INFO is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_CMS_FS is not set +# CONFIG_EXT3_FS is not set +# CONFIG_JBD is not set +# CONFIG_JBD_DEBUG is not set +CONFIG_FAT_FS=y +CONFIG_MSDOS_FS=y +CONFIG_UMSDOS_FS=y +CONFIG_VFAT_FS=y +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +# CONFIG_CRAMFS is not set +# CONFIG_TMPFS is not set +CONFIG_RAMFS=y +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_MINIX_FS is not set +# CONFIG_FREEVXFS_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +CONFIG_ROMFS_FS=y +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +# CONFIG_INTERMEZZO_FS is not set +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +# CONFIG_ROOT_NFS is not set +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +CONFIG_SUNRPC=y +CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_SMB_NLS is not set +CONFIG_NLS=y + +# +# Native Language Support +# +CONFIG_NLS_DEFAULT="iso8859-1" +# CONFIG_NLS_CODEPAGE_437 is not set +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ISO8859_1 is not set +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_UTF8 is not set + +# +# Console drivers +# +CONFIG_PC_KEYMAP=y +# CONFIG_VGA_CONSOLE is not set + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_ACORN is not set +# CONFIG_FB_ANAKIN is not set +# CONFIG_FB_CLPS711X is not set +# CONFIG_FB_CYBER2000 is not set +CONFIG_FB_SA1100=y +CONFIG_CERF_LCD_38_A=y +# CONFIG_CERF_LCD_57_A is not set +# CONFIG_CERF_LCD_72_A is not set +CONFIG_SA1100_CERF_LCD_BACKLIGHT=y +# CONFIG_FB_VIRTUAL is not set +# CONFIG_FBCON_ADVANCED is not set +CONFIG_FBCON_CFB2=y +CONFIG_FBCON_CFB4=y +CONFIG_FBCON_CFB8=y +CONFIG_FBCON_CFB16=y +# CONFIG_FBCON_FONTWIDTH8_ONLY is not set +# CONFIG_FBCON_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y + +# +# Sound +# +CONFIG_SOUND=y +# CONFIG_SOUND_BT878 is not set +# CONFIG_SOUND_CMPCI is not set +# CONFIG_SOUND_EMU10K1 is not set +# CONFIG_MIDI_EMU10K1 is not set +# CONFIG_SOUND_FUSION is not set +# CONFIG_SOUND_CS4281 is not set +# CONFIG_SOUND_ES1370 is not set +# CONFIG_SOUND_ES1371 is not set +# CONFIG_SOUND_ESSSOLO1 is not set +# CONFIG_SOUND_MAESTRO is not set +# CONFIG_SOUND_MAESTRO3 is not set +# CONFIG_SOUND_ICH is not set +# CONFIG_SOUND_RME96XX is not set +# CONFIG_SOUND_SONICVIBES is not set +# CONFIG_SOUND_TRIDENT is not set +# CONFIG_SOUND_MSNDCLAS is not set +# CONFIG_SOUND_MSNDPIN is not set +# CONFIG_SOUND_VIA82CXXX is not set +# CONFIG_MIDI_VIA82CXXX is not set +# CONFIG_SOUND_ASSABET_UDA1341 is not set +# CONFIG_SOUND_H3600_UDA1341 is not set +# CONFIG_SOUND_PANGOLIN_UDA1341 is not set +# CONFIG_SOUND_SA1111_UDA1341 is not set +CONFIG_SOUND_CERF_UDA1341=y +# CONFIG_SOUND_SA1100SSP is not set +# CONFIG_SOUND_OSS is not set +# CONFIG_SOUND_WAVEARTIST is not set +# CONFIG_SOUND_TVMIXER is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# USB Controllers +# +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +# CONFIG_USB_OHCI is not set +# CONFIG_USB_OHCI_SA1111 is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# USB Human Interface Devices (HID) +# + +# +# Input core support is needed for USB HID +# + +# +# USB Imaging devices +# +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_HPUSBSCSI is not set + +# +# USB Multimedia devices +# + +# +# Video4Linux support is needed for USB Multimedia device support +# +# CONFIG_USB_DABUSB is not set + +# +# USB Network adaptors +# +# CONFIG_USB_PLUSB is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_CDCETHER is not set +# CONFIG_USB_USBNET is not set + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_OMNINET is not set + +# +# Miscellaneous USB drivers +# +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_ID75 is not set + +# +# Bluetooth support +# +CONFIG_BT=y +CONFIG_BT_L2CAP=y + +# +# Bluetooth device drivers +# +# CONFIG_BT_HCIUSB is not set +CONFIG_BT_HCIUART=y +# CONFIG_BT_HCIVHCI is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_USER=y +# CONFIG_DEBUG_INFO is not set +CONFIG_MAGIC_SYSRQ=y +# CONFIG_NO_PGT_CACHE is not set +# CONFIG_DEBUG_LL is not set +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -prauN linux-2.6.0-test5/arch/arm/configs/cerfpod_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/cerfpod_defconfig --- linux-2.6.0-test5/arch/arm/configs/cerfpod_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/cerfpod_defconfig 2003-09-25 19:15:44.000000000 -0700 @@ -0,0 +1,894 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set + +# +# System Type +# +# CONFIG_ARCH_ANAKIN is not set +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_SHARK is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Archimedes/A5000 Implementations (select only ONE) +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_ADSBITSY is not set +# CONFIG_SA1100_BRUTUS is not set +CONFIG_SA1100_CERF=y +# CONFIG_SA1100_CERF_FLASH_8MB is not set +CONFIG_SA1100_CERF_FLASH_16MB=y +# CONFIG_SA1100_CERF_FLASH_32MB is not set +# CONFIG_SA1100_CERF_CPLD is not set +# CONFIG_SA1100_H3600 is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FLEXANET is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_GRAPHICSMASTER is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_SIMPAD is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +CONFIG_SA1100_USB=y +CONFIG_SA1100_USB_NETLINK=y +CONFIG_SA1100_USB_CHAR=y + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_CDB89712 is not set +# CONFIG_ARCH_CLEP7312 is not set +# CONFIG_ARCH_EDB7211 is not set +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_EP7211 is not set +# CONFIG_ARCH_EP7212 is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set + +# +# Processor Type +# +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +CONFIG_CPU_SA1100=y +# CONFIG_ARM_THUMB is not set +CONFIG_DISCONTIGMEM=y + +# +# General setup +# +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +CONFIG_CPU_FREQ=y +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=y +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_CLPS6700 is not set +CONFIG_PCMCIA_SA1100=y +CONFIG_NET=y +CONFIG_SYSVIPC=y +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_SYSCTL=y + +# +# At least one math emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_APM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="console=ttySA0 root=/dev/mtdblock3 rw mem=32M" +# CONFIG_PFS168_CMDLINE is not set +CONFIG_LEDS=y +CONFIG_LEDS_TIMER=y +CONFIG_LEDS_CPU=y +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_BOOTLDR_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +# CONFIG_MTD_OBSOLETE_CHIPS is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_SUN_UFLASH is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_PNC2000 is not set +# CONFIG_MTD_RPXLITE is not set +# CONFIG_MTD_TQM8XXL is not set +# CONFIG_MTD_SC520CDP is not set +# CONFIG_MTD_NETSC520 is not set +# CONFIG_MTD_SBC_GXX is not set +# CONFIG_MTD_ELAN_104NC is not set +# CONFIG_MTD_DBOX2 is not set +# CONFIG_MTD_CSTM_MIPS_IXX is not set +# CONFIG_MTD_CFI_FLAGADM is not set +# CONFIG_MTD_SOLUTIONENGINE is not set +# CONFIG_MTD_MIXMEM is not set +# CONFIG_MTD_OCTAGON is not set +# CONFIG_MTD_VMAX is not set +# CONFIG_MTD_OCELOT is not set +# CONFIG_MTD_L440GX is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_CDB89712 is not set +CONFIG_MTD_SA1100=y +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_LART is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLKMTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set +# CONFIG_PNPBIOS is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +CONFIG_BLK_DEV_LOOP=y +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_PACKET_MMAP=y +CONFIG_NETLINK=y +CONFIG_RTNETLINK=y +# CONFIG_NETLINK_DEV is not set +# CONFIG_NETFILTER is not set +CONFIG_FILTER=y +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_IP_MROUTE is not set +# CONFIG_ARPD is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set + +# +# +# +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_ETHERTAP is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_SUNLANCE is not set +# CONFIG_SUNBMAC is not set +# CONFIG_SUNQE is not set +# CONFIG_SUNLANCE is not set +# CONFIG_SUNGEM is not set +CONFIG_NET_VENDOR_3COM=y +# CONFIG_EL1 is not set +# CONFIG_EL2 is not set +# CONFIG_ELPLUS is not set +# CONFIG_EL16 is not set +# CONFIG_ELMC is not set +# CONFIG_ELMC_II is not set +CONFIG_CERF_CS8900A=y +# CONFIG_LANCE is not set +# CONFIG_NET_VENDOR_SMC is not set +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_NET_ISA is not set +# CONFIG_NET_PCI is not set +# CONFIG_NET_POCKET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_DL2K is not set +# CONFIG_MYRI_SBUS is not set +# CONFIG_NS83820 is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PLIP is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +# CONFIG_PCMCIA_3C589 is not set +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +CONFIG_PCMCIA_PCNET=y +# CONFIG_PCMCIA_NMCLAN is not set +# CONFIG_PCMCIA_SMC91C92 is not set +# CONFIG_PCMCIA_XIRC2PS is not set +# CONFIG_ARCNET_COM20020_CS is not set +# CONFIG_PCMCIA_IBMTR is not set +# CONFIG_NET_PCMCIA_RADIO is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=y + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=y + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=y +# CONFIG_IDEDISK_MULTI_MODE is not set +CONFIG_BLK_DEV_IDECS=m +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set + +# +# IDE chipset support/bugfixes +# +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +# CONFIG_IDE_CHIPSETS is not set +# CONFIG_IDEDMA_AUTO is not set +# CONFIG_BLK_DEV_ATARAID is not set +# CONFIG_BLK_DEV_ATARAID_PDC is not set +# CONFIG_BLK_DEV_ATARAID_HPT is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +# CONFIG_INPUT is not set +# CONFIG_INPUT_KEYBDEV is not set +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set + +# +# Character devices +# +CONFIG_VT=y +# CONFIG_VT_CONSOLE is not set +# CONFIG_SERIAL is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_ANAKIN is not set +# CONFIG_SERIAL_ANAKIN_CONSOLE is not set +# CONFIG_SERIAL_AMBA is not set +# CONFIG_SERIAL_AMBA_CONSOLE is not set +# CONFIG_SERIAL_CLPS711X is not set +# CONFIG_SERIAL_CLPS711X_CONSOLE is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=38400 +# CONFIG_SERIAL_8250 is not set +# CONFIG_SERIAL_8250_CONSOLE is not set +# CONFIG_SERIAL_8250_EXTENDED is not set +# CONFIG_SERIAL_8250_MANY_PORTS is not set +# CONFIG_SERIAL_8250_SHARE_IRQ is not set +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +# CONFIG_SERIAL_8250_MULTIPORT is not set +# CONFIG_SERIAL_8250_HUB6 is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=32 +CONFIG_UCB1200=y +CONFIG_TOUCHSCREEN_UCB1200=y +# CONFIG_CERF_TS_MANUAL is not set +CONFIG_AUDIO_UCB1200=y +# CONFIG_ADC_UCB1200 is not set +# CONFIG_TOUCHSCREEN_H3600 is not set +# CONFIG_PROFILER is not set +# CONFIG_PFS168_SPI is not set +# CONFIG_PFS168_DTMF is not set +# CONFIG_PFS168_MISC is not set + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# L3 serial bus support +# +# CONFIG_L3 is not set +# CONFIG_L3_ALGOBIT is not set +# CONFIG_L3_BIT_SA1100_GPIO is not set +# CONFIG_BIT_SA1100_UCB1200 is not set + +# +# Other L3 adapters +# +# CONFIG_L3_SA1111 is not set + +# +# L3 driver support +# +# CONFIG_L3_DRV_UDA1341 is not set +# CONFIG_BIT_SA1100_GPIO is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_MOUSE is not set + +# +# Joysticks +# +# CONFIG_INPUT_GAMEPORT is not set + +# +# Input core support is needed for gameports +# + +# +# Input core support is needed for joysticks +# +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +CONFIG_SA1100_RTC=y +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set +# CONFIG_SONYPI is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# PCMCIA character devices +# + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_REISERFS_PROC_INFO is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_CMS_FS is not set +# CONFIG_EXT3_FS is not set +# CONFIG_JBD is not set +# CONFIG_JBD_DEBUG is not set +CONFIG_FAT_FS=y +CONFIG_MSDOS_FS=y +CONFIG_UMSDOS_FS=y +CONFIG_VFAT_FS=y +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +# CONFIG_CRAMFS is not set +# CONFIG_TMPFS is not set +CONFIG_RAMFS=y +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_MINIX_FS is not set +# CONFIG_FREEVXFS_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +CONFIG_ROMFS_FS=y +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +# CONFIG_INTERMEZZO_FS is not set +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +# CONFIG_ROOT_NFS is not set +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +CONFIG_SUNRPC=y +CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_SMB_NLS is not set +CONFIG_NLS=y + +# +# Native Language Support +# +CONFIG_NLS_DEFAULT="iso8859-1" +# CONFIG_NLS_CODEPAGE_437 is not set +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ISO8859_1 is not set +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_UTF8 is not set + +# +# Console drivers +# +CONFIG_PC_KEYMAP=y +# CONFIG_VGA_CONSOLE is not set + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_ACORN is not set +# CONFIG_FB_ANAKIN is not set +# CONFIG_FB_CLPS711X is not set +# CONFIG_FB_CYBER2000 is not set +CONFIG_FB_SA1100=y +# CONFIG_CERF_LCD_38_A is not set +CONFIG_CERF_LCD_57_A=y +# CONFIG_CERF_LCD_72_A is not set +# CONFIG_FB_VIRTUAL is not set +# CONFIG_FBCON_ADVANCED is not set +CONFIG_FBCON_CFB2=y +CONFIG_FBCON_CFB4=y +CONFIG_FBCON_CFB8=y +CONFIG_FBCON_CFB16=y +# CONFIG_FBCON_FONTWIDTH8_ONLY is not set +# CONFIG_FBCON_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# USB Controllers +# +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +# CONFIG_USB_OHCI is not set +# CONFIG_USB_OHCI_SA1111 is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# USB Human Interface Devices (HID) +# + +# +# Input core support is needed for USB HID +# + +# +# USB Imaging devices +# +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_HPUSBSCSI is not set + +# +# USB Multimedia devices +# + +# +# Video4Linux support is needed for USB Multimedia device support +# +# CONFIG_USB_DABUSB is not set + +# +# USB Network adaptors +# +# CONFIG_USB_PLUSB is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_CDCETHER is not set +# CONFIG_USB_USBNET is not set + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_OMNINET is not set + +# +# Miscellaneous USB drivers +# +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_ID75 is not set + +# +# Bluetooth support +# +# CONFIG_BT is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_USER=y +# CONFIG_DEBUG_INFO is not set +CONFIG_MAGIC_SYSRQ=y +# CONFIG_NO_PGT_CACHE is not set +# CONFIG_DEBUG_LL is not set +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -prauN linux-2.6.0-test5/arch/arm/configs/clps7500_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/clps7500_defconfig --- linux-2.6.0-test5/arch/arm/configs/clps7500_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/clps7500_defconfig 2003-09-25 19:15:44.000000000 -0700 @@ -0,0 +1,520 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +CONFIG_OBSOLETE=y + +# +# Loadable module support +# +# CONFIG_MODULES is not set + +# +# System Type +# +# CONFIG_ARCH_ARCA5K is not set +CONFIG_ARCH_CLPS7500=y +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_FTVPCI is not set +# CONFIG_ARCH_TBOX is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_CLPS711X is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Footbridge Implementations +# + +# +# SA11x0 Implementations +# + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set + +# +# Processor Type +# +CONFIG_CPU_32v3=y +# CONFIG_CPU_32v4 is not set +# CONFIG_CPU_ARM610 is not set +CONFIG_CPU_ARM710=y +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +# CONFIG_CPU_SA1100 is not set +# CONFIG_DISCONTIGMEM is not set + +# +# General setup +# +CONFIG_ANGELBOOT=y +# CONFIG_PCI is not set +CONFIG_ISA=y +# CONFIG_ISA_DMA is not set +# CONFIG_HOTPLUG is not set +# CONFIG_PCMCIA is not set +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_SYSCTL is not set +CONFIG_NWFPE=y +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="mem=16M root=nfs" +# CONFIG_ALIGNMENT_TRAP is not set + +# +# Parallel port support +# +CONFIG_PARPORT=y +CONFIG_PARPORT_PC=y +CONFIG_PARPORT_PC_FIFO=y +# CONFIG_PARPORT_PC_SUPERIO is not set +# CONFIG_PARPORT_AMIGA is not set +# CONFIG_PARPORT_MFC3 is not set +# CONFIG_PARPORT_ATARI is not set +# CONFIG_PARPORT_SUNBPP is not set +# CONFIG_PARPORT_OTHER is not set +CONFIG_PARPORT_1284=y + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# RAM/ROM Device Drivers +# +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PMC551_BUGFIX is not set +# CONFIG_MTD_PMC551_DEBUG is not set +# CONFIG_MTD_MTDRAM is not set + +# +# Linearly Mapped Flash Device Drivers +# +# CONFIG_MTD_CFI is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_JEDEC is not set + +# +# Drivers for chip mappings +# + +# +# User modules and translation layers for MTD devices +# +# CONFIG_MTD_CHAR is not set +# CONFIG_MTD_BLOCK is not set +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_DEV_LOOP is not set +CONFIG_BLK_DEV_NBD=y +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +# CONFIG_BLK_DEV_INITRD is not set +# CONFIG_BLK_DEV_FLD7500 is not set + +# +# Networking options +# +# CONFIG_PACKET is not set +# CONFIG_NETLINK is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_PNP=y +CONFIG_IP_PNP_BOOTP=y +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set + +# +# +# +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +CONFIG_DUMMY=y +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_NET_SB1000 is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_LANCE is not set +# CONFIG_NET_VENDOR_SMC is not set +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_AT1700 is not set +# CONFIG_DEPCA is not set +# CONFIG_HP100 is not set +# CONFIG_NET_ISA is not set +CONFIG_NET_PCI=y +# CONFIG_AC3200 is not set +# CONFIG_APRICOT is not set +CONFIG_CS89x0=y +# CONFIG_ZNET is not set +# CONFIG_NET_POCKET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PLIP is not set +CONFIG_PPP=y +# CONFIG_PPP_MULTILINK is not set +# CONFIG_PPP_ASYNC is not set +# CONFIG_PPP_SYNC_TTY is not set +# CONFIG_PPP_DEFLATE is not set +# CONFIG_PPP_BSDCOMP is not set +# CONFIG_PPPOE is not set +CONFIG_SLIP=y +CONFIG_SLIP_COMPRESSED=y +# CONFIG_SLIP_SMART is not set +# CONFIG_SLIP_MODE_SLIP6 is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set +# CONFIG_ASH is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# ATA/IDE/MFM/RLL support +# +# CONFIG_IDE is not set +# CONFIG_BLK_DEV_HD is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +# CONFIG_INPUT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_SERIAL=y +# CONFIG_SERIAL_CONSOLE is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=256 +CONFIG_PRINTER=y +# CONFIG_LP_CONSOLE is not set +# CONFIG_PPDEV is not set + +# +# I2C support +# +CONFIG_I2C=y +CONFIG_I2C_ALGOBIT=y +# CONFIG_I2C_PHILIPSPAR is not set +# CONFIG_I2C_ELV is not set +# CONFIG_I2C_VELLEMAN is not set +# CONFIG_I2C_ALGOPCF is not set +# CONFIG_I2C_CHARDEV is not set + +# +# Mice +# +CONFIG_BUSMOUSE=y +# CONFIG_ATIXL_BUSMOUSE is not set +# CONFIG_LOGIBUSMOUSE is not set +# CONFIG_MS_BUSMOUSE is not set +CONFIG_MOUSE=y +# CONFIG_PSMOUSE is not set +# CONFIG_82C710_MOUSE is not set +# CONFIG_PC110_PAD is not set + +# +# Joysticks +# + +# +# Game port support +# + +# +# Gameport joysticks +# + +# +# Serial port support +# + +# +# Serial port joysticks +# + +# +# Parallel port joysticks +# +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +CONFIG_CLPS7500_FLASH=y +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_FAT_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +# CONFIG_CRAMFS is not set +# CONFIG_RAMFS is not set +# CONFIG_ISO9660_FS is not set +CONFIG_MINIX_FS=y +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_UDF_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +CONFIG_NFS_FS=y +# CONFIG_NFS_V3 is not set +CONFIG_ROOT_NFS=y +# CONFIG_NFSD is not set +CONFIG_SUNRPC=y +CONFIG_LOCKD=y +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +# CONFIG_MSDOS_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_SMB_NLS is not set +# CONFIG_NLS is not set + +# +# Console drivers +# +CONFIG_PC_KEYB=y +CONFIG_PC_KEYMAP=y +# CONFIG_VGA_CONSOLE is not set +CONFIG_FB=y + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +CONFIG_FB_ACORN=y +# CONFIG_CHRONTEL_7003 is not set +# CONFIG_FB_VIRTUAL is not set +CONFIG_FBCON_ADVANCED=y +CONFIG_FBCON_MFB=y +CONFIG_FBCON_CFB2=y +CONFIG_FBCON_CFB4=y +CONFIG_FBCON_CFB8=y +CONFIG_FBCON_CFB16=y +CONFIG_FBCON_CFB24=y +# CONFIG_FBCON_CFB32 is not set +# CONFIG_FBCON_AFB is not set +# CONFIG_FBCON_ILBM is not set +# CONFIG_FBCON_IPLAN2P2 is not set +# CONFIG_FBCON_IPLAN2P4 is not set +# CONFIG_FBCON_IPLAN2P8 is not set +# CONFIG_FBCON_MAC is not set +# CONFIG_FBCON_VGA_PLANES is not set +# CONFIG_FBCON_VGA is not set +# CONFIG_FBCON_HGA is not set +# CONFIG_FBCON_FONTWIDTH8_ONLY is not set +# CONFIG_FBCON_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# Kernel hacking +# +# CONFIG_FRAME_POINTER is not set +# CONFIG_DEBUG_ERRORS is not set +# CONFIG_DEBUG_USER is not set +# CONFIG_DEBUG_INFO is not set +CONFIG_MAGIC_SYSRQ=y +CONFIG_DEBUG_LL=y diff -prauN linux-2.6.0-test5/arch/arm/configs/ebsa110_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/ebsa110_defconfig --- linux-2.6.0-test5/arch/arm/configs/ebsa110_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/ebsa110_defconfig 2003-09-25 19:15:44.000000000 -0700 @@ -0,0 +1,605 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +CONFIG_KMOD=y + +# +# System Type +# +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CO285 is not set +CONFIG_ARCH_EBSA110=y +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_ANAKIN is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Archimedes/A5000 Implementations (select only ONE) +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_BITSY is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set + +# +# Processor Type +# +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set +CONFIG_CPU_SA110=y +# CONFIG_CPU_SA1100 is not set +# CONFIG_DISCONTIGMEM is not set + +# +# General setup +# +# CONFIG_PCI is not set +CONFIG_ISA=y +# CONFIG_ISA_DMA is not set +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=m +CONFIG_I82365=y +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_CLPS6700 is not set +# CONFIG_PCMCIA_SA1100 is not set +CONFIG_NET=y +CONFIG_SYSVIPC=y +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_SYSCTL=y +CONFIG_FPE_NWFPE=y +CONFIG_FPE_FASTFPE=y +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +CONFIG_BINFMT_AOUT=y +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="root=/dev/nfs rw mem=16M console=ttyS1,38400n8" +CONFIG_LEDS=y +CONFIG_LEDS_TIMER=y + +# +# Parallel port support +# +CONFIG_PARPORT=y +CONFIG_PARPORT_PC=y +CONFIG_PARPORT_PC_FIFO=y +# CONFIG_PARPORT_PC_SUPERIO is not set +# CONFIG_PARPORT_PC_PCMCIA is not set +# CONFIG_PARPORT_ARC is not set +# CONFIG_PARPORT_AMIGA is not set +# CONFIG_PARPORT_MFC3 is not set +# CONFIG_PARPORT_ATARI is not set +# CONFIG_PARPORT_SUNBPP is not set +# CONFIG_PARPORT_OTHER is not set +CONFIG_PARPORT_1284=y + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +# CONFIG_BLK_DEV_INITRD is not set + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_PACKET_MMAP=y +CONFIG_NETLINK=y +CONFIG_RTNETLINK=y +# CONFIG_NETLINK_DEV is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +CONFIG_IP_ADVANCED_ROUTER=y +CONFIG_RTNETLINK=y +CONFIG_NETLINK=y +CONFIG_IP_MULTIPLE_TABLES=y +CONFIG_IP_ROUTE_FWMARK=y +CONFIG_IP_ROUTE_NAT=y +# CONFIG_IP_ROUTE_MULTIPATH is not set +# CONFIG_IP_ROUTE_TOS is not set +CONFIG_IP_ROUTE_VERBOSE=y +# CONFIG_IP_ROUTE_LARGE_TABLES is not set +CONFIG_IP_PNP=y +# CONFIG_IP_PNP_DHCP is not set +CONFIG_IP_PNP_BOOTP=y +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_IP_MROUTE is not set +# CONFIG_ARPD is not set +CONFIG_INET_ECN=y +CONFIG_SYN_COOKIES=y + +# +# IP: Netfilter Configuration +# +CONFIG_IP_NF_CONNTRACK=y +CONFIG_IP_NF_FTP=y +CONFIG_IP_NF_IRC=y +# CONFIG_IP_NF_QUEUE is not set +CONFIG_IP_NF_IPTABLES=y +CONFIG_IP_NF_MATCH_LIMIT=y +# CONFIG_IP_NF_MATCH_MAC is not set +CONFIG_IP_NF_MATCH_MARK=y +CONFIG_IP_NF_MATCH_MULTIPORT=y +CONFIG_IP_NF_MATCH_TOS=y +# CONFIG_IP_NF_MATCH_TCPMSS is not set +CONFIG_IP_NF_MATCH_STATE=y +CONFIG_IP_NF_MATCH_UNCLEAN=y +# CONFIG_IP_NF_MATCH_OWNER is not set +CONFIG_IP_NF_FILTER=y +CONFIG_IP_NF_TARGET_REJECT=y +# CONFIG_IP_NF_TARGET_MIRROR is not set +CONFIG_IP_NF_NAT=y +CONFIG_IP_NF_NAT_NEEDED=y +CONFIG_IP_NF_TARGET_MASQUERADE=y +CONFIG_IP_NF_TARGET_REDIRECT=y +CONFIG_IP_NF_NAT_IRC=y +CONFIG_IP_NF_NAT_FTP=y +CONFIG_IP_NF_MANGLE=y +CONFIG_IP_NF_TARGET_TOS=y +CONFIG_IP_NF_TARGET_MARK=y +CONFIG_IP_NF_TARGET_LOG=y +# CONFIG_IP_NF_TARGET_TCPMSS is not set +CONFIG_IPV6=y + +# +# IPv6: Netfilter Configuration +# +CONFIG_IP6_NF_IPTABLES=y +CONFIG_IP6_NF_MATCH_LIMIT=y +CONFIG_IP6_NF_MATCH_MARK=y +CONFIG_IP6_NF_FILTER=y +CONFIG_IP6_NF_MANGLE=y +CONFIG_IP6_NF_TARGET_MARK=y +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set + +# +# +# +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_ETHERTAP is not set +# CONFIG_NET_SB1000 is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +CONFIG_ARM_AM79C961A=y +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_LANCE is not set +# CONFIG_NET_VENDOR_SMC is not set +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_AT1700 is not set +# CONFIG_DEPCA is not set +# CONFIG_HP100 is not set +# CONFIG_NET_ISA is not set +# CONFIG_NET_PCI is not set +# CONFIG_NET_POCKET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PLIP is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +# CONFIG_PPPOE is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +# CONFIG_PCMCIA_3C589 is not set +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +CONFIG_PCMCIA_PCNET=m +# CONFIG_PCMCIA_NMCLAN is not set +# CONFIG_PCMCIA_SMC91C92 is not set +# CONFIG_PCMCIA_XIRC2PS is not set +# CONFIG_ARCNET_COM20020_CS is not set +# CONFIG_PCMCIA_IBMTR is not set +# CONFIG_NET_PCMCIA_RADIO is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# ATA/IDE/MFM/RLL support +# +# CONFIG_IDE is not set +# CONFIG_BLK_DEV_HD is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +# CONFIG_INPUT is not set + +# +# Character devices +# +# CONFIG_VT is not set +CONFIG_SERIAL=y +CONFIG_SERIAL_CONSOLE=y +CONFIG_SERIAL_EXTENDED=y +# CONFIG_SERIAL_MANY_PORTS is not set +# CONFIG_SERIAL_SHARE_IRQ is not set +# CONFIG_SERIAL_DETECT_IRQ is not set +# CONFIG_SERIAL_MULTIPORT is not set +# CONFIG_HUB6 is not set +# CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +# CONFIG_SERIAL_SA1100 is not set +# CONFIG_SERIAL_SA1100_CONSOLE is not set +# CONFIG_SERIAL_AMBA is not set +# CONFIG_SERIAL_AMBA_CONSOLE is not set +# CONFIG_SERIAL_CLPS711X is not set +# CONFIG_SERIAL_CLPS711X_CONSOLE is not set +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=256 +CONFIG_PRINTER=m +# CONFIG_LP_CONSOLE is not set +# CONFIG_PPDEV is not set + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_MOUSE is not set + +# +# Joysticks +# +# CONFIG_JOYSTICK is not set + +# +# Input core support is needed for joysticks +# +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +CONFIG_WATCHDOG=y +# CONFIG_WATCHDOG_NOWAYOUT is not set +CONFIG_SOFT_WATCHDOG=y +# CONFIG_WDT is not set +# CONFIG_WDTPCI is not set +# CONFIG_PCWATCHDOG is not set +# CONFIG_ACQUIRE_WDT is not set +# CONFIG_ADVANTECH_WDT is not set +# CONFIG_60XX_WDT is not set +# CONFIG_MIXCOMWD is not set +# CONFIG_I810_TCO is not set +# CONFIG_MACHZ_WDT is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# PCMCIA character devices +# +# CONFIG_PCMCIA_SERIAL_CS is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +CONFIG_AUTOFS4_FS=y +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_FAT_FS is not set +# CONFIG_MSDOS_FS is not set +# CONFIG_UMSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +# CONFIG_JFFS2_FS is not set +# CONFIG_CRAMFS is not set +# CONFIG_TMPFS is not set +# CONFIG_RAMFS is not set +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +CONFIG_MINIX_FS=y +# CONFIG_VXFS_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +# CONFIG_EXT2_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_SYSV_FS_WRITE is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +CONFIG_NFS_FS=y +# CONFIG_NFS_V3 is not set +CONFIG_ROOT_NFS=y +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +CONFIG_SUNRPC=y +CONFIG_LOCKD=y +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +# CONFIG_MSDOS_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_SMB_NLS is not set +# CONFIG_NLS is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_ERRORS=y +# CONFIG_DEBUG_USER is not set +# CONFIG_DEBUG_INFO is not set +CONFIG_MAGIC_SYSRQ=y +# CONFIG_NO_PGT_CACHE is not set +# CONFIG_DEBUG_LL is not set +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -prauN linux-2.6.0-test5/arch/arm/configs/edb7211_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/edb7211_defconfig --- linux-2.6.0-test5/arch/arm/configs/edb7211_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/edb7211_defconfig 2003-09-25 19:15:44.000000000 -0700 @@ -0,0 +1,401 @@ +# +# Automatically generated by make menuconfig: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +# CONFIG_MODULES is not set + +# +# System Type +# +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +CONFIG_ARCH_CLPS711X=y + +# +# Archimedes/A5000 Implementations +# + +# +# Footbridge Implementations +# + +# +# SA11x0 Implementations +# + +# +# CLPS711X/EP721X Implementations +# +CONFIG_ARCH_EDB7211=y +CONFIG_EP7211_BOOT_MODE=y +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_ACORN is not set +CONFIG_ARCH_EP7211=y +# CONFIG_ARCH_EP7212 is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +CONFIG_CPU_ARM720T=y +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +# CONFIG_CPU_SA1100 is not set +CONFIG_DISCONTIGMEM=y + +# +# General setup +# +# CONFIG_ANGELBOOT is not set +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +# CONFIG_HOTPLUG is not set +# CONFIG_PCMCIA is not set +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +CONFIG_NWFPE=y +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_ARTHUR is not set +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +# CONFIG_MTD is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_INITRD=y + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +# CONFIG_NETLINK is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_NET_SB1000 is not set + +# +# Ethernet (10 or 100Mbit) +# +# CONFIG_NET_ETHERNET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# ATA/IDE/MFM/RLL support +# +# CONFIG_IDE is not set +# CONFIG_BLK_DEV_HD is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +# CONFIG_INPUT is not set + +# +# Character devices +# +# CONFIG_VT is not set +# CONFIG_SERIAL is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set +CONFIG_SERIAL_CLPS711X=y +CONFIG_SERIAL_CLPS711X_CONSOLE=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=256 + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_MOUSE is not set + +# +# Joysticks +# +# CONFIG_JOYSTICK is not set +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_FAT_FS is not set +# CONFIG_MSDOS_FS is not set +# CONFIG_UMSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +# CONFIG_CRAMFS is not set +CONFIG_RAMFS=y +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +CONFIG_MINIX_FS=y +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_SYSV_FS_WRITE is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +# CONFIG_NFS_FS is not set +# CONFIG_NFS_V3 is not set +# CONFIG_ROOT_NFS is not set +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +# CONFIG_SUNRPC is not set +# CONFIG_LOCKD is not set +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +# CONFIG_MSDOS_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_SMB_NLS is not set +# CONFIG_NLS is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_USER=y +# CONFIG_DEBUG_INFO is not set +CONFIG_MAGIC_SYSRQ=y +CONFIG_DEBUG_LL=y diff -prauN linux-2.6.0-test5/arch/arm/configs/empeg_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/empeg_defconfig --- linux-2.6.0-test5/arch/arm/configs/empeg_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/empeg_defconfig 2003-09-25 19:15:44.000000000 -0700 @@ -0,0 +1,265 @@ +# +# +# Example empeg-car kernel configuration file. +# +CONFIG_ARM=y + +# +# System and processor type +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_FOOTBRIDGE is not set +CONFIG_ARCH_SA1100=y +CONFIG_CPU_SA1100=y +# CONFIG_SA1100_BRUTUS is not set +CONFIG_SA1100_EMPEG=y +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_EMPEG_HENRY is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_ISA_DMA is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set +# CONFIG_CPU_ARM2 is not set +# CONFIG_CPU_ARM3 is not set +# CONFIG_CPU_ARM6 is not set +# CONFIG_CPU_ARM7 is not set +CONFIG_CPU_SA110=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_ALIGNMENT_TRAP is not set +# CONFIG_TEXT_SECTIONS is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +CONFIG_MODVERSIONS=y +# CONFIG_KMOD is not set + +# +# General setup +# +CONFIG_NET=y +# CONFIG_SYSVIPC is not set +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_SYSCTL is not set +CONFIG_NWFPE=y +CONFIG_BINFMT_AOUT=y +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_ARTHUR is not set +# CONFIG_PARPORT is not set +CONFIG_CMDLINE="mem=4M@0xc0000000 mem=4M@0xc8000000 root=/dev/hda1 initrd=0xd00b0000,320K" + +# +# Plug and Play support +# +# CONFIG_PNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +CONFIG_BLK_DEV_IDE=y +# CONFIG_BLK_DEV_HD_IDE is not set +CONFIG_BLK_DEV_IDEDISK=y +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_IDE_CHIPSETS is not set +# CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_MD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_INITRD=y +# CONFIG_BLK_DEV_XD is not set +CONFIG_PARIDE_PARPORT=y +# CONFIG_PARIDE is not set +# CONFIG_BLK_DEV_HD is not set + +# +# Character devices +# +# CONFIG_VT is not set +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +# CONFIG_SERIAL is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_UNIX98_PTYS is not set +# CONFIG_MOUSE is not set +# CONFIG_QIC02_TAPE is not set +# CONFIG_WATCHDOG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +CONFIG_EMPEG_IR=y +CONFIG_EMPEG_USB=y + +# +# Video For Linux +# +CONFIG_VIDEO_DEV=y +# CONFIG_RADIO_RTRACK is not set +# CONFIG_RADIO_RTRACK2 is not set +# CONFIG_RADIO_AZTECH is not set +# CONFIG_RADIO_CADET is not set +# CONFIG_RADIO_MIROPCM20 is not set +# CONFIG_RADIO_GEMTEK is not set +CONFIG_RADIO_EMPEG=y +# CONFIG_VIDEO_BT848 is not set +# CONFIG_VIDEO_PMS is not set +# CONFIG_VIDEO_SAA5249 is not set +# CONFIG_RADIO_SF16FMI is not set +# CONFIG_RADIO_TYPHOON is not set +# CONFIG_RADIO_ZOLTRIX is not set + +# +# Joystick support +# +# CONFIG_JOYSTICK is not set +# CONFIG_DTLK is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set + +# +# Networking options +# +# CONFIG_PACKET is not set +# CONFIG_NETLINK is not set +# CONFIG_FIREWALL is not set +# CONFIG_FILTER is not set +# CONFIG_UNIX is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IP_PNP is not set +# CONFIG_IP_ROUTER is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_IP_ALIAS is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_INET_RARP is not set +# CONFIG_SKB_LARGE is not set +# CONFIG_IPV6 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_BRIDGE is not set +# CONFIG_LLC is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set +# CONFIG_CPU_IS_SLOW is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA subsystem support +# +# CONFIG_IRDA is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_EQUALIZER is not set +# CONFIG_NET_ETHERNET is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_DLCI is not set +CONFIG_PPP=y +# CONFIG_SLIP is not set +# CONFIG_NET_RADIO is not set +# CONFIG_TR is not set +# CONFIG_SHAPER is not set +# CONFIG_HOSTESS_SV11 is not set +# CONFIG_COSA is not set +# CONFIG_RCPCI is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# Filesystems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_FAT_FS is not set +# CONFIG_MSDOS_FS is not set +# CONFIG_UMSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_MINIX_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +# CONFIG_NFS_FS is not set +# CONFIG_NFSD is not set +# CONFIG_SUNRPC is not set +# CONFIG_LOCKD is not set +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set + +# +# Partition Types +# +# CONFIG_OSF_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_SGI_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ACORN_PARTITION is not set +# CONFIG_NLS is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_USER=y +CONFIG_DEBUG_USER_BACKTRACE=y +# CONFIG_DEBUG_INFO is not set +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_DEBUG_LL is not set diff -prauN linux-2.6.0-test5/arch/arm/configs/epxa10db_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/epxa10db_defconfig --- linux-2.6.0-test5/arch/arm/configs/epxa10db_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/epxa10db_defconfig 2003-09-25 19:15:44.000000000 -0700 @@ -0,0 +1,566 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +CONFIG_MMU=y +CONFIG_SWAP=y +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y + +# +# General setup +# +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +CONFIG_LOG_BUF_SHIFT=14 + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODULE_UNLOAD is not set +CONFIG_OBSOLETE_MODPARM=y +# CONFIG_KMOD is not set + +# +# System Type +# +# CONFIG_ARCH_ADIFCC is not set +# CONFIG_ARCH_ANAKIN is not set +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_PXA is not set +# CONFIG_ARCH_EBSA110 is not set +CONFIG_ARCH_CAMELOT=y +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_IOP310 is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_SHARK is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Archimedes/A5000 Implementations (select only ONE) +# + +# +# CLPS711X/EP721X Implementations +# + +# +# Epxa10db +# + +# +# PLD hotswap support +# +CONFIG_PLD=y +# CONFIG_PLD_HOTSWAP is not set + +# +# Footbridge Implementations +# + +# +# IOP310 Implementation Options +# + +# +# IOP310 Chipset Features +# + +# +# Intel PXA250/210 Implementations +# + +# +# SA11x0 Implementations +# + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_ARM922T=y +CONFIG_CPU_32v4=y + +# +# Processor Features +# +# CONFIG_ARM_THUMB is not set +# CONFIG_CPU_ICACHE_DISABLE is not set +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_CPU_DCACHE_WRITETHROUGH is not set + +# +# General setup +# +# CONFIG_ZBOOT_ROM is not set +CONFIG_ZBOOT_ROM_TEXT=0 +CONFIG_ZBOOT_ROM_BSS=0 +# CONFIG_HOTPLUG is not set + +# +# At least one math emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +CONFIG_BINFMT_AOUT=y +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_PREEMPT is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="mem=32M console=ttyUA0,38400 root=/dev/mtdblock0 rw" +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +CONFIG_MTD_DEBUG=y +CONFIG_MTD_DEBUG_VERBOSE=0 +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_CONCAT is not set +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_CMDLINE_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +# CONFIG_MTD_OBSOLETE_CHIPS is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +CONFIG_MTD_EPXA10DB=y +# CONFIG_MTD_EDB7312 is not set +# CONFIG_MTD_UCLINUX is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLKMTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# Plug and Play support +# +# CONFIG_PNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=8192 +# CONFIG_BLK_DEV_INITRD is not set + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set + +# +# Networking support +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +# CONFIG_NETLINK_DEV is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +CONFIG_IP_PNP_BOOTP=y +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_XFRM_USER is not set +# CONFIG_IPV6 is not set + +# +# SCTP Configuration (EXPERIMENTAL) +# +CONFIG_IPV6_SCTP__=y +# CONFIG_IP_SCTP is not set +# CONFIG_ATM is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_LLC is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +CONFIG_NETDEVICES=y +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_ETHERTAP is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +CONFIG_ETHER00=m + +# +# Ethernet (1000 Mbit) +# +CONFIG_PPP=y +CONFIG_PPP_MULTILINK=y +CONFIG_PPP_ASYNC=y +CONFIG_PPP_SYNC_TTY=y +# CONFIG_PPP_DEFLATE is not set +# CONFIG_PPP_BSDCOMP is not set +# CONFIG_PPPOE is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices (depends on LLC=y) +# +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# ATA/ATAPI/MFM/RLL support +# +# CONFIG_IDE is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN_BOOL is not set + +# +# Input device support +# +# CONFIG_INPUT is not set + +# +# Userland interfaces +# + +# +# Input I/O drivers +# +# CONFIG_GAMEPORT is not set +CONFIG_SOUND_GAMEPORT=y +# CONFIG_SERIO is not set + +# +# Input Device Drivers +# + +# +# Character devices +# +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set + +# +# Non-8250 serial port support +# +# CONFIG_SERIAL_DZ is not set +CONFIG_SERIAL_UART00=y +CONFIG_SERIAL_UART00_CONSOLE=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=256 + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# I2C Hardware Sensors Mainboard support +# + +# +# I2C Hardware Sensors Chip support +# + +# +# L3 serial bus support +# +# CONFIG_L3 is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_QIC02_TAPE is not set + +# +# IPMI +# +# CONFIG_IPMI_HANDLER is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_GEN_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set +# CONFIG_RAW_DRIVER is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EXT3_FS is not set +# CONFIG_JBD is not set +# CONFIG_FAT_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +# CONFIG_JFFS2_FS_NAND is not set +# CONFIG_CRAMFS is not set +CONFIG_TMPFS=y +CONFIG_RAMFS=y +# CONFIG_ISO9660_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +CONFIG_ROMFS_FS=y +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UDF_FS is not set +# CONFIG_UFS_FS is not set +# CONFIG_XFS_FS is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +# CONFIG_INTERMEZZO_FS is not set +CONFIG_NFS_FS=y +# CONFIG_NFS_V3 is not set +# CONFIG_NFS_V4 is not set +# CONFIG_ROOT_NFS is not set +# CONFIG_NFSD is not set +CONFIG_SUNRPC=y +# CONFIG_SUNRPC_GSS is not set +CONFIG_LOCKD=y +# CONFIG_EXPORTFS is not set +# CONFIG_CIFS is not set +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set + +# +# Graphics support +# +# CONFIG_FB is not set + +# +# Console display driver support +# +# CONFIG_VGA_CONSOLE is not set +# CONFIG_MDA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y + +# +# Misc devices +# + +# +# Multimedia Capabilities Port drivers +# +# CONFIG_MCP is not set + +# +# Console Switches +# +# CONFIG_SWITCHES is not set + +# +# USB support +# + +# +# Bluetooth support +# +# CONFIG_BT is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +# CONFIG_DEBUG_USER is not set +# CONFIG_DEBUG_INFO is not set +# CONFIG_DEBUG_KERNEL is not set + +# +# Security options +# +# CONFIG_SECURITY is not set + +# +# Cryptographic options +# +# CONFIG_CRYPTO is not set + +# +# Library routines +# +# CONFIG_CRC32 is not set +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y diff -prauN linux-2.6.0-test5/arch/arm/configs/flexanet_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/flexanet_defconfig --- linux-2.6.0-test5/arch/arm/configs/flexanet_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/flexanet_defconfig 2003-09-25 19:15:44.000000000 -0700 @@ -0,0 +1,900 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set +# CONFIG_GENERIC_BUST_SPINLOCK is not set +# CONFIG_GENERIC_ISA_DMA is not set + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set + +# +# System Type +# +# CONFIG_ARCH_ANAKIN is not set +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_CAMELOT is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_SHARK is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Archimedes/A5000 Implementations (select only ONE) +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_ADSBITSY is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_H3600 is not set +# CONFIG_SA1100_EXTENEX1 is not set +CONFIG_SA1100_FLEXANET=y +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_GRAPHICSMASTER is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_SHANNON is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_SIMPAD is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +CONFIG_SA1100_USB=y +CONFIG_SA1100_USB_NETLINK=y +# CONFIG_SA1100_USB_CHAR is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_AUTCPU12 is not set +# CONFIG_ARCH_CDB89712 is not set +# CONFIG_ARCH_CLEP7312 is not set +# CONFIG_ARCH_EDB7211 is not set +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_EP7211 is not set +# CONFIG_ARCH_EP7212 is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set + +# +# Processor Type +# +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM922T is not set +# CONFIG_CPU_ARM926T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +CONFIG_CPU_SA1100=y +# CONFIG_ARM_THUMB is not set +CONFIG_DISCONTIGMEM=y + +# +# General setup +# +# CONFIG_PCI is not set +CONFIG_ISA=y +# CONFIG_ISA_DMA is not set +CONFIG_CPU_FREQ=y +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=y +# CONFIG_I82092 is not set +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_CLPS6700 is not set +CONFIG_PCMCIA_SA1100=y +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y + +# +# At least one math emulation must be selected +# +CONFIG_FPE_NWFPE=y +CONFIG_FPE_FASTFPE=y +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +CONFIG_PM=y +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="mem=64M root=/dev/ram initrd=0xc0800000,3M" +CONFIG_LEDS=y +CONFIG_LEDS_TIMER=y +CONFIG_LEDS_CPU=y +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_PARTITIONS=y +CONFIG_MTD_REDBOOT_PARTS=y +# CONFIG_MTD_BOOTLDR_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +# CONFIG_MTD_CHAR is not set +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_NOSWAP=y +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_GEOMETRY is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +# CONFIG_MTD_OBSOLETE_CHIPS is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set +# CONFIG_MTD_JEDEC is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_CDB89712 is not set +CONFIG_MTD_SA1100=y +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set +# CONFIG_MTD_PCI is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLKMTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +CONFIG_BLK_DEV_LOOP=y +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=8192 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_MD_MULTIPATH is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +# CONFIG_PACKET is not set +# CONFIG_NETLINK is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +# CONFIG_IP_PNP_BOOTP is not set +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set +# CONFIG_VLAN_8021Q is not set + +# +# +# +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_ARM_AM79C961A is not set +# CONFIG_SUNLANCE is not set +# CONFIG_SUNBMAC is not set +# CONFIG_SUNQE is not set +# CONFIG_SUNLANCE is not set +# CONFIG_SUNGEM is not set +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_LANCE is not set +CONFIG_NET_VENDOR_SMC=y +# CONFIG_WD80x3 is not set +# CONFIG_ULTRAMCA is not set +# CONFIG_ULTRA is not set +# CONFIG_ULTRA32 is not set +CONFIG_SMC9194=y +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_AT1700 is not set +# CONFIG_DEPCA is not set +# CONFIG_HP100 is not set +# CONFIG_NET_ISA is not set +# CONFIG_NET_PCI is not set +# CONFIG_NET_POCKET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_DL2K is not set +# CONFIG_MYRI_SBUS is not set +# CONFIG_NS83820 is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PLIP is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +CONFIG_NET_RADIO=y +# CONFIG_STRIP is not set +# CONFIG_WAVELAN is not set +# CONFIG_ARLAN is not set +# CONFIG_AIRONET4500 is not set +# CONFIG_AIRONET4500_NONCS is not set +# CONFIG_AIRONET4500_PROC is not set +# CONFIG_AIRO is not set +CONFIG_HERMES=m + +# +# Wireless Pcmcia cards support +# +CONFIG_PCMCIA_HERMES=m +# CONFIG_AIRO_CS is not set +CONFIG_NET_WIRELESS=y + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +# CONFIG_PCMCIA_3C589 is not set +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +CONFIG_PCMCIA_PCNET=y +# CONFIG_PCMCIA_NMCLAN is not set +# CONFIG_PCMCIA_SMC91C92 is not set +# CONFIG_PCMCIA_XIRC2PS is not set +# CONFIG_PCMCIA_AXNET is not set +# CONFIG_ARCNET_COM20020_CS is not set +# CONFIG_PCMCIA_IBMTR is not set +# CONFIG_NET_PCMCIA_RADIO is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=y + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=y + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=y +# CONFIG_IDEDISK_MULTI_MODE is not set +CONFIG_BLK_DEV_IDECS=y +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set + +# +# IDE chipset support/bugfixes +# +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +# CONFIG_IDE_CHIPSETS is not set +# CONFIG_IDEDMA_AUTO is not set +# CONFIG_BLK_DEV_ATARAID is not set +# CONFIG_BLK_DEV_ATARAID_PDC is not set +# CONFIG_BLK_DEV_ATARAID_HPT is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +# CONFIG_INPUT is not set +# CONFIG_INPUT_KEYBDEV is not set +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set + +# +# Character devices +# +CONFIG_VT=y +# CONFIG_VT_CONSOLE is not set +# CONFIG_SERIAL is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_ANAKIN is not set +# CONFIG_SERIAL_ANAKIN_CONSOLE is not set +# CONFIG_SERIAL_AMBA is not set +# CONFIG_SERIAL_AMBA_CONSOLE is not set +# CONFIG_SERIAL_CLPS711X is not set +# CONFIG_SERIAL_CLPS711X_CONSOLE is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +# CONFIG_SERIAL_UART00 is not set +# CONFIG_SERIAL_UART00_CONSOLE is not set +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=57600 +# CONFIG_SERIAL_8250 is not set +# CONFIG_SERIAL_8250_CONSOLE is not set +# CONFIG_SERIAL_8250_EXTENDED is not set +# CONFIG_SERIAL_8250_MANY_PORTS is not set +# CONFIG_SERIAL_8250_SHARE_IRQ is not set +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +# CONFIG_SERIAL_8250_MULTIPORT is not set +# CONFIG_SERIAL_8250_HUB6 is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=32 + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# L3 serial bus support +# +# CONFIG_L3 is not set +# CONFIG_L3_ALGOBIT is not set +# CONFIG_L3_BIT_SA1100_GPIO is not set + +# +# Other L3 adapters +# +# CONFIG_L3_SA1111 is not set +# CONFIG_BIT_SA1100_GPIO is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_MOUSE is not set + +# +# Joysticks +# +# CONFIG_INPUT_GAMEPORT is not set + +# +# Input core support is needed for gameports +# + +# +# Input core support is needed for joysticks +# +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +CONFIG_SA1100_RTC=y +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# PCMCIA character devices +# + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_REISERFS_PROC_INFO is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EXT3_FS is not set +# CONFIG_JBD is not set +# CONFIG_JBD_DEBUG is not set +# CONFIG_FAT_FS is not set +# CONFIG_MSDOS_FS is not set +# CONFIG_UMSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +# CONFIG_CRAMFS is not set +# CONFIG_TMPFS is not set +CONFIG_RAMFS=y +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_ZISOFS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +# CONFIG_INTERMEZZO_FS is not set +CONFIG_NFS_FS=y +# CONFIG_NFS_V3 is not set +CONFIG_ROOT_NFS=y +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +CONFIG_SUNRPC=y +CONFIG_LOCKD=y +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set +# CONFIG_ZISOFS_FS is not set +# CONFIG_ZLIB_FS_INFLATE is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_SMB_NLS is not set +# CONFIG_NLS is not set + +# +# Console drivers +# +CONFIG_PC_KEYMAP=y +# CONFIG_VGA_CONSOLE is not set + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_ACORN is not set +# CONFIG_FB_ANAKIN is not set +# CONFIG_FB_CLPS711X is not set +CONFIG_FB_SA1100=y +# CONFIG_FB_CYBER2000 is not set +# CONFIG_FB_VIRTUAL is not set +# CONFIG_FBCON_ADVANCED is not set +CONFIG_FBCON_CFB2=y +CONFIG_FBCON_CFB4=y +CONFIG_FBCON_CFB8=y +CONFIG_FBCON_CFB16=y +# CONFIG_FBCON_FONTWIDTH8_ONLY is not set +# CONFIG_FBCON_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y + +# +# Sound +# +CONFIG_SOUND=y +# CONFIG_SOUND_BT878 is not set +# CONFIG_SOUND_CMPCI is not set +# CONFIG_SOUND_EMU10K1 is not set +# CONFIG_MIDI_EMU10K1 is not set +# CONFIG_SOUND_FUSION is not set +# CONFIG_SOUND_CS4281 is not set +# CONFIG_SOUND_ES1370 is not set +# CONFIG_SOUND_ES1371 is not set +# CONFIG_SOUND_ESSSOLO1 is not set +# CONFIG_SOUND_MAESTRO is not set +# CONFIG_SOUND_MAESTRO3 is not set +# CONFIG_SOUND_ICH is not set +# CONFIG_SOUND_RME96XX is not set +# CONFIG_SOUND_SONICVIBES is not set +# CONFIG_SOUND_TRIDENT is not set +# CONFIG_SOUND_MSNDCLAS is not set +# CONFIG_SOUND_MSNDPIN is not set +# CONFIG_SOUND_VIA82CXXX is not set +# CONFIG_MIDI_VIA82CXXX is not set +# CONFIG_SOUND_SA1100 is not set +# CONFIG_SOUND_UDA1341 is not set +# CONFIG_SOUND_ASSABET_UDA1341 is not set +# CONFIG_SOUND_H3600_UDA1341 is not set +# CONFIG_SOUND_PANGOLIN_UDA1341 is not set +# CONFIG_SOUND_SA1111_UDA1341 is not set +# CONFIG_SOUND_SA1100SSP is not set +# CONFIG_SOUND_OSS is not set +# CONFIG_SOUND_WAVEARTIST is not set +# CONFIG_SOUND_TVMIXER is not set + +# +# Multimedia Capabilities Port drivers +# +# CONFIG_MCP is not set +# CONFIG_MCP_SA1100 is not set +# CONFIG_MCP_UCB1200 is not set +# CONFIG_MCP_UCB1200_AUDIO is not set +# CONFIG_MCP_UCB1200_TS is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# USB Controllers +# +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +# CONFIG_USB_OHCI is not set +# CONFIG_USB_OHCI_SA1111 is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# USB Human Interface Devices (HID) +# + +# +# Input core support is needed for USB HID +# + +# +# USB Imaging devices +# +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_HPUSBSCSI is not set + +# +# USB Multimedia devices +# + +# +# Video4Linux support is needed for USB Multimedia device support +# + +# +# USB Network adaptors +# +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_CDCETHER is not set +# CONFIG_USB_USBNET is not set + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_IR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set +# CONFIG_USB_SERIAL_OMNINET is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_RIO500 is not set + +# +# Bluetooth support +# +# CONFIG_BT is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_USER=y +# CONFIG_DEBUG_INFO is not set +# CONFIG_NO_PGT_CACHE is not set +# CONFIG_DEBUG_KERNEL is not set +# CONFIG_DEBUG_SLAB is not set +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_BUGVERBOSE is not set +# CONFIG_DEBUG_ERRORS is not set +# CONFIG_DEBUG_LL is not set +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -prauN linux-2.6.0-test5/arch/arm/configs/footbridge_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/footbridge_defconfig --- linux-2.6.0-test5/arch/arm/configs/footbridge_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/footbridge_defconfig 2003-09-25 19:15:44.000000000 -0700 @@ -0,0 +1,880 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +CONFIG_KMOD=y + +# +# System Type +# +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +CONFIG_ARCH_FOOTBRIDGE=y +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_CLPS711X is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +CONFIG_ARCH_EBSA285_HOST=y +CONFIG_ARCH_NETWINDER=y + +# +# SA11x0 Implementations +# + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_ACORN is not set +CONFIG_FOOTBRIDGE=y +CONFIG_FOOTBRIDGE_HOST=y +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_ARCH_EBSA285=y +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set + +# +# Processor Type +# +CONFIG_CPU_32v4=y +CONFIG_CPU_SA110=y +# CONFIG_DISCONTIGMEM is not set + +# +# General setup +# +# CONFIG_ANGELBOOT is not set +CONFIG_PCI=y +CONFIG_ISA=y +CONFIG_ISA_DMA=y +CONFIG_PCI_NAMES=y +# CONFIG_HOTPLUG is not set +# CONFIG_PCMCIA is not set +CONFIG_NET=y +CONFIG_SYSVIPC=y +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_SYSCTL=y +CONFIG_NWFPE=y +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +CONFIG_BINFMT_AOUT=y +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_ARTHUR is not set +CONFIG_LEDS=y +CONFIG_LEDS_TIMER=y +# CONFIG_LEDS_CPU is not set +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +CONFIG_PARPORT=y +CONFIG_PARPORT_PC=y +CONFIG_PARPORT_PC_FIFO=y +# CONFIG_PARPORT_PC_SUPERIO is not set +# CONFIG_PARPORT_ARC is not set +# CONFIG_PARPORT_AMIGA is not set +# CONFIG_PARPORT_MFC3 is not set +# CONFIG_PARPORT_ATARI is not set +# CONFIG_PARPORT_SUNBPP is not set +# CONFIG_PARPORT_OTHER is not set +CONFIG_PARPORT_1284=y + +# +# Memory Technology Devices (MTD) +# +# CONFIG_MTD is not set + +# +# Plug and Play configuration +# +CONFIG_PNP=y +CONFIG_ISAPNP=y + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +CONFIG_PARIDE=m +CONFIG_PARIDE_PARPORT=y + +# +# Parallel IDE high-level drivers +# +CONFIG_PARIDE_PD=m +CONFIG_PARIDE_PCD=m +CONFIG_PARIDE_PF=m +CONFIG_PARIDE_PT=m +CONFIG_PARIDE_PG=m + +# +# Parallel IDE protocol modules +# +CONFIG_PARIDE_ATEN=m +CONFIG_PARIDE_BPCK=m +CONFIG_PARIDE_COMM=m +CONFIG_PARIDE_DSTR=m +CONFIG_PARIDE_FIT2=m +CONFIG_PARIDE_FIT3=m +CONFIG_PARIDE_EPAT=m +CONFIG_PARIDE_EPIA=m +CONFIG_PARIDE_FRIQ=m +CONFIG_PARIDE_FRPW=m +CONFIG_PARIDE_KBIC=m +CONFIG_PARIDE_KTTI=m +CONFIG_PARIDE_ON20=m +CONFIG_PARIDE_ON26=m +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +CONFIG_BLK_DEV_LOOP=m +CONFIG_BLK_DEV_NBD=m +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_INITRD=y + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_PACKET_MMAP=y +# CONFIG_NETLINK is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_PNP=y +CONFIG_IP_PNP_BOOTP=y +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_IP_MROUTE is not set +# CONFIG_INET_ECN is not set +CONFIG_SYN_COOKIES=y +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +CONFIG_ATM=y +# CONFIG_ATM_CLIP is not set +# CONFIG_ATM_LANE is not set + +# +# +# +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_NET_SB1000 is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +CONFIG_NET_VENDOR_3COM=y +# CONFIG_EL1 is not set +# CONFIG_EL2 is not set +# CONFIG_ELPLUS is not set +# CONFIG_EL16 is not set +# CONFIG_EL3 is not set +# CONFIG_3C515 is not set +# CONFIG_ELMC is not set +# CONFIG_ELMC_II is not set +CONFIG_VORTEX=y +# CONFIG_LANCE is not set +# CONFIG_NET_VENDOR_SMC is not set +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_AT1700 is not set +# CONFIG_DEPCA is not set +# CONFIG_HP100 is not set +# CONFIG_NET_ISA is not set +CONFIG_NET_PCI=y +# CONFIG_PCNET32 is not set +# CONFIG_ADAPTEC_STARFIRE is not set +# CONFIG_AC3200 is not set +# CONFIG_APRICOT is not set +# CONFIG_CS89x0 is not set +CONFIG_TULIP=m +# CONFIG_DE4X5 is not set +# CONFIG_DGRS is not set +# CONFIG_DM9102 is not set +# CONFIG_EEPRO100 is not set +# CONFIG_EEPRO100_PM is not set +# CONFIG_LNE390 is not set +# CONFIG_NATSEMI is not set +CONFIG_NE2K_PCI=y +# CONFIG_NE3210 is not set +# CONFIG_ES3210 is not set +# CONFIG_8139TOO is not set +# CONFIG_RTL8129 is not set +# CONFIG_SIS900 is not set +# CONFIG_EPIC100 is not set +# CONFIG_SUNDANCE is not set +# CONFIG_TLAN is not set +# CONFIG_VIA_RHINE is not set +# CONFIG_WINBOND_840 is not set +# CONFIG_HAPPYMEAL is not set +# CONFIG_NET_POCKET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PLIP is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +CONFIG_PPPOE=m +CONFIG_SLIP=m +CONFIG_SLIP_COMPRESSED=y +CONFIG_SLIP_SMART=y +CONFIG_SLIP_MODE_SLIP6=y + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +CONFIG_IRDA=m + +# +# IrDA protocols +# +CONFIG_IRLAN=m +CONFIG_IRNET=m +CONFIG_IRCOMM=m +CONFIG_IRDA_ULTRA=y +CONFIG_IRDA_OPTIONS=y + +# +# IrDA options +# +CONFIG_IRDA_CACHE_LAST_LSAP=y +CONFIG_IRDA_FAST_RR=y +CONFIG_IRDA_DEBUG=y + +# +# Infrared-port device drivers +# + +# +# SIR device drivers +# +# CONFIG_IRTTY_SIR is not set +# CONFIG_IRPORT_SIR is not set + +# +# FIR device drivers +# +# CONFIG_NSC_FIR is not set +CONFIG_WINBOND_FIR=m +# CONFIG_TOSHIBA_FIR is not set +# CONFIG_SMC_IRCC_FIR is not set + +# +# Dongle support +# +# CONFIG_DONGLE is not set + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=y + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=y + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=y +CONFIG_IDEDISK_MULTI_MODE=y +# CONFIG_BLK_DEV_IDECS is not set +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set + +# +# IDE chipset support/bugfixes +# +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +# CONFIG_BLK_DEV_RZ1000 is not set +CONFIG_IDEPCI_SHARE_IRQ=y +CONFIG_BLK_DEV_IDEDMA_PCI=y +CONFIG_BLK_DEV_OFFBOARD=y +CONFIG_IDEDMA_PCI_AUTO=y +CONFIG_BLK_DEV_IDEDMA=y +# CONFIG_IDEDMA_NEW_DRIVE_LISTINGS is not set +# CONFIG_BLK_DEV_AEC62XX is not set +# CONFIG_AEC62XX_TUNING is not set +# CONFIG_BLK_DEV_ALI15X3 is not set +# CONFIG_WDC_ALI15X3 is not set +# CONFIG_BLK_DEV_AMD7409 is not set +# CONFIG_AMD7409_OVERRIDE is not set +# CONFIG_BLK_DEV_CMD64X is not set +CONFIG_BLK_DEV_CY82C693=y +# CONFIG_BLK_DEV_CS5530 is not set +# CONFIG_BLK_DEV_HPT34X is not set +# CONFIG_HPT34X_AUTODMA is not set +# CONFIG_BLK_DEV_HPT366 is not set +# CONFIG_BLK_DEV_NS87415 is not set +# CONFIG_BLK_DEV_OPTI621 is not set +# CONFIG_PDC202XX_BURST is not set +# CONFIG_BLK_DEV_OSB4 is not set +# CONFIG_BLK_DEV_SIS5513 is not set +# CONFIG_BLK_DEV_TRM290 is not set +# CONFIG_BLK_DEV_VIA82CXXX is not set +CONFIG_BLK_DEV_SL82C105=y +# CONFIG_IDE_CHIPSETS is not set +CONFIG_IDEDMA_AUTO=y +# CONFIG_IDEDMA_IVB is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# IEEE 1394 (FireWire) support +# +# CONFIG_IEEE1394 is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_PCI is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +# CONFIG_INPUT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_SERIAL=y +CONFIG_SERIAL_CONSOLE=y +# CONFIG_SERIAL_EXTENDED is not set +CONFIG_SERIAL_NONSTANDARD=y +# CONFIG_COMPUTONE is not set +# CONFIG_ROCKETPORT is not set +# CONFIG_CYCLADES is not set +# CONFIG_DIGIEPCA is not set +# CONFIG_DIGI is not set +# CONFIG_ESPSERIAL is not set +# CONFIG_MOXA_INTELLIO is not set +# CONFIG_MOXA_SMARTIO is not set +# CONFIG_ISI is not set +# CONFIG_SYNCLINK is not set +# CONFIG_N_HDLC is not set +# CONFIG_RISCOM8 is not set +# CONFIG_SPECIALIX is not set +# CONFIG_SX is not set +# CONFIG_RIO is not set +# CONFIG_STALDRV is not set +CONFIG_SERIAL_21285=y +CONFIG_SERIAL_21285_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=256 +CONFIG_PRINTER=m +# CONFIG_LP_CONSOLE is not set +# CONFIG_PPDEV is not set + +# +# I2C support +# +CONFIG_I2C=m +# CONFIG_I2C_ALGOBIT is not set +# CONFIG_I2C_ALGOPCF is not set +# CONFIG_I2C_CHARDEV is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +CONFIG_MOUSE=y +CONFIG_PSMOUSE=y +# CONFIG_82C710_MOUSE is not set +# CONFIG_PC110_PAD is not set + +# +# Joysticks +# +# CONFIG_JOYSTICK is not set + +# +# Input core support is needed for joysticks +# +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +CONFIG_WATCHDOG=y +# CONFIG_WATCHDOG_NOWAYOUT is not set +CONFIG_SOFT_WATCHDOG=y +# CONFIG_WDT is not set +# CONFIG_WDTPCI is not set +# CONFIG_PCWATCHDOG is not set +# CONFIG_ACQUIRE_WDT is not set +# CONFIG_60XX_WDT is not set +# CONFIG_MIXCOMWD is not set +# CONFIG_I810_TCO is not set +CONFIG_21285_WATCHDOG=m +CONFIG_977_WATCHDOG=m +CONFIG_DS1620=y +CONFIG_NWBUTTON=y +CONFIG_NWBUTTON_REBOOT=y +CONFIG_NWFLASH=m +# CONFIG_INTEL_RNG is not set +CONFIG_NVRAM=m +CONFIG_RTC=y +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# Multimedia devices +# +CONFIG_VIDEO_DEV=m + +# +# Video For Linux +# +CONFIG_VIDEO_PROC_FS=y +# CONFIG_I2C_PARPORT is not set + +# +# Video Adapters +# +# CONFIG_VIDEO_PMS is not set +# CONFIG_VIDEO_BWQCAM is not set +# CONFIG_VIDEO_CQCAM is not set +# CONFIG_VIDEO_CPIA is not set +# CONFIG_VIDEO_SAA5249 is not set +# CONFIG_TUNER_3036 is not set +# CONFIG_VIDEO_STRADIS is not set +# CONFIG_VIDEO_ZORAN is not set +# CONFIG_VIDEO_BUZ is not set +# CONFIG_VIDEO_ZR36120 is not set +CONFIG_VIDEO_CYBERPRO=m + +# +# Radio Adapters +# +# CONFIG_RADIO_CADET is not set +# CONFIG_RADIO_RTRACK is not set +# CONFIG_RADIO_RTRACK2 is not set +# CONFIG_RADIO_AZTECH is not set +# CONFIG_RADIO_GEMTEK is not set +# CONFIG_RADIO_MAESTRO is not set +# CONFIG_RADIO_MIROPCM20 is not set +# CONFIG_RADIO_SF16FMI is not set +# CONFIG_RADIO_TERRATEC is not set +# CONFIG_RADIO_TRUST is not set +# CONFIG_RADIO_TYPHOON is not set +# CONFIG_RADIO_ZOLTRIX is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +CONFIG_AUTOFS4_FS=y +CONFIG_ADFS_FS=m +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +# CONFIG_UMSDOS_FS is not set +CONFIG_VFAT_FS=m +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +# CONFIG_CRAMFS is not set +# CONFIG_RAMFS is not set +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +# CONFIG_MINIX_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_SYSV_FS_WRITE is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +CONFIG_NFS_FS=y +# CONFIG_NFS_V3 is not set +CONFIG_ROOT_NFS=y +CONFIG_NFSD=m +# CONFIG_NFSD_V3 is not set +CONFIG_SUNRPC=y +CONFIG_LOCKD=y +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_MOUNT_SUBDIR is not set +# CONFIG_NCPFS_NDS_DOMAINS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +CONFIG_ACORN_PARTITION=y +# CONFIG_ACORN_PARTITION_ICS is not set +CONFIG_ACORN_PARTITION_ADFS=y +# CONFIG_ACORN_PARTITION_POWERTEC is not set +# CONFIG_ACORN_PARTITION_RISCIX is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +CONFIG_NLS=y + +# +# Native Language Support +# +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=m +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +CONFIG_NLS_CODEPAGE_850=m +CONFIG_NLS_CODEPAGE_852=m +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +CONFIG_NLS_ISO8859_1=m +CONFIG_NLS_ISO8859_2=m +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_14 is not set +CONFIG_NLS_ISO8859_15=m +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_UTF8 is not set + +# +# Console drivers +# +CONFIG_PC_KEYB=y +CONFIG_PC_KEYMAP=y +CONFIG_VGA_CONSOLE=y +CONFIG_FB=y + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_RIVA is not set +# CONFIG_FB_CLGEN is not set +# CONFIG_FB_PM2 is not set +# CONFIG_FB_ACORN is not set +# CONFIG_FB_CLPS711X is not set +CONFIG_FB_CYBER2000=y +# CONFIG_FB_SA1100 is not set +# CONFIG_FB_MATROX is not set +# CONFIG_FB_ATY is not set +# CONFIG_FB_ATY128 is not set +# CONFIG_FB_3DFX is not set +# CONFIG_FB_SIS is not set +# CONFIG_FB_VIRTUAL is not set +CONFIG_FBCON_ADVANCED=y +# CONFIG_FBCON_MFB is not set +# CONFIG_FBCON_CFB2 is not set +# CONFIG_FBCON_CFB4 is not set +CONFIG_FBCON_CFB8=y +CONFIG_FBCON_CFB16=y +CONFIG_FBCON_CFB24=y +# CONFIG_FBCON_CFB32 is not set +# CONFIG_FBCON_AFB is not set +# CONFIG_FBCON_ILBM is not set +# CONFIG_FBCON_IPLAN2P2 is not set +# CONFIG_FBCON_IPLAN2P4 is not set +# CONFIG_FBCON_IPLAN2P8 is not set +# CONFIG_FBCON_MAC is not set +# CONFIG_FBCON_VGA_PLANES is not set +CONFIG_FBCON_VGA=y +# CONFIG_FBCON_HGA is not set +# CONFIG_FBCON_FONTWIDTH8_ONLY is not set +CONFIG_FBCON_FONTS=y +# CONFIG_FONT_8x8 is not set +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_PEARL_8x8 is not set +CONFIG_FONT_ACORN_8x8=y + +# +# Sound +# +CONFIG_SOUND=m +# CONFIG_SOUND_CMPCI is not set +# CONFIG_SOUND_EMU10K1 is not set +# CONFIG_SOUND_FUSION is not set +# CONFIG_SOUND_CS4281 is not set +# CONFIG_SOUND_ES1370 is not set +# CONFIG_SOUND_ES1371 is not set +# CONFIG_SOUND_ESSSOLO1 is not set +# CONFIG_SOUND_MAESTRO is not set +# CONFIG_SOUND_SONICVIBES is not set +# CONFIG_SOUND_TRIDENT is not set +# CONFIG_SOUND_MSNDCLAS is not set +# CONFIG_SOUND_MSNDPIN is not set +# CONFIG_SOUND_VIA82CXXX is not set +CONFIG_SOUND_OSS=m +# CONFIG_SOUND_TRACEINIT is not set +# CONFIG_SOUND_DMAP is not set +# CONFIG_SOUND_AD1816 is not set +# CONFIG_SOUND_SGALAXY is not set +CONFIG_SOUND_ADLIB=m +# CONFIG_SOUND_ACI_MIXER is not set +# CONFIG_SOUND_CS4232 is not set +# CONFIG_SOUND_SSCAPE is not set +# CONFIG_SOUND_GUS is not set +# CONFIG_SOUND_ICH is not set +# CONFIG_SOUND_VMIDI is not set +# CONFIG_SOUND_TRIX is not set +# CONFIG_SOUND_MSS is not set +# CONFIG_SOUND_MPU401 is not set +# CONFIG_SOUND_NM256 is not set +# CONFIG_SOUND_MAD16 is not set +# CONFIG_SOUND_PAS is not set +# CONFIG_PAS_JOYSTICK is not set +# CONFIG_SOUND_PSS is not set +CONFIG_SOUND_SB=m +# CONFIG_SOUND_AWE32_SYNTH is not set +# CONFIG_SOUND_WAVEFRONT is not set +# CONFIG_SOUND_MAUI is not set +# CONFIG_SOUND_YM3812 is not set +# CONFIG_SOUND_OPL3SA1 is not set +# CONFIG_SOUND_OPL3SA2 is not set +# CONFIG_SOUND_YMPCI is not set +# CONFIG_SOUND_UART6850 is not set +# CONFIG_SOUND_AEDSP16 is not set +CONFIG_SOUND_WAVEARTIST=m +# CONFIG_SOUND_TVMIXER is not set + +# +# USB support +# +CONFIG_USB=m +CONFIG_USB_DEBUG=y + +# +# Miscellaneous USB options +# +CONFIG_USB_DEVICEFS=y +# CONFIG_USB_BANDWIDTH is not set + +# +# USB Controllers +# +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +CONFIG_USB_OHCI=m + +# +# USB Devices +# +CONFIG_USB_PRINTER=m +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set +CONFIG_USB_AUDIO=m +# CONFIG_USB_ACM is not set +# CONFIG_USB_SERIAL is not set +# CONFIG_USB_IBMCAM is not set +# CONFIG_USB_OV511 is not set +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_USS720 is not set +# CONFIG_USB_DABUSB is not set +# CONFIG_USB_PLUSB is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_DSBR is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_NET1080 is not set + +# +# USB Human Interface Devices (HID) +# + +# +# Input core support is needed for USB HID +# + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_USER=y +# CONFIG_DEBUG_INFO is not set +CONFIG_MAGIC_SYSRQ=y +CONFIG_DEBUG_LL=y +# CONFIG_DEBUG_DC21285_PORT is not set diff -prauN linux-2.6.0-test5/arch/arm/configs/fortunet_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/fortunet_defconfig --- linux-2.6.0-test5/arch/arm/configs/fortunet_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/fortunet_defconfig 2003-09-25 19:15:44.000000000 -0700 @@ -0,0 +1,593 @@ +# +# Automatically generated by make menuconfig: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set +# CONFIG_GENERIC_BUST_SPINLOCK is not set +# CONFIG_GENERIC_ISA_DMA is not set + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +# CONFIG_MODULES is not set +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set + +# +# System Type +# +# CONFIG_ARCH_ANAKIN is not set +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +CONFIG_ARCH_CLPS711X=y +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_CAMELOT is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_SHARK is not set + +# +# Archimedes/A5000 Implementations +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_ADSBITSY is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_H3100 is not set +# CONFIG_SA1100_H3600 is not set +# CONFIG_SA1100_H3800 is not set +# CONFIG_SA1100_H3XXX is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FLEXANET is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_GRAPHICSMASTER is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_SHANNON is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_SIMPAD is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +# CONFIG_SA1100_USB is not set +# CONFIG_SA1100_USB_NETLINK is not set +# CONFIG_SA1100_USB_CHAR is not set +# CONFIG_H3600_SLEEVE is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_AUTCPU12 is not set +# CONFIG_ARCH_CDB89712 is not set +# CONFIG_ARCH_CLEP7312 is not set +# CONFIG_ARCH_EDB7211 is not set +# CONFIG_ARCH_P720T is not set +CONFIG_ARCH_FORTUNET=y +# CONFIG_ARCH_EP7211 is not set +# CONFIG_ARCH_EP7212 is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +CONFIG_CPU_ARM720T=y +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM922T is not set +# CONFIG_CPU_ARM926T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +# CONFIG_CPU_SA1100 is not set +# CONFIG_ARM_THUMB is not set +# CONFIG_DISCONTIGMEM is not set + +# +# General setup +# +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +# CONFIG_HOTPLUG is not set +# CONFIG_PCMCIA is not set +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +# CONFIG_FPE_NWFPE is not set +CONFIG_FPE_FASTFPE=y +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +CONFIG_BINFMT_AOUT=y +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_ARTHUR is not set +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_PARTITIONS is not set +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_BOOTLDR_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +# CONFIG_MTD_OBSOLETE_CHIPS is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set +# CONFIG_MTD_JEDEC is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_CDB89712 is not set +# CONFIG_MTD_SA1100 is not set +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set +CONFIG_MTD_FORTUNET=y +# CONFIG_MTD_PCI is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLKMTD is not set +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_MD_MULTIPATH is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +# CONFIG_PACKET is not set +# CONFIG_NETLINK_DEV is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +# CONFIG_INET is not set +# CONFIG_ATM is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET_AUNUDP is not set +# CONFIG_ECONET_NATIVE is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +# CONFIG_NETDEVICES is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# ATA/IDE/MFM/RLL support +# +# CONFIG_IDE is not set +# CONFIG_BLK_DEV_HD is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# Synchronous Serial Interface +# +# CONFIG_SSI is not set +# CONFIG_SSI_CLPS711X is not set +# CONFIG_SSI_JUNO is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +# CONFIG_INPUT is not set +# CONFIG_INPUT_KEYBDEV is not set +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set + +# +# Character devices +# +# CONFIG_VT is not set +# CONFIG_SERIAL is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_ANAKIN is not set +# CONFIG_SERIAL_ANAKIN_CONSOLE is not set +# CONFIG_SERIAL_AMBA is not set +# CONFIG_SERIAL_AMBA_CONSOLE is not set +CONFIG_SERIAL_CLPS711X=y +CONFIG_SERIAL_CLPS711X_CONSOLE=y +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +# CONFIG_SERIAL_UART00 is not set +# CONFIG_SERIAL_UART00_CONSOLE is not set +# CONFIG_SERIAL_SA1100 is not set +# CONFIG_SERIAL_SA1100_CONSOLE is not set +# CONFIG_SERIAL_8250 is not set +# CONFIG_SERIAL_8250_CONSOLE is not set +# CONFIG_SERIAL_8250_EXTENDED is not set +# CONFIG_SERIAL_8250_MANY_PORTS is not set +# CONFIG_SERIAL_8250_SHARE_IRQ is not set +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +# CONFIG_SERIAL_8250_MULTIPORT is not set +# CONFIG_SERIAL_8250_HUB6 is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=256 + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# L3 serial bus support +# +# CONFIG_L3 is not set +# CONFIG_L3_ALGOBIT is not set +# CONFIG_L3_BIT_SA1100_GPIO is not set +# CONFIG_L3_SA1111 is not set +# CONFIG_BIT_SA1100_GPIO is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_MOUSE is not set + +# +# Joysticks +# +# CONFIG_INPUT_GAMEPORT is not set +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_REISERFS_PROC_INFO is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EXT3_FS is not set +# CONFIG_JBD is not set +# CONFIG_JBD_DEBUG is not set +# CONFIG_FAT_FS is not set +# CONFIG_MSDOS_FS is not set +# CONFIG_UMSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_EFS_FS is not set +CONFIG_JFFS_FS=y +CONFIG_JFFS_FS_VERBOSE=0 +# CONFIG_JFFS_PROC_FS is not set +# CONFIG_JFFS2_FS is not set +# CONFIG_CRAMFS is not set +# CONFIG_TMPFS is not set +# CONFIG_RAMFS is not set +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_ZISOFS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +# CONFIG_INTERMEZZO_FS is not set +# CONFIG_NFS_FS is not set +# CONFIG_NFS_V3 is not set +# CONFIG_ROOT_NFS is not set +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +# CONFIG_SUNRPC is not set +# CONFIG_LOCKD is not set +# CONFIG_SMB_FS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_ZISOFS_FS is not set +# CONFIG_ZLIB_FS_INFLATE is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_SMB_NLS is not set +# CONFIG_NLS is not set + +# +# Multimedia Capabilities Port drivers +# +# CONFIG_MCP is not set +# CONFIG_MCP_SA1100 is not set +# CONFIG_MCP_UCB1200 is not set +# CONFIG_MCP_UCB1200_AUDIO is not set +# CONFIG_MCP_UCB1200_TS is not set + +# +# USB support +# +# CONFIG_USB is not set +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +# CONFIG_USB_OHCI is not set +# CONFIG_USB_OHCI_SA1111 is not set +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_HPUSBSCSI is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_CDCETHER is not set +# CONFIG_USB_USBNET is not set +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_IR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set +# CONFIG_USB_SERIAL_OMNINET is not set +# CONFIG_USB_RIO500 is not set + +# +# Bluetooth support +# +# CONFIG_BT is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_USER=y +# CONFIG_DEBUG_INFO is not set +# CONFIG_NO_PGT_CACHE is not set +# CONFIG_DEBUG_KERNEL is not set +# CONFIG_DEBUG_SLAB is not set +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_WAITQ is not set +# CONFIG_DEBUG_BUGVERBOSE is not set +# CONFIG_DEBUG_ERRORS is not set +# CONFIG_DEBUG_LL is not set +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set +# CONFIG_DEBUG_LL_SER3 is not set diff -prauN linux-2.6.0-test5/arch/arm/configs/freebird_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/freebird_defconfig --- linux-2.6.0-test5/arch/arm/configs/freebird_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/freebird_defconfig 2003-09-25 19:15:44.000000000 -0700 @@ -0,0 +1,615 @@ +# +# Automatically generated by make menuconfig: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set + +# +# System Type +# +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_CLPS711X is not set + +# +# Archimedes/A5000 Implementations +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_BITSY is not set +# CONFIG_SA1100_EXTENEX1 is not set +CONFIG_SA1100_FREEBIRD=y +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +# CONFIG_SA1100_PFS168 is not set +CONFIG_SA1100_FREEBIRD_OLD=y +# CONFIG_SA1100_FREEBIRD_NEW is not set +CONFIG_SA1100_FL=y +CONFIG_SA1100_USB=m +CONFIG_SA1100_USB_NETLINK=m +CONFIG_SA1100_USB_CHAR=m +# CONFIG_SA1100_FREQUENCY_SCALE is not set +# CONFIG_SA1100_VOLTAGE_SCALE is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +CONFIG_CPU_SA1100=y +CONFIG_DISCONTIGMEM=y + +# +# General setup +# +# CONFIG_ANGELBOOT is not set +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=y +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_CLPS6700 is not set +CONFIG_PCMCIA_SA1100=y +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +# CONFIG_FPE_NWFPE is not set +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +CONFIG_BINFMT_AOUT=m +CONFIG_BINFMT_ELF=y +CONFIG_BINFMT_MISC=m +CONFIG_PM=y +CONFIG_APM=y +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="mem=32M root=/dev/ram initrd=0xc0800000,3M" +# CONFIG_PFS168_CMDLINE is not set +# CONFIG_LEDS is not set +CONFIG_ALIGNMENT_TRAP=y +# CONFIG_UCB1200 is not set + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_MTDRAM is not set +CONFIG_MTD_CFI=y +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_PNC2000 is not set +# CONFIG_MTD_RPXLITE is not set +# CONFIG_MTD_SC520CDP is not set +# CONFIG_MTD_SBC_MEDIAGX is not set +# CONFIG_MTD_ELAN_104NC is not set +CONFIG_MTD_SA1100=y +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set +# CONFIG_MTD_CSTM_CFI_JEDEC is not set +# CONFIG_MTD_JEDEC is not set +# CONFIG_MTD_MIXMEM is not set +# CONFIG_MTD_OCTAGON is not set +# CONFIG_MTD_VMAX is not set +# CONFIG_MTD_NAND is not set +# CONFIG_MTD_NAND_SPIA is not set +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +CONFIG_BLK_DEV_LOOP=m +CONFIG_BLK_DEV_NBD=m +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=8192 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +# CONFIG_PACKET is not set +# CONFIG_NETLINK is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_NET_SB1000 is not set + +# +# Ethernet (10 or 100Mbit) +# +# CONFIG_NET_ETHERNET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +# CONFIG_PPPOE is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +# CONFIG_PCMCIA_3C589 is not set +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +CONFIG_PCMCIA_PCNET=m +# CONFIG_PCMCIA_NMCLAN is not set +# CONFIG_PCMCIA_SMC91C92 is not set +# CONFIG_PCMCIA_XIRC2PS is not set +# CONFIG_ARCNET_COM20020_CS is not set +# CONFIG_PCMCIA_IBMTR is not set +# CONFIG_NET_PCMCIA_RADIO is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +CONFIG_IRDA=m +# CONFIG_IRLAN is not set +# CONFIG_IRNET is not set +# CONFIG_IRCOMM is not set +# CONFIG_IRDA_ULTRA is not set +# CONFIG_IRDA_OPTIONS is not set + +# +# Infrared-port device drivers +# +CONFIG_IRTTY_SIR=m +# CONFIG_IRPORT_SIR is not set +# CONFIG_NSC_FIR is not set +# CONFIG_WINBOND_FIR is not set +# CONFIG_TOSHIBA_FIR is not set +# CONFIG_SMC_IRCC_FIR is not set +CONFIG_SA1100_FIR=m +# CONFIG_DONGLE is not set + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=y + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=y +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=m +# CONFIG_IDEDISK_MULTI_MODE is not set +CONFIG_BLK_DEV_IDECS=m +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +# CONFIG_IDE_CHIPSETS is not set +# CONFIG_IDEDMA_AUTO is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +# CONFIG_INPUT is not set + +# +# Character devices +# +CONFIG_VT=y +# CONFIG_VT_CONSOLE is not set +# CONFIG_SERIAL is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=9600 +# CONFIG_TOUCHSCREEN_UCB1200 is not set +# CONFIG_TOUCHSCREEN_BITSY is not set +CONFIG_FB_TS_BT=y +# CONFIG_PROFILER is not set +# CONFIG_PFS168_SPI is not set +# CONFIG_PFS168_DTMF is not set +# CONFIG_PFS168_MISC is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=32 + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_MOUSE is not set + +# +# Joysticks +# +# CONFIG_JOYSTICK is not set +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +CONFIG_SA1100_RTC=y +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set +# CONFIG_PCMCIA_SERIAL is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_FAT_FS is not set +# CONFIG_MSDOS_FS is not set +# CONFIG_UMSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +# CONFIG_JFFS2_FS is not set +# CONFIG_CRAMFS is not set +CONFIG_RAMFS=y +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_MINIX_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_SYSV_FS_WRITE is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +# CONFIG_NFS_FS is not set +# CONFIG_NFS_V3 is not set +# CONFIG_ROOT_NFS is not set +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +# CONFIG_SUNRPC is not set +# CONFIG_LOCKD is not set +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_SMB_NLS is not set +# CONFIG_NLS is not set + +# +# Console drivers +# +CONFIG_PC_KEYMAP=y +# CONFIG_VGA_CONSOLE is not set +CONFIG_FB=y + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_ACORN is not set +# CONFIG_FB_CLPS711X is not set +# CONFIG_FB_CYBER2000 is not set +CONFIG_FB_SA1100=y +# CONFIG_FB_VIRTUAL is not set +# CONFIG_FBCON_ADVANCED is not set +CONFIG_FBCON_CFB2=y +CONFIG_FBCON_CFB4=y +CONFIG_FBCON_CFB8=y +CONFIG_FBCON_CFB16=y +# CONFIG_FBCON_FONTWIDTH8_ONLY is not set +CONFIG_FBCON_FONTS=y +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set + +# +# Sound +# +CONFIG_SOUND=y +CONFIG_SOUND_UDA1341=y +# CONFIG_SOUND_UDA1341_GSM is not set +# CONFIG_SOUND_SA1100_SSP is not set +# CONFIG_SOUND_CMPCI is not set +# CONFIG_SOUND_EMU10K1 is not set +# CONFIG_SOUND_FUSION is not set +# CONFIG_SOUND_CS4281 is not set +# CONFIG_SOUND_ES1370 is not set +# CONFIG_SOUND_ES1371 is not set +# CONFIG_SOUND_ESSSOLO1 is not set +# CONFIG_SOUND_MAESTRO is not set +# CONFIG_SOUND_MAESTRO3 is not set +# CONFIG_SOUND_ICH is not set +# CONFIG_SOUND_SONICVIBES is not set +# CONFIG_SOUND_TRIDENT is not set +# CONFIG_SOUND_MSNDCLAS is not set +# CONFIG_SOUND_MSNDPIN is not set +# CONFIG_SOUND_VIA82CXXX is not set +# CONFIG_SOUND_OSS is not set +# CONFIG_SOUND_TVMIXER is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_USER=y +# CONFIG_DEBUG_INFO is not set +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_NO_PGT_CACHE is not set +# CONFIG_DEBUG_LL is not set +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -prauN linux-2.6.0-test5/arch/arm/configs/freebird_new_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/freebird_new_defconfig --- linux-2.6.0-test5/arch/arm/configs/freebird_new_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/freebird_new_defconfig 2003-09-25 19:15:44.000000000 -0700 @@ -0,0 +1,635 @@ +# +# Automatically generated by make menuconfig: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +CONFIG_KMOD=y + +# +# System Type +# +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_CLPS711X is not set + +# +# Archimedes/A5000 Implementations +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_BITSY is not set +# CONFIG_SA1100_EXTENEX1 is not set +CONFIG_SA1100_FREEBIRD=y +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_FREEBIRD_OLD is not set +CONFIG_SA1100_FREEBIRD_NEW=y +CONFIG_SA1100_FL=m +CONFIG_SA1100_USB=m +CONFIG_SA1100_USB_NETLINK=m +CONFIG_SA1100_USB_CHAR=m +CONFIG_SA1100_FREQUENCY_SCALE=y +# CONFIG_SA1100_VOLTAGE_SCALE is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +CONFIG_CPU_SA1100=y +CONFIG_DISCONTIGMEM=y + +# +# General setup +# +# CONFIG_ANGELBOOT is not set +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=m +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_CLPS6700 is not set +CONFIG_PCMCIA_SA1100=m +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +# CONFIG_FPE_NWFPE is not set +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +CONFIG_PM=y +CONFIG_APM=y +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="noinitrd console=ttySA0 init=/linuxrc root=/dev/mtdblock4 mem=32m" +# CONFIG_PFS168_CMDLINE is not set +# CONFIG_LEDS is not set +CONFIG_ALIGNMENT_TRAP=y +# CONFIG_UCB1200 is not set + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_MTDRAM is not set +CONFIG_MTD_CFI=y +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_PNC2000 is not set +# CONFIG_MTD_RPXLITE is not set +# CONFIG_MTD_SC520CDP is not set +# CONFIG_MTD_SBC_MEDIAGX is not set +# CONFIG_MTD_ELAN_104NC is not set +CONFIG_MTD_SA1100=y +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set +# CONFIG_MTD_CSTM_CFI_JEDEC is not set +# CONFIG_MTD_JEDEC is not set +# CONFIG_MTD_MIXMEM is not set +# CONFIG_MTD_OCTAGON is not set +# CONFIG_MTD_VMAX is not set +# CONFIG_MTD_NAND is not set +# CONFIG_MTD_NAND_SPIA is not set +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +CONFIG_BLK_DEV_LOOP=m +CONFIG_BLK_DEV_NBD=m +# CONFIG_BLK_DEV_RAM is not set +# CONFIG_BLK_DEV_INITRD is not set + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_PACKET_MMAP=y +CONFIG_NETLINK=y +CONFIG_RTNETLINK=y +# CONFIG_NETLINK_DEV is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set + +# +# IP: Netfilter Configuration +# +# CONFIG_IP_NF_CONNTRACK is not set +# CONFIG_IP_NF_QUEUE is not set +# CONFIG_IP_NF_IPTABLES is not set +# CONFIG_IP_NF_COMPAT_IPCHAINS is not set +# CONFIG_IP_NF_COMPAT_IPFWADM is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_ETHERTAP is not set +# CONFIG_NET_SB1000 is not set + +# +# Ethernet (10 or 100Mbit) +# +# CONFIG_NET_ETHERNET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +# CONFIG_PPPOE is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +# CONFIG_PCMCIA_3C589 is not set +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +CONFIG_PCMCIA_PCNET=m +# CONFIG_PCMCIA_NMCLAN is not set +# CONFIG_PCMCIA_SMC91C92 is not set +# CONFIG_PCMCIA_XIRC2PS is not set +# CONFIG_ARCNET_COM20020_CS is not set +# CONFIG_PCMCIA_IBMTR is not set +# CONFIG_NET_PCMCIA_RADIO is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +CONFIG_IRDA=m +# CONFIG_IRLAN is not set +# CONFIG_IRNET is not set +# CONFIG_IRCOMM is not set +# CONFIG_IRDA_ULTRA is not set +# CONFIG_IRDA_OPTIONS is not set + +# +# Infrared-port device drivers +# +# CONFIG_IRTTY_SIR is not set +# CONFIG_IRPORT_SIR is not set +# CONFIG_NSC_FIR is not set +# CONFIG_WINBOND_FIR is not set +# CONFIG_TOSHIBA_FIR is not set +# CONFIG_SMC_IRCC_FIR is not set +CONFIG_SA1100_FIR=m +# CONFIG_DONGLE is not set + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=m + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=m +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=m +# CONFIG_IDEDISK_MULTI_MODE is not set +CONFIG_BLK_DEV_IDECS=m +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +# CONFIG_IDE_CHIPSETS is not set +# CONFIG_IDEDMA_AUTO is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +# CONFIG_INPUT is not set + +# +# Character devices +# +CONFIG_VT=y +# CONFIG_VT_CONSOLE is not set +CONFIG_SERIAL=m +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=9600 +# CONFIG_TOUCHSCREEN_UCB1200 is not set +# CONFIG_TOUCHSCREEN_BITSY is not set +CONFIG_FB_TS_BT=y +# CONFIG_PROFILER is not set +# CONFIG_PFS168_SPI is not set +# CONFIG_PFS168_DTMF is not set +# CONFIG_PFS168_MISC is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=32 + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_MOUSE is not set + +# +# Joysticks +# +# CONFIG_JOYSTICK is not set +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +CONFIG_SA1100_RTC=y +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set +CONFIG_PCMCIA_SERIAL=m + +# +# PCMCIA character device support +# +CONFIG_PCMCIA_SERIAL_CS=m + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +CONFIG_AUTOFS_FS=m +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_FAT_FS is not set +# CONFIG_MSDOS_FS is not set +# CONFIG_UMSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_EFS_FS is not set +CONFIG_JFFS_FS=m +CONFIG_JFFS_FS_VERBOSE=0 +# CONFIG_JFFS2_FS is not set +CONFIG_CRAMFS=y +CONFIG_RAMFS=y +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_MINIX_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=m +# CONFIG_SYSV_FS is not set +# CONFIG_SYSV_FS_WRITE is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +CONFIG_NFS_FS=m +# CONFIG_NFS_V3 is not set +# CONFIG_ROOT_NFS is not set +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +CONFIG_SUNRPC=m +CONFIG_LOCKD=m +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_SMB_NLS is not set +# CONFIG_NLS is not set + +# +# Console drivers +# +CONFIG_PC_KEYMAP=y +# CONFIG_VGA_CONSOLE is not set +CONFIG_FB=y + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_ACORN is not set +# CONFIG_FB_CLPS711X is not set +# CONFIG_FB_CYBER2000 is not set +CONFIG_FB_SA1100=y +# CONFIG_FB_VIRTUAL is not set +# CONFIG_FBCON_ADVANCED is not set +CONFIG_FBCON_CFB2=y +CONFIG_FBCON_CFB4=y +CONFIG_FBCON_CFB8=y +CONFIG_FBCON_CFB16=y +# CONFIG_FBCON_FONTWIDTH8_ONLY is not set +CONFIG_FBCON_FONTS=y +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set + +# +# Sound +# +CONFIG_SOUND=y +CONFIG_SOUND_UDA1341=y +# CONFIG_SOUND_UDA1341_GSM is not set +# CONFIG_SOUND_SA1100_SSP is not set +# CONFIG_SOUND_CMPCI is not set +# CONFIG_SOUND_EMU10K1 is not set +# CONFIG_SOUND_FUSION is not set +# CONFIG_SOUND_CS4281 is not set +# CONFIG_SOUND_ES1370 is not set +# CONFIG_SOUND_ES1371 is not set +# CONFIG_SOUND_ESSSOLO1 is not set +# CONFIG_SOUND_MAESTRO is not set +# CONFIG_SOUND_MAESTRO3 is not set +# CONFIG_SOUND_ICH is not set +# CONFIG_SOUND_SONICVIBES is not set +# CONFIG_SOUND_TRIDENT is not set +# CONFIG_SOUND_MSNDCLAS is not set +# CONFIG_SOUND_MSNDPIN is not set +# CONFIG_SOUND_VIA82CXXX is not set +# CONFIG_SOUND_OSS is not set +# CONFIG_SOUND_TVMIXER is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_ERRORS=y +# CONFIG_DEBUG_USER is not set +# CONFIG_DEBUG_INFO is not set +CONFIG_MAGIC_SYSRQ=y +# CONFIG_NO_PGT_CACHE is not set +# CONFIG_DEBUG_LL is not set +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -prauN linux-2.6.0-test5/arch/arm/configs/graphicsclient_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/graphicsclient_defconfig --- linux-2.6.0-test5/arch/arm/configs/graphicsclient_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/graphicsclient_defconfig 2003-09-25 19:15:44.000000000 -0700 @@ -0,0 +1,732 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set + +# +# System Type +# +# CONFIG_ARCH_ANAKIN is not set +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_SHARK is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Archimedes/A5000 Implementations (select only ONE) +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_BITSY is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FLEXANET is not set +# CONFIG_SA1100_FREEBIRD is not set +CONFIG_SA1100_GRAPHICSCLIENT=y +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_SIMPAD is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +# CONFIG_SA1100_GRAPHICSMASTER is not set +# CONFIG_SA1100_ADSBITSY is not set +# CONFIG_SA1100_USB is not set +# CONFIG_SA1100_USB_NETLINK is not set +# CONFIG_SA1100_USB_CHAR is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set + +# +# Processor Type +# +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +CONFIG_CPU_SA1100=y +CONFIG_DISCONTIGMEM=y +# CONFIG_CPU_BIG_ENDIAN is not set + +# +# General setup +# +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +# CONFIG_CPU_FREQ is not set +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=y +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_CLPS6700 is not set +CONFIG_PCMCIA_SA1100=y +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_APM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="ip=off mem=16M@0xc0000000 mem=16M@0xc8000000 root=/dev/ram initrd=0xc0800000,4M" +# CONFIG_PFS168_CMDLINE is not set +CONFIG_LEDS=y +CONFIG_LEDS_TIMER=y +CONFIG_LEDS_CPU=y +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_BOOTLDR_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_JEDEC is not set + +# +# Mapping drivers for chip access +# +CONFIG_MTD_PHYSMAP=y +CONFIG_MTD_PHYSMAP_START=800000 +CONFIG_MTD_PHYSMAP_LEN=1000000 +CONFIG_MTD_PHYSMAP_BUSWIDTH=4 +# CONFIG_MTD_SUN_UFLASH is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_PNC2000 is not set +# CONFIG_MTD_RPXLITE is not set +# CONFIG_MTD_TQM8XXL is not set +# CONFIG_MTD_SC520CDP is not set +# CONFIG_MTD_NETSC520 is not set +# CONFIG_MTD_SBC_GXX is not set +# CONFIG_MTD_ELAN_104NC is not set +CONFIG_MTD_SA1100=y +# CONFIG_MTD_SA1100_REDBOOT_PARTITIONS is not set +# CONFIG_MTD_SA1100_BOOTLDR_PARTITIONS is not set +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set +# CONFIG_MTD_DBOX2 is not set +# CONFIG_MTD_CSTM_MIPS_IXX is not set +# CONFIG_MTD_CFI_FLAGADM is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_SOLUTIONENGINE is not set +# CONFIG_MTD_MIXMEM is not set +# CONFIG_MTD_OCTAGON is not set +# CONFIG_MTD_VMAX is not set +# CONFIG_MTD_OCELOT is not set +# CONFIG_MTD_L440GX is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_LART is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLKMTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +CONFIG_BLK_DEV_LOOP=m +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=8192 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +# CONFIG_NETLINK is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_PNP=y +# CONFIG_IP_PNP_DHCP is not set +CONFIG_IP_PNP_BOOTP=y +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set + +# +# +# +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_SUNLANCE is not set +# CONFIG_SUNBMAC is not set +# CONFIG_SUNQE is not set +# CONFIG_SUNLANCE is not set +# CONFIG_SUNGEM is not set +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_LANCE is not set +CONFIG_NET_VENDOR_SMC=y +# CONFIG_WD80x3 is not set +# CONFIG_ULTRAMCA is not set +# CONFIG_ULTRA is not set +# CONFIG_ULTRA32 is not set +CONFIG_SMC9194=y +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_NET_ISA is not set +# CONFIG_NET_PCI is not set +# CONFIG_NET_POCKET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_MYRI_SBUS is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PLIP is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +# CONFIG_PCMCIA_3C589 is not set +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +CONFIG_PCMCIA_PCNET=y +# CONFIG_PCMCIA_NMCLAN is not set +# CONFIG_PCMCIA_SMC91C92 is not set +# CONFIG_PCMCIA_XIRC2PS is not set +# CONFIG_ARCNET_COM20020_CS is not set +# CONFIG_PCMCIA_IBMTR is not set +# CONFIG_NET_PCMCIA_RADIO is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=y + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=y + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=y +# CONFIG_IDEDISK_MULTI_MODE is not set +CONFIG_BLK_DEV_IDECS=y +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set + +# +# IDE chipset support/bugfixes +# +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +# CONFIG_IDE_CHIPSETS is not set +# CONFIG_IDEDMA_AUTO is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +# CONFIG_INPUT is not set + +# +# Character devices +# +CONFIG_VT=y +# CONFIG_VT_CONSOLE is not set +# CONFIG_SERIAL is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +# CONFIG_SERIAL_AMBA is not set +# CONFIG_SERIAL_AMBA_CONSOLE is not set +# CONFIG_SERIAL_CLPS711X is not set +# CONFIG_SERIAL_CLPS711X_CONSOLE is not set +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=38400 +# CONFIG_SERIAL_8250 is not set +# CONFIG_SERIAL_8250_CONSOLE is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=32 +CONFIG_UCB1200=y +CONFIG_TOUCHSCREEN_UCB1200=y +CONFIG_AUDIO_UCB1200=y +CONFIG_ADC_UCB1200=y +# CONFIG_TOUCHSCREEN_BITSY is not set +# CONFIG_PROFILER is not set +# CONFIG_PFS168_SPI is not set +# CONFIG_PFS168_DTMF is not set +# CONFIG_PFS168_MISC is not set + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_MOUSE is not set + +# +# Joysticks +# +# CONFIG_JOYSTICK is not set + +# +# Input core support is needed for joysticks +# +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_SA1100_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# PCMCIA character devices +# + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +CONFIG_FAT_FS=y +# CONFIG_MSDOS_FS is not set +# CONFIG_UMSDOS_FS is not set +CONFIG_VFAT_FS=y +# CONFIG_EFS_FS is not set +CONFIG_JFFS_FS=y +CONFIG_JFFS_FS_VERBOSE=0 +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_CRAMFS=y +# CONFIG_TMPFS is not set +CONFIG_RAMFS=y +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_MINIX_FS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +CONFIG_NFS_FS=y +# CONFIG_NFS_V3 is not set +CONFIG_ROOT_NFS=y +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +CONFIG_SUNRPC=y +CONFIG_LOCKD=y +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_SMB_NLS is not set +CONFIG_NLS=y + +# +# Native Language Support +# +CONFIG_NLS_DEFAULT="iso8859-1" +# CONFIG_NLS_CODEPAGE_437 is not set +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ISO8859_1 is not set +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_UTF8 is not set + +# +# Console drivers +# +CONFIG_PC_KEYMAP=y +# CONFIG_VGA_CONSOLE is not set + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_ACORN is not set +# CONFIG_FB_CLPS711X is not set +# CONFIG_FB_CYBER2000 is not set +CONFIG_FB_SA1100=y +# CONFIG_FB_ANAKIN is not set +# CONFIG_FB_E1355 is not set +# CONFIG_FB_VIRTUAL is not set +# CONFIG_FBCON_ADVANCED is not set +CONFIG_FBCON_CFB2=y +CONFIG_FBCON_CFB4=y +CONFIG_FBCON_CFB8=y +CONFIG_FBCON_CFB16=y +CONFIG_FBCON_FONTWIDTH8_ONLY=y +CONFIG_FBCON_FONTS=y +# CONFIG_FONT_8x8 is not set +CONFIG_FONT_8x16=y +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# Bluetooth support +# +# CONFIG_BT is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_USER=y +# CONFIG_DEBUG_INFO is not set +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_NO_PGT_CACHE is not set +# CONFIG_DEBUG_LL is not set +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -prauN linux-2.6.0-test5/arch/arm/configs/graphicsmaster_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/graphicsmaster_defconfig --- linux-2.6.0-test5/arch/arm/configs/graphicsmaster_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/graphicsmaster_defconfig 2003-09-25 19:15:44.000000000 -0700 @@ -0,0 +1,745 @@ +# +# Automatically generated by make menuconfig: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set + +# +# System Type +# +# CONFIG_ARCH_ANAKIN is not set +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_SHARK is not set + +# +# Archimedes/A5000 Implementations +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_BITSY is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FLEXANET is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_SIMPAD is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +CONFIG_SA1100_GRAPHICSMASTER=y +# CONFIG_SA1100_ADSBITSY is not set +CONFIG_SA1111=y +# CONFIG_SA1100_USB is not set +# CONFIG_SA1100_USB_NETLINK is not set +# CONFIG_SA1100_USB_CHAR is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +CONFIG_CPU_SA1100=y +CONFIG_DISCONTIGMEM=y +# CONFIG_CPU_BIG_ENDIAN is not set + +# +# General setup +# +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +# CONFIG_CPU_FREQ is not set +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=y +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_CLPS6700 is not set +CONFIG_PCMCIA_SA1100=y +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_APM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="ip=off mem=16M@0xc0000000 mem=16M@0xc8000000 root=/dev/ram initrd=0xc0800000,4M" +# CONFIG_PFS168_CMDLINE is not set +CONFIG_LEDS=y +CONFIG_LEDS_TIMER=y +CONFIG_LEDS_CPU=y +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_BOOTLDR_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_JEDEC is not set + +# +# Mapping drivers for chip access +# +CONFIG_MTD_PHYSMAP=y +CONFIG_MTD_PHYSMAP_START=800000 +CONFIG_MTD_PHYSMAP_LEN=1000000 +CONFIG_MTD_PHYSMAP_BUSWIDTH=4 +# CONFIG_MTD_SUN_UFLASH is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_PNC2000 is not set +# CONFIG_MTD_RPXLITE is not set +# CONFIG_MTD_TQM8XXL is not set +# CONFIG_MTD_SC520CDP is not set +# CONFIG_MTD_NETSC520 is not set +# CONFIG_MTD_SBC_GXX is not set +# CONFIG_MTD_ELAN_104NC is not set +CONFIG_MTD_SA1100=y +# CONFIG_MTD_SA1100_REDBOOT_PARTITIONS is not set +# CONFIG_MTD_SA1100_BOOTLDR_PARTITIONS is not set +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set +# CONFIG_MTD_DBOX2 is not set +# CONFIG_MTD_CSTM_MIPS_IXX is not set +# CONFIG_MTD_CFI_FLAGADM is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_SOLUTIONENGINE is not set +# CONFIG_MTD_MIXMEM is not set +# CONFIG_MTD_OCTAGON is not set +# CONFIG_MTD_VMAX is not set +# CONFIG_MTD_OCELOT is not set +# CONFIG_MTD_L440GX is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_LART is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLKMTD is not set +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +CONFIG_BLK_DEV_LOOP=m +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=8192 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +# CONFIG_NETLINK is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_PNP=y +# CONFIG_IP_PNP_DHCP is not set +CONFIG_IP_PNP_BOOTP=y +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_SUNLANCE is not set +# CONFIG_SUNBMAC is not set +# CONFIG_SUNQE is not set +# CONFIG_SUNLANCE is not set +# CONFIG_SUNGEM is not set +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_LANCE is not set +CONFIG_NET_VENDOR_SMC=y +# CONFIG_WD80x3 is not set +# CONFIG_ULTRAMCA is not set +# CONFIG_ULTRA is not set +# CONFIG_ULTRA32 is not set +CONFIG_SMC9194=y +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_NET_ISA is not set +# CONFIG_NET_PCI is not set +# CONFIG_NET_POCKET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_MYRI_SBUS is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PLIP is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +# CONFIG_PCMCIA_3C589 is not set +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +CONFIG_PCMCIA_PCNET=y +# CONFIG_PCMCIA_NMCLAN is not set +# CONFIG_PCMCIA_SMC91C92 is not set +# CONFIG_PCMCIA_XIRC2PS is not set +# CONFIG_ARCNET_COM20020_CS is not set +# CONFIG_PCMCIA_IBMTR is not set +# CONFIG_NET_PCMCIA_RADIO is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=y + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=y +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=y +# CONFIG_IDEDISK_MULTI_MODE is not set +CONFIG_BLK_DEV_IDECS=y +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +# CONFIG_IDE_CHIPSETS is not set +# CONFIG_IDEDMA_AUTO is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +CONFIG_INPUT=y +# CONFIG_INPUT_KEYBDEV is not set +CONFIG_INPUT_MOUSEDEV=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=640 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480 +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set + +# +# Character devices +# +CONFIG_VT=y +# CONFIG_VT_CONSOLE is not set +# CONFIG_SERIAL is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +# CONFIG_SERIAL_AMBA is not set +# CONFIG_SERIAL_AMBA_CONSOLE is not set +# CONFIG_SERIAL_CLPS711X is not set +# CONFIG_SERIAL_CLPS711X_CONSOLE is not set +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=38400 +# CONFIG_SERIAL_8250 is not set +# CONFIG_SERIAL_8250_CONSOLE is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=32 +CONFIG_UCB1200=y +CONFIG_TOUCHSCREEN_UCB1200=y +CONFIG_AUDIO_UCB1200=y +CONFIG_ADC_UCB1200=y +# CONFIG_TOUCHSCREEN_BITSY is not set +# CONFIG_PROFILER is not set +# CONFIG_PFS168_SPI is not set +# CONFIG_PFS168_DTMF is not set +# CONFIG_PFS168_MISC is not set + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_MOUSE is not set + +# +# Joysticks +# +# CONFIG_JOYSTICK is not set +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_SA1100_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# PCMCIA character devices +# + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +CONFIG_FAT_FS=y +# CONFIG_MSDOS_FS is not set +# CONFIG_UMSDOS_FS is not set +CONFIG_VFAT_FS=y +# CONFIG_EFS_FS is not set +CONFIG_JFFS_FS=y +CONFIG_JFFS_FS_VERBOSE=0 +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_CRAMFS=y +# CONFIG_TMPFS is not set +CONFIG_RAMFS=y +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_MINIX_FS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +CONFIG_NFS_FS=y +# CONFIG_NFS_V3 is not set +CONFIG_ROOT_NFS=y +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +CONFIG_SUNRPC=y +CONFIG_LOCKD=y +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_SMB_NLS is not set +CONFIG_NLS=y + +# +# Native Language Support +# +CONFIG_NLS_DEFAULT="iso8859-1" +# CONFIG_NLS_CODEPAGE_437 is not set +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ISO8859_1 is not set +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_UTF8 is not set + +# +# Console drivers +# +CONFIG_PC_KEYMAP=y +# CONFIG_VGA_CONSOLE is not set + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_ACORN is not set +# CONFIG_FB_CLPS711X is not set +# CONFIG_FB_CYBER2000 is not set +CONFIG_FB_SA1100=y +# CONFIG_FB_ANAKIN is not set +# CONFIG_FB_E1355 is not set +# CONFIG_FB_VIRTUAL is not set +# CONFIG_FBCON_ADVANCED is not set +CONFIG_FBCON_CFB2=y +CONFIG_FBCON_CFB4=y +CONFIG_FBCON_CFB8=y +CONFIG_FBCON_CFB16=y +CONFIG_FBCON_FONTWIDTH8_ONLY=y +CONFIG_FBCON_FONTS=y +# CONFIG_FONT_8x8 is not set +CONFIG_FONT_8x16=y +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# USB support +# +CONFIG_USB=y +# CONFIG_USB_DEBUG is not set +CONFIG_USB_DEVICEFS=y +# CONFIG_USB_BANDWIDTH is not set +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +CONFIG_USB_OHCI=y +CONFIG_USB_OHCI_NOPCI=y +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set +# CONFIG_USB_HID is not set +# CONFIG_USB_KBD is not set +CONFIG_USB_MOUSE=y +# CONFIG_USB_WACOM is not set +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_IBMCAM is not set +# CONFIG_USB_OV511 is not set +# CONFIG_USB_PWC is not set +# CONFIG_USB_SE401 is not set +# CONFIG_USB_DSBR is not set +# CONFIG_USB_DABUSB is not set +# CONFIG_USB_PLUSB is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_NET1080 is not set +# CONFIG_USB_USBNET is not set +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set +# CONFIG_USB_RIO500 is not set + +# +# Bluetooth support +# +# CONFIG_BT is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_USER=y +# CONFIG_DEBUG_INFO is not set +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_NO_PGT_CACHE is not set +# CONFIG_DEBUG_LL is not set +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -prauN linux-2.6.0-test5/arch/arm/configs/h3600_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/h3600_defconfig --- linux-2.6.0-test5/arch/arm/configs/h3600_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/h3600_defconfig 2003-09-25 19:15:44.000000000 -0700 @@ -0,0 +1,951 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set +# CONFIG_GENERIC_BUST_SPINLOCK is not set +# CONFIG_GENERIC_ISA_DMA is not set + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set + +# +# System Type +# +# CONFIG_ARCH_ANAKIN is not set +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_CAMELOT is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_SHARK is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Archimedes/A5000 Implementations (select only ONE) +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_ADSBITSY is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +CONFIG_SA1100_H3600=y +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FLEXANET is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_GRAPHICSMASTER is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_SIMPAD is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +CONFIG_SA1100_USB=m +CONFIG_SA1100_USB_NETLINK=m +# CONFIG_SA1100_USB_CHAR is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_CDB89712 is not set +# CONFIG_ARCH_CLEP7312 is not set +# CONFIG_ARCH_EDB7211 is not set +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_EP7211 is not set +# CONFIG_ARCH_EP7212 is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set + +# +# Processor Type +# +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +CONFIG_CPU_SA1100=y +# CONFIG_ARM_THUMB is not set +CONFIG_DISCONTIGMEM=y + +# +# General setup +# +# CONFIG_PCI is not set +CONFIG_ISA=y +# CONFIG_ISA_DMA is not set +CONFIG_CPU_FREQ=y +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=y +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_CLPS6700 is not set +CONFIG_PCMCIA_SA1100=y +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y + +# +# At least one math emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +CONFIG_PM=y +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="" +# CONFIG_LEDS is not set +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_PARTITIONS=y +CONFIG_MTD_REDBOOT_PARTS=y +CONFIG_MTD_BOOTLDR_PARTS=y +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_NOSWAP=y +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +CONFIG_MTD_CFI_GEOMETRY=y +# CONFIG_MTD_CFI_B1 is not set +# CONFIG_MTD_CFI_B2 is not set +CONFIG_MTD_CFI_B4=y +# CONFIG_MTD_CFI_I1 is not set +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +# CONFIG_MTD_OBSOLETE_CHIPS is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set +# CONFIG_MTD_JEDEC is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_CDB89712 is not set +CONFIG_MTD_SA1100=y +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set +# CONFIG_MTD_PCI is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLKMTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set +# CONFIG_PNPBIOS is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_CISS_SCSI_TAPE is not set +# CONFIG_BLK_DEV_DAC960 is not set +CONFIG_BLK_DEV_LOOP=m +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=8192 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_MD_MULTIPATH is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +# CONFIG_PACKET is not set +# CONFIG_NETLINK is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set + +# +# +# +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set + +# +# Ethernet (10 or 100Mbit) +# +# CONFIG_NET_ETHERNET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_DL2K is not set +# CONFIG_MYRI_SBUS is not set +# CONFIG_NS83820 is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PLIP is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +# CONFIG_PPPOE is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +# CONFIG_PCMCIA_3C589 is not set +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +CONFIG_PCMCIA_PCNET=y +# CONFIG_PCMCIA_NMCLAN is not set +# CONFIG_PCMCIA_SMC91C92 is not set +# CONFIG_PCMCIA_XIRC2PS is not set +# CONFIG_ARCNET_COM20020_CS is not set +# CONFIG_PCMCIA_IBMTR is not set +# CONFIG_NET_PCMCIA_RADIO is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +CONFIG_IRDA=m + +# +# IrDA protocols +# +CONFIG_IRLAN=m +CONFIG_IRNET=m +CONFIG_IRCOMM=m +# CONFIG_IRDA_ULTRA is not set +# CONFIG_IRDA_OPTIONS is not set + +# +# Infrared-port device drivers +# + +# +# SIR device drivers +# +# CONFIG_IRTTY_SIR is not set +# CONFIG_IRPORT_SIR is not set + +# +# Dongle support +# +# CONFIG_DONGLE is not set + +# +# FIR device drivers +# +# CONFIG_USB_IRDA is not set +# CONFIG_NSC_FIR is not set +# CONFIG_WINBOND_FIR is not set +# CONFIG_TOSHIBA_FIR is not set +# CONFIG_SMC_IRCC_FIR is not set +# CONFIG_ALI_FIR is not set +# CONFIG_VLSI_FIR is not set +CONFIG_SA1100_FIR=m + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=m + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=m + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=m +# CONFIG_IDEDISK_MULTI_MODE is not set +# CONFIG_BLK_DEV_IDECS is not set +CONFIG_BLK_DEV_IDECD=m +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set + +# +# IDE chipset support/bugfixes +# +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +# CONFIG_IDE_CHIPSETS is not set +# CONFIG_IDEDMA_AUTO is not set +# CONFIG_BLK_DEV_ATARAID is not set +# CONFIG_BLK_DEV_ATARAID_PDC is not set +# CONFIG_BLK_DEV_ATARAID_HPT is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +# CONFIG_INPUT is not set +# CONFIG_INPUT_KEYBDEV is not set +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set + +# +# Character devices +# +CONFIG_VT=y +# CONFIG_VT_CONSOLE is not set +CONFIG_SERIAL=m +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_ANAKIN is not set +# CONFIG_SERIAL_ANAKIN_CONSOLE is not set +# CONFIG_SERIAL_AMBA is not set +# CONFIG_SERIAL_AMBA_CONSOLE is not set +# CONFIG_SERIAL_CLPS711X is not set +# CONFIG_SERIAL_CLPS711X_CONSOLE is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +# CONFIG_SERIAL_UART00 is not set +# CONFIG_SERIAL_UART00_CONSOLE is not set +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=38400 +CONFIG_SERIAL_8250=m +# CONFIG_SERIAL_8250_CONSOLE is not set +# CONFIG_SERIAL_8250_EXTENDED is not set +# CONFIG_SERIAL_8250_MANY_PORTS is not set +# CONFIG_SERIAL_8250_SHARE_IRQ is not set +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +# CONFIG_SERIAL_8250_MULTIPORT is not set +# CONFIG_SERIAL_8250_HUB6 is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=32 + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# L3 serial bus support +# +CONFIG_L3=y +CONFIG_L3_ALGOBIT=y +CONFIG_L3_BIT_SA1100_GPIO=y + +# +# Other L3 adapters +# +# CONFIG_L3_SA1111 is not set +CONFIG_BIT_SA1100_GPIO=y + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +CONFIG_MOUSE=m +# CONFIG_PSMOUSE is not set +# CONFIG_82C710_MOUSE is not set +# CONFIG_PC110_PAD is not set + +# +# Joysticks +# +# CONFIG_INPUT_GAMEPORT is not set + +# +# Input core support is needed for gameports +# + +# +# Input core support is needed for joysticks +# +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +CONFIG_SA1100_RTC=m +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# PCMCIA character devices +# +# CONFIG_PCMCIA_SERIAL_CS is not set +# CONFIG_MWAVE is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_CMS_FS is not set +# CONFIG_EXT3_FS is not set +# CONFIG_JBD is not set +# CONFIG_JBD_DEBUG is not set +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +# CONFIG_UMSDOS_FS is not set +CONFIG_VFAT_FS=m +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_CRAMFS=m +# CONFIG_TMPFS is not set +CONFIG_RAMFS=y +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_ZISOFS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_FREEVXFS_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +# CONFIG_INTERMEZZO_FS is not set +CONFIG_NFS_FS=y +# CONFIG_NFS_V3 is not set +# CONFIG_ROOT_NFS is not set +CONFIG_NFSD=m +# CONFIG_NFSD_V3 is not set +CONFIG_SUNRPC=y +CONFIG_LOCKD=y +CONFIG_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set +# CONFIG_ZISOFS_FS is not set +CONFIG_ZLIB_FS_INFLATE=m + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +CONFIG_SMB_NLS=y +CONFIG_NLS=y + +# +# Native Language Support +# +CONFIG_NLS_DEFAULT="iso8859-1" +# CONFIG_NLS_CODEPAGE_437 is not set +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ISO8859_1 is not set +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_UTF8 is not set + +# +# Console drivers +# +CONFIG_PC_KEYMAP=y +# CONFIG_VGA_CONSOLE is not set + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_ACORN is not set +# CONFIG_FB_ANAKIN is not set +# CONFIG_FB_CLPS711X is not set +CONFIG_FB_SA1100=y +# CONFIG_FB_CYBER2000 is not set +# CONFIG_FB_VIRTUAL is not set +CONFIG_FBCON_ADVANCED=y +# CONFIG_FBCON_MFB is not set +# CONFIG_FBCON_CFB2 is not set +# CONFIG_FBCON_CFB4 is not set +# CONFIG_FBCON_CFB8 is not set +CONFIG_FBCON_CFB16=y +# CONFIG_FBCON_CFB24 is not set +# CONFIG_FBCON_CFB32 is not set +# CONFIG_FBCON_AFB is not set +# CONFIG_FBCON_ILBM is not set +# CONFIG_FBCON_IPLAN2P2 is not set +# CONFIG_FBCON_IPLAN2P4 is not set +# CONFIG_FBCON_IPLAN2P8 is not set +# CONFIG_FBCON_MAC is not set +# CONFIG_FBCON_VGA_PLANES is not set +# CONFIG_FBCON_VGA is not set +# CONFIG_FBCON_HGA is not set +CONFIG_FBCON_FONTWIDTH8_ONLY=y +CONFIG_FBCON_FONTS=y +CONFIG_FONT_8x8=y +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set + +# +# Sound +# +CONFIG_SOUND=y +# CONFIG_SOUND_BT878 is not set +# CONFIG_SOUND_CMPCI is not set +# CONFIG_SOUND_EMU10K1 is not set +# CONFIG_MIDI_EMU10K1 is not set +# CONFIG_SOUND_FUSION is not set +# CONFIG_SOUND_CS4281 is not set +# CONFIG_SOUND_ES1370 is not set +# CONFIG_SOUND_ES1371 is not set +# CONFIG_SOUND_ESSSOLO1 is not set +# CONFIG_SOUND_MAESTRO is not set +# CONFIG_SOUND_MAESTRO3 is not set +# CONFIG_SOUND_ICH is not set +# CONFIG_SOUND_RME96XX is not set +# CONFIG_SOUND_SONICVIBES is not set +# CONFIG_SOUND_TRIDENT is not set +# CONFIG_SOUND_MSNDCLAS is not set +# CONFIG_SOUND_MSNDPIN is not set +# CONFIG_SOUND_VIA82CXXX is not set +# CONFIG_MIDI_VIA82CXXX is not set +CONFIG_SOUND_SA1100=y +CONFIG_SOUND_UDA1341=y +# CONFIG_SOUND_ASSABET_UDA1341 is not set +CONFIG_SOUND_H3600_UDA1341=y +# CONFIG_SOUND_PANGOLIN_UDA1341 is not set +# CONFIG_SOUND_SA1111_UDA1341 is not set +# CONFIG_SOUND_SA1100SSP is not set +# CONFIG_SOUND_OSS is not set +# CONFIG_SOUND_WAVEARTIST is not set +# CONFIG_SOUND_TVMIXER is not set + +# +# Multimedia Capabilities Port drivers +# +# CONFIG_MCP is not set +# CONFIG_MCP_SA1100 is not set +# CONFIG_MCP_UCB1200 is not set +# CONFIG_MCP_UCB1200_AUDIO is not set +# CONFIG_MCP_UCB1200_TS is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# USB Controllers +# +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +# CONFIG_USB_OHCI is not set +# CONFIG_USB_OHCI_SA1111 is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# USB Human Interface Devices (HID) +# + +# +# Input core support is needed for USB HID +# + +# +# USB Imaging devices +# +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_HPUSBSCSI is not set + +# +# USB Multimedia devices +# + +# +# Video4Linux support is needed for USB Multimedia device support +# + +# +# USB Network adaptors +# +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_CDCETHER is not set +# CONFIG_USB_USBNET is not set + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_IR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set +# CONFIG_USB_SERIAL_OMNINET is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_ID75 is not set + +# +# Bluetooth support +# +# CONFIG_BT is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_ERRORS=y +# CONFIG_DEBUG_USER is not set +# CONFIG_DEBUG_INFO is not set +# CONFIG_DEBUG_SLAB is not set +CONFIG_MAGIC_SYSRQ=y +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_NO_PGT_CACHE is not set +# CONFIG_DEBUG_LL is not set +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -prauN linux-2.6.0-test5/arch/arm/configs/hackkit_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/hackkit_defconfig --- linux-2.6.0-test5/arch/arm/configs/hackkit_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/hackkit_defconfig 2003-09-25 19:15:44.000000000 -0700 @@ -0,0 +1,654 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +CONFIG_MMU=y +CONFIG_SWAP=y +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y + +# +# General setup +# +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODULE_UNLOAD is not set +# CONFIG_MODULE_FORCE_UNLOAD is not set +CONFIG_KMOD=y + +# +# System Type +# +# CONFIG_ARCH_ADIFCC is not set +# CONFIG_ARCH_ANAKIN is not set +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_PXA is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_CAMELOT is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_IOP310 is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_SHARK is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Archimedes/A5000 Implementations (select only ONE) +# + +# +# CLPS711X/EP721X Implementations +# + +# +# Epxa10db +# + +# +# Footbridge Implementations +# + +# +# IOP310 Implementation Options +# + +# +# IOP310 Chipset Features +# + +# +# Intel PXA250/210 Implementations +# + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_SA1100_ADSBITSY is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_H3100 is not set +# CONFIG_SA1100_H3600 is not set +# CONFIG_SA1100_H3800 is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FLEXANET is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_GRAPHICSMASTER is not set +# CONFIG_SA1100_BADGE4 is not set +# CONFIG_SA1100_JORNADA720 is not set +CONFIG_SA1100_HACKKIT=y +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_PT_SYSTEM3 is not set +# CONFIG_SA1100_SHANNON is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_SIMPAD is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +# CONFIG_SA1100_STORK is not set +# CONFIG_SA1100_USB is not set + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_SA1100=y +CONFIG_CPU_32v4=y + +# +# Processor Features +# + +# +# General setup +# +CONFIG_DISCONTIGMEM=y +CONFIG_ISA=y +# CONFIG_ZBOOT_ROM is not set +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_24_API=y +CONFIG_CPU_FREQ_26_API=y +# CONFIG_HOTPLUG is not set + +# +# At least one math emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +CONFIG_BINFMT_AOUT=y +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_PREEMPT is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="console=ttySA0,115200 root=/dev/ram0 initrd=0xc0400000,8M init=/rootshell" +CONFIG_LEDS=y +CONFIG_LEDS_TIMER=y +CONFIG_LEDS_CPU=y +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +CONFIG_MTD_DEBUG=y +CONFIG_MTD_DEBUG_VERBOSE=3 +# CONFIG_MTD_PARTITIONS is not set +# CONFIG_MTD_CONCAT is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +# CONFIG_MTD_OBSOLETE_CHIPS is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_EDB7312 is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLKMTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=8192 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +# CONFIG_NETLINK_DEV is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +CONFIG_INET_ECN=y +CONFIG_SYN_COOKIES=y +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_XFRM_USER is not set +# CONFIG_IPV6 is not set + +# +# SCTP Configuration (EXPERIMENTAL) +# +CONFIG_IPV6_SCTP__=y +# CONFIG_IP_SCTP is not set +# CONFIG_ATM is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_LLC is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +CONFIG_DUMMY=y +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_ETHERTAP is not set + +# +# Ethernet (10 or 100Mbit) +# +# CONFIG_NET_ETHERNET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +CONFIG_NET_RADIO=y +# CONFIG_STRIP is not set +# CONFIG_ARLAN is not set +# CONFIG_AIRONET4500 is not set + +# +# Wireless ISA/PCI cards support +# +# CONFIG_WAVELAN is not set +# CONFIG_AIRO is not set +# CONFIG_HERMES is not set +CONFIG_NET_WIRELESS=y + +# +# Token Ring devices (depends on LLC=y) +# +# CONFIG_NET_FC is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# ATA/ATAPI/MFM/RLL support +# +# CONFIG_IDE is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN_BOOL is not set + +# +# Input device support +# +CONFIG_INPUT=y + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=y +CONFIG_INPUT_MOUSEDEV_PSAUX=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_TSDEV is not set +# CONFIG_INPUT_TSLIBDEV is not set +# CONFIG_INPUT_EVDEV is not set +# CONFIG_INPUT_EVBUG is not set + +# +# Input I/O drivers +# +# CONFIG_GAMEPORT is not set +CONFIG_SOUND_GAMEPORT=y +CONFIG_SERIO=y +# CONFIG_SERIO_I8042 is not set +CONFIG_SERIO_SERPORT=y +# CONFIG_SERIO_CT82C710 is not set + +# +# Input Device Drivers +# +# CONFIG_INPUT_KEYBOARD is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TOUCHSCREEN is not set +# CONFIG_INPUT_MISC is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=256 + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# L3 serial bus support +# +# CONFIG_L3 is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_GEN_RTC is not set +CONFIG_SA1100_RTC=y +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set +# CONFIG_RAW_DRIVER is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EXT3_FS is not set +# CONFIG_JBD is not set +CONFIG_FAT_FS=y +CONFIG_MSDOS_FS=y +CONFIG_VFAT_FS=y +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +# CONFIG_JFFS2_FS is not set +CONFIG_CRAMFS=y +CONFIG_TMPFS=y +CONFIG_RAMFS=y +# CONFIG_ISO9660_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UDF_FS is not set +# CONFIG_UFS_FS is not set +# CONFIG_XFS_FS is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +# CONFIG_INTERMEZZO_FS is not set +# CONFIG_NFS_FS is not set +# CONFIG_NFSD is not set +# CONFIG_EXPORTFS is not set +# CONFIG_CIFS is not set +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_NLS=y + +# +# Native Language Support +# +CONFIG_NLS_DEFAULT="iso8859-1" +# CONFIG_NLS_CODEPAGE_437 is not set +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1250 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ISO8859_1 is not set +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_UTF8 is not set + +# +# Console drivers +# +# CONFIG_VGA_CONSOLE is not set + +# +# Frame-buffer support +# +# CONFIG_FB is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# Misc devices +# + +# +# Multimedia Capabilities Port drivers +# +# CONFIG_MCP is not set + +# +# Console Switches +# +# CONFIG_SWITCHES is not set + +# +# USB support +# + +# +# Bluetooth support +# +# CONFIG_BT is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_USER=y +# CONFIG_DEBUG_INFO is not set +CONFIG_DEBUG_KERNEL=y +CONFIG_DEBUG_SLAB=y +CONFIG_MAGIC_SYSRQ=y +CONFIG_DEBUG_SPINLOCK=y +CONFIG_DEBUG_WAITQ=y +CONFIG_DEBUG_BUGVERBOSE=y +CONFIG_DEBUG_ERRORS=y +CONFIG_KALLSYMS=y +CONFIG_DEBUG_LL=y + +# +# Security options +# +CONFIG_SECURITY_CAPABILITIES=y + +# +# Cryptographic options +# +# CONFIG_CRYPTO is not set + +# +# Library routines +# +# CONFIG_CRC32 is not set +CONFIG_ZLIB_INFLATE=y diff -prauN linux-2.6.0-test5/arch/arm/configs/huw_webpanel_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/huw_webpanel_defconfig --- linux-2.6.0-test5/arch/arm/configs/huw_webpanel_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/huw_webpanel_defconfig 2003-09-25 19:15:44.000000000 -0700 @@ -0,0 +1,435 @@ +# +# Automatically generated by make menuconfig: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set + +# +# System Type +# +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_CLPS711X is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Footbridge Implementations +# + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +CONFIG_SA1100_HUW_WEBPANEL=y +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_BITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_YOPY is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_USB is not set +# CONFIG_SA1100_FREQUENCY_SCALE is not set +# CONFIG_SA1100_VOLTAGE_SCALE is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set +CONFIG_CPU_32v4=y +CONFIG_CPU_SA1100=y +CONFIG_DISCONTIGMEM=y + +# +# General setup +# +# CONFIG_ANGELBOOT is not set +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +# CONFIG_HOTPLUG is not set +# CONFIG_PCMCIA is not set +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +CONFIG_NWFPE=y +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="keepinitrd mem=32480K root=/dev/ram initrd=0xc0800000,8M" +# CONFIG_LEDS is not set +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_MTDRAM is not set +CONFIG_MTD_CFI=y +CONFIG_MTD_CFI_GEOMETRY=y +# CONFIG_MTD_CFI_B1 is not set +# CONFIG_MTD_CFI_B2 is not set +CONFIG_MTD_CFI_B4=y +# CONFIG_MTD_CFI_I1 is not set +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_SHARP is not set +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_PNC2000 is not set +# CONFIG_MTD_RPXLITE is not set +# CONFIG_MTD_SBC_MEDIAGX is not set +# CONFIG_MTD_ELAN_104NC is not set +CONFIG_MTD_SA1100=y +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_JEDEC is not set +# CONFIG_MTD_MIXMEM is not set +# CONFIG_MTD_OCTAGON is not set +# CONFIG_MTD_VMAX is not set +# CONFIG_MTD_NAND is not set +# CONFIG_MTD_NAND_SPIA is not set +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +CONFIG_BLK_DEV_LOOP=y +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=8192 +CONFIG_BLK_DEV_INITRD=y +# CONFIG_BLK_DEV_FLASH is not set + +# +# Networking options +# +# CONFIG_PACKET is not set +# CONFIG_NETLINK is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +# CONFIG_NETDEVICES is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# ATA/IDE/MFM/RLL support +# +# CONFIG_IDE is not set +# CONFIG_BLK_DEV_HD is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +# CONFIG_INPUT is not set + +# +# Character devices +# +CONFIG_VT=y +# CONFIG_VT_CONSOLE is not set +# CONFIG_SERIAL is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=115200 +CONFIG_TOUCHSCREEN_UCB1200=y +# CONFIG_TOUCHSCREEN_BITSY is not set +# CONFIG_PROFILER is not set +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=32 + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_MOUSE is not set + +# +# Joysticks +# +# CONFIG_JOYSTICK is not set +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_SA1100_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_FAT_FS is not set +# CONFIG_MSDOS_FS is not set +# CONFIG_UMSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +CONFIG_CRAMFS=y +# CONFIG_RAMFS is not set +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_MINIX_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +CONFIG_ROMFS_FS=y +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_SYSV_FS_WRITE is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +# CONFIG_NFS_FS is not set +# CONFIG_NFS_V3 is not set +# CONFIG_ROOT_NFS is not set +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +# CONFIG_SUNRPC is not set +# CONFIG_LOCKD is not set +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_MOUNT_SUBDIR is not set +# CONFIG_NCPFS_NDS_DOMAINS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_NLS is not set + +# +# Console drivers +# +CONFIG_PC_KEYMAP=y +# CONFIG_VGA_CONSOLE is not set +CONFIG_FB=y + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_ACORN is not set +# CONFIG_FB_CLPS711X is not set +# CONFIG_FB_CYBER2000 is not set +CONFIG_FB_SA1100=y +# CONFIG_FB_VIRTUAL is not set +# CONFIG_FBCON_ADVANCED is not set +CONFIG_FBCON_CFB2=y +CONFIG_FBCON_CFB4=y +CONFIG_FBCON_CFB8=y +CONFIG_FBCON_CFB16=y +CONFIG_FBCON_FONTWIDTH8_ONLY=y +CONFIG_FBCON_FONTS=y +CONFIG_FONT_8x8=y +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_USER=y +# CONFIG_DEBUG_INFO is not set +CONFIG_MAGIC_SYSRQ=y +# CONFIG_DEBUG_LL is not set diff -prauN linux-2.6.0-test5/arch/arm/configs/integrator_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/integrator_defconfig --- linux-2.6.0-test5/arch/arm/configs/integrator_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/integrator_defconfig 2003-09-25 19:15:44.000000000 -0700 @@ -0,0 +1,663 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set + +# +# System Type +# +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +CONFIG_ARCH_INTEGRATOR=y +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_ANAKIN is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Archimedes/A5000 Implementations (select only ONE) +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_BITSY is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set + +# +# Processor Type +# +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +CONFIG_CPU_ARM720T=y +CONFIG_CPU_ARM920T=y +CONFIG_CPU_ARM920_CPU_IDLE=y +CONFIG_CPU_ARM920_I_CACHE_ON=y +CONFIG_CPU_ARM920_D_CACHE_ON=y +# CONFIG_CPU_ARM920_WRITETHROUGH is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +# CONFIG_CPU_SA1100 is not set +# CONFIG_DISCONTIGMEM is not set + +# +# General setup +# +CONFIG_PCI_INTEGRATOR=y +CONFIG_PCI=y +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +CONFIG_CPU_CLOCK=y +CONFIG_PCI_NAMES=y +# CONFIG_HOTPLUG is not set +# CONFIG_PCMCIA is not set +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +# CONFIG_FPE_NWFPE is not set +CONFIG_FPE_FASTFPE=y +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +CONFIG_BINFMT_AOUT=y +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +CONFIG_PM=y +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="root=1f03 mem=32M" +CONFIG_LEDS=y +CONFIG_LEDS_TIMER=y +CONFIG_LEDS_CPU=y +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_BOOTLDR_PARTS is not set +CONFIG_MTD_AFS_PARTS=y + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_CFI_VIRTUAL_ER is not set +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_NOSWAP=y +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LART_BIT_SWAP is not set +# CONFIG_MTD_CFI_GEOMETRY is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_JEDEC is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_SUN_UFLASH is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_PNC2000 is not set +# CONFIG_MTD_RPXLITE is not set +# CONFIG_MTD_SC520CDP is not set +# CONFIG_MTD_NETSC520 is not set +# CONFIG_MTD_SBC_GXX is not set +# CONFIG_MTD_ELAN_104NC is not set +# CONFIG_MTD_SA1100 is not set +# CONFIG_MTD_SA1100_REDBOOT_PARTITIONS is not set +# CONFIG_MTD_SA1100_BOOTLDR_PARTITIONS is not set +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set +# CONFIG_MTD_DBOX2 is not set +# CONFIG_MTD_CSTM_MIPS_IXX is not set +# CONFIG_MTD_CFI_FLAGADM is not set +# CONFIG_MTD_MIXMEM is not set +# CONFIG_MTD_OCTAGON is not set +# CONFIG_MTD_VMAX is not set +CONFIG_MTD_ARMFLASH=y + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_MTDRAM is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set +# CONFIG_MTD_NAND_SPIA is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +# CONFIG_BLK_DEV_INITRD is not set + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_PACKET_MMAP=y +CONFIG_NETLINK=y +# CONFIG_RTNETLINK is not set +# CONFIG_NETLINK_DEV is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_PNP=y +# CONFIG_IP_PNP_DHCP is not set +CONFIG_IP_PNP_BOOTP=y +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_IP_MROUTE is not set +CONFIG_INET_ECN=y +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set + +# +# +# +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_ETHERTAP is not set +# CONFIG_NET_SB1000 is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_LANCE is not set +# CONFIG_NET_VENDOR_SMC is not set +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_AT1700 is not set +# CONFIG_DEPCA is not set +# CONFIG_HP100 is not set +# CONFIG_NET_ISA is not set +CONFIG_NET_PCI=y +# CONFIG_PCNET32 is not set +# CONFIG_ADAPTEC_STARFIRE is not set +# CONFIG_APRICOT is not set +# CONFIG_CS89x0 is not set +# CONFIG_TULIP is not set +# CONFIG_DE4X5 is not set +# CONFIG_DGRS is not set +# CONFIG_DM9102 is not set +CONFIG_EEPRO100=y +CONFIG_EEPRO100_PM=y +# CONFIG_LNE390 is not set +# CONFIG_FEALNX is not set +# CONFIG_NATSEMI is not set +# CONFIG_NE2K_PCI is not set +# CONFIG_NE3210 is not set +# CONFIG_ES3210 is not set +# CONFIG_8139TOO is not set +# CONFIG_8139TOO_PIO is not set +# CONFIG_8139TOO_TUNE_TWISTER is not set +# CONFIG_8139TOO_8129 is not set +# CONFIG_SIS900 is not set +# CONFIG_EPIC100 is not set +# CONFIG_SUNDANCE is not set +# CONFIG_TLAN is not set +# CONFIG_VIA_RHINE is not set +# CONFIG_WINBOND_840 is not set +# CONFIG_HAPPYMEAL is not set +# CONFIG_NET_POCKET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# ATA/IDE/MFM/RLL support +# +# CONFIG_IDE is not set +# CONFIG_BLK_DEV_HD is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# IEEE 1394 (FireWire) support +# +# CONFIG_IEEE1394 is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_PCI is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +# CONFIG_INPUT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +# CONFIG_SERIAL is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +# CONFIG_SERIAL_SA1100 is not set +# CONFIG_SERIAL_SA1100_CONSOLE is not set +CONFIG_SERIAL_AMBA=y +CONFIG_SERIAL_AMBA_CONSOLE=y +CONFIG_SERIAL_INTEGRATOR=y +# CONFIG_SERIAL_CLPS711X is not set +# CONFIG_SERIAL_CLPS711X_CONSOLE is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=256 + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +CONFIG_MOUSE=y +CONFIG_PSMOUSE=y +# CONFIG_82C710_MOUSE is not set +# CONFIG_PC110_PAD is not set + +# +# Joysticks +# +# CONFIG_JOYSTICK is not set + +# +# Input core support is needed for joysticks +# +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_FAT_FS is not set +# CONFIG_MSDOS_FS is not set +# CONFIG_UMSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +# CONFIG_CRAMFS is not set +# CONFIG_TMPFS is not set +# CONFIG_RAMFS is not set +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +CONFIG_MINIX_FS=y +# CONFIG_VXFS_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +CONFIG_ROMFS_FS=y +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_SYSV_FS_WRITE is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +CONFIG_ROOT_NFS=y +CONFIG_NFSD=y +CONFIG_NFSD_V3=y +CONFIG_SUNRPC=y +CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +# CONFIG_MSDOS_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_SMB_NLS is not set +# CONFIG_NLS is not set + +# +# Console drivers +# +CONFIG_KMI_KEYB=y +CONFIG_KMI_MOUSE=y +CONFIG_PC_KEYMAP=y +CONFIG_VGA_CONSOLE=y +CONFIG_FB=y + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_RIVA is not set +# CONFIG_FB_CLGEN is not set +# CONFIG_FB_PM2 is not set +# CONFIG_FB_ACORN is not set +# CONFIG_FB_CLPS711X is not set +# CONFIG_FB_CYBER2000 is not set +# CONFIG_FB_SA1100 is not set +# CONFIG_FB_ANAKIN is not set +# CONFIG_FB_E1355 is not set +# CONFIG_FB_MATROX is not set +# CONFIG_FB_ATY is not set +# CONFIG_FB_ATY128 is not set +# CONFIG_FB_3DFX is not set +# CONFIG_FB_SIS is not set +# CONFIG_FB_VIRTUAL is not set +# CONFIG_FBCON_ADVANCED is not set +# CONFIG_FBCON_FONTWIDTH8_ONLY is not set +CONFIG_FBCON_FONTS=y +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_USER=y +# CONFIG_DEBUG_INFO is not set +CONFIG_MAGIC_SYSRQ=y +# CONFIG_NO_PGT_CACHE is not set +CONFIG_DEBUG_LL=y +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -prauN linux-2.6.0-test5/arch/arm/configs/iq80310_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/iq80310_defconfig --- linux-2.6.0-test5/arch/arm/configs/iq80310_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/iq80310_defconfig 2003-09-25 19:15:44.000000000 -0700 @@ -0,0 +1,770 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +CONFIG_MMU=y +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y + +# +# General setup +# +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_EMBEDDED is not set +CONFIG_KALLSYMS=y +CONFIG_FUTEX=y +CONFIG_EPOLL=y +CONFIG_IOSCHED_AS=y +CONFIG_IOSCHED_DEADLINE=y + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODULE_UNLOAD is not set +CONFIG_OBSOLETE_MODPARM=y +# CONFIG_MODVERSIONS is not set +CONFIG_KMOD=y + +# +# System Type +# +# CONFIG_ARCH_ADIFCC is not set +# CONFIG_ARCH_ANAKIN is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_PXA is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_CAMELOT is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +CONFIG_ARCH_IOP3XX=y +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_SHARK is not set + +# +# CLPS711X/EP721X Implementations +# + +# +# Epxa10db +# + +# +# Footbridge Implementations +# + +# +# IOP3xx Implementation Options +# +CONFIG_ARCH_IQ80310=y +# CONFIG_ARCH_IQ80321 is not set +CONFIG_ARCH_IOP310=y +# CONFIG_ARCH_IOP321 is not set + +# +# IOP3xx Chipset Features +# +# CONFIG_IOP3XX_AAU is not set +# CONFIG_IOP3XX_DMA is not set +# CONFIG_IOP3XX_MU is not set +# CONFIG_IOP3XX_PMON is not set + +# +# ADIFCC Implementation Options +# + +# +# ADI Board Types +# + +# +# Intel PXA250/210 Implementations +# + +# +# SA11x0 Implementations +# + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_XSCALE=y +CONFIG_XS80200=y +CONFIG_CPU_32v5=y + +# +# Processor Features +# +CONFIG_ARM_THUMB=y +CONFIG_XSCALE_PMU=y + +# +# General setup +# +CONFIG_PCI=y +# CONFIG_ZBOOT_ROM is not set +CONFIG_ZBOOT_ROM_TEXT=0x00060000 +CONFIG_ZBOOT_ROM_BSS=0xa1008000 +# CONFIG_PCI_LEGACY_PROC is not set +CONFIG_PCI_NAMES=y +# CONFIG_HOTPLUG is not set + +# +# MMC/SD Card support +# +# CONFIG_MMC is not set + +# +# At least one math emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_NWFPE_XP is not set +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +CONFIG_BINFMT_AOUT=y +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_PREEMPT is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="console=ttyS0,115200 ip=bootp mem=32M root=/dev/nfs initrd=0xc0800000,4M" +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_REDBOOT_PARTS=y +# CONFIG_MTD_CMDLINE_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_CFI_STAA is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +# CONFIG_MTD_OBSOLETE_CHIPS is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_COMPLEX_MAPPINGS is not set +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +CONFIG_MTD_IQ80310=y +# CONFIG_MTD_EDB7312 is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLKMTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# Plug and Play support +# +# CONFIG_PNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_UMEM is not set +# CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=8192 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set + +# +# Networking support +# +CONFIG_NET=y + +# +# Networking options +# +# CONFIG_PACKET is not set +# CONFIG_NETLINK_DEV is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set +CONFIG_UNIX=y +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_PNP=y +# CONFIG_IP_PNP_DHCP is not set +CONFIG_IP_PNP_BOOTP=y +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set + +# +# IP: Netfilter Configuration +# +# CONFIG_IP_NF_CONNTRACK is not set +# CONFIG_IP_NF_QUEUE is not set +# CONFIG_IP_NF_IPTABLES is not set +# CONFIG_IP_NF_ARPTABLES is not set +# CONFIG_IP_NF_COMPAT_IPCHAINS is not set +# CONFIG_IP_NF_COMPAT_IPFWADM is not set + +# +# IP: Virtual Server Configuration +# +# CONFIG_IP_VS is not set +# CONFIG_IPV6 is not set +# CONFIG_XFRM_USER is not set + +# +# SCTP Configuration (EXPERIMENTAL) +# +CONFIG_IPV6_SCTP__=y +# CONFIG_IP_SCTP is not set +# CONFIG_ATM is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_LLC is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_ETHERTAP is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +CONFIG_MII=y +# CONFIG_SMC91X is not set +# CONFIG_HAPPYMEAL is not set +# CONFIG_SUNGEM is not set +# CONFIG_NET_VENDOR_3COM is not set + +# +# Tulip family network device support +# +# CONFIG_NET_TULIP is not set +# CONFIG_HP100 is not set +CONFIG_NET_PCI=y +# CONFIG_PCNET32 is not set +# CONFIG_AMD8111_ETH is not set +# CONFIG_ADAPTEC_STARFIRE is not set +# CONFIG_B44 is not set +# CONFIG_DGRS is not set +CONFIG_EEPRO100=y +# CONFIG_EEPRO100_PIO is not set +# CONFIG_E100 is not set +# CONFIG_FEALNX is not set +# CONFIG_NATSEMI is not set +# CONFIG_NE2K_PCI is not set +# CONFIG_8139CP is not set +# CONFIG_8139TOO is not set +# CONFIG_SIS900 is not set +# CONFIG_EPIC100 is not set +# CONFIG_SUNDANCE is not set +# CONFIG_TLAN is not set +# CONFIG_VIA_RHINE is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_DL2K is not set +# CONFIG_E1000 is not set +# CONFIG_NS83820 is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_R8169 is not set +# CONFIG_SK98LIN is not set +# CONFIG_TIGON3 is not set + +# +# Ethernet (10000 Mbit) +# +# CONFIG_IXGB is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices (depends on LLC=y) +# +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# ATA/ATAPI/MFM/RLL support +# +CONFIG_IDE=y + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=y + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=y +# CONFIG_IDEDISK_MULTI_MODE is not set +# CONFIG_IDEDISK_STROKE is not set +CONFIG_BLK_DEV_IDECD=y +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_IDE_TASK_IOCTL is not set +# CONFIG_IDE_TASKFILE_IO is not set + +# +# IDE chipset support/bugfixes +# +# CONFIG_BLK_DEV_IDEPCI is not set + +# +# SCSI device support +# +# CONFIG_SCSI is not set + +# +# IEEE 1394 (FireWire) support (EXPERIMENTAL) +# +# CONFIG_IEEE1394 is not set + +# +# I2O device support +# +# CONFIG_I2O is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN_BOOL is not set + +# +# Input device support +# +# CONFIG_INPUT is not set + +# +# Userland interfaces +# + +# +# Input I/O drivers +# +# CONFIG_GAMEPORT is not set +CONFIG_SOUND_GAMEPORT=y +# CONFIG_SERIO is not set + +# +# Input Device Drivers +# + +# +# Character devices +# +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +# CONFIG_SERIAL_8250_EXTENDED is not set + +# +# Non-8250 serial port support +# +# CONFIG_SERIAL_DZ is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=256 + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# I2C Hardware Sensors Mainboard support +# + +# +# I2C Hardware Sensors Chip support +# +# CONFIG_I2C_SENSOR is not set + +# +# L3 serial bus support +# +# CONFIG_L3 is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_QIC02_TAPE is not set + +# +# IPMI +# +# CONFIG_IPMI_HANDLER is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_GEN_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_HANGCHECK_TIMER is not set + +# +# Multimedia devices +# +CONFIG_VIDEO_DEV=y + +# +# Video For Linux +# +# CONFIG_VIDEO_PROC_FS is not set + +# +# Video Adapters +# +# CONFIG_VIDEO_PMS is not set +# CONFIG_VIDEO_CPIA is not set +# CONFIG_VIDEO_STRADIS is not set +# CONFIG_VIDEO_HEXIUM_ORION is not set +# CONFIG_VIDEO_HEXIUM_GEMINI is not set + +# +# Radio Adapters +# +# CONFIG_RADIO_GEMTEK_PCI is not set +# CONFIG_RADIO_MAXIRADIO is not set +# CONFIG_RADIO_MAESTRO is not set + +# +# Digital Video Broadcasting Devices +# +CONFIG_DVB=y +CONFIG_DVB_CORE=y + +# +# Supported Frontend Modules +# +# CONFIG_DVB_STV0299 is not set +# CONFIG_DVB_ALPS_BSRV2 is not set +# CONFIG_DVB_ALPS_TDLB7 is not set +# CONFIG_DVB_ALPS_TDMB7 is not set +# CONFIG_DVB_ATMEL_AT76C651 is not set +# CONFIG_DVB_CX24110 is not set +# CONFIG_DVB_GRUNDIG_29504_491 is not set +# CONFIG_DVB_GRUNDIG_29504_401 is not set +# CONFIG_DVB_MT312 is not set +# CONFIG_DVB_VES1820 is not set +# CONFIG_DVB_TDA1004X is not set + +# +# Supported SAA7146 based PCI Adapters +# +# CONFIG_DVB_AV7110 is not set +# CONFIG_DVB_BUDGET is not set + +# +# Supported FlexCopII (B2C2) Adapters +# +# CONFIG_DVB_B2C2_SKYSTAR is not set +# CONFIG_VIDEO_BTCX is not set + +# +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT3_FS is not set +# CONFIG_JBD is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_XFS_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +# CONFIG_FAT_FS is not set +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +CONFIG_DEVPTS_FS=y +# CONFIG_DEVPTS_FS_XATTR is not set +CONFIG_TMPFS=y +CONFIG_RAMFS=y + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +# CONFIG_JFFS2_FS_NAND is not set +# CONFIG_CRAMFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +CONFIG_NFS_FS=y +# CONFIG_NFS_V3 is not set +# CONFIG_NFS_V4 is not set +# CONFIG_NFSD is not set +CONFIG_ROOT_NFS=y +CONFIG_LOCKD=y +# CONFIG_EXPORTFS is not set +CONFIG_SUNRPC=y +# CONFIG_SUNRPC_GSS is not set +# CONFIG_SMB_FS is not set +# CONFIG_CIFS is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_INTERMEZZO_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_NEC98_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_EFI_PARTITION is not set + +# +# Graphics support +# +# CONFIG_FB is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# Misc devices +# + +# +# Multimedia Capabilities Port drivers +# +# CONFIG_MCP is not set + +# +# Console Switches +# +# CONFIG_SWITCHES is not set + +# +# USB support +# +# CONFIG_USB is not set +# CONFIG_USB_GADGET is not set + +# +# Bluetooth support +# +# CONFIG_BT is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_USER=y +# CONFIG_DEBUG_INFO is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_SLAB is not set +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_WAITQ is not set +CONFIG_DEBUG_BUGVERBOSE=y +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_LL=y + +# +# Security options +# +# CONFIG_SECURITY is not set + +# +# Cryptographic options +# +# CONFIG_CRYPTO is not set + +# +# Library routines +# +# CONFIG_CRC32 is not set +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y diff -prauN linux-2.6.0-test5/arch/arm/configs/iq80321_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/iq80321_defconfig --- linux-2.6.0-test5/arch/arm/configs/iq80321_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/iq80321_defconfig 2003-09-25 19:15:44.000000000 -0700 @@ -0,0 +1,776 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +CONFIG_MMU=y +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y + +# +# General setup +# +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_EMBEDDED is not set +CONFIG_KALLSYMS=y +CONFIG_FUTEX=y +CONFIG_EPOLL=y +CONFIG_IOSCHED_AS=y +CONFIG_IOSCHED_DEADLINE=y + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODULE_UNLOAD is not set +CONFIG_OBSOLETE_MODPARM=y +# CONFIG_MODVERSIONS is not set +CONFIG_KMOD=y + +# +# System Type +# +# CONFIG_ARCH_ADIFCC is not set +# CONFIG_ARCH_ANAKIN is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_PXA is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_CAMELOT is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +CONFIG_ARCH_IOP3XX=y +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_SHARK is not set + +# +# CLPS711X/EP721X Implementations +# + +# +# Epxa10db +# + +# +# Footbridge Implementations +# + +# +# IOP3xx Implementation Options +# +# CONFIG_ARCH_IQ80310 is not set +CONFIG_ARCH_IQ80321=y +# CONFIG_ARCH_IOP310 is not set +CONFIG_ARCH_IOP321=y + +# +# IOP3xx Chipset Features +# +# CONFIG_IOP3XX_AAU is not set +# CONFIG_IOP3XX_DMA is not set +# CONFIG_IOP3XX_MU is not set +# CONFIG_IOP3XX_PMON is not set + +# +# ADIFCC Implementation Options +# + +# +# ADI Board Types +# + +# +# Intel PXA250/210 Implementations +# + +# +# SA11x0 Implementations +# + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_XSCALE=y +CONFIG_CPU_32v5=y + +# +# Processor Features +# +# CONFIG_ARM_THUMB is not set +CONFIG_XSCALE_PMU=y + +# +# General setup +# +CONFIG_PCI=y +# CONFIG_ZBOOT_ROM is not set +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +# CONFIG_PCI_LEGACY_PROC is not set +CONFIG_PCI_NAMES=y +# CONFIG_HOTPLUG is not set + +# +# MMC/SD Card support +# +# CONFIG_MMC is not set + +# +# At least one math emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_NWFPE_XP is not set +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +CONFIG_BINFMT_AOUT=y +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_PREEMPT is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="ip=boot root=nfs console=ttyS0,115200 mem=128M@0xa0000000" +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_REDBOOT_PARTS=y +# CONFIG_MTD_CMDLINE_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_CFI_STAA is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +# CONFIG_MTD_OBSOLETE_CHIPS is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_COMPLEX_MAPPINGS is not set +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_EDB7312 is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLKMTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# Plug and Play support +# +# CONFIG_PNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_UMEM is not set +# CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=8192 +# CONFIG_BLK_DEV_INITRD is not set + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set + +# +# Networking support +# +CONFIG_NET=y + +# +# Networking options +# +# CONFIG_PACKET is not set +# CONFIG_NETLINK_DEV is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set +CONFIG_UNIX=y +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_PNP=y +# CONFIG_IP_PNP_DHCP is not set +CONFIG_IP_PNP_BOOTP=y +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set + +# +# IP: Netfilter Configuration +# +# CONFIG_IP_NF_CONNTRACK is not set +# CONFIG_IP_NF_QUEUE is not set +# CONFIG_IP_NF_IPTABLES is not set +# CONFIG_IP_NF_ARPTABLES is not set +# CONFIG_IP_NF_COMPAT_IPCHAINS is not set +# CONFIG_IP_NF_COMPAT_IPFWADM is not set + +# +# IP: Virtual Server Configuration +# +# CONFIG_IP_VS is not set +# CONFIG_IPV6 is not set +# CONFIG_XFRM_USER is not set + +# +# SCTP Configuration (EXPERIMENTAL) +# +CONFIG_IPV6_SCTP__=y +# CONFIG_IP_SCTP is not set +# CONFIG_ATM is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_LLC is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_ETHERTAP is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_MII is not set +# CONFIG_SMC91X is not set +# CONFIG_HAPPYMEAL is not set +# CONFIG_SUNGEM is not set +# CONFIG_NET_VENDOR_3COM is not set + +# +# Tulip family network device support +# +# CONFIG_NET_TULIP is not set +# CONFIG_HP100 is not set +CONFIG_NET_PCI=y +# CONFIG_PCNET32 is not set +# CONFIG_AMD8111_ETH is not set +# CONFIG_ADAPTEC_STARFIRE is not set +# CONFIG_B44 is not set +# CONFIG_DGRS is not set +CONFIG_EEPRO100=y +# CONFIG_EEPRO100_PIO is not set +# CONFIG_E100 is not set +# CONFIG_FEALNX is not set +# CONFIG_NATSEMI is not set +# CONFIG_NE2K_PCI is not set +# CONFIG_8139CP is not set +# CONFIG_8139TOO is not set +# CONFIG_SIS900 is not set +# CONFIG_EPIC100 is not set +# CONFIG_SUNDANCE is not set +# CONFIG_TLAN is not set +# CONFIG_VIA_RHINE is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_DL2K is not set +CONFIG_E1000=y +CONFIG_E1000_NAPI=y +# CONFIG_NS83820 is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_R8169 is not set +# CONFIG_SK98LIN is not set +# CONFIG_TIGON3 is not set + +# +# Ethernet (10000 Mbit) +# +# CONFIG_IXGB is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices (depends on LLC=y) +# +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# ATA/ATAPI/MFM/RLL support +# +CONFIG_IDE=y + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=y + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=y +# CONFIG_IDEDISK_MULTI_MODE is not set +# CONFIG_IDEDISK_STROKE is not set +CONFIG_BLK_DEV_IDECD=y +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_IDE_TASK_IOCTL is not set +# CONFIG_IDE_TASKFILE_IO is not set + +# +# IDE chipset support/bugfixes +# +CONFIG_BLK_DEV_IDEPCI=y +# CONFIG_BLK_DEV_GENERIC is not set +# CONFIG_IDEPCI_SHARE_IRQ is not set +CONFIG_BLK_DEV_IDEDMA_PCI=y +# CONFIG_BLK_DEV_IDE_TCQ is not set +# CONFIG_BLK_DEV_OFFBOARD is not set +# CONFIG_BLK_DEV_IDEDMA_FORCED is not set +CONFIG_IDEDMA_PCI_AUTO=y +# CONFIG_IDEDMA_ONLYDISK is not set +CONFIG_BLK_DEV_IDEDMA=y +# CONFIG_IDEDMA_PCI_WIP is not set +CONFIG_BLK_DEV_ADMA=y +# CONFIG_BLK_DEV_AEC62XX is not set +# CONFIG_BLK_DEV_ALI15X3 is not set +# CONFIG_BLK_DEV_AMD74XX is not set +CONFIG_BLK_DEV_CMD64X=y +# CONFIG_BLK_DEV_TRIFLEX is not set +# CONFIG_BLK_DEV_CY82C693 is not set +# CONFIG_BLK_DEV_CS5520 is not set +# CONFIG_BLK_DEV_HPT34X is not set +# CONFIG_BLK_DEV_HPT366 is not set +# CONFIG_BLK_DEV_SC1200 is not set +# CONFIG_BLK_DEV_PIIX is not set +# CONFIG_BLK_DEV_NS87415 is not set +# CONFIG_BLK_DEV_OPTI621 is not set +# CONFIG_BLK_DEV_PDC202XX_OLD is not set +# CONFIG_BLK_DEV_PDC202XX_NEW is not set +# CONFIG_BLK_DEV_SVWKS is not set +# CONFIG_BLK_DEV_SIIMAGE is not set +# CONFIG_BLK_DEV_SLC90E66 is not set +# CONFIG_BLK_DEV_TRM290 is not set +# CONFIG_BLK_DEV_VIA82CXXX is not set +# CONFIG_BLK_DEV_SL82C105 is not set +CONFIG_IDEDMA_AUTO=y +# CONFIG_IDEDMA_IVB is not set + +# +# SCSI device support +# +# CONFIG_SCSI is not set + +# +# IEEE 1394 (FireWire) support (EXPERIMENTAL) +# +# CONFIG_IEEE1394 is not set + +# +# I2O device support +# +# CONFIG_I2O is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN_BOOL is not set + +# +# Input device support +# +# CONFIG_INPUT is not set + +# +# Userland interfaces +# + +# +# Input I/O drivers +# +# CONFIG_GAMEPORT is not set +CONFIG_SOUND_GAMEPORT=y +# CONFIG_SERIO is not set + +# +# Input Device Drivers +# + +# +# Character devices +# +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +# CONFIG_SERIAL_8250_EXTENDED is not set + +# +# Non-8250 serial port support +# +# CONFIG_SERIAL_DZ is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=256 + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# I2C Hardware Sensors Mainboard support +# + +# +# I2C Hardware Sensors Chip support +# +# CONFIG_I2C_SENSOR is not set + +# +# L3 serial bus support +# +# CONFIG_L3 is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_QIC02_TAPE is not set + +# +# IPMI +# +# CONFIG_IPMI_HANDLER is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_GEN_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_HANGCHECK_TIMER is not set + +# +# Multimedia devices +# +CONFIG_VIDEO_DEV=y + +# +# Video For Linux +# +# CONFIG_VIDEO_PROC_FS is not set + +# +# Video Adapters +# +# CONFIG_VIDEO_PMS is not set +# CONFIG_VIDEO_CPIA is not set +# CONFIG_VIDEO_STRADIS is not set +# CONFIG_VIDEO_HEXIUM_ORION is not set +# CONFIG_VIDEO_HEXIUM_GEMINI is not set + +# +# Radio Adapters +# +# CONFIG_RADIO_GEMTEK_PCI is not set +# CONFIG_RADIO_MAXIRADIO is not set +# CONFIG_RADIO_MAESTRO is not set + +# +# Digital Video Broadcasting Devices +# +# CONFIG_DVB is not set +# CONFIG_VIDEO_BTCX is not set + +# +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT3_FS is not set +# CONFIG_JBD is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_XFS_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +# CONFIG_FAT_FS is not set +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +CONFIG_DEVPTS_FS=y +# CONFIG_DEVPTS_FS_XATTR is not set +CONFIG_TMPFS=y +CONFIG_RAMFS=y + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +# CONFIG_JFFS2_FS_NAND is not set +# CONFIG_CRAMFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +CONFIG_NFS_FS=y +# CONFIG_NFS_V3 is not set +# CONFIG_NFS_V4 is not set +# CONFIG_NFSD is not set +CONFIG_ROOT_NFS=y +CONFIG_LOCKD=y +# CONFIG_EXPORTFS is not set +CONFIG_SUNRPC=y +# CONFIG_SUNRPC_GSS is not set +# CONFIG_SMB_FS is not set +# CONFIG_CIFS is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_INTERMEZZO_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_NEC98_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_EFI_PARTITION is not set + +# +# Graphics support +# +# CONFIG_FB is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# Misc devices +# + +# +# Multimedia Capabilities Port drivers +# +# CONFIG_MCP is not set + +# +# Console Switches +# +# CONFIG_SWITCHES is not set + +# +# USB support +# +# CONFIG_USB is not set +# CONFIG_USB_GADGET is not set + +# +# Bluetooth support +# +# CONFIG_BT is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +# CONFIG_DEBUG_USER is not set +# CONFIG_DEBUG_INFO is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_SLAB is not set +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_WAITQ is not set +CONFIG_DEBUG_BUGVERBOSE=y +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_LL=y + +# +# Security options +# +# CONFIG_SECURITY is not set + +# +# Cryptographic options +# +# CONFIG_CRYPTO is not set + +# +# Library routines +# +# CONFIG_CRC32 is not set +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y diff -prauN linux-2.6.0-test5/arch/arm/configs/jornada720_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/jornada720_defconfig --- linux-2.6.0-test5/arch/arm/configs/jornada720_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/jornada720_defconfig 2003-09-25 19:15:44.000000000 -0700 @@ -0,0 +1,897 @@ +# +# Automatically generated by make menuconfig: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set +# CONFIG_GENERIC_BUST_SPINLOCK is not set +# CONFIG_GENERIC_ISA_DMA is not set + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +CONFIG_KMOD=y + +# +# System Type +# +# CONFIG_ARCH_ANAKIN is not set +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_CAMELOT is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_SHARK is not set + +# +# Archimedes/A5000 Implementations +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_ADSBITSY is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_H3100 is not set +# CONFIG_SA1100_H3600 is not set +# CONFIG_SA1100_H3800 is not set +# CONFIG_SA1100_H3XXX is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FLEXANET is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_GRAPHICSMASTER is not set +CONFIG_SA1100_JORNADA720=y +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_SHANNON is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_SIMPAD is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +CONFIG_SA1111=y +CONFIG_FORCE_MAX_ZONEORDER=9 +# CONFIG_SA1100_USB is not set +# CONFIG_SA1100_USB_NETLINK is not set +# CONFIG_SA1100_USB_CHAR is not set +# CONFIG_REGISTERS is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_AUTCPU12 is not set +# CONFIG_ARCH_CDB89712 is not set +# CONFIG_ARCH_CLEP7312 is not set +# CONFIG_ARCH_EDB7211 is not set +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_EP7211 is not set +# CONFIG_ARCH_EP7212 is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM922T is not set +# CONFIG_CPU_ARM926T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +CONFIG_CPU_SA1100=y +# CONFIG_ARM_THUMB is not set +CONFIG_DISCONTIGMEM=y + +# +# General setup +# +# CONFIG_PCI is not set +CONFIG_ISA=y +# CONFIG_ISA_DMA is not set +# CONFIG_CPU_FREQ is not set +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=y +# CONFIG_I82092 is not set +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_CLPS6700 is not set +CONFIG_PCMCIA_SA1100=y +# CONFIG_MERCURY_BACKPAQ is not set +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +CONFIG_FPE_NWFPE=y +CONFIG_FPE_FASTFPE=y +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +CONFIG_BINFMT_AOUT=m +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +CONFIG_PM=y +# CONFIG_APM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="keepinitrd mem=32M" +# CONFIG_LEDS is not set +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +CONFIG_MTD_DEBUG=y +CONFIG_MTD_DEBUG_VERBOSE=1 +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +CONFIG_MTD_BOOTLDR_PARTS=y +# CONFIG_MTD_AFS_PARTS is not set +CONFIG_MTD_CHAR=m +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_NOSWAP=y +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +CONFIG_MTD_CFI_GEOMETRY=y +# CONFIG_MTD_CFI_B1 is not set +CONFIG_MTD_CFI_B2=y +CONFIG_MTD_CFI_B4=y +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +# CONFIG_MTD_OBSOLETE_CHIPS is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set +# CONFIG_MTD_JEDEC is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_CDB89712 is not set +CONFIG_MTD_SA1100=y +# CONFIG_MTD_H3600_BACKPAQ is not set +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLKMTD is not set +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +CONFIG_BLK_DEV_LOOP=m +CONFIG_BLK_DEV_NBD=m +# CONFIG_BLK_DEV_RAM is not set +# CONFIG_BLK_DEV_INITRD is not set + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_MD_MULTIPATH is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_PACKET_MMAP=y +CONFIG_NETLINK=y +CONFIG_RTNETLINK=y +# CONFIG_NETLINK_DEV is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set +CONFIG_FILTER=y +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_IP_MROUTE is not set +# CONFIG_ARPD is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set + +# +# IP: Netfilter Configuration +# +# CONFIG_IP_NF_CONNTRACK is not set +# CONFIG_IP_NF_QUEUE is not set +# CONFIG_IP_NF_IPTABLES is not set +# CONFIG_IP_NF_COMPAT_IPCHAINS is not set +# CONFIG_IP_NF_COMPAT_IPFWADM is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_ETHERTAP is not set + +# +# Ethernet (10 or 100Mbit) +# +# CONFIG_NET_ETHERNET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_DL2K is not set +# CONFIG_MYRI_SBUS is not set +# CONFIG_NS83820 is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PLIP is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +# CONFIG_PPPOE is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +CONFIG_NET_RADIO=y +# CONFIG_STRIP is not set +CONFIG_WAVELAN=m +CONFIG_ARLAN=m +CONFIG_AIRONET4500=m +CONFIG_AIRONET4500_NONCS=m +# CONFIG_AIRONET4500_PNP is not set +# CONFIG_AIRONET4500_PCI is not set +# CONFIG_AIRONET4500_ISA is not set +# CONFIG_AIRONET4500_I365 is not set +# CONFIG_AIRONET4500_PROC is not set +# CONFIG_AIRO is not set +CONFIG_HERMES=m +CONFIG_PCMCIA_HERMES=m +CONFIG_AIRO_CS=m +CONFIG_NET_WIRELESS=y + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +CONFIG_PCMCIA_3C589=m +CONFIG_PCMCIA_3C574=m +CONFIG_PCMCIA_FMVJ18X=m +CONFIG_PCMCIA_PCNET=m +CONFIG_PCMCIA_NMCLAN=m +CONFIG_PCMCIA_SMC91C92=m +CONFIG_PCMCIA_XIRC2PS=m +# CONFIG_PCMCIA_AXNET is not set +# CONFIG_ARCNET_COM20020_CS is not set +# CONFIG_PCMCIA_IBMTR is not set +CONFIG_NET_PCMCIA_RADIO=y +# CONFIG_PCMCIA_RAYCS is not set +# CONFIG_PCMCIA_NETWAVE is not set +CONFIG_PCMCIA_WAVELAN=m +CONFIG_AIRONET4500_CS=m + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +CONFIG_IRDA=m +CONFIG_IRLAN=m +# CONFIG_IRNET is not set +CONFIG_IRCOMM=m +# CONFIG_IRDA_ULTRA is not set +# CONFIG_IRDA_OPTIONS is not set + +# +# Infrared-port device drivers +# +# CONFIG_IRTTY_SIR is not set +# CONFIG_IRPORT_SIR is not set +# CONFIG_DONGLE is not set +# CONFIG_USB_IRDA is not set +# CONFIG_NSC_FIR is not set +# CONFIG_WINBOND_FIR is not set +# CONFIG_TOSHIBA_FIR is not set +# CONFIG_SMC_IRCC_FIR is not set +# CONFIG_ALI_FIR is not set +# CONFIG_VLSI_FIR is not set +CONFIG_SA1100_FIR=m + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=m + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=m +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=m +# CONFIG_IDEDISK_MULTI_MODE is not set +CONFIG_BLK_DEV_IDECS=m +CONFIG_BLK_DEV_IDECD=m +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +# CONFIG_IDE_CHIPSETS is not set +# CONFIG_IDEDMA_AUTO is not set +# CONFIG_BLK_DEV_ATARAID is not set +# CONFIG_BLK_DEV_ATARAID_PDC is not set +# CONFIG_BLK_DEV_ATARAID_HPT is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +CONFIG_INPUT=y +# CONFIG_INPUT_KEYBDEV is not set +CONFIG_INPUT_MOUSEDEV=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=640 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=240 +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_SERIAL=m +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_ANAKIN is not set +# CONFIG_SERIAL_ANAKIN_CONSOLE is not set +# CONFIG_SERIAL_AMBA is not set +# CONFIG_SERIAL_AMBA_CONSOLE is not set +# CONFIG_SERIAL_CLPS711X is not set +# CONFIG_SERIAL_CLPS711X_CONSOLE is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +# CONFIG_SERIAL_UART00 is not set +# CONFIG_SERIAL_UART00_CONSOLE is not set +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=115200 +# CONFIG_SERIAL_8250 is not set +# CONFIG_SERIAL_8250_CONSOLE is not set +# CONFIG_SERIAL_8250_EXTENDED is not set +# CONFIG_SERIAL_8250_MANY_PORTS is not set +# CONFIG_SERIAL_8250_SHARE_IRQ is not set +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +# CONFIG_SERIAL_8250_MULTIPORT is not set +# CONFIG_SERIAL_8250_HUB6 is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=32 +# CONFIG_NEWTONKBD is not set + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# L3 serial bus support +# +# CONFIG_L3 is not set +# CONFIG_L3_ALGOBIT is not set +# CONFIG_L3_BIT_SA1100_GPIO is not set +# CONFIG_L3_SA1111 is not set +# CONFIG_BIT_SA1100_GPIO is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +CONFIG_MOUSE=m +# CONFIG_PSMOUSE is not set +# CONFIG_82C710_MOUSE is not set +# CONFIG_PC110_PAD is not set + +# +# Joysticks +# +# CONFIG_INPUT_GAMEPORT is not set +# CONFIG_INPUT_NS558 is not set +# CONFIG_INPUT_LIGHTNING is not set +# CONFIG_INPUT_PCIGAME is not set +# CONFIG_INPUT_CS461X is not set +# CONFIG_INPUT_EMU10K1 is not set +# CONFIG_INPUT_SERIO is not set +# CONFIG_INPUT_SERPORT is not set +# CONFIG_INPUT_ANALOG is not set +# CONFIG_INPUT_A3D is not set +# CONFIG_INPUT_ADI is not set +# CONFIG_INPUT_COBRA is not set +# CONFIG_INPUT_GF2K is not set +# CONFIG_INPUT_GRIP is not set +# CONFIG_INPUT_INTERACT is not set +# CONFIG_INPUT_TMDC is not set +# CONFIG_INPUT_SIDEWINDER is not set +# CONFIG_INPUT_IFORCE_USB is not set +# CONFIG_INPUT_IFORCE_232 is not set +# CONFIG_INPUT_WARRIOR is not set +# CONFIG_INPUT_MAGELLAN is not set +# CONFIG_INPUT_SPACEORB is not set +# CONFIG_INPUT_SPACEBALL is not set +# CONFIG_INPUT_STINGER is not set +# CONFIG_INPUT_DB9 is not set +# CONFIG_INPUT_GAMECON is not set +# CONFIG_INPUT_TURBOGRAFX is not set +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +CONFIG_SA1100_RTC=m +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# PCMCIA character devices +# +# CONFIG_PCMCIA_SERIAL_CS is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set +# CONFIG_V4L2_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_REISERFS_PROC_INFO is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EXT3_FS is not set +# CONFIG_JBD is not set +# CONFIG_JBD_DEBUG is not set +# CONFIG_FAT_FS is not set +# CONFIG_MSDOS_FS is not set +# CONFIG_UMSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=2 +# CONFIG_CRAMFS is not set +# CONFIG_TMPFS is not set +CONFIG_RAMFS=y +CONFIG_ISO9660_FS=m +# CONFIG_JOLIET is not set +# CONFIG_ZISOFS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +CONFIG_DEVFS_FS=y +CONFIG_DEVFS_MOUNT=y +CONFIG_DEVFS_DEBUG=y +# CONFIG_DRIVERFS_FS is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +# CONFIG_INTERMEZZO_FS is not set +CONFIG_NFS_FS=m +CONFIG_NFS_V3=y +# CONFIG_ROOT_NFS is not set +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +CONFIG_SUNRPC=m +CONFIG_LOCKD=m +CONFIG_LOCKD_V4=y +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set +# CONFIG_ZISOFS_FS is not set +# CONFIG_ZLIB_FS_INFLATE is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_SMB_NLS is not set +# CONFIG_NLS is not set + +# +# Console drivers +# +CONFIG_PC_KEYMAP=y +# CONFIG_VGA_CONSOLE is not set + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_ACORN is not set +# CONFIG_FB_ANAKIN is not set +# CONFIG_FB_CLPS711X is not set +# CONFIG_FB_SA1100 is not set +CONFIG_FB_EPSON1356=y +# CONFIG_FB_CYBER2000 is not set +# CONFIG_FB_VIRTUAL is not set +CONFIG_FBCON_ADVANCED=y +# CONFIG_FBCON_MFB is not set +# CONFIG_FBCON_CFB2 is not set +# CONFIG_FBCON_CFB4 is not set +# CONFIG_FBCON_CFB8 is not set +CONFIG_FBCON_CFB16=y +# CONFIG_FBCON_CFB24 is not set +# CONFIG_FBCON_CFB32 is not set +# CONFIG_FBCON_AFB is not set +# CONFIG_FBCON_ILBM is not set +# CONFIG_FBCON_IPLAN2P2 is not set +# CONFIG_FBCON_IPLAN2P4 is not set +# CONFIG_FBCON_IPLAN2P8 is not set +# CONFIG_FBCON_MAC is not set +# CONFIG_FBCON_VGA_PLANES is not set +# CONFIG_FBCON_VGA is not set +# CONFIG_FBCON_HGA is not set +CONFIG_FBCON_FONTWIDTH8_ONLY=y +CONFIG_FBCON_FONTS=y +CONFIG_FONT_8x8=y +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set + +# +# Sound +# +CONFIG_SOUND=m +# CONFIG_SOUND_BT878 is not set +# CONFIG_SOUND_CMPCI is not set +# CONFIG_SOUND_EMU10K1 is not set +# CONFIG_MIDI_EMU10K1 is not set +# CONFIG_SOUND_FUSION is not set +# CONFIG_SOUND_CS4281 is not set +# CONFIG_SOUND_ES1370 is not set +# CONFIG_SOUND_ES1371 is not set +# CONFIG_SOUND_ESSSOLO1 is not set +# CONFIG_SOUND_MAESTRO is not set +# CONFIG_SOUND_MAESTRO3 is not set +# CONFIG_SOUND_ICH is not set +# CONFIG_SOUND_RME96XX is not set +# CONFIG_SOUND_SONICVIBES is not set +# CONFIG_SOUND_TRIDENT is not set +# CONFIG_SOUND_MSNDCLAS is not set +# CONFIG_SOUND_MSNDPIN is not set +# CONFIG_SOUND_VIA82CXXX is not set +# CONFIG_MIDI_VIA82CXXX is not set +CONFIG_SOUND_SA1100=m +# CONFIG_SOUND_UDA1341 is not set +# CONFIG_SOUND_ASSABET_UDA1341 is not set +# CONFIG_SOUND_H3600_UDA1341 is not set +# CONFIG_SOUND_PANGOLIN_UDA1341 is not set +# CONFIG_SOUND_SA1111_UDA1341 is not set +# CONFIG_SOUND_SA1100SSP is not set +# CONFIG_SOUND_OSS is not set +# CONFIG_SOUND_WAVEARTIST is not set +# CONFIG_SOUND_TVMIXER is not set + +# +# Multimedia Capabilities Port drivers +# +# CONFIG_MCP is not set +# CONFIG_MCP_SA1100 is not set +# CONFIG_MCP_UCB1200 is not set +# CONFIG_MCP_UCB1200_AUDIO is not set +# CONFIG_MCP_UCB1200_TS is not set + +# +# USB support +# +# CONFIG_USB is not set +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +# CONFIG_USB_OHCI is not set +# CONFIG_USB_OHCI_SA1111 is not set +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set +# CONFIG_USB_HID is not set +# CONFIG_USB_HIDDEV is not set +# CONFIG_USB_KBD is not set +# CONFIG_USB_MOUSE is not set +# CONFIG_USB_WACOM is not set +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_HPUSBSCSI is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_CDCETHER is not set +# CONFIG_USB_USBNET is not set +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_IR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set +# CONFIG_USB_SERIAL_OMNINET is not set +# CONFIG_USB_RIO500 is not set + +# +# Bluetooth support +# +# CONFIG_BT is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +# CONFIG_DEBUG_USER is not set +# CONFIG_DEBUG_INFO is not set +# CONFIG_NO_PGT_CACHE is not set +CONFIG_DEBUG_KERNEL=y +CONFIG_DEBUG_SLAB=y +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_WAITQ is not set +# CONFIG_DEBUG_BUGVERBOSE is not set +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_LL=y +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set +# CONFIG_DEBUG_LL_SER3 is not set diff -prauN linux-2.6.0-test5/arch/arm/configs/lart_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/lart_defconfig --- linux-2.6.0-test5/arch/arm/configs/lart_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/lart_defconfig 2003-09-25 19:15:44.000000000 -0700 @@ -0,0 +1,893 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +CONFIG_KMOD=y + +# +# System Type +# +# CONFIG_ARCH_ANAKIN is not set +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_SHARK is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Archimedes/A5000 Implementations (select only ONE) +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_ADSBITSY is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_H3600 is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FLEXANET is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_GRAPHICSMASTER is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +CONFIG_SA1100_LART=y +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_SIMPAD is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +CONFIG_SA1100_USB=m +CONFIG_SA1100_USB_NETLINK=m +CONFIG_SA1100_USB_CHAR=m + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_CDB89712 is not set +# CONFIG_ARCH_CLEP7312 is not set +# CONFIG_ARCH_EDB7211 is not set +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_EP7211 is not set +# CONFIG_ARCH_EP7212 is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set + +# +# Processor Type +# +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +CONFIG_CPU_SA1100=y +CONFIG_DISCONTIGMEM=y +# CONFIG_CPU_BIG_ENDIAN is not set + +# +# General setup +# +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +CONFIG_CPU_FREQ=y +# CONFIG_HOTPLUG is not set +# CONFIG_PCMCIA is not set +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y + +# +# At least one math emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +CONFIG_BINFMT_AOUT=y +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +CONFIG_PM=y +CONFIG_APM=m +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="console=ttySA0,9600 root=/dev/ram" +# CONFIG_PFS168_CMDLINE is not set +CONFIG_LEDS=y +# CONFIG_LEDS_TIMER is not set +CONFIG_LEDS_CPU=y +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +CONFIG_MTD_DEBUG=y +CONFIG_MTD_DEBUG_VERBOSE=1 +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_BOOTLDR_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# RAM/ROM/Flash chip drivers +# +# CONFIG_MTD_CFI is not set +# CONFIG_MTD_CFI_INTELEXT is not set +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_JEDEC is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_SUN_UFLASH is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_PNC2000 is not set +# CONFIG_MTD_RPXLITE is not set +# CONFIG_MTD_TQM8XXL is not set +# CONFIG_MTD_SC520CDP is not set +# CONFIG_MTD_NETSC520 is not set +# CONFIG_MTD_SBC_GXX is not set +# CONFIG_MTD_ELAN_104NC is not set +# CONFIG_MTD_DBOX2 is not set +# CONFIG_MTD_CSTM_MIPS_IXX is not set +# CONFIG_MTD_CFI_FLAGADM is not set +# CONFIG_MTD_SOLUTIONENGINE is not set +# CONFIG_MTD_MIXMEM is not set +# CONFIG_MTD_OCTAGON is not set +# CONFIG_MTD_VMAX is not set +# CONFIG_MTD_OCELOT is not set +# CONFIG_MTD_L440GX is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_CDB89712 is not set +# CONFIG_MTD_SA1100 is not set +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +CONFIG_MTD_LART=y +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLKMTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set +# CONFIG_PNPBIOS is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +CONFIG_PACKET=m +# CONFIG_PACKET_MMAP is not set +# CONFIG_NETLINK is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +CONFIG_INET_ECN=y +CONFIG_SYN_COOKIES=y +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set + +# +# +# +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +CONFIG_DUMMY=m +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_SUNLANCE is not set +# CONFIG_SUNBMAC is not set +# CONFIG_SUNQE is not set +# CONFIG_SUNLANCE is not set +# CONFIG_SUNGEM is not set +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_LANCE is not set +# CONFIG_NET_VENDOR_SMC is not set +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_NET_ISA is not set +# CONFIG_NET_PCI is not set +# CONFIG_NET_POCKET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_DL2K is not set +# CONFIG_MYRI_SBUS is not set +# CONFIG_NS83820 is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PLIP is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +# CONFIG_PPPOE is not set +CONFIG_SLIP=m +CONFIG_SLIP_COMPRESSED=y +# CONFIG_SLIP_SMART is not set +# CONFIG_SLIP_MODE_SLIP6 is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +CONFIG_IRDA=m + +# +# IrDA protocols +# +CONFIG_IRLAN=m +CONFIG_IRNET=m +CONFIG_IRCOMM=m +# CONFIG_IRDA_ULTRA is not set +CONFIG_IRDA_OPTIONS=y + +# +# IrDA options +# +CONFIG_IRDA_CACHE_LAST_LSAP=y +# CONFIG_IRDA_FAST_RR is not set +CONFIG_IRDA_DEBUG=y + +# +# Infrared-port device drivers +# + +# +# SIR device drivers +# +# CONFIG_IRTTY_SIR is not set +# CONFIG_IRPORT_SIR is not set + +# +# Dongle support +# +# CONFIG_DONGLE is not set + +# +# FIR device drivers +# +# CONFIG_USB_IRDA is not set +# CONFIG_NSC_FIR is not set +# CONFIG_WINBOND_FIR is not set +# CONFIG_TOSHIBA_FIR is not set +# CONFIG_SMC_IRCC_FIR is not set +# CONFIG_ALI_FIR is not set +# CONFIG_VLSI_FIR is not set +CONFIG_SA1100_FIR=m + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=m + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=m + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=m +# CONFIG_IDEDISK_MULTI_MODE is not set +# CONFIG_BLK_DEV_IDECS is not set +CONFIG_BLK_DEV_IDECD=m +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set + +# +# IDE chipset support/bugfixes +# +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +# CONFIG_IDE_CHIPSETS is not set +# CONFIG_IDEDMA_AUTO is not set +# CONFIG_BLK_DEV_ATARAID is not set +# CONFIG_BLK_DEV_ATARAID_PDC is not set +# CONFIG_BLK_DEV_ATARAID_HPT is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +# CONFIG_INPUT is not set +# CONFIG_INPUT_KEYBDEV is not set +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set + +# +# Character devices +# +# CONFIG_VT is not set +# CONFIG_SERIAL is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_ANAKIN is not set +# CONFIG_SERIAL_ANAKIN_CONSOLE is not set +# CONFIG_SERIAL_AMBA is not set +# CONFIG_SERIAL_AMBA_CONSOLE is not set +# CONFIG_SERIAL_CLPS711X is not set +# CONFIG_SERIAL_CLPS711X_CONSOLE is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=9600 +# CONFIG_SERIAL_8250 is not set +# CONFIG_SERIAL_8250_CONSOLE is not set +# CONFIG_SERIAL_8250_EXTENDED is not set +# CONFIG_SERIAL_8250_MANY_PORTS is not set +# CONFIG_SERIAL_8250_SHARE_IRQ is not set +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +# CONFIG_SERIAL_8250_MULTIPORT is not set +# CONFIG_SERIAL_8250_HUB6 is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=256 +CONFIG_UCB1200=m +CONFIG_TOUCHSCREEN_UCB1200=m +CONFIG_AUDIO_UCB1200=m +CONFIG_ADC_UCB1200=m +# CONFIG_TOUCHSCREEN_H3600 is not set +CONFIG_PROFILER=m +# CONFIG_PFS168_SPI is not set +# CONFIG_PFS168_DTMF is not set +# CONFIG_PFS168_MISC is not set + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# L3 serial bus support +# +# CONFIG_L3 is not set +# CONFIG_L3_ALGOBIT is not set +# CONFIG_L3_BIT_SA1100_GPIO is not set + +# +# Other L3 adapters +# +# CONFIG_L3_SA1111 is not set + +# +# L3 driver support +# +# CONFIG_L3_DRV_UDA1341 is not set +# CONFIG_BIT_SA1100_GPIO is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_MOUSE is not set + +# +# Joysticks +# +# CONFIG_INPUT_GAMEPORT is not set + +# +# Input core support is needed for gameports +# + +# +# Input core support is needed for joysticks +# +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +CONFIG_SA1100_RTC=m +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set +# CONFIG_SONYPI is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +CONFIG_REISERFS_FS=m +# CONFIG_REISERFS_CHECK is not set +# CONFIG_REISERFS_PROC_INFO is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_CMS_FS is not set +CONFIG_EXT3_FS=m +CONFIG_JBD=m +# CONFIG_JBD_DEBUG is not set +# CONFIG_FAT_FS is not set +# CONFIG_MSDOS_FS is not set +# CONFIG_UMSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +CONFIG_JFFS2_FS=m +CONFIG_JFFS2_FS_DEBUG=1 +CONFIG_CRAMFS=m +CONFIG_TMPFS=y +CONFIG_RAMFS=m +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +# CONFIG_MINIX_FS is not set +# CONFIG_FREEVXFS_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +CONFIG_UDF_FS=m +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +# CONFIG_INTERMEZZO_FS is not set +CONFIG_NFS_FS=m +CONFIG_NFS_V3=y +# CONFIG_ROOT_NFS is not set +CONFIG_NFSD=m +CONFIG_NFSD_V3=y +CONFIG_SUNRPC=m +CONFIG_LOCKD=m +CONFIG_LOCKD_V4=y +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_SMB_NLS is not set +CONFIG_NLS=y + +# +# Native Language Support +# +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=m +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +CONFIG_NLS_CODEPAGE_850=m +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +CONFIG_NLS_ISO8859_1=m +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +CONFIG_NLS_ISO8859_15=m +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +CONFIG_NLS_UTF8=m + +# +# Sound +# +CONFIG_SOUND=m +# CONFIG_SOUND_BT878 is not set +# CONFIG_SOUND_CMPCI is not set +# CONFIG_SOUND_EMU10K1 is not set +# CONFIG_SOUND_FUSION is not set +# CONFIG_SOUND_CS4281 is not set +# CONFIG_SOUND_ES1370 is not set +# CONFIG_SOUND_ES1371 is not set +# CONFIG_SOUND_ESSSOLO1 is not set +# CONFIG_SOUND_MAESTRO is not set +# CONFIG_SOUND_MAESTRO3 is not set +# CONFIG_SOUND_ICH is not set +# CONFIG_SOUND_RME96XX is not set +# CONFIG_SOUND_SONICVIBES is not set +# CONFIG_SOUND_TRIDENT is not set +# CONFIG_SOUND_MSNDCLAS is not set +# CONFIG_SOUND_MSNDPIN is not set +# CONFIG_SOUND_VIA82CXXX is not set +# CONFIG_MIDI_VIA82CXXX is not set +# CONFIG_SOUND_ASSABET_UDA1341 is not set +# CONFIG_SOUND_H3600_UDA1341 is not set +# CONFIG_SOUND_PANGOLIN_UDA1341 is not set +# CONFIG_SOUND_SA1111_UDA1341 is not set +CONFIG_SOUND_SA1100SSP=m +# CONFIG_SOUND_OSS is not set +# CONFIG_SOUND_WAVEARTIST is not set +# CONFIG_SOUND_TVMIXER is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# USB Controllers +# +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +# CONFIG_USB_OHCI is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# USB Human Interface Devices (HID) +# + +# +# Input core support is needed for USB HID +# + +# +# USB Imaging devices +# +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_HPUSBSCSI is not set + +# +# USB Multimedia devices +# + +# +# Video4Linux support is needed for USB Multimedia device support +# +# CONFIG_USB_DABUSB is not set + +# +# USB Network adaptors +# +# CONFIG_USB_PLUSB is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_CDCETHER is not set +# CONFIG_USB_USBNET is not set + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_OMNINET is not set + +# +# Miscellaneous USB drivers +# +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_ID75 is not set + +# +# Bluetooth support +# +# CONFIG_BT is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_USER=y +# CONFIG_DEBUG_INFO is not set +CONFIG_MAGIC_SYSRQ=y +# CONFIG_NO_PGT_CACHE is not set +CONFIG_DEBUG_LL=y +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -prauN linux-2.6.0-test5/arch/arm/configs/lubbock_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/lubbock_defconfig --- linux-2.6.0-test5/arch/arm/configs/lubbock_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/lubbock_defconfig 2003-09-25 19:15:44.000000000 -0700 @@ -0,0 +1,882 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set +# CONFIG_GENERIC_BUST_SPINLOCK is not set +# CONFIG_GENERIC_ISA_DMA is not set + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y + +# +# General setup +# +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set + +# +# System Type +# +# CONFIG_ARCH_ADIFCC is not set +# CONFIG_ARCH_ANAKIN is not set +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +CONFIG_ARCH_PXA=y +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_CAMELOT is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_IOP310 is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_SHARK is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Archimedes/A5000 Implementations (select only ONE) +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_ADSBITSY is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_H3100 is not set +# CONFIG_SA1100_H3600 is not set +# CONFIG_SA1100_H3800 is not set +# CONFIG_SA1100_H3XXX is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FLEXANET is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_GRAPHICSMASTER is not set +# CONFIG_SA1100_BADGE4 is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_PT_SYSTEM3 is not set +# CONFIG_SA1100_SHANNON is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_SIMPAD is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +# CONFIG_SA1100_STORK is not set +# CONFIG_SA1100_USB is not set +# CONFIG_SA1100_USB_NETLINK is not set +# CONFIG_SA1100_USB_CHAR is not set +# CONFIG_H3600_SLEEVE is not set + +# +# Intel PXA250/210 Implementations +# +CONFIG_ARCH_LUBBOCK=y +# CONFIG_ARCH_PXA_IDP is not set +CONFIG_SA1111=y + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_AUTCPU12 is not set +# CONFIG_ARCH_CDB89712 is not set +# CONFIG_ARCH_CLEP7312 is not set +# CONFIG_ARCH_EDB7211 is not set +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_FORTUNET is not set +# CONFIG_ARCH_EP7211 is not set +# CONFIG_ARCH_EP7212 is not set + +# +# IOP310 Implementation Options +# +# CONFIG_ARCH_IQ80310 is not set + +# +# IOP310 Chipset Features +# +# CONFIG_IOP310_AAU is not set +# CONFIG_IOP310_DMA is not set +# CONFIG_IOP310_MU is not set +# CONFIG_IOP310_PMON is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set + +# +# Processor Type +# +# CONFIG_CPU_32v3 is not set +# CONFIG_CPU_32v4 is not set +CONFIG_CPU_32v5=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM922T is not set +# CONFIG_CPU_ARM926T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +# CONFIG_CPU_SA1100 is not set +CONFIG_CPU_XSCALE=y +CONFIG_XSCALE_CACHE_ERRATA=y +CONFIG_XSCALE_PMU=y + +# +# Processor Features +# +# CONFIG_ARM_THUMB is not set + +# +# General setup +# +# CONFIG_DISCONTIGMEM is not set +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +# CONFIG_FIQ is not set +# CONFIG_ZBOOT_ROM is not set +CONFIG_ZBOOT_ROM_TEXT=0 +CONFIG_ZBOOT_ROM_BSS=0 +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=y +CONFIG_PCMCIA_PROBE=y +# CONFIG_I82092 is not set +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_CLPS6700 is not set +# CONFIG_PCMCIA_SA1100 is not set +CONFIG_PCMCIA_PXA=y + +# +# At least one math emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_PREEMPT is not set +# CONFIG_APM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="root=/dev/nfs ip=bootp console=ttyS0,115200 mem=64M" +CONFIG_LEDS=y +CONFIG_LEDS_TIMER=y +CONFIG_LEDS_CPU=y +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_REDBOOT_PARTS=y +# CONFIG_MTD_BOOTLDR_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_NOSWAP=y +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +CONFIG_MTD_CFI_GEOMETRY=y +# CONFIG_MTD_CFI_B1 is not set +# CONFIG_MTD_CFI_B2 is not set +CONFIG_MTD_CFI_B4=y +# CONFIG_MTD_CFI_I1 is not set +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +# CONFIG_MTD_OBSOLETE_CHIPS is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set +# CONFIG_MTD_JEDEC is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_CDB89712 is not set +# CONFIG_MTD_SA1100 is not set +# CONFIG_MTD_2PARTS_IPAQ is not set +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set +CONFIG_MTD_LUBBOCK=y +# CONFIG_MTD_EPXA10DB is not set +# CONFIG_MTD_FORTUNET is not set +# CONFIG_MTD_PCI is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLKMTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set +# CONFIG_PNPBIOS is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_CISS_SCSI_TAPE is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_UMEM is not set +# CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_RAM is not set +# CONFIG_BLK_DEV_INITRD is not set + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_MD_MULTIPATH is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +# CONFIG_PACKET is not set +# CONFIG_NETLINK_DEV is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_PNP=y +# CONFIG_IP_PNP_DHCP is not set +CONFIG_IP_PNP_BOOTP=y +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set +# CONFIG_VLAN_8021Q is not set + +# +# +# +# CONFIG_IPX is not set +# CONFIG_ATALK is not set + +# +# Appletalk devices +# +# CONFIG_DEV_APPLETALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_ETHERTAP is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_ARM_AM79C961A is not set +# CONFIG_SUNLANCE is not set +# CONFIG_SUNBMAC is not set +# CONFIG_SUNQE is not set +# CONFIG_SUNGEM is not set +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_LANCE is not set +CONFIG_NET_VENDOR_SMC=y +# CONFIG_WD80x3 is not set +# CONFIG_ULTRAMCA is not set +# CONFIG_ULTRA is not set +# CONFIG_ULTRA32 is not set +CONFIG_SMC9194=y +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_NET_ISA is not set +# CONFIG_NET_PCI is not set +# CONFIG_NET_POCKET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_DL2K is not set +# CONFIG_E1000 is not set +# CONFIG_MYRI_SBUS is not set +# CONFIG_NS83820 is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_TIGON3 is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PLIP is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# Tulip family network device support +# +# CONFIG_NET_TULIP is not set + +# +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +# CONFIG_PCMCIA_3C589 is not set +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +CONFIG_PCMCIA_PCNET=y +# CONFIG_PCMCIA_NMCLAN is not set +# CONFIG_PCMCIA_SMC91C92 is not set +# CONFIG_PCMCIA_XIRC2PS is not set +# CONFIG_PCMCIA_AXNET is not set +# CONFIG_ARCNET_COM20020_CS is not set +# CONFIG_PCMCIA_IBMTR is not set +# CONFIG_NET_PCMCIA_RADIO is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# ATA/IDE/MFM/RLL support +# +# CONFIG_IDE is not set +# CONFIG_BLK_DEV_HD is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN_BOOL is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_KEYBDEV is not set +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_GAMEPORT is not set +CONFIG_SOUND_GAMEPORT=y +# CONFIG_GAMEPORT_NS558 is not set +# CONFIG_GAMEPORT_L4 is not set +# CONFIG_INPUT_EMU10K1 is not set +# CONFIG_GAMEPORT_PCIGAME is not set +# CONFIG_GAMEPORT_FM801 is not set +# CONFIG_GAMEPORT_CS461x is not set +# CONFIG_SERIO is not set +# CONFIG_SERIO_SERPORT is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_JOYSTICK_ANALOG is not set +# CONFIG_JOYSTICK_A3D is not set +# CONFIG_JOYSTICK_ADI is not set +# CONFIG_JOYSTICK_COBRA is not set +# CONFIG_JOYSTICK_GF2K is not set +# CONFIG_JOYSTICK_GRIP is not set +# CONFIG_JOYSTICK_INTERACT is not set +# CONFIG_JOYSTICK_SIDEWINDER is not set +# CONFIG_JOYSTICK_TMDC is not set +# CONFIG_JOYSTICK_IFORCE_USB is not set +# CONFIG_JOYSTICK_IFORCE_232 is not set +# CONFIG_JOYSTICK_WARRIOR is not set +# CONFIG_JOYSTICK_MAGELLAN is not set +# CONFIG_JOYSTICK_SPACEORB is not set +# CONFIG_JOYSTICK_SPACEBALL is not set +# CONFIG_JOYSTICK_STINGER is not set +# CONFIG_JOYSTICK_DB9 is not set +# CONFIG_JOYSTICK_GAMECON is not set +# CONFIG_JOYSTICK_TURBOGRAFX is not set + +# +# Character devices +# +# CONFIG_VT is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +# CONFIG_SERIAL_8250_CS is not set +# CONFIG_SERIAL_8250_EXTENDED is not set +# CONFIG_SERIAL_8250_MANY_PORTS is not set +# CONFIG_SERIAL_8250_SHARE_IRQ is not set +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +# CONFIG_SERIAL_8250_MULTIPORT is not set +# CONFIG_SERIAL_8250_RSA is not set + +# +# Non-8250 serial port support +# +# CONFIG_ATOMWIDE_SERIAL is not set +# CONFIG_DUALSP_SERIAL is not set +# CONFIG_SERIAL_ANAKIN is not set +# CONFIG_SERIAL_ANAKIN_CONSOLE is not set +# CONFIG_SERIAL_AMBA is not set +# CONFIG_SERIAL_AMBA_CONSOLE is not set +# CONFIG_SERIAL_CLPS711X is not set +# CONFIG_SERIAL_CLPS711X_CONSOLE is not set +# CONFIG_SERIAL_CLPS711X_OLD_NAME is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +# CONFIG_SERIAL_UART00 is not set +# CONFIG_SERIAL_UART00_CONSOLE is not set +# CONFIG_SERIAL_SA1100 is not set +# CONFIG_SERIAL_SA1100_CONSOLE is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=256 + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# L3 serial bus support +# +# CONFIG_L3 is not set +# CONFIG_L3_ALGOBIT is not set +# CONFIG_L3_BIT_SA1100_GPIO is not set + +# +# Other L3 adapters +# +# CONFIG_L3_SA1111 is not set +# CONFIG_BIT_SA1100_GPIO is not set + +# +# Mice +# +CONFIG_BUSMOUSE=y +# CONFIG_ATIXL_BUSMOUSE is not set +# CONFIG_LOGIBUSMOUSE is not set +# CONFIG_MS_BUSMOUSE is not set +CONFIG_MOUSE=y +CONFIG_PSMOUSE=y +# CONFIG_82C710_MOUSE is not set +# CONFIG_PC110_PAD is not set +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# PCMCIA character devices +# +# CONFIG_SYNCLINK_CS is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_QFMT_V1 is not set +# CONFIG_QFMT_V2 is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_REISERFS_PROC_INFO is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EXT3_FS is not set +# CONFIG_JBD is not set +# CONFIG_JBD_DEBUG is not set +CONFIG_FAT_FS=y +CONFIG_MSDOS_FS=y +# CONFIG_UMSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +# CONFIG_JFFS2_FS_NAND is not set +# CONFIG_CRAMFS is not set +# CONFIG_TMPFS is not set +CONFIG_RAMFS=y +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_ZISOFS is not set +# CONFIG_JFS_FS is not set +# CONFIG_JFS_DEBUG is not set +# CONFIG_JFS_STATISTICS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +# CONFIG_INTERMEZZO_FS is not set +CONFIG_NFS_FS=y +# CONFIG_NFS_V3 is not set +CONFIG_ROOT_NFS=y +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +# CONFIG_NFSD_TCP is not set +CONFIG_SUNRPC=y +CONFIG_LOCKD=y +# CONFIG_EXPORTFS is not set +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set +# CONFIG_ZISOFS_FS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +# CONFIG_SMB_NLS is not set +CONFIG_NLS=y + +# +# Native Language Support +# +CONFIG_NLS_DEFAULT="iso8859-1" +# CONFIG_NLS_CODEPAGE_437 is not set +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1250 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +CONFIG_NLS_ISO8859_1=y +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_UTF8 is not set + +# +# Sound +# +CONFIG_SOUND=y + +# +# Open Sound System +# +CONFIG_SOUND_PRIME=y +# CONFIG_SOUND_BT878 is not set +# CONFIG_SOUND_CMPCI is not set +# CONFIG_SOUND_EMU10K1 is not set +# CONFIG_MIDI_EMU10K1 is not set +# CONFIG_SOUND_FUSION is not set +# CONFIG_SOUND_CS4281 is not set +# CONFIG_SOUND_ES1370 is not set +# CONFIG_SOUND_ES1371 is not set +# CONFIG_SOUND_ESSSOLO1 is not set +# CONFIG_SOUND_MAESTRO is not set +# CONFIG_SOUND_MAESTRO3 is not set +# CONFIG_SOUND_ICH is not set +# CONFIG_SOUND_RME96XX is not set +# CONFIG_SOUND_SONICVIBES is not set +# CONFIG_SOUND_TRIDENT is not set +# CONFIG_SOUND_MSNDCLAS is not set +# CONFIG_SOUND_MSNDPIN is not set +# CONFIG_SOUND_VIA82CXXX is not set +# CONFIG_MIDI_VIA82CXXX is not set +# CONFIG_SOUND_OSS is not set +# CONFIG_SOUND_WAVEARTIST is not set +# CONFIG_SOUND_PXA_AC97 is not set +# CONFIG_SOUND_TVMIXER is not set + +# +# Advanced Linux Sound Architecture +# +# CONFIG_SND is not set + +# +# Multimedia Capabilities Port drivers +# +# CONFIG_MCP is not set +# CONFIG_MCP_SA1100 is not set +# CONFIG_MCP_UCB1200 is not set +# CONFIG_MCP_UCB1200_AUDIO is not set +# CONFIG_MCP_UCB1200_TS is not set +# CONFIG_MCP_UCB1400_TS is not set + +# +# Console Switches +# +# CONFIG_SWITCHES is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# Bluetooth support +# +# CONFIG_BT is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_USER=y +CONFIG_DEBUG_INFO=y +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_SLAB is not set +CONFIG_MAGIC_SYSRQ=y +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_WAITQ is not set +CONFIG_DEBUG_BUGVERBOSE=y +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_LL=y +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set + +# +# Library routines +# +CONFIG_CRC32=y +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y diff -prauN linux-2.6.0-test5/arch/arm/configs/lusl7200_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/lusl7200_defconfig --- linux-2.6.0-test5/arch/arm/configs/lusl7200_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/lusl7200_defconfig 2003-09-25 19:15:44.000000000 -0700 @@ -0,0 +1,488 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set +# CONFIG_GENERIC_BUST_SPINLOCK is not set +# CONFIG_GENERIC_ISA_DMA is not set + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y + +# +# General setup +# +# CONFIG_NET is not set +CONFIG_SYSVIPC=y +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_SYSCTL=y + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +CONFIG_KMOD=y + +# +# System Type +# +# CONFIG_ARCH_ADIFCC is not set +# CONFIG_ARCH_ANAKIN is not set +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_CAMELOT is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_IOP310 is not set +CONFIG_ARCH_L7200=y +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_SHARK is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Archimedes/A5000 Implementations (select only ONE) +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_ADSBITSY is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_H3100 is not set +# CONFIG_SA1100_H3600 is not set +# CONFIG_SA1100_H3800 is not set +# CONFIG_SA1100_H3XXX is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FLEXANET is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_GRAPHICSMASTER is not set +# CONFIG_SA1100_BADGE4 is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_PT_SYSTEM3 is not set +# CONFIG_SA1100_SHANNON is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_SIMPAD is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +# CONFIG_SA1100_STORK is not set +# CONFIG_SA1100_USB is not set +# CONFIG_SA1100_USB_NETLINK is not set +# CONFIG_SA1100_USB_CHAR is not set +# CONFIG_H3600_SLEEVE is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_AUTCPU12 is not set +# CONFIG_ARCH_CDB89712 is not set +# CONFIG_ARCH_CLEP7312 is not set +# CONFIG_ARCH_EDB7211 is not set +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_FORTUNET is not set +# CONFIG_ARCH_EP7211 is not set +# CONFIG_ARCH_EP7212 is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set + +# +# Processor Type +# +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_32v5 is not set +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +CONFIG_CPU_ARM720T=y +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM922T is not set +# CONFIG_CPU_ARM926T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +# CONFIG_CPU_SA1100 is not set +# CONFIG_CPU_XSCALE is not set +# CONFIG_XSCALE_PMU is not set + +# +# Processor Features +# +# CONFIG_ARM_THUMB is not set + +# +# General setup +# +# CONFIG_DISCONTIGMEM is not set +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +CONFIG_FIQ=y +CONFIG_ZBOOT_ROM=y +CONFIG_ZBOOT_ROM_TEXT=00010000 +CONFIG_ZBOOT_ROM_BSS=f03e0000 +# CONFIG_HOTPLUG is not set +# CONFIG_PCMCIA is not set + +# +# At least one math emulation must be selected +# +# CONFIG_FPE_NWFPE is not set +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +CONFIG_BINFMT_AOUT=y +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_PREEMPT is not set +# CONFIG_APM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="console=tty0 console=ttyLU1,115200 root=/dev/ram initrd=0xf1000000,0x005dac7b mem=32M" +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +# CONFIG_MTD is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set +# CONFIG_PNPBIOS is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_CISS_SCSI_TAPE is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_UMEM is not set +# CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_MD_MULTIPATH is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# ATA/IDE/MFM/RLL support +# +# CONFIG_IDE is not set +# CONFIG_BLK_DEV_HD is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# + +# +# Input device support +# +# CONFIG_INPUT is not set +# CONFIG_INPUT_KEYBDEV is not set +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set +# CONFIG_GAMEPORT is not set +CONFIG_SOUND_GAMEPORT=y +# CONFIG_GAMEPORT_NS558 is not set +# CONFIG_GAMEPORT_L4 is not set +# CONFIG_INPUT_EMU10K1 is not set +# CONFIG_GAMEPORT_PCIGAME is not set +# CONFIG_GAMEPORT_FM801 is not set +# CONFIG_GAMEPORT_CS461x is not set +# CONFIG_SERIO is not set +# CONFIG_SERIO_SERPORT is not set + +# +# Character devices +# +# CONFIG_VT is not set +# CONFIG_SERIAL_EXTENDED is not set +CONFIG_SERIAL_NONSTANDARD=y +# CONFIG_COMPUTONE is not set +# CONFIG_ROCKETPORT is not set +# CONFIG_CYCLADES is not set +# CONFIG_DIGIEPCA is not set +# CONFIG_DIGI is not set +# CONFIG_ESPSERIAL is not set +# CONFIG_MOXA_INTELLIO is not set +# CONFIG_MOXA_SMARTIO is not set +# CONFIG_ISI is not set +# CONFIG_SYNCLINK is not set +# CONFIG_SYNCLINKMP is not set +# CONFIG_N_HDLC is not set +# CONFIG_RISCOM8 is not set +# CONFIG_SPECIALIX is not set +# CONFIG_SX is not set +# CONFIG_RIO is not set +# CONFIG_STALDRV is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set +# CONFIG_SERIAL_8250_CONSOLE is not set +# CONFIG_SERIAL_8250_EXTENDED is not set +# CONFIG_SERIAL_8250_MANY_PORTS is not set +# CONFIG_SERIAL_8250_SHARE_IRQ is not set +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +# CONFIG_SERIAL_8250_MULTIPORT is not set +# CONFIG_SERIAL_8250_RSA is not set + +# +# Non-8250 serial port support +# + +# +# ARM Serial drivers +# +# CONFIG_ATOMWIDE_SERIAL is not set +# CONFIG_DUALSP_SERIAL is not set +# CONFIG_SERIAL_ANAKIN is not set +# CONFIG_SERIAL_ANAKIN_CONSOLE is not set +# CONFIG_SERIAL_AMBA is not set +# CONFIG_SERIAL_AMBA_CONSOLE is not set +# CONFIG_SERIAL_CLPS711X is not set +# CONFIG_SERIAL_CLPS711X_CONSOLE is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +# CONFIG_SERIAL_UART00 is not set +# CONFIG_SERIAL_UART00_CONSOLE is not set +# CONFIG_SERIAL_SA1100 is not set +# CONFIG_SERIAL_SA1100_CONSOLE is not set +# CONFIG_UNIX98_PTYS is not set + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# L3 serial bus support +# +# CONFIG_L3 is not set +# CONFIG_L3_ALGOBIT is not set +# CONFIG_L3_BIT_SA1100_GPIO is not set + +# +# Other L3 adapters +# +# CONFIG_L3_SA1111 is not set +# CONFIG_BIT_SA1100_GPIO is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_MOUSE is not set +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_QFMT_V1 is not set +# CONFIG_QFMT_V2 is not set +# CONFIG_QIFACE_COMPAT is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_REISERFS_PROC_INFO is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EXT3_FS is not set +# CONFIG_JBD is not set +# CONFIG_JBD_DEBUG is not set +# CONFIG_FAT_FS is not set +# CONFIG_MSDOS_FS is not set +# CONFIG_UMSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +# CONFIG_JFFS2_FS is not set +# CONFIG_CRAMFS is not set +# CONFIG_TMPFS is not set +CONFIG_RAMFS=y +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_ZISOFS is not set +# CONFIG_JFS_FS is not set +# CONFIG_JFS_DEBUG is not set +# CONFIG_JFS_STATISTICS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +# CONFIG_DEVPTS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_SMB_FS is not set +# CONFIG_ZISOFS_FS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +# CONFIG_SMB_NLS is not set +# CONFIG_NLS is not set + +# +# Multimedia Capabilities Port drivers +# +# CONFIG_MCP is not set +# CONFIG_MCP_SA1100 is not set +# CONFIG_MCP_UCB1200 is not set +# CONFIG_MCP_UCB1200_AUDIO is not set +# CONFIG_MCP_UCB1200_TS is not set + +# +# Console Switches +# +# CONFIG_SWITCHES is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_USER=y +CONFIG_DEBUG_INFO=y +# CONFIG_DEBUG_KERNEL is not set +# CONFIG_DEBUG_SLAB is not set +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_WAITQ is not set +# CONFIG_DEBUG_BUGVERBOSE is not set +# CONFIG_DEBUG_ERRORS is not set +# CONFIG_DEBUG_LL is not set +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set + +# +# Library routines +# +# CONFIG_CRC32 is not set +# CONFIG_ZLIB_INFLATE is not set +# CONFIG_ZLIB_DEFLATE is not set diff -prauN linux-2.6.0-test5/arch/arm/configs/neponset_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/neponset_defconfig --- linux-2.6.0-test5/arch/arm/configs/neponset_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/neponset_defconfig 2003-09-25 19:15:44.000000000 -0700 @@ -0,0 +1,895 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +CONFIG_MMU=y +CONFIG_SWAP=y +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y + +# +# General setup +# +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set + +# +# System Type +# +# CONFIG_ARCH_ADIFCC is not set +# CONFIG_ARCH_ANAKIN is not set +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_PXA is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_CAMELOT is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_IOP310 is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_SHARK is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Archimedes/A5000 Implementations (select only ONE) +# + +# +# CLPS711X/EP721X Implementations +# + +# +# Epxa10db +# + +# +# Footbridge Implementations +# + +# +# IOP310 Implementation Options +# + +# +# IOP310 Chipset Features +# + +# +# Intel PXA250/210 Implementations +# + +# +# SA11x0 Implementations +# +CONFIG_SA1100_ASSABET=y +CONFIG_ASSABET_NEPONSET=y +# CONFIG_SA1100_ADSBITSY is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_H3100 is not set +# CONFIG_SA1100_H3600 is not set +# CONFIG_SA1100_H3800 is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FLEXANET is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_GRAPHICSMASTER is not set +# CONFIG_SA1100_BADGE4 is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_PT_SYSTEM3 is not set +# CONFIG_SA1100_SHANNON is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_SIMPAD is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +# CONFIG_SA1100_STORK is not set +CONFIG_SA1100_USB=m +CONFIG_SA1100_USB_NETLINK=m +CONFIG_SA1100_USB_CHAR=m +CONFIG_SA1111=y +CONFIG_FORCE_MAX_ZONEORDER=9 + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_SA1100=y +CONFIG_CPU_32v4=y + +# +# Processor Features +# + +# +# General setup +# +CONFIG_DISCONTIGMEM=y +CONFIG_ISA=y +CONFIG_ZBOOT_ROM=y +CONFIG_ZBOOT_ROM_TEXT=0x80000 +CONFIG_ZBOOT_ROM_BSS=0xc1000000 +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_24_API=y +CONFIG_CPU_FREQ_26_API=y +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=y +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +CONFIG_PCMCIA_SA1100=y +CONFIG_PCMCIA_SA1111=y + +# +# At least one math emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +CONFIG_BINFMT_AOUT=y +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +CONFIG_PM=y +# CONFIG_PREEMPT is not set +CONFIG_APM=y +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="console=ttySA0,38400n8 cpufreq=221200 rw root=/dev/mtdblock2 mtdparts=sa1100:512K(boot),1M(kernel),2560K(initrd),4M(root) load_ramdisk=1 prompt_ramdisk=0 mem=32M noinitrd initrd=0xc0800000,3M" +CONFIG_LEDS=y +CONFIG_LEDS_TIMER=y +CONFIG_LEDS_CPU=y +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_PARTITIONS=y +CONFIG_MTD_CONCAT=y +CONFIG_MTD_REDBOOT_PARTS=y +CONFIG_MTD_CMDLINE_PARTS=y +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +# CONFIG_MTD_CHAR is not set +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_NOSWAP=y +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_GEOMETRY is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +CONFIG_MTD_RAM=y +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +# CONFIG_MTD_OBSOLETE_CHIPS is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +CONFIG_MTD_SA1100=y +# CONFIG_MTD_EDB7312 is not set +CONFIG_MTD_PCMCIA=y +# CONFIG_MTD_UCLINUX is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLKMTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=8192 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_PACKET_MMAP=y +# CONFIG_NETLINK_DEV is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set + +# +# SCTP Configuration (EXPERIMENTAL) +# +CONFIG_IPV6_SCTP__=y +# CONFIG_IP_SCTP is not set +# CONFIG_ATM is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_LLC is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_ETHERTAP is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_LANCE is not set +CONFIG_NET_VENDOR_SMC=y +# CONFIG_WD80x3 is not set +# CONFIG_ULTRA is not set +CONFIG_SMC9194=y +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_AT1700 is not set +# CONFIG_DEPCA is not set +# CONFIG_HP100 is not set +# CONFIG_NET_ISA is not set +# CONFIG_NET_PCI is not set +# CONFIG_NET_POCKET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +# CONFIG_PCMCIA_3C589 is not set +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +CONFIG_PCMCIA_PCNET=y +# CONFIG_PCMCIA_NMCLAN is not set +# CONFIG_PCMCIA_SMC91C92 is not set +# CONFIG_PCMCIA_XIRC2PS is not set +# CONFIG_PCMCIA_AXNET is not set +# CONFIG_NET_PCMCIA_RADIO is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# ATA/ATAPI/MFM/RLL support +# +# CONFIG_IDE is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN_BOOL is not set + +# +# Input device support +# +CONFIG_INPUT=y + +# +# Userland interfaces +# +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_TSDEV=y +CONFIG_INPUT_TSDEV_SCREEN_X=240 +CONFIG_INPUT_TSDEV_SCREEN_Y=320 +CONFIG_INPUT_TSLIBDEV=y +# CONFIG_INPUT_EVDEV is not set +# CONFIG_INPUT_EVBUG is not set + +# +# Input I/O drivers +# +# CONFIG_GAMEPORT is not set +CONFIG_SOUND_GAMEPORT=y +CONFIG_SERIO=y +# CONFIG_SERIO_I8042 is not set +CONFIG_SERIO_SERPORT=m +# CONFIG_SERIO_CT82C710 is not set +CONFIG_SERIO_SA1111=y + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +CONFIG_KEYBOARD_ATKBD=y +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +CONFIG_INPUT_TOUCHSCREEN=y +# CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_INPUT_MISC is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +CONFIG_SERIAL_NONSTANDARD=y +# CONFIG_COMPUTONE is not set +# CONFIG_ROCKETPORT is not set +# CONFIG_CYCLADES is not set +# CONFIG_DIGIEPCA is not set +# CONFIG_DIGI is not set +# CONFIG_ESPSERIAL is not set +# CONFIG_MOXA_INTELLIO is not set +# CONFIG_MOXA_SMARTIO is not set +# CONFIG_ISI is not set +# CONFIG_SYNCLINK is not set +# CONFIG_SYNCLINKMP is not set +# CONFIG_N_HDLC is not set +# CONFIG_RISCOM8 is not set +# CONFIG_SPECIALIX is not set +# CONFIG_SX is not set +# CONFIG_RIO is not set +# CONFIG_STALDRV is not set + +# +# Serial drivers +# +CONFIG_SERIAL_8250=y +# CONFIG_SERIAL_8250_CONSOLE is not set +CONFIG_SERIAL_8250_CS=y +# CONFIG_SERIAL_8250_EXTENDED is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=32 + +# +# I2C support +# +CONFIG_I2C=y +CONFIG_I2C_ALGOBIT=y +# CONFIG_I2C_ELV is not set +# CONFIG_I2C_VELLEMAN is not set +# CONFIG_SCx200_ACB is not set +CONFIG_I2C_BIT_SA1100_GPIO=y +# CONFIG_I2C_ALGOPCF is not set +CONFIG_I2C_CHARDEV=y +CONFIG_I2C_PROC=y + +# +# L3 serial bus support +# +CONFIG_L3=y +CONFIG_L3_ALGOBIT=y +CONFIG_L3_BIT_SA1100_GPIO=y +CONFIG_BIT_SA1100_GPIO=y + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +CONFIG_WATCHDOG=y +# CONFIG_WATCHDOG_NOWAYOUT is not set +# CONFIG_SOFT_WATCHDOG is not set +# CONFIG_WDT is not set +# CONFIG_WDTPCI is not set +# CONFIG_PCWATCHDOG is not set +# CONFIG_ACQUIRE_WDT is not set +# CONFIG_ADVANTECH_WDT is not set +CONFIG_SA1100_WATCHDOG=m +# CONFIG_EUROTECH_WDT is not set +# CONFIG_IB700_WDT is not set +# CONFIG_I810_TCO is not set +# CONFIG_MIXCOMWD is not set +# CONFIG_SCx200_WDT is not set +# CONFIG_60XX_WDT is not set +# CONFIG_W83877F_WDT is not set +# CONFIG_MACHZ_WDT is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_GEN_RTC is not set +CONFIG_SA1100_RTC=y +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# PCMCIA character devices +# +# CONFIG_SYNCLINK_CS is not set +# CONFIG_RAW_DRIVER is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EXT3_FS is not set +# CONFIG_JBD is not set +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +CONFIG_VFAT_FS=m +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +# CONFIG_JFFS2_FS_NAND is not set +# CONFIG_CRAMFS is not set +# CONFIG_TMPFS is not set +CONFIG_RAMFS=y +# CONFIG_ISO9660_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UDF_FS is not set +# CONFIG_UFS_FS is not set +# CONFIG_XFS_FS is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +# CONFIG_INTERMEZZO_FS is not set +CONFIG_NFS_FS=y +# CONFIG_NFS_V3 is not set +# CONFIG_NFS_V4 is not set +# CONFIG_NFSD is not set +CONFIG_SUNRPC=y +CONFIG_LOCKD=y +# CONFIG_EXPORTFS is not set +# CONFIG_CIFS is not set +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +# CONFIG_MSDOS_PARTITION is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_EFI_PARTITION is not set +CONFIG_NLS=y + +# +# Native Language Support +# +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=m +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1250 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +CONFIG_NLS_ISO8859_1=m +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_UTF8 is not set + +# +# Console drivers +# +# CONFIG_VGA_CONSOLE is not set + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +CONFIG_FB_SA1100=y +# CONFIG_FB_VIRTUAL is not set +# CONFIG_FBCON_ADVANCED is not set +CONFIG_FBCON_CFB2=y +CONFIG_FBCON_CFB4=y +CONFIG_FBCON_CFB8=y +CONFIG_FBCON_CFB16=y +CONFIG_FBCON_FONTWIDTH8_ONLY=y +# CONFIG_FONT_SUN8x16 is not set +CONFIG_FBCON_FONTS=y +# CONFIG_FONT_8x8 is not set +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_PEARL_8x8 is not set +CONFIG_FONT_ACORN_8x8=y +# CONFIG_FONT_MINI_4x6 is not set + +# +# Sound +# +CONFIG_SOUND=y + +# +# Open Sound System +# +CONFIG_SOUND_PRIME=y +# CONFIG_SOUND_BT878 is not set +# CONFIG_SOUND_FUSION is not set +# CONFIG_SOUND_CS4281 is not set +# CONFIG_SOUND_ESSSOLO1 is not set +# CONFIG_SOUND_MAESTRO is not set +# CONFIG_SOUND_SONICVIBES is not set +# CONFIG_SOUND_TRIDENT is not set +# CONFIG_SOUND_MSNDCLAS is not set +# CONFIG_SOUND_MSNDPIN is not set +CONFIG_SOUND_SA1100=y +CONFIG_SOUND_UDA1341=y +CONFIG_SOUND_ASSABET_UDA1341=y +CONFIG_SOUND_SA1111_UDA1341=y +# CONFIG_SOUND_SA1100SSP is not set +# CONFIG_SOUND_OSS is not set +# CONFIG_SOUND_TVMIXER is not set + +# +# Advanced Linux Sound Architecture +# +# CONFIG_SND is not set + +# +# Misc devices +# + +# +# Multimedia Capabilities Port drivers +# +CONFIG_MCP=y +CONFIG_MCP_SA1100=y +CONFIG_MCP_UCB1200=y +CONFIG_MCP_UCB1200_AUDIO=m +CONFIG_MCP_UCB1200_TS=y + +# +# Console Switches +# +# CONFIG_SWITCHES is not set + +# +# USB support +# +CONFIG_USB=m +CONFIG_USB_DEBUG=y + +# +# Miscellaneous USB options +# +CONFIG_USB_DEVICEFS=y +# CONFIG_USB_LONG_TIMEOUT is not set +# CONFIG_USB_BANDWIDTH is not set +# CONFIG_USB_DYNAMIC_MINORS is not set + +# +# USB Host Controller Drivers +# +# CONFIG_USB_EHCI_HCD is not set +CONFIG_USB_OHCI_HCD=m +# CONFIG_USB_UHCI_HCD_ALT is not set +# CONFIG_USB_SL811HS is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH_TTY is not set +# CONFIG_USB_MIDI is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# SCSI support is needed for USB Storage +# + +# +# USB Human Interface Devices (HID) +# +# CONFIG_USB_HID is not set + +# +# USB HID Boot Protocol drivers +# +# CONFIG_USB_KBD is not set +CONFIG_USB_MOUSE=m +# CONFIG_USB_AIPTEK is not set +# CONFIG_USB_WACOM is not set +# CONFIG_USB_POWERMATE is not set +# CONFIG_USB_XPAD is not set + +# +# USB Imaging devices +# +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set + +# +# USB Multimedia devices +# +# CONFIG_USB_DABUSB is not set + +# +# Video4Linux support is needed for USB Multimedia device support +# + +# +# USB Network adaptors +# +# CONFIG_USB_CATC is not set +# CONFIG_USB_CDCETHER is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_RTL8150 is not set +# CONFIG_USB_USBNET is not set + +# +# USB port drivers +# + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_TIGL is not set +# CONFIG_USB_AUERSWALD is not set +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_BRLVGER is not set +# CONFIG_USB_LCD is not set +# CONFIG_USB_TEST is not set + +# +# Bluetooth support +# +# CONFIG_BT is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_USER=y +# CONFIG_DEBUG_INFO is not set +CONFIG_DEBUG_KERNEL=y +CONFIG_DEBUG_SLAB=y +CONFIG_MAGIC_SYSRQ=y +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_WAITQ is not set +CONFIG_DEBUG_BUGVERBOSE=y +CONFIG_DEBUG_ERRORS=y +# CONFIG_KALLSYMS is not set +CONFIG_DEBUG_LL=y + +# +# Security options +# +CONFIG_SECURITY_CAPABILITIES=y + +# +# Cryptographic options +# +# CONFIG_CRYPTO is not set + +# +# Library routines +# +# CONFIG_CRC32 is not set +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y diff -prauN linux-2.6.0-test5/arch/arm/configs/omnimeter_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/omnimeter_defconfig --- linux-2.6.0-test5/arch/arm/configs/omnimeter_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/omnimeter_defconfig 2003-09-25 19:15:44.000000000 -0700 @@ -0,0 +1,571 @@ +# +# Automatically generated by make menuconfig: don't edit +# +CONFIG_ARM=y +# CONFIG_SBUS is not set +CONFIG_UID16=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +CONFIG_KMOD=y + +# +# System Type +# +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_CLPS711X is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Footbridge Implementations +# + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_SA1100_BRUTUS is not set +CONFIG_SA1100_OMNIMETER=y +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_BITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_USB is not set +# CONFIG_SA1100_FREQUENCY_SCALE is not set +# CONFIG_SA1100_VOLTAGE_SCALE is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set +CONFIG_CPU_32v4=y +CONFIG_CPU_SA1100=y +CONFIG_DISCONTIGMEM=y + +# +# General setup +# +# CONFIG_ANGELBOOT is not set +# CONFIG_PCI is not set +CONFIG_ISA=y +# CONFIG_ISA_DMA is not set +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=y +CONFIG_I82365=y +# CONFIG_PCMCIA_CLPS6700 is not set +CONFIG_SA1100_PCMCIA=y +# CONFIG_H3600_SLEEVE is not set +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +CONFIG_NWFPE=y +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +CONFIG_BINFMT_AOUT=y +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="keepinitrd mem=16M root=/dev/ram ramdisk=8192 initrd=0xd0000000,4M" +# CONFIG_LEDS is not set +# CONFIG_ALIGNMENT_TRAP is not set + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +# CONFIG_MTD is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +CONFIG_BLK_DEV_LOOP=m +CONFIG_BLK_DEV_NBD=m +# CONFIG_BLK_DEV_RAM is not set +# CONFIG_BLK_DEV_INITRD is not set +# CONFIG_BLK_DEV_FLASH is not set + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_PACKET_MMAP=y +CONFIG_NETLINK=y +CONFIG_RTNETLINK=y +# CONFIG_NETLINK_DEV is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_IP_MROUTE is not set +# CONFIG_ARPD is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set + +# +# IP: Netfilter Configuration +# +# CONFIG_IP_NF_CONNTRACK is not set +# CONFIG_IP_NF_QUEUE is not set +# CONFIG_IP_NF_IPTABLES is not set +# CONFIG_IP_NF_COMPAT_IPCHAINS is not set +# CONFIG_IP_NF_COMPAT_IPFWADM is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_ETHERTAP is not set +# CONFIG_NET_SB1000 is not set +# CONFIG_NET_SA1100_USB_HOST is not set +# CONFIG_NET_SA1100_USB_CLIENT is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_LANCE is not set +# CONFIG_NET_VENDOR_SMC is not set +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_AT1700 is not set +# CONFIG_DEPCA is not set +# CONFIG_HP100 is not set +# CONFIG_NET_ISA is not set +# CONFIG_NET_PCI is not set +# CONFIG_NET_POCKET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +CONFIG_PCMCIA_3C589=y +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +CONFIG_PCMCIA_PCNET=y +# CONFIG_PCMCIA_NMCLAN is not set +# CONFIG_PCMCIA_SMC91C92 is not set +# CONFIG_PCMCIA_XIRC2PS is not set +# CONFIG_ARCNET_COM20020_CS is not set +# CONFIG_PCMCIA_IBMTR is not set +CONFIG_NET_PCMCIA_RADIO=y +# CONFIG_PCMCIA_RAYCS is not set +# CONFIG_PCMCIA_NETWAVE is not set +CONFIG_PCMCIA_WAVELAN=y +CONFIG_AIRONET4500_CS=y +CONFIG_PCMCIA_WVLAN=y +CONFIG_PCMCIA_NETCARD=y + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=y + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=y +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=y +# CONFIG_IDEDISK_MULTI_MODE is not set +CONFIG_BLK_DEV_IDECS=y +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +# CONFIG_IDE_CHIPSETS is not set +# CONFIG_IDEDMA_AUTO is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +# CONFIG_INPUT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +# CONFIG_TOUCHSCREEN_UCB1200 is not set +# CONFIG_TOUCHSCREEN_BITSY is not set +# CONFIG_TOUCHSCREEN_BITSY_KEYBOARD is not set +# CONFIG_H3600_SLEEVE is not set +CONFIG_SERIAL=y +# CONFIG_SERIAL_CONSOLE is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=9600 +# CONFIG_TOUCHSCREEN_UCB1200 is not set +# CONFIG_TOUCHSCREEN_BITSY is not set +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=32 + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +CONFIG_MOUSE=m +# CONFIG_PSMOUSE is not set +# CONFIG_82C710_MOUSE is not set +# CONFIG_PC110_PAD is not set + +# +# Joysticks +# +# CONFIG_JOYSTICK is not set +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_SA1100_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set +CONFIG_PCMCIA_SERIAL=y + +# +# PCMCIA character device support +# +# CONFIG_PCMCIA_SERIAL_CS is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +CONFIG_FAT_FS=y +CONFIG_MSDOS_FS=y +# CONFIG_UMSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +# CONFIG_CRAMFS is not set +# CONFIG_RAMFS is not set +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_MINIX_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +# CONFIG_DEVPTS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_SYSV_FS_WRITE is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +CONFIG_NFS_FS=y +# CONFIG_NFS_V3 is not set +# CONFIG_ROOT_NFS is not set +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +CONFIG_SUNRPC=y +CONFIG_LOCKD=y +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_MOUNT_SUBDIR is not set +# CONFIG_NCPFS_NDS_DOMAINS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +CONFIG_NLS=y + +# +# Native Language Support +# +CONFIG_NLS_DEFAULT="iso8859-1" +# CONFIG_NLS_CODEPAGE_437 is not set +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_ISO8859_1 is not set +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_UTF8 is not set + +# +# Console drivers +# +CONFIG_PC_KEYMAP=y +# CONFIG_VGA_CONSOLE is not set +CONFIG_FB=y + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_ACORN is not set +# CONFIG_FB_CLPS711X is not set +# CONFIG_FB_CYBER2000 is not set +CONFIG_FB_SA1100=y +# CONFIG_FB_VIRTUAL is not set +CONFIG_FBCON_ADVANCED=y +# CONFIG_FBCON_MFB is not set +# CONFIG_FBCON_CFB2 is not set +CONFIG_FBCON_CFB4=y +# CONFIG_FBCON_CFB8 is not set +# CONFIG_FBCON_CFB16 is not set +# CONFIG_FBCON_CFB24 is not set +# CONFIG_FBCON_CFB32 is not set +# CONFIG_FBCON_AFB is not set +# CONFIG_FBCON_ILBM is not set +# CONFIG_FBCON_IPLAN2P2 is not set +# CONFIG_FBCON_IPLAN2P4 is not set +# CONFIG_FBCON_IPLAN2P8 is not set +# CONFIG_FBCON_MAC is not set +# CONFIG_FBCON_VGA_PLANES is not set +# CONFIG_FBCON_VGA is not set +# CONFIG_FBCON_HGA is not set +CONFIG_FBCON_FONTWIDTH8_ONLY=y +CONFIG_FBCON_FONTS=y +CONFIG_FONT_8x8=y +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_ERRORS=y +# CONFIG_DEBUG_USER is not set +# CONFIG_DEBUG_INFO is not set +# CONFIG_MAGIC_SYSRQ is not set +CONFIG_DEBUG_LL=y diff -prauN linux-2.6.0-test5/arch/arm/configs/pangolin_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/pangolin_defconfig --- linux-2.6.0-test5/arch/arm/configs/pangolin_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/pangolin_defconfig 2003-09-25 19:15:44.000000000 -0700 @@ -0,0 +1,742 @@ +# +# Automatically generated by make menuconfig: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set + +# +# System Type +# +# CONFIG_ARCH_ANAKIN is not set +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_SHARK is not set + +# +# Archimedes/A5000 Implementations +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_BITSY is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FLEXANET is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +CONFIG_SA1100_PANGOLIN=y +CONFIG_SA1100_PANGOLIN_PCMCIA_IDE=y +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_SIMPAD is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +# CONFIG_SA1100_USB is not set +# CONFIG_SA1100_USB_NETLINK is not set +# CONFIG_SA1100_USB_CHAR is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +CONFIG_CPU_SA1100=y +CONFIG_DISCONTIGMEM=y +# CONFIG_CPU_BIG_ENDIAN is not set + +# +# General setup +# +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +# CONFIG_CPU_FREQ is not set +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=y +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_CLPS6700 is not set +CONFIG_PCMCIA_SA1100=y +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +# CONFIG_FPE_NWFPE is not set +CONFIG_FPE_FASTFPE=y +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_APM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="keepinitrd mem=128M root=/dev/ram initrd=0xc0800000,3M" +# CONFIG_PFS168_CMDLINE is not set +# CONFIG_LEDS is not set +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_BOOTLDR_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_NOSWAP=y +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +CONFIG_MTD_CFI_GEOMETRY=y +# CONFIG_MTD_CFI_B1 is not set +# CONFIG_MTD_CFI_B2 is not set +CONFIG_MTD_CFI_B4=y +# CONFIG_MTD_CFI_I1 is not set +# CONFIG_MTD_CFI_I2 is not set +CONFIG_MTD_CFI_I4=y +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_JEDEC is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_SUN_UFLASH is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_PNC2000 is not set +# CONFIG_MTD_RPXLITE is not set +# CONFIG_MTD_TQM8XXL is not set +# CONFIG_MTD_SC520CDP is not set +# CONFIG_MTD_NETSC520 is not set +# CONFIG_MTD_SBC_GXX is not set +# CONFIG_MTD_ELAN_104NC is not set +CONFIG_MTD_SA1100=y +# CONFIG_MTD_SA1100_REDBOOT_PARTITIONS is not set +# CONFIG_MTD_SA1100_BOOTLDR_PARTITIONS is not set +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set +# CONFIG_MTD_DBOX2 is not set +# CONFIG_MTD_CSTM_MIPS_IXX is not set +# CONFIG_MTD_CFI_FLAGADM is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_SOLUTIONENGINE is not set +# CONFIG_MTD_MIXMEM is not set +# CONFIG_MTD_OCTAGON is not set +# CONFIG_MTD_VMAX is not set +# CONFIG_MTD_OCELOT is not set +# CONFIG_MTD_L440GX is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_LART is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLKMTD is not set +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +CONFIG_BLK_DEV_LOOP=y +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=16384 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +# CONFIG_NETLINK is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_SUNLANCE is not set +# CONFIG_SUNBMAC is not set +# CONFIG_SUNQE is not set +# CONFIG_SUNLANCE is not set +# CONFIG_SUNGEM is not set +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_LANCE is not set +CONFIG_NET_VENDOR_SMC=y +# CONFIG_WD80x3 is not set +# CONFIG_ULTRAMCA is not set +# CONFIG_ULTRA is not set +# CONFIG_ULTRA32 is not set +CONFIG_SMC9194=y +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_NET_ISA is not set +# CONFIG_NET_PCI is not set +# CONFIG_NET_POCKET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_MYRI_SBUS is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PLIP is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +# CONFIG_PCMCIA_3C589 is not set +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +CONFIG_PCMCIA_PCNET=y +# CONFIG_PCMCIA_NMCLAN is not set +# CONFIG_PCMCIA_SMC91C92 is not set +# CONFIG_PCMCIA_XIRC2PS is not set +# CONFIG_ARCNET_COM20020_CS is not set +# CONFIG_PCMCIA_IBMTR is not set +CONFIG_NET_PCMCIA_RADIO=y +# CONFIG_PCMCIA_RAYCS is not set +# CONFIG_PCMCIA_NETWAVE is not set +# CONFIG_PCMCIA_WAVELAN is not set +# CONFIG_AIRONET4500_CS is not set +CONFIG_PCMCIA_WVLAN=y + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=m + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=m +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=m +# CONFIG_IDEDISK_MULTI_MODE is not set +CONFIG_BLK_DEV_IDECS=m +# CONFIG_BLK_DEV_PANGOLIN is not set +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +# CONFIG_IDE_CHIPSETS is not set +# CONFIG_IDEDMA_AUTO is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +# CONFIG_INPUT is not set + +# +# Character devices +# +CONFIG_VT=y +# CONFIG_VT_CONSOLE is not set +# CONFIG_SERIAL is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +# CONFIG_SERIAL_AMBA is not set +# CONFIG_SERIAL_AMBA_CONSOLE is not set +# CONFIG_SERIAL_CLPS711X is not set +# CONFIG_SERIAL_CLPS711X_CONSOLE is not set +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=115200 +# CONFIG_SERIAL_8250 is not set +# CONFIG_SERIAL_8250_CONSOLE is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=32 +# CONFIG_UCB1200 is not set +# CONFIG_TOUCHSCREEN_UCB1200 is not set +# CONFIG_AUDIO_UCB1200 is not set +# CONFIG_ADC_UCB1200 is not set +# CONFIG_TOUCHSCREEN_BITSY is not set +CONFIG_PROFILER=y +# CONFIG_PFS168_SPI is not set +# CONFIG_PFS168_DTMF is not set +# CONFIG_PFS168_MISC is not set + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_MOUSE is not set + +# +# Joysticks +# +# CONFIG_JOYSTICK is not set +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +CONFIG_SA1100_RTC=y +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# PCMCIA character devices +# + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +CONFIG_FAT_FS=y +CONFIG_MSDOS_FS=y +# CONFIG_UMSDOS_FS is not set +CONFIG_VFAT_FS=y +# CONFIG_EFS_FS is not set +CONFIG_JFFS_FS=y +CONFIG_JFFS_FS_VERBOSE=0 +# CONFIG_JFFS2_FS is not set +CONFIG_CRAMFS=y +# CONFIG_TMPFS is not set +CONFIG_RAMFS=y +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_MINIX_FS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +# CONFIG_NFS_FS is not set +# CONFIG_NFS_V3 is not set +# CONFIG_ROOT_NFS is not set +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +# CONFIG_SUNRPC is not set +# CONFIG_LOCKD is not set +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_SMB_NLS is not set +CONFIG_NLS=y + +# +# Native Language Support +# +CONFIG_NLS_DEFAULT="iso8859-1" +# CONFIG_NLS_CODEPAGE_437 is not set +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +CONFIG_NLS_CODEPAGE_950=y +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ISO8859_1 is not set +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_UTF8 is not set + +# +# Console drivers +# +CONFIG_PC_KEYMAP=y +# CONFIG_VGA_CONSOLE is not set + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_ACORN is not set +# CONFIG_FB_CLPS711X is not set +# CONFIG_FB_CYBER2000 is not set +# CONFIG_FB_SA1100 is not set +CONFIG_FB_MQ200=y +# CONFIG_FB_ANAKIN is not set +# CONFIG_FB_E1355 is not set +# CONFIG_FB_VIRTUAL is not set +CONFIG_FBCON_ADVANCED=y +# CONFIG_FBCON_MFB is not set +CONFIG_FBCON_CFB2=y +CONFIG_FBCON_CFB4=y +CONFIG_FBCON_CFB8=y +CONFIG_FBCON_CFB16=y +# CONFIG_FBCON_CFB24 is not set +# CONFIG_FBCON_CFB32 is not set +# CONFIG_FBCON_AFB is not set +# CONFIG_FBCON_ILBM is not set +# CONFIG_FBCON_IPLAN2P2 is not set +# CONFIG_FBCON_IPLAN2P4 is not set +# CONFIG_FBCON_IPLAN2P8 is not set +# CONFIG_FBCON_MAC is not set +# CONFIG_FBCON_VGA_PLANES is not set +# CONFIG_FBCON_VGA is not set +# CONFIG_FBCON_HGA is not set +CONFIG_FBCON_FONTWIDTH8_ONLY=y +CONFIG_FBCON_FONTS=y +CONFIG_FONT_8x8=y +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set + +# +# Sound +# +CONFIG_SOUND=y +# CONFIG_SOUND_ASSABET_UDA1341 is not set +CONFIG_SOUND_PANGOLIN_UDA1341=y +# CONFIG_SOUND_BITSY_UDA1341 is not set +# CONFIG_SOUND_SA1111_UDA1341 is not set +# CONFIG_SOUND_SA1100SSP is not set +# CONFIG_SOUND_CMPCI is not set +# CONFIG_SOUND_EMU10K1 is not set +# CONFIG_SOUND_FUSION is not set +# CONFIG_SOUND_CS4281 is not set +# CONFIG_SOUND_ES1370 is not set +# CONFIG_SOUND_ES1371 is not set +# CONFIG_SOUND_ESSSOLO1 is not set +# CONFIG_SOUND_MAESTRO is not set +# CONFIG_SOUND_MAESTRO3 is not set +# CONFIG_SOUND_ICH is not set +# CONFIG_SOUND_SONICVIBES is not set +# CONFIG_SOUND_TRIDENT is not set +# CONFIG_SOUND_MSNDCLAS is not set +# CONFIG_SOUND_MSNDPIN is not set +# CONFIG_SOUND_VIA82CXXX is not set +# CONFIG_MIDI_VIA82CXXX is not set +# CONFIG_SOUND_OSS is not set +# CONFIG_SOUND_TVMIXER is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# Bluetooth support +# +# CONFIG_BT is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_USER=y +CONFIG_DEBUG_INFO=y +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_NO_PGT_CACHE is not set +# CONFIG_DEBUG_LL is not set +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -prauN linux-2.6.0-test5/arch/arm/configs/pfs168_mqtft_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/pfs168_mqtft_defconfig --- linux-2.6.0-test5/arch/arm/configs/pfs168_mqtft_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/pfs168_mqtft_defconfig 2003-09-25 19:15:44.000000000 -0700 @@ -0,0 +1,782 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set + +# +# System Type +# +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_CLPS711X is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Archimedes/A5000 Implementations (select only ONE) +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_BITSY is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +CONFIG_SA1100_PFS168=y +CONFIG_SA1111=y +CONFIG_SA1100_USB=m +CONFIG_SA1100_USB_NETLINK=m +CONFIG_SA1100_USB_CHAR=m +CONFIG_SA1100_FREQUENCY_SCALE=m +# CONFIG_SA1100_VOLTAGE_SCALE is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set + +# +# Processor Type +# +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +CONFIG_CPU_SA1100=y +CONFIG_DISCONTIGMEM=y + +# +# General setup +# + +# +# Please ensure that you have read the help on the next option +# +# CONFIG_ANGELBOOT is not set +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=m +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_CLPS6700 is not set +CONFIG_PCMCIA_SA1100=m +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="root=/dev/nfs mem=16M" +CONFIG_LEDS=y +CONFIG_LEDS_TIMER=y +CONFIG_LEDS_CPU=y +CONFIG_ALIGNMENT_TRAP=y +CONFIG_UCB1200=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# RAM/ROM Device Drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_MTDRAM is not set + +# +# Linearly Mapped Flash Device Drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_CFI_GEOMETRY is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_PNC2000 is not set +# CONFIG_MTD_RPXLITE is not set +# CONFIG_MTD_SC520CDP is not set +# CONFIG_MTD_SBC_MEDIAGX is not set +# CONFIG_MTD_ELAN_104NC is not set +CONFIG_MTD_SA1100=y +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_CSTM_CFI_JEDEC is not set +# CONFIG_MTD_JEDEC is not set +# CONFIG_MTD_MIXMEM is not set +# CONFIG_MTD_OCTAGON is not set +# CONFIG_MTD_VMAX is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set +# CONFIG_MTD_NAND_SPIA is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +# CONFIG_NETLINK is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_PNP=y +CONFIG_IP_PNP_BOOTP=y +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set + +# +# +# +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_NET_SB1000 is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_LANCE is not set +CONFIG_NET_VENDOR_SMC=y +# CONFIG_WD80x3 is not set +# CONFIG_ULTRA is not set +# CONFIG_ULTRA32 is not set +CONFIG_SMC9194=y +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_AT1700 is not set +# CONFIG_DEPCA is not set +# CONFIG_NET_ISA is not set +# CONFIG_NET_PCI is not set +# CONFIG_NET_POCKET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m +CONFIG_PPP_DEFLATE=m +# CONFIG_PPP_BSDCOMP is not set +# CONFIG_PPPOE is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +# CONFIG_PCMCIA_3C589 is not set +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +CONFIG_PCMCIA_PCNET=m +# CONFIG_PCMCIA_NMCLAN is not set +CONFIG_PCMCIA_SMC91C92=m +# CONFIG_PCMCIA_XIRC2PS is not set +# CONFIG_ARCNET_COM20020_CS is not set +# CONFIG_PCMCIA_IBMTR is not set +# CONFIG_NET_PCMCIA_RADIO is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +CONFIG_IRDA=m + +# +# IrDA protocols +# +CONFIG_IRLAN=m +CONFIG_IRNET=m +CONFIG_IRCOMM=m +CONFIG_IRDA_ULTRA=y +# CONFIG_IRDA_OPTIONS is not set + +# +# Infrared-port device drivers +# + +# +# SIR device drivers +# +CONFIG_IRTTY_SIR=m +CONFIG_IRPORT_SIR=m + +# +# FIR device drivers +# +# CONFIG_NSC_FIR is not set +# CONFIG_WINBOND_FIR is not set +# CONFIG_TOSHIBA_FIR is not set +# CONFIG_SMC_IRCC_FIR is not set +CONFIG_SA1100_FIR=m + +# +# Dongle support +# +# CONFIG_DONGLE is not set + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=m + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=m + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=m +# CONFIG_IDEDISK_MULTI_MODE is not set +CONFIG_BLK_DEV_IDECS=m +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set + +# +# IDE chipset support/bugfixes +# +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +# CONFIG_IDE_CHIPSETS is not set +# CONFIG_IDEDMA_AUTO is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +CONFIG_INPUT=y +CONFIG_INPUT_KEYBDEV=y +CONFIG_INPUT_MOUSEDEV=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set + +# +# Character devices +# +CONFIG_VT=y +# CONFIG_VT_CONSOLE is not set +CONFIG_SERIAL=y +# CONFIG_SERIAL_CONSOLE is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=115200 +CONFIG_TOUCHSCREEN_UCB1200=y +# CONFIG_TOUCHSCREEN_BITSY is not set +# CONFIG_PROFILER is not set +# CONFIG_PFS168_SPI is not set +CONFIG_PFS168_DTMF=y +CONFIG_PFS168_MISC=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=32 + +# +# I2C support +# +CONFIG_I2C=y +CONFIG_I2C_ALGOBIT=y +# CONFIG_I2C_PHILIPSPAR is not set +# CONFIG_I2C_ELV is not set +# CONFIG_I2C_VELLEMAN is not set +# CONFIG_I2C_ASSABET is not set +CONFIG_I2C_PFS168=y +# CONFIG_I2C_ALGOPCF is not set +CONFIG_I2C_CHARDEV=y +CONFIG_I2C_SENSORS=y +CONFIG_I2C_EEPROM=y +CONFIG_I2C_EEPROM=y +CONFIG_I2C_M41T11=y +CONFIG_I2C_X9221=y +CONFIG_I2C_PCF8574=y + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +CONFIG_MOUSE=y +CONFIG_PSMOUSE=y +# CONFIG_82C710_MOUSE is not set +# CONFIG_PC110_PAD is not set + +# +# Joysticks +# +# CONFIG_JOYSTICK is not set + +# +# Input core support is needed for joysticks +# +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_SA1100_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set +CONFIG_PCMCIA_SERIAL=m + +# +# PCMCIA character device support +# +# CONFIG_PCMCIA_SERIAL_CS is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_FAT_FS is not set +# CONFIG_MSDOS_FS is not set +# CONFIG_UMSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_EFS_FS is not set +CONFIG_JFFS_FS=y +CONFIG_JFFS_FS_VERBOSE=0 +# CONFIG_JFFS2_FS is not set +# CONFIG_CRAMFS is not set +# CONFIG_RAMFS is not set +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_MINIX_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_SYSV_FS_WRITE is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +CONFIG_NFS_FS=y +# CONFIG_NFS_V3 is not set +CONFIG_ROOT_NFS=y +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +CONFIG_SUNRPC=y +CONFIG_LOCKD=y +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_SMB_NLS is not set +# CONFIG_NLS is not set + +# +# Console drivers +# +CONFIG_PC_KEYMAP=y +# CONFIG_VGA_CONSOLE is not set +CONFIG_FB=y + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_ACORN is not set +# CONFIG_FB_CLPS711X is not set +# CONFIG_FB_CYBER2000 is not set +# CONFIG_FB_SA1100 is not set +CONFIG_FB_MQ200=y +# CONFIG_PFS168_MQVGA is not set +CONFIG_PFS168_MQTFT=y +# CONFIG_FB_VIRTUAL is not set +CONFIG_FBCON_ADVANCED=y +# CONFIG_FBCON_MFB is not set +# CONFIG_FBCON_CFB2 is not set +# CONFIG_FBCON_CFB4 is not set +CONFIG_FBCON_CFB8=y +CONFIG_FBCON_CFB16=y +CONFIG_FBCON_CFB24=y +CONFIG_FBCON_CFB32=y +# CONFIG_FBCON_AFB is not set +# CONFIG_FBCON_ILBM is not set +# CONFIG_FBCON_IPLAN2P2 is not set +# CONFIG_FBCON_IPLAN2P4 is not set +# CONFIG_FBCON_IPLAN2P8 is not set +# CONFIG_FBCON_MAC is not set +# CONFIG_FBCON_VGA_PLANES is not set +# CONFIG_FBCON_VGA is not set +# CONFIG_FBCON_HGA is not set +CONFIG_FBCON_FONTWIDTH8_ONLY=y +CONFIG_FBCON_FONTS=y +CONFIG_FONT_8x8=y +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# USB support +# +CONFIG_USB=m +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +CONFIG_USB_DEVICEFS=y +# CONFIG_USB_BANDWIDTH is not set + +# +# USB Controllers +# +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +CONFIG_USB_OHCI=m + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# USB Human Interface Devices (HID) +# +CONFIG_USB_HID=m +CONFIG_USB_KBD=m +CONFIG_USB_MOUSE=m +# CONFIG_USB_WACOM is not set + +# +# USB Imaging devices +# +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set + +# +# USB Multimedia devices +# +# CONFIG_USB_IBMCAM is not set +# CONFIG_USB_OV511 is not set +# CONFIG_USB_DSBR is not set +# CONFIG_USB_DABUSB is not set + +# +# USB Network adaptors +# +# CONFIG_USB_PLUSB is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_NET1080 is not set + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set + +# +# USB misc drivers +# +# CONFIG_USB_RIO500 is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_USER=y +CONFIG_DEBUG_INFO=y +CONFIG_MAGIC_SYSRQ=y +# CONFIG_NO_PGT_CACHE is not set +CONFIG_DEBUG_LL=y +# CONFIG_DEBUG_DC21285_PORT is not set diff -prauN linux-2.6.0-test5/arch/arm/configs/pfs168_mqvga_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/pfs168_mqvga_defconfig --- linux-2.6.0-test5/arch/arm/configs/pfs168_mqvga_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/pfs168_mqvga_defconfig 2003-09-25 19:15:44.000000000 -0700 @@ -0,0 +1,782 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set + +# +# System Type +# +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_CLPS711X is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Archimedes/A5000 Implementations (select only ONE) +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_BITSY is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +CONFIG_SA1100_PFS168=y +CONFIG_SA1111=y +CONFIG_SA1100_USB=m +CONFIG_SA1100_USB_NETLINK=m +CONFIG_SA1100_USB_CHAR=m +CONFIG_SA1100_FREQUENCY_SCALE=m +# CONFIG_SA1100_VOLTAGE_SCALE is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set + +# +# Processor Type +# +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +CONFIG_CPU_SA1100=y +CONFIG_DISCONTIGMEM=y + +# +# General setup +# + +# +# Please ensure that you have read the help on the next option +# +# CONFIG_ANGELBOOT is not set +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=m +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_CLPS6700 is not set +CONFIG_PCMCIA_SA1100=m +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="root=/dev/nfs mem=16M" +CONFIG_LEDS=y +CONFIG_LEDS_TIMER=y +CONFIG_LEDS_CPU=y +CONFIG_ALIGNMENT_TRAP=y +CONFIG_UCB1200=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# RAM/ROM Device Drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_MTDRAM is not set + +# +# Linearly Mapped Flash Device Drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_CFI_GEOMETRY is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_PNC2000 is not set +# CONFIG_MTD_RPXLITE is not set +# CONFIG_MTD_SC520CDP is not set +# CONFIG_MTD_SBC_MEDIAGX is not set +# CONFIG_MTD_ELAN_104NC is not set +CONFIG_MTD_SA1100=y +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_CSTM_CFI_JEDEC is not set +# CONFIG_MTD_JEDEC is not set +# CONFIG_MTD_MIXMEM is not set +# CONFIG_MTD_OCTAGON is not set +# CONFIG_MTD_VMAX is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set +# CONFIG_MTD_NAND_SPIA is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +# CONFIG_NETLINK is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_PNP=y +CONFIG_IP_PNP_BOOTP=y +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set + +# +# +# +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_NET_SB1000 is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_LANCE is not set +CONFIG_NET_VENDOR_SMC=y +# CONFIG_WD80x3 is not set +# CONFIG_ULTRA is not set +# CONFIG_ULTRA32 is not set +CONFIG_SMC9194=y +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_AT1700 is not set +# CONFIG_DEPCA is not set +# CONFIG_NET_ISA is not set +# CONFIG_NET_PCI is not set +# CONFIG_NET_POCKET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m +CONFIG_PPP_DEFLATE=m +# CONFIG_PPP_BSDCOMP is not set +# CONFIG_PPPOE is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +# CONFIG_PCMCIA_3C589 is not set +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +CONFIG_PCMCIA_PCNET=m +# CONFIG_PCMCIA_NMCLAN is not set +CONFIG_PCMCIA_SMC91C92=m +# CONFIG_PCMCIA_XIRC2PS is not set +# CONFIG_ARCNET_COM20020_CS is not set +# CONFIG_PCMCIA_IBMTR is not set +# CONFIG_NET_PCMCIA_RADIO is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +CONFIG_IRDA=m + +# +# IrDA protocols +# +CONFIG_IRLAN=m +CONFIG_IRNET=m +CONFIG_IRCOMM=m +CONFIG_IRDA_ULTRA=y +# CONFIG_IRDA_OPTIONS is not set + +# +# Infrared-port device drivers +# + +# +# SIR device drivers +# +CONFIG_IRTTY_SIR=m +CONFIG_IRPORT_SIR=m + +# +# FIR device drivers +# +# CONFIG_NSC_FIR is not set +# CONFIG_WINBOND_FIR is not set +# CONFIG_TOSHIBA_FIR is not set +# CONFIG_SMC_IRCC_FIR is not set +CONFIG_SA1100_FIR=m + +# +# Dongle support +# +# CONFIG_DONGLE is not set + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=m + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=m + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=m +# CONFIG_IDEDISK_MULTI_MODE is not set +CONFIG_BLK_DEV_IDECS=m +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set + +# +# IDE chipset support/bugfixes +# +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +# CONFIG_IDE_CHIPSETS is not set +# CONFIG_IDEDMA_AUTO is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +CONFIG_INPUT=y +CONFIG_INPUT_KEYBDEV=y +CONFIG_INPUT_MOUSEDEV=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set + +# +# Character devices +# +CONFIG_VT=y +# CONFIG_VT_CONSOLE is not set +CONFIG_SERIAL=y +# CONFIG_SERIAL_CONSOLE is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=115200 +CONFIG_TOUCHSCREEN_UCB1200=y +# CONFIG_TOUCHSCREEN_BITSY is not set +# CONFIG_PROFILER is not set +# CONFIG_PFS168_SPI is not set +CONFIG_PFS168_DTMF=y +CONFIG_PFS168_MISC=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=32 + +# +# I2C support +# +CONFIG_I2C=y +CONFIG_I2C_ALGOBIT=y +# CONFIG_I2C_PHILIPSPAR is not set +# CONFIG_I2C_ELV is not set +# CONFIG_I2C_VELLEMAN is not set +# CONFIG_I2C_ASSABET is not set +CONFIG_I2C_PFS168=y +# CONFIG_I2C_ALGOPCF is not set +CONFIG_I2C_CHARDEV=y +CONFIG_I2C_SENSORS=y +CONFIG_I2C_EEPROM=y +CONFIG_I2C_EEPROM=y +CONFIG_I2C_M41T11=y +CONFIG_I2C_X9221=y +CONFIG_I2C_PCF8574=y + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +CONFIG_MOUSE=y +CONFIG_PSMOUSE=y +# CONFIG_82C710_MOUSE is not set +# CONFIG_PC110_PAD is not set + +# +# Joysticks +# +# CONFIG_JOYSTICK is not set + +# +# Input core support is needed for joysticks +# +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_SA1100_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set +CONFIG_PCMCIA_SERIAL=m + +# +# PCMCIA character device support +# +# CONFIG_PCMCIA_SERIAL_CS is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_FAT_FS is not set +# CONFIG_MSDOS_FS is not set +# CONFIG_UMSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_EFS_FS is not set +CONFIG_JFFS_FS=y +CONFIG_JFFS_FS_VERBOSE=0 +# CONFIG_JFFS2_FS is not set +# CONFIG_CRAMFS is not set +# CONFIG_RAMFS is not set +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_MINIX_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_SYSV_FS_WRITE is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +CONFIG_NFS_FS=y +# CONFIG_NFS_V3 is not set +CONFIG_ROOT_NFS=y +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +CONFIG_SUNRPC=y +CONFIG_LOCKD=y +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_SMB_NLS is not set +# CONFIG_NLS is not set + +# +# Console drivers +# +CONFIG_PC_KEYMAP=y +# CONFIG_VGA_CONSOLE is not set +CONFIG_FB=y + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_ACORN is not set +# CONFIG_FB_CLPS711X is not set +# CONFIG_FB_CYBER2000 is not set +# CONFIG_FB_SA1100 is not set +CONFIG_FB_MQ200=y +CONFIG_PFS168_MQVGA=y +# CONFIG_PFS168_MQTFT is not set +# CONFIG_FB_VIRTUAL is not set +CONFIG_FBCON_ADVANCED=y +# CONFIG_FBCON_MFB is not set +# CONFIG_FBCON_CFB2 is not set +# CONFIG_FBCON_CFB4 is not set +CONFIG_FBCON_CFB8=y +CONFIG_FBCON_CFB16=y +CONFIG_FBCON_CFB24=y +CONFIG_FBCON_CFB32=y +# CONFIG_FBCON_AFB is not set +# CONFIG_FBCON_ILBM is not set +# CONFIG_FBCON_IPLAN2P2 is not set +# CONFIG_FBCON_IPLAN2P4 is not set +# CONFIG_FBCON_IPLAN2P8 is not set +# CONFIG_FBCON_MAC is not set +# CONFIG_FBCON_VGA_PLANES is not set +# CONFIG_FBCON_VGA is not set +# CONFIG_FBCON_HGA is not set +CONFIG_FBCON_FONTWIDTH8_ONLY=y +CONFIG_FBCON_FONTS=y +CONFIG_FONT_8x8=y +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# USB support +# +CONFIG_USB=m +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +CONFIG_USB_DEVICEFS=y +# CONFIG_USB_BANDWIDTH is not set + +# +# USB Controllers +# +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +CONFIG_USB_OHCI=m + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# USB Human Interface Devices (HID) +# +CONFIG_USB_HID=m +CONFIG_USB_KBD=m +CONFIG_USB_MOUSE=m +# CONFIG_USB_WACOM is not set + +# +# USB Imaging devices +# +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set + +# +# USB Multimedia devices +# +# CONFIG_USB_IBMCAM is not set +# CONFIG_USB_OV511 is not set +# CONFIG_USB_DSBR is not set +# CONFIG_USB_DABUSB is not set + +# +# USB Network adaptors +# +# CONFIG_USB_PLUSB is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_NET1080 is not set + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set + +# +# USB misc drivers +# +# CONFIG_USB_RIO500 is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_USER=y +CONFIG_DEBUG_INFO=y +CONFIG_MAGIC_SYSRQ=y +# CONFIG_NO_PGT_CACHE is not set +CONFIG_DEBUG_LL=y +# CONFIG_DEBUG_DC21285_PORT is not set diff -prauN linux-2.6.0-test5/arch/arm/configs/pfs168_sastn_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/pfs168_sastn_defconfig --- linux-2.6.0-test5/arch/arm/configs/pfs168_sastn_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/pfs168_sastn_defconfig 2003-09-25 19:15:44.000000000 -0700 @@ -0,0 +1,774 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set + +# +# System Type +# +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_CLPS711X is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Archimedes/A5000 Implementations (select only ONE) +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_BITSY is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +CONFIG_SA1100_PFS168=y +CONFIG_SA1111=y +CONFIG_SA1100_USB=m +CONFIG_SA1100_USB_NETLINK=m +CONFIG_SA1100_USB_CHAR=m +CONFIG_SA1100_FREQUENCY_SCALE=m +# CONFIG_SA1100_VOLTAGE_SCALE is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set + +# +# Processor Type +# +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +CONFIG_CPU_SA1100=y +CONFIG_DISCONTIGMEM=y + +# +# General setup +# + +# +# Please ensure that you have read the help on the next option +# +# CONFIG_ANGELBOOT is not set +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=m +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_CLPS6700 is not set +CONFIG_PCMCIA_SA1100=m +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="root=/dev/nfs mem=16M" +CONFIG_LEDS=y +CONFIG_LEDS_TIMER=y +CONFIG_LEDS_CPU=y +CONFIG_ALIGNMENT_TRAP=y +CONFIG_UCB1200=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# RAM/ROM Device Drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_MTDRAM is not set + +# +# Linearly Mapped Flash Device Drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_PNC2000 is not set +# CONFIG_MTD_RPXLITE is not set +# CONFIG_MTD_SC520CDP is not set +# CONFIG_MTD_SBC_MEDIAGX is not set +# CONFIG_MTD_ELAN_104NC is not set +CONFIG_MTD_SA1100=y +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set +# CONFIG_MTD_CSTM_CFI_JEDEC is not set +# CONFIG_MTD_JEDEC is not set +# CONFIG_MTD_MIXMEM is not set +# CONFIG_MTD_OCTAGON is not set +# CONFIG_MTD_VMAX is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set +# CONFIG_MTD_NAND_SPIA is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +# CONFIG_NETLINK is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_PNP=y +CONFIG_IP_PNP_BOOTP=y +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set + +# +# +# +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_NET_SB1000 is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_LANCE is not set +CONFIG_NET_VENDOR_SMC=y +# CONFIG_WD80x3 is not set +# CONFIG_ULTRA is not set +# CONFIG_ULTRA32 is not set +CONFIG_SMC9194=y +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_AT1700 is not set +# CONFIG_DEPCA is not set +# CONFIG_NET_ISA is not set +# CONFIG_NET_PCI is not set +# CONFIG_NET_POCKET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m +CONFIG_PPP_DEFLATE=m +# CONFIG_PPP_BSDCOMP is not set +# CONFIG_PPPOE is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +# CONFIG_PCMCIA_3C589 is not set +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +CONFIG_PCMCIA_PCNET=m +# CONFIG_PCMCIA_NMCLAN is not set +CONFIG_PCMCIA_SMC91C92=m +# CONFIG_PCMCIA_XIRC2PS is not set +# CONFIG_ARCNET_COM20020_CS is not set +# CONFIG_PCMCIA_IBMTR is not set +# CONFIG_NET_PCMCIA_RADIO is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +CONFIG_IRDA=m + +# +# IrDA protocols +# +CONFIG_IRLAN=m +CONFIG_IRNET=m +CONFIG_IRCOMM=m +CONFIG_IRDA_ULTRA=y +# CONFIG_IRDA_OPTIONS is not set + +# +# Infrared-port device drivers +# + +# +# SIR device drivers +# +CONFIG_IRTTY_SIR=m +CONFIG_IRPORT_SIR=m + +# +# FIR device drivers +# +# CONFIG_NSC_FIR is not set +# CONFIG_WINBOND_FIR is not set +# CONFIG_TOSHIBA_FIR is not set +# CONFIG_SMC_IRCC_FIR is not set +CONFIG_SA1100_FIR=m + +# +# Dongle support +# +# CONFIG_DONGLE is not set + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=m + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=m + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=m +# CONFIG_IDEDISK_MULTI_MODE is not set +CONFIG_BLK_DEV_IDECS=m +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set + +# +# IDE chipset support/bugfixes +# +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +# CONFIG_IDE_CHIPSETS is not set +# CONFIG_IDEDMA_AUTO is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +CONFIG_INPUT=y +CONFIG_INPUT_KEYBDEV=y +CONFIG_INPUT_MOUSEDEV=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set + +# +# Character devices +# +CONFIG_VT=y +# CONFIG_VT_CONSOLE is not set +CONFIG_SERIAL=y +# CONFIG_SERIAL_CONSOLE is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=115200 +CONFIG_TOUCHSCREEN_UCB1200=y +# CONFIG_TOUCHSCREEN_BITSY is not set +# CONFIG_PROFILER is not set +# CONFIG_PFS168_SPI is not set +CONFIG_PFS168_DTMF=y +CONFIG_PFS168_MISC=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=32 + +# +# I2C support +# +CONFIG_I2C=y +CONFIG_I2C_ALGOBIT=y +# CONFIG_I2C_PHILIPSPAR is not set +# CONFIG_I2C_ELV is not set +# CONFIG_I2C_VELLEMAN is not set +# CONFIG_I2C_ASSABET is not set +# CONFIG_I2C_ALGOPCF is not set +CONFIG_I2C_CHARDEV=y + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +CONFIG_MOUSE=y +CONFIG_PSMOUSE=y +# CONFIG_82C710_MOUSE is not set +# CONFIG_PC110_PAD is not set + +# +# Joysticks +# +# CONFIG_JOYSTICK is not set + +# +# Input core support is needed for joysticks +# +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_SA1100_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# PCMCIA character devices +# +# CONFIG_PCMCIA_SERIAL_CS is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_FAT_FS is not set +# CONFIG_MSDOS_FS is not set +# CONFIG_UMSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_EFS_FS is not set +CONFIG_JFFS_FS=y +CONFIG_JFFS_FS_VERBOSE=0 +# CONFIG_JFFS2_FS is not set +# CONFIG_CRAMFS is not set +# CONFIG_RAMFS is not set +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_MINIX_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_SYSV_FS_WRITE is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +CONFIG_NFS_FS=y +# CONFIG_NFS_V3 is not set +CONFIG_ROOT_NFS=y +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +CONFIG_SUNRPC=y +CONFIG_LOCKD=y +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_SMB_NLS is not set +# CONFIG_NLS is not set + +# +# Console drivers +# +CONFIG_PC_KEYMAP=y +# CONFIG_VGA_CONSOLE is not set +CONFIG_FB=y + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_ACORN is not set +# CONFIG_FB_CLPS711X is not set +# CONFIG_FB_CYBER2000 is not set +CONFIG_FB_SA1100=y +# CONFIG_FB_VIRTUAL is not set +CONFIG_FBCON_ADVANCED=y +# CONFIG_FBCON_MFB is not set +# CONFIG_FBCON_CFB2 is not set +# CONFIG_FBCON_CFB4 is not set +CONFIG_FBCON_CFB8=y +CONFIG_FBCON_CFB16=y +CONFIG_FBCON_CFB24=y +CONFIG_FBCON_CFB32=y +# CONFIG_FBCON_AFB is not set +# CONFIG_FBCON_ILBM is not set +# CONFIG_FBCON_IPLAN2P2 is not set +# CONFIG_FBCON_IPLAN2P4 is not set +# CONFIG_FBCON_IPLAN2P8 is not set +# CONFIG_FBCON_MAC is not set +# CONFIG_FBCON_VGA_PLANES is not set +# CONFIG_FBCON_VGA is not set +# CONFIG_FBCON_HGA is not set +CONFIG_FBCON_FONTWIDTH8_ONLY=y +CONFIG_FBCON_FONTS=y +CONFIG_FONT_8x8=y +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# USB support +# +CONFIG_USB=m +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +CONFIG_USB_DEVICEFS=y +# CONFIG_USB_BANDWIDTH is not set + +# +# USB Controllers +# +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +CONFIG_USB_OHCI=m + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# USB Human Interface Devices (HID) +# +CONFIG_USB_HID=m +CONFIG_USB_KBD=m +CONFIG_USB_MOUSE=m +# CONFIG_USB_WACOM is not set + +# +# USB Imaging devices +# +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set + +# +# USB Multimedia devices +# +# CONFIG_USB_IBMCAM is not set +# CONFIG_USB_OV511 is not set +# CONFIG_USB_DSBR is not set +# CONFIG_USB_DABUSB is not set + +# +# USB Network adaptors +# +# CONFIG_USB_PLUSB is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_NET1080 is not set +# CONFIG_USB_USBNET is not set + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set + +# +# USB misc drivers +# +# CONFIG_USB_RIO500 is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_USER=y +CONFIG_DEBUG_INFO=y +CONFIG_MAGIC_SYSRQ=y +# CONFIG_NO_PGT_CACHE is not set +CONFIG_DEBUG_LL=y +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -prauN linux-2.6.0-test5/arch/arm/configs/pfs168_satft_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/pfs168_satft_defconfig --- linux-2.6.0-test5/arch/arm/configs/pfs168_satft_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/pfs168_satft_defconfig 2003-09-25 19:15:44.000000000 -0700 @@ -0,0 +1,782 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set + +# +# System Type +# +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_CLPS711X is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Archimedes/A5000 Implementations (select only ONE) +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_BITSY is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +CONFIG_SA1100_PFS168=y +CONFIG_SA1111=y +CONFIG_SA1100_USB=m +CONFIG_SA1100_USB_NETLINK=m +CONFIG_SA1100_USB_CHAR=m +CONFIG_SA1100_FREQUENCY_SCALE=m +# CONFIG_SA1100_VOLTAGE_SCALE is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set + +# +# Processor Type +# +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +CONFIG_CPU_SA1100=y +CONFIG_DISCONTIGMEM=y + +# +# General setup +# + +# +# Please ensure that you have read the help on the next option +# +# CONFIG_ANGELBOOT is not set +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=m +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_CLPS6700 is not set +CONFIG_PCMCIA_SA1100=m +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="root=/dev/nfs mem=16M" +CONFIG_LEDS=y +CONFIG_LEDS_TIMER=y +CONFIG_LEDS_CPU=y +CONFIG_ALIGNMENT_TRAP=y +CONFIG_UCB1200=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# RAM/ROM Device Drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_MTDRAM is not set + +# +# Linearly Mapped Flash Device Drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_CFI_GEOMETRY is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_PNC2000 is not set +# CONFIG_MTD_RPXLITE is not set +# CONFIG_MTD_SC520CDP is not set +# CONFIG_MTD_SBC_MEDIAGX is not set +# CONFIG_MTD_ELAN_104NC is not set +CONFIG_MTD_SA1100=y +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_CSTM_CFI_JEDEC is not set +# CONFIG_MTD_JEDEC is not set +# CONFIG_MTD_MIXMEM is not set +# CONFIG_MTD_OCTAGON is not set +# CONFIG_MTD_VMAX is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set +# CONFIG_MTD_NAND_SPIA is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +# CONFIG_NETLINK is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_PNP=y +CONFIG_IP_PNP_BOOTP=y +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set + +# +# +# +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_NET_SB1000 is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_LANCE is not set +CONFIG_NET_VENDOR_SMC=y +# CONFIG_WD80x3 is not set +# CONFIG_ULTRA is not set +# CONFIG_ULTRA32 is not set +CONFIG_SMC9194=y +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_AT1700 is not set +# CONFIG_DEPCA is not set +# CONFIG_NET_ISA is not set +# CONFIG_NET_PCI is not set +# CONFIG_NET_POCKET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m +CONFIG_PPP_DEFLATE=m +# CONFIG_PPP_BSDCOMP is not set +# CONFIG_PPPOE is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +# CONFIG_PCMCIA_3C589 is not set +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +CONFIG_PCMCIA_PCNET=m +# CONFIG_PCMCIA_NMCLAN is not set +CONFIG_PCMCIA_SMC91C92=m +# CONFIG_PCMCIA_XIRC2PS is not set +# CONFIG_ARCNET_COM20020_CS is not set +# CONFIG_PCMCIA_IBMTR is not set +# CONFIG_NET_PCMCIA_RADIO is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +CONFIG_IRDA=m + +# +# IrDA protocols +# +CONFIG_IRLAN=m +CONFIG_IRNET=m +CONFIG_IRCOMM=m +CONFIG_IRDA_ULTRA=y +# CONFIG_IRDA_OPTIONS is not set + +# +# Infrared-port device drivers +# + +# +# SIR device drivers +# +CONFIG_IRTTY_SIR=m +CONFIG_IRPORT_SIR=m + +# +# FIR device drivers +# +# CONFIG_NSC_FIR is not set +# CONFIG_WINBOND_FIR is not set +# CONFIG_TOSHIBA_FIR is not set +# CONFIG_SMC_IRCC_FIR is not set +CONFIG_SA1100_FIR=m + +# +# Dongle support +# +# CONFIG_DONGLE is not set + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=m + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=m + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=m +# CONFIG_IDEDISK_MULTI_MODE is not set +CONFIG_BLK_DEV_IDECS=m +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set + +# +# IDE chipset support/bugfixes +# +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +# CONFIG_IDE_CHIPSETS is not set +# CONFIG_IDEDMA_AUTO is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +CONFIG_INPUT=y +CONFIG_INPUT_KEYBDEV=y +CONFIG_INPUT_MOUSEDEV=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set + +# +# Character devices +# +CONFIG_VT=y +# CONFIG_VT_CONSOLE is not set +CONFIG_SERIAL=y +# CONFIG_SERIAL_CONSOLE is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=115200 +CONFIG_TOUCHSCREEN_UCB1200=y +# CONFIG_TOUCHSCREEN_BITSY is not set +# CONFIG_PROFILER is not set +# CONFIG_PFS168_SPI is not set +CONFIG_PFS168_DTMF=y +CONFIG_PFS168_MISC=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=32 + +# +# I2C support +# +CONFIG_I2C=y +CONFIG_I2C_ALGOBIT=y +# CONFIG_I2C_PHILIPSPAR is not set +# CONFIG_I2C_ELV is not set +# CONFIG_I2C_VELLEMAN is not set +# CONFIG_I2C_ASSABET is not set +CONFIG_I2C_PFS168=y +# CONFIG_I2C_ALGOPCF is not set +CONFIG_I2C_CHARDEV=y +CONFIG_I2C_SENSORS=y +CONFIG_I2C_EEPROM=y +CONFIG_I2C_EEPROM=y +CONFIG_I2C_M41T11=y +CONFIG_I2C_X9221=y +CONFIG_I2C_PCF8574=y + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +CONFIG_MOUSE=y +CONFIG_PSMOUSE=y +# CONFIG_82C710_MOUSE is not set +# CONFIG_PC110_PAD is not set + +# +# Joysticks +# +# CONFIG_JOYSTICK is not set + +# +# Input core support is needed for joysticks +# +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_SA1100_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set +CONFIG_PCMCIA_SERIAL=m + +# +# PCMCIA character device support +# +# CONFIG_PCMCIA_SERIAL_CS is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_FAT_FS is not set +# CONFIG_MSDOS_FS is not set +# CONFIG_UMSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_EFS_FS is not set +CONFIG_JFFS_FS=y +CONFIG_JFFS_FS_VERBOSE=0 +# CONFIG_JFFS2_FS is not set +# CONFIG_CRAMFS is not set +# CONFIG_RAMFS is not set +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_MINIX_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_SYSV_FS_WRITE is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +CONFIG_NFS_FS=y +# CONFIG_NFS_V3 is not set +CONFIG_ROOT_NFS=y +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +CONFIG_SUNRPC=y +CONFIG_LOCKD=y +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_SMB_NLS is not set +# CONFIG_NLS is not set + +# +# Console drivers +# +CONFIG_PC_KEYMAP=y +# CONFIG_VGA_CONSOLE is not set +CONFIG_FB=y + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_ACORN is not set +# CONFIG_FB_CLPS711X is not set +# CONFIG_FB_CYBER2000 is not set +CONFIG_FB_SA1100=y +# CONFIG_PFS168_SASTN is not set +CONFIG_PFS168_SATFT=y +# CONFIG_FB_MQ200 is not set +# CONFIG_FB_VIRTUAL is not set +CONFIG_FBCON_ADVANCED=y +# CONFIG_FBCON_MFB is not set +# CONFIG_FBCON_CFB2 is not set +# CONFIG_FBCON_CFB4 is not set +CONFIG_FBCON_CFB8=y +CONFIG_FBCON_CFB16=y +CONFIG_FBCON_CFB24=y +CONFIG_FBCON_CFB32=y +# CONFIG_FBCON_AFB is not set +# CONFIG_FBCON_ILBM is not set +# CONFIG_FBCON_IPLAN2P2 is not set +# CONFIG_FBCON_IPLAN2P4 is not set +# CONFIG_FBCON_IPLAN2P8 is not set +# CONFIG_FBCON_MAC is not set +# CONFIG_FBCON_VGA_PLANES is not set +# CONFIG_FBCON_VGA is not set +# CONFIG_FBCON_HGA is not set +CONFIG_FBCON_FONTWIDTH8_ONLY=y +CONFIG_FBCON_FONTS=y +CONFIG_FONT_8x8=y +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# USB support +# +CONFIG_USB=m +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +CONFIG_USB_DEVICEFS=y +# CONFIG_USB_BANDWIDTH is not set + +# +# USB Controllers +# +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +CONFIG_USB_OHCI=m + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# USB Human Interface Devices (HID) +# +CONFIG_USB_HID=m +CONFIG_USB_KBD=m +CONFIG_USB_MOUSE=m +# CONFIG_USB_WACOM is not set + +# +# USB Imaging devices +# +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set + +# +# USB Multimedia devices +# +# CONFIG_USB_IBMCAM is not set +# CONFIG_USB_OV511 is not set +# CONFIG_USB_DSBR is not set +# CONFIG_USB_DABUSB is not set + +# +# USB Network adaptors +# +# CONFIG_USB_PLUSB is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_NET1080 is not set + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set + +# +# USB misc drivers +# +# CONFIG_USB_RIO500 is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_USER=y +CONFIG_DEBUG_INFO=y +CONFIG_MAGIC_SYSRQ=y +# CONFIG_NO_PGT_CACHE is not set +CONFIG_DEBUG_LL=y +# CONFIG_DEBUG_DC21285_PORT is not set diff -prauN linux-2.6.0-test5/arch/arm/configs/pleb_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/pleb_defconfig --- linux-2.6.0-test5/arch/arm/configs/pleb_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/pleb_defconfig 2003-09-25 19:15:44.000000000 -0700 @@ -0,0 +1,535 @@ +# +# Automatically generated by make menuconfig: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +CONFIG_KMOD=y + +# +# System Type +# +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_ANAKIN is not set + +# +# Archimedes/A5000 Implementations +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_BITSY is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FLEXANET is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +CONFIG_SA1100_PLEB=y +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +# CONFIG_SA1100_USB is not set +# CONFIG_SA1100_USB_NETLINK is not set +# CONFIG_SA1100_USB_CHAR is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +CONFIG_CPU_SA1100=y +CONFIG_DISCONTIGMEM=y +# CONFIG_CPU_BIG_ENDIAN is not set + +# +# General setup +# +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +CONFIG_CPU_FREQ=y +# CONFIG_HOTPLUG is not set +# CONFIG_PCMCIA is not set +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +CONFIG_BINFMT_AOUT=y +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_APM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="console=ttySA0,9600 mem=16M@0xc0000000 mem=16M@0xc8000000 root=/dev/ram initrd=0xc0400000,4M" +# CONFIG_PFS168_CMDLINE is not set +# CONFIG_LEDS is not set +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +# CONFIG_MTD is not set + +# +# RAM/ROM/Flash chip drivers +# +# CONFIG_MTD_CFI is not set +# CONFIG_MTD_CFI_INTELEXT is not set +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_JEDEC is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_SUN_UFLASH is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_PNC2000 is not set +# CONFIG_MTD_RPXLITE is not set +# CONFIG_MTD_SC520CDP is not set +# CONFIG_MTD_NETSC520 is not set +# CONFIG_MTD_SBC_GXX is not set +# CONFIG_MTD_ELAN_104NC is not set +# CONFIG_MTD_SA1100 is not set +# CONFIG_MTD_SA1100_REDBOOT_PARTITIONS is not set +# CONFIG_MTD_SA1100_BOOTLDR_PARTITIONS is not set +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set +# CONFIG_MTD_DBOX2 is not set +# CONFIG_MTD_CSTM_MIPS_IXX is not set +# CONFIG_MTD_CFI_FLAGADM is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_MIXMEM is not set +# CONFIG_MTD_OCTAGON is not set +# CONFIG_MTD_VMAX is not set +# CONFIG_MTD_OCELOT is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=8192 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +CONFIG_PACKET=m +# CONFIG_PACKET_MMAP is not set +# CONFIG_NETLINK is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +CONFIG_INET_ECN=y +CONFIG_SYN_COOKIES=y +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +CONFIG_DUMMY=m +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set + +# +# Ethernet (10 or 100Mbit) +# +# CONFIG_NET_ETHERNET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_MYRI_SBUS is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PLIP is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# ATA/IDE/MFM/RLL support +# +# CONFIG_IDE is not set +# CONFIG_BLK_DEV_HD is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +# CONFIG_INPUT is not set + +# +# Character devices +# +# CONFIG_VT is not set +# CONFIG_SERIAL is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +CONFIG_SERIAL_SA1100=y +# CONFIG_SERIAL_SA1100_OLD is not set +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=9600 +# CONFIG_SERIAL_AMBA is not set +# CONFIG_SERIAL_AMBA_CONSOLE is not set +# CONFIG_SERIAL_CLPS711X is not set +# CONFIG_SERIAL_CLPS711X_CONSOLE is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=256 +# CONFIG_UCB1200 is not set +# CONFIG_TOUCHSCREEN_UCB1200 is not set +# CONFIG_AUDIO_UCB1200 is not set +# CONFIG_ADC_UCB1200 is not set +# CONFIG_TOUCHSCREEN_BITSY is not set +CONFIG_PROFILER=y +# CONFIG_PFS168_SPI is not set +# CONFIG_PFS168_DTMF is not set +# CONFIG_PFS168_MISC is not set + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_MOUSE is not set + +# +# Joysticks +# +# CONFIG_JOYSTICK is not set +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +CONFIG_SA1100_RTC=y +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_FAT_FS is not set +# CONFIG_MSDOS_FS is not set +# CONFIG_UMSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +# CONFIG_JFFS2_FS is not set +# CONFIG_CRAMFS is not set +CONFIG_TMPFS=y +# CONFIG_RAMFS is not set +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_MINIX_FS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +# CONFIG_NFS_FS is not set +# CONFIG_NFS_V3 is not set +# CONFIG_ROOT_NFS is not set +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +# CONFIG_SUNRPC is not set +# CONFIG_LOCKD is not set +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_SMB_NLS is not set +# CONFIG_NLS is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# Bluetooth support +# +# CONFIG_BT is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_USER=y +# CONFIG_DEBUG_INFO is not set +CONFIG_MAGIC_SYSRQ=y +# CONFIG_NO_PGT_CACHE is not set +CONFIG_DEBUG_LL=y +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -prauN linux-2.6.0-test5/arch/arm/configs/rpc_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/rpc_defconfig --- linux-2.6.0-test5/arch/arm/configs/rpc_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/rpc_defconfig 2003-09-25 19:15:44.000000000 -0700 @@ -0,0 +1,781 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +CONFIG_MMU=y +CONFIG_SWAP=y +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y + +# +# General setup +# +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +CONFIG_KMOD=y + +# +# System Type +# +# CONFIG_ARCH_ADIFCC is not set +# CONFIG_ARCH_ANAKIN is not set +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_PXA is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_CAMELOT is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_IOP310 is not set +# CONFIG_ARCH_L7200 is not set +CONFIG_ARCH_RPC=y +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_SHARK is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Archimedes/A5000 Implementations (select only ONE) +# + +# +# CLPS711X/EP721X Implementations +# + +# +# Epxa10db +# + +# +# Footbridge Implementations +# + +# +# IOP310 Implementation Options +# + +# +# IOP310 Chipset Features +# + +# +# Intel PXA250/210 Implementations +# + +# +# SA11x0 Implementations +# +CONFIG_ARCH_ACORN=y + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_ARM610=y +CONFIG_CPU_ARM710=y +CONFIG_CPU_SA110=y +CONFIG_CPU_32v3=y + +# +# Processor Features +# + +# +# General setup +# +CONFIG_FIQ=y +# CONFIG_ZBOOT_ROM is not set +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +# CONFIG_HOTPLUG is not set + +# +# At least one math emulation must be selected +# +CONFIG_FPE_NWFPE=y +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +CONFIG_BINFMT_AOUT=y +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_PREEMPT is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="" +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +CONFIG_PARPORT=y +CONFIG_PARPORT_PC=y +CONFIG_PARPORT_PC_CML1=y +# CONFIG_PARPORT_SERIAL is not set +CONFIG_PARPORT_PC_FIFO=y +# CONFIG_PARPORT_PC_SUPERIO is not set +# CONFIG_PARPORT_ARC is not set +# CONFIG_PARPORT_OTHER is not set +# CONFIG_PARPORT_1284 is not set + +# +# Memory Technology Devices (MTD) +# +# CONFIG_MTD is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set + +# +# Block devices +# +CONFIG_BLK_DEV_FD=y +# CONFIG_PARIDE is not set +CONFIG_BLK_DEV_LOOP=m +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set + +# +# Acorn-specific block devices +# + +# +# Networking options +# +# CONFIG_PACKET is not set +CONFIG_NETLINK_DEV=y +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_IP_MROUTE is not set +# CONFIG_ARPD is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set + +# +# SCTP Configuration (EXPERIMENTAL) +# +CONFIG_IPV6_SCTP__=y +# CONFIG_IP_SCTP is not set +# CONFIG_ATM is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_LLC is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_ETHERTAP is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +CONFIG_ARM_ETHER1=y +CONFIG_ARM_ETHER3=y +CONFIG_ARM_ETHERH=y +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_NET_VENDOR_SMC is not set +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_NET_POCKET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PLIP is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +# CONFIG_PPP_ASYNC is not set +# CONFIG_PPP_SYNC_TTY is not set +# CONFIG_PPP_DEFLATE is not set +# CONFIG_PPP_BSDCOMP is not set +CONFIG_PPPOE=m +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_NET_FC is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# ATA/ATAPI/MFM/RLL support +# +CONFIG_IDE=y + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=y + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=y +CONFIG_IDEDISK_MULTI_MODE=y +# CONFIG_IDEDISK_STROKE is not set +CONFIG_BLK_DEV_IDECD=y +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set +# CONFIG_IDE_TASK_IOCTL is not set + +# +# IDE chipset support/bugfixes +# +CONFIG_BLK_DEV_IDEDMA=y +CONFIG_BLK_DEV_IDE_ICSIDE=y +CONFIG_BLK_DEV_IDEDMA_ICS=y +CONFIG_IDEDMA_ICS_AUTO=y +CONFIG_BLK_DEV_IDE_RAPIDE=y +CONFIG_IDEDMA_AUTO=y +# CONFIG_IDEDMA_IVB is not set + +# +# SCSI support +# +CONFIG_SCSI=y + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=y +CONFIG_CHR_DEV_ST=m +# CONFIG_CHR_DEV_OSST is not set +CONFIG_BLK_DEV_SR=y +CONFIG_BLK_DEV_SR_VENDOR=y +CONFIG_SR_EXTRA_DEVS=2 +CONFIG_CHR_DEV_SG=y + +# +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs +# +# CONFIG_SCSI_MULTI_LUN is not set +# CONFIG_SCSI_REPORT_LUNS is not set +CONFIG_SCSI_CONSTANTS=y +CONFIG_SCSI_LOGGING=y + +# +# SCSI low-level drivers +# +# CONFIG_SCSI_ACARD is not set +# CONFIG_SCSI_AIC7XXX is not set +# CONFIG_SCSI_AIC7XXX_OLD is not set +# CONFIG_SCSI_DPT_I2O is not set +# CONFIG_SCSI_ADVANSYS is not set +# CONFIG_SCSI_IN2000 is not set +# CONFIG_SCSI_MEGARAID is not set +# CONFIG_SCSI_BUSLOGIC is not set +# CONFIG_SCSI_EATA is not set +# CONFIG_SCSI_EATA_DMA is not set +# CONFIG_SCSI_EATA_PIO is not set +# CONFIG_SCSI_FUTURE_DOMAIN is not set +# CONFIG_SCSI_GDTH is not set +# CONFIG_SCSI_GENERIC_NCR5380 is not set +# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set +CONFIG_SCSI_PPA=m +CONFIG_SCSI_IMM=m +# CONFIG_SCSI_IZIP_EPP16 is not set +# CONFIG_SCSI_IZIP_SLOW_CTR is not set +# CONFIG_SCSI_PCI2000 is not set +# CONFIG_SCSI_PCI2220I is not set +# CONFIG_SCSI_U14_34F is not set +# CONFIG_SCSI_NSP32 is not set +# CONFIG_SCSI_DEBUG is not set +CONFIG_SCSI_ACORNSCSI_3=m +CONFIG_SCSI_ACORNSCSI_TAGGED_QUEUE=y +CONFIG_SCSI_ACORNSCSI_SYNC=y +CONFIG_SCSI_ARXESCSI=m +CONFIG_SCSI_CUMANA_2=m +CONFIG_SCSI_EESOXSCSI=m +CONFIG_SCSI_POWERTECSCSI=y + +# +# The following drivers are not fully supported +# +CONFIG_SCSI_CUMANA_1=m +CONFIG_SCSI_OAK1=m + +# +# I2O device support +# +# CONFIG_I2O is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN_BOOL is not set + +# +# Input device support +# +CONFIG_INPUT=y + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=y +CONFIG_INPUT_MOUSEDEV_PSAUX=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_TSDEV is not set +# CONFIG_INPUT_TSLIBDEV is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set + +# +# Input I/O drivers +# +# CONFIG_GAMEPORT is not set +CONFIG_SOUND_GAMEPORT=y +CONFIG_SERIO=y +# CONFIG_SERIO_I8042 is not set +# CONFIG_SERIO_SERPORT is not set +# CONFIG_SERIO_CT82C710 is not set +# CONFIG_SERIO_PARKBD is not set +CONFIG_SERIO_RPCKBD=y + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +CONFIG_KEYBOARD_ATKBD=y +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +CONFIG_INPUT_MOUSE=y +# CONFIG_MOUSE_PS2 is not set +# CONFIG_MOUSE_SERIAL is not set +CONFIG_MOUSE_RISCPC=y +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TOUCHSCREEN is not set +# CONFIG_INPUT_MISC is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +# CONFIG_SERIAL_8250_EXTENDED is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_8250_ACORN=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=256 +CONFIG_PRINTER=m +# CONFIG_LP_CONSOLE is not set +# CONFIG_PPDEV is not set +# CONFIG_TIPAR is not set + +# +# I2C support +# +CONFIG_I2C=y +CONFIG_I2C_ALGOBIT=y +# CONFIG_I2C_PHILIPSPAR is not set +# CONFIG_I2C_ELV is not set +# CONFIG_I2C_VELLEMAN is not set +# CONFIG_SCx200_ACB is not set +# CONFIG_I2C_ALGOPCF is not set +CONFIG_I2C_CHARDEV=y +# CONFIG_I2C_PROC is not set + +# +# L3 serial bus support +# +# CONFIG_L3 is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_GEN_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set +# CONFIG_RAW_DRIVER is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +CONFIG_AUTOFS4_FS=m +# CONFIG_REISERFS_FS is not set +CONFIG_ADFS_FS=y +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +CONFIG_EXT3_FS=y +CONFIG_EXT3_FS_XATTR=y +# CONFIG_EXT3_FS_POSIX_ACL is not set +CONFIG_JBD=y +# CONFIG_JBD_DEBUG is not set +# CONFIG_FAT_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_CRAMFS is not set +# CONFIG_TMPFS is not set +CONFIG_RAMFS=y +CONFIG_ISO9660_FS=y +CONFIG_JOLIET=y +# CONFIG_ZISOFS is not set +# CONFIG_JFS_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UDF_FS is not set +# CONFIG_UFS_FS is not set +# CONFIG_XFS_FS is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +# CONFIG_INTERMEZZO_FS is not set +CONFIG_NFS_FS=y +# CONFIG_NFS_V3 is not set +# CONFIG_NFS_V4 is not set +# CONFIG_NFSD is not set +CONFIG_SUNRPC=y +CONFIG_LOCKD=y +# CONFIG_EXPORTFS is not set +# CONFIG_CIFS is not set +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_AFS_FS is not set +CONFIG_FS_MBCACHE=y + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +CONFIG_ACORN_PARTITION=y +# CONFIG_ACORN_PARTITION_CUMANA is not set +# CONFIG_ACORN_PARTITION_EESOX is not set +CONFIG_ACORN_PARTITION_ICS=y +CONFIG_ACORN_PARTITION_ADFS=y +CONFIG_ACORN_PARTITION_POWERTEC=y +CONFIG_ACORN_PARTITION_RISCIX=y +CONFIG_OSF_PARTITION=y +CONFIG_AMIGA_PARTITION=y +# CONFIG_ATARI_PARTITION is not set +CONFIG_MAC_PARTITION=y +CONFIG_MSDOS_PARTITION=y +CONFIG_BSD_DISKLABEL=y +# CONFIG_MINIX_SUBPARTITION is not set +CONFIG_SOLARIS_X86_PARTITION=y +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set +CONFIG_SGI_PARTITION=y +# CONFIG_ULTRIX_PARTITION is not set +CONFIG_SUN_PARTITION=y +# CONFIG_EFI_PARTITION is not set +CONFIG_NLS=y + +# +# Native Language Support +# +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=m +CONFIG_NLS_CODEPAGE_737=m +CONFIG_NLS_CODEPAGE_775=m +CONFIG_NLS_CODEPAGE_850=m +CONFIG_NLS_CODEPAGE_852=m +CONFIG_NLS_CODEPAGE_855=m +CONFIG_NLS_CODEPAGE_857=m +CONFIG_NLS_CODEPAGE_860=m +CONFIG_NLS_CODEPAGE_861=m +CONFIG_NLS_CODEPAGE_862=m +CONFIG_NLS_CODEPAGE_863=m +CONFIG_NLS_CODEPAGE_864=m +CONFIG_NLS_CODEPAGE_865=m +CONFIG_NLS_CODEPAGE_866=m +CONFIG_NLS_CODEPAGE_869=m +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +CONFIG_NLS_CODEPAGE_874=m +CONFIG_NLS_ISO8859_8=m +# CONFIG_NLS_CODEPAGE_1250 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +CONFIG_NLS_ISO8859_1=m +CONFIG_NLS_ISO8859_2=m +CONFIG_NLS_ISO8859_3=m +CONFIG_NLS_ISO8859_4=m +CONFIG_NLS_ISO8859_5=m +CONFIG_NLS_ISO8859_6=m +CONFIG_NLS_ISO8859_7=m +CONFIG_NLS_ISO8859_9=m +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +CONFIG_NLS_KOI8_R=m +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_UTF8 is not set + +# +# Console drivers +# + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +CONFIG_FB_ACORN=y +# CONFIG_FB_VIRTUAL is not set +CONFIG_FBCON_ADVANCED=y +CONFIG_FBCON_MFB=y +CONFIG_FBCON_CFB2=y +CONFIG_FBCON_CFB4=y +CONFIG_FBCON_CFB8=y +CONFIG_FBCON_CFB16=y +CONFIG_FBCON_CFB24=y +CONFIG_FBCON_CFB32=y +# CONFIG_FBCON_ACCEL is not set +# CONFIG_FBCON_AFB is not set +# CONFIG_FBCON_ILBM is not set +# CONFIG_FBCON_IPLAN2P2 is not set +# CONFIG_FBCON_IPLAN2P4 is not set +# CONFIG_FBCON_IPLAN2P8 is not set +# CONFIG_FBCON_VGA_PLANES is not set +# CONFIG_FBCON_HGA is not set +# CONFIG_FBCON_FONTWIDTH8_ONLY is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +CONFIG_FBCON_FONTS=y +# CONFIG_FONT_8x8 is not set +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_PEARL_8x8 is not set +CONFIG_FONT_ACORN_8x8=y +# CONFIG_FONT_MINI_4x6 is not set + +# +# Sound +# +CONFIG_SOUND=m + +# +# Open Sound System +# +CONFIG_SOUND_PRIME=m +# CONFIG_SOUND_BT878 is not set +# CONFIG_SOUND_FUSION is not set +# CONFIG_SOUND_CS4281 is not set +# CONFIG_SOUND_ESSSOLO1 is not set +# CONFIG_SOUND_MAESTRO is not set +# CONFIG_SOUND_SONICVIBES is not set +# CONFIG_SOUND_TRIDENT is not set +# CONFIG_SOUND_MSNDCLAS is not set +# CONFIG_SOUND_MSNDPIN is not set +CONFIG_SOUND_OSS=m +# CONFIG_SOUND_TRACEINIT is not set +# CONFIG_SOUND_DMAP is not set +# CONFIG_SOUND_AD1816 is not set +# CONFIG_SOUND_SGALAXY is not set +# CONFIG_SOUND_ADLIB is not set +# CONFIG_SOUND_ACI_MIXER is not set +# CONFIG_SOUND_CS4232 is not set +# CONFIG_SOUND_SSCAPE is not set +# CONFIG_SOUND_GUS is not set +# CONFIG_SOUND_VMIDI is not set +# CONFIG_SOUND_TRIX is not set +# CONFIG_SOUND_MSS is not set +# CONFIG_SOUND_MPU401 is not set +# CONFIG_SOUND_NM256 is not set +# CONFIG_SOUND_MAD16 is not set +# CONFIG_SOUND_PAS is not set +# CONFIG_SOUND_PSS is not set +# CONFIG_SOUND_SB is not set +# CONFIG_SOUND_AWE32_SYNTH is not set +# CONFIG_SOUND_WAVEFRONT is not set +# CONFIG_SOUND_MAUI is not set +# CONFIG_SOUND_YM3812 is not set +# CONFIG_SOUND_OPL3SA1 is not set +# CONFIG_SOUND_OPL3SA2 is not set +# CONFIG_SOUND_UART6850 is not set +# CONFIG_SOUND_AEDSP16 is not set +CONFIG_SOUND_VIDC=m +# CONFIG_SOUND_TVMIXER is not set + +# +# Advanced Linux Sound Architecture +# +# CONFIG_SND is not set + +# +# Misc devices +# + +# +# Multimedia Capabilities Port drivers +# +# CONFIG_MCP is not set + +# +# Console Switches +# +# CONFIG_SWITCHES is not set + +# +# USB support +# + +# +# Bluetooth support +# +# CONFIG_BT is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_USER=y +# CONFIG_DEBUG_INFO is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_SLAB is not set +CONFIG_MAGIC_SYSRQ=y +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_WAITQ is not set +# CONFIG_DEBUG_BUGVERBOSE is not set +CONFIG_DEBUG_ERRORS=y +# CONFIG_KALLSYMS is not set +CONFIG_DEBUG_LL=y + +# +# Security options +# +CONFIG_SECURITY_CAPABILITIES=y + +# +# Cryptographic options +# +# CONFIG_CRYPTO is not set + +# +# Library routines +# +# CONFIG_CRC32 is not set diff -prauN linux-2.6.0-test5/arch/arm/configs/shannon_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/shannon_defconfig --- linux-2.6.0-test5/arch/arm/configs/shannon_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/shannon_defconfig 2003-09-25 19:15:44.000000000 -0700 @@ -0,0 +1,735 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set +# CONFIG_GENERIC_BUST_SPINLOCK is not set +# CONFIG_GENERIC_ISA_DMA is not set + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +CONFIG_OBSOLETE=y + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set + +# +# System Type +# +# CONFIG_ARCH_ANAKIN is not set +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_CAMELOT is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_SHARK is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Archimedes/A5000 Implementations (select only ONE) +# + +# +# Footbridge Implementations +# + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_SA1100_ADSBITSY is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_H3600 is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FLEXANET is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_GRAPHICSMASTER is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set +CONFIG_SA1100_SHANNON=y +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_SIMPAD is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +# CONFIG_SA1100_USB is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_EP7211 is not set +# CONFIG_ARCH_EP7212 is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set + +# +# Processor Type +# +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM922T is not set +# CONFIG_CPU_ARM926T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +CONFIG_CPU_SA1100=y +# CONFIG_ARM_THUMB is not set +CONFIG_DISCONTIGMEM=y + +# +# General setup +# +# CONFIG_PCI is not set +CONFIG_ISA=y +# CONFIG_ISA_DMA is not set +# CONFIG_CPU_FREQ is not set +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=y +# CONFIG_I82092 is not set +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +CONFIG_PCMCIA_SA1100=y +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y + +# +# At least one math emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="console=ttySA0,9600 console=tty1 root=/dev/mtdblock2 init=/linuxrc" +# CONFIG_LEDS is not set +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_BOOTLDR_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +# CONFIG_MTD_CFI_INTELEXT is not set +CONFIG_MTD_CFI_AMDSTD=y +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +# CONFIG_MTD_OBSOLETE_CHIPS is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +CONFIG_MTD_SA1100=y +# CONFIG_MTD_IQ80310 is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLKMTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=8192 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_PACKET_MMAP=y +# CONFIG_NETLINK is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set + +# +# +# +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_LANCE is not set +# CONFIG_NET_VENDOR_SMC is not set +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_AT1700 is not set +# CONFIG_DEPCA is not set +# CONFIG_HP100 is not set +# CONFIG_NET_ISA is not set +# CONFIG_NET_PCI is not set +# CONFIG_NET_POCKET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +# CONFIG_PCMCIA_3C589 is not set +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +CONFIG_PCMCIA_PCNET=y +# CONFIG_PCMCIA_NMCLAN is not set +CONFIG_PCMCIA_SMC91C92=y +# CONFIG_PCMCIA_XIRC2PS is not set +# CONFIG_NET_PCMCIA_RADIO is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=m + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=m + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +# CONFIG_BLK_DEV_IDEDISK is not set +# CONFIG_BLK_DEV_IDECS is not set +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set + +# +# IDE chipset support/bugfixes +# +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_IDE_CHIPSETS is not set +# CONFIG_IDEDMA_AUTO is not set +# CONFIG_BLK_DEV_ATARAID is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +CONFIG_INPUT=y +CONFIG_INPUT_KEYBDEV=y +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +# CONFIG_SERIAL is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=9600 +# CONFIG_SERIAL_8250 is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=256 + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# L3 serial bus support +# +# CONFIG_L3 is not set + +# +# Other L3 adapters +# +# CONFIG_BIT_SA1100_GPIO is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_MOUSE is not set + +# +# Joysticks +# +# CONFIG_INPUT_GAMEPORT is not set +# CONFIG_INPUT_SERIO is not set + +# +# Joysticks +# +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +CONFIG_WATCHDOG=y +# CONFIG_WATCHDOG_NOWAYOUT is not set +# CONFIG_SOFT_WATCHDOG is not set +# CONFIG_WDT is not set +# CONFIG_WDTPCI is not set +# CONFIG_PCWATCHDOG is not set +# CONFIG_ACQUIRE_WDT is not set +# CONFIG_ADVANTECH_WDT is not set +CONFIG_SA1100_WATCHDOG=y +# CONFIG_EUROTECH_WDT is not set +# CONFIG_IB700_WDT is not set +# CONFIG_I810_TCO is not set +# CONFIG_MIXCOMWD is not set +# CONFIG_60XX_WDT is not set +# CONFIG_W83877F_WDT is not set +# CONFIG_MACHZ_WDT is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +CONFIG_SA1100_RTC=y +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# PCMCIA character devices +# + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_CMS_FS is not set +# CONFIG_EXT3_FS is not set +# CONFIG_JBD is not set +CONFIG_FAT_FS=y +CONFIG_MSDOS_FS=y +# CONFIG_UMSDOS_FS is not set +CONFIG_VFAT_FS=y +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +# CONFIG_CRAMFS is not set +# CONFIG_TMPFS is not set +CONFIG_RAMFS=y +# CONFIG_ISO9660_FS is not set +CONFIG_MINIX_FS=y +# CONFIG_FREEVXFS_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_ROMFS_FS is not set +# CONFIG_EXT2_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UDF_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +# CONFIG_INTERMEZZO_FS is not set +CONFIG_NFS_FS=y +# CONFIG_NFS_V3 is not set +# CONFIG_NFSD is not set +CONFIG_SUNRPC=y +CONFIG_LOCKD=y +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_ZISOFS_FS is not set +# CONFIG_ZLIB_FS_INFLATE is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_SMB_NLS is not set +CONFIG_NLS=y + +# +# Native Language Support +# +CONFIG_NLS_DEFAULT="iso8859-1" +# CONFIG_NLS_CODEPAGE_437 is not set +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ISO8859_1 is not set +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_UTF8 is not set + +# +# Console drivers +# +CONFIG_PC_KEYMAP=y +# CONFIG_VGA_CONSOLE is not set + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +CONFIG_FB_SA1100=y +# CONFIG_FB_VIRTUAL is not set +# CONFIG_FBCON_ADVANCED is not set +CONFIG_FBCON_CFB2=y +CONFIG_FBCON_CFB4=y +CONFIG_FBCON_CFB8=y +CONFIG_FBCON_CFB16=y +# CONFIG_FBCON_FONTWIDTH8_ONLY is not set +# CONFIG_FBCON_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y + +# +# Sound +# +CONFIG_SOUND=y +# CONFIG_SOUND_BT878 is not set +# CONFIG_SOUND_FUSION is not set +# CONFIG_SOUND_CS4281 is not set +# CONFIG_SOUND_ESSSOLO1 is not set +# CONFIG_SOUND_MAESTRO is not set +# CONFIG_SOUND_SONICVIBES is not set +# CONFIG_SOUND_TRIDENT is not set +# CONFIG_SOUND_MSNDCLAS is not set +# CONFIG_SOUND_MSNDPIN is not set +CONFIG_SOUND_SA1100=y +# CONFIG_SOUND_SA1100SSP is not set +# CONFIG_SOUND_OSS is not set + +# +# Multimedia Capabilities Port drivers +# +CONFIG_MCP=y +CONFIG_MCP_SA1100=y +CONFIG_MCP_UCB1200=y +CONFIG_MCP_UCB1200_AUDIO=y +CONFIG_MCP_UCB1200_TS=y + +# +# USB support +# +# CONFIG_USB is not set + +# +# USB Controllers +# + +# +# USB Device Class drivers +# + +# +# USB Human Interface Devices (HID) +# + +# +# USB Imaging devices +# + +# +# USB Multimedia devices +# + +# +# Video4Linux support is needed for USB Multimedia device support +# + +# +# USB Network adaptors +# + +# +# USB port drivers +# + +# +# USB Serial Converter support +# + +# +# USB Miscellaneous drivers +# + +# +# Bluetooth support +# +# CONFIG_BT is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_USER=y +# CONFIG_DEBUG_INFO is not set +# CONFIG_DEBUG_SLAB is not set +CONFIG_MAGIC_SYSRQ=y +# CONFIG_DEBUG_SPINLOCK is not set +CONFIG_DEBUG_LL=y diff -prauN linux-2.6.0-test5/arch/arm/configs/shark_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/shark_defconfig --- linux-2.6.0-test5/arch/arm/configs/shark_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/shark_defconfig 2003-09-25 19:15:44.000000000 -0700 @@ -0,0 +1,852 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +CONFIG_MMU=y +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y + +# +# General setup +# +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +CONFIG_LOG_BUF_SHIFT=14 + +# +# Loadable module support +# +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +CONFIG_OBSOLETE_MODPARM=y +# CONFIG_MODVERSIONS is not set +CONFIG_KMOD=y + +# +# System Type +# +# CONFIG_ARCH_ADIFCC is not set +# CONFIG_ARCH_ANAKIN is not set +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_PXA is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_CAMELOT is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_IOP310 is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +CONFIG_ARCH_SHARK=y + +# +# Archimedes/A5000 Implementations +# + +# +# Archimedes/A5000 Implementations (select only ONE) +# + +# +# CLPS711X/EP721X Implementations +# + +# +# Epxa10db +# + +# +# Footbridge Implementations +# + +# +# IOP310 Implementation Options +# + +# +# IOP310 Chipset Features +# + +# +# Intel PXA250/210 Implementations +# + +# +# SA11x0 Implementations +# + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_SA110=y +CONFIG_CPU_32v4=y + +# +# Processor Features +# + +# +# General setup +# +CONFIG_PCI=y +CONFIG_PCI_HOST_VIA82C505=y +CONFIG_ISA=y +CONFIG_ISA_DMA=y +# CONFIG_ZBOOT_ROM is not set +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_PCI_LEGACY_PROC=y +# CONFIG_PCI_NAMES is not set +# CONFIG_HOTPLUG is not set + +# +# At least one math emulation must be selected +# +# CONFIG_FPE_NWFPE is not set +CONFIG_FPE_FASTFPE=y +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_PREEMPT is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="" +CONFIG_LEDS=y +CONFIG_LEDS_TIMER=y +# CONFIG_LEDS_CPU is not set +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +CONFIG_PARPORT=y +CONFIG_PARPORT_PC=y +CONFIG_PARPORT_PC_CML1=y +# CONFIG_PARPORT_SERIAL is not set +# CONFIG_PARPORT_PC_FIFO is not set +# CONFIG_PARPORT_PC_SUPERIO is not set +# CONFIG_PARPORT_ARC is not set +# CONFIG_PARPORT_OTHER is not set +# CONFIG_PARPORT_1284 is not set + +# +# Memory Technology Devices (MTD) +# +# CONFIG_MTD is not set + +# +# Plug and Play support +# +# CONFIG_PNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_UMEM is not set +CONFIG_BLK_DEV_LOOP=y +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +# CONFIG_BLK_DEV_INITRD is not set + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set + +# +# Networking support +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +# CONFIG_NETLINK_DEV is not set +# CONFIG_NETFILTER is not set +CONFIG_UNIX=y +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_IPV6 is not set +# CONFIG_XFRM_USER is not set + +# +# SCTP Configuration (EXPERIMENTAL) +# +CONFIG_IPV6_SCTP__=y +# CONFIG_IP_SCTP is not set +# CONFIG_ATM is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_LLC is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_ETHERTAP is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_MII is not set +# CONFIG_HAPPYMEAL is not set +# CONFIG_SUNGEM is not set +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_LANCE is not set +# CONFIG_NET_VENDOR_SMC is not set +# CONFIG_NET_VENDOR_RACAL is not set + +# +# Tulip family network device support +# +# CONFIG_NET_TULIP is not set +# CONFIG_AT1700 is not set +# CONFIG_DEPCA is not set +# CONFIG_HP100 is not set +# CONFIG_NET_ISA is not set +CONFIG_NET_PCI=y +# CONFIG_PCNET32 is not set +# CONFIG_AMD8111_ETH is not set +# CONFIG_ADAPTEC_STARFIRE is not set +# CONFIG_AC3200 is not set +# CONFIG_APRICOT is not set +# CONFIG_B44 is not set +CONFIG_CS89x0=y +# CONFIG_DGRS is not set +# CONFIG_EEPRO100 is not set +# CONFIG_E100 is not set +# CONFIG_FEALNX is not set +# CONFIG_NATSEMI is not set +# CONFIG_NE2K_PCI is not set +# CONFIG_8139CP is not set +# CONFIG_8139TOO is not set +# CONFIG_SIS900 is not set +# CONFIG_EPIC100 is not set +# CONFIG_SUNDANCE is not set +# CONFIG_TLAN is not set +# CONFIG_VIA_RHINE is not set +# CONFIG_NET_POCKET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_DL2K is not set +# CONFIG_E1000 is not set +# CONFIG_NS83820 is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_R8169 is not set +# CONFIG_SK98LIN is not set +# CONFIG_TIGON3 is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PLIP is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices (depends on LLC=y) +# +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# ATA/ATAPI/MFM/RLL support +# +CONFIG_IDE=y + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=y + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=y +# CONFIG_IDEDISK_MULTI_MODE is not set +# CONFIG_IDEDISK_STROKE is not set +CONFIG_BLK_DEV_IDECD=y +CONFIG_BLK_DEV_IDEFLOPPY=y +# CONFIG_BLK_DEV_IDESCSI is not set +# CONFIG_IDE_TASK_IOCTL is not set + +# +# IDE chipset support/bugfixes +# +# CONFIG_BLK_DEV_IDEPCI is not set +# CONFIG_IDE_CHIPSETS is not set + +# +# SCSI support +# +CONFIG_SCSI=m + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=m +CONFIG_CHR_DEV_ST=m +# CONFIG_CHR_DEV_OSST is not set +CONFIG_BLK_DEV_SR=m +# CONFIG_BLK_DEV_SR_VENDOR is not set +CONFIG_CHR_DEV_SG=m + +# +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs +# +# CONFIG_SCSI_MULTI_LUN is not set +# CONFIG_SCSI_REPORT_LUNS is not set +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set + +# +# SCSI low-level drivers +# +# CONFIG_BLK_DEV_3W_XXXX_RAID is not set +# CONFIG_SCSI_7000FASST is not set +# CONFIG_SCSI_ACARD is not set +# CONFIG_SCSI_AHA152X is not set +# CONFIG_SCSI_AHA1542 is not set +# CONFIG_SCSI_AACRAID is not set +# CONFIG_SCSI_AIC7XXX is not set +# CONFIG_SCSI_AIC7XXX_OLD is not set +# CONFIG_SCSI_AIC79XX is not set +# CONFIG_SCSI_DPT_I2O is not set +# CONFIG_SCSI_ADVANSYS is not set +# CONFIG_SCSI_IN2000 is not set +# CONFIG_SCSI_AM53C974 is not set +# CONFIG_SCSI_MEGARAID is not set +# CONFIG_SCSI_BUSLOGIC is not set +# CONFIG_SCSI_CPQFCTS is not set +# CONFIG_SCSI_DMX3191D is not set +# CONFIG_SCSI_DTC3280 is not set +# CONFIG_SCSI_EATA is not set +# CONFIG_SCSI_EATA_PIO is not set +# CONFIG_SCSI_FUTURE_DOMAIN is not set +# CONFIG_SCSI_GDTH is not set +# CONFIG_SCSI_GENERIC_NCR5380 is not set +# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set +# CONFIG_SCSI_INITIO is not set +# CONFIG_SCSI_INIA100 is not set +# CONFIG_SCSI_PPA is not set +# CONFIG_SCSI_IMM is not set +# CONFIG_SCSI_NCR53C406A is not set +# CONFIG_SCSI_NCR53C7xx is not set +# CONFIG_SCSI_SYM53C8XX_2 is not set +# CONFIG_SCSI_NCR53C8XX is not set +# CONFIG_SCSI_SYM53C8XX is not set +# CONFIG_SCSI_PAS16 is not set +# CONFIG_SCSI_PCI2000 is not set +# CONFIG_SCSI_PCI2220I is not set +# CONFIG_SCSI_PSI240I is not set +# CONFIG_SCSI_QLOGIC_FAS is not set +# CONFIG_SCSI_QLOGIC_ISP is not set +# CONFIG_SCSI_QLOGIC_FC is not set +# CONFIG_SCSI_QLOGIC_1280 is not set +# CONFIG_SCSI_SYM53C416 is not set +# CONFIG_SCSI_DC390T is not set +# CONFIG_SCSI_T128 is not set +# CONFIG_SCSI_U14_34F is not set +# CONFIG_SCSI_NSP32 is not set +# CONFIG_SCSI_DEBUG is not set + +# +# IEEE 1394 (FireWire) support (EXPERIMENTAL) +# +# CONFIG_IEEE1394 is not set + +# +# I2O device support +# +# CONFIG_I2O is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN_BOOL is not set + +# +# Input device support +# +CONFIG_INPUT=y + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=y +CONFIG_INPUT_MOUSEDEV_PSAUX=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_TSDEV is not set +# CONFIG_INPUT_TSLIBDEV is not set +# CONFIG_INPUT_EVDEV is not set +# CONFIG_INPUT_EVBUG is not set + +# +# Input I/O drivers +# +# CONFIG_GAMEPORT is not set +CONFIG_SOUND_GAMEPORT=y +CONFIG_SERIO=y +CONFIG_SERIO_I8042=y +# CONFIG_SERIO_SERPORT is not set +# CONFIG_SERIO_CT82C710 is not set +# CONFIG_SERIO_PARKBD is not set +# CONFIG_SERIO_PCIPS2 is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +CONFIG_KEYBOARD_ATKBD=y +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +CONFIG_INPUT_MOUSE=y +CONFIG_MOUSE_PS2=y +# CONFIG_MOUSE_SERIAL is not set +# CONFIG_MOUSE_INPORT is not set +# CONFIG_MOUSE_LOGIBM is not set +# CONFIG_MOUSE_PC110PAD is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TOUCHSCREEN is not set +# CONFIG_INPUT_MISC is not set + +# +# Character devices +# +# CONFIG_VT is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +# CONFIG_SERIAL_8250_EXTENDED is not set + +# +# Non-8250 serial port support +# +# CONFIG_SERIAL_DZ is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=256 +CONFIG_PRINTER=m +# CONFIG_LP_CONSOLE is not set +# CONFIG_PPDEV is not set +# CONFIG_TIPAR is not set + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# I2C Hardware Sensors Mainboard support +# + +# +# I2C Hardware Sensors Chip support +# + +# +# L3 serial bus support +# +# CONFIG_L3 is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_QIC02_TAPE is not set + +# +# IPMI +# +# CONFIG_IPMI_HANDLER is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_NVRAM is not set +CONFIG_RTC=y +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_HANGCHECK_TIMER is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +CONFIG_EXT3_FS=y +CONFIG_EXT3_FS_XATTR=y +# CONFIG_EXT3_FS_POSIX_ACL is not set +CONFIG_JBD=y +# CONFIG_JBD_DEBUG is not set +CONFIG_FS_MBCACHE=y +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_XFS_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set + +# +# CD-ROM/DVD Filesystems +# +CONFIG_ISO9660_FS=y +CONFIG_JOLIET=y +# CONFIG_ZISOFS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=y +CONFIG_MSDOS_FS=y +CONFIG_VFAT_FS=y +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_DEVFS_FS=y +CONFIG_DEVFS_MOUNT=y +# CONFIG_DEVFS_DEBUG is not set +# CONFIG_DEVPTS_FS is not set +# CONFIG_TMPFS is not set +CONFIG_RAMFS=y + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_CRAMFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +CONFIG_NFS_FS=y +# CONFIG_NFS_V3 is not set +# CONFIG_NFS_V4 is not set +# CONFIG_NFSD is not set +CONFIG_LOCKD=y +# CONFIG_EXPORTFS is not set +CONFIG_SUNRPC=y +# CONFIG_SUNRPC_GSS is not set +# CONFIG_SMB_FS is not set +# CONFIG_CIFS is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_INTERMEZZO_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_NEC98_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_EFI_PARTITION is not set +CONFIG_NLS=y + +# +# Native Language Support +# +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=y +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +CONFIG_NLS_CODEPAGE_850=y +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1250 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +CONFIG_NLS_ISO8859_1=y +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_UTF8 is not set + +# +# Graphics support +# +CONFIG_FB=y +# CONFIG_FB_CIRRUS is not set +# CONFIG_FB_PM2 is not set +CONFIG_FB_CYBER2000=y +# CONFIG_FB_IMSTT is not set +# CONFIG_FB_RIVA is not set +# CONFIG_FB_MATROX is not set +# CONFIG_FB_RADEON is not set +# CONFIG_FB_ATY128 is not set +# CONFIG_FB_ATY is not set +# CONFIG_FB_SIS is not set +# CONFIG_FB_NEOMAGIC is not set +# CONFIG_FB_3DFX is not set +# CONFIG_FB_VOODOO1 is not set +# CONFIG_FB_TRIDENT is not set +# CONFIG_FB_PM3 is not set +# CONFIG_FB_VIRTUAL is not set + +# +# Logo configuration +# +# CONFIG_LOGO is not set + +# +# Sound +# +CONFIG_SOUND=m + +# +# Advanced Linux Sound Architecture +# +# CONFIG_SND is not set + +# +# Open Sound System +# +CONFIG_SOUND_PRIME=m +# CONFIG_SOUND_BT878 is not set +# CONFIG_SOUND_CMPCI is not set +# CONFIG_SOUND_EMU10K1 is not set +# CONFIG_SOUND_FUSION is not set +# CONFIG_SOUND_CS4281 is not set +# CONFIG_SOUND_ES1370 is not set +# CONFIG_SOUND_ES1371 is not set +# CONFIG_SOUND_ESSSOLO1 is not set +# CONFIG_SOUND_MAESTRO is not set +# CONFIG_SOUND_MAESTRO3 is not set +# CONFIG_SOUND_ICH is not set +# CONFIG_SOUND_RME96XX is not set +# CONFIG_SOUND_SONICVIBES is not set +# CONFIG_SOUND_TRIDENT is not set +# CONFIG_SOUND_MSNDCLAS is not set +# CONFIG_SOUND_MSNDPIN is not set +# CONFIG_SOUND_VIA82CXXX is not set +CONFIG_SOUND_OSS=m +# CONFIG_SOUND_TRACEINIT is not set +# CONFIG_SOUND_DMAP is not set +# CONFIG_SOUND_AD1816 is not set +# CONFIG_SOUND_SGALAXY is not set +CONFIG_SOUND_ADLIB=m +# CONFIG_SOUND_ACI_MIXER is not set +# CONFIG_SOUND_CS4232 is not set +# CONFIG_SOUND_SSCAPE is not set +# CONFIG_SOUND_GUS is not set +# CONFIG_SOUND_VMIDI is not set +# CONFIG_SOUND_TRIX is not set +# CONFIG_SOUND_MSS is not set +# CONFIG_SOUND_MPU401 is not set +# CONFIG_SOUND_NM256 is not set +# CONFIG_SOUND_MAD16 is not set +# CONFIG_SOUND_PAS is not set +# CONFIG_SOUND_PSS is not set +CONFIG_SOUND_SB=m +# CONFIG_SOUND_AWE32_SYNTH is not set +# CONFIG_SOUND_WAVEFRONT is not set +# CONFIG_SOUND_MAUI is not set +# CONFIG_SOUND_YM3812 is not set +# CONFIG_SOUND_OPL3SA1 is not set +# CONFIG_SOUND_OPL3SA2 is not set +# CONFIG_SOUND_YMFPCI is not set +# CONFIG_SOUND_UART6850 is not set +# CONFIG_SOUND_AEDSP16 is not set + +# +# Misc devices +# + +# +# Multimedia Capabilities Port drivers +# +# CONFIG_MCP is not set + +# +# Console Switches +# +# CONFIG_SWITCHES is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# Bluetooth support +# +# CONFIG_BT is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_USER=y +# CONFIG_DEBUG_INFO is not set +# CONFIG_DEBUG_KERNEL is not set + +# +# Security options +# +# CONFIG_SECURITY is not set + +# +# Cryptographic options +# +# CONFIG_CRYPTO is not set + +# +# Library routines +# +CONFIG_CRC32=y diff -prauN linux-2.6.0-test5/arch/arm/configs/sherman_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/sherman_defconfig --- linux-2.6.0-test5/arch/arm/configs/sherman_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/sherman_defconfig 2003-09-25 19:15:44.000000000 -0700 @@ -0,0 +1,215 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y + +# +# System and processor type +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_FOOTBRIDGE is not set +CONFIG_ARCH_SA1100=y +CONFIG_CPU_SA1100=y +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_EMPEG is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_VICTOR is not set +CONFIG_SA1100_SHERMAN=y +# CONFIG_VICTOR_BOARD1 is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_ISA_DMA is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set +# CONFIG_CPU_ARM2 is not set +# CONFIG_CPU_ARM3 is not set +# CONFIG_CPU_ARM6 is not set +# CONFIG_CPU_ARM7 is not set +CONFIG_CPU_SA110=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +CONFIG_ALIGNMENT_TRAP=y +# CONFIG_TEXT_SECTIONS is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set + +# +# General setup +# +CONFIG_ZBOOT_ROM=y +CONFIG_ZBOOT_ROM_TEXT=0x00050000 +CONFIG_ZBOOT_ROM_BSS=0xc0200000 +# CONFIG_NET is not set +# CONFIG_SYSVIPC is not set +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_SYSCTL is not set +CONFIG_NWFPE=y +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_ARTHUR is not set +# CONFIG_PARPORT is not set +CONFIG_CMDLINE="mem=64M@0xc0000000 mem=64M@0xc8000000 root=/dev/mtdblock2" + +# +# Plug and Play support +# +# CONFIG_PNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_IDE is not set + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_IDEDISK is not set +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_IDE_CHIPSETS is not set + +# +# Additional Block Devices +# +# CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_MD is not set +CONFIG_BLK_DEV_RAM=y +# CONFIG_BLK_DEV_INITRD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE_PARPORT is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_FLASH=y + +# +# Character devices +# +# CONFIG_VT is not set +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +# CONFIG_SERIAL is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_UNIX98_PTYS is not set +# CONFIG_MOUSE is not set +# CONFIG_QIC02_TAPE is not set +# CONFIG_WATCHDOG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set + +# +# Video For Linux +# +# CONFIG_VIDEO_DEV is not set + +# +# Joystick support +# +# CONFIG_JOYSTICK is not set +# CONFIG_DTLK is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# Filesystems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_FAT_FS is not set +# CONFIG_MSDOS_FS is not set +# CONFIG_UMSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_MINIX_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set + +# +# Partition Types +# +# CONFIG_OSF_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +# CONFIG_MSDOS_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ACORN_PARTITION is not set +CONFIG_NLS=y + +# +# Native Language Support +# +# CONFIG_NLS_CODEPAGE_437 is not set +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_1 is not set +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_USER=y +CONFIG_DEBUG_INFO=y +# CONFIG_MAGIC_SYSRQ is not set +CONFIG_DEBUG_LL=y diff -prauN linux-2.6.0-test5/arch/arm/configs/stork_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/stork_defconfig --- linux-2.6.0-test5/arch/arm/configs/stork_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/stork_defconfig 2003-09-25 19:15:44.000000000 -0700 @@ -0,0 +1,966 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set +# CONFIG_GENERIC_BUST_SPINLOCK is not set +# CONFIG_GENERIC_ISA_DMA is not set + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +CONFIG_KMOD=y + +# +# System Type +# +# CONFIG_ARCH_ADIFCC is not set +# CONFIG_ARCH_ANAKIN is not set +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_CAMELOT is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_IOP310 is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_SHARK is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Archimedes/A5000 Implementations (select only ONE) +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_ADSBITSY is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_H3100 is not set +CONFIG_SA1100_H3600=y +# CONFIG_SA1100_H3800 is not set +CONFIG_SA1100_H3XXX=y +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FLEXANET is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_GRAPHICSMASTER is not set +# CONFIG_SA1100_BADGE4 is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_PT_SYSTEM3 is not set +# CONFIG_SA1100_SHANNON is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_SIMPAD is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +CONFIG_SA1100_USB=m +CONFIG_SA1100_USB_NETLINK=m +# CONFIG_SA1100_USB_CHAR is not set +CONFIG_H3600_SLEEVE=m + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_AUTCPU12 is not set +# CONFIG_ARCH_CDB89712 is not set +# CONFIG_ARCH_CLEP7312 is not set +# CONFIG_ARCH_EDB7211 is not set +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_FORTUNET is not set +# CONFIG_ARCH_EP7211 is not set +# CONFIG_ARCH_EP7212 is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set + +# +# Processor Type +# +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM922T is not set +# CONFIG_CPU_ARM926T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +CONFIG_CPU_SA1100=y +# CONFIG_XSCALE_PMU is not set +# CONFIG_ARM_THUMB is not set +CONFIG_DISCONTIGMEM=y + +# +# General setup +# +# CONFIG_PCI is not set +CONFIG_ISA=y +# CONFIG_ISA_DMA is not set +# CONFIG_FIQ is not set +CONFIG_CPU_FREQ=y +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=m +CONFIG_PCMCIA_PROBE=y +# CONFIG_I82092 is not set +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_CLPS6700 is not set +CONFIG_PCMCIA_SA1100=m +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y + +# +# At least one math emulation must be selected +# +CONFIG_FPE_NWFPE=m +CONFIG_FPE_FASTFPE=y +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +CONFIG_PM=y +# CONFIG_APM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="N" +# CONFIG_LEDS is not set +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_PARTITIONS=y +CONFIG_MTD_REDBOOT_PARTS=y +CONFIG_MTD_BOOTLDR_PARTS=y +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_NOSWAP=y +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_GEOMETRY is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +# CONFIG_MTD_OBSOLETE_CHIPS is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set +# CONFIG_MTD_JEDEC is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_CDB89712 is not set +CONFIG_MTD_SA1100=y +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set +# CONFIG_MTD_EPXA10DB is not set +# CONFIG_MTD_PCI is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLKMTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_CISS_SCSI_TAPE is not set +# CONFIG_BLK_DEV_DAC960 is not set +CONFIG_BLK_DEV_LOOP=m +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_RAM is not set +# CONFIG_BLK_DEV_INITRD is not set + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_MD_MULTIPATH is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +CONFIG_NETLINK=y +CONFIG_RTNETLINK=y +# CONFIG_NETLINK_DEV is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set +# CONFIG_VLAN_8021Q is not set + +# +# +# +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_ETHERTAP is not set + +# +# Ethernet (10 or 100Mbit) +# +# CONFIG_NET_ETHERNET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_DL2K is not set +# CONFIG_MYRI_SBUS is not set +# CONFIG_NS83820 is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PLIP is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +# CONFIG_PPPOE is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +CONFIG_NET_RADIO=y +# CONFIG_STRIP is not set +CONFIG_WAVELAN=m +# CONFIG_ARLAN is not set +# CONFIG_AIRONET4500 is not set +# CONFIG_AIRONET4500_NONCS is not set +# CONFIG_AIRONET4500_PROC is not set +# CONFIG_AIRO is not set +CONFIG_HERMES=m + +# +# Wireless Pcmcia cards support +# +CONFIG_PCMCIA_HERMES=m +# CONFIG_AIRO_CS is not set +CONFIG_NET_WIRELESS=y + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +CONFIG_PCMCIA_3C589=m +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +CONFIG_PCMCIA_PCNET=m +# CONFIG_PCMCIA_NMCLAN is not set +# CONFIG_PCMCIA_SMC91C92 is not set +CONFIG_PCMCIA_XIRC2PS=m +# CONFIG_PCMCIA_AXNET is not set +# CONFIG_ARCNET_COM20020_CS is not set +# CONFIG_PCMCIA_IBMTR is not set +# CONFIG_NET_PCMCIA_RADIO is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=m + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=m + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=m +# CONFIG_IDEDISK_MULTI_MODE is not set +CONFIG_BLK_DEV_IDECS=m +CONFIG_BLK_DEV_IDECD=m +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set + +# +# IDE chipset support/bugfixes +# +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +# CONFIG_IDE_CHIPSETS is not set +# CONFIG_IDEDMA_AUTO is not set +# CONFIG_BLK_DEV_ATARAID is not set +# CONFIG_BLK_DEV_ATARAID_PDC is not set +# CONFIG_BLK_DEV_ATARAID_HPT is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +# CONFIG_INPUT is not set +# CONFIG_INPUT_KEYBDEV is not set +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set + +# +# Character devices +# +CONFIG_VT=y +# CONFIG_VT_CONSOLE is not set +CONFIG_SERIAL=y +CONFIG_SERIAL_CONSOLE=y +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_ANAKIN is not set +# CONFIG_SERIAL_ANAKIN_CONSOLE is not set +# CONFIG_SERIAL_AMBA is not set +# CONFIG_SERIAL_AMBA_CONSOLE is not set +# CONFIG_SERIAL_CLPS711X is not set +# CONFIG_SERIAL_CLPS711X_CONSOLE is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +# CONFIG_SERIAL_UART00 is not set +# CONFIG_SERIAL_UART00_CONSOLE is not set +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=115200 +CONFIG_SERIAL_8250=m +# CONFIG_SERIAL_8250_CONSOLE is not set +# CONFIG_ATOMWIDE_SERIAL is not set +# CONFIG_DUALSP_SERIAL is not set +# CONFIG_SERIAL_8250_EXTENDED is not set +# CONFIG_SERIAL_8250_MANY_PORTS is not set +# CONFIG_SERIAL_8250_SHARE_IRQ is not set +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +# CONFIG_SERIAL_8250_MULTIPORT is not set +# CONFIG_SERIAL_8250_RSA is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=32 + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# L3 serial bus support +# +CONFIG_L3=y +CONFIG_L3_ALGOBIT=y +CONFIG_L3_BIT_SA1100_GPIO=y + +# +# Other L3 adapters +# +# CONFIG_L3_SA1111 is not set +CONFIG_BIT_SA1100_GPIO=y + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +CONFIG_MOUSE=m +# CONFIG_PSMOUSE is not set +# CONFIG_82C710_MOUSE is not set +# CONFIG_PC110_PAD is not set + +# +# Joysticks +# +# CONFIG_INPUT_GAMEPORT is not set + +# +# Input core support is needed for gameports +# + +# +# Input core support is needed for joysticks +# +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +CONFIG_SA1100_RTC=m +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# PCMCIA character devices +# +# CONFIG_PCMCIA_SERIAL_CS is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_REISERFS_PROC_INFO is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EXT3_FS is not set +# CONFIG_JBD is not set +# CONFIG_JBD_DEBUG is not set +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +# CONFIG_UMSDOS_FS is not set +CONFIG_VFAT_FS=m +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_CRAMFS=y +# CONFIG_TMPFS is not set +CONFIG_RAMFS=y +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_ZISOFS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +CONFIG_DEVFS_FS=y +CONFIG_DEVFS_MOUNT=y +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +# CONFIG_INTERMEZZO_FS is not set +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +# CONFIG_ROOT_NFS is not set +CONFIG_NFSD=m +CONFIG_NFSD_V3=y +CONFIG_SUNRPC=y +CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y +CONFIG_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set +# CONFIG_ZISOFS_FS is not set +CONFIG_ZLIB_FS_INFLATE=y + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +CONFIG_SMB_NLS=y +CONFIG_NLS=y + +# +# Native Language Support +# +CONFIG_NLS_DEFAULT="iso8859-1" +# CONFIG_NLS_CODEPAGE_437 is not set +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ISO8859_1 is not set +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_UTF8 is not set + +# +# Console drivers +# +CONFIG_PC_KEYMAP=y +# CONFIG_VGA_CONSOLE is not set + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_ACORN is not set +# CONFIG_FB_ANAKIN is not set +# CONFIG_FB_CLPS711X is not set +CONFIG_FB_SA1100=y +# CONFIG_FB_CYBER2000 is not set +# CONFIG_FB_VIRTUAL is not set +CONFIG_FBCON_ADVANCED=y +# CONFIG_FBCON_MFB is not set +# CONFIG_FBCON_CFB2 is not set +# CONFIG_FBCON_CFB4 is not set +# CONFIG_FBCON_CFB8 is not set +CONFIG_FBCON_CFB16=y +# CONFIG_FBCON_CFB24 is not set +# CONFIG_FBCON_CFB32 is not set +# CONFIG_FBCON_AFB is not set +# CONFIG_FBCON_ILBM is not set +# CONFIG_FBCON_IPLAN2P2 is not set +# CONFIG_FBCON_IPLAN2P4 is not set +# CONFIG_FBCON_IPLAN2P8 is not set +# CONFIG_FBCON_MAC is not set +# CONFIG_FBCON_VGA_PLANES is not set +# CONFIG_FBCON_VGA is not set +# CONFIG_FBCON_HGA is not set +CONFIG_FBCON_FONTWIDTH8_ONLY=y +CONFIG_FBCON_FONTS=y +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set + +# +# Sound +# +CONFIG_SOUND=y +# CONFIG_SOUND_BT878 is not set +# CONFIG_SOUND_CMPCI is not set +# CONFIG_SOUND_EMU10K1 is not set +# CONFIG_MIDI_EMU10K1 is not set +# CONFIG_SOUND_FUSION is not set +# CONFIG_SOUND_CS4281 is not set +# CONFIG_SOUND_ES1370 is not set +# CONFIG_SOUND_ES1371 is not set +# CONFIG_SOUND_ESSSOLO1 is not set +# CONFIG_SOUND_MAESTRO is not set +# CONFIG_SOUND_MAESTRO3 is not set +# CONFIG_SOUND_ICH is not set +# CONFIG_SOUND_RME96XX is not set +# CONFIG_SOUND_SONICVIBES is not set +# CONFIG_SOUND_TRIDENT is not set +# CONFIG_SOUND_MSNDCLAS is not set +# CONFIG_SOUND_MSNDPIN is not set +# CONFIG_SOUND_VIA82CXXX is not set +# CONFIG_MIDI_VIA82CXXX is not set +CONFIG_SOUND_SA1100=y +CONFIG_SOUND_UDA1341=m +# CONFIG_SOUND_ASSABET_UDA1341 is not set +CONFIG_SOUND_H3600_UDA1341=m +# CONFIG_SOUND_PANGOLIN_UDA1341 is not set +# CONFIG_SOUND_SA1111_UDA1341 is not set +# CONFIG_SOUND_SA1100SSP is not set +# CONFIG_SOUND_OSS is not set +# CONFIG_SOUND_WAVEARTIST is not set +# CONFIG_SOUND_TVMIXER is not set + +# +# Multimedia Capabilities Port drivers +# +# CONFIG_MCP is not set +# CONFIG_MCP_SA1100 is not set +# CONFIG_MCP_UCB1200 is not set +# CONFIG_MCP_UCB1200_AUDIO is not set +# CONFIG_MCP_UCB1200_TS is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# USB Host Controller Drivers +# +# CONFIG_USB_EHCI_HCD is not set +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +# CONFIG_USB_OHCI is not set +# CONFIG_USB_OHCI_SA1111 is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set + +# +# SCSI support is needed for USB Storage +# +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# USB Human Interface Devices (HID) +# + +# +# Input core support is needed for USB HID +# + +# +# USB Imaging devices +# +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_HPUSBSCSI is not set + +# +# USB Multimedia devices +# + +# +# Video4Linux support is needed for USB Multimedia device support +# + +# +# USB Network adaptors +# +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_CDCETHER is not set +# CONFIG_USB_USBNET is not set + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_IPAQ is not set +# CONFIG_USB_SERIAL_IR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_KLSI is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set +# CONFIG_USB_SERIAL_OMNINET is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_AUERSWALD is not set + +# +# Bluetooth support +# +# CONFIG_BT is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +# CONFIG_DEBUG_USER is not set +# CONFIG_DEBUG_INFO is not set +# CONFIG_NO_PGT_CACHE is not set +# CONFIG_DEBUG_KERNEL is not set +# CONFIG_DEBUG_SLAB is not set +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_WAITQ is not set +# CONFIG_DEBUG_BUGVERBOSE is not set +# CONFIG_DEBUG_ERRORS is not set +# CONFIG_DEBUG_LL is not set +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set + +# +# Library routines +# +# CONFIG_CRC32 is not set diff -prauN linux-2.6.0-test5/arch/arm/configs/system3_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/system3_defconfig --- linux-2.6.0-test5/arch/arm/configs/system3_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/system3_defconfig 2003-09-25 19:15:44.000000000 -0700 @@ -0,0 +1,967 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set +# CONFIG_GENERIC_BUST_SPINLOCK is not set +# CONFIG_GENERIC_ISA_DMA is not set + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set + +# +# System Type +# +# CONFIG_ARCH_ANAKIN is not set +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_CAMELOT is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_SHARK is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Archimedes/A5000 Implementations (select only ONE) +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_ADSBITSY is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_H3600 is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FLEXANET is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_GRAPHICSMASTER is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_SHANNON is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_SIMPAD is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +CONFIG_SA1100_PT_SYSTEM3=y +CONFIG_SA1111=y +CONFIG_FORCE_MAX_ZONEORDER=9 +CONFIG_SA1100_USB=m +CONFIG_SA1100_USB_NETLINK=m +CONFIG_SA1100_USB_CHAR=m + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_AUTCPU12 is not set +# CONFIG_ARCH_CDB89712 is not set +# CONFIG_ARCH_CLEP7312 is not set +# CONFIG_ARCH_EDB7211 is not set +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_EP7211 is not set +# CONFIG_ARCH_EP7212 is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set + +# +# Processor Type +# +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM922T is not set +# CONFIG_CPU_ARM926T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +CONFIG_CPU_SA1100=y +# CONFIG_ARM_THUMB is not set +CONFIG_DISCONTIGMEM=y + +# +# General setup +# +# CONFIG_PCI is not set +CONFIG_ISA=y +# CONFIG_ISA_DMA is not set +CONFIG_CPU_FREQ=y +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=m +# CONFIG_I82092 is not set +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_CLPS6700 is not set +CONFIG_PCMCIA_SA1100=m +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y + +# +# At least one math emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +CONFIG_PM=y +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="noinitrd root=/dev/mtdblock3" +CONFIG_LEDS=y +CONFIG_LEDS_TIMER=y +CONFIG_LEDS_CPU=y +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_PARTITIONS=y +CONFIG_MTD_REDBOOT_PARTS=m +CONFIG_MTD_BOOTLDR_PARTS=m +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +# CONFIG_MTD_CHAR is not set +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +# CONFIG_MTD_OBSOLETE_CHIPS is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set +# CONFIG_MTD_JEDEC is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_CDB89712 is not set +CONFIG_MTD_SA1100=y +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set +# CONFIG_MTD_PCI is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLKMTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +CONFIG_BLK_DEV_LOOP=m +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_MD_MULTIPATH is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +# CONFIG_PACKET is not set +# CONFIG_NETLINK is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set +# CONFIG_VLAN_8021Q is not set + +# +# +# +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +CONFIG_DUMMY=m +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_ARM_AM79C961A is not set +# CONFIG_SUNLANCE is not set +# CONFIG_SUNBMAC is not set +# CONFIG_SUNQE is not set +# CONFIG_SUNLANCE is not set +# CONFIG_SUNGEM is not set +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_LANCE is not set +CONFIG_NET_VENDOR_SMC=y +# CONFIG_WD80x3 is not set +# CONFIG_ULTRAMCA is not set +# CONFIG_ULTRA is not set +# CONFIG_ULTRA32 is not set +CONFIG_SMC9194=m +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_AT1700 is not set +# CONFIG_DEPCA is not set +# CONFIG_HP100 is not set +# CONFIG_NET_ISA is not set +# CONFIG_NET_PCI is not set +# CONFIG_NET_POCKET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_DL2K is not set +# CONFIG_MYRI_SBUS is not set +# CONFIG_NS83820 is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PLIP is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +# CONFIG_PCMCIA_3C589 is not set +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +CONFIG_PCMCIA_PCNET=m +# CONFIG_PCMCIA_NMCLAN is not set +CONFIG_PCMCIA_SMC91C92=m +# CONFIG_PCMCIA_XIRC2PS is not set +# CONFIG_PCMCIA_AXNET is not set +# CONFIG_ARCNET_COM20020_CS is not set +# CONFIG_PCMCIA_IBMTR is not set +# CONFIG_NET_PCMCIA_RADIO is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +CONFIG_IRDA=m + +# +# IrDA protocols +# +CONFIG_IRLAN=m +# CONFIG_IRNET is not set +CONFIG_IRCOMM=m +# CONFIG_IRDA_ULTRA is not set +# CONFIG_IRDA_OPTIONS is not set + +# +# Infrared-port device drivers +# + +# +# SIR device drivers +# +CONFIG_IRTTY_SIR=m +CONFIG_IRPORT_SIR=m + +# +# Dongle support +# +# CONFIG_DONGLE is not set + +# +# FIR device drivers +# +# CONFIG_USB_IRDA is not set +# CONFIG_NSC_FIR is not set +# CONFIG_WINBOND_FIR is not set +# CONFIG_TOSHIBA_FIR is not set +# CONFIG_SMC_IRCC_FIR is not set +# CONFIG_ALI_FIR is not set +# CONFIG_VLSI_FIR is not set +CONFIG_SA1100_FIR=m + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=y + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=y + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=y +# CONFIG_IDEDISK_MULTI_MODE is not set +CONFIG_BLK_DEV_IDECS=m +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set + +# +# IDE chipset support/bugfixes +# +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +# CONFIG_IDE_CHIPSETS is not set +# CONFIG_IDEDMA_AUTO is not set +# CONFIG_BLK_DEV_ATARAID is not set +# CONFIG_BLK_DEV_ATARAID_PDC is not set +# CONFIG_BLK_DEV_ATARAID_HPT is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +CONFIG_INPUT=y +CONFIG_INPUT_KEYBDEV=y +CONFIG_INPUT_MOUSEDEV=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set + +# +# Character devices +# +CONFIG_VT=y +# CONFIG_VT_CONSOLE is not set +# CONFIG_SERIAL is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_ANAKIN is not set +# CONFIG_SERIAL_ANAKIN_CONSOLE is not set +# CONFIG_SERIAL_AMBA is not set +# CONFIG_SERIAL_AMBA_CONSOLE is not set +# CONFIG_SERIAL_CLPS711X is not set +# CONFIG_SERIAL_CLPS711X_CONSOLE is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +# CONFIG_SERIAL_UART00 is not set +# CONFIG_SERIAL_UART00_CONSOLE is not set +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=38400 +CONFIG_SERIAL_8250=m +# CONFIG_SERIAL_8250_CONSOLE is not set +# CONFIG_SERIAL_8250_EXTENDED is not set +# CONFIG_SERIAL_8250_MANY_PORTS is not set +# CONFIG_SERIAL_8250_SHARE_IRQ is not set +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +# CONFIG_SERIAL_8250_MULTIPORT is not set +# CONFIG_SERIAL_8250_HUB6 is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=32 + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# L3 serial bus support +# +# CONFIG_L3 is not set +# CONFIG_L3_ALGOBIT is not set +# CONFIG_L3_BIT_SA1100_GPIO is not set + +# +# Other L3 adapters +# +# CONFIG_L3_SA1111 is not set +# CONFIG_BIT_SA1100_GPIO is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_MOUSE is not set + +# +# Joysticks +# +# CONFIG_INPUT_GAMEPORT is not set +# CONFIG_INPUT_NS558 is not set +# CONFIG_INPUT_LIGHTNING is not set +# CONFIG_INPUT_PCIGAME is not set +# CONFIG_INPUT_CS461X is not set +# CONFIG_INPUT_EMU10K1 is not set +# CONFIG_INPUT_SERIO is not set +# CONFIG_INPUT_SERPORT is not set + +# +# Joysticks +# +# CONFIG_INPUT_ANALOG is not set +# CONFIG_INPUT_A3D is not set +# CONFIG_INPUT_ADI is not set +# CONFIG_INPUT_COBRA is not set +# CONFIG_INPUT_GF2K is not set +# CONFIG_INPUT_GRIP is not set +# CONFIG_INPUT_INTERACT is not set +# CONFIG_INPUT_TMDC is not set +# CONFIG_INPUT_SIDEWINDER is not set +# CONFIG_INPUT_IFORCE_USB is not set +# CONFIG_INPUT_IFORCE_232 is not set +# CONFIG_INPUT_WARRIOR is not set +# CONFIG_INPUT_MAGELLAN is not set +# CONFIG_INPUT_SPACEORB is not set +# CONFIG_INPUT_SPACEBALL is not set +# CONFIG_INPUT_STINGER is not set +# CONFIG_INPUT_DB9 is not set +# CONFIG_INPUT_GAMECON is not set +# CONFIG_INPUT_TURBOGRAFX is not set +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_SA1100_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# PCMCIA character devices +# +CONFIG_PCMCIA_SERIAL_CS=m + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_REISERFS_PROC_INFO is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EXT3_FS is not set +# CONFIG_JBD is not set +# CONFIG_JBD_DEBUG is not set +CONFIG_FAT_FS=y +CONFIG_MSDOS_FS=y +# CONFIG_UMSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +# CONFIG_CRAMFS is not set +CONFIG_TMPFS=y +# CONFIG_RAMFS is not set +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_ZISOFS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +# CONFIG_INTERMEZZO_FS is not set +CONFIG_NFS_FS=y +# CONFIG_NFS_V3 is not set +# CONFIG_ROOT_NFS is not set +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +CONFIG_SUNRPC=y +CONFIG_LOCKD=y +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set +# CONFIG_ZISOFS_FS is not set +# CONFIG_ZLIB_FS_INFLATE is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_SMB_NLS is not set +CONFIG_NLS=y + +# +# Native Language Support +# +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=y +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ISO8859_1 is not set +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_UTF8 is not set + +# +# Console drivers +# +CONFIG_PC_KEYMAP=y +# CONFIG_VGA_CONSOLE is not set + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_ACORN is not set +# CONFIG_FB_ANAKIN is not set +# CONFIG_FB_CLPS711X is not set +CONFIG_FB_SA1100=y +# CONFIG_FB_CYBER2000 is not set +# CONFIG_FB_VIRTUAL is not set +# CONFIG_FBCON_ADVANCED is not set +CONFIG_FBCON_CFB2=y +CONFIG_FBCON_CFB4=y +CONFIG_FBCON_CFB8=y +CONFIG_FBCON_CFB16=y +CONFIG_FBCON_FONTWIDTH8_ONLY=y +CONFIG_FBCON_FONTS=y +CONFIG_FONT_8x8=y +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# Multimedia Capabilities Port drivers +# +# CONFIG_MCP is not set +# CONFIG_MCP_SA1100 is not set +# CONFIG_MCP_UCB1200 is not set +# CONFIG_MCP_UCB1200_AUDIO is not set +# CONFIG_MCP_UCB1200_TS is not set + +# +# USB support +# +CONFIG_USB=m +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +CONFIG_USB_DEVICEFS=y +# CONFIG_USB_BANDWIDTH is not set +# CONFIG_USB_LONG_TIMEOUT is not set + +# +# USB Controllers +# +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +# CONFIG_USB_OHCI is not set +CONFIG_USB_OHCI_SA1111=m + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_ACM is not set +CONFIG_USB_PRINTER=m + +# +# USB Human Interface Devices (HID) +# +CONFIG_USB_HID=m +CONFIG_USB_HIDDEV=y +CONFIG_USB_KBD=m +CONFIG_USB_MOUSE=m +# CONFIG_USB_WACOM is not set + +# +# USB Imaging devices +# +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_HPUSBSCSI is not set + +# +# USB Multimedia devices +# + +# +# Video4Linux support is needed for USB Multimedia device support +# + +# +# USB Network adaptors +# +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_CDCETHER is not set +CONFIG_USB_USBNET=m + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_IR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set +# CONFIG_USB_SERIAL_OMNINET is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_RIO500 is not set + +# +# Bluetooth support +# +# CONFIG_BT is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_USER=y +CONFIG_DEBUG_INFO=y +# CONFIG_NO_PGT_CACHE is not set +CONFIG_DEBUG_KERNEL=y +CONFIG_DEBUG_SLAB=y +CONFIG_MAGIC_SYSRQ=y +CONFIG_DEBUG_SPINLOCK=y +CONFIG_DEBUG_WAITQ=y +CONFIG_DEBUG_BUGVERBOSE=y +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_LL=y +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -prauN linux-2.6.0-test5/arch/arm/configs/trizeps_defconfig wli-2.6.0-test5-bk12-25/arch/arm/configs/trizeps_defconfig --- linux-2.6.0-test5/arch/arm/configs/trizeps_defconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/configs/trizeps_defconfig 2003-09-25 19:15:44.000000000 -0700 @@ -0,0 +1,851 @@ +# +# Automatically generated by make menuconfig: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set +# CONFIG_GENERIC_BUST_SPINLOCK is not set +# CONFIG_GENERIC_ISA_DMA is not set + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y + +# +# General setup +# +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +CONFIG_KMOD=y + +# +# System Type +# +# CONFIG_ARCH_ADIFCC is not set +# CONFIG_ARCH_ANAKIN is not set +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_PXA is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_CAMELOT is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_IOP310 is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_SHARK is not set + +# +# Archimedes/A5000 Implementations +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_AUTCPU12 is not set +# CONFIG_ARCH_CDB89712 is not set +# CONFIG_ARCH_CEIVA is not set +# CONFIG_ARCH_CLEP7312 is not set +# CONFIG_ARCH_EDB7211 is not set +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_FORTUNET is not set +# CONFIG_ARCH_EP7211 is not set +# CONFIG_ARCH_EP7212 is not set + +# +# Epxa10db +# + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# IOP310 Implementation Options +# +# CONFIG_ARCH_IQ80310 is not set +# CONFIG_IOP310_AAU is not set +# CONFIG_IOP310_DMA is not set +# CONFIG_IOP310_MU is not set +# CONFIG_IOP310_PMON is not set + +# +# Intel PXA250/210 Implementations +# +# CONFIG_ARCH_LUBBOCK is not set +# CONFIG_ARCH_PXA_IDP is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_ADSBITSY is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_H3100 is not set +# CONFIG_SA1100_H3600 is not set +# CONFIG_SA1100_H3800 is not set +# CONFIG_SA1100_H3XXX is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FLEXANET is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_GRAPHICSMASTER is not set +# CONFIG_SA1100_BADGE4 is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_PT_SYSTEM3 is not set +# CONFIG_SA1100_SHANNON is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_SIMPAD is not set +CONFIG_SA1100_TRIZEPS=y +CONFIG_TRIZEPS_MFTB2=y +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +# CONFIG_SA1100_STORK is not set +# CONFIG_SA1100_USB is not set +# CONFIG_SA1100_USB_NETLINK is not set +# CONFIG_SA1100_USB_CHAR is not set +# CONFIG_H3600_SLEEVE is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +# CONFIG_SA1111 is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM922T is not set +# CONFIG_CPU_ARM926T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +CONFIG_CPU_SA1100=y +# CONFIG_CPU_XSCALE is not set +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_32v5 is not set +# CONFIG_ARM_THUMB is not set + +# +# General setup +# +CONFIG_DISCONTIGMEM=y +# CONFIG_PCI is not set +CONFIG_ISA=y +# CONFIG_ISA_DMA is not set +# CONFIG_FIQ is not set +# CONFIG_ZBOOT_ROM is not set +CONFIG_ZBOOT_ROM_TEXT=0 +CONFIG_ZBOOT_ROM_BSS=0 +# CONFIG_CPU_FREQ is not set +# CONFIG_CPU_FREQ_24_API is not set +# CONFIG_CPU_FREQ_26_API is not set +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=m +# CONFIG_I82092 is not set +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_CLPS6700 is not set +CONFIG_PCMCIA_SA1100=m +# CONFIG_PCMCIA_SA1111 is not set +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +CONFIG_BINFMT_AOUT=y +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_PREEMPT is not set +# CONFIG_APM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="keepinitrd mem=16M root=/dev/hda2 1" +# CONFIG_LEDS is not set +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_PARTITIONS=m +CONFIG_MTD_CONCAT=m +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_CMDLINE_PARTS is not set +CONFIG_MTD_AFS_PARTS=m +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +# CONFIG_MTD_OBSOLETE_CHIPS is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set +# CONFIG_MTD_JEDEC is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_CDB89712 is not set +CONFIG_MTD_SA1100=m +# CONFIG_MTD_2PARTS_IPAQ is not set +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set +# CONFIG_MTD_EPXA10DB is not set +# CONFIG_MTD_FORTUNET is not set +# CONFIG_MTD_AUTCPU12 is not set +# CONFIG_MTD_EDB7312 is not set +# CONFIG_MTD_IMPA7 is not set +# CONFIG_MTD_CEIVA is not set +# CONFIG_MTD_PCI is not set +# CONFIG_MTD_PCMCIA is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLKMTD is not set +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_PNP_NAMES is not set +# CONFIG_PNP_DEBUG is not set +# CONFIG_ISAPNP is not set +# CONFIG_PNPBIOS is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_CISS_SCSI_TAPE is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_UMEM is not set +# CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +# CONFIG_BLK_DEV_INITRD is not set + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_MD_MULTIPATH is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +# CONFIG_NETLINK_DEV is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set + +# +# SCTP Configuration (EXPERIMENTAL) +# +CONFIG_IPV6_SCTP__=y +# CONFIG_IP_SCTP is not set +# CONFIG_ATM is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_LLC is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DEV_APPLETALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_ETHERTAP is not set + +# +# Ethernet (10 or 100Mbit) +# +# CONFIG_NET_ETHERNET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_DL2K is not set +# CONFIG_E1000 is not set +# CONFIG_E1000_NAPI is not set +# CONFIG_MYRI_SBUS is not set +# CONFIG_NS83820 is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_TIGON3 is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PLIP is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +# CONFIG_PPPOE is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +CONFIG_NET_RADIO=y +# CONFIG_STRIP is not set +# CONFIG_ARLAN is not set +# CONFIG_AIRONET4500 is not set +# CONFIG_AIRONET4500_NONCS is not set +# CONFIG_AIRONET4500_PROC is not set +# CONFIG_WAVELAN is not set +# CONFIG_AIRO is not set +# CONFIG_HERMES is not set +# CONFIG_PCMCIA_NETWAVE is not set +# CONFIG_PCMCIA_WAVELAN is not set +# CONFIG_PCMCIA_HERMES is not set +CONFIG_AIRO_CS=m +CONFIG_NET_WIRELESS=y + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +# CONFIG_PCMCIA_3C589 is not set +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +# CONFIG_PCMCIA_PCNET is not set +# CONFIG_PCMCIA_NMCLAN is not set +# CONFIG_PCMCIA_SMC91C92 is not set +# CONFIG_PCMCIA_XIRC2PS is not set +# CONFIG_PCMCIA_AXNET is not set +# CONFIG_ARCNET_COM20020_CS is not set +# CONFIG_PCMCIA_IBMTR is not set +CONFIG_NET_PCMCIA_RADIO=y +# CONFIG_PCMCIA_RAYCS is not set +# CONFIG_AIRONET4500_CS is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# ATA/ATAPI/MFM/RLL support +# +CONFIG_IDE=y + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=y +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=y +# CONFIG_IDEDISK_MULTI_MODE is not set +# CONFIG_IDEDISK_STROKE is not set +CONFIG_BLK_DEV_IDECS=m +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set +# CONFIG_IDE_TASK_IOCTL is not set +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +# CONFIG_BLK_DEV_IDE_ICSIDE is not set +# CONFIG_BLK_DEV_IDEDMA_ICS is not set +# CONFIG_IDEDMA_ICS_AUTO is not set +# CONFIG_BLK_DEV_IDEDMA is not set +# CONFIG_BLK_DEV_IDE_RAPIDE is not set +# CONFIG_IDE_CHIPSETS is not set +# CONFIG_IDEDMA_AUTO is not set +# CONFIG_DMA_NONPCI is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN_BOOL is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_MOUSEDEV_PSAUX is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_TSDEV is not set +# CONFIG_INPUT_TSLIBDEV is not set +# CONFIG_INPUT_EVDEV is not set +# CONFIG_INPUT_EVBUG is not set +# CONFIG_GAMEPORT is not set +CONFIG_SOUND_GAMEPORT=y +# CONFIG_GAMEPORT_NS558 is not set +# CONFIG_GAMEPORT_L4 is not set +# CONFIG_GAMEPORT_EMU10K1 is not set +# CONFIG_GAMEPORT_VORTEX is not set +# CONFIG_GAMEPORT_FM801 is not set +# CONFIG_GAMEPORT_CS461x is not set +# CONFIG_SERIO is not set +# CONFIG_SERIO_I8042 is not set +# CONFIG_SERIO_SERPORT is not set +# CONFIG_SERIO_CT82C710 is not set +# CONFIG_SERIO_PARKBD is not set +# CONFIG_SERIO_RPCKBD is not set +# CONFIG_SERIO_AMBAKMI is not set +# CONFIG_SERIO_SA1111 is not set +# CONFIG_INPUT_KEYBOARD is not set +# CONFIG_KEYBOARD_ATKBD is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_MOUSE_PS2 is not set +# CONFIG_MOUSE_SERIAL is not set +# CONFIG_MOUSE_INPORT is not set +# CONFIG_MOUSE_LOGIBM is not set +# CONFIG_MOUSE_PC110PAD is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_JOYSTICK_ANALOG is not set +# CONFIG_JOYSTICK_A3D is not set +# CONFIG_JOYSTICK_ADI is not set +# CONFIG_JOYSTICK_COBRA is not set +# CONFIG_JOYSTICK_GF2K is not set +# CONFIG_JOYSTICK_GRIP is not set +# CONFIG_JOYSTICK_GRIP_MP is not set +# CONFIG_JOYSTICK_GUILLEMOT is not set +# CONFIG_JOYSTICK_INTERACT is not set +# CONFIG_JOYSTICK_SIDEWINDER is not set +# CONFIG_JOYSTICK_TMDC is not set +# CONFIG_JOYSTICK_IFORCE is not set +# CONFIG_JOYSTICK_WARRIOR is not set +# CONFIG_JOYSTICK_MAGELLAN is not set +# CONFIG_JOYSTICK_SPACEORB is not set +# CONFIG_JOYSTICK_SPACEBALL is not set +# CONFIG_JOYSTICK_STINGER is not set +# CONFIG_JOYSTICK_TWIDDLER is not set +# CONFIG_JOYSTICK_DB9 is not set +# CONFIG_JOYSTICK_GAMECON is not set +# CONFIG_JOYSTICK_TURBOGRAFX is not set +# CONFIG_INPUT_JOYDUMP is not set +# CONFIG_INPUT_TOUCHSCREEN is not set +# CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_INPUT_MISC is not set +# CONFIG_INPUT_PCSPKR is not set +# CONFIG_INPUT_UINPUT is not set + +# +# Character devices +# +# CONFIG_VT is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set +# CONFIG_SERIAL_8250_CONSOLE is not set +# CONFIG_SERIAL_8250_CS is not set +# CONFIG_SERIAL_8250_EXTENDED is not set +# CONFIG_SERIAL_8250_MANY_PORTS is not set +# CONFIG_SERIAL_8250_SHARE_IRQ is not set +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +# CONFIG_SERIAL_8250_MULTIPORT is not set +# CONFIG_SERIAL_8250_RSA is not set +# CONFIG_SERIAL_ACORN is not set +# CONFIG_SERIAL_ANAKIN is not set +# CONFIG_SERIAL_ANAKIN_CONSOLE is not set +# CONFIG_SERIAL_AMBA is not set +# CONFIG_SERIAL_AMBA_CONSOLE is not set +# CONFIG_SERIAL_CLPS711X is not set +# CONFIG_SERIAL_CLPS711X_CONSOLE is not set +# CONFIG_SERIAL_CLPS711X_OLD_NAME is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +# CONFIG_SERIAL_UART00 is not set +# CONFIG_SERIAL_UART00_CONSOLE is not set +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_UNIX98_PTYS is not set + +# +# I2C support +# +CONFIG_I2C=m +CONFIG_I2C_ALGOBIT=m +# CONFIG_I2C_PHILIPSPAR is not set +# CONFIG_I2C_ELV is not set +# CONFIG_I2C_VELLEMAN is not set +# CONFIG_SCx200_I2C is not set +# CONFIG_SCx200_ACB is not set +# CONFIG_I2C_BIT_SA1100_GPIO is not set +# CONFIG_I2C_ALGOPCF is not set +CONFIG_I2C_CHARDEV=m +CONFIG_I2C_PROC=m + +# +# L3 serial bus support +# +# CONFIG_L3 is not set +# CONFIG_L3_ALGOBIT is not set +# CONFIG_L3_BIT_SA1100_GPIO is not set +# CONFIG_BIT_SA1100_GPIO is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_GEN_RTC is not set +# CONFIG_SA1100_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# PCMCIA character devices +# +# CONFIG_SYNCLINK_CS is not set +# CONFIG_SCx200_GPIO is not set +# CONFIG_RAW_DRIVER is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_QFMT_V1 is not set +# CONFIG_QFMT_V2 is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_REISERFS_PROC_INFO is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EXT3_FS is not set +# CONFIG_JBD is not set +# CONFIG_JBD_DEBUG is not set +# CONFIG_FAT_FS is not set +# CONFIG_MSDOS_FS is not set +# CONFIG_UMSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +# CONFIG_JFFS2_FS is not set +# CONFIG_CRAMFS is not set +# CONFIG_TMPFS is not set +CONFIG_RAMFS=y +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_ZISOFS is not set +# CONFIG_JFS_FS is not set +# CONFIG_JFS_DEBUG is not set +# CONFIG_JFS_STATISTICS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +# CONFIG_DEVPTS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set +# CONFIG_XFS_FS is not set +# CONFIG_XFS_RT is not set +# CONFIG_XFS_QUOTA is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +# CONFIG_INTERMEZZO_FS is not set +CONFIG_NFS_FS=y +# CONFIG_NFS_V3 is not set +# CONFIG_NFS_V4 is not set +# CONFIG_ROOT_NFS is not set +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +# CONFIG_NFSD_V4 is not set +# CONFIG_NFSD_TCP is not set +CONFIG_SUNRPC=y +CONFIG_LOCKD=y +# CONFIG_EXPORTFS is not set +# CONFIG_CIFS is not set +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set +# CONFIG_AFS_FS is not set +# CONFIG_ZISOFS_FS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_EFI_PARTITION is not set +# CONFIG_SMB_NLS is not set +# CONFIG_NLS is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# Multimedia Capabilities Port drivers +# +# CONFIG_MCP is not set +# CONFIG_MCP_SA1100 is not set +# CONFIG_MCP_UCB1200 is not set +# CONFIG_MCP_UCB1200_AUDIO is not set +# CONFIG_MCP_UCB1200_TS is not set + +# +# Console Switches +# +# CONFIG_SWITCHES is not set +# CONFIG_SWITCHES_SA1100 is not set +# CONFIG_SWITCHES_UCB1X00 is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# Bluetooth support +# +# CONFIG_BT is not set + +# +# Kernel hacking +# +# CONFIG_NO_FRAME_POINTER is not set +CONFIG_DEBUG_USER=y +# CONFIG_DEBUG_INFO is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_SLAB is not set +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_WAITQ is not set +CONFIG_DEBUG_BUGVERBOSE=y +CONFIG_DEBUG_ERRORS=y +# CONFIG_DEBUG_LL is not set +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set + +# +# Security options +# +CONFIG_SECURITY_CAPABILITIES=y + +# +# Library routines +# +# CONFIG_CRC32 is not set +CONFIG_ZLIB_INFLATE=m +CONFIG_ZLIB_DEFLATE=m diff -prauN linux-2.6.0-test5/arch/arm/def-configs/a5k wli-2.6.0-test5-bk12-25/arch/arm/def-configs/a5k --- linux-2.6.0-test5/arch/arm/def-configs/a5k 2003-09-08 12:49:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/a5k 1969-12-31 16:00:00.000000000 -0800 @@ -1,526 +0,0 @@ -# -# Automatically generated make config: don't edit -# -CONFIG_ARM=y -# CONFIG_SBUS is not set -CONFIG_UID16=y - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -CONFIG_OBSOLETE=y - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODVERSIONS is not set -CONFIG_KMOD=y - -# -# System Type -# -CONFIG_ARCH_ARCA5K=y -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_RPC is not set -# CONFIG_ARCH_SA1100 is not set - -# -# Archimedes/A5000 Implementations -# - -# -# Archimedes/A5000 Implementations (select only ONE) -# -# CONFIG_ARCH_ARC is not set -CONFIG_ARCH_A5K=y - -# -# Footbridge Implementations -# - -# -# SA11x0 Implementations -# -CONFIG_ARCH_ACORN=y -# CONFIG_FOOTBRIDGE is not set -# CONFIG_FOOTBRIDGE_HOST is not set -# CONFIG_FOOTBRIDGE_ADDIN is not set -# CONFIG_CPU_32 is not set -CONFIG_CPU_26=y -# CONFIG_PAGESIZE_16 is not set - -# -# Processor Type -# -# CONFIG_DISCONTIGMEM is not set - -# -# General setup -# -# CONFIG_PCI is not set -# CONFIG_ISA is not set -# CONFIG_ISA_DMA is not set -# CONFIG_HOTPLUG is not set -# CONFIG_PCMCIA is not set -CONFIG_NET=y -CONFIG_SYSVIPC=y -# CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_SYSCTL=y -CONFIG_NWFPE=y -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -CONFIG_BINFMT_AOUT=y -# CONFIG_BINFMT_ELF is not set -# CONFIG_BINFMT_MISC is not set -# CONFIG_PM is not set - -# -# Parallel port support -# -CONFIG_PARPORT=m -CONFIG_PARPORT_PC=m -# CONFIG_PARPORT_PC_FIFO is not set -CONFIG_PARPORT_PC_SUPERIO=y -# CONFIG_PARPORT_ARC is not set -# CONFIG_PARPORT_AMIGA is not set -# CONFIG_PARPORT_MFC3 is not set -# CONFIG_PARPORT_ATARI is not set -# CONFIG_PARPORT_SUNBPP is not set -# CONFIG_PARPORT_OTHER is not set -# CONFIG_PARPORT_1284 is not set - -# -# Memory Technology Devices (MTD) -# -# CONFIG_MTD is not set - -# -# Plug and Play configuration -# -# CONFIG_PNP is not set -# CONFIG_ISAPNP is not set - -# -# Block devices -# -CONFIG_BLK_DEV_FD=y -# CONFIG_BLK_DEV_XD is not set -# CONFIG_PARIDE is not set -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_BLK_DEV_DAC960 is not set -CONFIG_BLK_DEV_LOOP=m -# CONFIG_BLK_DEV_NBD is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=4096 -CONFIG_BLK_DEV_INITRD=y - -# -# Acorn-specific block devices -# -# CONFIG_BLK_DEV_FD1772 is not set -CONFIG_BLK_DEV_MFM=m -CONFIG_BLK_DEV_MFM_AUTODETECT=y - -# -# Networking options -# -# CONFIG_PACKET is not set -# CONFIG_NETLINK is not set -# CONFIG_NETFILTER is not set -# CONFIG_FILTER is not set -CONFIG_UNIX=y -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -# CONFIG_IP_PNP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_INET_ECN is not set -# CONFIG_SYN_COOKIES is not set -# CONFIG_IPV6 is not set -# CONFIG_KHTTPD is not set -# CONFIG_ATM is not set - -# -# -# -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_LLC is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set -# CONFIG_NET_SB1000 is not set - -# -# Ethernet (10 or 100Mbit) -# -CONFIG_NET_ETHERNET=y -CONFIG_ARM_ETHER1=y -CONFIG_ARM_ETHER3=y -# CONFIG_ARM_ETHERH is not set -# CONFIG_NET_VENDOR_3COM is not set -# CONFIG_LANCE is not set -# CONFIG_NET_VENDOR_SMC is not set -# CONFIG_NET_VENDOR_RACAL is not set -# CONFIG_AT1700 is not set -# CONFIG_DEPCA is not set -# CONFIG_NET_ISA is not set -# CONFIG_NET_PCI is not set -# CONFIG_NET_POCKET is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_ACENIC is not set -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -# CONFIG_SK98LIN is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PLIP is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set - -# -# Token Ring devices -# -# CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# ATA/IDE/MFM/RLL support -# -CONFIG_IDE=y - -# -# IDE, ATA and ATAPI Block devices -# -CONFIG_BLK_DEV_IDE=y - -# -# Please see Documentation/ide.txt for help/info on IDE drives -# -# CONFIG_BLK_DEV_HD_IDE is not set -# CONFIG_BLK_DEV_HD is not set -CONFIG_BLK_DEV_IDEDISK=y -# CONFIG_IDEDISK_MULTI_MODE is not set -# CONFIG_BLK_DEV_IDECS is not set -# CONFIG_BLK_DEV_IDECD is not set -# CONFIG_BLK_DEV_IDETAPE is not set -# CONFIG_BLK_DEV_IDEFLOPPY is not set -# CONFIG_BLK_DEV_IDESCSI is not set - -# -# IDE chipset support/bugfixes -# -# CONFIG_BLK_DEV_CMD640 is not set -# CONFIG_BLK_DEV_CMD640_ENHANCED is not set -# CONFIG_BLK_DEV_ISAPNP is not set -CONFIG_BLK_DEV_IDE_ICSIDE=y -# CONFIG_BLK_DEV_IDEDMA_ICS is not set -# CONFIG_IDEDMA_ICS_AUTO is not set -# CONFIG_BLK_DEV_IDEDMA is not set -# CONFIG_BLK_DEV_IDE_RAPIDE is not set -# CONFIG_IDE_CHIPSETS is not set -# CONFIG_IDEDMA_AUTO is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# I2O device support -# -# CONFIG_I2O is not set -# CONFIG_I2O_BLOCK is not set -# CONFIG_I2O_LAN is not set -# CONFIG_I2O_SCSI is not set -# CONFIG_I2O_PROC is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Character devices -# -CONFIG_VT=y -CONFIG_VT_CONSOLE=y -CONFIG_SERIAL=y -CONFIG_SERIAL_CONSOLE=y -# CONFIG_ATOMWIDE_SERIAL is not set -# CONFIG_DUALSP_SERIAL is not set -# CONFIG_SERIAL_EXTENDED is not set -# CONFIG_SERIAL_NONSTANDARD is not set -# CONFIG_UNIX98_PTYS is not set -# CONFIG_PRINTER is not set -# CONFIG_PPDEV is not set - -# -# I2C support -# -CONFIG_I2C=y -CONFIG_I2C_ALGOBIT=y -# CONFIG_I2C_PHILIPSPAR is not set -# CONFIG_I2C_ELV is not set -# CONFIG_I2C_VELLEMAN is not set -# CONFIG_I2C_ALGOPCF is not set -CONFIG_I2C_CHARDEV=y - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -CONFIG_MOUSE=y -# CONFIG_PSMOUSE is not set -# CONFIG_82C710_MOUSE is not set -# CONFIG_PC110_PAD is not set - -# -# Joysticks -# -# CONFIG_JOYSTICK is not set - -# -# Input core support is needed for joysticks -# -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -# CONFIG_INTEL_RNG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -CONFIG_AUTOFS4_FS=y -CONFIG_ADFS_FS=y -# CONFIG_ADFS_FS_RW is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BFS_FS is not set -CONFIG_FAT_FS=m -CONFIG_MSDOS_FS=m -# CONFIG_UMSDOS_FS is not set -# CONFIG_VFAT_FS is not set -# CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set -# CONFIG_CRAMFS is not set -# CONFIG_RAMFS is not set -# CONFIG_ISO9660_FS is not set -# CONFIG_JOLIET is not set -# CONFIG_MINIX_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS_DEBUG is not set -# CONFIG_NTFS_RW is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -# CONFIG_DEVFS_MOUNT is not set -# CONFIG_DEVFS_DEBUG is not set -# CONFIG_DEVPTS_FS is not set -# CONFIG_QNX4FS_FS is not set -# CONFIG_QNX4FS_RW is not set -# CONFIG_ROMFS_FS is not set -CONFIG_EXT2_FS=y -# CONFIG_SYSV_FS is not set -# CONFIG_SYSV_FS_WRITE is not set -# CONFIG_UDF_FS is not set -# CONFIG_UDF_RW is not set -# CONFIG_UFS_FS is not set -# CONFIG_UFS_FS_WRITE is not set - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -CONFIG_NFS_FS=y -# CONFIG_NFS_V3 is not set -# CONFIG_ROOT_NFS is not set -# CONFIG_NFSD is not set -# CONFIG_NFSD_V3 is not set -CONFIG_SUNRPC=y -CONFIG_LOCKD=y -# CONFIG_SMB_FS is not set -# CONFIG_NCP_FS is not set -# CONFIG_NCPFS_PACKET_SIGNING is not set -# CONFIG_NCPFS_IOCTL_LOCKING is not set -# CONFIG_NCPFS_STRONG is not set -# CONFIG_NCPFS_NFS_NS is not set -# CONFIG_NCPFS_OS2_NS is not set -# CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_MOUNT_SUBDIR is not set -# CONFIG_NCPFS_NDS_DOMAINS is not set -# CONFIG_NCPFS_NLS is not set -# CONFIG_NCPFS_EXTRAS is not set - -# -# Partition Types -# -# CONFIG_PARTITION_ADVANCED is not set -CONFIG_MSDOS_PARTITION=y -CONFIG_ACORN_PARTITION=y -CONFIG_ACORN_PARTITION_ADFS=y -CONFIG_ACORN_PARTITION_ICS=y -CONFIG_ACORN_PARTITION_POWERTEC=y -CONFIG_ACORN_PARTITION_RISCIX=y -CONFIG_NLS=y - -# -# Native Language Support -# -CONFIG_NLS_DEFAULT="iso8859-1" -# CONFIG_NLS_CODEPAGE_437 is not set -# CONFIG_NLS_CODEPAGE_737 is not set -# CONFIG_NLS_CODEPAGE_775 is not set -# CONFIG_NLS_CODEPAGE_850 is not set -# CONFIG_NLS_CODEPAGE_852 is not set -# CONFIG_NLS_CODEPAGE_855 is not set -# CONFIG_NLS_CODEPAGE_857 is not set -# CONFIG_NLS_CODEPAGE_860 is not set -# CONFIG_NLS_CODEPAGE_861 is not set -# CONFIG_NLS_CODEPAGE_862 is not set -# CONFIG_NLS_CODEPAGE_863 is not set -# CONFIG_NLS_CODEPAGE_864 is not set -# CONFIG_NLS_CODEPAGE_865 is not set -# CONFIG_NLS_CODEPAGE_866 is not set -# CONFIG_NLS_CODEPAGE_869 is not set -# CONFIG_NLS_CODEPAGE_874 is not set -# CONFIG_NLS_CODEPAGE_932 is not set -# CONFIG_NLS_CODEPAGE_936 is not set -# CONFIG_NLS_CODEPAGE_949 is not set -# CONFIG_NLS_CODEPAGE_950 is not set -# CONFIG_NLS_ISO8859_1 is not set -# CONFIG_NLS_ISO8859_2 is not set -# CONFIG_NLS_ISO8859_3 is not set -# CONFIG_NLS_ISO8859_4 is not set -# CONFIG_NLS_ISO8859_5 is not set -# CONFIG_NLS_ISO8859_6 is not set -# CONFIG_NLS_ISO8859_7 is not set -# CONFIG_NLS_ISO8859_8 is not set -# CONFIG_NLS_ISO8859_9 is not set -# CONFIG_NLS_ISO8859_14 is not set -# CONFIG_NLS_ISO8859_15 is not set -# CONFIG_NLS_KOI8_R is not set -# CONFIG_NLS_UTF8 is not set - -# -# Console drivers -# -CONFIG_FB=y - -# -# Frame-buffer support -# -CONFIG_FB=y -CONFIG_DUMMY_CONSOLE=y -CONFIG_FB_ACORN=y -# CONFIG_FB_CYBER2000 is not set -# CONFIG_FB_VIRTUAL is not set -# CONFIG_FBCON_ADVANCED is not set -CONFIG_FBCON_MFB=y -CONFIG_FBCON_CFB2=y -CONFIG_FBCON_CFB4=y -CONFIG_FBCON_CFB8=y -# CONFIG_FBCON_FONTWIDTH8_ONLY is not set -CONFIG_FBCON_FONTS=y -# CONFIG_FONT_8x8 is not set -# CONFIG_FONT_8x16 is not set -# CONFIG_FONT_SUN8x16 is not set -# CONFIG_FONT_SUN12x22 is not set -# CONFIG_FONT_6x11 is not set -# CONFIG_FONT_PEARL_8x8 is not set -CONFIG_FONT_ACORN_8x8=y - -# -# Sound -# -# CONFIG_SOUND is not set - -# -# USB support -# -# CONFIG_USB is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_ERRORS=y -CONFIG_DEBUG_USER=y -# CONFIG_DEBUG_INFO is not set -CONFIG_MAGIC_SYSRQ=y -CONFIG_NO_PGT_CACHE=y -CONFIG_DEBUG_LL=y diff -prauN linux-2.6.0-test5/arch/arm/def-configs/adi_evb wli-2.6.0-test5-bk12-25/arch/arm/def-configs/adi_evb --- linux-2.6.0-test5/arch/arm/def-configs/adi_evb 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/adi_evb 1969-12-31 16:00:00.000000000 -0800 @@ -1,681 +0,0 @@ -# -# Automatically generated by make menuconfig: don't edit -# -CONFIG_ARM=y -# CONFIG_EISA is not set -# CONFIG_SBUS is not set -# CONFIG_MCA is not set -CONFIG_UID16=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y -# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set -# CONFIG_GENERIC_BUST_SPINLOCK is not set -# CONFIG_GENERIC_ISA_DMA is not set - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -# CONFIG_OBSOLETE is not set - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODVERSIONS is not set -# CONFIG_KMOD is not set - -# -# System Type -# -CONFIG_ARCH_ADIFCC=y -# CONFIG_ARCH_ANAKIN is not set -# CONFIG_ARCH_ARCA5K is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_CAMELOT is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_IOP310 is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_RPC is not set -# CONFIG_ARCH_SA1100 is not set -# CONFIG_ARCH_SHARK is not set - -# -# Archimedes/A5000 Implementations -# -# CONFIG_ARCH_ARC is not set -# CONFIG_ARCH_A5K is not set - -# -# Footbridge Implementations -# -# CONFIG_ARCH_CATS is not set -# CONFIG_ARCH_PERSONAL_SERVER is not set -# CONFIG_ARCH_EBSA285_ADDIN is not set -# CONFIG_ARCH_EBSA285_HOST is not set -# CONFIG_ARCH_NETWINDER is not set - -# -# SA11x0 Implementations -# -# CONFIG_SA1100_ASSABET is not set -# CONFIG_ASSABET_NEPONSET is not set -# CONFIG_SA1100_ADSBITSY is not set -# CONFIG_SA1100_BRUTUS is not set -# CONFIG_SA1100_CERF is not set -# CONFIG_SA1100_H3600 is not set -# CONFIG_SA1100_EXTENEX1 is not set -# CONFIG_SA1100_FLEXANET is not set -# CONFIG_SA1100_FREEBIRD is not set -# CONFIG_SA1100_GRAPHICSCLIENT is not set -# CONFIG_SA1100_GRAPHICSMASTER is not set -# CONFIG_SA1100_JORNADA720 is not set -# CONFIG_SA1100_HUW_WEBPANEL is not set -# CONFIG_SA1100_ITSY is not set -# CONFIG_SA1100_LART is not set -# CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_OMNIMETER is not set -# CONFIG_SA1100_PANGOLIN is not set -# CONFIG_SA1100_PLEB is not set -# CONFIG_SA1100_SHERMAN is not set -# CONFIG_SA1100_SIMPAD is not set -# CONFIG_SA1100_PFS168 is not set -# CONFIG_SA1100_VICTOR is not set -# CONFIG_SA1100_XP860 is not set -# CONFIG_SA1100_YOPY is not set -# CONFIG_SA1100_USB is not set -# CONFIG_SA1100_USB_NETLINK is not set -# CONFIG_SA1100_USB_CHAR is not set - -# -# CLPS711X/EP721X Implementations -# -# CONFIG_ARCH_CDB89712 is not set -# CONFIG_ARCH_CLEP7312 is not set -# CONFIG_ARCH_EDB7211 is not set -# CONFIG_ARCH_P720T is not set -# CONFIG_ARCH_EP7211 is not set -# CONFIG_ARCH_EP7212 is not set -CONFIG_ARCH_ADI_EVB=y -CONFIG_XSCALE_PMU_TIMER=y -# CONFIG_ARCH_ACORN is not set -# CONFIG_FOOTBRIDGE is not set -# CONFIG_FOOTBRIDGE_HOST is not set -# CONFIG_FOOTBRIDGE_ADDIN is not set -CONFIG_CPU_32=y -# CONFIG_CPU_26 is not set -# CONFIG_CPU_32v3 is not set -# CONFIG_CPU_32v4 is not set -# CONFIG_CPU_ARM610 is not set -# CONFIG_CPU_ARM710 is not set -# CONFIG_CPU_ARM720T is not set -# CONFIG_CPU_ARM920T is not set -# CONFIG_CPU_ARM926T is not set -# CONFIG_CPU_ARM1020 is not set -# CONFIG_CPU_SA110 is not set -# CONFIG_CPU_SA1100 is not set -CONFIG_CPU_32v4=y -CONFIG_CPU_XSCALE=y -CONFIG_ARM_THUMB=y -# CONFIG_XSCALE_TOOLS is not set -CONFIG_XSCALE_WRITE_ALLOC=y -CONFIG_XSCALE_PMU=y -CONFIG_ARM_THUMB=y -# CONFIG_DISCONTIGMEM is not set - -# -# General setup -# -# CONFIG_PCI is not set -# CONFIG_ISA is not set -# CONFIG_ISA_DMA is not set -# CONFIG_HOTPLUG is not set -# CONFIG_PCMCIA is not set -CONFIG_NET=y -CONFIG_SYSVIPC=y -# CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_SYSCTL=y -CONFIG_FPE_NWFPE=y -# CONFIG_FPE_FASTFPE is not set -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -CONFIG_BINFMT_AOUT=y -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -# CONFIG_PM is not set -# CONFIG_ARTHUR is not set -CONFIG_CMDLINE="console=ttyS0,115200 root=/dev/mtdblock1 mem=32M initrd=0xc0800000,3M" -CONFIG_ALIGNMENT_TRAP=y - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Memory Technology Devices (MTD) -# -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set -CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_REDBOOT_PARTS is not set -# CONFIG_MTD_BOOTLDR_PARTS is not set -# CONFIG_MTD_AFS_PARTS is not set -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -# CONFIG_NFTL is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=y -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_GEN_PROBE=y -# CONFIG_MTD_CFI_ADV_OPTIONS is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_ABSENT is not set -# CONFIG_MTD_OBSOLETE_CHIPS is not set -# CONFIG_MTD_AMDSTD is not set -# CONFIG_MTD_SHARP is not set -# CONFIG_MTD_JEDEC is not set - -# -# Mapping drivers for chip access -# -# CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_NORA is not set -# CONFIG_MTD_ARM_INTEGRATOR is not set -# CONFIG_MTD_CDB89712 is not set -# CONFIG_MTD_SA1100 is not set -# CONFIG_MTD_DC21285 is not set -# CONFIG_MTD_IQ80310 is not set -CONFIG_MTD_ADI_EVB=y -# CONFIG_MTD_PCI is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLKMTD is not set -# CONFIG_MTD_DOC1000 is not set -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOCPROBE is not set - -# -# NAND Flash Device Drivers -# -# CONFIG_MTD_NAND is not set - -# -# Plug and Play configuration -# -# CONFIG_PNP is not set -# CONFIG_ISAPNP is not set -# CONFIG_PNPBIOS is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_XD is not set -# CONFIG_PARIDE is not set -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_CISS_SCSI_TAPE is not set -# CONFIG_BLK_DEV_DAC960 is not set -# CONFIG_BLK_DEV_LOOP is not set -# CONFIG_BLK_DEV_NBD is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=8192 -CONFIG_BLK_DEV_INITRD=y - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set -# CONFIG_BLK_DEV_MD is not set -# CONFIG_MD_LINEAR is not set -# CONFIG_MD_RAID0 is not set -# CONFIG_MD_RAID1 is not set -# CONFIG_MD_RAID5 is not set -# CONFIG_MD_MULTIPATH is not set -# CONFIG_BLK_DEV_LVM is not set - -# -# Networking options -# -# CONFIG_PACKET is not set -CONFIG_NETLINK=y -CONFIG_RTNETLINK=y -# CONFIG_NETLINK_DEV is not set -# CONFIG_NETFILTER is not set -# CONFIG_FILTER is not set -CONFIG_UNIX=y -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -CONFIG_IP_PNP=y -# CONFIG_IP_PNP_DHCP is not set -CONFIG_IP_PNP_BOOTP=y -# CONFIG_IP_PNP_RARP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_ARPD is not set -# CONFIG_INET_ECN is not set -# CONFIG_SYN_COOKIES is not set -# CONFIG_IPV6 is not set -# CONFIG_KHTTPD is not set -# CONFIG_ATM is not set -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_LLC is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set -# CONFIG_ETHERTAP is not set - -# -# Ethernet (10 or 100Mbit) -# -CONFIG_NET_ETHERNET=y -# CONFIG_ARM_AM79C961A is not set -# CONFIG_SUNLANCE is not set -# CONFIG_SUNBMAC is not set -# CONFIG_SUNQE is not set -# CONFIG_SUNLANCE is not set -# CONFIG_SUNGEM is not set -# CONFIG_NET_VENDOR_3COM is not set -# CONFIG_LANCE is not set -# CONFIG_NET_VENDOR_SMC is not set -# CONFIG_NET_VENDOR_RACAL is not set -# CONFIG_NET_ISA is not set -# CONFIG_NET_PCI is not set -# CONFIG_NET_POCKET is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_ACENIC is not set -# CONFIG_DL2K is not set -# CONFIG_MYRI_SBUS is not set -# CONFIG_NS83820 is not set -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -# CONFIG_SK98LIN is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PLIP is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set - -# -# Token Ring devices -# -# CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# ATA/IDE/MFM/RLL support -# -# CONFIG_IDE is not set -# CONFIG_BLK_DEV_HD is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# I2O device support -# -# CONFIG_I2O is not set -# CONFIG_I2O_BLOCK is not set -# CONFIG_I2O_LAN is not set -# CONFIG_I2O_SCSI is not set -# CONFIG_I2O_PROC is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Input core support -# -# CONFIG_INPUT is not set -# CONFIG_INPUT_KEYBDEV is not set -# CONFIG_INPUT_MOUSEDEV is not set -# CONFIG_INPUT_JOYDEV is not set -# CONFIG_INPUT_EVDEV is not set - -# -# Character devices -# -# CONFIG_VT is not set -CONFIG_SERIAL=y -CONFIG_SERIAL_CONSOLE=y -# CONFIG_SERIAL_EXTENDED is not set -# CONFIG_SERIAL_NONSTANDARD is not set - -# -# Serial drivers -# -# CONFIG_SERIAL_ANAKIN is not set -# CONFIG_SERIAL_ANAKIN_CONSOLE is not set -# CONFIG_SERIAL_AMBA is not set -# CONFIG_SERIAL_AMBA_CONSOLE is not set -# CONFIG_SERIAL_CLPS711X is not set -# CONFIG_SERIAL_CLPS711X_CONSOLE is not set -# CONFIG_SERIAL_21285 is not set -# CONFIG_SERIAL_21285_OLD is not set -# CONFIG_SERIAL_21285_CONSOLE is not set -# CONFIG_SERIAL_UART00 is not set -# CONFIG_SERIAL_UART00_CONSOLE is not set -# CONFIG_SERIAL_SA1100 is not set -# CONFIG_SERIAL_SA1100_CONSOLE is not set -# CONFIG_SERIAL_8250 is not set -# CONFIG_SERIAL_8250_CONSOLE is not set -# CONFIG_SERIAL_8250_EXTENDED is not set -# CONFIG_SERIAL_8250_MANY_PORTS is not set -# CONFIG_SERIAL_8250_SHARE_IRQ is not set -# CONFIG_SERIAL_8250_DETECT_IRQ is not set -# CONFIG_SERIAL_8250_MULTIPORT is not set -# CONFIG_SERIAL_8250_HUB6 is not set -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=256 - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# L3 serial bus support -# -# CONFIG_L3 is not set -# CONFIG_L3_ALGOBIT is not set -# CONFIG_L3_BIT_SA1100_GPIO is not set -# CONFIG_L3_SA1111 is not set -# CONFIG_BIT_SA1100_GPIO is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -CONFIG_MOUSE=y -CONFIG_PSMOUSE=y -# CONFIG_82C710_MOUSE is not set -# CONFIG_PC110_PAD is not set - -# -# Joysticks -# -# CONFIG_INPUT_GAMEPORT is not set -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -# CONFIG_INTEL_RNG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set -# CONFIG_REISERFS_FS is not set -# CONFIG_REISERFS_CHECK is not set -# CONFIG_ADFS_FS is not set -# CONFIG_ADFS_FS_RW is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_CMS_FS is not set -# CONFIG_EXT3_FS is not set -# CONFIG_JBD is not set -# CONFIG_JBD_DEBUG is not set -# CONFIG_FAT_FS is not set -# CONFIG_MSDOS_FS is not set -# CONFIG_UMSDOS_FS is not set -# CONFIG_VFAT_FS is not set -# CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set -CONFIG_JFFS2_FS=y -CONFIG_JFFS2_FS_DEBUG=0 -# CONFIG_CRAMFS is not set -# CONFIG_TMPFS is not set -CONFIG_RAMFS=y -# CONFIG_ISO9660_FS is not set -# CONFIG_JOLIET is not set -# CONFIG_ZISOFS is not set -# CONFIG_MINIX_FS is not set -# CONFIG_FREEVXFS_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS_DEBUG is not set -# CONFIG_NTFS_RW is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -# CONFIG_DEVFS_MOUNT is not set -# CONFIG_DEVFS_DEBUG is not set -CONFIG_DEVPTS_FS=y -# CONFIG_QNX4FS_FS is not set -# CONFIG_QNX4FS_RW is not set -# CONFIG_ROMFS_FS is not set -CONFIG_EXT2_FS=y -# CONFIG_SYSV_FS is not set -# CONFIG_UDF_FS is not set -# CONFIG_UDF_RW is not set -# CONFIG_UFS_FS is not set -# CONFIG_UFS_FS_WRITE is not set - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -# CONFIG_INTERMEZZO_FS is not set -# CONFIG_NFS_FS is not set -# CONFIG_NFS_V3 is not set -# CONFIG_ROOT_NFS is not set -# CONFIG_NFSD is not set -# CONFIG_NFSD_V3 is not set -# CONFIG_SUNRPC is not set -# CONFIG_LOCKD is not set -# CONFIG_SMB_FS is not set -# CONFIG_NCP_FS is not set -# CONFIG_NCPFS_PACKET_SIGNING is not set -# CONFIG_NCPFS_IOCTL_LOCKING is not set -# CONFIG_NCPFS_STRONG is not set -# CONFIG_NCPFS_NFS_NS is not set -# CONFIG_NCPFS_OS2_NS is not set -# CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_NLS is not set -# CONFIG_NCPFS_EXTRAS is not set -# CONFIG_ZISOFS_FS is not set -# CONFIG_ZLIB_FS_INFLATE is not set - -# -# Partition Types -# -CONFIG_PARTITION_ADVANCED=y -# CONFIG_ACORN_PARTITION is not set -# CONFIG_OSF_PARTITION is not set -# CONFIG_AMIGA_PARTITION is not set -# CONFIG_ATARI_PARTITION is not set -# CONFIG_MAC_PARTITION is not set -# CONFIG_MSDOS_PARTITION is not set -# CONFIG_LDM_PARTITION is not set -# CONFIG_SGI_PARTITION is not set -# CONFIG_ULTRIX_PARTITION is not set -# CONFIG_SUN_PARTITION is not set -# CONFIG_SMB_NLS is not set -# CONFIG_NLS is not set - -# -# Multimedia Capabilities Port drivers -# -# CONFIG_MCP is not set -# CONFIG_MCP_SA1100 is not set -# CONFIG_MCP_UCB1200 is not set -# CONFIG_MCP_UCB1200_AUDIO is not set -# CONFIG_MCP_UCB1200_TS is not set - -# -# USB support -# -# CONFIG_USB is not set -# CONFIG_USB_UHCI is not set -# CONFIG_USB_UHCI_ALT is not set -# CONFIG_USB_OHCI is not set -# CONFIG_USB_OHCI_SA1111 is not set -# CONFIG_USB_AUDIO is not set -# CONFIG_USB_BLUETOOTH is not set -# CONFIG_USB_STORAGE is not set -# CONFIG_USB_STORAGE_DEBUG is not set -# CONFIG_USB_STORAGE_DATAFAB is not set -# CONFIG_USB_STORAGE_FREECOM is not set -# CONFIG_USB_STORAGE_ISD200 is not set -# CONFIG_USB_STORAGE_DPCM is not set -# CONFIG_USB_STORAGE_HP8200e is not set -# CONFIG_USB_STORAGE_SDDR09 is not set -# CONFIG_USB_STORAGE_JUMPSHOT is not set -# CONFIG_USB_ACM is not set -# CONFIG_USB_PRINTER is not set -# CONFIG_USB_DC2XX is not set -# CONFIG_USB_MDC800 is not set -# CONFIG_USB_SCANNER is not set -# CONFIG_USB_MICROTEK is not set -# CONFIG_USB_HPUSBSCSI is not set -# CONFIG_USB_PEGASUS is not set -# CONFIG_USB_KAWETH is not set -# CONFIG_USB_CATC is not set -# CONFIG_USB_CDCETHER is not set -# CONFIG_USB_USBNET is not set -# CONFIG_USB_USS720 is not set - -# -# USB Serial Converter support -# -# CONFIG_USB_SERIAL is not set -# CONFIG_USB_SERIAL_GENERIC is not set -# CONFIG_USB_SERIAL_BELKIN is not set -# CONFIG_USB_SERIAL_WHITEHEAT is not set -# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set -# CONFIG_USB_SERIAL_EMPEG is not set -# CONFIG_USB_SERIAL_FTDI_SIO is not set -# CONFIG_USB_SERIAL_VISOR is not set -# CONFIG_USB_SERIAL_IR is not set -# CONFIG_USB_SERIAL_EDGEPORT is not set -# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set -# CONFIG_USB_SERIAL_KEYSPAN is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set -# CONFIG_USB_SERIAL_MCT_U232 is not set -# CONFIG_USB_SERIAL_PL2303 is not set -# CONFIG_USB_SERIAL_CYBERJACK is not set -# CONFIG_USB_SERIAL_XIRCOM is not set -# CONFIG_USB_SERIAL_OMNINET is not set -# CONFIG_USB_RIO500 is not set -# CONFIG_USB_ID75 is not set - -# -# Bluetooth support -# -# CONFIG_BT is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_ERRORS=y -CONFIG_DEBUG_USER=y -# CONFIG_DEBUG_INFO is not set -CONFIG_DEBUG_SLAB=y -# CONFIG_MAGIC_SYSRQ is not set -# CONFIG_DEBUG_SPINLOCK is not set -# CONFIG_NO_PGT_CACHE is not set -CONFIG_DEBUG_LL=y -# CONFIG_DEBUG_DC21285_PORT is not set -# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -prauN linux-2.6.0-test5/arch/arm/def-configs/adsbitsy wli-2.6.0-test5-bk12-25/arch/arm/def-configs/adsbitsy --- linux-2.6.0-test5/arch/arm/def-configs/adsbitsy 2003-09-08 12:50:16.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/adsbitsy 1969-12-31 16:00:00.000000000 -0800 @@ -1,664 +0,0 @@ -# -# Automatically generated by make menuconfig: don't edit -# -CONFIG_ARM=y -# CONFIG_EISA is not set -# CONFIG_SBUS is not set -# CONFIG_MCA is not set -CONFIG_UID16=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y -# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -# CONFIG_OBSOLETE is not set - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODVERSIONS is not set -# CONFIG_KMOD is not set - -# -# System Type -# -# CONFIG_ARCH_ANAKIN is not set -# CONFIG_ARCH_ARCA5K is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_RPC is not set -CONFIG_ARCH_SA1100=y -# CONFIG_ARCH_SHARK is not set - -# -# Archimedes/A5000 Implementations -# -# CONFIG_ARCH_ARC is not set -# CONFIG_ARCH_A5K is not set - -# -# Footbridge Implementations -# -# CONFIG_ARCH_CATS is not set -# CONFIG_ARCH_PERSONAL_SERVER is not set -# CONFIG_ARCH_EBSA285_ADDIN is not set -# CONFIG_ARCH_EBSA285_HOST is not set -# CONFIG_ARCH_NETWINDER is not set - -# -# SA11x0 Implementations -# -# CONFIG_SA1100_ASSABET is not set -# CONFIG_ASSABET_NEPONSET is not set -# CONFIG_SA1100_BRUTUS is not set -# CONFIG_SA1100_CERF is not set -# CONFIG_SA1100_BITSY is not set -# CONFIG_SA1100_EXTENEX1 is not set -# CONFIG_SA1100_FLEXANET is not set -# CONFIG_SA1100_FREEBIRD is not set -# CONFIG_SA1100_GRAPHICSCLIENT is not set -# CONFIG_SA1100_JORNADA720 is not set -# CONFIG_SA1100_HUW_WEBPANEL is not set -# CONFIG_SA1100_ITSY is not set -# CONFIG_SA1100_LART is not set -# CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_OMNIMETER is not set -# CONFIG_SA1100_PANGOLIN is not set -# CONFIG_SA1100_PLEB is not set -# CONFIG_SA1100_SHERMAN is not set -# CONFIG_SA1100_SIMPAD is not set -# CONFIG_SA1100_PFS168 is not set -# CONFIG_SA1100_VICTOR is not set -# CONFIG_SA1100_XP860 is not set -# CONFIG_SA1100_YOPY is not set -# CONFIG_SA1100_GRAPHICSMASTER is not set -CONFIG_SA1100_ADSBITSY=y -CONFIG_SA1111=y -# CONFIG_SA1100_USB is not set -# CONFIG_SA1100_USB_NETLINK is not set -# CONFIG_SA1100_USB_CHAR is not set - -# -# CLPS711X/EP721X Implementations -# -# CONFIG_ARCH_P720T is not set -# CONFIG_ARCH_ACORN is not set -# CONFIG_FOOTBRIDGE is not set -# CONFIG_FOOTBRIDGE_HOST is not set -# CONFIG_FOOTBRIDGE_ADDIN is not set -CONFIG_CPU_32=y -# CONFIG_CPU_26 is not set -# CONFIG_CPU_32v3 is not set -CONFIG_CPU_32v4=y -# CONFIG_CPU_ARM610 is not set -# CONFIG_CPU_ARM710 is not set -# CONFIG_CPU_ARM720T is not set -# CONFIG_CPU_ARM920T is not set -# CONFIG_CPU_ARM1020 is not set -# CONFIG_CPU_SA110 is not set -CONFIG_CPU_SA1100=y -CONFIG_DISCONTIGMEM=y -# CONFIG_CPU_BIG_ENDIAN is not set - -# -# General setup -# -# CONFIG_PCI is not set -# CONFIG_ISA is not set -# CONFIG_ISA_DMA is not set -# CONFIG_CPU_FREQ is not set -CONFIG_HOTPLUG=y - -# -# PCMCIA/CardBus support -# -CONFIG_PCMCIA=y -# CONFIG_I82365 is not set -# CONFIG_TCIC is not set -# CONFIG_PCMCIA_CLPS6700 is not set -CONFIG_PCMCIA_SA1100=y -CONFIG_NET=y -CONFIG_SYSVIPC=y -# CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_SYSCTL=y -CONFIG_FPE_NWFPE=y -# CONFIG_FPE_FASTFPE is not set -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -# CONFIG_BINFMT_AOUT is not set -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -# CONFIG_PM is not set -# CONFIG_APM is not set -# CONFIG_ARTHUR is not set -CONFIG_CMDLINE="ip=off mem=32M root=/dev/ram ramdisk=8192 initrd=0xc0800000,4M" -# CONFIG_PFS168_CMDLINE is not set -# CONFIG_LEDS is not set -CONFIG_ALIGNMENT_TRAP=y - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Memory Technology Devices (MTD) -# -# CONFIG_MTD is not set - -# -# Plug and Play configuration -# -# CONFIG_PNP is not set -# CONFIG_ISAPNP is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_XD is not set -# CONFIG_PARIDE is not set -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_BLK_DEV_DAC960 is not set -CONFIG_BLK_DEV_LOOP=y -# CONFIG_BLK_DEV_NBD is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=8192 -CONFIG_BLK_DEV_INITRD=y - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set -# CONFIG_BLK_DEV_MD is not set -# CONFIG_MD_LINEAR is not set -# CONFIG_MD_RAID0 is not set -# CONFIG_MD_RAID1 is not set -# CONFIG_MD_RAID5 is not set -# CONFIG_BLK_DEV_LVM is not set - -# -# Networking options -# -CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set -# CONFIG_NETLINK is not set -# CONFIG_NETFILTER is not set -# CONFIG_FILTER is not set -CONFIG_UNIX=y -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -CONFIG_IP_PNP=y -# CONFIG_IP_PNP_DHCP is not set -CONFIG_IP_PNP_BOOTP=y -# CONFIG_IP_PNP_RARP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_INET_ECN is not set -# CONFIG_SYN_COOKIES is not set -# CONFIG_IPV6 is not set -# CONFIG_KHTTPD is not set -# CONFIG_ATM is not set -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_LLC is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set - -# -# Ethernet (10 or 100Mbit) -# -CONFIG_NET_ETHERNET=y -# CONFIG_SUNLANCE is not set -# CONFIG_SUNBMAC is not set -# CONFIG_SUNQE is not set -# CONFIG_SUNLANCE is not set -# CONFIG_SUNGEM is not set -# CONFIG_NET_VENDOR_3COM is not set -# CONFIG_LANCE is not set -# CONFIG_NET_VENDOR_SMC is not set -# CONFIG_NET_VENDOR_RACAL is not set -# CONFIG_NET_ISA is not set -# CONFIG_NET_PCI is not set -# CONFIG_NET_POCKET is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_ACENIC is not set -# CONFIG_ACENIC_OMIT_TIGON_I is not set -# CONFIG_MYRI_SBUS is not set -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -# CONFIG_SK98LIN is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PLIP is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set - -# -# Token Ring devices -# -# CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# PCMCIA network device support -# -CONFIG_NET_PCMCIA=y -# CONFIG_PCMCIA_3C589 is not set -# CONFIG_PCMCIA_3C574 is not set -# CONFIG_PCMCIA_FMVJ18X is not set -CONFIG_PCMCIA_PCNET=y -# CONFIG_PCMCIA_NMCLAN is not set -# CONFIG_PCMCIA_SMC91C92 is not set -# CONFIG_PCMCIA_XIRC2PS is not set -# CONFIG_ARCNET_COM20020_CS is not set -# CONFIG_PCMCIA_IBMTR is not set -# CONFIG_NET_PCMCIA_RADIO is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# ATA/IDE/MFM/RLL support -# -CONFIG_IDE=y - -# -# IDE, ATA and ATAPI Block devices -# -CONFIG_BLK_DEV_IDE=y -# CONFIG_BLK_DEV_HD_IDE is not set -# CONFIG_BLK_DEV_HD is not set -CONFIG_BLK_DEV_IDEDISK=y -# CONFIG_IDEDISK_MULTI_MODE is not set -CONFIG_BLK_DEV_IDECS=y -# CONFIG_BLK_DEV_IDECD is not set -# CONFIG_BLK_DEV_IDETAPE is not set -# CONFIG_BLK_DEV_IDEFLOPPY is not set -# CONFIG_BLK_DEV_IDESCSI is not set -# CONFIG_BLK_DEV_CMD640 is not set -# CONFIG_BLK_DEV_CMD640_ENHANCED is not set -# CONFIG_BLK_DEV_ISAPNP is not set -# CONFIG_IDE_CHIPSETS is not set -# CONFIG_IDEDMA_AUTO is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# I2O device support -# -# CONFIG_I2O is not set -# CONFIG_I2O_BLOCK is not set -# CONFIG_I2O_LAN is not set -# CONFIG_I2O_SCSI is not set -# CONFIG_I2O_PROC is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Input core support -# -CONFIG_INPUT=y -# CONFIG_INPUT_KEYBDEV is not set -CONFIG_INPUT_MOUSEDEV=y -CONFIG_INPUT_MOUSEDEV_SCREEN_X=640 -CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480 -# CONFIG_INPUT_JOYDEV is not set -# CONFIG_INPUT_EVDEV is not set - -# -# Character devices -# -CONFIG_VT=y -# CONFIG_VT_CONSOLE is not set -# CONFIG_SERIAL is not set -# CONFIG_SERIAL_EXTENDED is not set -# CONFIG_SERIAL_NONSTANDARD is not set -# CONFIG_SERIAL_21285 is not set -# CONFIG_SERIAL_21285_OLD is not set -# CONFIG_SERIAL_21285_CONSOLE is not set -# CONFIG_SERIAL_AMBA is not set -# CONFIG_SERIAL_AMBA_CONSOLE is not set -# CONFIG_SERIAL_CLPS711X is not set -# CONFIG_SERIAL_CLPS711X_CONSOLE is not set -CONFIG_SERIAL_SA1100=y -CONFIG_SERIAL_SA1100_CONSOLE=y -CONFIG_SA1100_DEFAULT_BAUDRATE=38400 -# CONFIG_SERIAL_8250 is not set -# CONFIG_SERIAL_8250_CONSOLE is not set -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=32 -CONFIG_UCB1200=y -CONFIG_TOUCHSCREEN_UCB1200=y -CONFIG_AUDIO_UCB1200=y -CONFIG_ADC_UCB1200=y -# CONFIG_TOUCHSCREEN_BITSY is not set -# CONFIG_PROFILER is not set -# CONFIG_PFS168_SPI is not set -# CONFIG_PFS168_DTMF is not set -# CONFIG_PFS168_MISC is not set - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -# CONFIG_MOUSE is not set - -# -# Joysticks -# -# CONFIG_JOYSTICK is not set -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -# CONFIG_INTEL_RNG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -# CONFIG_SA1100_RTC is not set -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set - -# -# PCMCIA character devices -# - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set -# CONFIG_REISERFS_FS is not set -# CONFIG_REISERFS_CHECK is not set -# CONFIG_ADFS_FS is not set -# CONFIG_ADFS_FS_RW is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BFS_FS is not set -CONFIG_FAT_FS=y -# CONFIG_MSDOS_FS is not set -# CONFIG_UMSDOS_FS is not set -CONFIG_VFAT_FS=y -# CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set -# CONFIG_JFFS2_FS is not set -CONFIG_CRAMFS=y -# CONFIG_TMPFS is not set -CONFIG_RAMFS=y -# CONFIG_ISO9660_FS is not set -# CONFIG_JOLIET is not set -# CONFIG_MINIX_FS is not set -# CONFIG_VXFS_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS_DEBUG is not set -# CONFIG_NTFS_RW is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -# CONFIG_DEVFS_MOUNT is not set -# CONFIG_DEVFS_DEBUG is not set -CONFIG_DEVPTS_FS=y -# CONFIG_QNX4FS_FS is not set -# CONFIG_QNX4FS_RW is not set -# CONFIG_ROMFS_FS is not set -CONFIG_EXT2_FS=y -# CONFIG_SYSV_FS is not set -# CONFIG_UDF_FS is not set -# CONFIG_UDF_RW is not set -# CONFIG_UFS_FS is not set -# CONFIG_UFS_FS_WRITE is not set - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -CONFIG_NFS_FS=y -# CONFIG_NFS_V3 is not set -CONFIG_ROOT_NFS=y -# CONFIG_NFSD is not set -# CONFIG_NFSD_V3 is not set -CONFIG_SUNRPC=y -CONFIG_LOCKD=y -# CONFIG_SMB_FS is not set -# CONFIG_NCP_FS is not set -# CONFIG_NCPFS_PACKET_SIGNING is not set -# CONFIG_NCPFS_IOCTL_LOCKING is not set -# CONFIG_NCPFS_STRONG is not set -# CONFIG_NCPFS_NFS_NS is not set -# CONFIG_NCPFS_OS2_NS is not set -# CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_NLS is not set -# CONFIG_NCPFS_EXTRAS is not set - -# -# Partition Types -# -# CONFIG_PARTITION_ADVANCED is not set -CONFIG_MSDOS_PARTITION=y -# CONFIG_SMB_NLS is not set -CONFIG_NLS=y - -# -# Native Language Support -# -CONFIG_NLS_DEFAULT="iso8859-1" -# CONFIG_NLS_CODEPAGE_437 is not set -# CONFIG_NLS_CODEPAGE_737 is not set -# CONFIG_NLS_CODEPAGE_775 is not set -# CONFIG_NLS_CODEPAGE_850 is not set -# CONFIG_NLS_CODEPAGE_852 is not set -# CONFIG_NLS_CODEPAGE_855 is not set -# CONFIG_NLS_CODEPAGE_857 is not set -# CONFIG_NLS_CODEPAGE_860 is not set -# CONFIG_NLS_CODEPAGE_861 is not set -# CONFIG_NLS_CODEPAGE_862 is not set -# CONFIG_NLS_CODEPAGE_863 is not set -# CONFIG_NLS_CODEPAGE_864 is not set -# CONFIG_NLS_CODEPAGE_865 is not set -# CONFIG_NLS_CODEPAGE_866 is not set -# CONFIG_NLS_CODEPAGE_869 is not set -# CONFIG_NLS_CODEPAGE_936 is not set -# CONFIG_NLS_CODEPAGE_950 is not set -# CONFIG_NLS_CODEPAGE_932 is not set -# CONFIG_NLS_CODEPAGE_949 is not set -# CONFIG_NLS_CODEPAGE_874 is not set -# CONFIG_NLS_ISO8859_8 is not set -# CONFIG_NLS_CODEPAGE_1251 is not set -# CONFIG_NLS_ISO8859_1 is not set -# CONFIG_NLS_ISO8859_2 is not set -# CONFIG_NLS_ISO8859_3 is not set -# CONFIG_NLS_ISO8859_4 is not set -# CONFIG_NLS_ISO8859_5 is not set -# CONFIG_NLS_ISO8859_6 is not set -# CONFIG_NLS_ISO8859_7 is not set -# CONFIG_NLS_ISO8859_9 is not set -# CONFIG_NLS_ISO8859_13 is not set -# CONFIG_NLS_ISO8859_14 is not set -# CONFIG_NLS_ISO8859_15 is not set -# CONFIG_NLS_KOI8_R is not set -# CONFIG_NLS_KOI8_U is not set -# CONFIG_NLS_UTF8 is not set - -# -# Console drivers -# -CONFIG_PC_KEYMAP=y -# CONFIG_VGA_CONSOLE is not set - -# -# Frame-buffer support -# -CONFIG_FB=y -CONFIG_DUMMY_CONSOLE=y -# CONFIG_FB_ACORN is not set -# CONFIG_FB_CLPS711X is not set -# CONFIG_FB_CYBER2000 is not set -CONFIG_FB_SA1100=y -# CONFIG_FB_ANAKIN is not set -# CONFIG_FB_E1355 is not set -# CONFIG_FB_VIRTUAL is not set -# CONFIG_FBCON_ADVANCED is not set -CONFIG_FBCON_CFB2=y -CONFIG_FBCON_CFB4=y -CONFIG_FBCON_CFB8=y -CONFIG_FBCON_CFB16=y -CONFIG_FBCON_FONTWIDTH8_ONLY=y -CONFIG_FBCON_FONTS=y -# CONFIG_FONT_8x8 is not set -CONFIG_FONT_8x16=y -# CONFIG_FONT_SUN8x16 is not set -# CONFIG_FONT_PEARL_8x8 is not set -# CONFIG_FONT_ACORN_8x8 is not set - -# -# Sound -# -# CONFIG_SOUND is not set - -# -# USB support -# -CONFIG_USB=y -# CONFIG_USB_DEBUG is not set -CONFIG_USB_DEVICEFS=y -# CONFIG_USB_BANDWIDTH is not set -# CONFIG_USB_UHCI is not set -# CONFIG_USB_UHCI_ALT is not set -CONFIG_USB_OHCI=y -CONFIG_USB_OHCI_NOPCI=y -# CONFIG_USB_AUDIO is not set -# CONFIG_USB_BLUETOOTH is not set -# CONFIG_USB_STORAGE is not set -# CONFIG_USB_ACM is not set -# CONFIG_USB_PRINTER is not set -# CONFIG_USB_HID is not set -# CONFIG_USB_KBD is not set -CONFIG_USB_MOUSE=y -# CONFIG_USB_WACOM is not set -# CONFIG_USB_DC2XX is not set -# CONFIG_USB_MDC800 is not set -# CONFIG_USB_SCANNER is not set -# CONFIG_USB_MICROTEK is not set -# CONFIG_USB_IBMCAM is not set -# CONFIG_USB_OV511 is not set -# CONFIG_USB_PWC is not set -# CONFIG_USB_SE401 is not set -# CONFIG_USB_DSBR is not set -# CONFIG_USB_DABUSB is not set -# CONFIG_USB_PLUSB is not set -# CONFIG_USB_PEGASUS is not set -# CONFIG_USB_CATC is not set -# CONFIG_USB_NET1080 is not set -# CONFIG_USB_USBNET is not set -# CONFIG_USB_USS720 is not set - -# -# USB Serial Converter support -# -# CONFIG_USB_SERIAL is not set -# CONFIG_USB_RIO500 is not set - -# -# Bluetooth support -# -# CONFIG_BT is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_ERRORS=y -# CONFIG_DEBUG_USER is not set -# CONFIG_DEBUG_INFO is not set -# CONFIG_MAGIC_SYSRQ is not set -# CONFIG_NO_PGT_CACHE is not set -# CONFIG_DEBUG_LL is not set -# CONFIG_DEBUG_DC21285_PORT is not set -# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -prauN linux-2.6.0-test5/arch/arm/def-configs/anakin wli-2.6.0-test5-bk12-25/arch/arm/def-configs/anakin --- linux-2.6.0-test5/arch/arm/def-configs/anakin 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/anakin 1969-12-31 16:00:00.000000000 -0800 @@ -1,632 +0,0 @@ -# -# Automatically generated make config: don't edit -# -CONFIG_ARM=y -# CONFIG_EISA is not set -# CONFIG_SBUS is not set -# CONFIG_MCA is not set -CONFIG_UID16=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y -# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set -# CONFIG_GENERIC_BUST_SPINLOCK is not set -# CONFIG_GENERIC_ISA_DMA is not set - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y - -# -# General setup -# -CONFIG_NET=y -# CONFIG_SYSVIPC is not set -# CONFIG_BSD_PROCESS_ACCT is not set -# CONFIG_SYSCTL is not set - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODVERSIONS is not set -# CONFIG_KMOD is not set - -# -# System Type -# -# CONFIG_ARCH_ADIFCC is not set -CONFIG_ARCH_ANAKIN=y -# CONFIG_ARCH_ARCA5K is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_CAMELOT is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_IOP310 is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_RPC is not set -# CONFIG_ARCH_SA1100 is not set -# CONFIG_ARCH_SHARK is not set - -# -# Archimedes/A5000 Implementations -# - -# -# Archimedes/A5000 Implementations (select only ONE) -# -# CONFIG_ARCH_ARC is not set -# CONFIG_ARCH_A5K is not set - -# -# Footbridge Implementations -# -# CONFIG_ARCH_CATS is not set -# CONFIG_ARCH_PERSONAL_SERVER is not set -# CONFIG_ARCH_EBSA285_ADDIN is not set -# CONFIG_ARCH_EBSA285_HOST is not set -# CONFIG_ARCH_NETWINDER is not set - -# -# SA11x0 Implementations -# -# CONFIG_SA1100_ASSABET is not set -# CONFIG_ASSABET_NEPONSET is not set -# CONFIG_SA1100_ADSBITSY is not set -# CONFIG_SA1100_BRUTUS is not set -# CONFIG_SA1100_CERF is not set -# CONFIG_SA1100_H3100 is not set -# CONFIG_SA1100_H3600 is not set -# CONFIG_SA1100_H3800 is not set -# CONFIG_SA1100_H3XXX is not set -# CONFIG_SA1100_EXTENEX1 is not set -# CONFIG_SA1100_FLEXANET is not set -# CONFIG_SA1100_FREEBIRD is not set -# CONFIG_SA1100_GRAPHICSCLIENT is not set -# CONFIG_SA1100_GRAPHICSMASTER is not set -# CONFIG_SA1100_BADGE4 is not set -# CONFIG_SA1100_JORNADA720 is not set -# CONFIG_SA1100_HUW_WEBPANEL is not set -# CONFIG_SA1100_ITSY is not set -# CONFIG_SA1100_LART is not set -# CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_OMNIMETER is not set -# CONFIG_SA1100_PANGOLIN is not set -# CONFIG_SA1100_PLEB is not set -# CONFIG_SA1100_PT_SYSTEM3 is not set -# CONFIG_SA1100_SHANNON is not set -# CONFIG_SA1100_SHERMAN is not set -# CONFIG_SA1100_SIMPAD is not set -# CONFIG_SA1100_PFS168 is not set -# CONFIG_SA1100_VICTOR is not set -# CONFIG_SA1100_XP860 is not set -# CONFIG_SA1100_YOPY is not set -# CONFIG_SA1100_STORK is not set -# CONFIG_SA1100_USB is not set -# CONFIG_SA1100_USB_NETLINK is not set -# CONFIG_SA1100_USB_CHAR is not set -# CONFIG_H3600_SLEEVE is not set - -# -# CLPS711X/EP721X Implementations -# -# CONFIG_ARCH_AUTCPU12 is not set -# CONFIG_ARCH_CDB89712 is not set -# CONFIG_ARCH_CLEP7312 is not set -# CONFIG_ARCH_EDB7211 is not set -# CONFIG_ARCH_P720T is not set -# CONFIG_ARCH_FORTUNET is not set -# CONFIG_ARCH_EP7211 is not set -# CONFIG_ARCH_EP7212 is not set -# CONFIG_ARCH_ACORN is not set -# CONFIG_FOOTBRIDGE is not set -# CONFIG_FOOTBRIDGE_HOST is not set -# CONFIG_FOOTBRIDGE_ADDIN is not set -CONFIG_CPU_32=y -# CONFIG_CPU_26 is not set - -# -# Processor Type -# -# CONFIG_CPU_32v3 is not set -CONFIG_CPU_32v4=y -# CONFIG_CPU_32v5 is not set -# CONFIG_CPU_ARM610 is not set -# CONFIG_CPU_ARM710 is not set -# CONFIG_CPU_ARM720T is not set -# CONFIG_CPU_ARM920T is not set -# CONFIG_CPU_ARM922T is not set -# CONFIG_CPU_ARM926T is not set -# CONFIG_CPU_ARM1020 is not set -CONFIG_CPU_SA110=y -# CONFIG_CPU_SA1100 is not set -# CONFIG_CPU_XSCALE is not set -# CONFIG_XSCALE_PMU is not set - -# -# Processor Features -# - -# -# General setup -# -# CONFIG_DISCONTIGMEM is not set -# CONFIG_PCI is not set -# CONFIG_ISA is not set -# CONFIG_ISA_DMA is not set -# CONFIG_FIQ is not set -# CONFIG_ZBOOT_ROM is not set -CONFIG_ZBOOT_ROM_TEXT=0 -CONFIG_ZBOOT_ROM_BSS=0 -# CONFIG_HOTPLUG is not set -# CONFIG_PCMCIA is not set - -# -# At least one math emulation must be selected -# -CONFIG_FPE_NWFPE=y -# CONFIG_FPE_FASTFPE is not set -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -CONFIG_BINFMT_AOUT=y -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -# CONFIG_PM is not set -# CONFIG_PREEMPT is not set -# CONFIG_APM is not set -# CONFIG_ARTHUR is not set -CONFIG_CMDLINE="root=/dev/ram initrd=0xc0800000,4M" -CONFIG_ALIGNMENT_TRAP=y - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Memory Technology Devices (MTD) -# -# CONFIG_MTD is not set - -# -# Plug and Play configuration -# -# CONFIG_PNP is not set -# CONFIG_ISAPNP is not set -# CONFIG_PNPBIOS is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_XD is not set -# CONFIG_PARIDE is not set -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_CISS_SCSI_TAPE is not set -# CONFIG_BLK_DEV_DAC960 is not set -# CONFIG_BLK_DEV_UMEM is not set -# CONFIG_BLK_DEV_LOOP is not set -# CONFIG_BLK_DEV_NBD is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=8192 -CONFIG_BLK_DEV_INITRD=y - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set -# CONFIG_BLK_DEV_MD is not set -# CONFIG_MD_LINEAR is not set -# CONFIG_MD_RAID0 is not set -# CONFIG_MD_RAID1 is not set -# CONFIG_MD_RAID5 is not set -# CONFIG_MD_MULTIPATH is not set -# CONFIG_BLK_DEV_LVM is not set - -# -# Networking options -# -# CONFIG_PACKET is not set -# CONFIG_NETLINK_DEV is not set -# CONFIG_NETFILTER is not set -# CONFIG_FILTER is not set -CONFIG_UNIX=y -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -# CONFIG_IP_PNP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_ARPD is not set -# CONFIG_INET_ECN is not set -# CONFIG_SYN_COOKIES is not set -# CONFIG_IPV6 is not set -# CONFIG_KHTTPD is not set -# CONFIG_ATM is not set -# CONFIG_VLAN_8021Q is not set - -# -# -# -# CONFIG_IPX is not set -# CONFIG_ATALK is not set - -# -# Appletalk devices -# -# CONFIG_DEV_APPLETALK is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_LLC is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network device support -# -# CONFIG_NETDEVICES is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -CONFIG_IRDA=y - -# -# IrDA protocols -# -# CONFIG_IRLAN is not set -# CONFIG_IRCOMM is not set -# CONFIG_IRDA_ULTRA is not set - -# -# IrDA options -# -# CONFIG_IRDA_CACHE_LAST_LSAP is not set -# CONFIG_IRDA_FAST_RR is not set -# CONFIG_IRDA_DEBUG is not set - -# -# Infrared-port device drivers -# - -# -# SIR device drivers -# -CONFIG_IRTTY_SIR=y -# CONFIG_IRPORT_SIR is not set - -# -# Dongle support -# -# CONFIG_DONGLE is not set - -# -# FIR device drivers -# -# CONFIG_USB_IRDA is not set -# CONFIG_NSC_FIR is not set -# CONFIG_WINBOND_FIR is not set -# CONFIG_TOSHIBA_FIR is not set -# CONFIG_SMC_IRCC_FIR is not set -# CONFIG_ALI_FIR is not set -# CONFIG_VLSI_FIR is not set - -# -# ATA/IDE/MFM/RLL support -# -# CONFIG_IDE is not set -# CONFIG_BLK_DEV_HD is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# I2O device support -# -# CONFIG_I2O is not set -# CONFIG_I2O_BLOCK is not set -# CONFIG_I2O_LAN is not set -# CONFIG_I2O_SCSI is not set -# CONFIG_I2O_PROC is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN_BOOL is not set - -# -# Input device support -# -# CONFIG_INPUT is not set -# CONFIG_INPUT_KEYBDEV is not set -# CONFIG_INPUT_MOUSEDEV is not set -# CONFIG_INPUT_JOYDEV is not set -# CONFIG_INPUT_EVDEV is not set -# CONFIG_GAMEPORT is not set -CONFIG_SOUND_GAMEPORT=y -# CONFIG_GAMEPORT_NS558 is not set -# CONFIG_GAMEPORT_L4 is not set -# CONFIG_INPUT_EMU10K1 is not set -# CONFIG_GAMEPORT_PCIGAME is not set -# CONFIG_GAMEPORT_FM801 is not set -# CONFIG_GAMEPORT_CS461x is not set -# CONFIG_SERIO is not set -# CONFIG_SERIO_SERPORT is not set - -# -# Character devices -# -CONFIG_VT=y -# CONFIG_VT_CONSOLE is not set -# CONFIG_SERIAL_EXTENDED is not set -# CONFIG_SERIAL_NONSTANDARD is not set - -# -# Serial drivers -# -# CONFIG_SERIAL_8250 is not set -# CONFIG_SERIAL_8250_CONSOLE is not set -# CONFIG_SERIAL_8250_EXTENDED is not set -# CONFIG_SERIAL_8250_MANY_PORTS is not set -# CONFIG_SERIAL_8250_SHARE_IRQ is not set -# CONFIG_SERIAL_8250_DETECT_IRQ is not set -# CONFIG_SERIAL_8250_MULTIPORT is not set -# CONFIG_SERIAL_8250_RSA is not set - -# -# Non-8250 serial port support -# - -# -# ARM Serial drivers -# -# CONFIG_ATOMWIDE_SERIAL is not set -# CONFIG_DUALSP_SERIAL is not set -CONFIG_SERIAL_ANAKIN=y -CONFIG_SERIAL_ANAKIN_CONSOLE=y -CONFIG_ANAKIN_DEFAULT_BAUDRATE=115200 -# CONFIG_SERIAL_AMBA is not set -# CONFIG_SERIAL_AMBA_CONSOLE is not set -# CONFIG_SERIAL_CLPS711X is not set -# CONFIG_SERIAL_CLPS711X_CONSOLE is not set -# CONFIG_SERIAL_21285 is not set -# CONFIG_SERIAL_21285_OLD is not set -# CONFIG_SERIAL_21285_CONSOLE is not set -# CONFIG_SERIAL_UART00 is not set -# CONFIG_SERIAL_UART00_CONSOLE is not set -# CONFIG_SERIAL_SA1100 is not set -# CONFIG_SERIAL_SA1100_CONSOLE is not set -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_TOUCHSCREEN_ANAKIN=y -# CONFIG_UNIX98_PTYS is not set - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# L3 serial bus support -# -# CONFIG_L3 is not set -# CONFIG_L3_ALGOBIT is not set -# CONFIG_L3_BIT_SA1100_GPIO is not set - -# -# Other L3 adapters -# -# CONFIG_L3_SA1111 is not set -# CONFIG_BIT_SA1100_GPIO is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -# CONFIG_MOUSE is not set -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -# CONFIG_INTEL_RNG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -# CONFIG_QFMT_V1 is not set -# CONFIG_QFMT_V2 is not set -# CONFIG_QIFACE_COMPAT is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set -# CONFIG_REISERFS_FS is not set -# CONFIG_REISERFS_CHECK is not set -# CONFIG_REISERFS_PROC_INFO is not set -# CONFIG_ADFS_FS is not set -# CONFIG_ADFS_FS_RW is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_EXT3_FS is not set -# CONFIG_JBD is not set -# CONFIG_JBD_DEBUG is not set -# CONFIG_FAT_FS is not set -# CONFIG_MSDOS_FS is not set -# CONFIG_UMSDOS_FS is not set -# CONFIG_VFAT_FS is not set -# CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set -# CONFIG_JFFS2_FS is not set -# CONFIG_CRAMFS is not set -# CONFIG_TMPFS is not set -CONFIG_RAMFS=y -# CONFIG_ISO9660_FS is not set -# CONFIG_JOLIET is not set -# CONFIG_ZISOFS is not set -# CONFIG_JFS_FS is not set -# CONFIG_JFS_DEBUG is not set -# CONFIG_JFS_STATISTICS is not set -# CONFIG_MINIX_FS is not set -# CONFIG_VXFS_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS_DEBUG is not set -# CONFIG_NTFS_RW is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -# CONFIG_DEVFS_MOUNT is not set -# CONFIG_DEVFS_DEBUG is not set -# CONFIG_DEVPTS_FS is not set -# CONFIG_QNX4FS_FS is not set -# CONFIG_QNX4FS_RW is not set -# CONFIG_ROMFS_FS is not set -CONFIG_EXT2_FS=y -# CONFIG_SYSV_FS is not set -# CONFIG_UDF_FS is not set -# CONFIG_UDF_RW is not set -# CONFIG_UFS_FS is not set -# CONFIG_UFS_FS_WRITE is not set - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -# CONFIG_INTERMEZZO_FS is not set -# CONFIG_NFS_FS is not set -# CONFIG_NFS_V3 is not set -# CONFIG_ROOT_NFS is not set -# CONFIG_NFSD is not set -# CONFIG_NFSD_V3 is not set -# CONFIG_NFSD_TCP is not set -# CONFIG_SUNRPC is not set -# CONFIG_LOCKD is not set -# CONFIG_EXPORTFS is not set -# CONFIG_SMB_FS is not set -# CONFIG_NCP_FS is not set -# CONFIG_NCPFS_PACKET_SIGNING is not set -# CONFIG_NCPFS_IOCTL_LOCKING is not set -# CONFIG_NCPFS_STRONG is not set -# CONFIG_NCPFS_NFS_NS is not set -# CONFIG_NCPFS_OS2_NS is not set -# CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_NLS is not set -# CONFIG_NCPFS_EXTRAS is not set -# CONFIG_ZISOFS_FS is not set - -# -# Partition Types -# -# CONFIG_PARTITION_ADVANCED is not set -# CONFIG_SMB_NLS is not set -# CONFIG_NLS is not set - -# -# Console drivers -# -CONFIG_PC_KEYMAP=y -# CONFIG_VGA_CONSOLE is not set - -# -# Frame-buffer support -# -CONFIG_FB=y -CONFIG_DUMMY_CONSOLE=y -# CONFIG_FB_ACORN is not set -CONFIG_FB_ANAKIN=y -# CONFIG_FB_CLPS711X is not set -# CONFIG_FB_SA1100 is not set -# CONFIG_FB_CYBER2000 is not set -# CONFIG_FB_VIRTUAL is not set -# CONFIG_FBCON_ADVANCED is not set -CONFIG_FBCON_CFB16=y -# CONFIG_FBCON_FONTWIDTH8_ONLY is not set -# CONFIG_FBCON_FONTS is not set -CONFIG_FONT_8x8=y -CONFIG_FONT_8x16=y - -# -# Multimedia Capabilities Port drivers -# -# CONFIG_MCP is not set -# CONFIG_MCP_SA1100 is not set -# CONFIG_MCP_UCB1200 is not set -# CONFIG_MCP_UCB1200_AUDIO is not set -# CONFIG_MCP_UCB1200_TS is not set - -# -# Console Switches -# -# CONFIG_SWITCHES is not set - -# -# USB support -# -# CONFIG_USB is not set - -# -# Bluetooth support -# -# CONFIG_BT is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_USER=y -# CONFIG_DEBUG_INFO is not set -# CONFIG_DEBUG_KERNEL is not set -# CONFIG_DEBUG_SLAB is not set -# CONFIG_MAGIC_SYSRQ is not set -# CONFIG_DEBUG_SPINLOCK is not set -# CONFIG_DEBUG_WAITQ is not set -# CONFIG_DEBUG_BUGVERBOSE is not set -# CONFIG_DEBUG_ERRORS is not set -# CONFIG_DEBUG_LL is not set -# CONFIG_DEBUG_DC21285_PORT is not set -# CONFIG_DEBUG_CLPS711X_UART2 is not set - -# -# Library routines -# -# CONFIG_CRC32 is not set -# CONFIG_ZLIB_INFLATE is not set -# CONFIG_ZLIB_DEFLATE is not set diff -prauN linux-2.6.0-test5/arch/arm/def-configs/assabet wli-2.6.0-test5-bk12-25/arch/arm/def-configs/assabet --- linux-2.6.0-test5/arch/arm/def-configs/assabet 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/assabet 1969-12-31 16:00:00.000000000 -0800 @@ -1,966 +0,0 @@ -# -# Automatically generated make config: don't edit -# -CONFIG_ARM=y -# CONFIG_EISA is not set -# CONFIG_SBUS is not set -# CONFIG_MCA is not set -CONFIG_UID16=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y -# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set -# CONFIG_GENERIC_BUST_SPINLOCK is not set -# CONFIG_GENERIC_ISA_DMA is not set - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -# CONFIG_OBSOLETE is not set - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODVERSIONS is not set -# CONFIG_KMOD is not set - -# -# System Type -# -# CONFIG_ARCH_ANAKIN is not set -# CONFIG_ARCH_ARCA5K is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_CAMELOT is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_RPC is not set -CONFIG_ARCH_SA1100=y -# CONFIG_ARCH_SHARK is not set - -# -# Archimedes/A5000 Implementations -# - -# -# Archimedes/A5000 Implementations (select only ONE) -# -# CONFIG_ARCH_ARC is not set -# CONFIG_ARCH_A5K is not set - -# -# Footbridge Implementations -# -# CONFIG_ARCH_CATS is not set -# CONFIG_ARCH_PERSONAL_SERVER is not set -# CONFIG_ARCH_EBSA285_ADDIN is not set -# CONFIG_ARCH_EBSA285_HOST is not set -# CONFIG_ARCH_NETWINDER is not set - -# -# SA11x0 Implementations -# -CONFIG_SA1100_ASSABET=y -# CONFIG_ASSABET_NEPONSET is not set -# CONFIG_SA1100_ADSBITSY is not set -# CONFIG_SA1100_BRUTUS is not set -# CONFIG_SA1100_CERF is not set -# CONFIG_SA1100_H3600 is not set -# CONFIG_SA1100_EXTENEX1 is not set -# CONFIG_SA1100_FLEXANET is not set -# CONFIG_SA1100_FREEBIRD is not set -# CONFIG_SA1100_GRAPHICSCLIENT is not set -# CONFIG_SA1100_GRAPHICSMASTER is not set -# CONFIG_SA1100_JORNADA720 is not set -# CONFIG_SA1100_HUW_WEBPANEL is not set -# CONFIG_SA1100_ITSY is not set -# CONFIG_SA1100_LART is not set -# CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_OMNIMETER is not set -# CONFIG_SA1100_PANGOLIN is not set -# CONFIG_SA1100_PLEB is not set -# CONFIG_SA1100_SHERMAN is not set -# CONFIG_SA1100_SIMPAD is not set -# CONFIG_SA1100_PFS168 is not set -# CONFIG_SA1100_VICTOR is not set -# CONFIG_SA1100_XP860 is not set -# CONFIG_SA1100_YOPY is not set -CONFIG_SA1100_USB=m -CONFIG_SA1100_USB_NETLINK=m -# CONFIG_SA1100_USB_CHAR is not set - -# -# CLPS711X/EP721X Implementations -# -# CONFIG_ARCH_CDB89712 is not set -# CONFIG_ARCH_CLEP7312 is not set -# CONFIG_ARCH_EDB7211 is not set -# CONFIG_ARCH_P720T is not set -# CONFIG_ARCH_EP7211 is not set -# CONFIG_ARCH_EP7212 is not set -# CONFIG_ARCH_ACORN is not set -# CONFIG_FOOTBRIDGE is not set -# CONFIG_FOOTBRIDGE_HOST is not set -# CONFIG_FOOTBRIDGE_ADDIN is not set -CONFIG_CPU_32=y -# CONFIG_CPU_26 is not set - -# -# Processor Type -# -# CONFIG_CPU_32v3 is not set -CONFIG_CPU_32v4=y -# CONFIG_CPU_ARM610 is not set -# CONFIG_CPU_ARM710 is not set -# CONFIG_CPU_ARM720T is not set -# CONFIG_CPU_ARM920T is not set -# CONFIG_CPU_ARM1020 is not set -# CONFIG_CPU_SA110 is not set -CONFIG_CPU_SA1100=y -# CONFIG_ARM_THUMB is not set -CONFIG_DISCONTIGMEM=y - -# -# General setup -# -# CONFIG_PCI is not set -CONFIG_ISA=y -# CONFIG_ISA_DMA is not set -CONFIG_CPU_FREQ=y -CONFIG_HOTPLUG=y - -# -# PCMCIA/CardBus support -# -CONFIG_PCMCIA=y -# CONFIG_I82365 is not set -# CONFIG_TCIC is not set -# CONFIG_PCMCIA_CLPS6700 is not set -CONFIG_PCMCIA_SA1100=y -CONFIG_NET=y -CONFIG_SYSVIPC=y -# CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_SYSCTL=y - -# -# At least one math emulation must be selected -# -CONFIG_FPE_NWFPE=y -# CONFIG_FPE_FASTFPE is not set -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -# CONFIG_BINFMT_AOUT is not set -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -CONFIG_PM=y -# CONFIG_ARTHUR is not set -CONFIG_CMDLINE="mem=32M console=ttySA0,38400n8 initrd=0xc0800000,3M root=/dev/ram" -CONFIG_LEDS=y -CONFIG_LEDS_TIMER=y -CONFIG_LEDS_CPU=y -CONFIG_ALIGNMENT_TRAP=y - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Memory Technology Devices (MTD) -# -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set -CONFIG_MTD_PARTITIONS=y -CONFIG_MTD_REDBOOT_PARTS=y -# CONFIG_MTD_BOOTLDR_PARTS is not set -# CONFIG_MTD_AFS_PARTS is not set - -# -# User Modules And Translation Layers -# -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -# CONFIG_NFTL is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=y -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_GEN_PROBE=y -CONFIG_MTD_CFI_ADV_OPTIONS=y -CONFIG_MTD_CFI_NOSWAP=y -# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set -# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set -CONFIG_MTD_CFI_GEOMETRY=y -# CONFIG_MTD_CFI_B1 is not set -# CONFIG_MTD_CFI_B2 is not set -CONFIG_MTD_CFI_B4=y -# CONFIG_MTD_CFI_I1 is not set -CONFIG_MTD_CFI_I2=y -# CONFIG_MTD_CFI_I4 is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_ABSENT is not set -# CONFIG_MTD_OBSOLETE_CHIPS is not set -# CONFIG_MTD_AMDSTD is not set -# CONFIG_MTD_SHARP is not set -# CONFIG_MTD_JEDEC is not set - -# -# Mapping drivers for chip access -# -# CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_NORA is not set -# CONFIG_MTD_ARM_INTEGRATOR is not set -# CONFIG_MTD_CDB89712 is not set -CONFIG_MTD_SA1100=y -# CONFIG_MTD_DC21285 is not set -# CONFIG_MTD_IQ80310 is not set -# CONFIG_MTD_PCI is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLKMTD is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC1000 is not set -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOCPROBE is not set - -# -# NAND Flash Device Drivers -# -# CONFIG_MTD_NAND is not set - -# -# Plug and Play configuration -# -# CONFIG_PNP is not set -# CONFIG_ISAPNP is not set -# CONFIG_PNPBIOS is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_XD is not set -# CONFIG_PARIDE is not set -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_CISS_SCSI_TAPE is not set -# CONFIG_BLK_DEV_DAC960 is not set -CONFIG_BLK_DEV_LOOP=m -# CONFIG_BLK_DEV_NBD is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=4096 -CONFIG_BLK_DEV_INITRD=y - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set -# CONFIG_BLK_DEV_MD is not set -# CONFIG_MD_LINEAR is not set -# CONFIG_MD_RAID0 is not set -# CONFIG_MD_RAID1 is not set -# CONFIG_MD_RAID5 is not set -# CONFIG_MD_MULTIPATH is not set -# CONFIG_BLK_DEV_LVM is not set - -# -# Networking options -# -# CONFIG_PACKET is not set -# CONFIG_NETLINK is not set -# CONFIG_NETFILTER is not set -# CONFIG_FILTER is not set -CONFIG_UNIX=y -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -# CONFIG_IP_PNP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_INET_ECN is not set -# CONFIG_SYN_COOKIES is not set -# CONFIG_IPV6 is not set -# CONFIG_KHTTPD is not set -# CONFIG_ATM is not set - -# -# -# -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_LLC is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set - -# -# Ethernet (10 or 100Mbit) -# -CONFIG_NET_ETHERNET=y -# CONFIG_ARM_AM79C961A is not set -# CONFIG_SUNLANCE is not set -# CONFIG_SUNBMAC is not set -# CONFIG_SUNQE is not set -# CONFIG_SUNLANCE is not set -# CONFIG_SUNGEM is not set -# CONFIG_NET_VENDOR_3COM is not set -# CONFIG_LANCE is not set -# CONFIG_NET_VENDOR_SMC is not set -# CONFIG_NET_VENDOR_RACAL is not set -# CONFIG_AT1700 is not set -# CONFIG_DEPCA is not set -# CONFIG_HP100 is not set -# CONFIG_NET_ISA is not set -# CONFIG_NET_PCI is not set -# CONFIG_NET_POCKET is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_ACENIC is not set -# CONFIG_DL2K is not set -# CONFIG_MYRI_SBUS is not set -# CONFIG_NS83820 is not set -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -# CONFIG_SK98LIN is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PLIP is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set - -# -# Token Ring devices -# -# CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# PCMCIA network device support -# -CONFIG_NET_PCMCIA=y -# CONFIG_PCMCIA_3C589 is not set -# CONFIG_PCMCIA_3C574 is not set -# CONFIG_PCMCIA_FMVJ18X is not set -CONFIG_PCMCIA_PCNET=y -# CONFIG_PCMCIA_NMCLAN is not set -# CONFIG_PCMCIA_SMC91C92 is not set -# CONFIG_PCMCIA_XIRC2PS is not set -# CONFIG_ARCNET_COM20020_CS is not set -# CONFIG_PCMCIA_IBMTR is not set -# CONFIG_NET_PCMCIA_RADIO is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -CONFIG_IRDA=m - -# -# IrDA protocols -# -CONFIG_IRLAN=m -# CONFIG_IRNET is not set -# CONFIG_IRCOMM is not set -# CONFIG_IRDA_ULTRA is not set -# CONFIG_IRDA_OPTIONS is not set - -# -# Infrared-port device drivers -# - -# -# SIR device drivers -# -# CONFIG_IRTTY_SIR is not set -# CONFIG_IRPORT_SIR is not set - -# -# Dongle support -# -# CONFIG_DONGLE is not set - -# -# FIR device drivers -# -# CONFIG_USB_IRDA is not set -# CONFIG_NSC_FIR is not set -# CONFIG_WINBOND_FIR is not set -# CONFIG_TOSHIBA_FIR is not set -# CONFIG_SMC_IRCC_FIR is not set -# CONFIG_ALI_FIR is not set -# CONFIG_VLSI_FIR is not set -CONFIG_SA1100_FIR=m - -# -# ATA/IDE/MFM/RLL support -# -CONFIG_IDE=y - -# -# IDE, ATA and ATAPI Block devices -# -CONFIG_BLK_DEV_IDE=y - -# -# Please see Documentation/ide.txt for help/info on IDE drives -# -# CONFIG_BLK_DEV_HD_IDE is not set -# CONFIG_BLK_DEV_HD is not set -CONFIG_BLK_DEV_IDEDISK=y -# CONFIG_IDEDISK_MULTI_MODE is not set -CONFIG_BLK_DEV_IDECS=y -# CONFIG_BLK_DEV_IDECD is not set -# CONFIG_BLK_DEV_IDETAPE is not set -# CONFIG_BLK_DEV_IDEFLOPPY is not set -# CONFIG_BLK_DEV_IDESCSI is not set - -# -# IDE chipset support/bugfixes -# -# CONFIG_BLK_DEV_CMD640 is not set -# CONFIG_BLK_DEV_CMD640_ENHANCED is not set -# CONFIG_BLK_DEV_ISAPNP is not set -# CONFIG_IDE_CHIPSETS is not set -# CONFIG_IDEDMA_AUTO is not set -# CONFIG_BLK_DEV_ATARAID is not set -# CONFIG_BLK_DEV_ATARAID_PDC is not set -# CONFIG_BLK_DEV_ATARAID_HPT is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# I2O device support -# -# CONFIG_I2O is not set -# CONFIG_I2O_BLOCK is not set -# CONFIG_I2O_LAN is not set -# CONFIG_I2O_SCSI is not set -# CONFIG_I2O_PROC is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Input core support -# -# CONFIG_INPUT is not set -# CONFIG_INPUT_KEYBDEV is not set -# CONFIG_INPUT_MOUSEDEV is not set -# CONFIG_INPUT_JOYDEV is not set -# CONFIG_INPUT_EVDEV is not set - -# -# Character devices -# -CONFIG_VT=y -# CONFIG_VT_CONSOLE is not set -# CONFIG_SERIAL is not set -# CONFIG_SERIAL_EXTENDED is not set -# CONFIG_SERIAL_NONSTANDARD is not set - -# -# Serial drivers -# -# CONFIG_SERIAL_ANAKIN is not set -# CONFIG_SERIAL_ANAKIN_CONSOLE is not set -# CONFIG_SERIAL_AMBA is not set -# CONFIG_SERIAL_AMBA_CONSOLE is not set -# CONFIG_SERIAL_CLPS711X is not set -# CONFIG_SERIAL_CLPS711X_CONSOLE is not set -# CONFIG_SERIAL_21285 is not set -# CONFIG_SERIAL_21285_OLD is not set -# CONFIG_SERIAL_21285_CONSOLE is not set -# CONFIG_SERIAL_UART00 is not set -# CONFIG_SERIAL_UART00_CONSOLE is not set -CONFIG_SERIAL_SA1100=y -CONFIG_SERIAL_SA1100_CONSOLE=y -CONFIG_SA1100_DEFAULT_BAUDRATE=38400 -CONFIG_SERIAL_8250=m -# CONFIG_SERIAL_8250_CONSOLE is not set -# CONFIG_SERIAL_8250_EXTENDED is not set -# CONFIG_SERIAL_8250_MANY_PORTS is not set -# CONFIG_SERIAL_8250_SHARE_IRQ is not set -# CONFIG_SERIAL_8250_DETECT_IRQ is not set -# CONFIG_SERIAL_8250_MULTIPORT is not set -# CONFIG_SERIAL_8250_HUB6 is not set -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=32 - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# L3 serial bus support -# -CONFIG_L3=y -CONFIG_L3_ALGOBIT=y -CONFIG_L3_BIT_SA1100_GPIO=y - -# -# Other L3 adapters -# -# CONFIG_L3_SA1111 is not set -CONFIG_BIT_SA1100_GPIO=y - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -# CONFIG_MOUSE is not set - -# -# Joysticks -# -# CONFIG_INPUT_GAMEPORT is not set - -# -# Input core support is needed for gameports -# - -# -# Input core support is needed for joysticks -# -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -# CONFIG_INTEL_RNG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -CONFIG_SA1100_RTC=y -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set - -# -# PCMCIA character devices -# -CONFIG_PCMCIA_SERIAL_CS=m -# CONFIG_MWAVE is not set - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set -# CONFIG_REISERFS_FS is not set -# CONFIG_REISERFS_CHECK is not set -# CONFIG_ADFS_FS is not set -# CONFIG_ADFS_FS_RW is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_CMS_FS is not set -# CONFIG_EXT3_FS is not set -# CONFIG_JBD is not set -# CONFIG_JBD_DEBUG is not set -CONFIG_FAT_FS=y -CONFIG_MSDOS_FS=y -# CONFIG_UMSDOS_FS is not set -# CONFIG_VFAT_FS is not set -# CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set -CONFIG_JFFS2_FS=y -CONFIG_JFFS2_FS_DEBUG=0 -# CONFIG_CRAMFS is not set -CONFIG_TMPFS=y -# CONFIG_RAMFS is not set -# CONFIG_ISO9660_FS is not set -# CONFIG_JOLIET is not set -# CONFIG_ZISOFS is not set -# CONFIG_MINIX_FS is not set -# CONFIG_FREEVXFS_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS_DEBUG is not set -# CONFIG_NTFS_RW is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -# CONFIG_DEVFS_MOUNT is not set -# CONFIG_DEVFS_DEBUG is not set -CONFIG_DEVPTS_FS=y -# CONFIG_QNX4FS_FS is not set -# CONFIG_QNX4FS_RW is not set -# CONFIG_ROMFS_FS is not set -CONFIG_EXT2_FS=y -# CONFIG_SYSV_FS is not set -# CONFIG_UDF_FS is not set -# CONFIG_UDF_RW is not set -# CONFIG_UFS_FS is not set -# CONFIG_UFS_FS_WRITE is not set - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -# CONFIG_INTERMEZZO_FS is not set -CONFIG_NFS_FS=y -# CONFIG_NFS_V3 is not set -# CONFIG_ROOT_NFS is not set -# CONFIG_NFSD is not set -# CONFIG_NFSD_V3 is not set -CONFIG_SUNRPC=y -CONFIG_LOCKD=y -# CONFIG_SMB_FS is not set -# CONFIG_NCP_FS is not set -# CONFIG_NCPFS_PACKET_SIGNING is not set -# CONFIG_NCPFS_IOCTL_LOCKING is not set -# CONFIG_NCPFS_STRONG is not set -# CONFIG_NCPFS_NFS_NS is not set -# CONFIG_NCPFS_OS2_NS is not set -# CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_NLS is not set -# CONFIG_NCPFS_EXTRAS is not set -# CONFIG_ZISOFS_FS is not set -# CONFIG_ZLIB_FS_INFLATE is not set - -# -# Partition Types -# -CONFIG_PARTITION_ADVANCED=y -# CONFIG_ACORN_PARTITION is not set -# CONFIG_OSF_PARTITION is not set -# CONFIG_AMIGA_PARTITION is not set -# CONFIG_ATARI_PARTITION is not set -# CONFIG_MAC_PARTITION is not set -CONFIG_MSDOS_PARTITION=y -# CONFIG_BSD_DISKLABEL is not set -# CONFIG_MINIX_SUBPARTITION is not set -# CONFIG_SOLARIS_X86_PARTITION is not set -# CONFIG_UNIXWARE_DISKLABEL is not set -# CONFIG_LDM_PARTITION is not set -# CONFIG_SGI_PARTITION is not set -# CONFIG_ULTRIX_PARTITION is not set -# CONFIG_SUN_PARTITION is not set -# CONFIG_SMB_NLS is not set -CONFIG_NLS=y - -# -# Native Language Support -# -CONFIG_NLS_DEFAULT="iso8859-1" -CONFIG_NLS_CODEPAGE_437=y -# CONFIG_NLS_CODEPAGE_737 is not set -# CONFIG_NLS_CODEPAGE_775 is not set -# CONFIG_NLS_CODEPAGE_850 is not set -# CONFIG_NLS_CODEPAGE_852 is not set -# CONFIG_NLS_CODEPAGE_855 is not set -# CONFIG_NLS_CODEPAGE_857 is not set -# CONFIG_NLS_CODEPAGE_860 is not set -# CONFIG_NLS_CODEPAGE_861 is not set -# CONFIG_NLS_CODEPAGE_862 is not set -# CONFIG_NLS_CODEPAGE_863 is not set -# CONFIG_NLS_CODEPAGE_864 is not set -# CONFIG_NLS_CODEPAGE_865 is not set -# CONFIG_NLS_CODEPAGE_866 is not set -# CONFIG_NLS_CODEPAGE_869 is not set -# CONFIG_NLS_CODEPAGE_936 is not set -# CONFIG_NLS_CODEPAGE_950 is not set -# CONFIG_NLS_CODEPAGE_932 is not set -# CONFIG_NLS_CODEPAGE_949 is not set -# CONFIG_NLS_CODEPAGE_874 is not set -# CONFIG_NLS_ISO8859_8 is not set -# CONFIG_NLS_CODEPAGE_1251 is not set -# CONFIG_NLS_ISO8859_1 is not set -# CONFIG_NLS_ISO8859_2 is not set -# CONFIG_NLS_ISO8859_3 is not set -# CONFIG_NLS_ISO8859_4 is not set -# CONFIG_NLS_ISO8859_5 is not set -# CONFIG_NLS_ISO8859_6 is not set -# CONFIG_NLS_ISO8859_7 is not set -# CONFIG_NLS_ISO8859_9 is not set -# CONFIG_NLS_ISO8859_13 is not set -# CONFIG_NLS_ISO8859_14 is not set -# CONFIG_NLS_ISO8859_15 is not set -# CONFIG_NLS_KOI8_R is not set -# CONFIG_NLS_KOI8_U is not set -# CONFIG_NLS_UTF8 is not set - -# -# Console drivers -# -CONFIG_PC_KEYMAP=y -# CONFIG_VGA_CONSOLE is not set - -# -# Frame-buffer support -# -CONFIG_FB=y -CONFIG_DUMMY_CONSOLE=y -# CONFIG_FB_ACORN is not set -# CONFIG_FB_ANAKIN is not set -# CONFIG_FB_CLPS711X is not set -CONFIG_FB_SA1100=y -# CONFIG_FB_CYBER2000 is not set -# CONFIG_FB_VIRTUAL is not set -# CONFIG_FBCON_ADVANCED is not set -CONFIG_FBCON_CFB2=y -CONFIG_FBCON_CFB4=y -CONFIG_FBCON_CFB8=y -CONFIG_FBCON_CFB16=y -CONFIG_FBCON_FONTWIDTH8_ONLY=y -CONFIG_FBCON_FONTS=y -CONFIG_FONT_8x8=y -# CONFIG_FONT_8x16 is not set -# CONFIG_FONT_SUN8x16 is not set -# CONFIG_FONT_PEARL_8x8 is not set -# CONFIG_FONT_ACORN_8x8 is not set - -# -# Sound -# -CONFIG_SOUND=y -# CONFIG_SOUND_BT878 is not set -# CONFIG_SOUND_CMPCI is not set -# CONFIG_SOUND_EMU10K1 is not set -# CONFIG_MIDI_EMU10K1 is not set -# CONFIG_SOUND_FUSION is not set -# CONFIG_SOUND_CS4281 is not set -# CONFIG_SOUND_ES1370 is not set -# CONFIG_SOUND_ES1371 is not set -# CONFIG_SOUND_ESSSOLO1 is not set -# CONFIG_SOUND_MAESTRO is not set -# CONFIG_SOUND_MAESTRO3 is not set -# CONFIG_SOUND_ICH is not set -# CONFIG_SOUND_RME96XX is not set -# CONFIG_SOUND_SONICVIBES is not set -# CONFIG_SOUND_TRIDENT is not set -# CONFIG_SOUND_MSNDCLAS is not set -# CONFIG_SOUND_MSNDPIN is not set -# CONFIG_SOUND_VIA82CXXX is not set -# CONFIG_MIDI_VIA82CXXX is not set -CONFIG_SOUND_SA1100=y -CONFIG_SOUND_UDA1341=y -CONFIG_SOUND_ASSABET_UDA1341=y -# CONFIG_SOUND_H3600_UDA1341 is not set -# CONFIG_SOUND_PANGOLIN_UDA1341 is not set -# CONFIG_SOUND_SA1111_UDA1341 is not set -# CONFIG_SOUND_SA1100SSP is not set -# CONFIG_SOUND_OSS is not set -# CONFIG_SOUND_WAVEARTIST is not set -# CONFIG_SOUND_TVMIXER is not set - -# -# Multimedia Capabilities Port drivers -# -CONFIG_MCP=y -CONFIG_MCP_SA1100=y -CONFIG_MCP_UCB1200=y -CONFIG_MCP_UCB1200_AUDIO=m -CONFIG_MCP_UCB1200_TS=y - -# -# Console Switches -# -CONFIG_SWITCHES=y -CONFIG_SWITCHES_SA1100=y -CONFIG_SWITCHES_UCB1X00=y - -# -# USB support -# -# CONFIG_USB is not set - -# -# USB Controllers -# -# CONFIG_USB_UHCI is not set -# CONFIG_USB_UHCI_ALT is not set -# CONFIG_USB_OHCI is not set -# CONFIG_USB_OHCI_SA1111 is not set - -# -# USB Device Class drivers -# -# CONFIG_USB_AUDIO is not set -# CONFIG_USB_BLUETOOTH is not set -# CONFIG_USB_STORAGE is not set -# CONFIG_USB_STORAGE_DEBUG is not set -# CONFIG_USB_STORAGE_DATAFAB is not set -# CONFIG_USB_STORAGE_FREECOM is not set -# CONFIG_USB_STORAGE_ISD200 is not set -# CONFIG_USB_STORAGE_DPCM is not set -# CONFIG_USB_STORAGE_HP8200e is not set -# CONFIG_USB_STORAGE_SDDR09 is not set -# CONFIG_USB_STORAGE_JUMPSHOT is not set -# CONFIG_USB_ACM is not set -# CONFIG_USB_PRINTER is not set - -# -# USB Human Interface Devices (HID) -# - -# -# Input core support is needed for USB HID -# - -# -# USB Imaging devices -# -# CONFIG_USB_DC2XX is not set -# CONFIG_USB_MDC800 is not set -# CONFIG_USB_SCANNER is not set -# CONFIG_USB_MICROTEK is not set -# CONFIG_USB_HPUSBSCSI is not set - -# -# USB Multimedia devices -# - -# -# Video4Linux support is needed for USB Multimedia device support -# - -# -# USB Network adaptors -# -# CONFIG_USB_PEGASUS is not set -# CONFIG_USB_KAWETH is not set -# CONFIG_USB_CATC is not set -# CONFIG_USB_CDCETHER is not set -# CONFIG_USB_USBNET is not set - -# -# USB port drivers -# -# CONFIG_USB_USS720 is not set - -# -# USB Serial Converter support -# -# CONFIG_USB_SERIAL is not set -# CONFIG_USB_SERIAL_GENERIC is not set -# CONFIG_USB_SERIAL_BELKIN is not set -# CONFIG_USB_SERIAL_WHITEHEAT is not set -# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set -# CONFIG_USB_SERIAL_EMPEG is not set -# CONFIG_USB_SERIAL_FTDI_SIO is not set -# CONFIG_USB_SERIAL_VISOR is not set -# CONFIG_USB_SERIAL_IR is not set -# CONFIG_USB_SERIAL_EDGEPORT is not set -# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set -# CONFIG_USB_SERIAL_KEYSPAN is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set -# CONFIG_USB_SERIAL_MCT_U232 is not set -# CONFIG_USB_SERIAL_PL2303 is not set -# CONFIG_USB_SERIAL_CYBERJACK is not set -# CONFIG_USB_SERIAL_XIRCOM is not set -# CONFIG_USB_SERIAL_OMNINET is not set - -# -# USB Miscellaneous drivers -# -# CONFIG_USB_RIO500 is not set -# CONFIG_USB_ID75 is not set - -# -# Bluetooth support -# -# CONFIG_BT is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_ERRORS=y -CONFIG_DEBUG_USER=y -# CONFIG_DEBUG_INFO is not set -# CONFIG_DEBUG_SLAB is not set -CONFIG_MAGIC_SYSRQ=y -# CONFIG_DEBUG_SPINLOCK is not set -# CONFIG_NO_PGT_CACHE is not set -# CONFIG_DEBUG_LL is not set -# CONFIG_DEBUG_DC21285_PORT is not set -# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -prauN linux-2.6.0-test5/arch/arm/def-configs/badge4 wli-2.6.0-test5-bk12-25/arch/arm/def-configs/badge4 --- linux-2.6.0-test5/arch/arm/def-configs/badge4 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/badge4 1969-12-31 16:00:00.000000000 -0800 @@ -1,1162 +0,0 @@ -# -# Automatically generated make config: don't edit -# -CONFIG_ARM=y -# CONFIG_EISA is not set -# CONFIG_SBUS is not set -# CONFIG_MCA is not set -CONFIG_UID16=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y -# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set -# CONFIG_GENERIC_BUST_SPINLOCK is not set -# CONFIG_GENERIC_ISA_DMA is not set - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y - -# -# General setup -# -CONFIG_NET=y -# CONFIG_SYSVIPC is not set -# CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_SYSCTL=y - -# -# Loadable module support -# -CONFIG_MODULES=y -CONFIG_MODVERSIONS=y -CONFIG_KMOD=y - -# -# System Type -# -# CONFIG_ARCH_ADIFCC is not set -# CONFIG_ARCH_ANAKIN is not set -# CONFIG_ARCH_ARCA5K is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_CAMELOT is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_IOP310 is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_RPC is not set -CONFIG_ARCH_SA1100=y -# CONFIG_ARCH_SHARK is not set - -# -# Archimedes/A5000 Implementations -# - -# -# Archimedes/A5000 Implementations (select only ONE) -# -# CONFIG_ARCH_ARC is not set -# CONFIG_ARCH_A5K is not set - -# -# Footbridge Implementations -# -# CONFIG_ARCH_CATS is not set -# CONFIG_ARCH_PERSONAL_SERVER is not set -# CONFIG_ARCH_EBSA285_ADDIN is not set -# CONFIG_ARCH_EBSA285_HOST is not set -# CONFIG_ARCH_NETWINDER is not set - -# -# SA11x0 Implementations -# -# CONFIG_SA1100_ASSABET is not set -# CONFIG_ASSABET_NEPONSET is not set -# CONFIG_SA1100_ADSBITSY is not set -# CONFIG_SA1100_BRUTUS is not set -# CONFIG_SA1100_CERF is not set -# CONFIG_SA1100_H3100 is not set -# CONFIG_SA1100_H3600 is not set -# CONFIG_SA1100_H3800 is not set -# CONFIG_SA1100_H3XXX is not set -# CONFIG_SA1100_EXTENEX1 is not set -# CONFIG_SA1100_FLEXANET is not set -# CONFIG_SA1100_FREEBIRD is not set -# CONFIG_SA1100_GRAPHICSCLIENT is not set -# CONFIG_SA1100_GRAPHICSMASTER is not set -CONFIG_SA1100_BADGE4=y -# CONFIG_SA1100_JORNADA720 is not set -# CONFIG_SA1100_HUW_WEBPANEL is not set -# CONFIG_SA1100_ITSY is not set -# CONFIG_SA1100_LART is not set -# CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_OMNIMETER is not set -# CONFIG_SA1100_PANGOLIN is not set -# CONFIG_SA1100_PLEB is not set -# CONFIG_SA1100_PT_SYSTEM3 is not set -# CONFIG_SA1100_SHANNON is not set -# CONFIG_SA1100_SHERMAN is not set -# CONFIG_SA1100_SIMPAD is not set -# CONFIG_SA1100_PFS168 is not set -# CONFIG_SA1100_VICTOR is not set -# CONFIG_SA1100_XP860 is not set -# CONFIG_SA1100_YOPY is not set -# CONFIG_SA1100_STORK is not set -CONFIG_SA1111=y -CONFIG_FORCE_MAX_ZONEORDER=9 -# CONFIG_SA1100_USB is not set -# CONFIG_SA1100_USB_NETLINK is not set -# CONFIG_SA1100_USB_CHAR is not set -# CONFIG_H3600_SLEEVE is not set - -# -# CLPS711X/EP721X Implementations -# -# CONFIG_ARCH_AUTCPU12 is not set -# CONFIG_ARCH_CDB89712 is not set -# CONFIG_ARCH_CLEP7312 is not set -# CONFIG_ARCH_EDB7211 is not set -# CONFIG_ARCH_P720T is not set -# CONFIG_ARCH_FORTUNET is not set -# CONFIG_ARCH_EP7211 is not set -# CONFIG_ARCH_EP7212 is not set -# CONFIG_ARCH_ACORN is not set -# CONFIG_FOOTBRIDGE is not set -# CONFIG_FOOTBRIDGE_HOST is not set -# CONFIG_FOOTBRIDGE_ADDIN is not set -CONFIG_CPU_32=y -# CONFIG_CPU_26 is not set - -# -# Processor Type -# -# CONFIG_CPU_32v3 is not set -CONFIG_CPU_32v4=y -# CONFIG_CPU_ARM610 is not set -# CONFIG_CPU_ARM710 is not set -# CONFIG_CPU_ARM720T is not set -# CONFIG_CPU_ARM920T is not set -# CONFIG_CPU_ARM922T is not set -# CONFIG_CPU_ARM926T is not set -# CONFIG_CPU_ARM1020 is not set -# CONFIG_CPU_SA110 is not set -CONFIG_CPU_SA1100=y -# CONFIG_XSCALE_PMU is not set -# CONFIG_ARM_THUMB is not set -CONFIG_DISCONTIGMEM=y - -# -# General setup -# -# CONFIG_PCI is not set -CONFIG_ISA=y -# CONFIG_ISA_DMA is not set -# CONFIG_FIQ is not set -CONFIG_CPU_FREQ=y -CONFIG_HOTPLUG=y - -# -# PCMCIA/CardBus support -# -CONFIG_PCMCIA=y -CONFIG_PCMCIA_PROBE=y -# CONFIG_I82092 is not set -# CONFIG_I82365 is not set -# CONFIG_TCIC is not set -# CONFIG_PCMCIA_CLPS6700 is not set -CONFIG_PCMCIA_SA1100=y - -# -# At least one math emulation must be selected -# -CONFIG_FPE_NWFPE=y -CONFIG_FPE_FASTFPE=m -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -CONFIG_BINFMT_AOUT=m -CONFIG_BINFMT_ELF=y -CONFIG_BINFMT_MISC=m -# CONFIG_PM is not set -# CONFIG_PREEMPT is not set -# CONFIG_APM is not set -CONFIG_ARTHUR=m -CONFIG_CMDLINE="init=/linuxrc root=/dev/mtdblock3" -# CONFIG_LEDS is not set -CONFIG_ALIGNMENT_TRAP=y - -# -# Parallel port support -# -CONFIG_PARPORT=m -# CONFIG_PARPORT_PC is not set -# CONFIG_PARPORT_ARC is not set -# CONFIG_PARPORT_AMIGA is not set -# CONFIG_PARPORT_MFC3 is not set -# CONFIG_PARPORT_ATARI is not set -# CONFIG_PARPORT_GSC is not set -# CONFIG_PARPORT_SUNBPP is not set -# CONFIG_PARPORT_OTHER is not set -# CONFIG_PARPORT_1284 is not set - -# -# Memory Technology Devices (MTD) -# -CONFIG_MTD=y -CONFIG_MTD_DEBUG=y -CONFIG_MTD_DEBUG_VERBOSE=0 -CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_REDBOOT_PARTS is not set -# CONFIG_MTD_BOOTLDR_PARTS is not set -# CONFIG_MTD_AFS_PARTS is not set - -# -# User Modules And Translation Layers -# -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -# CONFIG_NFTL is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=y -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_GEN_PROBE=y -CONFIG_MTD_CFI_ADV_OPTIONS=y -CONFIG_MTD_CFI_NOSWAP=y -# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set -# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set -CONFIG_MTD_CFI_GEOMETRY=y -# CONFIG_MTD_CFI_B1 is not set -CONFIG_MTD_CFI_B2=y -# CONFIG_MTD_CFI_B4 is not set -CONFIG_MTD_CFI_I1=y -# CONFIG_MTD_CFI_I2 is not set -# CONFIG_MTD_CFI_I4 is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -CONFIG_MTD_RAM=y -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_ABSENT is not set -# CONFIG_MTD_OBSOLETE_CHIPS is not set -# CONFIG_MTD_AMDSTD is not set -# CONFIG_MTD_SHARP is not set -# CONFIG_MTD_JEDEC is not set - -# -# Mapping drivers for chip access -# -# CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_NORA is not set -# CONFIG_MTD_ARM_INTEGRATOR is not set -# CONFIG_MTD_CDB89712 is not set -CONFIG_MTD_SA1100=y -# CONFIG_MTD_2PARTS_IPAQ is not set -# CONFIG_MTD_DC21285 is not set -# CONFIG_MTD_IQ80310 is not set -# CONFIG_MTD_EPXA10DB is not set -# CONFIG_MTD_PCI is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLKMTD is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC1000 is not set -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOCPROBE is not set - -# -# NAND Flash Device Drivers -# -# CONFIG_MTD_NAND is not set - -# -# Plug and Play configuration -# -# CONFIG_PNP is not set -# CONFIG_ISAPNP is not set -# CONFIG_PNPBIOS is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_XD is not set -# CONFIG_PARIDE is not set -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_CISS_SCSI_TAPE is not set -# CONFIG_BLK_DEV_DAC960 is not set -CONFIG_BLK_DEV_LOOP=y -CONFIG_BLK_DEV_NBD=m -# CONFIG_BLK_DEV_RAM is not set -# CONFIG_BLK_DEV_INITRD is not set - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set -# CONFIG_BLK_DEV_MD is not set -# CONFIG_MD_LINEAR is not set -# CONFIG_MD_RAID0 is not set -# CONFIG_MD_RAID1 is not set -# CONFIG_MD_RAID5 is not set -# CONFIG_MD_MULTIPATH is not set -# CONFIG_BLK_DEV_LVM is not set - -# -# Networking options -# -CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set -# CONFIG_NETLINK_DEV is not set -# CONFIG_NETFILTER is not set -# CONFIG_FILTER is not set -CONFIG_UNIX=y -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -# CONFIG_IP_PNP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_ARPD is not set -# CONFIG_INET_ECN is not set -# CONFIG_SYN_COOKIES is not set -# CONFIG_IPV6 is not set -# CONFIG_KHTTPD is not set -# CONFIG_ATM is not set -# CONFIG_VLAN_8021Q is not set - -# -# -# -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_LLC is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set -# CONFIG_ETHERTAP is not set - -# -# Ethernet (10 or 100Mbit) -# -# CONFIG_NET_ETHERNET is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_ACENIC is not set -# CONFIG_DL2K is not set -# CONFIG_MYRI_SBUS is not set -# CONFIG_NS83820 is not set -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -# CONFIG_SK98LIN is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PLIP is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -CONFIG_NET_RADIO=y -# CONFIG_STRIP is not set -# CONFIG_ARLAN is not set -# CONFIG_AIRONET4500 is not set -# CONFIG_AIRONET4500_NONCS is not set -# CONFIG_AIRONET4500_PROC is not set - -# -# Wireless ISA/PCI cards support -# -# CONFIG_WAVELAN is not set -# CONFIG_AIRO is not set -CONFIG_HERMES=y - -# -# Wireless Pcmcia/Cardbus cards support -# -CONFIG_PCMCIA_NETWAVE=m -CONFIG_PCMCIA_WAVELAN=m -CONFIG_PCMCIA_HERMES=y -CONFIG_AIRO_CS=m -CONFIG_NET_WIRELESS=y - -# -# Token Ring devices -# -# CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# PCMCIA network device support -# -CONFIG_NET_PCMCIA=y -CONFIG_PCMCIA_3C589=y -CONFIG_PCMCIA_3C574=m -CONFIG_PCMCIA_FMVJ18X=m -CONFIG_PCMCIA_PCNET=y -CONFIG_PCMCIA_NMCLAN=m -CONFIG_PCMCIA_SMC91C92=m -CONFIG_PCMCIA_XIRC2PS=m -CONFIG_PCMCIA_AXNET=m -# CONFIG_ARCNET_COM20020_CS is not set -# CONFIG_PCMCIA_IBMTR is not set -CONFIG_NET_PCMCIA_RADIO=y -CONFIG_PCMCIA_RAYCS=m -# CONFIG_AIRONET4500_CS is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -CONFIG_IRDA=y - -# -# IrDA protocols -# -CONFIG_IRLAN=y -# CONFIG_IRNET is not set -CONFIG_IRCOMM=y -CONFIG_IRDA_ULTRA=y - -# -# IrDA options -# -# CONFIG_IRDA_CACHE_LAST_LSAP is not set -# CONFIG_IRDA_FAST_RR is not set -# CONFIG_IRDA_DEBUG is not set - -# -# Infrared-port device drivers -# - -# -# SIR device drivers -# -# CONFIG_IRTTY_SIR is not set -# CONFIG_IRPORT_SIR is not set - -# -# Dongle support -# -# CONFIG_DONGLE is not set - -# -# FIR device drivers -# -# CONFIG_USB_IRDA is not set -# CONFIG_NSC_FIR is not set -# CONFIG_WINBOND_FIR is not set -# CONFIG_TOSHIBA_FIR is not set -# CONFIG_SMC_IRCC_FIR is not set -# CONFIG_ALI_FIR is not set -# CONFIG_VLSI_FIR is not set -CONFIG_SA1100_FIR=y - -# -# ATA/IDE/MFM/RLL support -# -CONFIG_IDE=m - -# -# IDE, ATA and ATAPI Block devices -# -CONFIG_BLK_DEV_IDE=m - -# -# Please see Documentation/ide.txt for help/info on IDE drives -# -# CONFIG_BLK_DEV_HD_IDE is not set -# CONFIG_BLK_DEV_HD is not set -CONFIG_BLK_DEV_IDEDISK=m -# CONFIG_IDEDISK_MULTI_MODE is not set -# CONFIG_IDEDISK_STROKE is not set -# CONFIG_BLK_DEV_IDECS is not set -CONFIG_BLK_DEV_IDECD=m -# CONFIG_BLK_DEV_IDETAPE is not set -CONFIG_BLK_DEV_IDEFLOPPY=m -CONFIG_BLK_DEV_IDESCSI=m - -# -# IDE chipset support/bugfixes -# -# CONFIG_BLK_DEV_CMD640 is not set -# CONFIG_BLK_DEV_CMD640_ENHANCED is not set -# CONFIG_BLK_DEV_ISAPNP is not set -# CONFIG_IDE_CHIPSETS is not set -# CONFIG_IDEDMA_AUTO is not set -# CONFIG_BLK_DEV_ATARAID is not set -# CONFIG_BLK_DEV_ATARAID_PDC is not set -# CONFIG_BLK_DEV_ATARAID_HPT is not set - -# -# SCSI support -# -CONFIG_SCSI=y - -# -# SCSI support type (disk, tape, CD-ROM) -# -CONFIG_BLK_DEV_SD=y -CONFIG_SD_EXTRA_DEVS=40 -CONFIG_CHR_DEV_ST=m -# CONFIG_CHR_DEV_OSST is not set -CONFIG_BLK_DEV_SR=m -# CONFIG_BLK_DEV_SR_VENDOR is not set -CONFIG_SR_EXTRA_DEVS=2 -CONFIG_CHR_DEV_SG=y - -# -# Some SCSI devices (e.g. CD jukebox) support multiple LUNs -# -# CONFIG_SCSI_MULTI_LUN is not set -# CONFIG_SCSI_CONSTANTS is not set -# CONFIG_SCSI_LOGGING is not set - -# -# SCSI low-level drivers -# -# CONFIG_SCSI_7000FASST is not set -# CONFIG_SCSI_ACARD is not set -# CONFIG_SCSI_AHA152X is not set -# CONFIG_SCSI_AHA1542 is not set -# CONFIG_SCSI_AHA1740 is not set -# CONFIG_SCSI_AIC7XXX is not set -# CONFIG_SCSI_AIC7XXX_OLD is not set -# CONFIG_SCSI_DPT_I2O is not set -# CONFIG_SCSI_ADVANSYS is not set -# CONFIG_SCSI_IN2000 is not set -# CONFIG_SCSI_AM53C974 is not set -# CONFIG_SCSI_MEGARAID is not set -# CONFIG_SCSI_BUSLOGIC is not set -# CONFIG_SCSI_DMX3191D is not set -# CONFIG_SCSI_DTC3280 is not set -# CONFIG_SCSI_EATA is not set -# CONFIG_SCSI_EATA_DMA is not set -# CONFIG_SCSI_EATA_PIO is not set -# CONFIG_SCSI_FUTURE_DOMAIN is not set -# CONFIG_SCSI_GDTH is not set -# CONFIG_SCSI_GENERIC_NCR5380 is not set -# CONFIG_SCSI_INITIO is not set -# CONFIG_SCSI_INIA100 is not set -# CONFIG_SCSI_PPA is not set -# CONFIG_SCSI_IMM is not set -# CONFIG_SCSI_NCR53C406A is not set -# CONFIG_SCSI_NCR53C7xx is not set -# CONFIG_SCSI_PAS16 is not set -# CONFIG_SCSI_PCI2000 is not set -# CONFIG_SCSI_PCI2220I is not set -# CONFIG_SCSI_PSI240I is not set -# CONFIG_SCSI_QLOGIC_FAS is not set -# CONFIG_SCSI_SIM710 is not set -# CONFIG_SCSI_SYM53C416 is not set -# CONFIG_SCSI_T128 is not set -# CONFIG_SCSI_U14_34F is not set -# CONFIG_SCSI_DEBUG is not set - -# -# PCMCIA SCSI adapter support -# -# CONFIG_SCSI_PCMCIA is not set - -# -# I2O device support -# -# CONFIG_I2O is not set -# CONFIG_I2O_BLOCK is not set -# CONFIG_I2O_LAN is not set -# CONFIG_I2O_SCSI is not set -# CONFIG_I2O_PROC is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Input device support -# -# CONFIG_INPUT is not set -# CONFIG_INPUT_KEYBDEV is not set -# CONFIG_INPUT_MOUSEDEV is not set -# CONFIG_INPUT_JOYDEV is not set -# CONFIG_INPUT_EVDEV is not set -# CONFIG_GAMEPORT is not set -CONFIG_SOUND_GAMEPORT=y -# CONFIG_GAMEPORT_NS558 is not set -# CONFIG_GAMEPORT_L4 is not set -# CONFIG_INPUT_EMU10K1 is not set -# CONFIG_GAMEPORT_PCIGAME is not set -# CONFIG_GAMEPORT_FM801 is not set -# CONFIG_GAMEPORT_CS461x is not set -# CONFIG_SERIO is not set -# CONFIG_SERIO_SERPORT is not set - -# -# Character devices -# -# CONFIG_VT is not set -# CONFIG_SERIAL is not set -# CONFIG_SERIAL_EXTENDED is not set -# CONFIG_SERIAL_NONSTANDARD is not set - -# -# Serial drivers -# -# CONFIG_SERIAL_ANAKIN is not set -# CONFIG_SERIAL_ANAKIN_CONSOLE is not set -# CONFIG_SERIAL_AMBA is not set -# CONFIG_SERIAL_AMBA_CONSOLE is not set -# CONFIG_SERIAL_CLPS711X is not set -# CONFIG_SERIAL_CLPS711X_CONSOLE is not set -# CONFIG_SERIAL_21285 is not set -# CONFIG_SERIAL_21285_OLD is not set -# CONFIG_SERIAL_21285_CONSOLE is not set -# CONFIG_SERIAL_UART00 is not set -# CONFIG_SERIAL_UART00_CONSOLE is not set -CONFIG_SERIAL_SA1100=y -CONFIG_SERIAL_SA1100_CONSOLE=y -CONFIG_SA1100_DEFAULT_BAUDRATE=115200 -# CONFIG_SERIAL_8250 is not set -# CONFIG_SERIAL_8250_CONSOLE is not set -# CONFIG_ATOMWIDE_SERIAL is not set -# CONFIG_DUALSP_SERIAL is not set -# CONFIG_SERIAL_8250_EXTENDED is not set -# CONFIG_SERIAL_8250_MANY_PORTS is not set -# CONFIG_SERIAL_8250_SHARE_IRQ is not set -# CONFIG_SERIAL_8250_DETECT_IRQ is not set -# CONFIG_SERIAL_8250_MULTIPORT is not set -# CONFIG_SERIAL_8250_RSA is not set -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=256 -# CONFIG_PRINTER is not set -# CONFIG_PPDEV is not set - -# -# I2C support -# -CONFIG_I2C=m -CONFIG_I2C_ALGOBIT=m -# CONFIG_I2C_PHILIPSPAR is not set -CONFIG_I2C_ELV=m -CONFIG_I2C_VELLEMAN=m -# CONFIG_I2C_BIT_SA1100_GPIO is not set -CONFIG_I2C_ALGOPCF=m -CONFIG_I2C_ELEKTOR=m -CONFIG_I2C_CHARDEV=m -CONFIG_I2C_PROC=m - -# -# L3 serial bus support -# -CONFIG_L3=y -# CONFIG_L3_ALGOBIT is not set -# CONFIG_L3_BIT_SA1100_GPIO is not set - -# -# Other L3 adapters -# -CONFIG_L3_SA1111=y -# CONFIG_BIT_SA1100_GPIO is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -# CONFIG_MOUSE is not set -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -CONFIG_WATCHDOG=y -# CONFIG_WATCHDOG_NOWAYOUT is not set -CONFIG_SOFT_WATCHDOG=m -# CONFIG_WDT is not set -# CONFIG_WDTPCI is not set -# CONFIG_PCWATCHDOG is not set -# CONFIG_ACQUIRE_WDT is not set -# CONFIG_ADVANTECH_WDT is not set -# CONFIG_21285_WATCHDOG is not set -# CONFIG_977_WATCHDOG is not set -CONFIG_SA1100_WATCHDOG=m -# CONFIG_EUROTECH_WDT is not set -# CONFIG_IB700_WDT is not set -# CONFIG_I810_TCO is not set -# CONFIG_MIXCOMWD is not set -# CONFIG_60XX_WDT is not set -# CONFIG_W83877F_WDT is not set -# CONFIG_MACHZ_WDT is not set -# CONFIG_INTEL_RNG is not set -# CONFIG_NVRAM is not set -CONFIG_RTC=m -CONFIG_SA1100_RTC=m -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set - -# -# PCMCIA character devices -# - -# -# Multimedia devices -# -CONFIG_VIDEO_DEV=y - -# -# Video For Linux -# -CONFIG_VIDEO_PROC_FS=y -# CONFIG_I2C_PARPORT is not set - -# -# Video Adapters -# -# CONFIG_VIDEO_BT848 is not set -# CONFIG_VIDEO_PMS is not set -# CONFIG_VIDEO_BWQCAM is not set -# CONFIG_VIDEO_CQCAM is not set -# CONFIG_VIDEO_CPIA is not set -# CONFIG_VIDEO_SAA5249 is not set -# CONFIG_TUNER_3036 is not set -# CONFIG_VIDEO_STRADIS is not set -# CONFIG_VIDEO_ZORAN is not set -# CONFIG_VIDEO_ZORAN_BUZ is not set -# CONFIG_VIDEO_ZORAN_DC10 is not set -# CONFIG_VIDEO_ZORAN_LML33 is not set -# CONFIG_VIDEO_ZR36120 is not set -# CONFIG_VIDEO_MEYE is not set -# CONFIG_VIDEO_CYBERPRO is not set - -# -# Radio Adapters -# -# CONFIG_RADIO_CADET is not set -# CONFIG_RADIO_RTRACK is not set -# CONFIG_RADIO_RTRACK2 is not set -# CONFIG_RADIO_AZTECH is not set -# CONFIG_RADIO_GEMTEK is not set -# CONFIG_RADIO_GEMTEK_PCI is not set -# CONFIG_RADIO_MAXIRADIO is not set -# CONFIG_RADIO_MAESTRO is not set -# CONFIG_RADIO_MIROPCM20 is not set -# CONFIG_RADIO_MIROPCM20_RDS is not set -# CONFIG_RADIO_SF16FMI is not set -# CONFIG_RADIO_TERRATEC is not set -# CONFIG_RADIO_TRUST is not set -# CONFIG_RADIO_TYPHOON is not set -# CONFIG_RADIO_ZOLTRIX is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set -# CONFIG_REISERFS_FS is not set -# CONFIG_REISERFS_CHECK is not set -# CONFIG_REISERFS_PROC_INFO is not set -# CONFIG_ADFS_FS is not set -# CONFIG_ADFS_FS_RW is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BFS_FS is not set -CONFIG_EXT3_FS=m -CONFIG_JBD=m -# CONFIG_JBD_DEBUG is not set -CONFIG_FAT_FS=y -CONFIG_MSDOS_FS=y -# CONFIG_UMSDOS_FS is not set -CONFIG_VFAT_FS=m -# CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set -CONFIG_JFFS2_FS=y -CONFIG_JFFS2_FS_DEBUG=0 -CONFIG_CRAMFS=m -CONFIG_TMPFS=y -CONFIG_RAMFS=y -# CONFIG_ISO9660_FS is not set -# CONFIG_JOLIET is not set -# CONFIG_ZISOFS is not set -CONFIG_MINIX_FS=m -# CONFIG_VXFS_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS_DEBUG is not set -# CONFIG_NTFS_RW is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -CONFIG_DEVFS_FS=y -CONFIG_DEVFS_MOUNT=y -# CONFIG_DEVFS_DEBUG is not set -# CONFIG_DEVPTS_FS is not set -# CONFIG_QNX4FS_FS is not set -# CONFIG_QNX4FS_RW is not set -# CONFIG_ROMFS_FS is not set -CONFIG_EXT2_FS=m -# CONFIG_SYSV_FS is not set -# CONFIG_UDF_FS is not set -# CONFIG_UDF_RW is not set -# CONFIG_UFS_FS is not set -# CONFIG_UFS_FS_WRITE is not set - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -# CONFIG_INTERMEZZO_FS is not set -CONFIG_NFS_FS=m -CONFIG_NFS_V3=y -# CONFIG_ROOT_NFS is not set -# CONFIG_NFSD is not set -# CONFIG_NFSD_V3 is not set -CONFIG_SUNRPC=m -CONFIG_LOCKD=m -CONFIG_LOCKD_V4=y -CONFIG_SMB_FS=m -# CONFIG_SMB_NLS_DEFAULT is not set -# CONFIG_NCP_FS is not set -# CONFIG_NCPFS_PACKET_SIGNING is not set -# CONFIG_NCPFS_IOCTL_LOCKING is not set -# CONFIG_NCPFS_STRONG is not set -# CONFIG_NCPFS_NFS_NS is not set -# CONFIG_NCPFS_OS2_NS is not set -# CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_NLS is not set -# CONFIG_NCPFS_EXTRAS is not set -# CONFIG_ZISOFS_FS is not set - -# -# Partition Types -# -CONFIG_PARTITION_ADVANCED=y -# CONFIG_ACORN_PARTITION is not set -# CONFIG_OSF_PARTITION is not set -# CONFIG_AMIGA_PARTITION is not set -# CONFIG_ATARI_PARTITION is not set -# CONFIG_MAC_PARTITION is not set -CONFIG_MSDOS_PARTITION=y -# CONFIG_BSD_DISKLABEL is not set -# CONFIG_MINIX_SUBPARTITION is not set -# CONFIG_SOLARIS_X86_PARTITION is not set -# CONFIG_UNIXWARE_DISKLABEL is not set -# CONFIG_LDM_PARTITION is not set -# CONFIG_SGI_PARTITION is not set -# CONFIG_ULTRIX_PARTITION is not set -# CONFIG_SUN_PARTITION is not set -CONFIG_SMB_NLS=y -CONFIG_NLS=y - -# -# Native Language Support -# -CONFIG_NLS_DEFAULT="iso8859-1" -# CONFIG_NLS_CODEPAGE_437 is not set -# CONFIG_NLS_CODEPAGE_737 is not set -# CONFIG_NLS_CODEPAGE_775 is not set -# CONFIG_NLS_CODEPAGE_850 is not set -# CONFIG_NLS_CODEPAGE_852 is not set -# CONFIG_NLS_CODEPAGE_855 is not set -# CONFIG_NLS_CODEPAGE_857 is not set -# CONFIG_NLS_CODEPAGE_860 is not set -# CONFIG_NLS_CODEPAGE_861 is not set -# CONFIG_NLS_CODEPAGE_862 is not set -# CONFIG_NLS_CODEPAGE_863 is not set -# CONFIG_NLS_CODEPAGE_864 is not set -# CONFIG_NLS_CODEPAGE_865 is not set -# CONFIG_NLS_CODEPAGE_866 is not set -# CONFIG_NLS_CODEPAGE_869 is not set -# CONFIG_NLS_CODEPAGE_936 is not set -# CONFIG_NLS_CODEPAGE_950 is not set -# CONFIG_NLS_CODEPAGE_932 is not set -# CONFIG_NLS_CODEPAGE_949 is not set -# CONFIG_NLS_CODEPAGE_874 is not set -# CONFIG_NLS_ISO8859_8 is not set -# CONFIG_NLS_CODEPAGE_1251 is not set -# CONFIG_NLS_ISO8859_1 is not set -# CONFIG_NLS_ISO8859_2 is not set -# CONFIG_NLS_ISO8859_3 is not set -# CONFIG_NLS_ISO8859_4 is not set -# CONFIG_NLS_ISO8859_5 is not set -# CONFIG_NLS_ISO8859_6 is not set -# CONFIG_NLS_ISO8859_7 is not set -# CONFIG_NLS_ISO8859_9 is not set -# CONFIG_NLS_ISO8859_13 is not set -# CONFIG_NLS_ISO8859_14 is not set -# CONFIG_NLS_ISO8859_15 is not set -# CONFIG_NLS_KOI8_R is not set -# CONFIG_NLS_KOI8_U is not set -# CONFIG_NLS_UTF8 is not set - -# -# Sound -# -CONFIG_SOUND=y - -# -# Open Sound System -# -CONFIG_SOUND_PRIME=y -# CONFIG_SOUND_BT878 is not set -# CONFIG_SOUND_CMPCI is not set -# CONFIG_SOUND_EMU10K1 is not set -# CONFIG_MIDI_EMU10K1 is not set -# CONFIG_SOUND_FUSION is not set -# CONFIG_SOUND_CS4281 is not set -# CONFIG_SOUND_ES1370 is not set -# CONFIG_SOUND_ES1371 is not set -# CONFIG_SOUND_ESSSOLO1 is not set -# CONFIG_SOUND_MAESTRO is not set -# CONFIG_SOUND_MAESTRO3 is not set -# CONFIG_SOUND_ICH is not set -# CONFIG_SOUND_RME96XX is not set -# CONFIG_SOUND_SONICVIBES is not set -# CONFIG_SOUND_TRIDENT is not set -# CONFIG_SOUND_MSNDCLAS is not set -# CONFIG_SOUND_MSNDPIN is not set -# CONFIG_SOUND_VIA82CXXX is not set -# CONFIG_MIDI_VIA82CXXX is not set -CONFIG_SOUND_SA1100=y -CONFIG_SOUND_UDA1341=y -# CONFIG_SOUND_ASSABET_UDA1341 is not set -# CONFIG_SOUND_H3600_UDA1341 is not set -# CONFIG_SOUND_PANGOLIN_UDA1341 is not set -CONFIG_SOUND_SA1111_UDA1341=y -# CONFIG_SOUND_STORK_UDA1341 is not set -# CONFIG_SOUND_SA1100SSP is not set -# CONFIG_SOUND_STORK_AC97 is not set -# CONFIG_SOUND_OSS is not set -# CONFIG_SOUND_WAVEARTIST is not set -# CONFIG_SOUND_TVMIXER is not set - -# -# Advanced Linux Sound Architecture -# -# CONFIG_SND is not set - -# -# Multimedia Capabilities Port drivers -# -CONFIG_MCP=y -CONFIG_MCP_SA1100=y -# CONFIG_MCP_UCB1200 is not set -# CONFIG_MCP_UCB1200_AUDIO is not set -# CONFIG_MCP_UCB1200_TS is not set - -# -# USB support -# -CONFIG_USB=y -CONFIG_USB_DEBUG=y - -# -# Miscellaneous USB options -# -CONFIG_USB_DEVICEFS=y -# CONFIG_USB_BANDWIDTH is not set -# CONFIG_USB_LONG_TIMEOUT is not set - -# -# USB Host Controller Drivers -# -# CONFIG_USB_EHCI_HCD is not set -# CONFIG_USB_OHCI_HCD is not set -# CONFIG_USB_UHCI is not set -# CONFIG_USB_UHCI_ALT is not set -# CONFIG_USB_OHCI is not set -CONFIG_USB_OHCI_SA1111=y - -# -# USB Device Class drivers -# -CONFIG_USB_AUDIO=y -CONFIG_USB_BLUETOOTH=m -CONFIG_USB_STORAGE=y -CONFIG_USB_STORAGE_DEBUG=y -# CONFIG_USB_STORAGE_DATAFAB is not set -# CONFIG_USB_STORAGE_FREECOM is not set -# CONFIG_USB_STORAGE_ISD200 is not set -# CONFIG_USB_STORAGE_DPCM is not set -# CONFIG_USB_STORAGE_HP8200e is not set -# CONFIG_USB_STORAGE_SDDR09 is not set -# CONFIG_USB_STORAGE_JUMPSHOT is not set -CONFIG_USB_ACM=m -CONFIG_USB_PRINTER=m - -# -# USB Human Interface Devices (HID) -# - -# -# Input core support is needed for USB HID -# - -# -# USB Imaging devices -# -CONFIG_USB_DC2XX=m -CONFIG_USB_MDC800=m -CONFIG_USB_SCANNER=m -CONFIG_USB_MICROTEK=m -CONFIG_USB_HPUSBSCSI=m - -# -# USB Multimedia devices -# -CONFIG_USB_IBMCAM=m -CONFIG_USB_OV511=m -CONFIG_USB_PWC=m -CONFIG_USB_SE401=m -# CONFIG_USB_STV680 is not set -CONFIG_USB_VICAM=m -CONFIG_USB_DSBR=m -CONFIG_USB_DABUSB=m -CONFIG_USB_KONICAWC=m - -# -# USB Network adaptors -# -CONFIG_USB_PEGASUS=m -CONFIG_USB_KAWETH=m -CONFIG_USB_CATC=m -CONFIG_USB_CDCETHER=m -CONFIG_USB_USBNET=m - -# -# USB port drivers -# -CONFIG_USB_USS720=m - -# -# USB Serial Converter support -# -CONFIG_USB_SERIAL=m -CONFIG_USB_SERIAL_GENERIC=y -CONFIG_USB_SERIAL_BELKIN=m -CONFIG_USB_SERIAL_WHITEHEAT=m -CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m -CONFIG_USB_SERIAL_EMPEG=m -CONFIG_USB_SERIAL_FTDI_SIO=m -CONFIG_USB_SERIAL_VISOR=m -# CONFIG_USB_SERIAL_IPAQ is not set -CONFIG_USB_SERIAL_IR=m -CONFIG_USB_SERIAL_EDGEPORT=m -CONFIG_USB_SERIAL_KEYSPAN_PDA=m -CONFIG_USB_SERIAL_KEYSPAN=m -# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set -CONFIG_USB_SERIAL_MCT_U232=m -# CONFIG_USB_SERIAL_KLSI is not set -CONFIG_USB_SERIAL_PL2303=m -CONFIG_USB_SERIAL_CYBERJACK=m -CONFIG_USB_SERIAL_XIRCOM=m -CONFIG_USB_SERIAL_OMNINET=m - -# -# USB Miscellaneous drivers -# -CONFIG_USB_RIO500=m -# CONFIG_USB_AUERSWALD is not set - -# -# Bluetooth support -# -CONFIG_BT=m -CONFIG_BT_L2CAP=m - -# -# Bluetooth device drivers -# -CONFIG_BT_HCIUSB=m -CONFIG_BT_HCIUART=m -CONFIG_BT_HCIVHCI=m - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_USER=y -CONFIG_DEBUG_INFO=y -CONFIG_DEBUG_KERNEL=y -# CONFIG_DEBUG_SLAB is not set -CONFIG_MAGIC_SYSRQ=y -# CONFIG_DEBUG_SPINLOCK is not set -# CONFIG_DEBUG_WAITQ is not set -CONFIG_DEBUG_BUGVERBOSE=y -CONFIG_DEBUG_ERRORS=y -CONFIG_DEBUG_LL=y -# CONFIG_DEBUG_DC21285_PORT is not set -# CONFIG_DEBUG_CLPS711X_UART2 is not set - -# -# Library routines -# -# CONFIG_CRC32 is not set -CONFIG_ZLIB_INFLATE=y -CONFIG_ZLIB_DEFLATE=y diff -prauN linux-2.6.0-test5/arch/arm/def-configs/brutus wli-2.6.0-test5-bk12-25/arch/arm/def-configs/brutus --- linux-2.6.0-test5/arch/arm/def-configs/brutus 2003-09-08 12:50:19.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/brutus 1969-12-31 16:00:00.000000000 -0800 @@ -1,296 +0,0 @@ -# -# Automatically generated make config: don't edit -# -CONFIG_ARM=y -# CONFIG_SBUS is not set -CONFIG_UID16=y - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -# CONFIG_OBSOLETE is not set - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODVERSIONS is not set -# CONFIG_KMOD is not set - -# -# System Type -# -# CONFIG_ARCH_ARCA5K is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_RPC is not set -CONFIG_ARCH_SA1100=y - -# -# SA11x0 Implementations -# -# CONFIG_SA1100_ASSABET is not set -CONFIG_SA1100_BRUTUS=y -# CONFIG_SA1100_CERF is not set -# CONFIG_SA1100_BITSY is not set -# CONFIG_SA1100_LART is not set -# CONFIG_SA1100_THINCLIENT is not set -# CONFIG_SA1100_GRAPHICSCLIENT is not set -# CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_VICTOR is not set -# CONFIG_SA1100_XP860 is not set -CONFIG_ANGELBOOT=y -# CONFIG_SA1100_FREQUENCY_SCALE is not set -# CONFIG_SA1100_VOLTAGE_SCALE is not set -# CONFIG_ARCH_ACORN is not set -# CONFIG_FOOTBRIDGE is not set -# CONFIG_FOOTBRIDGE_HOST is not set -# CONFIG_FOOTBRIDGE_ADDIN is not set -CONFIG_CPU_32=y -# CONFIG_CPU_26 is not set -CONFIG_CPU_32v4=y -CONFIG_CPU_SA1100=y -CONFIG_DISCONTIGMEM=y -# CONFIG_PCI is not set -# CONFIG_ISA is not set -# CONFIG_ISA_DMA is not set -CONFIG_PC_KEYMAP=y - -# -# General setup -# -# CONFIG_HOTPLUG is not set -# CONFIG_PCMCIA is not set -# CONFIG_NET is not set -CONFIG_SYSVIPC=y -# CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_SYSCTL=y -CONFIG_NWFPE=y -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -CONFIG_BINFMT_AOUT=y -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -# CONFIG_PM is not set -# CONFIG_ARTHUR is not set -CONFIG_CMDLINE="mem=4M@0xc0000000 mem=4M@0xc8000000 mem=4M@0xd0000000 mem=4M@0xd8000000 keepinitrd root=/dev/ram ramdisk=8192 initrd=0xd8000000,3M" -CONFIG_LEDS=y -CONFIG_LEDS_TIMER=y -CONFIG_LEDS_CPU=y -CONFIG_ALIGNMENT_TRAP=y - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Memory Technology Devices (MTD) -# -# CONFIG_MTD is not set - -# -# Plug and Play configuration -# -# CONFIG_PNP is not set -# CONFIG_ISAPNP is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_XD is not set -# CONFIG_PARIDE is not set -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_DEV_DAC960 is not set -# CONFIG_BLK_DEV_LOOP is not set -# CONFIG_BLK_DEV_NBD is not set -# CONFIG_BLK_DEV_LVM is not set -# CONFIG_BLK_DEV_MD is not set -# CONFIG_MD_LINEAR is not set -# CONFIG_MD_RAID0 is not set -# CONFIG_MD_RAID1 is not set -# CONFIG_MD_RAID5 is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=4096 -CONFIG_BLK_DEV_INITRD=y -# CONFIG_BLK_DEV_FLASH is not set - -# -# ATA/IDE/MFM/RLL support -# -# CONFIG_IDE is not set -# CONFIG_BLK_DEV_HD is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# I2O device support -# -# CONFIG_I2O is not set -# CONFIG_I2O_BLOCK is not set -# CONFIG_I2O_SCSI is not set -# CONFIG_I2O_PROC is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Character devices -# -CONFIG_VT=y -# CONFIG_VT_CONSOLE is not set -CONFIG_SERIAL_SA1100=y -CONFIG_SERIAL_SA1100_CONSOLE=y -# CONFIG_TOUCHSCREEN_UCB1200 is not set -# CONFIG_TOUCHSCREEN_BITSY is not set -# CONFIG_SERIAL is not set -# CONFIG_SERIAL_EXTENDED is not set -# CONFIG_SERIAL_NONSTANDARD is not set -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=32 - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -# CONFIG_MOUSE is not set - -# -# Joysticks -# -# CONFIG_JOYSTICK is not set -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -# CONFIG_INTEL_RNG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set - -# -# Video For Linux -# -# CONFIG_VIDEO_DEV is not set -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set -# CONFIG_ADFS_FS is not set -# CONFIG_ADFS_FS_RW is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_FAT_FS is not set -# CONFIG_MSDOS_FS is not set -# CONFIG_UMSDOS_FS is not set -# CONFIG_VFAT_FS is not set -# CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set -# CONFIG_CRAMFS is not set -# CONFIG_RAMFS is not set -# CONFIG_ISO9660_FS is not set -# CONFIG_JOLIET is not set -# CONFIG_MINIX_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS_DEBUG is not set -# CONFIG_NTFS_RW is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -# CONFIG_DEVFS_MOUNT is not set -# CONFIG_DEVFS_DEBUG is not set -CONFIG_DEVPTS_FS=y -# CONFIG_QNX4FS_FS is not set -# CONFIG_QNX4FS_RW is not set -# CONFIG_ROMFS_FS is not set -CONFIG_EXT2_FS=y -# CONFIG_SYSV_FS is not set -# CONFIG_SYSV_FS_WRITE is not set -# CONFIG_UDF_FS is not set -# CONFIG_UDF_RW is not set -# CONFIG_UFS_FS is not set -# CONFIG_UFS_FS_WRITE is not set -# CONFIG_NCPFS_NLS is not set - -# -# Partition Types -# -# CONFIG_PARTITION_ADVANCED is not set -CONFIG_MSDOS_PARTITION=y -# CONFIG_NLS is not set - -# -# Console drivers -# -# CONFIG_VGA_CONSOLE is not set -CONFIG_FB=y - -# -# Frame-buffer support -# -CONFIG_FB=y -CONFIG_DUMMY_CONSOLE=y -# CONFIG_FB_CYBER2000 is not set -CONFIG_FB_SA1100=y -# CONFIG_FB_VIRTUAL is not set -# CONFIG_FBCON_ADVANCED is not set -CONFIG_FBCON_CFB2=y -CONFIG_FBCON_CFB4=y -CONFIG_FBCON_CFB8=y -CONFIG_FBCON_CFB16=y -CONFIG_FBCON_FONTWIDTH8_ONLY=y -CONFIG_FBCON_FONTS=y -CONFIG_FONT_8x8=y -# CONFIG_FONT_8x16 is not set -# CONFIG_FONT_SUN8x16 is not set -# CONFIG_FONT_PEARL_8x8 is not set -# CONFIG_FONT_ACORN_8x8 is not set - -# -# Sound -# -# CONFIG_SOUND is not set - -# -# USB support -# -# CONFIG_USB is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_ERRORS=y -CONFIG_DEBUG_USER=y -CONFIG_DEBUG_INFO=y -# CONFIG_MAGIC_SYSRQ is not set -# CONFIG_DEBUG_LL is not set diff -prauN linux-2.6.0-test5/arch/arm/def-configs/cerfcube wli-2.6.0-test5-bk12-25/arch/arm/def-configs/cerfcube --- linux-2.6.0-test5/arch/arm/def-configs/cerfcube 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/cerfcube 1969-12-31 16:00:00.000000000 -0800 @@ -1,873 +0,0 @@ -# -# Automatically generated make config: don't edit -# -CONFIG_ARM=y -# CONFIG_EISA is not set -# CONFIG_SBUS is not set -# CONFIG_MCA is not set -CONFIG_UID16=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y -# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -# CONFIG_OBSOLETE is not set - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODVERSIONS is not set -# CONFIG_KMOD is not set - -# -# System Type -# -# CONFIG_ARCH_ANAKIN is not set -# CONFIG_ARCH_ARCA5K is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_RPC is not set -CONFIG_ARCH_SA1100=y -# CONFIG_ARCH_SHARK is not set - -# -# Archimedes/A5000 Implementations -# - -# -# Archimedes/A5000 Implementations (select only ONE) -# -# CONFIG_ARCH_ARC is not set -# CONFIG_ARCH_A5K is not set - -# -# Footbridge Implementations -# -# CONFIG_ARCH_CATS is not set -# CONFIG_ARCH_PERSONAL_SERVER is not set -# CONFIG_ARCH_EBSA285_ADDIN is not set -# CONFIG_ARCH_EBSA285_HOST is not set -# CONFIG_ARCH_NETWINDER is not set - -# -# SA11x0 Implementations -# -# CONFIG_SA1100_ASSABET is not set -# CONFIG_ASSABET_NEPONSET is not set -# CONFIG_SA1100_ADSBITSY is not set -# CONFIG_SA1100_BRUTUS is not set -CONFIG_SA1100_CERF=y -# CONFIG_SA1100_CERF_FLASH_8MB is not set -CONFIG_SA1100_CERF_FLASH_16MB=y -# CONFIG_SA1100_CERF_FLASH_32MB is not set -# CONFIG_SA1100_CERF_CPLD is not set -# CONFIG_SA1100_H3600 is not set -# CONFIG_SA1100_EXTENEX1 is not set -# CONFIG_SA1100_FLEXANET is not set -# CONFIG_SA1100_FREEBIRD is not set -# CONFIG_SA1100_GRAPHICSCLIENT is not set -# CONFIG_SA1100_GRAPHICSMASTER is not set -# CONFIG_SA1100_JORNADA720 is not set -# CONFIG_SA1100_HUW_WEBPANEL is not set -# CONFIG_SA1100_ITSY is not set -# CONFIG_SA1100_LART is not set -# CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_OMNIMETER is not set -# CONFIG_SA1100_PANGOLIN is not set -# CONFIG_SA1100_PLEB is not set -# CONFIG_SA1100_SHERMAN is not set -# CONFIG_SA1100_SIMPAD is not set -# CONFIG_SA1100_PFS168 is not set -# CONFIG_SA1100_VICTOR is not set -# CONFIG_SA1100_XP860 is not set -# CONFIG_SA1100_YOPY is not set -CONFIG_SA1100_USB=y -CONFIG_SA1100_USB_NETLINK=y -CONFIG_SA1100_USB_CHAR=y - -# -# CLPS711X/EP721X Implementations -# -# CONFIG_ARCH_CDB89712 is not set -# CONFIG_ARCH_CLEP7312 is not set -# CONFIG_ARCH_EDB7211 is not set -# CONFIG_ARCH_P720T is not set -# CONFIG_ARCH_EP7211 is not set -# CONFIG_ARCH_EP7212 is not set -# CONFIG_ARCH_ACORN is not set -# CONFIG_FOOTBRIDGE is not set -# CONFIG_FOOTBRIDGE_HOST is not set -# CONFIG_FOOTBRIDGE_ADDIN is not set -CONFIG_CPU_32=y -# CONFIG_CPU_26 is not set - -# -# Processor Type -# -# CONFIG_CPU_32v3 is not set -CONFIG_CPU_32v4=y -# CONFIG_CPU_ARM610 is not set -# CONFIG_CPU_ARM710 is not set -# CONFIG_CPU_ARM720T is not set -# CONFIG_CPU_ARM920T is not set -# CONFIG_CPU_ARM1020 is not set -# CONFIG_CPU_SA110 is not set -CONFIG_CPU_SA1100=y -# CONFIG_ARM_THUMB is not set -CONFIG_DISCONTIGMEM=y - -# -# General setup -# -# CONFIG_PCI is not set -# CONFIG_ISA is not set -# CONFIG_ISA_DMA is not set -CONFIG_CPU_FREQ=y -CONFIG_HOTPLUG=y - -# -# PCMCIA/CardBus support -# -CONFIG_PCMCIA=y -# CONFIG_I82365 is not set -# CONFIG_TCIC is not set -# CONFIG_PCMCIA_CLPS6700 is not set -CONFIG_PCMCIA_SA1100=y -CONFIG_NET=y -CONFIG_SYSVIPC=y -CONFIG_BSD_PROCESS_ACCT=y -CONFIG_SYSCTL=y - -# -# At least one math emulation must be selected -# -CONFIG_FPE_NWFPE=y -# CONFIG_FPE_FASTFPE is not set -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -# CONFIG_BINFMT_AOUT is not set -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -# CONFIG_PM is not set -# CONFIG_APM is not set -# CONFIG_ARTHUR is not set -CONFIG_CMDLINE="console=ttySA0 root=/dev/mtdblock3 rw mem=32M" -# CONFIG_PFS168_CMDLINE is not set -CONFIG_LEDS=y -CONFIG_LEDS_TIMER=y -CONFIG_LEDS_CPU=y -CONFIG_ALIGNMENT_TRAP=y - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Memory Technology Devices (MTD) -# -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set -CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_REDBOOT_PARTS is not set -# CONFIG_MTD_BOOTLDR_PARTS is not set -# CONFIG_MTD_AFS_PARTS is not set - -# -# User Modules And Translation Layers -# -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -# CONFIG_NFTL is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=y -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_GEN_PROBE=y -# CONFIG_MTD_CFI_ADV_OPTIONS is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_ABSENT is not set -# CONFIG_MTD_OBSOLETE_CHIPS is not set - -# -# Mapping drivers for chip access -# -# CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_SUN_UFLASH is not set -# CONFIG_MTD_NORA is not set -# CONFIG_MTD_PNC2000 is not set -# CONFIG_MTD_RPXLITE is not set -# CONFIG_MTD_TQM8XXL is not set -# CONFIG_MTD_SC520CDP is not set -# CONFIG_MTD_NETSC520 is not set -# CONFIG_MTD_SBC_GXX is not set -# CONFIG_MTD_ELAN_104NC is not set -# CONFIG_MTD_DBOX2 is not set -# CONFIG_MTD_CSTM_MIPS_IXX is not set -# CONFIG_MTD_CFI_FLAGADM is not set -# CONFIG_MTD_SOLUTIONENGINE is not set -# CONFIG_MTD_MIXMEM is not set -# CONFIG_MTD_OCTAGON is not set -# CONFIG_MTD_VMAX is not set -# CONFIG_MTD_OCELOT is not set -# CONFIG_MTD_L440GX is not set -# CONFIG_MTD_ARM_INTEGRATOR is not set -# CONFIG_MTD_CDB89712 is not set -CONFIG_MTD_SA1100=y -# CONFIG_MTD_DC21285 is not set -# CONFIG_MTD_IQ80310 is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_LART is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLKMTD is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC1000 is not set -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOCPROBE is not set - -# -# NAND Flash Device Drivers -# -# CONFIG_MTD_NAND is not set - -# -# Plug and Play configuration -# -# CONFIG_PNP is not set -# CONFIG_ISAPNP is not set -# CONFIG_PNPBIOS is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_XD is not set -# CONFIG_PARIDE is not set -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_BLK_DEV_DAC960 is not set -CONFIG_BLK_DEV_LOOP=y -# CONFIG_BLK_DEV_NBD is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=4096 -CONFIG_BLK_DEV_INITRD=y - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set -# CONFIG_BLK_DEV_MD is not set -# CONFIG_MD_LINEAR is not set -# CONFIG_MD_RAID0 is not set -# CONFIG_MD_RAID1 is not set -# CONFIG_MD_RAID5 is not set -# CONFIG_BLK_DEV_LVM is not set - -# -# Networking options -# -CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set -CONFIG_NETLINK=y -CONFIG_RTNETLINK=y -# CONFIG_NETLINK_DEV is not set -# CONFIG_NETFILTER is not set -CONFIG_FILTER=y -CONFIG_UNIX=y -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -# CONFIG_IP_PNP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_ARPD is not set -# CONFIG_INET_ECN is not set -# CONFIG_SYN_COOKIES is not set -# CONFIG_IPV6 is not set -# CONFIG_KHTTPD is not set -# CONFIG_ATM is not set - -# -# -# -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_LLC is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set -# CONFIG_ETHERTAP is not set - -# -# Ethernet (10 or 100Mbit) -# -CONFIG_NET_ETHERNET=y -# CONFIG_SUNLANCE is not set -# CONFIG_SUNBMAC is not set -# CONFIG_SUNQE is not set -# CONFIG_SUNLANCE is not set -# CONFIG_SUNGEM is not set -CONFIG_NET_VENDOR_3COM=y -# CONFIG_EL1 is not set -# CONFIG_EL2 is not set -# CONFIG_ELPLUS is not set -# CONFIG_EL16 is not set -# CONFIG_ELMC is not set -# CONFIG_ELMC_II is not set -CONFIG_CERF_CS8900A=y -# CONFIG_LANCE is not set -# CONFIG_NET_VENDOR_SMC is not set -# CONFIG_NET_VENDOR_RACAL is not set -# CONFIG_NET_ISA is not set -# CONFIG_NET_PCI is not set -# CONFIG_NET_POCKET is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_ACENIC is not set -# CONFIG_DL2K is not set -# CONFIG_MYRI_SBUS is not set -# CONFIG_NS83820 is not set -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -# CONFIG_SK98LIN is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PLIP is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set - -# -# Token Ring devices -# -# CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# PCMCIA network device support -# -CONFIG_NET_PCMCIA=y -# CONFIG_PCMCIA_3C589 is not set -# CONFIG_PCMCIA_3C574 is not set -# CONFIG_PCMCIA_FMVJ18X is not set -CONFIG_PCMCIA_PCNET=m -# CONFIG_PCMCIA_NMCLAN is not set -# CONFIG_PCMCIA_SMC91C92 is not set -# CONFIG_PCMCIA_XIRC2PS is not set -# CONFIG_ARCNET_COM20020_CS is not set -# CONFIG_PCMCIA_IBMTR is not set -# CONFIG_NET_PCMCIA_RADIO is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# ATA/IDE/MFM/RLL support -# -CONFIG_IDE=y - -# -# IDE, ATA and ATAPI Block devices -# -CONFIG_BLK_DEV_IDE=y - -# -# Please see Documentation/ide.txt for help/info on IDE drives -# -# CONFIG_BLK_DEV_HD_IDE is not set -# CONFIG_BLK_DEV_HD is not set -CONFIG_BLK_DEV_IDEDISK=y -# CONFIG_IDEDISK_MULTI_MODE is not set -CONFIG_BLK_DEV_IDECS=m -# CONFIG_BLK_DEV_IDECD is not set -# CONFIG_BLK_DEV_IDETAPE is not set -# CONFIG_BLK_DEV_IDEFLOPPY is not set -# CONFIG_BLK_DEV_IDESCSI is not set - -# -# IDE chipset support/bugfixes -# -# CONFIG_BLK_DEV_CMD640 is not set -# CONFIG_BLK_DEV_CMD640_ENHANCED is not set -# CONFIG_BLK_DEV_ISAPNP is not set -# CONFIG_IDE_CHIPSETS is not set -# CONFIG_IDEDMA_AUTO is not set -# CONFIG_BLK_DEV_ATARAID is not set -# CONFIG_BLK_DEV_ATARAID_PDC is not set -# CONFIG_BLK_DEV_ATARAID_HPT is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# I2O device support -# -# CONFIG_I2O is not set -# CONFIG_I2O_BLOCK is not set -# CONFIG_I2O_LAN is not set -# CONFIG_I2O_SCSI is not set -# CONFIG_I2O_PROC is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Input core support -# -# CONFIG_INPUT is not set -# CONFIG_INPUT_KEYBDEV is not set -# CONFIG_INPUT_MOUSEDEV is not set -# CONFIG_INPUT_JOYDEV is not set -# CONFIG_INPUT_EVDEV is not set - -# -# Character devices -# -CONFIG_VT=y -# CONFIG_VT_CONSOLE is not set -# CONFIG_SERIAL is not set -# CONFIG_SERIAL_EXTENDED is not set -# CONFIG_SERIAL_NONSTANDARD is not set - -# -# Serial drivers -# -# CONFIG_SERIAL_ANAKIN is not set -# CONFIG_SERIAL_ANAKIN_CONSOLE is not set -# CONFIG_SERIAL_AMBA is not set -# CONFIG_SERIAL_AMBA_CONSOLE is not set -# CONFIG_SERIAL_CLPS711X is not set -# CONFIG_SERIAL_CLPS711X_CONSOLE is not set -# CONFIG_SERIAL_21285 is not set -# CONFIG_SERIAL_21285_OLD is not set -# CONFIG_SERIAL_21285_CONSOLE is not set -CONFIG_SERIAL_SA1100=y -CONFIG_SERIAL_SA1100_CONSOLE=y -CONFIG_SA1100_DEFAULT_BAUDRATE=9600 -# CONFIG_SERIAL_8250 is not set -# CONFIG_SERIAL_8250_CONSOLE is not set -# CONFIG_SERIAL_8250_EXTENDED is not set -# CONFIG_SERIAL_8250_MANY_PORTS is not set -# CONFIG_SERIAL_8250_SHARE_IRQ is not set -# CONFIG_SERIAL_8250_DETECT_IRQ is not set -# CONFIG_SERIAL_8250_MULTIPORT is not set -# CONFIG_SERIAL_8250_HUB6 is not set -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=32 -# CONFIG_UCB1200 is not set -# CONFIG_TOUCHSCREEN_UCB1200 is not set -# CONFIG_AUDIO_UCB1200 is not set -# CONFIG_ADC_UCB1200 is not set -# CONFIG_TOUCHSCREEN_H3600 is not set -# CONFIG_PROFILER is not set -# CONFIG_PFS168_SPI is not set -# CONFIG_PFS168_DTMF is not set -# CONFIG_PFS168_MISC is not set - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# L3 serial bus support -# -# CONFIG_L3 is not set -# CONFIG_L3_ALGOBIT is not set -# CONFIG_L3_BIT_SA1100_GPIO is not set -# CONFIG_BIT_SA1100_UCB1200 is not set - -# -# Other L3 adapters -# -# CONFIG_L3_SA1111 is not set - -# -# L3 driver support -# -# CONFIG_L3_DRV_UDA1341 is not set -# CONFIG_BIT_SA1100_GPIO is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -# CONFIG_MOUSE is not set - -# -# Joysticks -# -# CONFIG_INPUT_GAMEPORT is not set - -# -# Input core support is needed for gameports -# - -# -# Input core support is needed for joysticks -# -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -# CONFIG_INTEL_RNG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -CONFIG_SA1100_RTC=y -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set -# CONFIG_SONYPI is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set - -# -# PCMCIA character devices -# - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -CONFIG_AUTOFS_FS=y -CONFIG_AUTOFS4_FS=y -# CONFIG_REISERFS_FS is not set -# CONFIG_REISERFS_CHECK is not set -# CONFIG_REISERFS_PROC_INFO is not set -# CONFIG_ADFS_FS is not set -# CONFIG_ADFS_FS_RW is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_CMS_FS is not set -# CONFIG_EXT3_FS is not set -# CONFIG_JBD is not set -# CONFIG_JBD_DEBUG is not set -CONFIG_FAT_FS=y -CONFIG_MSDOS_FS=y -CONFIG_UMSDOS_FS=y -CONFIG_VFAT_FS=y -# CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set -CONFIG_JFFS2_FS=y -CONFIG_JFFS2_FS_DEBUG=0 -# CONFIG_CRAMFS is not set -# CONFIG_TMPFS is not set -CONFIG_RAMFS=y -# CONFIG_ISO9660_FS is not set -# CONFIG_JOLIET is not set -# CONFIG_MINIX_FS is not set -# CONFIG_FREEVXFS_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS_DEBUG is not set -# CONFIG_NTFS_RW is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -# CONFIG_DEVFS_MOUNT is not set -# CONFIG_DEVFS_DEBUG is not set -CONFIG_DEVPTS_FS=y -# CONFIG_QNX4FS_FS is not set -# CONFIG_QNX4FS_RW is not set -CONFIG_ROMFS_FS=y -CONFIG_EXT2_FS=y -# CONFIG_SYSV_FS is not set -# CONFIG_UDF_FS is not set -# CONFIG_UDF_RW is not set -# CONFIG_UFS_FS is not set -# CONFIG_UFS_FS_WRITE is not set - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -# CONFIG_INTERMEZZO_FS is not set -CONFIG_NFS_FS=y -CONFIG_NFS_V3=y -# CONFIG_ROOT_NFS is not set -# CONFIG_NFSD is not set -# CONFIG_NFSD_V3 is not set -CONFIG_SUNRPC=y -CONFIG_LOCKD=y -CONFIG_LOCKD_V4=y -# CONFIG_SMB_FS is not set -# CONFIG_NCP_FS is not set -# CONFIG_NCPFS_PACKET_SIGNING is not set -# CONFIG_NCPFS_IOCTL_LOCKING is not set -# CONFIG_NCPFS_STRONG is not set -# CONFIG_NCPFS_NFS_NS is not set -# CONFIG_NCPFS_OS2_NS is not set -# CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_NLS is not set -# CONFIG_NCPFS_EXTRAS is not set - -# -# Partition Types -# -# CONFIG_PARTITION_ADVANCED is not set -CONFIG_MSDOS_PARTITION=y -# CONFIG_SMB_NLS is not set -CONFIG_NLS=y - -# -# Native Language Support -# -CONFIG_NLS_DEFAULT="iso8859-1" -# CONFIG_NLS_CODEPAGE_437 is not set -# CONFIG_NLS_CODEPAGE_737 is not set -# CONFIG_NLS_CODEPAGE_775 is not set -# CONFIG_NLS_CODEPAGE_850 is not set -# CONFIG_NLS_CODEPAGE_852 is not set -# CONFIG_NLS_CODEPAGE_855 is not set -# CONFIG_NLS_CODEPAGE_857 is not set -# CONFIG_NLS_CODEPAGE_860 is not set -# CONFIG_NLS_CODEPAGE_861 is not set -# CONFIG_NLS_CODEPAGE_862 is not set -# CONFIG_NLS_CODEPAGE_863 is not set -# CONFIG_NLS_CODEPAGE_864 is not set -# CONFIG_NLS_CODEPAGE_865 is not set -# CONFIG_NLS_CODEPAGE_866 is not set -# CONFIG_NLS_CODEPAGE_869 is not set -# CONFIG_NLS_CODEPAGE_936 is not set -# CONFIG_NLS_CODEPAGE_950 is not set -# CONFIG_NLS_CODEPAGE_932 is not set -# CONFIG_NLS_CODEPAGE_949 is not set -# CONFIG_NLS_CODEPAGE_874 is not set -# CONFIG_NLS_ISO8859_8 is not set -# CONFIG_NLS_CODEPAGE_1251 is not set -# CONFIG_NLS_ISO8859_1 is not set -# CONFIG_NLS_ISO8859_2 is not set -# CONFIG_NLS_ISO8859_3 is not set -# CONFIG_NLS_ISO8859_4 is not set -# CONFIG_NLS_ISO8859_5 is not set -# CONFIG_NLS_ISO8859_6 is not set -# CONFIG_NLS_ISO8859_7 is not set -# CONFIG_NLS_ISO8859_9 is not set -# CONFIG_NLS_ISO8859_13 is not set -# CONFIG_NLS_ISO8859_14 is not set -# CONFIG_NLS_ISO8859_15 is not set -# CONFIG_NLS_KOI8_R is not set -# CONFIG_NLS_KOI8_U is not set -# CONFIG_NLS_UTF8 is not set - -# -# Console drivers -# -CONFIG_PC_KEYMAP=y -# CONFIG_VGA_CONSOLE is not set - -# -# Frame-buffer support -# -# CONFIG_FB is not set - -# -# Sound -# -# CONFIG_SOUND is not set - -# -# USB support -# -# CONFIG_USB is not set - -# -# USB Controllers -# -# CONFIG_USB_UHCI is not set -# CONFIG_USB_UHCI_ALT is not set -# CONFIG_USB_OHCI is not set -# CONFIG_USB_OHCI_SA1111 is not set - -# -# USB Device Class drivers -# -# CONFIG_USB_AUDIO is not set -# CONFIG_USB_BLUETOOTH is not set -# CONFIG_USB_STORAGE is not set -# CONFIG_USB_STORAGE_DEBUG is not set -# CONFIG_USB_STORAGE_DATAFAB is not set -# CONFIG_USB_STORAGE_FREECOM is not set -# CONFIG_USB_STORAGE_ISD200 is not set -# CONFIG_USB_STORAGE_JUMPSHOT is not set -# CONFIG_USB_STORAGE_DPCM is not set -# CONFIG_USB_STORAGE_HP8200e is not set -# CONFIG_USB_STORAGE_SDDR09 is not set -# CONFIG_USB_ACM is not set -# CONFIG_USB_PRINTER is not set - -# -# USB Human Interface Devices (HID) -# - -# -# Input core support is needed for USB HID -# - -# -# USB Imaging devices -# -# CONFIG_USB_DC2XX is not set -# CONFIG_USB_MDC800 is not set -# CONFIG_USB_SCANNER is not set -# CONFIG_USB_MICROTEK is not set -# CONFIG_USB_HPUSBSCSI is not set - -# -# USB Multimedia devices -# - -# -# Video4Linux support is needed for USB Multimedia device support -# -# CONFIG_USB_DABUSB is not set - -# -# USB Network adaptors -# -# CONFIG_USB_PLUSB is not set -# CONFIG_USB_PEGASUS is not set -# CONFIG_USB_KAWETH is not set -# CONFIG_USB_CATC is not set -# CONFIG_USB_CDCETHER is not set -# CONFIG_USB_USBNET is not set - -# -# USB port drivers -# -# CONFIG_USB_USS720 is not set - -# -# USB Serial Converter support -# -# CONFIG_USB_SERIAL is not set -# CONFIG_USB_SERIAL_GENERIC is not set -# CONFIG_USB_SERIAL_BELKIN is not set -# CONFIG_USB_SERIAL_WHITEHEAT is not set -# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set -# CONFIG_USB_SERIAL_EMPEG is not set -# CONFIG_USB_SERIAL_FTDI_SIO is not set -# CONFIG_USB_SERIAL_VISOR is not set -# CONFIG_USB_SERIAL_EDGEPORT is not set -# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set -# CONFIG_USB_SERIAL_KEYSPAN is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set -# CONFIG_USB_SERIAL_MCT_U232 is not set -# CONFIG_USB_SERIAL_PL2303 is not set -# CONFIG_USB_SERIAL_CYBERJACK is not set -# CONFIG_USB_SERIAL_OMNINET is not set - -# -# Miscellaneous USB drivers -# -# CONFIG_USB_RIO500 is not set -# CONFIG_USB_ID75 is not set - -# -# Bluetooth support -# -# CONFIG_BT is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_ERRORS=y -CONFIG_DEBUG_USER=y -# CONFIG_DEBUG_INFO is not set -CONFIG_MAGIC_SYSRQ=y -# CONFIG_NO_PGT_CACHE is not set -# CONFIG_DEBUG_LL is not set -# CONFIG_DEBUG_DC21285_PORT is not set -# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -prauN linux-2.6.0-test5/arch/arm/def-configs/cerfpda wli-2.6.0-test5-bk12-25/arch/arm/def-configs/cerfpda --- linux-2.6.0-test5/arch/arm/def-configs/cerfpda 2003-09-08 12:49:54.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/cerfpda 1969-12-31 16:00:00.000000000 -0800 @@ -1,967 +0,0 @@ -# -# Automatically generated make config: don't edit -# -CONFIG_ARM=y -# CONFIG_EISA is not set -# CONFIG_SBUS is not set -# CONFIG_MCA is not set -CONFIG_UID16=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y -# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -# CONFIG_OBSOLETE is not set - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODVERSIONS is not set -# CONFIG_KMOD is not set - -# -# System Type -# -# CONFIG_ARCH_ANAKIN is not set -# CONFIG_ARCH_ARCA5K is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_RPC is not set -CONFIG_ARCH_SA1100=y -# CONFIG_ARCH_SHARK is not set - -# -# Archimedes/A5000 Implementations -# - -# -# Archimedes/A5000 Implementations (select only ONE) -# -# CONFIG_ARCH_ARC is not set -# CONFIG_ARCH_A5K is not set - -# -# Footbridge Implementations -# -# CONFIG_ARCH_CATS is not set -# CONFIG_ARCH_PERSONAL_SERVER is not set -# CONFIG_ARCH_EBSA285_ADDIN is not set -# CONFIG_ARCH_EBSA285_HOST is not set -# CONFIG_ARCH_NETWINDER is not set - -# -# SA11x0 Implementations -# -# CONFIG_SA1100_ASSABET is not set -# CONFIG_ASSABET_NEPONSET is not set -# CONFIG_SA1100_ADSBITSY is not set -# CONFIG_SA1100_BRUTUS is not set -CONFIG_SA1100_CERF=y -# CONFIG_SA1100_CERF_FLASH_8MB is not set -# CONFIG_SA1100_CERF_FLASH_16MB is not set -CONFIG_SA1100_CERF_FLASH_32MB=y -CONFIG_SA1100_CERF_CPLD=y -# CONFIG_SA1100_H3600 is not set -# CONFIG_SA1100_EXTENEX1 is not set -# CONFIG_SA1100_FLEXANET is not set -# CONFIG_SA1100_FREEBIRD is not set -# CONFIG_SA1100_GRAPHICSCLIENT is not set -# CONFIG_SA1100_GRAPHICSMASTER is not set -# CONFIG_SA1100_JORNADA720 is not set -# CONFIG_SA1100_HUW_WEBPANEL is not set -# CONFIG_SA1100_ITSY is not set -# CONFIG_SA1100_LART is not set -# CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_OMNIMETER is not set -# CONFIG_SA1100_PANGOLIN is not set -# CONFIG_SA1100_PLEB is not set -# CONFIG_SA1100_SHERMAN is not set -# CONFIG_SA1100_SIMPAD is not set -# CONFIG_SA1100_PFS168 is not set -# CONFIG_SA1100_VICTOR is not set -# CONFIG_SA1100_XP860 is not set -# CONFIG_SA1100_YOPY is not set -CONFIG_SA1100_USB=y -CONFIG_SA1100_USB_NETLINK=y -CONFIG_SA1100_USB_CHAR=y - -# -# CLPS711X/EP721X Implementations -# -# CONFIG_ARCH_CDB89712 is not set -# CONFIG_ARCH_CLEP7312 is not set -# CONFIG_ARCH_EDB7211 is not set -# CONFIG_ARCH_P720T is not set -# CONFIG_ARCH_EP7211 is not set -# CONFIG_ARCH_EP7212 is not set -# CONFIG_ARCH_ACORN is not set -# CONFIG_FOOTBRIDGE is not set -# CONFIG_FOOTBRIDGE_HOST is not set -# CONFIG_FOOTBRIDGE_ADDIN is not set -CONFIG_CPU_32=y -# CONFIG_CPU_26 is not set - -# -# Processor Type -# -# CONFIG_CPU_32v3 is not set -CONFIG_CPU_32v4=y -# CONFIG_CPU_ARM610 is not set -# CONFIG_CPU_ARM710 is not set -# CONFIG_CPU_ARM720T is not set -# CONFIG_CPU_ARM920T is not set -# CONFIG_CPU_ARM1020 is not set -# CONFIG_CPU_SA110 is not set -CONFIG_CPU_SA1100=y -# CONFIG_ARM_THUMB is not set -CONFIG_DISCONTIGMEM=y - -# -# General setup -# -# CONFIG_PCI is not set -# CONFIG_ISA is not set -# CONFIG_ISA_DMA is not set -CONFIG_CPU_FREQ=y -CONFIG_HOTPLUG=y - -# -# PCMCIA/CardBus support -# -CONFIG_PCMCIA=y -# CONFIG_I82365 is not set -# CONFIG_TCIC is not set -# CONFIG_PCMCIA_CLPS6700 is not set -CONFIG_PCMCIA_SA1100=y -CONFIG_NET=y -CONFIG_SYSVIPC=y -CONFIG_BSD_PROCESS_ACCT=y -CONFIG_SYSCTL=y - -# -# At least one math emulation must be selected -# -CONFIG_FPE_NWFPE=y -# CONFIG_FPE_FASTFPE is not set -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -# CONFIG_BINFMT_AOUT is not set -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -# CONFIG_PM is not set -# CONFIG_APM is not set -# CONFIG_ARTHUR is not set -CONFIG_CMDLINE="console=ttySA0 cpufreq_max=221200 root=/dev/mtdblock3 rw mem=64M" -# CONFIG_PFS168_CMDLINE is not set -# CONFIG_LEDS is not set -CONFIG_ALIGNMENT_TRAP=y - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Memory Technology Devices (MTD) -# -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set -CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_REDBOOT_PARTS is not set -# CONFIG_MTD_BOOTLDR_PARTS is not set -# CONFIG_MTD_AFS_PARTS is not set - -# -# User Modules And Translation Layers -# -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -# CONFIG_NFTL is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=y -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_GEN_PROBE=y -CONFIG_MTD_CFI_ADV_OPTIONS=y -CONFIG_MTD_CFI_NOSWAP=y -# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set -# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set -CONFIG_MTD_CFI_GEOMETRY=y -# CONFIG_MTD_CFI_B1 is not set -# CONFIG_MTD_CFI_B2 is not set -CONFIG_MTD_CFI_B4=y -# CONFIG_MTD_CFI_I1 is not set -CONFIG_MTD_CFI_I2=y -# CONFIG_MTD_CFI_I4 is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_ABSENT is not set -# CONFIG_MTD_OBSOLETE_CHIPS is not set - -# -# Mapping drivers for chip access -# -# CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_SUN_UFLASH is not set -# CONFIG_MTD_NORA is not set -# CONFIG_MTD_PNC2000 is not set -# CONFIG_MTD_RPXLITE is not set -# CONFIG_MTD_TQM8XXL is not set -# CONFIG_MTD_SC520CDP is not set -# CONFIG_MTD_NETSC520 is not set -# CONFIG_MTD_SBC_GXX is not set -# CONFIG_MTD_ELAN_104NC is not set -# CONFIG_MTD_DBOX2 is not set -# CONFIG_MTD_CSTM_MIPS_IXX is not set -# CONFIG_MTD_CFI_FLAGADM is not set -# CONFIG_MTD_SOLUTIONENGINE is not set -# CONFIG_MTD_MIXMEM is not set -# CONFIG_MTD_OCTAGON is not set -# CONFIG_MTD_VMAX is not set -# CONFIG_MTD_OCELOT is not set -# CONFIG_MTD_L440GX is not set -# CONFIG_MTD_ARM_INTEGRATOR is not set -# CONFIG_MTD_CDB89712 is not set -CONFIG_MTD_SA1100=y -# CONFIG_MTD_DC21285 is not set -# CONFIG_MTD_IQ80310 is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_LART is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLKMTD is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC1000 is not set -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOCPROBE is not set - -# -# NAND Flash Device Drivers -# -# CONFIG_MTD_NAND is not set - -# -# Plug and Play configuration -# -# CONFIG_PNP is not set -# CONFIG_ISAPNP is not set -# CONFIG_PNPBIOS is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_XD is not set -# CONFIG_PARIDE is not set -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_BLK_DEV_DAC960 is not set -CONFIG_BLK_DEV_LOOP=y -# CONFIG_BLK_DEV_NBD is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=4096 -CONFIG_BLK_DEV_INITRD=y - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set -# CONFIG_BLK_DEV_MD is not set -# CONFIG_MD_LINEAR is not set -# CONFIG_MD_RAID0 is not set -# CONFIG_MD_RAID1 is not set -# CONFIG_MD_RAID5 is not set -# CONFIG_BLK_DEV_LVM is not set - -# -# Networking options -# -CONFIG_PACKET=y -CONFIG_PACKET_MMAP=y -CONFIG_NETLINK=y -CONFIG_RTNETLINK=y -# CONFIG_NETLINK_DEV is not set -# CONFIG_NETFILTER is not set -CONFIG_FILTER=y -CONFIG_UNIX=y -CONFIG_INET=y -CONFIG_IP_MULTICAST=y -# CONFIG_IP_ADVANCED_ROUTER is not set -# CONFIG_IP_PNP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_IP_MROUTE is not set -# CONFIG_ARPD is not set -# CONFIG_INET_ECN is not set -# CONFIG_SYN_COOKIES is not set -# CONFIG_IPV6 is not set -# CONFIG_KHTTPD is not set -# CONFIG_ATM is not set - -# -# -# -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_LLC is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set -# CONFIG_ETHERTAP is not set - -# -# Ethernet (10 or 100Mbit) -# -CONFIG_NET_ETHERNET=y -# CONFIG_SUNLANCE is not set -# CONFIG_SUNBMAC is not set -# CONFIG_SUNQE is not set -# CONFIG_SUNLANCE is not set -# CONFIG_SUNGEM is not set -CONFIG_NET_VENDOR_3COM=y -# CONFIG_EL1 is not set -# CONFIG_EL2 is not set -# CONFIG_ELPLUS is not set -# CONFIG_EL16 is not set -# CONFIG_ELMC is not set -# CONFIG_ELMC_II is not set -CONFIG_CERF_CS8900A=y -# CONFIG_LANCE is not set -# CONFIG_NET_VENDOR_SMC is not set -# CONFIG_NET_VENDOR_RACAL is not set -# CONFIG_NET_ISA is not set -# CONFIG_NET_PCI is not set -# CONFIG_NET_POCKET is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_ACENIC is not set -# CONFIG_DL2K is not set -# CONFIG_MYRI_SBUS is not set -# CONFIG_NS83820 is not set -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -# CONFIG_SK98LIN is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PLIP is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -CONFIG_NET_RADIO=y -CONFIG_STRIP=m -CONFIG_WAVELAN=m -CONFIG_ARLAN=m -CONFIG_AIRONET4500=m -CONFIG_AIRONET4500_NONCS=m -# CONFIG_AIRONET4500_PNP is not set -# CONFIG_AIRONET4500_PCI is not set -# CONFIG_AIRONET4500_ISA is not set -# CONFIG_AIRONET4500_I365 is not set -CONFIG_AIRONET4500_PROC=m - -# -# Wireless Pcmcia cards support -# -CONFIG_PCMCIA_HERMES=m -CONFIG_AIRO_CS=m -CONFIG_NET_WIRELESS=y - -# -# Token Ring devices -# -# CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# PCMCIA network device support -# -CONFIG_NET_PCMCIA=y -CONFIG_PCMCIA_3C589=m -CONFIG_PCMCIA_3C574=m -CONFIG_PCMCIA_FMVJ18X=m -CONFIG_PCMCIA_PCNET=m -CONFIG_PCMCIA_NMCLAN=m -CONFIG_PCMCIA_SMC91C92=m -CONFIG_PCMCIA_XIRC2PS=m -# CONFIG_ARCNET_COM20020_CS is not set -# CONFIG_PCMCIA_IBMTR is not set -CONFIG_NET_PCMCIA_RADIO=y -CONFIG_PCMCIA_RAYCS=m -CONFIG_PCMCIA_NETWAVE=m -CONFIG_PCMCIA_WAVELAN=m -CONFIG_AIRONET4500_CS=m - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# ATA/IDE/MFM/RLL support -# -CONFIG_IDE=y - -# -# IDE, ATA and ATAPI Block devices -# -CONFIG_BLK_DEV_IDE=y - -# -# Please see Documentation/ide.txt for help/info on IDE drives -# -# CONFIG_BLK_DEV_HD_IDE is not set -# CONFIG_BLK_DEV_HD is not set -CONFIG_BLK_DEV_IDEDISK=y -# CONFIG_IDEDISK_MULTI_MODE is not set -CONFIG_BLK_DEV_IDECS=m -# CONFIG_BLK_DEV_IDECD is not set -# CONFIG_BLK_DEV_IDETAPE is not set -# CONFIG_BLK_DEV_IDEFLOPPY is not set -# CONFIG_BLK_DEV_IDESCSI is not set - -# -# IDE chipset support/bugfixes -# -# CONFIG_BLK_DEV_CMD640 is not set -# CONFIG_BLK_DEV_CMD640_ENHANCED is not set -# CONFIG_BLK_DEV_ISAPNP is not set -# CONFIG_IDE_CHIPSETS is not set -# CONFIG_IDEDMA_AUTO is not set -# CONFIG_BLK_DEV_ATARAID is not set -# CONFIG_BLK_DEV_ATARAID_PDC is not set -# CONFIG_BLK_DEV_ATARAID_HPT is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# I2O device support -# -# CONFIG_I2O is not set -# CONFIG_I2O_BLOCK is not set -# CONFIG_I2O_LAN is not set -# CONFIG_I2O_SCSI is not set -# CONFIG_I2O_PROC is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Input core support -# -# CONFIG_INPUT is not set -# CONFIG_INPUT_KEYBDEV is not set -# CONFIG_INPUT_MOUSEDEV is not set -# CONFIG_INPUT_JOYDEV is not set -# CONFIG_INPUT_EVDEV is not set - -# -# Character devices -# -CONFIG_VT=y -CONFIG_VT_CONSOLE=y -# CONFIG_SERIAL is not set -# CONFIG_SERIAL_EXTENDED is not set -# CONFIG_SERIAL_NONSTANDARD is not set - -# -# Serial drivers -# -# CONFIG_SERIAL_ANAKIN is not set -# CONFIG_SERIAL_ANAKIN_CONSOLE is not set -# CONFIG_SERIAL_AMBA is not set -# CONFIG_SERIAL_AMBA_CONSOLE is not set -# CONFIG_SERIAL_CLPS711X is not set -# CONFIG_SERIAL_CLPS711X_CONSOLE is not set -# CONFIG_SERIAL_21285 is not set -# CONFIG_SERIAL_21285_OLD is not set -# CONFIG_SERIAL_21285_CONSOLE is not set -CONFIG_SERIAL_SA1100=y -CONFIG_SERIAL_SA1100_CONSOLE=y -CONFIG_SA1100_DEFAULT_BAUDRATE=38400 -CONFIG_SERIAL_8250=y -# CONFIG_SERIAL_8250_CONSOLE is not set -# CONFIG_SERIAL_8250_EXTENDED is not set -# CONFIG_SERIAL_8250_MANY_PORTS is not set -# CONFIG_SERIAL_8250_SHARE_IRQ is not set -# CONFIG_SERIAL_8250_DETECT_IRQ is not set -# CONFIG_SERIAL_8250_MULTIPORT is not set -# CONFIG_SERIAL_8250_HUB6 is not set -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=32 -CONFIG_UCB1200=y -CONFIG_TOUCHSCREEN_UCB1200=y -CONFIG_CERF_TS_MANUAL=y -CONFIG_CERF_TS_MAXX="924" -CONFIG_CERF_TS_MAXY="920" -CONFIG_CERF_TS_MINX="57" -CONFIG_CERF_TS_MINY="52" -CONFIG_CERF_TS_RESX="240" -CONFIG_CERF_TS_RESY="320" -# CONFIG_AUDIO_UCB1200 is not set -# CONFIG_ADC_UCB1200 is not set -# CONFIG_TOUCHSCREEN_H3600 is not set -# CONFIG_PROFILER is not set -# CONFIG_PFS168_SPI is not set -# CONFIG_PFS168_DTMF is not set -# CONFIG_PFS168_MISC is not set -CONFIG_SA1100_CERF_KEYPAD=y - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# L3 serial bus support -# -# CONFIG_L3 is not set -# CONFIG_L3_ALGOBIT is not set -# CONFIG_L3_BIT_SA1100_GPIO is not set -# CONFIG_BIT_SA1100_UCB1200 is not set - -# -# Other L3 adapters -# -# CONFIG_L3_SA1111 is not set - -# -# L3 driver support -# -# CONFIG_L3_DRV_UDA1341 is not set -# CONFIG_BIT_SA1100_GPIO is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -# CONFIG_MOUSE is not set - -# -# Joysticks -# -# CONFIG_INPUT_GAMEPORT is not set - -# -# Input core support is needed for gameports -# - -# -# Input core support is needed for joysticks -# -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -# CONFIG_INTEL_RNG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -CONFIG_SA1100_RTC=y -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set -# CONFIG_SONYPI is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set - -# -# PCMCIA character devices -# - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set -# CONFIG_REISERFS_FS is not set -# CONFIG_REISERFS_CHECK is not set -# CONFIG_REISERFS_PROC_INFO is not set -# CONFIG_ADFS_FS is not set -# CONFIG_ADFS_FS_RW is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_CMS_FS is not set -# CONFIG_EXT3_FS is not set -# CONFIG_JBD is not set -# CONFIG_JBD_DEBUG is not set -CONFIG_FAT_FS=y -CONFIG_MSDOS_FS=y -CONFIG_UMSDOS_FS=y -CONFIG_VFAT_FS=y -# CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set -CONFIG_JFFS2_FS=y -CONFIG_JFFS2_FS_DEBUG=0 -# CONFIG_CRAMFS is not set -# CONFIG_TMPFS is not set -CONFIG_RAMFS=y -# CONFIG_ISO9660_FS is not set -# CONFIG_JOLIET is not set -# CONFIG_MINIX_FS is not set -# CONFIG_FREEVXFS_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS_DEBUG is not set -# CONFIG_NTFS_RW is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -# CONFIG_DEVFS_MOUNT is not set -# CONFIG_DEVFS_DEBUG is not set -CONFIG_DEVPTS_FS=y -# CONFIG_QNX4FS_FS is not set -# CONFIG_QNX4FS_RW is not set -CONFIG_ROMFS_FS=y -CONFIG_EXT2_FS=y -# CONFIG_SYSV_FS is not set -# CONFIG_UDF_FS is not set -# CONFIG_UDF_RW is not set -# CONFIG_UFS_FS is not set -# CONFIG_UFS_FS_WRITE is not set - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -# CONFIG_INTERMEZZO_FS is not set -CONFIG_NFS_FS=y -CONFIG_NFS_V3=y -# CONFIG_ROOT_NFS is not set -# CONFIG_NFSD is not set -# CONFIG_NFSD_V3 is not set -CONFIG_SUNRPC=y -CONFIG_LOCKD=y -CONFIG_LOCKD_V4=y -# CONFIG_SMB_FS is not set -# CONFIG_NCP_FS is not set -# CONFIG_NCPFS_PACKET_SIGNING is not set -# CONFIG_NCPFS_IOCTL_LOCKING is not set -# CONFIG_NCPFS_STRONG is not set -# CONFIG_NCPFS_NFS_NS is not set -# CONFIG_NCPFS_OS2_NS is not set -# CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_NLS is not set -# CONFIG_NCPFS_EXTRAS is not set - -# -# Partition Types -# -# CONFIG_PARTITION_ADVANCED is not set -CONFIG_MSDOS_PARTITION=y -# CONFIG_SMB_NLS is not set -CONFIG_NLS=y - -# -# Native Language Support -# -CONFIG_NLS_DEFAULT="iso8859-1" -# CONFIG_NLS_CODEPAGE_437 is not set -# CONFIG_NLS_CODEPAGE_737 is not set -# CONFIG_NLS_CODEPAGE_775 is not set -# CONFIG_NLS_CODEPAGE_850 is not set -# CONFIG_NLS_CODEPAGE_852 is not set -# CONFIG_NLS_CODEPAGE_855 is not set -# CONFIG_NLS_CODEPAGE_857 is not set -# CONFIG_NLS_CODEPAGE_860 is not set -# CONFIG_NLS_CODEPAGE_861 is not set -# CONFIG_NLS_CODEPAGE_862 is not set -# CONFIG_NLS_CODEPAGE_863 is not set -# CONFIG_NLS_CODEPAGE_864 is not set -# CONFIG_NLS_CODEPAGE_865 is not set -# CONFIG_NLS_CODEPAGE_866 is not set -# CONFIG_NLS_CODEPAGE_869 is not set -# CONFIG_NLS_CODEPAGE_936 is not set -# CONFIG_NLS_CODEPAGE_950 is not set -# CONFIG_NLS_CODEPAGE_932 is not set -# CONFIG_NLS_CODEPAGE_949 is not set -# CONFIG_NLS_CODEPAGE_874 is not set -# CONFIG_NLS_ISO8859_8 is not set -# CONFIG_NLS_CODEPAGE_1251 is not set -# CONFIG_NLS_ISO8859_1 is not set -# CONFIG_NLS_ISO8859_2 is not set -# CONFIG_NLS_ISO8859_3 is not set -# CONFIG_NLS_ISO8859_4 is not set -# CONFIG_NLS_ISO8859_5 is not set -# CONFIG_NLS_ISO8859_6 is not set -# CONFIG_NLS_ISO8859_7 is not set -# CONFIG_NLS_ISO8859_9 is not set -# CONFIG_NLS_ISO8859_13 is not set -# CONFIG_NLS_ISO8859_14 is not set -# CONFIG_NLS_ISO8859_15 is not set -# CONFIG_NLS_KOI8_R is not set -# CONFIG_NLS_KOI8_U is not set -# CONFIG_NLS_UTF8 is not set - -# -# Console drivers -# -CONFIG_PC_KEYMAP=y -# CONFIG_VGA_CONSOLE is not set - -# -# Frame-buffer support -# -CONFIG_FB=y -CONFIG_DUMMY_CONSOLE=y -# CONFIG_FB_ACORN is not set -# CONFIG_FB_ANAKIN is not set -# CONFIG_FB_CLPS711X is not set -# CONFIG_FB_CYBER2000 is not set -CONFIG_FB_SA1100=y -CONFIG_CERF_LCD_38_A=y -# CONFIG_CERF_LCD_57_A is not set -# CONFIG_CERF_LCD_72_A is not set -CONFIG_SA1100_CERF_LCD_BACKLIGHT=y -# CONFIG_FB_VIRTUAL is not set -# CONFIG_FBCON_ADVANCED is not set -CONFIG_FBCON_CFB2=y -CONFIG_FBCON_CFB4=y -CONFIG_FBCON_CFB8=y -CONFIG_FBCON_CFB16=y -# CONFIG_FBCON_FONTWIDTH8_ONLY is not set -# CONFIG_FBCON_FONTS is not set -CONFIG_FONT_8x8=y -CONFIG_FONT_8x16=y - -# -# Sound -# -CONFIG_SOUND=y -# CONFIG_SOUND_BT878 is not set -# CONFIG_SOUND_CMPCI is not set -# CONFIG_SOUND_EMU10K1 is not set -# CONFIG_MIDI_EMU10K1 is not set -# CONFIG_SOUND_FUSION is not set -# CONFIG_SOUND_CS4281 is not set -# CONFIG_SOUND_ES1370 is not set -# CONFIG_SOUND_ES1371 is not set -# CONFIG_SOUND_ESSSOLO1 is not set -# CONFIG_SOUND_MAESTRO is not set -# CONFIG_SOUND_MAESTRO3 is not set -# CONFIG_SOUND_ICH is not set -# CONFIG_SOUND_RME96XX is not set -# CONFIG_SOUND_SONICVIBES is not set -# CONFIG_SOUND_TRIDENT is not set -# CONFIG_SOUND_MSNDCLAS is not set -# CONFIG_SOUND_MSNDPIN is not set -# CONFIG_SOUND_VIA82CXXX is not set -# CONFIG_MIDI_VIA82CXXX is not set -# CONFIG_SOUND_ASSABET_UDA1341 is not set -# CONFIG_SOUND_H3600_UDA1341 is not set -# CONFIG_SOUND_PANGOLIN_UDA1341 is not set -# CONFIG_SOUND_SA1111_UDA1341 is not set -CONFIG_SOUND_CERF_UDA1341=y -# CONFIG_SOUND_SA1100SSP is not set -# CONFIG_SOUND_OSS is not set -# CONFIG_SOUND_WAVEARTIST is not set -# CONFIG_SOUND_TVMIXER is not set - -# -# USB support -# -# CONFIG_USB is not set - -# -# USB Controllers -# -# CONFIG_USB_UHCI is not set -# CONFIG_USB_UHCI_ALT is not set -# CONFIG_USB_OHCI is not set -# CONFIG_USB_OHCI_SA1111 is not set - -# -# USB Device Class drivers -# -# CONFIG_USB_AUDIO is not set -# CONFIG_USB_BLUETOOTH is not set -# CONFIG_USB_STORAGE is not set -# CONFIG_USB_STORAGE_DEBUG is not set -# CONFIG_USB_STORAGE_DATAFAB is not set -# CONFIG_USB_STORAGE_FREECOM is not set -# CONFIG_USB_STORAGE_ISD200 is not set -# CONFIG_USB_STORAGE_JUMPSHOT is not set -# CONFIG_USB_STORAGE_DPCM is not set -# CONFIG_USB_STORAGE_HP8200e is not set -# CONFIG_USB_STORAGE_SDDR09 is not set -# CONFIG_USB_ACM is not set -# CONFIG_USB_PRINTER is not set - -# -# USB Human Interface Devices (HID) -# - -# -# Input core support is needed for USB HID -# - -# -# USB Imaging devices -# -# CONFIG_USB_DC2XX is not set -# CONFIG_USB_MDC800 is not set -# CONFIG_USB_SCANNER is not set -# CONFIG_USB_MICROTEK is not set -# CONFIG_USB_HPUSBSCSI is not set - -# -# USB Multimedia devices -# - -# -# Video4Linux support is needed for USB Multimedia device support -# -# CONFIG_USB_DABUSB is not set - -# -# USB Network adaptors -# -# CONFIG_USB_PLUSB is not set -# CONFIG_USB_PEGASUS is not set -# CONFIG_USB_KAWETH is not set -# CONFIG_USB_CATC is not set -# CONFIG_USB_CDCETHER is not set -# CONFIG_USB_USBNET is not set - -# -# USB port drivers -# -# CONFIG_USB_USS720 is not set - -# -# USB Serial Converter support -# -# CONFIG_USB_SERIAL is not set -# CONFIG_USB_SERIAL_GENERIC is not set -# CONFIG_USB_SERIAL_BELKIN is not set -# CONFIG_USB_SERIAL_WHITEHEAT is not set -# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set -# CONFIG_USB_SERIAL_EMPEG is not set -# CONFIG_USB_SERIAL_FTDI_SIO is not set -# CONFIG_USB_SERIAL_VISOR is not set -# CONFIG_USB_SERIAL_EDGEPORT is not set -# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set -# CONFIG_USB_SERIAL_KEYSPAN is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set -# CONFIG_USB_SERIAL_MCT_U232 is not set -# CONFIG_USB_SERIAL_PL2303 is not set -# CONFIG_USB_SERIAL_CYBERJACK is not set -# CONFIG_USB_SERIAL_OMNINET is not set - -# -# Miscellaneous USB drivers -# -# CONFIG_USB_RIO500 is not set -# CONFIG_USB_ID75 is not set - -# -# Bluetooth support -# -CONFIG_BT=y -CONFIG_BT_L2CAP=y - -# -# Bluetooth device drivers -# -# CONFIG_BT_HCIUSB is not set -CONFIG_BT_HCIUART=y -# CONFIG_BT_HCIVHCI is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_ERRORS=y -CONFIG_DEBUG_USER=y -# CONFIG_DEBUG_INFO is not set -CONFIG_MAGIC_SYSRQ=y -# CONFIG_NO_PGT_CACHE is not set -# CONFIG_DEBUG_LL is not set -# CONFIG_DEBUG_DC21285_PORT is not set -# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -prauN linux-2.6.0-test5/arch/arm/def-configs/cerfpod wli-2.6.0-test5-bk12-25/arch/arm/def-configs/cerfpod --- linux-2.6.0-test5/arch/arm/def-configs/cerfpod 2003-09-08 12:50:40.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/cerfpod 1969-12-31 16:00:00.000000000 -0800 @@ -1,894 +0,0 @@ -# -# Automatically generated make config: don't edit -# -CONFIG_ARM=y -# CONFIG_EISA is not set -# CONFIG_SBUS is not set -# CONFIG_MCA is not set -CONFIG_UID16=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y -# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -# CONFIG_OBSOLETE is not set - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODVERSIONS is not set -# CONFIG_KMOD is not set - -# -# System Type -# -# CONFIG_ARCH_ANAKIN is not set -# CONFIG_ARCH_ARCA5K is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_RPC is not set -CONFIG_ARCH_SA1100=y -# CONFIG_ARCH_SHARK is not set - -# -# Archimedes/A5000 Implementations -# - -# -# Archimedes/A5000 Implementations (select only ONE) -# -# CONFIG_ARCH_ARC is not set -# CONFIG_ARCH_A5K is not set - -# -# Footbridge Implementations -# -# CONFIG_ARCH_CATS is not set -# CONFIG_ARCH_PERSONAL_SERVER is not set -# CONFIG_ARCH_EBSA285_ADDIN is not set -# CONFIG_ARCH_EBSA285_HOST is not set -# CONFIG_ARCH_NETWINDER is not set - -# -# SA11x0 Implementations -# -# CONFIG_SA1100_ASSABET is not set -# CONFIG_ASSABET_NEPONSET is not set -# CONFIG_SA1100_ADSBITSY is not set -# CONFIG_SA1100_BRUTUS is not set -CONFIG_SA1100_CERF=y -# CONFIG_SA1100_CERF_FLASH_8MB is not set -CONFIG_SA1100_CERF_FLASH_16MB=y -# CONFIG_SA1100_CERF_FLASH_32MB is not set -# CONFIG_SA1100_CERF_CPLD is not set -# CONFIG_SA1100_H3600 is not set -# CONFIG_SA1100_EXTENEX1 is not set -# CONFIG_SA1100_FLEXANET is not set -# CONFIG_SA1100_FREEBIRD is not set -# CONFIG_SA1100_GRAPHICSCLIENT is not set -# CONFIG_SA1100_GRAPHICSMASTER is not set -# CONFIG_SA1100_JORNADA720 is not set -# CONFIG_SA1100_HUW_WEBPANEL is not set -# CONFIG_SA1100_ITSY is not set -# CONFIG_SA1100_LART is not set -# CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_OMNIMETER is not set -# CONFIG_SA1100_PANGOLIN is not set -# CONFIG_SA1100_PLEB is not set -# CONFIG_SA1100_SHERMAN is not set -# CONFIG_SA1100_SIMPAD is not set -# CONFIG_SA1100_PFS168 is not set -# CONFIG_SA1100_VICTOR is not set -# CONFIG_SA1100_XP860 is not set -# CONFIG_SA1100_YOPY is not set -CONFIG_SA1100_USB=y -CONFIG_SA1100_USB_NETLINK=y -CONFIG_SA1100_USB_CHAR=y - -# -# CLPS711X/EP721X Implementations -# -# CONFIG_ARCH_CDB89712 is not set -# CONFIG_ARCH_CLEP7312 is not set -# CONFIG_ARCH_EDB7211 is not set -# CONFIG_ARCH_P720T is not set -# CONFIG_ARCH_EP7211 is not set -# CONFIG_ARCH_EP7212 is not set -# CONFIG_ARCH_ACORN is not set -# CONFIG_FOOTBRIDGE is not set -# CONFIG_FOOTBRIDGE_HOST is not set -# CONFIG_FOOTBRIDGE_ADDIN is not set -CONFIG_CPU_32=y -# CONFIG_CPU_26 is not set - -# -# Processor Type -# -# CONFIG_CPU_32v3 is not set -CONFIG_CPU_32v4=y -# CONFIG_CPU_ARM610 is not set -# CONFIG_CPU_ARM710 is not set -# CONFIG_CPU_ARM720T is not set -# CONFIG_CPU_ARM920T is not set -# CONFIG_CPU_ARM1020 is not set -# CONFIG_CPU_SA110 is not set -CONFIG_CPU_SA1100=y -# CONFIG_ARM_THUMB is not set -CONFIG_DISCONTIGMEM=y - -# -# General setup -# -# CONFIG_PCI is not set -# CONFIG_ISA is not set -# CONFIG_ISA_DMA is not set -CONFIG_CPU_FREQ=y -CONFIG_HOTPLUG=y - -# -# PCMCIA/CardBus support -# -CONFIG_PCMCIA=y -# CONFIG_I82365 is not set -# CONFIG_TCIC is not set -# CONFIG_PCMCIA_CLPS6700 is not set -CONFIG_PCMCIA_SA1100=y -CONFIG_NET=y -CONFIG_SYSVIPC=y -CONFIG_BSD_PROCESS_ACCT=y -CONFIG_SYSCTL=y - -# -# At least one math emulation must be selected -# -CONFIG_FPE_NWFPE=y -# CONFIG_FPE_FASTFPE is not set -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -# CONFIG_BINFMT_AOUT is not set -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -# CONFIG_PM is not set -# CONFIG_APM is not set -# CONFIG_ARTHUR is not set -CONFIG_CMDLINE="console=ttySA0 root=/dev/mtdblock3 rw mem=32M" -# CONFIG_PFS168_CMDLINE is not set -CONFIG_LEDS=y -CONFIG_LEDS_TIMER=y -CONFIG_LEDS_CPU=y -CONFIG_ALIGNMENT_TRAP=y - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Memory Technology Devices (MTD) -# -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set -CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_REDBOOT_PARTS is not set -# CONFIG_MTD_BOOTLDR_PARTS is not set -# CONFIG_MTD_AFS_PARTS is not set - -# -# User Modules And Translation Layers -# -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -# CONFIG_NFTL is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=y -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_GEN_PROBE=y -# CONFIG_MTD_CFI_ADV_OPTIONS is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_ABSENT is not set -# CONFIG_MTD_OBSOLETE_CHIPS is not set - -# -# Mapping drivers for chip access -# -# CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_SUN_UFLASH is not set -# CONFIG_MTD_NORA is not set -# CONFIG_MTD_PNC2000 is not set -# CONFIG_MTD_RPXLITE is not set -# CONFIG_MTD_TQM8XXL is not set -# CONFIG_MTD_SC520CDP is not set -# CONFIG_MTD_NETSC520 is not set -# CONFIG_MTD_SBC_GXX is not set -# CONFIG_MTD_ELAN_104NC is not set -# CONFIG_MTD_DBOX2 is not set -# CONFIG_MTD_CSTM_MIPS_IXX is not set -# CONFIG_MTD_CFI_FLAGADM is not set -# CONFIG_MTD_SOLUTIONENGINE is not set -# CONFIG_MTD_MIXMEM is not set -# CONFIG_MTD_OCTAGON is not set -# CONFIG_MTD_VMAX is not set -# CONFIG_MTD_OCELOT is not set -# CONFIG_MTD_L440GX is not set -# CONFIG_MTD_ARM_INTEGRATOR is not set -# CONFIG_MTD_CDB89712 is not set -CONFIG_MTD_SA1100=y -# CONFIG_MTD_DC21285 is not set -# CONFIG_MTD_IQ80310 is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_LART is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLKMTD is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC1000 is not set -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOCPROBE is not set - -# -# NAND Flash Device Drivers -# -# CONFIG_MTD_NAND is not set - -# -# Plug and Play configuration -# -# CONFIG_PNP is not set -# CONFIG_ISAPNP is not set -# CONFIG_PNPBIOS is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_XD is not set -# CONFIG_PARIDE is not set -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_BLK_DEV_DAC960 is not set -CONFIG_BLK_DEV_LOOP=y -# CONFIG_BLK_DEV_NBD is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=4096 -CONFIG_BLK_DEV_INITRD=y - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set -# CONFIG_BLK_DEV_MD is not set -# CONFIG_MD_LINEAR is not set -# CONFIG_MD_RAID0 is not set -# CONFIG_MD_RAID1 is not set -# CONFIG_MD_RAID5 is not set -# CONFIG_BLK_DEV_LVM is not set - -# -# Networking options -# -CONFIG_PACKET=y -CONFIG_PACKET_MMAP=y -CONFIG_NETLINK=y -CONFIG_RTNETLINK=y -# CONFIG_NETLINK_DEV is not set -# CONFIG_NETFILTER is not set -CONFIG_FILTER=y -CONFIG_UNIX=y -CONFIG_INET=y -CONFIG_IP_MULTICAST=y -# CONFIG_IP_ADVANCED_ROUTER is not set -# CONFIG_IP_PNP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_IP_MROUTE is not set -# CONFIG_ARPD is not set -# CONFIG_INET_ECN is not set -# CONFIG_SYN_COOKIES is not set -# CONFIG_IPV6 is not set -# CONFIG_KHTTPD is not set -# CONFIG_ATM is not set - -# -# -# -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_LLC is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set -# CONFIG_ETHERTAP is not set - -# -# Ethernet (10 or 100Mbit) -# -CONFIG_NET_ETHERNET=y -# CONFIG_SUNLANCE is not set -# CONFIG_SUNBMAC is not set -# CONFIG_SUNQE is not set -# CONFIG_SUNLANCE is not set -# CONFIG_SUNGEM is not set -CONFIG_NET_VENDOR_3COM=y -# CONFIG_EL1 is not set -# CONFIG_EL2 is not set -# CONFIG_ELPLUS is not set -# CONFIG_EL16 is not set -# CONFIG_ELMC is not set -# CONFIG_ELMC_II is not set -CONFIG_CERF_CS8900A=y -# CONFIG_LANCE is not set -# CONFIG_NET_VENDOR_SMC is not set -# CONFIG_NET_VENDOR_RACAL is not set -# CONFIG_NET_ISA is not set -# CONFIG_NET_PCI is not set -# CONFIG_NET_POCKET is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_ACENIC is not set -# CONFIG_DL2K is not set -# CONFIG_MYRI_SBUS is not set -# CONFIG_NS83820 is not set -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -# CONFIG_SK98LIN is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PLIP is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set - -# -# Token Ring devices -# -# CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# PCMCIA network device support -# -CONFIG_NET_PCMCIA=y -# CONFIG_PCMCIA_3C589 is not set -# CONFIG_PCMCIA_3C574 is not set -# CONFIG_PCMCIA_FMVJ18X is not set -CONFIG_PCMCIA_PCNET=y -# CONFIG_PCMCIA_NMCLAN is not set -# CONFIG_PCMCIA_SMC91C92 is not set -# CONFIG_PCMCIA_XIRC2PS is not set -# CONFIG_ARCNET_COM20020_CS is not set -# CONFIG_PCMCIA_IBMTR is not set -# CONFIG_NET_PCMCIA_RADIO is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# ATA/IDE/MFM/RLL support -# -CONFIG_IDE=y - -# -# IDE, ATA and ATAPI Block devices -# -CONFIG_BLK_DEV_IDE=y - -# -# Please see Documentation/ide.txt for help/info on IDE drives -# -# CONFIG_BLK_DEV_HD_IDE is not set -# CONFIG_BLK_DEV_HD is not set -CONFIG_BLK_DEV_IDEDISK=y -# CONFIG_IDEDISK_MULTI_MODE is not set -CONFIG_BLK_DEV_IDECS=m -# CONFIG_BLK_DEV_IDECD is not set -# CONFIG_BLK_DEV_IDETAPE is not set -# CONFIG_BLK_DEV_IDEFLOPPY is not set -# CONFIG_BLK_DEV_IDESCSI is not set - -# -# IDE chipset support/bugfixes -# -# CONFIG_BLK_DEV_CMD640 is not set -# CONFIG_BLK_DEV_CMD640_ENHANCED is not set -# CONFIG_BLK_DEV_ISAPNP is not set -# CONFIG_IDE_CHIPSETS is not set -# CONFIG_IDEDMA_AUTO is not set -# CONFIG_BLK_DEV_ATARAID is not set -# CONFIG_BLK_DEV_ATARAID_PDC is not set -# CONFIG_BLK_DEV_ATARAID_HPT is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# I2O device support -# -# CONFIG_I2O is not set -# CONFIG_I2O_BLOCK is not set -# CONFIG_I2O_LAN is not set -# CONFIG_I2O_SCSI is not set -# CONFIG_I2O_PROC is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Input core support -# -# CONFIG_INPUT is not set -# CONFIG_INPUT_KEYBDEV is not set -# CONFIG_INPUT_MOUSEDEV is not set -# CONFIG_INPUT_JOYDEV is not set -# CONFIG_INPUT_EVDEV is not set - -# -# Character devices -# -CONFIG_VT=y -# CONFIG_VT_CONSOLE is not set -# CONFIG_SERIAL is not set -# CONFIG_SERIAL_EXTENDED is not set -# CONFIG_SERIAL_NONSTANDARD is not set - -# -# Serial drivers -# -# CONFIG_SERIAL_ANAKIN is not set -# CONFIG_SERIAL_ANAKIN_CONSOLE is not set -# CONFIG_SERIAL_AMBA is not set -# CONFIG_SERIAL_AMBA_CONSOLE is not set -# CONFIG_SERIAL_CLPS711X is not set -# CONFIG_SERIAL_CLPS711X_CONSOLE is not set -# CONFIG_SERIAL_21285 is not set -# CONFIG_SERIAL_21285_OLD is not set -# CONFIG_SERIAL_21285_CONSOLE is not set -CONFIG_SERIAL_SA1100=y -CONFIG_SERIAL_SA1100_CONSOLE=y -CONFIG_SA1100_DEFAULT_BAUDRATE=38400 -# CONFIG_SERIAL_8250 is not set -# CONFIG_SERIAL_8250_CONSOLE is not set -# CONFIG_SERIAL_8250_EXTENDED is not set -# CONFIG_SERIAL_8250_MANY_PORTS is not set -# CONFIG_SERIAL_8250_SHARE_IRQ is not set -# CONFIG_SERIAL_8250_DETECT_IRQ is not set -# CONFIG_SERIAL_8250_MULTIPORT is not set -# CONFIG_SERIAL_8250_HUB6 is not set -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=32 -CONFIG_UCB1200=y -CONFIG_TOUCHSCREEN_UCB1200=y -# CONFIG_CERF_TS_MANUAL is not set -CONFIG_AUDIO_UCB1200=y -# CONFIG_ADC_UCB1200 is not set -# CONFIG_TOUCHSCREEN_H3600 is not set -# CONFIG_PROFILER is not set -# CONFIG_PFS168_SPI is not set -# CONFIG_PFS168_DTMF is not set -# CONFIG_PFS168_MISC is not set - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# L3 serial bus support -# -# CONFIG_L3 is not set -# CONFIG_L3_ALGOBIT is not set -# CONFIG_L3_BIT_SA1100_GPIO is not set -# CONFIG_BIT_SA1100_UCB1200 is not set - -# -# Other L3 adapters -# -# CONFIG_L3_SA1111 is not set - -# -# L3 driver support -# -# CONFIG_L3_DRV_UDA1341 is not set -# CONFIG_BIT_SA1100_GPIO is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -# CONFIG_MOUSE is not set - -# -# Joysticks -# -# CONFIG_INPUT_GAMEPORT is not set - -# -# Input core support is needed for gameports -# - -# -# Input core support is needed for joysticks -# -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -# CONFIG_INTEL_RNG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -CONFIG_SA1100_RTC=y -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set -# CONFIG_SONYPI is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set - -# -# PCMCIA character devices -# - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set -# CONFIG_REISERFS_FS is not set -# CONFIG_REISERFS_CHECK is not set -# CONFIG_REISERFS_PROC_INFO is not set -# CONFIG_ADFS_FS is not set -# CONFIG_ADFS_FS_RW is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_CMS_FS is not set -# CONFIG_EXT3_FS is not set -# CONFIG_JBD is not set -# CONFIG_JBD_DEBUG is not set -CONFIG_FAT_FS=y -CONFIG_MSDOS_FS=y -CONFIG_UMSDOS_FS=y -CONFIG_VFAT_FS=y -# CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set -CONFIG_JFFS2_FS=y -CONFIG_JFFS2_FS_DEBUG=0 -# CONFIG_CRAMFS is not set -# CONFIG_TMPFS is not set -CONFIG_RAMFS=y -# CONFIG_ISO9660_FS is not set -# CONFIG_JOLIET is not set -# CONFIG_MINIX_FS is not set -# CONFIG_FREEVXFS_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS_DEBUG is not set -# CONFIG_NTFS_RW is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -# CONFIG_DEVFS_MOUNT is not set -# CONFIG_DEVFS_DEBUG is not set -CONFIG_DEVPTS_FS=y -# CONFIG_QNX4FS_FS is not set -# CONFIG_QNX4FS_RW is not set -CONFIG_ROMFS_FS=y -CONFIG_EXT2_FS=y -# CONFIG_SYSV_FS is not set -# CONFIG_UDF_FS is not set -# CONFIG_UDF_RW is not set -# CONFIG_UFS_FS is not set -# CONFIG_UFS_FS_WRITE is not set - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -# CONFIG_INTERMEZZO_FS is not set -CONFIG_NFS_FS=y -CONFIG_NFS_V3=y -# CONFIG_ROOT_NFS is not set -# CONFIG_NFSD is not set -# CONFIG_NFSD_V3 is not set -CONFIG_SUNRPC=y -CONFIG_LOCKD=y -CONFIG_LOCKD_V4=y -# CONFIG_SMB_FS is not set -# CONFIG_NCP_FS is not set -# CONFIG_NCPFS_PACKET_SIGNING is not set -# CONFIG_NCPFS_IOCTL_LOCKING is not set -# CONFIG_NCPFS_STRONG is not set -# CONFIG_NCPFS_NFS_NS is not set -# CONFIG_NCPFS_OS2_NS is not set -# CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_NLS is not set -# CONFIG_NCPFS_EXTRAS is not set - -# -# Partition Types -# -# CONFIG_PARTITION_ADVANCED is not set -CONFIG_MSDOS_PARTITION=y -# CONFIG_SMB_NLS is not set -CONFIG_NLS=y - -# -# Native Language Support -# -CONFIG_NLS_DEFAULT="iso8859-1" -# CONFIG_NLS_CODEPAGE_437 is not set -# CONFIG_NLS_CODEPAGE_737 is not set -# CONFIG_NLS_CODEPAGE_775 is not set -# CONFIG_NLS_CODEPAGE_850 is not set -# CONFIG_NLS_CODEPAGE_852 is not set -# CONFIG_NLS_CODEPAGE_855 is not set -# CONFIG_NLS_CODEPAGE_857 is not set -# CONFIG_NLS_CODEPAGE_860 is not set -# CONFIG_NLS_CODEPAGE_861 is not set -# CONFIG_NLS_CODEPAGE_862 is not set -# CONFIG_NLS_CODEPAGE_863 is not set -# CONFIG_NLS_CODEPAGE_864 is not set -# CONFIG_NLS_CODEPAGE_865 is not set -# CONFIG_NLS_CODEPAGE_866 is not set -# CONFIG_NLS_CODEPAGE_869 is not set -# CONFIG_NLS_CODEPAGE_936 is not set -# CONFIG_NLS_CODEPAGE_950 is not set -# CONFIG_NLS_CODEPAGE_932 is not set -# CONFIG_NLS_CODEPAGE_949 is not set -# CONFIG_NLS_CODEPAGE_874 is not set -# CONFIG_NLS_ISO8859_8 is not set -# CONFIG_NLS_CODEPAGE_1251 is not set -# CONFIG_NLS_ISO8859_1 is not set -# CONFIG_NLS_ISO8859_2 is not set -# CONFIG_NLS_ISO8859_3 is not set -# CONFIG_NLS_ISO8859_4 is not set -# CONFIG_NLS_ISO8859_5 is not set -# CONFIG_NLS_ISO8859_6 is not set -# CONFIG_NLS_ISO8859_7 is not set -# CONFIG_NLS_ISO8859_9 is not set -# CONFIG_NLS_ISO8859_13 is not set -# CONFIG_NLS_ISO8859_14 is not set -# CONFIG_NLS_ISO8859_15 is not set -# CONFIG_NLS_KOI8_R is not set -# CONFIG_NLS_KOI8_U is not set -# CONFIG_NLS_UTF8 is not set - -# -# Console drivers -# -CONFIG_PC_KEYMAP=y -# CONFIG_VGA_CONSOLE is not set - -# -# Frame-buffer support -# -CONFIG_FB=y -CONFIG_DUMMY_CONSOLE=y -# CONFIG_FB_ACORN is not set -# CONFIG_FB_ANAKIN is not set -# CONFIG_FB_CLPS711X is not set -# CONFIG_FB_CYBER2000 is not set -CONFIG_FB_SA1100=y -# CONFIG_CERF_LCD_38_A is not set -CONFIG_CERF_LCD_57_A=y -# CONFIG_CERF_LCD_72_A is not set -# CONFIG_FB_VIRTUAL is not set -# CONFIG_FBCON_ADVANCED is not set -CONFIG_FBCON_CFB2=y -CONFIG_FBCON_CFB4=y -CONFIG_FBCON_CFB8=y -CONFIG_FBCON_CFB16=y -# CONFIG_FBCON_FONTWIDTH8_ONLY is not set -# CONFIG_FBCON_FONTS is not set -CONFIG_FONT_8x8=y -CONFIG_FONT_8x16=y - -# -# Sound -# -# CONFIG_SOUND is not set - -# -# USB support -# -# CONFIG_USB is not set - -# -# USB Controllers -# -# CONFIG_USB_UHCI is not set -# CONFIG_USB_UHCI_ALT is not set -# CONFIG_USB_OHCI is not set -# CONFIG_USB_OHCI_SA1111 is not set - -# -# USB Device Class drivers -# -# CONFIG_USB_AUDIO is not set -# CONFIG_USB_BLUETOOTH is not set -# CONFIG_USB_STORAGE is not set -# CONFIG_USB_STORAGE_DEBUG is not set -# CONFIG_USB_STORAGE_DATAFAB is not set -# CONFIG_USB_STORAGE_FREECOM is not set -# CONFIG_USB_STORAGE_ISD200 is not set -# CONFIG_USB_STORAGE_JUMPSHOT is not set -# CONFIG_USB_STORAGE_DPCM is not set -# CONFIG_USB_STORAGE_HP8200e is not set -# CONFIG_USB_STORAGE_SDDR09 is not set -# CONFIG_USB_ACM is not set -# CONFIG_USB_PRINTER is not set - -# -# USB Human Interface Devices (HID) -# - -# -# Input core support is needed for USB HID -# - -# -# USB Imaging devices -# -# CONFIG_USB_DC2XX is not set -# CONFIG_USB_MDC800 is not set -# CONFIG_USB_SCANNER is not set -# CONFIG_USB_MICROTEK is not set -# CONFIG_USB_HPUSBSCSI is not set - -# -# USB Multimedia devices -# - -# -# Video4Linux support is needed for USB Multimedia device support -# -# CONFIG_USB_DABUSB is not set - -# -# USB Network adaptors -# -# CONFIG_USB_PLUSB is not set -# CONFIG_USB_PEGASUS is not set -# CONFIG_USB_KAWETH is not set -# CONFIG_USB_CATC is not set -# CONFIG_USB_CDCETHER is not set -# CONFIG_USB_USBNET is not set - -# -# USB port drivers -# -# CONFIG_USB_USS720 is not set - -# -# USB Serial Converter support -# -# CONFIG_USB_SERIAL is not set -# CONFIG_USB_SERIAL_GENERIC is not set -# CONFIG_USB_SERIAL_BELKIN is not set -# CONFIG_USB_SERIAL_WHITEHEAT is not set -# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set -# CONFIG_USB_SERIAL_EMPEG is not set -# CONFIG_USB_SERIAL_FTDI_SIO is not set -# CONFIG_USB_SERIAL_VISOR is not set -# CONFIG_USB_SERIAL_EDGEPORT is not set -# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set -# CONFIG_USB_SERIAL_KEYSPAN is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set -# CONFIG_USB_SERIAL_MCT_U232 is not set -# CONFIG_USB_SERIAL_PL2303 is not set -# CONFIG_USB_SERIAL_CYBERJACK is not set -# CONFIG_USB_SERIAL_OMNINET is not set - -# -# Miscellaneous USB drivers -# -# CONFIG_USB_RIO500 is not set -# CONFIG_USB_ID75 is not set - -# -# Bluetooth support -# -# CONFIG_BT is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_ERRORS=y -CONFIG_DEBUG_USER=y -# CONFIG_DEBUG_INFO is not set -CONFIG_MAGIC_SYSRQ=y -# CONFIG_NO_PGT_CACHE is not set -# CONFIG_DEBUG_LL is not set -# CONFIG_DEBUG_DC21285_PORT is not set -# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -prauN linux-2.6.0-test5/arch/arm/def-configs/clps7500 wli-2.6.0-test5-bk12-25/arch/arm/def-configs/clps7500 --- linux-2.6.0-test5/arch/arm/def-configs/clps7500 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/clps7500 1969-12-31 16:00:00.000000000 -0800 @@ -1,520 +0,0 @@ -# -# Automatically generated make config: don't edit -# -CONFIG_ARM=y -# CONFIG_EISA is not set -# CONFIG_SBUS is not set -# CONFIG_MCA is not set -CONFIG_UID16=y - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -CONFIG_OBSOLETE=y - -# -# Loadable module support -# -# CONFIG_MODULES is not set - -# -# System Type -# -# CONFIG_ARCH_ARCA5K is not set -CONFIG_ARCH_CLPS7500=y -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_FTVPCI is not set -# CONFIG_ARCH_TBOX is not set -# CONFIG_ARCH_SHARK is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_RPC is not set -# CONFIG_ARCH_SA1100 is not set -# CONFIG_ARCH_CLPS711X is not set - -# -# Archimedes/A5000 Implementations -# - -# -# Footbridge Implementations -# - -# -# SA11x0 Implementations -# - -# -# CLPS711X/EP721X Implementations -# -# CONFIG_ARCH_ACORN is not set -# CONFIG_FOOTBRIDGE is not set -# CONFIG_FOOTBRIDGE_HOST is not set -# CONFIG_FOOTBRIDGE_ADDIN is not set -CONFIG_CPU_32=y -# CONFIG_CPU_26 is not set - -# -# Processor Type -# -CONFIG_CPU_32v3=y -# CONFIG_CPU_32v4 is not set -# CONFIG_CPU_ARM610 is not set -CONFIG_CPU_ARM710=y -# CONFIG_CPU_ARM720T is not set -# CONFIG_CPU_ARM920T is not set -# CONFIG_CPU_ARM1020 is not set -# CONFIG_CPU_SA110 is not set -# CONFIG_CPU_SA1100 is not set -# CONFIG_DISCONTIGMEM is not set - -# -# General setup -# -CONFIG_ANGELBOOT=y -# CONFIG_PCI is not set -CONFIG_ISA=y -# CONFIG_ISA_DMA is not set -# CONFIG_HOTPLUG is not set -# CONFIG_PCMCIA is not set -CONFIG_NET=y -CONFIG_SYSVIPC=y -# CONFIG_BSD_PROCESS_ACCT is not set -# CONFIG_SYSCTL is not set -CONFIG_NWFPE=y -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -# CONFIG_BINFMT_AOUT is not set -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -# CONFIG_PM is not set -# CONFIG_ARTHUR is not set -CONFIG_CMDLINE="mem=16M root=nfs" -# CONFIG_ALIGNMENT_TRAP is not set - -# -# Parallel port support -# -CONFIG_PARPORT=y -CONFIG_PARPORT_PC=y -CONFIG_PARPORT_PC_FIFO=y -# CONFIG_PARPORT_PC_SUPERIO is not set -# CONFIG_PARPORT_AMIGA is not set -# CONFIG_PARPORT_MFC3 is not set -# CONFIG_PARPORT_ATARI is not set -# CONFIG_PARPORT_SUNBPP is not set -# CONFIG_PARPORT_OTHER is not set -CONFIG_PARPORT_1284=y - -# -# Memory Technology Devices (MTD) -# -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC1000 is not set -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOCPROBE is not set - -# -# RAM/ROM Device Drivers -# -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_PMC551_BUGFIX is not set -# CONFIG_MTD_PMC551_DEBUG is not set -# CONFIG_MTD_MTDRAM is not set - -# -# Linearly Mapped Flash Device Drivers -# -# CONFIG_MTD_CFI is not set -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_JEDEC is not set - -# -# Drivers for chip mappings -# - -# -# User modules and translation layers for MTD devices -# -# CONFIG_MTD_CHAR is not set -# CONFIG_MTD_BLOCK is not set -# CONFIG_FTL is not set -# CONFIG_NFTL is not set - -# -# Plug and Play configuration -# -# CONFIG_PNP is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_XD is not set -# CONFIG_PARIDE is not set -# CONFIG_BLK_DEV_LOOP is not set -CONFIG_BLK_DEV_NBD=y -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=4096 -# CONFIG_BLK_DEV_INITRD is not set -# CONFIG_BLK_DEV_FLD7500 is not set - -# -# Networking options -# -# CONFIG_PACKET is not set -# CONFIG_NETLINK is not set -# CONFIG_NETFILTER is not set -# CONFIG_FILTER is not set -CONFIG_UNIX=y -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -CONFIG_IP_PNP=y -CONFIG_IP_PNP_BOOTP=y -# CONFIG_IP_PNP_RARP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_INET_ECN is not set -# CONFIG_SYN_COOKIES is not set -# CONFIG_IPV6 is not set -# CONFIG_KHTTPD is not set -# CONFIG_ATM is not set - -# -# -# -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_LLC is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set -CONFIG_DUMMY=y -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set -# CONFIG_NET_SB1000 is not set - -# -# Ethernet (10 or 100Mbit) -# -CONFIG_NET_ETHERNET=y -# CONFIG_NET_VENDOR_3COM is not set -# CONFIG_LANCE is not set -# CONFIG_NET_VENDOR_SMC is not set -# CONFIG_NET_VENDOR_RACAL is not set -# CONFIG_AT1700 is not set -# CONFIG_DEPCA is not set -# CONFIG_HP100 is not set -# CONFIG_NET_ISA is not set -CONFIG_NET_PCI=y -# CONFIG_AC3200 is not set -# CONFIG_APRICOT is not set -CONFIG_CS89x0=y -# CONFIG_ZNET is not set -# CONFIG_NET_POCKET is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_ACENIC_OMIT_TIGON_I is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PLIP is not set -CONFIG_PPP=y -# CONFIG_PPP_MULTILINK is not set -# CONFIG_PPP_ASYNC is not set -# CONFIG_PPP_SYNC_TTY is not set -# CONFIG_PPP_DEFLATE is not set -# CONFIG_PPP_BSDCOMP is not set -# CONFIG_PPPOE is not set -CONFIG_SLIP=y -CONFIG_SLIP_COMPRESSED=y -# CONFIG_SLIP_SMART is not set -# CONFIG_SLIP_MODE_SLIP6 is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set - -# -# Token Ring devices -# -# CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set -# CONFIG_ASH is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# ATA/IDE/MFM/RLL support -# -# CONFIG_IDE is not set -# CONFIG_BLK_DEV_HD is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# I2O device support -# -# CONFIG_I2O is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Input core support -# -# CONFIG_INPUT is not set - -# -# Character devices -# -CONFIG_VT=y -CONFIG_VT_CONSOLE=y -CONFIG_SERIAL=y -# CONFIG_SERIAL_CONSOLE is not set -# CONFIG_SERIAL_EXTENDED is not set -# CONFIG_SERIAL_NONSTANDARD is not set -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=256 -CONFIG_PRINTER=y -# CONFIG_LP_CONSOLE is not set -# CONFIG_PPDEV is not set - -# -# I2C support -# -CONFIG_I2C=y -CONFIG_I2C_ALGOBIT=y -# CONFIG_I2C_PHILIPSPAR is not set -# CONFIG_I2C_ELV is not set -# CONFIG_I2C_VELLEMAN is not set -# CONFIG_I2C_ALGOPCF is not set -# CONFIG_I2C_CHARDEV is not set - -# -# Mice -# -CONFIG_BUSMOUSE=y -# CONFIG_ATIXL_BUSMOUSE is not set -# CONFIG_LOGIBUSMOUSE is not set -# CONFIG_MS_BUSMOUSE is not set -CONFIG_MOUSE=y -# CONFIG_PSMOUSE is not set -# CONFIG_82C710_MOUSE is not set -# CONFIG_PC110_PAD is not set - -# -# Joysticks -# - -# -# Game port support -# - -# -# Gameport joysticks -# - -# -# Serial port support -# - -# -# Serial port joysticks -# - -# -# Parallel port joysticks -# -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -CONFIG_CLPS7500_FLASH=y -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set -# CONFIG_ADFS_FS is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_FAT_FS is not set -# CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set -# CONFIG_CRAMFS is not set -# CONFIG_RAMFS is not set -# CONFIG_ISO9660_FS is not set -CONFIG_MINIX_FS=y -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS_DEBUG is not set -# CONFIG_NTFS_RW is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -CONFIG_DEVPTS_FS=y -# CONFIG_QNX4FS_FS is not set -# CONFIG_ROMFS_FS is not set -CONFIG_EXT2_FS=y -# CONFIG_SYSV_FS is not set -# CONFIG_UDF_FS is not set -# CONFIG_UFS_FS is not set - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -CONFIG_NFS_FS=y -# CONFIG_NFS_V3 is not set -CONFIG_ROOT_NFS=y -# CONFIG_NFSD is not set -CONFIG_SUNRPC=y -CONFIG_LOCKD=y -# CONFIG_SMB_FS is not set -# CONFIG_NCP_FS is not set - -# -# Partition Types -# -CONFIG_PARTITION_ADVANCED=y -# CONFIG_ACORN_PARTITION is not set -# CONFIG_OSF_PARTITION is not set -# CONFIG_AMIGA_PARTITION is not set -# CONFIG_ATARI_PARTITION is not set -# CONFIG_MAC_PARTITION is not set -# CONFIG_MSDOS_PARTITION is not set -# CONFIG_SGI_PARTITION is not set -# CONFIG_ULTRIX_PARTITION is not set -# CONFIG_SUN_PARTITION is not set -# CONFIG_SMB_NLS is not set -# CONFIG_NLS is not set - -# -# Console drivers -# -CONFIG_PC_KEYB=y -CONFIG_PC_KEYMAP=y -# CONFIG_VGA_CONSOLE is not set -CONFIG_FB=y - -# -# Frame-buffer support -# -CONFIG_FB=y -CONFIG_DUMMY_CONSOLE=y -CONFIG_FB_ACORN=y -# CONFIG_CHRONTEL_7003 is not set -# CONFIG_FB_VIRTUAL is not set -CONFIG_FBCON_ADVANCED=y -CONFIG_FBCON_MFB=y -CONFIG_FBCON_CFB2=y -CONFIG_FBCON_CFB4=y -CONFIG_FBCON_CFB8=y -CONFIG_FBCON_CFB16=y -CONFIG_FBCON_CFB24=y -# CONFIG_FBCON_CFB32 is not set -# CONFIG_FBCON_AFB is not set -# CONFIG_FBCON_ILBM is not set -# CONFIG_FBCON_IPLAN2P2 is not set -# CONFIG_FBCON_IPLAN2P4 is not set -# CONFIG_FBCON_IPLAN2P8 is not set -# CONFIG_FBCON_MAC is not set -# CONFIG_FBCON_VGA_PLANES is not set -# CONFIG_FBCON_VGA is not set -# CONFIG_FBCON_HGA is not set -# CONFIG_FBCON_FONTWIDTH8_ONLY is not set -# CONFIG_FBCON_FONTS is not set -CONFIG_FONT_8x8=y -CONFIG_FONT_8x16=y - -# -# Sound -# -# CONFIG_SOUND is not set - -# -# USB support -# -# CONFIG_USB is not set - -# -# Kernel hacking -# -# CONFIG_FRAME_POINTER is not set -# CONFIG_DEBUG_ERRORS is not set -# CONFIG_DEBUG_USER is not set -# CONFIG_DEBUG_INFO is not set -CONFIG_MAGIC_SYSRQ=y -CONFIG_DEBUG_LL=y diff -prauN linux-2.6.0-test5/arch/arm/def-configs/ebsa110 wli-2.6.0-test5-bk12-25/arch/arm/def-configs/ebsa110 --- linux-2.6.0-test5/arch/arm/def-configs/ebsa110 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/ebsa110 1969-12-31 16:00:00.000000000 -0800 @@ -1,605 +0,0 @@ -# -# Automatically generated make config: don't edit -# -CONFIG_ARM=y -# CONFIG_EISA is not set -# CONFIG_SBUS is not set -# CONFIG_MCA is not set -CONFIG_UID16=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y -# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -# CONFIG_OBSOLETE is not set - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODVERSIONS is not set -CONFIG_KMOD=y - -# -# System Type -# -# CONFIG_ARCH_ARCA5K is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CO285 is not set -CONFIG_ARCH_EBSA110=y -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_RPC is not set -# CONFIG_ARCH_SA1100 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_ANAKIN is not set - -# -# Archimedes/A5000 Implementations -# - -# -# Archimedes/A5000 Implementations (select only ONE) -# -# CONFIG_ARCH_ARC is not set -# CONFIG_ARCH_A5K is not set - -# -# Footbridge Implementations -# -# CONFIG_ARCH_CATS is not set -# CONFIG_ARCH_PERSONAL_SERVER is not set -# CONFIG_ARCH_EBSA285_ADDIN is not set -# CONFIG_ARCH_EBSA285_HOST is not set -# CONFIG_ARCH_NETWINDER is not set - -# -# SA11x0 Implementations -# -# CONFIG_SA1100_ASSABET is not set -# CONFIG_ASSABET_NEPONSET is not set -# CONFIG_SA1100_BRUTUS is not set -# CONFIG_SA1100_CERF is not set -# CONFIG_SA1100_BITSY is not set -# CONFIG_SA1100_EXTENEX1 is not set -# CONFIG_SA1100_FREEBIRD is not set -# CONFIG_SA1100_GRAPHICSCLIENT is not set -# CONFIG_SA1100_JORNADA720 is not set -# CONFIG_SA1100_HUW_WEBPANEL is not set -# CONFIG_SA1100_ITSY is not set -# CONFIG_SA1100_LART is not set -# CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_OMNIMETER is not set -# CONFIG_SA1100_PANGOLIN is not set -# CONFIG_SA1100_PLEB is not set -# CONFIG_SA1100_SHERMAN is not set -# CONFIG_SA1100_PFS168 is not set -# CONFIG_SA1100_VICTOR is not set -# CONFIG_SA1100_XP860 is not set -# CONFIG_SA1100_YOPY is not set - -# -# CLPS711X/EP721X Implementations -# -# CONFIG_ARCH_P720T is not set -# CONFIG_ARCH_ACORN is not set -# CONFIG_FOOTBRIDGE is not set -# CONFIG_FOOTBRIDGE_HOST is not set -# CONFIG_FOOTBRIDGE_ADDIN is not set -CONFIG_CPU_32=y -# CONFIG_CPU_26 is not set - -# -# Processor Type -# -# CONFIG_CPU_32v3 is not set -CONFIG_CPU_32v4=y -# CONFIG_CPU_ARM610 is not set -# CONFIG_CPU_ARM710 is not set -# CONFIG_CPU_ARM720T is not set -# CONFIG_CPU_ARM920T is not set -# CONFIG_CPU_ARM1020 is not set -CONFIG_CPU_SA110=y -# CONFIG_CPU_SA1100 is not set -# CONFIG_DISCONTIGMEM is not set - -# -# General setup -# -# CONFIG_PCI is not set -CONFIG_ISA=y -# CONFIG_ISA_DMA is not set -CONFIG_HOTPLUG=y - -# -# PCMCIA/CardBus support -# -CONFIG_PCMCIA=m -CONFIG_I82365=y -# CONFIG_TCIC is not set -# CONFIG_PCMCIA_CLPS6700 is not set -# CONFIG_PCMCIA_SA1100 is not set -CONFIG_NET=y -CONFIG_SYSVIPC=y -CONFIG_BSD_PROCESS_ACCT=y -CONFIG_SYSCTL=y -CONFIG_FPE_NWFPE=y -CONFIG_FPE_FASTFPE=y -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -CONFIG_BINFMT_AOUT=y -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -# CONFIG_PM is not set -# CONFIG_ARTHUR is not set -CONFIG_CMDLINE="root=/dev/nfs rw mem=16M console=ttyS1,38400n8" -CONFIG_LEDS=y -CONFIG_LEDS_TIMER=y - -# -# Parallel port support -# -CONFIG_PARPORT=y -CONFIG_PARPORT_PC=y -CONFIG_PARPORT_PC_FIFO=y -# CONFIG_PARPORT_PC_SUPERIO is not set -# CONFIG_PARPORT_PC_PCMCIA is not set -# CONFIG_PARPORT_ARC is not set -# CONFIG_PARPORT_AMIGA is not set -# CONFIG_PARPORT_MFC3 is not set -# CONFIG_PARPORT_ATARI is not set -# CONFIG_PARPORT_SUNBPP is not set -# CONFIG_PARPORT_OTHER is not set -CONFIG_PARPORT_1284=y - -# -# Plug and Play configuration -# -# CONFIG_PNP is not set -# CONFIG_ISAPNP is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_XD is not set -# CONFIG_PARIDE is not set -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_BLK_DEV_DAC960 is not set -# CONFIG_BLK_DEV_LOOP is not set -# CONFIG_BLK_DEV_NBD is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=4096 -# CONFIG_BLK_DEV_INITRD is not set - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set -# CONFIG_BLK_DEV_MD is not set -# CONFIG_MD_LINEAR is not set -# CONFIG_MD_RAID0 is not set -# CONFIG_MD_RAID1 is not set -# CONFIG_MD_RAID5 is not set -# CONFIG_BLK_DEV_LVM is not set - -# -# Networking options -# -CONFIG_PACKET=y -CONFIG_PACKET_MMAP=y -CONFIG_NETLINK=y -CONFIG_RTNETLINK=y -# CONFIG_NETLINK_DEV is not set -CONFIG_NETFILTER=y -# CONFIG_NETFILTER_DEBUG is not set -# CONFIG_FILTER is not set -CONFIG_UNIX=y -CONFIG_INET=y -CONFIG_IP_MULTICAST=y -CONFIG_IP_ADVANCED_ROUTER=y -CONFIG_RTNETLINK=y -CONFIG_NETLINK=y -CONFIG_IP_MULTIPLE_TABLES=y -CONFIG_IP_ROUTE_FWMARK=y -CONFIG_IP_ROUTE_NAT=y -# CONFIG_IP_ROUTE_MULTIPATH is not set -# CONFIG_IP_ROUTE_TOS is not set -CONFIG_IP_ROUTE_VERBOSE=y -# CONFIG_IP_ROUTE_LARGE_TABLES is not set -CONFIG_IP_PNP=y -# CONFIG_IP_PNP_DHCP is not set -CONFIG_IP_PNP_BOOTP=y -# CONFIG_IP_PNP_RARP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_IP_MROUTE is not set -# CONFIG_ARPD is not set -CONFIG_INET_ECN=y -CONFIG_SYN_COOKIES=y - -# -# IP: Netfilter Configuration -# -CONFIG_IP_NF_CONNTRACK=y -CONFIG_IP_NF_FTP=y -CONFIG_IP_NF_IRC=y -# CONFIG_IP_NF_QUEUE is not set -CONFIG_IP_NF_IPTABLES=y -CONFIG_IP_NF_MATCH_LIMIT=y -# CONFIG_IP_NF_MATCH_MAC is not set -CONFIG_IP_NF_MATCH_MARK=y -CONFIG_IP_NF_MATCH_MULTIPORT=y -CONFIG_IP_NF_MATCH_TOS=y -# CONFIG_IP_NF_MATCH_TCPMSS is not set -CONFIG_IP_NF_MATCH_STATE=y -CONFIG_IP_NF_MATCH_UNCLEAN=y -# CONFIG_IP_NF_MATCH_OWNER is not set -CONFIG_IP_NF_FILTER=y -CONFIG_IP_NF_TARGET_REJECT=y -# CONFIG_IP_NF_TARGET_MIRROR is not set -CONFIG_IP_NF_NAT=y -CONFIG_IP_NF_NAT_NEEDED=y -CONFIG_IP_NF_TARGET_MASQUERADE=y -CONFIG_IP_NF_TARGET_REDIRECT=y -CONFIG_IP_NF_NAT_IRC=y -CONFIG_IP_NF_NAT_FTP=y -CONFIG_IP_NF_MANGLE=y -CONFIG_IP_NF_TARGET_TOS=y -CONFIG_IP_NF_TARGET_MARK=y -CONFIG_IP_NF_TARGET_LOG=y -# CONFIG_IP_NF_TARGET_TCPMSS is not set -CONFIG_IPV6=y - -# -# IPv6: Netfilter Configuration -# -CONFIG_IP6_NF_IPTABLES=y -CONFIG_IP6_NF_MATCH_LIMIT=y -CONFIG_IP6_NF_MATCH_MARK=y -CONFIG_IP6_NF_FILTER=y -CONFIG_IP6_NF_MANGLE=y -CONFIG_IP6_NF_TARGET_MARK=y -# CONFIG_KHTTPD is not set -# CONFIG_ATM is not set - -# -# -# -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_LLC is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set -# CONFIG_ETHERTAP is not set -# CONFIG_NET_SB1000 is not set - -# -# Ethernet (10 or 100Mbit) -# -CONFIG_NET_ETHERNET=y -CONFIG_ARM_AM79C961A=y -# CONFIG_NET_VENDOR_3COM is not set -# CONFIG_LANCE is not set -# CONFIG_NET_VENDOR_SMC is not set -# CONFIG_NET_VENDOR_RACAL is not set -# CONFIG_AT1700 is not set -# CONFIG_DEPCA is not set -# CONFIG_HP100 is not set -# CONFIG_NET_ISA is not set -# CONFIG_NET_PCI is not set -# CONFIG_NET_POCKET is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_ACENIC is not set -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -# CONFIG_SK98LIN is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PLIP is not set -CONFIG_PPP=m -# CONFIG_PPP_MULTILINK is not set -# CONFIG_PPP_FILTER is not set -CONFIG_PPP_ASYNC=m -# CONFIG_PPP_SYNC_TTY is not set -CONFIG_PPP_DEFLATE=m -CONFIG_PPP_BSDCOMP=m -# CONFIG_PPPOE is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set - -# -# Token Ring devices -# -# CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# PCMCIA network device support -# -CONFIG_NET_PCMCIA=y -# CONFIG_PCMCIA_3C589 is not set -# CONFIG_PCMCIA_3C574 is not set -# CONFIG_PCMCIA_FMVJ18X is not set -CONFIG_PCMCIA_PCNET=m -# CONFIG_PCMCIA_NMCLAN is not set -# CONFIG_PCMCIA_SMC91C92 is not set -# CONFIG_PCMCIA_XIRC2PS is not set -# CONFIG_ARCNET_COM20020_CS is not set -# CONFIG_PCMCIA_IBMTR is not set -# CONFIG_NET_PCMCIA_RADIO is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# ATA/IDE/MFM/RLL support -# -# CONFIG_IDE is not set -# CONFIG_BLK_DEV_HD is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# I2O device support -# -# CONFIG_I2O is not set -# CONFIG_I2O_BLOCK is not set -# CONFIG_I2O_LAN is not set -# CONFIG_I2O_SCSI is not set -# CONFIG_I2O_PROC is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Input core support -# -# CONFIG_INPUT is not set - -# -# Character devices -# -# CONFIG_VT is not set -CONFIG_SERIAL=y -CONFIG_SERIAL_CONSOLE=y -CONFIG_SERIAL_EXTENDED=y -# CONFIG_SERIAL_MANY_PORTS is not set -# CONFIG_SERIAL_SHARE_IRQ is not set -# CONFIG_SERIAL_DETECT_IRQ is not set -# CONFIG_SERIAL_MULTIPORT is not set -# CONFIG_HUB6 is not set -# CONFIG_SERIAL_NONSTANDARD is not set -# CONFIG_SERIAL_21285 is not set -# CONFIG_SERIAL_21285_OLD is not set -# CONFIG_SERIAL_21285_CONSOLE is not set -# CONFIG_SERIAL_SA1100 is not set -# CONFIG_SERIAL_SA1100_CONSOLE is not set -# CONFIG_SERIAL_AMBA is not set -# CONFIG_SERIAL_AMBA_CONSOLE is not set -# CONFIG_SERIAL_CLPS711X is not set -# CONFIG_SERIAL_CLPS711X_CONSOLE is not set -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=256 -CONFIG_PRINTER=m -# CONFIG_LP_CONSOLE is not set -# CONFIG_PPDEV is not set - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -# CONFIG_MOUSE is not set - -# -# Joysticks -# -# CONFIG_JOYSTICK is not set - -# -# Input core support is needed for joysticks -# -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -CONFIG_WATCHDOG=y -# CONFIG_WATCHDOG_NOWAYOUT is not set -CONFIG_SOFT_WATCHDOG=y -# CONFIG_WDT is not set -# CONFIG_WDTPCI is not set -# CONFIG_PCWATCHDOG is not set -# CONFIG_ACQUIRE_WDT is not set -# CONFIG_ADVANTECH_WDT is not set -# CONFIG_60XX_WDT is not set -# CONFIG_MIXCOMWD is not set -# CONFIG_I810_TCO is not set -# CONFIG_MACHZ_WDT is not set -# CONFIG_INTEL_RNG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set - -# -# PCMCIA character devices -# -# CONFIG_PCMCIA_SERIAL_CS is not set - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -CONFIG_AUTOFS4_FS=y -# CONFIG_REISERFS_FS is not set -# CONFIG_REISERFS_CHECK is not set -# CONFIG_ADFS_FS is not set -# CONFIG_ADFS_FS_RW is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_FAT_FS is not set -# CONFIG_MSDOS_FS is not set -# CONFIG_UMSDOS_FS is not set -# CONFIG_VFAT_FS is not set -# CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set -# CONFIG_JFFS2_FS is not set -# CONFIG_CRAMFS is not set -# CONFIG_TMPFS is not set -# CONFIG_RAMFS is not set -# CONFIG_ISO9660_FS is not set -# CONFIG_JOLIET is not set -CONFIG_MINIX_FS=y -# CONFIG_VXFS_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS_DEBUG is not set -# CONFIG_NTFS_RW is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -# CONFIG_DEVFS_MOUNT is not set -# CONFIG_DEVFS_DEBUG is not set -CONFIG_DEVPTS_FS=y -# CONFIG_QNX4FS_FS is not set -# CONFIG_QNX4FS_RW is not set -# CONFIG_ROMFS_FS is not set -# CONFIG_EXT2_FS is not set -# CONFIG_SYSV_FS is not set -# CONFIG_SYSV_FS_WRITE is not set -# CONFIG_UDF_FS is not set -# CONFIG_UDF_RW is not set -# CONFIG_UFS_FS is not set -# CONFIG_UFS_FS_WRITE is not set - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -CONFIG_NFS_FS=y -# CONFIG_NFS_V3 is not set -CONFIG_ROOT_NFS=y -# CONFIG_NFSD is not set -# CONFIG_NFSD_V3 is not set -CONFIG_SUNRPC=y -CONFIG_LOCKD=y -# CONFIG_SMB_FS is not set -# CONFIG_NCP_FS is not set -# CONFIG_NCPFS_PACKET_SIGNING is not set -# CONFIG_NCPFS_IOCTL_LOCKING is not set -# CONFIG_NCPFS_STRONG is not set -# CONFIG_NCPFS_NFS_NS is not set -# CONFIG_NCPFS_OS2_NS is not set -# CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_NLS is not set -# CONFIG_NCPFS_EXTRAS is not set - -# -# Partition Types -# -CONFIG_PARTITION_ADVANCED=y -# CONFIG_ACORN_PARTITION is not set -# CONFIG_OSF_PARTITION is not set -# CONFIG_AMIGA_PARTITION is not set -# CONFIG_ATARI_PARTITION is not set -# CONFIG_MAC_PARTITION is not set -# CONFIG_MSDOS_PARTITION is not set -# CONFIG_SGI_PARTITION is not set -# CONFIG_ULTRIX_PARTITION is not set -# CONFIG_SUN_PARTITION is not set -# CONFIG_SMB_NLS is not set -# CONFIG_NLS is not set - -# -# USB support -# -# CONFIG_USB is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_ERRORS=y -# CONFIG_DEBUG_USER is not set -# CONFIG_DEBUG_INFO is not set -CONFIG_MAGIC_SYSRQ=y -# CONFIG_NO_PGT_CACHE is not set -# CONFIG_DEBUG_LL is not set -# CONFIG_DEBUG_DC21285_PORT is not set -# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -prauN linux-2.6.0-test5/arch/arm/def-configs/edb7211 wli-2.6.0-test5-bk12-25/arch/arm/def-configs/edb7211 --- linux-2.6.0-test5/arch/arm/def-configs/edb7211 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/edb7211 1969-12-31 16:00:00.000000000 -0800 @@ -1,401 +0,0 @@ -# -# Automatically generated by make menuconfig: don't edit -# -CONFIG_ARM=y -# CONFIG_EISA is not set -# CONFIG_SBUS is not set -# CONFIG_MCA is not set -CONFIG_UID16=y - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -# CONFIG_OBSOLETE is not set - -# -# Loadable module support -# -# CONFIG_MODULES is not set - -# -# System Type -# -# CONFIG_ARCH_ARCA5K is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_RPC is not set -# CONFIG_ARCH_SA1100 is not set -CONFIG_ARCH_CLPS711X=y - -# -# Archimedes/A5000 Implementations -# - -# -# Footbridge Implementations -# - -# -# SA11x0 Implementations -# - -# -# CLPS711X/EP721X Implementations -# -CONFIG_ARCH_EDB7211=y -CONFIG_EP7211_BOOT_MODE=y -# CONFIG_ARCH_P720T is not set -# CONFIG_ARCH_ACORN is not set -CONFIG_ARCH_EP7211=y -# CONFIG_ARCH_EP7212 is not set -# CONFIG_FOOTBRIDGE is not set -# CONFIG_FOOTBRIDGE_HOST is not set -# CONFIG_FOOTBRIDGE_ADDIN is not set -CONFIG_CPU_32=y -# CONFIG_CPU_26 is not set -# CONFIG_CPU_32v3 is not set -CONFIG_CPU_32v4=y -# CONFIG_CPU_ARM610 is not set -# CONFIG_CPU_ARM710 is not set -CONFIG_CPU_ARM720T=y -# CONFIG_CPU_ARM920T is not set -# CONFIG_CPU_ARM1020 is not set -# CONFIG_CPU_SA110 is not set -# CONFIG_CPU_SA1100 is not set -CONFIG_DISCONTIGMEM=y - -# -# General setup -# -# CONFIG_ANGELBOOT is not set -# CONFIG_PCI is not set -# CONFIG_ISA is not set -# CONFIG_ISA_DMA is not set -# CONFIG_HOTPLUG is not set -# CONFIG_PCMCIA is not set -CONFIG_NET=y -CONFIG_SYSVIPC=y -# CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_SYSCTL=y -CONFIG_NWFPE=y -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -# CONFIG_BINFMT_AOUT is not set -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -# CONFIG_PM is not set -# CONFIG_ARTHUR is not set -CONFIG_ALIGNMENT_TRAP=y - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Memory Technology Devices (MTD) -# -# CONFIG_MTD is not set - -# -# Plug and Play configuration -# -# CONFIG_PNP is not set -# CONFIG_ISAPNP is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_XD is not set -# CONFIG_PARIDE is not set -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_BLK_DEV_DAC960 is not set -# CONFIG_BLK_DEV_LOOP is not set -# CONFIG_BLK_DEV_NBD is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=4096 -CONFIG_BLK_DEV_INITRD=y - -# -# Networking options -# -CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set -# CONFIG_NETLINK is not set -# CONFIG_NETFILTER is not set -# CONFIG_FILTER is not set -CONFIG_UNIX=y -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -# CONFIG_IP_PNP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_INET_ECN is not set -# CONFIG_SYN_COOKIES is not set -# CONFIG_IPV6 is not set -# CONFIG_KHTTPD is not set -# CONFIG_ATM is not set -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_LLC is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set -# CONFIG_NET_SB1000 is not set - -# -# Ethernet (10 or 100Mbit) -# -# CONFIG_NET_ETHERNET is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_ACENIC is not set -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -# CONFIG_SK98LIN is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set - -# -# Token Ring devices -# -# CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# ATA/IDE/MFM/RLL support -# -# CONFIG_IDE is not set -# CONFIG_BLK_DEV_HD is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# I2O device support -# -# CONFIG_I2O is not set -# CONFIG_I2O_BLOCK is not set -# CONFIG_I2O_LAN is not set -# CONFIG_I2O_SCSI is not set -# CONFIG_I2O_PROC is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Input core support -# -# CONFIG_INPUT is not set - -# -# Character devices -# -# CONFIG_VT is not set -# CONFIG_SERIAL is not set -# CONFIG_SERIAL_EXTENDED is not set -# CONFIG_SERIAL_NONSTANDARD is not set -CONFIG_SERIAL_CLPS711X=y -CONFIG_SERIAL_CLPS711X_CONSOLE=y -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=256 - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -# CONFIG_MOUSE is not set - -# -# Joysticks -# -# CONFIG_JOYSTICK is not set -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -# CONFIG_INTEL_RNG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set -# CONFIG_ADFS_FS is not set -# CONFIG_ADFS_FS_RW is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_FAT_FS is not set -# CONFIG_MSDOS_FS is not set -# CONFIG_UMSDOS_FS is not set -# CONFIG_VFAT_FS is not set -# CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set -# CONFIG_CRAMFS is not set -CONFIG_RAMFS=y -# CONFIG_ISO9660_FS is not set -# CONFIG_JOLIET is not set -CONFIG_MINIX_FS=y -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS_DEBUG is not set -# CONFIG_NTFS_RW is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -# CONFIG_DEVFS_MOUNT is not set -# CONFIG_DEVFS_DEBUG is not set -CONFIG_DEVPTS_FS=y -# CONFIG_QNX4FS_FS is not set -# CONFIG_QNX4FS_RW is not set -# CONFIG_ROMFS_FS is not set -CONFIG_EXT2_FS=y -# CONFIG_SYSV_FS is not set -# CONFIG_SYSV_FS_WRITE is not set -# CONFIG_UDF_FS is not set -# CONFIG_UDF_RW is not set -# CONFIG_UFS_FS is not set -# CONFIG_UFS_FS_WRITE is not set - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -# CONFIG_NFS_FS is not set -# CONFIG_NFS_V3 is not set -# CONFIG_ROOT_NFS is not set -# CONFIG_NFSD is not set -# CONFIG_NFSD_V3 is not set -# CONFIG_SUNRPC is not set -# CONFIG_LOCKD is not set -# CONFIG_SMB_FS is not set -# CONFIG_NCP_FS is not set -# CONFIG_NCPFS_PACKET_SIGNING is not set -# CONFIG_NCPFS_IOCTL_LOCKING is not set -# CONFIG_NCPFS_STRONG is not set -# CONFIG_NCPFS_NFS_NS is not set -# CONFIG_NCPFS_OS2_NS is not set -# CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_NLS is not set -# CONFIG_NCPFS_EXTRAS is not set - -# -# Partition Types -# -CONFIG_PARTITION_ADVANCED=y -# CONFIG_ACORN_PARTITION is not set -# CONFIG_OSF_PARTITION is not set -# CONFIG_AMIGA_PARTITION is not set -# CONFIG_ATARI_PARTITION is not set -# CONFIG_MAC_PARTITION is not set -# CONFIG_MSDOS_PARTITION is not set -# CONFIG_SGI_PARTITION is not set -# CONFIG_ULTRIX_PARTITION is not set -# CONFIG_SUN_PARTITION is not set -# CONFIG_SMB_NLS is not set -# CONFIG_NLS is not set - -# -# USB support -# -# CONFIG_USB is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_ERRORS=y -CONFIG_DEBUG_USER=y -# CONFIG_DEBUG_INFO is not set -CONFIG_MAGIC_SYSRQ=y -CONFIG_DEBUG_LL=y diff -prauN linux-2.6.0-test5/arch/arm/def-configs/empeg wli-2.6.0-test5-bk12-25/arch/arm/def-configs/empeg --- linux-2.6.0-test5/arch/arm/def-configs/empeg 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/empeg 1969-12-31 16:00:00.000000000 -0800 @@ -1,265 +0,0 @@ -# -# -# Example empeg-car kernel configuration file. -# -CONFIG_ARM=y - -# -# System and processor type -# -# CONFIG_ARCH_ARC is not set -# CONFIG_ARCH_A5K is not set -# CONFIG_ARCH_RPC is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_FOOTBRIDGE is not set -CONFIG_ARCH_SA1100=y -CONFIG_CPU_SA1100=y -# CONFIG_SA1100_BRUTUS is not set -CONFIG_SA1100_EMPEG=y -# CONFIG_SA1100_ITSY is not set -# CONFIG_SA1100_PLEB is not set -# CONFIG_SA1100_VICTOR is not set -# CONFIG_EMPEG_HENRY is not set -# CONFIG_ARCH_ACORN is not set -# CONFIG_ISA_DMA is not set -CONFIG_CPU_32=y -# CONFIG_CPU_26 is not set -# CONFIG_CPU_ARM2 is not set -# CONFIG_CPU_ARM3 is not set -# CONFIG_CPU_ARM6 is not set -# CONFIG_CPU_ARM7 is not set -CONFIG_CPU_SA110=y - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -# CONFIG_ALIGNMENT_TRAP is not set -# CONFIG_TEXT_SECTIONS is not set - -# -# Loadable module support -# -CONFIG_MODULES=y -CONFIG_MODVERSIONS=y -# CONFIG_KMOD is not set - -# -# General setup -# -CONFIG_NET=y -# CONFIG_SYSVIPC is not set -# CONFIG_BSD_PROCESS_ACCT is not set -# CONFIG_SYSCTL is not set -CONFIG_NWFPE=y -CONFIG_BINFMT_AOUT=y -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -# CONFIG_ARTHUR is not set -# CONFIG_PARPORT is not set -CONFIG_CMDLINE="mem=4M@0xc0000000 mem=4M@0xc8000000 root=/dev/hda1 initrd=0xd00b0000,320K" - -# -# Plug and Play support -# -# CONFIG_PNP is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -CONFIG_BLK_DEV_IDE=y -# CONFIG_BLK_DEV_HD_IDE is not set -CONFIG_BLK_DEV_IDEDISK=y -# CONFIG_BLK_DEV_IDECD is not set -# CONFIG_BLK_DEV_IDETAPE is not set -# CONFIG_BLK_DEV_IDEFLOPPY is not set -# CONFIG_BLK_DEV_IDESCSI is not set -# CONFIG_BLK_DEV_CMD640 is not set -# CONFIG_IDE_CHIPSETS is not set -# CONFIG_BLK_DEV_LOOP is not set -# CONFIG_BLK_DEV_NBD is not set -# CONFIG_BLK_DEV_MD is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_INITRD=y -# CONFIG_BLK_DEV_XD is not set -CONFIG_PARIDE_PARPORT=y -# CONFIG_PARIDE is not set -# CONFIG_BLK_DEV_HD is not set - -# -# Character devices -# -# CONFIG_VT is not set -CONFIG_SERIAL_SA1100=y -CONFIG_SERIAL_SA1100_CONSOLE=y -# CONFIG_SERIAL is not set -# CONFIG_SERIAL_EXTENDED is not set -# CONFIG_SERIAL_NONSTANDARD is not set -# CONFIG_UNIX98_PTYS is not set -# CONFIG_MOUSE is not set -# CONFIG_QIC02_TAPE is not set -# CONFIG_WATCHDOG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -CONFIG_EMPEG_IR=y -CONFIG_EMPEG_USB=y - -# -# Video For Linux -# -CONFIG_VIDEO_DEV=y -# CONFIG_RADIO_RTRACK is not set -# CONFIG_RADIO_RTRACK2 is not set -# CONFIG_RADIO_AZTECH is not set -# CONFIG_RADIO_CADET is not set -# CONFIG_RADIO_MIROPCM20 is not set -# CONFIG_RADIO_GEMTEK is not set -CONFIG_RADIO_EMPEG=y -# CONFIG_VIDEO_BT848 is not set -# CONFIG_VIDEO_PMS is not set -# CONFIG_VIDEO_SAA5249 is not set -# CONFIG_RADIO_SF16FMI is not set -# CONFIG_RADIO_TYPHOON is not set -# CONFIG_RADIO_ZOLTRIX is not set - -# -# Joystick support -# -# CONFIG_JOYSTICK is not set -# CONFIG_DTLK is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set - -# -# Networking options -# -# CONFIG_PACKET is not set -# CONFIG_NETLINK is not set -# CONFIG_FIREWALL is not set -# CONFIG_FILTER is not set -# CONFIG_UNIX is not set -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -# CONFIG_IP_PNP is not set -# CONFIG_IP_ROUTER is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_IP_ALIAS is not set -# CONFIG_SYN_COOKIES is not set -# CONFIG_INET_RARP is not set -# CONFIG_SKB_LARGE is not set -# CONFIG_IPV6 is not set -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_BRIDGE is not set -# CONFIG_LLC is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set -# CONFIG_CPU_IS_SLOW is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA subsystem support -# -# CONFIG_IRDA is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y -# CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_EQUALIZER is not set -# CONFIG_NET_ETHERNET is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_DLCI is not set -CONFIG_PPP=y -# CONFIG_SLIP is not set -# CONFIG_NET_RADIO is not set -# CONFIG_TR is not set -# CONFIG_SHAPER is not set -# CONFIG_HOSTESS_SV11 is not set -# CONFIG_COSA is not set -# CONFIG_RCPCI is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# Filesystems -# -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_ADFS_FS is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_FAT_FS is not set -# CONFIG_MSDOS_FS is not set -# CONFIG_UMSDOS_FS is not set -# CONFIG_VFAT_FS is not set -# CONFIG_ISO9660_FS is not set -# CONFIG_JOLIET is not set -# CONFIG_MINIX_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_QNX4FS_FS is not set -# CONFIG_ROMFS_FS is not set -CONFIG_EXT2_FS=y -# CONFIG_SYSV_FS is not set -# CONFIG_UFS_FS is not set - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -# CONFIG_NFS_FS is not set -# CONFIG_NFSD is not set -# CONFIG_SUNRPC is not set -# CONFIG_LOCKD is not set -# CONFIG_SMB_FS is not set -# CONFIG_NCP_FS is not set - -# -# Partition Types -# -# CONFIG_OSF_PARTITION is not set -# CONFIG_MAC_PARTITION is not set -CONFIG_MSDOS_PARTITION=y -# CONFIG_SGI_PARTITION is not set -# CONFIG_SUN_PARTITION is not set -# CONFIG_AMIGA_PARTITION is not set -# CONFIG_ACORN_PARTITION is not set -# CONFIG_NLS is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_ERRORS=y -CONFIG_DEBUG_USER=y -CONFIG_DEBUG_USER_BACKTRACE=y -# CONFIG_DEBUG_INFO is not set -# CONFIG_MAGIC_SYSRQ is not set -# CONFIG_DEBUG_LL is not set diff -prauN linux-2.6.0-test5/arch/arm/def-configs/epxa10db wli-2.6.0-test5-bk12-25/arch/arm/def-configs/epxa10db --- linux-2.6.0-test5/arch/arm/def-configs/epxa10db 2003-09-08 12:49:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/epxa10db 1969-12-31 16:00:00.000000000 -0800 @@ -1,566 +0,0 @@ -# -# Automatically generated make config: don't edit -# -CONFIG_ARM=y -CONFIG_MMU=y -CONFIG_SWAP=y -CONFIG_UID16=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y - -# -# General setup -# -CONFIG_SYSVIPC=y -# CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_SYSCTL=y -CONFIG_LOG_BUF_SHIFT=14 - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODULE_UNLOAD is not set -CONFIG_OBSOLETE_MODPARM=y -# CONFIG_KMOD is not set - -# -# System Type -# -# CONFIG_ARCH_ADIFCC is not set -# CONFIG_ARCH_ANAKIN is not set -# CONFIG_ARCH_ARCA5K is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_PXA is not set -# CONFIG_ARCH_EBSA110 is not set -CONFIG_ARCH_CAMELOT=y -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_IOP310 is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_RPC is not set -# CONFIG_ARCH_SA1100 is not set -# CONFIG_ARCH_SHARK is not set - -# -# Archimedes/A5000 Implementations -# - -# -# Archimedes/A5000 Implementations (select only ONE) -# - -# -# CLPS711X/EP721X Implementations -# - -# -# Epxa10db -# - -# -# PLD hotswap support -# -CONFIG_PLD=y -# CONFIG_PLD_HOTSWAP is not set - -# -# Footbridge Implementations -# - -# -# IOP310 Implementation Options -# - -# -# IOP310 Chipset Features -# - -# -# Intel PXA250/210 Implementations -# - -# -# SA11x0 Implementations -# - -# -# Processor Type -# -CONFIG_CPU_32=y -CONFIG_CPU_ARM922T=y -CONFIG_CPU_32v4=y - -# -# Processor Features -# -# CONFIG_ARM_THUMB is not set -# CONFIG_CPU_ICACHE_DISABLE is not set -# CONFIG_CPU_DCACHE_DISABLE is not set -# CONFIG_CPU_DCACHE_WRITETHROUGH is not set - -# -# General setup -# -# CONFIG_ZBOOT_ROM is not set -CONFIG_ZBOOT_ROM_TEXT=0 -CONFIG_ZBOOT_ROM_BSS=0 -# CONFIG_HOTPLUG is not set - -# -# At least one math emulation must be selected -# -CONFIG_FPE_NWFPE=y -# CONFIG_FPE_FASTFPE is not set -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -CONFIG_BINFMT_AOUT=y -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -# CONFIG_PM is not set -# CONFIG_PREEMPT is not set -# CONFIG_ARTHUR is not set -CONFIG_CMDLINE="mem=32M console=ttyUA0,38400 root=/dev/mtdblock0 rw" -CONFIG_ALIGNMENT_TRAP=y - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Memory Technology Devices (MTD) -# -CONFIG_MTD=y -CONFIG_MTD_DEBUG=y -CONFIG_MTD_DEBUG_VERBOSE=0 -CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_CONCAT is not set -# CONFIG_MTD_REDBOOT_PARTS is not set -# CONFIG_MTD_CMDLINE_PARTS is not set -# CONFIG_MTD_AFS_PARTS is not set - -# -# User Modules And Translation Layers -# -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -# CONFIG_NFTL is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=y -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_GEN_PROBE=y -# CONFIG_MTD_CFI_ADV_OPTIONS is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_ABSENT is not set -# CONFIG_MTD_OBSOLETE_CHIPS is not set - -# -# Mapping drivers for chip access -# -# CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_NORA is not set -# CONFIG_MTD_ARM_INTEGRATOR is not set -CONFIG_MTD_EPXA10DB=y -# CONFIG_MTD_EDB7312 is not set -# CONFIG_MTD_UCLINUX is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLKMTD is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC1000 is not set -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set - -# -# NAND Flash Device Drivers -# -# CONFIG_MTD_NAND is not set - -# -# Plug and Play support -# -# CONFIG_PNP is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_LOOP is not set -# CONFIG_BLK_DEV_NBD is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=8192 -# CONFIG_BLK_DEV_INITRD is not set - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set - -# -# Networking support -# -CONFIG_NET=y - -# -# Networking options -# -CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set -# CONFIG_NETLINK_DEV is not set -# CONFIG_NETFILTER is not set -# CONFIG_FILTER is not set -CONFIG_UNIX=y -# CONFIG_NET_KEY is not set -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -CONFIG_IP_PNP=y -CONFIG_IP_PNP_DHCP=y -CONFIG_IP_PNP_BOOTP=y -# CONFIG_IP_PNP_RARP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_ARPD is not set -# CONFIG_INET_ECN is not set -# CONFIG_SYN_COOKIES is not set -# CONFIG_INET_AH is not set -# CONFIG_INET_ESP is not set -# CONFIG_XFRM_USER is not set -# CONFIG_IPV6 is not set - -# -# SCTP Configuration (EXPERIMENTAL) -# -CONFIG_IPV6_SCTP__=y -# CONFIG_IP_SCTP is not set -# CONFIG_ATM is not set -# CONFIG_VLAN_8021Q is not set -# CONFIG_LLC is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network testing -# -# CONFIG_NET_PKTGEN is not set -CONFIG_NETDEVICES=y -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set -# CONFIG_ETHERTAP is not set - -# -# Ethernet (10 or 100Mbit) -# -CONFIG_NET_ETHERNET=y -CONFIG_ETHER00=m - -# -# Ethernet (1000 Mbit) -# -CONFIG_PPP=y -CONFIG_PPP_MULTILINK=y -CONFIG_PPP_ASYNC=y -CONFIG_PPP_SYNC_TTY=y -# CONFIG_PPP_DEFLATE is not set -# CONFIG_PPP_BSDCOMP is not set -# CONFIG_PPPOE is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set - -# -# Token Ring devices (depends on LLC=y) -# -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# ATA/ATAPI/MFM/RLL support -# -# CONFIG_IDE is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# I2O device support -# -# CONFIG_I2O is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN_BOOL is not set - -# -# Input device support -# -# CONFIG_INPUT is not set - -# -# Userland interfaces -# - -# -# Input I/O drivers -# -# CONFIG_GAMEPORT is not set -CONFIG_SOUND_GAMEPORT=y -# CONFIG_SERIO is not set - -# -# Input Device Drivers -# - -# -# Character devices -# -# CONFIG_SERIAL_NONSTANDARD is not set - -# -# Serial drivers -# -# CONFIG_SERIAL_8250 is not set - -# -# Non-8250 serial port support -# -# CONFIG_SERIAL_DZ is not set -CONFIG_SERIAL_UART00=y -CONFIG_SERIAL_UART00_CONSOLE=y -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=256 - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# I2C Hardware Sensors Mainboard support -# - -# -# I2C Hardware Sensors Chip support -# - -# -# L3 serial bus support -# -# CONFIG_L3 is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -# CONFIG_QIC02_TAPE is not set - -# -# IPMI -# -# CONFIG_IPMI_HANDLER is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -# CONFIG_GEN_RTC is not set -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set -# CONFIG_RAW_DRIVER is not set - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set -# CONFIG_REISERFS_FS is not set -# CONFIG_ADFS_FS is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BEFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_EXT3_FS is not set -# CONFIG_JBD is not set -# CONFIG_FAT_FS is not set -# CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set -CONFIG_JFFS2_FS=y -CONFIG_JFFS2_FS_DEBUG=0 -# CONFIG_JFFS2_FS_NAND is not set -# CONFIG_CRAMFS is not set -CONFIG_TMPFS=y -CONFIG_RAMFS=y -# CONFIG_ISO9660_FS is not set -# CONFIG_JFS_FS is not set -# CONFIG_MINIX_FS is not set -# CONFIG_VXFS_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -CONFIG_DEVPTS_FS=y -# CONFIG_QNX4FS_FS is not set -CONFIG_ROMFS_FS=y -CONFIG_EXT2_FS=y -# CONFIG_EXT2_FS_XATTR is not set -# CONFIG_SYSV_FS is not set -# CONFIG_UDF_FS is not set -# CONFIG_UFS_FS is not set -# CONFIG_XFS_FS is not set - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -# CONFIG_INTERMEZZO_FS is not set -CONFIG_NFS_FS=y -# CONFIG_NFS_V3 is not set -# CONFIG_NFS_V4 is not set -# CONFIG_ROOT_NFS is not set -# CONFIG_NFSD is not set -CONFIG_SUNRPC=y -# CONFIG_SUNRPC_GSS is not set -CONFIG_LOCKD=y -# CONFIG_EXPORTFS is not set -# CONFIG_CIFS is not set -# CONFIG_SMB_FS is not set -# CONFIG_NCP_FS is not set -# CONFIG_AFS_FS is not set - -# -# Partition Types -# -# CONFIG_PARTITION_ADVANCED is not set - -# -# Graphics support -# -# CONFIG_FB is not set - -# -# Console display driver support -# -# CONFIG_VGA_CONSOLE is not set -# CONFIG_MDA_CONSOLE is not set -CONFIG_DUMMY_CONSOLE=y - -# -# Misc devices -# - -# -# Multimedia Capabilities Port drivers -# -# CONFIG_MCP is not set - -# -# Console Switches -# -# CONFIG_SWITCHES is not set - -# -# USB support -# - -# -# Bluetooth support -# -# CONFIG_BT is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -# CONFIG_DEBUG_USER is not set -# CONFIG_DEBUG_INFO is not set -# CONFIG_DEBUG_KERNEL is not set - -# -# Security options -# -# CONFIG_SECURITY is not set - -# -# Cryptographic options -# -# CONFIG_CRYPTO is not set - -# -# Library routines -# -# CONFIG_CRC32 is not set -CONFIG_ZLIB_INFLATE=y -CONFIG_ZLIB_DEFLATE=y diff -prauN linux-2.6.0-test5/arch/arm/def-configs/flexanet wli-2.6.0-test5-bk12-25/arch/arm/def-configs/flexanet --- linux-2.6.0-test5/arch/arm/def-configs/flexanet 2003-09-08 12:50:32.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/flexanet 1969-12-31 16:00:00.000000000 -0800 @@ -1,900 +0,0 @@ -# -# Automatically generated make config: don't edit -# -CONFIG_ARM=y -# CONFIG_EISA is not set -# CONFIG_SBUS is not set -# CONFIG_MCA is not set -CONFIG_UID16=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y -# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set -# CONFIG_GENERIC_BUST_SPINLOCK is not set -# CONFIG_GENERIC_ISA_DMA is not set - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -# CONFIG_OBSOLETE is not set - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODVERSIONS is not set -# CONFIG_KMOD is not set - -# -# System Type -# -# CONFIG_ARCH_ANAKIN is not set -# CONFIG_ARCH_ARCA5K is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_CAMELOT is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_RPC is not set -CONFIG_ARCH_SA1100=y -# CONFIG_ARCH_SHARK is not set - -# -# Archimedes/A5000 Implementations -# - -# -# Archimedes/A5000 Implementations (select only ONE) -# -# CONFIG_ARCH_ARC is not set -# CONFIG_ARCH_A5K is not set - -# -# Footbridge Implementations -# -# CONFIG_ARCH_CATS is not set -# CONFIG_ARCH_PERSONAL_SERVER is not set -# CONFIG_ARCH_EBSA285_ADDIN is not set -# CONFIG_ARCH_EBSA285_HOST is not set -# CONFIG_ARCH_NETWINDER is not set - -# -# SA11x0 Implementations -# -# CONFIG_SA1100_ASSABET is not set -# CONFIG_ASSABET_NEPONSET is not set -# CONFIG_SA1100_ADSBITSY is not set -# CONFIG_SA1100_BRUTUS is not set -# CONFIG_SA1100_CERF is not set -# CONFIG_SA1100_H3600 is not set -# CONFIG_SA1100_EXTENEX1 is not set -CONFIG_SA1100_FLEXANET=y -# CONFIG_SA1100_FREEBIRD is not set -# CONFIG_SA1100_GRAPHICSCLIENT is not set -# CONFIG_SA1100_GRAPHICSMASTER is not set -# CONFIG_SA1100_JORNADA720 is not set -# CONFIG_SA1100_HUW_WEBPANEL is not set -# CONFIG_SA1100_ITSY is not set -# CONFIG_SA1100_LART is not set -# CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_OMNIMETER is not set -# CONFIG_SA1100_PANGOLIN is not set -# CONFIG_SA1100_PLEB is not set -# CONFIG_SA1100_SHANNON is not set -# CONFIG_SA1100_SHERMAN is not set -# CONFIG_SA1100_SIMPAD is not set -# CONFIG_SA1100_PFS168 is not set -# CONFIG_SA1100_VICTOR is not set -# CONFIG_SA1100_XP860 is not set -# CONFIG_SA1100_YOPY is not set -CONFIG_SA1100_USB=y -CONFIG_SA1100_USB_NETLINK=y -# CONFIG_SA1100_USB_CHAR is not set - -# -# CLPS711X/EP721X Implementations -# -# CONFIG_ARCH_AUTCPU12 is not set -# CONFIG_ARCH_CDB89712 is not set -# CONFIG_ARCH_CLEP7312 is not set -# CONFIG_ARCH_EDB7211 is not set -# CONFIG_ARCH_P720T is not set -# CONFIG_ARCH_EP7211 is not set -# CONFIG_ARCH_EP7212 is not set -# CONFIG_ARCH_ACORN is not set -# CONFIG_FOOTBRIDGE is not set -# CONFIG_FOOTBRIDGE_HOST is not set -# CONFIG_FOOTBRIDGE_ADDIN is not set -CONFIG_CPU_32=y -# CONFIG_CPU_26 is not set - -# -# Processor Type -# -# CONFIG_CPU_32v3 is not set -CONFIG_CPU_32v4=y -# CONFIG_CPU_ARM610 is not set -# CONFIG_CPU_ARM710 is not set -# CONFIG_CPU_ARM720T is not set -# CONFIG_CPU_ARM920T is not set -# CONFIG_CPU_ARM922T is not set -# CONFIG_CPU_ARM926T is not set -# CONFIG_CPU_ARM1020 is not set -# CONFIG_CPU_SA110 is not set -CONFIG_CPU_SA1100=y -# CONFIG_ARM_THUMB is not set -CONFIG_DISCONTIGMEM=y - -# -# General setup -# -# CONFIG_PCI is not set -CONFIG_ISA=y -# CONFIG_ISA_DMA is not set -CONFIG_CPU_FREQ=y -CONFIG_HOTPLUG=y - -# -# PCMCIA/CardBus support -# -CONFIG_PCMCIA=y -# CONFIG_I82092 is not set -# CONFIG_I82365 is not set -# CONFIG_TCIC is not set -# CONFIG_PCMCIA_CLPS6700 is not set -CONFIG_PCMCIA_SA1100=y -CONFIG_NET=y -CONFIG_SYSVIPC=y -# CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_SYSCTL=y - -# -# At least one math emulation must be selected -# -CONFIG_FPE_NWFPE=y -CONFIG_FPE_FASTFPE=y -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -# CONFIG_BINFMT_AOUT is not set -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -CONFIG_PM=y -# CONFIG_ARTHUR is not set -CONFIG_CMDLINE="mem=64M root=/dev/ram initrd=0xc0800000,3M" -CONFIG_LEDS=y -CONFIG_LEDS_TIMER=y -CONFIG_LEDS_CPU=y -CONFIG_ALIGNMENT_TRAP=y - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Memory Technology Devices (MTD) -# -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set -CONFIG_MTD_PARTITIONS=y -CONFIG_MTD_REDBOOT_PARTS=y -# CONFIG_MTD_BOOTLDR_PARTS is not set -# CONFIG_MTD_AFS_PARTS is not set - -# -# User Modules And Translation Layers -# -# CONFIG_MTD_CHAR is not set -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -# CONFIG_NFTL is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=y -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_GEN_PROBE=y -CONFIG_MTD_CFI_ADV_OPTIONS=y -CONFIG_MTD_CFI_NOSWAP=y -# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set -# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set -# CONFIG_MTD_CFI_GEOMETRY is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_ABSENT is not set -# CONFIG_MTD_OBSOLETE_CHIPS is not set -# CONFIG_MTD_AMDSTD is not set -# CONFIG_MTD_SHARP is not set -# CONFIG_MTD_JEDEC is not set - -# -# Mapping drivers for chip access -# -# CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_NORA is not set -# CONFIG_MTD_ARM_INTEGRATOR is not set -# CONFIG_MTD_CDB89712 is not set -CONFIG_MTD_SA1100=y -# CONFIG_MTD_DC21285 is not set -# CONFIG_MTD_IQ80310 is not set -# CONFIG_MTD_PCI is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLKMTD is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC1000 is not set -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOCPROBE is not set - -# -# NAND Flash Device Drivers -# -# CONFIG_MTD_NAND is not set - -# -# Plug and Play configuration -# -# CONFIG_PNP is not set -# CONFIG_ISAPNP is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_XD is not set -# CONFIG_PARIDE is not set -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_BLK_DEV_DAC960 is not set -CONFIG_BLK_DEV_LOOP=y -# CONFIG_BLK_DEV_NBD is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=8192 -CONFIG_BLK_DEV_INITRD=y - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set -# CONFIG_BLK_DEV_MD is not set -# CONFIG_MD_LINEAR is not set -# CONFIG_MD_RAID0 is not set -# CONFIG_MD_RAID1 is not set -# CONFIG_MD_RAID5 is not set -# CONFIG_MD_MULTIPATH is not set -# CONFIG_BLK_DEV_LVM is not set - -# -# Networking options -# -# CONFIG_PACKET is not set -# CONFIG_NETLINK is not set -# CONFIG_NETFILTER is not set -# CONFIG_FILTER is not set -CONFIG_UNIX=y -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -CONFIG_IP_PNP=y -CONFIG_IP_PNP_DHCP=y -# CONFIG_IP_PNP_BOOTP is not set -# CONFIG_IP_PNP_RARP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_INET_ECN is not set -# CONFIG_SYN_COOKIES is not set -# CONFIG_IPV6 is not set -# CONFIG_KHTTPD is not set -# CONFIG_ATM is not set -# CONFIG_VLAN_8021Q is not set - -# -# -# -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_LLC is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set - -# -# Ethernet (10 or 100Mbit) -# -CONFIG_NET_ETHERNET=y -# CONFIG_ARM_AM79C961A is not set -# CONFIG_SUNLANCE is not set -# CONFIG_SUNBMAC is not set -# CONFIG_SUNQE is not set -# CONFIG_SUNLANCE is not set -# CONFIG_SUNGEM is not set -# CONFIG_NET_VENDOR_3COM is not set -# CONFIG_LANCE is not set -CONFIG_NET_VENDOR_SMC=y -# CONFIG_WD80x3 is not set -# CONFIG_ULTRAMCA is not set -# CONFIG_ULTRA is not set -# CONFIG_ULTRA32 is not set -CONFIG_SMC9194=y -# CONFIG_NET_VENDOR_RACAL is not set -# CONFIG_AT1700 is not set -# CONFIG_DEPCA is not set -# CONFIG_HP100 is not set -# CONFIG_NET_ISA is not set -# CONFIG_NET_PCI is not set -# CONFIG_NET_POCKET is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_ACENIC is not set -# CONFIG_DL2K is not set -# CONFIG_MYRI_SBUS is not set -# CONFIG_NS83820 is not set -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -# CONFIG_SK98LIN is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PLIP is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -CONFIG_NET_RADIO=y -# CONFIG_STRIP is not set -# CONFIG_WAVELAN is not set -# CONFIG_ARLAN is not set -# CONFIG_AIRONET4500 is not set -# CONFIG_AIRONET4500_NONCS is not set -# CONFIG_AIRONET4500_PROC is not set -# CONFIG_AIRO is not set -CONFIG_HERMES=m - -# -# Wireless Pcmcia cards support -# -CONFIG_PCMCIA_HERMES=m -# CONFIG_AIRO_CS is not set -CONFIG_NET_WIRELESS=y - -# -# Token Ring devices -# -# CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# PCMCIA network device support -# -CONFIG_NET_PCMCIA=y -# CONFIG_PCMCIA_3C589 is not set -# CONFIG_PCMCIA_3C574 is not set -# CONFIG_PCMCIA_FMVJ18X is not set -CONFIG_PCMCIA_PCNET=y -# CONFIG_PCMCIA_NMCLAN is not set -# CONFIG_PCMCIA_SMC91C92 is not set -# CONFIG_PCMCIA_XIRC2PS is not set -# CONFIG_PCMCIA_AXNET is not set -# CONFIG_ARCNET_COM20020_CS is not set -# CONFIG_PCMCIA_IBMTR is not set -# CONFIG_NET_PCMCIA_RADIO is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# ATA/IDE/MFM/RLL support -# -CONFIG_IDE=y - -# -# IDE, ATA and ATAPI Block devices -# -CONFIG_BLK_DEV_IDE=y - -# -# Please see Documentation/ide.txt for help/info on IDE drives -# -# CONFIG_BLK_DEV_HD_IDE is not set -# CONFIG_BLK_DEV_HD is not set -CONFIG_BLK_DEV_IDEDISK=y -# CONFIG_IDEDISK_MULTI_MODE is not set -CONFIG_BLK_DEV_IDECS=y -# CONFIG_BLK_DEV_IDECD is not set -# CONFIG_BLK_DEV_IDETAPE is not set -# CONFIG_BLK_DEV_IDEFLOPPY is not set -# CONFIG_BLK_DEV_IDESCSI is not set - -# -# IDE chipset support/bugfixes -# -# CONFIG_BLK_DEV_CMD640 is not set -# CONFIG_BLK_DEV_CMD640_ENHANCED is not set -# CONFIG_BLK_DEV_ISAPNP is not set -# CONFIG_IDE_CHIPSETS is not set -# CONFIG_IDEDMA_AUTO is not set -# CONFIG_BLK_DEV_ATARAID is not set -# CONFIG_BLK_DEV_ATARAID_PDC is not set -# CONFIG_BLK_DEV_ATARAID_HPT is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# I2O device support -# -# CONFIG_I2O is not set -# CONFIG_I2O_BLOCK is not set -# CONFIG_I2O_LAN is not set -# CONFIG_I2O_SCSI is not set -# CONFIG_I2O_PROC is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Input core support -# -# CONFIG_INPUT is not set -# CONFIG_INPUT_KEYBDEV is not set -# CONFIG_INPUT_MOUSEDEV is not set -# CONFIG_INPUT_JOYDEV is not set -# CONFIG_INPUT_EVDEV is not set - -# -# Character devices -# -CONFIG_VT=y -# CONFIG_VT_CONSOLE is not set -# CONFIG_SERIAL is not set -# CONFIG_SERIAL_EXTENDED is not set -# CONFIG_SERIAL_NONSTANDARD is not set - -# -# Serial drivers -# -# CONFIG_SERIAL_ANAKIN is not set -# CONFIG_SERIAL_ANAKIN_CONSOLE is not set -# CONFIG_SERIAL_AMBA is not set -# CONFIG_SERIAL_AMBA_CONSOLE is not set -# CONFIG_SERIAL_CLPS711X is not set -# CONFIG_SERIAL_CLPS711X_CONSOLE is not set -# CONFIG_SERIAL_21285 is not set -# CONFIG_SERIAL_21285_OLD is not set -# CONFIG_SERIAL_21285_CONSOLE is not set -# CONFIG_SERIAL_UART00 is not set -# CONFIG_SERIAL_UART00_CONSOLE is not set -CONFIG_SERIAL_SA1100=y -CONFIG_SERIAL_SA1100_CONSOLE=y -CONFIG_SA1100_DEFAULT_BAUDRATE=57600 -# CONFIG_SERIAL_8250 is not set -# CONFIG_SERIAL_8250_CONSOLE is not set -# CONFIG_SERIAL_8250_EXTENDED is not set -# CONFIG_SERIAL_8250_MANY_PORTS is not set -# CONFIG_SERIAL_8250_SHARE_IRQ is not set -# CONFIG_SERIAL_8250_DETECT_IRQ is not set -# CONFIG_SERIAL_8250_MULTIPORT is not set -# CONFIG_SERIAL_8250_HUB6 is not set -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=32 - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# L3 serial bus support -# -# CONFIG_L3 is not set -# CONFIG_L3_ALGOBIT is not set -# CONFIG_L3_BIT_SA1100_GPIO is not set - -# -# Other L3 adapters -# -# CONFIG_L3_SA1111 is not set -# CONFIG_BIT_SA1100_GPIO is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -# CONFIG_MOUSE is not set - -# -# Joysticks -# -# CONFIG_INPUT_GAMEPORT is not set - -# -# Input core support is needed for gameports -# - -# -# Input core support is needed for joysticks -# -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -# CONFIG_INTEL_RNG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -CONFIG_SA1100_RTC=y -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set - -# -# PCMCIA character devices -# - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set -# CONFIG_REISERFS_FS is not set -# CONFIG_REISERFS_CHECK is not set -# CONFIG_REISERFS_PROC_INFO is not set -# CONFIG_ADFS_FS is not set -# CONFIG_ADFS_FS_RW is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_EXT3_FS is not set -# CONFIG_JBD is not set -# CONFIG_JBD_DEBUG is not set -# CONFIG_FAT_FS is not set -# CONFIG_MSDOS_FS is not set -# CONFIG_UMSDOS_FS is not set -# CONFIG_VFAT_FS is not set -# CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set -CONFIG_JFFS2_FS=y -CONFIG_JFFS2_FS_DEBUG=0 -# CONFIG_CRAMFS is not set -# CONFIG_TMPFS is not set -CONFIG_RAMFS=y -# CONFIG_ISO9660_FS is not set -# CONFIG_JOLIET is not set -# CONFIG_ZISOFS is not set -# CONFIG_MINIX_FS is not set -# CONFIG_VXFS_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS_DEBUG is not set -# CONFIG_NTFS_RW is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -# CONFIG_DEVFS_MOUNT is not set -# CONFIG_DEVFS_DEBUG is not set -CONFIG_DEVPTS_FS=y -# CONFIG_QNX4FS_FS is not set -# CONFIG_QNX4FS_RW is not set -# CONFIG_ROMFS_FS is not set -CONFIG_EXT2_FS=y -# CONFIG_SYSV_FS is not set -# CONFIG_UDF_FS is not set -# CONFIG_UDF_RW is not set -# CONFIG_UFS_FS is not set -# CONFIG_UFS_FS_WRITE is not set - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -# CONFIG_INTERMEZZO_FS is not set -CONFIG_NFS_FS=y -# CONFIG_NFS_V3 is not set -CONFIG_ROOT_NFS=y -# CONFIG_NFSD is not set -# CONFIG_NFSD_V3 is not set -CONFIG_SUNRPC=y -CONFIG_LOCKD=y -# CONFIG_SMB_FS is not set -# CONFIG_NCP_FS is not set -# CONFIG_NCPFS_PACKET_SIGNING is not set -# CONFIG_NCPFS_IOCTL_LOCKING is not set -# CONFIG_NCPFS_STRONG is not set -# CONFIG_NCPFS_NFS_NS is not set -# CONFIG_NCPFS_OS2_NS is not set -# CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_NLS is not set -# CONFIG_NCPFS_EXTRAS is not set -# CONFIG_ZISOFS_FS is not set -# CONFIG_ZLIB_FS_INFLATE is not set - -# -# Partition Types -# -CONFIG_PARTITION_ADVANCED=y -# CONFIG_ACORN_PARTITION is not set -# CONFIG_OSF_PARTITION is not set -# CONFIG_AMIGA_PARTITION is not set -# CONFIG_ATARI_PARTITION is not set -# CONFIG_MAC_PARTITION is not set -CONFIG_MSDOS_PARTITION=y -# CONFIG_BSD_DISKLABEL is not set -# CONFIG_MINIX_SUBPARTITION is not set -# CONFIG_SOLARIS_X86_PARTITION is not set -# CONFIG_UNIXWARE_DISKLABEL is not set -# CONFIG_LDM_PARTITION is not set -# CONFIG_SGI_PARTITION is not set -# CONFIG_ULTRIX_PARTITION is not set -# CONFIG_SUN_PARTITION is not set -# CONFIG_SMB_NLS is not set -# CONFIG_NLS is not set - -# -# Console drivers -# -CONFIG_PC_KEYMAP=y -# CONFIG_VGA_CONSOLE is not set - -# -# Frame-buffer support -# -CONFIG_FB=y -CONFIG_DUMMY_CONSOLE=y -# CONFIG_FB_ACORN is not set -# CONFIG_FB_ANAKIN is not set -# CONFIG_FB_CLPS711X is not set -CONFIG_FB_SA1100=y -# CONFIG_FB_CYBER2000 is not set -# CONFIG_FB_VIRTUAL is not set -# CONFIG_FBCON_ADVANCED is not set -CONFIG_FBCON_CFB2=y -CONFIG_FBCON_CFB4=y -CONFIG_FBCON_CFB8=y -CONFIG_FBCON_CFB16=y -# CONFIG_FBCON_FONTWIDTH8_ONLY is not set -# CONFIG_FBCON_FONTS is not set -CONFIG_FONT_8x8=y -CONFIG_FONT_8x16=y - -# -# Sound -# -CONFIG_SOUND=y -# CONFIG_SOUND_BT878 is not set -# CONFIG_SOUND_CMPCI is not set -# CONFIG_SOUND_EMU10K1 is not set -# CONFIG_MIDI_EMU10K1 is not set -# CONFIG_SOUND_FUSION is not set -# CONFIG_SOUND_CS4281 is not set -# CONFIG_SOUND_ES1370 is not set -# CONFIG_SOUND_ES1371 is not set -# CONFIG_SOUND_ESSSOLO1 is not set -# CONFIG_SOUND_MAESTRO is not set -# CONFIG_SOUND_MAESTRO3 is not set -# CONFIG_SOUND_ICH is not set -# CONFIG_SOUND_RME96XX is not set -# CONFIG_SOUND_SONICVIBES is not set -# CONFIG_SOUND_TRIDENT is not set -# CONFIG_SOUND_MSNDCLAS is not set -# CONFIG_SOUND_MSNDPIN is not set -# CONFIG_SOUND_VIA82CXXX is not set -# CONFIG_MIDI_VIA82CXXX is not set -# CONFIG_SOUND_SA1100 is not set -# CONFIG_SOUND_UDA1341 is not set -# CONFIG_SOUND_ASSABET_UDA1341 is not set -# CONFIG_SOUND_H3600_UDA1341 is not set -# CONFIG_SOUND_PANGOLIN_UDA1341 is not set -# CONFIG_SOUND_SA1111_UDA1341 is not set -# CONFIG_SOUND_SA1100SSP is not set -# CONFIG_SOUND_OSS is not set -# CONFIG_SOUND_WAVEARTIST is not set -# CONFIG_SOUND_TVMIXER is not set - -# -# Multimedia Capabilities Port drivers -# -# CONFIG_MCP is not set -# CONFIG_MCP_SA1100 is not set -# CONFIG_MCP_UCB1200 is not set -# CONFIG_MCP_UCB1200_AUDIO is not set -# CONFIG_MCP_UCB1200_TS is not set - -# -# USB support -# -# CONFIG_USB is not set - -# -# USB Controllers -# -# CONFIG_USB_UHCI is not set -# CONFIG_USB_UHCI_ALT is not set -# CONFIG_USB_OHCI is not set -# CONFIG_USB_OHCI_SA1111 is not set - -# -# USB Device Class drivers -# -# CONFIG_USB_AUDIO is not set -# CONFIG_USB_BLUETOOTH is not set -# CONFIG_USB_STORAGE is not set -# CONFIG_USB_STORAGE_DEBUG is not set -# CONFIG_USB_STORAGE_DATAFAB is not set -# CONFIG_USB_STORAGE_FREECOM is not set -# CONFIG_USB_STORAGE_ISD200 is not set -# CONFIG_USB_STORAGE_DPCM is not set -# CONFIG_USB_STORAGE_HP8200e is not set -# CONFIG_USB_STORAGE_SDDR09 is not set -# CONFIG_USB_STORAGE_JUMPSHOT is not set -# CONFIG_USB_ACM is not set -# CONFIG_USB_PRINTER is not set - -# -# USB Human Interface Devices (HID) -# - -# -# Input core support is needed for USB HID -# - -# -# USB Imaging devices -# -# CONFIG_USB_DC2XX is not set -# CONFIG_USB_MDC800 is not set -# CONFIG_USB_SCANNER is not set -# CONFIG_USB_MICROTEK is not set -# CONFIG_USB_HPUSBSCSI is not set - -# -# USB Multimedia devices -# - -# -# Video4Linux support is needed for USB Multimedia device support -# - -# -# USB Network adaptors -# -# CONFIG_USB_PEGASUS is not set -# CONFIG_USB_KAWETH is not set -# CONFIG_USB_CATC is not set -# CONFIG_USB_CDCETHER is not set -# CONFIG_USB_USBNET is not set - -# -# USB port drivers -# -# CONFIG_USB_USS720 is not set - -# -# USB Serial Converter support -# -# CONFIG_USB_SERIAL is not set -# CONFIG_USB_SERIAL_GENERIC is not set -# CONFIG_USB_SERIAL_BELKIN is not set -# CONFIG_USB_SERIAL_WHITEHEAT is not set -# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set -# CONFIG_USB_SERIAL_EMPEG is not set -# CONFIG_USB_SERIAL_FTDI_SIO is not set -# CONFIG_USB_SERIAL_VISOR is not set -# CONFIG_USB_SERIAL_IR is not set -# CONFIG_USB_SERIAL_EDGEPORT is not set -# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set -# CONFIG_USB_SERIAL_KEYSPAN is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set -# CONFIG_USB_SERIAL_MCT_U232 is not set -# CONFIG_USB_SERIAL_PL2303 is not set -# CONFIG_USB_SERIAL_CYBERJACK is not set -# CONFIG_USB_SERIAL_XIRCOM is not set -# CONFIG_USB_SERIAL_OMNINET is not set - -# -# USB Miscellaneous drivers -# -# CONFIG_USB_RIO500 is not set - -# -# Bluetooth support -# -# CONFIG_BT is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_USER=y -# CONFIG_DEBUG_INFO is not set -# CONFIG_NO_PGT_CACHE is not set -# CONFIG_DEBUG_KERNEL is not set -# CONFIG_DEBUG_SLAB is not set -# CONFIG_MAGIC_SYSRQ is not set -# CONFIG_DEBUG_SPINLOCK is not set -# CONFIG_DEBUG_BUGVERBOSE is not set -# CONFIG_DEBUG_ERRORS is not set -# CONFIG_DEBUG_LL is not set -# CONFIG_DEBUG_DC21285_PORT is not set -# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -prauN linux-2.6.0-test5/arch/arm/def-configs/footbridge wli-2.6.0-test5-bk12-25/arch/arm/def-configs/footbridge --- linux-2.6.0-test5/arch/arm/def-configs/footbridge 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/footbridge 1969-12-31 16:00:00.000000000 -0800 @@ -1,880 +0,0 @@ -# -# Automatically generated make config: don't edit -# -CONFIG_ARM=y -# CONFIG_EISA is not set -# CONFIG_SBUS is not set -# CONFIG_MCA is not set -CONFIG_UID16=y - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -# CONFIG_OBSOLETE is not set - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODVERSIONS is not set -CONFIG_KMOD=y - -# -# System Type -# -# CONFIG_ARCH_ARCA5K is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -CONFIG_ARCH_FOOTBRIDGE=y -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_RPC is not set -# CONFIG_ARCH_SA1100 is not set -# CONFIG_ARCH_CLPS711X is not set - -# -# Archimedes/A5000 Implementations -# - -# -# Footbridge Implementations -# -# CONFIG_ARCH_CATS is not set -# CONFIG_ARCH_PERSONAL_SERVER is not set -# CONFIG_ARCH_EBSA285_ADDIN is not set -CONFIG_ARCH_EBSA285_HOST=y -CONFIG_ARCH_NETWINDER=y - -# -# SA11x0 Implementations -# - -# -# CLPS711X/EP721X Implementations -# -# CONFIG_ARCH_ACORN is not set -CONFIG_FOOTBRIDGE=y -CONFIG_FOOTBRIDGE_HOST=y -# CONFIG_FOOTBRIDGE_ADDIN is not set -CONFIG_ARCH_EBSA285=y -CONFIG_CPU_32=y -# CONFIG_CPU_26 is not set - -# -# Processor Type -# -CONFIG_CPU_32v4=y -CONFIG_CPU_SA110=y -# CONFIG_DISCONTIGMEM is not set - -# -# General setup -# -# CONFIG_ANGELBOOT is not set -CONFIG_PCI=y -CONFIG_ISA=y -CONFIG_ISA_DMA=y -CONFIG_PCI_NAMES=y -# CONFIG_HOTPLUG is not set -# CONFIG_PCMCIA is not set -CONFIG_NET=y -CONFIG_SYSVIPC=y -CONFIG_BSD_PROCESS_ACCT=y -CONFIG_SYSCTL=y -CONFIG_NWFPE=y -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -CONFIG_BINFMT_AOUT=y -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -# CONFIG_PM is not set -# CONFIG_ARTHUR is not set -CONFIG_LEDS=y -CONFIG_LEDS_TIMER=y -# CONFIG_LEDS_CPU is not set -CONFIG_ALIGNMENT_TRAP=y - -# -# Parallel port support -# -CONFIG_PARPORT=y -CONFIG_PARPORT_PC=y -CONFIG_PARPORT_PC_FIFO=y -# CONFIG_PARPORT_PC_SUPERIO is not set -# CONFIG_PARPORT_ARC is not set -# CONFIG_PARPORT_AMIGA is not set -# CONFIG_PARPORT_MFC3 is not set -# CONFIG_PARPORT_ATARI is not set -# CONFIG_PARPORT_SUNBPP is not set -# CONFIG_PARPORT_OTHER is not set -CONFIG_PARPORT_1284=y - -# -# Memory Technology Devices (MTD) -# -# CONFIG_MTD is not set - -# -# Plug and Play configuration -# -CONFIG_PNP=y -CONFIG_ISAPNP=y - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_XD is not set -CONFIG_PARIDE=m -CONFIG_PARIDE_PARPORT=y - -# -# Parallel IDE high-level drivers -# -CONFIG_PARIDE_PD=m -CONFIG_PARIDE_PCD=m -CONFIG_PARIDE_PF=m -CONFIG_PARIDE_PT=m -CONFIG_PARIDE_PG=m - -# -# Parallel IDE protocol modules -# -CONFIG_PARIDE_ATEN=m -CONFIG_PARIDE_BPCK=m -CONFIG_PARIDE_COMM=m -CONFIG_PARIDE_DSTR=m -CONFIG_PARIDE_FIT2=m -CONFIG_PARIDE_FIT3=m -CONFIG_PARIDE_EPAT=m -CONFIG_PARIDE_EPIA=m -CONFIG_PARIDE_FRIQ=m -CONFIG_PARIDE_FRPW=m -CONFIG_PARIDE_KBIC=m -CONFIG_PARIDE_KTTI=m -CONFIG_PARIDE_ON20=m -CONFIG_PARIDE_ON26=m -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_BLK_DEV_DAC960 is not set -CONFIG_BLK_DEV_LOOP=m -CONFIG_BLK_DEV_NBD=m -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=4096 -CONFIG_BLK_DEV_INITRD=y - -# -# Networking options -# -CONFIG_PACKET=y -CONFIG_PACKET_MMAP=y -# CONFIG_NETLINK is not set -# CONFIG_NETFILTER is not set -# CONFIG_FILTER is not set -CONFIG_UNIX=y -CONFIG_INET=y -CONFIG_IP_MULTICAST=y -# CONFIG_IP_ADVANCED_ROUTER is not set -CONFIG_IP_PNP=y -CONFIG_IP_PNP_BOOTP=y -# CONFIG_IP_PNP_RARP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_IP_MROUTE is not set -# CONFIG_INET_ECN is not set -CONFIG_SYN_COOKIES=y -# CONFIG_IPV6 is not set -# CONFIG_KHTTPD is not set -CONFIG_ATM=y -# CONFIG_ATM_CLIP is not set -# CONFIG_ATM_LANE is not set - -# -# -# -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_LLC is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set -# CONFIG_NET_SB1000 is not set - -# -# Ethernet (10 or 100Mbit) -# -CONFIG_NET_ETHERNET=y -CONFIG_NET_VENDOR_3COM=y -# CONFIG_EL1 is not set -# CONFIG_EL2 is not set -# CONFIG_ELPLUS is not set -# CONFIG_EL16 is not set -# CONFIG_EL3 is not set -# CONFIG_3C515 is not set -# CONFIG_ELMC is not set -# CONFIG_ELMC_II is not set -CONFIG_VORTEX=y -# CONFIG_LANCE is not set -# CONFIG_NET_VENDOR_SMC is not set -# CONFIG_NET_VENDOR_RACAL is not set -# CONFIG_AT1700 is not set -# CONFIG_DEPCA is not set -# CONFIG_HP100 is not set -# CONFIG_NET_ISA is not set -CONFIG_NET_PCI=y -# CONFIG_PCNET32 is not set -# CONFIG_ADAPTEC_STARFIRE is not set -# CONFIG_AC3200 is not set -# CONFIG_APRICOT is not set -# CONFIG_CS89x0 is not set -CONFIG_TULIP=m -# CONFIG_DE4X5 is not set -# CONFIG_DGRS is not set -# CONFIG_DM9102 is not set -# CONFIG_EEPRO100 is not set -# CONFIG_EEPRO100_PM is not set -# CONFIG_LNE390 is not set -# CONFIG_NATSEMI is not set -CONFIG_NE2K_PCI=y -# CONFIG_NE3210 is not set -# CONFIG_ES3210 is not set -# CONFIG_8139TOO is not set -# CONFIG_RTL8129 is not set -# CONFIG_SIS900 is not set -# CONFIG_EPIC100 is not set -# CONFIG_SUNDANCE is not set -# CONFIG_TLAN is not set -# CONFIG_VIA_RHINE is not set -# CONFIG_WINBOND_840 is not set -# CONFIG_HAPPYMEAL is not set -# CONFIG_NET_POCKET is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_ACENIC is not set -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -# CONFIG_SK98LIN is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PLIP is not set -CONFIG_PPP=m -# CONFIG_PPP_MULTILINK is not set -CONFIG_PPP_ASYNC=m -# CONFIG_PPP_SYNC_TTY is not set -CONFIG_PPP_DEFLATE=m -CONFIG_PPP_BSDCOMP=m -CONFIG_PPPOE=m -CONFIG_SLIP=m -CONFIG_SLIP_COMPRESSED=y -CONFIG_SLIP_SMART=y -CONFIG_SLIP_MODE_SLIP6=y - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set - -# -# Token Ring devices -# -# CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -CONFIG_IRDA=m - -# -# IrDA protocols -# -CONFIG_IRLAN=m -CONFIG_IRNET=m -CONFIG_IRCOMM=m -CONFIG_IRDA_ULTRA=y -CONFIG_IRDA_OPTIONS=y - -# -# IrDA options -# -CONFIG_IRDA_CACHE_LAST_LSAP=y -CONFIG_IRDA_FAST_RR=y -CONFIG_IRDA_DEBUG=y - -# -# Infrared-port device drivers -# - -# -# SIR device drivers -# -# CONFIG_IRTTY_SIR is not set -# CONFIG_IRPORT_SIR is not set - -# -# FIR device drivers -# -# CONFIG_NSC_FIR is not set -CONFIG_WINBOND_FIR=m -# CONFIG_TOSHIBA_FIR is not set -# CONFIG_SMC_IRCC_FIR is not set - -# -# Dongle support -# -# CONFIG_DONGLE is not set - -# -# ATA/IDE/MFM/RLL support -# -CONFIG_IDE=y - -# -# IDE, ATA and ATAPI Block devices -# -CONFIG_BLK_DEV_IDE=y - -# -# Please see Documentation/ide.txt for help/info on IDE drives -# -# CONFIG_BLK_DEV_HD_IDE is not set -# CONFIG_BLK_DEV_HD is not set -CONFIG_BLK_DEV_IDEDISK=y -CONFIG_IDEDISK_MULTI_MODE=y -# CONFIG_BLK_DEV_IDECS is not set -# CONFIG_BLK_DEV_IDECD is not set -# CONFIG_BLK_DEV_IDETAPE is not set -# CONFIG_BLK_DEV_IDEFLOPPY is not set -# CONFIG_BLK_DEV_IDESCSI is not set - -# -# IDE chipset support/bugfixes -# -# CONFIG_BLK_DEV_CMD640 is not set -# CONFIG_BLK_DEV_CMD640_ENHANCED is not set -# CONFIG_BLK_DEV_ISAPNP is not set -# CONFIG_BLK_DEV_RZ1000 is not set -CONFIG_IDEPCI_SHARE_IRQ=y -CONFIG_BLK_DEV_IDEDMA_PCI=y -CONFIG_BLK_DEV_OFFBOARD=y -CONFIG_IDEDMA_PCI_AUTO=y -CONFIG_BLK_DEV_IDEDMA=y -# CONFIG_IDEDMA_NEW_DRIVE_LISTINGS is not set -# CONFIG_BLK_DEV_AEC62XX is not set -# CONFIG_AEC62XX_TUNING is not set -# CONFIG_BLK_DEV_ALI15X3 is not set -# CONFIG_WDC_ALI15X3 is not set -# CONFIG_BLK_DEV_AMD7409 is not set -# CONFIG_AMD7409_OVERRIDE is not set -# CONFIG_BLK_DEV_CMD64X is not set -CONFIG_BLK_DEV_CY82C693=y -# CONFIG_BLK_DEV_CS5530 is not set -# CONFIG_BLK_DEV_HPT34X is not set -# CONFIG_HPT34X_AUTODMA is not set -# CONFIG_BLK_DEV_HPT366 is not set -# CONFIG_BLK_DEV_NS87415 is not set -# CONFIG_BLK_DEV_OPTI621 is not set -# CONFIG_PDC202XX_BURST is not set -# CONFIG_BLK_DEV_OSB4 is not set -# CONFIG_BLK_DEV_SIS5513 is not set -# CONFIG_BLK_DEV_TRM290 is not set -# CONFIG_BLK_DEV_VIA82CXXX is not set -CONFIG_BLK_DEV_SL82C105=y -# CONFIG_IDE_CHIPSETS is not set -CONFIG_IDEDMA_AUTO=y -# CONFIG_IDEDMA_IVB is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# IEEE 1394 (FireWire) support -# -# CONFIG_IEEE1394 is not set - -# -# I2O device support -# -# CONFIG_I2O is not set -# CONFIG_I2O_PCI is not set -# CONFIG_I2O_BLOCK is not set -# CONFIG_I2O_LAN is not set -# CONFIG_I2O_SCSI is not set -# CONFIG_I2O_PROC is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Input core support -# -# CONFIG_INPUT is not set - -# -# Character devices -# -CONFIG_VT=y -CONFIG_VT_CONSOLE=y -CONFIG_SERIAL=y -CONFIG_SERIAL_CONSOLE=y -# CONFIG_SERIAL_EXTENDED is not set -CONFIG_SERIAL_NONSTANDARD=y -# CONFIG_COMPUTONE is not set -# CONFIG_ROCKETPORT is not set -# CONFIG_CYCLADES is not set -# CONFIG_DIGIEPCA is not set -# CONFIG_DIGI is not set -# CONFIG_ESPSERIAL is not set -# CONFIG_MOXA_INTELLIO is not set -# CONFIG_MOXA_SMARTIO is not set -# CONFIG_ISI is not set -# CONFIG_SYNCLINK is not set -# CONFIG_N_HDLC is not set -# CONFIG_RISCOM8 is not set -# CONFIG_SPECIALIX is not set -# CONFIG_SX is not set -# CONFIG_RIO is not set -# CONFIG_STALDRV is not set -CONFIG_SERIAL_21285=y -CONFIG_SERIAL_21285_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=256 -CONFIG_PRINTER=m -# CONFIG_LP_CONSOLE is not set -# CONFIG_PPDEV is not set - -# -# I2C support -# -CONFIG_I2C=m -# CONFIG_I2C_ALGOBIT is not set -# CONFIG_I2C_ALGOPCF is not set -# CONFIG_I2C_CHARDEV is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -CONFIG_MOUSE=y -CONFIG_PSMOUSE=y -# CONFIG_82C710_MOUSE is not set -# CONFIG_PC110_PAD is not set - -# -# Joysticks -# -# CONFIG_JOYSTICK is not set - -# -# Input core support is needed for joysticks -# -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -CONFIG_WATCHDOG=y -# CONFIG_WATCHDOG_NOWAYOUT is not set -CONFIG_SOFT_WATCHDOG=y -# CONFIG_WDT is not set -# CONFIG_WDTPCI is not set -# CONFIG_PCWATCHDOG is not set -# CONFIG_ACQUIRE_WDT is not set -# CONFIG_60XX_WDT is not set -# CONFIG_MIXCOMWD is not set -# CONFIG_I810_TCO is not set -CONFIG_21285_WATCHDOG=m -CONFIG_977_WATCHDOG=m -CONFIG_DS1620=y -CONFIG_NWBUTTON=y -CONFIG_NWBUTTON_REBOOT=y -CONFIG_NWFLASH=m -# CONFIG_INTEL_RNG is not set -CONFIG_NVRAM=m -CONFIG_RTC=y -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set - -# -# Multimedia devices -# -CONFIG_VIDEO_DEV=m - -# -# Video For Linux -# -CONFIG_VIDEO_PROC_FS=y -# CONFIG_I2C_PARPORT is not set - -# -# Video Adapters -# -# CONFIG_VIDEO_PMS is not set -# CONFIG_VIDEO_BWQCAM is not set -# CONFIG_VIDEO_CQCAM is not set -# CONFIG_VIDEO_CPIA is not set -# CONFIG_VIDEO_SAA5249 is not set -# CONFIG_TUNER_3036 is not set -# CONFIG_VIDEO_STRADIS is not set -# CONFIG_VIDEO_ZORAN is not set -# CONFIG_VIDEO_BUZ is not set -# CONFIG_VIDEO_ZR36120 is not set -CONFIG_VIDEO_CYBERPRO=m - -# -# Radio Adapters -# -# CONFIG_RADIO_CADET is not set -# CONFIG_RADIO_RTRACK is not set -# CONFIG_RADIO_RTRACK2 is not set -# CONFIG_RADIO_AZTECH is not set -# CONFIG_RADIO_GEMTEK is not set -# CONFIG_RADIO_MAESTRO is not set -# CONFIG_RADIO_MIROPCM20 is not set -# CONFIG_RADIO_SF16FMI is not set -# CONFIG_RADIO_TERRATEC is not set -# CONFIG_RADIO_TRUST is not set -# CONFIG_RADIO_TYPHOON is not set -# CONFIG_RADIO_ZOLTRIX is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -CONFIG_AUTOFS4_FS=y -CONFIG_ADFS_FS=m -# CONFIG_ADFS_FS_RW is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BFS_FS is not set -CONFIG_FAT_FS=m -CONFIG_MSDOS_FS=m -# CONFIG_UMSDOS_FS is not set -CONFIG_VFAT_FS=m -# CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set -# CONFIG_CRAMFS is not set -# CONFIG_RAMFS is not set -CONFIG_ISO9660_FS=m -CONFIG_JOLIET=y -# CONFIG_MINIX_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS_DEBUG is not set -# CONFIG_NTFS_RW is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -# CONFIG_DEVFS_MOUNT is not set -# CONFIG_DEVFS_DEBUG is not set -CONFIG_DEVPTS_FS=y -# CONFIG_QNX4FS_FS is not set -# CONFIG_QNX4FS_RW is not set -# CONFIG_ROMFS_FS is not set -CONFIG_EXT2_FS=y -# CONFIG_SYSV_FS is not set -# CONFIG_SYSV_FS_WRITE is not set -# CONFIG_UDF_FS is not set -# CONFIG_UDF_RW is not set -# CONFIG_UFS_FS is not set -# CONFIG_UFS_FS_WRITE is not set - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -CONFIG_NFS_FS=y -# CONFIG_NFS_V3 is not set -CONFIG_ROOT_NFS=y -CONFIG_NFSD=m -# CONFIG_NFSD_V3 is not set -CONFIG_SUNRPC=y -CONFIG_LOCKD=y -# CONFIG_SMB_FS is not set -# CONFIG_NCP_FS is not set -# CONFIG_NCPFS_PACKET_SIGNING is not set -# CONFIG_NCPFS_IOCTL_LOCKING is not set -# CONFIG_NCPFS_STRONG is not set -# CONFIG_NCPFS_NFS_NS is not set -# CONFIG_NCPFS_OS2_NS is not set -# CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_MOUNT_SUBDIR is not set -# CONFIG_NCPFS_NDS_DOMAINS is not set -# CONFIG_NCPFS_NLS is not set -# CONFIG_NCPFS_EXTRAS is not set - -# -# Partition Types -# -CONFIG_PARTITION_ADVANCED=y -CONFIG_ACORN_PARTITION=y -# CONFIG_ACORN_PARTITION_ICS is not set -CONFIG_ACORN_PARTITION_ADFS=y -# CONFIG_ACORN_PARTITION_POWERTEC is not set -# CONFIG_ACORN_PARTITION_RISCIX is not set -# CONFIG_OSF_PARTITION is not set -# CONFIG_AMIGA_PARTITION is not set -# CONFIG_ATARI_PARTITION is not set -# CONFIG_MAC_PARTITION is not set -CONFIG_MSDOS_PARTITION=y -# CONFIG_BSD_DISKLABEL is not set -# CONFIG_SOLARIS_X86_PARTITION is not set -# CONFIG_UNIXWARE_DISKLABEL is not set -# CONFIG_SGI_PARTITION is not set -# CONFIG_ULTRIX_PARTITION is not set -# CONFIG_SUN_PARTITION is not set -CONFIG_NLS=y - -# -# Native Language Support -# -CONFIG_NLS_DEFAULT="iso8859-1" -CONFIG_NLS_CODEPAGE_437=m -# CONFIG_NLS_CODEPAGE_737 is not set -# CONFIG_NLS_CODEPAGE_775 is not set -CONFIG_NLS_CODEPAGE_850=m -CONFIG_NLS_CODEPAGE_852=m -# CONFIG_NLS_CODEPAGE_855 is not set -# CONFIG_NLS_CODEPAGE_857 is not set -# CONFIG_NLS_CODEPAGE_860 is not set -# CONFIG_NLS_CODEPAGE_861 is not set -# CONFIG_NLS_CODEPAGE_862 is not set -# CONFIG_NLS_CODEPAGE_863 is not set -# CONFIG_NLS_CODEPAGE_864 is not set -# CONFIG_NLS_CODEPAGE_865 is not set -# CONFIG_NLS_CODEPAGE_866 is not set -# CONFIG_NLS_CODEPAGE_869 is not set -# CONFIG_NLS_CODEPAGE_874 is not set -# CONFIG_NLS_CODEPAGE_932 is not set -# CONFIG_NLS_CODEPAGE_936 is not set -# CONFIG_NLS_CODEPAGE_949 is not set -# CONFIG_NLS_CODEPAGE_950 is not set -CONFIG_NLS_ISO8859_1=m -CONFIG_NLS_ISO8859_2=m -# CONFIG_NLS_ISO8859_3 is not set -# CONFIG_NLS_ISO8859_4 is not set -# CONFIG_NLS_ISO8859_5 is not set -# CONFIG_NLS_ISO8859_6 is not set -# CONFIG_NLS_ISO8859_7 is not set -# CONFIG_NLS_ISO8859_8 is not set -# CONFIG_NLS_ISO8859_9 is not set -# CONFIG_NLS_ISO8859_14 is not set -CONFIG_NLS_ISO8859_15=m -# CONFIG_NLS_KOI8_R is not set -# CONFIG_NLS_UTF8 is not set - -# -# Console drivers -# -CONFIG_PC_KEYB=y -CONFIG_PC_KEYMAP=y -CONFIG_VGA_CONSOLE=y -CONFIG_FB=y - -# -# Frame-buffer support -# -CONFIG_FB=y -CONFIG_DUMMY_CONSOLE=y -# CONFIG_FB_RIVA is not set -# CONFIG_FB_CLGEN is not set -# CONFIG_FB_PM2 is not set -# CONFIG_FB_ACORN is not set -# CONFIG_FB_CLPS711X is not set -CONFIG_FB_CYBER2000=y -# CONFIG_FB_SA1100 is not set -# CONFIG_FB_MATROX is not set -# CONFIG_FB_ATY is not set -# CONFIG_FB_ATY128 is not set -# CONFIG_FB_3DFX is not set -# CONFIG_FB_SIS is not set -# CONFIG_FB_VIRTUAL is not set -CONFIG_FBCON_ADVANCED=y -# CONFIG_FBCON_MFB is not set -# CONFIG_FBCON_CFB2 is not set -# CONFIG_FBCON_CFB4 is not set -CONFIG_FBCON_CFB8=y -CONFIG_FBCON_CFB16=y -CONFIG_FBCON_CFB24=y -# CONFIG_FBCON_CFB32 is not set -# CONFIG_FBCON_AFB is not set -# CONFIG_FBCON_ILBM is not set -# CONFIG_FBCON_IPLAN2P2 is not set -# CONFIG_FBCON_IPLAN2P4 is not set -# CONFIG_FBCON_IPLAN2P8 is not set -# CONFIG_FBCON_MAC is not set -# CONFIG_FBCON_VGA_PLANES is not set -CONFIG_FBCON_VGA=y -# CONFIG_FBCON_HGA is not set -# CONFIG_FBCON_FONTWIDTH8_ONLY is not set -CONFIG_FBCON_FONTS=y -# CONFIG_FONT_8x8 is not set -# CONFIG_FONT_8x16 is not set -# CONFIG_FONT_SUN8x16 is not set -# CONFIG_FONT_SUN12x22 is not set -# CONFIG_FONT_6x11 is not set -# CONFIG_FONT_PEARL_8x8 is not set -CONFIG_FONT_ACORN_8x8=y - -# -# Sound -# -CONFIG_SOUND=m -# CONFIG_SOUND_CMPCI is not set -# CONFIG_SOUND_EMU10K1 is not set -# CONFIG_SOUND_FUSION is not set -# CONFIG_SOUND_CS4281 is not set -# CONFIG_SOUND_ES1370 is not set -# CONFIG_SOUND_ES1371 is not set -# CONFIG_SOUND_ESSSOLO1 is not set -# CONFIG_SOUND_MAESTRO is not set -# CONFIG_SOUND_SONICVIBES is not set -# CONFIG_SOUND_TRIDENT is not set -# CONFIG_SOUND_MSNDCLAS is not set -# CONFIG_SOUND_MSNDPIN is not set -# CONFIG_SOUND_VIA82CXXX is not set -CONFIG_SOUND_OSS=m -# CONFIG_SOUND_TRACEINIT is not set -# CONFIG_SOUND_DMAP is not set -# CONFIG_SOUND_AD1816 is not set -# CONFIG_SOUND_SGALAXY is not set -CONFIG_SOUND_ADLIB=m -# CONFIG_SOUND_ACI_MIXER is not set -# CONFIG_SOUND_CS4232 is not set -# CONFIG_SOUND_SSCAPE is not set -# CONFIG_SOUND_GUS is not set -# CONFIG_SOUND_ICH is not set -# CONFIG_SOUND_VMIDI is not set -# CONFIG_SOUND_TRIX is not set -# CONFIG_SOUND_MSS is not set -# CONFIG_SOUND_MPU401 is not set -# CONFIG_SOUND_NM256 is not set -# CONFIG_SOUND_MAD16 is not set -# CONFIG_SOUND_PAS is not set -# CONFIG_PAS_JOYSTICK is not set -# CONFIG_SOUND_PSS is not set -CONFIG_SOUND_SB=m -# CONFIG_SOUND_AWE32_SYNTH is not set -# CONFIG_SOUND_WAVEFRONT is not set -# CONFIG_SOUND_MAUI is not set -# CONFIG_SOUND_YM3812 is not set -# CONFIG_SOUND_OPL3SA1 is not set -# CONFIG_SOUND_OPL3SA2 is not set -# CONFIG_SOUND_YMPCI is not set -# CONFIG_SOUND_UART6850 is not set -# CONFIG_SOUND_AEDSP16 is not set -CONFIG_SOUND_WAVEARTIST=m -# CONFIG_SOUND_TVMIXER is not set - -# -# USB support -# -CONFIG_USB=m -CONFIG_USB_DEBUG=y - -# -# Miscellaneous USB options -# -CONFIG_USB_DEVICEFS=y -# CONFIG_USB_BANDWIDTH is not set - -# -# USB Controllers -# -# CONFIG_USB_UHCI is not set -# CONFIG_USB_UHCI_ALT is not set -CONFIG_USB_OHCI=m - -# -# USB Devices -# -CONFIG_USB_PRINTER=m -# CONFIG_USB_SCANNER is not set -# CONFIG_USB_MICROTEK is not set -CONFIG_USB_AUDIO=m -# CONFIG_USB_ACM is not set -# CONFIG_USB_SERIAL is not set -# CONFIG_USB_IBMCAM is not set -# CONFIG_USB_OV511 is not set -# CONFIG_USB_DC2XX is not set -# CONFIG_USB_MDC800 is not set -# CONFIG_USB_STORAGE is not set -# CONFIG_USB_USS720 is not set -# CONFIG_USB_DABUSB is not set -# CONFIG_USB_PLUSB is not set -# CONFIG_USB_PEGASUS is not set -# CONFIG_USB_RIO500 is not set -# CONFIG_USB_DSBR is not set -# CONFIG_USB_BLUETOOTH is not set -# CONFIG_USB_NET1080 is not set - -# -# USB Human Interface Devices (HID) -# - -# -# Input core support is needed for USB HID -# - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_ERRORS=y -CONFIG_DEBUG_USER=y -# CONFIG_DEBUG_INFO is not set -CONFIG_MAGIC_SYSRQ=y -CONFIG_DEBUG_LL=y -# CONFIG_DEBUG_DC21285_PORT is not set diff -prauN linux-2.6.0-test5/arch/arm/def-configs/fortunet wli-2.6.0-test5-bk12-25/arch/arm/def-configs/fortunet --- linux-2.6.0-test5/arch/arm/def-configs/fortunet 2003-09-08 12:50:43.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/fortunet 1969-12-31 16:00:00.000000000 -0800 @@ -1,593 +0,0 @@ -# -# Automatically generated by make menuconfig: don't edit -# -CONFIG_ARM=y -# CONFIG_EISA is not set -# CONFIG_SBUS is not set -# CONFIG_MCA is not set -CONFIG_UID16=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y -# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set -# CONFIG_GENERIC_BUST_SPINLOCK is not set -# CONFIG_GENERIC_ISA_DMA is not set - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -# CONFIG_OBSOLETE is not set - -# -# Loadable module support -# -# CONFIG_MODULES is not set -# CONFIG_MODVERSIONS is not set -# CONFIG_KMOD is not set - -# -# System Type -# -# CONFIG_ARCH_ANAKIN is not set -# CONFIG_ARCH_ARCA5K is not set -# CONFIG_ARCH_CLPS7500 is not set -CONFIG_ARCH_CLPS711X=y -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_CAMELOT is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_RPC is not set -# CONFIG_ARCH_SA1100 is not set -# CONFIG_ARCH_SHARK is not set - -# -# Archimedes/A5000 Implementations -# -# CONFIG_ARCH_ARC is not set -# CONFIG_ARCH_A5K is not set - -# -# Footbridge Implementations -# -# CONFIG_ARCH_CATS is not set -# CONFIG_ARCH_PERSONAL_SERVER is not set -# CONFIG_ARCH_EBSA285_ADDIN is not set -# CONFIG_ARCH_EBSA285_HOST is not set -# CONFIG_ARCH_NETWINDER is not set - -# -# SA11x0 Implementations -# -# CONFIG_SA1100_ASSABET is not set -# CONFIG_ASSABET_NEPONSET is not set -# CONFIG_SA1100_ADSBITSY is not set -# CONFIG_SA1100_BRUTUS is not set -# CONFIG_SA1100_CERF is not set -# CONFIG_SA1100_H3100 is not set -# CONFIG_SA1100_H3600 is not set -# CONFIG_SA1100_H3800 is not set -# CONFIG_SA1100_H3XXX is not set -# CONFIG_SA1100_EXTENEX1 is not set -# CONFIG_SA1100_FLEXANET is not set -# CONFIG_SA1100_FREEBIRD is not set -# CONFIG_SA1100_GRAPHICSCLIENT is not set -# CONFIG_SA1100_GRAPHICSMASTER is not set -# CONFIG_SA1100_JORNADA720 is not set -# CONFIG_SA1100_HUW_WEBPANEL is not set -# CONFIG_SA1100_ITSY is not set -# CONFIG_SA1100_LART is not set -# CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_OMNIMETER is not set -# CONFIG_SA1100_PANGOLIN is not set -# CONFIG_SA1100_PLEB is not set -# CONFIG_SA1100_SHANNON is not set -# CONFIG_SA1100_SHERMAN is not set -# CONFIG_SA1100_SIMPAD is not set -# CONFIG_SA1100_PFS168 is not set -# CONFIG_SA1100_VICTOR is not set -# CONFIG_SA1100_XP860 is not set -# CONFIG_SA1100_YOPY is not set -# CONFIG_SA1100_USB is not set -# CONFIG_SA1100_USB_NETLINK is not set -# CONFIG_SA1100_USB_CHAR is not set -# CONFIG_H3600_SLEEVE is not set - -# -# CLPS711X/EP721X Implementations -# -# CONFIG_ARCH_AUTCPU12 is not set -# CONFIG_ARCH_CDB89712 is not set -# CONFIG_ARCH_CLEP7312 is not set -# CONFIG_ARCH_EDB7211 is not set -# CONFIG_ARCH_P720T is not set -CONFIG_ARCH_FORTUNET=y -# CONFIG_ARCH_EP7211 is not set -# CONFIG_ARCH_EP7212 is not set -# CONFIG_ARCH_ACORN is not set -# CONFIG_FOOTBRIDGE is not set -# CONFIG_FOOTBRIDGE_HOST is not set -# CONFIG_FOOTBRIDGE_ADDIN is not set -CONFIG_CPU_32=y -# CONFIG_CPU_26 is not set -# CONFIG_CPU_32v3 is not set -CONFIG_CPU_32v4=y -# CONFIG_CPU_ARM610 is not set -# CONFIG_CPU_ARM710 is not set -CONFIG_CPU_ARM720T=y -# CONFIG_CPU_ARM920T is not set -# CONFIG_CPU_ARM922T is not set -# CONFIG_CPU_ARM926T is not set -# CONFIG_CPU_ARM1020 is not set -# CONFIG_CPU_SA110 is not set -# CONFIG_CPU_SA1100 is not set -# CONFIG_ARM_THUMB is not set -# CONFIG_DISCONTIGMEM is not set - -# -# General setup -# -# CONFIG_PCI is not set -# CONFIG_ISA is not set -# CONFIG_ISA_DMA is not set -# CONFIG_HOTPLUG is not set -# CONFIG_PCMCIA is not set -CONFIG_NET=y -CONFIG_SYSVIPC=y -# CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_SYSCTL=y -# CONFIG_FPE_NWFPE is not set -CONFIG_FPE_FASTFPE=y -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -CONFIG_BINFMT_AOUT=y -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -# CONFIG_PM is not set -# CONFIG_ARTHUR is not set -CONFIG_ALIGNMENT_TRAP=y - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Memory Technology Devices (MTD) -# -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set -# CONFIG_MTD_PARTITIONS is not set -# CONFIG_MTD_REDBOOT_PARTS is not set -# CONFIG_MTD_BOOTLDR_PARTS is not set -# CONFIG_MTD_AFS_PARTS is not set -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -# CONFIG_NFTL is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=y -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_GEN_PROBE=y -# CONFIG_MTD_CFI_ADV_OPTIONS is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_ABSENT is not set -# CONFIG_MTD_OBSOLETE_CHIPS is not set -# CONFIG_MTD_AMDSTD is not set -# CONFIG_MTD_SHARP is not set -# CONFIG_MTD_JEDEC is not set - -# -# Mapping drivers for chip access -# -# CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_NORA is not set -# CONFIG_MTD_ARM_INTEGRATOR is not set -# CONFIG_MTD_CDB89712 is not set -# CONFIG_MTD_SA1100 is not set -# CONFIG_MTD_DC21285 is not set -# CONFIG_MTD_IQ80310 is not set -CONFIG_MTD_FORTUNET=y -# CONFIG_MTD_PCI is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLKMTD is not set -# CONFIG_MTD_DOC1000 is not set -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOCPROBE is not set - -# -# NAND Flash Device Drivers -# -# CONFIG_MTD_NAND is not set - -# -# Plug and Play configuration -# -# CONFIG_PNP is not set -# CONFIG_ISAPNP is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_XD is not set -# CONFIG_PARIDE is not set -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_BLK_DEV_DAC960 is not set -# CONFIG_BLK_DEV_LOOP is not set -# CONFIG_BLK_DEV_NBD is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=4096 -CONFIG_BLK_DEV_INITRD=y - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set -# CONFIG_BLK_DEV_MD is not set -# CONFIG_MD_LINEAR is not set -# CONFIG_MD_RAID0 is not set -# CONFIG_MD_RAID1 is not set -# CONFIG_MD_RAID5 is not set -# CONFIG_MD_MULTIPATH is not set -# CONFIG_BLK_DEV_LVM is not set - -# -# Networking options -# -# CONFIG_PACKET is not set -# CONFIG_NETLINK_DEV is not set -# CONFIG_NETFILTER is not set -# CONFIG_FILTER is not set -CONFIG_UNIX=y -# CONFIG_INET is not set -# CONFIG_ATM is not set -# CONFIG_VLAN_8021Q is not set -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_LLC is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET_AUNUDP is not set -# CONFIG_ECONET_NATIVE is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network device support -# -# CONFIG_NETDEVICES is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# ATA/IDE/MFM/RLL support -# -# CONFIG_IDE is not set -# CONFIG_BLK_DEV_HD is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# Synchronous Serial Interface -# -# CONFIG_SSI is not set -# CONFIG_SSI_CLPS711X is not set -# CONFIG_SSI_JUNO is not set - -# -# I2O device support -# -# CONFIG_I2O is not set -# CONFIG_I2O_BLOCK is not set -# CONFIG_I2O_LAN is not set -# CONFIG_I2O_SCSI is not set -# CONFIG_I2O_PROC is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Input core support -# -# CONFIG_INPUT is not set -# CONFIG_INPUT_KEYBDEV is not set -# CONFIG_INPUT_MOUSEDEV is not set -# CONFIG_INPUT_JOYDEV is not set -# CONFIG_INPUT_EVDEV is not set - -# -# Character devices -# -# CONFIG_VT is not set -# CONFIG_SERIAL is not set -# CONFIG_SERIAL_EXTENDED is not set -# CONFIG_SERIAL_NONSTANDARD is not set - -# -# Serial drivers -# -# CONFIG_SERIAL_ANAKIN is not set -# CONFIG_SERIAL_ANAKIN_CONSOLE is not set -# CONFIG_SERIAL_AMBA is not set -# CONFIG_SERIAL_AMBA_CONSOLE is not set -CONFIG_SERIAL_CLPS711X=y -CONFIG_SERIAL_CLPS711X_CONSOLE=y -# CONFIG_SERIAL_21285 is not set -# CONFIG_SERIAL_21285_OLD is not set -# CONFIG_SERIAL_21285_CONSOLE is not set -# CONFIG_SERIAL_UART00 is not set -# CONFIG_SERIAL_UART00_CONSOLE is not set -# CONFIG_SERIAL_SA1100 is not set -# CONFIG_SERIAL_SA1100_CONSOLE is not set -# CONFIG_SERIAL_8250 is not set -# CONFIG_SERIAL_8250_CONSOLE is not set -# CONFIG_SERIAL_8250_EXTENDED is not set -# CONFIG_SERIAL_8250_MANY_PORTS is not set -# CONFIG_SERIAL_8250_SHARE_IRQ is not set -# CONFIG_SERIAL_8250_DETECT_IRQ is not set -# CONFIG_SERIAL_8250_MULTIPORT is not set -# CONFIG_SERIAL_8250_HUB6 is not set -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=256 - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# L3 serial bus support -# -# CONFIG_L3 is not set -# CONFIG_L3_ALGOBIT is not set -# CONFIG_L3_BIT_SA1100_GPIO is not set -# CONFIG_L3_SA1111 is not set -# CONFIG_BIT_SA1100_GPIO is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -# CONFIG_MOUSE is not set - -# -# Joysticks -# -# CONFIG_INPUT_GAMEPORT is not set -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -# CONFIG_INTEL_RNG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set -# CONFIG_REISERFS_FS is not set -# CONFIG_REISERFS_CHECK is not set -# CONFIG_REISERFS_PROC_INFO is not set -# CONFIG_ADFS_FS is not set -# CONFIG_ADFS_FS_RW is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_EXT3_FS is not set -# CONFIG_JBD is not set -# CONFIG_JBD_DEBUG is not set -# CONFIG_FAT_FS is not set -# CONFIG_MSDOS_FS is not set -# CONFIG_UMSDOS_FS is not set -# CONFIG_VFAT_FS is not set -# CONFIG_EFS_FS is not set -CONFIG_JFFS_FS=y -CONFIG_JFFS_FS_VERBOSE=0 -# CONFIG_JFFS_PROC_FS is not set -# CONFIG_JFFS2_FS is not set -# CONFIG_CRAMFS is not set -# CONFIG_TMPFS is not set -# CONFIG_RAMFS is not set -# CONFIG_ISO9660_FS is not set -# CONFIG_JOLIET is not set -# CONFIG_ZISOFS is not set -# CONFIG_MINIX_FS is not set -# CONFIG_VXFS_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS_DEBUG is not set -# CONFIG_NTFS_RW is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -# CONFIG_DEVFS_MOUNT is not set -# CONFIG_DEVFS_DEBUG is not set -CONFIG_DEVPTS_FS=y -# CONFIG_QNX4FS_FS is not set -# CONFIG_QNX4FS_RW is not set -# CONFIG_ROMFS_FS is not set -CONFIG_EXT2_FS=y -# CONFIG_SYSV_FS is not set -# CONFIG_UDF_FS is not set -# CONFIG_UDF_RW is not set -# CONFIG_UFS_FS is not set -# CONFIG_UFS_FS_WRITE is not set - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -# CONFIG_INTERMEZZO_FS is not set -# CONFIG_NFS_FS is not set -# CONFIG_NFS_V3 is not set -# CONFIG_ROOT_NFS is not set -# CONFIG_NFSD is not set -# CONFIG_NFSD_V3 is not set -# CONFIG_SUNRPC is not set -# CONFIG_LOCKD is not set -# CONFIG_SMB_FS is not set -# CONFIG_NCPFS_NLS is not set -# CONFIG_ZISOFS_FS is not set -# CONFIG_ZLIB_FS_INFLATE is not set - -# -# Partition Types -# -# CONFIG_PARTITION_ADVANCED is not set -CONFIG_MSDOS_PARTITION=y -# CONFIG_SMB_NLS is not set -# CONFIG_NLS is not set - -# -# Multimedia Capabilities Port drivers -# -# CONFIG_MCP is not set -# CONFIG_MCP_SA1100 is not set -# CONFIG_MCP_UCB1200 is not set -# CONFIG_MCP_UCB1200_AUDIO is not set -# CONFIG_MCP_UCB1200_TS is not set - -# -# USB support -# -# CONFIG_USB is not set -# CONFIG_USB_UHCI is not set -# CONFIG_USB_UHCI_ALT is not set -# CONFIG_USB_OHCI is not set -# CONFIG_USB_OHCI_SA1111 is not set -# CONFIG_USB_AUDIO is not set -# CONFIG_USB_BLUETOOTH is not set -# CONFIG_USB_STORAGE is not set -# CONFIG_USB_STORAGE_DEBUG is not set -# CONFIG_USB_STORAGE_DATAFAB is not set -# CONFIG_USB_STORAGE_FREECOM is not set -# CONFIG_USB_STORAGE_ISD200 is not set -# CONFIG_USB_STORAGE_DPCM is not set -# CONFIG_USB_STORAGE_HP8200e is not set -# CONFIG_USB_STORAGE_SDDR09 is not set -# CONFIG_USB_STORAGE_JUMPSHOT is not set -# CONFIG_USB_ACM is not set -# CONFIG_USB_PRINTER is not set -# CONFIG_USB_DC2XX is not set -# CONFIG_USB_MDC800 is not set -# CONFIG_USB_SCANNER is not set -# CONFIG_USB_MICROTEK is not set -# CONFIG_USB_HPUSBSCSI is not set -# CONFIG_USB_PEGASUS is not set -# CONFIG_USB_KAWETH is not set -# CONFIG_USB_CATC is not set -# CONFIG_USB_CDCETHER is not set -# CONFIG_USB_USBNET is not set -# CONFIG_USB_USS720 is not set - -# -# USB Serial Converter support -# -# CONFIG_USB_SERIAL is not set -# CONFIG_USB_SERIAL_GENERIC is not set -# CONFIG_USB_SERIAL_BELKIN is not set -# CONFIG_USB_SERIAL_WHITEHEAT is not set -# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set -# CONFIG_USB_SERIAL_EMPEG is not set -# CONFIG_USB_SERIAL_FTDI_SIO is not set -# CONFIG_USB_SERIAL_VISOR is not set -# CONFIG_USB_SERIAL_IR is not set -# CONFIG_USB_SERIAL_EDGEPORT is not set -# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set -# CONFIG_USB_SERIAL_KEYSPAN is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set -# CONFIG_USB_SERIAL_MCT_U232 is not set -# CONFIG_USB_SERIAL_PL2303 is not set -# CONFIG_USB_SERIAL_CYBERJACK is not set -# CONFIG_USB_SERIAL_XIRCOM is not set -# CONFIG_USB_SERIAL_OMNINET is not set -# CONFIG_USB_RIO500 is not set - -# -# Bluetooth support -# -# CONFIG_BT is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_USER=y -# CONFIG_DEBUG_INFO is not set -# CONFIG_NO_PGT_CACHE is not set -# CONFIG_DEBUG_KERNEL is not set -# CONFIG_DEBUG_SLAB is not set -# CONFIG_MAGIC_SYSRQ is not set -# CONFIG_DEBUG_SPINLOCK is not set -# CONFIG_DEBUG_WAITQ is not set -# CONFIG_DEBUG_BUGVERBOSE is not set -# CONFIG_DEBUG_ERRORS is not set -# CONFIG_DEBUG_LL is not set -# CONFIG_DEBUG_DC21285_PORT is not set -# CONFIG_DEBUG_CLPS711X_UART2 is not set -# CONFIG_DEBUG_LL_SER3 is not set diff -prauN linux-2.6.0-test5/arch/arm/def-configs/freebird wli-2.6.0-test5-bk12-25/arch/arm/def-configs/freebird --- linux-2.6.0-test5/arch/arm/def-configs/freebird 2003-09-08 12:49:54.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/freebird 1969-12-31 16:00:00.000000000 -0800 @@ -1,615 +0,0 @@ -# -# Automatically generated by make menuconfig: don't edit -# -CONFIG_ARM=y -# CONFIG_EISA is not set -# CONFIG_SBUS is not set -# CONFIG_MCA is not set -CONFIG_UID16=y - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -# CONFIG_OBSOLETE is not set - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODVERSIONS is not set -# CONFIG_KMOD is not set - -# -# System Type -# -# CONFIG_ARCH_ARCA5K is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_RPC is not set -CONFIG_ARCH_SA1100=y -# CONFIG_ARCH_CLPS711X is not set - -# -# Archimedes/A5000 Implementations -# -# CONFIG_ARCH_ARC is not set -# CONFIG_ARCH_A5K is not set - -# -# Footbridge Implementations -# -# CONFIG_ARCH_CATS is not set -# CONFIG_ARCH_PERSONAL_SERVER is not set -# CONFIG_ARCH_EBSA285_ADDIN is not set -# CONFIG_ARCH_EBSA285_HOST is not set -# CONFIG_ARCH_NETWINDER is not set - -# -# SA11x0 Implementations -# -# CONFIG_SA1100_ASSABET is not set -# CONFIG_ASSABET_NEPONSET is not set -# CONFIG_SA1100_BRUTUS is not set -# CONFIG_SA1100_CERF is not set -# CONFIG_SA1100_BITSY is not set -# CONFIG_SA1100_EXTENEX1 is not set -CONFIG_SA1100_FREEBIRD=y -# CONFIG_SA1100_GRAPHICSCLIENT is not set -# CONFIG_SA1100_HUW_WEBPANEL is not set -# CONFIG_SA1100_LART is not set -# CONFIG_SA1100_PLEB is not set -# CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_PANGOLIN is not set -# CONFIG_SA1100_SHERMAN is not set -# CONFIG_SA1100_VICTOR is not set -# CONFIG_SA1100_XP860 is not set -# CONFIG_SA1100_YOPY is not set -# CONFIG_SA1100_PFS168 is not set -CONFIG_SA1100_FREEBIRD_OLD=y -# CONFIG_SA1100_FREEBIRD_NEW is not set -CONFIG_SA1100_FL=y -CONFIG_SA1100_USB=m -CONFIG_SA1100_USB_NETLINK=m -CONFIG_SA1100_USB_CHAR=m -# CONFIG_SA1100_FREQUENCY_SCALE is not set -# CONFIG_SA1100_VOLTAGE_SCALE is not set - -# -# CLPS711X/EP721X Implementations -# -# CONFIG_ARCH_P720T is not set -# CONFIG_ARCH_ACORN is not set -# CONFIG_FOOTBRIDGE is not set -# CONFIG_FOOTBRIDGE_HOST is not set -# CONFIG_FOOTBRIDGE_ADDIN is not set -CONFIG_CPU_32=y -# CONFIG_CPU_26 is not set -# CONFIG_CPU_32v3 is not set -CONFIG_CPU_32v4=y -# CONFIG_CPU_ARM610 is not set -# CONFIG_CPU_ARM710 is not set -# CONFIG_CPU_ARM720T is not set -# CONFIG_CPU_ARM920T is not set -# CONFIG_CPU_ARM1020 is not set -# CONFIG_CPU_SA110 is not set -CONFIG_CPU_SA1100=y -CONFIG_DISCONTIGMEM=y - -# -# General setup -# -# CONFIG_ANGELBOOT is not set -# CONFIG_PCI is not set -# CONFIG_ISA is not set -# CONFIG_ISA_DMA is not set -CONFIG_HOTPLUG=y - -# -# PCMCIA/CardBus support -# -CONFIG_PCMCIA=y -# CONFIG_I82365 is not set -# CONFIG_TCIC is not set -# CONFIG_PCMCIA_CLPS6700 is not set -CONFIG_PCMCIA_SA1100=y -CONFIG_NET=y -CONFIG_SYSVIPC=y -# CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_SYSCTL=y -# CONFIG_FPE_NWFPE is not set -# CONFIG_FPE_FASTFPE is not set -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -CONFIG_BINFMT_AOUT=m -CONFIG_BINFMT_ELF=y -CONFIG_BINFMT_MISC=m -CONFIG_PM=y -CONFIG_APM=y -# CONFIG_ARTHUR is not set -CONFIG_CMDLINE="mem=32M root=/dev/ram initrd=0xc0800000,3M" -# CONFIG_PFS168_CMDLINE is not set -# CONFIG_LEDS is not set -CONFIG_ALIGNMENT_TRAP=y -# CONFIG_UCB1200 is not set - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Memory Technology Devices (MTD) -# -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set -# CONFIG_MTD_DOC1000 is not set -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOCPROBE is not set -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_MTDRAM is not set -CONFIG_MTD_CFI=y -# CONFIG_MTD_CFI_ADV_OPTIONS is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_AMDSTD is not set -# CONFIG_MTD_SHARP is not set -# CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_NORA is not set -# CONFIG_MTD_PNC2000 is not set -# CONFIG_MTD_RPXLITE is not set -# CONFIG_MTD_SC520CDP is not set -# CONFIG_MTD_SBC_MEDIAGX is not set -# CONFIG_MTD_ELAN_104NC is not set -CONFIG_MTD_SA1100=y -# CONFIG_MTD_DC21285 is not set -# CONFIG_MTD_IQ80310 is not set -# CONFIG_MTD_CSTM_CFI_JEDEC is not set -# CONFIG_MTD_JEDEC is not set -# CONFIG_MTD_MIXMEM is not set -# CONFIG_MTD_OCTAGON is not set -# CONFIG_MTD_VMAX is not set -# CONFIG_MTD_NAND is not set -# CONFIG_MTD_NAND_SPIA is not set -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -# CONFIG_NFTL is not set - -# -# Plug and Play configuration -# -# CONFIG_PNP is not set -# CONFIG_ISAPNP is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_XD is not set -# CONFIG_PARIDE is not set -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_BLK_DEV_DAC960 is not set -CONFIG_BLK_DEV_LOOP=m -CONFIG_BLK_DEV_NBD=m -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=8192 -CONFIG_BLK_DEV_INITRD=y - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set -# CONFIG_BLK_DEV_MD is not set -# CONFIG_MD_LINEAR is not set -# CONFIG_MD_RAID0 is not set -# CONFIG_MD_RAID1 is not set -# CONFIG_MD_RAID5 is not set -# CONFIG_BLK_DEV_LVM is not set - -# -# Networking options -# -# CONFIG_PACKET is not set -# CONFIG_NETLINK is not set -# CONFIG_NETFILTER is not set -# CONFIG_FILTER is not set -CONFIG_UNIX=y -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -# CONFIG_IP_PNP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_INET_ECN is not set -# CONFIG_SYN_COOKIES is not set -# CONFIG_IPV6 is not set -# CONFIG_KHTTPD is not set -# CONFIG_ATM is not set -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_LLC is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set -# CONFIG_NET_SB1000 is not set - -# -# Ethernet (10 or 100Mbit) -# -# CONFIG_NET_ETHERNET is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_ACENIC is not set -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -# CONFIG_SK98LIN is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -CONFIG_PPP=m -# CONFIG_PPP_MULTILINK is not set -CONFIG_PPP_ASYNC=m -# CONFIG_PPP_SYNC_TTY is not set -CONFIG_PPP_DEFLATE=m -CONFIG_PPP_BSDCOMP=m -# CONFIG_PPPOE is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set - -# -# Token Ring devices -# -# CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# PCMCIA network device support -# -CONFIG_NET_PCMCIA=y -# CONFIG_PCMCIA_3C589 is not set -# CONFIG_PCMCIA_3C574 is not set -# CONFIG_PCMCIA_FMVJ18X is not set -CONFIG_PCMCIA_PCNET=m -# CONFIG_PCMCIA_NMCLAN is not set -# CONFIG_PCMCIA_SMC91C92 is not set -# CONFIG_PCMCIA_XIRC2PS is not set -# CONFIG_ARCNET_COM20020_CS is not set -# CONFIG_PCMCIA_IBMTR is not set -# CONFIG_NET_PCMCIA_RADIO is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -CONFIG_IRDA=m -# CONFIG_IRLAN is not set -# CONFIG_IRNET is not set -# CONFIG_IRCOMM is not set -# CONFIG_IRDA_ULTRA is not set -# CONFIG_IRDA_OPTIONS is not set - -# -# Infrared-port device drivers -# -CONFIG_IRTTY_SIR=m -# CONFIG_IRPORT_SIR is not set -# CONFIG_NSC_FIR is not set -# CONFIG_WINBOND_FIR is not set -# CONFIG_TOSHIBA_FIR is not set -# CONFIG_SMC_IRCC_FIR is not set -CONFIG_SA1100_FIR=m -# CONFIG_DONGLE is not set - -# -# ATA/IDE/MFM/RLL support -# -CONFIG_IDE=y - -# -# IDE, ATA and ATAPI Block devices -# -CONFIG_BLK_DEV_IDE=y -# CONFIG_BLK_DEV_HD_IDE is not set -# CONFIG_BLK_DEV_HD is not set -CONFIG_BLK_DEV_IDEDISK=m -# CONFIG_IDEDISK_MULTI_MODE is not set -CONFIG_BLK_DEV_IDECS=m -# CONFIG_BLK_DEV_IDECD is not set -# CONFIG_BLK_DEV_IDETAPE is not set -# CONFIG_BLK_DEV_IDEFLOPPY is not set -# CONFIG_BLK_DEV_IDESCSI is not set -# CONFIG_BLK_DEV_CMD640 is not set -# CONFIG_BLK_DEV_CMD640_ENHANCED is not set -# CONFIG_BLK_DEV_ISAPNP is not set -# CONFIG_IDE_CHIPSETS is not set -# CONFIG_IDEDMA_AUTO is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# I2O device support -# -# CONFIG_I2O is not set -# CONFIG_I2O_BLOCK is not set -# CONFIG_I2O_LAN is not set -# CONFIG_I2O_SCSI is not set -# CONFIG_I2O_PROC is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Input core support -# -# CONFIG_INPUT is not set - -# -# Character devices -# -CONFIG_VT=y -# CONFIG_VT_CONSOLE is not set -# CONFIG_SERIAL is not set -# CONFIG_SERIAL_EXTENDED is not set -# CONFIG_SERIAL_NONSTANDARD is not set -CONFIG_SERIAL_SA1100=y -CONFIG_SERIAL_SA1100_CONSOLE=y -CONFIG_SA1100_DEFAULT_BAUDRATE=9600 -# CONFIG_TOUCHSCREEN_UCB1200 is not set -# CONFIG_TOUCHSCREEN_BITSY is not set -CONFIG_FB_TS_BT=y -# CONFIG_PROFILER is not set -# CONFIG_PFS168_SPI is not set -# CONFIG_PFS168_DTMF is not set -# CONFIG_PFS168_MISC is not set -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=32 - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -# CONFIG_MOUSE is not set - -# -# Joysticks -# -# CONFIG_JOYSTICK is not set -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -# CONFIG_INTEL_RNG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -CONFIG_SA1100_RTC=y -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set -# CONFIG_PCMCIA_SERIAL is not set - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set -# CONFIG_REISERFS_FS is not set -# CONFIG_REISERFS_CHECK is not set -# CONFIG_ADFS_FS is not set -# CONFIG_ADFS_FS_RW is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_FAT_FS is not set -# CONFIG_MSDOS_FS is not set -# CONFIG_UMSDOS_FS is not set -# CONFIG_VFAT_FS is not set -# CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set -# CONFIG_JFFS2_FS is not set -# CONFIG_CRAMFS is not set -CONFIG_RAMFS=y -# CONFIG_ISO9660_FS is not set -# CONFIG_JOLIET is not set -# CONFIG_MINIX_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS_DEBUG is not set -# CONFIG_NTFS_RW is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -# CONFIG_DEVFS_MOUNT is not set -# CONFIG_DEVFS_DEBUG is not set -CONFIG_DEVPTS_FS=y -# CONFIG_QNX4FS_FS is not set -# CONFIG_QNX4FS_RW is not set -# CONFIG_ROMFS_FS is not set -CONFIG_EXT2_FS=y -# CONFIG_SYSV_FS is not set -# CONFIG_SYSV_FS_WRITE is not set -# CONFIG_UDF_FS is not set -# CONFIG_UDF_RW is not set -# CONFIG_UFS_FS is not set -# CONFIG_UFS_FS_WRITE is not set - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -# CONFIG_NFS_FS is not set -# CONFIG_NFS_V3 is not set -# CONFIG_ROOT_NFS is not set -# CONFIG_NFSD is not set -# CONFIG_NFSD_V3 is not set -# CONFIG_SUNRPC is not set -# CONFIG_LOCKD is not set -# CONFIG_SMB_FS is not set -# CONFIG_NCP_FS is not set -# CONFIG_NCPFS_PACKET_SIGNING is not set -# CONFIG_NCPFS_IOCTL_LOCKING is not set -# CONFIG_NCPFS_STRONG is not set -# CONFIG_NCPFS_NFS_NS is not set -# CONFIG_NCPFS_OS2_NS is not set -# CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_NLS is not set -# CONFIG_NCPFS_EXTRAS is not set - -# -# Partition Types -# -# CONFIG_PARTITION_ADVANCED is not set -CONFIG_MSDOS_PARTITION=y -# CONFIG_SMB_NLS is not set -# CONFIG_NLS is not set - -# -# Console drivers -# -CONFIG_PC_KEYMAP=y -# CONFIG_VGA_CONSOLE is not set -CONFIG_FB=y - -# -# Frame-buffer support -# -CONFIG_FB=y -CONFIG_DUMMY_CONSOLE=y -# CONFIG_FB_ACORN is not set -# CONFIG_FB_CLPS711X is not set -# CONFIG_FB_CYBER2000 is not set -CONFIG_FB_SA1100=y -# CONFIG_FB_VIRTUAL is not set -# CONFIG_FBCON_ADVANCED is not set -CONFIG_FBCON_CFB2=y -CONFIG_FBCON_CFB4=y -CONFIG_FBCON_CFB8=y -CONFIG_FBCON_CFB16=y -# CONFIG_FBCON_FONTWIDTH8_ONLY is not set -CONFIG_FBCON_FONTS=y -CONFIG_FONT_8x8=y -CONFIG_FONT_8x16=y -# CONFIG_FONT_SUN8x16 is not set -# CONFIG_FONT_SUN12x22 is not set -# CONFIG_FONT_6x11 is not set -# CONFIG_FONT_PEARL_8x8 is not set -# CONFIG_FONT_ACORN_8x8 is not set - -# -# Sound -# -CONFIG_SOUND=y -CONFIG_SOUND_UDA1341=y -# CONFIG_SOUND_UDA1341_GSM is not set -# CONFIG_SOUND_SA1100_SSP is not set -# CONFIG_SOUND_CMPCI is not set -# CONFIG_SOUND_EMU10K1 is not set -# CONFIG_SOUND_FUSION is not set -# CONFIG_SOUND_CS4281 is not set -# CONFIG_SOUND_ES1370 is not set -# CONFIG_SOUND_ES1371 is not set -# CONFIG_SOUND_ESSSOLO1 is not set -# CONFIG_SOUND_MAESTRO is not set -# CONFIG_SOUND_MAESTRO3 is not set -# CONFIG_SOUND_ICH is not set -# CONFIG_SOUND_SONICVIBES is not set -# CONFIG_SOUND_TRIDENT is not set -# CONFIG_SOUND_MSNDCLAS is not set -# CONFIG_SOUND_MSNDPIN is not set -# CONFIG_SOUND_VIA82CXXX is not set -# CONFIG_SOUND_OSS is not set -# CONFIG_SOUND_TVMIXER is not set - -# -# USB support -# -# CONFIG_USB is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_ERRORS=y -CONFIG_DEBUG_USER=y -# CONFIG_DEBUG_INFO is not set -# CONFIG_MAGIC_SYSRQ is not set -# CONFIG_NO_PGT_CACHE is not set -# CONFIG_DEBUG_LL is not set -# CONFIG_DEBUG_DC21285_PORT is not set -# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -prauN linux-2.6.0-test5/arch/arm/def-configs/freebird_new wli-2.6.0-test5-bk12-25/arch/arm/def-configs/freebird_new --- linux-2.6.0-test5/arch/arm/def-configs/freebird_new 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/freebird_new 1969-12-31 16:00:00.000000000 -0800 @@ -1,635 +0,0 @@ -# -# Automatically generated by make menuconfig: don't edit -# -CONFIG_ARM=y -# CONFIG_EISA is not set -# CONFIG_SBUS is not set -# CONFIG_MCA is not set -CONFIG_UID16=y - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -# CONFIG_OBSOLETE is not set - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODVERSIONS is not set -CONFIG_KMOD=y - -# -# System Type -# -# CONFIG_ARCH_ARCA5K is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_RPC is not set -CONFIG_ARCH_SA1100=y -# CONFIG_ARCH_CLPS711X is not set - -# -# Archimedes/A5000 Implementations -# -# CONFIG_ARCH_ARC is not set -# CONFIG_ARCH_A5K is not set - -# -# Footbridge Implementations -# -# CONFIG_ARCH_CATS is not set -# CONFIG_ARCH_PERSONAL_SERVER is not set -# CONFIG_ARCH_EBSA285_ADDIN is not set -# CONFIG_ARCH_EBSA285_HOST is not set -# CONFIG_ARCH_NETWINDER is not set - -# -# SA11x0 Implementations -# -# CONFIG_SA1100_ASSABET is not set -# CONFIG_ASSABET_NEPONSET is not set -# CONFIG_SA1100_BRUTUS is not set -# CONFIG_SA1100_CERF is not set -# CONFIG_SA1100_BITSY is not set -# CONFIG_SA1100_EXTENEX1 is not set -CONFIG_SA1100_FREEBIRD=y -# CONFIG_SA1100_GRAPHICSCLIENT is not set -# CONFIG_SA1100_HUW_WEBPANEL is not set -# CONFIG_SA1100_LART is not set -# CONFIG_SA1100_PLEB is not set -# CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_PANGOLIN is not set -# CONFIG_SA1100_SHERMAN is not set -# CONFIG_SA1100_VICTOR is not set -# CONFIG_SA1100_XP860 is not set -# CONFIG_SA1100_YOPY is not set -# CONFIG_SA1100_PFS168 is not set -# CONFIG_SA1100_FREEBIRD_OLD is not set -CONFIG_SA1100_FREEBIRD_NEW=y -CONFIG_SA1100_FL=m -CONFIG_SA1100_USB=m -CONFIG_SA1100_USB_NETLINK=m -CONFIG_SA1100_USB_CHAR=m -CONFIG_SA1100_FREQUENCY_SCALE=y -# CONFIG_SA1100_VOLTAGE_SCALE is not set - -# -# CLPS711X/EP721X Implementations -# -# CONFIG_ARCH_P720T is not set -# CONFIG_ARCH_ACORN is not set -# CONFIG_FOOTBRIDGE is not set -# CONFIG_FOOTBRIDGE_HOST is not set -# CONFIG_FOOTBRIDGE_ADDIN is not set -CONFIG_CPU_32=y -# CONFIG_CPU_26 is not set -# CONFIG_CPU_32v3 is not set -CONFIG_CPU_32v4=y -# CONFIG_CPU_ARM610 is not set -# CONFIG_CPU_ARM710 is not set -# CONFIG_CPU_ARM720T is not set -# CONFIG_CPU_ARM920T is not set -# CONFIG_CPU_ARM1020 is not set -# CONFIG_CPU_SA110 is not set -CONFIG_CPU_SA1100=y -CONFIG_DISCONTIGMEM=y - -# -# General setup -# -# CONFIG_ANGELBOOT is not set -# CONFIG_PCI is not set -# CONFIG_ISA is not set -# CONFIG_ISA_DMA is not set -CONFIG_HOTPLUG=y - -# -# PCMCIA/CardBus support -# -CONFIG_PCMCIA=m -# CONFIG_I82365 is not set -# CONFIG_TCIC is not set -# CONFIG_PCMCIA_CLPS6700 is not set -CONFIG_PCMCIA_SA1100=m -CONFIG_NET=y -CONFIG_SYSVIPC=y -# CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_SYSCTL=y -# CONFIG_FPE_NWFPE is not set -# CONFIG_FPE_FASTFPE is not set -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -# CONFIG_BINFMT_AOUT is not set -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -CONFIG_PM=y -CONFIG_APM=y -# CONFIG_ARTHUR is not set -CONFIG_CMDLINE="noinitrd console=ttySA0 init=/linuxrc root=/dev/mtdblock4 mem=32m" -# CONFIG_PFS168_CMDLINE is not set -# CONFIG_LEDS is not set -CONFIG_ALIGNMENT_TRAP=y -# CONFIG_UCB1200 is not set - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Memory Technology Devices (MTD) -# -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set -# CONFIG_MTD_DOC1000 is not set -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOCPROBE is not set -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_MTDRAM is not set -CONFIG_MTD_CFI=y -# CONFIG_MTD_CFI_ADV_OPTIONS is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_AMDSTD is not set -# CONFIG_MTD_SHARP is not set -# CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_NORA is not set -# CONFIG_MTD_PNC2000 is not set -# CONFIG_MTD_RPXLITE is not set -# CONFIG_MTD_SC520CDP is not set -# CONFIG_MTD_SBC_MEDIAGX is not set -# CONFIG_MTD_ELAN_104NC is not set -CONFIG_MTD_SA1100=y -# CONFIG_MTD_DC21285 is not set -# CONFIG_MTD_IQ80310 is not set -# CONFIG_MTD_CSTM_CFI_JEDEC is not set -# CONFIG_MTD_JEDEC is not set -# CONFIG_MTD_MIXMEM is not set -# CONFIG_MTD_OCTAGON is not set -# CONFIG_MTD_VMAX is not set -# CONFIG_MTD_NAND is not set -# CONFIG_MTD_NAND_SPIA is not set -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -# CONFIG_NFTL is not set - -# -# Plug and Play configuration -# -# CONFIG_PNP is not set -# CONFIG_ISAPNP is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_XD is not set -# CONFIG_PARIDE is not set -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_BLK_DEV_DAC960 is not set -CONFIG_BLK_DEV_LOOP=m -CONFIG_BLK_DEV_NBD=m -# CONFIG_BLK_DEV_RAM is not set -# CONFIG_BLK_DEV_INITRD is not set - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set -# CONFIG_BLK_DEV_MD is not set -# CONFIG_MD_LINEAR is not set -# CONFIG_MD_RAID0 is not set -# CONFIG_MD_RAID1 is not set -# CONFIG_MD_RAID5 is not set -# CONFIG_BLK_DEV_LVM is not set - -# -# Networking options -# -CONFIG_PACKET=y -CONFIG_PACKET_MMAP=y -CONFIG_NETLINK=y -CONFIG_RTNETLINK=y -# CONFIG_NETLINK_DEV is not set -CONFIG_NETFILTER=y -# CONFIG_NETFILTER_DEBUG is not set -# CONFIG_FILTER is not set -CONFIG_UNIX=y -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -# CONFIG_IP_PNP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_ARPD is not set -# CONFIG_INET_ECN is not set -# CONFIG_SYN_COOKIES is not set - -# -# IP: Netfilter Configuration -# -# CONFIG_IP_NF_CONNTRACK is not set -# CONFIG_IP_NF_QUEUE is not set -# CONFIG_IP_NF_IPTABLES is not set -# CONFIG_IP_NF_COMPAT_IPCHAINS is not set -# CONFIG_IP_NF_COMPAT_IPFWADM is not set -# CONFIG_IPV6 is not set -# CONFIG_KHTTPD is not set -# CONFIG_ATM is not set -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_LLC is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set -# CONFIG_ETHERTAP is not set -# CONFIG_NET_SB1000 is not set - -# -# Ethernet (10 or 100Mbit) -# -# CONFIG_NET_ETHERNET is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_ACENIC is not set -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -# CONFIG_SK98LIN is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -CONFIG_PPP=m -# CONFIG_PPP_MULTILINK is not set -CONFIG_PPP_ASYNC=m -# CONFIG_PPP_SYNC_TTY is not set -CONFIG_PPP_DEFLATE=m -CONFIG_PPP_BSDCOMP=m -# CONFIG_PPPOE is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set - -# -# Token Ring devices -# -# CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# PCMCIA network device support -# -CONFIG_NET_PCMCIA=y -# CONFIG_PCMCIA_3C589 is not set -# CONFIG_PCMCIA_3C574 is not set -# CONFIG_PCMCIA_FMVJ18X is not set -CONFIG_PCMCIA_PCNET=m -# CONFIG_PCMCIA_NMCLAN is not set -# CONFIG_PCMCIA_SMC91C92 is not set -# CONFIG_PCMCIA_XIRC2PS is not set -# CONFIG_ARCNET_COM20020_CS is not set -# CONFIG_PCMCIA_IBMTR is not set -# CONFIG_NET_PCMCIA_RADIO is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -CONFIG_IRDA=m -# CONFIG_IRLAN is not set -# CONFIG_IRNET is not set -# CONFIG_IRCOMM is not set -# CONFIG_IRDA_ULTRA is not set -# CONFIG_IRDA_OPTIONS is not set - -# -# Infrared-port device drivers -# -# CONFIG_IRTTY_SIR is not set -# CONFIG_IRPORT_SIR is not set -# CONFIG_NSC_FIR is not set -# CONFIG_WINBOND_FIR is not set -# CONFIG_TOSHIBA_FIR is not set -# CONFIG_SMC_IRCC_FIR is not set -CONFIG_SA1100_FIR=m -# CONFIG_DONGLE is not set - -# -# ATA/IDE/MFM/RLL support -# -CONFIG_IDE=m - -# -# IDE, ATA and ATAPI Block devices -# -CONFIG_BLK_DEV_IDE=m -# CONFIG_BLK_DEV_HD_IDE is not set -# CONFIG_BLK_DEV_HD is not set -CONFIG_BLK_DEV_IDEDISK=m -# CONFIG_IDEDISK_MULTI_MODE is not set -CONFIG_BLK_DEV_IDECS=m -# CONFIG_BLK_DEV_IDECD is not set -# CONFIG_BLK_DEV_IDETAPE is not set -# CONFIG_BLK_DEV_IDEFLOPPY is not set -# CONFIG_BLK_DEV_IDESCSI is not set -# CONFIG_BLK_DEV_CMD640 is not set -# CONFIG_BLK_DEV_CMD640_ENHANCED is not set -# CONFIG_BLK_DEV_ISAPNP is not set -# CONFIG_IDE_CHIPSETS is not set -# CONFIG_IDEDMA_AUTO is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# I2O device support -# -# CONFIG_I2O is not set -# CONFIG_I2O_BLOCK is not set -# CONFIG_I2O_LAN is not set -# CONFIG_I2O_SCSI is not set -# CONFIG_I2O_PROC is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Input core support -# -# CONFIG_INPUT is not set - -# -# Character devices -# -CONFIG_VT=y -# CONFIG_VT_CONSOLE is not set -CONFIG_SERIAL=m -# CONFIG_SERIAL_EXTENDED is not set -# CONFIG_SERIAL_NONSTANDARD is not set -CONFIG_SERIAL_SA1100=y -CONFIG_SERIAL_SA1100_CONSOLE=y -CONFIG_SA1100_DEFAULT_BAUDRATE=9600 -# CONFIG_TOUCHSCREEN_UCB1200 is not set -# CONFIG_TOUCHSCREEN_BITSY is not set -CONFIG_FB_TS_BT=y -# CONFIG_PROFILER is not set -# CONFIG_PFS168_SPI is not set -# CONFIG_PFS168_DTMF is not set -# CONFIG_PFS168_MISC is not set -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=32 - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -# CONFIG_MOUSE is not set - -# -# Joysticks -# -# CONFIG_JOYSTICK is not set -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -# CONFIG_INTEL_RNG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -CONFIG_SA1100_RTC=y -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set -CONFIG_PCMCIA_SERIAL=m - -# -# PCMCIA character device support -# -CONFIG_PCMCIA_SERIAL_CS=m - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -CONFIG_AUTOFS_FS=m -# CONFIG_AUTOFS4_FS is not set -# CONFIG_REISERFS_FS is not set -# CONFIG_REISERFS_CHECK is not set -# CONFIG_ADFS_FS is not set -# CONFIG_ADFS_FS_RW is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_FAT_FS is not set -# CONFIG_MSDOS_FS is not set -# CONFIG_UMSDOS_FS is not set -# CONFIG_VFAT_FS is not set -# CONFIG_EFS_FS is not set -CONFIG_JFFS_FS=m -CONFIG_JFFS_FS_VERBOSE=0 -# CONFIG_JFFS2_FS is not set -CONFIG_CRAMFS=y -CONFIG_RAMFS=y -# CONFIG_ISO9660_FS is not set -# CONFIG_JOLIET is not set -# CONFIG_MINIX_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS_DEBUG is not set -# CONFIG_NTFS_RW is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -# CONFIG_DEVFS_MOUNT is not set -# CONFIG_DEVFS_DEBUG is not set -CONFIG_DEVPTS_FS=y -# CONFIG_QNX4FS_FS is not set -# CONFIG_QNX4FS_RW is not set -# CONFIG_ROMFS_FS is not set -CONFIG_EXT2_FS=m -# CONFIG_SYSV_FS is not set -# CONFIG_SYSV_FS_WRITE is not set -# CONFIG_UDF_FS is not set -# CONFIG_UDF_RW is not set -# CONFIG_UFS_FS is not set -# CONFIG_UFS_FS_WRITE is not set - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -CONFIG_NFS_FS=m -# CONFIG_NFS_V3 is not set -# CONFIG_ROOT_NFS is not set -# CONFIG_NFSD is not set -# CONFIG_NFSD_V3 is not set -CONFIG_SUNRPC=m -CONFIG_LOCKD=m -# CONFIG_SMB_FS is not set -# CONFIG_NCP_FS is not set -# CONFIG_NCPFS_PACKET_SIGNING is not set -# CONFIG_NCPFS_IOCTL_LOCKING is not set -# CONFIG_NCPFS_STRONG is not set -# CONFIG_NCPFS_NFS_NS is not set -# CONFIG_NCPFS_OS2_NS is not set -# CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_NLS is not set -# CONFIG_NCPFS_EXTRAS is not set - -# -# Partition Types -# -# CONFIG_PARTITION_ADVANCED is not set -CONFIG_MSDOS_PARTITION=y -# CONFIG_SMB_NLS is not set -# CONFIG_NLS is not set - -# -# Console drivers -# -CONFIG_PC_KEYMAP=y -# CONFIG_VGA_CONSOLE is not set -CONFIG_FB=y - -# -# Frame-buffer support -# -CONFIG_FB=y -CONFIG_DUMMY_CONSOLE=y -# CONFIG_FB_ACORN is not set -# CONFIG_FB_CLPS711X is not set -# CONFIG_FB_CYBER2000 is not set -CONFIG_FB_SA1100=y -# CONFIG_FB_VIRTUAL is not set -# CONFIG_FBCON_ADVANCED is not set -CONFIG_FBCON_CFB2=y -CONFIG_FBCON_CFB4=y -CONFIG_FBCON_CFB8=y -CONFIG_FBCON_CFB16=y -# CONFIG_FBCON_FONTWIDTH8_ONLY is not set -CONFIG_FBCON_FONTS=y -CONFIG_FONT_8x8=y -CONFIG_FONT_8x16=y -# CONFIG_FONT_SUN8x16 is not set -# CONFIG_FONT_SUN12x22 is not set -# CONFIG_FONT_6x11 is not set -# CONFIG_FONT_PEARL_8x8 is not set -# CONFIG_FONT_ACORN_8x8 is not set - -# -# Sound -# -CONFIG_SOUND=y -CONFIG_SOUND_UDA1341=y -# CONFIG_SOUND_UDA1341_GSM is not set -# CONFIG_SOUND_SA1100_SSP is not set -# CONFIG_SOUND_CMPCI is not set -# CONFIG_SOUND_EMU10K1 is not set -# CONFIG_SOUND_FUSION is not set -# CONFIG_SOUND_CS4281 is not set -# CONFIG_SOUND_ES1370 is not set -# CONFIG_SOUND_ES1371 is not set -# CONFIG_SOUND_ESSSOLO1 is not set -# CONFIG_SOUND_MAESTRO is not set -# CONFIG_SOUND_MAESTRO3 is not set -# CONFIG_SOUND_ICH is not set -# CONFIG_SOUND_SONICVIBES is not set -# CONFIG_SOUND_TRIDENT is not set -# CONFIG_SOUND_MSNDCLAS is not set -# CONFIG_SOUND_MSNDPIN is not set -# CONFIG_SOUND_VIA82CXXX is not set -# CONFIG_SOUND_OSS is not set -# CONFIG_SOUND_TVMIXER is not set - -# -# USB support -# -# CONFIG_USB is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_ERRORS=y -# CONFIG_DEBUG_USER is not set -# CONFIG_DEBUG_INFO is not set -CONFIG_MAGIC_SYSRQ=y -# CONFIG_NO_PGT_CACHE is not set -# CONFIG_DEBUG_LL is not set -# CONFIG_DEBUG_DC21285_PORT is not set -# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -prauN linux-2.6.0-test5/arch/arm/def-configs/graphicsclient wli-2.6.0-test5-bk12-25/arch/arm/def-configs/graphicsclient --- linux-2.6.0-test5/arch/arm/def-configs/graphicsclient 2003-09-08 12:50:56.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/graphicsclient 1969-12-31 16:00:00.000000000 -0800 @@ -1,732 +0,0 @@ -# -# Automatically generated make config: don't edit -# -CONFIG_ARM=y -# CONFIG_EISA is not set -# CONFIG_SBUS is not set -# CONFIG_MCA is not set -CONFIG_UID16=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y -# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -# CONFIG_OBSOLETE is not set - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODVERSIONS is not set -# CONFIG_KMOD is not set - -# -# System Type -# -# CONFIG_ARCH_ANAKIN is not set -# CONFIG_ARCH_ARCA5K is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_RPC is not set -CONFIG_ARCH_SA1100=y -# CONFIG_ARCH_SHARK is not set - -# -# Archimedes/A5000 Implementations -# - -# -# Archimedes/A5000 Implementations (select only ONE) -# -# CONFIG_ARCH_ARC is not set -# CONFIG_ARCH_A5K is not set - -# -# Footbridge Implementations -# -# CONFIG_ARCH_CATS is not set -# CONFIG_ARCH_PERSONAL_SERVER is not set -# CONFIG_ARCH_EBSA285_ADDIN is not set -# CONFIG_ARCH_EBSA285_HOST is not set -# CONFIG_ARCH_NETWINDER is not set - -# -# SA11x0 Implementations -# -# CONFIG_SA1100_ASSABET is not set -# CONFIG_ASSABET_NEPONSET is not set -# CONFIG_SA1100_BRUTUS is not set -# CONFIG_SA1100_CERF is not set -# CONFIG_SA1100_BITSY is not set -# CONFIG_SA1100_EXTENEX1 is not set -# CONFIG_SA1100_FLEXANET is not set -# CONFIG_SA1100_FREEBIRD is not set -CONFIG_SA1100_GRAPHICSCLIENT=y -# CONFIG_SA1100_JORNADA720 is not set -# CONFIG_SA1100_HUW_WEBPANEL is not set -# CONFIG_SA1100_ITSY is not set -# CONFIG_SA1100_LART is not set -# CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_OMNIMETER is not set -# CONFIG_SA1100_PANGOLIN is not set -# CONFIG_SA1100_PLEB is not set -# CONFIG_SA1100_SHERMAN is not set -# CONFIG_SA1100_SIMPAD is not set -# CONFIG_SA1100_PFS168 is not set -# CONFIG_SA1100_VICTOR is not set -# CONFIG_SA1100_XP860 is not set -# CONFIG_SA1100_YOPY is not set -# CONFIG_SA1100_GRAPHICSMASTER is not set -# CONFIG_SA1100_ADSBITSY is not set -# CONFIG_SA1100_USB is not set -# CONFIG_SA1100_USB_NETLINK is not set -# CONFIG_SA1100_USB_CHAR is not set - -# -# CLPS711X/EP721X Implementations -# -# CONFIG_ARCH_P720T is not set -# CONFIG_ARCH_ACORN is not set -# CONFIG_FOOTBRIDGE is not set -# CONFIG_FOOTBRIDGE_HOST is not set -# CONFIG_FOOTBRIDGE_ADDIN is not set -CONFIG_CPU_32=y -# CONFIG_CPU_26 is not set - -# -# Processor Type -# -# CONFIG_CPU_32v3 is not set -CONFIG_CPU_32v4=y -# CONFIG_CPU_ARM610 is not set -# CONFIG_CPU_ARM710 is not set -# CONFIG_CPU_ARM720T is not set -# CONFIG_CPU_ARM920T is not set -# CONFIG_CPU_ARM1020 is not set -# CONFIG_CPU_SA110 is not set -CONFIG_CPU_SA1100=y -CONFIG_DISCONTIGMEM=y -# CONFIG_CPU_BIG_ENDIAN is not set - -# -# General setup -# -# CONFIG_PCI is not set -# CONFIG_ISA is not set -# CONFIG_ISA_DMA is not set -# CONFIG_CPU_FREQ is not set -CONFIG_HOTPLUG=y - -# -# PCMCIA/CardBus support -# -CONFIG_PCMCIA=y -# CONFIG_I82365 is not set -# CONFIG_TCIC is not set -# CONFIG_PCMCIA_CLPS6700 is not set -CONFIG_PCMCIA_SA1100=y -CONFIG_NET=y -CONFIG_SYSVIPC=y -# CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_SYSCTL=y -CONFIG_FPE_NWFPE=y -# CONFIG_FPE_FASTFPE is not set -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -# CONFIG_BINFMT_AOUT is not set -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -# CONFIG_PM is not set -# CONFIG_APM is not set -# CONFIG_ARTHUR is not set -CONFIG_CMDLINE="ip=off mem=16M@0xc0000000 mem=16M@0xc8000000 root=/dev/ram initrd=0xc0800000,4M" -# CONFIG_PFS168_CMDLINE is not set -CONFIG_LEDS=y -CONFIG_LEDS_TIMER=y -CONFIG_LEDS_CPU=y -CONFIG_ALIGNMENT_TRAP=y - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Memory Technology Devices (MTD) -# -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set -CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_REDBOOT_PARTS is not set -# CONFIG_MTD_BOOTLDR_PARTS is not set -# CONFIG_MTD_AFS_PARTS is not set - -# -# User Modules And Translation Layers -# -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -# CONFIG_NFTL is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=y -# CONFIG_MTD_CFI_ADV_OPTIONS is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_AMDSTD is not set -# CONFIG_MTD_SHARP is not set -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_JEDEC is not set - -# -# Mapping drivers for chip access -# -CONFIG_MTD_PHYSMAP=y -CONFIG_MTD_PHYSMAP_START=800000 -CONFIG_MTD_PHYSMAP_LEN=1000000 -CONFIG_MTD_PHYSMAP_BUSWIDTH=4 -# CONFIG_MTD_SUN_UFLASH is not set -# CONFIG_MTD_NORA is not set -# CONFIG_MTD_PNC2000 is not set -# CONFIG_MTD_RPXLITE is not set -# CONFIG_MTD_TQM8XXL is not set -# CONFIG_MTD_SC520CDP is not set -# CONFIG_MTD_NETSC520 is not set -# CONFIG_MTD_SBC_GXX is not set -# CONFIG_MTD_ELAN_104NC is not set -CONFIG_MTD_SA1100=y -# CONFIG_MTD_SA1100_REDBOOT_PARTITIONS is not set -# CONFIG_MTD_SA1100_BOOTLDR_PARTITIONS is not set -# CONFIG_MTD_DC21285 is not set -# CONFIG_MTD_IQ80310 is not set -# CONFIG_MTD_DBOX2 is not set -# CONFIG_MTD_CSTM_MIPS_IXX is not set -# CONFIG_MTD_CFI_FLAGADM is not set -# CONFIG_MTD_ARM_INTEGRATOR is not set -# CONFIG_MTD_SOLUTIONENGINE is not set -# CONFIG_MTD_MIXMEM is not set -# CONFIG_MTD_OCTAGON is not set -# CONFIG_MTD_VMAX is not set -# CONFIG_MTD_OCELOT is not set -# CONFIG_MTD_L440GX is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_LART is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLKMTD is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC1000 is not set -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOCPROBE is not set - -# -# NAND Flash Device Drivers -# -# CONFIG_MTD_NAND is not set - -# -# Plug and Play configuration -# -# CONFIG_PNP is not set -# CONFIG_ISAPNP is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_XD is not set -# CONFIG_PARIDE is not set -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_BLK_DEV_DAC960 is not set -CONFIG_BLK_DEV_LOOP=m -# CONFIG_BLK_DEV_NBD is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=8192 -CONFIG_BLK_DEV_INITRD=y - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set -# CONFIG_BLK_DEV_MD is not set -# CONFIG_MD_LINEAR is not set -# CONFIG_MD_RAID0 is not set -# CONFIG_MD_RAID1 is not set -# CONFIG_MD_RAID5 is not set -# CONFIG_BLK_DEV_LVM is not set - -# -# Networking options -# -CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set -# CONFIG_NETLINK is not set -# CONFIG_NETFILTER is not set -# CONFIG_FILTER is not set -CONFIG_UNIX=y -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -CONFIG_IP_PNP=y -# CONFIG_IP_PNP_DHCP is not set -CONFIG_IP_PNP_BOOTP=y -# CONFIG_IP_PNP_RARP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_INET_ECN is not set -# CONFIG_SYN_COOKIES is not set -# CONFIG_IPV6 is not set -# CONFIG_KHTTPD is not set -# CONFIG_ATM is not set - -# -# -# -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_LLC is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set - -# -# Ethernet (10 or 100Mbit) -# -CONFIG_NET_ETHERNET=y -# CONFIG_SUNLANCE is not set -# CONFIG_SUNBMAC is not set -# CONFIG_SUNQE is not set -# CONFIG_SUNLANCE is not set -# CONFIG_SUNGEM is not set -# CONFIG_NET_VENDOR_3COM is not set -# CONFIG_LANCE is not set -CONFIG_NET_VENDOR_SMC=y -# CONFIG_WD80x3 is not set -# CONFIG_ULTRAMCA is not set -# CONFIG_ULTRA is not set -# CONFIG_ULTRA32 is not set -CONFIG_SMC9194=y -# CONFIG_NET_VENDOR_RACAL is not set -# CONFIG_NET_ISA is not set -# CONFIG_NET_PCI is not set -# CONFIG_NET_POCKET is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_ACENIC is not set -# CONFIG_ACENIC_OMIT_TIGON_I is not set -# CONFIG_MYRI_SBUS is not set -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -# CONFIG_SK98LIN is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PLIP is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set - -# -# Token Ring devices -# -# CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# PCMCIA network device support -# -CONFIG_NET_PCMCIA=y -# CONFIG_PCMCIA_3C589 is not set -# CONFIG_PCMCIA_3C574 is not set -# CONFIG_PCMCIA_FMVJ18X is not set -CONFIG_PCMCIA_PCNET=y -# CONFIG_PCMCIA_NMCLAN is not set -# CONFIG_PCMCIA_SMC91C92 is not set -# CONFIG_PCMCIA_XIRC2PS is not set -# CONFIG_ARCNET_COM20020_CS is not set -# CONFIG_PCMCIA_IBMTR is not set -# CONFIG_NET_PCMCIA_RADIO is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# ATA/IDE/MFM/RLL support -# -CONFIG_IDE=y - -# -# IDE, ATA and ATAPI Block devices -# -CONFIG_BLK_DEV_IDE=y - -# -# Please see Documentation/ide.txt for help/info on IDE drives -# -# CONFIG_BLK_DEV_HD_IDE is not set -# CONFIG_BLK_DEV_HD is not set -CONFIG_BLK_DEV_IDEDISK=y -# CONFIG_IDEDISK_MULTI_MODE is not set -CONFIG_BLK_DEV_IDECS=y -# CONFIG_BLK_DEV_IDECD is not set -# CONFIG_BLK_DEV_IDETAPE is not set -# CONFIG_BLK_DEV_IDEFLOPPY is not set -# CONFIG_BLK_DEV_IDESCSI is not set - -# -# IDE chipset support/bugfixes -# -# CONFIG_BLK_DEV_CMD640 is not set -# CONFIG_BLK_DEV_CMD640_ENHANCED is not set -# CONFIG_BLK_DEV_ISAPNP is not set -# CONFIG_IDE_CHIPSETS is not set -# CONFIG_IDEDMA_AUTO is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# I2O device support -# -# CONFIG_I2O is not set -# CONFIG_I2O_BLOCK is not set -# CONFIG_I2O_LAN is not set -# CONFIG_I2O_SCSI is not set -# CONFIG_I2O_PROC is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Input core support -# -# CONFIG_INPUT is not set - -# -# Character devices -# -CONFIG_VT=y -# CONFIG_VT_CONSOLE is not set -# CONFIG_SERIAL is not set -# CONFIG_SERIAL_EXTENDED is not set -# CONFIG_SERIAL_NONSTANDARD is not set -# CONFIG_SERIAL_21285 is not set -# CONFIG_SERIAL_21285_OLD is not set -# CONFIG_SERIAL_21285_CONSOLE is not set -# CONFIG_SERIAL_AMBA is not set -# CONFIG_SERIAL_AMBA_CONSOLE is not set -# CONFIG_SERIAL_CLPS711X is not set -# CONFIG_SERIAL_CLPS711X_CONSOLE is not set -CONFIG_SERIAL_SA1100=y -CONFIG_SERIAL_SA1100_CONSOLE=y -CONFIG_SA1100_DEFAULT_BAUDRATE=38400 -# CONFIG_SERIAL_8250 is not set -# CONFIG_SERIAL_8250_CONSOLE is not set -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=32 -CONFIG_UCB1200=y -CONFIG_TOUCHSCREEN_UCB1200=y -CONFIG_AUDIO_UCB1200=y -CONFIG_ADC_UCB1200=y -# CONFIG_TOUCHSCREEN_BITSY is not set -# CONFIG_PROFILER is not set -# CONFIG_PFS168_SPI is not set -# CONFIG_PFS168_DTMF is not set -# CONFIG_PFS168_MISC is not set - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -# CONFIG_MOUSE is not set - -# -# Joysticks -# -# CONFIG_JOYSTICK is not set - -# -# Input core support is needed for joysticks -# -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -# CONFIG_INTEL_RNG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -# CONFIG_SA1100_RTC is not set -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set - -# -# PCMCIA character devices -# - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set -# CONFIG_REISERFS_FS is not set -# CONFIG_REISERFS_CHECK is not set -# CONFIG_ADFS_FS is not set -# CONFIG_ADFS_FS_RW is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BFS_FS is not set -CONFIG_FAT_FS=y -# CONFIG_MSDOS_FS is not set -# CONFIG_UMSDOS_FS is not set -CONFIG_VFAT_FS=y -# CONFIG_EFS_FS is not set -CONFIG_JFFS_FS=y -CONFIG_JFFS_FS_VERBOSE=0 -CONFIG_JFFS2_FS=y -CONFIG_JFFS2_FS_DEBUG=0 -CONFIG_CRAMFS=y -# CONFIG_TMPFS is not set -CONFIG_RAMFS=y -# CONFIG_ISO9660_FS is not set -# CONFIG_JOLIET is not set -# CONFIG_MINIX_FS is not set -# CONFIG_VXFS_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS_DEBUG is not set -# CONFIG_NTFS_RW is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -# CONFIG_DEVFS_MOUNT is not set -# CONFIG_DEVFS_DEBUG is not set -CONFIG_DEVPTS_FS=y -# CONFIG_QNX4FS_FS is not set -# CONFIG_QNX4FS_RW is not set -# CONFIG_ROMFS_FS is not set -CONFIG_EXT2_FS=y -# CONFIG_SYSV_FS is not set -# CONFIG_UDF_FS is not set -# CONFIG_UDF_RW is not set -# CONFIG_UFS_FS is not set -# CONFIG_UFS_FS_WRITE is not set - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -CONFIG_NFS_FS=y -# CONFIG_NFS_V3 is not set -CONFIG_ROOT_NFS=y -# CONFIG_NFSD is not set -# CONFIG_NFSD_V3 is not set -CONFIG_SUNRPC=y -CONFIG_LOCKD=y -# CONFIG_SMB_FS is not set -# CONFIG_NCP_FS is not set -# CONFIG_NCPFS_PACKET_SIGNING is not set -# CONFIG_NCPFS_IOCTL_LOCKING is not set -# CONFIG_NCPFS_STRONG is not set -# CONFIG_NCPFS_NFS_NS is not set -# CONFIG_NCPFS_OS2_NS is not set -# CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_NLS is not set -# CONFIG_NCPFS_EXTRAS is not set - -# -# Partition Types -# -# CONFIG_PARTITION_ADVANCED is not set -CONFIG_MSDOS_PARTITION=y -# CONFIG_SMB_NLS is not set -CONFIG_NLS=y - -# -# Native Language Support -# -CONFIG_NLS_DEFAULT="iso8859-1" -# CONFIG_NLS_CODEPAGE_437 is not set -# CONFIG_NLS_CODEPAGE_737 is not set -# CONFIG_NLS_CODEPAGE_775 is not set -# CONFIG_NLS_CODEPAGE_850 is not set -# CONFIG_NLS_CODEPAGE_852 is not set -# CONFIG_NLS_CODEPAGE_855 is not set -# CONFIG_NLS_CODEPAGE_857 is not set -# CONFIG_NLS_CODEPAGE_860 is not set -# CONFIG_NLS_CODEPAGE_861 is not set -# CONFIG_NLS_CODEPAGE_862 is not set -# CONFIG_NLS_CODEPAGE_863 is not set -# CONFIG_NLS_CODEPAGE_864 is not set -# CONFIG_NLS_CODEPAGE_865 is not set -# CONFIG_NLS_CODEPAGE_866 is not set -# CONFIG_NLS_CODEPAGE_869 is not set -# CONFIG_NLS_CODEPAGE_936 is not set -# CONFIG_NLS_CODEPAGE_950 is not set -# CONFIG_NLS_CODEPAGE_932 is not set -# CONFIG_NLS_CODEPAGE_949 is not set -# CONFIG_NLS_CODEPAGE_874 is not set -# CONFIG_NLS_ISO8859_8 is not set -# CONFIG_NLS_CODEPAGE_1251 is not set -# CONFIG_NLS_ISO8859_1 is not set -# CONFIG_NLS_ISO8859_2 is not set -# CONFIG_NLS_ISO8859_3 is not set -# CONFIG_NLS_ISO8859_4 is not set -# CONFIG_NLS_ISO8859_5 is not set -# CONFIG_NLS_ISO8859_6 is not set -# CONFIG_NLS_ISO8859_7 is not set -# CONFIG_NLS_ISO8859_9 is not set -# CONFIG_NLS_ISO8859_13 is not set -# CONFIG_NLS_ISO8859_14 is not set -# CONFIG_NLS_ISO8859_15 is not set -# CONFIG_NLS_KOI8_R is not set -# CONFIG_NLS_KOI8_U is not set -# CONFIG_NLS_UTF8 is not set - -# -# Console drivers -# -CONFIG_PC_KEYMAP=y -# CONFIG_VGA_CONSOLE is not set - -# -# Frame-buffer support -# -CONFIG_FB=y -CONFIG_DUMMY_CONSOLE=y -# CONFIG_FB_ACORN is not set -# CONFIG_FB_CLPS711X is not set -# CONFIG_FB_CYBER2000 is not set -CONFIG_FB_SA1100=y -# CONFIG_FB_ANAKIN is not set -# CONFIG_FB_E1355 is not set -# CONFIG_FB_VIRTUAL is not set -# CONFIG_FBCON_ADVANCED is not set -CONFIG_FBCON_CFB2=y -CONFIG_FBCON_CFB4=y -CONFIG_FBCON_CFB8=y -CONFIG_FBCON_CFB16=y -CONFIG_FBCON_FONTWIDTH8_ONLY=y -CONFIG_FBCON_FONTS=y -# CONFIG_FONT_8x8 is not set -CONFIG_FONT_8x16=y -# CONFIG_FONT_SUN8x16 is not set -# CONFIG_FONT_PEARL_8x8 is not set -# CONFIG_FONT_ACORN_8x8 is not set - -# -# Sound -# -# CONFIG_SOUND is not set - -# -# USB support -# -# CONFIG_USB is not set - -# -# Bluetooth support -# -# CONFIG_BT is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_ERRORS=y -CONFIG_DEBUG_USER=y -# CONFIG_DEBUG_INFO is not set -# CONFIG_MAGIC_SYSRQ is not set -# CONFIG_NO_PGT_CACHE is not set -# CONFIG_DEBUG_LL is not set -# CONFIG_DEBUG_DC21285_PORT is not set -# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -prauN linux-2.6.0-test5/arch/arm/def-configs/graphicsmaster wli-2.6.0-test5-bk12-25/arch/arm/def-configs/graphicsmaster --- linux-2.6.0-test5/arch/arm/def-configs/graphicsmaster 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/graphicsmaster 1969-12-31 16:00:00.000000000 -0800 @@ -1,745 +0,0 @@ -# -# Automatically generated by make menuconfig: don't edit -# -CONFIG_ARM=y -# CONFIG_EISA is not set -# CONFIG_SBUS is not set -# CONFIG_MCA is not set -CONFIG_UID16=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y -# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -# CONFIG_OBSOLETE is not set - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODVERSIONS is not set -# CONFIG_KMOD is not set - -# -# System Type -# -# CONFIG_ARCH_ANAKIN is not set -# CONFIG_ARCH_ARCA5K is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_RPC is not set -CONFIG_ARCH_SA1100=y -# CONFIG_ARCH_SHARK is not set - -# -# Archimedes/A5000 Implementations -# -# CONFIG_ARCH_ARC is not set -# CONFIG_ARCH_A5K is not set - -# -# Footbridge Implementations -# -# CONFIG_ARCH_CATS is not set -# CONFIG_ARCH_PERSONAL_SERVER is not set -# CONFIG_ARCH_EBSA285_ADDIN is not set -# CONFIG_ARCH_EBSA285_HOST is not set -# CONFIG_ARCH_NETWINDER is not set - -# -# SA11x0 Implementations -# -# CONFIG_SA1100_ASSABET is not set -# CONFIG_ASSABET_NEPONSET is not set -# CONFIG_SA1100_BRUTUS is not set -# CONFIG_SA1100_CERF is not set -# CONFIG_SA1100_BITSY is not set -# CONFIG_SA1100_EXTENEX1 is not set -# CONFIG_SA1100_FLEXANET is not set -# CONFIG_SA1100_FREEBIRD is not set -# CONFIG_SA1100_GRAPHICSCLIENT is not set -# CONFIG_SA1100_JORNADA720 is not set -# CONFIG_SA1100_HUW_WEBPANEL is not set -# CONFIG_SA1100_ITSY is not set -# CONFIG_SA1100_LART is not set -# CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_OMNIMETER is not set -# CONFIG_SA1100_PANGOLIN is not set -# CONFIG_SA1100_PLEB is not set -# CONFIG_SA1100_SHERMAN is not set -# CONFIG_SA1100_SIMPAD is not set -# CONFIG_SA1100_PFS168 is not set -# CONFIG_SA1100_VICTOR is not set -# CONFIG_SA1100_XP860 is not set -# CONFIG_SA1100_YOPY is not set -CONFIG_SA1100_GRAPHICSMASTER=y -# CONFIG_SA1100_ADSBITSY is not set -CONFIG_SA1111=y -# CONFIG_SA1100_USB is not set -# CONFIG_SA1100_USB_NETLINK is not set -# CONFIG_SA1100_USB_CHAR is not set - -# -# CLPS711X/EP721X Implementations -# -# CONFIG_ARCH_P720T is not set -# CONFIG_ARCH_ACORN is not set -# CONFIG_FOOTBRIDGE is not set -# CONFIG_FOOTBRIDGE_HOST is not set -# CONFIG_FOOTBRIDGE_ADDIN is not set -CONFIG_CPU_32=y -# CONFIG_CPU_26 is not set -# CONFIG_CPU_32v3 is not set -CONFIG_CPU_32v4=y -# CONFIG_CPU_ARM610 is not set -# CONFIG_CPU_ARM710 is not set -# CONFIG_CPU_ARM720T is not set -# CONFIG_CPU_ARM920T is not set -# CONFIG_CPU_ARM1020 is not set -# CONFIG_CPU_SA110 is not set -CONFIG_CPU_SA1100=y -CONFIG_DISCONTIGMEM=y -# CONFIG_CPU_BIG_ENDIAN is not set - -# -# General setup -# -# CONFIG_PCI is not set -# CONFIG_ISA is not set -# CONFIG_ISA_DMA is not set -# CONFIG_CPU_FREQ is not set -CONFIG_HOTPLUG=y - -# -# PCMCIA/CardBus support -# -CONFIG_PCMCIA=y -# CONFIG_I82365 is not set -# CONFIG_TCIC is not set -# CONFIG_PCMCIA_CLPS6700 is not set -CONFIG_PCMCIA_SA1100=y -CONFIG_NET=y -CONFIG_SYSVIPC=y -# CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_SYSCTL=y -CONFIG_FPE_NWFPE=y -# CONFIG_FPE_FASTFPE is not set -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -# CONFIG_BINFMT_AOUT is not set -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -# CONFIG_PM is not set -# CONFIG_APM is not set -# CONFIG_ARTHUR is not set -CONFIG_CMDLINE="ip=off mem=16M@0xc0000000 mem=16M@0xc8000000 root=/dev/ram initrd=0xc0800000,4M" -# CONFIG_PFS168_CMDLINE is not set -CONFIG_LEDS=y -CONFIG_LEDS_TIMER=y -CONFIG_LEDS_CPU=y -CONFIG_ALIGNMENT_TRAP=y - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Memory Technology Devices (MTD) -# -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set -CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_REDBOOT_PARTS is not set -# CONFIG_MTD_BOOTLDR_PARTS is not set -# CONFIG_MTD_AFS_PARTS is not set -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -# CONFIG_NFTL is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=y -# CONFIG_MTD_CFI_ADV_OPTIONS is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_AMDSTD is not set -# CONFIG_MTD_SHARP is not set -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_JEDEC is not set - -# -# Mapping drivers for chip access -# -CONFIG_MTD_PHYSMAP=y -CONFIG_MTD_PHYSMAP_START=800000 -CONFIG_MTD_PHYSMAP_LEN=1000000 -CONFIG_MTD_PHYSMAP_BUSWIDTH=4 -# CONFIG_MTD_SUN_UFLASH is not set -# CONFIG_MTD_NORA is not set -# CONFIG_MTD_PNC2000 is not set -# CONFIG_MTD_RPXLITE is not set -# CONFIG_MTD_TQM8XXL is not set -# CONFIG_MTD_SC520CDP is not set -# CONFIG_MTD_NETSC520 is not set -# CONFIG_MTD_SBC_GXX is not set -# CONFIG_MTD_ELAN_104NC is not set -CONFIG_MTD_SA1100=y -# CONFIG_MTD_SA1100_REDBOOT_PARTITIONS is not set -# CONFIG_MTD_SA1100_BOOTLDR_PARTITIONS is not set -# CONFIG_MTD_DC21285 is not set -# CONFIG_MTD_IQ80310 is not set -# CONFIG_MTD_DBOX2 is not set -# CONFIG_MTD_CSTM_MIPS_IXX is not set -# CONFIG_MTD_CFI_FLAGADM is not set -# CONFIG_MTD_ARM_INTEGRATOR is not set -# CONFIG_MTD_SOLUTIONENGINE is not set -# CONFIG_MTD_MIXMEM is not set -# CONFIG_MTD_OCTAGON is not set -# CONFIG_MTD_VMAX is not set -# CONFIG_MTD_OCELOT is not set -# CONFIG_MTD_L440GX is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_LART is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLKMTD is not set -# CONFIG_MTD_DOC1000 is not set -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOCPROBE is not set - -# -# NAND Flash Device Drivers -# -# CONFIG_MTD_NAND is not set - -# -# Plug and Play configuration -# -# CONFIG_PNP is not set -# CONFIG_ISAPNP is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_XD is not set -# CONFIG_PARIDE is not set -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_BLK_DEV_DAC960 is not set -CONFIG_BLK_DEV_LOOP=m -# CONFIG_BLK_DEV_NBD is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=8192 -CONFIG_BLK_DEV_INITRD=y - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set -# CONFIG_BLK_DEV_MD is not set -# CONFIG_MD_LINEAR is not set -# CONFIG_MD_RAID0 is not set -# CONFIG_MD_RAID1 is not set -# CONFIG_MD_RAID5 is not set -# CONFIG_BLK_DEV_LVM is not set - -# -# Networking options -# -CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set -# CONFIG_NETLINK is not set -# CONFIG_NETFILTER is not set -# CONFIG_FILTER is not set -CONFIG_UNIX=y -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -CONFIG_IP_PNP=y -# CONFIG_IP_PNP_DHCP is not set -CONFIG_IP_PNP_BOOTP=y -# CONFIG_IP_PNP_RARP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_INET_ECN is not set -# CONFIG_SYN_COOKIES is not set -# CONFIG_IPV6 is not set -# CONFIG_KHTTPD is not set -# CONFIG_ATM is not set -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_LLC is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set - -# -# Ethernet (10 or 100Mbit) -# -CONFIG_NET_ETHERNET=y -# CONFIG_SUNLANCE is not set -# CONFIG_SUNBMAC is not set -# CONFIG_SUNQE is not set -# CONFIG_SUNLANCE is not set -# CONFIG_SUNGEM is not set -# CONFIG_NET_VENDOR_3COM is not set -# CONFIG_LANCE is not set -CONFIG_NET_VENDOR_SMC=y -# CONFIG_WD80x3 is not set -# CONFIG_ULTRAMCA is not set -# CONFIG_ULTRA is not set -# CONFIG_ULTRA32 is not set -CONFIG_SMC9194=y -# CONFIG_NET_VENDOR_RACAL is not set -# CONFIG_NET_ISA is not set -# CONFIG_NET_PCI is not set -# CONFIG_NET_POCKET is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_ACENIC is not set -# CONFIG_ACENIC_OMIT_TIGON_I is not set -# CONFIG_MYRI_SBUS is not set -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -# CONFIG_SK98LIN is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PLIP is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set - -# -# Token Ring devices -# -# CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# PCMCIA network device support -# -CONFIG_NET_PCMCIA=y -# CONFIG_PCMCIA_3C589 is not set -# CONFIG_PCMCIA_3C574 is not set -# CONFIG_PCMCIA_FMVJ18X is not set -CONFIG_PCMCIA_PCNET=y -# CONFIG_PCMCIA_NMCLAN is not set -# CONFIG_PCMCIA_SMC91C92 is not set -# CONFIG_PCMCIA_XIRC2PS is not set -# CONFIG_ARCNET_COM20020_CS is not set -# CONFIG_PCMCIA_IBMTR is not set -# CONFIG_NET_PCMCIA_RADIO is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# ATA/IDE/MFM/RLL support -# -CONFIG_IDE=y - -# -# IDE, ATA and ATAPI Block devices -# -CONFIG_BLK_DEV_IDE=y -# CONFIG_BLK_DEV_HD_IDE is not set -# CONFIG_BLK_DEV_HD is not set -CONFIG_BLK_DEV_IDEDISK=y -# CONFIG_IDEDISK_MULTI_MODE is not set -CONFIG_BLK_DEV_IDECS=y -# CONFIG_BLK_DEV_IDECD is not set -# CONFIG_BLK_DEV_IDETAPE is not set -# CONFIG_BLK_DEV_IDEFLOPPY is not set -# CONFIG_BLK_DEV_IDESCSI is not set -# CONFIG_BLK_DEV_CMD640 is not set -# CONFIG_BLK_DEV_CMD640_ENHANCED is not set -# CONFIG_BLK_DEV_ISAPNP is not set -# CONFIG_IDE_CHIPSETS is not set -# CONFIG_IDEDMA_AUTO is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# I2O device support -# -# CONFIG_I2O is not set -# CONFIG_I2O_BLOCK is not set -# CONFIG_I2O_LAN is not set -# CONFIG_I2O_SCSI is not set -# CONFIG_I2O_PROC is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Input core support -# -CONFIG_INPUT=y -# CONFIG_INPUT_KEYBDEV is not set -CONFIG_INPUT_MOUSEDEV=y -CONFIG_INPUT_MOUSEDEV_SCREEN_X=640 -CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480 -# CONFIG_INPUT_JOYDEV is not set -# CONFIG_INPUT_EVDEV is not set - -# -# Character devices -# -CONFIG_VT=y -# CONFIG_VT_CONSOLE is not set -# CONFIG_SERIAL is not set -# CONFIG_SERIAL_EXTENDED is not set -# CONFIG_SERIAL_NONSTANDARD is not set -# CONFIG_SERIAL_21285 is not set -# CONFIG_SERIAL_21285_OLD is not set -# CONFIG_SERIAL_21285_CONSOLE is not set -# CONFIG_SERIAL_AMBA is not set -# CONFIG_SERIAL_AMBA_CONSOLE is not set -# CONFIG_SERIAL_CLPS711X is not set -# CONFIG_SERIAL_CLPS711X_CONSOLE is not set -CONFIG_SERIAL_SA1100=y -CONFIG_SERIAL_SA1100_CONSOLE=y -CONFIG_SA1100_DEFAULT_BAUDRATE=38400 -# CONFIG_SERIAL_8250 is not set -# CONFIG_SERIAL_8250_CONSOLE is not set -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=32 -CONFIG_UCB1200=y -CONFIG_TOUCHSCREEN_UCB1200=y -CONFIG_AUDIO_UCB1200=y -CONFIG_ADC_UCB1200=y -# CONFIG_TOUCHSCREEN_BITSY is not set -# CONFIG_PROFILER is not set -# CONFIG_PFS168_SPI is not set -# CONFIG_PFS168_DTMF is not set -# CONFIG_PFS168_MISC is not set - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -# CONFIG_MOUSE is not set - -# -# Joysticks -# -# CONFIG_JOYSTICK is not set -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -# CONFIG_INTEL_RNG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -# CONFIG_SA1100_RTC is not set -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set - -# -# PCMCIA character devices -# - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set -# CONFIG_REISERFS_FS is not set -# CONFIG_REISERFS_CHECK is not set -# CONFIG_ADFS_FS is not set -# CONFIG_ADFS_FS_RW is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BFS_FS is not set -CONFIG_FAT_FS=y -# CONFIG_MSDOS_FS is not set -# CONFIG_UMSDOS_FS is not set -CONFIG_VFAT_FS=y -# CONFIG_EFS_FS is not set -CONFIG_JFFS_FS=y -CONFIG_JFFS_FS_VERBOSE=0 -CONFIG_JFFS2_FS=y -CONFIG_JFFS2_FS_DEBUG=0 -CONFIG_CRAMFS=y -# CONFIG_TMPFS is not set -CONFIG_RAMFS=y -# CONFIG_ISO9660_FS is not set -# CONFIG_JOLIET is not set -# CONFIG_MINIX_FS is not set -# CONFIG_VXFS_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS_DEBUG is not set -# CONFIG_NTFS_RW is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -# CONFIG_DEVFS_MOUNT is not set -# CONFIG_DEVFS_DEBUG is not set -CONFIG_DEVPTS_FS=y -# CONFIG_QNX4FS_FS is not set -# CONFIG_QNX4FS_RW is not set -# CONFIG_ROMFS_FS is not set -CONFIG_EXT2_FS=y -# CONFIG_SYSV_FS is not set -# CONFIG_UDF_FS is not set -# CONFIG_UDF_RW is not set -# CONFIG_UFS_FS is not set -# CONFIG_UFS_FS_WRITE is not set - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -CONFIG_NFS_FS=y -# CONFIG_NFS_V3 is not set -CONFIG_ROOT_NFS=y -# CONFIG_NFSD is not set -# CONFIG_NFSD_V3 is not set -CONFIG_SUNRPC=y -CONFIG_LOCKD=y -# CONFIG_SMB_FS is not set -# CONFIG_NCP_FS is not set -# CONFIG_NCPFS_PACKET_SIGNING is not set -# CONFIG_NCPFS_IOCTL_LOCKING is not set -# CONFIG_NCPFS_STRONG is not set -# CONFIG_NCPFS_NFS_NS is not set -# CONFIG_NCPFS_OS2_NS is not set -# CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_NLS is not set -# CONFIG_NCPFS_EXTRAS is not set - -# -# Partition Types -# -# CONFIG_PARTITION_ADVANCED is not set -CONFIG_MSDOS_PARTITION=y -# CONFIG_SMB_NLS is not set -CONFIG_NLS=y - -# -# Native Language Support -# -CONFIG_NLS_DEFAULT="iso8859-1" -# CONFIG_NLS_CODEPAGE_437 is not set -# CONFIG_NLS_CODEPAGE_737 is not set -# CONFIG_NLS_CODEPAGE_775 is not set -# CONFIG_NLS_CODEPAGE_850 is not set -# CONFIG_NLS_CODEPAGE_852 is not set -# CONFIG_NLS_CODEPAGE_855 is not set -# CONFIG_NLS_CODEPAGE_857 is not set -# CONFIG_NLS_CODEPAGE_860 is not set -# CONFIG_NLS_CODEPAGE_861 is not set -# CONFIG_NLS_CODEPAGE_862 is not set -# CONFIG_NLS_CODEPAGE_863 is not set -# CONFIG_NLS_CODEPAGE_864 is not set -# CONFIG_NLS_CODEPAGE_865 is not set -# CONFIG_NLS_CODEPAGE_866 is not set -# CONFIG_NLS_CODEPAGE_869 is not set -# CONFIG_NLS_CODEPAGE_936 is not set -# CONFIG_NLS_CODEPAGE_950 is not set -# CONFIG_NLS_CODEPAGE_932 is not set -# CONFIG_NLS_CODEPAGE_949 is not set -# CONFIG_NLS_CODEPAGE_874 is not set -# CONFIG_NLS_ISO8859_8 is not set -# CONFIG_NLS_CODEPAGE_1251 is not set -# CONFIG_NLS_ISO8859_1 is not set -# CONFIG_NLS_ISO8859_2 is not set -# CONFIG_NLS_ISO8859_3 is not set -# CONFIG_NLS_ISO8859_4 is not set -# CONFIG_NLS_ISO8859_5 is not set -# CONFIG_NLS_ISO8859_6 is not set -# CONFIG_NLS_ISO8859_7 is not set -# CONFIG_NLS_ISO8859_9 is not set -# CONFIG_NLS_ISO8859_13 is not set -# CONFIG_NLS_ISO8859_14 is not set -# CONFIG_NLS_ISO8859_15 is not set -# CONFIG_NLS_KOI8_R is not set -# CONFIG_NLS_KOI8_U is not set -# CONFIG_NLS_UTF8 is not set - -# -# Console drivers -# -CONFIG_PC_KEYMAP=y -# CONFIG_VGA_CONSOLE is not set - -# -# Frame-buffer support -# -CONFIG_FB=y -CONFIG_DUMMY_CONSOLE=y -# CONFIG_FB_ACORN is not set -# CONFIG_FB_CLPS711X is not set -# CONFIG_FB_CYBER2000 is not set -CONFIG_FB_SA1100=y -# CONFIG_FB_ANAKIN is not set -# CONFIG_FB_E1355 is not set -# CONFIG_FB_VIRTUAL is not set -# CONFIG_FBCON_ADVANCED is not set -CONFIG_FBCON_CFB2=y -CONFIG_FBCON_CFB4=y -CONFIG_FBCON_CFB8=y -CONFIG_FBCON_CFB16=y -CONFIG_FBCON_FONTWIDTH8_ONLY=y -CONFIG_FBCON_FONTS=y -# CONFIG_FONT_8x8 is not set -CONFIG_FONT_8x16=y -# CONFIG_FONT_SUN8x16 is not set -# CONFIG_FONT_PEARL_8x8 is not set -# CONFIG_FONT_ACORN_8x8 is not set - -# -# Sound -# -# CONFIG_SOUND is not set - -# -# USB support -# -CONFIG_USB=y -# CONFIG_USB_DEBUG is not set -CONFIG_USB_DEVICEFS=y -# CONFIG_USB_BANDWIDTH is not set -# CONFIG_USB_UHCI is not set -# CONFIG_USB_UHCI_ALT is not set -CONFIG_USB_OHCI=y -CONFIG_USB_OHCI_NOPCI=y -# CONFIG_USB_AUDIO is not set -# CONFIG_USB_BLUETOOTH is not set -# CONFIG_USB_STORAGE is not set -# CONFIG_USB_ACM is not set -# CONFIG_USB_PRINTER is not set -# CONFIG_USB_HID is not set -# CONFIG_USB_KBD is not set -CONFIG_USB_MOUSE=y -# CONFIG_USB_WACOM is not set -# CONFIG_USB_DC2XX is not set -# CONFIG_USB_MDC800 is not set -# CONFIG_USB_SCANNER is not set -# CONFIG_USB_MICROTEK is not set -# CONFIG_USB_IBMCAM is not set -# CONFIG_USB_OV511 is not set -# CONFIG_USB_PWC is not set -# CONFIG_USB_SE401 is not set -# CONFIG_USB_DSBR is not set -# CONFIG_USB_DABUSB is not set -# CONFIG_USB_PLUSB is not set -# CONFIG_USB_PEGASUS is not set -# CONFIG_USB_CATC is not set -# CONFIG_USB_NET1080 is not set -# CONFIG_USB_USBNET is not set -# CONFIG_USB_USS720 is not set - -# -# USB Serial Converter support -# -# CONFIG_USB_SERIAL is not set -# CONFIG_USB_RIO500 is not set - -# -# Bluetooth support -# -# CONFIG_BT is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_ERRORS=y -CONFIG_DEBUG_USER=y -# CONFIG_DEBUG_INFO is not set -# CONFIG_MAGIC_SYSRQ is not set -# CONFIG_NO_PGT_CACHE is not set -# CONFIG_DEBUG_LL is not set -# CONFIG_DEBUG_DC21285_PORT is not set -# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -prauN linux-2.6.0-test5/arch/arm/def-configs/h3600 wli-2.6.0-test5-bk12-25/arch/arm/def-configs/h3600 --- linux-2.6.0-test5/arch/arm/def-configs/h3600 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/h3600 1969-12-31 16:00:00.000000000 -0800 @@ -1,951 +0,0 @@ -# -# Automatically generated make config: don't edit -# -CONFIG_ARM=y -# CONFIG_EISA is not set -# CONFIG_SBUS is not set -# CONFIG_MCA is not set -CONFIG_UID16=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y -# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set -# CONFIG_GENERIC_BUST_SPINLOCK is not set -# CONFIG_GENERIC_ISA_DMA is not set - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -# CONFIG_OBSOLETE is not set - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODVERSIONS is not set -# CONFIG_KMOD is not set - -# -# System Type -# -# CONFIG_ARCH_ANAKIN is not set -# CONFIG_ARCH_ARCA5K is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_CAMELOT is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_RPC is not set -CONFIG_ARCH_SA1100=y -# CONFIG_ARCH_SHARK is not set - -# -# Archimedes/A5000 Implementations -# - -# -# Archimedes/A5000 Implementations (select only ONE) -# -# CONFIG_ARCH_ARC is not set -# CONFIG_ARCH_A5K is not set - -# -# Footbridge Implementations -# -# CONFIG_ARCH_CATS is not set -# CONFIG_ARCH_PERSONAL_SERVER is not set -# CONFIG_ARCH_EBSA285_ADDIN is not set -# CONFIG_ARCH_EBSA285_HOST is not set -# CONFIG_ARCH_NETWINDER is not set - -# -# SA11x0 Implementations -# -# CONFIG_SA1100_ASSABET is not set -# CONFIG_ASSABET_NEPONSET is not set -# CONFIG_SA1100_ADSBITSY is not set -# CONFIG_SA1100_BRUTUS is not set -# CONFIG_SA1100_CERF is not set -CONFIG_SA1100_H3600=y -# CONFIG_SA1100_EXTENEX1 is not set -# CONFIG_SA1100_FLEXANET is not set -# CONFIG_SA1100_FREEBIRD is not set -# CONFIG_SA1100_GRAPHICSCLIENT is not set -# CONFIG_SA1100_GRAPHICSMASTER is not set -# CONFIG_SA1100_JORNADA720 is not set -# CONFIG_SA1100_HUW_WEBPANEL is not set -# CONFIG_SA1100_ITSY is not set -# CONFIG_SA1100_LART is not set -# CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_OMNIMETER is not set -# CONFIG_SA1100_PANGOLIN is not set -# CONFIG_SA1100_PLEB is not set -# CONFIG_SA1100_SHERMAN is not set -# CONFIG_SA1100_SIMPAD is not set -# CONFIG_SA1100_PFS168 is not set -# CONFIG_SA1100_VICTOR is not set -# CONFIG_SA1100_XP860 is not set -# CONFIG_SA1100_YOPY is not set -CONFIG_SA1100_USB=m -CONFIG_SA1100_USB_NETLINK=m -# CONFIG_SA1100_USB_CHAR is not set - -# -# CLPS711X/EP721X Implementations -# -# CONFIG_ARCH_CDB89712 is not set -# CONFIG_ARCH_CLEP7312 is not set -# CONFIG_ARCH_EDB7211 is not set -# CONFIG_ARCH_P720T is not set -# CONFIG_ARCH_EP7211 is not set -# CONFIG_ARCH_EP7212 is not set -# CONFIG_ARCH_ACORN is not set -# CONFIG_FOOTBRIDGE is not set -# CONFIG_FOOTBRIDGE_HOST is not set -# CONFIG_FOOTBRIDGE_ADDIN is not set -CONFIG_CPU_32=y -# CONFIG_CPU_26 is not set - -# -# Processor Type -# -# CONFIG_CPU_32v3 is not set -CONFIG_CPU_32v4=y -# CONFIG_CPU_ARM610 is not set -# CONFIG_CPU_ARM710 is not set -# CONFIG_CPU_ARM720T is not set -# CONFIG_CPU_ARM920T is not set -# CONFIG_CPU_ARM1020 is not set -# CONFIG_CPU_SA110 is not set -CONFIG_CPU_SA1100=y -# CONFIG_ARM_THUMB is not set -CONFIG_DISCONTIGMEM=y - -# -# General setup -# -# CONFIG_PCI is not set -CONFIG_ISA=y -# CONFIG_ISA_DMA is not set -CONFIG_CPU_FREQ=y -CONFIG_HOTPLUG=y - -# -# PCMCIA/CardBus support -# -CONFIG_PCMCIA=y -# CONFIG_I82365 is not set -# CONFIG_TCIC is not set -# CONFIG_PCMCIA_CLPS6700 is not set -CONFIG_PCMCIA_SA1100=y -CONFIG_NET=y -CONFIG_SYSVIPC=y -# CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_SYSCTL=y - -# -# At least one math emulation must be selected -# -CONFIG_FPE_NWFPE=y -# CONFIG_FPE_FASTFPE is not set -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -# CONFIG_BINFMT_AOUT is not set -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -CONFIG_PM=y -# CONFIG_ARTHUR is not set -CONFIG_CMDLINE="" -# CONFIG_LEDS is not set -CONFIG_ALIGNMENT_TRAP=y - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Memory Technology Devices (MTD) -# -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set -CONFIG_MTD_PARTITIONS=y -CONFIG_MTD_REDBOOT_PARTS=y -CONFIG_MTD_BOOTLDR_PARTS=y -# CONFIG_MTD_AFS_PARTS is not set - -# -# User Modules And Translation Layers -# -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -# CONFIG_NFTL is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=y -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_GEN_PROBE=y -CONFIG_MTD_CFI_ADV_OPTIONS=y -CONFIG_MTD_CFI_NOSWAP=y -# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set -# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set -CONFIG_MTD_CFI_GEOMETRY=y -# CONFIG_MTD_CFI_B1 is not set -# CONFIG_MTD_CFI_B2 is not set -CONFIG_MTD_CFI_B4=y -# CONFIG_MTD_CFI_I1 is not set -CONFIG_MTD_CFI_I2=y -# CONFIG_MTD_CFI_I4 is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_ABSENT is not set -# CONFIG_MTD_OBSOLETE_CHIPS is not set -# CONFIG_MTD_AMDSTD is not set -# CONFIG_MTD_SHARP is not set -# CONFIG_MTD_JEDEC is not set - -# -# Mapping drivers for chip access -# -# CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_NORA is not set -# CONFIG_MTD_ARM_INTEGRATOR is not set -# CONFIG_MTD_CDB89712 is not set -CONFIG_MTD_SA1100=y -# CONFIG_MTD_DC21285 is not set -# CONFIG_MTD_IQ80310 is not set -# CONFIG_MTD_PCI is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLKMTD is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC1000 is not set -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOCPROBE is not set - -# -# NAND Flash Device Drivers -# -# CONFIG_MTD_NAND is not set - -# -# Plug and Play configuration -# -# CONFIG_PNP is not set -# CONFIG_ISAPNP is not set -# CONFIG_PNPBIOS is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_XD is not set -# CONFIG_PARIDE is not set -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_CISS_SCSI_TAPE is not set -# CONFIG_BLK_DEV_DAC960 is not set -CONFIG_BLK_DEV_LOOP=m -# CONFIG_BLK_DEV_NBD is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=8192 -CONFIG_BLK_DEV_INITRD=y - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set -# CONFIG_BLK_DEV_MD is not set -# CONFIG_MD_LINEAR is not set -# CONFIG_MD_RAID0 is not set -# CONFIG_MD_RAID1 is not set -# CONFIG_MD_RAID5 is not set -# CONFIG_MD_MULTIPATH is not set -# CONFIG_BLK_DEV_LVM is not set - -# -# Networking options -# -# CONFIG_PACKET is not set -# CONFIG_NETLINK is not set -# CONFIG_NETFILTER is not set -# CONFIG_FILTER is not set -CONFIG_UNIX=y -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -# CONFIG_IP_PNP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_INET_ECN is not set -# CONFIG_SYN_COOKIES is not set -# CONFIG_IPV6 is not set -# CONFIG_KHTTPD is not set -# CONFIG_ATM is not set - -# -# -# -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_LLC is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set - -# -# Ethernet (10 or 100Mbit) -# -# CONFIG_NET_ETHERNET is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_ACENIC is not set -# CONFIG_DL2K is not set -# CONFIG_MYRI_SBUS is not set -# CONFIG_NS83820 is not set -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -# CONFIG_SK98LIN is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PLIP is not set -CONFIG_PPP=m -# CONFIG_PPP_MULTILINK is not set -# CONFIG_PPP_FILTER is not set -CONFIG_PPP_ASYNC=m -# CONFIG_PPP_SYNC_TTY is not set -CONFIG_PPP_DEFLATE=m -CONFIG_PPP_BSDCOMP=m -# CONFIG_PPPOE is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set - -# -# Token Ring devices -# -# CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# PCMCIA network device support -# -CONFIG_NET_PCMCIA=y -# CONFIG_PCMCIA_3C589 is not set -# CONFIG_PCMCIA_3C574 is not set -# CONFIG_PCMCIA_FMVJ18X is not set -CONFIG_PCMCIA_PCNET=y -# CONFIG_PCMCIA_NMCLAN is not set -# CONFIG_PCMCIA_SMC91C92 is not set -# CONFIG_PCMCIA_XIRC2PS is not set -# CONFIG_ARCNET_COM20020_CS is not set -# CONFIG_PCMCIA_IBMTR is not set -# CONFIG_NET_PCMCIA_RADIO is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -CONFIG_IRDA=m - -# -# IrDA protocols -# -CONFIG_IRLAN=m -CONFIG_IRNET=m -CONFIG_IRCOMM=m -# CONFIG_IRDA_ULTRA is not set -# CONFIG_IRDA_OPTIONS is not set - -# -# Infrared-port device drivers -# - -# -# SIR device drivers -# -# CONFIG_IRTTY_SIR is not set -# CONFIG_IRPORT_SIR is not set - -# -# Dongle support -# -# CONFIG_DONGLE is not set - -# -# FIR device drivers -# -# CONFIG_USB_IRDA is not set -# CONFIG_NSC_FIR is not set -# CONFIG_WINBOND_FIR is not set -# CONFIG_TOSHIBA_FIR is not set -# CONFIG_SMC_IRCC_FIR is not set -# CONFIG_ALI_FIR is not set -# CONFIG_VLSI_FIR is not set -CONFIG_SA1100_FIR=m - -# -# ATA/IDE/MFM/RLL support -# -CONFIG_IDE=m - -# -# IDE, ATA and ATAPI Block devices -# -CONFIG_BLK_DEV_IDE=m - -# -# Please see Documentation/ide.txt for help/info on IDE drives -# -# CONFIG_BLK_DEV_HD_IDE is not set -# CONFIG_BLK_DEV_HD is not set -CONFIG_BLK_DEV_IDEDISK=m -# CONFIG_IDEDISK_MULTI_MODE is not set -# CONFIG_BLK_DEV_IDECS is not set -CONFIG_BLK_DEV_IDECD=m -# CONFIG_BLK_DEV_IDETAPE is not set -# CONFIG_BLK_DEV_IDEFLOPPY is not set -# CONFIG_BLK_DEV_IDESCSI is not set - -# -# IDE chipset support/bugfixes -# -# CONFIG_BLK_DEV_CMD640 is not set -# CONFIG_BLK_DEV_CMD640_ENHANCED is not set -# CONFIG_BLK_DEV_ISAPNP is not set -# CONFIG_IDE_CHIPSETS is not set -# CONFIG_IDEDMA_AUTO is not set -# CONFIG_BLK_DEV_ATARAID is not set -# CONFIG_BLK_DEV_ATARAID_PDC is not set -# CONFIG_BLK_DEV_ATARAID_HPT is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# I2O device support -# -# CONFIG_I2O is not set -# CONFIG_I2O_BLOCK is not set -# CONFIG_I2O_LAN is not set -# CONFIG_I2O_SCSI is not set -# CONFIG_I2O_PROC is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Input core support -# -# CONFIG_INPUT is not set -# CONFIG_INPUT_KEYBDEV is not set -# CONFIG_INPUT_MOUSEDEV is not set -# CONFIG_INPUT_JOYDEV is not set -# CONFIG_INPUT_EVDEV is not set - -# -# Character devices -# -CONFIG_VT=y -# CONFIG_VT_CONSOLE is not set -CONFIG_SERIAL=m -# CONFIG_SERIAL_EXTENDED is not set -# CONFIG_SERIAL_NONSTANDARD is not set - -# -# Serial drivers -# -# CONFIG_SERIAL_ANAKIN is not set -# CONFIG_SERIAL_ANAKIN_CONSOLE is not set -# CONFIG_SERIAL_AMBA is not set -# CONFIG_SERIAL_AMBA_CONSOLE is not set -# CONFIG_SERIAL_CLPS711X is not set -# CONFIG_SERIAL_CLPS711X_CONSOLE is not set -# CONFIG_SERIAL_21285 is not set -# CONFIG_SERIAL_21285_OLD is not set -# CONFIG_SERIAL_21285_CONSOLE is not set -# CONFIG_SERIAL_UART00 is not set -# CONFIG_SERIAL_UART00_CONSOLE is not set -CONFIG_SERIAL_SA1100=y -CONFIG_SERIAL_SA1100_CONSOLE=y -CONFIG_SA1100_DEFAULT_BAUDRATE=38400 -CONFIG_SERIAL_8250=m -# CONFIG_SERIAL_8250_CONSOLE is not set -# CONFIG_SERIAL_8250_EXTENDED is not set -# CONFIG_SERIAL_8250_MANY_PORTS is not set -# CONFIG_SERIAL_8250_SHARE_IRQ is not set -# CONFIG_SERIAL_8250_DETECT_IRQ is not set -# CONFIG_SERIAL_8250_MULTIPORT is not set -# CONFIG_SERIAL_8250_HUB6 is not set -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=32 - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# L3 serial bus support -# -CONFIG_L3=y -CONFIG_L3_ALGOBIT=y -CONFIG_L3_BIT_SA1100_GPIO=y - -# -# Other L3 adapters -# -# CONFIG_L3_SA1111 is not set -CONFIG_BIT_SA1100_GPIO=y - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -CONFIG_MOUSE=m -# CONFIG_PSMOUSE is not set -# CONFIG_82C710_MOUSE is not set -# CONFIG_PC110_PAD is not set - -# -# Joysticks -# -# CONFIG_INPUT_GAMEPORT is not set - -# -# Input core support is needed for gameports -# - -# -# Input core support is needed for joysticks -# -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -# CONFIG_INTEL_RNG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -CONFIG_SA1100_RTC=m -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set - -# -# PCMCIA character devices -# -# CONFIG_PCMCIA_SERIAL_CS is not set -# CONFIG_MWAVE is not set - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set -# CONFIG_REISERFS_FS is not set -# CONFIG_REISERFS_CHECK is not set -# CONFIG_ADFS_FS is not set -# CONFIG_ADFS_FS_RW is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_CMS_FS is not set -# CONFIG_EXT3_FS is not set -# CONFIG_JBD is not set -# CONFIG_JBD_DEBUG is not set -CONFIG_FAT_FS=m -CONFIG_MSDOS_FS=m -# CONFIG_UMSDOS_FS is not set -CONFIG_VFAT_FS=m -# CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set -CONFIG_JFFS2_FS=y -CONFIG_JFFS2_FS_DEBUG=0 -CONFIG_CRAMFS=m -# CONFIG_TMPFS is not set -CONFIG_RAMFS=y -# CONFIG_ISO9660_FS is not set -# CONFIG_JOLIET is not set -# CONFIG_ZISOFS is not set -# CONFIG_MINIX_FS is not set -# CONFIG_FREEVXFS_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS_DEBUG is not set -# CONFIG_NTFS_RW is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -# CONFIG_DEVFS_MOUNT is not set -# CONFIG_DEVFS_DEBUG is not set -CONFIG_DEVPTS_FS=y -# CONFIG_QNX4FS_FS is not set -# CONFIG_QNX4FS_RW is not set -# CONFIG_ROMFS_FS is not set -CONFIG_EXT2_FS=y -# CONFIG_SYSV_FS is not set -# CONFIG_UDF_FS is not set -# CONFIG_UDF_RW is not set -# CONFIG_UFS_FS is not set -# CONFIG_UFS_FS_WRITE is not set - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -# CONFIG_INTERMEZZO_FS is not set -CONFIG_NFS_FS=y -# CONFIG_NFS_V3 is not set -# CONFIG_ROOT_NFS is not set -CONFIG_NFSD=m -# CONFIG_NFSD_V3 is not set -CONFIG_SUNRPC=y -CONFIG_LOCKD=y -CONFIG_SMB_FS=m -# CONFIG_SMB_NLS_DEFAULT is not set -# CONFIG_NCP_FS is not set -# CONFIG_NCPFS_PACKET_SIGNING is not set -# CONFIG_NCPFS_IOCTL_LOCKING is not set -# CONFIG_NCPFS_STRONG is not set -# CONFIG_NCPFS_NFS_NS is not set -# CONFIG_NCPFS_OS2_NS is not set -# CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_NLS is not set -# CONFIG_NCPFS_EXTRAS is not set -# CONFIG_ZISOFS_FS is not set -CONFIG_ZLIB_FS_INFLATE=m - -# -# Partition Types -# -# CONFIG_PARTITION_ADVANCED is not set -CONFIG_MSDOS_PARTITION=y -CONFIG_SMB_NLS=y -CONFIG_NLS=y - -# -# Native Language Support -# -CONFIG_NLS_DEFAULT="iso8859-1" -# CONFIG_NLS_CODEPAGE_437 is not set -# CONFIG_NLS_CODEPAGE_737 is not set -# CONFIG_NLS_CODEPAGE_775 is not set -# CONFIG_NLS_CODEPAGE_850 is not set -# CONFIG_NLS_CODEPAGE_852 is not set -# CONFIG_NLS_CODEPAGE_855 is not set -# CONFIG_NLS_CODEPAGE_857 is not set -# CONFIG_NLS_CODEPAGE_860 is not set -# CONFIG_NLS_CODEPAGE_861 is not set -# CONFIG_NLS_CODEPAGE_862 is not set -# CONFIG_NLS_CODEPAGE_863 is not set -# CONFIG_NLS_CODEPAGE_864 is not set -# CONFIG_NLS_CODEPAGE_865 is not set -# CONFIG_NLS_CODEPAGE_866 is not set -# CONFIG_NLS_CODEPAGE_869 is not set -# CONFIG_NLS_CODEPAGE_936 is not set -# CONFIG_NLS_CODEPAGE_950 is not set -# CONFIG_NLS_CODEPAGE_932 is not set -# CONFIG_NLS_CODEPAGE_949 is not set -# CONFIG_NLS_CODEPAGE_874 is not set -# CONFIG_NLS_ISO8859_8 is not set -# CONFIG_NLS_CODEPAGE_1251 is not set -# CONFIG_NLS_ISO8859_1 is not set -# CONFIG_NLS_ISO8859_2 is not set -# CONFIG_NLS_ISO8859_3 is not set -# CONFIG_NLS_ISO8859_4 is not set -# CONFIG_NLS_ISO8859_5 is not set -# CONFIG_NLS_ISO8859_6 is not set -# CONFIG_NLS_ISO8859_7 is not set -# CONFIG_NLS_ISO8859_9 is not set -# CONFIG_NLS_ISO8859_13 is not set -# CONFIG_NLS_ISO8859_14 is not set -# CONFIG_NLS_ISO8859_15 is not set -# CONFIG_NLS_KOI8_R is not set -# CONFIG_NLS_KOI8_U is not set -# CONFIG_NLS_UTF8 is not set - -# -# Console drivers -# -CONFIG_PC_KEYMAP=y -# CONFIG_VGA_CONSOLE is not set - -# -# Frame-buffer support -# -CONFIG_FB=y -CONFIG_DUMMY_CONSOLE=y -# CONFIG_FB_ACORN is not set -# CONFIG_FB_ANAKIN is not set -# CONFIG_FB_CLPS711X is not set -CONFIG_FB_SA1100=y -# CONFIG_FB_CYBER2000 is not set -# CONFIG_FB_VIRTUAL is not set -CONFIG_FBCON_ADVANCED=y -# CONFIG_FBCON_MFB is not set -# CONFIG_FBCON_CFB2 is not set -# CONFIG_FBCON_CFB4 is not set -# CONFIG_FBCON_CFB8 is not set -CONFIG_FBCON_CFB16=y -# CONFIG_FBCON_CFB24 is not set -# CONFIG_FBCON_CFB32 is not set -# CONFIG_FBCON_AFB is not set -# CONFIG_FBCON_ILBM is not set -# CONFIG_FBCON_IPLAN2P2 is not set -# CONFIG_FBCON_IPLAN2P4 is not set -# CONFIG_FBCON_IPLAN2P8 is not set -# CONFIG_FBCON_MAC is not set -# CONFIG_FBCON_VGA_PLANES is not set -# CONFIG_FBCON_VGA is not set -# CONFIG_FBCON_HGA is not set -CONFIG_FBCON_FONTWIDTH8_ONLY=y -CONFIG_FBCON_FONTS=y -CONFIG_FONT_8x8=y -# CONFIG_FONT_8x16 is not set -# CONFIG_FONT_SUN8x16 is not set -# CONFIG_FONT_PEARL_8x8 is not set -# CONFIG_FONT_ACORN_8x8 is not set - -# -# Sound -# -CONFIG_SOUND=y -# CONFIG_SOUND_BT878 is not set -# CONFIG_SOUND_CMPCI is not set -# CONFIG_SOUND_EMU10K1 is not set -# CONFIG_MIDI_EMU10K1 is not set -# CONFIG_SOUND_FUSION is not set -# CONFIG_SOUND_CS4281 is not set -# CONFIG_SOUND_ES1370 is not set -# CONFIG_SOUND_ES1371 is not set -# CONFIG_SOUND_ESSSOLO1 is not set -# CONFIG_SOUND_MAESTRO is not set -# CONFIG_SOUND_MAESTRO3 is not set -# CONFIG_SOUND_ICH is not set -# CONFIG_SOUND_RME96XX is not set -# CONFIG_SOUND_SONICVIBES is not set -# CONFIG_SOUND_TRIDENT is not set -# CONFIG_SOUND_MSNDCLAS is not set -# CONFIG_SOUND_MSNDPIN is not set -# CONFIG_SOUND_VIA82CXXX is not set -# CONFIG_MIDI_VIA82CXXX is not set -CONFIG_SOUND_SA1100=y -CONFIG_SOUND_UDA1341=y -# CONFIG_SOUND_ASSABET_UDA1341 is not set -CONFIG_SOUND_H3600_UDA1341=y -# CONFIG_SOUND_PANGOLIN_UDA1341 is not set -# CONFIG_SOUND_SA1111_UDA1341 is not set -# CONFIG_SOUND_SA1100SSP is not set -# CONFIG_SOUND_OSS is not set -# CONFIG_SOUND_WAVEARTIST is not set -# CONFIG_SOUND_TVMIXER is not set - -# -# Multimedia Capabilities Port drivers -# -# CONFIG_MCP is not set -# CONFIG_MCP_SA1100 is not set -# CONFIG_MCP_UCB1200 is not set -# CONFIG_MCP_UCB1200_AUDIO is not set -# CONFIG_MCP_UCB1200_TS is not set - -# -# USB support -# -# CONFIG_USB is not set - -# -# USB Controllers -# -# CONFIG_USB_UHCI is not set -# CONFIG_USB_UHCI_ALT is not set -# CONFIG_USB_OHCI is not set -# CONFIG_USB_OHCI_SA1111 is not set - -# -# USB Device Class drivers -# -# CONFIG_USB_AUDIO is not set -# CONFIG_USB_BLUETOOTH is not set -# CONFIG_USB_STORAGE is not set -# CONFIG_USB_STORAGE_DEBUG is not set -# CONFIG_USB_STORAGE_DATAFAB is not set -# CONFIG_USB_STORAGE_FREECOM is not set -# CONFIG_USB_STORAGE_ISD200 is not set -# CONFIG_USB_STORAGE_DPCM is not set -# CONFIG_USB_STORAGE_HP8200e is not set -# CONFIG_USB_STORAGE_SDDR09 is not set -# CONFIG_USB_STORAGE_JUMPSHOT is not set -# CONFIG_USB_ACM is not set -# CONFIG_USB_PRINTER is not set - -# -# USB Human Interface Devices (HID) -# - -# -# Input core support is needed for USB HID -# - -# -# USB Imaging devices -# -# CONFIG_USB_DC2XX is not set -# CONFIG_USB_MDC800 is not set -# CONFIG_USB_SCANNER is not set -# CONFIG_USB_MICROTEK is not set -# CONFIG_USB_HPUSBSCSI is not set - -# -# USB Multimedia devices -# - -# -# Video4Linux support is needed for USB Multimedia device support -# - -# -# USB Network adaptors -# -# CONFIG_USB_PEGASUS is not set -# CONFIG_USB_KAWETH is not set -# CONFIG_USB_CATC is not set -# CONFIG_USB_CDCETHER is not set -# CONFIG_USB_USBNET is not set - -# -# USB port drivers -# -# CONFIG_USB_USS720 is not set - -# -# USB Serial Converter support -# -# CONFIG_USB_SERIAL is not set -# CONFIG_USB_SERIAL_GENERIC is not set -# CONFIG_USB_SERIAL_BELKIN is not set -# CONFIG_USB_SERIAL_WHITEHEAT is not set -# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set -# CONFIG_USB_SERIAL_EMPEG is not set -# CONFIG_USB_SERIAL_FTDI_SIO is not set -# CONFIG_USB_SERIAL_VISOR is not set -# CONFIG_USB_SERIAL_IR is not set -# CONFIG_USB_SERIAL_EDGEPORT is not set -# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set -# CONFIG_USB_SERIAL_KEYSPAN is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set -# CONFIG_USB_SERIAL_MCT_U232 is not set -# CONFIG_USB_SERIAL_PL2303 is not set -# CONFIG_USB_SERIAL_CYBERJACK is not set -# CONFIG_USB_SERIAL_XIRCOM is not set -# CONFIG_USB_SERIAL_OMNINET is not set - -# -# USB Miscellaneous drivers -# -# CONFIG_USB_RIO500 is not set -# CONFIG_USB_ID75 is not set - -# -# Bluetooth support -# -# CONFIG_BT is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_ERRORS=y -# CONFIG_DEBUG_USER is not set -# CONFIG_DEBUG_INFO is not set -# CONFIG_DEBUG_SLAB is not set -CONFIG_MAGIC_SYSRQ=y -# CONFIG_DEBUG_SPINLOCK is not set -# CONFIG_NO_PGT_CACHE is not set -# CONFIG_DEBUG_LL is not set -# CONFIG_DEBUG_DC21285_PORT is not set -# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -prauN linux-2.6.0-test5/arch/arm/def-configs/hackkit wli-2.6.0-test5-bk12-25/arch/arm/def-configs/hackkit --- linux-2.6.0-test5/arch/arm/def-configs/hackkit 2003-09-08 12:50:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/hackkit 1969-12-31 16:00:00.000000000 -0800 @@ -1,654 +0,0 @@ -# -# Automatically generated make config: don't edit -# -CONFIG_ARM=y -CONFIG_MMU=y -CONFIG_SWAP=y -CONFIG_UID16=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y - -# -# General setup -# -CONFIG_NET=y -CONFIG_SYSVIPC=y -# CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_SYSCTL=y - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODULE_UNLOAD is not set -# CONFIG_MODULE_FORCE_UNLOAD is not set -CONFIG_KMOD=y - -# -# System Type -# -# CONFIG_ARCH_ADIFCC is not set -# CONFIG_ARCH_ANAKIN is not set -# CONFIG_ARCH_ARCA5K is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_PXA is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_CAMELOT is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_IOP310 is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_RPC is not set -CONFIG_ARCH_SA1100=y -# CONFIG_ARCH_SHARK is not set - -# -# Archimedes/A5000 Implementations -# - -# -# Archimedes/A5000 Implementations (select only ONE) -# - -# -# CLPS711X/EP721X Implementations -# - -# -# Epxa10db -# - -# -# Footbridge Implementations -# - -# -# IOP310 Implementation Options -# - -# -# IOP310 Chipset Features -# - -# -# Intel PXA250/210 Implementations -# - -# -# SA11x0 Implementations -# -# CONFIG_SA1100_ASSABET is not set -# CONFIG_SA1100_ADSBITSY is not set -# CONFIG_SA1100_BRUTUS is not set -# CONFIG_SA1100_CERF is not set -# CONFIG_SA1100_H3100 is not set -# CONFIG_SA1100_H3600 is not set -# CONFIG_SA1100_H3800 is not set -# CONFIG_SA1100_EXTENEX1 is not set -# CONFIG_SA1100_FLEXANET is not set -# CONFIG_SA1100_FREEBIRD is not set -# CONFIG_SA1100_GRAPHICSCLIENT is not set -# CONFIG_SA1100_GRAPHICSMASTER is not set -# CONFIG_SA1100_BADGE4 is not set -# CONFIG_SA1100_JORNADA720 is not set -CONFIG_SA1100_HACKKIT=y -# CONFIG_SA1100_HUW_WEBPANEL is not set -# CONFIG_SA1100_ITSY is not set -# CONFIG_SA1100_LART is not set -# CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_OMNIMETER is not set -# CONFIG_SA1100_PANGOLIN is not set -# CONFIG_SA1100_PLEB is not set -# CONFIG_SA1100_PT_SYSTEM3 is not set -# CONFIG_SA1100_SHANNON is not set -# CONFIG_SA1100_SHERMAN is not set -# CONFIG_SA1100_SIMPAD is not set -# CONFIG_SA1100_PFS168 is not set -# CONFIG_SA1100_VICTOR is not set -# CONFIG_SA1100_XP860 is not set -# CONFIG_SA1100_YOPY is not set -# CONFIG_SA1100_STORK is not set -# CONFIG_SA1100_USB is not set - -# -# Processor Type -# -CONFIG_CPU_32=y -CONFIG_CPU_SA1100=y -CONFIG_CPU_32v4=y - -# -# Processor Features -# - -# -# General setup -# -CONFIG_DISCONTIGMEM=y -CONFIG_ISA=y -# CONFIG_ZBOOT_ROM is not set -CONFIG_ZBOOT_ROM_TEXT=0x0 -CONFIG_ZBOOT_ROM_BSS=0x0 -CONFIG_CPU_FREQ=y -CONFIG_CPU_FREQ_24_API=y -CONFIG_CPU_FREQ_26_API=y -# CONFIG_HOTPLUG is not set - -# -# At least one math emulation must be selected -# -CONFIG_FPE_NWFPE=y -# CONFIG_FPE_FASTFPE is not set -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -CONFIG_BINFMT_AOUT=y -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -# CONFIG_PM is not set -# CONFIG_PREEMPT is not set -# CONFIG_ARTHUR is not set -CONFIG_CMDLINE="console=ttySA0,115200 root=/dev/ram0 initrd=0xc0400000,8M init=/rootshell" -CONFIG_LEDS=y -CONFIG_LEDS_TIMER=y -CONFIG_LEDS_CPU=y -CONFIG_ALIGNMENT_TRAP=y - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Memory Technology Devices (MTD) -# -CONFIG_MTD=y -CONFIG_MTD_DEBUG=y -CONFIG_MTD_DEBUG_VERBOSE=3 -# CONFIG_MTD_PARTITIONS is not set -# CONFIG_MTD_CONCAT is not set - -# -# User Modules And Translation Layers -# -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -# CONFIG_NFTL is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=y -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_GEN_PROBE=y -# CONFIG_MTD_CFI_ADV_OPTIONS is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_ABSENT is not set -# CONFIG_MTD_OBSOLETE_CHIPS is not set - -# -# Mapping drivers for chip access -# -# CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_NORA is not set -# CONFIG_MTD_ARM_INTEGRATOR is not set -# CONFIG_MTD_EDB7312 is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLKMTD is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC1000 is not set -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set - -# -# NAND Flash Device Drivers -# -# CONFIG_MTD_NAND is not set - -# -# Plug and Play configuration -# -# CONFIG_PNP is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_XD is not set -# CONFIG_BLK_DEV_LOOP is not set -# CONFIG_BLK_DEV_NBD is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=8192 -CONFIG_BLK_DEV_INITRD=y - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set - -# -# Networking options -# -CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set -# CONFIG_NETLINK_DEV is not set -# CONFIG_NETFILTER is not set -# CONFIG_FILTER is not set -CONFIG_UNIX=y -# CONFIG_NET_KEY is not set -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -# CONFIG_IP_PNP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_ARPD is not set -CONFIG_INET_ECN=y -CONFIG_SYN_COOKIES=y -# CONFIG_INET_AH is not set -# CONFIG_INET_ESP is not set -# CONFIG_XFRM_USER is not set -# CONFIG_IPV6 is not set - -# -# SCTP Configuration (EXPERIMENTAL) -# -CONFIG_IPV6_SCTP__=y -# CONFIG_IP_SCTP is not set -# CONFIG_ATM is not set -# CONFIG_VLAN_8021Q is not set -# CONFIG_LLC is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network testing -# -# CONFIG_NET_PKTGEN is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set -CONFIG_DUMMY=y -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set -# CONFIG_ETHERTAP is not set - -# -# Ethernet (10 or 100Mbit) -# -# CONFIG_NET_ETHERNET is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -CONFIG_NET_RADIO=y -# CONFIG_STRIP is not set -# CONFIG_ARLAN is not set -# CONFIG_AIRONET4500 is not set - -# -# Wireless ISA/PCI cards support -# -# CONFIG_WAVELAN is not set -# CONFIG_AIRO is not set -# CONFIG_HERMES is not set -CONFIG_NET_WIRELESS=y - -# -# Token Ring devices (depends on LLC=y) -# -# CONFIG_NET_FC is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# ATA/ATAPI/MFM/RLL support -# -# CONFIG_IDE is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# I2O device support -# -# CONFIG_I2O is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN_BOOL is not set - -# -# Input device support -# -CONFIG_INPUT=y - -# -# Userland interfaces -# -CONFIG_INPUT_MOUSEDEV=y -CONFIG_INPUT_MOUSEDEV_PSAUX=y -CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 -CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 -# CONFIG_INPUT_JOYDEV is not set -# CONFIG_INPUT_TSDEV is not set -# CONFIG_INPUT_TSLIBDEV is not set -# CONFIG_INPUT_EVDEV is not set -# CONFIG_INPUT_EVBUG is not set - -# -# Input I/O drivers -# -# CONFIG_GAMEPORT is not set -CONFIG_SOUND_GAMEPORT=y -CONFIG_SERIO=y -# CONFIG_SERIO_I8042 is not set -CONFIG_SERIO_SERPORT=y -# CONFIG_SERIO_CT82C710 is not set - -# -# Input Device Drivers -# -# CONFIG_INPUT_KEYBOARD is not set -# CONFIG_INPUT_MOUSE is not set -# CONFIG_INPUT_JOYSTICK is not set -# CONFIG_INPUT_TOUCHSCREEN is not set -# CONFIG_INPUT_MISC is not set - -# -# Character devices -# -CONFIG_VT=y -CONFIG_VT_CONSOLE=y -CONFIG_HW_CONSOLE=y -# CONFIG_SERIAL_NONSTANDARD is not set - -# -# Serial drivers -# -# CONFIG_SERIAL_8250 is not set - -# -# Non-8250 serial port support -# -CONFIG_SERIAL_SA1100=y -CONFIG_SERIAL_SA1100_CONSOLE=y -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=256 - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# L3 serial bus support -# -# CONFIG_L3 is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -# CONFIG_GEN_RTC is not set -CONFIG_SA1100_RTC=y -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set -# CONFIG_RAW_DRIVER is not set - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set -# CONFIG_REISERFS_FS is not set -# CONFIG_ADFS_FS is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BEFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_EXT3_FS is not set -# CONFIG_JBD is not set -CONFIG_FAT_FS=y -CONFIG_MSDOS_FS=y -CONFIG_VFAT_FS=y -# CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set -# CONFIG_JFFS2_FS is not set -CONFIG_CRAMFS=y -CONFIG_TMPFS=y -CONFIG_RAMFS=y -# CONFIG_ISO9660_FS is not set -# CONFIG_JFS_FS is not set -# CONFIG_MINIX_FS is not set -# CONFIG_VXFS_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -CONFIG_DEVPTS_FS=y -# CONFIG_QNX4FS_FS is not set -# CONFIG_ROMFS_FS is not set -CONFIG_EXT2_FS=y -# CONFIG_EXT2_FS_XATTR is not set -# CONFIG_SYSV_FS is not set -# CONFIG_UDF_FS is not set -# CONFIG_UFS_FS is not set -# CONFIG_XFS_FS is not set - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -# CONFIG_INTERMEZZO_FS is not set -# CONFIG_NFS_FS is not set -# CONFIG_NFSD is not set -# CONFIG_EXPORTFS is not set -# CONFIG_CIFS is not set -# CONFIG_SMB_FS is not set -# CONFIG_NCP_FS is not set -# CONFIG_AFS_FS is not set - -# -# Partition Types -# -# CONFIG_PARTITION_ADVANCED is not set -CONFIG_NLS=y - -# -# Native Language Support -# -CONFIG_NLS_DEFAULT="iso8859-1" -# CONFIG_NLS_CODEPAGE_437 is not set -# CONFIG_NLS_CODEPAGE_737 is not set -# CONFIG_NLS_CODEPAGE_775 is not set -# CONFIG_NLS_CODEPAGE_850 is not set -# CONFIG_NLS_CODEPAGE_852 is not set -# CONFIG_NLS_CODEPAGE_855 is not set -# CONFIG_NLS_CODEPAGE_857 is not set -# CONFIG_NLS_CODEPAGE_860 is not set -# CONFIG_NLS_CODEPAGE_861 is not set -# CONFIG_NLS_CODEPAGE_862 is not set -# CONFIG_NLS_CODEPAGE_863 is not set -# CONFIG_NLS_CODEPAGE_864 is not set -# CONFIG_NLS_CODEPAGE_865 is not set -# CONFIG_NLS_CODEPAGE_866 is not set -# CONFIG_NLS_CODEPAGE_869 is not set -# CONFIG_NLS_CODEPAGE_936 is not set -# CONFIG_NLS_CODEPAGE_950 is not set -# CONFIG_NLS_CODEPAGE_932 is not set -# CONFIG_NLS_CODEPAGE_949 is not set -# CONFIG_NLS_CODEPAGE_874 is not set -# CONFIG_NLS_ISO8859_8 is not set -# CONFIG_NLS_CODEPAGE_1250 is not set -# CONFIG_NLS_CODEPAGE_1251 is not set -# CONFIG_NLS_ISO8859_1 is not set -# CONFIG_NLS_ISO8859_2 is not set -# CONFIG_NLS_ISO8859_3 is not set -# CONFIG_NLS_ISO8859_4 is not set -# CONFIG_NLS_ISO8859_5 is not set -# CONFIG_NLS_ISO8859_6 is not set -# CONFIG_NLS_ISO8859_7 is not set -# CONFIG_NLS_ISO8859_9 is not set -# CONFIG_NLS_ISO8859_13 is not set -# CONFIG_NLS_ISO8859_14 is not set -# CONFIG_NLS_ISO8859_15 is not set -# CONFIG_NLS_KOI8_R is not set -# CONFIG_NLS_KOI8_U is not set -# CONFIG_NLS_UTF8 is not set - -# -# Console drivers -# -# CONFIG_VGA_CONSOLE is not set - -# -# Frame-buffer support -# -# CONFIG_FB is not set - -# -# Sound -# -# CONFIG_SOUND is not set - -# -# Misc devices -# - -# -# Multimedia Capabilities Port drivers -# -# CONFIG_MCP is not set - -# -# Console Switches -# -# CONFIG_SWITCHES is not set - -# -# USB support -# - -# -# Bluetooth support -# -# CONFIG_BT is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_USER=y -# CONFIG_DEBUG_INFO is not set -CONFIG_DEBUG_KERNEL=y -CONFIG_DEBUG_SLAB=y -CONFIG_MAGIC_SYSRQ=y -CONFIG_DEBUG_SPINLOCK=y -CONFIG_DEBUG_WAITQ=y -CONFIG_DEBUG_BUGVERBOSE=y -CONFIG_DEBUG_ERRORS=y -CONFIG_KALLSYMS=y -CONFIG_DEBUG_LL=y - -# -# Security options -# -CONFIG_SECURITY_CAPABILITIES=y - -# -# Cryptographic options -# -# CONFIG_CRYPTO is not set - -# -# Library routines -# -# CONFIG_CRC32 is not set -CONFIG_ZLIB_INFLATE=y diff -prauN linux-2.6.0-test5/arch/arm/def-configs/huw_webpanel wli-2.6.0-test5-bk12-25/arch/arm/def-configs/huw_webpanel --- linux-2.6.0-test5/arch/arm/def-configs/huw_webpanel 2003-09-08 12:50:16.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/huw_webpanel 1969-12-31 16:00:00.000000000 -0800 @@ -1,435 +0,0 @@ -# -# Automatically generated by make menuconfig: don't edit -# -CONFIG_ARM=y -# CONFIG_EISA is not set -# CONFIG_SBUS is not set -# CONFIG_MCA is not set -CONFIG_UID16=y - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -# CONFIG_OBSOLETE is not set - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODVERSIONS is not set -# CONFIG_KMOD is not set - -# -# System Type -# -# CONFIG_ARCH_ARCA5K is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_RPC is not set -CONFIG_ARCH_SA1100=y -# CONFIG_ARCH_CLPS711X is not set - -# -# Archimedes/A5000 Implementations -# - -# -# Footbridge Implementations -# - -# -# SA11x0 Implementations -# -# CONFIG_SA1100_ASSABET is not set -CONFIG_SA1100_HUW_WEBPANEL=y -# CONFIG_SA1100_BRUTUS is not set -# CONFIG_SA1100_CERF is not set -# CONFIG_SA1100_BITSY is not set -# CONFIG_SA1100_LART is not set -# CONFIG_SA1100_GRAPHICSCLIENT is not set -# CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_VICTOR is not set -# CONFIG_SA1100_YOPY is not set -# CONFIG_SA1100_SHERMAN is not set -# CONFIG_SA1100_XP860 is not set -# CONFIG_SA1100_PANGOLIN is not set -# CONFIG_SA1100_FREEBIRD is not set -# CONFIG_SA1100_USB is not set -# CONFIG_SA1100_FREQUENCY_SCALE is not set -# CONFIG_SA1100_VOLTAGE_SCALE is not set - -# -# CLPS711X/EP721X Implementations -# -# CONFIG_ARCH_ACORN is not set -# CONFIG_FOOTBRIDGE is not set -# CONFIG_FOOTBRIDGE_HOST is not set -# CONFIG_FOOTBRIDGE_ADDIN is not set -CONFIG_CPU_32=y -# CONFIG_CPU_26 is not set -CONFIG_CPU_32v4=y -CONFIG_CPU_SA1100=y -CONFIG_DISCONTIGMEM=y - -# -# General setup -# -# CONFIG_ANGELBOOT is not set -# CONFIG_PCI is not set -# CONFIG_ISA is not set -# CONFIG_ISA_DMA is not set -# CONFIG_HOTPLUG is not set -# CONFIG_PCMCIA is not set -CONFIG_NET=y -CONFIG_SYSVIPC=y -# CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_SYSCTL=y -CONFIG_NWFPE=y -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -# CONFIG_BINFMT_AOUT is not set -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -# CONFIG_PM is not set -# CONFIG_ARTHUR is not set -CONFIG_CMDLINE="keepinitrd mem=32480K root=/dev/ram initrd=0xc0800000,8M" -# CONFIG_LEDS is not set -CONFIG_ALIGNMENT_TRAP=y - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Memory Technology Devices (MTD) -# -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set -# CONFIG_MTD_DOC1000 is not set -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOCPROBE is not set -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_MTDRAM is not set -CONFIG_MTD_CFI=y -CONFIG_MTD_CFI_GEOMETRY=y -# CONFIG_MTD_CFI_B1 is not set -# CONFIG_MTD_CFI_B2 is not set -CONFIG_MTD_CFI_B4=y -# CONFIG_MTD_CFI_I1 is not set -CONFIG_MTD_CFI_I2=y -# CONFIG_MTD_CFI_I4 is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_SHARP is not set -# CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_NORA is not set -# CONFIG_MTD_PNC2000 is not set -# CONFIG_MTD_RPXLITE is not set -# CONFIG_MTD_SBC_MEDIAGX is not set -# CONFIG_MTD_ELAN_104NC is not set -CONFIG_MTD_SA1100=y -# CONFIG_MTD_DC21285 is not set -# CONFIG_MTD_JEDEC is not set -# CONFIG_MTD_MIXMEM is not set -# CONFIG_MTD_OCTAGON is not set -# CONFIG_MTD_VMAX is not set -# CONFIG_MTD_NAND is not set -# CONFIG_MTD_NAND_SPIA is not set -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -# CONFIG_NFTL is not set - -# -# Plug and Play configuration -# -# CONFIG_PNP is not set -# CONFIG_ISAPNP is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_XD is not set -# CONFIG_PARIDE is not set -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_BLK_DEV_DAC960 is not set -CONFIG_BLK_DEV_LOOP=y -# CONFIG_BLK_DEV_NBD is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=8192 -CONFIG_BLK_DEV_INITRD=y -# CONFIG_BLK_DEV_FLASH is not set - -# -# Networking options -# -# CONFIG_PACKET is not set -# CONFIG_NETLINK is not set -# CONFIG_NETFILTER is not set -# CONFIG_FILTER is not set -CONFIG_UNIX=y -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -# CONFIG_IP_PNP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_INET_ECN is not set -# CONFIG_SYN_COOKIES is not set -# CONFIG_IPV6 is not set -# CONFIG_KHTTPD is not set -# CONFIG_ATM is not set -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_LLC is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network device support -# -# CONFIG_NETDEVICES is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# ATA/IDE/MFM/RLL support -# -# CONFIG_IDE is not set -# CONFIG_BLK_DEV_HD is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# I2O device support -# -# CONFIG_I2O is not set -# CONFIG_I2O_BLOCK is not set -# CONFIG_I2O_LAN is not set -# CONFIG_I2O_SCSI is not set -# CONFIG_I2O_PROC is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Input core support -# -# CONFIG_INPUT is not set - -# -# Character devices -# -CONFIG_VT=y -# CONFIG_VT_CONSOLE is not set -# CONFIG_SERIAL is not set -# CONFIG_SERIAL_EXTENDED is not set -# CONFIG_SERIAL_NONSTANDARD is not set -CONFIG_SERIAL_SA1100=y -CONFIG_SERIAL_SA1100_CONSOLE=y -CONFIG_SA1100_DEFAULT_BAUDRATE=115200 -CONFIG_TOUCHSCREEN_UCB1200=y -# CONFIG_TOUCHSCREEN_BITSY is not set -# CONFIG_PROFILER is not set -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=32 - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -# CONFIG_MOUSE is not set - -# -# Joysticks -# -# CONFIG_JOYSTICK is not set -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -# CONFIG_INTEL_RNG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -# CONFIG_SA1100_RTC is not set -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set -# CONFIG_ADFS_FS is not set -# CONFIG_ADFS_FS_RW is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_FAT_FS is not set -# CONFIG_MSDOS_FS is not set -# CONFIG_UMSDOS_FS is not set -# CONFIG_VFAT_FS is not set -# CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set -CONFIG_CRAMFS=y -# CONFIG_RAMFS is not set -# CONFIG_ISO9660_FS is not set -# CONFIG_JOLIET is not set -# CONFIG_MINIX_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS_DEBUG is not set -# CONFIG_NTFS_RW is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -# CONFIG_DEVFS_MOUNT is not set -# CONFIG_DEVFS_DEBUG is not set -CONFIG_DEVPTS_FS=y -# CONFIG_QNX4FS_FS is not set -# CONFIG_QNX4FS_RW is not set -CONFIG_ROMFS_FS=y -CONFIG_EXT2_FS=y -# CONFIG_SYSV_FS is not set -# CONFIG_SYSV_FS_WRITE is not set -# CONFIG_UDF_FS is not set -# CONFIG_UDF_RW is not set -# CONFIG_UFS_FS is not set -# CONFIG_UFS_FS_WRITE is not set - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -# CONFIG_NFS_FS is not set -# CONFIG_NFS_V3 is not set -# CONFIG_ROOT_NFS is not set -# CONFIG_NFSD is not set -# CONFIG_NFSD_V3 is not set -# CONFIG_SUNRPC is not set -# CONFIG_LOCKD is not set -# CONFIG_SMB_FS is not set -# CONFIG_NCP_FS is not set -# CONFIG_NCPFS_PACKET_SIGNING is not set -# CONFIG_NCPFS_IOCTL_LOCKING is not set -# CONFIG_NCPFS_STRONG is not set -# CONFIG_NCPFS_NFS_NS is not set -# CONFIG_NCPFS_OS2_NS is not set -# CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_MOUNT_SUBDIR is not set -# CONFIG_NCPFS_NDS_DOMAINS is not set -# CONFIG_NCPFS_NLS is not set -# CONFIG_NCPFS_EXTRAS is not set - -# -# Partition Types -# -# CONFIG_PARTITION_ADVANCED is not set -CONFIG_MSDOS_PARTITION=y -# CONFIG_NLS is not set - -# -# Console drivers -# -CONFIG_PC_KEYMAP=y -# CONFIG_VGA_CONSOLE is not set -CONFIG_FB=y - -# -# Frame-buffer support -# -CONFIG_FB=y -CONFIG_DUMMY_CONSOLE=y -# CONFIG_FB_ACORN is not set -# CONFIG_FB_CLPS711X is not set -# CONFIG_FB_CYBER2000 is not set -CONFIG_FB_SA1100=y -# CONFIG_FB_VIRTUAL is not set -# CONFIG_FBCON_ADVANCED is not set -CONFIG_FBCON_CFB2=y -CONFIG_FBCON_CFB4=y -CONFIG_FBCON_CFB8=y -CONFIG_FBCON_CFB16=y -CONFIG_FBCON_FONTWIDTH8_ONLY=y -CONFIG_FBCON_FONTS=y -CONFIG_FONT_8x8=y -# CONFIG_FONT_8x16 is not set -# CONFIG_FONT_SUN8x16 is not set -# CONFIG_FONT_PEARL_8x8 is not set -# CONFIG_FONT_ACORN_8x8 is not set - -# -# Sound -# -# CONFIG_SOUND is not set - -# -# USB support -# -# CONFIG_USB is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_ERRORS=y -CONFIG_DEBUG_USER=y -# CONFIG_DEBUG_INFO is not set -CONFIG_MAGIC_SYSRQ=y -# CONFIG_DEBUG_LL is not set diff -prauN linux-2.6.0-test5/arch/arm/def-configs/integrator wli-2.6.0-test5-bk12-25/arch/arm/def-configs/integrator --- linux-2.6.0-test5/arch/arm/def-configs/integrator 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/integrator 1969-12-31 16:00:00.000000000 -0800 @@ -1,663 +0,0 @@ -# -# Automatically generated make config: don't edit -# -CONFIG_ARM=y -# CONFIG_EISA is not set -# CONFIG_SBUS is not set -# CONFIG_MCA is not set -CONFIG_UID16=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y -# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -# CONFIG_OBSOLETE is not set - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODVERSIONS is not set -# CONFIG_KMOD is not set - -# -# System Type -# -# CONFIG_ARCH_ARCA5K is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -CONFIG_ARCH_INTEGRATOR=y -# CONFIG_ARCH_RPC is not set -# CONFIG_ARCH_SA1100 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_ANAKIN is not set - -# -# Archimedes/A5000 Implementations -# - -# -# Archimedes/A5000 Implementations (select only ONE) -# -# CONFIG_ARCH_ARC is not set -# CONFIG_ARCH_A5K is not set - -# -# Footbridge Implementations -# -# CONFIG_ARCH_CATS is not set -# CONFIG_ARCH_PERSONAL_SERVER is not set -# CONFIG_ARCH_EBSA285_ADDIN is not set -# CONFIG_ARCH_EBSA285_HOST is not set -# CONFIG_ARCH_NETWINDER is not set - -# -# SA11x0 Implementations -# -# CONFIG_SA1100_ASSABET is not set -# CONFIG_ASSABET_NEPONSET is not set -# CONFIG_SA1100_BRUTUS is not set -# CONFIG_SA1100_CERF is not set -# CONFIG_SA1100_BITSY is not set -# CONFIG_SA1100_EXTENEX1 is not set -# CONFIG_SA1100_FREEBIRD is not set -# CONFIG_SA1100_GRAPHICSCLIENT is not set -# CONFIG_SA1100_JORNADA720 is not set -# CONFIG_SA1100_HUW_WEBPANEL is not set -# CONFIG_SA1100_ITSY is not set -# CONFIG_SA1100_LART is not set -# CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_OMNIMETER is not set -# CONFIG_SA1100_PANGOLIN is not set -# CONFIG_SA1100_PLEB is not set -# CONFIG_SA1100_SHERMAN is not set -# CONFIG_SA1100_PFS168 is not set -# CONFIG_SA1100_VICTOR is not set -# CONFIG_SA1100_XP860 is not set -# CONFIG_SA1100_YOPY is not set - -# -# CLPS711X/EP721X Implementations -# -# CONFIG_ARCH_P720T is not set -# CONFIG_ARCH_ACORN is not set -# CONFIG_FOOTBRIDGE is not set -# CONFIG_FOOTBRIDGE_HOST is not set -# CONFIG_FOOTBRIDGE_ADDIN is not set -CONFIG_CPU_32=y -# CONFIG_CPU_26 is not set - -# -# Processor Type -# -# CONFIG_CPU_32v3 is not set -CONFIG_CPU_32v4=y -# CONFIG_CPU_ARM610 is not set -# CONFIG_CPU_ARM710 is not set -CONFIG_CPU_ARM720T=y -CONFIG_CPU_ARM920T=y -CONFIG_CPU_ARM920_CPU_IDLE=y -CONFIG_CPU_ARM920_I_CACHE_ON=y -CONFIG_CPU_ARM920_D_CACHE_ON=y -# CONFIG_CPU_ARM920_WRITETHROUGH is not set -# CONFIG_CPU_ARM1020 is not set -# CONFIG_CPU_SA110 is not set -# CONFIG_CPU_SA1100 is not set -# CONFIG_DISCONTIGMEM is not set - -# -# General setup -# -CONFIG_PCI_INTEGRATOR=y -CONFIG_PCI=y -# CONFIG_ISA is not set -# CONFIG_ISA_DMA is not set -CONFIG_CPU_CLOCK=y -CONFIG_PCI_NAMES=y -# CONFIG_HOTPLUG is not set -# CONFIG_PCMCIA is not set -CONFIG_NET=y -CONFIG_SYSVIPC=y -# CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_SYSCTL=y -# CONFIG_FPE_NWFPE is not set -CONFIG_FPE_FASTFPE=y -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -CONFIG_BINFMT_AOUT=y -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -CONFIG_PM=y -# CONFIG_ARTHUR is not set -CONFIG_CMDLINE="root=1f03 mem=32M" -CONFIG_LEDS=y -CONFIG_LEDS_TIMER=y -CONFIG_LEDS_CPU=y -CONFIG_ALIGNMENT_TRAP=y - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Memory Technology Devices (MTD) -# -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set -CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_REDBOOT_PARTS is not set -# CONFIG_MTD_BOOTLDR_PARTS is not set -CONFIG_MTD_AFS_PARTS=y - -# -# User Modules And Translation Layers -# -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -# CONFIG_NFTL is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=y -# CONFIG_MTD_CFI_VIRTUAL_ER is not set -CONFIG_MTD_CFI_ADV_OPTIONS=y -CONFIG_MTD_CFI_NOSWAP=y -# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set -# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set -# CONFIG_MTD_CFI_LART_BIT_SWAP is not set -# CONFIG_MTD_CFI_GEOMETRY is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_AMDSTD is not set -# CONFIG_MTD_SHARP is not set -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_JEDEC is not set - -# -# Mapping drivers for chip access -# -# CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_SUN_UFLASH is not set -# CONFIG_MTD_NORA is not set -# CONFIG_MTD_PNC2000 is not set -# CONFIG_MTD_RPXLITE is not set -# CONFIG_MTD_SC520CDP is not set -# CONFIG_MTD_NETSC520 is not set -# CONFIG_MTD_SBC_GXX is not set -# CONFIG_MTD_ELAN_104NC is not set -# CONFIG_MTD_SA1100 is not set -# CONFIG_MTD_SA1100_REDBOOT_PARTITIONS is not set -# CONFIG_MTD_SA1100_BOOTLDR_PARTITIONS is not set -# CONFIG_MTD_DC21285 is not set -# CONFIG_MTD_IQ80310 is not set -# CONFIG_MTD_DBOX2 is not set -# CONFIG_MTD_CSTM_MIPS_IXX is not set -# CONFIG_MTD_CFI_FLAGADM is not set -# CONFIG_MTD_MIXMEM is not set -# CONFIG_MTD_OCTAGON is not set -# CONFIG_MTD_VMAX is not set -CONFIG_MTD_ARMFLASH=y - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_MTDRAM is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC1000 is not set -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOCPROBE is not set - -# -# NAND Flash Device Drivers -# -# CONFIG_MTD_NAND is not set -# CONFIG_MTD_NAND_SPIA is not set - -# -# Plug and Play configuration -# -# CONFIG_PNP is not set -# CONFIG_ISAPNP is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_XD is not set -# CONFIG_PARIDE is not set -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_BLK_DEV_DAC960 is not set -# CONFIG_BLK_DEV_LOOP is not set -# CONFIG_BLK_DEV_NBD is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=4096 -# CONFIG_BLK_DEV_INITRD is not set - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set -# CONFIG_BLK_DEV_MD is not set -# CONFIG_MD_LINEAR is not set -# CONFIG_MD_RAID0 is not set -# CONFIG_MD_RAID1 is not set -# CONFIG_MD_RAID5 is not set -# CONFIG_BLK_DEV_LVM is not set - -# -# Networking options -# -CONFIG_PACKET=y -CONFIG_PACKET_MMAP=y -CONFIG_NETLINK=y -# CONFIG_RTNETLINK is not set -# CONFIG_NETLINK_DEV is not set -# CONFIG_NETFILTER is not set -# CONFIG_FILTER is not set -CONFIG_UNIX=y -CONFIG_INET=y -CONFIG_IP_MULTICAST=y -# CONFIG_IP_ADVANCED_ROUTER is not set -CONFIG_IP_PNP=y -# CONFIG_IP_PNP_DHCP is not set -CONFIG_IP_PNP_BOOTP=y -# CONFIG_IP_PNP_RARP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_IP_MROUTE is not set -CONFIG_INET_ECN=y -# CONFIG_SYN_COOKIES is not set -# CONFIG_IPV6 is not set -# CONFIG_KHTTPD is not set -# CONFIG_ATM is not set - -# -# -# -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_LLC is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set -# CONFIG_ETHERTAP is not set -# CONFIG_NET_SB1000 is not set - -# -# Ethernet (10 or 100Mbit) -# -CONFIG_NET_ETHERNET=y -# CONFIG_NET_VENDOR_3COM is not set -# CONFIG_LANCE is not set -# CONFIG_NET_VENDOR_SMC is not set -# CONFIG_NET_VENDOR_RACAL is not set -# CONFIG_AT1700 is not set -# CONFIG_DEPCA is not set -# CONFIG_HP100 is not set -# CONFIG_NET_ISA is not set -CONFIG_NET_PCI=y -# CONFIG_PCNET32 is not set -# CONFIG_ADAPTEC_STARFIRE is not set -# CONFIG_APRICOT is not set -# CONFIG_CS89x0 is not set -# CONFIG_TULIP is not set -# CONFIG_DE4X5 is not set -# CONFIG_DGRS is not set -# CONFIG_DM9102 is not set -CONFIG_EEPRO100=y -CONFIG_EEPRO100_PM=y -# CONFIG_LNE390 is not set -# CONFIG_FEALNX is not set -# CONFIG_NATSEMI is not set -# CONFIG_NE2K_PCI is not set -# CONFIG_NE3210 is not set -# CONFIG_ES3210 is not set -# CONFIG_8139TOO is not set -# CONFIG_8139TOO_PIO is not set -# CONFIG_8139TOO_TUNE_TWISTER is not set -# CONFIG_8139TOO_8129 is not set -# CONFIG_SIS900 is not set -# CONFIG_EPIC100 is not set -# CONFIG_SUNDANCE is not set -# CONFIG_TLAN is not set -# CONFIG_VIA_RHINE is not set -# CONFIG_WINBOND_840 is not set -# CONFIG_HAPPYMEAL is not set -# CONFIG_NET_POCKET is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_ACENIC is not set -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -# CONFIG_SK98LIN is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set - -# -# Token Ring devices -# -# CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# ATA/IDE/MFM/RLL support -# -# CONFIG_IDE is not set -# CONFIG_BLK_DEV_HD is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# IEEE 1394 (FireWire) support -# -# CONFIG_IEEE1394 is not set - -# -# I2O device support -# -# CONFIG_I2O is not set -# CONFIG_I2O_PCI is not set -# CONFIG_I2O_BLOCK is not set -# CONFIG_I2O_LAN is not set -# CONFIG_I2O_SCSI is not set -# CONFIG_I2O_PROC is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Input core support -# -# CONFIG_INPUT is not set - -# -# Character devices -# -CONFIG_VT=y -CONFIG_VT_CONSOLE=y -# CONFIG_SERIAL is not set -# CONFIG_SERIAL_EXTENDED is not set -# CONFIG_SERIAL_NONSTANDARD is not set -# CONFIG_SERIAL_21285 is not set -# CONFIG_SERIAL_21285_OLD is not set -# CONFIG_SERIAL_21285_CONSOLE is not set -# CONFIG_SERIAL_SA1100 is not set -# CONFIG_SERIAL_SA1100_CONSOLE is not set -CONFIG_SERIAL_AMBA=y -CONFIG_SERIAL_AMBA_CONSOLE=y -CONFIG_SERIAL_INTEGRATOR=y -# CONFIG_SERIAL_CLPS711X is not set -# CONFIG_SERIAL_CLPS711X_CONSOLE is not set -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=256 - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -CONFIG_MOUSE=y -CONFIG_PSMOUSE=y -# CONFIG_82C710_MOUSE is not set -# CONFIG_PC110_PAD is not set - -# -# Joysticks -# -# CONFIG_JOYSTICK is not set - -# -# Input core support is needed for joysticks -# -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -# CONFIG_INTEL_RNG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set -# CONFIG_REISERFS_FS is not set -# CONFIG_REISERFS_CHECK is not set -# CONFIG_ADFS_FS is not set -# CONFIG_ADFS_FS_RW is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_FAT_FS is not set -# CONFIG_MSDOS_FS is not set -# CONFIG_UMSDOS_FS is not set -# CONFIG_VFAT_FS is not set -# CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set -CONFIG_JFFS2_FS=y -CONFIG_JFFS2_FS_DEBUG=0 -# CONFIG_CRAMFS is not set -# CONFIG_TMPFS is not set -# CONFIG_RAMFS is not set -# CONFIG_ISO9660_FS is not set -# CONFIG_JOLIET is not set -CONFIG_MINIX_FS=y -# CONFIG_VXFS_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS_DEBUG is not set -# CONFIG_NTFS_RW is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -# CONFIG_DEVFS_MOUNT is not set -# CONFIG_DEVFS_DEBUG is not set -CONFIG_DEVPTS_FS=y -# CONFIG_QNX4FS_FS is not set -# CONFIG_QNX4FS_RW is not set -CONFIG_ROMFS_FS=y -CONFIG_EXT2_FS=y -# CONFIG_SYSV_FS is not set -# CONFIG_SYSV_FS_WRITE is not set -# CONFIG_UDF_FS is not set -# CONFIG_UDF_RW is not set -# CONFIG_UFS_FS is not set -# CONFIG_UFS_FS_WRITE is not set - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -CONFIG_NFS_FS=y -CONFIG_NFS_V3=y -CONFIG_ROOT_NFS=y -CONFIG_NFSD=y -CONFIG_NFSD_V3=y -CONFIG_SUNRPC=y -CONFIG_LOCKD=y -CONFIG_LOCKD_V4=y -# CONFIG_SMB_FS is not set -# CONFIG_NCP_FS is not set -# CONFIG_NCPFS_PACKET_SIGNING is not set -# CONFIG_NCPFS_IOCTL_LOCKING is not set -# CONFIG_NCPFS_STRONG is not set -# CONFIG_NCPFS_NFS_NS is not set -# CONFIG_NCPFS_OS2_NS is not set -# CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_NLS is not set -# CONFIG_NCPFS_EXTRAS is not set - -# -# Partition Types -# -CONFIG_PARTITION_ADVANCED=y -# CONFIG_ACORN_PARTITION is not set -# CONFIG_OSF_PARTITION is not set -# CONFIG_AMIGA_PARTITION is not set -# CONFIG_ATARI_PARTITION is not set -# CONFIG_MAC_PARTITION is not set -# CONFIG_MSDOS_PARTITION is not set -# CONFIG_SGI_PARTITION is not set -# CONFIG_ULTRIX_PARTITION is not set -# CONFIG_SUN_PARTITION is not set -# CONFIG_SMB_NLS is not set -# CONFIG_NLS is not set - -# -# Console drivers -# -CONFIG_KMI_KEYB=y -CONFIG_KMI_MOUSE=y -CONFIG_PC_KEYMAP=y -CONFIG_VGA_CONSOLE=y -CONFIG_FB=y - -# -# Frame-buffer support -# -CONFIG_FB=y -CONFIG_DUMMY_CONSOLE=y -# CONFIG_FB_RIVA is not set -# CONFIG_FB_CLGEN is not set -# CONFIG_FB_PM2 is not set -# CONFIG_FB_ACORN is not set -# CONFIG_FB_CLPS711X is not set -# CONFIG_FB_CYBER2000 is not set -# CONFIG_FB_SA1100 is not set -# CONFIG_FB_ANAKIN is not set -# CONFIG_FB_E1355 is not set -# CONFIG_FB_MATROX is not set -# CONFIG_FB_ATY is not set -# CONFIG_FB_ATY128 is not set -# CONFIG_FB_3DFX is not set -# CONFIG_FB_SIS is not set -# CONFIG_FB_VIRTUAL is not set -# CONFIG_FBCON_ADVANCED is not set -# CONFIG_FBCON_FONTWIDTH8_ONLY is not set -CONFIG_FBCON_FONTS=y -CONFIG_FONT_8x8=y -CONFIG_FONT_8x16=y -# CONFIG_FONT_SUN8x16 is not set -# CONFIG_FONT_SUN12x22 is not set -# CONFIG_FONT_6x11 is not set -# CONFIG_FONT_PEARL_8x8 is not set -# CONFIG_FONT_ACORN_8x8 is not set - -# -# Sound -# -# CONFIG_SOUND is not set - -# -# USB support -# -# CONFIG_USB is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_ERRORS=y -CONFIG_DEBUG_USER=y -# CONFIG_DEBUG_INFO is not set -CONFIG_MAGIC_SYSRQ=y -# CONFIG_NO_PGT_CACHE is not set -CONFIG_DEBUG_LL=y -# CONFIG_DEBUG_DC21285_PORT is not set -# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -prauN linux-2.6.0-test5/arch/arm/def-configs/iq80310 wli-2.6.0-test5-bk12-25/arch/arm/def-configs/iq80310 --- linux-2.6.0-test5/arch/arm/def-configs/iq80310 2003-09-08 12:49:54.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/iq80310 1969-12-31 16:00:00.000000000 -0800 @@ -1,770 +0,0 @@ -# -# Automatically generated make config: don't edit -# -CONFIG_ARM=y -CONFIG_MMU=y -CONFIG_UID16=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y - -# -# General setup -# -CONFIG_SWAP=y -CONFIG_SYSVIPC=y -# CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_SYSCTL=y -CONFIG_LOG_BUF_SHIFT=14 -# CONFIG_EMBEDDED is not set -CONFIG_KALLSYMS=y -CONFIG_FUTEX=y -CONFIG_EPOLL=y -CONFIG_IOSCHED_AS=y -CONFIG_IOSCHED_DEADLINE=y - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODULE_UNLOAD is not set -CONFIG_OBSOLETE_MODPARM=y -# CONFIG_MODVERSIONS is not set -CONFIG_KMOD=y - -# -# System Type -# -# CONFIG_ARCH_ADIFCC is not set -# CONFIG_ARCH_ANAKIN is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_PXA is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_CAMELOT is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -CONFIG_ARCH_IOP3XX=y -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_RPC is not set -# CONFIG_ARCH_SA1100 is not set -# CONFIG_ARCH_SHARK is not set - -# -# CLPS711X/EP721X Implementations -# - -# -# Epxa10db -# - -# -# Footbridge Implementations -# - -# -# IOP3xx Implementation Options -# -CONFIG_ARCH_IQ80310=y -# CONFIG_ARCH_IQ80321 is not set -CONFIG_ARCH_IOP310=y -# CONFIG_ARCH_IOP321 is not set - -# -# IOP3xx Chipset Features -# -# CONFIG_IOP3XX_AAU is not set -# CONFIG_IOP3XX_DMA is not set -# CONFIG_IOP3XX_MU is not set -# CONFIG_IOP3XX_PMON is not set - -# -# ADIFCC Implementation Options -# - -# -# ADI Board Types -# - -# -# Intel PXA250/210 Implementations -# - -# -# SA11x0 Implementations -# - -# -# Processor Type -# -CONFIG_CPU_32=y -CONFIG_CPU_XSCALE=y -CONFIG_XS80200=y -CONFIG_CPU_32v5=y - -# -# Processor Features -# -CONFIG_ARM_THUMB=y -CONFIG_XSCALE_PMU=y - -# -# General setup -# -CONFIG_PCI=y -# CONFIG_ZBOOT_ROM is not set -CONFIG_ZBOOT_ROM_TEXT=0x00060000 -CONFIG_ZBOOT_ROM_BSS=0xa1008000 -# CONFIG_PCI_LEGACY_PROC is not set -CONFIG_PCI_NAMES=y -# CONFIG_HOTPLUG is not set - -# -# MMC/SD Card support -# -# CONFIG_MMC is not set - -# -# At least one math emulation must be selected -# -CONFIG_FPE_NWFPE=y -# CONFIG_FPE_NWFPE_XP is not set -# CONFIG_FPE_FASTFPE is not set -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -CONFIG_BINFMT_AOUT=y -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -# CONFIG_PM is not set -# CONFIG_PREEMPT is not set -# CONFIG_ARTHUR is not set -CONFIG_CMDLINE="console=ttyS0,115200 ip=bootp mem=32M root=/dev/nfs initrd=0xc0800000,4M" -CONFIG_ALIGNMENT_TRAP=y - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Memory Technology Devices (MTD) -# -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set -CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_CONCAT is not set -CONFIG_MTD_REDBOOT_PARTS=y -# CONFIG_MTD_CMDLINE_PARTS is not set -# CONFIG_MTD_AFS_PARTS is not set - -# -# User Modules And Translation Layers -# -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -# CONFIG_NFTL is not set -# CONFIG_INFTL is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=y -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_GEN_PROBE=y -# CONFIG_MTD_CFI_ADV_OPTIONS is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_CFI_STAA is not set -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_ABSENT is not set -# CONFIG_MTD_OBSOLETE_CHIPS is not set - -# -# Mapping drivers for chip access -# -# CONFIG_MTD_COMPLEX_MAPPINGS is not set -# CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_ARM_INTEGRATOR is not set -CONFIG_MTD_IQ80310=y -# CONFIG_MTD_EDB7312 is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLKMTD is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOC2001PLUS is not set - -# -# NAND Flash Device Drivers -# -# CONFIG_MTD_NAND is not set - -# -# Plug and Play support -# -# CONFIG_PNP is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_BLK_DEV_DAC960 is not set -# CONFIG_BLK_DEV_UMEM is not set -# CONFIG_BLK_DEV_LOOP is not set -# CONFIG_BLK_DEV_NBD is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=8192 -CONFIG_BLK_DEV_INITRD=y - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set - -# -# Networking support -# -CONFIG_NET=y - -# -# Networking options -# -# CONFIG_PACKET is not set -# CONFIG_NETLINK_DEV is not set -CONFIG_NETFILTER=y -# CONFIG_NETFILTER_DEBUG is not set -CONFIG_UNIX=y -# CONFIG_NET_KEY is not set -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -CONFIG_IP_PNP=y -# CONFIG_IP_PNP_DHCP is not set -CONFIG_IP_PNP_BOOTP=y -# CONFIG_IP_PNP_RARP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_ARPD is not set -# CONFIG_INET_ECN is not set -# CONFIG_SYN_COOKIES is not set -# CONFIG_INET_AH is not set -# CONFIG_INET_ESP is not set -# CONFIG_INET_IPCOMP is not set - -# -# IP: Netfilter Configuration -# -# CONFIG_IP_NF_CONNTRACK is not set -# CONFIG_IP_NF_QUEUE is not set -# CONFIG_IP_NF_IPTABLES is not set -# CONFIG_IP_NF_ARPTABLES is not set -# CONFIG_IP_NF_COMPAT_IPCHAINS is not set -# CONFIG_IP_NF_COMPAT_IPFWADM is not set - -# -# IP: Virtual Server Configuration -# -# CONFIG_IP_VS is not set -# CONFIG_IPV6 is not set -# CONFIG_XFRM_USER is not set - -# -# SCTP Configuration (EXPERIMENTAL) -# -CONFIG_IPV6_SCTP__=y -# CONFIG_IP_SCTP is not set -# CONFIG_ATM is not set -# CONFIG_VLAN_8021Q is not set -# CONFIG_LLC is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network testing -# -# CONFIG_NET_PKTGEN is not set -CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set -# CONFIG_ETHERTAP is not set - -# -# Ethernet (10 or 100Mbit) -# -CONFIG_NET_ETHERNET=y -CONFIG_MII=y -# CONFIG_SMC91X is not set -# CONFIG_HAPPYMEAL is not set -# CONFIG_SUNGEM is not set -# CONFIG_NET_VENDOR_3COM is not set - -# -# Tulip family network device support -# -# CONFIG_NET_TULIP is not set -# CONFIG_HP100 is not set -CONFIG_NET_PCI=y -# CONFIG_PCNET32 is not set -# CONFIG_AMD8111_ETH is not set -# CONFIG_ADAPTEC_STARFIRE is not set -# CONFIG_B44 is not set -# CONFIG_DGRS is not set -CONFIG_EEPRO100=y -# CONFIG_EEPRO100_PIO is not set -# CONFIG_E100 is not set -# CONFIG_FEALNX is not set -# CONFIG_NATSEMI is not set -# CONFIG_NE2K_PCI is not set -# CONFIG_8139CP is not set -# CONFIG_8139TOO is not set -# CONFIG_SIS900 is not set -# CONFIG_EPIC100 is not set -# CONFIG_SUNDANCE is not set -# CONFIG_TLAN is not set -# CONFIG_VIA_RHINE is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_ACENIC is not set -# CONFIG_DL2K is not set -# CONFIG_E1000 is not set -# CONFIG_NS83820 is not set -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -# CONFIG_R8169 is not set -# CONFIG_SK98LIN is not set -# CONFIG_TIGON3 is not set - -# -# Ethernet (10000 Mbit) -# -# CONFIG_IXGB is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set - -# -# Token Ring devices (depends on LLC=y) -# -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# ATA/ATAPI/MFM/RLL support -# -CONFIG_IDE=y - -# -# IDE, ATA and ATAPI Block devices -# -CONFIG_BLK_DEV_IDE=y - -# -# Please see Documentation/ide.txt for help/info on IDE drives -# -# CONFIG_BLK_DEV_HD is not set -CONFIG_BLK_DEV_IDEDISK=y -# CONFIG_IDEDISK_MULTI_MODE is not set -# CONFIG_IDEDISK_STROKE is not set -CONFIG_BLK_DEV_IDECD=y -# CONFIG_BLK_DEV_IDEFLOPPY is not set -# CONFIG_IDE_TASK_IOCTL is not set -# CONFIG_IDE_TASKFILE_IO is not set - -# -# IDE chipset support/bugfixes -# -# CONFIG_BLK_DEV_IDEPCI is not set - -# -# SCSI device support -# -# CONFIG_SCSI is not set - -# -# IEEE 1394 (FireWire) support (EXPERIMENTAL) -# -# CONFIG_IEEE1394 is not set - -# -# I2O device support -# -# CONFIG_I2O is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN_BOOL is not set - -# -# Input device support -# -# CONFIG_INPUT is not set - -# -# Userland interfaces -# - -# -# Input I/O drivers -# -# CONFIG_GAMEPORT is not set -CONFIG_SOUND_GAMEPORT=y -# CONFIG_SERIO is not set - -# -# Input Device Drivers -# - -# -# Character devices -# -# CONFIG_SERIAL_NONSTANDARD is not set - -# -# Serial drivers -# -CONFIG_SERIAL_8250=y -CONFIG_SERIAL_8250_CONSOLE=y -# CONFIG_SERIAL_8250_EXTENDED is not set - -# -# Non-8250 serial port support -# -# CONFIG_SERIAL_DZ is not set -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=256 - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# I2C Hardware Sensors Mainboard support -# - -# -# I2C Hardware Sensors Chip support -# -# CONFIG_I2C_SENSOR is not set - -# -# L3 serial bus support -# -# CONFIG_L3 is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -# CONFIG_QIC02_TAPE is not set - -# -# IPMI -# -# CONFIG_IPMI_HANDLER is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -# CONFIG_GEN_RTC is not set -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set -# CONFIG_RAW_DRIVER is not set -# CONFIG_HANGCHECK_TIMER is not set - -# -# Multimedia devices -# -CONFIG_VIDEO_DEV=y - -# -# Video For Linux -# -# CONFIG_VIDEO_PROC_FS is not set - -# -# Video Adapters -# -# CONFIG_VIDEO_PMS is not set -# CONFIG_VIDEO_CPIA is not set -# CONFIG_VIDEO_STRADIS is not set -# CONFIG_VIDEO_HEXIUM_ORION is not set -# CONFIG_VIDEO_HEXIUM_GEMINI is not set - -# -# Radio Adapters -# -# CONFIG_RADIO_GEMTEK_PCI is not set -# CONFIG_RADIO_MAXIRADIO is not set -# CONFIG_RADIO_MAESTRO is not set - -# -# Digital Video Broadcasting Devices -# -CONFIG_DVB=y -CONFIG_DVB_CORE=y - -# -# Supported Frontend Modules -# -# CONFIG_DVB_STV0299 is not set -# CONFIG_DVB_ALPS_BSRV2 is not set -# CONFIG_DVB_ALPS_TDLB7 is not set -# CONFIG_DVB_ALPS_TDMB7 is not set -# CONFIG_DVB_ATMEL_AT76C651 is not set -# CONFIG_DVB_CX24110 is not set -# CONFIG_DVB_GRUNDIG_29504_491 is not set -# CONFIG_DVB_GRUNDIG_29504_401 is not set -# CONFIG_DVB_MT312 is not set -# CONFIG_DVB_VES1820 is not set -# CONFIG_DVB_TDA1004X is not set - -# -# Supported SAA7146 based PCI Adapters -# -# CONFIG_DVB_AV7110 is not set -# CONFIG_DVB_BUDGET is not set - -# -# Supported FlexCopII (B2C2) Adapters -# -# CONFIG_DVB_B2C2_SKYSTAR is not set -# CONFIG_VIDEO_BTCX is not set - -# -# File systems -# -CONFIG_EXT2_FS=y -# CONFIG_EXT2_FS_XATTR is not set -# CONFIG_EXT3_FS is not set -# CONFIG_JBD is not set -# CONFIG_REISERFS_FS is not set -# CONFIG_JFS_FS is not set -# CONFIG_XFS_FS is not set -# CONFIG_MINIX_FS is not set -# CONFIG_ROMFS_FS is not set -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set - -# -# CD-ROM/DVD Filesystems -# -# CONFIG_ISO9660_FS is not set -# CONFIG_UDF_FS is not set - -# -# DOS/FAT/NT Filesystems -# -# CONFIG_FAT_FS is not set -# CONFIG_NTFS_FS is not set - -# -# Pseudo filesystems -# -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -CONFIG_DEVPTS_FS=y -# CONFIG_DEVPTS_FS_XATTR is not set -CONFIG_TMPFS=y -CONFIG_RAMFS=y - -# -# Miscellaneous filesystems -# -# CONFIG_ADFS_FS is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BEFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set -CONFIG_JFFS2_FS=y -CONFIG_JFFS2_FS_DEBUG=0 -# CONFIG_JFFS2_FS_NAND is not set -# CONFIG_CRAMFS is not set -# CONFIG_VXFS_FS is not set -# CONFIG_HPFS_FS is not set -# CONFIG_QNX4FS_FS is not set -# CONFIG_SYSV_FS is not set -# CONFIG_UFS_FS is not set - -# -# Network File Systems -# -CONFIG_NFS_FS=y -# CONFIG_NFS_V3 is not set -# CONFIG_NFS_V4 is not set -# CONFIG_NFSD is not set -CONFIG_ROOT_NFS=y -CONFIG_LOCKD=y -# CONFIG_EXPORTFS is not set -CONFIG_SUNRPC=y -# CONFIG_SUNRPC_GSS is not set -# CONFIG_SMB_FS is not set -# CONFIG_CIFS is not set -# CONFIG_NCP_FS is not set -# CONFIG_CODA_FS is not set -# CONFIG_INTERMEZZO_FS is not set -# CONFIG_AFS_FS is not set - -# -# Partition Types -# -CONFIG_PARTITION_ADVANCED=y -# CONFIG_ACORN_PARTITION is not set -# CONFIG_OSF_PARTITION is not set -# CONFIG_AMIGA_PARTITION is not set -# CONFIG_ATARI_PARTITION is not set -# CONFIG_MAC_PARTITION is not set -CONFIG_MSDOS_PARTITION=y -# CONFIG_BSD_DISKLABEL is not set -# CONFIG_MINIX_SUBPARTITION is not set -# CONFIG_SOLARIS_X86_PARTITION is not set -# CONFIG_UNIXWARE_DISKLABEL is not set -# CONFIG_LDM_PARTITION is not set -# CONFIG_NEC98_PARTITION is not set -# CONFIG_SGI_PARTITION is not set -# CONFIG_ULTRIX_PARTITION is not set -# CONFIG_SUN_PARTITION is not set -# CONFIG_EFI_PARTITION is not set - -# -# Graphics support -# -# CONFIG_FB is not set - -# -# Sound -# -# CONFIG_SOUND is not set - -# -# Misc devices -# - -# -# Multimedia Capabilities Port drivers -# -# CONFIG_MCP is not set - -# -# Console Switches -# -# CONFIG_SWITCHES is not set - -# -# USB support -# -# CONFIG_USB is not set -# CONFIG_USB_GADGET is not set - -# -# Bluetooth support -# -# CONFIG_BT is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_USER=y -# CONFIG_DEBUG_INFO is not set -CONFIG_DEBUG_KERNEL=y -# CONFIG_DEBUG_SLAB is not set -# CONFIG_MAGIC_SYSRQ is not set -# CONFIG_DEBUG_SPINLOCK is not set -# CONFIG_DEBUG_WAITQ is not set -CONFIG_DEBUG_BUGVERBOSE=y -CONFIG_DEBUG_ERRORS=y -CONFIG_DEBUG_LL=y - -# -# Security options -# -# CONFIG_SECURITY is not set - -# -# Cryptographic options -# -# CONFIG_CRYPTO is not set - -# -# Library routines -# -# CONFIG_CRC32 is not set -CONFIG_ZLIB_INFLATE=y -CONFIG_ZLIB_DEFLATE=y diff -prauN linux-2.6.0-test5/arch/arm/def-configs/iq80321 wli-2.6.0-test5-bk12-25/arch/arm/def-configs/iq80321 --- linux-2.6.0-test5/arch/arm/def-configs/iq80321 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/iq80321 1969-12-31 16:00:00.000000000 -0800 @@ -1,776 +0,0 @@ -# -# Automatically generated make config: don't edit -# -CONFIG_ARM=y -CONFIG_MMU=y -CONFIG_UID16=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y - -# -# General setup -# -CONFIG_SWAP=y -CONFIG_SYSVIPC=y -# CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_SYSCTL=y -CONFIG_LOG_BUF_SHIFT=14 -# CONFIG_EMBEDDED is not set -CONFIG_KALLSYMS=y -CONFIG_FUTEX=y -CONFIG_EPOLL=y -CONFIG_IOSCHED_AS=y -CONFIG_IOSCHED_DEADLINE=y - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODULE_UNLOAD is not set -CONFIG_OBSOLETE_MODPARM=y -# CONFIG_MODVERSIONS is not set -CONFIG_KMOD=y - -# -# System Type -# -# CONFIG_ARCH_ADIFCC is not set -# CONFIG_ARCH_ANAKIN is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_PXA is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_CAMELOT is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -CONFIG_ARCH_IOP3XX=y -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_RPC is not set -# CONFIG_ARCH_SA1100 is not set -# CONFIG_ARCH_SHARK is not set - -# -# CLPS711X/EP721X Implementations -# - -# -# Epxa10db -# - -# -# Footbridge Implementations -# - -# -# IOP3xx Implementation Options -# -# CONFIG_ARCH_IQ80310 is not set -CONFIG_ARCH_IQ80321=y -# CONFIG_ARCH_IOP310 is not set -CONFIG_ARCH_IOP321=y - -# -# IOP3xx Chipset Features -# -# CONFIG_IOP3XX_AAU is not set -# CONFIG_IOP3XX_DMA is not set -# CONFIG_IOP3XX_MU is not set -# CONFIG_IOP3XX_PMON is not set - -# -# ADIFCC Implementation Options -# - -# -# ADI Board Types -# - -# -# Intel PXA250/210 Implementations -# - -# -# SA11x0 Implementations -# - -# -# Processor Type -# -CONFIG_CPU_32=y -CONFIG_CPU_XSCALE=y -CONFIG_CPU_32v5=y - -# -# Processor Features -# -# CONFIG_ARM_THUMB is not set -CONFIG_XSCALE_PMU=y - -# -# General setup -# -CONFIG_PCI=y -# CONFIG_ZBOOT_ROM is not set -CONFIG_ZBOOT_ROM_TEXT=0x0 -CONFIG_ZBOOT_ROM_BSS=0x0 -# CONFIG_PCI_LEGACY_PROC is not set -CONFIG_PCI_NAMES=y -# CONFIG_HOTPLUG is not set - -# -# MMC/SD Card support -# -# CONFIG_MMC is not set - -# -# At least one math emulation must be selected -# -CONFIG_FPE_NWFPE=y -# CONFIG_FPE_NWFPE_XP is not set -# CONFIG_FPE_FASTFPE is not set -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -CONFIG_BINFMT_AOUT=y -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -# CONFIG_PM is not set -# CONFIG_PREEMPT is not set -# CONFIG_ARTHUR is not set -CONFIG_CMDLINE="ip=boot root=nfs console=ttyS0,115200 mem=128M@0xa0000000" -CONFIG_ALIGNMENT_TRAP=y - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Memory Technology Devices (MTD) -# -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set -CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_CONCAT is not set -CONFIG_MTD_REDBOOT_PARTS=y -# CONFIG_MTD_CMDLINE_PARTS is not set -# CONFIG_MTD_AFS_PARTS is not set - -# -# User Modules And Translation Layers -# -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -# CONFIG_NFTL is not set -# CONFIG_INFTL is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=y -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_GEN_PROBE=y -# CONFIG_MTD_CFI_ADV_OPTIONS is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_CFI_STAA is not set -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_ABSENT is not set -# CONFIG_MTD_OBSOLETE_CHIPS is not set - -# -# Mapping drivers for chip access -# -# CONFIG_MTD_COMPLEX_MAPPINGS is not set -# CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_ARM_INTEGRATOR is not set -# CONFIG_MTD_EDB7312 is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLKMTD is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOC2001PLUS is not set - -# -# NAND Flash Device Drivers -# -# CONFIG_MTD_NAND is not set - -# -# Plug and Play support -# -# CONFIG_PNP is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_BLK_DEV_DAC960 is not set -# CONFIG_BLK_DEV_UMEM is not set -# CONFIG_BLK_DEV_LOOP is not set -# CONFIG_BLK_DEV_NBD is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=8192 -# CONFIG_BLK_DEV_INITRD is not set - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set - -# -# Networking support -# -CONFIG_NET=y - -# -# Networking options -# -# CONFIG_PACKET is not set -# CONFIG_NETLINK_DEV is not set -CONFIG_NETFILTER=y -# CONFIG_NETFILTER_DEBUG is not set -CONFIG_UNIX=y -# CONFIG_NET_KEY is not set -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -CONFIG_IP_PNP=y -# CONFIG_IP_PNP_DHCP is not set -CONFIG_IP_PNP_BOOTP=y -# CONFIG_IP_PNP_RARP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_ARPD is not set -# CONFIG_INET_ECN is not set -# CONFIG_SYN_COOKIES is not set -# CONFIG_INET_AH is not set -# CONFIG_INET_ESP is not set -# CONFIG_INET_IPCOMP is not set - -# -# IP: Netfilter Configuration -# -# CONFIG_IP_NF_CONNTRACK is not set -# CONFIG_IP_NF_QUEUE is not set -# CONFIG_IP_NF_IPTABLES is not set -# CONFIG_IP_NF_ARPTABLES is not set -# CONFIG_IP_NF_COMPAT_IPCHAINS is not set -# CONFIG_IP_NF_COMPAT_IPFWADM is not set - -# -# IP: Virtual Server Configuration -# -# CONFIG_IP_VS is not set -# CONFIG_IPV6 is not set -# CONFIG_XFRM_USER is not set - -# -# SCTP Configuration (EXPERIMENTAL) -# -CONFIG_IPV6_SCTP__=y -# CONFIG_IP_SCTP is not set -# CONFIG_ATM is not set -# CONFIG_VLAN_8021Q is not set -# CONFIG_LLC is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network testing -# -# CONFIG_NET_PKTGEN is not set -CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set -# CONFIG_ETHERTAP is not set - -# -# Ethernet (10 or 100Mbit) -# -CONFIG_NET_ETHERNET=y -# CONFIG_MII is not set -# CONFIG_SMC91X is not set -# CONFIG_HAPPYMEAL is not set -# CONFIG_SUNGEM is not set -# CONFIG_NET_VENDOR_3COM is not set - -# -# Tulip family network device support -# -# CONFIG_NET_TULIP is not set -# CONFIG_HP100 is not set -CONFIG_NET_PCI=y -# CONFIG_PCNET32 is not set -# CONFIG_AMD8111_ETH is not set -# CONFIG_ADAPTEC_STARFIRE is not set -# CONFIG_B44 is not set -# CONFIG_DGRS is not set -CONFIG_EEPRO100=y -# CONFIG_EEPRO100_PIO is not set -# CONFIG_E100 is not set -# CONFIG_FEALNX is not set -# CONFIG_NATSEMI is not set -# CONFIG_NE2K_PCI is not set -# CONFIG_8139CP is not set -# CONFIG_8139TOO is not set -# CONFIG_SIS900 is not set -# CONFIG_EPIC100 is not set -# CONFIG_SUNDANCE is not set -# CONFIG_TLAN is not set -# CONFIG_VIA_RHINE is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_ACENIC is not set -# CONFIG_DL2K is not set -CONFIG_E1000=y -CONFIG_E1000_NAPI=y -# CONFIG_NS83820 is not set -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -# CONFIG_R8169 is not set -# CONFIG_SK98LIN is not set -# CONFIG_TIGON3 is not set - -# -# Ethernet (10000 Mbit) -# -# CONFIG_IXGB is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set - -# -# Token Ring devices (depends on LLC=y) -# -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# ATA/ATAPI/MFM/RLL support -# -CONFIG_IDE=y - -# -# IDE, ATA and ATAPI Block devices -# -CONFIG_BLK_DEV_IDE=y - -# -# Please see Documentation/ide.txt for help/info on IDE drives -# -# CONFIG_BLK_DEV_HD is not set -CONFIG_BLK_DEV_IDEDISK=y -# CONFIG_IDEDISK_MULTI_MODE is not set -# CONFIG_IDEDISK_STROKE is not set -CONFIG_BLK_DEV_IDECD=y -# CONFIG_BLK_DEV_IDEFLOPPY is not set -# CONFIG_IDE_TASK_IOCTL is not set -# CONFIG_IDE_TASKFILE_IO is not set - -# -# IDE chipset support/bugfixes -# -CONFIG_BLK_DEV_IDEPCI=y -# CONFIG_BLK_DEV_GENERIC is not set -# CONFIG_IDEPCI_SHARE_IRQ is not set -CONFIG_BLK_DEV_IDEDMA_PCI=y -# CONFIG_BLK_DEV_IDE_TCQ is not set -# CONFIG_BLK_DEV_OFFBOARD is not set -# CONFIG_BLK_DEV_IDEDMA_FORCED is not set -CONFIG_IDEDMA_PCI_AUTO=y -# CONFIG_IDEDMA_ONLYDISK is not set -CONFIG_BLK_DEV_IDEDMA=y -# CONFIG_IDEDMA_PCI_WIP is not set -CONFIG_BLK_DEV_ADMA=y -# CONFIG_BLK_DEV_AEC62XX is not set -# CONFIG_BLK_DEV_ALI15X3 is not set -# CONFIG_BLK_DEV_AMD74XX is not set -CONFIG_BLK_DEV_CMD64X=y -# CONFIG_BLK_DEV_TRIFLEX is not set -# CONFIG_BLK_DEV_CY82C693 is not set -# CONFIG_BLK_DEV_CS5520 is not set -# CONFIG_BLK_DEV_HPT34X is not set -# CONFIG_BLK_DEV_HPT366 is not set -# CONFIG_BLK_DEV_SC1200 is not set -# CONFIG_BLK_DEV_PIIX is not set -# CONFIG_BLK_DEV_NS87415 is not set -# CONFIG_BLK_DEV_OPTI621 is not set -# CONFIG_BLK_DEV_PDC202XX_OLD is not set -# CONFIG_BLK_DEV_PDC202XX_NEW is not set -# CONFIG_BLK_DEV_SVWKS is not set -# CONFIG_BLK_DEV_SIIMAGE is not set -# CONFIG_BLK_DEV_SLC90E66 is not set -# CONFIG_BLK_DEV_TRM290 is not set -# CONFIG_BLK_DEV_VIA82CXXX is not set -# CONFIG_BLK_DEV_SL82C105 is not set -CONFIG_IDEDMA_AUTO=y -# CONFIG_IDEDMA_IVB is not set - -# -# SCSI device support -# -# CONFIG_SCSI is not set - -# -# IEEE 1394 (FireWire) support (EXPERIMENTAL) -# -# CONFIG_IEEE1394 is not set - -# -# I2O device support -# -# CONFIG_I2O is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN_BOOL is not set - -# -# Input device support -# -# CONFIG_INPUT is not set - -# -# Userland interfaces -# - -# -# Input I/O drivers -# -# CONFIG_GAMEPORT is not set -CONFIG_SOUND_GAMEPORT=y -# CONFIG_SERIO is not set - -# -# Input Device Drivers -# - -# -# Character devices -# -# CONFIG_SERIAL_NONSTANDARD is not set - -# -# Serial drivers -# -CONFIG_SERIAL_8250=y -CONFIG_SERIAL_8250_CONSOLE=y -# CONFIG_SERIAL_8250_EXTENDED is not set - -# -# Non-8250 serial port support -# -# CONFIG_SERIAL_DZ is not set -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=256 - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# I2C Hardware Sensors Mainboard support -# - -# -# I2C Hardware Sensors Chip support -# -# CONFIG_I2C_SENSOR is not set - -# -# L3 serial bus support -# -# CONFIG_L3 is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -# CONFIG_QIC02_TAPE is not set - -# -# IPMI -# -# CONFIG_IPMI_HANDLER is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -# CONFIG_GEN_RTC is not set -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set -# CONFIG_RAW_DRIVER is not set -# CONFIG_HANGCHECK_TIMER is not set - -# -# Multimedia devices -# -CONFIG_VIDEO_DEV=y - -# -# Video For Linux -# -# CONFIG_VIDEO_PROC_FS is not set - -# -# Video Adapters -# -# CONFIG_VIDEO_PMS is not set -# CONFIG_VIDEO_CPIA is not set -# CONFIG_VIDEO_STRADIS is not set -# CONFIG_VIDEO_HEXIUM_ORION is not set -# CONFIG_VIDEO_HEXIUM_GEMINI is not set - -# -# Radio Adapters -# -# CONFIG_RADIO_GEMTEK_PCI is not set -# CONFIG_RADIO_MAXIRADIO is not set -# CONFIG_RADIO_MAESTRO is not set - -# -# Digital Video Broadcasting Devices -# -# CONFIG_DVB is not set -# CONFIG_VIDEO_BTCX is not set - -# -# File systems -# -CONFIG_EXT2_FS=y -# CONFIG_EXT2_FS_XATTR is not set -# CONFIG_EXT3_FS is not set -# CONFIG_JBD is not set -# CONFIG_REISERFS_FS is not set -# CONFIG_JFS_FS is not set -# CONFIG_XFS_FS is not set -# CONFIG_MINIX_FS is not set -# CONFIG_ROMFS_FS is not set -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set - -# -# CD-ROM/DVD Filesystems -# -# CONFIG_ISO9660_FS is not set -# CONFIG_UDF_FS is not set - -# -# DOS/FAT/NT Filesystems -# -# CONFIG_FAT_FS is not set -# CONFIG_NTFS_FS is not set - -# -# Pseudo filesystems -# -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -CONFIG_DEVPTS_FS=y -# CONFIG_DEVPTS_FS_XATTR is not set -CONFIG_TMPFS=y -CONFIG_RAMFS=y - -# -# Miscellaneous filesystems -# -# CONFIG_ADFS_FS is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BEFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set -CONFIG_JFFS2_FS=y -CONFIG_JFFS2_FS_DEBUG=0 -# CONFIG_JFFS2_FS_NAND is not set -# CONFIG_CRAMFS is not set -# CONFIG_VXFS_FS is not set -# CONFIG_HPFS_FS is not set -# CONFIG_QNX4FS_FS is not set -# CONFIG_SYSV_FS is not set -# CONFIG_UFS_FS is not set - -# -# Network File Systems -# -CONFIG_NFS_FS=y -# CONFIG_NFS_V3 is not set -# CONFIG_NFS_V4 is not set -# CONFIG_NFSD is not set -CONFIG_ROOT_NFS=y -CONFIG_LOCKD=y -# CONFIG_EXPORTFS is not set -CONFIG_SUNRPC=y -# CONFIG_SUNRPC_GSS is not set -# CONFIG_SMB_FS is not set -# CONFIG_CIFS is not set -# CONFIG_NCP_FS is not set -# CONFIG_CODA_FS is not set -# CONFIG_INTERMEZZO_FS is not set -# CONFIG_AFS_FS is not set - -# -# Partition Types -# -CONFIG_PARTITION_ADVANCED=y -# CONFIG_ACORN_PARTITION is not set -# CONFIG_OSF_PARTITION is not set -# CONFIG_AMIGA_PARTITION is not set -# CONFIG_ATARI_PARTITION is not set -# CONFIG_MAC_PARTITION is not set -CONFIG_MSDOS_PARTITION=y -# CONFIG_BSD_DISKLABEL is not set -# CONFIG_MINIX_SUBPARTITION is not set -# CONFIG_SOLARIS_X86_PARTITION is not set -# CONFIG_UNIXWARE_DISKLABEL is not set -# CONFIG_LDM_PARTITION is not set -# CONFIG_NEC98_PARTITION is not set -# CONFIG_SGI_PARTITION is not set -# CONFIG_ULTRIX_PARTITION is not set -# CONFIG_SUN_PARTITION is not set -# CONFIG_EFI_PARTITION is not set - -# -# Graphics support -# -# CONFIG_FB is not set - -# -# Sound -# -# CONFIG_SOUND is not set - -# -# Misc devices -# - -# -# Multimedia Capabilities Port drivers -# -# CONFIG_MCP is not set - -# -# Console Switches -# -# CONFIG_SWITCHES is not set - -# -# USB support -# -# CONFIG_USB is not set -# CONFIG_USB_GADGET is not set - -# -# Bluetooth support -# -# CONFIG_BT is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -# CONFIG_DEBUG_USER is not set -# CONFIG_DEBUG_INFO is not set -CONFIG_DEBUG_KERNEL=y -# CONFIG_DEBUG_SLAB is not set -# CONFIG_MAGIC_SYSRQ is not set -# CONFIG_DEBUG_SPINLOCK is not set -# CONFIG_DEBUG_WAITQ is not set -CONFIG_DEBUG_BUGVERBOSE=y -CONFIG_DEBUG_ERRORS=y -CONFIG_DEBUG_LL=y - -# -# Security options -# -# CONFIG_SECURITY is not set - -# -# Cryptographic options -# -# CONFIG_CRYPTO is not set - -# -# Library routines -# -# CONFIG_CRC32 is not set -CONFIG_ZLIB_INFLATE=y -CONFIG_ZLIB_DEFLATE=y diff -prauN linux-2.6.0-test5/arch/arm/def-configs/jornada720 wli-2.6.0-test5-bk12-25/arch/arm/def-configs/jornada720 --- linux-2.6.0-test5/arch/arm/def-configs/jornada720 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/jornada720 1969-12-31 16:00:00.000000000 -0800 @@ -1,897 +0,0 @@ -# -# Automatically generated by make menuconfig: don't edit -# -CONFIG_ARM=y -# CONFIG_EISA is not set -# CONFIG_SBUS is not set -# CONFIG_MCA is not set -CONFIG_UID16=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y -# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set -# CONFIG_GENERIC_BUST_SPINLOCK is not set -# CONFIG_GENERIC_ISA_DMA is not set - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -# CONFIG_OBSOLETE is not set - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODVERSIONS is not set -CONFIG_KMOD=y - -# -# System Type -# -# CONFIG_ARCH_ANAKIN is not set -# CONFIG_ARCH_ARCA5K is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_CAMELOT is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_RPC is not set -CONFIG_ARCH_SA1100=y -# CONFIG_ARCH_SHARK is not set - -# -# Archimedes/A5000 Implementations -# -# CONFIG_ARCH_ARC is not set -# CONFIG_ARCH_A5K is not set - -# -# Footbridge Implementations -# -# CONFIG_ARCH_CATS is not set -# CONFIG_ARCH_PERSONAL_SERVER is not set -# CONFIG_ARCH_EBSA285_ADDIN is not set -# CONFIG_ARCH_EBSA285_HOST is not set -# CONFIG_ARCH_NETWINDER is not set - -# -# SA11x0 Implementations -# -# CONFIG_SA1100_ASSABET is not set -# CONFIG_ASSABET_NEPONSET is not set -# CONFIG_SA1100_ADSBITSY is not set -# CONFIG_SA1100_BRUTUS is not set -# CONFIG_SA1100_CERF is not set -# CONFIG_SA1100_H3100 is not set -# CONFIG_SA1100_H3600 is not set -# CONFIG_SA1100_H3800 is not set -# CONFIG_SA1100_H3XXX is not set -# CONFIG_SA1100_EXTENEX1 is not set -# CONFIG_SA1100_FLEXANET is not set -# CONFIG_SA1100_FREEBIRD is not set -# CONFIG_SA1100_GRAPHICSCLIENT is not set -# CONFIG_SA1100_GRAPHICSMASTER is not set -CONFIG_SA1100_JORNADA720=y -# CONFIG_SA1100_HUW_WEBPANEL is not set -# CONFIG_SA1100_ITSY is not set -# CONFIG_SA1100_LART is not set -# CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_OMNIMETER is not set -# CONFIG_SA1100_PANGOLIN is not set -# CONFIG_SA1100_PLEB is not set -# CONFIG_SA1100_SHANNON is not set -# CONFIG_SA1100_SHERMAN is not set -# CONFIG_SA1100_SIMPAD is not set -# CONFIG_SA1100_PFS168 is not set -# CONFIG_SA1100_VICTOR is not set -# CONFIG_SA1100_XP860 is not set -# CONFIG_SA1100_YOPY is not set -CONFIG_SA1111=y -CONFIG_FORCE_MAX_ZONEORDER=9 -# CONFIG_SA1100_USB is not set -# CONFIG_SA1100_USB_NETLINK is not set -# CONFIG_SA1100_USB_CHAR is not set -# CONFIG_REGISTERS is not set - -# -# CLPS711X/EP721X Implementations -# -# CONFIG_ARCH_AUTCPU12 is not set -# CONFIG_ARCH_CDB89712 is not set -# CONFIG_ARCH_CLEP7312 is not set -# CONFIG_ARCH_EDB7211 is not set -# CONFIG_ARCH_P720T is not set -# CONFIG_ARCH_EP7211 is not set -# CONFIG_ARCH_EP7212 is not set -# CONFIG_ARCH_ACORN is not set -# CONFIG_FOOTBRIDGE is not set -# CONFIG_FOOTBRIDGE_HOST is not set -# CONFIG_FOOTBRIDGE_ADDIN is not set -CONFIG_CPU_32=y -# CONFIG_CPU_26 is not set -# CONFIG_CPU_32v3 is not set -CONFIG_CPU_32v4=y -# CONFIG_CPU_ARM610 is not set -# CONFIG_CPU_ARM710 is not set -# CONFIG_CPU_ARM720T is not set -# CONFIG_CPU_ARM920T is not set -# CONFIG_CPU_ARM922T is not set -# CONFIG_CPU_ARM926T is not set -# CONFIG_CPU_ARM1020 is not set -# CONFIG_CPU_SA110 is not set -CONFIG_CPU_SA1100=y -# CONFIG_ARM_THUMB is not set -CONFIG_DISCONTIGMEM=y - -# -# General setup -# -# CONFIG_PCI is not set -CONFIG_ISA=y -# CONFIG_ISA_DMA is not set -# CONFIG_CPU_FREQ is not set -CONFIG_HOTPLUG=y - -# -# PCMCIA/CardBus support -# -CONFIG_PCMCIA=y -# CONFIG_I82092 is not set -# CONFIG_I82365 is not set -# CONFIG_TCIC is not set -# CONFIG_PCMCIA_CLPS6700 is not set -CONFIG_PCMCIA_SA1100=y -# CONFIG_MERCURY_BACKPAQ is not set -CONFIG_NET=y -CONFIG_SYSVIPC=y -# CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_SYSCTL=y -CONFIG_FPE_NWFPE=y -CONFIG_FPE_FASTFPE=y -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -CONFIG_BINFMT_AOUT=m -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -CONFIG_PM=y -# CONFIG_APM is not set -# CONFIG_ARTHUR is not set -CONFIG_CMDLINE="keepinitrd mem=32M" -# CONFIG_LEDS is not set -CONFIG_ALIGNMENT_TRAP=y - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Memory Technology Devices (MTD) -# -CONFIG_MTD=y -CONFIG_MTD_DEBUG=y -CONFIG_MTD_DEBUG_VERBOSE=1 -CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_REDBOOT_PARTS is not set -CONFIG_MTD_BOOTLDR_PARTS=y -# CONFIG_MTD_AFS_PARTS is not set -CONFIG_MTD_CHAR=m -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -# CONFIG_NFTL is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=y -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_GEN_PROBE=y -CONFIG_MTD_CFI_ADV_OPTIONS=y -CONFIG_MTD_CFI_NOSWAP=y -# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set -# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set -CONFIG_MTD_CFI_GEOMETRY=y -# CONFIG_MTD_CFI_B1 is not set -CONFIG_MTD_CFI_B2=y -CONFIG_MTD_CFI_B4=y -CONFIG_MTD_CFI_I1=y -CONFIG_MTD_CFI_I2=y -# CONFIG_MTD_CFI_I4 is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_ABSENT is not set -# CONFIG_MTD_OBSOLETE_CHIPS is not set -# CONFIG_MTD_AMDSTD is not set -# CONFIG_MTD_SHARP is not set -# CONFIG_MTD_JEDEC is not set - -# -# Mapping drivers for chip access -# -# CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_NORA is not set -# CONFIG_MTD_ARM_INTEGRATOR is not set -# CONFIG_MTD_CDB89712 is not set -CONFIG_MTD_SA1100=y -# CONFIG_MTD_H3600_BACKPAQ is not set -# CONFIG_MTD_DC21285 is not set -# CONFIG_MTD_IQ80310 is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLKMTD is not set -# CONFIG_MTD_DOC1000 is not set -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOCPROBE is not set - -# -# NAND Flash Device Drivers -# -# CONFIG_MTD_NAND is not set - -# -# Plug and Play configuration -# -# CONFIG_PNP is not set -# CONFIG_ISAPNP is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_XD is not set -# CONFIG_PARIDE is not set -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_BLK_DEV_DAC960 is not set -CONFIG_BLK_DEV_LOOP=m -CONFIG_BLK_DEV_NBD=m -# CONFIG_BLK_DEV_RAM is not set -# CONFIG_BLK_DEV_INITRD is not set - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set -# CONFIG_BLK_DEV_MD is not set -# CONFIG_MD_LINEAR is not set -# CONFIG_MD_RAID0 is not set -# CONFIG_MD_RAID1 is not set -# CONFIG_MD_RAID5 is not set -# CONFIG_MD_MULTIPATH is not set -# CONFIG_BLK_DEV_LVM is not set - -# -# Networking options -# -CONFIG_PACKET=y -CONFIG_PACKET_MMAP=y -CONFIG_NETLINK=y -CONFIG_RTNETLINK=y -# CONFIG_NETLINK_DEV is not set -CONFIG_NETFILTER=y -# CONFIG_NETFILTER_DEBUG is not set -CONFIG_FILTER=y -CONFIG_UNIX=y -CONFIG_INET=y -CONFIG_IP_MULTICAST=y -# CONFIG_IP_ADVANCED_ROUTER is not set -# CONFIG_IP_PNP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_IP_MROUTE is not set -# CONFIG_ARPD is not set -# CONFIG_INET_ECN is not set -# CONFIG_SYN_COOKIES is not set - -# -# IP: Netfilter Configuration -# -# CONFIG_IP_NF_CONNTRACK is not set -# CONFIG_IP_NF_QUEUE is not set -# CONFIG_IP_NF_IPTABLES is not set -# CONFIG_IP_NF_COMPAT_IPCHAINS is not set -# CONFIG_IP_NF_COMPAT_IPFWADM is not set -# CONFIG_IPV6 is not set -# CONFIG_KHTTPD is not set -# CONFIG_ATM is not set -# CONFIG_VLAN_8021Q is not set -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_LLC is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set -# CONFIG_ETHERTAP is not set - -# -# Ethernet (10 or 100Mbit) -# -# CONFIG_NET_ETHERNET is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_ACENIC is not set -# CONFIG_DL2K is not set -# CONFIG_MYRI_SBUS is not set -# CONFIG_NS83820 is not set -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -# CONFIG_SK98LIN is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PLIP is not set -CONFIG_PPP=m -# CONFIG_PPP_MULTILINK is not set -# CONFIG_PPP_FILTER is not set -CONFIG_PPP_ASYNC=m -# CONFIG_PPP_SYNC_TTY is not set -CONFIG_PPP_DEFLATE=m -CONFIG_PPP_BSDCOMP=m -# CONFIG_PPPOE is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -CONFIG_NET_RADIO=y -# CONFIG_STRIP is not set -CONFIG_WAVELAN=m -CONFIG_ARLAN=m -CONFIG_AIRONET4500=m -CONFIG_AIRONET4500_NONCS=m -# CONFIG_AIRONET4500_PNP is not set -# CONFIG_AIRONET4500_PCI is not set -# CONFIG_AIRONET4500_ISA is not set -# CONFIG_AIRONET4500_I365 is not set -# CONFIG_AIRONET4500_PROC is not set -# CONFIG_AIRO is not set -CONFIG_HERMES=m -CONFIG_PCMCIA_HERMES=m -CONFIG_AIRO_CS=m -CONFIG_NET_WIRELESS=y - -# -# Token Ring devices -# -# CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# PCMCIA network device support -# -CONFIG_NET_PCMCIA=y -CONFIG_PCMCIA_3C589=m -CONFIG_PCMCIA_3C574=m -CONFIG_PCMCIA_FMVJ18X=m -CONFIG_PCMCIA_PCNET=m -CONFIG_PCMCIA_NMCLAN=m -CONFIG_PCMCIA_SMC91C92=m -CONFIG_PCMCIA_XIRC2PS=m -# CONFIG_PCMCIA_AXNET is not set -# CONFIG_ARCNET_COM20020_CS is not set -# CONFIG_PCMCIA_IBMTR is not set -CONFIG_NET_PCMCIA_RADIO=y -# CONFIG_PCMCIA_RAYCS is not set -# CONFIG_PCMCIA_NETWAVE is not set -CONFIG_PCMCIA_WAVELAN=m -CONFIG_AIRONET4500_CS=m - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -CONFIG_IRDA=m -CONFIG_IRLAN=m -# CONFIG_IRNET is not set -CONFIG_IRCOMM=m -# CONFIG_IRDA_ULTRA is not set -# CONFIG_IRDA_OPTIONS is not set - -# -# Infrared-port device drivers -# -# CONFIG_IRTTY_SIR is not set -# CONFIG_IRPORT_SIR is not set -# CONFIG_DONGLE is not set -# CONFIG_USB_IRDA is not set -# CONFIG_NSC_FIR is not set -# CONFIG_WINBOND_FIR is not set -# CONFIG_TOSHIBA_FIR is not set -# CONFIG_SMC_IRCC_FIR is not set -# CONFIG_ALI_FIR is not set -# CONFIG_VLSI_FIR is not set -CONFIG_SA1100_FIR=m - -# -# ATA/IDE/MFM/RLL support -# -CONFIG_IDE=m - -# -# IDE, ATA and ATAPI Block devices -# -CONFIG_BLK_DEV_IDE=m -# CONFIG_BLK_DEV_HD_IDE is not set -# CONFIG_BLK_DEV_HD is not set -CONFIG_BLK_DEV_IDEDISK=m -# CONFIG_IDEDISK_MULTI_MODE is not set -CONFIG_BLK_DEV_IDECS=m -CONFIG_BLK_DEV_IDECD=m -# CONFIG_BLK_DEV_IDETAPE is not set -# CONFIG_BLK_DEV_IDEFLOPPY is not set -# CONFIG_BLK_DEV_IDESCSI is not set -# CONFIG_BLK_DEV_CMD640 is not set -# CONFIG_BLK_DEV_CMD640_ENHANCED is not set -# CONFIG_BLK_DEV_ISAPNP is not set -# CONFIG_IDE_CHIPSETS is not set -# CONFIG_IDEDMA_AUTO is not set -# CONFIG_BLK_DEV_ATARAID is not set -# CONFIG_BLK_DEV_ATARAID_PDC is not set -# CONFIG_BLK_DEV_ATARAID_HPT is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# I2O device support -# -# CONFIG_I2O is not set -# CONFIG_I2O_BLOCK is not set -# CONFIG_I2O_LAN is not set -# CONFIG_I2O_SCSI is not set -# CONFIG_I2O_PROC is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Input core support -# -CONFIG_INPUT=y -# CONFIG_INPUT_KEYBDEV is not set -CONFIG_INPUT_MOUSEDEV=y -CONFIG_INPUT_MOUSEDEV_SCREEN_X=640 -CONFIG_INPUT_MOUSEDEV_SCREEN_Y=240 -# CONFIG_INPUT_JOYDEV is not set -# CONFIG_INPUT_EVDEV is not set - -# -# Character devices -# -CONFIG_VT=y -CONFIG_VT_CONSOLE=y -CONFIG_SERIAL=m -# CONFIG_SERIAL_EXTENDED is not set -# CONFIG_SERIAL_NONSTANDARD is not set - -# -# Serial drivers -# -# CONFIG_SERIAL_ANAKIN is not set -# CONFIG_SERIAL_ANAKIN_CONSOLE is not set -# CONFIG_SERIAL_AMBA is not set -# CONFIG_SERIAL_AMBA_CONSOLE is not set -# CONFIG_SERIAL_CLPS711X is not set -# CONFIG_SERIAL_CLPS711X_CONSOLE is not set -# CONFIG_SERIAL_21285 is not set -# CONFIG_SERIAL_21285_OLD is not set -# CONFIG_SERIAL_21285_CONSOLE is not set -# CONFIG_SERIAL_UART00 is not set -# CONFIG_SERIAL_UART00_CONSOLE is not set -CONFIG_SERIAL_SA1100=y -CONFIG_SERIAL_SA1100_CONSOLE=y -CONFIG_SA1100_DEFAULT_BAUDRATE=115200 -# CONFIG_SERIAL_8250 is not set -# CONFIG_SERIAL_8250_CONSOLE is not set -# CONFIG_SERIAL_8250_EXTENDED is not set -# CONFIG_SERIAL_8250_MANY_PORTS is not set -# CONFIG_SERIAL_8250_SHARE_IRQ is not set -# CONFIG_SERIAL_8250_DETECT_IRQ is not set -# CONFIG_SERIAL_8250_MULTIPORT is not set -# CONFIG_SERIAL_8250_HUB6 is not set -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=32 -# CONFIG_NEWTONKBD is not set - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# L3 serial bus support -# -# CONFIG_L3 is not set -# CONFIG_L3_ALGOBIT is not set -# CONFIG_L3_BIT_SA1100_GPIO is not set -# CONFIG_L3_SA1111 is not set -# CONFIG_BIT_SA1100_GPIO is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -CONFIG_MOUSE=m -# CONFIG_PSMOUSE is not set -# CONFIG_82C710_MOUSE is not set -# CONFIG_PC110_PAD is not set - -# -# Joysticks -# -# CONFIG_INPUT_GAMEPORT is not set -# CONFIG_INPUT_NS558 is not set -# CONFIG_INPUT_LIGHTNING is not set -# CONFIG_INPUT_PCIGAME is not set -# CONFIG_INPUT_CS461X is not set -# CONFIG_INPUT_EMU10K1 is not set -# CONFIG_INPUT_SERIO is not set -# CONFIG_INPUT_SERPORT is not set -# CONFIG_INPUT_ANALOG is not set -# CONFIG_INPUT_A3D is not set -# CONFIG_INPUT_ADI is not set -# CONFIG_INPUT_COBRA is not set -# CONFIG_INPUT_GF2K is not set -# CONFIG_INPUT_GRIP is not set -# CONFIG_INPUT_INTERACT is not set -# CONFIG_INPUT_TMDC is not set -# CONFIG_INPUT_SIDEWINDER is not set -# CONFIG_INPUT_IFORCE_USB is not set -# CONFIG_INPUT_IFORCE_232 is not set -# CONFIG_INPUT_WARRIOR is not set -# CONFIG_INPUT_MAGELLAN is not set -# CONFIG_INPUT_SPACEORB is not set -# CONFIG_INPUT_SPACEBALL is not set -# CONFIG_INPUT_STINGER is not set -# CONFIG_INPUT_DB9 is not set -# CONFIG_INPUT_GAMECON is not set -# CONFIG_INPUT_TURBOGRAFX is not set -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -# CONFIG_INTEL_RNG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -CONFIG_SA1100_RTC=m -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set - -# -# PCMCIA character devices -# -# CONFIG_PCMCIA_SERIAL_CS is not set - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set -# CONFIG_V4L2_DEV is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set -# CONFIG_REISERFS_FS is not set -# CONFIG_REISERFS_CHECK is not set -# CONFIG_REISERFS_PROC_INFO is not set -# CONFIG_ADFS_FS is not set -# CONFIG_ADFS_FS_RW is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_EXT3_FS is not set -# CONFIG_JBD is not set -# CONFIG_JBD_DEBUG is not set -# CONFIG_FAT_FS is not set -# CONFIG_MSDOS_FS is not set -# CONFIG_UMSDOS_FS is not set -# CONFIG_VFAT_FS is not set -# CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set -CONFIG_JFFS2_FS=y -CONFIG_JFFS2_FS_DEBUG=2 -# CONFIG_CRAMFS is not set -# CONFIG_TMPFS is not set -CONFIG_RAMFS=y -CONFIG_ISO9660_FS=m -# CONFIG_JOLIET is not set -# CONFIG_ZISOFS is not set -# CONFIG_MINIX_FS is not set -# CONFIG_VXFS_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS_DEBUG is not set -# CONFIG_NTFS_RW is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -CONFIG_DEVFS_FS=y -CONFIG_DEVFS_MOUNT=y -CONFIG_DEVFS_DEBUG=y -# CONFIG_DRIVERFS_FS is not set -CONFIG_DEVPTS_FS=y -# CONFIG_QNX4FS_FS is not set -# CONFIG_QNX4FS_RW is not set -# CONFIG_ROMFS_FS is not set -CONFIG_EXT2_FS=y -# CONFIG_SYSV_FS is not set -# CONFIG_UDF_FS is not set -# CONFIG_UDF_RW is not set -# CONFIG_UFS_FS is not set -# CONFIG_UFS_FS_WRITE is not set - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -# CONFIG_INTERMEZZO_FS is not set -CONFIG_NFS_FS=m -CONFIG_NFS_V3=y -# CONFIG_ROOT_NFS is not set -# CONFIG_NFSD is not set -# CONFIG_NFSD_V3 is not set -CONFIG_SUNRPC=m -CONFIG_LOCKD=m -CONFIG_LOCKD_V4=y -# CONFIG_SMB_FS is not set -# CONFIG_NCP_FS is not set -# CONFIG_NCPFS_PACKET_SIGNING is not set -# CONFIG_NCPFS_IOCTL_LOCKING is not set -# CONFIG_NCPFS_STRONG is not set -# CONFIG_NCPFS_NFS_NS is not set -# CONFIG_NCPFS_OS2_NS is not set -# CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_NLS is not set -# CONFIG_NCPFS_EXTRAS is not set -# CONFIG_ZISOFS_FS is not set -# CONFIG_ZLIB_FS_INFLATE is not set - -# -# Partition Types -# -# CONFIG_PARTITION_ADVANCED is not set -CONFIG_MSDOS_PARTITION=y -# CONFIG_SMB_NLS is not set -# CONFIG_NLS is not set - -# -# Console drivers -# -CONFIG_PC_KEYMAP=y -# CONFIG_VGA_CONSOLE is not set - -# -# Frame-buffer support -# -CONFIG_FB=y -CONFIG_DUMMY_CONSOLE=y -# CONFIG_FB_ACORN is not set -# CONFIG_FB_ANAKIN is not set -# CONFIG_FB_CLPS711X is not set -# CONFIG_FB_SA1100 is not set -CONFIG_FB_EPSON1356=y -# CONFIG_FB_CYBER2000 is not set -# CONFIG_FB_VIRTUAL is not set -CONFIG_FBCON_ADVANCED=y -# CONFIG_FBCON_MFB is not set -# CONFIG_FBCON_CFB2 is not set -# CONFIG_FBCON_CFB4 is not set -# CONFIG_FBCON_CFB8 is not set -CONFIG_FBCON_CFB16=y -# CONFIG_FBCON_CFB24 is not set -# CONFIG_FBCON_CFB32 is not set -# CONFIG_FBCON_AFB is not set -# CONFIG_FBCON_ILBM is not set -# CONFIG_FBCON_IPLAN2P2 is not set -# CONFIG_FBCON_IPLAN2P4 is not set -# CONFIG_FBCON_IPLAN2P8 is not set -# CONFIG_FBCON_MAC is not set -# CONFIG_FBCON_VGA_PLANES is not set -# CONFIG_FBCON_VGA is not set -# CONFIG_FBCON_HGA is not set -CONFIG_FBCON_FONTWIDTH8_ONLY=y -CONFIG_FBCON_FONTS=y -CONFIG_FONT_8x8=y -# CONFIG_FONT_8x16 is not set -# CONFIG_FONT_SUN8x16 is not set -# CONFIG_FONT_PEARL_8x8 is not set -# CONFIG_FONT_ACORN_8x8 is not set - -# -# Sound -# -CONFIG_SOUND=m -# CONFIG_SOUND_BT878 is not set -# CONFIG_SOUND_CMPCI is not set -# CONFIG_SOUND_EMU10K1 is not set -# CONFIG_MIDI_EMU10K1 is not set -# CONFIG_SOUND_FUSION is not set -# CONFIG_SOUND_CS4281 is not set -# CONFIG_SOUND_ES1370 is not set -# CONFIG_SOUND_ES1371 is not set -# CONFIG_SOUND_ESSSOLO1 is not set -# CONFIG_SOUND_MAESTRO is not set -# CONFIG_SOUND_MAESTRO3 is not set -# CONFIG_SOUND_ICH is not set -# CONFIG_SOUND_RME96XX is not set -# CONFIG_SOUND_SONICVIBES is not set -# CONFIG_SOUND_TRIDENT is not set -# CONFIG_SOUND_MSNDCLAS is not set -# CONFIG_SOUND_MSNDPIN is not set -# CONFIG_SOUND_VIA82CXXX is not set -# CONFIG_MIDI_VIA82CXXX is not set -CONFIG_SOUND_SA1100=m -# CONFIG_SOUND_UDA1341 is not set -# CONFIG_SOUND_ASSABET_UDA1341 is not set -# CONFIG_SOUND_H3600_UDA1341 is not set -# CONFIG_SOUND_PANGOLIN_UDA1341 is not set -# CONFIG_SOUND_SA1111_UDA1341 is not set -# CONFIG_SOUND_SA1100SSP is not set -# CONFIG_SOUND_OSS is not set -# CONFIG_SOUND_WAVEARTIST is not set -# CONFIG_SOUND_TVMIXER is not set - -# -# Multimedia Capabilities Port drivers -# -# CONFIG_MCP is not set -# CONFIG_MCP_SA1100 is not set -# CONFIG_MCP_UCB1200 is not set -# CONFIG_MCP_UCB1200_AUDIO is not set -# CONFIG_MCP_UCB1200_TS is not set - -# -# USB support -# -# CONFIG_USB is not set -# CONFIG_USB_UHCI is not set -# CONFIG_USB_UHCI_ALT is not set -# CONFIG_USB_OHCI is not set -# CONFIG_USB_OHCI_SA1111 is not set -# CONFIG_USB_AUDIO is not set -# CONFIG_USB_BLUETOOTH is not set -# CONFIG_USB_STORAGE is not set -# CONFIG_USB_STORAGE_DEBUG is not set -# CONFIG_USB_STORAGE_DATAFAB is not set -# CONFIG_USB_STORAGE_FREECOM is not set -# CONFIG_USB_STORAGE_ISD200 is not set -# CONFIG_USB_STORAGE_DPCM is not set -# CONFIG_USB_STORAGE_HP8200e is not set -# CONFIG_USB_STORAGE_SDDR09 is not set -# CONFIG_USB_STORAGE_JUMPSHOT is not set -# CONFIG_USB_ACM is not set -# CONFIG_USB_PRINTER is not set -# CONFIG_USB_HID is not set -# CONFIG_USB_HIDDEV is not set -# CONFIG_USB_KBD is not set -# CONFIG_USB_MOUSE is not set -# CONFIG_USB_WACOM is not set -# CONFIG_USB_DC2XX is not set -# CONFIG_USB_MDC800 is not set -# CONFIG_USB_SCANNER is not set -# CONFIG_USB_MICROTEK is not set -# CONFIG_USB_HPUSBSCSI is not set -# CONFIG_USB_PEGASUS is not set -# CONFIG_USB_KAWETH is not set -# CONFIG_USB_CATC is not set -# CONFIG_USB_CDCETHER is not set -# CONFIG_USB_USBNET is not set -# CONFIG_USB_USS720 is not set - -# -# USB Serial Converter support -# -# CONFIG_USB_SERIAL is not set -# CONFIG_USB_SERIAL_GENERIC is not set -# CONFIG_USB_SERIAL_BELKIN is not set -# CONFIG_USB_SERIAL_WHITEHEAT is not set -# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set -# CONFIG_USB_SERIAL_EMPEG is not set -# CONFIG_USB_SERIAL_FTDI_SIO is not set -# CONFIG_USB_SERIAL_VISOR is not set -# CONFIG_USB_SERIAL_IR is not set -# CONFIG_USB_SERIAL_EDGEPORT is not set -# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set -# CONFIG_USB_SERIAL_KEYSPAN is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set -# CONFIG_USB_SERIAL_MCT_U232 is not set -# CONFIG_USB_SERIAL_PL2303 is not set -# CONFIG_USB_SERIAL_CYBERJACK is not set -# CONFIG_USB_SERIAL_XIRCOM is not set -# CONFIG_USB_SERIAL_OMNINET is not set -# CONFIG_USB_RIO500 is not set - -# -# Bluetooth support -# -# CONFIG_BT is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -# CONFIG_DEBUG_USER is not set -# CONFIG_DEBUG_INFO is not set -# CONFIG_NO_PGT_CACHE is not set -CONFIG_DEBUG_KERNEL=y -CONFIG_DEBUG_SLAB=y -# CONFIG_MAGIC_SYSRQ is not set -# CONFIG_DEBUG_SPINLOCK is not set -# CONFIG_DEBUG_WAITQ is not set -# CONFIG_DEBUG_BUGVERBOSE is not set -CONFIG_DEBUG_ERRORS=y -CONFIG_DEBUG_LL=y -# CONFIG_DEBUG_DC21285_PORT is not set -# CONFIG_DEBUG_CLPS711X_UART2 is not set -# CONFIG_DEBUG_LL_SER3 is not set diff -prauN linux-2.6.0-test5/arch/arm/def-configs/lart wli-2.6.0-test5-bk12-25/arch/arm/def-configs/lart --- linux-2.6.0-test5/arch/arm/def-configs/lart 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/lart 1969-12-31 16:00:00.000000000 -0800 @@ -1,893 +0,0 @@ -# -# Automatically generated make config: don't edit -# -CONFIG_ARM=y -# CONFIG_EISA is not set -# CONFIG_SBUS is not set -# CONFIG_MCA is not set -CONFIG_UID16=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y -# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -# CONFIG_OBSOLETE is not set - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODVERSIONS is not set -CONFIG_KMOD=y - -# -# System Type -# -# CONFIG_ARCH_ANAKIN is not set -# CONFIG_ARCH_ARCA5K is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_RPC is not set -CONFIG_ARCH_SA1100=y -# CONFIG_ARCH_SHARK is not set - -# -# Archimedes/A5000 Implementations -# - -# -# Archimedes/A5000 Implementations (select only ONE) -# -# CONFIG_ARCH_ARC is not set -# CONFIG_ARCH_A5K is not set - -# -# Footbridge Implementations -# -# CONFIG_ARCH_CATS is not set -# CONFIG_ARCH_PERSONAL_SERVER is not set -# CONFIG_ARCH_EBSA285_ADDIN is not set -# CONFIG_ARCH_EBSA285_HOST is not set -# CONFIG_ARCH_NETWINDER is not set - -# -# SA11x0 Implementations -# -# CONFIG_SA1100_ASSABET is not set -# CONFIG_ASSABET_NEPONSET is not set -# CONFIG_SA1100_ADSBITSY is not set -# CONFIG_SA1100_BRUTUS is not set -# CONFIG_SA1100_CERF is not set -# CONFIG_SA1100_H3600 is not set -# CONFIG_SA1100_EXTENEX1 is not set -# CONFIG_SA1100_FLEXANET is not set -# CONFIG_SA1100_FREEBIRD is not set -# CONFIG_SA1100_GRAPHICSCLIENT is not set -# CONFIG_SA1100_GRAPHICSMASTER is not set -# CONFIG_SA1100_JORNADA720 is not set -# CONFIG_SA1100_HUW_WEBPANEL is not set -# CONFIG_SA1100_ITSY is not set -CONFIG_SA1100_LART=y -# CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_OMNIMETER is not set -# CONFIG_SA1100_PANGOLIN is not set -# CONFIG_SA1100_PLEB is not set -# CONFIG_SA1100_SHERMAN is not set -# CONFIG_SA1100_SIMPAD is not set -# CONFIG_SA1100_PFS168 is not set -# CONFIG_SA1100_VICTOR is not set -# CONFIG_SA1100_XP860 is not set -# CONFIG_SA1100_YOPY is not set -CONFIG_SA1100_USB=m -CONFIG_SA1100_USB_NETLINK=m -CONFIG_SA1100_USB_CHAR=m - -# -# CLPS711X/EP721X Implementations -# -# CONFIG_ARCH_CDB89712 is not set -# CONFIG_ARCH_CLEP7312 is not set -# CONFIG_ARCH_EDB7211 is not set -# CONFIG_ARCH_P720T is not set -# CONFIG_ARCH_EP7211 is not set -# CONFIG_ARCH_EP7212 is not set -# CONFIG_ARCH_ACORN is not set -# CONFIG_FOOTBRIDGE is not set -# CONFIG_FOOTBRIDGE_HOST is not set -# CONFIG_FOOTBRIDGE_ADDIN is not set -CONFIG_CPU_32=y -# CONFIG_CPU_26 is not set - -# -# Processor Type -# -# CONFIG_CPU_32v3 is not set -CONFIG_CPU_32v4=y -# CONFIG_CPU_ARM610 is not set -# CONFIG_CPU_ARM710 is not set -# CONFIG_CPU_ARM720T is not set -# CONFIG_CPU_ARM920T is not set -# CONFIG_CPU_ARM1020 is not set -# CONFIG_CPU_SA110 is not set -CONFIG_CPU_SA1100=y -CONFIG_DISCONTIGMEM=y -# CONFIG_CPU_BIG_ENDIAN is not set - -# -# General setup -# -# CONFIG_PCI is not set -# CONFIG_ISA is not set -# CONFIG_ISA_DMA is not set -CONFIG_CPU_FREQ=y -# CONFIG_HOTPLUG is not set -# CONFIG_PCMCIA is not set -CONFIG_NET=y -CONFIG_SYSVIPC=y -# CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_SYSCTL=y - -# -# At least one math emulation must be selected -# -CONFIG_FPE_NWFPE=y -# CONFIG_FPE_FASTFPE is not set -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -CONFIG_BINFMT_AOUT=y -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -CONFIG_PM=y -CONFIG_APM=m -# CONFIG_ARTHUR is not set -CONFIG_CMDLINE="console=ttySA0,9600 root=/dev/ram" -# CONFIG_PFS168_CMDLINE is not set -CONFIG_LEDS=y -# CONFIG_LEDS_TIMER is not set -CONFIG_LEDS_CPU=y -CONFIG_ALIGNMENT_TRAP=y - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Memory Technology Devices (MTD) -# -CONFIG_MTD=y -CONFIG_MTD_DEBUG=y -CONFIG_MTD_DEBUG_VERBOSE=1 -CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_REDBOOT_PARTS is not set -# CONFIG_MTD_BOOTLDR_PARTS is not set -# CONFIG_MTD_AFS_PARTS is not set - -# -# User Modules And Translation Layers -# -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -# CONFIG_NFTL is not set - -# -# RAM/ROM/Flash chip drivers -# -# CONFIG_MTD_CFI is not set -# CONFIG_MTD_CFI_INTELEXT is not set -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_AMDSTD is not set -# CONFIG_MTD_SHARP is not set -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_JEDEC is not set - -# -# Mapping drivers for chip access -# -# CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_SUN_UFLASH is not set -# CONFIG_MTD_NORA is not set -# CONFIG_MTD_PNC2000 is not set -# CONFIG_MTD_RPXLITE is not set -# CONFIG_MTD_TQM8XXL is not set -# CONFIG_MTD_SC520CDP is not set -# CONFIG_MTD_NETSC520 is not set -# CONFIG_MTD_SBC_GXX is not set -# CONFIG_MTD_ELAN_104NC is not set -# CONFIG_MTD_DBOX2 is not set -# CONFIG_MTD_CSTM_MIPS_IXX is not set -# CONFIG_MTD_CFI_FLAGADM is not set -# CONFIG_MTD_SOLUTIONENGINE is not set -# CONFIG_MTD_MIXMEM is not set -# CONFIG_MTD_OCTAGON is not set -# CONFIG_MTD_VMAX is not set -# CONFIG_MTD_OCELOT is not set -# CONFIG_MTD_L440GX is not set -# CONFIG_MTD_ARM_INTEGRATOR is not set -# CONFIG_MTD_CDB89712 is not set -# CONFIG_MTD_SA1100 is not set -# CONFIG_MTD_DC21285 is not set -# CONFIG_MTD_IQ80310 is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_SLRAM is not set -CONFIG_MTD_LART=y -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLKMTD is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC1000 is not set -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOCPROBE is not set - -# -# NAND Flash Device Drivers -# -# CONFIG_MTD_NAND is not set - -# -# Plug and Play configuration -# -# CONFIG_PNP is not set -# CONFIG_ISAPNP is not set -# CONFIG_PNPBIOS is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_XD is not set -# CONFIG_PARIDE is not set -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_BLK_DEV_DAC960 is not set -# CONFIG_BLK_DEV_LOOP is not set -# CONFIG_BLK_DEV_NBD is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=4096 -CONFIG_BLK_DEV_INITRD=y - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set -# CONFIG_BLK_DEV_MD is not set -# CONFIG_MD_LINEAR is not set -# CONFIG_MD_RAID0 is not set -# CONFIG_MD_RAID1 is not set -# CONFIG_MD_RAID5 is not set -# CONFIG_BLK_DEV_LVM is not set - -# -# Networking options -# -CONFIG_PACKET=m -# CONFIG_PACKET_MMAP is not set -# CONFIG_NETLINK is not set -# CONFIG_NETFILTER is not set -# CONFIG_FILTER is not set -CONFIG_UNIX=y -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -# CONFIG_IP_PNP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -CONFIG_INET_ECN=y -CONFIG_SYN_COOKIES=y -# CONFIG_IPV6 is not set -# CONFIG_KHTTPD is not set -# CONFIG_ATM is not set - -# -# -# -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_LLC is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set -CONFIG_DUMMY=m -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set - -# -# Ethernet (10 or 100Mbit) -# -CONFIG_NET_ETHERNET=y -# CONFIG_SUNLANCE is not set -# CONFIG_SUNBMAC is not set -# CONFIG_SUNQE is not set -# CONFIG_SUNLANCE is not set -# CONFIG_SUNGEM is not set -# CONFIG_NET_VENDOR_3COM is not set -# CONFIG_LANCE is not set -# CONFIG_NET_VENDOR_SMC is not set -# CONFIG_NET_VENDOR_RACAL is not set -# CONFIG_NET_ISA is not set -# CONFIG_NET_PCI is not set -# CONFIG_NET_POCKET is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_ACENIC is not set -# CONFIG_DL2K is not set -# CONFIG_MYRI_SBUS is not set -# CONFIG_NS83820 is not set -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -# CONFIG_SK98LIN is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PLIP is not set -CONFIG_PPP=m -# CONFIG_PPP_MULTILINK is not set -# CONFIG_PPP_FILTER is not set -CONFIG_PPP_ASYNC=m -# CONFIG_PPP_SYNC_TTY is not set -CONFIG_PPP_DEFLATE=m -CONFIG_PPP_BSDCOMP=m -# CONFIG_PPPOE is not set -CONFIG_SLIP=m -CONFIG_SLIP_COMPRESSED=y -# CONFIG_SLIP_SMART is not set -# CONFIG_SLIP_MODE_SLIP6 is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set - -# -# Token Ring devices -# -# CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -CONFIG_IRDA=m - -# -# IrDA protocols -# -CONFIG_IRLAN=m -CONFIG_IRNET=m -CONFIG_IRCOMM=m -# CONFIG_IRDA_ULTRA is not set -CONFIG_IRDA_OPTIONS=y - -# -# IrDA options -# -CONFIG_IRDA_CACHE_LAST_LSAP=y -# CONFIG_IRDA_FAST_RR is not set -CONFIG_IRDA_DEBUG=y - -# -# Infrared-port device drivers -# - -# -# SIR device drivers -# -# CONFIG_IRTTY_SIR is not set -# CONFIG_IRPORT_SIR is not set - -# -# Dongle support -# -# CONFIG_DONGLE is not set - -# -# FIR device drivers -# -# CONFIG_USB_IRDA is not set -# CONFIG_NSC_FIR is not set -# CONFIG_WINBOND_FIR is not set -# CONFIG_TOSHIBA_FIR is not set -# CONFIG_SMC_IRCC_FIR is not set -# CONFIG_ALI_FIR is not set -# CONFIG_VLSI_FIR is not set -CONFIG_SA1100_FIR=m - -# -# ATA/IDE/MFM/RLL support -# -CONFIG_IDE=m - -# -# IDE, ATA and ATAPI Block devices -# -CONFIG_BLK_DEV_IDE=m - -# -# Please see Documentation/ide.txt for help/info on IDE drives -# -# CONFIG_BLK_DEV_HD_IDE is not set -# CONFIG_BLK_DEV_HD is not set -CONFIG_BLK_DEV_IDEDISK=m -# CONFIG_IDEDISK_MULTI_MODE is not set -# CONFIG_BLK_DEV_IDECS is not set -CONFIG_BLK_DEV_IDECD=m -# CONFIG_BLK_DEV_IDETAPE is not set -# CONFIG_BLK_DEV_IDEFLOPPY is not set -# CONFIG_BLK_DEV_IDESCSI is not set - -# -# IDE chipset support/bugfixes -# -# CONFIG_BLK_DEV_CMD640 is not set -# CONFIG_BLK_DEV_CMD640_ENHANCED is not set -# CONFIG_BLK_DEV_ISAPNP is not set -# CONFIG_IDE_CHIPSETS is not set -# CONFIG_IDEDMA_AUTO is not set -# CONFIG_BLK_DEV_ATARAID is not set -# CONFIG_BLK_DEV_ATARAID_PDC is not set -# CONFIG_BLK_DEV_ATARAID_HPT is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# I2O device support -# -# CONFIG_I2O is not set -# CONFIG_I2O_BLOCK is not set -# CONFIG_I2O_LAN is not set -# CONFIG_I2O_SCSI is not set -# CONFIG_I2O_PROC is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Input core support -# -# CONFIG_INPUT is not set -# CONFIG_INPUT_KEYBDEV is not set -# CONFIG_INPUT_MOUSEDEV is not set -# CONFIG_INPUT_JOYDEV is not set -# CONFIG_INPUT_EVDEV is not set - -# -# Character devices -# -# CONFIG_VT is not set -# CONFIG_SERIAL is not set -# CONFIG_SERIAL_EXTENDED is not set -# CONFIG_SERIAL_NONSTANDARD is not set - -# -# Serial drivers -# -# CONFIG_SERIAL_ANAKIN is not set -# CONFIG_SERIAL_ANAKIN_CONSOLE is not set -# CONFIG_SERIAL_AMBA is not set -# CONFIG_SERIAL_AMBA_CONSOLE is not set -# CONFIG_SERIAL_CLPS711X is not set -# CONFIG_SERIAL_CLPS711X_CONSOLE is not set -# CONFIG_SERIAL_21285 is not set -# CONFIG_SERIAL_21285_OLD is not set -# CONFIG_SERIAL_21285_CONSOLE is not set -CONFIG_SERIAL_SA1100=y -CONFIG_SERIAL_SA1100_CONSOLE=y -CONFIG_SA1100_DEFAULT_BAUDRATE=9600 -# CONFIG_SERIAL_8250 is not set -# CONFIG_SERIAL_8250_CONSOLE is not set -# CONFIG_SERIAL_8250_EXTENDED is not set -# CONFIG_SERIAL_8250_MANY_PORTS is not set -# CONFIG_SERIAL_8250_SHARE_IRQ is not set -# CONFIG_SERIAL_8250_DETECT_IRQ is not set -# CONFIG_SERIAL_8250_MULTIPORT is not set -# CONFIG_SERIAL_8250_HUB6 is not set -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=256 -CONFIG_UCB1200=m -CONFIG_TOUCHSCREEN_UCB1200=m -CONFIG_AUDIO_UCB1200=m -CONFIG_ADC_UCB1200=m -# CONFIG_TOUCHSCREEN_H3600 is not set -CONFIG_PROFILER=m -# CONFIG_PFS168_SPI is not set -# CONFIG_PFS168_DTMF is not set -# CONFIG_PFS168_MISC is not set - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# L3 serial bus support -# -# CONFIG_L3 is not set -# CONFIG_L3_ALGOBIT is not set -# CONFIG_L3_BIT_SA1100_GPIO is not set - -# -# Other L3 adapters -# -# CONFIG_L3_SA1111 is not set - -# -# L3 driver support -# -# CONFIG_L3_DRV_UDA1341 is not set -# CONFIG_BIT_SA1100_GPIO is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -# CONFIG_MOUSE is not set - -# -# Joysticks -# -# CONFIG_INPUT_GAMEPORT is not set - -# -# Input core support is needed for gameports -# - -# -# Input core support is needed for joysticks -# -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -# CONFIG_INTEL_RNG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -CONFIG_SA1100_RTC=m -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set -# CONFIG_SONYPI is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set -CONFIG_REISERFS_FS=m -# CONFIG_REISERFS_CHECK is not set -# CONFIG_REISERFS_PROC_INFO is not set -# CONFIG_ADFS_FS is not set -# CONFIG_ADFS_FS_RW is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_CMS_FS is not set -CONFIG_EXT3_FS=m -CONFIG_JBD=m -# CONFIG_JBD_DEBUG is not set -# CONFIG_FAT_FS is not set -# CONFIG_MSDOS_FS is not set -# CONFIG_UMSDOS_FS is not set -# CONFIG_VFAT_FS is not set -# CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set -CONFIG_JFFS2_FS=m -CONFIG_JFFS2_FS_DEBUG=1 -CONFIG_CRAMFS=m -CONFIG_TMPFS=y -CONFIG_RAMFS=m -CONFIG_ISO9660_FS=m -CONFIG_JOLIET=y -# CONFIG_MINIX_FS is not set -# CONFIG_FREEVXFS_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS_DEBUG is not set -# CONFIG_NTFS_RW is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -# CONFIG_DEVFS_MOUNT is not set -# CONFIG_DEVFS_DEBUG is not set -CONFIG_DEVPTS_FS=y -# CONFIG_QNX4FS_FS is not set -# CONFIG_QNX4FS_RW is not set -# CONFIG_ROMFS_FS is not set -CONFIG_EXT2_FS=y -# CONFIG_SYSV_FS is not set -CONFIG_UDF_FS=m -# CONFIG_UDF_RW is not set -# CONFIG_UFS_FS is not set -# CONFIG_UFS_FS_WRITE is not set - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -# CONFIG_INTERMEZZO_FS is not set -CONFIG_NFS_FS=m -CONFIG_NFS_V3=y -# CONFIG_ROOT_NFS is not set -CONFIG_NFSD=m -CONFIG_NFSD_V3=y -CONFIG_SUNRPC=m -CONFIG_LOCKD=m -CONFIG_LOCKD_V4=y -# CONFIG_SMB_FS is not set -# CONFIG_NCP_FS is not set -# CONFIG_NCPFS_PACKET_SIGNING is not set -# CONFIG_NCPFS_IOCTL_LOCKING is not set -# CONFIG_NCPFS_STRONG is not set -# CONFIG_NCPFS_NFS_NS is not set -# CONFIG_NCPFS_OS2_NS is not set -# CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_NLS is not set -# CONFIG_NCPFS_EXTRAS is not set - -# -# Partition Types -# -# CONFIG_PARTITION_ADVANCED is not set -CONFIG_MSDOS_PARTITION=y -# CONFIG_SMB_NLS is not set -CONFIG_NLS=y - -# -# Native Language Support -# -CONFIG_NLS_DEFAULT="iso8859-1" -CONFIG_NLS_CODEPAGE_437=m -# CONFIG_NLS_CODEPAGE_737 is not set -# CONFIG_NLS_CODEPAGE_775 is not set -CONFIG_NLS_CODEPAGE_850=m -# CONFIG_NLS_CODEPAGE_852 is not set -# CONFIG_NLS_CODEPAGE_855 is not set -# CONFIG_NLS_CODEPAGE_857 is not set -# CONFIG_NLS_CODEPAGE_860 is not set -# CONFIG_NLS_CODEPAGE_861 is not set -# CONFIG_NLS_CODEPAGE_862 is not set -# CONFIG_NLS_CODEPAGE_863 is not set -# CONFIG_NLS_CODEPAGE_864 is not set -# CONFIG_NLS_CODEPAGE_865 is not set -# CONFIG_NLS_CODEPAGE_866 is not set -# CONFIG_NLS_CODEPAGE_869 is not set -# CONFIG_NLS_CODEPAGE_936 is not set -# CONFIG_NLS_CODEPAGE_950 is not set -# CONFIG_NLS_CODEPAGE_932 is not set -# CONFIG_NLS_CODEPAGE_949 is not set -# CONFIG_NLS_CODEPAGE_874 is not set -# CONFIG_NLS_ISO8859_8 is not set -# CONFIG_NLS_CODEPAGE_1251 is not set -CONFIG_NLS_ISO8859_1=m -# CONFIG_NLS_ISO8859_2 is not set -# CONFIG_NLS_ISO8859_3 is not set -# CONFIG_NLS_ISO8859_4 is not set -# CONFIG_NLS_ISO8859_5 is not set -# CONFIG_NLS_ISO8859_6 is not set -# CONFIG_NLS_ISO8859_7 is not set -# CONFIG_NLS_ISO8859_9 is not set -# CONFIG_NLS_ISO8859_13 is not set -# CONFIG_NLS_ISO8859_14 is not set -CONFIG_NLS_ISO8859_15=m -# CONFIG_NLS_KOI8_R is not set -# CONFIG_NLS_KOI8_U is not set -CONFIG_NLS_UTF8=m - -# -# Sound -# -CONFIG_SOUND=m -# CONFIG_SOUND_BT878 is not set -# CONFIG_SOUND_CMPCI is not set -# CONFIG_SOUND_EMU10K1 is not set -# CONFIG_SOUND_FUSION is not set -# CONFIG_SOUND_CS4281 is not set -# CONFIG_SOUND_ES1370 is not set -# CONFIG_SOUND_ES1371 is not set -# CONFIG_SOUND_ESSSOLO1 is not set -# CONFIG_SOUND_MAESTRO is not set -# CONFIG_SOUND_MAESTRO3 is not set -# CONFIG_SOUND_ICH is not set -# CONFIG_SOUND_RME96XX is not set -# CONFIG_SOUND_SONICVIBES is not set -# CONFIG_SOUND_TRIDENT is not set -# CONFIG_SOUND_MSNDCLAS is not set -# CONFIG_SOUND_MSNDPIN is not set -# CONFIG_SOUND_VIA82CXXX is not set -# CONFIG_MIDI_VIA82CXXX is not set -# CONFIG_SOUND_ASSABET_UDA1341 is not set -# CONFIG_SOUND_H3600_UDA1341 is not set -# CONFIG_SOUND_PANGOLIN_UDA1341 is not set -# CONFIG_SOUND_SA1111_UDA1341 is not set -CONFIG_SOUND_SA1100SSP=m -# CONFIG_SOUND_OSS is not set -# CONFIG_SOUND_WAVEARTIST is not set -# CONFIG_SOUND_TVMIXER is not set - -# -# USB support -# -# CONFIG_USB is not set - -# -# USB Controllers -# -# CONFIG_USB_UHCI is not set -# CONFIG_USB_UHCI_ALT is not set -# CONFIG_USB_OHCI is not set - -# -# USB Device Class drivers -# -# CONFIG_USB_AUDIO is not set -# CONFIG_USB_BLUETOOTH is not set -# CONFIG_USB_STORAGE is not set -# CONFIG_USB_STORAGE_DEBUG is not set -# CONFIG_USB_STORAGE_DATAFAB is not set -# CONFIG_USB_STORAGE_FREECOM is not set -# CONFIG_USB_STORAGE_JUMPSHOT is not set -# CONFIG_USB_STORAGE_DPCM is not set -# CONFIG_USB_STORAGE_SDDR09 is not set -# CONFIG_USB_ACM is not set -# CONFIG_USB_PRINTER is not set - -# -# USB Human Interface Devices (HID) -# - -# -# Input core support is needed for USB HID -# - -# -# USB Imaging devices -# -# CONFIG_USB_DC2XX is not set -# CONFIG_USB_MDC800 is not set -# CONFIG_USB_SCANNER is not set -# CONFIG_USB_MICROTEK is not set -# CONFIG_USB_HPUSBSCSI is not set - -# -# USB Multimedia devices -# - -# -# Video4Linux support is needed for USB Multimedia device support -# -# CONFIG_USB_DABUSB is not set - -# -# USB Network adaptors -# -# CONFIG_USB_PLUSB is not set -# CONFIG_USB_PEGASUS is not set -# CONFIG_USB_KAWETH is not set -# CONFIG_USB_CATC is not set -# CONFIG_USB_CDCETHER is not set -# CONFIG_USB_USBNET is not set - -# -# USB port drivers -# -# CONFIG_USB_USS720 is not set - -# -# USB Serial Converter support -# -# CONFIG_USB_SERIAL is not set -# CONFIG_USB_SERIAL_GENERIC is not set -# CONFIG_USB_SERIAL_BELKIN is not set -# CONFIG_USB_SERIAL_WHITEHEAT is not set -# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set -# CONFIG_USB_SERIAL_EMPEG is not set -# CONFIG_USB_SERIAL_FTDI_SIO is not set -# CONFIG_USB_SERIAL_VISOR is not set -# CONFIG_USB_SERIAL_EDGEPORT is not set -# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set -# CONFIG_USB_SERIAL_KEYSPAN is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set -# CONFIG_USB_SERIAL_MCT_U232 is not set -# CONFIG_USB_SERIAL_PL2303 is not set -# CONFIG_USB_SERIAL_CYBERJACK is not set -# CONFIG_USB_SERIAL_OMNINET is not set - -# -# Miscellaneous USB drivers -# -# CONFIG_USB_RIO500 is not set -# CONFIG_USB_ID75 is not set - -# -# Bluetooth support -# -# CONFIG_BT is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_ERRORS=y -CONFIG_DEBUG_USER=y -# CONFIG_DEBUG_INFO is not set -CONFIG_MAGIC_SYSRQ=y -# CONFIG_NO_PGT_CACHE is not set -CONFIG_DEBUG_LL=y -# CONFIG_DEBUG_DC21285_PORT is not set -# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -prauN linux-2.6.0-test5/arch/arm/def-configs/lubbock wli-2.6.0-test5-bk12-25/arch/arm/def-configs/lubbock --- linux-2.6.0-test5/arch/arm/def-configs/lubbock 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/lubbock 1969-12-31 16:00:00.000000000 -0800 @@ -1,882 +0,0 @@ -# -# Automatically generated make config: don't edit -# -CONFIG_ARM=y -# CONFIG_EISA is not set -# CONFIG_SBUS is not set -# CONFIG_MCA is not set -CONFIG_UID16=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y -# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set -# CONFIG_GENERIC_BUST_SPINLOCK is not set -# CONFIG_GENERIC_ISA_DMA is not set - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y - -# -# General setup -# -CONFIG_NET=y -CONFIG_SYSVIPC=y -# CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_SYSCTL=y - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODVERSIONS is not set -# CONFIG_KMOD is not set - -# -# System Type -# -# CONFIG_ARCH_ADIFCC is not set -# CONFIG_ARCH_ANAKIN is not set -# CONFIG_ARCH_ARCA5K is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -CONFIG_ARCH_PXA=y -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_CAMELOT is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_IOP310 is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_RPC is not set -# CONFIG_ARCH_SA1100 is not set -# CONFIG_ARCH_SHARK is not set - -# -# Archimedes/A5000 Implementations -# - -# -# Archimedes/A5000 Implementations (select only ONE) -# -# CONFIG_ARCH_ARC is not set -# CONFIG_ARCH_A5K is not set - -# -# Footbridge Implementations -# -# CONFIG_ARCH_CATS is not set -# CONFIG_ARCH_PERSONAL_SERVER is not set -# CONFIG_ARCH_EBSA285_ADDIN is not set -# CONFIG_ARCH_EBSA285_HOST is not set -# CONFIG_ARCH_NETWINDER is not set - -# -# SA11x0 Implementations -# -# CONFIG_SA1100_ASSABET is not set -# CONFIG_ASSABET_NEPONSET is not set -# CONFIG_SA1100_ADSBITSY is not set -# CONFIG_SA1100_BRUTUS is not set -# CONFIG_SA1100_CERF is not set -# CONFIG_SA1100_H3100 is not set -# CONFIG_SA1100_H3600 is not set -# CONFIG_SA1100_H3800 is not set -# CONFIG_SA1100_H3XXX is not set -# CONFIG_SA1100_EXTENEX1 is not set -# CONFIG_SA1100_FLEXANET is not set -# CONFIG_SA1100_FREEBIRD is not set -# CONFIG_SA1100_GRAPHICSCLIENT is not set -# CONFIG_SA1100_GRAPHICSMASTER is not set -# CONFIG_SA1100_BADGE4 is not set -# CONFIG_SA1100_JORNADA720 is not set -# CONFIG_SA1100_HUW_WEBPANEL is not set -# CONFIG_SA1100_ITSY is not set -# CONFIG_SA1100_LART is not set -# CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_OMNIMETER is not set -# CONFIG_SA1100_PANGOLIN is not set -# CONFIG_SA1100_PLEB is not set -# CONFIG_SA1100_PT_SYSTEM3 is not set -# CONFIG_SA1100_SHANNON is not set -# CONFIG_SA1100_SHERMAN is not set -# CONFIG_SA1100_SIMPAD is not set -# CONFIG_SA1100_PFS168 is not set -# CONFIG_SA1100_VICTOR is not set -# CONFIG_SA1100_XP860 is not set -# CONFIG_SA1100_YOPY is not set -# CONFIG_SA1100_STORK is not set -# CONFIG_SA1100_USB is not set -# CONFIG_SA1100_USB_NETLINK is not set -# CONFIG_SA1100_USB_CHAR is not set -# CONFIG_H3600_SLEEVE is not set - -# -# Intel PXA250/210 Implementations -# -CONFIG_ARCH_LUBBOCK=y -# CONFIG_ARCH_PXA_IDP is not set -CONFIG_SA1111=y - -# -# CLPS711X/EP721X Implementations -# -# CONFIG_ARCH_AUTCPU12 is not set -# CONFIG_ARCH_CDB89712 is not set -# CONFIG_ARCH_CLEP7312 is not set -# CONFIG_ARCH_EDB7211 is not set -# CONFIG_ARCH_P720T is not set -# CONFIG_ARCH_FORTUNET is not set -# CONFIG_ARCH_EP7211 is not set -# CONFIG_ARCH_EP7212 is not set - -# -# IOP310 Implementation Options -# -# CONFIG_ARCH_IQ80310 is not set - -# -# IOP310 Chipset Features -# -# CONFIG_IOP310_AAU is not set -# CONFIG_IOP310_DMA is not set -# CONFIG_IOP310_MU is not set -# CONFIG_IOP310_PMON is not set -# CONFIG_ARCH_ACORN is not set -# CONFIG_FOOTBRIDGE is not set -# CONFIG_FOOTBRIDGE_HOST is not set -# CONFIG_FOOTBRIDGE_ADDIN is not set -CONFIG_CPU_32=y -# CONFIG_CPU_26 is not set - -# -# Processor Type -# -# CONFIG_CPU_32v3 is not set -# CONFIG_CPU_32v4 is not set -CONFIG_CPU_32v5=y -# CONFIG_CPU_ARM610 is not set -# CONFIG_CPU_ARM710 is not set -# CONFIG_CPU_ARM720T is not set -# CONFIG_CPU_ARM920T is not set -# CONFIG_CPU_ARM922T is not set -# CONFIG_CPU_ARM926T is not set -# CONFIG_CPU_ARM1020 is not set -# CONFIG_CPU_SA110 is not set -# CONFIG_CPU_SA1100 is not set -CONFIG_CPU_XSCALE=y -CONFIG_XSCALE_CACHE_ERRATA=y -CONFIG_XSCALE_PMU=y - -# -# Processor Features -# -# CONFIG_ARM_THUMB is not set - -# -# General setup -# -# CONFIG_DISCONTIGMEM is not set -# CONFIG_PCI is not set -# CONFIG_ISA is not set -# CONFIG_ISA_DMA is not set -# CONFIG_FIQ is not set -# CONFIG_ZBOOT_ROM is not set -CONFIG_ZBOOT_ROM_TEXT=0 -CONFIG_ZBOOT_ROM_BSS=0 -CONFIG_HOTPLUG=y - -# -# PCMCIA/CardBus support -# -CONFIG_PCMCIA=y -CONFIG_PCMCIA_PROBE=y -# CONFIG_I82092 is not set -# CONFIG_I82365 is not set -# CONFIG_TCIC is not set -# CONFIG_PCMCIA_CLPS6700 is not set -# CONFIG_PCMCIA_SA1100 is not set -CONFIG_PCMCIA_PXA=y - -# -# At least one math emulation must be selected -# -CONFIG_FPE_NWFPE=y -# CONFIG_FPE_FASTFPE is not set -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -# CONFIG_BINFMT_AOUT is not set -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -# CONFIG_PM is not set -# CONFIG_PREEMPT is not set -# CONFIG_APM is not set -# CONFIG_ARTHUR is not set -CONFIG_CMDLINE="root=/dev/nfs ip=bootp console=ttyS0,115200 mem=64M" -CONFIG_LEDS=y -CONFIG_LEDS_TIMER=y -CONFIG_LEDS_CPU=y -CONFIG_ALIGNMENT_TRAP=y - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Memory Technology Devices (MTD) -# -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set -CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_CONCAT is not set -CONFIG_MTD_REDBOOT_PARTS=y -# CONFIG_MTD_BOOTLDR_PARTS is not set -# CONFIG_MTD_AFS_PARTS is not set - -# -# User Modules And Translation Layers -# -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -# CONFIG_NFTL is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=y -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_GEN_PROBE=y -CONFIG_MTD_CFI_ADV_OPTIONS=y -CONFIG_MTD_CFI_NOSWAP=y -# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set -# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set -CONFIG_MTD_CFI_GEOMETRY=y -# CONFIG_MTD_CFI_B1 is not set -# CONFIG_MTD_CFI_B2 is not set -CONFIG_MTD_CFI_B4=y -# CONFIG_MTD_CFI_I1 is not set -CONFIG_MTD_CFI_I2=y -# CONFIG_MTD_CFI_I4 is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_ABSENT is not set -# CONFIG_MTD_OBSOLETE_CHIPS is not set -# CONFIG_MTD_AMDSTD is not set -# CONFIG_MTD_SHARP is not set -# CONFIG_MTD_JEDEC is not set - -# -# Mapping drivers for chip access -# -# CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_NORA is not set -# CONFIG_MTD_ARM_INTEGRATOR is not set -# CONFIG_MTD_CDB89712 is not set -# CONFIG_MTD_SA1100 is not set -# CONFIG_MTD_2PARTS_IPAQ is not set -# CONFIG_MTD_DC21285 is not set -# CONFIG_MTD_IQ80310 is not set -CONFIG_MTD_LUBBOCK=y -# CONFIG_MTD_EPXA10DB is not set -# CONFIG_MTD_FORTUNET is not set -# CONFIG_MTD_PCI is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLKMTD is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC1000 is not set -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOCPROBE is not set - -# -# NAND Flash Device Drivers -# -# CONFIG_MTD_NAND is not set - -# -# Plug and Play configuration -# -# CONFIG_PNP is not set -# CONFIG_ISAPNP is not set -# CONFIG_PNPBIOS is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_XD is not set -# CONFIG_PARIDE is not set -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_CISS_SCSI_TAPE is not set -# CONFIG_BLK_DEV_DAC960 is not set -# CONFIG_BLK_DEV_UMEM is not set -# CONFIG_BLK_DEV_LOOP is not set -# CONFIG_BLK_DEV_NBD is not set -# CONFIG_BLK_DEV_RAM is not set -# CONFIG_BLK_DEV_INITRD is not set - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set -# CONFIG_BLK_DEV_MD is not set -# CONFIG_MD_LINEAR is not set -# CONFIG_MD_RAID0 is not set -# CONFIG_MD_RAID1 is not set -# CONFIG_MD_RAID5 is not set -# CONFIG_MD_MULTIPATH is not set -# CONFIG_BLK_DEV_LVM is not set - -# -# Networking options -# -# CONFIG_PACKET is not set -# CONFIG_NETLINK_DEV is not set -# CONFIG_NETFILTER is not set -# CONFIG_FILTER is not set -CONFIG_UNIX=y -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -CONFIG_IP_PNP=y -# CONFIG_IP_PNP_DHCP is not set -CONFIG_IP_PNP_BOOTP=y -# CONFIG_IP_PNP_RARP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_ARPD is not set -# CONFIG_INET_ECN is not set -# CONFIG_SYN_COOKIES is not set -# CONFIG_IPV6 is not set -# CONFIG_KHTTPD is not set -# CONFIG_ATM is not set -# CONFIG_VLAN_8021Q is not set - -# -# -# -# CONFIG_IPX is not set -# CONFIG_ATALK is not set - -# -# Appletalk devices -# -# CONFIG_DEV_APPLETALK is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_LLC is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set -# CONFIG_ETHERTAP is not set - -# -# Ethernet (10 or 100Mbit) -# -CONFIG_NET_ETHERNET=y -# CONFIG_ARM_AM79C961A is not set -# CONFIG_SUNLANCE is not set -# CONFIG_SUNBMAC is not set -# CONFIG_SUNQE is not set -# CONFIG_SUNGEM is not set -# CONFIG_NET_VENDOR_3COM is not set -# CONFIG_LANCE is not set -CONFIG_NET_VENDOR_SMC=y -# CONFIG_WD80x3 is not set -# CONFIG_ULTRAMCA is not set -# CONFIG_ULTRA is not set -# CONFIG_ULTRA32 is not set -CONFIG_SMC9194=y -# CONFIG_NET_VENDOR_RACAL is not set -# CONFIG_NET_ISA is not set -# CONFIG_NET_PCI is not set -# CONFIG_NET_POCKET is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_ACENIC is not set -# CONFIG_DL2K is not set -# CONFIG_E1000 is not set -# CONFIG_MYRI_SBUS is not set -# CONFIG_NS83820 is not set -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -# CONFIG_SK98LIN is not set -# CONFIG_TIGON3 is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PLIP is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set - -# -# Token Ring devices -# -# CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# Tulip family network device support -# -# CONFIG_NET_TULIP is not set - -# -# PCMCIA network device support -# -CONFIG_NET_PCMCIA=y -# CONFIG_PCMCIA_3C589 is not set -# CONFIG_PCMCIA_3C574 is not set -# CONFIG_PCMCIA_FMVJ18X is not set -CONFIG_PCMCIA_PCNET=y -# CONFIG_PCMCIA_NMCLAN is not set -# CONFIG_PCMCIA_SMC91C92 is not set -# CONFIG_PCMCIA_XIRC2PS is not set -# CONFIG_PCMCIA_AXNET is not set -# CONFIG_ARCNET_COM20020_CS is not set -# CONFIG_PCMCIA_IBMTR is not set -# CONFIG_NET_PCMCIA_RADIO is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# ATA/IDE/MFM/RLL support -# -# CONFIG_IDE is not set -# CONFIG_BLK_DEV_HD is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# I2O device support -# -# CONFIG_I2O is not set -# CONFIG_I2O_BLOCK is not set -# CONFIG_I2O_LAN is not set -# CONFIG_I2O_SCSI is not set -# CONFIG_I2O_PROC is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN_BOOL is not set - -# -# Input device support -# -CONFIG_INPUT=y -# CONFIG_INPUT_KEYBDEV is not set -# CONFIG_INPUT_MOUSEDEV is not set -# CONFIG_INPUT_JOYDEV is not set -CONFIG_INPUT_EVDEV=y -# CONFIG_GAMEPORT is not set -CONFIG_SOUND_GAMEPORT=y -# CONFIG_GAMEPORT_NS558 is not set -# CONFIG_GAMEPORT_L4 is not set -# CONFIG_INPUT_EMU10K1 is not set -# CONFIG_GAMEPORT_PCIGAME is not set -# CONFIG_GAMEPORT_FM801 is not set -# CONFIG_GAMEPORT_CS461x is not set -# CONFIG_SERIO is not set -# CONFIG_SERIO_SERPORT is not set -# CONFIG_INPUT_JOYSTICK is not set -# CONFIG_JOYSTICK_ANALOG is not set -# CONFIG_JOYSTICK_A3D is not set -# CONFIG_JOYSTICK_ADI is not set -# CONFIG_JOYSTICK_COBRA is not set -# CONFIG_JOYSTICK_GF2K is not set -# CONFIG_JOYSTICK_GRIP is not set -# CONFIG_JOYSTICK_INTERACT is not set -# CONFIG_JOYSTICK_SIDEWINDER is not set -# CONFIG_JOYSTICK_TMDC is not set -# CONFIG_JOYSTICK_IFORCE_USB is not set -# CONFIG_JOYSTICK_IFORCE_232 is not set -# CONFIG_JOYSTICK_WARRIOR is not set -# CONFIG_JOYSTICK_MAGELLAN is not set -# CONFIG_JOYSTICK_SPACEORB is not set -# CONFIG_JOYSTICK_SPACEBALL is not set -# CONFIG_JOYSTICK_STINGER is not set -# CONFIG_JOYSTICK_DB9 is not set -# CONFIG_JOYSTICK_GAMECON is not set -# CONFIG_JOYSTICK_TURBOGRAFX is not set - -# -# Character devices -# -# CONFIG_VT is not set -# CONFIG_SERIAL_NONSTANDARD is not set - -# -# Serial drivers -# -CONFIG_SERIAL_8250=y -CONFIG_SERIAL_8250_CONSOLE=y -# CONFIG_SERIAL_8250_CS is not set -# CONFIG_SERIAL_8250_EXTENDED is not set -# CONFIG_SERIAL_8250_MANY_PORTS is not set -# CONFIG_SERIAL_8250_SHARE_IRQ is not set -# CONFIG_SERIAL_8250_DETECT_IRQ is not set -# CONFIG_SERIAL_8250_MULTIPORT is not set -# CONFIG_SERIAL_8250_RSA is not set - -# -# Non-8250 serial port support -# -# CONFIG_ATOMWIDE_SERIAL is not set -# CONFIG_DUALSP_SERIAL is not set -# CONFIG_SERIAL_ANAKIN is not set -# CONFIG_SERIAL_ANAKIN_CONSOLE is not set -# CONFIG_SERIAL_AMBA is not set -# CONFIG_SERIAL_AMBA_CONSOLE is not set -# CONFIG_SERIAL_CLPS711X is not set -# CONFIG_SERIAL_CLPS711X_CONSOLE is not set -# CONFIG_SERIAL_CLPS711X_OLD_NAME is not set -# CONFIG_SERIAL_21285 is not set -# CONFIG_SERIAL_21285_OLD is not set -# CONFIG_SERIAL_21285_CONSOLE is not set -# CONFIG_SERIAL_UART00 is not set -# CONFIG_SERIAL_UART00_CONSOLE is not set -# CONFIG_SERIAL_SA1100 is not set -# CONFIG_SERIAL_SA1100_CONSOLE is not set -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=256 - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# L3 serial bus support -# -# CONFIG_L3 is not set -# CONFIG_L3_ALGOBIT is not set -# CONFIG_L3_BIT_SA1100_GPIO is not set - -# -# Other L3 adapters -# -# CONFIG_L3_SA1111 is not set -# CONFIG_BIT_SA1100_GPIO is not set - -# -# Mice -# -CONFIG_BUSMOUSE=y -# CONFIG_ATIXL_BUSMOUSE is not set -# CONFIG_LOGIBUSMOUSE is not set -# CONFIG_MS_BUSMOUSE is not set -CONFIG_MOUSE=y -CONFIG_PSMOUSE=y -# CONFIG_82C710_MOUSE is not set -# CONFIG_PC110_PAD is not set -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -# CONFIG_INTEL_RNG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set - -# -# PCMCIA character devices -# -# CONFIG_SYNCLINK_CS is not set - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -# CONFIG_QFMT_V1 is not set -# CONFIG_QFMT_V2 is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set -# CONFIG_REISERFS_FS is not set -# CONFIG_REISERFS_CHECK is not set -# CONFIG_REISERFS_PROC_INFO is not set -# CONFIG_ADFS_FS is not set -# CONFIG_ADFS_FS_RW is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_EXT3_FS is not set -# CONFIG_JBD is not set -# CONFIG_JBD_DEBUG is not set -CONFIG_FAT_FS=y -CONFIG_MSDOS_FS=y -# CONFIG_UMSDOS_FS is not set -# CONFIG_VFAT_FS is not set -# CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set -CONFIG_JFFS2_FS=y -CONFIG_JFFS2_FS_DEBUG=0 -# CONFIG_JFFS2_FS_NAND is not set -# CONFIG_CRAMFS is not set -# CONFIG_TMPFS is not set -CONFIG_RAMFS=y -# CONFIG_ISO9660_FS is not set -# CONFIG_JOLIET is not set -# CONFIG_ZISOFS is not set -# CONFIG_JFS_FS is not set -# CONFIG_JFS_DEBUG is not set -# CONFIG_JFS_STATISTICS is not set -# CONFIG_MINIX_FS is not set -# CONFIG_VXFS_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS_DEBUG is not set -# CONFIG_NTFS_RW is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -# CONFIG_DEVFS_MOUNT is not set -# CONFIG_DEVFS_DEBUG is not set -CONFIG_DEVPTS_FS=y -# CONFIG_QNX4FS_FS is not set -# CONFIG_QNX4FS_RW is not set -# CONFIG_ROMFS_FS is not set -CONFIG_EXT2_FS=y -# CONFIG_SYSV_FS is not set -# CONFIG_UDF_FS is not set -# CONFIG_UDF_RW is not set -# CONFIG_UFS_FS is not set -# CONFIG_UFS_FS_WRITE is not set - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -# CONFIG_INTERMEZZO_FS is not set -CONFIG_NFS_FS=y -# CONFIG_NFS_V3 is not set -CONFIG_ROOT_NFS=y -# CONFIG_NFSD is not set -# CONFIG_NFSD_V3 is not set -# CONFIG_NFSD_TCP is not set -CONFIG_SUNRPC=y -CONFIG_LOCKD=y -# CONFIG_EXPORTFS is not set -# CONFIG_SMB_FS is not set -# CONFIG_NCP_FS is not set -# CONFIG_NCPFS_PACKET_SIGNING is not set -# CONFIG_NCPFS_IOCTL_LOCKING is not set -# CONFIG_NCPFS_STRONG is not set -# CONFIG_NCPFS_NFS_NS is not set -# CONFIG_NCPFS_OS2_NS is not set -# CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_NLS is not set -# CONFIG_NCPFS_EXTRAS is not set -# CONFIG_ZISOFS_FS is not set - -# -# Partition Types -# -# CONFIG_PARTITION_ADVANCED is not set -# CONFIG_SMB_NLS is not set -CONFIG_NLS=y - -# -# Native Language Support -# -CONFIG_NLS_DEFAULT="iso8859-1" -# CONFIG_NLS_CODEPAGE_437 is not set -# CONFIG_NLS_CODEPAGE_737 is not set -# CONFIG_NLS_CODEPAGE_775 is not set -# CONFIG_NLS_CODEPAGE_850 is not set -# CONFIG_NLS_CODEPAGE_852 is not set -# CONFIG_NLS_CODEPAGE_855 is not set -# CONFIG_NLS_CODEPAGE_857 is not set -# CONFIG_NLS_CODEPAGE_860 is not set -# CONFIG_NLS_CODEPAGE_861 is not set -# CONFIG_NLS_CODEPAGE_862 is not set -# CONFIG_NLS_CODEPAGE_863 is not set -# CONFIG_NLS_CODEPAGE_864 is not set -# CONFIG_NLS_CODEPAGE_865 is not set -# CONFIG_NLS_CODEPAGE_866 is not set -# CONFIG_NLS_CODEPAGE_869 is not set -# CONFIG_NLS_CODEPAGE_936 is not set -# CONFIG_NLS_CODEPAGE_950 is not set -# CONFIG_NLS_CODEPAGE_932 is not set -# CONFIG_NLS_CODEPAGE_949 is not set -# CONFIG_NLS_CODEPAGE_874 is not set -# CONFIG_NLS_ISO8859_8 is not set -# CONFIG_NLS_CODEPAGE_1250 is not set -# CONFIG_NLS_CODEPAGE_1251 is not set -CONFIG_NLS_ISO8859_1=y -# CONFIG_NLS_ISO8859_2 is not set -# CONFIG_NLS_ISO8859_3 is not set -# CONFIG_NLS_ISO8859_4 is not set -# CONFIG_NLS_ISO8859_5 is not set -# CONFIG_NLS_ISO8859_6 is not set -# CONFIG_NLS_ISO8859_7 is not set -# CONFIG_NLS_ISO8859_9 is not set -# CONFIG_NLS_ISO8859_13 is not set -# CONFIG_NLS_ISO8859_14 is not set -# CONFIG_NLS_ISO8859_15 is not set -# CONFIG_NLS_KOI8_R is not set -# CONFIG_NLS_KOI8_U is not set -# CONFIG_NLS_UTF8 is not set - -# -# Sound -# -CONFIG_SOUND=y - -# -# Open Sound System -# -CONFIG_SOUND_PRIME=y -# CONFIG_SOUND_BT878 is not set -# CONFIG_SOUND_CMPCI is not set -# CONFIG_SOUND_EMU10K1 is not set -# CONFIG_MIDI_EMU10K1 is not set -# CONFIG_SOUND_FUSION is not set -# CONFIG_SOUND_CS4281 is not set -# CONFIG_SOUND_ES1370 is not set -# CONFIG_SOUND_ES1371 is not set -# CONFIG_SOUND_ESSSOLO1 is not set -# CONFIG_SOUND_MAESTRO is not set -# CONFIG_SOUND_MAESTRO3 is not set -# CONFIG_SOUND_ICH is not set -# CONFIG_SOUND_RME96XX is not set -# CONFIG_SOUND_SONICVIBES is not set -# CONFIG_SOUND_TRIDENT is not set -# CONFIG_SOUND_MSNDCLAS is not set -# CONFIG_SOUND_MSNDPIN is not set -# CONFIG_SOUND_VIA82CXXX is not set -# CONFIG_MIDI_VIA82CXXX is not set -# CONFIG_SOUND_OSS is not set -# CONFIG_SOUND_WAVEARTIST is not set -# CONFIG_SOUND_PXA_AC97 is not set -# CONFIG_SOUND_TVMIXER is not set - -# -# Advanced Linux Sound Architecture -# -# CONFIG_SND is not set - -# -# Multimedia Capabilities Port drivers -# -# CONFIG_MCP is not set -# CONFIG_MCP_SA1100 is not set -# CONFIG_MCP_UCB1200 is not set -# CONFIG_MCP_UCB1200_AUDIO is not set -# CONFIG_MCP_UCB1200_TS is not set -# CONFIG_MCP_UCB1400_TS is not set - -# -# Console Switches -# -# CONFIG_SWITCHES is not set - -# -# USB support -# -# CONFIG_USB is not set - -# -# Bluetooth support -# -# CONFIG_BT is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_USER=y -CONFIG_DEBUG_INFO=y -CONFIG_DEBUG_KERNEL=y -# CONFIG_DEBUG_SLAB is not set -CONFIG_MAGIC_SYSRQ=y -# CONFIG_DEBUG_SPINLOCK is not set -# CONFIG_DEBUG_WAITQ is not set -CONFIG_DEBUG_BUGVERBOSE=y -CONFIG_DEBUG_ERRORS=y -CONFIG_DEBUG_LL=y -# CONFIG_DEBUG_DC21285_PORT is not set -# CONFIG_DEBUG_CLPS711X_UART2 is not set - -# -# Library routines -# -CONFIG_CRC32=y -CONFIG_ZLIB_INFLATE=y -CONFIG_ZLIB_DEFLATE=y diff -prauN linux-2.6.0-test5/arch/arm/def-configs/lusl7200 wli-2.6.0-test5-bk12-25/arch/arm/def-configs/lusl7200 --- linux-2.6.0-test5/arch/arm/def-configs/lusl7200 2003-09-08 12:49:54.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/lusl7200 1969-12-31 16:00:00.000000000 -0800 @@ -1,488 +0,0 @@ -# -# Automatically generated make config: don't edit -# -CONFIG_ARM=y -# CONFIG_EISA is not set -# CONFIG_SBUS is not set -# CONFIG_MCA is not set -CONFIG_UID16=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y -# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set -# CONFIG_GENERIC_BUST_SPINLOCK is not set -# CONFIG_GENERIC_ISA_DMA is not set - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y - -# -# General setup -# -# CONFIG_NET is not set -CONFIG_SYSVIPC=y -CONFIG_BSD_PROCESS_ACCT=y -CONFIG_SYSCTL=y - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODVERSIONS is not set -CONFIG_KMOD=y - -# -# System Type -# -# CONFIG_ARCH_ADIFCC is not set -# CONFIG_ARCH_ANAKIN is not set -# CONFIG_ARCH_ARCA5K is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_CAMELOT is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_IOP310 is not set -CONFIG_ARCH_L7200=y -# CONFIG_ARCH_RPC is not set -# CONFIG_ARCH_SA1100 is not set -# CONFIG_ARCH_SHARK is not set - -# -# Archimedes/A5000 Implementations -# - -# -# Archimedes/A5000 Implementations (select only ONE) -# -# CONFIG_ARCH_ARC is not set -# CONFIG_ARCH_A5K is not set - -# -# Footbridge Implementations -# -# CONFIG_ARCH_CATS is not set -# CONFIG_ARCH_PERSONAL_SERVER is not set -# CONFIG_ARCH_EBSA285_ADDIN is not set -# CONFIG_ARCH_EBSA285_HOST is not set -# CONFIG_ARCH_NETWINDER is not set - -# -# SA11x0 Implementations -# -# CONFIG_SA1100_ASSABET is not set -# CONFIG_ASSABET_NEPONSET is not set -# CONFIG_SA1100_ADSBITSY is not set -# CONFIG_SA1100_BRUTUS is not set -# CONFIG_SA1100_CERF is not set -# CONFIG_SA1100_H3100 is not set -# CONFIG_SA1100_H3600 is not set -# CONFIG_SA1100_H3800 is not set -# CONFIG_SA1100_H3XXX is not set -# CONFIG_SA1100_EXTENEX1 is not set -# CONFIG_SA1100_FLEXANET is not set -# CONFIG_SA1100_FREEBIRD is not set -# CONFIG_SA1100_GRAPHICSCLIENT is not set -# CONFIG_SA1100_GRAPHICSMASTER is not set -# CONFIG_SA1100_BADGE4 is not set -# CONFIG_SA1100_JORNADA720 is not set -# CONFIG_SA1100_HUW_WEBPANEL is not set -# CONFIG_SA1100_ITSY is not set -# CONFIG_SA1100_LART is not set -# CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_OMNIMETER is not set -# CONFIG_SA1100_PANGOLIN is not set -# CONFIG_SA1100_PLEB is not set -# CONFIG_SA1100_PT_SYSTEM3 is not set -# CONFIG_SA1100_SHANNON is not set -# CONFIG_SA1100_SHERMAN is not set -# CONFIG_SA1100_SIMPAD is not set -# CONFIG_SA1100_PFS168 is not set -# CONFIG_SA1100_VICTOR is not set -# CONFIG_SA1100_XP860 is not set -# CONFIG_SA1100_YOPY is not set -# CONFIG_SA1100_STORK is not set -# CONFIG_SA1100_USB is not set -# CONFIG_SA1100_USB_NETLINK is not set -# CONFIG_SA1100_USB_CHAR is not set -# CONFIG_H3600_SLEEVE is not set - -# -# CLPS711X/EP721X Implementations -# -# CONFIG_ARCH_AUTCPU12 is not set -# CONFIG_ARCH_CDB89712 is not set -# CONFIG_ARCH_CLEP7312 is not set -# CONFIG_ARCH_EDB7211 is not set -# CONFIG_ARCH_P720T is not set -# CONFIG_ARCH_FORTUNET is not set -# CONFIG_ARCH_EP7211 is not set -# CONFIG_ARCH_EP7212 is not set -# CONFIG_ARCH_ACORN is not set -# CONFIG_FOOTBRIDGE is not set -# CONFIG_FOOTBRIDGE_HOST is not set -# CONFIG_FOOTBRIDGE_ADDIN is not set -CONFIG_CPU_32=y -# CONFIG_CPU_26 is not set - -# -# Processor Type -# -# CONFIG_CPU_32v3 is not set -CONFIG_CPU_32v4=y -# CONFIG_CPU_32v5 is not set -# CONFIG_CPU_ARM610 is not set -# CONFIG_CPU_ARM710 is not set -CONFIG_CPU_ARM720T=y -# CONFIG_CPU_ARM920T is not set -# CONFIG_CPU_ARM922T is not set -# CONFIG_CPU_ARM926T is not set -# CONFIG_CPU_ARM1020 is not set -# CONFIG_CPU_SA110 is not set -# CONFIG_CPU_SA1100 is not set -# CONFIG_CPU_XSCALE is not set -# CONFIG_XSCALE_PMU is not set - -# -# Processor Features -# -# CONFIG_ARM_THUMB is not set - -# -# General setup -# -# CONFIG_DISCONTIGMEM is not set -# CONFIG_PCI is not set -# CONFIG_ISA is not set -# CONFIG_ISA_DMA is not set -CONFIG_FIQ=y -CONFIG_ZBOOT_ROM=y -CONFIG_ZBOOT_ROM_TEXT=00010000 -CONFIG_ZBOOT_ROM_BSS=f03e0000 -# CONFIG_HOTPLUG is not set -# CONFIG_PCMCIA is not set - -# -# At least one math emulation must be selected -# -# CONFIG_FPE_NWFPE is not set -# CONFIG_FPE_FASTFPE is not set -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -CONFIG_BINFMT_AOUT=y -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -# CONFIG_PM is not set -# CONFIG_PREEMPT is not set -# CONFIG_APM is not set -# CONFIG_ARTHUR is not set -CONFIG_CMDLINE="console=tty0 console=ttyLU1,115200 root=/dev/ram initrd=0xf1000000,0x005dac7b mem=32M" -CONFIG_ALIGNMENT_TRAP=y - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Memory Technology Devices (MTD) -# -# CONFIG_MTD is not set - -# -# Plug and Play configuration -# -# CONFIG_PNP is not set -# CONFIG_ISAPNP is not set -# CONFIG_PNPBIOS is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_XD is not set -# CONFIG_PARIDE is not set -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_CISS_SCSI_TAPE is not set -# CONFIG_BLK_DEV_DAC960 is not set -# CONFIG_BLK_DEV_UMEM is not set -# CONFIG_BLK_DEV_LOOP is not set -# CONFIG_BLK_DEV_NBD is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=4096 -CONFIG_BLK_DEV_INITRD=y - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set -# CONFIG_BLK_DEV_MD is not set -# CONFIG_MD_LINEAR is not set -# CONFIG_MD_RAID0 is not set -# CONFIG_MD_RAID1 is not set -# CONFIG_MD_RAID5 is not set -# CONFIG_MD_MULTIPATH is not set -# CONFIG_BLK_DEV_LVM is not set - -# -# ATA/IDE/MFM/RLL support -# -# CONFIG_IDE is not set -# CONFIG_BLK_DEV_HD is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# I2O device support -# -# CONFIG_I2O is not set -# CONFIG_I2O_BLOCK is not set -# CONFIG_I2O_SCSI is not set -# CONFIG_I2O_PROC is not set - -# -# ISDN subsystem -# - -# -# Input device support -# -# CONFIG_INPUT is not set -# CONFIG_INPUT_KEYBDEV is not set -# CONFIG_INPUT_MOUSEDEV is not set -# CONFIG_INPUT_JOYDEV is not set -# CONFIG_INPUT_EVDEV is not set -# CONFIG_GAMEPORT is not set -CONFIG_SOUND_GAMEPORT=y -# CONFIG_GAMEPORT_NS558 is not set -# CONFIG_GAMEPORT_L4 is not set -# CONFIG_INPUT_EMU10K1 is not set -# CONFIG_GAMEPORT_PCIGAME is not set -# CONFIG_GAMEPORT_FM801 is not set -# CONFIG_GAMEPORT_CS461x is not set -# CONFIG_SERIO is not set -# CONFIG_SERIO_SERPORT is not set - -# -# Character devices -# -# CONFIG_VT is not set -# CONFIG_SERIAL_EXTENDED is not set -CONFIG_SERIAL_NONSTANDARD=y -# CONFIG_COMPUTONE is not set -# CONFIG_ROCKETPORT is not set -# CONFIG_CYCLADES is not set -# CONFIG_DIGIEPCA is not set -# CONFIG_DIGI is not set -# CONFIG_ESPSERIAL is not set -# CONFIG_MOXA_INTELLIO is not set -# CONFIG_MOXA_SMARTIO is not set -# CONFIG_ISI is not set -# CONFIG_SYNCLINK is not set -# CONFIG_SYNCLINKMP is not set -# CONFIG_N_HDLC is not set -# CONFIG_RISCOM8 is not set -# CONFIG_SPECIALIX is not set -# CONFIG_SX is not set -# CONFIG_RIO is not set -# CONFIG_STALDRV is not set - -# -# Serial drivers -# -# CONFIG_SERIAL_8250 is not set -# CONFIG_SERIAL_8250_CONSOLE is not set -# CONFIG_SERIAL_8250_EXTENDED is not set -# CONFIG_SERIAL_8250_MANY_PORTS is not set -# CONFIG_SERIAL_8250_SHARE_IRQ is not set -# CONFIG_SERIAL_8250_DETECT_IRQ is not set -# CONFIG_SERIAL_8250_MULTIPORT is not set -# CONFIG_SERIAL_8250_RSA is not set - -# -# Non-8250 serial port support -# - -# -# ARM Serial drivers -# -# CONFIG_ATOMWIDE_SERIAL is not set -# CONFIG_DUALSP_SERIAL is not set -# CONFIG_SERIAL_ANAKIN is not set -# CONFIG_SERIAL_ANAKIN_CONSOLE is not set -# CONFIG_SERIAL_AMBA is not set -# CONFIG_SERIAL_AMBA_CONSOLE is not set -# CONFIG_SERIAL_CLPS711X is not set -# CONFIG_SERIAL_CLPS711X_CONSOLE is not set -# CONFIG_SERIAL_21285 is not set -# CONFIG_SERIAL_21285_OLD is not set -# CONFIG_SERIAL_21285_CONSOLE is not set -# CONFIG_SERIAL_UART00 is not set -# CONFIG_SERIAL_UART00_CONSOLE is not set -# CONFIG_SERIAL_SA1100 is not set -# CONFIG_SERIAL_SA1100_CONSOLE is not set -# CONFIG_UNIX98_PTYS is not set - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# L3 serial bus support -# -# CONFIG_L3 is not set -# CONFIG_L3_ALGOBIT is not set -# CONFIG_L3_BIT_SA1100_GPIO is not set - -# -# Other L3 adapters -# -# CONFIG_L3_SA1111 is not set -# CONFIG_BIT_SA1100_GPIO is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -# CONFIG_MOUSE is not set -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -# CONFIG_INTEL_RNG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -# CONFIG_QFMT_V1 is not set -# CONFIG_QFMT_V2 is not set -# CONFIG_QIFACE_COMPAT is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set -# CONFIG_REISERFS_FS is not set -# CONFIG_REISERFS_CHECK is not set -# CONFIG_REISERFS_PROC_INFO is not set -# CONFIG_ADFS_FS is not set -# CONFIG_ADFS_FS_RW is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_EXT3_FS is not set -# CONFIG_JBD is not set -# CONFIG_JBD_DEBUG is not set -# CONFIG_FAT_FS is not set -# CONFIG_MSDOS_FS is not set -# CONFIG_UMSDOS_FS is not set -# CONFIG_VFAT_FS is not set -# CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set -# CONFIG_JFFS2_FS is not set -# CONFIG_CRAMFS is not set -# CONFIG_TMPFS is not set -CONFIG_RAMFS=y -# CONFIG_ISO9660_FS is not set -# CONFIG_JOLIET is not set -# CONFIG_ZISOFS is not set -# CONFIG_JFS_FS is not set -# CONFIG_JFS_DEBUG is not set -# CONFIG_JFS_STATISTICS is not set -# CONFIG_MINIX_FS is not set -# CONFIG_VXFS_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS_DEBUG is not set -# CONFIG_NTFS_RW is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -# CONFIG_DEVFS_MOUNT is not set -# CONFIG_DEVFS_DEBUG is not set -# CONFIG_DEVPTS_FS is not set -# CONFIG_QNX4FS_FS is not set -# CONFIG_QNX4FS_RW is not set -# CONFIG_ROMFS_FS is not set -CONFIG_EXT2_FS=y -# CONFIG_SYSV_FS is not set -# CONFIG_UDF_FS is not set -# CONFIG_UDF_RW is not set -# CONFIG_UFS_FS is not set -# CONFIG_UFS_FS_WRITE is not set -# CONFIG_NCPFS_NLS is not set -# CONFIG_SMB_FS is not set -# CONFIG_ZISOFS_FS is not set - -# -# Partition Types -# -# CONFIG_PARTITION_ADVANCED is not set -# CONFIG_SMB_NLS is not set -# CONFIG_NLS is not set - -# -# Multimedia Capabilities Port drivers -# -# CONFIG_MCP is not set -# CONFIG_MCP_SA1100 is not set -# CONFIG_MCP_UCB1200 is not set -# CONFIG_MCP_UCB1200_AUDIO is not set -# CONFIG_MCP_UCB1200_TS is not set - -# -# Console Switches -# -# CONFIG_SWITCHES is not set - -# -# USB support -# -# CONFIG_USB is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_USER=y -CONFIG_DEBUG_INFO=y -# CONFIG_DEBUG_KERNEL is not set -# CONFIG_DEBUG_SLAB is not set -# CONFIG_MAGIC_SYSRQ is not set -# CONFIG_DEBUG_SPINLOCK is not set -# CONFIG_DEBUG_WAITQ is not set -# CONFIG_DEBUG_BUGVERBOSE is not set -# CONFIG_DEBUG_ERRORS is not set -# CONFIG_DEBUG_LL is not set -# CONFIG_DEBUG_DC21285_PORT is not set -# CONFIG_DEBUG_CLPS711X_UART2 is not set - -# -# Library routines -# -# CONFIG_CRC32 is not set -# CONFIG_ZLIB_INFLATE is not set -# CONFIG_ZLIB_DEFLATE is not set diff -prauN linux-2.6.0-test5/arch/arm/def-configs/neponset wli-2.6.0-test5-bk12-25/arch/arm/def-configs/neponset --- linux-2.6.0-test5/arch/arm/def-configs/neponset 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/neponset 1969-12-31 16:00:00.000000000 -0800 @@ -1,895 +0,0 @@ -# -# Automatically generated make config: don't edit -# -CONFIG_ARM=y -CONFIG_MMU=y -CONFIG_SWAP=y -CONFIG_UID16=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y - -# -# General setup -# -CONFIG_NET=y -CONFIG_SYSVIPC=y -# CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_SYSCTL=y - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODVERSIONS is not set -# CONFIG_KMOD is not set - -# -# System Type -# -# CONFIG_ARCH_ADIFCC is not set -# CONFIG_ARCH_ANAKIN is not set -# CONFIG_ARCH_ARCA5K is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_PXA is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_CAMELOT is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_IOP310 is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_RPC is not set -CONFIG_ARCH_SA1100=y -# CONFIG_ARCH_SHARK is not set - -# -# Archimedes/A5000 Implementations -# - -# -# Archimedes/A5000 Implementations (select only ONE) -# - -# -# CLPS711X/EP721X Implementations -# - -# -# Epxa10db -# - -# -# Footbridge Implementations -# - -# -# IOP310 Implementation Options -# - -# -# IOP310 Chipset Features -# - -# -# Intel PXA250/210 Implementations -# - -# -# SA11x0 Implementations -# -CONFIG_SA1100_ASSABET=y -CONFIG_ASSABET_NEPONSET=y -# CONFIG_SA1100_ADSBITSY is not set -# CONFIG_SA1100_BRUTUS is not set -# CONFIG_SA1100_CERF is not set -# CONFIG_SA1100_H3100 is not set -# CONFIG_SA1100_H3600 is not set -# CONFIG_SA1100_H3800 is not set -# CONFIG_SA1100_EXTENEX1 is not set -# CONFIG_SA1100_FLEXANET is not set -# CONFIG_SA1100_FREEBIRD is not set -# CONFIG_SA1100_GRAPHICSCLIENT is not set -# CONFIG_SA1100_GRAPHICSMASTER is not set -# CONFIG_SA1100_BADGE4 is not set -# CONFIG_SA1100_JORNADA720 is not set -# CONFIG_SA1100_HUW_WEBPANEL is not set -# CONFIG_SA1100_ITSY is not set -# CONFIG_SA1100_LART is not set -# CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_OMNIMETER is not set -# CONFIG_SA1100_PANGOLIN is not set -# CONFIG_SA1100_PLEB is not set -# CONFIG_SA1100_PT_SYSTEM3 is not set -# CONFIG_SA1100_SHANNON is not set -# CONFIG_SA1100_SHERMAN is not set -# CONFIG_SA1100_SIMPAD is not set -# CONFIG_SA1100_PFS168 is not set -# CONFIG_SA1100_VICTOR is not set -# CONFIG_SA1100_XP860 is not set -# CONFIG_SA1100_YOPY is not set -# CONFIG_SA1100_STORK is not set -CONFIG_SA1100_USB=m -CONFIG_SA1100_USB_NETLINK=m -CONFIG_SA1100_USB_CHAR=m -CONFIG_SA1111=y -CONFIG_FORCE_MAX_ZONEORDER=9 - -# -# Processor Type -# -CONFIG_CPU_32=y -CONFIG_CPU_SA1100=y -CONFIG_CPU_32v4=y - -# -# Processor Features -# - -# -# General setup -# -CONFIG_DISCONTIGMEM=y -CONFIG_ISA=y -CONFIG_ZBOOT_ROM=y -CONFIG_ZBOOT_ROM_TEXT=0x80000 -CONFIG_ZBOOT_ROM_BSS=0xc1000000 -CONFIG_CPU_FREQ=y -CONFIG_CPU_FREQ_24_API=y -CONFIG_CPU_FREQ_26_API=y -CONFIG_HOTPLUG=y - -# -# PCMCIA/CardBus support -# -CONFIG_PCMCIA=y -# CONFIG_I82365 is not set -# CONFIG_TCIC is not set -CONFIG_PCMCIA_SA1100=y -CONFIG_PCMCIA_SA1111=y - -# -# At least one math emulation must be selected -# -CONFIG_FPE_NWFPE=y -# CONFIG_FPE_FASTFPE is not set -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -CONFIG_BINFMT_AOUT=y -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -CONFIG_PM=y -# CONFIG_PREEMPT is not set -CONFIG_APM=y -# CONFIG_ARTHUR is not set -CONFIG_CMDLINE="console=ttySA0,38400n8 cpufreq=221200 rw root=/dev/mtdblock2 mtdparts=sa1100:512K(boot),1M(kernel),2560K(initrd),4M(root) load_ramdisk=1 prompt_ramdisk=0 mem=32M noinitrd initrd=0xc0800000,3M" -CONFIG_LEDS=y -CONFIG_LEDS_TIMER=y -CONFIG_LEDS_CPU=y -CONFIG_ALIGNMENT_TRAP=y - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Memory Technology Devices (MTD) -# -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set -CONFIG_MTD_PARTITIONS=y -CONFIG_MTD_CONCAT=y -CONFIG_MTD_REDBOOT_PARTS=y -CONFIG_MTD_CMDLINE_PARTS=y -# CONFIG_MTD_AFS_PARTS is not set - -# -# User Modules And Translation Layers -# -# CONFIG_MTD_CHAR is not set -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -# CONFIG_NFTL is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=y -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_GEN_PROBE=y -CONFIG_MTD_CFI_ADV_OPTIONS=y -CONFIG_MTD_CFI_NOSWAP=y -# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set -# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set -# CONFIG_MTD_CFI_GEOMETRY is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -CONFIG_MTD_RAM=y -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_ABSENT is not set -# CONFIG_MTD_OBSOLETE_CHIPS is not set - -# -# Mapping drivers for chip access -# -# CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_NORA is not set -# CONFIG_MTD_ARM_INTEGRATOR is not set -CONFIG_MTD_SA1100=y -# CONFIG_MTD_EDB7312 is not set -CONFIG_MTD_PCMCIA=y -# CONFIG_MTD_UCLINUX is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLKMTD is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC1000 is not set -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set - -# -# NAND Flash Device Drivers -# -# CONFIG_MTD_NAND is not set - -# -# Plug and Play configuration -# -# CONFIG_PNP is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_XD is not set -# CONFIG_BLK_DEV_LOOP is not set -# CONFIG_BLK_DEV_NBD is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=8192 -CONFIG_BLK_DEV_INITRD=y - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set - -# -# Networking options -# -CONFIG_PACKET=y -CONFIG_PACKET_MMAP=y -# CONFIG_NETLINK_DEV is not set -# CONFIG_NETFILTER is not set -# CONFIG_FILTER is not set -CONFIG_UNIX=y -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -# CONFIG_IP_PNP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_ARPD is not set -# CONFIG_INET_ECN is not set -# CONFIG_SYN_COOKIES is not set -# CONFIG_IPV6 is not set - -# -# SCTP Configuration (EXPERIMENTAL) -# -CONFIG_IPV6_SCTP__=y -# CONFIG_IP_SCTP is not set -# CONFIG_ATM is not set -# CONFIG_VLAN_8021Q is not set -# CONFIG_LLC is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set -# CONFIG_ETHERTAP is not set - -# -# Ethernet (10 or 100Mbit) -# -CONFIG_NET_ETHERNET=y -# CONFIG_NET_VENDOR_3COM is not set -# CONFIG_LANCE is not set -CONFIG_NET_VENDOR_SMC=y -# CONFIG_WD80x3 is not set -# CONFIG_ULTRA is not set -CONFIG_SMC9194=y -# CONFIG_NET_VENDOR_RACAL is not set -# CONFIG_AT1700 is not set -# CONFIG_DEPCA is not set -# CONFIG_HP100 is not set -# CONFIG_NET_ISA is not set -# CONFIG_NET_PCI is not set -# CONFIG_NET_POCKET is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set - -# -# Token Ring devices -# -# CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# PCMCIA network device support -# -CONFIG_NET_PCMCIA=y -# CONFIG_PCMCIA_3C589 is not set -# CONFIG_PCMCIA_3C574 is not set -# CONFIG_PCMCIA_FMVJ18X is not set -CONFIG_PCMCIA_PCNET=y -# CONFIG_PCMCIA_NMCLAN is not set -# CONFIG_PCMCIA_SMC91C92 is not set -# CONFIG_PCMCIA_XIRC2PS is not set -# CONFIG_PCMCIA_AXNET is not set -# CONFIG_NET_PCMCIA_RADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# ATA/ATAPI/MFM/RLL support -# -# CONFIG_IDE is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# I2O device support -# -# CONFIG_I2O is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN_BOOL is not set - -# -# Input device support -# -CONFIG_INPUT=y - -# -# Userland interfaces -# -# CONFIG_INPUT_MOUSEDEV is not set -# CONFIG_INPUT_JOYDEV is not set -CONFIG_INPUT_TSDEV=y -CONFIG_INPUT_TSDEV_SCREEN_X=240 -CONFIG_INPUT_TSDEV_SCREEN_Y=320 -CONFIG_INPUT_TSLIBDEV=y -# CONFIG_INPUT_EVDEV is not set -# CONFIG_INPUT_EVBUG is not set - -# -# Input I/O drivers -# -# CONFIG_GAMEPORT is not set -CONFIG_SOUND_GAMEPORT=y -CONFIG_SERIO=y -# CONFIG_SERIO_I8042 is not set -CONFIG_SERIO_SERPORT=m -# CONFIG_SERIO_CT82C710 is not set -CONFIG_SERIO_SA1111=y - -# -# Input Device Drivers -# -CONFIG_INPUT_KEYBOARD=y -CONFIG_KEYBOARD_ATKBD=y -# CONFIG_KEYBOARD_SUNKBD is not set -# CONFIG_KEYBOARD_XTKBD is not set -# CONFIG_KEYBOARD_NEWTON is not set -# CONFIG_INPUT_MOUSE is not set -# CONFIG_INPUT_JOYSTICK is not set -CONFIG_INPUT_TOUCHSCREEN=y -# CONFIG_TOUCHSCREEN_GUNZE is not set -# CONFIG_INPUT_MISC is not set - -# -# Character devices -# -CONFIG_VT=y -CONFIG_VT_CONSOLE=y -CONFIG_HW_CONSOLE=y -CONFIG_SERIAL_NONSTANDARD=y -# CONFIG_COMPUTONE is not set -# CONFIG_ROCKETPORT is not set -# CONFIG_CYCLADES is not set -# CONFIG_DIGIEPCA is not set -# CONFIG_DIGI is not set -# CONFIG_ESPSERIAL is not set -# CONFIG_MOXA_INTELLIO is not set -# CONFIG_MOXA_SMARTIO is not set -# CONFIG_ISI is not set -# CONFIG_SYNCLINK is not set -# CONFIG_SYNCLINKMP is not set -# CONFIG_N_HDLC is not set -# CONFIG_RISCOM8 is not set -# CONFIG_SPECIALIX is not set -# CONFIG_SX is not set -# CONFIG_RIO is not set -# CONFIG_STALDRV is not set - -# -# Serial drivers -# -CONFIG_SERIAL_8250=y -# CONFIG_SERIAL_8250_CONSOLE is not set -CONFIG_SERIAL_8250_CS=y -# CONFIG_SERIAL_8250_EXTENDED is not set - -# -# Non-8250 serial port support -# -CONFIG_SERIAL_SA1100=y -CONFIG_SERIAL_SA1100_CONSOLE=y -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=32 - -# -# I2C support -# -CONFIG_I2C=y -CONFIG_I2C_ALGOBIT=y -# CONFIG_I2C_ELV is not set -# CONFIG_I2C_VELLEMAN is not set -# CONFIG_SCx200_ACB is not set -CONFIG_I2C_BIT_SA1100_GPIO=y -# CONFIG_I2C_ALGOPCF is not set -CONFIG_I2C_CHARDEV=y -CONFIG_I2C_PROC=y - -# -# L3 serial bus support -# -CONFIG_L3=y -CONFIG_L3_ALGOBIT=y -CONFIG_L3_BIT_SA1100_GPIO=y -CONFIG_BIT_SA1100_GPIO=y - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -CONFIG_WATCHDOG=y -# CONFIG_WATCHDOG_NOWAYOUT is not set -# CONFIG_SOFT_WATCHDOG is not set -# CONFIG_WDT is not set -# CONFIG_WDTPCI is not set -# CONFIG_PCWATCHDOG is not set -# CONFIG_ACQUIRE_WDT is not set -# CONFIG_ADVANTECH_WDT is not set -CONFIG_SA1100_WATCHDOG=m -# CONFIG_EUROTECH_WDT is not set -# CONFIG_IB700_WDT is not set -# CONFIG_I810_TCO is not set -# CONFIG_MIXCOMWD is not set -# CONFIG_SCx200_WDT is not set -# CONFIG_60XX_WDT is not set -# CONFIG_W83877F_WDT is not set -# CONFIG_MACHZ_WDT is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -# CONFIG_GEN_RTC is not set -CONFIG_SA1100_RTC=y -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set - -# -# PCMCIA character devices -# -# CONFIG_SYNCLINK_CS is not set -# CONFIG_RAW_DRIVER is not set - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set -# CONFIG_REISERFS_FS is not set -# CONFIG_ADFS_FS is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BEFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_EXT3_FS is not set -# CONFIG_JBD is not set -CONFIG_FAT_FS=m -CONFIG_MSDOS_FS=m -CONFIG_VFAT_FS=m -# CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set -CONFIG_JFFS2_FS=y -CONFIG_JFFS2_FS_DEBUG=0 -# CONFIG_JFFS2_FS_NAND is not set -# CONFIG_CRAMFS is not set -# CONFIG_TMPFS is not set -CONFIG_RAMFS=y -# CONFIG_ISO9660_FS is not set -# CONFIG_JFS_FS is not set -# CONFIG_MINIX_FS is not set -# CONFIG_VXFS_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -CONFIG_DEVPTS_FS=y -# CONFIG_QNX4FS_FS is not set -# CONFIG_ROMFS_FS is not set -CONFIG_EXT2_FS=y -# CONFIG_EXT2_FS_XATTR is not set -# CONFIG_SYSV_FS is not set -# CONFIG_UDF_FS is not set -# CONFIG_UFS_FS is not set -# CONFIG_XFS_FS is not set - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -# CONFIG_INTERMEZZO_FS is not set -CONFIG_NFS_FS=y -# CONFIG_NFS_V3 is not set -# CONFIG_NFS_V4 is not set -# CONFIG_NFSD is not set -CONFIG_SUNRPC=y -CONFIG_LOCKD=y -# CONFIG_EXPORTFS is not set -# CONFIG_CIFS is not set -# CONFIG_SMB_FS is not set -# CONFIG_NCP_FS is not set -# CONFIG_AFS_FS is not set - -# -# Partition Types -# -CONFIG_PARTITION_ADVANCED=y -# CONFIG_ACORN_PARTITION is not set -# CONFIG_OSF_PARTITION is not set -# CONFIG_AMIGA_PARTITION is not set -# CONFIG_ATARI_PARTITION is not set -# CONFIG_MAC_PARTITION is not set -# CONFIG_MSDOS_PARTITION is not set -# CONFIG_LDM_PARTITION is not set -# CONFIG_SGI_PARTITION is not set -# CONFIG_ULTRIX_PARTITION is not set -# CONFIG_SUN_PARTITION is not set -# CONFIG_EFI_PARTITION is not set -CONFIG_NLS=y - -# -# Native Language Support -# -CONFIG_NLS_DEFAULT="iso8859-1" -CONFIG_NLS_CODEPAGE_437=m -# CONFIG_NLS_CODEPAGE_737 is not set -# CONFIG_NLS_CODEPAGE_775 is not set -# CONFIG_NLS_CODEPAGE_850 is not set -# CONFIG_NLS_CODEPAGE_852 is not set -# CONFIG_NLS_CODEPAGE_855 is not set -# CONFIG_NLS_CODEPAGE_857 is not set -# CONFIG_NLS_CODEPAGE_860 is not set -# CONFIG_NLS_CODEPAGE_861 is not set -# CONFIG_NLS_CODEPAGE_862 is not set -# CONFIG_NLS_CODEPAGE_863 is not set -# CONFIG_NLS_CODEPAGE_864 is not set -# CONFIG_NLS_CODEPAGE_865 is not set -# CONFIG_NLS_CODEPAGE_866 is not set -# CONFIG_NLS_CODEPAGE_869 is not set -# CONFIG_NLS_CODEPAGE_936 is not set -# CONFIG_NLS_CODEPAGE_950 is not set -# CONFIG_NLS_CODEPAGE_932 is not set -# CONFIG_NLS_CODEPAGE_949 is not set -# CONFIG_NLS_CODEPAGE_874 is not set -# CONFIG_NLS_ISO8859_8 is not set -# CONFIG_NLS_CODEPAGE_1250 is not set -# CONFIG_NLS_CODEPAGE_1251 is not set -CONFIG_NLS_ISO8859_1=m -# CONFIG_NLS_ISO8859_2 is not set -# CONFIG_NLS_ISO8859_3 is not set -# CONFIG_NLS_ISO8859_4 is not set -# CONFIG_NLS_ISO8859_5 is not set -# CONFIG_NLS_ISO8859_6 is not set -# CONFIG_NLS_ISO8859_7 is not set -# CONFIG_NLS_ISO8859_9 is not set -# CONFIG_NLS_ISO8859_13 is not set -# CONFIG_NLS_ISO8859_14 is not set -# CONFIG_NLS_ISO8859_15 is not set -# CONFIG_NLS_KOI8_R is not set -# CONFIG_NLS_KOI8_U is not set -# CONFIG_NLS_UTF8 is not set - -# -# Console drivers -# -# CONFIG_VGA_CONSOLE is not set - -# -# Frame-buffer support -# -CONFIG_FB=y -CONFIG_DUMMY_CONSOLE=y -CONFIG_FB_SA1100=y -# CONFIG_FB_VIRTUAL is not set -# CONFIG_FBCON_ADVANCED is not set -CONFIG_FBCON_CFB2=y -CONFIG_FBCON_CFB4=y -CONFIG_FBCON_CFB8=y -CONFIG_FBCON_CFB16=y -CONFIG_FBCON_FONTWIDTH8_ONLY=y -# CONFIG_FONT_SUN8x16 is not set -CONFIG_FBCON_FONTS=y -# CONFIG_FONT_8x8 is not set -# CONFIG_FONT_8x16 is not set -# CONFIG_FONT_PEARL_8x8 is not set -CONFIG_FONT_ACORN_8x8=y -# CONFIG_FONT_MINI_4x6 is not set - -# -# Sound -# -CONFIG_SOUND=y - -# -# Open Sound System -# -CONFIG_SOUND_PRIME=y -# CONFIG_SOUND_BT878 is not set -# CONFIG_SOUND_FUSION is not set -# CONFIG_SOUND_CS4281 is not set -# CONFIG_SOUND_ESSSOLO1 is not set -# CONFIG_SOUND_MAESTRO is not set -# CONFIG_SOUND_SONICVIBES is not set -# CONFIG_SOUND_TRIDENT is not set -# CONFIG_SOUND_MSNDCLAS is not set -# CONFIG_SOUND_MSNDPIN is not set -CONFIG_SOUND_SA1100=y -CONFIG_SOUND_UDA1341=y -CONFIG_SOUND_ASSABET_UDA1341=y -CONFIG_SOUND_SA1111_UDA1341=y -# CONFIG_SOUND_SA1100SSP is not set -# CONFIG_SOUND_OSS is not set -# CONFIG_SOUND_TVMIXER is not set - -# -# Advanced Linux Sound Architecture -# -# CONFIG_SND is not set - -# -# Misc devices -# - -# -# Multimedia Capabilities Port drivers -# -CONFIG_MCP=y -CONFIG_MCP_SA1100=y -CONFIG_MCP_UCB1200=y -CONFIG_MCP_UCB1200_AUDIO=m -CONFIG_MCP_UCB1200_TS=y - -# -# Console Switches -# -# CONFIG_SWITCHES is not set - -# -# USB support -# -CONFIG_USB=m -CONFIG_USB_DEBUG=y - -# -# Miscellaneous USB options -# -CONFIG_USB_DEVICEFS=y -# CONFIG_USB_LONG_TIMEOUT is not set -# CONFIG_USB_BANDWIDTH is not set -# CONFIG_USB_DYNAMIC_MINORS is not set - -# -# USB Host Controller Drivers -# -# CONFIG_USB_EHCI_HCD is not set -CONFIG_USB_OHCI_HCD=m -# CONFIG_USB_UHCI_HCD_ALT is not set -# CONFIG_USB_SL811HS is not set - -# -# USB Device Class drivers -# -# CONFIG_USB_AUDIO is not set -# CONFIG_USB_BLUETOOTH_TTY is not set -# CONFIG_USB_MIDI is not set -# CONFIG_USB_ACM is not set -# CONFIG_USB_PRINTER is not set - -# -# SCSI support is needed for USB Storage -# - -# -# USB Human Interface Devices (HID) -# -# CONFIG_USB_HID is not set - -# -# USB HID Boot Protocol drivers -# -# CONFIG_USB_KBD is not set -CONFIG_USB_MOUSE=m -# CONFIG_USB_AIPTEK is not set -# CONFIG_USB_WACOM is not set -# CONFIG_USB_POWERMATE is not set -# CONFIG_USB_XPAD is not set - -# -# USB Imaging devices -# -# CONFIG_USB_MDC800 is not set -# CONFIG_USB_SCANNER is not set - -# -# USB Multimedia devices -# -# CONFIG_USB_DABUSB is not set - -# -# Video4Linux support is needed for USB Multimedia device support -# - -# -# USB Network adaptors -# -# CONFIG_USB_CATC is not set -# CONFIG_USB_CDCETHER is not set -# CONFIG_USB_KAWETH is not set -# CONFIG_USB_PEGASUS is not set -# CONFIG_USB_RTL8150 is not set -# CONFIG_USB_USBNET is not set - -# -# USB port drivers -# - -# -# USB Serial Converter support -# -# CONFIG_USB_SERIAL is not set - -# -# USB Miscellaneous drivers -# -# CONFIG_USB_TIGL is not set -# CONFIG_USB_AUERSWALD is not set -# CONFIG_USB_RIO500 is not set -# CONFIG_USB_BRLVGER is not set -# CONFIG_USB_LCD is not set -# CONFIG_USB_TEST is not set - -# -# Bluetooth support -# -# CONFIG_BT is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_USER=y -# CONFIG_DEBUG_INFO is not set -CONFIG_DEBUG_KERNEL=y -CONFIG_DEBUG_SLAB=y -CONFIG_MAGIC_SYSRQ=y -# CONFIG_DEBUG_SPINLOCK is not set -# CONFIG_DEBUG_WAITQ is not set -CONFIG_DEBUG_BUGVERBOSE=y -CONFIG_DEBUG_ERRORS=y -# CONFIG_KALLSYMS is not set -CONFIG_DEBUG_LL=y - -# -# Security options -# -CONFIG_SECURITY_CAPABILITIES=y - -# -# Cryptographic options -# -# CONFIG_CRYPTO is not set - -# -# Library routines -# -# CONFIG_CRC32 is not set -CONFIG_ZLIB_INFLATE=y -CONFIG_ZLIB_DEFLATE=y diff -prauN linux-2.6.0-test5/arch/arm/def-configs/omnimeter wli-2.6.0-test5-bk12-25/arch/arm/def-configs/omnimeter --- linux-2.6.0-test5/arch/arm/def-configs/omnimeter 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/omnimeter 1969-12-31 16:00:00.000000000 -0800 @@ -1,571 +0,0 @@ -# -# Automatically generated by make menuconfig: don't edit -# -CONFIG_ARM=y -# CONFIG_SBUS is not set -CONFIG_UID16=y - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -# CONFIG_OBSOLETE is not set - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODVERSIONS is not set -CONFIG_KMOD=y - -# -# System Type -# -# CONFIG_ARCH_ARCA5K is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_RPC is not set -CONFIG_ARCH_SA1100=y -# CONFIG_ARCH_CLPS711X is not set - -# -# Archimedes/A5000 Implementations -# - -# -# Footbridge Implementations -# - -# -# SA11x0 Implementations -# -# CONFIG_SA1100_ASSABET is not set -# CONFIG_SA1100_BRUTUS is not set -CONFIG_SA1100_OMNIMETER=y -# CONFIG_SA1100_CERF is not set -# CONFIG_SA1100_BITSY is not set -# CONFIG_SA1100_LART is not set -# CONFIG_SA1100_GRAPHICSCLIENT is not set -# CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_VICTOR is not set -# CONFIG_SA1100_SHERMAN is not set -# CONFIG_SA1100_XP860 is not set -# CONFIG_SA1100_PANGOLIN is not set -# CONFIG_SA1100_USB is not set -# CONFIG_SA1100_FREQUENCY_SCALE is not set -# CONFIG_SA1100_VOLTAGE_SCALE is not set - -# -# CLPS711X/EP721X Implementations -# -# CONFIG_ARCH_ACORN is not set -# CONFIG_FOOTBRIDGE is not set -# CONFIG_FOOTBRIDGE_HOST is not set -# CONFIG_FOOTBRIDGE_ADDIN is not set -CONFIG_CPU_32=y -# CONFIG_CPU_26 is not set -CONFIG_CPU_32v4=y -CONFIG_CPU_SA1100=y -CONFIG_DISCONTIGMEM=y - -# -# General setup -# -# CONFIG_ANGELBOOT is not set -# CONFIG_PCI is not set -CONFIG_ISA=y -# CONFIG_ISA_DMA is not set -CONFIG_HOTPLUG=y - -# -# PCMCIA/CardBus support -# -CONFIG_PCMCIA=y -CONFIG_I82365=y -# CONFIG_PCMCIA_CLPS6700 is not set -CONFIG_SA1100_PCMCIA=y -# CONFIG_H3600_SLEEVE is not set -CONFIG_NET=y -CONFIG_SYSVIPC=y -# CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_SYSCTL=y -CONFIG_NWFPE=y -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -CONFIG_BINFMT_AOUT=y -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -# CONFIG_PM is not set -# CONFIG_ARTHUR is not set -CONFIG_CMDLINE="keepinitrd mem=16M root=/dev/ram ramdisk=8192 initrd=0xd0000000,4M" -# CONFIG_LEDS is not set -# CONFIG_ALIGNMENT_TRAP is not set - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Memory Technology Devices (MTD) -# -# CONFIG_MTD is not set - -# -# Plug and Play configuration -# -# CONFIG_PNP is not set -# CONFIG_ISAPNP is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_XD is not set -# CONFIG_PARIDE is not set -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_BLK_DEV_DAC960 is not set -CONFIG_BLK_DEV_LOOP=m -CONFIG_BLK_DEV_NBD=m -# CONFIG_BLK_DEV_RAM is not set -# CONFIG_BLK_DEV_INITRD is not set -# CONFIG_BLK_DEV_FLASH is not set - -# -# Networking options -# -CONFIG_PACKET=y -CONFIG_PACKET_MMAP=y -CONFIG_NETLINK=y -CONFIG_RTNETLINK=y -# CONFIG_NETLINK_DEV is not set -CONFIG_NETFILTER=y -# CONFIG_NETFILTER_DEBUG is not set -# CONFIG_FILTER is not set -CONFIG_UNIX=y -CONFIG_INET=y -CONFIG_IP_MULTICAST=y -# CONFIG_IP_ADVANCED_ROUTER is not set -# CONFIG_IP_PNP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_IP_MROUTE is not set -# CONFIG_ARPD is not set -# CONFIG_INET_ECN is not set -# CONFIG_SYN_COOKIES is not set - -# -# IP: Netfilter Configuration -# -# CONFIG_IP_NF_CONNTRACK is not set -# CONFIG_IP_NF_QUEUE is not set -# CONFIG_IP_NF_IPTABLES is not set -# CONFIG_IP_NF_COMPAT_IPCHAINS is not set -# CONFIG_IP_NF_COMPAT_IPFWADM is not set -# CONFIG_IPV6 is not set -# CONFIG_KHTTPD is not set -# CONFIG_ATM is not set -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_LLC is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set -# CONFIG_ETHERTAP is not set -# CONFIG_NET_SB1000 is not set -# CONFIG_NET_SA1100_USB_HOST is not set -# CONFIG_NET_SA1100_USB_CLIENT is not set - -# -# Ethernet (10 or 100Mbit) -# -CONFIG_NET_ETHERNET=y -# CONFIG_NET_VENDOR_3COM is not set -# CONFIG_LANCE is not set -# CONFIG_NET_VENDOR_SMC is not set -# CONFIG_NET_VENDOR_RACAL is not set -# CONFIG_AT1700 is not set -# CONFIG_DEPCA is not set -# CONFIG_HP100 is not set -# CONFIG_NET_ISA is not set -# CONFIG_NET_PCI is not set -# CONFIG_NET_POCKET is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_ACENIC is not set -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -# CONFIG_SK98LIN is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set - -# -# Token Ring devices -# -# CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# PCMCIA network device support -# -CONFIG_NET_PCMCIA=y -CONFIG_PCMCIA_3C589=y -# CONFIG_PCMCIA_3C574 is not set -# CONFIG_PCMCIA_FMVJ18X is not set -CONFIG_PCMCIA_PCNET=y -# CONFIG_PCMCIA_NMCLAN is not set -# CONFIG_PCMCIA_SMC91C92 is not set -# CONFIG_PCMCIA_XIRC2PS is not set -# CONFIG_ARCNET_COM20020_CS is not set -# CONFIG_PCMCIA_IBMTR is not set -CONFIG_NET_PCMCIA_RADIO=y -# CONFIG_PCMCIA_RAYCS is not set -# CONFIG_PCMCIA_NETWAVE is not set -CONFIG_PCMCIA_WAVELAN=y -CONFIG_AIRONET4500_CS=y -CONFIG_PCMCIA_WVLAN=y -CONFIG_PCMCIA_NETCARD=y - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# ATA/IDE/MFM/RLL support -# -CONFIG_IDE=y - -# -# IDE, ATA and ATAPI Block devices -# -CONFIG_BLK_DEV_IDE=y -# CONFIG_BLK_DEV_HD_IDE is not set -# CONFIG_BLK_DEV_HD is not set -CONFIG_BLK_DEV_IDEDISK=y -# CONFIG_IDEDISK_MULTI_MODE is not set -CONFIG_BLK_DEV_IDECS=y -# CONFIG_BLK_DEV_IDECD is not set -# CONFIG_BLK_DEV_IDETAPE is not set -# CONFIG_BLK_DEV_IDEFLOPPY is not set -# CONFIG_BLK_DEV_IDESCSI is not set -# CONFIG_BLK_DEV_CMD640 is not set -# CONFIG_BLK_DEV_CMD640_ENHANCED is not set -# CONFIG_BLK_DEV_ISAPNP is not set -# CONFIG_IDE_CHIPSETS is not set -# CONFIG_IDEDMA_AUTO is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# I2O device support -# -# CONFIG_I2O is not set -# CONFIG_I2O_BLOCK is not set -# CONFIG_I2O_LAN is not set -# CONFIG_I2O_SCSI is not set -# CONFIG_I2O_PROC is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Input core support -# -# CONFIG_INPUT is not set - -# -# Character devices -# -CONFIG_VT=y -CONFIG_VT_CONSOLE=y -CONFIG_SERIAL_SA1100=y -CONFIG_SERIAL_SA1100_CONSOLE=y -# CONFIG_TOUCHSCREEN_UCB1200 is not set -# CONFIG_TOUCHSCREEN_BITSY is not set -# CONFIG_TOUCHSCREEN_BITSY_KEYBOARD is not set -# CONFIG_H3600_SLEEVE is not set -CONFIG_SERIAL=y -# CONFIG_SERIAL_CONSOLE is not set -# CONFIG_SERIAL_EXTENDED is not set -# CONFIG_SERIAL_NONSTANDARD is not set -CONFIG_SERIAL_SA1100=y -CONFIG_SERIAL_SA1100_CONSOLE=y -CONFIG_SA1100_DEFAULT_BAUDRATE=9600 -# CONFIG_TOUCHSCREEN_UCB1200 is not set -# CONFIG_TOUCHSCREEN_BITSY is not set -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=32 - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -CONFIG_MOUSE=m -# CONFIG_PSMOUSE is not set -# CONFIG_82C710_MOUSE is not set -# CONFIG_PC110_PAD is not set - -# -# Joysticks -# -# CONFIG_JOYSTICK is not set -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -# CONFIG_INTEL_RNG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -# CONFIG_SA1100_RTC is not set -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set -CONFIG_PCMCIA_SERIAL=y - -# -# PCMCIA character device support -# -# CONFIG_PCMCIA_SERIAL_CS is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set -# CONFIG_ADFS_FS is not set -# CONFIG_ADFS_FS_RW is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BFS_FS is not set -CONFIG_FAT_FS=y -CONFIG_MSDOS_FS=y -# CONFIG_UMSDOS_FS is not set -# CONFIG_VFAT_FS is not set -# CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set -# CONFIG_CRAMFS is not set -# CONFIG_RAMFS is not set -# CONFIG_ISO9660_FS is not set -# CONFIG_JOLIET is not set -# CONFIG_MINIX_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS_DEBUG is not set -# CONFIG_NTFS_RW is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -# CONFIG_DEVFS_MOUNT is not set -# CONFIG_DEVFS_DEBUG is not set -# CONFIG_DEVPTS_FS is not set -# CONFIG_QNX4FS_FS is not set -# CONFIG_QNX4FS_RW is not set -# CONFIG_ROMFS_FS is not set -CONFIG_EXT2_FS=y -# CONFIG_SYSV_FS is not set -# CONFIG_SYSV_FS_WRITE is not set -# CONFIG_UDF_FS is not set -# CONFIG_UDF_RW is not set -# CONFIG_UFS_FS is not set -# CONFIG_UFS_FS_WRITE is not set - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -CONFIG_NFS_FS=y -# CONFIG_NFS_V3 is not set -# CONFIG_ROOT_NFS is not set -# CONFIG_NFSD is not set -# CONFIG_NFSD_V3 is not set -CONFIG_SUNRPC=y -CONFIG_LOCKD=y -# CONFIG_SMB_FS is not set -# CONFIG_NCP_FS is not set -# CONFIG_NCPFS_PACKET_SIGNING is not set -# CONFIG_NCPFS_IOCTL_LOCKING is not set -# CONFIG_NCPFS_STRONG is not set -# CONFIG_NCPFS_NFS_NS is not set -# CONFIG_NCPFS_OS2_NS is not set -# CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_MOUNT_SUBDIR is not set -# CONFIG_NCPFS_NDS_DOMAINS is not set -# CONFIG_NCPFS_NLS is not set -# CONFIG_NCPFS_EXTRAS is not set - -# -# Partition Types -# -# CONFIG_PARTITION_ADVANCED is not set -CONFIG_MSDOS_PARTITION=y -CONFIG_NLS=y - -# -# Native Language Support -# -CONFIG_NLS_DEFAULT="iso8859-1" -# CONFIG_NLS_CODEPAGE_437 is not set -# CONFIG_NLS_CODEPAGE_737 is not set -# CONFIG_NLS_CODEPAGE_775 is not set -# CONFIG_NLS_CODEPAGE_850 is not set -# CONFIG_NLS_CODEPAGE_852 is not set -# CONFIG_NLS_CODEPAGE_855 is not set -# CONFIG_NLS_CODEPAGE_857 is not set -# CONFIG_NLS_CODEPAGE_860 is not set -# CONFIG_NLS_CODEPAGE_861 is not set -# CONFIG_NLS_CODEPAGE_862 is not set -# CONFIG_NLS_CODEPAGE_863 is not set -# CONFIG_NLS_CODEPAGE_864 is not set -# CONFIG_NLS_CODEPAGE_865 is not set -# CONFIG_NLS_CODEPAGE_866 is not set -# CONFIG_NLS_CODEPAGE_869 is not set -# CONFIG_NLS_CODEPAGE_874 is not set -# CONFIG_NLS_CODEPAGE_932 is not set -# CONFIG_NLS_CODEPAGE_936 is not set -# CONFIG_NLS_CODEPAGE_949 is not set -# CONFIG_NLS_CODEPAGE_950 is not set -# CONFIG_NLS_ISO8859_1 is not set -# CONFIG_NLS_ISO8859_2 is not set -# CONFIG_NLS_ISO8859_3 is not set -# CONFIG_NLS_ISO8859_4 is not set -# CONFIG_NLS_ISO8859_5 is not set -# CONFIG_NLS_ISO8859_6 is not set -# CONFIG_NLS_ISO8859_7 is not set -# CONFIG_NLS_ISO8859_8 is not set -# CONFIG_NLS_ISO8859_9 is not set -# CONFIG_NLS_ISO8859_14 is not set -# CONFIG_NLS_ISO8859_15 is not set -# CONFIG_NLS_KOI8_R is not set -# CONFIG_NLS_UTF8 is not set - -# -# Console drivers -# -CONFIG_PC_KEYMAP=y -# CONFIG_VGA_CONSOLE is not set -CONFIG_FB=y - -# -# Frame-buffer support -# -CONFIG_FB=y -CONFIG_DUMMY_CONSOLE=y -# CONFIG_FB_ACORN is not set -# CONFIG_FB_CLPS711X is not set -# CONFIG_FB_CYBER2000 is not set -CONFIG_FB_SA1100=y -# CONFIG_FB_VIRTUAL is not set -CONFIG_FBCON_ADVANCED=y -# CONFIG_FBCON_MFB is not set -# CONFIG_FBCON_CFB2 is not set -CONFIG_FBCON_CFB4=y -# CONFIG_FBCON_CFB8 is not set -# CONFIG_FBCON_CFB16 is not set -# CONFIG_FBCON_CFB24 is not set -# CONFIG_FBCON_CFB32 is not set -# CONFIG_FBCON_AFB is not set -# CONFIG_FBCON_ILBM is not set -# CONFIG_FBCON_IPLAN2P2 is not set -# CONFIG_FBCON_IPLAN2P4 is not set -# CONFIG_FBCON_IPLAN2P8 is not set -# CONFIG_FBCON_MAC is not set -# CONFIG_FBCON_VGA_PLANES is not set -# CONFIG_FBCON_VGA is not set -# CONFIG_FBCON_HGA is not set -CONFIG_FBCON_FONTWIDTH8_ONLY=y -CONFIG_FBCON_FONTS=y -CONFIG_FONT_8x8=y -# CONFIG_FONT_8x16 is not set -# CONFIG_FONT_SUN8x16 is not set -# CONFIG_FONT_PEARL_8x8 is not set -# CONFIG_FONT_ACORN_8x8 is not set - -# -# Sound -# -# CONFIG_SOUND is not set - -# -# USB support -# -# CONFIG_USB is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_ERRORS=y -# CONFIG_DEBUG_USER is not set -# CONFIG_DEBUG_INFO is not set -# CONFIG_MAGIC_SYSRQ is not set -CONFIG_DEBUG_LL=y diff -prauN linux-2.6.0-test5/arch/arm/def-configs/pangolin wli-2.6.0-test5-bk12-25/arch/arm/def-configs/pangolin --- linux-2.6.0-test5/arch/arm/def-configs/pangolin 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/pangolin 1969-12-31 16:00:00.000000000 -0800 @@ -1,742 +0,0 @@ -# -# Automatically generated by make menuconfig: don't edit -# -CONFIG_ARM=y -# CONFIG_EISA is not set -# CONFIG_SBUS is not set -# CONFIG_MCA is not set -CONFIG_UID16=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y -# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -# CONFIG_OBSOLETE is not set - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODVERSIONS is not set -# CONFIG_KMOD is not set - -# -# System Type -# -# CONFIG_ARCH_ANAKIN is not set -# CONFIG_ARCH_ARCA5K is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_RPC is not set -CONFIG_ARCH_SA1100=y -# CONFIG_ARCH_SHARK is not set - -# -# Archimedes/A5000 Implementations -# -# CONFIG_ARCH_ARC is not set -# CONFIG_ARCH_A5K is not set - -# -# Footbridge Implementations -# -# CONFIG_ARCH_CATS is not set -# CONFIG_ARCH_PERSONAL_SERVER is not set -# CONFIG_ARCH_EBSA285_ADDIN is not set -# CONFIG_ARCH_EBSA285_HOST is not set -# CONFIG_ARCH_NETWINDER is not set - -# -# SA11x0 Implementations -# -# CONFIG_SA1100_ASSABET is not set -# CONFIG_ASSABET_NEPONSET is not set -# CONFIG_SA1100_BRUTUS is not set -# CONFIG_SA1100_CERF is not set -# CONFIG_SA1100_BITSY is not set -# CONFIG_SA1100_EXTENEX1 is not set -# CONFIG_SA1100_FLEXANET is not set -# CONFIG_SA1100_FREEBIRD is not set -# CONFIG_SA1100_GRAPHICSCLIENT is not set -# CONFIG_SA1100_JORNADA720 is not set -# CONFIG_SA1100_HUW_WEBPANEL is not set -# CONFIG_SA1100_ITSY is not set -# CONFIG_SA1100_LART is not set -# CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_OMNIMETER is not set -CONFIG_SA1100_PANGOLIN=y -CONFIG_SA1100_PANGOLIN_PCMCIA_IDE=y -# CONFIG_SA1100_PLEB is not set -# CONFIG_SA1100_SHERMAN is not set -# CONFIG_SA1100_SIMPAD is not set -# CONFIG_SA1100_PFS168 is not set -# CONFIG_SA1100_VICTOR is not set -# CONFIG_SA1100_XP860 is not set -# CONFIG_SA1100_YOPY is not set -# CONFIG_SA1100_USB is not set -# CONFIG_SA1100_USB_NETLINK is not set -# CONFIG_SA1100_USB_CHAR is not set - -# -# CLPS711X/EP721X Implementations -# -# CONFIG_ARCH_P720T is not set -# CONFIG_ARCH_ACORN is not set -# CONFIG_FOOTBRIDGE is not set -# CONFIG_FOOTBRIDGE_HOST is not set -# CONFIG_FOOTBRIDGE_ADDIN is not set -CONFIG_CPU_32=y -# CONFIG_CPU_26 is not set -# CONFIG_CPU_32v3 is not set -CONFIG_CPU_32v4=y -# CONFIG_CPU_ARM610 is not set -# CONFIG_CPU_ARM710 is not set -# CONFIG_CPU_ARM720T is not set -# CONFIG_CPU_ARM920T is not set -# CONFIG_CPU_ARM1020 is not set -# CONFIG_CPU_SA110 is not set -CONFIG_CPU_SA1100=y -CONFIG_DISCONTIGMEM=y -# CONFIG_CPU_BIG_ENDIAN is not set - -# -# General setup -# -# CONFIG_PCI is not set -# CONFIG_ISA is not set -# CONFIG_ISA_DMA is not set -# CONFIG_CPU_FREQ is not set -CONFIG_HOTPLUG=y - -# -# PCMCIA/CardBus support -# -CONFIG_PCMCIA=y -# CONFIG_I82365 is not set -# CONFIG_TCIC is not set -# CONFIG_PCMCIA_CLPS6700 is not set -CONFIG_PCMCIA_SA1100=y -CONFIG_NET=y -CONFIG_SYSVIPC=y -# CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_SYSCTL=y -# CONFIG_FPE_NWFPE is not set -CONFIG_FPE_FASTFPE=y -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -# CONFIG_BINFMT_AOUT is not set -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -# CONFIG_PM is not set -# CONFIG_APM is not set -# CONFIG_ARTHUR is not set -CONFIG_CMDLINE="keepinitrd mem=128M root=/dev/ram initrd=0xc0800000,3M" -# CONFIG_PFS168_CMDLINE is not set -# CONFIG_LEDS is not set -CONFIG_ALIGNMENT_TRAP=y - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Memory Technology Devices (MTD) -# -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set -CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_REDBOOT_PARTS is not set -# CONFIG_MTD_BOOTLDR_PARTS is not set -# CONFIG_MTD_AFS_PARTS is not set -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -# CONFIG_NFTL is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=y -CONFIG_MTD_CFI_ADV_OPTIONS=y -CONFIG_MTD_CFI_NOSWAP=y -# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set -# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set -CONFIG_MTD_CFI_GEOMETRY=y -# CONFIG_MTD_CFI_B1 is not set -# CONFIG_MTD_CFI_B2 is not set -CONFIG_MTD_CFI_B4=y -# CONFIG_MTD_CFI_I1 is not set -# CONFIG_MTD_CFI_I2 is not set -CONFIG_MTD_CFI_I4=y -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_AMDSTD is not set -# CONFIG_MTD_SHARP is not set -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_JEDEC is not set - -# -# Mapping drivers for chip access -# -# CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_SUN_UFLASH is not set -# CONFIG_MTD_NORA is not set -# CONFIG_MTD_PNC2000 is not set -# CONFIG_MTD_RPXLITE is not set -# CONFIG_MTD_TQM8XXL is not set -# CONFIG_MTD_SC520CDP is not set -# CONFIG_MTD_NETSC520 is not set -# CONFIG_MTD_SBC_GXX is not set -# CONFIG_MTD_ELAN_104NC is not set -CONFIG_MTD_SA1100=y -# CONFIG_MTD_SA1100_REDBOOT_PARTITIONS is not set -# CONFIG_MTD_SA1100_BOOTLDR_PARTITIONS is not set -# CONFIG_MTD_DC21285 is not set -# CONFIG_MTD_IQ80310 is not set -# CONFIG_MTD_DBOX2 is not set -# CONFIG_MTD_CSTM_MIPS_IXX is not set -# CONFIG_MTD_CFI_FLAGADM is not set -# CONFIG_MTD_ARM_INTEGRATOR is not set -# CONFIG_MTD_SOLUTIONENGINE is not set -# CONFIG_MTD_MIXMEM is not set -# CONFIG_MTD_OCTAGON is not set -# CONFIG_MTD_VMAX is not set -# CONFIG_MTD_OCELOT is not set -# CONFIG_MTD_L440GX is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_LART is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLKMTD is not set -# CONFIG_MTD_DOC1000 is not set -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOCPROBE is not set - -# -# NAND Flash Device Drivers -# -# CONFIG_MTD_NAND is not set - -# -# Plug and Play configuration -# -# CONFIG_PNP is not set -# CONFIG_ISAPNP is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_XD is not set -# CONFIG_PARIDE is not set -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_BLK_DEV_DAC960 is not set -CONFIG_BLK_DEV_LOOP=y -# CONFIG_BLK_DEV_NBD is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=16384 -CONFIG_BLK_DEV_INITRD=y - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set -# CONFIG_BLK_DEV_MD is not set -# CONFIG_MD_LINEAR is not set -# CONFIG_MD_RAID0 is not set -# CONFIG_MD_RAID1 is not set -# CONFIG_MD_RAID5 is not set -# CONFIG_BLK_DEV_LVM is not set - -# -# Networking options -# -CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set -# CONFIG_NETLINK is not set -# CONFIG_NETFILTER is not set -# CONFIG_FILTER is not set -CONFIG_UNIX=y -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -# CONFIG_IP_PNP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_INET_ECN is not set -# CONFIG_SYN_COOKIES is not set -# CONFIG_IPV6 is not set -# CONFIG_KHTTPD is not set -# CONFIG_ATM is not set -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_LLC is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set - -# -# Ethernet (10 or 100Mbit) -# -CONFIG_NET_ETHERNET=y -# CONFIG_SUNLANCE is not set -# CONFIG_SUNBMAC is not set -# CONFIG_SUNQE is not set -# CONFIG_SUNLANCE is not set -# CONFIG_SUNGEM is not set -# CONFIG_NET_VENDOR_3COM is not set -# CONFIG_LANCE is not set -CONFIG_NET_VENDOR_SMC=y -# CONFIG_WD80x3 is not set -# CONFIG_ULTRAMCA is not set -# CONFIG_ULTRA is not set -# CONFIG_ULTRA32 is not set -CONFIG_SMC9194=y -# CONFIG_NET_VENDOR_RACAL is not set -# CONFIG_NET_ISA is not set -# CONFIG_NET_PCI is not set -# CONFIG_NET_POCKET is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_ACENIC is not set -# CONFIG_ACENIC_OMIT_TIGON_I is not set -# CONFIG_MYRI_SBUS is not set -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -# CONFIG_SK98LIN is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PLIP is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set - -# -# Token Ring devices -# -# CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# PCMCIA network device support -# -CONFIG_NET_PCMCIA=y -# CONFIG_PCMCIA_3C589 is not set -# CONFIG_PCMCIA_3C574 is not set -# CONFIG_PCMCIA_FMVJ18X is not set -CONFIG_PCMCIA_PCNET=y -# CONFIG_PCMCIA_NMCLAN is not set -# CONFIG_PCMCIA_SMC91C92 is not set -# CONFIG_PCMCIA_XIRC2PS is not set -# CONFIG_ARCNET_COM20020_CS is not set -# CONFIG_PCMCIA_IBMTR is not set -CONFIG_NET_PCMCIA_RADIO=y -# CONFIG_PCMCIA_RAYCS is not set -# CONFIG_PCMCIA_NETWAVE is not set -# CONFIG_PCMCIA_WAVELAN is not set -# CONFIG_AIRONET4500_CS is not set -CONFIG_PCMCIA_WVLAN=y - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# ATA/IDE/MFM/RLL support -# -CONFIG_IDE=m - -# -# IDE, ATA and ATAPI Block devices -# -CONFIG_BLK_DEV_IDE=m -# CONFIG_BLK_DEV_HD_IDE is not set -# CONFIG_BLK_DEV_HD is not set -CONFIG_BLK_DEV_IDEDISK=m -# CONFIG_IDEDISK_MULTI_MODE is not set -CONFIG_BLK_DEV_IDECS=m -# CONFIG_BLK_DEV_PANGOLIN is not set -# CONFIG_BLK_DEV_IDECD is not set -# CONFIG_BLK_DEV_IDETAPE is not set -# CONFIG_BLK_DEV_IDEFLOPPY is not set -# CONFIG_BLK_DEV_IDESCSI is not set -# CONFIG_BLK_DEV_CMD640 is not set -# CONFIG_BLK_DEV_CMD640_ENHANCED is not set -# CONFIG_BLK_DEV_ISAPNP is not set -# CONFIG_IDE_CHIPSETS is not set -# CONFIG_IDEDMA_AUTO is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# I2O device support -# -# CONFIG_I2O is not set -# CONFIG_I2O_BLOCK is not set -# CONFIG_I2O_LAN is not set -# CONFIG_I2O_SCSI is not set -# CONFIG_I2O_PROC is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Input core support -# -# CONFIG_INPUT is not set - -# -# Character devices -# -CONFIG_VT=y -# CONFIG_VT_CONSOLE is not set -# CONFIG_SERIAL is not set -# CONFIG_SERIAL_EXTENDED is not set -# CONFIG_SERIAL_NONSTANDARD is not set -# CONFIG_SERIAL_21285 is not set -# CONFIG_SERIAL_21285_OLD is not set -# CONFIG_SERIAL_21285_CONSOLE is not set -# CONFIG_SERIAL_AMBA is not set -# CONFIG_SERIAL_AMBA_CONSOLE is not set -# CONFIG_SERIAL_CLPS711X is not set -# CONFIG_SERIAL_CLPS711X_CONSOLE is not set -CONFIG_SERIAL_SA1100=y -CONFIG_SERIAL_SA1100_CONSOLE=y -CONFIG_SA1100_DEFAULT_BAUDRATE=115200 -# CONFIG_SERIAL_8250 is not set -# CONFIG_SERIAL_8250_CONSOLE is not set -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=32 -# CONFIG_UCB1200 is not set -# CONFIG_TOUCHSCREEN_UCB1200 is not set -# CONFIG_AUDIO_UCB1200 is not set -# CONFIG_ADC_UCB1200 is not set -# CONFIG_TOUCHSCREEN_BITSY is not set -CONFIG_PROFILER=y -# CONFIG_PFS168_SPI is not set -# CONFIG_PFS168_DTMF is not set -# CONFIG_PFS168_MISC is not set - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -# CONFIG_MOUSE is not set - -# -# Joysticks -# -# CONFIG_JOYSTICK is not set -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -# CONFIG_INTEL_RNG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -CONFIG_SA1100_RTC=y -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set - -# -# PCMCIA character devices -# - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set -# CONFIG_REISERFS_FS is not set -# CONFIG_REISERFS_CHECK is not set -# CONFIG_ADFS_FS is not set -# CONFIG_ADFS_FS_RW is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BFS_FS is not set -CONFIG_FAT_FS=y -CONFIG_MSDOS_FS=y -# CONFIG_UMSDOS_FS is not set -CONFIG_VFAT_FS=y -# CONFIG_EFS_FS is not set -CONFIG_JFFS_FS=y -CONFIG_JFFS_FS_VERBOSE=0 -# CONFIG_JFFS2_FS is not set -CONFIG_CRAMFS=y -# CONFIG_TMPFS is not set -CONFIG_RAMFS=y -# CONFIG_ISO9660_FS is not set -# CONFIG_JOLIET is not set -# CONFIG_MINIX_FS is not set -# CONFIG_VXFS_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS_DEBUG is not set -# CONFIG_NTFS_RW is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -# CONFIG_DEVFS_MOUNT is not set -# CONFIG_DEVFS_DEBUG is not set -CONFIG_DEVPTS_FS=y -# CONFIG_QNX4FS_FS is not set -# CONFIG_QNX4FS_RW is not set -# CONFIG_ROMFS_FS is not set -CONFIG_EXT2_FS=y -# CONFIG_SYSV_FS is not set -# CONFIG_UDF_FS is not set -# CONFIG_UDF_RW is not set -# CONFIG_UFS_FS is not set -# CONFIG_UFS_FS_WRITE is not set - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -# CONFIG_NFS_FS is not set -# CONFIG_NFS_V3 is not set -# CONFIG_ROOT_NFS is not set -# CONFIG_NFSD is not set -# CONFIG_NFSD_V3 is not set -# CONFIG_SUNRPC is not set -# CONFIG_LOCKD is not set -# CONFIG_SMB_FS is not set -# CONFIG_NCP_FS is not set -# CONFIG_NCPFS_PACKET_SIGNING is not set -# CONFIG_NCPFS_IOCTL_LOCKING is not set -# CONFIG_NCPFS_STRONG is not set -# CONFIG_NCPFS_NFS_NS is not set -# CONFIG_NCPFS_OS2_NS is not set -# CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_NLS is not set -# CONFIG_NCPFS_EXTRAS is not set - -# -# Partition Types -# -# CONFIG_PARTITION_ADVANCED is not set -CONFIG_MSDOS_PARTITION=y -# CONFIG_SMB_NLS is not set -CONFIG_NLS=y - -# -# Native Language Support -# -CONFIG_NLS_DEFAULT="iso8859-1" -# CONFIG_NLS_CODEPAGE_437 is not set -# CONFIG_NLS_CODEPAGE_737 is not set -# CONFIG_NLS_CODEPAGE_775 is not set -# CONFIG_NLS_CODEPAGE_850 is not set -# CONFIG_NLS_CODEPAGE_852 is not set -# CONFIG_NLS_CODEPAGE_855 is not set -# CONFIG_NLS_CODEPAGE_857 is not set -# CONFIG_NLS_CODEPAGE_860 is not set -# CONFIG_NLS_CODEPAGE_861 is not set -# CONFIG_NLS_CODEPAGE_862 is not set -# CONFIG_NLS_CODEPAGE_863 is not set -# CONFIG_NLS_CODEPAGE_864 is not set -# CONFIG_NLS_CODEPAGE_865 is not set -# CONFIG_NLS_CODEPAGE_866 is not set -# CONFIG_NLS_CODEPAGE_869 is not set -# CONFIG_NLS_CODEPAGE_936 is not set -CONFIG_NLS_CODEPAGE_950=y -# CONFIG_NLS_CODEPAGE_932 is not set -# CONFIG_NLS_CODEPAGE_949 is not set -# CONFIG_NLS_CODEPAGE_874 is not set -# CONFIG_NLS_ISO8859_8 is not set -# CONFIG_NLS_CODEPAGE_1251 is not set -# CONFIG_NLS_ISO8859_1 is not set -# CONFIG_NLS_ISO8859_2 is not set -# CONFIG_NLS_ISO8859_3 is not set -# CONFIG_NLS_ISO8859_4 is not set -# CONFIG_NLS_ISO8859_5 is not set -# CONFIG_NLS_ISO8859_6 is not set -# CONFIG_NLS_ISO8859_7 is not set -# CONFIG_NLS_ISO8859_9 is not set -# CONFIG_NLS_ISO8859_13 is not set -# CONFIG_NLS_ISO8859_14 is not set -# CONFIG_NLS_ISO8859_15 is not set -# CONFIG_NLS_KOI8_R is not set -# CONFIG_NLS_KOI8_U is not set -# CONFIG_NLS_UTF8 is not set - -# -# Console drivers -# -CONFIG_PC_KEYMAP=y -# CONFIG_VGA_CONSOLE is not set - -# -# Frame-buffer support -# -CONFIG_FB=y -CONFIG_DUMMY_CONSOLE=y -# CONFIG_FB_ACORN is not set -# CONFIG_FB_CLPS711X is not set -# CONFIG_FB_CYBER2000 is not set -# CONFIG_FB_SA1100 is not set -CONFIG_FB_MQ200=y -# CONFIG_FB_ANAKIN is not set -# CONFIG_FB_E1355 is not set -# CONFIG_FB_VIRTUAL is not set -CONFIG_FBCON_ADVANCED=y -# CONFIG_FBCON_MFB is not set -CONFIG_FBCON_CFB2=y -CONFIG_FBCON_CFB4=y -CONFIG_FBCON_CFB8=y -CONFIG_FBCON_CFB16=y -# CONFIG_FBCON_CFB24 is not set -# CONFIG_FBCON_CFB32 is not set -# CONFIG_FBCON_AFB is not set -# CONFIG_FBCON_ILBM is not set -# CONFIG_FBCON_IPLAN2P2 is not set -# CONFIG_FBCON_IPLAN2P4 is not set -# CONFIG_FBCON_IPLAN2P8 is not set -# CONFIG_FBCON_MAC is not set -# CONFIG_FBCON_VGA_PLANES is not set -# CONFIG_FBCON_VGA is not set -# CONFIG_FBCON_HGA is not set -CONFIG_FBCON_FONTWIDTH8_ONLY=y -CONFIG_FBCON_FONTS=y -CONFIG_FONT_8x8=y -# CONFIG_FONT_8x16 is not set -# CONFIG_FONT_SUN8x16 is not set -# CONFIG_FONT_PEARL_8x8 is not set -# CONFIG_FONT_ACORN_8x8 is not set - -# -# Sound -# -CONFIG_SOUND=y -# CONFIG_SOUND_ASSABET_UDA1341 is not set -CONFIG_SOUND_PANGOLIN_UDA1341=y -# CONFIG_SOUND_BITSY_UDA1341 is not set -# CONFIG_SOUND_SA1111_UDA1341 is not set -# CONFIG_SOUND_SA1100SSP is not set -# CONFIG_SOUND_CMPCI is not set -# CONFIG_SOUND_EMU10K1 is not set -# CONFIG_SOUND_FUSION is not set -# CONFIG_SOUND_CS4281 is not set -# CONFIG_SOUND_ES1370 is not set -# CONFIG_SOUND_ES1371 is not set -# CONFIG_SOUND_ESSSOLO1 is not set -# CONFIG_SOUND_MAESTRO is not set -# CONFIG_SOUND_MAESTRO3 is not set -# CONFIG_SOUND_ICH is not set -# CONFIG_SOUND_SONICVIBES is not set -# CONFIG_SOUND_TRIDENT is not set -# CONFIG_SOUND_MSNDCLAS is not set -# CONFIG_SOUND_MSNDPIN is not set -# CONFIG_SOUND_VIA82CXXX is not set -# CONFIG_MIDI_VIA82CXXX is not set -# CONFIG_SOUND_OSS is not set -# CONFIG_SOUND_TVMIXER is not set - -# -# USB support -# -# CONFIG_USB is not set - -# -# Bluetooth support -# -# CONFIG_BT is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_ERRORS=y -CONFIG_DEBUG_USER=y -CONFIG_DEBUG_INFO=y -# CONFIG_MAGIC_SYSRQ is not set -# CONFIG_NO_PGT_CACHE is not set -# CONFIG_DEBUG_LL is not set -# CONFIG_DEBUG_DC21285_PORT is not set -# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -prauN linux-2.6.0-test5/arch/arm/def-configs/pfs168_mqtft wli-2.6.0-test5-bk12-25/arch/arm/def-configs/pfs168_mqtft --- linux-2.6.0-test5/arch/arm/def-configs/pfs168_mqtft 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/pfs168_mqtft 1969-12-31 16:00:00.000000000 -0800 @@ -1,782 +0,0 @@ -# -# Automatically generated make config: don't edit -# -CONFIG_ARM=y -# CONFIG_EISA is not set -# CONFIG_SBUS is not set -# CONFIG_MCA is not set -CONFIG_UID16=y - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -# CONFIG_OBSOLETE is not set - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODVERSIONS is not set -# CONFIG_KMOD is not set - -# -# System Type -# -# CONFIG_ARCH_ARCA5K is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_RPC is not set -CONFIG_ARCH_SA1100=y -# CONFIG_ARCH_CLPS711X is not set - -# -# Archimedes/A5000 Implementations -# - -# -# Archimedes/A5000 Implementations (select only ONE) -# -# CONFIG_ARCH_ARC is not set -# CONFIG_ARCH_A5K is not set - -# -# Footbridge Implementations -# -# CONFIG_ARCH_CATS is not set -# CONFIG_ARCH_PERSONAL_SERVER is not set -# CONFIG_ARCH_EBSA285_ADDIN is not set -# CONFIG_ARCH_EBSA285_HOST is not set -# CONFIG_ARCH_NETWINDER is not set - -# -# SA11x0 Implementations -# -# CONFIG_SA1100_ASSABET is not set -# CONFIG_ASSABET_NEPONSET is not set -# CONFIG_SA1100_BRUTUS is not set -# CONFIG_SA1100_CERF is not set -# CONFIG_SA1100_BITSY is not set -# CONFIG_SA1100_EXTENEX1 is not set -# CONFIG_SA1100_FREEBIRD is not set -# CONFIG_SA1100_GRAPHICSCLIENT is not set -# CONFIG_SA1100_HUW_WEBPANEL is not set -# CONFIG_SA1100_LART is not set -# CONFIG_SA1100_PLEB is not set -# CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_PANGOLIN is not set -# CONFIG_SA1100_SHERMAN is not set -# CONFIG_SA1100_VICTOR is not set -# CONFIG_SA1100_XP860 is not set -# CONFIG_SA1100_YOPY is not set -CONFIG_SA1100_PFS168=y -CONFIG_SA1111=y -CONFIG_SA1100_USB=m -CONFIG_SA1100_USB_NETLINK=m -CONFIG_SA1100_USB_CHAR=m -CONFIG_SA1100_FREQUENCY_SCALE=m -# CONFIG_SA1100_VOLTAGE_SCALE is not set - -# -# CLPS711X/EP721X Implementations -# -# CONFIG_ARCH_P720T is not set -# CONFIG_ARCH_ACORN is not set -# CONFIG_FOOTBRIDGE is not set -# CONFIG_FOOTBRIDGE_HOST is not set -# CONFIG_FOOTBRIDGE_ADDIN is not set -CONFIG_CPU_32=y -# CONFIG_CPU_26 is not set - -# -# Processor Type -# -# CONFIG_CPU_32v3 is not set -CONFIG_CPU_32v4=y -# CONFIG_CPU_ARM610 is not set -# CONFIG_CPU_ARM710 is not set -# CONFIG_CPU_ARM720T is not set -# CONFIG_CPU_ARM920T is not set -# CONFIG_CPU_ARM1020 is not set -# CONFIG_CPU_SA110 is not set -CONFIG_CPU_SA1100=y -CONFIG_DISCONTIGMEM=y - -# -# General setup -# - -# -# Please ensure that you have read the help on the next option -# -# CONFIG_ANGELBOOT is not set -# CONFIG_PCI is not set -# CONFIG_ISA is not set -# CONFIG_ISA_DMA is not set -CONFIG_HOTPLUG=y - -# -# PCMCIA/CardBus support -# -CONFIG_PCMCIA=m -# CONFIG_I82365 is not set -# CONFIG_TCIC is not set -# CONFIG_PCMCIA_CLPS6700 is not set -CONFIG_PCMCIA_SA1100=m -CONFIG_NET=y -CONFIG_SYSVIPC=y -# CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_SYSCTL=y -CONFIG_FPE_NWFPE=y -# CONFIG_FPE_FASTFPE is not set -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -# CONFIG_BINFMT_AOUT is not set -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -# CONFIG_PM is not set -# CONFIG_ARTHUR is not set -CONFIG_CMDLINE="root=/dev/nfs mem=16M" -CONFIG_LEDS=y -CONFIG_LEDS_TIMER=y -CONFIG_LEDS_CPU=y -CONFIG_ALIGNMENT_TRAP=y -CONFIG_UCB1200=y - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Memory Technology Devices (MTD) -# -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC1000 is not set -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOCPROBE is not set - -# -# RAM/ROM Device Drivers -# -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_MTDRAM is not set - -# -# Linearly Mapped Flash Device Drivers -# -CONFIG_MTD_CFI=y -# CONFIG_MTD_CFI_GEOMETRY is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_AMDSTD is not set -# CONFIG_MTD_SHARP is not set -# CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_NORA is not set -# CONFIG_MTD_PNC2000 is not set -# CONFIG_MTD_RPXLITE is not set -# CONFIG_MTD_SC520CDP is not set -# CONFIG_MTD_SBC_MEDIAGX is not set -# CONFIG_MTD_ELAN_104NC is not set -CONFIG_MTD_SA1100=y -# CONFIG_MTD_DC21285 is not set -# CONFIG_MTD_CSTM_CFI_JEDEC is not set -# CONFIG_MTD_JEDEC is not set -# CONFIG_MTD_MIXMEM is not set -# CONFIG_MTD_OCTAGON is not set -# CONFIG_MTD_VMAX is not set - -# -# NAND Flash Device Drivers -# -# CONFIG_MTD_NAND is not set -# CONFIG_MTD_NAND_SPIA is not set - -# -# User Modules And Translation Layers -# -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -# CONFIG_NFTL is not set - -# -# Plug and Play configuration -# -# CONFIG_PNP is not set -# CONFIG_ISAPNP is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_XD is not set -# CONFIG_PARIDE is not set -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_BLK_DEV_DAC960 is not set -# CONFIG_BLK_DEV_LOOP is not set -# CONFIG_BLK_DEV_NBD is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=4096 -CONFIG_BLK_DEV_INITRD=y - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set -# CONFIG_BLK_DEV_MD is not set -# CONFIG_MD_LINEAR is not set -# CONFIG_MD_RAID0 is not set -# CONFIG_MD_RAID1 is not set -# CONFIG_MD_RAID5 is not set -# CONFIG_BLK_DEV_LVM is not set - -# -# Networking options -# -CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set -# CONFIG_NETLINK is not set -# CONFIG_NETFILTER is not set -# CONFIG_FILTER is not set -CONFIG_UNIX=y -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -CONFIG_IP_PNP=y -CONFIG_IP_PNP_BOOTP=y -# CONFIG_IP_PNP_RARP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_INET_ECN is not set -# CONFIG_SYN_COOKIES is not set -# CONFIG_IPV6 is not set -# CONFIG_KHTTPD is not set -# CONFIG_ATM is not set - -# -# -# -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_LLC is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set -# CONFIG_NET_SB1000 is not set - -# -# Ethernet (10 or 100Mbit) -# -CONFIG_NET_ETHERNET=y -# CONFIG_NET_VENDOR_3COM is not set -# CONFIG_LANCE is not set -CONFIG_NET_VENDOR_SMC=y -# CONFIG_WD80x3 is not set -# CONFIG_ULTRA is not set -# CONFIG_ULTRA32 is not set -CONFIG_SMC9194=y -# CONFIG_NET_VENDOR_RACAL is not set -# CONFIG_AT1700 is not set -# CONFIG_DEPCA is not set -# CONFIG_NET_ISA is not set -# CONFIG_NET_PCI is not set -# CONFIG_NET_POCKET is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_ACENIC is not set -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -# CONFIG_SK98LIN is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -CONFIG_PPP=m -# CONFIG_PPP_MULTILINK is not set -CONFIG_PPP_ASYNC=m -CONFIG_PPP_SYNC_TTY=m -CONFIG_PPP_DEFLATE=m -# CONFIG_PPP_BSDCOMP is not set -# CONFIG_PPPOE is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set - -# -# Token Ring devices -# -# CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# PCMCIA network device support -# -CONFIG_NET_PCMCIA=y -# CONFIG_PCMCIA_3C589 is not set -# CONFIG_PCMCIA_3C574 is not set -# CONFIG_PCMCIA_FMVJ18X is not set -CONFIG_PCMCIA_PCNET=m -# CONFIG_PCMCIA_NMCLAN is not set -CONFIG_PCMCIA_SMC91C92=m -# CONFIG_PCMCIA_XIRC2PS is not set -# CONFIG_ARCNET_COM20020_CS is not set -# CONFIG_PCMCIA_IBMTR is not set -# CONFIG_NET_PCMCIA_RADIO is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -CONFIG_IRDA=m - -# -# IrDA protocols -# -CONFIG_IRLAN=m -CONFIG_IRNET=m -CONFIG_IRCOMM=m -CONFIG_IRDA_ULTRA=y -# CONFIG_IRDA_OPTIONS is not set - -# -# Infrared-port device drivers -# - -# -# SIR device drivers -# -CONFIG_IRTTY_SIR=m -CONFIG_IRPORT_SIR=m - -# -# FIR device drivers -# -# CONFIG_NSC_FIR is not set -# CONFIG_WINBOND_FIR is not set -# CONFIG_TOSHIBA_FIR is not set -# CONFIG_SMC_IRCC_FIR is not set -CONFIG_SA1100_FIR=m - -# -# Dongle support -# -# CONFIG_DONGLE is not set - -# -# ATA/IDE/MFM/RLL support -# -CONFIG_IDE=m - -# -# IDE, ATA and ATAPI Block devices -# -CONFIG_BLK_DEV_IDE=m - -# -# Please see Documentation/ide.txt for help/info on IDE drives -# -# CONFIG_BLK_DEV_HD_IDE is not set -# CONFIG_BLK_DEV_HD is not set -CONFIG_BLK_DEV_IDEDISK=m -# CONFIG_IDEDISK_MULTI_MODE is not set -CONFIG_BLK_DEV_IDECS=m -# CONFIG_BLK_DEV_IDECD is not set -# CONFIG_BLK_DEV_IDETAPE is not set -# CONFIG_BLK_DEV_IDEFLOPPY is not set -# CONFIG_BLK_DEV_IDESCSI is not set - -# -# IDE chipset support/bugfixes -# -# CONFIG_BLK_DEV_CMD640 is not set -# CONFIG_BLK_DEV_CMD640_ENHANCED is not set -# CONFIG_BLK_DEV_ISAPNP is not set -# CONFIG_IDE_CHIPSETS is not set -# CONFIG_IDEDMA_AUTO is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# I2O device support -# -# CONFIG_I2O is not set -# CONFIG_I2O_BLOCK is not set -# CONFIG_I2O_LAN is not set -# CONFIG_I2O_SCSI is not set -# CONFIG_I2O_PROC is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Input core support -# -CONFIG_INPUT=y -CONFIG_INPUT_KEYBDEV=y -CONFIG_INPUT_MOUSEDEV=y -CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 -CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 -# CONFIG_INPUT_JOYDEV is not set -# CONFIG_INPUT_EVDEV is not set - -# -# Character devices -# -CONFIG_VT=y -# CONFIG_VT_CONSOLE is not set -CONFIG_SERIAL=y -# CONFIG_SERIAL_CONSOLE is not set -# CONFIG_SERIAL_EXTENDED is not set -# CONFIG_SERIAL_NONSTANDARD is not set -CONFIG_SERIAL_SA1100=y -CONFIG_SERIAL_SA1100_CONSOLE=y -CONFIG_SA1100_DEFAULT_BAUDRATE=115200 -CONFIG_TOUCHSCREEN_UCB1200=y -# CONFIG_TOUCHSCREEN_BITSY is not set -# CONFIG_PROFILER is not set -# CONFIG_PFS168_SPI is not set -CONFIG_PFS168_DTMF=y -CONFIG_PFS168_MISC=y -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=32 - -# -# I2C support -# -CONFIG_I2C=y -CONFIG_I2C_ALGOBIT=y -# CONFIG_I2C_PHILIPSPAR is not set -# CONFIG_I2C_ELV is not set -# CONFIG_I2C_VELLEMAN is not set -# CONFIG_I2C_ASSABET is not set -CONFIG_I2C_PFS168=y -# CONFIG_I2C_ALGOPCF is not set -CONFIG_I2C_CHARDEV=y -CONFIG_I2C_SENSORS=y -CONFIG_I2C_EEPROM=y -CONFIG_I2C_EEPROM=y -CONFIG_I2C_M41T11=y -CONFIG_I2C_X9221=y -CONFIG_I2C_PCF8574=y - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -CONFIG_MOUSE=y -CONFIG_PSMOUSE=y -# CONFIG_82C710_MOUSE is not set -# CONFIG_PC110_PAD is not set - -# -# Joysticks -# -# CONFIG_JOYSTICK is not set - -# -# Input core support is needed for joysticks -# -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -# CONFIG_INTEL_RNG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -# CONFIG_SA1100_RTC is not set -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set -CONFIG_PCMCIA_SERIAL=m - -# -# PCMCIA character device support -# -# CONFIG_PCMCIA_SERIAL_CS is not set - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set -# CONFIG_REISERFS_FS is not set -# CONFIG_REISERFS_CHECK is not set -# CONFIG_ADFS_FS is not set -# CONFIG_ADFS_FS_RW is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_FAT_FS is not set -# CONFIG_MSDOS_FS is not set -# CONFIG_UMSDOS_FS is not set -# CONFIG_VFAT_FS is not set -# CONFIG_EFS_FS is not set -CONFIG_JFFS_FS=y -CONFIG_JFFS_FS_VERBOSE=0 -# CONFIG_JFFS2_FS is not set -# CONFIG_CRAMFS is not set -# CONFIG_RAMFS is not set -# CONFIG_ISO9660_FS is not set -# CONFIG_JOLIET is not set -# CONFIG_MINIX_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS_DEBUG is not set -# CONFIG_NTFS_RW is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -# CONFIG_DEVFS_MOUNT is not set -# CONFIG_DEVFS_DEBUG is not set -CONFIG_DEVPTS_FS=y -# CONFIG_QNX4FS_FS is not set -# CONFIG_QNX4FS_RW is not set -# CONFIG_ROMFS_FS is not set -CONFIG_EXT2_FS=y -# CONFIG_SYSV_FS is not set -# CONFIG_SYSV_FS_WRITE is not set -# CONFIG_UDF_FS is not set -# CONFIG_UDF_RW is not set -# CONFIG_UFS_FS is not set -# CONFIG_UFS_FS_WRITE is not set - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -CONFIG_NFS_FS=y -# CONFIG_NFS_V3 is not set -CONFIG_ROOT_NFS=y -# CONFIG_NFSD is not set -# CONFIG_NFSD_V3 is not set -CONFIG_SUNRPC=y -CONFIG_LOCKD=y -# CONFIG_SMB_FS is not set -# CONFIG_NCP_FS is not set -# CONFIG_NCPFS_PACKET_SIGNING is not set -# CONFIG_NCPFS_IOCTL_LOCKING is not set -# CONFIG_NCPFS_STRONG is not set -# CONFIG_NCPFS_NFS_NS is not set -# CONFIG_NCPFS_OS2_NS is not set -# CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_NLS is not set -# CONFIG_NCPFS_EXTRAS is not set - -# -# Partition Types -# -# CONFIG_PARTITION_ADVANCED is not set -CONFIG_MSDOS_PARTITION=y -# CONFIG_SMB_NLS is not set -# CONFIG_NLS is not set - -# -# Console drivers -# -CONFIG_PC_KEYMAP=y -# CONFIG_VGA_CONSOLE is not set -CONFIG_FB=y - -# -# Frame-buffer support -# -CONFIG_FB=y -CONFIG_DUMMY_CONSOLE=y -# CONFIG_FB_ACORN is not set -# CONFIG_FB_CLPS711X is not set -# CONFIG_FB_CYBER2000 is not set -# CONFIG_FB_SA1100 is not set -CONFIG_FB_MQ200=y -# CONFIG_PFS168_MQVGA is not set -CONFIG_PFS168_MQTFT=y -# CONFIG_FB_VIRTUAL is not set -CONFIG_FBCON_ADVANCED=y -# CONFIG_FBCON_MFB is not set -# CONFIG_FBCON_CFB2 is not set -# CONFIG_FBCON_CFB4 is not set -CONFIG_FBCON_CFB8=y -CONFIG_FBCON_CFB16=y -CONFIG_FBCON_CFB24=y -CONFIG_FBCON_CFB32=y -# CONFIG_FBCON_AFB is not set -# CONFIG_FBCON_ILBM is not set -# CONFIG_FBCON_IPLAN2P2 is not set -# CONFIG_FBCON_IPLAN2P4 is not set -# CONFIG_FBCON_IPLAN2P8 is not set -# CONFIG_FBCON_MAC is not set -# CONFIG_FBCON_VGA_PLANES is not set -# CONFIG_FBCON_VGA is not set -# CONFIG_FBCON_HGA is not set -CONFIG_FBCON_FONTWIDTH8_ONLY=y -CONFIG_FBCON_FONTS=y -CONFIG_FONT_8x8=y -# CONFIG_FONT_8x16 is not set -# CONFIG_FONT_SUN8x16 is not set -# CONFIG_FONT_PEARL_8x8 is not set -# CONFIG_FONT_ACORN_8x8 is not set - -# -# Sound -# -# CONFIG_SOUND is not set - -# -# USB support -# -CONFIG_USB=m -# CONFIG_USB_DEBUG is not set - -# -# Miscellaneous USB options -# -CONFIG_USB_DEVICEFS=y -# CONFIG_USB_BANDWIDTH is not set - -# -# USB Controllers -# -# CONFIG_USB_UHCI is not set -# CONFIG_USB_UHCI_ALT is not set -CONFIG_USB_OHCI=m - -# -# USB Device Class drivers -# -# CONFIG_USB_AUDIO is not set -# CONFIG_USB_BLUETOOTH is not set -# CONFIG_USB_STORAGE is not set -# CONFIG_USB_ACM is not set -# CONFIG_USB_PRINTER is not set - -# -# USB Human Interface Devices (HID) -# -CONFIG_USB_HID=m -CONFIG_USB_KBD=m -CONFIG_USB_MOUSE=m -# CONFIG_USB_WACOM is not set - -# -# USB Imaging devices -# -# CONFIG_USB_DC2XX is not set -# CONFIG_USB_MDC800 is not set -# CONFIG_USB_SCANNER is not set -# CONFIG_USB_MICROTEK is not set - -# -# USB Multimedia devices -# -# CONFIG_USB_IBMCAM is not set -# CONFIG_USB_OV511 is not set -# CONFIG_USB_DSBR is not set -# CONFIG_USB_DABUSB is not set - -# -# USB Network adaptors -# -# CONFIG_USB_PLUSB is not set -# CONFIG_USB_PEGASUS is not set -# CONFIG_USB_NET1080 is not set - -# -# USB port drivers -# -# CONFIG_USB_USS720 is not set - -# -# USB Serial Converter support -# -# CONFIG_USB_SERIAL is not set - -# -# USB misc drivers -# -# CONFIG_USB_RIO500 is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_ERRORS=y -CONFIG_DEBUG_USER=y -CONFIG_DEBUG_INFO=y -CONFIG_MAGIC_SYSRQ=y -# CONFIG_NO_PGT_CACHE is not set -CONFIG_DEBUG_LL=y -# CONFIG_DEBUG_DC21285_PORT is not set diff -prauN linux-2.6.0-test5/arch/arm/def-configs/pfs168_mqvga wli-2.6.0-test5-bk12-25/arch/arm/def-configs/pfs168_mqvga --- linux-2.6.0-test5/arch/arm/def-configs/pfs168_mqvga 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/pfs168_mqvga 1969-12-31 16:00:00.000000000 -0800 @@ -1,782 +0,0 @@ -# -# Automatically generated make config: don't edit -# -CONFIG_ARM=y -# CONFIG_EISA is not set -# CONFIG_SBUS is not set -# CONFIG_MCA is not set -CONFIG_UID16=y - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -# CONFIG_OBSOLETE is not set - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODVERSIONS is not set -# CONFIG_KMOD is not set - -# -# System Type -# -# CONFIG_ARCH_ARCA5K is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_RPC is not set -CONFIG_ARCH_SA1100=y -# CONFIG_ARCH_CLPS711X is not set - -# -# Archimedes/A5000 Implementations -# - -# -# Archimedes/A5000 Implementations (select only ONE) -# -# CONFIG_ARCH_ARC is not set -# CONFIG_ARCH_A5K is not set - -# -# Footbridge Implementations -# -# CONFIG_ARCH_CATS is not set -# CONFIG_ARCH_PERSONAL_SERVER is not set -# CONFIG_ARCH_EBSA285_ADDIN is not set -# CONFIG_ARCH_EBSA285_HOST is not set -# CONFIG_ARCH_NETWINDER is not set - -# -# SA11x0 Implementations -# -# CONFIG_SA1100_ASSABET is not set -# CONFIG_ASSABET_NEPONSET is not set -# CONFIG_SA1100_BRUTUS is not set -# CONFIG_SA1100_CERF is not set -# CONFIG_SA1100_BITSY is not set -# CONFIG_SA1100_EXTENEX1 is not set -# CONFIG_SA1100_FREEBIRD is not set -# CONFIG_SA1100_GRAPHICSCLIENT is not set -# CONFIG_SA1100_HUW_WEBPANEL is not set -# CONFIG_SA1100_LART is not set -# CONFIG_SA1100_PLEB is not set -# CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_PANGOLIN is not set -# CONFIG_SA1100_SHERMAN is not set -# CONFIG_SA1100_VICTOR is not set -# CONFIG_SA1100_XP860 is not set -# CONFIG_SA1100_YOPY is not set -CONFIG_SA1100_PFS168=y -CONFIG_SA1111=y -CONFIG_SA1100_USB=m -CONFIG_SA1100_USB_NETLINK=m -CONFIG_SA1100_USB_CHAR=m -CONFIG_SA1100_FREQUENCY_SCALE=m -# CONFIG_SA1100_VOLTAGE_SCALE is not set - -# -# CLPS711X/EP721X Implementations -# -# CONFIG_ARCH_P720T is not set -# CONFIG_ARCH_ACORN is not set -# CONFIG_FOOTBRIDGE is not set -# CONFIG_FOOTBRIDGE_HOST is not set -# CONFIG_FOOTBRIDGE_ADDIN is not set -CONFIG_CPU_32=y -# CONFIG_CPU_26 is not set - -# -# Processor Type -# -# CONFIG_CPU_32v3 is not set -CONFIG_CPU_32v4=y -# CONFIG_CPU_ARM610 is not set -# CONFIG_CPU_ARM710 is not set -# CONFIG_CPU_ARM720T is not set -# CONFIG_CPU_ARM920T is not set -# CONFIG_CPU_ARM1020 is not set -# CONFIG_CPU_SA110 is not set -CONFIG_CPU_SA1100=y -CONFIG_DISCONTIGMEM=y - -# -# General setup -# - -# -# Please ensure that you have read the help on the next option -# -# CONFIG_ANGELBOOT is not set -# CONFIG_PCI is not set -# CONFIG_ISA is not set -# CONFIG_ISA_DMA is not set -CONFIG_HOTPLUG=y - -# -# PCMCIA/CardBus support -# -CONFIG_PCMCIA=m -# CONFIG_I82365 is not set -# CONFIG_TCIC is not set -# CONFIG_PCMCIA_CLPS6700 is not set -CONFIG_PCMCIA_SA1100=m -CONFIG_NET=y -CONFIG_SYSVIPC=y -# CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_SYSCTL=y -CONFIG_FPE_NWFPE=y -# CONFIG_FPE_FASTFPE is not set -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -# CONFIG_BINFMT_AOUT is not set -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -# CONFIG_PM is not set -# CONFIG_ARTHUR is not set -CONFIG_CMDLINE="root=/dev/nfs mem=16M" -CONFIG_LEDS=y -CONFIG_LEDS_TIMER=y -CONFIG_LEDS_CPU=y -CONFIG_ALIGNMENT_TRAP=y -CONFIG_UCB1200=y - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Memory Technology Devices (MTD) -# -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC1000 is not set -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOCPROBE is not set - -# -# RAM/ROM Device Drivers -# -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_MTDRAM is not set - -# -# Linearly Mapped Flash Device Drivers -# -CONFIG_MTD_CFI=y -# CONFIG_MTD_CFI_GEOMETRY is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_AMDSTD is not set -# CONFIG_MTD_SHARP is not set -# CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_NORA is not set -# CONFIG_MTD_PNC2000 is not set -# CONFIG_MTD_RPXLITE is not set -# CONFIG_MTD_SC520CDP is not set -# CONFIG_MTD_SBC_MEDIAGX is not set -# CONFIG_MTD_ELAN_104NC is not set -CONFIG_MTD_SA1100=y -# CONFIG_MTD_DC21285 is not set -# CONFIG_MTD_CSTM_CFI_JEDEC is not set -# CONFIG_MTD_JEDEC is not set -# CONFIG_MTD_MIXMEM is not set -# CONFIG_MTD_OCTAGON is not set -# CONFIG_MTD_VMAX is not set - -# -# NAND Flash Device Drivers -# -# CONFIG_MTD_NAND is not set -# CONFIG_MTD_NAND_SPIA is not set - -# -# User Modules And Translation Layers -# -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -# CONFIG_NFTL is not set - -# -# Plug and Play configuration -# -# CONFIG_PNP is not set -# CONFIG_ISAPNP is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_XD is not set -# CONFIG_PARIDE is not set -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_BLK_DEV_DAC960 is not set -# CONFIG_BLK_DEV_LOOP is not set -# CONFIG_BLK_DEV_NBD is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=4096 -CONFIG_BLK_DEV_INITRD=y - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set -# CONFIG_BLK_DEV_MD is not set -# CONFIG_MD_LINEAR is not set -# CONFIG_MD_RAID0 is not set -# CONFIG_MD_RAID1 is not set -# CONFIG_MD_RAID5 is not set -# CONFIG_BLK_DEV_LVM is not set - -# -# Networking options -# -CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set -# CONFIG_NETLINK is not set -# CONFIG_NETFILTER is not set -# CONFIG_FILTER is not set -CONFIG_UNIX=y -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -CONFIG_IP_PNP=y -CONFIG_IP_PNP_BOOTP=y -# CONFIG_IP_PNP_RARP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_INET_ECN is not set -# CONFIG_SYN_COOKIES is not set -# CONFIG_IPV6 is not set -# CONFIG_KHTTPD is not set -# CONFIG_ATM is not set - -# -# -# -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_LLC is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set -# CONFIG_NET_SB1000 is not set - -# -# Ethernet (10 or 100Mbit) -# -CONFIG_NET_ETHERNET=y -# CONFIG_NET_VENDOR_3COM is not set -# CONFIG_LANCE is not set -CONFIG_NET_VENDOR_SMC=y -# CONFIG_WD80x3 is not set -# CONFIG_ULTRA is not set -# CONFIG_ULTRA32 is not set -CONFIG_SMC9194=y -# CONFIG_NET_VENDOR_RACAL is not set -# CONFIG_AT1700 is not set -# CONFIG_DEPCA is not set -# CONFIG_NET_ISA is not set -# CONFIG_NET_PCI is not set -# CONFIG_NET_POCKET is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_ACENIC is not set -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -# CONFIG_SK98LIN is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -CONFIG_PPP=m -# CONFIG_PPP_MULTILINK is not set -CONFIG_PPP_ASYNC=m -CONFIG_PPP_SYNC_TTY=m -CONFIG_PPP_DEFLATE=m -# CONFIG_PPP_BSDCOMP is not set -# CONFIG_PPPOE is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set - -# -# Token Ring devices -# -# CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# PCMCIA network device support -# -CONFIG_NET_PCMCIA=y -# CONFIG_PCMCIA_3C589 is not set -# CONFIG_PCMCIA_3C574 is not set -# CONFIG_PCMCIA_FMVJ18X is not set -CONFIG_PCMCIA_PCNET=m -# CONFIG_PCMCIA_NMCLAN is not set -CONFIG_PCMCIA_SMC91C92=m -# CONFIG_PCMCIA_XIRC2PS is not set -# CONFIG_ARCNET_COM20020_CS is not set -# CONFIG_PCMCIA_IBMTR is not set -# CONFIG_NET_PCMCIA_RADIO is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -CONFIG_IRDA=m - -# -# IrDA protocols -# -CONFIG_IRLAN=m -CONFIG_IRNET=m -CONFIG_IRCOMM=m -CONFIG_IRDA_ULTRA=y -# CONFIG_IRDA_OPTIONS is not set - -# -# Infrared-port device drivers -# - -# -# SIR device drivers -# -CONFIG_IRTTY_SIR=m -CONFIG_IRPORT_SIR=m - -# -# FIR device drivers -# -# CONFIG_NSC_FIR is not set -# CONFIG_WINBOND_FIR is not set -# CONFIG_TOSHIBA_FIR is not set -# CONFIG_SMC_IRCC_FIR is not set -CONFIG_SA1100_FIR=m - -# -# Dongle support -# -# CONFIG_DONGLE is not set - -# -# ATA/IDE/MFM/RLL support -# -CONFIG_IDE=m - -# -# IDE, ATA and ATAPI Block devices -# -CONFIG_BLK_DEV_IDE=m - -# -# Please see Documentation/ide.txt for help/info on IDE drives -# -# CONFIG_BLK_DEV_HD_IDE is not set -# CONFIG_BLK_DEV_HD is not set -CONFIG_BLK_DEV_IDEDISK=m -# CONFIG_IDEDISK_MULTI_MODE is not set -CONFIG_BLK_DEV_IDECS=m -# CONFIG_BLK_DEV_IDECD is not set -# CONFIG_BLK_DEV_IDETAPE is not set -# CONFIG_BLK_DEV_IDEFLOPPY is not set -# CONFIG_BLK_DEV_IDESCSI is not set - -# -# IDE chipset support/bugfixes -# -# CONFIG_BLK_DEV_CMD640 is not set -# CONFIG_BLK_DEV_CMD640_ENHANCED is not set -# CONFIG_BLK_DEV_ISAPNP is not set -# CONFIG_IDE_CHIPSETS is not set -# CONFIG_IDEDMA_AUTO is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# I2O device support -# -# CONFIG_I2O is not set -# CONFIG_I2O_BLOCK is not set -# CONFIG_I2O_LAN is not set -# CONFIG_I2O_SCSI is not set -# CONFIG_I2O_PROC is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Input core support -# -CONFIG_INPUT=y -CONFIG_INPUT_KEYBDEV=y -CONFIG_INPUT_MOUSEDEV=y -CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 -CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 -# CONFIG_INPUT_JOYDEV is not set -# CONFIG_INPUT_EVDEV is not set - -# -# Character devices -# -CONFIG_VT=y -# CONFIG_VT_CONSOLE is not set -CONFIG_SERIAL=y -# CONFIG_SERIAL_CONSOLE is not set -# CONFIG_SERIAL_EXTENDED is not set -# CONFIG_SERIAL_NONSTANDARD is not set -CONFIG_SERIAL_SA1100=y -CONFIG_SERIAL_SA1100_CONSOLE=y -CONFIG_SA1100_DEFAULT_BAUDRATE=115200 -CONFIG_TOUCHSCREEN_UCB1200=y -# CONFIG_TOUCHSCREEN_BITSY is not set -# CONFIG_PROFILER is not set -# CONFIG_PFS168_SPI is not set -CONFIG_PFS168_DTMF=y -CONFIG_PFS168_MISC=y -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=32 - -# -# I2C support -# -CONFIG_I2C=y -CONFIG_I2C_ALGOBIT=y -# CONFIG_I2C_PHILIPSPAR is not set -# CONFIG_I2C_ELV is not set -# CONFIG_I2C_VELLEMAN is not set -# CONFIG_I2C_ASSABET is not set -CONFIG_I2C_PFS168=y -# CONFIG_I2C_ALGOPCF is not set -CONFIG_I2C_CHARDEV=y -CONFIG_I2C_SENSORS=y -CONFIG_I2C_EEPROM=y -CONFIG_I2C_EEPROM=y -CONFIG_I2C_M41T11=y -CONFIG_I2C_X9221=y -CONFIG_I2C_PCF8574=y - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -CONFIG_MOUSE=y -CONFIG_PSMOUSE=y -# CONFIG_82C710_MOUSE is not set -# CONFIG_PC110_PAD is not set - -# -# Joysticks -# -# CONFIG_JOYSTICK is not set - -# -# Input core support is needed for joysticks -# -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -# CONFIG_INTEL_RNG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -# CONFIG_SA1100_RTC is not set -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set -CONFIG_PCMCIA_SERIAL=m - -# -# PCMCIA character device support -# -# CONFIG_PCMCIA_SERIAL_CS is not set - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set -# CONFIG_REISERFS_FS is not set -# CONFIG_REISERFS_CHECK is not set -# CONFIG_ADFS_FS is not set -# CONFIG_ADFS_FS_RW is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_FAT_FS is not set -# CONFIG_MSDOS_FS is not set -# CONFIG_UMSDOS_FS is not set -# CONFIG_VFAT_FS is not set -# CONFIG_EFS_FS is not set -CONFIG_JFFS_FS=y -CONFIG_JFFS_FS_VERBOSE=0 -# CONFIG_JFFS2_FS is not set -# CONFIG_CRAMFS is not set -# CONFIG_RAMFS is not set -# CONFIG_ISO9660_FS is not set -# CONFIG_JOLIET is not set -# CONFIG_MINIX_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS_DEBUG is not set -# CONFIG_NTFS_RW is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -# CONFIG_DEVFS_MOUNT is not set -# CONFIG_DEVFS_DEBUG is not set -CONFIG_DEVPTS_FS=y -# CONFIG_QNX4FS_FS is not set -# CONFIG_QNX4FS_RW is not set -# CONFIG_ROMFS_FS is not set -CONFIG_EXT2_FS=y -# CONFIG_SYSV_FS is not set -# CONFIG_SYSV_FS_WRITE is not set -# CONFIG_UDF_FS is not set -# CONFIG_UDF_RW is not set -# CONFIG_UFS_FS is not set -# CONFIG_UFS_FS_WRITE is not set - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -CONFIG_NFS_FS=y -# CONFIG_NFS_V3 is not set -CONFIG_ROOT_NFS=y -# CONFIG_NFSD is not set -# CONFIG_NFSD_V3 is not set -CONFIG_SUNRPC=y -CONFIG_LOCKD=y -# CONFIG_SMB_FS is not set -# CONFIG_NCP_FS is not set -# CONFIG_NCPFS_PACKET_SIGNING is not set -# CONFIG_NCPFS_IOCTL_LOCKING is not set -# CONFIG_NCPFS_STRONG is not set -# CONFIG_NCPFS_NFS_NS is not set -# CONFIG_NCPFS_OS2_NS is not set -# CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_NLS is not set -# CONFIG_NCPFS_EXTRAS is not set - -# -# Partition Types -# -# CONFIG_PARTITION_ADVANCED is not set -CONFIG_MSDOS_PARTITION=y -# CONFIG_SMB_NLS is not set -# CONFIG_NLS is not set - -# -# Console drivers -# -CONFIG_PC_KEYMAP=y -# CONFIG_VGA_CONSOLE is not set -CONFIG_FB=y - -# -# Frame-buffer support -# -CONFIG_FB=y -CONFIG_DUMMY_CONSOLE=y -# CONFIG_FB_ACORN is not set -# CONFIG_FB_CLPS711X is not set -# CONFIG_FB_CYBER2000 is not set -# CONFIG_FB_SA1100 is not set -CONFIG_FB_MQ200=y -CONFIG_PFS168_MQVGA=y -# CONFIG_PFS168_MQTFT is not set -# CONFIG_FB_VIRTUAL is not set -CONFIG_FBCON_ADVANCED=y -# CONFIG_FBCON_MFB is not set -# CONFIG_FBCON_CFB2 is not set -# CONFIG_FBCON_CFB4 is not set -CONFIG_FBCON_CFB8=y -CONFIG_FBCON_CFB16=y -CONFIG_FBCON_CFB24=y -CONFIG_FBCON_CFB32=y -# CONFIG_FBCON_AFB is not set -# CONFIG_FBCON_ILBM is not set -# CONFIG_FBCON_IPLAN2P2 is not set -# CONFIG_FBCON_IPLAN2P4 is not set -# CONFIG_FBCON_IPLAN2P8 is not set -# CONFIG_FBCON_MAC is not set -# CONFIG_FBCON_VGA_PLANES is not set -# CONFIG_FBCON_VGA is not set -# CONFIG_FBCON_HGA is not set -CONFIG_FBCON_FONTWIDTH8_ONLY=y -CONFIG_FBCON_FONTS=y -CONFIG_FONT_8x8=y -# CONFIG_FONT_8x16 is not set -# CONFIG_FONT_SUN8x16 is not set -# CONFIG_FONT_PEARL_8x8 is not set -# CONFIG_FONT_ACORN_8x8 is not set - -# -# Sound -# -# CONFIG_SOUND is not set - -# -# USB support -# -CONFIG_USB=m -# CONFIG_USB_DEBUG is not set - -# -# Miscellaneous USB options -# -CONFIG_USB_DEVICEFS=y -# CONFIG_USB_BANDWIDTH is not set - -# -# USB Controllers -# -# CONFIG_USB_UHCI is not set -# CONFIG_USB_UHCI_ALT is not set -CONFIG_USB_OHCI=m - -# -# USB Device Class drivers -# -# CONFIG_USB_AUDIO is not set -# CONFIG_USB_BLUETOOTH is not set -# CONFIG_USB_STORAGE is not set -# CONFIG_USB_ACM is not set -# CONFIG_USB_PRINTER is not set - -# -# USB Human Interface Devices (HID) -# -CONFIG_USB_HID=m -CONFIG_USB_KBD=m -CONFIG_USB_MOUSE=m -# CONFIG_USB_WACOM is not set - -# -# USB Imaging devices -# -# CONFIG_USB_DC2XX is not set -# CONFIG_USB_MDC800 is not set -# CONFIG_USB_SCANNER is not set -# CONFIG_USB_MICROTEK is not set - -# -# USB Multimedia devices -# -# CONFIG_USB_IBMCAM is not set -# CONFIG_USB_OV511 is not set -# CONFIG_USB_DSBR is not set -# CONFIG_USB_DABUSB is not set - -# -# USB Network adaptors -# -# CONFIG_USB_PLUSB is not set -# CONFIG_USB_PEGASUS is not set -# CONFIG_USB_NET1080 is not set - -# -# USB port drivers -# -# CONFIG_USB_USS720 is not set - -# -# USB Serial Converter support -# -# CONFIG_USB_SERIAL is not set - -# -# USB misc drivers -# -# CONFIG_USB_RIO500 is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_ERRORS=y -CONFIG_DEBUG_USER=y -CONFIG_DEBUG_INFO=y -CONFIG_MAGIC_SYSRQ=y -# CONFIG_NO_PGT_CACHE is not set -CONFIG_DEBUG_LL=y -# CONFIG_DEBUG_DC21285_PORT is not set diff -prauN linux-2.6.0-test5/arch/arm/def-configs/pfs168_sastn wli-2.6.0-test5-bk12-25/arch/arm/def-configs/pfs168_sastn --- linux-2.6.0-test5/arch/arm/def-configs/pfs168_sastn 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/pfs168_sastn 1969-12-31 16:00:00.000000000 -0800 @@ -1,774 +0,0 @@ -# -# Automatically generated make config: don't edit -# -CONFIG_ARM=y -# CONFIG_EISA is not set -# CONFIG_SBUS is not set -# CONFIG_MCA is not set -CONFIG_UID16=y - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -# CONFIG_OBSOLETE is not set - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODVERSIONS is not set -# CONFIG_KMOD is not set - -# -# System Type -# -# CONFIG_ARCH_ARCA5K is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_RPC is not set -CONFIG_ARCH_SA1100=y -# CONFIG_ARCH_CLPS711X is not set - -# -# Archimedes/A5000 Implementations -# - -# -# Archimedes/A5000 Implementations (select only ONE) -# -# CONFIG_ARCH_ARC is not set -# CONFIG_ARCH_A5K is not set - -# -# Footbridge Implementations -# -# CONFIG_ARCH_CATS is not set -# CONFIG_ARCH_PERSONAL_SERVER is not set -# CONFIG_ARCH_EBSA285_ADDIN is not set -# CONFIG_ARCH_EBSA285_HOST is not set -# CONFIG_ARCH_NETWINDER is not set - -# -# SA11x0 Implementations -# -# CONFIG_SA1100_ASSABET is not set -# CONFIG_ASSABET_NEPONSET is not set -# CONFIG_SA1100_BRUTUS is not set -# CONFIG_SA1100_CERF is not set -# CONFIG_SA1100_BITSY is not set -# CONFIG_SA1100_EXTENEX1 is not set -# CONFIG_SA1100_FREEBIRD is not set -# CONFIG_SA1100_GRAPHICSCLIENT is not set -# CONFIG_SA1100_HUW_WEBPANEL is not set -# CONFIG_SA1100_LART is not set -# CONFIG_SA1100_PLEB is not set -# CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_PANGOLIN is not set -# CONFIG_SA1100_SHERMAN is not set -# CONFIG_SA1100_VICTOR is not set -# CONFIG_SA1100_XP860 is not set -# CONFIG_SA1100_YOPY is not set -CONFIG_SA1100_PFS168=y -CONFIG_SA1111=y -CONFIG_SA1100_USB=m -CONFIG_SA1100_USB_NETLINK=m -CONFIG_SA1100_USB_CHAR=m -CONFIG_SA1100_FREQUENCY_SCALE=m -# CONFIG_SA1100_VOLTAGE_SCALE is not set - -# -# CLPS711X/EP721X Implementations -# -# CONFIG_ARCH_P720T is not set -# CONFIG_ARCH_ACORN is not set -# CONFIG_FOOTBRIDGE is not set -# CONFIG_FOOTBRIDGE_HOST is not set -# CONFIG_FOOTBRIDGE_ADDIN is not set -CONFIG_CPU_32=y -# CONFIG_CPU_26 is not set - -# -# Processor Type -# -# CONFIG_CPU_32v3 is not set -CONFIG_CPU_32v4=y -# CONFIG_CPU_ARM610 is not set -# CONFIG_CPU_ARM710 is not set -# CONFIG_CPU_ARM720T is not set -# CONFIG_CPU_ARM920T is not set -# CONFIG_CPU_ARM1020 is not set -# CONFIG_CPU_SA110 is not set -CONFIG_CPU_SA1100=y -CONFIG_DISCONTIGMEM=y - -# -# General setup -# - -# -# Please ensure that you have read the help on the next option -# -# CONFIG_ANGELBOOT is not set -# CONFIG_PCI is not set -# CONFIG_ISA is not set -# CONFIG_ISA_DMA is not set -CONFIG_HOTPLUG=y - -# -# PCMCIA/CardBus support -# -CONFIG_PCMCIA=m -# CONFIG_I82365 is not set -# CONFIG_TCIC is not set -# CONFIG_PCMCIA_CLPS6700 is not set -CONFIG_PCMCIA_SA1100=m -CONFIG_NET=y -CONFIG_SYSVIPC=y -# CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_SYSCTL=y -CONFIG_FPE_NWFPE=y -# CONFIG_FPE_FASTFPE is not set -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -# CONFIG_BINFMT_AOUT is not set -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -# CONFIG_PM is not set -# CONFIG_ARTHUR is not set -CONFIG_CMDLINE="root=/dev/nfs mem=16M" -CONFIG_LEDS=y -CONFIG_LEDS_TIMER=y -CONFIG_LEDS_CPU=y -CONFIG_ALIGNMENT_TRAP=y -CONFIG_UCB1200=y - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Memory Technology Devices (MTD) -# -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC1000 is not set -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOCPROBE is not set - -# -# RAM/ROM Device Drivers -# -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_MTDRAM is not set - -# -# Linearly Mapped Flash Device Drivers -# -CONFIG_MTD_CFI=y -# CONFIG_MTD_CFI_ADV_OPTIONS is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_AMDSTD is not set -# CONFIG_MTD_SHARP is not set -# CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_NORA is not set -# CONFIG_MTD_PNC2000 is not set -# CONFIG_MTD_RPXLITE is not set -# CONFIG_MTD_SC520CDP is not set -# CONFIG_MTD_SBC_MEDIAGX is not set -# CONFIG_MTD_ELAN_104NC is not set -CONFIG_MTD_SA1100=y -# CONFIG_MTD_DC21285 is not set -# CONFIG_MTD_IQ80310 is not set -# CONFIG_MTD_CSTM_CFI_JEDEC is not set -# CONFIG_MTD_JEDEC is not set -# CONFIG_MTD_MIXMEM is not set -# CONFIG_MTD_OCTAGON is not set -# CONFIG_MTD_VMAX is not set - -# -# NAND Flash Device Drivers -# -# CONFIG_MTD_NAND is not set -# CONFIG_MTD_NAND_SPIA is not set - -# -# User Modules And Translation Layers -# -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -# CONFIG_NFTL is not set - -# -# Plug and Play configuration -# -# CONFIG_PNP is not set -# CONFIG_ISAPNP is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_XD is not set -# CONFIG_PARIDE is not set -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_BLK_DEV_DAC960 is not set -# CONFIG_BLK_DEV_LOOP is not set -# CONFIG_BLK_DEV_NBD is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=4096 -CONFIG_BLK_DEV_INITRD=y - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set -# CONFIG_BLK_DEV_MD is not set -# CONFIG_MD_LINEAR is not set -# CONFIG_MD_RAID0 is not set -# CONFIG_MD_RAID1 is not set -# CONFIG_MD_RAID5 is not set -# CONFIG_BLK_DEV_LVM is not set - -# -# Networking options -# -CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set -# CONFIG_NETLINK is not set -# CONFIG_NETFILTER is not set -# CONFIG_FILTER is not set -CONFIG_UNIX=y -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -CONFIG_IP_PNP=y -CONFIG_IP_PNP_BOOTP=y -# CONFIG_IP_PNP_RARP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_INET_ECN is not set -# CONFIG_SYN_COOKIES is not set -# CONFIG_IPV6 is not set -# CONFIG_KHTTPD is not set -# CONFIG_ATM is not set - -# -# -# -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_LLC is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set -# CONFIG_NET_SB1000 is not set - -# -# Ethernet (10 or 100Mbit) -# -CONFIG_NET_ETHERNET=y -# CONFIG_NET_VENDOR_3COM is not set -# CONFIG_LANCE is not set -CONFIG_NET_VENDOR_SMC=y -# CONFIG_WD80x3 is not set -# CONFIG_ULTRA is not set -# CONFIG_ULTRA32 is not set -CONFIG_SMC9194=y -# CONFIG_NET_VENDOR_RACAL is not set -# CONFIG_AT1700 is not set -# CONFIG_DEPCA is not set -# CONFIG_NET_ISA is not set -# CONFIG_NET_PCI is not set -# CONFIG_NET_POCKET is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_ACENIC is not set -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -# CONFIG_SK98LIN is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -CONFIG_PPP=m -# CONFIG_PPP_MULTILINK is not set -CONFIG_PPP_ASYNC=m -CONFIG_PPP_SYNC_TTY=m -CONFIG_PPP_DEFLATE=m -# CONFIG_PPP_BSDCOMP is not set -# CONFIG_PPPOE is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set - -# -# Token Ring devices -# -# CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# PCMCIA network device support -# -CONFIG_NET_PCMCIA=y -# CONFIG_PCMCIA_3C589 is not set -# CONFIG_PCMCIA_3C574 is not set -# CONFIG_PCMCIA_FMVJ18X is not set -CONFIG_PCMCIA_PCNET=m -# CONFIG_PCMCIA_NMCLAN is not set -CONFIG_PCMCIA_SMC91C92=m -# CONFIG_PCMCIA_XIRC2PS is not set -# CONFIG_ARCNET_COM20020_CS is not set -# CONFIG_PCMCIA_IBMTR is not set -# CONFIG_NET_PCMCIA_RADIO is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -CONFIG_IRDA=m - -# -# IrDA protocols -# -CONFIG_IRLAN=m -CONFIG_IRNET=m -CONFIG_IRCOMM=m -CONFIG_IRDA_ULTRA=y -# CONFIG_IRDA_OPTIONS is not set - -# -# Infrared-port device drivers -# - -# -# SIR device drivers -# -CONFIG_IRTTY_SIR=m -CONFIG_IRPORT_SIR=m - -# -# FIR device drivers -# -# CONFIG_NSC_FIR is not set -# CONFIG_WINBOND_FIR is not set -# CONFIG_TOSHIBA_FIR is not set -# CONFIG_SMC_IRCC_FIR is not set -CONFIG_SA1100_FIR=m - -# -# Dongle support -# -# CONFIG_DONGLE is not set - -# -# ATA/IDE/MFM/RLL support -# -CONFIG_IDE=m - -# -# IDE, ATA and ATAPI Block devices -# -CONFIG_BLK_DEV_IDE=m - -# -# Please see Documentation/ide.txt for help/info on IDE drives -# -# CONFIG_BLK_DEV_HD_IDE is not set -# CONFIG_BLK_DEV_HD is not set -CONFIG_BLK_DEV_IDEDISK=m -# CONFIG_IDEDISK_MULTI_MODE is not set -CONFIG_BLK_DEV_IDECS=m -# CONFIG_BLK_DEV_IDECD is not set -# CONFIG_BLK_DEV_IDETAPE is not set -# CONFIG_BLK_DEV_IDEFLOPPY is not set -# CONFIG_BLK_DEV_IDESCSI is not set - -# -# IDE chipset support/bugfixes -# -# CONFIG_BLK_DEV_CMD640 is not set -# CONFIG_BLK_DEV_CMD640_ENHANCED is not set -# CONFIG_BLK_DEV_ISAPNP is not set -# CONFIG_IDE_CHIPSETS is not set -# CONFIG_IDEDMA_AUTO is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# I2O device support -# -# CONFIG_I2O is not set -# CONFIG_I2O_BLOCK is not set -# CONFIG_I2O_LAN is not set -# CONFIG_I2O_SCSI is not set -# CONFIG_I2O_PROC is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Input core support -# -CONFIG_INPUT=y -CONFIG_INPUT_KEYBDEV=y -CONFIG_INPUT_MOUSEDEV=y -CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 -CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 -# CONFIG_INPUT_JOYDEV is not set -# CONFIG_INPUT_EVDEV is not set - -# -# Character devices -# -CONFIG_VT=y -# CONFIG_VT_CONSOLE is not set -CONFIG_SERIAL=y -# CONFIG_SERIAL_CONSOLE is not set -# CONFIG_SERIAL_EXTENDED is not set -# CONFIG_SERIAL_NONSTANDARD is not set -CONFIG_SERIAL_SA1100=y -CONFIG_SERIAL_SA1100_CONSOLE=y -CONFIG_SA1100_DEFAULT_BAUDRATE=115200 -CONFIG_TOUCHSCREEN_UCB1200=y -# CONFIG_TOUCHSCREEN_BITSY is not set -# CONFIG_PROFILER is not set -# CONFIG_PFS168_SPI is not set -CONFIG_PFS168_DTMF=y -CONFIG_PFS168_MISC=y -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=32 - -# -# I2C support -# -CONFIG_I2C=y -CONFIG_I2C_ALGOBIT=y -# CONFIG_I2C_PHILIPSPAR is not set -# CONFIG_I2C_ELV is not set -# CONFIG_I2C_VELLEMAN is not set -# CONFIG_I2C_ASSABET is not set -# CONFIG_I2C_ALGOPCF is not set -CONFIG_I2C_CHARDEV=y - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -CONFIG_MOUSE=y -CONFIG_PSMOUSE=y -# CONFIG_82C710_MOUSE is not set -# CONFIG_PC110_PAD is not set - -# -# Joysticks -# -# CONFIG_JOYSTICK is not set - -# -# Input core support is needed for joysticks -# -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -# CONFIG_INTEL_RNG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -# CONFIG_SA1100_RTC is not set -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set - -# -# PCMCIA character devices -# -# CONFIG_PCMCIA_SERIAL_CS is not set - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set -# CONFIG_REISERFS_FS is not set -# CONFIG_REISERFS_CHECK is not set -# CONFIG_ADFS_FS is not set -# CONFIG_ADFS_FS_RW is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_FAT_FS is not set -# CONFIG_MSDOS_FS is not set -# CONFIG_UMSDOS_FS is not set -# CONFIG_VFAT_FS is not set -# CONFIG_EFS_FS is not set -CONFIG_JFFS_FS=y -CONFIG_JFFS_FS_VERBOSE=0 -# CONFIG_JFFS2_FS is not set -# CONFIG_CRAMFS is not set -# CONFIG_RAMFS is not set -# CONFIG_ISO9660_FS is not set -# CONFIG_JOLIET is not set -# CONFIG_MINIX_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS_DEBUG is not set -# CONFIG_NTFS_RW is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -# CONFIG_DEVFS_MOUNT is not set -# CONFIG_DEVFS_DEBUG is not set -CONFIG_DEVPTS_FS=y -# CONFIG_QNX4FS_FS is not set -# CONFIG_QNX4FS_RW is not set -# CONFIG_ROMFS_FS is not set -CONFIG_EXT2_FS=y -# CONFIG_SYSV_FS is not set -# CONFIG_SYSV_FS_WRITE is not set -# CONFIG_UDF_FS is not set -# CONFIG_UDF_RW is not set -# CONFIG_UFS_FS is not set -# CONFIG_UFS_FS_WRITE is not set - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -CONFIG_NFS_FS=y -# CONFIG_NFS_V3 is not set -CONFIG_ROOT_NFS=y -# CONFIG_NFSD is not set -# CONFIG_NFSD_V3 is not set -CONFIG_SUNRPC=y -CONFIG_LOCKD=y -# CONFIG_SMB_FS is not set -# CONFIG_NCP_FS is not set -# CONFIG_NCPFS_PACKET_SIGNING is not set -# CONFIG_NCPFS_IOCTL_LOCKING is not set -# CONFIG_NCPFS_STRONG is not set -# CONFIG_NCPFS_NFS_NS is not set -# CONFIG_NCPFS_OS2_NS is not set -# CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_NLS is not set -# CONFIG_NCPFS_EXTRAS is not set - -# -# Partition Types -# -# CONFIG_PARTITION_ADVANCED is not set -CONFIG_MSDOS_PARTITION=y -# CONFIG_SMB_NLS is not set -# CONFIG_NLS is not set - -# -# Console drivers -# -CONFIG_PC_KEYMAP=y -# CONFIG_VGA_CONSOLE is not set -CONFIG_FB=y - -# -# Frame-buffer support -# -CONFIG_FB=y -CONFIG_DUMMY_CONSOLE=y -# CONFIG_FB_ACORN is not set -# CONFIG_FB_CLPS711X is not set -# CONFIG_FB_CYBER2000 is not set -CONFIG_FB_SA1100=y -# CONFIG_FB_VIRTUAL is not set -CONFIG_FBCON_ADVANCED=y -# CONFIG_FBCON_MFB is not set -# CONFIG_FBCON_CFB2 is not set -# CONFIG_FBCON_CFB4 is not set -CONFIG_FBCON_CFB8=y -CONFIG_FBCON_CFB16=y -CONFIG_FBCON_CFB24=y -CONFIG_FBCON_CFB32=y -# CONFIG_FBCON_AFB is not set -# CONFIG_FBCON_ILBM is not set -# CONFIG_FBCON_IPLAN2P2 is not set -# CONFIG_FBCON_IPLAN2P4 is not set -# CONFIG_FBCON_IPLAN2P8 is not set -# CONFIG_FBCON_MAC is not set -# CONFIG_FBCON_VGA_PLANES is not set -# CONFIG_FBCON_VGA is not set -# CONFIG_FBCON_HGA is not set -CONFIG_FBCON_FONTWIDTH8_ONLY=y -CONFIG_FBCON_FONTS=y -CONFIG_FONT_8x8=y -# CONFIG_FONT_8x16 is not set -# CONFIG_FONT_SUN8x16 is not set -# CONFIG_FONT_PEARL_8x8 is not set -# CONFIG_FONT_ACORN_8x8 is not set - -# -# Sound -# -# CONFIG_SOUND is not set - -# -# USB support -# -CONFIG_USB=m -# CONFIG_USB_DEBUG is not set - -# -# Miscellaneous USB options -# -CONFIG_USB_DEVICEFS=y -# CONFIG_USB_BANDWIDTH is not set - -# -# USB Controllers -# -# CONFIG_USB_UHCI is not set -# CONFIG_USB_UHCI_ALT is not set -CONFIG_USB_OHCI=m - -# -# USB Device Class drivers -# -# CONFIG_USB_AUDIO is not set -# CONFIG_USB_BLUETOOTH is not set -# CONFIG_USB_STORAGE is not set -# CONFIG_USB_ACM is not set -# CONFIG_USB_PRINTER is not set - -# -# USB Human Interface Devices (HID) -# -CONFIG_USB_HID=m -CONFIG_USB_KBD=m -CONFIG_USB_MOUSE=m -# CONFIG_USB_WACOM is not set - -# -# USB Imaging devices -# -# CONFIG_USB_DC2XX is not set -# CONFIG_USB_MDC800 is not set -# CONFIG_USB_SCANNER is not set -# CONFIG_USB_MICROTEK is not set - -# -# USB Multimedia devices -# -# CONFIG_USB_IBMCAM is not set -# CONFIG_USB_OV511 is not set -# CONFIG_USB_DSBR is not set -# CONFIG_USB_DABUSB is not set - -# -# USB Network adaptors -# -# CONFIG_USB_PLUSB is not set -# CONFIG_USB_PEGASUS is not set -# CONFIG_USB_NET1080 is not set -# CONFIG_USB_USBNET is not set - -# -# USB port drivers -# -# CONFIG_USB_USS720 is not set - -# -# USB Serial Converter support -# -# CONFIG_USB_SERIAL is not set - -# -# USB misc drivers -# -# CONFIG_USB_RIO500 is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_ERRORS=y -CONFIG_DEBUG_USER=y -CONFIG_DEBUG_INFO=y -CONFIG_MAGIC_SYSRQ=y -# CONFIG_NO_PGT_CACHE is not set -CONFIG_DEBUG_LL=y -# CONFIG_DEBUG_DC21285_PORT is not set -# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -prauN linux-2.6.0-test5/arch/arm/def-configs/pfs168_satft wli-2.6.0-test5-bk12-25/arch/arm/def-configs/pfs168_satft --- linux-2.6.0-test5/arch/arm/def-configs/pfs168_satft 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/pfs168_satft 1969-12-31 16:00:00.000000000 -0800 @@ -1,782 +0,0 @@ -# -# Automatically generated make config: don't edit -# -CONFIG_ARM=y -# CONFIG_EISA is not set -# CONFIG_SBUS is not set -# CONFIG_MCA is not set -CONFIG_UID16=y - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -# CONFIG_OBSOLETE is not set - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODVERSIONS is not set -# CONFIG_KMOD is not set - -# -# System Type -# -# CONFIG_ARCH_ARCA5K is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_RPC is not set -CONFIG_ARCH_SA1100=y -# CONFIG_ARCH_CLPS711X is not set - -# -# Archimedes/A5000 Implementations -# - -# -# Archimedes/A5000 Implementations (select only ONE) -# -# CONFIG_ARCH_ARC is not set -# CONFIG_ARCH_A5K is not set - -# -# Footbridge Implementations -# -# CONFIG_ARCH_CATS is not set -# CONFIG_ARCH_PERSONAL_SERVER is not set -# CONFIG_ARCH_EBSA285_ADDIN is not set -# CONFIG_ARCH_EBSA285_HOST is not set -# CONFIG_ARCH_NETWINDER is not set - -# -# SA11x0 Implementations -# -# CONFIG_SA1100_ASSABET is not set -# CONFIG_ASSABET_NEPONSET is not set -# CONFIG_SA1100_BRUTUS is not set -# CONFIG_SA1100_CERF is not set -# CONFIG_SA1100_BITSY is not set -# CONFIG_SA1100_EXTENEX1 is not set -# CONFIG_SA1100_FREEBIRD is not set -# CONFIG_SA1100_GRAPHICSCLIENT is not set -# CONFIG_SA1100_HUW_WEBPANEL is not set -# CONFIG_SA1100_LART is not set -# CONFIG_SA1100_PLEB is not set -# CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_PANGOLIN is not set -# CONFIG_SA1100_SHERMAN is not set -# CONFIG_SA1100_VICTOR is not set -# CONFIG_SA1100_XP860 is not set -# CONFIG_SA1100_YOPY is not set -CONFIG_SA1100_PFS168=y -CONFIG_SA1111=y -CONFIG_SA1100_USB=m -CONFIG_SA1100_USB_NETLINK=m -CONFIG_SA1100_USB_CHAR=m -CONFIG_SA1100_FREQUENCY_SCALE=m -# CONFIG_SA1100_VOLTAGE_SCALE is not set - -# -# CLPS711X/EP721X Implementations -# -# CONFIG_ARCH_P720T is not set -# CONFIG_ARCH_ACORN is not set -# CONFIG_FOOTBRIDGE is not set -# CONFIG_FOOTBRIDGE_HOST is not set -# CONFIG_FOOTBRIDGE_ADDIN is not set -CONFIG_CPU_32=y -# CONFIG_CPU_26 is not set - -# -# Processor Type -# -# CONFIG_CPU_32v3 is not set -CONFIG_CPU_32v4=y -# CONFIG_CPU_ARM610 is not set -# CONFIG_CPU_ARM710 is not set -# CONFIG_CPU_ARM720T is not set -# CONFIG_CPU_ARM920T is not set -# CONFIG_CPU_ARM1020 is not set -# CONFIG_CPU_SA110 is not set -CONFIG_CPU_SA1100=y -CONFIG_DISCONTIGMEM=y - -# -# General setup -# - -# -# Please ensure that you have read the help on the next option -# -# CONFIG_ANGELBOOT is not set -# CONFIG_PCI is not set -# CONFIG_ISA is not set -# CONFIG_ISA_DMA is not set -CONFIG_HOTPLUG=y - -# -# PCMCIA/CardBus support -# -CONFIG_PCMCIA=m -# CONFIG_I82365 is not set -# CONFIG_TCIC is not set -# CONFIG_PCMCIA_CLPS6700 is not set -CONFIG_PCMCIA_SA1100=m -CONFIG_NET=y -CONFIG_SYSVIPC=y -# CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_SYSCTL=y -CONFIG_FPE_NWFPE=y -# CONFIG_FPE_FASTFPE is not set -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -# CONFIG_BINFMT_AOUT is not set -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -# CONFIG_PM is not set -# CONFIG_ARTHUR is not set -CONFIG_CMDLINE="root=/dev/nfs mem=16M" -CONFIG_LEDS=y -CONFIG_LEDS_TIMER=y -CONFIG_LEDS_CPU=y -CONFIG_ALIGNMENT_TRAP=y -CONFIG_UCB1200=y - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Memory Technology Devices (MTD) -# -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC1000 is not set -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOCPROBE is not set - -# -# RAM/ROM Device Drivers -# -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_MTDRAM is not set - -# -# Linearly Mapped Flash Device Drivers -# -CONFIG_MTD_CFI=y -# CONFIG_MTD_CFI_GEOMETRY is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_AMDSTD is not set -# CONFIG_MTD_SHARP is not set -# CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_NORA is not set -# CONFIG_MTD_PNC2000 is not set -# CONFIG_MTD_RPXLITE is not set -# CONFIG_MTD_SC520CDP is not set -# CONFIG_MTD_SBC_MEDIAGX is not set -# CONFIG_MTD_ELAN_104NC is not set -CONFIG_MTD_SA1100=y -# CONFIG_MTD_DC21285 is not set -# CONFIG_MTD_CSTM_CFI_JEDEC is not set -# CONFIG_MTD_JEDEC is not set -# CONFIG_MTD_MIXMEM is not set -# CONFIG_MTD_OCTAGON is not set -# CONFIG_MTD_VMAX is not set - -# -# NAND Flash Device Drivers -# -# CONFIG_MTD_NAND is not set -# CONFIG_MTD_NAND_SPIA is not set - -# -# User Modules And Translation Layers -# -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -# CONFIG_NFTL is not set - -# -# Plug and Play configuration -# -# CONFIG_PNP is not set -# CONFIG_ISAPNP is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_XD is not set -# CONFIG_PARIDE is not set -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_BLK_DEV_DAC960 is not set -# CONFIG_BLK_DEV_LOOP is not set -# CONFIG_BLK_DEV_NBD is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=4096 -CONFIG_BLK_DEV_INITRD=y - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set -# CONFIG_BLK_DEV_MD is not set -# CONFIG_MD_LINEAR is not set -# CONFIG_MD_RAID0 is not set -# CONFIG_MD_RAID1 is not set -# CONFIG_MD_RAID5 is not set -# CONFIG_BLK_DEV_LVM is not set - -# -# Networking options -# -CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set -# CONFIG_NETLINK is not set -# CONFIG_NETFILTER is not set -# CONFIG_FILTER is not set -CONFIG_UNIX=y -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -CONFIG_IP_PNP=y -CONFIG_IP_PNP_BOOTP=y -# CONFIG_IP_PNP_RARP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_INET_ECN is not set -# CONFIG_SYN_COOKIES is not set -# CONFIG_IPV6 is not set -# CONFIG_KHTTPD is not set -# CONFIG_ATM is not set - -# -# -# -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_LLC is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set -# CONFIG_NET_SB1000 is not set - -# -# Ethernet (10 or 100Mbit) -# -CONFIG_NET_ETHERNET=y -# CONFIG_NET_VENDOR_3COM is not set -# CONFIG_LANCE is not set -CONFIG_NET_VENDOR_SMC=y -# CONFIG_WD80x3 is not set -# CONFIG_ULTRA is not set -# CONFIG_ULTRA32 is not set -CONFIG_SMC9194=y -# CONFIG_NET_VENDOR_RACAL is not set -# CONFIG_AT1700 is not set -# CONFIG_DEPCA is not set -# CONFIG_NET_ISA is not set -# CONFIG_NET_PCI is not set -# CONFIG_NET_POCKET is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_ACENIC is not set -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -# CONFIG_SK98LIN is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -CONFIG_PPP=m -# CONFIG_PPP_MULTILINK is not set -CONFIG_PPP_ASYNC=m -CONFIG_PPP_SYNC_TTY=m -CONFIG_PPP_DEFLATE=m -# CONFIG_PPP_BSDCOMP is not set -# CONFIG_PPPOE is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set - -# -# Token Ring devices -# -# CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# PCMCIA network device support -# -CONFIG_NET_PCMCIA=y -# CONFIG_PCMCIA_3C589 is not set -# CONFIG_PCMCIA_3C574 is not set -# CONFIG_PCMCIA_FMVJ18X is not set -CONFIG_PCMCIA_PCNET=m -# CONFIG_PCMCIA_NMCLAN is not set -CONFIG_PCMCIA_SMC91C92=m -# CONFIG_PCMCIA_XIRC2PS is not set -# CONFIG_ARCNET_COM20020_CS is not set -# CONFIG_PCMCIA_IBMTR is not set -# CONFIG_NET_PCMCIA_RADIO is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -CONFIG_IRDA=m - -# -# IrDA protocols -# -CONFIG_IRLAN=m -CONFIG_IRNET=m -CONFIG_IRCOMM=m -CONFIG_IRDA_ULTRA=y -# CONFIG_IRDA_OPTIONS is not set - -# -# Infrared-port device drivers -# - -# -# SIR device drivers -# -CONFIG_IRTTY_SIR=m -CONFIG_IRPORT_SIR=m - -# -# FIR device drivers -# -# CONFIG_NSC_FIR is not set -# CONFIG_WINBOND_FIR is not set -# CONFIG_TOSHIBA_FIR is not set -# CONFIG_SMC_IRCC_FIR is not set -CONFIG_SA1100_FIR=m - -# -# Dongle support -# -# CONFIG_DONGLE is not set - -# -# ATA/IDE/MFM/RLL support -# -CONFIG_IDE=m - -# -# IDE, ATA and ATAPI Block devices -# -CONFIG_BLK_DEV_IDE=m - -# -# Please see Documentation/ide.txt for help/info on IDE drives -# -# CONFIG_BLK_DEV_HD_IDE is not set -# CONFIG_BLK_DEV_HD is not set -CONFIG_BLK_DEV_IDEDISK=m -# CONFIG_IDEDISK_MULTI_MODE is not set -CONFIG_BLK_DEV_IDECS=m -# CONFIG_BLK_DEV_IDECD is not set -# CONFIG_BLK_DEV_IDETAPE is not set -# CONFIG_BLK_DEV_IDEFLOPPY is not set -# CONFIG_BLK_DEV_IDESCSI is not set - -# -# IDE chipset support/bugfixes -# -# CONFIG_BLK_DEV_CMD640 is not set -# CONFIG_BLK_DEV_CMD640_ENHANCED is not set -# CONFIG_BLK_DEV_ISAPNP is not set -# CONFIG_IDE_CHIPSETS is not set -# CONFIG_IDEDMA_AUTO is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# I2O device support -# -# CONFIG_I2O is not set -# CONFIG_I2O_BLOCK is not set -# CONFIG_I2O_LAN is not set -# CONFIG_I2O_SCSI is not set -# CONFIG_I2O_PROC is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Input core support -# -CONFIG_INPUT=y -CONFIG_INPUT_KEYBDEV=y -CONFIG_INPUT_MOUSEDEV=y -CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 -CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 -# CONFIG_INPUT_JOYDEV is not set -# CONFIG_INPUT_EVDEV is not set - -# -# Character devices -# -CONFIG_VT=y -# CONFIG_VT_CONSOLE is not set -CONFIG_SERIAL=y -# CONFIG_SERIAL_CONSOLE is not set -# CONFIG_SERIAL_EXTENDED is not set -# CONFIG_SERIAL_NONSTANDARD is not set -CONFIG_SERIAL_SA1100=y -CONFIG_SERIAL_SA1100_CONSOLE=y -CONFIG_SA1100_DEFAULT_BAUDRATE=115200 -CONFIG_TOUCHSCREEN_UCB1200=y -# CONFIG_TOUCHSCREEN_BITSY is not set -# CONFIG_PROFILER is not set -# CONFIG_PFS168_SPI is not set -CONFIG_PFS168_DTMF=y -CONFIG_PFS168_MISC=y -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=32 - -# -# I2C support -# -CONFIG_I2C=y -CONFIG_I2C_ALGOBIT=y -# CONFIG_I2C_PHILIPSPAR is not set -# CONFIG_I2C_ELV is not set -# CONFIG_I2C_VELLEMAN is not set -# CONFIG_I2C_ASSABET is not set -CONFIG_I2C_PFS168=y -# CONFIG_I2C_ALGOPCF is not set -CONFIG_I2C_CHARDEV=y -CONFIG_I2C_SENSORS=y -CONFIG_I2C_EEPROM=y -CONFIG_I2C_EEPROM=y -CONFIG_I2C_M41T11=y -CONFIG_I2C_X9221=y -CONFIG_I2C_PCF8574=y - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -CONFIG_MOUSE=y -CONFIG_PSMOUSE=y -# CONFIG_82C710_MOUSE is not set -# CONFIG_PC110_PAD is not set - -# -# Joysticks -# -# CONFIG_JOYSTICK is not set - -# -# Input core support is needed for joysticks -# -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -# CONFIG_INTEL_RNG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -# CONFIG_SA1100_RTC is not set -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set -CONFIG_PCMCIA_SERIAL=m - -# -# PCMCIA character device support -# -# CONFIG_PCMCIA_SERIAL_CS is not set - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set -# CONFIG_REISERFS_FS is not set -# CONFIG_REISERFS_CHECK is not set -# CONFIG_ADFS_FS is not set -# CONFIG_ADFS_FS_RW is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_FAT_FS is not set -# CONFIG_MSDOS_FS is not set -# CONFIG_UMSDOS_FS is not set -# CONFIG_VFAT_FS is not set -# CONFIG_EFS_FS is not set -CONFIG_JFFS_FS=y -CONFIG_JFFS_FS_VERBOSE=0 -# CONFIG_JFFS2_FS is not set -# CONFIG_CRAMFS is not set -# CONFIG_RAMFS is not set -# CONFIG_ISO9660_FS is not set -# CONFIG_JOLIET is not set -# CONFIG_MINIX_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS_DEBUG is not set -# CONFIG_NTFS_RW is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -# CONFIG_DEVFS_MOUNT is not set -# CONFIG_DEVFS_DEBUG is not set -CONFIG_DEVPTS_FS=y -# CONFIG_QNX4FS_FS is not set -# CONFIG_QNX4FS_RW is not set -# CONFIG_ROMFS_FS is not set -CONFIG_EXT2_FS=y -# CONFIG_SYSV_FS is not set -# CONFIG_SYSV_FS_WRITE is not set -# CONFIG_UDF_FS is not set -# CONFIG_UDF_RW is not set -# CONFIG_UFS_FS is not set -# CONFIG_UFS_FS_WRITE is not set - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -CONFIG_NFS_FS=y -# CONFIG_NFS_V3 is not set -CONFIG_ROOT_NFS=y -# CONFIG_NFSD is not set -# CONFIG_NFSD_V3 is not set -CONFIG_SUNRPC=y -CONFIG_LOCKD=y -# CONFIG_SMB_FS is not set -# CONFIG_NCP_FS is not set -# CONFIG_NCPFS_PACKET_SIGNING is not set -# CONFIG_NCPFS_IOCTL_LOCKING is not set -# CONFIG_NCPFS_STRONG is not set -# CONFIG_NCPFS_NFS_NS is not set -# CONFIG_NCPFS_OS2_NS is not set -# CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_NLS is not set -# CONFIG_NCPFS_EXTRAS is not set - -# -# Partition Types -# -# CONFIG_PARTITION_ADVANCED is not set -CONFIG_MSDOS_PARTITION=y -# CONFIG_SMB_NLS is not set -# CONFIG_NLS is not set - -# -# Console drivers -# -CONFIG_PC_KEYMAP=y -# CONFIG_VGA_CONSOLE is not set -CONFIG_FB=y - -# -# Frame-buffer support -# -CONFIG_FB=y -CONFIG_DUMMY_CONSOLE=y -# CONFIG_FB_ACORN is not set -# CONFIG_FB_CLPS711X is not set -# CONFIG_FB_CYBER2000 is not set -CONFIG_FB_SA1100=y -# CONFIG_PFS168_SASTN is not set -CONFIG_PFS168_SATFT=y -# CONFIG_FB_MQ200 is not set -# CONFIG_FB_VIRTUAL is not set -CONFIG_FBCON_ADVANCED=y -# CONFIG_FBCON_MFB is not set -# CONFIG_FBCON_CFB2 is not set -# CONFIG_FBCON_CFB4 is not set -CONFIG_FBCON_CFB8=y -CONFIG_FBCON_CFB16=y -CONFIG_FBCON_CFB24=y -CONFIG_FBCON_CFB32=y -# CONFIG_FBCON_AFB is not set -# CONFIG_FBCON_ILBM is not set -# CONFIG_FBCON_IPLAN2P2 is not set -# CONFIG_FBCON_IPLAN2P4 is not set -# CONFIG_FBCON_IPLAN2P8 is not set -# CONFIG_FBCON_MAC is not set -# CONFIG_FBCON_VGA_PLANES is not set -# CONFIG_FBCON_VGA is not set -# CONFIG_FBCON_HGA is not set -CONFIG_FBCON_FONTWIDTH8_ONLY=y -CONFIG_FBCON_FONTS=y -CONFIG_FONT_8x8=y -# CONFIG_FONT_8x16 is not set -# CONFIG_FONT_SUN8x16 is not set -# CONFIG_FONT_PEARL_8x8 is not set -# CONFIG_FONT_ACORN_8x8 is not set - -# -# Sound -# -# CONFIG_SOUND is not set - -# -# USB support -# -CONFIG_USB=m -# CONFIG_USB_DEBUG is not set - -# -# Miscellaneous USB options -# -CONFIG_USB_DEVICEFS=y -# CONFIG_USB_BANDWIDTH is not set - -# -# USB Controllers -# -# CONFIG_USB_UHCI is not set -# CONFIG_USB_UHCI_ALT is not set -CONFIG_USB_OHCI=m - -# -# USB Device Class drivers -# -# CONFIG_USB_AUDIO is not set -# CONFIG_USB_BLUETOOTH is not set -# CONFIG_USB_STORAGE is not set -# CONFIG_USB_ACM is not set -# CONFIG_USB_PRINTER is not set - -# -# USB Human Interface Devices (HID) -# -CONFIG_USB_HID=m -CONFIG_USB_KBD=m -CONFIG_USB_MOUSE=m -# CONFIG_USB_WACOM is not set - -# -# USB Imaging devices -# -# CONFIG_USB_DC2XX is not set -# CONFIG_USB_MDC800 is not set -# CONFIG_USB_SCANNER is not set -# CONFIG_USB_MICROTEK is not set - -# -# USB Multimedia devices -# -# CONFIG_USB_IBMCAM is not set -# CONFIG_USB_OV511 is not set -# CONFIG_USB_DSBR is not set -# CONFIG_USB_DABUSB is not set - -# -# USB Network adaptors -# -# CONFIG_USB_PLUSB is not set -# CONFIG_USB_PEGASUS is not set -# CONFIG_USB_NET1080 is not set - -# -# USB port drivers -# -# CONFIG_USB_USS720 is not set - -# -# USB Serial Converter support -# -# CONFIG_USB_SERIAL is not set - -# -# USB misc drivers -# -# CONFIG_USB_RIO500 is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_ERRORS=y -CONFIG_DEBUG_USER=y -CONFIG_DEBUG_INFO=y -CONFIG_MAGIC_SYSRQ=y -# CONFIG_NO_PGT_CACHE is not set -CONFIG_DEBUG_LL=y -# CONFIG_DEBUG_DC21285_PORT is not set diff -prauN linux-2.6.0-test5/arch/arm/def-configs/pleb wli-2.6.0-test5-bk12-25/arch/arm/def-configs/pleb --- linux-2.6.0-test5/arch/arm/def-configs/pleb 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/pleb 1969-12-31 16:00:00.000000000 -0800 @@ -1,535 +0,0 @@ -# -# Automatically generated by make menuconfig: don't edit -# -CONFIG_ARM=y -# CONFIG_EISA is not set -# CONFIG_SBUS is not set -# CONFIG_MCA is not set -CONFIG_UID16=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y -# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -# CONFIG_OBSOLETE is not set - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODVERSIONS is not set -CONFIG_KMOD=y - -# -# System Type -# -# CONFIG_ARCH_ARCA5K is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_RPC is not set -CONFIG_ARCH_SA1100=y -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_ANAKIN is not set - -# -# Archimedes/A5000 Implementations -# -# CONFIG_ARCH_ARC is not set -# CONFIG_ARCH_A5K is not set - -# -# Footbridge Implementations -# -# CONFIG_ARCH_CATS is not set -# CONFIG_ARCH_PERSONAL_SERVER is not set -# CONFIG_ARCH_EBSA285_ADDIN is not set -# CONFIG_ARCH_EBSA285_HOST is not set -# CONFIG_ARCH_NETWINDER is not set - -# -# SA11x0 Implementations -# -# CONFIG_SA1100_ASSABET is not set -# CONFIG_ASSABET_NEPONSET is not set -# CONFIG_SA1100_BRUTUS is not set -# CONFIG_SA1100_CERF is not set -# CONFIG_SA1100_BITSY is not set -# CONFIG_SA1100_EXTENEX1 is not set -# CONFIG_SA1100_FLEXANET is not set -# CONFIG_SA1100_FREEBIRD is not set -# CONFIG_SA1100_GRAPHICSCLIENT is not set -# CONFIG_SA1100_JORNADA720 is not set -# CONFIG_SA1100_HUW_WEBPANEL is not set -# CONFIG_SA1100_ITSY is not set -# CONFIG_SA1100_LART is not set -# CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_OMNIMETER is not set -# CONFIG_SA1100_PANGOLIN is not set -CONFIG_SA1100_PLEB=y -# CONFIG_SA1100_SHERMAN is not set -# CONFIG_SA1100_PFS168 is not set -# CONFIG_SA1100_VICTOR is not set -# CONFIG_SA1100_XP860 is not set -# CONFIG_SA1100_YOPY is not set -# CONFIG_SA1100_USB is not set -# CONFIG_SA1100_USB_NETLINK is not set -# CONFIG_SA1100_USB_CHAR is not set - -# -# CLPS711X/EP721X Implementations -# -# CONFIG_ARCH_P720T is not set -# CONFIG_ARCH_ACORN is not set -# CONFIG_FOOTBRIDGE is not set -# CONFIG_FOOTBRIDGE_HOST is not set -# CONFIG_FOOTBRIDGE_ADDIN is not set -CONFIG_CPU_32=y -# CONFIG_CPU_26 is not set -# CONFIG_CPU_32v3 is not set -CONFIG_CPU_32v4=y -# CONFIG_CPU_ARM610 is not set -# CONFIG_CPU_ARM710 is not set -# CONFIG_CPU_ARM720T is not set -# CONFIG_CPU_ARM920T is not set -# CONFIG_CPU_ARM1020 is not set -# CONFIG_CPU_SA110 is not set -CONFIG_CPU_SA1100=y -CONFIG_DISCONTIGMEM=y -# CONFIG_CPU_BIG_ENDIAN is not set - -# -# General setup -# -# CONFIG_PCI is not set -# CONFIG_ISA is not set -# CONFIG_ISA_DMA is not set -CONFIG_CPU_FREQ=y -# CONFIG_HOTPLUG is not set -# CONFIG_PCMCIA is not set -CONFIG_NET=y -CONFIG_SYSVIPC=y -# CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_SYSCTL=y -CONFIG_FPE_NWFPE=y -# CONFIG_FPE_FASTFPE is not set -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -CONFIG_BINFMT_AOUT=y -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -# CONFIG_PM is not set -# CONFIG_APM is not set -# CONFIG_ARTHUR is not set -CONFIG_CMDLINE="console=ttySA0,9600 mem=16M@0xc0000000 mem=16M@0xc8000000 root=/dev/ram initrd=0xc0400000,4M" -# CONFIG_PFS168_CMDLINE is not set -# CONFIG_LEDS is not set -CONFIG_ALIGNMENT_TRAP=y - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Memory Technology Devices (MTD) -# -# CONFIG_MTD is not set - -# -# RAM/ROM/Flash chip drivers -# -# CONFIG_MTD_CFI is not set -# CONFIG_MTD_CFI_INTELEXT is not set -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_AMDSTD is not set -# CONFIG_MTD_SHARP is not set -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_JEDEC is not set - -# -# Mapping drivers for chip access -# -# CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_SUN_UFLASH is not set -# CONFIG_MTD_NORA is not set -# CONFIG_MTD_PNC2000 is not set -# CONFIG_MTD_RPXLITE is not set -# CONFIG_MTD_SC520CDP is not set -# CONFIG_MTD_NETSC520 is not set -# CONFIG_MTD_SBC_GXX is not set -# CONFIG_MTD_ELAN_104NC is not set -# CONFIG_MTD_SA1100 is not set -# CONFIG_MTD_SA1100_REDBOOT_PARTITIONS is not set -# CONFIG_MTD_SA1100_BOOTLDR_PARTITIONS is not set -# CONFIG_MTD_DC21285 is not set -# CONFIG_MTD_IQ80310 is not set -# CONFIG_MTD_DBOX2 is not set -# CONFIG_MTD_CSTM_MIPS_IXX is not set -# CONFIG_MTD_CFI_FLAGADM is not set -# CONFIG_MTD_ARM_INTEGRATOR is not set -# CONFIG_MTD_MIXMEM is not set -# CONFIG_MTD_OCTAGON is not set -# CONFIG_MTD_VMAX is not set -# CONFIG_MTD_OCELOT is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_DOC1000 is not set -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOCPROBE is not set - -# -# NAND Flash Device Drivers -# -# CONFIG_MTD_NAND is not set - -# -# Plug and Play configuration -# -# CONFIG_PNP is not set -# CONFIG_ISAPNP is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_XD is not set -# CONFIG_PARIDE is not set -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_BLK_DEV_DAC960 is not set -# CONFIG_BLK_DEV_LOOP is not set -# CONFIG_BLK_DEV_NBD is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=8192 -CONFIG_BLK_DEV_INITRD=y - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set -# CONFIG_BLK_DEV_MD is not set -# CONFIG_MD_LINEAR is not set -# CONFIG_MD_RAID0 is not set -# CONFIG_MD_RAID1 is not set -# CONFIG_MD_RAID5 is not set -# CONFIG_BLK_DEV_LVM is not set - -# -# Networking options -# -CONFIG_PACKET=m -# CONFIG_PACKET_MMAP is not set -# CONFIG_NETLINK is not set -# CONFIG_NETFILTER is not set -# CONFIG_FILTER is not set -CONFIG_UNIX=y -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -# CONFIG_IP_PNP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -CONFIG_INET_ECN=y -CONFIG_SYN_COOKIES=y -# CONFIG_IPV6 is not set -# CONFIG_KHTTPD is not set -# CONFIG_ATM is not set -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_LLC is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set -CONFIG_DUMMY=m -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set - -# -# Ethernet (10 or 100Mbit) -# -# CONFIG_NET_ETHERNET is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_ACENIC is not set -# CONFIG_ACENIC_OMIT_TIGON_I is not set -# CONFIG_MYRI_SBUS is not set -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -# CONFIG_SK98LIN is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PLIP is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set - -# -# Token Ring devices -# -# CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# ATA/IDE/MFM/RLL support -# -# CONFIG_IDE is not set -# CONFIG_BLK_DEV_HD is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# I2O device support -# -# CONFIG_I2O is not set -# CONFIG_I2O_BLOCK is not set -# CONFIG_I2O_LAN is not set -# CONFIG_I2O_SCSI is not set -# CONFIG_I2O_PROC is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Input core support -# -# CONFIG_INPUT is not set - -# -# Character devices -# -# CONFIG_VT is not set -# CONFIG_SERIAL is not set -# CONFIG_SERIAL_EXTENDED is not set -# CONFIG_SERIAL_NONSTANDARD is not set -# CONFIG_SERIAL_21285 is not set -# CONFIG_SERIAL_21285_OLD is not set -# CONFIG_SERIAL_21285_CONSOLE is not set -CONFIG_SERIAL_SA1100=y -# CONFIG_SERIAL_SA1100_OLD is not set -CONFIG_SERIAL_SA1100_CONSOLE=y -CONFIG_SA1100_DEFAULT_BAUDRATE=9600 -# CONFIG_SERIAL_AMBA is not set -# CONFIG_SERIAL_AMBA_CONSOLE is not set -# CONFIG_SERIAL_CLPS711X is not set -# CONFIG_SERIAL_CLPS711X_CONSOLE is not set -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=256 -# CONFIG_UCB1200 is not set -# CONFIG_TOUCHSCREEN_UCB1200 is not set -# CONFIG_AUDIO_UCB1200 is not set -# CONFIG_ADC_UCB1200 is not set -# CONFIG_TOUCHSCREEN_BITSY is not set -CONFIG_PROFILER=y -# CONFIG_PFS168_SPI is not set -# CONFIG_PFS168_DTMF is not set -# CONFIG_PFS168_MISC is not set - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -# CONFIG_MOUSE is not set - -# -# Joysticks -# -# CONFIG_JOYSTICK is not set -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -# CONFIG_INTEL_RNG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -CONFIG_SA1100_RTC=y -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set -# CONFIG_REISERFS_FS is not set -# CONFIG_REISERFS_CHECK is not set -# CONFIG_ADFS_FS is not set -# CONFIG_ADFS_FS_RW is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_FAT_FS is not set -# CONFIG_MSDOS_FS is not set -# CONFIG_UMSDOS_FS is not set -# CONFIG_VFAT_FS is not set -# CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set -# CONFIG_JFFS2_FS is not set -# CONFIG_CRAMFS is not set -CONFIG_TMPFS=y -# CONFIG_RAMFS is not set -# CONFIG_ISO9660_FS is not set -# CONFIG_JOLIET is not set -# CONFIG_MINIX_FS is not set -# CONFIG_VXFS_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS_DEBUG is not set -# CONFIG_NTFS_RW is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -# CONFIG_DEVFS_MOUNT is not set -# CONFIG_DEVFS_DEBUG is not set -CONFIG_DEVPTS_FS=y -# CONFIG_QNX4FS_FS is not set -# CONFIG_QNX4FS_RW is not set -# CONFIG_ROMFS_FS is not set -CONFIG_EXT2_FS=y -# CONFIG_SYSV_FS is not set -# CONFIG_UDF_FS is not set -# CONFIG_UDF_RW is not set -# CONFIG_UFS_FS is not set -# CONFIG_UFS_FS_WRITE is not set - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -# CONFIG_NFS_FS is not set -# CONFIG_NFS_V3 is not set -# CONFIG_ROOT_NFS is not set -# CONFIG_NFSD is not set -# CONFIG_NFSD_V3 is not set -# CONFIG_SUNRPC is not set -# CONFIG_LOCKD is not set -# CONFIG_SMB_FS is not set -# CONFIG_NCP_FS is not set -# CONFIG_NCPFS_PACKET_SIGNING is not set -# CONFIG_NCPFS_IOCTL_LOCKING is not set -# CONFIG_NCPFS_STRONG is not set -# CONFIG_NCPFS_NFS_NS is not set -# CONFIG_NCPFS_OS2_NS is not set -# CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_NLS is not set -# CONFIG_NCPFS_EXTRAS is not set - -# -# Partition Types -# -# CONFIG_PARTITION_ADVANCED is not set -CONFIG_MSDOS_PARTITION=y -# CONFIG_SMB_NLS is not set -# CONFIG_NLS is not set - -# -# Sound -# -# CONFIG_SOUND is not set - -# -# USB support -# -# CONFIG_USB is not set - -# -# Bluetooth support -# -# CONFIG_BT is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_ERRORS=y -CONFIG_DEBUG_USER=y -# CONFIG_DEBUG_INFO is not set -CONFIG_MAGIC_SYSRQ=y -# CONFIG_NO_PGT_CACHE is not set -CONFIG_DEBUG_LL=y -# CONFIG_DEBUG_DC21285_PORT is not set -# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -prauN linux-2.6.0-test5/arch/arm/def-configs/rpc wli-2.6.0-test5-bk12-25/arch/arm/def-configs/rpc --- linux-2.6.0-test5/arch/arm/def-configs/rpc 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/rpc 1969-12-31 16:00:00.000000000 -0800 @@ -1,781 +0,0 @@ -# -# Automatically generated make config: don't edit -# -CONFIG_ARM=y -CONFIG_MMU=y -CONFIG_SWAP=y -CONFIG_UID16=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y - -# -# General setup -# -CONFIG_NET=y -CONFIG_SYSVIPC=y -# CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_SYSCTL=y - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODVERSIONS is not set -CONFIG_KMOD=y - -# -# System Type -# -# CONFIG_ARCH_ADIFCC is not set -# CONFIG_ARCH_ANAKIN is not set -# CONFIG_ARCH_ARCA5K is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_PXA is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_CAMELOT is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_IOP310 is not set -# CONFIG_ARCH_L7200 is not set -CONFIG_ARCH_RPC=y -# CONFIG_ARCH_SA1100 is not set -# CONFIG_ARCH_SHARK is not set - -# -# Archimedes/A5000 Implementations -# - -# -# Archimedes/A5000 Implementations (select only ONE) -# - -# -# CLPS711X/EP721X Implementations -# - -# -# Epxa10db -# - -# -# Footbridge Implementations -# - -# -# IOP310 Implementation Options -# - -# -# IOP310 Chipset Features -# - -# -# Intel PXA250/210 Implementations -# - -# -# SA11x0 Implementations -# -CONFIG_ARCH_ACORN=y - -# -# Processor Type -# -CONFIG_CPU_32=y -CONFIG_CPU_ARM610=y -CONFIG_CPU_ARM710=y -CONFIG_CPU_SA110=y -CONFIG_CPU_32v3=y - -# -# Processor Features -# - -# -# General setup -# -CONFIG_FIQ=y -# CONFIG_ZBOOT_ROM is not set -CONFIG_ZBOOT_ROM_TEXT=0x0 -CONFIG_ZBOOT_ROM_BSS=0x0 -# CONFIG_HOTPLUG is not set - -# -# At least one math emulation must be selected -# -CONFIG_FPE_NWFPE=y -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -CONFIG_BINFMT_AOUT=y -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -# CONFIG_PM is not set -# CONFIG_PREEMPT is not set -# CONFIG_ARTHUR is not set -CONFIG_CMDLINE="" -CONFIG_ALIGNMENT_TRAP=y - -# -# Parallel port support -# -CONFIG_PARPORT=y -CONFIG_PARPORT_PC=y -CONFIG_PARPORT_PC_CML1=y -# CONFIG_PARPORT_SERIAL is not set -CONFIG_PARPORT_PC_FIFO=y -# CONFIG_PARPORT_PC_SUPERIO is not set -# CONFIG_PARPORT_ARC is not set -# CONFIG_PARPORT_OTHER is not set -# CONFIG_PARPORT_1284 is not set - -# -# Memory Technology Devices (MTD) -# -# CONFIG_MTD is not set - -# -# Plug and Play configuration -# -# CONFIG_PNP is not set - -# -# Block devices -# -CONFIG_BLK_DEV_FD=y -# CONFIG_PARIDE is not set -CONFIG_BLK_DEV_LOOP=m -# CONFIG_BLK_DEV_NBD is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=4096 -CONFIG_BLK_DEV_INITRD=y - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set - -# -# Acorn-specific block devices -# - -# -# Networking options -# -# CONFIG_PACKET is not set -CONFIG_NETLINK_DEV=y -# CONFIG_NETFILTER is not set -# CONFIG_FILTER is not set -CONFIG_UNIX=y -CONFIG_INET=y -CONFIG_IP_MULTICAST=y -# CONFIG_IP_ADVANCED_ROUTER is not set -# CONFIG_IP_PNP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_IP_MROUTE is not set -# CONFIG_ARPD is not set -# CONFIG_INET_ECN is not set -# CONFIG_SYN_COOKIES is not set -# CONFIG_IPV6 is not set - -# -# SCTP Configuration (EXPERIMENTAL) -# -CONFIG_IPV6_SCTP__=y -# CONFIG_IP_SCTP is not set -# CONFIG_ATM is not set -# CONFIG_VLAN_8021Q is not set -# CONFIG_LLC is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set -# CONFIG_ETHERTAP is not set - -# -# Ethernet (10 or 100Mbit) -# -CONFIG_NET_ETHERNET=y -CONFIG_ARM_ETHER1=y -CONFIG_ARM_ETHER3=y -CONFIG_ARM_ETHERH=y -# CONFIG_NET_VENDOR_3COM is not set -# CONFIG_NET_VENDOR_SMC is not set -# CONFIG_NET_VENDOR_RACAL is not set -# CONFIG_NET_POCKET is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PLIP is not set -CONFIG_PPP=m -# CONFIG_PPP_MULTILINK is not set -# CONFIG_PPP_ASYNC is not set -# CONFIG_PPP_SYNC_TTY is not set -# CONFIG_PPP_DEFLATE is not set -# CONFIG_PPP_BSDCOMP is not set -CONFIG_PPPOE=m -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set - -# -# Token Ring devices -# -# CONFIG_NET_FC is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# ATA/ATAPI/MFM/RLL support -# -CONFIG_IDE=y - -# -# IDE, ATA and ATAPI Block devices -# -CONFIG_BLK_DEV_IDE=y - -# -# Please see Documentation/ide.txt for help/info on IDE drives -# -# CONFIG_BLK_DEV_HD is not set -CONFIG_BLK_DEV_IDEDISK=y -CONFIG_IDEDISK_MULTI_MODE=y -# CONFIG_IDEDISK_STROKE is not set -CONFIG_BLK_DEV_IDECD=y -# CONFIG_BLK_DEV_IDEFLOPPY is not set -# CONFIG_BLK_DEV_IDESCSI is not set -# CONFIG_IDE_TASK_IOCTL is not set - -# -# IDE chipset support/bugfixes -# -CONFIG_BLK_DEV_IDEDMA=y -CONFIG_BLK_DEV_IDE_ICSIDE=y -CONFIG_BLK_DEV_IDEDMA_ICS=y -CONFIG_IDEDMA_ICS_AUTO=y -CONFIG_BLK_DEV_IDE_RAPIDE=y -CONFIG_IDEDMA_AUTO=y -# CONFIG_IDEDMA_IVB is not set - -# -# SCSI support -# -CONFIG_SCSI=y - -# -# SCSI support type (disk, tape, CD-ROM) -# -CONFIG_BLK_DEV_SD=y -CONFIG_CHR_DEV_ST=m -# CONFIG_CHR_DEV_OSST is not set -CONFIG_BLK_DEV_SR=y -CONFIG_BLK_DEV_SR_VENDOR=y -CONFIG_SR_EXTRA_DEVS=2 -CONFIG_CHR_DEV_SG=y - -# -# Some SCSI devices (e.g. CD jukebox) support multiple LUNs -# -# CONFIG_SCSI_MULTI_LUN is not set -# CONFIG_SCSI_REPORT_LUNS is not set -CONFIG_SCSI_CONSTANTS=y -CONFIG_SCSI_LOGGING=y - -# -# SCSI low-level drivers -# -# CONFIG_SCSI_ACARD is not set -# CONFIG_SCSI_AIC7XXX is not set -# CONFIG_SCSI_AIC7XXX_OLD is not set -# CONFIG_SCSI_DPT_I2O is not set -# CONFIG_SCSI_ADVANSYS is not set -# CONFIG_SCSI_IN2000 is not set -# CONFIG_SCSI_MEGARAID is not set -# CONFIG_SCSI_BUSLOGIC is not set -# CONFIG_SCSI_EATA is not set -# CONFIG_SCSI_EATA_DMA is not set -# CONFIG_SCSI_EATA_PIO is not set -# CONFIG_SCSI_FUTURE_DOMAIN is not set -# CONFIG_SCSI_GDTH is not set -# CONFIG_SCSI_GENERIC_NCR5380 is not set -# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set -CONFIG_SCSI_PPA=m -CONFIG_SCSI_IMM=m -# CONFIG_SCSI_IZIP_EPP16 is not set -# CONFIG_SCSI_IZIP_SLOW_CTR is not set -# CONFIG_SCSI_PCI2000 is not set -# CONFIG_SCSI_PCI2220I is not set -# CONFIG_SCSI_U14_34F is not set -# CONFIG_SCSI_NSP32 is not set -# CONFIG_SCSI_DEBUG is not set -CONFIG_SCSI_ACORNSCSI_3=m -CONFIG_SCSI_ACORNSCSI_TAGGED_QUEUE=y -CONFIG_SCSI_ACORNSCSI_SYNC=y -CONFIG_SCSI_ARXESCSI=m -CONFIG_SCSI_CUMANA_2=m -CONFIG_SCSI_EESOXSCSI=m -CONFIG_SCSI_POWERTECSCSI=y - -# -# The following drivers are not fully supported -# -CONFIG_SCSI_CUMANA_1=m -CONFIG_SCSI_OAK1=m - -# -# I2O device support -# -# CONFIG_I2O is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN_BOOL is not set - -# -# Input device support -# -CONFIG_INPUT=y - -# -# Userland interfaces -# -CONFIG_INPUT_MOUSEDEV=y -CONFIG_INPUT_MOUSEDEV_PSAUX=y -CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 -CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 -# CONFIG_INPUT_JOYDEV is not set -# CONFIG_INPUT_TSDEV is not set -# CONFIG_INPUT_TSLIBDEV is not set -CONFIG_INPUT_EVDEV=y -# CONFIG_INPUT_EVBUG is not set - -# -# Input I/O drivers -# -# CONFIG_GAMEPORT is not set -CONFIG_SOUND_GAMEPORT=y -CONFIG_SERIO=y -# CONFIG_SERIO_I8042 is not set -# CONFIG_SERIO_SERPORT is not set -# CONFIG_SERIO_CT82C710 is not set -# CONFIG_SERIO_PARKBD is not set -CONFIG_SERIO_RPCKBD=y - -# -# Input Device Drivers -# -CONFIG_INPUT_KEYBOARD=y -CONFIG_KEYBOARD_ATKBD=y -# CONFIG_KEYBOARD_SUNKBD is not set -# CONFIG_KEYBOARD_XTKBD is not set -# CONFIG_KEYBOARD_NEWTON is not set -CONFIG_INPUT_MOUSE=y -# CONFIG_MOUSE_PS2 is not set -# CONFIG_MOUSE_SERIAL is not set -CONFIG_MOUSE_RISCPC=y -# CONFIG_INPUT_JOYSTICK is not set -# CONFIG_INPUT_TOUCHSCREEN is not set -# CONFIG_INPUT_MISC is not set - -# -# Character devices -# -CONFIG_VT=y -CONFIG_VT_CONSOLE=y -CONFIG_HW_CONSOLE=y -# CONFIG_SERIAL_NONSTANDARD is not set - -# -# Serial drivers -# -CONFIG_SERIAL_8250=y -CONFIG_SERIAL_8250_CONSOLE=y -# CONFIG_SERIAL_8250_EXTENDED is not set - -# -# Non-8250 serial port support -# -CONFIG_SERIAL_8250_ACORN=y -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=256 -CONFIG_PRINTER=m -# CONFIG_LP_CONSOLE is not set -# CONFIG_PPDEV is not set -# CONFIG_TIPAR is not set - -# -# I2C support -# -CONFIG_I2C=y -CONFIG_I2C_ALGOBIT=y -# CONFIG_I2C_PHILIPSPAR is not set -# CONFIG_I2C_ELV is not set -# CONFIG_I2C_VELLEMAN is not set -# CONFIG_SCx200_ACB is not set -# CONFIG_I2C_ALGOPCF is not set -CONFIG_I2C_CHARDEV=y -# CONFIG_I2C_PROC is not set - -# -# L3 serial bus support -# -# CONFIG_L3 is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -# CONFIG_GEN_RTC is not set -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set -# CONFIG_RAW_DRIVER is not set - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -CONFIG_AUTOFS4_FS=m -# CONFIG_REISERFS_FS is not set -CONFIG_ADFS_FS=y -# CONFIG_ADFS_FS_RW is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BEFS_FS is not set -# CONFIG_BFS_FS is not set -CONFIG_EXT3_FS=y -CONFIG_EXT3_FS_XATTR=y -# CONFIG_EXT3_FS_POSIX_ACL is not set -CONFIG_JBD=y -# CONFIG_JBD_DEBUG is not set -# CONFIG_FAT_FS is not set -# CONFIG_EFS_FS is not set -# CONFIG_CRAMFS is not set -# CONFIG_TMPFS is not set -CONFIG_RAMFS=y -CONFIG_ISO9660_FS=y -CONFIG_JOLIET=y -# CONFIG_ZISOFS is not set -# CONFIG_JFS_FS is not set -# CONFIG_MINIX_FS is not set -# CONFIG_VXFS_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -CONFIG_DEVPTS_FS=y -# CONFIG_QNX4FS_FS is not set -# CONFIG_ROMFS_FS is not set -CONFIG_EXT2_FS=y -# CONFIG_EXT2_FS_XATTR is not set -# CONFIG_SYSV_FS is not set -# CONFIG_UDF_FS is not set -# CONFIG_UFS_FS is not set -# CONFIG_XFS_FS is not set - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -# CONFIG_INTERMEZZO_FS is not set -CONFIG_NFS_FS=y -# CONFIG_NFS_V3 is not set -# CONFIG_NFS_V4 is not set -# CONFIG_NFSD is not set -CONFIG_SUNRPC=y -CONFIG_LOCKD=y -# CONFIG_EXPORTFS is not set -# CONFIG_CIFS is not set -# CONFIG_SMB_FS is not set -# CONFIG_NCP_FS is not set -# CONFIG_AFS_FS is not set -CONFIG_FS_MBCACHE=y - -# -# Partition Types -# -CONFIG_PARTITION_ADVANCED=y -CONFIG_ACORN_PARTITION=y -# CONFIG_ACORN_PARTITION_CUMANA is not set -# CONFIG_ACORN_PARTITION_EESOX is not set -CONFIG_ACORN_PARTITION_ICS=y -CONFIG_ACORN_PARTITION_ADFS=y -CONFIG_ACORN_PARTITION_POWERTEC=y -CONFIG_ACORN_PARTITION_RISCIX=y -CONFIG_OSF_PARTITION=y -CONFIG_AMIGA_PARTITION=y -# CONFIG_ATARI_PARTITION is not set -CONFIG_MAC_PARTITION=y -CONFIG_MSDOS_PARTITION=y -CONFIG_BSD_DISKLABEL=y -# CONFIG_MINIX_SUBPARTITION is not set -CONFIG_SOLARIS_X86_PARTITION=y -# CONFIG_UNIXWARE_DISKLABEL is not set -# CONFIG_LDM_PARTITION is not set -CONFIG_SGI_PARTITION=y -# CONFIG_ULTRIX_PARTITION is not set -CONFIG_SUN_PARTITION=y -# CONFIG_EFI_PARTITION is not set -CONFIG_NLS=y - -# -# Native Language Support -# -CONFIG_NLS_DEFAULT="iso8859-1" -CONFIG_NLS_CODEPAGE_437=m -CONFIG_NLS_CODEPAGE_737=m -CONFIG_NLS_CODEPAGE_775=m -CONFIG_NLS_CODEPAGE_850=m -CONFIG_NLS_CODEPAGE_852=m -CONFIG_NLS_CODEPAGE_855=m -CONFIG_NLS_CODEPAGE_857=m -CONFIG_NLS_CODEPAGE_860=m -CONFIG_NLS_CODEPAGE_861=m -CONFIG_NLS_CODEPAGE_862=m -CONFIG_NLS_CODEPAGE_863=m -CONFIG_NLS_CODEPAGE_864=m -CONFIG_NLS_CODEPAGE_865=m -CONFIG_NLS_CODEPAGE_866=m -CONFIG_NLS_CODEPAGE_869=m -# CONFIG_NLS_CODEPAGE_936 is not set -# CONFIG_NLS_CODEPAGE_950 is not set -# CONFIG_NLS_CODEPAGE_932 is not set -# CONFIG_NLS_CODEPAGE_949 is not set -CONFIG_NLS_CODEPAGE_874=m -CONFIG_NLS_ISO8859_8=m -# CONFIG_NLS_CODEPAGE_1250 is not set -# CONFIG_NLS_CODEPAGE_1251 is not set -CONFIG_NLS_ISO8859_1=m -CONFIG_NLS_ISO8859_2=m -CONFIG_NLS_ISO8859_3=m -CONFIG_NLS_ISO8859_4=m -CONFIG_NLS_ISO8859_5=m -CONFIG_NLS_ISO8859_6=m -CONFIG_NLS_ISO8859_7=m -CONFIG_NLS_ISO8859_9=m -# CONFIG_NLS_ISO8859_13 is not set -# CONFIG_NLS_ISO8859_14 is not set -# CONFIG_NLS_ISO8859_15 is not set -CONFIG_NLS_KOI8_R=m -# CONFIG_NLS_KOI8_U is not set -# CONFIG_NLS_UTF8 is not set - -# -# Console drivers -# - -# -# Frame-buffer support -# -CONFIG_FB=y -CONFIG_DUMMY_CONSOLE=y -CONFIG_FB_ACORN=y -# CONFIG_FB_VIRTUAL is not set -CONFIG_FBCON_ADVANCED=y -CONFIG_FBCON_MFB=y -CONFIG_FBCON_CFB2=y -CONFIG_FBCON_CFB4=y -CONFIG_FBCON_CFB8=y -CONFIG_FBCON_CFB16=y -CONFIG_FBCON_CFB24=y -CONFIG_FBCON_CFB32=y -# CONFIG_FBCON_ACCEL is not set -# CONFIG_FBCON_AFB is not set -# CONFIG_FBCON_ILBM is not set -# CONFIG_FBCON_IPLAN2P2 is not set -# CONFIG_FBCON_IPLAN2P4 is not set -# CONFIG_FBCON_IPLAN2P8 is not set -# CONFIG_FBCON_VGA_PLANES is not set -# CONFIG_FBCON_HGA is not set -# CONFIG_FBCON_FONTWIDTH8_ONLY is not set -# CONFIG_FONT_SUN8x16 is not set -# CONFIG_FONT_SUN12x22 is not set -CONFIG_FBCON_FONTS=y -# CONFIG_FONT_8x8 is not set -# CONFIG_FONT_8x16 is not set -# CONFIG_FONT_6x11 is not set -# CONFIG_FONT_PEARL_8x8 is not set -CONFIG_FONT_ACORN_8x8=y -# CONFIG_FONT_MINI_4x6 is not set - -# -# Sound -# -CONFIG_SOUND=m - -# -# Open Sound System -# -CONFIG_SOUND_PRIME=m -# CONFIG_SOUND_BT878 is not set -# CONFIG_SOUND_FUSION is not set -# CONFIG_SOUND_CS4281 is not set -# CONFIG_SOUND_ESSSOLO1 is not set -# CONFIG_SOUND_MAESTRO is not set -# CONFIG_SOUND_SONICVIBES is not set -# CONFIG_SOUND_TRIDENT is not set -# CONFIG_SOUND_MSNDCLAS is not set -# CONFIG_SOUND_MSNDPIN is not set -CONFIG_SOUND_OSS=m -# CONFIG_SOUND_TRACEINIT is not set -# CONFIG_SOUND_DMAP is not set -# CONFIG_SOUND_AD1816 is not set -# CONFIG_SOUND_SGALAXY is not set -# CONFIG_SOUND_ADLIB is not set -# CONFIG_SOUND_ACI_MIXER is not set -# CONFIG_SOUND_CS4232 is not set -# CONFIG_SOUND_SSCAPE is not set -# CONFIG_SOUND_GUS is not set -# CONFIG_SOUND_VMIDI is not set -# CONFIG_SOUND_TRIX is not set -# CONFIG_SOUND_MSS is not set -# CONFIG_SOUND_MPU401 is not set -# CONFIG_SOUND_NM256 is not set -# CONFIG_SOUND_MAD16 is not set -# CONFIG_SOUND_PAS is not set -# CONFIG_SOUND_PSS is not set -# CONFIG_SOUND_SB is not set -# CONFIG_SOUND_AWE32_SYNTH is not set -# CONFIG_SOUND_WAVEFRONT is not set -# CONFIG_SOUND_MAUI is not set -# CONFIG_SOUND_YM3812 is not set -# CONFIG_SOUND_OPL3SA1 is not set -# CONFIG_SOUND_OPL3SA2 is not set -# CONFIG_SOUND_UART6850 is not set -# CONFIG_SOUND_AEDSP16 is not set -CONFIG_SOUND_VIDC=m -# CONFIG_SOUND_TVMIXER is not set - -# -# Advanced Linux Sound Architecture -# -# CONFIG_SND is not set - -# -# Misc devices -# - -# -# Multimedia Capabilities Port drivers -# -# CONFIG_MCP is not set - -# -# Console Switches -# -# CONFIG_SWITCHES is not set - -# -# USB support -# - -# -# Bluetooth support -# -# CONFIG_BT is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_USER=y -# CONFIG_DEBUG_INFO is not set -CONFIG_DEBUG_KERNEL=y -# CONFIG_DEBUG_SLAB is not set -CONFIG_MAGIC_SYSRQ=y -# CONFIG_DEBUG_SPINLOCK is not set -# CONFIG_DEBUG_WAITQ is not set -# CONFIG_DEBUG_BUGVERBOSE is not set -CONFIG_DEBUG_ERRORS=y -# CONFIG_KALLSYMS is not set -CONFIG_DEBUG_LL=y - -# -# Security options -# -CONFIG_SECURITY_CAPABILITIES=y - -# -# Cryptographic options -# -# CONFIG_CRYPTO is not set - -# -# Library routines -# -# CONFIG_CRC32 is not set diff -prauN linux-2.6.0-test5/arch/arm/def-configs/shannon wli-2.6.0-test5-bk12-25/arch/arm/def-configs/shannon --- linux-2.6.0-test5/arch/arm/def-configs/shannon 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/shannon 1969-12-31 16:00:00.000000000 -0800 @@ -1,735 +0,0 @@ -# -# Automatically generated make config: don't edit -# -CONFIG_ARM=y -# CONFIG_EISA is not set -# CONFIG_SBUS is not set -# CONFIG_MCA is not set -CONFIG_UID16=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y -# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set -# CONFIG_GENERIC_BUST_SPINLOCK is not set -# CONFIG_GENERIC_ISA_DMA is not set - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -CONFIG_OBSOLETE=y - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODVERSIONS is not set -# CONFIG_KMOD is not set - -# -# System Type -# -# CONFIG_ARCH_ANAKIN is not set -# CONFIG_ARCH_ARCA5K is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_CAMELOT is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_RPC is not set -CONFIG_ARCH_SA1100=y -# CONFIG_ARCH_SHARK is not set - -# -# Archimedes/A5000 Implementations -# - -# -# Archimedes/A5000 Implementations (select only ONE) -# - -# -# Footbridge Implementations -# - -# -# SA11x0 Implementations -# -# CONFIG_SA1100_ASSABET is not set -# CONFIG_SA1100_ADSBITSY is not set -# CONFIG_SA1100_BRUTUS is not set -# CONFIG_SA1100_CERF is not set -# CONFIG_SA1100_H3600 is not set -# CONFIG_SA1100_EXTENEX1 is not set -# CONFIG_SA1100_FLEXANET is not set -# CONFIG_SA1100_FREEBIRD is not set -# CONFIG_SA1100_GRAPHICSCLIENT is not set -# CONFIG_SA1100_GRAPHICSMASTER is not set -# CONFIG_SA1100_JORNADA720 is not set -# CONFIG_SA1100_HUW_WEBPANEL is not set -# CONFIG_SA1100_ITSY is not set -# CONFIG_SA1100_LART is not set -# CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_OMNIMETER is not set -# CONFIG_SA1100_PANGOLIN is not set -# CONFIG_SA1100_PLEB is not set -CONFIG_SA1100_SHANNON=y -# CONFIG_SA1100_SHERMAN is not set -# CONFIG_SA1100_SIMPAD is not set -# CONFIG_SA1100_PFS168 is not set -# CONFIG_SA1100_VICTOR is not set -# CONFIG_SA1100_XP860 is not set -# CONFIG_SA1100_YOPY is not set -# CONFIG_SA1100_USB is not set - -# -# CLPS711X/EP721X Implementations -# -# CONFIG_ARCH_EP7211 is not set -# CONFIG_ARCH_EP7212 is not set -# CONFIG_ARCH_ACORN is not set -# CONFIG_FOOTBRIDGE is not set -# CONFIG_FOOTBRIDGE_HOST is not set -# CONFIG_FOOTBRIDGE_ADDIN is not set -CONFIG_CPU_32=y -# CONFIG_CPU_26 is not set - -# -# Processor Type -# -# CONFIG_CPU_32v3 is not set -CONFIG_CPU_32v4=y -# CONFIG_CPU_ARM610 is not set -# CONFIG_CPU_ARM710 is not set -# CONFIG_CPU_ARM720T is not set -# CONFIG_CPU_ARM920T is not set -# CONFIG_CPU_ARM922T is not set -# CONFIG_CPU_ARM926T is not set -# CONFIG_CPU_ARM1020 is not set -# CONFIG_CPU_SA110 is not set -CONFIG_CPU_SA1100=y -# CONFIG_ARM_THUMB is not set -CONFIG_DISCONTIGMEM=y - -# -# General setup -# -# CONFIG_PCI is not set -CONFIG_ISA=y -# CONFIG_ISA_DMA is not set -# CONFIG_CPU_FREQ is not set -CONFIG_HOTPLUG=y - -# -# PCMCIA/CardBus support -# -CONFIG_PCMCIA=y -# CONFIG_I82092 is not set -# CONFIG_I82365 is not set -# CONFIG_TCIC is not set -CONFIG_PCMCIA_SA1100=y -CONFIG_NET=y -CONFIG_SYSVIPC=y -# CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_SYSCTL=y - -# -# At least one math emulation must be selected -# -CONFIG_FPE_NWFPE=y -# CONFIG_FPE_FASTFPE is not set -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -# CONFIG_BINFMT_AOUT is not set -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -# CONFIG_PM is not set -# CONFIG_ARTHUR is not set -CONFIG_CMDLINE="console=ttySA0,9600 console=tty1 root=/dev/mtdblock2 init=/linuxrc" -# CONFIG_LEDS is not set -CONFIG_ALIGNMENT_TRAP=y - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Memory Technology Devices (MTD) -# -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set -CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_REDBOOT_PARTS is not set -# CONFIG_MTD_BOOTLDR_PARTS is not set -# CONFIG_MTD_AFS_PARTS is not set - -# -# User Modules And Translation Layers -# -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -# CONFIG_NFTL is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=y -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_GEN_PROBE=y -# CONFIG_MTD_CFI_ADV_OPTIONS is not set -# CONFIG_MTD_CFI_INTELEXT is not set -CONFIG_MTD_CFI_AMDSTD=y -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_ABSENT is not set -# CONFIG_MTD_OBSOLETE_CHIPS is not set - -# -# Mapping drivers for chip access -# -# CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_NORA is not set -# CONFIG_MTD_ARM_INTEGRATOR is not set -CONFIG_MTD_SA1100=y -# CONFIG_MTD_IQ80310 is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLKMTD is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC1000 is not set -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOCPROBE is not set - -# -# NAND Flash Device Drivers -# -# CONFIG_MTD_NAND is not set - -# -# Plug and Play configuration -# -# CONFIG_PNP is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_XD is not set -# CONFIG_BLK_DEV_LOOP is not set -# CONFIG_BLK_DEV_NBD is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=8192 -CONFIG_BLK_DEV_INITRD=y - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set - -# -# Networking options -# -CONFIG_PACKET=y -CONFIG_PACKET_MMAP=y -# CONFIG_NETLINK is not set -# CONFIG_NETFILTER is not set -# CONFIG_FILTER is not set -CONFIG_UNIX=y -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -# CONFIG_IP_PNP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_INET_ECN is not set -# CONFIG_SYN_COOKIES is not set -# CONFIG_IPV6 is not set -# CONFIG_KHTTPD is not set -# CONFIG_ATM is not set - -# -# -# -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_LLC is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set - -# -# Ethernet (10 or 100Mbit) -# -CONFIG_NET_ETHERNET=y -# CONFIG_NET_VENDOR_3COM is not set -# CONFIG_LANCE is not set -# CONFIG_NET_VENDOR_SMC is not set -# CONFIG_NET_VENDOR_RACAL is not set -# CONFIG_AT1700 is not set -# CONFIG_DEPCA is not set -# CONFIG_HP100 is not set -# CONFIG_NET_ISA is not set -# CONFIG_NET_PCI is not set -# CONFIG_NET_POCKET is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_ACENIC_OMIT_TIGON_I is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set - -# -# Token Ring devices -# -# CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# PCMCIA network device support -# -CONFIG_NET_PCMCIA=y -# CONFIG_PCMCIA_3C589 is not set -# CONFIG_PCMCIA_3C574 is not set -# CONFIG_PCMCIA_FMVJ18X is not set -CONFIG_PCMCIA_PCNET=y -# CONFIG_PCMCIA_NMCLAN is not set -CONFIG_PCMCIA_SMC91C92=y -# CONFIG_PCMCIA_XIRC2PS is not set -# CONFIG_NET_PCMCIA_RADIO is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# ATA/IDE/MFM/RLL support -# -CONFIG_IDE=m - -# -# IDE, ATA and ATAPI Block devices -# -CONFIG_BLK_DEV_IDE=m - -# -# Please see Documentation/ide.txt for help/info on IDE drives -# -# CONFIG_BLK_DEV_HD_IDE is not set -# CONFIG_BLK_DEV_HD is not set -# CONFIG_BLK_DEV_IDEDISK is not set -# CONFIG_BLK_DEV_IDECS is not set -# CONFIG_BLK_DEV_IDECD is not set -# CONFIG_BLK_DEV_IDETAPE is not set -# CONFIG_BLK_DEV_IDEFLOPPY is not set - -# -# IDE chipset support/bugfixes -# -# CONFIG_BLK_DEV_CMD640 is not set -# CONFIG_IDE_CHIPSETS is not set -# CONFIG_IDEDMA_AUTO is not set -# CONFIG_BLK_DEV_ATARAID is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# I2O device support -# -# CONFIG_I2O is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Input core support -# -CONFIG_INPUT=y -CONFIG_INPUT_KEYBDEV=y -# CONFIG_INPUT_MOUSEDEV is not set -# CONFIG_INPUT_JOYDEV is not set -# CONFIG_INPUT_EVDEV is not set - -# -# Character devices -# -CONFIG_VT=y -CONFIG_VT_CONSOLE=y -# CONFIG_SERIAL is not set -# CONFIG_SERIAL_NONSTANDARD is not set - -# -# Serial drivers -# -CONFIG_SERIAL_SA1100=y -CONFIG_SERIAL_SA1100_CONSOLE=y -CONFIG_SA1100_DEFAULT_BAUDRATE=9600 -# CONFIG_SERIAL_8250 is not set -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=256 - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# L3 serial bus support -# -# CONFIG_L3 is not set - -# -# Other L3 adapters -# -# CONFIG_BIT_SA1100_GPIO is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -# CONFIG_MOUSE is not set - -# -# Joysticks -# -# CONFIG_INPUT_GAMEPORT is not set -# CONFIG_INPUT_SERIO is not set - -# -# Joysticks -# -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -CONFIG_WATCHDOG=y -# CONFIG_WATCHDOG_NOWAYOUT is not set -# CONFIG_SOFT_WATCHDOG is not set -# CONFIG_WDT is not set -# CONFIG_WDTPCI is not set -# CONFIG_PCWATCHDOG is not set -# CONFIG_ACQUIRE_WDT is not set -# CONFIG_ADVANTECH_WDT is not set -CONFIG_SA1100_WATCHDOG=y -# CONFIG_EUROTECH_WDT is not set -# CONFIG_IB700_WDT is not set -# CONFIG_I810_TCO is not set -# CONFIG_MIXCOMWD is not set -# CONFIG_60XX_WDT is not set -# CONFIG_W83877F_WDT is not set -# CONFIG_MACHZ_WDT is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -CONFIG_SA1100_RTC=y -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set - -# -# PCMCIA character devices -# - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set -# CONFIG_REISERFS_FS is not set -# CONFIG_ADFS_FS is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_CMS_FS is not set -# CONFIG_EXT3_FS is not set -# CONFIG_JBD is not set -CONFIG_FAT_FS=y -CONFIG_MSDOS_FS=y -# CONFIG_UMSDOS_FS is not set -CONFIG_VFAT_FS=y -# CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set -CONFIG_JFFS2_FS=y -CONFIG_JFFS2_FS_DEBUG=0 -# CONFIG_CRAMFS is not set -# CONFIG_TMPFS is not set -CONFIG_RAMFS=y -# CONFIG_ISO9660_FS is not set -CONFIG_MINIX_FS=y -# CONFIG_FREEVXFS_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS_DEBUG is not set -# CONFIG_NTFS_RW is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -CONFIG_DEVPTS_FS=y -# CONFIG_QNX4FS_FS is not set -# CONFIG_ROMFS_FS is not set -# CONFIG_EXT2_FS is not set -# CONFIG_SYSV_FS is not set -# CONFIG_UDF_FS is not set -# CONFIG_UFS_FS is not set - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -# CONFIG_INTERMEZZO_FS is not set -CONFIG_NFS_FS=y -# CONFIG_NFS_V3 is not set -# CONFIG_NFSD is not set -CONFIG_SUNRPC=y -CONFIG_LOCKD=y -# CONFIG_SMB_FS is not set -# CONFIG_NCP_FS is not set -# CONFIG_ZISOFS_FS is not set -# CONFIG_ZLIB_FS_INFLATE is not set - -# -# Partition Types -# -CONFIG_PARTITION_ADVANCED=y -# CONFIG_ACORN_PARTITION is not set -# CONFIG_OSF_PARTITION is not set -# CONFIG_AMIGA_PARTITION is not set -# CONFIG_ATARI_PARTITION is not set -# CONFIG_MAC_PARTITION is not set -CONFIG_MSDOS_PARTITION=y -# CONFIG_BSD_DISKLABEL is not set -# CONFIG_MINIX_SUBPARTITION is not set -# CONFIG_SOLARIS_X86_PARTITION is not set -# CONFIG_UNIXWARE_DISKLABEL is not set -# CONFIG_LDM_PARTITION is not set -# CONFIG_SGI_PARTITION is not set -# CONFIG_ULTRIX_PARTITION is not set -# CONFIG_SUN_PARTITION is not set -# CONFIG_SMB_NLS is not set -CONFIG_NLS=y - -# -# Native Language Support -# -CONFIG_NLS_DEFAULT="iso8859-1" -# CONFIG_NLS_CODEPAGE_437 is not set -# CONFIG_NLS_CODEPAGE_737 is not set -# CONFIG_NLS_CODEPAGE_775 is not set -# CONFIG_NLS_CODEPAGE_850 is not set -# CONFIG_NLS_CODEPAGE_852 is not set -# CONFIG_NLS_CODEPAGE_855 is not set -# CONFIG_NLS_CODEPAGE_857 is not set -# CONFIG_NLS_CODEPAGE_860 is not set -# CONFIG_NLS_CODEPAGE_861 is not set -# CONFIG_NLS_CODEPAGE_862 is not set -# CONFIG_NLS_CODEPAGE_863 is not set -# CONFIG_NLS_CODEPAGE_864 is not set -# CONFIG_NLS_CODEPAGE_865 is not set -# CONFIG_NLS_CODEPAGE_866 is not set -# CONFIG_NLS_CODEPAGE_869 is not set -# CONFIG_NLS_CODEPAGE_936 is not set -# CONFIG_NLS_CODEPAGE_950 is not set -# CONFIG_NLS_CODEPAGE_932 is not set -# CONFIG_NLS_CODEPAGE_949 is not set -# CONFIG_NLS_CODEPAGE_874 is not set -# CONFIG_NLS_ISO8859_8 is not set -# CONFIG_NLS_CODEPAGE_1251 is not set -# CONFIG_NLS_ISO8859_1 is not set -# CONFIG_NLS_ISO8859_2 is not set -# CONFIG_NLS_ISO8859_3 is not set -# CONFIG_NLS_ISO8859_4 is not set -# CONFIG_NLS_ISO8859_5 is not set -# CONFIG_NLS_ISO8859_6 is not set -# CONFIG_NLS_ISO8859_7 is not set -# CONFIG_NLS_ISO8859_9 is not set -# CONFIG_NLS_ISO8859_13 is not set -# CONFIG_NLS_ISO8859_14 is not set -# CONFIG_NLS_ISO8859_15 is not set -# CONFIG_NLS_KOI8_R is not set -# CONFIG_NLS_KOI8_U is not set -# CONFIG_NLS_UTF8 is not set - -# -# Console drivers -# -CONFIG_PC_KEYMAP=y -# CONFIG_VGA_CONSOLE is not set - -# -# Frame-buffer support -# -CONFIG_FB=y -CONFIG_DUMMY_CONSOLE=y -CONFIG_FB_SA1100=y -# CONFIG_FB_VIRTUAL is not set -# CONFIG_FBCON_ADVANCED is not set -CONFIG_FBCON_CFB2=y -CONFIG_FBCON_CFB4=y -CONFIG_FBCON_CFB8=y -CONFIG_FBCON_CFB16=y -# CONFIG_FBCON_FONTWIDTH8_ONLY is not set -# CONFIG_FBCON_FONTS is not set -CONFIG_FONT_8x8=y -CONFIG_FONT_8x16=y - -# -# Sound -# -CONFIG_SOUND=y -# CONFIG_SOUND_BT878 is not set -# CONFIG_SOUND_FUSION is not set -# CONFIG_SOUND_CS4281 is not set -# CONFIG_SOUND_ESSSOLO1 is not set -# CONFIG_SOUND_MAESTRO is not set -# CONFIG_SOUND_SONICVIBES is not set -# CONFIG_SOUND_TRIDENT is not set -# CONFIG_SOUND_MSNDCLAS is not set -# CONFIG_SOUND_MSNDPIN is not set -CONFIG_SOUND_SA1100=y -# CONFIG_SOUND_SA1100SSP is not set -# CONFIG_SOUND_OSS is not set - -# -# Multimedia Capabilities Port drivers -# -CONFIG_MCP=y -CONFIG_MCP_SA1100=y -CONFIG_MCP_UCB1200=y -CONFIG_MCP_UCB1200_AUDIO=y -CONFIG_MCP_UCB1200_TS=y - -# -# USB support -# -# CONFIG_USB is not set - -# -# USB Controllers -# - -# -# USB Device Class drivers -# - -# -# USB Human Interface Devices (HID) -# - -# -# USB Imaging devices -# - -# -# USB Multimedia devices -# - -# -# Video4Linux support is needed for USB Multimedia device support -# - -# -# USB Network adaptors -# - -# -# USB port drivers -# - -# -# USB Serial Converter support -# - -# -# USB Miscellaneous drivers -# - -# -# Bluetooth support -# -# CONFIG_BT is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_ERRORS=y -CONFIG_DEBUG_USER=y -# CONFIG_DEBUG_INFO is not set -# CONFIG_DEBUG_SLAB is not set -CONFIG_MAGIC_SYSRQ=y -# CONFIG_DEBUG_SPINLOCK is not set -CONFIG_DEBUG_LL=y diff -prauN linux-2.6.0-test5/arch/arm/def-configs/shark wli-2.6.0-test5-bk12-25/arch/arm/def-configs/shark --- linux-2.6.0-test5/arch/arm/def-configs/shark 2003-09-08 12:50:13.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/shark 1969-12-31 16:00:00.000000000 -0800 @@ -1,852 +0,0 @@ -# -# Automatically generated make config: don't edit -# -CONFIG_ARM=y -CONFIG_MMU=y -CONFIG_UID16=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y - -# -# General setup -# -CONFIG_SWAP=y -CONFIG_SYSVIPC=y -# CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_SYSCTL=y -CONFIG_LOG_BUF_SHIFT=14 - -# -# Loadable module support -# -CONFIG_MODULES=y -CONFIG_MODULE_UNLOAD=y -CONFIG_MODULE_FORCE_UNLOAD=y -CONFIG_OBSOLETE_MODPARM=y -# CONFIG_MODVERSIONS is not set -CONFIG_KMOD=y - -# -# System Type -# -# CONFIG_ARCH_ADIFCC is not set -# CONFIG_ARCH_ANAKIN is not set -# CONFIG_ARCH_ARCA5K is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_PXA is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_CAMELOT is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_IOP310 is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_RPC is not set -# CONFIG_ARCH_SA1100 is not set -CONFIG_ARCH_SHARK=y - -# -# Archimedes/A5000 Implementations -# - -# -# Archimedes/A5000 Implementations (select only ONE) -# - -# -# CLPS711X/EP721X Implementations -# - -# -# Epxa10db -# - -# -# Footbridge Implementations -# - -# -# IOP310 Implementation Options -# - -# -# IOP310 Chipset Features -# - -# -# Intel PXA250/210 Implementations -# - -# -# SA11x0 Implementations -# - -# -# Processor Type -# -CONFIG_CPU_32=y -CONFIG_CPU_SA110=y -CONFIG_CPU_32v4=y - -# -# Processor Features -# - -# -# General setup -# -CONFIG_PCI=y -CONFIG_PCI_HOST_VIA82C505=y -CONFIG_ISA=y -CONFIG_ISA_DMA=y -# CONFIG_ZBOOT_ROM is not set -CONFIG_ZBOOT_ROM_TEXT=0x0 -CONFIG_ZBOOT_ROM_BSS=0x0 -CONFIG_PCI_LEGACY_PROC=y -# CONFIG_PCI_NAMES is not set -# CONFIG_HOTPLUG is not set - -# -# At least one math emulation must be selected -# -# CONFIG_FPE_NWFPE is not set -CONFIG_FPE_FASTFPE=y -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -# CONFIG_BINFMT_AOUT is not set -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -# CONFIG_PM is not set -# CONFIG_PREEMPT is not set -# CONFIG_ARTHUR is not set -CONFIG_CMDLINE="" -CONFIG_LEDS=y -CONFIG_LEDS_TIMER=y -# CONFIG_LEDS_CPU is not set -CONFIG_ALIGNMENT_TRAP=y - -# -# Parallel port support -# -CONFIG_PARPORT=y -CONFIG_PARPORT_PC=y -CONFIG_PARPORT_PC_CML1=y -# CONFIG_PARPORT_SERIAL is not set -# CONFIG_PARPORT_PC_FIFO is not set -# CONFIG_PARPORT_PC_SUPERIO is not set -# CONFIG_PARPORT_ARC is not set -# CONFIG_PARPORT_OTHER is not set -# CONFIG_PARPORT_1284 is not set - -# -# Memory Technology Devices (MTD) -# -# CONFIG_MTD is not set - -# -# Plug and Play support -# -# CONFIG_PNP is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_XD is not set -# CONFIG_PARIDE is not set -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_BLK_DEV_DAC960 is not set -# CONFIG_BLK_DEV_UMEM is not set -CONFIG_BLK_DEV_LOOP=y -# CONFIG_BLK_DEV_NBD is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=4096 -# CONFIG_BLK_DEV_INITRD is not set - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set - -# -# Networking support -# -CONFIG_NET=y - -# -# Networking options -# -CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set -# CONFIG_NETLINK_DEV is not set -# CONFIG_NETFILTER is not set -CONFIG_UNIX=y -# CONFIG_NET_KEY is not set -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -# CONFIG_IP_PNP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_ARPD is not set -# CONFIG_INET_ECN is not set -# CONFIG_SYN_COOKIES is not set -# CONFIG_INET_AH is not set -# CONFIG_INET_ESP is not set -# CONFIG_IPV6 is not set -# CONFIG_XFRM_USER is not set - -# -# SCTP Configuration (EXPERIMENTAL) -# -CONFIG_IPV6_SCTP__=y -# CONFIG_IP_SCTP is not set -# CONFIG_ATM is not set -# CONFIG_VLAN_8021Q is not set -# CONFIG_LLC is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network testing -# -# CONFIG_NET_PKTGEN is not set -CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set -# CONFIG_ETHERTAP is not set - -# -# Ethernet (10 or 100Mbit) -# -CONFIG_NET_ETHERNET=y -# CONFIG_MII is not set -# CONFIG_HAPPYMEAL is not set -# CONFIG_SUNGEM is not set -# CONFIG_NET_VENDOR_3COM is not set -# CONFIG_LANCE is not set -# CONFIG_NET_VENDOR_SMC is not set -# CONFIG_NET_VENDOR_RACAL is not set - -# -# Tulip family network device support -# -# CONFIG_NET_TULIP is not set -# CONFIG_AT1700 is not set -# CONFIG_DEPCA is not set -# CONFIG_HP100 is not set -# CONFIG_NET_ISA is not set -CONFIG_NET_PCI=y -# CONFIG_PCNET32 is not set -# CONFIG_AMD8111_ETH is not set -# CONFIG_ADAPTEC_STARFIRE is not set -# CONFIG_AC3200 is not set -# CONFIG_APRICOT is not set -# CONFIG_B44 is not set -CONFIG_CS89x0=y -# CONFIG_DGRS is not set -# CONFIG_EEPRO100 is not set -# CONFIG_E100 is not set -# CONFIG_FEALNX is not set -# CONFIG_NATSEMI is not set -# CONFIG_NE2K_PCI is not set -# CONFIG_8139CP is not set -# CONFIG_8139TOO is not set -# CONFIG_SIS900 is not set -# CONFIG_EPIC100 is not set -# CONFIG_SUNDANCE is not set -# CONFIG_TLAN is not set -# CONFIG_VIA_RHINE is not set -# CONFIG_NET_POCKET is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_ACENIC is not set -# CONFIG_DL2K is not set -# CONFIG_E1000 is not set -# CONFIG_NS83820 is not set -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -# CONFIG_R8169 is not set -# CONFIG_SK98LIN is not set -# CONFIG_TIGON3 is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PLIP is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set - -# -# Token Ring devices (depends on LLC=y) -# -# CONFIG_NET_FC is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# ATA/ATAPI/MFM/RLL support -# -CONFIG_IDE=y - -# -# IDE, ATA and ATAPI Block devices -# -CONFIG_BLK_DEV_IDE=y - -# -# Please see Documentation/ide.txt for help/info on IDE drives -# -# CONFIG_BLK_DEV_HD is not set -CONFIG_BLK_DEV_IDEDISK=y -# CONFIG_IDEDISK_MULTI_MODE is not set -# CONFIG_IDEDISK_STROKE is not set -CONFIG_BLK_DEV_IDECD=y -CONFIG_BLK_DEV_IDEFLOPPY=y -# CONFIG_BLK_DEV_IDESCSI is not set -# CONFIG_IDE_TASK_IOCTL is not set - -# -# IDE chipset support/bugfixes -# -# CONFIG_BLK_DEV_IDEPCI is not set -# CONFIG_IDE_CHIPSETS is not set - -# -# SCSI support -# -CONFIG_SCSI=m - -# -# SCSI support type (disk, tape, CD-ROM) -# -CONFIG_BLK_DEV_SD=m -CONFIG_CHR_DEV_ST=m -# CONFIG_CHR_DEV_OSST is not set -CONFIG_BLK_DEV_SR=m -# CONFIG_BLK_DEV_SR_VENDOR is not set -CONFIG_CHR_DEV_SG=m - -# -# Some SCSI devices (e.g. CD jukebox) support multiple LUNs -# -# CONFIG_SCSI_MULTI_LUN is not set -# CONFIG_SCSI_REPORT_LUNS is not set -# CONFIG_SCSI_CONSTANTS is not set -# CONFIG_SCSI_LOGGING is not set - -# -# SCSI low-level drivers -# -# CONFIG_BLK_DEV_3W_XXXX_RAID is not set -# CONFIG_SCSI_7000FASST is not set -# CONFIG_SCSI_ACARD is not set -# CONFIG_SCSI_AHA152X is not set -# CONFIG_SCSI_AHA1542 is not set -# CONFIG_SCSI_AACRAID is not set -# CONFIG_SCSI_AIC7XXX is not set -# CONFIG_SCSI_AIC7XXX_OLD is not set -# CONFIG_SCSI_AIC79XX is not set -# CONFIG_SCSI_DPT_I2O is not set -# CONFIG_SCSI_ADVANSYS is not set -# CONFIG_SCSI_IN2000 is not set -# CONFIG_SCSI_AM53C974 is not set -# CONFIG_SCSI_MEGARAID is not set -# CONFIG_SCSI_BUSLOGIC is not set -# CONFIG_SCSI_CPQFCTS is not set -# CONFIG_SCSI_DMX3191D is not set -# CONFIG_SCSI_DTC3280 is not set -# CONFIG_SCSI_EATA is not set -# CONFIG_SCSI_EATA_PIO is not set -# CONFIG_SCSI_FUTURE_DOMAIN is not set -# CONFIG_SCSI_GDTH is not set -# CONFIG_SCSI_GENERIC_NCR5380 is not set -# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set -# CONFIG_SCSI_INITIO is not set -# CONFIG_SCSI_INIA100 is not set -# CONFIG_SCSI_PPA is not set -# CONFIG_SCSI_IMM is not set -# CONFIG_SCSI_NCR53C406A is not set -# CONFIG_SCSI_NCR53C7xx is not set -# CONFIG_SCSI_SYM53C8XX_2 is not set -# CONFIG_SCSI_NCR53C8XX is not set -# CONFIG_SCSI_SYM53C8XX is not set -# CONFIG_SCSI_PAS16 is not set -# CONFIG_SCSI_PCI2000 is not set -# CONFIG_SCSI_PCI2220I is not set -# CONFIG_SCSI_PSI240I is not set -# CONFIG_SCSI_QLOGIC_FAS is not set -# CONFIG_SCSI_QLOGIC_ISP is not set -# CONFIG_SCSI_QLOGIC_FC is not set -# CONFIG_SCSI_QLOGIC_1280 is not set -# CONFIG_SCSI_SYM53C416 is not set -# CONFIG_SCSI_DC390T is not set -# CONFIG_SCSI_T128 is not set -# CONFIG_SCSI_U14_34F is not set -# CONFIG_SCSI_NSP32 is not set -# CONFIG_SCSI_DEBUG is not set - -# -# IEEE 1394 (FireWire) support (EXPERIMENTAL) -# -# CONFIG_IEEE1394 is not set - -# -# I2O device support -# -# CONFIG_I2O is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN_BOOL is not set - -# -# Input device support -# -CONFIG_INPUT=y - -# -# Userland interfaces -# -CONFIG_INPUT_MOUSEDEV=y -CONFIG_INPUT_MOUSEDEV_PSAUX=y -CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 -CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 -# CONFIG_INPUT_JOYDEV is not set -# CONFIG_INPUT_TSDEV is not set -# CONFIG_INPUT_TSLIBDEV is not set -# CONFIG_INPUT_EVDEV is not set -# CONFIG_INPUT_EVBUG is not set - -# -# Input I/O drivers -# -# CONFIG_GAMEPORT is not set -CONFIG_SOUND_GAMEPORT=y -CONFIG_SERIO=y -CONFIG_SERIO_I8042=y -# CONFIG_SERIO_SERPORT is not set -# CONFIG_SERIO_CT82C710 is not set -# CONFIG_SERIO_PARKBD is not set -# CONFIG_SERIO_PCIPS2 is not set - -# -# Input Device Drivers -# -CONFIG_INPUT_KEYBOARD=y -CONFIG_KEYBOARD_ATKBD=y -# CONFIG_KEYBOARD_SUNKBD is not set -# CONFIG_KEYBOARD_XTKBD is not set -# CONFIG_KEYBOARD_NEWTON is not set -CONFIG_INPUT_MOUSE=y -CONFIG_MOUSE_PS2=y -# CONFIG_MOUSE_SERIAL is not set -# CONFIG_MOUSE_INPORT is not set -# CONFIG_MOUSE_LOGIBM is not set -# CONFIG_MOUSE_PC110PAD is not set -# CONFIG_INPUT_JOYSTICK is not set -# CONFIG_INPUT_TOUCHSCREEN is not set -# CONFIG_INPUT_MISC is not set - -# -# Character devices -# -# CONFIG_VT is not set -# CONFIG_SERIAL_NONSTANDARD is not set - -# -# Serial drivers -# -CONFIG_SERIAL_8250=y -CONFIG_SERIAL_8250_CONSOLE=y -# CONFIG_SERIAL_8250_EXTENDED is not set - -# -# Non-8250 serial port support -# -# CONFIG_SERIAL_DZ is not set -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=256 -CONFIG_PRINTER=m -# CONFIG_LP_CONSOLE is not set -# CONFIG_PPDEV is not set -# CONFIG_TIPAR is not set - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# I2C Hardware Sensors Mainboard support -# - -# -# I2C Hardware Sensors Chip support -# - -# -# L3 serial bus support -# -# CONFIG_L3 is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -# CONFIG_QIC02_TAPE is not set - -# -# IPMI -# -# CONFIG_IPMI_HANDLER is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -# CONFIG_NVRAM is not set -CONFIG_RTC=y -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set -# CONFIG_RAW_DRIVER is not set -# CONFIG_HANGCHECK_TIMER is not set - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set - -# -# File systems -# -CONFIG_EXT2_FS=y -# CONFIG_EXT2_FS_XATTR is not set -CONFIG_EXT3_FS=y -CONFIG_EXT3_FS_XATTR=y -# CONFIG_EXT3_FS_POSIX_ACL is not set -CONFIG_JBD=y -# CONFIG_JBD_DEBUG is not set -CONFIG_FS_MBCACHE=y -# CONFIG_REISERFS_FS is not set -# CONFIG_JFS_FS is not set -# CONFIG_XFS_FS is not set -# CONFIG_MINIX_FS is not set -# CONFIG_ROMFS_FS is not set -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set - -# -# CD-ROM/DVD Filesystems -# -CONFIG_ISO9660_FS=y -CONFIG_JOLIET=y -# CONFIG_ZISOFS is not set -# CONFIG_UDF_FS is not set - -# -# DOS/FAT/NT Filesystems -# -CONFIG_FAT_FS=y -CONFIG_MSDOS_FS=y -CONFIG_VFAT_FS=y -# CONFIG_NTFS_FS is not set - -# -# Pseudo filesystems -# -CONFIG_PROC_FS=y -CONFIG_DEVFS_FS=y -CONFIG_DEVFS_MOUNT=y -# CONFIG_DEVFS_DEBUG is not set -# CONFIG_DEVPTS_FS is not set -# CONFIG_TMPFS is not set -CONFIG_RAMFS=y - -# -# Miscellaneous filesystems -# -# CONFIG_ADFS_FS is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BEFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_EFS_FS is not set -# CONFIG_CRAMFS is not set -# CONFIG_VXFS_FS is not set -# CONFIG_HPFS_FS is not set -# CONFIG_QNX4FS_FS is not set -# CONFIG_SYSV_FS is not set -# CONFIG_UFS_FS is not set - -# -# Network File Systems -# -CONFIG_NFS_FS=y -# CONFIG_NFS_V3 is not set -# CONFIG_NFS_V4 is not set -# CONFIG_NFSD is not set -CONFIG_LOCKD=y -# CONFIG_EXPORTFS is not set -CONFIG_SUNRPC=y -# CONFIG_SUNRPC_GSS is not set -# CONFIG_SMB_FS is not set -# CONFIG_CIFS is not set -# CONFIG_NCP_FS is not set -# CONFIG_CODA_FS is not set -# CONFIG_INTERMEZZO_FS is not set -# CONFIG_AFS_FS is not set - -# -# Partition Types -# -CONFIG_PARTITION_ADVANCED=y -# CONFIG_ACORN_PARTITION is not set -# CONFIG_OSF_PARTITION is not set -# CONFIG_AMIGA_PARTITION is not set -# CONFIG_ATARI_PARTITION is not set -# CONFIG_MAC_PARTITION is not set -CONFIG_MSDOS_PARTITION=y -# CONFIG_BSD_DISKLABEL is not set -# CONFIG_MINIX_SUBPARTITION is not set -# CONFIG_SOLARIS_X86_PARTITION is not set -# CONFIG_UNIXWARE_DISKLABEL is not set -# CONFIG_LDM_PARTITION is not set -# CONFIG_NEC98_PARTITION is not set -# CONFIG_SGI_PARTITION is not set -# CONFIG_ULTRIX_PARTITION is not set -# CONFIG_SUN_PARTITION is not set -# CONFIG_EFI_PARTITION is not set -CONFIG_NLS=y - -# -# Native Language Support -# -CONFIG_NLS_DEFAULT="iso8859-1" -CONFIG_NLS_CODEPAGE_437=y -# CONFIG_NLS_CODEPAGE_737 is not set -# CONFIG_NLS_CODEPAGE_775 is not set -CONFIG_NLS_CODEPAGE_850=y -# CONFIG_NLS_CODEPAGE_852 is not set -# CONFIG_NLS_CODEPAGE_855 is not set -# CONFIG_NLS_CODEPAGE_857 is not set -# CONFIG_NLS_CODEPAGE_860 is not set -# CONFIG_NLS_CODEPAGE_861 is not set -# CONFIG_NLS_CODEPAGE_862 is not set -# CONFIG_NLS_CODEPAGE_863 is not set -# CONFIG_NLS_CODEPAGE_864 is not set -# CONFIG_NLS_CODEPAGE_865 is not set -# CONFIG_NLS_CODEPAGE_866 is not set -# CONFIG_NLS_CODEPAGE_869 is not set -# CONFIG_NLS_CODEPAGE_936 is not set -# CONFIG_NLS_CODEPAGE_950 is not set -# CONFIG_NLS_CODEPAGE_932 is not set -# CONFIG_NLS_CODEPAGE_949 is not set -# CONFIG_NLS_CODEPAGE_874 is not set -# CONFIG_NLS_ISO8859_8 is not set -# CONFIG_NLS_CODEPAGE_1250 is not set -# CONFIG_NLS_CODEPAGE_1251 is not set -CONFIG_NLS_ISO8859_1=y -# CONFIG_NLS_ISO8859_2 is not set -# CONFIG_NLS_ISO8859_3 is not set -# CONFIG_NLS_ISO8859_4 is not set -# CONFIG_NLS_ISO8859_5 is not set -# CONFIG_NLS_ISO8859_6 is not set -# CONFIG_NLS_ISO8859_7 is not set -# CONFIG_NLS_ISO8859_9 is not set -# CONFIG_NLS_ISO8859_13 is not set -# CONFIG_NLS_ISO8859_14 is not set -# CONFIG_NLS_ISO8859_15 is not set -# CONFIG_NLS_KOI8_R is not set -# CONFIG_NLS_KOI8_U is not set -# CONFIG_NLS_UTF8 is not set - -# -# Graphics support -# -CONFIG_FB=y -# CONFIG_FB_CIRRUS is not set -# CONFIG_FB_PM2 is not set -CONFIG_FB_CYBER2000=y -# CONFIG_FB_IMSTT is not set -# CONFIG_FB_RIVA is not set -# CONFIG_FB_MATROX is not set -# CONFIG_FB_RADEON is not set -# CONFIG_FB_ATY128 is not set -# CONFIG_FB_ATY is not set -# CONFIG_FB_SIS is not set -# CONFIG_FB_NEOMAGIC is not set -# CONFIG_FB_3DFX is not set -# CONFIG_FB_VOODOO1 is not set -# CONFIG_FB_TRIDENT is not set -# CONFIG_FB_PM3 is not set -# CONFIG_FB_VIRTUAL is not set - -# -# Logo configuration -# -# CONFIG_LOGO is not set - -# -# Sound -# -CONFIG_SOUND=m - -# -# Advanced Linux Sound Architecture -# -# CONFIG_SND is not set - -# -# Open Sound System -# -CONFIG_SOUND_PRIME=m -# CONFIG_SOUND_BT878 is not set -# CONFIG_SOUND_CMPCI is not set -# CONFIG_SOUND_EMU10K1 is not set -# CONFIG_SOUND_FUSION is not set -# CONFIG_SOUND_CS4281 is not set -# CONFIG_SOUND_ES1370 is not set -# CONFIG_SOUND_ES1371 is not set -# CONFIG_SOUND_ESSSOLO1 is not set -# CONFIG_SOUND_MAESTRO is not set -# CONFIG_SOUND_MAESTRO3 is not set -# CONFIG_SOUND_ICH is not set -# CONFIG_SOUND_RME96XX is not set -# CONFIG_SOUND_SONICVIBES is not set -# CONFIG_SOUND_TRIDENT is not set -# CONFIG_SOUND_MSNDCLAS is not set -# CONFIG_SOUND_MSNDPIN is not set -# CONFIG_SOUND_VIA82CXXX is not set -CONFIG_SOUND_OSS=m -# CONFIG_SOUND_TRACEINIT is not set -# CONFIG_SOUND_DMAP is not set -# CONFIG_SOUND_AD1816 is not set -# CONFIG_SOUND_SGALAXY is not set -CONFIG_SOUND_ADLIB=m -# CONFIG_SOUND_ACI_MIXER is not set -# CONFIG_SOUND_CS4232 is not set -# CONFIG_SOUND_SSCAPE is not set -# CONFIG_SOUND_GUS is not set -# CONFIG_SOUND_VMIDI is not set -# CONFIG_SOUND_TRIX is not set -# CONFIG_SOUND_MSS is not set -# CONFIG_SOUND_MPU401 is not set -# CONFIG_SOUND_NM256 is not set -# CONFIG_SOUND_MAD16 is not set -# CONFIG_SOUND_PAS is not set -# CONFIG_SOUND_PSS is not set -CONFIG_SOUND_SB=m -# CONFIG_SOUND_AWE32_SYNTH is not set -# CONFIG_SOUND_WAVEFRONT is not set -# CONFIG_SOUND_MAUI is not set -# CONFIG_SOUND_YM3812 is not set -# CONFIG_SOUND_OPL3SA1 is not set -# CONFIG_SOUND_OPL3SA2 is not set -# CONFIG_SOUND_YMFPCI is not set -# CONFIG_SOUND_UART6850 is not set -# CONFIG_SOUND_AEDSP16 is not set - -# -# Misc devices -# - -# -# Multimedia Capabilities Port drivers -# -# CONFIG_MCP is not set - -# -# Console Switches -# -# CONFIG_SWITCHES is not set - -# -# USB support -# -# CONFIG_USB is not set - -# -# Bluetooth support -# -# CONFIG_BT is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_USER=y -# CONFIG_DEBUG_INFO is not set -# CONFIG_DEBUG_KERNEL is not set - -# -# Security options -# -# CONFIG_SECURITY is not set - -# -# Cryptographic options -# -# CONFIG_CRYPTO is not set - -# -# Library routines -# -CONFIG_CRC32=y diff -prauN linux-2.6.0-test5/arch/arm/def-configs/sherman wli-2.6.0-test5-bk12-25/arch/arm/def-configs/sherman --- linux-2.6.0-test5/arch/arm/def-configs/sherman 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/sherman 1969-12-31 16:00:00.000000000 -0800 @@ -1,215 +0,0 @@ -# -# Automatically generated make config: don't edit -# -CONFIG_ARM=y - -# -# System and processor type -# -# CONFIG_ARCH_ARC is not set -# CONFIG_ARCH_A5K is not set -# CONFIG_ARCH_RPC is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_FOOTBRIDGE is not set -CONFIG_ARCH_SA1100=y -CONFIG_CPU_SA1100=y -# CONFIG_SA1100_BRUTUS is not set -# CONFIG_SA1100_EMPEG is not set -# CONFIG_SA1100_ITSY is not set -# CONFIG_SA1100_PLEB is not set -# CONFIG_SA1100_VICTOR is not set -CONFIG_SA1100_SHERMAN=y -# CONFIG_VICTOR_BOARD1 is not set -# CONFIG_ARCH_ACORN is not set -# CONFIG_ISA_DMA is not set -CONFIG_CPU_32=y -# CONFIG_CPU_26 is not set -# CONFIG_CPU_ARM2 is not set -# CONFIG_CPU_ARM3 is not set -# CONFIG_CPU_ARM6 is not set -# CONFIG_CPU_ARM7 is not set -CONFIG_CPU_SA110=y - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -CONFIG_ALIGNMENT_TRAP=y -# CONFIG_TEXT_SECTIONS is not set - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODVERSIONS is not set -# CONFIG_KMOD is not set - -# -# General setup -# -CONFIG_ZBOOT_ROM=y -CONFIG_ZBOOT_ROM_TEXT=0x00050000 -CONFIG_ZBOOT_ROM_BSS=0xc0200000 -# CONFIG_NET is not set -# CONFIG_SYSVIPC is not set -# CONFIG_BSD_PROCESS_ACCT is not set -# CONFIG_SYSCTL is not set -CONFIG_NWFPE=y -# CONFIG_BINFMT_AOUT is not set -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -# CONFIG_ARTHUR is not set -# CONFIG_PARPORT is not set -CONFIG_CMDLINE="mem=64M@0xc0000000 mem=64M@0xc8000000 root=/dev/mtdblock2" - -# -# Plug and Play support -# -# CONFIG_PNP is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_IDE is not set - -# -# Please see Documentation/ide.txt for help/info on IDE drives -# -# CONFIG_BLK_DEV_HD_IDE is not set -# CONFIG_BLK_DEV_IDEDISK is not set -# CONFIG_BLK_DEV_IDECD is not set -# CONFIG_BLK_DEV_IDETAPE is not set -# CONFIG_BLK_DEV_IDEFLOPPY is not set -# CONFIG_BLK_DEV_IDESCSI is not set -# CONFIG_BLK_DEV_CMD640 is not set -# CONFIG_IDE_CHIPSETS is not set - -# -# Additional Block Devices -# -# CONFIG_BLK_DEV_LOOP is not set -# CONFIG_BLK_DEV_MD is not set -CONFIG_BLK_DEV_RAM=y -# CONFIG_BLK_DEV_INITRD is not set -# CONFIG_BLK_DEV_XD is not set -# CONFIG_PARIDE_PARPORT is not set -# CONFIG_PARIDE is not set -# CONFIG_BLK_DEV_HD is not set -CONFIG_BLK_DEV_FLASH=y - -# -# Character devices -# -# CONFIG_VT is not set -CONFIG_SERIAL_SA1100=y -CONFIG_SERIAL_SA1100_CONSOLE=y -# CONFIG_SERIAL is not set -# CONFIG_SERIAL_EXTENDED is not set -# CONFIG_SERIAL_NONSTANDARD is not set -# CONFIG_UNIX98_PTYS is not set -# CONFIG_MOUSE is not set -# CONFIG_QIC02_TAPE is not set -# CONFIG_WATCHDOG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set - -# -# Video For Linux -# -# CONFIG_VIDEO_DEV is not set - -# -# Joystick support -# -# CONFIG_JOYSTICK is not set -# CONFIG_DTLK is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# Filesystems -# -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_ADFS_FS is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_FAT_FS is not set -# CONFIG_MSDOS_FS is not set -# CONFIG_UMSDOS_FS is not set -# CONFIG_VFAT_FS is not set -# CONFIG_ISO9660_FS is not set -# CONFIG_JOLIET is not set -# CONFIG_MINIX_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS_DEBUG is not set -# CONFIG_NTFS_RW is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_QNX4FS_FS is not set -# CONFIG_ROMFS_FS is not set -CONFIG_EXT2_FS=y -# CONFIG_SYSV_FS is not set -# CONFIG_UFS_FS is not set - -# -# Partition Types -# -# CONFIG_OSF_PARTITION is not set -# CONFIG_MAC_PARTITION is not set -# CONFIG_MSDOS_PARTITION is not set -# CONFIG_SGI_PARTITION is not set -# CONFIG_SUN_PARTITION is not set -# CONFIG_AMIGA_PARTITION is not set -# CONFIG_ACORN_PARTITION is not set -CONFIG_NLS=y - -# -# Native Language Support -# -# CONFIG_NLS_CODEPAGE_437 is not set -# CONFIG_NLS_CODEPAGE_737 is not set -# CONFIG_NLS_CODEPAGE_775 is not set -# CONFIG_NLS_CODEPAGE_850 is not set -# CONFIG_NLS_CODEPAGE_852 is not set -# CONFIG_NLS_CODEPAGE_855 is not set -# CONFIG_NLS_CODEPAGE_857 is not set -# CONFIG_NLS_CODEPAGE_860 is not set -# CONFIG_NLS_CODEPAGE_861 is not set -# CONFIG_NLS_CODEPAGE_862 is not set -# CONFIG_NLS_CODEPAGE_863 is not set -# CONFIG_NLS_CODEPAGE_864 is not set -# CONFIG_NLS_CODEPAGE_865 is not set -# CONFIG_NLS_CODEPAGE_866 is not set -# CONFIG_NLS_CODEPAGE_869 is not set -# CONFIG_NLS_CODEPAGE_874 is not set -# CONFIG_NLS_ISO8859_1 is not set -# CONFIG_NLS_ISO8859_2 is not set -# CONFIG_NLS_ISO8859_3 is not set -# CONFIG_NLS_ISO8859_4 is not set -# CONFIG_NLS_ISO8859_5 is not set -# CONFIG_NLS_ISO8859_6 is not set -# CONFIG_NLS_ISO8859_7 is not set -# CONFIG_NLS_ISO8859_8 is not set -# CONFIG_NLS_ISO8859_9 is not set -# CONFIG_NLS_ISO8859_15 is not set -# CONFIG_NLS_KOI8_R is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_ERRORS=y -CONFIG_DEBUG_USER=y -CONFIG_DEBUG_INFO=y -# CONFIG_MAGIC_SYSRQ is not set -CONFIG_DEBUG_LL=y diff -prauN linux-2.6.0-test5/arch/arm/def-configs/stork wli-2.6.0-test5-bk12-25/arch/arm/def-configs/stork --- linux-2.6.0-test5/arch/arm/def-configs/stork 2003-09-08 12:50:23.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/stork 1969-12-31 16:00:00.000000000 -0800 @@ -1,966 +0,0 @@ -# -# Automatically generated make config: don't edit -# -CONFIG_ARM=y -# CONFIG_EISA is not set -# CONFIG_SBUS is not set -# CONFIG_MCA is not set -CONFIG_UID16=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y -# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set -# CONFIG_GENERIC_BUST_SPINLOCK is not set -# CONFIG_GENERIC_ISA_DMA is not set - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -# CONFIG_OBSOLETE is not set - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODVERSIONS is not set -CONFIG_KMOD=y - -# -# System Type -# -# CONFIG_ARCH_ADIFCC is not set -# CONFIG_ARCH_ANAKIN is not set -# CONFIG_ARCH_ARCA5K is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_CAMELOT is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_IOP310 is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_RPC is not set -CONFIG_ARCH_SA1100=y -# CONFIG_ARCH_SHARK is not set - -# -# Archimedes/A5000 Implementations -# - -# -# Archimedes/A5000 Implementations (select only ONE) -# -# CONFIG_ARCH_ARC is not set -# CONFIG_ARCH_A5K is not set - -# -# Footbridge Implementations -# -# CONFIG_ARCH_CATS is not set -# CONFIG_ARCH_PERSONAL_SERVER is not set -# CONFIG_ARCH_EBSA285_ADDIN is not set -# CONFIG_ARCH_EBSA285_HOST is not set -# CONFIG_ARCH_NETWINDER is not set - -# -# SA11x0 Implementations -# -# CONFIG_SA1100_ASSABET is not set -# CONFIG_ASSABET_NEPONSET is not set -# CONFIG_SA1100_ADSBITSY is not set -# CONFIG_SA1100_BRUTUS is not set -# CONFIG_SA1100_CERF is not set -# CONFIG_SA1100_H3100 is not set -CONFIG_SA1100_H3600=y -# CONFIG_SA1100_H3800 is not set -CONFIG_SA1100_H3XXX=y -# CONFIG_SA1100_EXTENEX1 is not set -# CONFIG_SA1100_FLEXANET is not set -# CONFIG_SA1100_FREEBIRD is not set -# CONFIG_SA1100_GRAPHICSCLIENT is not set -# CONFIG_SA1100_GRAPHICSMASTER is not set -# CONFIG_SA1100_BADGE4 is not set -# CONFIG_SA1100_JORNADA720 is not set -# CONFIG_SA1100_HUW_WEBPANEL is not set -# CONFIG_SA1100_ITSY is not set -# CONFIG_SA1100_LART is not set -# CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_OMNIMETER is not set -# CONFIG_SA1100_PANGOLIN is not set -# CONFIG_SA1100_PLEB is not set -# CONFIG_SA1100_PT_SYSTEM3 is not set -# CONFIG_SA1100_SHANNON is not set -# CONFIG_SA1100_SHERMAN is not set -# CONFIG_SA1100_SIMPAD is not set -# CONFIG_SA1100_PFS168 is not set -# CONFIG_SA1100_VICTOR is not set -# CONFIG_SA1100_XP860 is not set -# CONFIG_SA1100_YOPY is not set -CONFIG_SA1100_USB=m -CONFIG_SA1100_USB_NETLINK=m -# CONFIG_SA1100_USB_CHAR is not set -CONFIG_H3600_SLEEVE=m - -# -# CLPS711X/EP721X Implementations -# -# CONFIG_ARCH_AUTCPU12 is not set -# CONFIG_ARCH_CDB89712 is not set -# CONFIG_ARCH_CLEP7312 is not set -# CONFIG_ARCH_EDB7211 is not set -# CONFIG_ARCH_P720T is not set -# CONFIG_ARCH_FORTUNET is not set -# CONFIG_ARCH_EP7211 is not set -# CONFIG_ARCH_EP7212 is not set -# CONFIG_ARCH_ACORN is not set -# CONFIG_FOOTBRIDGE is not set -# CONFIG_FOOTBRIDGE_HOST is not set -# CONFIG_FOOTBRIDGE_ADDIN is not set -CONFIG_CPU_32=y -# CONFIG_CPU_26 is not set - -# -# Processor Type -# -# CONFIG_CPU_32v3 is not set -CONFIG_CPU_32v4=y -# CONFIG_CPU_ARM610 is not set -# CONFIG_CPU_ARM710 is not set -# CONFIG_CPU_ARM720T is not set -# CONFIG_CPU_ARM920T is not set -# CONFIG_CPU_ARM922T is not set -# CONFIG_CPU_ARM926T is not set -# CONFIG_CPU_ARM1020 is not set -# CONFIG_CPU_SA110 is not set -CONFIG_CPU_SA1100=y -# CONFIG_XSCALE_PMU is not set -# CONFIG_ARM_THUMB is not set -CONFIG_DISCONTIGMEM=y - -# -# General setup -# -# CONFIG_PCI is not set -CONFIG_ISA=y -# CONFIG_ISA_DMA is not set -# CONFIG_FIQ is not set -CONFIG_CPU_FREQ=y -CONFIG_HOTPLUG=y - -# -# PCMCIA/CardBus support -# -CONFIG_PCMCIA=m -CONFIG_PCMCIA_PROBE=y -# CONFIG_I82092 is not set -# CONFIG_I82365 is not set -# CONFIG_TCIC is not set -# CONFIG_PCMCIA_CLPS6700 is not set -CONFIG_PCMCIA_SA1100=m -CONFIG_NET=y -CONFIG_SYSVIPC=y -# CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_SYSCTL=y - -# -# At least one math emulation must be selected -# -CONFIG_FPE_NWFPE=m -CONFIG_FPE_FASTFPE=y -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -# CONFIG_BINFMT_AOUT is not set -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -CONFIG_PM=y -# CONFIG_APM is not set -# CONFIG_ARTHUR is not set -CONFIG_CMDLINE="N" -# CONFIG_LEDS is not set -CONFIG_ALIGNMENT_TRAP=y - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Memory Technology Devices (MTD) -# -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set -CONFIG_MTD_PARTITIONS=y -CONFIG_MTD_REDBOOT_PARTS=y -CONFIG_MTD_BOOTLDR_PARTS=y -# CONFIG_MTD_AFS_PARTS is not set - -# -# User Modules And Translation Layers -# -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -# CONFIG_NFTL is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=y -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_GEN_PROBE=y -CONFIG_MTD_CFI_ADV_OPTIONS=y -CONFIG_MTD_CFI_NOSWAP=y -# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set -# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set -# CONFIG_MTD_CFI_GEOMETRY is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_ABSENT is not set -# CONFIG_MTD_OBSOLETE_CHIPS is not set -# CONFIG_MTD_AMDSTD is not set -# CONFIG_MTD_SHARP is not set -# CONFIG_MTD_JEDEC is not set - -# -# Mapping drivers for chip access -# -# CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_NORA is not set -# CONFIG_MTD_ARM_INTEGRATOR is not set -# CONFIG_MTD_CDB89712 is not set -CONFIG_MTD_SA1100=y -# CONFIG_MTD_DC21285 is not set -# CONFIG_MTD_IQ80310 is not set -# CONFIG_MTD_EPXA10DB is not set -# CONFIG_MTD_PCI is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLKMTD is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC1000 is not set -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOCPROBE is not set - -# -# NAND Flash Device Drivers -# -# CONFIG_MTD_NAND is not set - -# -# Plug and Play configuration -# -# CONFIG_PNP is not set -# CONFIG_ISAPNP is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_XD is not set -# CONFIG_PARIDE is not set -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_CISS_SCSI_TAPE is not set -# CONFIG_BLK_DEV_DAC960 is not set -CONFIG_BLK_DEV_LOOP=m -# CONFIG_BLK_DEV_NBD is not set -# CONFIG_BLK_DEV_RAM is not set -# CONFIG_BLK_DEV_INITRD is not set - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set -# CONFIG_BLK_DEV_MD is not set -# CONFIG_MD_LINEAR is not set -# CONFIG_MD_RAID0 is not set -# CONFIG_MD_RAID1 is not set -# CONFIG_MD_RAID5 is not set -# CONFIG_MD_MULTIPATH is not set -# CONFIG_BLK_DEV_LVM is not set - -# -# Networking options -# -CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set -CONFIG_NETLINK=y -CONFIG_RTNETLINK=y -# CONFIG_NETLINK_DEV is not set -# CONFIG_NETFILTER is not set -# CONFIG_FILTER is not set -CONFIG_UNIX=y -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -# CONFIG_IP_PNP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_ARPD is not set -# CONFIG_INET_ECN is not set -# CONFIG_SYN_COOKIES is not set -# CONFIG_IPV6 is not set -# CONFIG_KHTTPD is not set -# CONFIG_ATM is not set -# CONFIG_VLAN_8021Q is not set - -# -# -# -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_LLC is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set -# CONFIG_ETHERTAP is not set - -# -# Ethernet (10 or 100Mbit) -# -# CONFIG_NET_ETHERNET is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_ACENIC is not set -# CONFIG_DL2K is not set -# CONFIG_MYRI_SBUS is not set -# CONFIG_NS83820 is not set -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -# CONFIG_SK98LIN is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PLIP is not set -CONFIG_PPP=m -# CONFIG_PPP_MULTILINK is not set -# CONFIG_PPP_FILTER is not set -CONFIG_PPP_ASYNC=m -# CONFIG_PPP_SYNC_TTY is not set -CONFIG_PPP_DEFLATE=m -CONFIG_PPP_BSDCOMP=m -# CONFIG_PPPOE is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -CONFIG_NET_RADIO=y -# CONFIG_STRIP is not set -CONFIG_WAVELAN=m -# CONFIG_ARLAN is not set -# CONFIG_AIRONET4500 is not set -# CONFIG_AIRONET4500_NONCS is not set -# CONFIG_AIRONET4500_PROC is not set -# CONFIG_AIRO is not set -CONFIG_HERMES=m - -# -# Wireless Pcmcia cards support -# -CONFIG_PCMCIA_HERMES=m -# CONFIG_AIRO_CS is not set -CONFIG_NET_WIRELESS=y - -# -# Token Ring devices -# -# CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# PCMCIA network device support -# -CONFIG_NET_PCMCIA=y -CONFIG_PCMCIA_3C589=m -# CONFIG_PCMCIA_3C574 is not set -# CONFIG_PCMCIA_FMVJ18X is not set -CONFIG_PCMCIA_PCNET=m -# CONFIG_PCMCIA_NMCLAN is not set -# CONFIG_PCMCIA_SMC91C92 is not set -CONFIG_PCMCIA_XIRC2PS=m -# CONFIG_PCMCIA_AXNET is not set -# CONFIG_ARCNET_COM20020_CS is not set -# CONFIG_PCMCIA_IBMTR is not set -# CONFIG_NET_PCMCIA_RADIO is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# ATA/IDE/MFM/RLL support -# -CONFIG_IDE=m - -# -# IDE, ATA and ATAPI Block devices -# -CONFIG_BLK_DEV_IDE=m - -# -# Please see Documentation/ide.txt for help/info on IDE drives -# -# CONFIG_BLK_DEV_HD_IDE is not set -# CONFIG_BLK_DEV_HD is not set -CONFIG_BLK_DEV_IDEDISK=m -# CONFIG_IDEDISK_MULTI_MODE is not set -CONFIG_BLK_DEV_IDECS=m -CONFIG_BLK_DEV_IDECD=m -# CONFIG_BLK_DEV_IDETAPE is not set -# CONFIG_BLK_DEV_IDEFLOPPY is not set -# CONFIG_BLK_DEV_IDESCSI is not set - -# -# IDE chipset support/bugfixes -# -# CONFIG_BLK_DEV_CMD640 is not set -# CONFIG_BLK_DEV_CMD640_ENHANCED is not set -# CONFIG_BLK_DEV_ISAPNP is not set -# CONFIG_IDE_CHIPSETS is not set -# CONFIG_IDEDMA_AUTO is not set -# CONFIG_BLK_DEV_ATARAID is not set -# CONFIG_BLK_DEV_ATARAID_PDC is not set -# CONFIG_BLK_DEV_ATARAID_HPT is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# I2O device support -# -# CONFIG_I2O is not set -# CONFIG_I2O_BLOCK is not set -# CONFIG_I2O_LAN is not set -# CONFIG_I2O_SCSI is not set -# CONFIG_I2O_PROC is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Input core support -# -# CONFIG_INPUT is not set -# CONFIG_INPUT_KEYBDEV is not set -# CONFIG_INPUT_MOUSEDEV is not set -# CONFIG_INPUT_JOYDEV is not set -# CONFIG_INPUT_EVDEV is not set - -# -# Character devices -# -CONFIG_VT=y -# CONFIG_VT_CONSOLE is not set -CONFIG_SERIAL=y -CONFIG_SERIAL_CONSOLE=y -# CONFIG_SERIAL_EXTENDED is not set -# CONFIG_SERIAL_NONSTANDARD is not set - -# -# Serial drivers -# -# CONFIG_SERIAL_ANAKIN is not set -# CONFIG_SERIAL_ANAKIN_CONSOLE is not set -# CONFIG_SERIAL_AMBA is not set -# CONFIG_SERIAL_AMBA_CONSOLE is not set -# CONFIG_SERIAL_CLPS711X is not set -# CONFIG_SERIAL_CLPS711X_CONSOLE is not set -# CONFIG_SERIAL_21285 is not set -# CONFIG_SERIAL_21285_OLD is not set -# CONFIG_SERIAL_21285_CONSOLE is not set -# CONFIG_SERIAL_UART00 is not set -# CONFIG_SERIAL_UART00_CONSOLE is not set -CONFIG_SERIAL_SA1100=y -CONFIG_SERIAL_SA1100_CONSOLE=y -CONFIG_SA1100_DEFAULT_BAUDRATE=115200 -CONFIG_SERIAL_8250=m -# CONFIG_SERIAL_8250_CONSOLE is not set -# CONFIG_ATOMWIDE_SERIAL is not set -# CONFIG_DUALSP_SERIAL is not set -# CONFIG_SERIAL_8250_EXTENDED is not set -# CONFIG_SERIAL_8250_MANY_PORTS is not set -# CONFIG_SERIAL_8250_SHARE_IRQ is not set -# CONFIG_SERIAL_8250_DETECT_IRQ is not set -# CONFIG_SERIAL_8250_MULTIPORT is not set -# CONFIG_SERIAL_8250_RSA is not set -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=32 - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# L3 serial bus support -# -CONFIG_L3=y -CONFIG_L3_ALGOBIT=y -CONFIG_L3_BIT_SA1100_GPIO=y - -# -# Other L3 adapters -# -# CONFIG_L3_SA1111 is not set -CONFIG_BIT_SA1100_GPIO=y - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -CONFIG_MOUSE=m -# CONFIG_PSMOUSE is not set -# CONFIG_82C710_MOUSE is not set -# CONFIG_PC110_PAD is not set - -# -# Joysticks -# -# CONFIG_INPUT_GAMEPORT is not set - -# -# Input core support is needed for gameports -# - -# -# Input core support is needed for joysticks -# -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -# CONFIG_INTEL_RNG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -CONFIG_SA1100_RTC=m -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set - -# -# PCMCIA character devices -# -# CONFIG_PCMCIA_SERIAL_CS is not set - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set -# CONFIG_REISERFS_FS is not set -# CONFIG_REISERFS_CHECK is not set -# CONFIG_REISERFS_PROC_INFO is not set -# CONFIG_ADFS_FS is not set -# CONFIG_ADFS_FS_RW is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_EXT3_FS is not set -# CONFIG_JBD is not set -# CONFIG_JBD_DEBUG is not set -CONFIG_FAT_FS=m -CONFIG_MSDOS_FS=m -# CONFIG_UMSDOS_FS is not set -CONFIG_VFAT_FS=m -# CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set -CONFIG_JFFS2_FS=y -CONFIG_JFFS2_FS_DEBUG=0 -CONFIG_CRAMFS=y -# CONFIG_TMPFS is not set -CONFIG_RAMFS=y -# CONFIG_ISO9660_FS is not set -# CONFIG_JOLIET is not set -# CONFIG_ZISOFS is not set -# CONFIG_MINIX_FS is not set -# CONFIG_VXFS_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS_DEBUG is not set -# CONFIG_NTFS_RW is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -CONFIG_DEVFS_FS=y -CONFIG_DEVFS_MOUNT=y -# CONFIG_DEVFS_DEBUG is not set -CONFIG_DEVPTS_FS=y -# CONFIG_QNX4FS_FS is not set -# CONFIG_QNX4FS_RW is not set -# CONFIG_ROMFS_FS is not set -CONFIG_EXT2_FS=y -# CONFIG_SYSV_FS is not set -# CONFIG_UDF_FS is not set -# CONFIG_UDF_RW is not set -# CONFIG_UFS_FS is not set -# CONFIG_UFS_FS_WRITE is not set - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -# CONFIG_INTERMEZZO_FS is not set -CONFIG_NFS_FS=y -CONFIG_NFS_V3=y -# CONFIG_ROOT_NFS is not set -CONFIG_NFSD=m -CONFIG_NFSD_V3=y -CONFIG_SUNRPC=y -CONFIG_LOCKD=y -CONFIG_LOCKD_V4=y -CONFIG_SMB_FS=m -# CONFIG_SMB_NLS_DEFAULT is not set -# CONFIG_NCP_FS is not set -# CONFIG_NCPFS_PACKET_SIGNING is not set -# CONFIG_NCPFS_IOCTL_LOCKING is not set -# CONFIG_NCPFS_STRONG is not set -# CONFIG_NCPFS_NFS_NS is not set -# CONFIG_NCPFS_OS2_NS is not set -# CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_NLS is not set -# CONFIG_NCPFS_EXTRAS is not set -# CONFIG_ZISOFS_FS is not set -CONFIG_ZLIB_FS_INFLATE=y - -# -# Partition Types -# -# CONFIG_PARTITION_ADVANCED is not set -CONFIG_MSDOS_PARTITION=y -CONFIG_SMB_NLS=y -CONFIG_NLS=y - -# -# Native Language Support -# -CONFIG_NLS_DEFAULT="iso8859-1" -# CONFIG_NLS_CODEPAGE_437 is not set -# CONFIG_NLS_CODEPAGE_737 is not set -# CONFIG_NLS_CODEPAGE_775 is not set -# CONFIG_NLS_CODEPAGE_850 is not set -# CONFIG_NLS_CODEPAGE_852 is not set -# CONFIG_NLS_CODEPAGE_855 is not set -# CONFIG_NLS_CODEPAGE_857 is not set -# CONFIG_NLS_CODEPAGE_860 is not set -# CONFIG_NLS_CODEPAGE_861 is not set -# CONFIG_NLS_CODEPAGE_862 is not set -# CONFIG_NLS_CODEPAGE_863 is not set -# CONFIG_NLS_CODEPAGE_864 is not set -# CONFIG_NLS_CODEPAGE_865 is not set -# CONFIG_NLS_CODEPAGE_866 is not set -# CONFIG_NLS_CODEPAGE_869 is not set -# CONFIG_NLS_CODEPAGE_936 is not set -# CONFIG_NLS_CODEPAGE_950 is not set -# CONFIG_NLS_CODEPAGE_932 is not set -# CONFIG_NLS_CODEPAGE_949 is not set -# CONFIG_NLS_CODEPAGE_874 is not set -# CONFIG_NLS_ISO8859_8 is not set -# CONFIG_NLS_CODEPAGE_1251 is not set -# CONFIG_NLS_ISO8859_1 is not set -# CONFIG_NLS_ISO8859_2 is not set -# CONFIG_NLS_ISO8859_3 is not set -# CONFIG_NLS_ISO8859_4 is not set -# CONFIG_NLS_ISO8859_5 is not set -# CONFIG_NLS_ISO8859_6 is not set -# CONFIG_NLS_ISO8859_7 is not set -# CONFIG_NLS_ISO8859_9 is not set -# CONFIG_NLS_ISO8859_13 is not set -# CONFIG_NLS_ISO8859_14 is not set -# CONFIG_NLS_ISO8859_15 is not set -# CONFIG_NLS_KOI8_R is not set -# CONFIG_NLS_KOI8_U is not set -# CONFIG_NLS_UTF8 is not set - -# -# Console drivers -# -CONFIG_PC_KEYMAP=y -# CONFIG_VGA_CONSOLE is not set - -# -# Frame-buffer support -# -CONFIG_FB=y -CONFIG_DUMMY_CONSOLE=y -# CONFIG_FB_ACORN is not set -# CONFIG_FB_ANAKIN is not set -# CONFIG_FB_CLPS711X is not set -CONFIG_FB_SA1100=y -# CONFIG_FB_CYBER2000 is not set -# CONFIG_FB_VIRTUAL is not set -CONFIG_FBCON_ADVANCED=y -# CONFIG_FBCON_MFB is not set -# CONFIG_FBCON_CFB2 is not set -# CONFIG_FBCON_CFB4 is not set -# CONFIG_FBCON_CFB8 is not set -CONFIG_FBCON_CFB16=y -# CONFIG_FBCON_CFB24 is not set -# CONFIG_FBCON_CFB32 is not set -# CONFIG_FBCON_AFB is not set -# CONFIG_FBCON_ILBM is not set -# CONFIG_FBCON_IPLAN2P2 is not set -# CONFIG_FBCON_IPLAN2P4 is not set -# CONFIG_FBCON_IPLAN2P8 is not set -# CONFIG_FBCON_MAC is not set -# CONFIG_FBCON_VGA_PLANES is not set -# CONFIG_FBCON_VGA is not set -# CONFIG_FBCON_HGA is not set -CONFIG_FBCON_FONTWIDTH8_ONLY=y -CONFIG_FBCON_FONTS=y -CONFIG_FONT_8x8=y -CONFIG_FONT_8x16=y -# CONFIG_FONT_SUN8x16 is not set -# CONFIG_FONT_PEARL_8x8 is not set -# CONFIG_FONT_ACORN_8x8 is not set - -# -# Sound -# -CONFIG_SOUND=y -# CONFIG_SOUND_BT878 is not set -# CONFIG_SOUND_CMPCI is not set -# CONFIG_SOUND_EMU10K1 is not set -# CONFIG_MIDI_EMU10K1 is not set -# CONFIG_SOUND_FUSION is not set -# CONFIG_SOUND_CS4281 is not set -# CONFIG_SOUND_ES1370 is not set -# CONFIG_SOUND_ES1371 is not set -# CONFIG_SOUND_ESSSOLO1 is not set -# CONFIG_SOUND_MAESTRO is not set -# CONFIG_SOUND_MAESTRO3 is not set -# CONFIG_SOUND_ICH is not set -# CONFIG_SOUND_RME96XX is not set -# CONFIG_SOUND_SONICVIBES is not set -# CONFIG_SOUND_TRIDENT is not set -# CONFIG_SOUND_MSNDCLAS is not set -# CONFIG_SOUND_MSNDPIN is not set -# CONFIG_SOUND_VIA82CXXX is not set -# CONFIG_MIDI_VIA82CXXX is not set -CONFIG_SOUND_SA1100=y -CONFIG_SOUND_UDA1341=m -# CONFIG_SOUND_ASSABET_UDA1341 is not set -CONFIG_SOUND_H3600_UDA1341=m -# CONFIG_SOUND_PANGOLIN_UDA1341 is not set -# CONFIG_SOUND_SA1111_UDA1341 is not set -# CONFIG_SOUND_SA1100SSP is not set -# CONFIG_SOUND_OSS is not set -# CONFIG_SOUND_WAVEARTIST is not set -# CONFIG_SOUND_TVMIXER is not set - -# -# Multimedia Capabilities Port drivers -# -# CONFIG_MCP is not set -# CONFIG_MCP_SA1100 is not set -# CONFIG_MCP_UCB1200 is not set -# CONFIG_MCP_UCB1200_AUDIO is not set -# CONFIG_MCP_UCB1200_TS is not set - -# -# USB support -# -# CONFIG_USB is not set - -# -# USB Host Controller Drivers -# -# CONFIG_USB_EHCI_HCD is not set -# CONFIG_USB_UHCI is not set -# CONFIG_USB_UHCI_ALT is not set -# CONFIG_USB_OHCI is not set -# CONFIG_USB_OHCI_SA1111 is not set - -# -# USB Device Class drivers -# -# CONFIG_USB_AUDIO is not set -# CONFIG_USB_BLUETOOTH is not set - -# -# SCSI support is needed for USB Storage -# -# CONFIG_USB_STORAGE is not set -# CONFIG_USB_STORAGE_DEBUG is not set -# CONFIG_USB_STORAGE_DATAFAB is not set -# CONFIG_USB_STORAGE_FREECOM is not set -# CONFIG_USB_STORAGE_ISD200 is not set -# CONFIG_USB_STORAGE_DPCM is not set -# CONFIG_USB_STORAGE_HP8200e is not set -# CONFIG_USB_STORAGE_SDDR09 is not set -# CONFIG_USB_STORAGE_JUMPSHOT is not set -# CONFIG_USB_ACM is not set -# CONFIG_USB_PRINTER is not set - -# -# USB Human Interface Devices (HID) -# - -# -# Input core support is needed for USB HID -# - -# -# USB Imaging devices -# -# CONFIG_USB_DC2XX is not set -# CONFIG_USB_MDC800 is not set -# CONFIG_USB_SCANNER is not set -# CONFIG_USB_MICROTEK is not set -# CONFIG_USB_HPUSBSCSI is not set - -# -# USB Multimedia devices -# - -# -# Video4Linux support is needed for USB Multimedia device support -# - -# -# USB Network adaptors -# -# CONFIG_USB_PEGASUS is not set -# CONFIG_USB_KAWETH is not set -# CONFIG_USB_CATC is not set -# CONFIG_USB_CDCETHER is not set -# CONFIG_USB_USBNET is not set - -# -# USB port drivers -# -# CONFIG_USB_USS720 is not set - -# -# USB Serial Converter support -# -# CONFIG_USB_SERIAL is not set -# CONFIG_USB_SERIAL_GENERIC is not set -# CONFIG_USB_SERIAL_BELKIN is not set -# CONFIG_USB_SERIAL_WHITEHEAT is not set -# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set -# CONFIG_USB_SERIAL_EMPEG is not set -# CONFIG_USB_SERIAL_FTDI_SIO is not set -# CONFIG_USB_SERIAL_VISOR is not set -# CONFIG_USB_SERIAL_IPAQ is not set -# CONFIG_USB_SERIAL_IR is not set -# CONFIG_USB_SERIAL_EDGEPORT is not set -# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set -# CONFIG_USB_SERIAL_KEYSPAN is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set -# CONFIG_USB_SERIAL_MCT_U232 is not set -# CONFIG_USB_SERIAL_KLSI is not set -# CONFIG_USB_SERIAL_PL2303 is not set -# CONFIG_USB_SERIAL_CYBERJACK is not set -# CONFIG_USB_SERIAL_XIRCOM is not set -# CONFIG_USB_SERIAL_OMNINET is not set - -# -# USB Miscellaneous drivers -# -# CONFIG_USB_RIO500 is not set -# CONFIG_USB_AUERSWALD is not set - -# -# Bluetooth support -# -# CONFIG_BT is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -# CONFIG_DEBUG_USER is not set -# CONFIG_DEBUG_INFO is not set -# CONFIG_NO_PGT_CACHE is not set -# CONFIG_DEBUG_KERNEL is not set -# CONFIG_DEBUG_SLAB is not set -# CONFIG_MAGIC_SYSRQ is not set -# CONFIG_DEBUG_SPINLOCK is not set -# CONFIG_DEBUG_WAITQ is not set -# CONFIG_DEBUG_BUGVERBOSE is not set -# CONFIG_DEBUG_ERRORS is not set -# CONFIG_DEBUG_LL is not set -# CONFIG_DEBUG_DC21285_PORT is not set -# CONFIG_DEBUG_CLPS711X_UART2 is not set - -# -# Library routines -# -# CONFIG_CRC32 is not set diff -prauN linux-2.6.0-test5/arch/arm/def-configs/system3 wli-2.6.0-test5-bk12-25/arch/arm/def-configs/system3 --- linux-2.6.0-test5/arch/arm/def-configs/system3 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/system3 1969-12-31 16:00:00.000000000 -0800 @@ -1,967 +0,0 @@ -# -# Automatically generated make config: don't edit -# -CONFIG_ARM=y -# CONFIG_EISA is not set -# CONFIG_SBUS is not set -# CONFIG_MCA is not set -CONFIG_UID16=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y -# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set -# CONFIG_GENERIC_BUST_SPINLOCK is not set -# CONFIG_GENERIC_ISA_DMA is not set - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -# CONFIG_OBSOLETE is not set - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODVERSIONS is not set -# CONFIG_KMOD is not set - -# -# System Type -# -# CONFIG_ARCH_ANAKIN is not set -# CONFIG_ARCH_ARCA5K is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_CAMELOT is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_RPC is not set -CONFIG_ARCH_SA1100=y -# CONFIG_ARCH_SHARK is not set - -# -# Archimedes/A5000 Implementations -# - -# -# Archimedes/A5000 Implementations (select only ONE) -# -# CONFIG_ARCH_ARC is not set -# CONFIG_ARCH_A5K is not set - -# -# Footbridge Implementations -# -# CONFIG_ARCH_CATS is not set -# CONFIG_ARCH_PERSONAL_SERVER is not set -# CONFIG_ARCH_EBSA285_ADDIN is not set -# CONFIG_ARCH_EBSA285_HOST is not set -# CONFIG_ARCH_NETWINDER is not set - -# -# SA11x0 Implementations -# -# CONFIG_SA1100_ASSABET is not set -# CONFIG_ASSABET_NEPONSET is not set -# CONFIG_SA1100_ADSBITSY is not set -# CONFIG_SA1100_BRUTUS is not set -# CONFIG_SA1100_CERF is not set -# CONFIG_SA1100_H3600 is not set -# CONFIG_SA1100_EXTENEX1 is not set -# CONFIG_SA1100_FLEXANET is not set -# CONFIG_SA1100_FREEBIRD is not set -# CONFIG_SA1100_GRAPHICSCLIENT is not set -# CONFIG_SA1100_GRAPHICSMASTER is not set -# CONFIG_SA1100_JORNADA720 is not set -# CONFIG_SA1100_HUW_WEBPANEL is not set -# CONFIG_SA1100_ITSY is not set -# CONFIG_SA1100_LART is not set -# CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_OMNIMETER is not set -# CONFIG_SA1100_PANGOLIN is not set -# CONFIG_SA1100_PLEB is not set -# CONFIG_SA1100_SHANNON is not set -# CONFIG_SA1100_SHERMAN is not set -# CONFIG_SA1100_SIMPAD is not set -# CONFIG_SA1100_PFS168 is not set -# CONFIG_SA1100_VICTOR is not set -# CONFIG_SA1100_XP860 is not set -# CONFIG_SA1100_YOPY is not set -CONFIG_SA1100_PT_SYSTEM3=y -CONFIG_SA1111=y -CONFIG_FORCE_MAX_ZONEORDER=9 -CONFIG_SA1100_USB=m -CONFIG_SA1100_USB_NETLINK=m -CONFIG_SA1100_USB_CHAR=m - -# -# CLPS711X/EP721X Implementations -# -# CONFIG_ARCH_AUTCPU12 is not set -# CONFIG_ARCH_CDB89712 is not set -# CONFIG_ARCH_CLEP7312 is not set -# CONFIG_ARCH_EDB7211 is not set -# CONFIG_ARCH_P720T is not set -# CONFIG_ARCH_EP7211 is not set -# CONFIG_ARCH_EP7212 is not set -# CONFIG_ARCH_ACORN is not set -# CONFIG_FOOTBRIDGE is not set -# CONFIG_FOOTBRIDGE_HOST is not set -# CONFIG_FOOTBRIDGE_ADDIN is not set -CONFIG_CPU_32=y -# CONFIG_CPU_26 is not set - -# -# Processor Type -# -# CONFIG_CPU_32v3 is not set -CONFIG_CPU_32v4=y -# CONFIG_CPU_ARM610 is not set -# CONFIG_CPU_ARM710 is not set -# CONFIG_CPU_ARM720T is not set -# CONFIG_CPU_ARM920T is not set -# CONFIG_CPU_ARM922T is not set -# CONFIG_CPU_ARM926T is not set -# CONFIG_CPU_ARM1020 is not set -# CONFIG_CPU_SA110 is not set -CONFIG_CPU_SA1100=y -# CONFIG_ARM_THUMB is not set -CONFIG_DISCONTIGMEM=y - -# -# General setup -# -# CONFIG_PCI is not set -CONFIG_ISA=y -# CONFIG_ISA_DMA is not set -CONFIG_CPU_FREQ=y -CONFIG_HOTPLUG=y - -# -# PCMCIA/CardBus support -# -CONFIG_PCMCIA=m -# CONFIG_I82092 is not set -# CONFIG_I82365 is not set -# CONFIG_TCIC is not set -# CONFIG_PCMCIA_CLPS6700 is not set -CONFIG_PCMCIA_SA1100=m -CONFIG_NET=y -CONFIG_SYSVIPC=y -# CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_SYSCTL=y - -# -# At least one math emulation must be selected -# -CONFIG_FPE_NWFPE=y -# CONFIG_FPE_FASTFPE is not set -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -# CONFIG_BINFMT_AOUT is not set -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -CONFIG_PM=y -# CONFIG_ARTHUR is not set -CONFIG_CMDLINE="noinitrd root=/dev/mtdblock3" -CONFIG_LEDS=y -CONFIG_LEDS_TIMER=y -CONFIG_LEDS_CPU=y -CONFIG_ALIGNMENT_TRAP=y - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Memory Technology Devices (MTD) -# -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set -CONFIG_MTD_PARTITIONS=y -CONFIG_MTD_REDBOOT_PARTS=m -CONFIG_MTD_BOOTLDR_PARTS=m -# CONFIG_MTD_AFS_PARTS is not set - -# -# User Modules And Translation Layers -# -# CONFIG_MTD_CHAR is not set -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -# CONFIG_NFTL is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=y -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_GEN_PROBE=y -# CONFIG_MTD_CFI_ADV_OPTIONS is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_ABSENT is not set -# CONFIG_MTD_OBSOLETE_CHIPS is not set -# CONFIG_MTD_AMDSTD is not set -# CONFIG_MTD_SHARP is not set -# CONFIG_MTD_JEDEC is not set - -# -# Mapping drivers for chip access -# -# CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_NORA is not set -# CONFIG_MTD_ARM_INTEGRATOR is not set -# CONFIG_MTD_CDB89712 is not set -CONFIG_MTD_SA1100=y -# CONFIG_MTD_DC21285 is not set -# CONFIG_MTD_IQ80310 is not set -# CONFIG_MTD_PCI is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLKMTD is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC1000 is not set -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOCPROBE is not set - -# -# NAND Flash Device Drivers -# -# CONFIG_MTD_NAND is not set - -# -# Plug and Play configuration -# -# CONFIG_PNP is not set -# CONFIG_ISAPNP is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_XD is not set -# CONFIG_PARIDE is not set -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_BLK_DEV_DAC960 is not set -CONFIG_BLK_DEV_LOOP=m -# CONFIG_BLK_DEV_NBD is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=4096 -CONFIG_BLK_DEV_INITRD=y - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set -# CONFIG_BLK_DEV_MD is not set -# CONFIG_MD_LINEAR is not set -# CONFIG_MD_RAID0 is not set -# CONFIG_MD_RAID1 is not set -# CONFIG_MD_RAID5 is not set -# CONFIG_MD_MULTIPATH is not set -# CONFIG_BLK_DEV_LVM is not set - -# -# Networking options -# -# CONFIG_PACKET is not set -# CONFIG_NETLINK is not set -# CONFIG_NETFILTER is not set -# CONFIG_FILTER is not set -CONFIG_UNIX=y -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -# CONFIG_IP_PNP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_INET_ECN is not set -# CONFIG_SYN_COOKIES is not set -# CONFIG_IPV6 is not set -# CONFIG_KHTTPD is not set -# CONFIG_ATM is not set -# CONFIG_VLAN_8021Q is not set - -# -# -# -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_LLC is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set -CONFIG_DUMMY=m -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set - -# -# Ethernet (10 or 100Mbit) -# -CONFIG_NET_ETHERNET=y -# CONFIG_ARM_AM79C961A is not set -# CONFIG_SUNLANCE is not set -# CONFIG_SUNBMAC is not set -# CONFIG_SUNQE is not set -# CONFIG_SUNLANCE is not set -# CONFIG_SUNGEM is not set -# CONFIG_NET_VENDOR_3COM is not set -# CONFIG_LANCE is not set -CONFIG_NET_VENDOR_SMC=y -# CONFIG_WD80x3 is not set -# CONFIG_ULTRAMCA is not set -# CONFIG_ULTRA is not set -# CONFIG_ULTRA32 is not set -CONFIG_SMC9194=m -# CONFIG_NET_VENDOR_RACAL is not set -# CONFIG_AT1700 is not set -# CONFIG_DEPCA is not set -# CONFIG_HP100 is not set -# CONFIG_NET_ISA is not set -# CONFIG_NET_PCI is not set -# CONFIG_NET_POCKET is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_ACENIC is not set -# CONFIG_DL2K is not set -# CONFIG_MYRI_SBUS is not set -# CONFIG_NS83820 is not set -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -# CONFIG_SK98LIN is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PLIP is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set - -# -# Token Ring devices -# -# CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# PCMCIA network device support -# -CONFIG_NET_PCMCIA=y -# CONFIG_PCMCIA_3C589 is not set -# CONFIG_PCMCIA_3C574 is not set -# CONFIG_PCMCIA_FMVJ18X is not set -CONFIG_PCMCIA_PCNET=m -# CONFIG_PCMCIA_NMCLAN is not set -CONFIG_PCMCIA_SMC91C92=m -# CONFIG_PCMCIA_XIRC2PS is not set -# CONFIG_PCMCIA_AXNET is not set -# CONFIG_ARCNET_COM20020_CS is not set -# CONFIG_PCMCIA_IBMTR is not set -# CONFIG_NET_PCMCIA_RADIO is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -CONFIG_IRDA=m - -# -# IrDA protocols -# -CONFIG_IRLAN=m -# CONFIG_IRNET is not set -CONFIG_IRCOMM=m -# CONFIG_IRDA_ULTRA is not set -# CONFIG_IRDA_OPTIONS is not set - -# -# Infrared-port device drivers -# - -# -# SIR device drivers -# -CONFIG_IRTTY_SIR=m -CONFIG_IRPORT_SIR=m - -# -# Dongle support -# -# CONFIG_DONGLE is not set - -# -# FIR device drivers -# -# CONFIG_USB_IRDA is not set -# CONFIG_NSC_FIR is not set -# CONFIG_WINBOND_FIR is not set -# CONFIG_TOSHIBA_FIR is not set -# CONFIG_SMC_IRCC_FIR is not set -# CONFIG_ALI_FIR is not set -# CONFIG_VLSI_FIR is not set -CONFIG_SA1100_FIR=m - -# -# ATA/IDE/MFM/RLL support -# -CONFIG_IDE=y - -# -# IDE, ATA and ATAPI Block devices -# -CONFIG_BLK_DEV_IDE=y - -# -# Please see Documentation/ide.txt for help/info on IDE drives -# -# CONFIG_BLK_DEV_HD_IDE is not set -# CONFIG_BLK_DEV_HD is not set -CONFIG_BLK_DEV_IDEDISK=y -# CONFIG_IDEDISK_MULTI_MODE is not set -CONFIG_BLK_DEV_IDECS=m -# CONFIG_BLK_DEV_IDECD is not set -# CONFIG_BLK_DEV_IDETAPE is not set -# CONFIG_BLK_DEV_IDEFLOPPY is not set -# CONFIG_BLK_DEV_IDESCSI is not set - -# -# IDE chipset support/bugfixes -# -# CONFIG_BLK_DEV_CMD640 is not set -# CONFIG_BLK_DEV_CMD640_ENHANCED is not set -# CONFIG_BLK_DEV_ISAPNP is not set -# CONFIG_IDE_CHIPSETS is not set -# CONFIG_IDEDMA_AUTO is not set -# CONFIG_BLK_DEV_ATARAID is not set -# CONFIG_BLK_DEV_ATARAID_PDC is not set -# CONFIG_BLK_DEV_ATARAID_HPT is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# I2O device support -# -# CONFIG_I2O is not set -# CONFIG_I2O_BLOCK is not set -# CONFIG_I2O_LAN is not set -# CONFIG_I2O_SCSI is not set -# CONFIG_I2O_PROC is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Input core support -# -CONFIG_INPUT=y -CONFIG_INPUT_KEYBDEV=y -CONFIG_INPUT_MOUSEDEV=y -CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 -CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 -# CONFIG_INPUT_JOYDEV is not set -# CONFIG_INPUT_EVDEV is not set - -# -# Character devices -# -CONFIG_VT=y -# CONFIG_VT_CONSOLE is not set -# CONFIG_SERIAL is not set -# CONFIG_SERIAL_EXTENDED is not set -# CONFIG_SERIAL_NONSTANDARD is not set - -# -# Serial drivers -# -# CONFIG_SERIAL_ANAKIN is not set -# CONFIG_SERIAL_ANAKIN_CONSOLE is not set -# CONFIG_SERIAL_AMBA is not set -# CONFIG_SERIAL_AMBA_CONSOLE is not set -# CONFIG_SERIAL_CLPS711X is not set -# CONFIG_SERIAL_CLPS711X_CONSOLE is not set -# CONFIG_SERIAL_21285 is not set -# CONFIG_SERIAL_21285_OLD is not set -# CONFIG_SERIAL_21285_CONSOLE is not set -# CONFIG_SERIAL_UART00 is not set -# CONFIG_SERIAL_UART00_CONSOLE is not set -CONFIG_SERIAL_SA1100=y -CONFIG_SERIAL_SA1100_CONSOLE=y -CONFIG_SA1100_DEFAULT_BAUDRATE=38400 -CONFIG_SERIAL_8250=m -# CONFIG_SERIAL_8250_CONSOLE is not set -# CONFIG_SERIAL_8250_EXTENDED is not set -# CONFIG_SERIAL_8250_MANY_PORTS is not set -# CONFIG_SERIAL_8250_SHARE_IRQ is not set -# CONFIG_SERIAL_8250_DETECT_IRQ is not set -# CONFIG_SERIAL_8250_MULTIPORT is not set -# CONFIG_SERIAL_8250_HUB6 is not set -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=32 - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# L3 serial bus support -# -# CONFIG_L3 is not set -# CONFIG_L3_ALGOBIT is not set -# CONFIG_L3_BIT_SA1100_GPIO is not set - -# -# Other L3 adapters -# -# CONFIG_L3_SA1111 is not set -# CONFIG_BIT_SA1100_GPIO is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -# CONFIG_MOUSE is not set - -# -# Joysticks -# -# CONFIG_INPUT_GAMEPORT is not set -# CONFIG_INPUT_NS558 is not set -# CONFIG_INPUT_LIGHTNING is not set -# CONFIG_INPUT_PCIGAME is not set -# CONFIG_INPUT_CS461X is not set -# CONFIG_INPUT_EMU10K1 is not set -# CONFIG_INPUT_SERIO is not set -# CONFIG_INPUT_SERPORT is not set - -# -# Joysticks -# -# CONFIG_INPUT_ANALOG is not set -# CONFIG_INPUT_A3D is not set -# CONFIG_INPUT_ADI is not set -# CONFIG_INPUT_COBRA is not set -# CONFIG_INPUT_GF2K is not set -# CONFIG_INPUT_GRIP is not set -# CONFIG_INPUT_INTERACT is not set -# CONFIG_INPUT_TMDC is not set -# CONFIG_INPUT_SIDEWINDER is not set -# CONFIG_INPUT_IFORCE_USB is not set -# CONFIG_INPUT_IFORCE_232 is not set -# CONFIG_INPUT_WARRIOR is not set -# CONFIG_INPUT_MAGELLAN is not set -# CONFIG_INPUT_SPACEORB is not set -# CONFIG_INPUT_SPACEBALL is not set -# CONFIG_INPUT_STINGER is not set -# CONFIG_INPUT_DB9 is not set -# CONFIG_INPUT_GAMECON is not set -# CONFIG_INPUT_TURBOGRAFX is not set -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -# CONFIG_INTEL_RNG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -# CONFIG_SA1100_RTC is not set -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set - -# -# PCMCIA character devices -# -CONFIG_PCMCIA_SERIAL_CS=m - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set -# CONFIG_REISERFS_FS is not set -# CONFIG_REISERFS_CHECK is not set -# CONFIG_REISERFS_PROC_INFO is not set -# CONFIG_ADFS_FS is not set -# CONFIG_ADFS_FS_RW is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_EXT3_FS is not set -# CONFIG_JBD is not set -# CONFIG_JBD_DEBUG is not set -CONFIG_FAT_FS=y -CONFIG_MSDOS_FS=y -# CONFIG_UMSDOS_FS is not set -# CONFIG_VFAT_FS is not set -# CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set -CONFIG_JFFS2_FS=y -CONFIG_JFFS2_FS_DEBUG=0 -# CONFIG_CRAMFS is not set -CONFIG_TMPFS=y -# CONFIG_RAMFS is not set -# CONFIG_ISO9660_FS is not set -# CONFIG_JOLIET is not set -# CONFIG_ZISOFS is not set -# CONFIG_MINIX_FS is not set -# CONFIG_VXFS_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS_DEBUG is not set -# CONFIG_NTFS_RW is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -# CONFIG_DEVFS_MOUNT is not set -# CONFIG_DEVFS_DEBUG is not set -CONFIG_DEVPTS_FS=y -# CONFIG_QNX4FS_FS is not set -# CONFIG_QNX4FS_RW is not set -# CONFIG_ROMFS_FS is not set -CONFIG_EXT2_FS=y -# CONFIG_SYSV_FS is not set -# CONFIG_UDF_FS is not set -# CONFIG_UDF_RW is not set -# CONFIG_UFS_FS is not set -# CONFIG_UFS_FS_WRITE is not set - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -# CONFIG_INTERMEZZO_FS is not set -CONFIG_NFS_FS=y -# CONFIG_NFS_V3 is not set -# CONFIG_ROOT_NFS is not set -# CONFIG_NFSD is not set -# CONFIG_NFSD_V3 is not set -CONFIG_SUNRPC=y -CONFIG_LOCKD=y -# CONFIG_SMB_FS is not set -# CONFIG_NCP_FS is not set -# CONFIG_NCPFS_PACKET_SIGNING is not set -# CONFIG_NCPFS_IOCTL_LOCKING is not set -# CONFIG_NCPFS_STRONG is not set -# CONFIG_NCPFS_NFS_NS is not set -# CONFIG_NCPFS_OS2_NS is not set -# CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_NLS is not set -# CONFIG_NCPFS_EXTRAS is not set -# CONFIG_ZISOFS_FS is not set -# CONFIG_ZLIB_FS_INFLATE is not set - -# -# Partition Types -# -CONFIG_PARTITION_ADVANCED=y -# CONFIG_ACORN_PARTITION is not set -# CONFIG_OSF_PARTITION is not set -# CONFIG_AMIGA_PARTITION is not set -# CONFIG_ATARI_PARTITION is not set -# CONFIG_MAC_PARTITION is not set -CONFIG_MSDOS_PARTITION=y -# CONFIG_BSD_DISKLABEL is not set -# CONFIG_MINIX_SUBPARTITION is not set -# CONFIG_SOLARIS_X86_PARTITION is not set -# CONFIG_UNIXWARE_DISKLABEL is not set -# CONFIG_LDM_PARTITION is not set -# CONFIG_SGI_PARTITION is not set -# CONFIG_ULTRIX_PARTITION is not set -# CONFIG_SUN_PARTITION is not set -# CONFIG_SMB_NLS is not set -CONFIG_NLS=y - -# -# Native Language Support -# -CONFIG_NLS_DEFAULT="iso8859-1" -CONFIG_NLS_CODEPAGE_437=y -# CONFIG_NLS_CODEPAGE_737 is not set -# CONFIG_NLS_CODEPAGE_775 is not set -# CONFIG_NLS_CODEPAGE_850 is not set -# CONFIG_NLS_CODEPAGE_852 is not set -# CONFIG_NLS_CODEPAGE_855 is not set -# CONFIG_NLS_CODEPAGE_857 is not set -# CONFIG_NLS_CODEPAGE_860 is not set -# CONFIG_NLS_CODEPAGE_861 is not set -# CONFIG_NLS_CODEPAGE_862 is not set -# CONFIG_NLS_CODEPAGE_863 is not set -# CONFIG_NLS_CODEPAGE_864 is not set -# CONFIG_NLS_CODEPAGE_865 is not set -# CONFIG_NLS_CODEPAGE_866 is not set -# CONFIG_NLS_CODEPAGE_869 is not set -# CONFIG_NLS_CODEPAGE_936 is not set -# CONFIG_NLS_CODEPAGE_950 is not set -# CONFIG_NLS_CODEPAGE_932 is not set -# CONFIG_NLS_CODEPAGE_949 is not set -# CONFIG_NLS_CODEPAGE_874 is not set -# CONFIG_NLS_ISO8859_8 is not set -# CONFIG_NLS_CODEPAGE_1251 is not set -# CONFIG_NLS_ISO8859_1 is not set -# CONFIG_NLS_ISO8859_2 is not set -# CONFIG_NLS_ISO8859_3 is not set -# CONFIG_NLS_ISO8859_4 is not set -# CONFIG_NLS_ISO8859_5 is not set -# CONFIG_NLS_ISO8859_6 is not set -# CONFIG_NLS_ISO8859_7 is not set -# CONFIG_NLS_ISO8859_9 is not set -# CONFIG_NLS_ISO8859_13 is not set -# CONFIG_NLS_ISO8859_14 is not set -# CONFIG_NLS_ISO8859_15 is not set -# CONFIG_NLS_KOI8_R is not set -# CONFIG_NLS_KOI8_U is not set -# CONFIG_NLS_UTF8 is not set - -# -# Console drivers -# -CONFIG_PC_KEYMAP=y -# CONFIG_VGA_CONSOLE is not set - -# -# Frame-buffer support -# -CONFIG_FB=y -CONFIG_DUMMY_CONSOLE=y -# CONFIG_FB_ACORN is not set -# CONFIG_FB_ANAKIN is not set -# CONFIG_FB_CLPS711X is not set -CONFIG_FB_SA1100=y -# CONFIG_FB_CYBER2000 is not set -# CONFIG_FB_VIRTUAL is not set -# CONFIG_FBCON_ADVANCED is not set -CONFIG_FBCON_CFB2=y -CONFIG_FBCON_CFB4=y -CONFIG_FBCON_CFB8=y -CONFIG_FBCON_CFB16=y -CONFIG_FBCON_FONTWIDTH8_ONLY=y -CONFIG_FBCON_FONTS=y -CONFIG_FONT_8x8=y -# CONFIG_FONT_8x16 is not set -# CONFIG_FONT_SUN8x16 is not set -# CONFIG_FONT_PEARL_8x8 is not set -# CONFIG_FONT_ACORN_8x8 is not set - -# -# Sound -# -# CONFIG_SOUND is not set - -# -# Multimedia Capabilities Port drivers -# -# CONFIG_MCP is not set -# CONFIG_MCP_SA1100 is not set -# CONFIG_MCP_UCB1200 is not set -# CONFIG_MCP_UCB1200_AUDIO is not set -# CONFIG_MCP_UCB1200_TS is not set - -# -# USB support -# -CONFIG_USB=m -# CONFIG_USB_DEBUG is not set - -# -# Miscellaneous USB options -# -CONFIG_USB_DEVICEFS=y -# CONFIG_USB_BANDWIDTH is not set -# CONFIG_USB_LONG_TIMEOUT is not set - -# -# USB Controllers -# -# CONFIG_USB_UHCI is not set -# CONFIG_USB_UHCI_ALT is not set -# CONFIG_USB_OHCI is not set -CONFIG_USB_OHCI_SA1111=m - -# -# USB Device Class drivers -# -# CONFIG_USB_AUDIO is not set -# CONFIG_USB_BLUETOOTH is not set -# CONFIG_USB_STORAGE is not set -# CONFIG_USB_STORAGE_DEBUG is not set -# CONFIG_USB_STORAGE_DATAFAB is not set -# CONFIG_USB_STORAGE_FREECOM is not set -# CONFIG_USB_STORAGE_ISD200 is not set -# CONFIG_USB_STORAGE_DPCM is not set -# CONFIG_USB_STORAGE_HP8200e is not set -# CONFIG_USB_STORAGE_SDDR09 is not set -# CONFIG_USB_STORAGE_JUMPSHOT is not set -# CONFIG_USB_ACM is not set -CONFIG_USB_PRINTER=m - -# -# USB Human Interface Devices (HID) -# -CONFIG_USB_HID=m -CONFIG_USB_HIDDEV=y -CONFIG_USB_KBD=m -CONFIG_USB_MOUSE=m -# CONFIG_USB_WACOM is not set - -# -# USB Imaging devices -# -# CONFIG_USB_DC2XX is not set -# CONFIG_USB_MDC800 is not set -# CONFIG_USB_SCANNER is not set -# CONFIG_USB_MICROTEK is not set -# CONFIG_USB_HPUSBSCSI is not set - -# -# USB Multimedia devices -# - -# -# Video4Linux support is needed for USB Multimedia device support -# - -# -# USB Network adaptors -# -# CONFIG_USB_PEGASUS is not set -# CONFIG_USB_KAWETH is not set -# CONFIG_USB_CATC is not set -# CONFIG_USB_CDCETHER is not set -CONFIG_USB_USBNET=m - -# -# USB port drivers -# -# CONFIG_USB_USS720 is not set - -# -# USB Serial Converter support -# -# CONFIG_USB_SERIAL is not set -# CONFIG_USB_SERIAL_GENERIC is not set -# CONFIG_USB_SERIAL_BELKIN is not set -# CONFIG_USB_SERIAL_WHITEHEAT is not set -# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set -# CONFIG_USB_SERIAL_EMPEG is not set -# CONFIG_USB_SERIAL_FTDI_SIO is not set -# CONFIG_USB_SERIAL_VISOR is not set -# CONFIG_USB_SERIAL_IR is not set -# CONFIG_USB_SERIAL_EDGEPORT is not set -# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set -# CONFIG_USB_SERIAL_KEYSPAN is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set -# CONFIG_USB_SERIAL_MCT_U232 is not set -# CONFIG_USB_SERIAL_PL2303 is not set -# CONFIG_USB_SERIAL_CYBERJACK is not set -# CONFIG_USB_SERIAL_XIRCOM is not set -# CONFIG_USB_SERIAL_OMNINET is not set - -# -# USB Miscellaneous drivers -# -# CONFIG_USB_RIO500 is not set - -# -# Bluetooth support -# -# CONFIG_BT is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_USER=y -CONFIG_DEBUG_INFO=y -# CONFIG_NO_PGT_CACHE is not set -CONFIG_DEBUG_KERNEL=y -CONFIG_DEBUG_SLAB=y -CONFIG_MAGIC_SYSRQ=y -CONFIG_DEBUG_SPINLOCK=y -CONFIG_DEBUG_WAITQ=y -CONFIG_DEBUG_BUGVERBOSE=y -CONFIG_DEBUG_ERRORS=y -CONFIG_DEBUG_LL=y -# CONFIG_DEBUG_DC21285_PORT is not set -# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -prauN linux-2.6.0-test5/arch/arm/def-configs/trizeps wli-2.6.0-test5-bk12-25/arch/arm/def-configs/trizeps --- linux-2.6.0-test5/arch/arm/def-configs/trizeps 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/def-configs/trizeps 1969-12-31 16:00:00.000000000 -0800 @@ -1,851 +0,0 @@ -# -# Automatically generated by make menuconfig: don't edit -# -CONFIG_ARM=y -# CONFIG_EISA is not set -# CONFIG_SBUS is not set -# CONFIG_MCA is not set -CONFIG_UID16=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y -# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set -# CONFIG_GENERIC_BUST_SPINLOCK is not set -# CONFIG_GENERIC_ISA_DMA is not set - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y - -# -# General setup -# -CONFIG_NET=y -CONFIG_SYSVIPC=y -# CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_SYSCTL=y - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODVERSIONS is not set -CONFIG_KMOD=y - -# -# System Type -# -# CONFIG_ARCH_ADIFCC is not set -# CONFIG_ARCH_ANAKIN is not set -# CONFIG_ARCH_ARCA5K is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_PXA is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_CAMELOT is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_IOP310 is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_RPC is not set -CONFIG_ARCH_SA1100=y -# CONFIG_ARCH_SHARK is not set - -# -# Archimedes/A5000 Implementations -# -# CONFIG_ARCH_ARC is not set -# CONFIG_ARCH_A5K is not set - -# -# CLPS711X/EP721X Implementations -# -# CONFIG_ARCH_AUTCPU12 is not set -# CONFIG_ARCH_CDB89712 is not set -# CONFIG_ARCH_CEIVA is not set -# CONFIG_ARCH_CLEP7312 is not set -# CONFIG_ARCH_EDB7211 is not set -# CONFIG_ARCH_P720T is not set -# CONFIG_ARCH_FORTUNET is not set -# CONFIG_ARCH_EP7211 is not set -# CONFIG_ARCH_EP7212 is not set - -# -# Epxa10db -# - -# -# Footbridge Implementations -# -# CONFIG_ARCH_CATS is not set -# CONFIG_ARCH_PERSONAL_SERVER is not set -# CONFIG_ARCH_EBSA285_ADDIN is not set -# CONFIG_ARCH_EBSA285_HOST is not set -# CONFIG_ARCH_NETWINDER is not set - -# -# IOP310 Implementation Options -# -# CONFIG_ARCH_IQ80310 is not set -# CONFIG_IOP310_AAU is not set -# CONFIG_IOP310_DMA is not set -# CONFIG_IOP310_MU is not set -# CONFIG_IOP310_PMON is not set - -# -# Intel PXA250/210 Implementations -# -# CONFIG_ARCH_LUBBOCK is not set -# CONFIG_ARCH_PXA_IDP is not set - -# -# SA11x0 Implementations -# -# CONFIG_SA1100_ASSABET is not set -# CONFIG_ASSABET_NEPONSET is not set -# CONFIG_SA1100_ADSBITSY is not set -# CONFIG_SA1100_BRUTUS is not set -# CONFIG_SA1100_CERF is not set -# CONFIG_SA1100_H3100 is not set -# CONFIG_SA1100_H3600 is not set -# CONFIG_SA1100_H3800 is not set -# CONFIG_SA1100_H3XXX is not set -# CONFIG_SA1100_EXTENEX1 is not set -# CONFIG_SA1100_FLEXANET is not set -# CONFIG_SA1100_FREEBIRD is not set -# CONFIG_SA1100_GRAPHICSCLIENT is not set -# CONFIG_SA1100_GRAPHICSMASTER is not set -# CONFIG_SA1100_BADGE4 is not set -# CONFIG_SA1100_JORNADA720 is not set -# CONFIG_SA1100_HUW_WEBPANEL is not set -# CONFIG_SA1100_ITSY is not set -# CONFIG_SA1100_LART is not set -# CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_OMNIMETER is not set -# CONFIG_SA1100_PANGOLIN is not set -# CONFIG_SA1100_PLEB is not set -# CONFIG_SA1100_PT_SYSTEM3 is not set -# CONFIG_SA1100_SHANNON is not set -# CONFIG_SA1100_SHERMAN is not set -# CONFIG_SA1100_SIMPAD is not set -CONFIG_SA1100_TRIZEPS=y -CONFIG_TRIZEPS_MFTB2=y -# CONFIG_SA1100_PFS168 is not set -# CONFIG_SA1100_VICTOR is not set -# CONFIG_SA1100_XP860 is not set -# CONFIG_SA1100_YOPY is not set -# CONFIG_SA1100_STORK is not set -# CONFIG_SA1100_USB is not set -# CONFIG_SA1100_USB_NETLINK is not set -# CONFIG_SA1100_USB_CHAR is not set -# CONFIG_H3600_SLEEVE is not set -# CONFIG_ARCH_ACORN is not set -# CONFIG_FOOTBRIDGE is not set -# CONFIG_FOOTBRIDGE_HOST is not set -# CONFIG_FOOTBRIDGE_ADDIN is not set -# CONFIG_SA1111 is not set -CONFIG_CPU_32=y -# CONFIG_CPU_26 is not set -# CONFIG_CPU_ARM610 is not set -# CONFIG_CPU_ARM710 is not set -# CONFIG_CPU_ARM720T is not set -# CONFIG_CPU_ARM920T is not set -# CONFIG_CPU_ARM922T is not set -# CONFIG_CPU_ARM926T is not set -# CONFIG_CPU_ARM1020 is not set -# CONFIG_CPU_SA110 is not set -CONFIG_CPU_SA1100=y -# CONFIG_CPU_XSCALE is not set -# CONFIG_CPU_32v3 is not set -CONFIG_CPU_32v4=y -# CONFIG_CPU_32v5 is not set -# CONFIG_ARM_THUMB is not set - -# -# General setup -# -CONFIG_DISCONTIGMEM=y -# CONFIG_PCI is not set -CONFIG_ISA=y -# CONFIG_ISA_DMA is not set -# CONFIG_FIQ is not set -# CONFIG_ZBOOT_ROM is not set -CONFIG_ZBOOT_ROM_TEXT=0 -CONFIG_ZBOOT_ROM_BSS=0 -# CONFIG_CPU_FREQ is not set -# CONFIG_CPU_FREQ_24_API is not set -# CONFIG_CPU_FREQ_26_API is not set -CONFIG_HOTPLUG=y - -# -# PCMCIA/CardBus support -# -CONFIG_PCMCIA=m -# CONFIG_I82092 is not set -# CONFIG_I82365 is not set -# CONFIG_TCIC is not set -# CONFIG_PCMCIA_CLPS6700 is not set -CONFIG_PCMCIA_SA1100=m -# CONFIG_PCMCIA_SA1111 is not set -CONFIG_FPE_NWFPE=y -# CONFIG_FPE_FASTFPE is not set -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -CONFIG_BINFMT_AOUT=y -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -# CONFIG_PM is not set -# CONFIG_PREEMPT is not set -# CONFIG_APM is not set -# CONFIG_ARTHUR is not set -CONFIG_CMDLINE="keepinitrd mem=16M root=/dev/hda2 1" -# CONFIG_LEDS is not set -CONFIG_ALIGNMENT_TRAP=y - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Memory Technology Devices (MTD) -# -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set -CONFIG_MTD_PARTITIONS=m -CONFIG_MTD_CONCAT=m -# CONFIG_MTD_REDBOOT_PARTS is not set -# CONFIG_MTD_CMDLINE_PARTS is not set -CONFIG_MTD_AFS_PARTS=m -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -# CONFIG_NFTL is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=y -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_GEN_PROBE=y -# CONFIG_MTD_CFI_ADV_OPTIONS is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_ABSENT is not set -# CONFIG_MTD_OBSOLETE_CHIPS is not set -# CONFIG_MTD_AMDSTD is not set -# CONFIG_MTD_SHARP is not set -# CONFIG_MTD_JEDEC is not set - -# -# Mapping drivers for chip access -# -# CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_NORA is not set -# CONFIG_MTD_ARM_INTEGRATOR is not set -# CONFIG_MTD_CDB89712 is not set -CONFIG_MTD_SA1100=m -# CONFIG_MTD_2PARTS_IPAQ is not set -# CONFIG_MTD_DC21285 is not set -# CONFIG_MTD_IQ80310 is not set -# CONFIG_MTD_EPXA10DB is not set -# CONFIG_MTD_FORTUNET is not set -# CONFIG_MTD_AUTCPU12 is not set -# CONFIG_MTD_EDB7312 is not set -# CONFIG_MTD_IMPA7 is not set -# CONFIG_MTD_CEIVA is not set -# CONFIG_MTD_PCI is not set -# CONFIG_MTD_PCMCIA is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLKMTD is not set -# CONFIG_MTD_DOC1000 is not set -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOCPROBE is not set - -# -# NAND Flash Device Drivers -# -# CONFIG_MTD_NAND is not set - -# -# Plug and Play configuration -# -# CONFIG_PNP is not set -# CONFIG_PNP_NAMES is not set -# CONFIG_PNP_DEBUG is not set -# CONFIG_ISAPNP is not set -# CONFIG_PNPBIOS is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_XD is not set -# CONFIG_PARIDE is not set -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_CISS_SCSI_TAPE is not set -# CONFIG_BLK_DEV_DAC960 is not set -# CONFIG_BLK_DEV_UMEM is not set -# CONFIG_BLK_DEV_LOOP is not set -# CONFIG_BLK_DEV_NBD is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=4096 -# CONFIG_BLK_DEV_INITRD is not set - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set -# CONFIG_BLK_DEV_MD is not set -# CONFIG_MD_LINEAR is not set -# CONFIG_MD_RAID0 is not set -# CONFIG_MD_RAID1 is not set -# CONFIG_MD_RAID5 is not set -# CONFIG_MD_MULTIPATH is not set -# CONFIG_BLK_DEV_LVM is not set - -# -# Networking options -# -CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set -# CONFIG_NETLINK_DEV is not set -# CONFIG_NETFILTER is not set -# CONFIG_FILTER is not set -CONFIG_UNIX=y -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -# CONFIG_IP_PNP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_ARPD is not set -# CONFIG_INET_ECN is not set -# CONFIG_SYN_COOKIES is not set -# CONFIG_IPV6 is not set - -# -# SCTP Configuration (EXPERIMENTAL) -# -CONFIG_IPV6_SCTP__=y -# CONFIG_IP_SCTP is not set -# CONFIG_ATM is not set -# CONFIG_VLAN_8021Q is not set -# CONFIG_LLC is not set -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_DEV_APPLETALK is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set -# CONFIG_ETHERTAP is not set - -# -# Ethernet (10 or 100Mbit) -# -# CONFIG_NET_ETHERNET is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_ACENIC is not set -# CONFIG_DL2K is not set -# CONFIG_E1000 is not set -# CONFIG_E1000_NAPI is not set -# CONFIG_MYRI_SBUS is not set -# CONFIG_NS83820 is not set -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -# CONFIG_SK98LIN is not set -# CONFIG_TIGON3 is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PLIP is not set -CONFIG_PPP=m -# CONFIG_PPP_MULTILINK is not set -# CONFIG_PPP_FILTER is not set -CONFIG_PPP_ASYNC=m -# CONFIG_PPP_SYNC_TTY is not set -CONFIG_PPP_DEFLATE=m -CONFIG_PPP_BSDCOMP=m -# CONFIG_PPPOE is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -CONFIG_NET_RADIO=y -# CONFIG_STRIP is not set -# CONFIG_ARLAN is not set -# CONFIG_AIRONET4500 is not set -# CONFIG_AIRONET4500_NONCS is not set -# CONFIG_AIRONET4500_PROC is not set -# CONFIG_WAVELAN is not set -# CONFIG_AIRO is not set -# CONFIG_HERMES is not set -# CONFIG_PCMCIA_NETWAVE is not set -# CONFIG_PCMCIA_WAVELAN is not set -# CONFIG_PCMCIA_HERMES is not set -CONFIG_AIRO_CS=m -CONFIG_NET_WIRELESS=y - -# -# Token Ring devices -# -# CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# PCMCIA network device support -# -CONFIG_NET_PCMCIA=y -# CONFIG_PCMCIA_3C589 is not set -# CONFIG_PCMCIA_3C574 is not set -# CONFIG_PCMCIA_FMVJ18X is not set -# CONFIG_PCMCIA_PCNET is not set -# CONFIG_PCMCIA_NMCLAN is not set -# CONFIG_PCMCIA_SMC91C92 is not set -# CONFIG_PCMCIA_XIRC2PS is not set -# CONFIG_PCMCIA_AXNET is not set -# CONFIG_ARCNET_COM20020_CS is not set -# CONFIG_PCMCIA_IBMTR is not set -CONFIG_NET_PCMCIA_RADIO=y -# CONFIG_PCMCIA_RAYCS is not set -# CONFIG_AIRONET4500_CS is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# ATA/ATAPI/MFM/RLL support -# -CONFIG_IDE=y - -# -# IDE, ATA and ATAPI Block devices -# -CONFIG_BLK_DEV_IDE=y -# CONFIG_BLK_DEV_HD_IDE is not set -# CONFIG_BLK_DEV_HD is not set -CONFIG_BLK_DEV_IDEDISK=y -# CONFIG_IDEDISK_MULTI_MODE is not set -# CONFIG_IDEDISK_STROKE is not set -CONFIG_BLK_DEV_IDECS=m -# CONFIG_BLK_DEV_IDECD is not set -# CONFIG_BLK_DEV_IDEFLOPPY is not set -# CONFIG_BLK_DEV_IDESCSI is not set -# CONFIG_IDE_TASK_IOCTL is not set -# CONFIG_BLK_DEV_CMD640 is not set -# CONFIG_BLK_DEV_CMD640_ENHANCED is not set -# CONFIG_BLK_DEV_ISAPNP is not set -# CONFIG_BLK_DEV_IDE_ICSIDE is not set -# CONFIG_BLK_DEV_IDEDMA_ICS is not set -# CONFIG_IDEDMA_ICS_AUTO is not set -# CONFIG_BLK_DEV_IDEDMA is not set -# CONFIG_BLK_DEV_IDE_RAPIDE is not set -# CONFIG_IDE_CHIPSETS is not set -# CONFIG_IDEDMA_AUTO is not set -# CONFIG_DMA_NONPCI is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# I2O device support -# -# CONFIG_I2O is not set -# CONFIG_I2O_BLOCK is not set -# CONFIG_I2O_LAN is not set -# CONFIG_I2O_SCSI is not set -# CONFIG_I2O_PROC is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN_BOOL is not set - -# -# Input device support -# -CONFIG_INPUT=y -# CONFIG_INPUT_MOUSEDEV is not set -# CONFIG_INPUT_MOUSEDEV_PSAUX is not set -# CONFIG_INPUT_JOYDEV is not set -# CONFIG_INPUT_TSDEV is not set -# CONFIG_INPUT_TSLIBDEV is not set -# CONFIG_INPUT_EVDEV is not set -# CONFIG_INPUT_EVBUG is not set -# CONFIG_GAMEPORT is not set -CONFIG_SOUND_GAMEPORT=y -# CONFIG_GAMEPORT_NS558 is not set -# CONFIG_GAMEPORT_L4 is not set -# CONFIG_GAMEPORT_EMU10K1 is not set -# CONFIG_GAMEPORT_VORTEX is not set -# CONFIG_GAMEPORT_FM801 is not set -# CONFIG_GAMEPORT_CS461x is not set -# CONFIG_SERIO is not set -# CONFIG_SERIO_I8042 is not set -# CONFIG_SERIO_SERPORT is not set -# CONFIG_SERIO_CT82C710 is not set -# CONFIG_SERIO_PARKBD is not set -# CONFIG_SERIO_RPCKBD is not set -# CONFIG_SERIO_AMBAKMI is not set -# CONFIG_SERIO_SA1111 is not set -# CONFIG_INPUT_KEYBOARD is not set -# CONFIG_KEYBOARD_ATKBD is not set -# CONFIG_KEYBOARD_SUNKBD is not set -# CONFIG_KEYBOARD_XTKBD is not set -# CONFIG_KEYBOARD_NEWTON is not set -# CONFIG_INPUT_MOUSE is not set -# CONFIG_MOUSE_PS2 is not set -# CONFIG_MOUSE_SERIAL is not set -# CONFIG_MOUSE_INPORT is not set -# CONFIG_MOUSE_LOGIBM is not set -# CONFIG_MOUSE_PC110PAD is not set -# CONFIG_INPUT_JOYSTICK is not set -# CONFIG_JOYSTICK_ANALOG is not set -# CONFIG_JOYSTICK_A3D is not set -# CONFIG_JOYSTICK_ADI is not set -# CONFIG_JOYSTICK_COBRA is not set -# CONFIG_JOYSTICK_GF2K is not set -# CONFIG_JOYSTICK_GRIP is not set -# CONFIG_JOYSTICK_GRIP_MP is not set -# CONFIG_JOYSTICK_GUILLEMOT is not set -# CONFIG_JOYSTICK_INTERACT is not set -# CONFIG_JOYSTICK_SIDEWINDER is not set -# CONFIG_JOYSTICK_TMDC is not set -# CONFIG_JOYSTICK_IFORCE is not set -# CONFIG_JOYSTICK_WARRIOR is not set -# CONFIG_JOYSTICK_MAGELLAN is not set -# CONFIG_JOYSTICK_SPACEORB is not set -# CONFIG_JOYSTICK_SPACEBALL is not set -# CONFIG_JOYSTICK_STINGER is not set -# CONFIG_JOYSTICK_TWIDDLER is not set -# CONFIG_JOYSTICK_DB9 is not set -# CONFIG_JOYSTICK_GAMECON is not set -# CONFIG_JOYSTICK_TURBOGRAFX is not set -# CONFIG_INPUT_JOYDUMP is not set -# CONFIG_INPUT_TOUCHSCREEN is not set -# CONFIG_TOUCHSCREEN_GUNZE is not set -# CONFIG_INPUT_MISC is not set -# CONFIG_INPUT_PCSPKR is not set -# CONFIG_INPUT_UINPUT is not set - -# -# Character devices -# -# CONFIG_VT is not set -# CONFIG_SERIAL_NONSTANDARD is not set - -# -# Serial drivers -# -# CONFIG_SERIAL_8250 is not set -# CONFIG_SERIAL_8250_CONSOLE is not set -# CONFIG_SERIAL_8250_CS is not set -# CONFIG_SERIAL_8250_EXTENDED is not set -# CONFIG_SERIAL_8250_MANY_PORTS is not set -# CONFIG_SERIAL_8250_SHARE_IRQ is not set -# CONFIG_SERIAL_8250_DETECT_IRQ is not set -# CONFIG_SERIAL_8250_MULTIPORT is not set -# CONFIG_SERIAL_8250_RSA is not set -# CONFIG_SERIAL_ACORN is not set -# CONFIG_SERIAL_ANAKIN is not set -# CONFIG_SERIAL_ANAKIN_CONSOLE is not set -# CONFIG_SERIAL_AMBA is not set -# CONFIG_SERIAL_AMBA_CONSOLE is not set -# CONFIG_SERIAL_CLPS711X is not set -# CONFIG_SERIAL_CLPS711X_CONSOLE is not set -# CONFIG_SERIAL_CLPS711X_OLD_NAME is not set -# CONFIG_SERIAL_21285 is not set -# CONFIG_SERIAL_21285_OLD is not set -# CONFIG_SERIAL_21285_CONSOLE is not set -# CONFIG_SERIAL_UART00 is not set -# CONFIG_SERIAL_UART00_CONSOLE is not set -CONFIG_SERIAL_SA1100=y -CONFIG_SERIAL_SA1100_CONSOLE=y -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -# CONFIG_UNIX98_PTYS is not set - -# -# I2C support -# -CONFIG_I2C=m -CONFIG_I2C_ALGOBIT=m -# CONFIG_I2C_PHILIPSPAR is not set -# CONFIG_I2C_ELV is not set -# CONFIG_I2C_VELLEMAN is not set -# CONFIG_SCx200_I2C is not set -# CONFIG_SCx200_ACB is not set -# CONFIG_I2C_BIT_SA1100_GPIO is not set -# CONFIG_I2C_ALGOPCF is not set -CONFIG_I2C_CHARDEV=m -CONFIG_I2C_PROC=m - -# -# L3 serial bus support -# -# CONFIG_L3 is not set -# CONFIG_L3_ALGOBIT is not set -# CONFIG_L3_BIT_SA1100_GPIO is not set -# CONFIG_BIT_SA1100_GPIO is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -# CONFIG_GEN_RTC is not set -# CONFIG_SA1100_RTC is not set -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set - -# -# PCMCIA character devices -# -# CONFIG_SYNCLINK_CS is not set -# CONFIG_SCx200_GPIO is not set -# CONFIG_RAW_DRIVER is not set - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -# CONFIG_QFMT_V1 is not set -# CONFIG_QFMT_V2 is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set -# CONFIG_REISERFS_FS is not set -# CONFIG_REISERFS_CHECK is not set -# CONFIG_REISERFS_PROC_INFO is not set -# CONFIG_ADFS_FS is not set -# CONFIG_ADFS_FS_RW is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_EXT3_FS is not set -# CONFIG_JBD is not set -# CONFIG_JBD_DEBUG is not set -# CONFIG_FAT_FS is not set -# CONFIG_MSDOS_FS is not set -# CONFIG_UMSDOS_FS is not set -# CONFIG_VFAT_FS is not set -# CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set -# CONFIG_JFFS2_FS is not set -# CONFIG_CRAMFS is not set -# CONFIG_TMPFS is not set -CONFIG_RAMFS=y -# CONFIG_ISO9660_FS is not set -# CONFIG_JOLIET is not set -# CONFIG_ZISOFS is not set -# CONFIG_JFS_FS is not set -# CONFIG_JFS_DEBUG is not set -# CONFIG_JFS_STATISTICS is not set -# CONFIG_MINIX_FS is not set -# CONFIG_VXFS_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS_DEBUG is not set -# CONFIG_NTFS_RW is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -# CONFIG_DEVFS_MOUNT is not set -# CONFIG_DEVFS_DEBUG is not set -# CONFIG_DEVPTS_FS is not set -# CONFIG_QNX4FS_FS is not set -# CONFIG_QNX4FS_RW is not set -# CONFIG_ROMFS_FS is not set -CONFIG_EXT2_FS=y -# CONFIG_SYSV_FS is not set -# CONFIG_UDF_FS is not set -# CONFIG_UDF_RW is not set -# CONFIG_UFS_FS is not set -# CONFIG_UFS_FS_WRITE is not set -# CONFIG_XFS_FS is not set -# CONFIG_XFS_RT is not set -# CONFIG_XFS_QUOTA is not set - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -# CONFIG_INTERMEZZO_FS is not set -CONFIG_NFS_FS=y -# CONFIG_NFS_V3 is not set -# CONFIG_NFS_V4 is not set -# CONFIG_ROOT_NFS is not set -# CONFIG_NFSD is not set -# CONFIG_NFSD_V3 is not set -# CONFIG_NFSD_V4 is not set -# CONFIG_NFSD_TCP is not set -CONFIG_SUNRPC=y -CONFIG_LOCKD=y -# CONFIG_EXPORTFS is not set -# CONFIG_CIFS is not set -# CONFIG_SMB_FS is not set -# CONFIG_NCP_FS is not set -# CONFIG_NCPFS_PACKET_SIGNING is not set -# CONFIG_NCPFS_IOCTL_LOCKING is not set -# CONFIG_NCPFS_STRONG is not set -# CONFIG_NCPFS_NFS_NS is not set -# CONFIG_NCPFS_OS2_NS is not set -# CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_NLS is not set -# CONFIG_NCPFS_EXTRAS is not set -# CONFIG_AFS_FS is not set -# CONFIG_ZISOFS_FS is not set - -# -# Partition Types -# -CONFIG_PARTITION_ADVANCED=y -# CONFIG_ACORN_PARTITION is not set -# CONFIG_OSF_PARTITION is not set -# CONFIG_AMIGA_PARTITION is not set -# CONFIG_ATARI_PARTITION is not set -# CONFIG_MAC_PARTITION is not set -CONFIG_MSDOS_PARTITION=y -# CONFIG_BSD_DISKLABEL is not set -# CONFIG_MINIX_SUBPARTITION is not set -# CONFIG_SOLARIS_X86_PARTITION is not set -# CONFIG_UNIXWARE_DISKLABEL is not set -# CONFIG_LDM_PARTITION is not set -# CONFIG_SGI_PARTITION is not set -# CONFIG_ULTRIX_PARTITION is not set -# CONFIG_SUN_PARTITION is not set -# CONFIG_EFI_PARTITION is not set -# CONFIG_SMB_NLS is not set -# CONFIG_NLS is not set - -# -# Sound -# -# CONFIG_SOUND is not set - -# -# Multimedia Capabilities Port drivers -# -# CONFIG_MCP is not set -# CONFIG_MCP_SA1100 is not set -# CONFIG_MCP_UCB1200 is not set -# CONFIG_MCP_UCB1200_AUDIO is not set -# CONFIG_MCP_UCB1200_TS is not set - -# -# Console Switches -# -# CONFIG_SWITCHES is not set -# CONFIG_SWITCHES_SA1100 is not set -# CONFIG_SWITCHES_UCB1X00 is not set - -# -# USB support -# -# CONFIG_USB is not set - -# -# Bluetooth support -# -# CONFIG_BT is not set - -# -# Kernel hacking -# -# CONFIG_NO_FRAME_POINTER is not set -CONFIG_DEBUG_USER=y -# CONFIG_DEBUG_INFO is not set -CONFIG_DEBUG_KERNEL=y -# CONFIG_DEBUG_SLAB is not set -# CONFIG_MAGIC_SYSRQ is not set -# CONFIG_DEBUG_SPINLOCK is not set -# CONFIG_DEBUG_WAITQ is not set -CONFIG_DEBUG_BUGVERBOSE=y -CONFIG_DEBUG_ERRORS=y -# CONFIG_DEBUG_LL is not set -# CONFIG_DEBUG_DC21285_PORT is not set -# CONFIG_DEBUG_CLPS711X_UART2 is not set - -# -# Security options -# -CONFIG_SECURITY_CAPABILITIES=y - -# -# Library routines -# -# CONFIG_CRC32 is not set -CONFIG_ZLIB_INFLATE=m -CONFIG_ZLIB_DEFLATE=m diff -prauN linux-2.6.0-test5/arch/arm/kernel/asm-offsets.c wli-2.6.0-test5-bk12-25/arch/arm/kernel/asm-offsets.c --- linux-2.6.0-test5/arch/arm/kernel/asm-offsets.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/kernel/asm-offsets.c 2003-09-25 19:15:44.000000000 -0700 @@ -10,14 +10,9 @@ * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ - -#include #include #include -#include -#include - /* * Make sure that the compiler and target are compatible. */ @@ -58,19 +53,6 @@ int main(void) BLANK(); DEFINE(VM_EXEC, VM_EXEC); BLANK(); - DEFINE(HPTE_TYPE_SMALL, PTE_TYPE_SMALL); - DEFINE(HPTE_AP_READ, PTE_AP_READ); - DEFINE(HPTE_AP_WRITE, PTE_AP_WRITE); - BLANK(); - DEFINE(LPTE_PRESENT, L_PTE_PRESENT); - DEFINE(LPTE_YOUNG, L_PTE_YOUNG); - DEFINE(LPTE_BUFFERABLE, L_PTE_BUFFERABLE); - DEFINE(LPTE_CACHEABLE, L_PTE_CACHEABLE); - DEFINE(LPTE_USER, L_PTE_USER); - DEFINE(LPTE_WRITE, L_PTE_WRITE); - DEFINE(LPTE_EXEC, L_PTE_EXEC); - DEFINE(LPTE_DIRTY, L_PTE_DIRTY); - BLANK(); DEFINE(PAGE_SZ, PAGE_SIZE); BLANK(); DEFINE(SYS_ERROR0, 0x9f0000); diff -prauN linux-2.6.0-test5/arch/arm/kernel/bios32.c wli-2.6.0-test5-bk12-25/arch/arm/kernel/bios32.c --- linux-2.6.0-test5/arch/arm/kernel/bios32.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/kernel/bios32.c 2003-09-25 19:15:44.000000000 -0700 @@ -35,18 +35,17 @@ void pcibios_report_status(u_int status_ continue; pci_read_config_word(dev, PCI_STATUS, &status); + if (status == 0xffff) + continue; - status &= status_mask; - if (status == 0) + if ((status & status_mask) == 0) continue; /* clear the status errors */ - pci_write_config_word(dev, PCI_STATUS, status); + pci_write_config_word(dev, PCI_STATUS, status & status_mask); if (warn) - printk("(%02x:%02x.%d: %04X) ", dev->bus->number, - PCI_SLOT(dev->devfn), PCI_FUNC(dev->devfn), - status); + printk("(%s: %04X) ", pci_name(dev), status); } } diff -prauN linux-2.6.0-test5/arch/arm/kernel/ecard.c wli-2.6.0-test5-bk12-25/arch/arm/kernel/ecard.c --- linux-2.6.0-test5/arch/arm/kernel/ecard.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/kernel/ecard.c 2003-09-25 19:15:44.000000000 -0700 @@ -329,8 +329,7 @@ ecard_call(struct ecard_request *req) BUG(); if (ecard_pid <= 0) - ecard_pid = kernel_thread(ecard_task, NULL, - CLONE_FS | CLONE_FILES | CLONE_SIGHAND); + ecard_pid = kernel_thread(ecard_task, NULL, CLONE_KERNEL); ecard_req = req; wake_up(&ecard_wait); diff -prauN linux-2.6.0-test5/arch/arm/kernel/entry-armv.S wli-2.6.0-test5-bk12-25/arch/arm/kernel/entry-armv.S --- linux-2.6.0-test5/arch/arm/kernel/entry-armv.S 2003-09-08 12:50:00.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/kernel/entry-armv.S 2003-09-25 19:15:44.000000000 -0700 @@ -729,7 +729,7 @@ __dabt_svc: sub sp, sp, #S_FRAME_SIZE * This routine must not corrupt r9 */ #ifdef MULTI_ABORT - ldr r4, .LCprocfns @ pass r0, r3 to + ldr r4, .LCprocfns @ pass r2, r3 to mov lr, pc @ processor code ldr pc, [r4] @ call processor specific code #else @@ -871,7 +871,7 @@ __dabt_usr: sub sp, sp, #S_FRAME_SIZE @ alignment_trap r7, r7, __temp_abt zero_fp #ifdef MULTI_ABORT - ldr r4, .LCprocfns @ pass r0, r3 to + ldr r4, .LCprocfns @ pass r2, r3 to mov lr, pc @ processor code ldr pc, [r4] @ call processor specific code #else diff -prauN linux-2.6.0-test5/arch/arm/kernel/entry-common.S wli-2.6.0-test5-bk12-25/arch/arm/kernel/entry-common.S --- linux-2.6.0-test5/arch/arm/kernel/entry-common.S 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/kernel/entry-common.S 2003-09-25 19:15:44.000000000 -0700 @@ -23,7 +23,7 @@ #endif /* - * Our do_softirq out of line code. See include/asm-arm/softirq.h for + * Our do_softirq out of line code. See include/asm-arm/hardirq.h for * the calling assembly. */ ENTRY(__do_softirq) diff -prauN linux-2.6.0-test5/arch/arm/kernel/fiq.c wli-2.6.0-test5-bk12-25/arch/arm/kernel/fiq.c --- linux-2.6.0-test5/arch/arm/kernel/fiq.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/kernel/fiq.c 2003-09-25 19:15:44.000000000 -0700 @@ -35,7 +35,6 @@ * - enables FIQ. * 6. Goto 3 */ -#include #include #include #include diff -prauN linux-2.6.0-test5/arch/arm/kernel/process.c wli-2.6.0-test5-bk12-25/arch/arm/kernel/process.c --- linux-2.6.0-test5/arch/arm/kernel/process.c 2003-09-08 12:50:27.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/kernel/process.c 2003-09-25 19:15:44.000000000 -0700 @@ -312,8 +312,8 @@ void release_thread(struct task_struct * asmlinkage void ret_from_fork(void) __asm__("ret_from_fork"); int -copy_thread(int nr, unsigned long clone_flags, unsigned long esp, - unsigned long unused, struct task_struct *p, struct pt_regs *regs) +copy_thread(int nr, unsigned long clone_flags, unsigned long stack_start, + unsigned long stk_sz, struct task_struct *p, struct pt_regs *regs) { struct thread_info *thread = p->thread_info; struct pt_regs *childregs; @@ -321,7 +321,7 @@ copy_thread(int nr, unsigned long clone_ childregs = ((struct pt_regs *)((unsigned long)thread + THREAD_SIZE - 8)) - 1; *childregs = *regs; childregs->ARM_r0 = 0; - childregs->ARM_sp = esp; + childregs->ARM_sp = stack_start; memset(&thread->cpu_context, 0, sizeof(struct cpu_context_save)); thread->cpu_context.sp = (unsigned long)childregs; @@ -373,33 +373,35 @@ void dump_thread(struct pt_regs * regs, } /* - * This is the mechanism for creating a new kernel thread. - * - * NOTE! Only a kernel-only process(ie the swapper or direct descendants - * who haven't done an "execve()") should use this: it will work within - * a system call from a "real" process, but the process memory space will - * not be free'd until both the parent and the child have exited. + * Shuffle the argument into the correct register before calling the + * thread function. r1 is the thread argument, r2 is the pointer to + * the thread function, and r3 points to the exit function. + */ +extern void kernel_thread_helper(void); +asm( ".align\n" +" .type kernel_thread_helper, #function\n" +"kernel_thread_helper:\n" +" mov r0, r1\n" +" mov lr, r3\n" +" mov pc, r2\n" +" .size kernel_thread_helper, . - kernel_thread_helper"); + +/* + * Create a kernel thread. */ pid_t kernel_thread(int (*fn)(void *), void *arg, unsigned long flags) { - register unsigned int r0 asm("r0") = flags | CLONE_VM | CLONE_UNTRACED; - register unsigned int r1 asm("r1") = 0; - register pid_t __ret asm("r0"); - - __asm__ __volatile__( - __syscall(clone)" @ kernel_thread sys_clone \n\ - movs %0, r0 @ if we are the child \n\ - bne 1f \n\ - mov fp, #0 @ ensure that fp is zero \n\ - mov r0, %4 \n\ - mov lr, pc \n\ - mov pc, %3 \n\ - b sys_exit \n\ -1: " - : "=r" (__ret) - : "0" (r0), "r" (r1), "r" (fn), "r" (arg) - : "lr"); - return __ret; + struct pt_regs regs; + + memset(®s, 0, sizeof(regs)); + + regs.ARM_r1 = (unsigned long)arg; + regs.ARM_r2 = (unsigned long)fn; + regs.ARM_r3 = (unsigned long)do_exit; + regs.ARM_pc = (unsigned long)kernel_thread_helper; + regs.ARM_cpsr = SVC_MODE; + + return do_fork(flags|CLONE_VM|CLONE_UNTRACED, 0, ®s, 0, NULL, NULL); } /* diff -prauN linux-2.6.0-test5/arch/arm/kernel/ptrace.c wli-2.6.0-test5-bk12-25/arch/arm/kernel/ptrace.c --- linux-2.6.0-test5/arch/arm/kernel/ptrace.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/kernel/ptrace.c 2003-09-25 19:15:44.000000000 -0700 @@ -9,7 +9,6 @@ * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ -#include #include #include #include diff -prauN linux-2.6.0-test5/arch/arm/kernel/semaphore.c wli-2.6.0-test5-bk12-25/arch/arm/kernel/semaphore.c --- linux-2.6.0-test5/arch/arm/kernel/semaphore.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/kernel/semaphore.c 2003-09-25 19:15:44.000000000 -0700 @@ -11,7 +11,6 @@ * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ -#include #include #include diff -prauN linux-2.6.0-test5/arch/arm/kernel/setup.c wli-2.6.0-test5-bk12-25/arch/arm/kernel/setup.c --- linux-2.6.0-test5/arch/arm/kernel/setup.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/kernel/setup.c 2003-09-25 19:15:44.000000000 -0700 @@ -498,7 +498,7 @@ static int __init parse_tag_core(const s if (tag->hdr.size > 2) { if ((tag->u.core.flags & 1) == 0) root_mountflags &= ~MS_RDONLY; - ROOT_DEV = tag->u.core.rootdev; + ROOT_DEV = old_decode_dev(tag->u.core.rootdev); } return 0; } @@ -798,7 +798,7 @@ static int c_show(struct seq_file *m, vo seq_printf(m, "Cache type\t: %s\n" "Cache clean\t: %s\n" "Cache lockdown\t: %s\n" - "Cache unified\t: %s\n", + "Cache format\t: %s\n", cache_types[CACHE_TYPE(cache_info)], cache_clean[CACHE_TYPE(cache_info)], cache_lockdown[CACHE_TYPE(cache_info)], diff -prauN linux-2.6.0-test5/arch/arm/lib/io-readsb.S wli-2.6.0-test5-bk12-25/arch/arm/lib/io-readsb.S --- linux-2.6.0-test5/arch/arm/lib/io-readsb.S 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/lib/io-readsb.S 2003-09-25 19:15:44.000000000 -0700 @@ -9,7 +9,6 @@ */ #include #include -#include .insb_align: rsb ip, ip, #4 cmp ip, r2 @@ -37,32 +36,36 @@ ENTRY(__raw_readsb) .insb_16_lp: ldrb r3, [r0] ldrb r4, [r0] - orr r3, r3, r4, lsl #8 - ldrb r4, [r0] - orr r3, r3, r4, lsl #16 - ldrb r4, [r0] - orr r3, r3, r4, lsl #24 - ldrb r4, [r0] - ldrb r5, [r0] - orr r4, r4, r5, lsl #8 - ldrb r5, [r0] - orr r4, r4, r5, lsl #16 - ldrb r5, [r0] - orr r4, r4, r5, lsl #24 ldrb r5, [r0] + mov r3, r3, lsl #byte(0) ldrb r6, [r0] - orr r5, r5, r6, lsl #8 - ldrb r6, [r0] - orr r5, r5, r6, lsl #16 + orr r3, r3, r4, lsl #byte(1) + ldrb r4, [r0] + orr r3, r3, r5, lsl #byte(2) + ldrb r5, [r0] + orr r3, r3, r6, lsl #byte(3) ldrb r6, [r0] - orr r5, r5, r6, lsl #24 + mov r4, r4, lsl #byte(0) + ldrb ip, [r0] + orr r4, r4, r5, lsl #byte(1) + ldrb r5, [r0] + orr r4, r4, r6, lsl #byte(2) ldrb r6, [r0] + orr r4, r4, ip, lsl #byte(3) ldrb ip, [r0] - orr r6, r6, ip, lsl #8 + mov r5, r5, lsl #byte(0) + ldrb lr, [r0] + orr r5, r5, r6, lsl #byte(1) + ldrb r6, [r0] + orr r5, r5, ip, lsl #byte(2) ldrb ip, [r0] - orr r6, r6, ip, lsl #16 + orr r5, r5, lr, lsl #byte(3) + ldrb lr, [r0] + mov r6, r6, lsl #byte(0) + orr r6, r6, ip, lsl #byte(1) ldrb ip, [r0] - orr r6, r6, ip, lsl #24 + orr r6, r6, lr, lsl #byte(2) + orr r6, r6, ip, lsl #byte(3) stmia r1!, {r3 - r6} subs r2, r2, #16 @@ -76,18 +79,20 @@ ENTRY(__raw_readsb) ldrb r3, [r0] ldrb r4, [r0] - orr r3, r3, r4, lsl #8 - ldrb r4, [r0] - orr r3, r3, r4, lsl #16 - ldrb r4, [r0] - orr r3, r3, r4, lsl #24 - ldrb r4, [r0] ldrb r5, [r0] - orr r4, r4, r5, lsl #8 - ldrb r5, [r0] - orr r4, r4, r5, lsl #16 + mov r3, r3, lsl #byte(0) + ldrb r6, [r0] + orr r3, r3, r4, lsl #byte(1) + ldrb r4, [r0] + orr r3, r3, r5, lsl #byte(2) ldrb r5, [r0] - orr r4, r4, r5, lsl #24 + orr r3, r3, r6, lsl #byte(3) + ldrb r6, [r0] + mov r4, r4, lsl #byte(0) + ldrb ip, [r0] + orr r4, r4, r5, lsl #byte(1) + orr r4, r4, r6, lsl #byte(2) + orr r4, r4, ip, lsl #byte(3) stmia r1!, {r3, r4} .insb_no_8: tst r2, #4 @@ -95,11 +100,12 @@ ENTRY(__raw_readsb) ldrb r3, [r0] ldrb r4, [r0] - orr r3, r3, r4, lsl #8 - ldrb r4, [r0] - orr r3, r3, r4, lsl #16 - ldrb r4, [r0] - orr r3, r3, r4, lsl #24 + ldrb r5, [r0] + ldrb r6, [r0] + mov r3, r3, lsl #byte(0) + orr r3, r3, r4, lsl #byte(1) + orr r3, r3, r5, lsl #byte(2) + orr r3, r3, r6, lsl #byte(3) str r3, [r1], #4 .insb_no_4: ands r2, r2, #3 diff -prauN linux-2.6.0-test5/arch/arm/lib/io-writesb.S wli-2.6.0-test5-bk12-25/arch/arm/lib/io-writesb.S --- linux-2.6.0-test5/arch/arm/lib/io-writesb.S 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/lib/io-writesb.S 2003-09-25 19:15:44.000000000 -0700 @@ -9,7 +9,26 @@ */ #include #include -#include + + .macro outword, rd +#ifndef __ARMEB__ + strb \rd, [r0] + mov \rd, \rd, lsr #8 + strb \rd, [r0] + mov \rd, \rd, lsr #8 + strb \rd, [r0] + mov \rd, \rd, lsr #8 + strb \rd, [r0] +#else + mov lr, \rd, lsr #24 + strb lr, [r0] + mov lr, \rd, lsr #16 + strb lr, [r0] + mov lr, \rd, lsr #8 + strb lr, [r0] + strb \rd, [r0] +#endif + .endm .outsb_align: rsb ip, ip, #4 cmp ip, r2 @@ -30,86 +49,37 @@ ENTRY(__raw_writesb) ands ip, r1, #3 bne .outsb_align -.outsb_aligned: stmfd sp!, {r4 - r6, lr} +.outsb_aligned: stmfd sp!, {r4, r5, lr} subs r2, r2, #16 bmi .outsb_no_16 -.outsb_16_lp: ldmia r1!, {r3 - r6} - - strb r3, [r0] - mov r3, r3, lsr #8 - strb r3, [r0] - mov r3, r3, lsr #8 - strb r3, [r0] - mov r3, r3, lsr #8 - strb r3, [r0] - - strb r4, [r0] - mov r4, r4, lsr #8 - strb r4, [r0] - mov r4, r4, lsr #8 - strb r4, [r0] - mov r4, r4, lsr #8 - strb r4, [r0] - - strb r5, [r0] - mov r5, r5, lsr #8 - strb r5, [r0] - mov r5, r5, lsr #8 - strb r5, [r0] - mov r5, r5, lsr #8 - strb r5, [r0] - - strb r6, [r0] - mov r6, r6, lsr #8 - strb r6, [r0] - mov r6, r6, lsr #8 - strb r6, [r0] - mov r6, r6, lsr #8 - strb r6, [r0] - +.outsb_16_lp: ldmia r1!, {r3, r4, r5, ip} + outword r3 + outword r4 + outword r5 + outword ip subs r2, r2, #16 bpl .outsb_16_lp tst r2, #15 - LOADREGS(eqfd, sp!, {r4 - r6, pc}) + LOADREGS(eqfd, sp!, {r4, r5, pc}) .outsb_no_16: tst r2, #8 beq .outsb_no_8 ldmia r1!, {r3, r4} - - strb r3, [r0] - mov r3, r3, lsr #8 - strb r3, [r0] - mov r3, r3, lsr #8 - strb r3, [r0] - mov r3, r3, lsr #8 - strb r3, [r0] - - strb r4, [r0] - mov r4, r4, lsr #8 - strb r4, [r0] - mov r4, r4, lsr #8 - strb r4, [r0] - mov r4, r4, lsr #8 - strb r4, [r0] + outword r3 + outword r4 .outsb_no_8: tst r2, #4 beq .outsb_no_4 ldr r3, [r1], #4 - strb r3, [r0] - mov r3, r3, lsr #8 - strb r3, [r0] - mov r3, r3, lsr #8 - strb r3, [r0] - mov r3, r3, lsr #8 - strb r3, [r0] + outword r3 .outsb_no_4: ands r2, r2, #3 - LOADREGS(eqfd, sp!, {r4 - r6, pc}) + LOADREGS(eqfd, sp!, {r4, r5, pc}) cmp r2, #2 ldrb r3, [r1], #1 @@ -119,4 +89,4 @@ ENTRY(__raw_writesb) ldrgtb r3, [r1] strgtb r3, [r0] - LOADREGS(fd, sp!, {r4 - r6, pc}) + LOADREGS(fd, sp!, {r4, r5, pc}) diff -prauN linux-2.6.0-test5/arch/arm/lib/io-writesl.S wli-2.6.0-test5-bk12-25/arch/arm/lib/io-writesl.S --- linux-2.6.0-test5/arch/arm/lib/io-writesl.S 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/lib/io-writesl.S 2003-09-25 19:15:44.000000000 -0700 @@ -17,10 +17,15 @@ ENTRY(__raw_writesl) ands ip, r1, #3 bne 2f -1: ldr r3, [r1], #4 - str r3, [r0] - subs r2, r2, #1 - bne 1b + tst r2, #1 + ldrne r3, [r1], #4 + strne r3, [r0, #0] +1: subs r2, r2, #2 + ldrcs r3, [r1], #4 + ldrcs ip, [r1], #4 + strcs r3, [r0, #0] + strcs ip, [r0, #0] + bcs 1b mov pc, lr 2: bic r1, r1, #3 @@ -31,25 +36,25 @@ ENTRY(__raw_writesl) 3: mov ip, r3, lsr #16 ldr r3, [r1], #4 - orr ip, ip, r3, lsl #16 - str ip, [r0] subs r2, r2, #1 + orr ip, ip, r3, lsl #16 + str ip, [r0, #0] bne 3b mov pc, lr 4: mov ip, r3, lsr #24 ldr r3, [r1], #4 - orr ip, ip, r3, lsl #8 - str ip, [r0] subs r2, r2, #1 + orr ip, ip, r3, lsl #8 + str ip, [r0, #0] bne 4b mov pc, lr 5: mov ip, r3, lsr #8 ldr r3, [r1], #4 - orr ip, ip, r3, lsl #24 - str ip, [r0] subs r2, r2, #1 + orr ip, ip, r3, lsl #24 + str ip, [r0, #0] bne 5b mov pc, lr diff -prauN linux-2.6.0-test5/arch/arm/lib/lib1funcs.S wli-2.6.0-test5-bk12-25/arch/arm/lib/lib1funcs.S --- linux-2.6.0-test5/arch/arm/lib/lib1funcs.S 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/lib/lib1funcs.S 2003-09-25 19:15:44.000000000 -0700 @@ -41,7 +41,6 @@ Boston, MA 02111-1307, USA. */ #include #include #include -#include #define RET mov #define RETc(x) mov##x diff -prauN linux-2.6.0-test5/arch/arm/mach-anakin/arch.c wli-2.6.0-test5-bk12-25/arch/arm/mach-anakin/arch.c --- linux-2.6.0-test5/arch/arm/mach-anakin/arch.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mach-anakin/arch.c 2003-09-25 19:15:44.000000000 -0700 @@ -10,8 +10,6 @@ * Changelog: * 09-Apr-2001 W/TTC Created */ - -#include #include #include diff -prauN linux-2.6.0-test5/arch/arm/mach-clps711x/mm.c wli-2.6.0-test5-bk12-25/arch/arm/mach-clps711x/mm.c --- linux-2.6.0-test5/arch/arm/mach-clps711x/mm.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mach-clps711x/mm.c 2003-09-25 19:15:44.000000000 -0700 @@ -22,7 +22,6 @@ #include #include #include -#include #include #include diff -prauN linux-2.6.0-test5/arch/arm/mach-integrator/Kconfig wli-2.6.0-test5-bk12-25/arch/arm/mach-integrator/Kconfig --- linux-2.6.0-test5/arch/arm/mach-integrator/Kconfig 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mach-integrator/Kconfig 2003-09-25 19:15:44.000000000 -0700 @@ -8,9 +8,7 @@ config INTEGRATOR_IMPD1 allows ARM(R) Ltd PrimeCells to be developed and evaluated. The IM-PD1 can be found on the Integrator/PP2 platform. - If you want to compile this as a module (=code which can be - inserted into and removed from the running kernel), say M - here and read . The module - will be called impd1. + To compile this driver as a module, choose M here: the + module will be called impd1. endmenu diff -prauN linux-2.6.0-test5/arch/arm/mach-integrator/Makefile wli-2.6.0-test5-bk12-25/arch/arm/mach-integrator/Makefile --- linux-2.6.0-test5/arch/arm/mach-integrator/Makefile 2003-09-08 12:50:23.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mach-integrator/Makefile 2003-09-25 19:15:44.000000000 -0700 @@ -4,7 +4,7 @@ # Object file lists. -obj-y := core.o time.o +obj-y := core.o lm.o time.o obj-$(CONFIG_LEDS) += leds.o obj-$(CONFIG_PCI) += pci_v3.o pci.o diff -prauN linux-2.6.0-test5/arch/arm/mach-integrator/core.c wli-2.6.0-test5-bk12-25/arch/arm/mach-integrator/core.c --- linux-2.6.0-test5/arch/arm/mach-integrator/core.c 2003-09-08 12:50:17.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mach-integrator/core.c 2003-09-25 19:15:44.000000000 -0700 @@ -17,7 +17,6 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include #include #include #include @@ -34,6 +33,8 @@ #include #include +#include + #include #include #include @@ -46,6 +47,7 @@ * just for now). */ #define VA_IC_BASE IO_ADDRESS(INTEGRATOR_IC_BASE) +#define VA_SC_BASE IO_ADDRESS(INTEGRATOR_SC_BASE) #define VA_CMIC_BASE IO_ADDRESS(INTEGRATOR_HDR_BASE) + INTEGRATOR_HDR_IC_OFFSET /* @@ -66,7 +68,7 @@ * f1a00000 1a000000 Debug LEDs * f1b00000 1b000000 GPIO */ - + static struct map_desc integrator_io_desc[] __initdata = { { IO_ADDRESS(INTEGRATOR_HDR_BASE), INTEGRATOR_HDR_BASE, SZ_4K, MT_DEVICE }, { IO_ADDRESS(INTEGRATOR_SC_BASE), INTEGRATOR_SC_BASE, SZ_4K, MT_DEVICE }, @@ -89,7 +91,7 @@ static void __init integrator_map_io(voi iotable_init(integrator_io_desc, ARRAY_SIZE(integrator_io_desc)); } -#define ALLPCI ( (1 << IRQ_PCIINT0) | (1 << IRQ_PCIINT1) | (1 << IRQ_PCIINT2) | (1 << IRQ_PCIINT3) ) +#define ALLPCI ( (1 << IRQ_PCIINT0) | (1 << IRQ_PCIINT1) | (1 << IRQ_PCIINT2) | (1 << IRQ_PCIINT3) ) static void sc_mask_irq(unsigned int irq) { @@ -161,6 +163,7 @@ static struct amba_device *amba_devs[] _ static int __init register_devices(void) { + unsigned long sc_dec; int i; for (i = 0; i < ARRAY_SIZE(amba_devs); i++) { @@ -169,6 +172,28 @@ static int __init register_devices(void) amba_device_register(d, &iomem_resource); } + sc_dec = readl(VA_SC_BASE + INTEGRATOR_SC_DEC_OFFSET); + for (i = 0; i < 4; i++) { + struct lm_device *lmdev; + + if ((sc_dec & (16 << i)) == 0) + continue; + + lmdev = kmalloc(sizeof(struct lm_device), GFP_KERNEL); + if (!lmdev) + continue; + + memset(lmdev, 0, sizeof(struct lm_device)); + + lmdev->resource.start = 0xc0000000 + 0x10000000 * i; + lmdev->resource.end = lmdev->resource.start + 0x0fffffff; + lmdev->resource.flags = IORESOURCE_MEM; + lmdev->irq = IRQ_EXPINT0 + i; + lmdev->id = i; + + lm_device_register(lmdev); + } + return 0; } diff -prauN linux-2.6.0-test5/arch/arm/mach-integrator/cpu.c wli-2.6.0-test5-bk12-25/arch/arm/mach-integrator/cpu.c --- linux-2.6.0-test5/arch/arm/mach-integrator/cpu.c 2003-09-08 12:50:04.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mach-integrator/cpu.c 2003-09-25 19:15:44.000000000 -0700 @@ -11,7 +11,6 @@ * * CPU support functions */ -#include #include #include #include diff -prauN linux-2.6.0-test5/arch/arm/mach-integrator/impd1.c wli-2.6.0-test5-bk12-25/arch/arm/mach-integrator/impd1.c --- linux-2.6.0-test5/arch/arm/mach-integrator/impd1.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mach-integrator/impd1.c 2003-09-25 19:15:44.000000000 -0700 @@ -10,7 +10,7 @@ * This file provides the core support for the IM-PD1 module. * * Module / boot parameters. - * id=n impd1.id=n - set the logic module position in stack to 'n' + * lmid=n impd1.lmid=n - set the logic module position in stack to 'n' */ #include #include @@ -21,17 +21,15 @@ #include #include #include +#include #include #include static int module_id; -module_param_named(lmid, module_id, int, 0); +module_param_named(lmid, module_id, int, 0444); MODULE_PARM_DESC(lmid, "logic module stack position"); -#define ROM_OFFSET 0x0fffff00 -#define ROM_SIZE 256 - struct impd1_module { void *base; }; @@ -142,17 +140,15 @@ static struct impd1_device impd1_devs[] } }; -static int impd1_probe(struct device *dev) +static int impd1_probe(struct lm_device *dev) { - struct platform_device *pdev = to_platform_device(dev); - struct resource *res = &pdev->resource[0]; struct impd1_module *impd1; int i, ret; - if (pdev->id != module_id) + if (dev->id != module_id) return -EINVAL; - if (!request_mem_region(res->start, SZ_4K, "LM registers")) + if (!request_mem_region(dev->resource.start, SZ_4K, "LM registers")) return -EBUSY; impd1 = kmalloc(sizeof(struct impd1_module), GFP_KERNEL); @@ -162,22 +158,22 @@ static int impd1_probe(struct device *de } memset(impd1, 0, sizeof(struct impd1_module)); - impd1->base = ioremap(res->start, SZ_4K); + impd1->base = ioremap(dev->resource.start, SZ_4K); if (!impd1->base) { ret = -ENOMEM; goto free_impd1; } - dev_set_drvdata(dev, impd1); + lm_set_drvdata(dev, impd1); - printk("IM-PD1 found at 0x%08lx\n", res->start); + printk("IM-PD1 found at 0x%08lx\n", dev->resource.start); for (i = 0; i < ARRAY_SIZE(impd1_devs); i++) { struct impd1_device *idev = impd1_devs + i; struct amba_device *d; unsigned long pc_base; - pc_base = res->start + idev->offset; + pc_base = dev->resource.start + idev->offset; d = kmalloc(sizeof(struct amba_device), GFP_KERNEL); if (!d) @@ -186,16 +182,16 @@ static int impd1_probe(struct device *de memset(d, 0, sizeof(struct amba_device)); snprintf(d->dev.bus_id, sizeof(d->dev.bus_id), - "lm%x:%5.5lx", pdev->id, idev->offset >> 12); + "lm%x:%5.5lx", dev->id, idev->offset >> 12); - d->dev.parent = &pdev->dev; - d->res.start = res->start + idev->offset; + d->dev.parent = &dev->dev; + d->res.start = dev->resource.start + idev->offset; d->res.end = d->res.start + SZ_4K - 1; d->res.flags = IORESOURCE_MEM; - d->irq = pdev->resource[1].start; + d->irq = dev->irq; d->periphid = idev->id; - ret = amba_device_register(d, res); + ret = amba_device_register(d, &dev->resource); if (ret) { printk("unable to register device %s: %d\n", d->dev.bus_id, ret); @@ -211,47 +207,44 @@ static int impd1_probe(struct device *de if (impd1) kfree(impd1); release_lm: - release_mem_region(res->start, SZ_4K); + release_mem_region(dev->resource.start, SZ_4K); return ret; } -static int impd1_remove(struct device *dev) +static void impd1_remove(struct lm_device *dev) { - struct platform_device *pdev = to_platform_device(dev); - struct resource *res = &pdev->resource[0]; - struct impd1_module *impd1 = dev_get_drvdata(dev); + struct impd1_module *impd1 = lm_get_drvdata(dev); struct list_head *l, *n; - list_for_each_safe(l, n, &dev->children) { + list_for_each_safe(l, n, &dev->dev.children) { struct device *d = list_to_dev(l); device_unregister(d); } - dev_set_drvdata(dev, NULL); + lm_set_drvdata(dev, NULL); iounmap(impd1->base); kfree(impd1); - release_mem_region(res->start, SZ_4K); - - return 0; + release_mem_region(dev->resource.start, SZ_4K); } -static struct device_driver impd1_driver = { - .name = "lm", - .bus = &platform_bus_type, +static struct lm_driver impd1_driver = { + .drv = { + .name = "impd1", + }, .probe = impd1_probe, .remove = impd1_remove, }; static int __init impd1_init(void) { - return driver_register(&impd1_driver); + return lm_driver_register(&impd1_driver); } static void __exit impd1_exit(void) { - driver_unregister(&impd1_driver); + lm_driver_unregister(&impd1_driver); } module_init(impd1_init); diff -prauN linux-2.6.0-test5/arch/arm/mach-integrator/lm.c wli-2.6.0-test5-bk12-25/arch/arm/mach-integrator/lm.c --- linux-2.6.0-test5/arch/arm/mach-integrator/lm.c 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/mach-integrator/lm.c 2003-09-25 19:15:44.000000000 -0700 @@ -0,0 +1,92 @@ +/* + * linux/arch/arm/mach-integrator/lm.c + * + * Copyright (C) 2003 Deep Blue Solutions Ltd, All Rights Reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ +#include +#include + +#include + +#define to_lm_device(d) container_of(d, struct lm_device, dev) +#define to_lm_driver(d) container_of(d, struct lm_driver, drv) + +static int lm_match(struct device *dev, struct device_driver *drv) +{ + return 1; +} + +static struct bus_type lm_bustype = { + .name = "logicmodule", + .match = lm_match, +// .suspend = lm_suspend, +// .resume = lm_resume, +}; + +static int __init lm_init(void) +{ + return bus_register(&lm_bustype); +} + +postcore_initcall(lm_init); + +static int lm_bus_probe(struct device *dev) +{ + struct lm_device *lmdev = to_lm_device(dev); + struct lm_driver *lmdrv = to_lm_driver(dev->driver); + + return lmdrv->probe(lmdev); +} + +static int lm_bus_remove(struct device *dev) +{ + struct lm_device *lmdev = to_lm_device(dev); + struct lm_driver *lmdrv = to_lm_driver(dev->driver); + + lmdrv->remove(lmdev); + return 0; +} + +int lm_driver_register(struct lm_driver *drv) +{ + drv->drv.bus = &lm_bustype; + drv->drv.probe = lm_bus_probe; + drv->drv.remove = lm_bus_remove; + + return driver_register(&drv->drv); +} + +void lm_driver_unregister(struct lm_driver *drv) +{ + driver_unregister(&drv->drv); +} + +static void lm_device_release(struct device *dev) +{ + struct lm_device *d = to_lm_device(dev); + + kfree(d); +} + +int lm_device_register(struct lm_device *dev) +{ + int ret; + + dev->dev.release = lm_device_release; + dev->dev.bus = &lm_bustype; + + snprintf(dev->dev.bus_id, sizeof(dev->dev.bus_id), "lm%d", dev->id); + dev->resource.name = dev->dev.bus_id; + + ret = request_resource(&iomem_resource, &dev->resource); + if (ret == 0) { + ret = device_register(&dev->dev); + if (ret) + release_resource(&dev->resource); + } + return ret; +} diff -prauN linux-2.6.0-test5/arch/arm/mach-iop3xx/mm-321.c wli-2.6.0-test5-bk12-25/arch/arm/mach-iop3xx/mm-321.c --- linux-2.6.0-test5/arch/arm/mach-iop3xx/mm-321.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mach-iop3xx/mm-321.c 2003-09-25 19:15:44.000000000 -0700 @@ -12,7 +12,7 @@ * option) any later version. * */ - +#include #include #include diff -prauN linux-2.6.0-test5/arch/arm/mach-l7200/core.c wli-2.6.0-test5-bk12-25/arch/arm/mach-l7200/core.c --- linux-2.6.0-test5/arch/arm/mach-l7200/core.c 2003-09-08 12:49:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mach-l7200/core.c 2003-09-25 19:15:44.000000000 -0700 @@ -5,7 +5,6 @@ * * Extra MM routines for L7200 architecture */ -#include #include #include diff -prauN linux-2.6.0-test5/arch/arm/mach-pxa/generic.c wli-2.6.0-test5-bk12-25/arch/arm/mach-pxa/generic.c --- linux-2.6.0-test5/arch/arm/mach-pxa/generic.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mach-pxa/generic.c 2003-09-25 19:15:45.000000000 -0700 @@ -16,7 +16,6 @@ * initialization stuff for PXA machines which can be overridden later if * need be. */ -#include #include #include #include diff -prauN linux-2.6.0-test5/arch/arm/mach-pxa/leds.c wli-2.6.0-test5-bk12-25/arch/arm/mach-pxa/leds.c --- linux-2.6.0-test5/arch/arm/mach-pxa/leds.c 2003-09-08 12:50:40.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mach-pxa/leds.c 2003-09-25 19:15:45.000000000 -0700 @@ -7,7 +7,6 @@ * * Copyright (c) 2001 Jeff Sutherland, Accelent Systems Inc. */ -#include #include #include diff -prauN linux-2.6.0-test5/arch/arm/mach-pxa/pm.c wli-2.6.0-test5-bk12-25/arch/arm/mach-pxa/pm.c --- linux-2.6.0-test5/arch/arm/mach-pxa/pm.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mach-pxa/pm.c 2003-09-25 19:15:45.000000000 -0700 @@ -10,7 +10,7 @@ * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License. */ - +#include #include #include diff -prauN linux-2.6.0-test5/arch/arm/mach-rpc/riscpc.c wli-2.6.0-test5-bk12-25/arch/arm/mach-rpc/riscpc.c --- linux-2.6.0-test5/arch/arm/mach-rpc/riscpc.c 2003-09-08 12:50:12.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mach-rpc/riscpc.c 2003-09-25 19:15:45.000000000 -0700 @@ -17,7 +17,6 @@ #include #include -#include #include #include #include diff -prauN linux-2.6.0-test5/arch/arm/mach-sa1100/h3600.c wli-2.6.0-test5-bk12-25/arch/arm/mach-sa1100/h3600.c --- linux-2.6.0-test5/arch/arm/mach-sa1100/h3600.c 2003-09-08 12:49:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mach-sa1100/h3600.c 2003-09-25 19:15:45.000000000 -0700 @@ -19,6 +19,7 @@ * and abstracted EGPIO interface. * */ +#include #include #include #include diff -prauN linux-2.6.0-test5/arch/arm/mach-sa1100/hackkit.c wli-2.6.0-test5-bk12-25/arch/arm/mach-sa1100/hackkit.c --- linux-2.6.0-test5/arch/arm/mach-sa1100/hackkit.c 2003-09-08 12:50:48.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mach-sa1100/hackkit.c 2003-09-25 19:15:45.000000000 -0700 @@ -11,8 +11,6 @@ * published by the Free Software Foundation. * */ - -#include #include #include #include diff -prauN linux-2.6.0-test5/arch/arm/mach-sa1100/pfs168.c wli-2.6.0-test5-bk12-25/arch/arm/mach-sa1100/pfs168.c --- linux-2.6.0-test5/arch/arm/mach-sa1100/pfs168.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mach-sa1100/pfs168.c 2003-09-25 19:15:45.000000000 -0700 @@ -1,7 +1,6 @@ /* * linux/arch/arm/mach-sa1100/pfs168.c */ -#include #include #include #include diff -prauN linux-2.6.0-test5/arch/arm/mach-sa1100/simpad.c wli-2.6.0-test5-bk12-25/arch/arm/mach-sa1100/simpad.c --- linux-2.6.0-test5/arch/arm/mach-sa1100/simpad.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mach-sa1100/simpad.c 2003-09-25 19:15:45.000000000 -0700 @@ -9,24 +9,37 @@ #include #include #include +#include +#include #include #include +#include #include #include #include +#include +#include + #include +#include +#include #include "generic.h" long cs3_shadow; -long get_cs3_shadow() +long get_cs3_shadow(void) { return cs3_shadow; } +void set_cs3(long value) +{ + *(CS3BUSTYPE *)(CS3_BASE) = cs3_shadow = value; +} + void set_cs3_bit(int value) { cs3_shadow |= value; @@ -39,10 +52,15 @@ void clear_cs3_bit(int value) *(CS3BUSTYPE *)(CS3_BASE) = cs3_shadow; } +EXPORT_SYMBOL(set_cs3_bit); +EXPORT_SYMBOL(clear_cs3_bit); + static struct map_desc simpad_io_desc[] __initdata = { - /* virtual physical length type */ - { 0xf2800000, 0x4b800000, 0x00800000, MT_DEVICE }, /* MQ200 */ - { 0xf1000000, 0x18000000, 0x00100000, MT_DEVICE } /* Paules CS3, write only */ + /* virtual physical length type */ + /* MQ200 */ + { 0xf2800000, 0x4b800000, 0x00800000, MT_DEVICE }, + /* Paules CS3, write only */ + { 0xf1000000, 0x18000000, 0x00100000, MT_DEVICE }, }; @@ -50,32 +68,52 @@ static void simpad_uart_pm(struct uart_p { if (port->mapbase == (u_int)&Ser1UTCR0) { if (state) + { clear_cs3_bit(RS232_ON); - else + clear_cs3_bit(DECT_POWER_ON); + }else + { set_cs3_bit(RS232_ON); + set_cs3_bit(DECT_POWER_ON); + } } } static struct sa1100_port_fns simpad_port_fns __initdata = { - .pm = simpad_uart_pm, + .pm = simpad_uart_pm, }; static void __init simpad_map_io(void) { sa1100_map_io(); + iotable_init(simpad_io_desc, ARRAY_SIZE(simpad_io_desc)); - PSPR = 0xc0008000; - GPDR &= ~GPIO_GPIO0; - cs3_shadow = (EN1 | EN0 | LED2_ON | DISPLAY_ON | RS232_ON | - ENABLE_5V | RESET_SIMCARD); - *(CS3BUSTYPE *)(CS3_BASE) = cs3_shadow; + set_cs3_bit (EN1 | EN0 | LED2_ON | DISPLAY_ON | RS232_ON | + ENABLE_5V | RESET_SIMCARD | DECT_POWER_ON); + + + sa1100_register_uart_fns(&simpad_port_fns); + sa1100_register_uart(0, 3); /* serial interface */ + sa1100_register_uart(1, 1); /* DECT */ + + // Reassign UART 1 pins + GAFR |= GPIO_UART_TXD | GPIO_UART_RXD; + GPDR |= GPIO_UART_TXD | GPIO_LDD13 | GPIO_LDD15; + GPDR &= ~GPIO_UART_RXD; + PPAR |= PPAR_UPR; + + /* + * Set up registers for sleep mode. + */ + + + PWER = PWER_GPIO0| PWER_RTC; + PGSR = 0x818; + PCFR = 0; + PSDR = 0; - //It is only possible to register 3 UART in serial_sa1100.c - sa1100_register_uart(0, 3); - sa1100_register_uart(1, 1); - set_irq_type(IRQ_GPIO_UCB1300_IRQ, IRQT_RISING); } #ifdef CONFIG_PROC_FS @@ -105,7 +143,7 @@ static int proc_cs3_read(char *page, cha char *p = page; int len, i; - p += sprintf(p, "Chipselect3 : %x\n", cs3_shadow); + p += sprintf(p, "Chipselect3 : %x\n", (uint)cs3_shadow); for (i = 0; i <= 15; i++) { if(cs3_shadow & (1<read_proc = proc_cs3_read; + proc_cs3->write_proc = (void*)proc_cs3_write; + } +#endif + + + return 0; } arch_initcall(cs3_init); -#endif // CONFIG_PROC_FS +static void simpad_power_off(void) +{ + local_irq_disable(); // was cli + set_cs3(0x800); /* only SD_MEDIAQ */ + + /* disable internal oscillator, float CS lines */ + PCFR = (PCFR_OPDE | PCFR_FP | PCFR_FS); + /* enable wake-up on GPIO0 (Assabet...) */ + PWER = GFER = GRER = 1; + /* + * set scratchpad to zero, just in case it is used as a + * restart address by the bootloader. + */ + PSPR = 0; + PGSR = 0; + /* enter sleep mode */ + PMCR = PMCR_SF; + while(1); + + local_irq_enable(); /* we won't ever call it */ + + +} + +static int __init simpad_init(void) +{ + set_power_off_handler( simpad_power_off ); + return 0; +} + +arch_initcall(simpad_init); + MACHINE_START(SIMPAD, "Simpad") MAINTAINER("Juergen Messerer") BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000) + BOOT_PARAMS(0xc0000100) MAPIO(simpad_map_io) INITIRQ(sa1100_init_irq) MACHINE_END diff -prauN linux-2.6.0-test5/arch/arm/mach-sa1100/stork.c wli-2.6.0-test5-bk12-25/arch/arm/mach-sa1100/stork.c --- linux-2.6.0-test5/arch/arm/mach-sa1100/stork.c 2003-09-08 12:50:17.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mach-sa1100/stork.c 2003-09-25 19:15:45.000000000 -0700 @@ -8,8 +8,6 @@ * published by the Free Software Foundation. * */ - -#include #include #include #include diff -prauN linux-2.6.0-test5/arch/arm/mach-sa1100/trizeps.c wli-2.6.0-test5-bk12-25/arch/arm/mach-sa1100/trizeps.c --- linux-2.6.0-test5/arch/arm/mach-sa1100/trizeps.c 2003-09-08 12:50:40.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mach-sa1100/trizeps.c 2003-09-25 19:15:45.000000000 -0700 @@ -12,7 +12,6 @@ * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ -#include #include #include #include diff -prauN linux-2.6.0-test5/arch/arm/mach-tbox/core.c wli-2.6.0-test5-bk12-25/arch/arm/mach-tbox/core.c --- linux-2.6.0-test5/arch/arm/mach-tbox/core.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mach-tbox/core.c 2003-09-25 19:15:45.000000000 -0700 @@ -16,7 +16,6 @@ #include #include #include -#include #include #include diff -prauN linux-2.6.0-test5/arch/arm/mm/Kconfig wli-2.6.0-test5-bk12-25/arch/arm/mm/Kconfig --- linux-2.6.0-test5/arch/arm/mm/Kconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/mm/Kconfig 2003-09-25 19:15:45.000000000 -0700 @@ -0,0 +1,344 @@ +comment "Processor Type" + +config CPU_32 + bool + default y + +# Select CPU types depending on the architecture selected. This selects +# which CPUs we support in the kernel image, and the compiler instruction +# optimiser behaviour. + +# ARM610 +config CPU_ARM610 + bool "Support ARM610 processor" + depends on ARCH_RPC + select CPU_32v3 + select CPU_CACHE_V3 + select CPU_COPY_V3 + select CPU_TLB_V3 + help + The ARM610 is the successor to the ARM3 processor + and was produced by VLSI Technology Inc. + + Say Y if you want support for the ARM610 processor. + Otherwise, say N. + +# ARM710 +config CPU_ARM710 + bool "Support ARM710 processor" if !ARCH_CLPS7500 && ARCH_RPC + default y if ARCH_CLPS7500 + select CPU_32v3 + select CPU_CACHE_V3 + select CPU_COPY_V3 + select CPU_TLB_V3 + help + A 32-bit RISC microprocessor based on the ARM7 processor core + designed by Advanced RISC Machines Ltd. The ARM710 is the + successor to the ARM610 processor. It was released in + July 1994 by VLSI Technology Inc. + + Say Y if you want support for the ARM710 processor. + Otherwise, say N. + +# ARM720T +config CPU_ARM720T + bool "Support ARM720T processor" if !ARCH_CLPS711X && !ARCH_L7200 && !ARCH_CDB89712 && ARCH_INTEGRATOR + default y if ARCH_CLPS711X || ARCH_L7200 || ARCH_CDB89712 + select CPU_32v4 + select CPU_ABRT_LV4T + select CPU_CACHE_V4 + select CPU_COPY_V4WT + select CPU_TLB_V4WT + help + A 32-bit RISC processor with 8kByte Cache, Write Buffer and + MMU built around an ARM7TDMI core. + + Say Y if you want support for the ARM720T processor. + Otherwise, say N. + +# ARM920T +config CPU_ARM920T + bool "Support ARM920T processor" + depends on ARCH_INTEGRATOR + select CPU_32v4 + select CPU_ABRT_EV4T + select CPU_CACHE_V4WT + select CPU_COPY_V4WB + select CPU_TLB_V4WBI + help + The ARM920T is licensed to be produced by numerous vendors, + and is used in the Maverick EP9312. More information at + . + + Say Y if you want support for the ARM920T processor. + Otherwise, say N. + +# ARM922T +config CPU_ARM922T + bool + depends on ARCH_CAMELOT + default y + select CPU_32v4 + select CPU_ABRT_EV4T + select CPU_CACHE_V4WT + select CPU_COPY_V4WB + select CPU_TLB_V4WBI + help + The ARM922T is a version of the ARM920T, but with smaller + instruction and data caches. It is used in Altera's + Excalibur XA device family. + + Say Y if you want support for the ARM922T processor. + Otherwise, say N. + +# ARM926T +config CPU_ARM926T + bool "Support ARM926T processor" + depends on ARCH_INTEGRATOR + select CPU_32v5 + select CPU_ABRT_EV5TJ + select CPU_COPY_V4WB + select CPU_TLB_V4WBI + help + This is a variant of the ARM920. It has slightly different + instruction sequences for cache and TLB operations. Curiously, + there is no documentation on it at the ARM corporate website. + + Say Y if you want support for the ARM926T processor. + Otherwise, say N. + +# ARM1020 - needs validating +config CPU_ARM1020 + bool "Support ARM1020T (rev 0) processor" + depends on ARCH_INTEGRATOR + select CPU_32v5 + select CPU_ABRT_EV4T + select CPU_CACHE_V4WT + select CPU_COPY_V4WB + select CPU_TLB_V4WBI + help + The ARM1020 is the 32K cached version of the ARM10 processor, + with an addition of a floating-point unit. + + Say Y if you want support for the ARM1020 processor. + Otherwise, say N. + +# ARM1020E - needs validating +config CPU_ARM1020E + bool "Support ARM1020E processor" + depends on ARCH_INTEGRATOR + select CPU_32v5 + select CPU_ABRT_EV4T + select CPU_CACHE_V4WT + select CPU_COPY_V4WB + select CPU_TLB_V4WBI + depends on n + +# ARM1022E +config CPU_ARM1022 + bool "Support ARM1022E processor" + depends on ARCH_INTEGRATOR + select CPU_32v5 + select CPU_ABRT_EV4T + select CPU_COPY_V4WB # can probably do better + select CPU_TLB_V4WBI + help + The ARM1022E is an implementation of the ARMv5TE architecture + based upon the ARM10 integer core with a 16KiB L1 Harvard cache, + embedded trace macrocell, and a floating-point unit. + + Say Y if you want support for the ARM1022E processor. + Otherwise, say N. + +# ARM1026EJ-S +config CPU_ARM1026 + bool "Support ARM1026EJ-S processor" + depends on ARCH_INTEGRATOR + select CPU_32v5 + select CPU_ABRT_EV5T # But need Jazelle, but EV5TJ ignores bit 10 + select CPU_COPY_V4WB # can probably do better + select CPU_TLB_V4WBI + help + The ARM1026EJ-S is an implementation of the ARMv5TEJ architecture + based upon the ARM10 integer core. + + Say Y if you want support for the ARM1026EJ-S processor. + Otherwise, say N. + +# SA110 +config CPU_SA110 + bool "Support StrongARM(R) SA-110 processor" if !ARCH_EBSA110 && !FOOTBRIDGE && !ARCH_TBOX && !ARCH_SHARK && !ARCH_NEXUSPCI && !ARCH_ANAKIN && ARCH_RPC + default y if ARCH_EBSA110 || FOOTBRIDGE || ARCH_TBOX || ARCH_SHARK || ARCH_NEXUSPCI || ARCH_ANAKIN + select CPU_32v3 if ARCH_RPC + select CPU_32v4 if !ARCH_RPC + select CPU_ABRT_EV4 + select CPU_CACHE_V4WB + select CPU_COPY_V4WB + select CPU_TLB_V4WB + help + The Intel StrongARM(R) SA-110 is a 32-bit microprocessor and + is available at five speeds ranging from 100 MHz to 233 MHz. + More information is available at + . + + Say Y if you want support for the SA-110 processor. + Otherwise, say N. + +# SA1100 +config CPU_SA1100 + bool + depends on ARCH_SA1100 + default y + select CPU_32v4 + select CPU_ABRT_EV4 + select CPU_CACHE_V4WB + select CPU_TLB_V4WB + select CPU_MINICACHE + +# XScale +config CPU_XSCALE + bool + depends on ARCH_IOP3XX || ARCH_ADIFCC || ARCH_PXA + default y + select CPU_32v5 + select CPU_ABRT_EV5T + select CPU_TLB_V4WBI + select CPU_MINICACHE + +# This defines the compiler instruction set which depends on the machine type. +config CPU_32v3 + bool + +config CPU_32v4 + bool + +config CPU_32v5 + bool + +# The abort model +config CPU_ABRT_EV4 + bool + +config CPU_ABRT_EV4T + bool + +config CPU_ABRT_LV4T + bool + +config CPU_ABRT_EV5T + bool + +config CPU_ABRT_EV5TJ + bool + +# The cache model +config CPU_CACHE_V3 + bool + +config CPU_CACHE_V4 + bool + +config CPU_CACHE_V4WT + bool + +config CPU_CACHE_V4WB + bool + +# The copy-page model +config CPU_COPY_V3 + bool + +config CPU_COPY_V4WT + bool + +config CPU_COPY_V4WB + bool + +# This selects the TLB model +config CPU_TLB_V3 + bool + help + ARM Architecture Version 3 TLB. + +config CPU_TLB_V4WT + bool + help + ARM Architecture Version 4 TLB with writethrough cache. + +config CPU_TLB_V4WB + bool + help + ARM Architecture Version 4 TLB with writeback cache. + +config CPU_TLB_V4WBI + bool + help + ARM Architecture Version 4 TLB with writeback cache and invalidate + instruction cache entry. + +config CPU_TLB_V6 + bool + +config CPU_MINICACHE + bool + help + Processor has a minicache. + +comment "Processor Features" + +config ARM_THUMB + bool "Support Thumb user binaries" + depends on CPU_ARM720T || CPU_ARM920T || CPU_ARM922T || CPU_ARM926T || CPU_ARM1020 || CPU_ARM1020E || CPU_ARM1022 || CPU_ARM1026 || CPU_XSCALE + default y + help + Say Y if you want to have kernel support for ARM Thumb instructions, + fault handlers, and system calls. + + The Thumb instruction set is a compressed form of the standard ARM + instruction set resulting in smaller binaries at the expense of + slightly less efficient code. + + If you don't know what this all is, saying Y is a safe choice. + +config CPU_BIG_ENDIAN + bool "Build big-endian kernel" + depends on ARCH_SUPPORTS_BIG_ENDIAN + help + Say Y if you plan on running a kernel in big-endian mode. + Note that your board must be properly built and your board + port must properly enable and big-endian related features + of your chipset/board/processor. + +config CPU_ICACHE_DISABLE + bool "Disable I-Cache" + depends on CPU_ARM920T || CPU_ARM922T || CPU_ARM926T || CPU_ARM1020 + help + Say Y here to disable the processor instruction cache. Unless + you have a reason not to or are unsure, say N. + +config CPU_DCACHE_DISABLE + bool "Disable D-Cache" + depends on CPU_ARM920T || CPU_ARM922T || CPU_ARM926T || CPU_ARM1020 + help + Say Y here to disable the processor data cache. Unless + you have a reason not to or are unsure, say N. + +config CPU_DCACHE_WRITETHROUGH + bool "Force write through D-cache" + depends on (CPU_ARM920T || CPU_ARM922T || CPU_ARM926T || CPU_ARM1020) && !CPU_DISABLE_DCACHE + help + Say Y here to use the data cache in writethough mode. Unless you + specifically require this or are unsure, say N. + +config CPU_CACHE_ROUND_ROBIN + bool "Round robin I and D cache replacement algorithm" + depends on (CPU_ARM926T || CPU_ARM1020) && (!CPU_ICACHE_DISABLE || !CPU_DCACHE_DISABLE) + help + Say Y here to use the predictable round-robin cache replacement + policy. Unless you specifically require this or are unsure, say N. + +config CPU_BPREDICT_DISABLE + bool "Disable branch prediction" + depends on CPU_ARM1020 + help + Say Y here to disable branch prediction. If unsure, say N. diff -prauN linux-2.6.0-test5/arch/arm/mm/Makefile wli-2.6.0-test5-bk12-25/arch/arm/mm/Makefile --- linux-2.6.0-test5/arch/arm/mm/Makefile 2003-09-08 12:50:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mm/Makefile 2003-09-25 19:15:45.000000000 -0700 @@ -2,29 +2,48 @@ # Makefile for the linux arm-specific parts of the memory manager. # -# Object file lists. +obj-y := consistent.o extable.o fault-armv.o \ + fault-common.o init.o ioremap.o mm-armv.o -obj-y := consistent.o extable.o fault-armv.o fault-common.o \ - init.o ioremap.o mm-armv.o -obj-$(CONFIG_MODULES) += proc-syms.o - -obj-$(CONFIG_ALIGNMENT_TRAP) += alignment.o -obj-$(CONFIG_DISCONTIGMEM) += discontig.o - -# ARMv3 -p-$(CONFIG_CPU_ARM610) += proc-arm6_7.o tlb-v3.o cache-v3.o copypage-v3.o -p-$(CONFIG_CPU_ARM710) += proc-arm6_7.o tlb-v3.o cache-v3.o copypage-v3.o - -# ARMv4 -p-$(CONFIG_CPU_ARM720T) += proc-arm720.o tlb-v4.o cache-v4.o copypage-v4wt.o abort-lv4t.o -p-$(CONFIG_CPU_ARM920T) += proc-arm920.o tlb-v4wbi.o cache-v4wt.o copypage-v4wb.o abort-ev4t.o -p-$(CONFIG_CPU_ARM922T) += proc-arm922.o tlb-v4wbi.o cache-v4wt.o copypage-v4wb.o abort-ev4t.o -p-$(CONFIG_CPU_ARM1020) += proc-arm1020.o tlb-v4wbi.o cache-v4wt.o copypage-v4wb.o abort-ev4t.o -p-$(CONFIG_CPU_SA110) += proc-sa110.o tlb-v4wb.o cache-v4wb.o copypage-v4wb.o abort-ev4.o -p-$(CONFIG_CPU_SA1100) += proc-sa1100.o tlb-v4wb.o cache-v4wb.o copypage-v4mc.o abort-ev4.o minicache.o - -# ARMv5 -p-$(CONFIG_CPU_ARM926T) += proc-arm926.o tlb-v4wbi.o copypage-v4wb.o abort-ev5tej.o -p-$(CONFIG_CPU_XSCALE) += proc-xscale.o tlb-v4wbi.o copypage-xscale.o abort-xscale.o minicache.o +obj-$(CONFIG_MODULES) += proc-syms.o -obj-y += $(sort $(p-y)) +obj-$(CONFIG_ALIGNMENT_TRAP) += alignment.o +obj-$(CONFIG_DISCONTIGMEM) += discontig.o + +obj-$(CONFIG_CPU_ABRT_EV4) += abort-ev4.o +obj-$(CONFIG_CPU_ABRT_EV4T) += abort-ev4t.o +obj-$(CONFIG_CPU_ABRT_LV4T) += abort-lv4t.o +obj-$(CONFIG_CPU_ABRT_EV5T) += abort-ev5t.o +obj-$(CONFIG_CPU_ABRT_EV5TJ) += abort-ev5tj.o + +obj-$(CONFIG_CPU_CACHE_V3) += cache-v3.o +obj-$(CONFIG_CPU_CACHE_V4) += cache-v4.o +obj-$(CONFIG_CPU_CACHE_V4WT) += cache-v4wt.o +obj-$(CONFIG_CPU_CACHE_V4WB) += cache-v4wb.o + +obj-$(CONFIG_CPU_COPY_V3) += copypage-v3.o +obj-$(CONFIG_CPU_COPY_V4WT) += copypage-v4wt.o +obj-$(CONFIG_CPU_COPY_V4WB) += copypage-v4wb.o +obj-$(CONFIG_CPU_SA1100) += copypage-v4mc.o +obj-$(CONFIG_CPU_XSCALE) += copypage-xscale.o + +obj-$(CONFIG_CPU_MINICACHE) += minicache.o + +obj-$(CONFIG_CPU_TLB_V3) += tlb-v3.o +obj-$(CONFIG_CPU_TLB_V4WT) += tlb-v4.o +obj-$(CONFIG_CPU_TLB_V4WB) += tlb-v4wb.o +obj-$(CONFIG_CPU_TLB_V4WBI) += tlb-v4wbi.o + +obj-$(CONFIG_CPU_ARM610) += proc-arm6_7.o +obj-$(CONFIG_CPU_ARM710) += proc-arm6_7.o +obj-$(CONFIG_CPU_ARM720T) += proc-arm720.o +obj-$(CONFIG_CPU_ARM920T) += proc-arm920.o +obj-$(CONFIG_CPU_ARM922T) += proc-arm922.o +obj-$(CONFIG_CPU_ARM926T) += proc-arm926.o +obj-$(CONFIG_CPU_ARM1020) += proc-arm1020.o +obj-$(CONFIG_CPU_ARM1020E) += proc-arm1020e.o +obj-$(CONFIG_CPU_ARM1022) += proc-arm1022.o +obj-$(CONFIG_CPU_ARM1026) += proc-arm1026.o +obj-$(CONFIG_CPU_SA110) += proc-sa110.o +obj-$(CONFIG_CPU_SA1100) += proc-sa1100.o +obj-$(CONFIG_CPU_XSCALE) += proc-xscale.o diff -prauN linux-2.6.0-test5/arch/arm/mm/abort-ev5t.S wli-2.6.0-test5-bk12-25/arch/arm/mm/abort-ev5t.S --- linux-2.6.0-test5/arch/arm/mm/abort-ev5t.S 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/mm/abort-ev5t.S 2003-09-25 19:15:45.000000000 -0700 @@ -0,0 +1,31 @@ +#include +#include +/* + * Function: v5t_early_abort + * + * Params : r2 = address of aborted instruction + * : r3 = saved SPSR + * + * Returns : r0 = address of abort + * : r1 = FSR, bit 11 = write + * : r2-r8 = corrupted + * : r9 = preserved + * : sp = pointer to registers + * + * Purpose : obtain information about current aborted instruction. + * Note: we read user space. This means we might cause a data + * abort here if the I-TLB and D-TLB aren't seeing the same + * picture. Unfortunately, this does happen. We live with it. + */ + .align 5 +ENTRY(v5t_early_abort) + mrc p15, 0, r1, c5, c0, 0 @ get FSR + mrc p15, 0, r0, c6, c0, 0 @ get FAR + tst r3, #PSR_T_BIT + ldrneh r3, [r2] @ read aborted thumb instruction + ldreq r3, [r2] @ read aborted ARM instruction + bic r1, r1, #1 << 11 @ clear bits 11 of FSR + movne r3, r3, lsl #(21 - 12) @ move thumb bit 11 to ARM bit 20 + tst r3, #1 << 20 @ check write + orreq r1, r1, #1 << 11 + mov pc, lr diff -prauN linux-2.6.0-test5/arch/arm/mm/abort-ev5tej.S wli-2.6.0-test5-bk12-25/arch/arm/mm/abort-ev5tej.S --- linux-2.6.0-test5/arch/arm/mm/abort-ev5tej.S 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mm/abort-ev5tej.S 1969-12-31 16:00:00.000000000 -0800 @@ -1,36 +0,0 @@ -#include -#include -/* - * Function: v5tej_early_abort - * - * Params : r2 = address of aborted instruction - * : r3 = saved SPSR - * - * Returns : r0 = address of abort - * : r1 = FSR, bit 11 = write - * : r2-r8 = corrupted - * : r9 = preserved - * : sp = pointer to registers - * - * Purpose : obtain information about current aborted instruction. - * Note: we read user space. This means we might cause a data - * abort here if the I-TLB and D-TLB aren't seeing the same - * picture. Unfortunately, this does happen. We live with it. - */ - .align 5 -ENTRY(v5tej_early_abort) - mrc p15, 0, r1, c5, c0, 0 @ get FSR - mrc p15, 0, r0, c6, c0, 0 @ get FAR - bic r1, r1, #1 << 11 | 1 << 10 @ clear bits 11 and 10 of FSR - tst r3, #PSR_J_BIT - orrne r1, r1, #1 << 11 @ always assume write - bne 1f - tst r3, #PSR_T_BIT - ldrneh r3, [r2] @ read aborted thumb instruction - ldreq r3, [r2] @ read aborted ARM instruction - movne r3, r3, lsl #(21 - 12) @ move thumb bit 11 to ARM bit 20 - tst r3, #1 << 20 @ L = 1 -> write - orreq r1, r1, #1 << 11 @ yes. -1: mov pc, lr - - diff -prauN linux-2.6.0-test5/arch/arm/mm/abort-ev5tj.S wli-2.6.0-test5-bk12-25/arch/arm/mm/abort-ev5tj.S --- linux-2.6.0-test5/arch/arm/mm/abort-ev5tj.S 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/mm/abort-ev5tj.S 2003-09-25 19:15:45.000000000 -0700 @@ -0,0 +1,36 @@ +#include +#include +/* + * Function: v5tj_early_abort + * + * Params : r2 = address of aborted instruction + * : r3 = saved SPSR + * + * Returns : r0 = address of abort + * : r1 = FSR, bit 11 = write + * : r2-r8 = corrupted + * : r9 = preserved + * : sp = pointer to registers + * + * Purpose : obtain information about current aborted instruction. + * Note: we read user space. This means we might cause a data + * abort here if the I-TLB and D-TLB aren't seeing the same + * picture. Unfortunately, this does happen. We live with it. + */ + .align 5 +ENTRY(v5tj_early_abort) + mrc p15, 0, r1, c5, c0, 0 @ get FSR + mrc p15, 0, r0, c6, c0, 0 @ get FAR + bic r1, r1, #1 << 11 | 1 << 10 @ clear bits 11 and 10 of FSR + tst r3, #PSR_J_BIT @ Java? + orrne r1, r1, #1 << 11 @ always assume write + movne pc, lr + tst r3, #PSR_T_BIT @ Thumb? + ldrneh r3, [r2] @ read aborted thumb instruction + ldreq r3, [r2] @ read aborted ARM instruction + movne r3, r3, lsl #(21 - 12) @ move thumb bit 11 to ARM bit 20 + tst r3, #1 << 20 @ L = 0 -> write + orreq r1, r1, #1 << 11 @ yes. + mov pc, lr + + diff -prauN linux-2.6.0-test5/arch/arm/mm/abort-xscale.S wli-2.6.0-test5-bk12-25/arch/arm/mm/abort-xscale.S --- linux-2.6.0-test5/arch/arm/mm/abort-xscale.S 2003-09-08 12:50:39.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mm/abort-xscale.S 1969-12-31 16:00:00.000000000 -0800 @@ -1,34 +0,0 @@ -#include -#include -/* - * Function: xscale_abort - * - * Params : r2 = address of aborted instruction - * : r3 = saved SPSR - * - * Returns : r0 = address of abort - * : r1 = FSR, bit 11 = write - * : r2-r8 = corrupted - * : r9 = preserved - * : sp = pointer to registers - * - * Purpose : obtain information about current aborted instruction. - * Note: we read user space. This means we might cause a data - * abort here if the I-TLB and D-TLB aren't seeing the same - * picture. Unfortunately, this does happen. We live with it. - * - * Note: Xscale is contains non-standard architecture extensions. - * It requires its own early abort handler - */ - .align 5 -ENTRY(xscale_abort) - mrc p15, 0, r1, c5, c0, 0 @ get FSR - mrc p15, 0, r0, c6, c0, 0 @ get FAR - tst r3, #PSR_T_BIT - ldrneh r3, [r2] @ read aborted thumb instruction - ldreq r3, [r2] @ read aborted ARM instruction - bic r1, r1, #1 << 11 @ clear bits 11 of FSR - movne r3, r3, lsl #(21 - 12) @ move thumb bit 11 to ARM bit 20 - tst r3, #1 << 20 @ check write - orreq r1, r1, #1 << 11 - mov pc, lr diff -prauN linux-2.6.0-test5/arch/arm/mm/cache-v3.S wli-2.6.0-test5-bk12-25/arch/arm/mm/cache-v3.S --- linux-2.6.0-test5/arch/arm/mm/cache-v3.S 2003-09-08 12:50:19.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mm/cache-v3.S 2003-09-25 19:15:45.000000000 -0700 @@ -8,6 +8,7 @@ * published by the Free Software Foundation. */ #include +#include #include #include #include "proc-macros.S" @@ -107,6 +108,9 @@ ENTRY(v3_dma_flush_range) ENTRY(v3_dma_clean_range) mov pc, lr + __INITDATA + + .type v3_cache_fns, #object ENTRY(v3_cache_fns) .long v3_flush_kern_cache_all .long v3_flush_user_cache_all @@ -116,3 +120,4 @@ ENTRY(v3_cache_fns) .long v3_dma_inv_range .long v3_dma_clean_range .long v3_dma_flush_range + .size v3_cache_fns, . - v3_cache_fns diff -prauN linux-2.6.0-test5/arch/arm/mm/cache-v4.S wli-2.6.0-test5-bk12-25/arch/arm/mm/cache-v4.S --- linux-2.6.0-test5/arch/arm/mm/cache-v4.S 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mm/cache-v4.S 2003-09-25 19:15:45.000000000 -0700 @@ -8,6 +8,7 @@ * published by the Free Software Foundation. */ #include +#include #include #include #include "proc-macros.S" @@ -109,6 +110,9 @@ ENTRY(v4_dma_flush_range) ENTRY(v4_dma_clean_range) mov pc, lr + __INITDATA + + .type v4_cache_fns, #object ENTRY(v4_cache_fns) .long v4_flush_kern_cache_all .long v4_flush_user_cache_all @@ -118,3 +122,4 @@ ENTRY(v4_cache_fns) .long v4_dma_inv_range .long v4_dma_clean_range .long v4_dma_flush_range + .size v4_cache_fns, . - v4_cache_fns diff -prauN linux-2.6.0-test5/arch/arm/mm/cache-v4wb.S wli-2.6.0-test5-bk12-25/arch/arm/mm/cache-v4wb.S --- linux-2.6.0-test5/arch/arm/mm/cache-v4wb.S 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mm/cache-v4wb.S 2003-09-25 19:15:45.000000000 -0700 @@ -7,7 +7,9 @@ * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ +#include #include +#include #include #include #include "proc-macros.S" @@ -185,6 +187,9 @@ ENTRY(v4wb_dma_clean_range) .globl v4wb_dma_flush_range .set v4wb_dma_flush_range, v4wb_coherent_kern_range + __INITDATA + + .type v4wb_cache_fns, #object ENTRY(v4wb_cache_fns) .long v4wb_flush_kern_cache_all .long v4wb_flush_user_cache_all @@ -194,3 +199,4 @@ ENTRY(v4wb_cache_fns) .long v4wb_dma_inv_range .long v4wb_dma_clean_range .long v4wb_dma_flush_range + .size v4wb_cache_fns, . - v4wb_cache_fns diff -prauN linux-2.6.0-test5/arch/arm/mm/cache-v4wt.S wli-2.6.0-test5-bk12-25/arch/arm/mm/cache-v4wt.S --- linux-2.6.0-test5/arch/arm/mm/cache-v4wt.S 2003-09-08 12:49:55.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mm/cache-v4wt.S 2003-09-25 19:15:45.000000000 -0700 @@ -12,6 +12,7 @@ * We assume that the write buffer is not enabled. */ #include +#include #include #include #include "proc-macros.S" @@ -158,6 +159,9 @@ ENTRY(v4wt_dma_clean_range) .globl v4wt_dma_flush_range .equ v4wt_dma_flush_range, v4wt_dma_inv_range + __INITDATA + + .type v4wt_cache_fns, #object ENTRY(v4wt_cache_fns) .long v4wt_flush_kern_cache_all .long v4wt_flush_user_cache_all @@ -167,4 +171,4 @@ ENTRY(v4wt_cache_fns) .long v4wt_dma_inv_range .long v4wt_dma_clean_range .long v4wt_dma_flush_range - + .size v4wt_cache_fns, . - v4wt_cache_fns diff -prauN linux-2.6.0-test5/arch/arm/mm/consistent.c wli-2.6.0-test5-bk12-25/arch/arm/mm/consistent.c --- linux-2.6.0-test5/arch/arm/mm/consistent.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mm/consistent.c 2003-09-25 20:03:30.000000000 -0700 @@ -9,7 +9,6 @@ * * DMA uncached mapping support. */ -#include #include #include #include @@ -325,7 +324,7 @@ static int __init consistent_init(void) do { pgd = pgd_offset(&init_mm, CONSISTENT_BASE); - pmd = pmd_alloc(&init_mm, pgd, CONSISTENT_BASE); + pmd = pmd_alloc_kernel(&init_mm, pgd, CONSISTENT_BASE); if (!pmd) { printk(KERN_ERR "consistent_init: out of pmd tables\n"); return -ENOMEM; diff -prauN linux-2.6.0-test5/arch/arm/mm/copypage-v3.S wli-2.6.0-test5-bk12-25/arch/arm/mm/copypage-v3.S --- linux-2.6.0-test5/arch/arm/mm/copypage-v3.S 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mm/copypage-v3.S 2003-09-25 19:15:45.000000000 -0700 @@ -58,8 +58,10 @@ ENTRY(v3_clear_user_page) bne 1b @ 1 ldr pc, [sp], #4 - __INIT + __INITDATA + .type v3_user_fns, #object ENTRY(v3_user_fns) .long v3_clear_user_page .long v3_copy_user_page + .size v3_user_fns, . - v3_user_fns diff -prauN linux-2.6.0-test5/arch/arm/mm/copypage-v4mc.S wli-2.6.0-test5-bk12-25/arch/arm/mm/copypage-v4mc.S --- linux-2.6.0-test5/arch/arm/mm/copypage-v4mc.S 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mm/copypage-v4mc.S 2003-09-25 19:15:45.000000000 -0700 @@ -71,9 +71,10 @@ ENTRY(v4_mc_clear_user_page) bne 1b @ 1 ldr pc, [sp], #4 - __INIT + __INITDATA + .type v4_mc_user_fns, #object ENTRY(v4_mc_user_fns) .long v4_mc_clear_user_page .long v4_mc_copy_user_page - + .size v4_mc_user_fns, . - v4_mc_user_fns diff -prauN linux-2.6.0-test5/arch/arm/mm/copypage-v4wb.S wli-2.6.0-test5-bk12-25/arch/arm/mm/copypage-v4wb.S --- linux-2.6.0-test5/arch/arm/mm/copypage-v4wb.S 2003-09-08 12:50:14.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mm/copypage-v4wb.S 2003-09-25 19:15:45.000000000 -0700 @@ -70,9 +70,10 @@ ENTRY(v4wb_clear_user_page) mcr p15, 0, r1, c7, c10, 4 @ 1 drain WB ldr pc, [sp], #4 - __INIT + __INITDATA + .type v4wb_user_fns, #object ENTRY(v4wb_user_fns) .long v4wb_clear_user_page .long v4wb_copy_user_page - + .size v4wb_user_fns, . - v4wb_user_fns diff -prauN linux-2.6.0-test5/arch/arm/mm/copypage-v4wt.S wli-2.6.0-test5-bk12-25/arch/arm/mm/copypage-v4wt.S --- linux-2.6.0-test5/arch/arm/mm/copypage-v4wt.S 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mm/copypage-v4wt.S 2003-09-25 19:15:45.000000000 -0700 @@ -64,9 +64,10 @@ ENTRY(v4wt_clear_user_page) mcr p15, 0, r2, c7, c7, 0 @ flush ID cache ldr pc, [sp], #4 - __INIT + __INITDATA + .type v4wt_user_fns, #object ENTRY(v4wt_user_fns) .long v4wt_clear_user_page .long v4wt_copy_user_page - + .size v4wt_user_fns, . - v4wt_user_fns diff -prauN linux-2.6.0-test5/arch/arm/mm/copypage-xscale.S wli-2.6.0-test5-bk12-25/arch/arm/mm/copypage-xscale.S --- linux-2.6.0-test5/arch/arm/mm/copypage-xscale.S 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mm/copypage-xscale.S 2003-09-25 19:15:45.000000000 -0700 @@ -104,8 +104,10 @@ ENTRY(xscale_mc_clear_user_page) bne 1b mov pc, lr - __INIT + __INITDATA + .type xscale_mc_user_fns, #object ENTRY(xscale_mc_user_fns) .long xscale_mc_clear_user_page .long xscale_mc_copy_user_page + .size xscale_mc_user_fns, . - xscale_mc_user_fns diff -prauN linux-2.6.0-test5/arch/arm/mm/fault-armv.c wli-2.6.0-test5-bk12-25/arch/arm/mm/fault-armv.c --- linux-2.6.0-test5/arch/arm/mm/fault-armv.c 2003-09-08 12:49:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mm/fault-armv.c 2003-09-28 23:04:07.000000000 -0700 @@ -14,9 +14,11 @@ #include #include #include +#include #include #include +#include #include #include #include @@ -127,6 +129,8 @@ do_PrefetchAbort(unsigned long addr, str do_translation_fault(addr, 0, regs); } +static unsigned long shared_pte_mask = L_PTE_CACHEABLE; + /* * We take the easy way out of this problem - we make the * PTE uncacheable. However, we leave the write buffer on. @@ -157,9 +161,9 @@ static int adjust_pte(struct vm_area_str * If this page isn't present, or is already setup to * fault (ie, is old), we can safely ignore any issues. */ - if (pte_present(entry) && pte_val(entry) & L_PTE_CACHEABLE) { + if (pte_present(entry) && pte_val(entry) & shared_pte_mask) { flush_cache_page(vma, address); - pte_val(entry) &= ~L_PTE_CACHEABLE; + pte_val(entry) &= ~shared_pte_mask; set_pte(pte, entry); flush_tlb_page(vma, address); ret = 1; @@ -187,19 +191,22 @@ void __flush_dcache_page(struct page *pa __cpuc_flush_dcache_page(page_address(page)); - if (!page->mapping) + if (!page_mapping(page)) return; /* * With a VIVT cache, we need to also write back * and invalidate any user data. */ - list_for_each(l, &page->mapping->i_mmap_shared) { + list_for_each_rcu(l, &page_mapping(page)->i_mmap_shared) { struct vm_area_struct *mpnt; unsigned long off; mpnt = list_entry(l, struct vm_area_struct, shared); + if (mpnt->vm_flags & VM_DEAD) + continue; + /* * If this VMA is not in our MM, we can ignore it. */ @@ -230,12 +237,15 @@ make_coherent(struct vm_area_struct *vma * space, then we need to handle them specially to maintain * cache coherency. */ - list_for_each(l, &page->mapping->i_mmap_shared) { + list_for_each_rcu(l, &page_mapping(page)->i_mmap_shared) { struct vm_area_struct *mpnt; unsigned long off; mpnt = list_entry(l, struct vm_area_struct, shared); + if (mpnt->vm_flags & VM_DEAD) + continue; + /* * If this VMA is not in our MM, we can ignore it. * Note that we intentionally don't mask out the VMA @@ -288,7 +298,7 @@ void update_mmu_cache(struct vm_area_str if (!pfn_valid(pfn)) return; page = pfn_to_page(pfn); - if (page->mapping) { + if (page_mapping(page)) { int dirty = test_and_clear_bit(PG_dcache_dirty, &page->flags); if (dirty) @@ -297,3 +307,65 @@ void update_mmu_cache(struct vm_area_str make_coherent(vma, addr, page, dirty); } } + +/* + * Check whether the write buffer has physical address aliasing + * issues. If it has, we need to avoid them for the case where + * we have several shared mappings of the same object in user + * space. + */ +static int __init check_writebuffer(unsigned long *p1, unsigned long *p2) +{ + register unsigned long zero = 0, one = 1, val; + + local_irq_disable(); + mb(); + *p1 = one; + mb(); + *p2 = zero; + mb(); + val = *p1; + mb(); + local_irq_enable(); + return val != zero; +} + +void __init check_writebuffer_bugs(void) +{ + struct page *page; + const char *reason; + unsigned long v = 1; + + printk(KERN_INFO "CPU: Testing write buffer coherency: "); + + page = alloc_page(GFP_KERNEL); + if (page) { + unsigned long *p1, *p2; + pgprot_t prot = __pgprot(L_PTE_PRESENT|L_PTE_YOUNG| + L_PTE_DIRTY|L_PTE_WRITE| + L_PTE_BUFFERABLE); + + p1 = vmap(&page, 1, VM_IOREMAP, prot); + p2 = vmap(&page, 1, VM_IOREMAP, prot); + + if (p1 && p2) { + v = check_writebuffer(p1, p2); + reason = "enabling work-around"; + } else { + reason = "unable to map memory\n"; + } + + vunmap(p1); + vunmap(p2); + put_page(page); + } else { + reason = "unable to grab page\n"; + } + + if (v) { + printk("failed, %s\n", reason); + shared_pte_mask |= L_PTE_BUFFERABLE; + } else { + printk("ok\n"); + } +} diff -prauN linux-2.6.0-test5/arch/arm/mm/ioremap.c wli-2.6.0-test5-bk12-25/arch/arm/mm/ioremap.c --- linux-2.6.0-test5/arch/arm/mm/ioremap.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mm/ioremap.c 2003-09-25 20:03:30.000000000 -0700 @@ -95,7 +95,7 @@ static int remap_area_pages(unsigned lon spin_lock(&init_mm.page_table_lock); do { pmd_t *pmd; - pmd = pmd_alloc(&init_mm, dir, address); + pmd = pmd_alloc_kernel(&init_mm, dir, address); error = -ENOMEM; if (!pmd) break; diff -prauN linux-2.6.0-test5/arch/arm/mm/minicache.c wli-2.6.0-test5-bk12-25/arch/arm/mm/minicache.c --- linux-2.6.0-test5/arch/arm/mm/minicache.c 2003-09-08 12:50:17.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mm/minicache.c 2003-09-25 20:03:30.000000000 -0700 @@ -57,7 +57,7 @@ static int __init minicache_init(void) pmd_t *pmd; pgd = pgd_offset_k(minicache_address); - pmd = pmd_alloc(&init_mm, pgd, minicache_address); + pmd = pmd_alloc_kernel(&init_mm, pgd, minicache_address); if (!pmd) BUG(); minicache_pte = pte_alloc_kernel(&init_mm, pmd, minicache_address); diff -prauN linux-2.6.0-test5/arch/arm/mm/mm-armv.c wli-2.6.0-test5-bk12-25/arch/arm/mm/mm-armv.c --- linux-2.6.0-test5/arch/arm/mm/mm-armv.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mm/mm-armv.c 2003-09-25 20:03:30.000000000 -0700 @@ -9,6 +9,7 @@ * * Page table sludge for ARM v3 and v4 processor architectures. */ +#include #include #include #include @@ -131,7 +132,7 @@ pgd_t *get_pgd_slow(struct mm_struct *mm if (vectors_base() == 0) { /* - * This lock is here just to satisfy pmd_alloc and pte_lock + * This lock is here just to satisfy pmd_alloc_map() and pte_lock */ spin_lock(&mm->page_table_lock); @@ -139,20 +140,22 @@ pgd_t *get_pgd_slow(struct mm_struct *mm * On ARM, first page must always be allocated since it * contains the machine vectors. */ - new_pmd = pmd_alloc(mm, new_pgd, 0); + new_pmd = pmd_alloc_map(mm, new_pgd, 0); if (!new_pmd) goto no_pmd; - new_pte = pte_alloc_map(mm, new_pmd, 0); - if (!new_pte) + new_pte = pte_alloc_map(mm, new_pgd, &new_pmd, 0); + if (!new_pte) { + pmd_unmap(new_pmd); goto no_pte; + } init_pmd = pmd_offset(init_pgd, 0); init_pte = pte_offset_map_nested(init_pmd, 0); set_pte(new_pte, *init_pte); pte_unmap_nested(init_pte); pte_unmap(new_pte); - + pmd_unmap(new_pmd); spin_unlock(&mm->page_table_lock); } @@ -392,12 +395,19 @@ static void __init create_mapping(struct long off; if (md->virtual != vectors_base() && md->virtual < PAGE_OFFSET) { - printk(KERN_WARNING "MM: not creating mapping for " + printk(KERN_WARNING "BUG: not creating mapping for " "0x%08lx at 0x%08lx in user region\n", md->physical, md->virtual); return; } + if (md->type == MT_DEVICE && + md->virtual >= PAGE_OFFSET && md->virtual < VMALLOC_END) { + printk(KERN_WARNING "BUG: mapping for 0x%08lx at 0x%08lx " + "overlaps vmalloc space\n", + md->physical, md->virtual); + } + domain = mem_types[md->type].domain; prot_pte = __pgprot(mem_types[md->type].prot_pte); prot_l1 = mem_types[md->type].prot_l1 | PMD_DOMAIN(domain); @@ -409,7 +419,7 @@ static void __init create_mapping(struct if (mem_types[md->type].prot_l1 == 0 && (virt & 0xfffff || (virt + off) & 0xfffff || (virt + length) & 0xfffff)) { - printk(KERN_WARNING "MM: map for 0x%08lx at 0x%08lx can not " + printk(KERN_WARNING "BUG: map for 0x%08lx at 0x%08lx can not " "be mapped using pages, ignoring.\n", md->physical, md->virtual); return; diff -prauN linux-2.6.0-test5/arch/arm/mm/proc-arm1020.S wli-2.6.0-test5-bk12-25/arch/arm/mm/proc-arm1020.S --- linux-2.6.0-test5/arch/arm/mm/proc-arm1020.S 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mm/proc-arm1020.S 2003-09-25 19:15:45.000000000 -0700 @@ -1,5 +1,5 @@ /* - * linux/arch/arm/mm/arm1020.S: MMU functions for ARM1020 + * linux/arch/arm/mm/proc-arm1020.S: MMU functions for ARM1020 * * Copyright (C) 2000 ARM Limited * Copyright (C) 2000 Deep Blue Solutions Ltd. @@ -29,6 +29,7 @@ #include #include #include +#include #include #include #include @@ -379,19 +380,19 @@ ENTRY(cpu_arm1020_switch_mm) ENTRY(cpu_arm1020_set_pte) str r1, [r0], #-2048 @ linux version - eor r1, r1, #LPTE_PRESENT | LPTE_YOUNG | LPTE_WRITE | LPTE_DIRTY + eor r1, r1, #L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_WRITE | L_PTE_DIRTY - bic r2, r1, #0xff0 - bic r2, r2, #3 - orr r2, r2, #HPTE_TYPE_SMALL + bic r2, r1, #PTE_SMALL_AP_MASK + bic r2, r2, #PTE_TYPE_MASK + orr r2, r2, #PTE_TYPE_SMALL - tst r1, #LPTE_USER @ User? - orrne r2, r2, #HPTE_AP_READ + tst r1, #L_PTE_USER @ User? + orrne r2, r2, #PTE_SMALL_AP_URO_SRW - tst r1, #LPTE_WRITE | LPTE_DIRTY @ Write and Dirty? - orreq r2, r2, #HPTE_AP_WRITE + tst r1, #L_PTE_WRITE | L_PTE_DIRTY @ Write and Dirty? + orreq r2, r2, #PTE_SMALL_AP_UNO_SRW - tst r1, #LPTE_PRESENT | LPTE_YOUNG @ Present and Young? + tst r1, #L_PTE_PRESENT | L_PTE_YOUNG @ Present and Young? movne r2, #0 #ifdef CONFIG_CPU_DCACHE_WRITETHROUGH @@ -408,31 +409,9 @@ ENTRY(cpu_arm1020_set_pte) mcr p15, 0, r0, c7, c10, 4 @ drain WB mov pc, lr - -ENTRY(cpu_arm1020_name) - .ascii "Arm1020" -#ifndef CONFIG_CPU_ICACHE_DISABLE - .ascii "i" -#endif -#ifndef CONFIG_CPU_DCACHE_DISABLE - .ascii "d" -#ifdef CONFIG_CPU_DCACHE_WRITETHROUGH - .ascii "(wt)" -#else - .ascii "(wb)" -#endif -#endif -#ifndef CONFIG_CPU_BPREDICT_DISABLE - .ascii "B" -#endif -#ifdef CONFIG_CPU_CACHE_ROUND_ROBIN - .ascii "RR" -#endif - .ascii "\0" - .align - __INIT + .type __arm1020_setup, #function __arm1020_setup: mov r0, #0 mcr p15, 0, r0, c7, c7 @ invalidate I,D caches on v4 @@ -445,10 +424,8 @@ __arm1020_setup: /* * Clear out 'unwanted' bits (then put them in if we need them) */ - bic r0, r0, #0x0e00 @ ....??r......... - bic r0, r0, #0x0002 @ ..............a. - bic r0, r0, #0x000c @ W,D - bic r0, r0, #0x1000 @ I + bic r0, r0, #0x1e00 @ i...??r......... + bic r0, r0, #0x000e @ ............wca. /* * Turn on what we want */ @@ -468,8 +445,9 @@ __arm1020_setup: orr r0, r0, #0x1000 @ I Cache on #endif mov pc, lr + .size __arm1020_setup, . - __arm1020_setup - .text + __INITDATA /* * Purpose : Function pointers used to access above functions - all calls @@ -485,26 +463,51 @@ arm1020_processor_functions: .word cpu_arm1020_dcache_clean_area .word cpu_arm1020_switch_mm .word cpu_arm1020_set_pte - .size arm1020_processor_functions, . - arm1020_processor_functions + .section ".rodata" + .type cpu_arch_name, #object cpu_arch_name: - .asciz "armv4t" + .asciz "armv5t" .size cpu_arch_name, . - cpu_arch_name .type cpu_elf_name, #object cpu_elf_name: - .asciz "v4" + .asciz "v5" .size cpu_elf_name, . - cpu_elf_name + + .type cpu_arm1020_name, #object +cpu_arm1020_name: + .ascii "ARM1020" +#ifndef CONFIG_CPU_ICACHE_DISABLE + .ascii "i" +#endif +#ifndef CONFIG_CPU_DCACHE_DISABLE + .ascii "d" +#ifdef CONFIG_CPU_DCACHE_WRITETHROUGH + .ascii "(wt)" +#else + .ascii "(wb)" +#endif +#endif +#ifndef CONFIG_CPU_BPREDICT_DISABLE + .ascii "B" +#endif +#ifdef CONFIG_CPU_CACHE_ROUND_ROBIN + .ascii "RR" +#endif + .ascii "\0" + .size cpu_arm1020_name, . - cpu_arm1020_name + .align .section ".proc.info", #alloc, #execinstr .type __arm1020_proc_info,#object __arm1020_proc_info: - .long 0x4100a200 - .long 0xff00fff0 + .long 0x4104a200 @ ARM 1020T (Architecture v5T) + .long 0xff0ffff0 .long 0x00000c02 @ mmuflags b __arm1020_setup .long cpu_arch_name diff -prauN linux-2.6.0-test5/arch/arm/mm/proc-arm1020e.S wli-2.6.0-test5-bk12-25/arch/arm/mm/proc-arm1020e.S --- linux-2.6.0-test5/arch/arm/mm/proc-arm1020e.S 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/mm/proc-arm1020e.S 2003-09-25 19:15:45.000000000 -0700 @@ -0,0 +1,504 @@ +/* + * linux/arch/arm/mm/proc-arm1020e.S: MMU functions for ARM1020 + * + * Copyright (C) 2000 ARM Limited + * Copyright (C) 2000 Deep Blue Solutions Ltd. + * + * 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 of the License, 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + * These are the low level assembler for performing cache and TLB + * functions on the arm1020e. + * + * CONFIG_CPU_ARM1020_CPU_IDLE -> nohlt + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * This is the maximum size of an area which will be invalidated + * using the single invalidate entry instructions. Anything larger + * than this, and we go for the whole cache. + * + * This value should be chosen such that we choose the cheapest + * alternative. + */ +#define MAX_AREA_SIZE 32768 + +/* + * The size of one data cache line. + */ +#define CACHE_DLINESIZE 32 + +/* + * The number of data cache segments. + */ +#define CACHE_DSEGMENTS 16 + +/* + * The number of lines in a cache segment. + */ +#define CACHE_DENTRIES 64 + +/* + * This is the size at which it becomes more efficient to + * clean the whole cache, rather than using the individual + * cache line maintainence instructions. + */ +#define CACHE_DLIMIT 32768 + + .text +/* + * cpu_arm1020e_proc_init() + */ +ENTRY(cpu_arm1020e_proc_init) + mov pc, lr + +/* + * cpu_arm1020e_proc_fin() + */ +ENTRY(cpu_arm1020e_proc_fin) + stmfd sp!, {lr} + mov ip, #PSR_F_BIT | PSR_I_BIT | SVC_MODE + msr cpsr_c, ip + bl arm1020e_flush_kern_cache_all + mrc p15, 0, r0, c1, c0, 0 @ ctrl register + bic r0, r0, #0x1000 @ ...i............ + bic r0, r0, #0x000e @ ............wca. + mcr p15, 0, r0, c1, c0, 0 @ disable caches + ldmfd sp!, {pc} + +/* + * cpu_arm1020e_reset(loc) + * + * Perform a soft reset of the system. Put the CPU into the + * same state as it would be if it had been reset, and branch + * to what would be the reset vector. + * + * loc: location to jump to for soft reset + */ + .align 5 +ENTRY(cpu_arm1020e_reset) + mov ip, #0 + mcr p15, 0, ip, c7, c7, 0 @ invalidate I,D caches + mcr p15, 0, ip, c7, c10, 4 @ drain WB + mcr p15, 0, ip, c8, c7, 0 @ invalidate I & D TLBs + mrc p15, 0, ip, c1, c0, 0 @ ctrl register + bic ip, ip, #0x000f @ ............wcam + bic ip, ip, #0x1100 @ ...i...s........ + mcr p15, 0, ip, c1, c0, 0 @ ctrl register + mov pc, r0 + +/* + * cpu_arm1020e_do_idle() + */ + .align 5 +ENTRY(cpu_arm1020e_do_idle) + mcr p15, 0, r0, c7, c0, 4 @ Wait for interrupt + mov pc, lr + +/* ================================= CACHE ================================ */ + + .align 5 +/* + * flush_user_cache_all() + * + * Invalidate all cache entries in a particular address + * space. + */ +ENTRY(arm1020e_flush_user_cache_all) + /* FALLTHROUGH */ +/* + * flush_kern_cache_all() + * + * Clean and invalidate the entire cache. + */ +ENTRY(arm1020e_flush_kern_cache_all) + mov r2, #VM_EXEC + mov ip, #0 +__flush_whole_cache: +#ifndef CONFIG_CPU_DCACHE_DISABLE + mcr p15, 0, ip, c7, c10, 4 @ drain WB + mov r1, #(CACHE_DSEGMENTS - 1) << 5 @ 16 segments +1: orr r3, r1, #(CACHE_DENTRIES - 1) << 26 @ 64 entries +2: mcr p15, 0, r3, c7, c14, 2 @ clean+invalidate D index + subs r3, r3, #1 << 26 + bcs 2b @ entries 63 to 0 + subs r1, r1, #1 << 5 + bcs 1b @ segments 15 to 0 +#endif + tst r2, #VM_EXEC +#ifndef CONFIG_CPU_ICACHE_DISABLE + mcrne p15, 0, ip, c7, c5, 0 @ invalidate I cache +#endif + mcrne p15, 0, ip, c7, c10, 4 @ drain WB + mov pc, lr + +/* + * flush_user_cache_range(start, end, flags) + * + * Invalidate a range of cache entries in the specified + * address space. + * + * - start - start address (inclusive) + * - end - end address (exclusive) + * - flags - vm_flags for this space + */ +ENTRY(arm1020e_flush_user_cache_range) + mov ip, #0 + sub r3, r1, r0 @ calculate total size + cmp r3, #CACHE_DLIMIT + bhs __flush_whole_cache + +#ifndef CONFIG_CPU_DCACHE_DISABLE +1: mcr p15, 0, r0, c7, c14, 1 @ clean+invalidate D entry + add r0, r0, #CACHE_DLINESIZE + cmp r0, r1 + blo 1b +#endif + tst r2, #VM_EXEC +#ifndef CONFIG_CPU_ICACHE_DISABLE + mcrne p15, 0, ip, c7, c5, 0 @ invalidate I cache +#endif + mcrne p15, 0, ip, c7, c10, 4 @ drain WB + mov pc, lr + +/* + * coherent_kern_range(start, end) + * + * Ensure coherency between the Icache and the Dcache in the + * region described by start. If you have non-snooping + * Harvard caches, you need to implement this function. + * + * - start - virtual start address + * - end - virtual end address + */ +ENTRY(arm1020e_coherent_kern_range) + mov ip, #0 + bic r0, r0, #CACHE_DLINESIZE - 1 +1: +#ifndef CONFIG_CPU_DCACHE_DISABLE + mcr p15, 0, r0, c7, c10, 1 @ clean D entry +#endif +#ifndef CONFIG_CPU_ICACHE_DISABLE + mcr p15, 0, r0, c7, c5, 1 @ invalidate I entry +#endif + add r0, r0, #CACHE_DLINESIZE + cmp r0, r1 + blo 1b + mcr p15, 0, ip, c7, c10, 4 @ drain WB + mov pc, lr + +/* + * flush_kern_dcache_page(void *page) + * + * Ensure no D cache aliasing occurs, either with itself or + * the I cache + * + * - page - page aligned address + */ +ENTRY(arm1020e_flush_kern_dcache_page) + mov ip, #0 +#ifndef CONFIG_CPU_DCACHE_DISABLE + add r1, r0, #PAGE_SZ +1: mcr p15, 0, r0, c7, c14, 1 @ clean+invalidate D entry + add r0, r0, #CACHE_DLINESIZE + cmp r0, r1 + blo 1b +#endif + mcr p15, 0, ip, c7, c10, 4 @ drain WB + mov pc, lr + +/* + * dma_inv_range(start, end) + * + * Invalidate (discard) the specified virtual address range. + * May not write back any entries. If 'start' or 'end' + * are not cache line aligned, those lines must be written + * back. + * + * - start - virtual start address + * - end - virtual end address + * + * (same as v4wb) + */ +ENTRY(arm1020e_dma_inv_range) + mov ip, #0 +#ifndef CONFIG_CPU_DCACHE_DISABLE + tst r0, #CACHE_DLINESIZE - 1 + bic r0, r0, #CACHE_DLINESIZE - 1 + mcrne p15, 0, r0, c7, c10, 1 @ clean D entry + tst r1, #CACHE_DLINESIZE - 1 + mcrne p15, 0, r1, c7, c10, 1 @ clean D entry +1: mcr p15, 0, r0, c7, c6, 1 @ invalidate D entry + add r0, r0, #CACHE_DLINESIZE + cmp r0, r1 + blo 1b +#endif + mcr p15, 0, ip, c7, c10, 4 @ drain WB + mov pc, lr + +/* + * dma_clean_range(start, end) + * + * Clean the specified virtual address range. + * + * - start - virtual start address + * - end - virtual end address + * + * (same as v4wb) + */ +ENTRY(arm1020e_dma_clean_range) + mov ip, #0 +#ifndef CONFIG_CPU_DCACHE_DISABLE + bic r0, r0, #CACHE_DLINESIZE - 1 +1: mcr p15, 0, r0, c7, c10, 1 @ clean D entry + add r0, r0, #CACHE_DLINESIZE + cmp r0, r1 + blo 1b +#endif + mcr p15, 0, ip, c7, c10, 4 @ drain WB + mov pc, lr + +/* + * dma_flush_range(start, end) + * + * Clean and invalidate the specified virtual address range. + * + * - start - virtual start address + * - end - virtual end address + */ +ENTRY(arm1020e_dma_flush_range) + mov ip, #0 +#ifndef CONFIG_CPU_DCACHE_DISABLE + bic r0, r0, #CACHE_DLINESIZE - 1 +1: mcr p15, 0, r0, c7, c14, 1 @ clean+invalidate D entry + add r0, r0, #CACHE_DLINESIZE + cmp r0, r1 + blo 1b +#endif + mcr p15, 0, ip, c7, c10, 4 @ drain WB + mov pc, lr + +ENTRY(arm1020e_cache_fns) + .long arm1020e_flush_kern_cache_all + .long arm1020e_flush_user_cache_all + .long arm1020e_flush_user_cache_range + .long arm1020e_coherent_kern_range + .long arm1020e_flush_kern_dcache_page + .long arm1020e_dma_inv_range + .long arm1020e_dma_clean_range + .long arm1020e_dma_flush_range + + .align 5 +ENTRY(cpu_arm1020e_dcache_clean_area) +#ifndef CONFIG_CPU_DCACHE_DISABLE + mov ip, #0 +1: mcr p15, 0, r0, c7, c10, 1 @ clean D entry + add r0, r0, #CACHE_DLINESIZE + subs r1, r1, #CACHE_DLINESIZE + bhi 1b +#endif + mov pc, lr + +/* =============================== PageTable ============================== */ + +/* + * cpu_arm1020e_switch_mm(pgd) + * + * Set the translation base pointer to be as described by pgd. + * + * pgd: new page tables + */ + .align 5 +ENTRY(cpu_arm1020e_switch_mm) +#ifndef CONFIG_CPU_DCACHE_DISABLE + mcr p15, 0, r3, c7, c10, 4 + mov r1, #0xF @ 16 segments +1: mov r3, #0x3F @ 64 entries +2: mov ip, r3, LSL #26 @ shift up entry + orr ip, ip, r1, LSL #5 @ shift in/up index + mcr p15, 0, ip, c7, c14, 2 @ Clean & Inval DCache entry + mov ip, #0 + subs r3, r3, #1 + cmp r3, #0 + bge 2b @ entries 3F to 0 + subs r1, r1, #1 + cmp r1, #0 + bge 1b @ segments 15 to 0 + +#endif + mov r1, #0 +#ifndef CONFIG_CPU_ICACHE_DISABLE + mcr p15, 0, r1, c7, c5, 0 @ invalidate I cache +#endif + mcr p15, 0, r1, c7, c10, 4 @ drain WB + mcr p15, 0, r0, c2, c0, 0 @ load page table pointer + mcr p15, 0, r1, c8, c7, 0 @ invalidate I & D TLBs + mov pc, lr + +/* + * cpu_arm1020e_set_pte(ptep, pte) + * + * Set a PTE and flush it out + */ + .align 5 +ENTRY(cpu_arm1020e_set_pte) + str r1, [r0], #-2048 @ linux version + + eor r1, r1, #L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_WRITE | L_PTE_DIRTY + + bic r2, r1, #PTE_SMALL_AP_MASK + bic r2, r2, #PTE_TYPE_MASK + orr r2, r2, #PTE_TYPE_SMALL + + tst r1, #L_PTE_USER @ User? + orrne r2, r2, #PTE_SMALL_AP_URO_SRW + + tst r1, #L_PTE_WRITE | L_PTE_DIRTY @ Write and Dirty? + orreq r2, r2, #PTE_SMALL_AP_UNO_SRW + + tst r1, #L_PTE_PRESENT | L_PTE_YOUNG @ Present and Young? + movne r2, #0 + +#ifdef CONFIG_CPU_DCACHE_WRITETHROUGH + eor r3, r1, #0x0a @ C & small page? + tst r3, #0x0b + biceq r2, r2, #4 +#endif + str r2, [r0] @ hardware version + mov r0, r0 +#ifndef CONFIG_CPU_DCACHE_DISABLE + mcr p15, 0, r0, c7, c10, 1 @ clean D entry +#endif + mov pc, lr + + __INIT + + .type __arm1020e_setup, #function +__arm1020e_setup: + mov r0, #0 + mcr p15, 0, r0, c7, c7 @ invalidate I,D caches on v4 + mcr p15, 0, r0, c7, c10, 4 @ drain write buffer on v4 + mcr p15, 0, r0, c8, c7 @ invalidate I,D TLBs on v4 + mcr p15, 0, r4, c2, c0 @ load page table pointer + mov r0, #0x1f @ Domains 0, 1 = client + mcr p15, 0, r0, c3, c0 @ load domain access register + mrc p15, 0, r0, c1, c0 @ get control register v4 +/* + * Clear out 'unwanted' bits (then put them in if we need them) + */ + bic r0, r0, #0x1e00 @ i...??r......... + bic r0, r0, #0x000e @ ............wca. +/* + * Turn on what we want + */ + orr r0, r0, #0x0031 @ ..........DP...M + orr r0, r0, #0x0100 @ .......S........ + +#ifdef CONFIG_CPU_CACHE_ROUND_ROBIN + orr r0, r0, #0x4000 @ .R.............. +#endif +#ifndef CONFIG_CPU_BPREDICT_DISABLE + orr r0, r0, #0x0800 @ ....Z........... +#endif +#ifndef CONFIG_CPU_DCACHE_DISABLE + orr r0, r0, #0x0004 @ Enable D cache +#endif +#ifndef CONFIG_CPU_ICACHE_DISABLE + orr r0, r0, #0x1000 @ I Cache on +#endif + mov pc, lr + .size __arm1020e_setup, . - __arm1020e_setup + + __INITDATA + +/* + * Purpose : Function pointers used to access above functions - all calls + * come through these + */ + .type arm1020e_processor_functions, #object +arm1020e_processor_functions: + .word v4t_early_abort + .word cpu_arm1020e_proc_init + .word cpu_arm1020e_proc_fin + .word cpu_arm1020e_reset + .word cpu_arm1020e_do_idle + .word cpu_arm1020e_dcache_clean_area + .word cpu_arm1020e_switch_mm + .word cpu_arm1020e_set_pte + .size arm1020e_processor_functions, . - arm1020e_processor_functions + + .section ".rodata" + + .type cpu_arch_name, #object +cpu_arch_name: + .asciz "armv5te" + .size cpu_arch_name, . - cpu_arch_name + + .type cpu_elf_name, #object +cpu_elf_name: + .asciz "v5" + .size cpu_elf_name, . - cpu_elf_name + + .type cpu_arm1020e_name, #object +cpu_arm1020e_name: + .ascii "ARM1020E" +#ifndef CONFIG_CPU_ICACHE_DISABLE + .ascii "i" +#endif +#ifndef CONFIG_CPU_DCACHE_DISABLE + .ascii "d" +#ifdef CONFIG_CPU_DCACHE_WRITETHROUGH + .ascii "(wt)" +#else + .ascii "(wb)" +#endif +#endif +#ifndef CONFIG_CPU_BPREDICT_DISABLE + .ascii "B" +#endif +#ifdef CONFIG_CPU_CACHE_ROUND_ROBIN + .ascii "RR" +#endif + .ascii "\0" + .size cpu_arm1020e_name, . - cpu_arm1020e_name + + .align + + .section ".proc.info", #alloc, #execinstr + + .type __arm1020e_proc_info,#object +__arm1020e_proc_info: + .long 0x4105a200 @ ARM 1020TE (Architecture v5TE) + .long 0xff0ffff0 + .long 0x00000c12 @ mmuflags + b __arm1020e_setup + .long cpu_arch_name + .long cpu_elf_name + .long HWCAP_SWP | HWCAP_HALF | HWCAP_THUMB + .long cpu_arm1020e_name + .long arm1020e_processor_functions + .long v4wbi_tlb_fns + .long v4wb_user_fns + .long arm1020e_cache_fns + .size __arm1020e_proc_info, . - __arm1020e_proc_info diff -prauN linux-2.6.0-test5/arch/arm/mm/proc-arm1022.S wli-2.6.0-test5-bk12-25/arch/arm/mm/proc-arm1022.S --- linux-2.6.0-test5/arch/arm/mm/proc-arm1022.S 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/mm/proc-arm1022.S 2003-09-25 19:15:45.000000000 -0700 @@ -0,0 +1,484 @@ +/* + * linux/arch/arm/mm/proc-arm1022.S: MMU functions for ARM1022E + * + * Copyright (C) 2000 ARM Limited + * Copyright (C) 2000 Deep Blue Solutions Ltd. + * + * 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 of the License, or + * (at your option) any later version. + * + * + * These are the low level assembler for performing cache and TLB + * functions on the ARM1022E. + */ +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * This is the maximum size of an area which will be invalidated + * using the single invalidate entry instructions. Anything larger + * than this, and we go for the whole cache. + * + * This value should be chosen such that we choose the cheapest + * alternative. + */ +#define MAX_AREA_SIZE 32768 + +/* + * The size of one data cache line. + */ +#define CACHE_DLINESIZE 32 + +/* + * The number of data cache segments. + */ +#define CACHE_DSEGMENTS 16 + +/* + * The number of lines in a cache segment. + */ +#define CACHE_DENTRIES 64 + +/* + * This is the size at which it becomes more efficient to + * clean the whole cache, rather than using the individual + * cache line maintainence instructions. + */ +#define CACHE_DLIMIT 32768 + + .text +/* + * cpu_arm1022_proc_init() + */ +ENTRY(cpu_arm1022_proc_init) + mov pc, lr + +/* + * cpu_arm1022_proc_fin() + */ +ENTRY(cpu_arm1022_proc_fin) + stmfd sp!, {lr} + mov ip, #PSR_F_BIT | PSR_I_BIT | SVC_MODE + msr cpsr_c, ip + bl arm1022_flush_kern_cache_all + mrc p15, 0, r0, c1, c0, 0 @ ctrl register + bic r0, r0, #0x1000 @ ...i............ + bic r0, r0, #0x000e @ ............wca. + mcr p15, 0, r0, c1, c0, 0 @ disable caches + ldmfd sp!, {pc} + +/* + * cpu_arm1022_reset(loc) + * + * Perform a soft reset of the system. Put the CPU into the + * same state as it would be if it had been reset, and branch + * to what would be the reset vector. + * + * loc: location to jump to for soft reset + */ + .align 5 +ENTRY(cpu_arm1022_reset) + mov ip, #0 + mcr p15, 0, ip, c7, c7, 0 @ invalidate I,D caches + mcr p15, 0, ip, c7, c10, 4 @ drain WB + mcr p15, 0, ip, c8, c7, 0 @ invalidate I & D TLBs + mrc p15, 0, ip, c1, c0, 0 @ ctrl register + bic ip, ip, #0x000f @ ............wcam + bic ip, ip, #0x1100 @ ...i...s........ + mcr p15, 0, ip, c1, c0, 0 @ ctrl register + mov pc, r0 + +/* + * cpu_arm1022_do_idle() + */ + .align 5 +ENTRY(cpu_arm1022_do_idle) + mcr p15, 0, r0, c7, c0, 4 @ Wait for interrupt + mov pc, lr + +/* ================================= CACHE ================================ */ + + .align 5 +/* + * flush_user_cache_all() + * + * Invalidate all cache entries in a particular address + * space. + */ +ENTRY(arm1022_flush_user_cache_all) + /* FALLTHROUGH */ +/* + * flush_kern_cache_all() + * + * Clean and invalidate the entire cache. + */ +ENTRY(arm1022_flush_kern_cache_all) + mov r2, #VM_EXEC + mov ip, #0 +__flush_whole_cache: +#ifndef CONFIG_CPU_DCACHE_DISABLE + mov r1, #(CACHE_DSEGMENTS - 1) << 5 @ 16 segments +1: orr r3, r1, #(CACHE_DENTRIES - 1) << 26 @ 64 entries +2: mcr p15, 0, r3, c7, c14, 2 @ clean+invalidate D index + subs r3, r3, #1 << 26 + bcs 2b @ entries 63 to 0 + subs r1, r1, #1 << 5 + bcs 1b @ segments 15 to 0 +#endif + tst r2, #VM_EXEC +#ifndef CONFIG_CPU_ICACHE_DISABLE + mcrne p15, 0, ip, c7, c5, 0 @ invalidate I cache +#endif + mcrne p15, 0, ip, c7, c10, 4 @ drain WB + mov pc, lr + +/* + * flush_user_cache_range(start, end, flags) + * + * Invalidate a range of cache entries in the specified + * address space. + * + * - start - start address (inclusive) + * - end - end address (exclusive) + * - flags - vm_flags for this space + */ +ENTRY(arm1022_flush_user_cache_range) + mov ip, #0 + sub r3, r1, r0 @ calculate total size + cmp r3, #CACHE_DLIMIT + bhs __flush_whole_cache + +#ifndef CONFIG_CPU_DCACHE_DISABLE +1: mcr p15, 0, r0, c7, c14, 1 @ clean+invalidate D entry + add r0, r0, #CACHE_DLINESIZE + cmp r0, r1 + blo 1b +#endif + tst r2, #VM_EXEC +#ifndef CONFIG_CPU_ICACHE_DISABLE + mcrne p15, 0, ip, c7, c5, 0 @ invalidate I cache +#endif + mcrne p15, 0, ip, c7, c10, 4 @ drain WB + mov pc, lr + +/* + * coherent_kern_range(start, end) + * + * Ensure coherency between the Icache and the Dcache in the + * region described by start. If you have non-snooping + * Harvard caches, you need to implement this function. + * + * - start - virtual start address + * - end - virtual end address + */ +ENTRY(arm1022_coherent_kern_range) + mov ip, #0 + bic r0, r0, #CACHE_DLINESIZE - 1 +1: +#ifndef CONFIG_CPU_DCACHE_DISABLE + mcr p15, 0, r0, c7, c10, 1 @ clean D entry +#endif +#ifndef CONFIG_CPU_ICACHE_DISABLE + mcr p15, 0, r0, c7, c5, 1 @ invalidate I entry +#endif + add r0, r0, #CACHE_DLINESIZE + cmp r0, r1 + blo 1b + mcr p15, 0, ip, c7, c10, 4 @ drain WB + mov pc, lr + +/* + * flush_kern_dcache_page(void *page) + * + * Ensure no D cache aliasing occurs, either with itself or + * the I cache + * + * - page - page aligned address + */ +ENTRY(arm1022_flush_kern_dcache_page) + mov ip, #0 +#ifndef CONFIG_CPU_DCACHE_DISABLE + add r1, r0, #PAGE_SZ +1: mcr p15, 0, r0, c7, c14, 1 @ clean+invalidate D entry + add r0, r0, #CACHE_DLINESIZE + cmp r0, r1 + blo 1b +#endif + mcr p15, 0, ip, c7, c10, 4 @ drain WB + mov pc, lr + +/* + * dma_inv_range(start, end) + * + * Invalidate (discard) the specified virtual address range. + * May not write back any entries. If 'start' or 'end' + * are not cache line aligned, those lines must be written + * back. + * + * - start - virtual start address + * - end - virtual end address + * + * (same as v4wb) + */ +ENTRY(arm1022_dma_inv_range) + mov ip, #0 +#ifndef CONFIG_CPU_DCACHE_DISABLE + tst r0, #CACHE_DLINESIZE - 1 + bic r0, r0, #CACHE_DLINESIZE - 1 + mcrne p15, 0, r0, c7, c10, 1 @ clean D entry + tst r1, #CACHE_DLINESIZE - 1 + mcrne p15, 0, r1, c7, c10, 1 @ clean D entry +1: mcr p15, 0, r0, c7, c6, 1 @ invalidate D entry + add r0, r0, #CACHE_DLINESIZE + cmp r0, r1 + blo 1b +#endif + mcr p15, 0, ip, c7, c10, 4 @ drain WB + mov pc, lr + +/* + * dma_clean_range(start, end) + * + * Clean the specified virtual address range. + * + * - start - virtual start address + * - end - virtual end address + * + * (same as v4wb) + */ +ENTRY(arm1022_dma_clean_range) + mov ip, #0 +#ifndef CONFIG_CPU_DCACHE_DISABLE + bic r0, r0, #CACHE_DLINESIZE - 1 +1: mcr p15, 0, r0, c7, c10, 1 @ clean D entry + add r0, r0, #CACHE_DLINESIZE + cmp r0, r1 + blo 1b +#endif + mcr p15, 0, ip, c7, c10, 4 @ drain WB + mov pc, lr + +/* + * dma_flush_range(start, end) + * + * Clean and invalidate the specified virtual address range. + * + * - start - virtual start address + * - end - virtual end address + */ +ENTRY(arm1022_dma_flush_range) + mov ip, #0 +#ifndef CONFIG_CPU_DCACHE_DISABLE + bic r0, r0, #CACHE_DLINESIZE - 1 +1: mcr p15, 0, r0, c7, c14, 1 @ clean+invalidate D entry + add r0, r0, #CACHE_DLINESIZE + cmp r0, r1 + blo 1b +#endif + mcr p15, 0, ip, c7, c10, 4 @ drain WB + mov pc, lr + +ENTRY(arm1022_cache_fns) + .long arm1022_flush_kern_cache_all + .long arm1022_flush_user_cache_all + .long arm1022_flush_user_cache_range + .long arm1022_coherent_kern_range + .long arm1022_flush_kern_dcache_page + .long arm1022_dma_inv_range + .long arm1022_dma_clean_range + .long arm1022_dma_flush_range + + .align 5 +ENTRY(cpu_arm1022_dcache_clean_area) +#ifndef CONFIG_CPU_DCACHE_DISABLE + mov ip, #0 +1: mcr p15, 0, r0, c7, c10, 1 @ clean D entry + add r0, r0, #CACHE_DLINESIZE + subs r1, r1, #CACHE_DLINESIZE + bhi 1b +#endif + mov pc, lr + +/* =============================== PageTable ============================== */ + +/* + * cpu_arm1022_switch_mm(pgd) + * + * Set the translation base pointer to be as described by pgd. + * + * pgd: new page tables + */ + .align 5 +ENTRY(cpu_arm1022_switch_mm) +#ifndef CONFIG_CPU_DCACHE_DISABLE + mov r1, #(CACHE_DSEGMENTS - 1) << 5 @ 16 segments +1: orr r3, r1, #(CACHE_DENTRIES - 1) << 26 @ 64 entries +2: mcr p15, 0, r3, c7, c14, 2 @ clean+invalidate D index + subs r3, r3, #1 << 26 + bcs 2b @ entries 63 to 0 + subs r1, r1, #1 << 5 + bcs 1b @ segments 15 to 0 +#endif + mov r1, #0 +#ifndef CONFIG_CPU_ICACHE_DISABLE + mcr p15, 0, r1, c7, c5, 0 @ invalidate I cache +#endif + mcr p15, 0, r1, c7, c10, 4 @ drain WB + mcr p15, 0, r0, c2, c0, 0 @ load page table pointer + mcr p15, 0, r1, c8, c7, 0 @ invalidate I & D TLBs + mov pc, lr + +/* + * cpu_arm1022_set_pte(ptep, pte) + * + * Set a PTE and flush it out + */ + .align 5 +ENTRY(cpu_arm1022_set_pte) + str r1, [r0], #-2048 @ linux version + + eor r1, r1, #L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_WRITE | L_PTE_DIRTY + + bic r2, r1, #PTE_SMALL_AP_MASK + bic r2, r2, #PTE_TYPE_MASK + orr r2, r2, #PTE_TYPE_SMALL + + tst r1, #L_PTE_USER @ User? + orrne r2, r2, #PTE_SMALL_AP_URO_SRW + + tst r1, #L_PTE_WRITE | L_PTE_DIRTY @ Write and Dirty? + orreq r2, r2, #PTE_SMALL_AP_UNO_SRW + + tst r1, #L_PTE_PRESENT | L_PTE_YOUNG @ Present and Young? + movne r2, #0 + +#ifdef CONFIG_CPU_DCACHE_WRITETHROUGH + eor r3, r1, #0x0a @ C & small page? + tst r3, #0x0b + biceq r2, r2, #4 +#endif + str r2, [r0] @ hardware version + mov r0, r0 +#ifndef CONFIG_CPU_DCACHE_DISABLE + mcr p15, 0, r0, c7, c10, 1 @ clean D entry +#endif + mov pc, lr + + __INIT + + .type __arm1022_setup, #function +__arm1022_setup: + mov r0, #0 + mcr p15, 0, r0, c7, c7 @ invalidate I,D caches on v4 + mcr p15, 0, r0, c7, c10, 4 @ drain write buffer on v4 + mcr p15, 0, r0, c8, c7 @ invalidate I,D TLBs on v4 + mcr p15, 0, r4, c2, c0 @ load page table pointer + mov r0, #0x1f @ Domains 0, 1 = client + mcr p15, 0, r0, c3, c0 @ load domain access register + mrc p15, 0, r0, c1, c0 @ get control register v4 +/* + * Clear out 'unwanted' bits (then put them in if we need them) + */ + bic r0, r0, #0x1e00 @ ...i??r......... + bic r0, r0, #0x000e @ ............wca. +/* + * Turn on what we want + */ + orr r0, r0, #0x0031 @ ..........DP...M + orr r0, r0, #0x2100 @ ..V....S........ + +#ifdef CONFIG_CPU_CACHE_ROUND_ROBIN + orr r0, r0, #0x4000 @ .R.............. +#endif +#ifndef CONFIG_CPU_BPREDICT_DISABLE + orr r0, r0, #0x0800 @ ....Z........... +#endif +#ifndef CONFIG_CPU_DCACHE_DISABLE + orr r0, r0, #0x0004 @ .............C.. +#endif +#ifndef CONFIG_CPU_ICACHE_DISABLE + orr r0, r0, #0x1000 @ ...I............ +#endif + mov pc, lr + .size __arm1022_setup, . - __arm1022_setup + + __INITDATA + +/* + * Purpose : Function pointers used to access above functions - all calls + * come through these + */ + .type arm1022_processor_functions, #object +arm1022_processor_functions: + .word v4t_early_abort + .word cpu_arm1022_proc_init + .word cpu_arm1022_proc_fin + .word cpu_arm1022_reset + .word cpu_arm1022_do_idle + .word cpu_arm1022_dcache_clean_area + .word cpu_arm1022_switch_mm + .word cpu_arm1022_set_pte + .size arm1022_processor_functions, . - arm1022_processor_functions + + .section ".rodata" + + .type cpu_arch_name, #object +cpu_arch_name: + .asciz "armv5te" + .size cpu_arch_name, . - cpu_arch_name + + .type cpu_elf_name, #object +cpu_elf_name: + .asciz "v5" + .size cpu_elf_name, . - cpu_elf_name + + .type cpu_arm1022_name, #object +cpu_arm1022_name: + .ascii "arm1022" +#ifndef CONFIG_CPU_ICACHE_DISABLE + .ascii "i" +#endif +#ifndef CONFIG_CPU_DCACHE_DISABLE + .ascii "d" +#ifdef CONFIG_CPU_DCACHE_WRITETHROUGH + .ascii "(wt)" +#else + .ascii "(wb)" +#endif +#endif +#ifndef CONFIG_CPU_BPREDICT_DISABLE + .ascii "B" +#endif +#ifdef CONFIG_CPU_CACHE_ROUND_ROBIN + .ascii "RR" +#endif + .ascii "\0" + .size cpu_arm1022_name, . - cpu_arm1022_name + + .align + + .section ".proc.info", #alloc, #execinstr + + .type __arm1022_proc_info,#object +__arm1022_proc_info: + .long 0x4105a220 @ ARM 1022E (v5TE) + .long 0xff0ffff0 + .long 0x00000c12 @ mmuflags + b __arm1022_setup + .long cpu_arch_name + .long cpu_elf_name + .long HWCAP_SWP | HWCAP_HALF | HWCAP_THUMB + .long cpu_arm1022_name + .long arm1022_processor_functions + .long v4wbi_tlb_fns + .long v4wb_user_fns + .long arm1022_cache_fns + .size __arm1022_proc_info, . - __arm1022_proc_info diff -prauN linux-2.6.0-test5/arch/arm/mm/proc-arm1026.S wli-2.6.0-test5-bk12-25/arch/arm/mm/proc-arm1026.S --- linux-2.6.0-test5/arch/arm/mm/proc-arm1026.S 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/arm/mm/proc-arm1026.S 2003-09-25 19:15:45.000000000 -0700 @@ -0,0 +1,480 @@ +/* + * linux/arch/arm/mm/proc-arm1026.S: MMU functions for ARM1026EJ-S + * + * Copyright (C) 2000 ARM Limited + * Copyright (C) 2000 Deep Blue Solutions Ltd. + * + * 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 of the License, or + * (at your option) any later version. + * + * + * These are the low level assembler for performing cache and TLB + * functions on the ARM1026EJ-S. + */ +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * This is the maximum size of an area which will be invalidated + * using the single invalidate entry instructions. Anything larger + * than this, and we go for the whole cache. + * + * This value should be chosen such that we choose the cheapest + * alternative. + */ +#define MAX_AREA_SIZE 32768 + +/* + * The size of one data cache line. + */ +#define CACHE_DLINESIZE 32 + +/* + * The number of data cache segments. + */ +#define CACHE_DSEGMENTS 16 + +/* + * The number of lines in a cache segment. + */ +#define CACHE_DENTRIES 64 + +/* + * This is the size at which it becomes more efficient to + * clean the whole cache, rather than using the individual + * cache line maintainence instructions. + */ +#define CACHE_DLIMIT 32768 + + .text +/* + * cpu_arm1026_proc_init() + */ +ENTRY(cpu_arm1026_proc_init) + mov pc, lr + +/* + * cpu_arm1026_proc_fin() + */ +ENTRY(cpu_arm1026_proc_fin) + stmfd sp!, {lr} + mov ip, #PSR_F_BIT | PSR_I_BIT | SVC_MODE + msr cpsr_c, ip + bl arm1026_flush_kern_cache_all + mrc p15, 0, r0, c1, c0, 0 @ ctrl register + bic r0, r0, #0x1000 @ ...i............ + bic r0, r0, #0x000e @ ............wca. + mcr p15, 0, r0, c1, c0, 0 @ disable caches + ldmfd sp!, {pc} + +/* + * cpu_arm1026_reset(loc) + * + * Perform a soft reset of the system. Put the CPU into the + * same state as it would be if it had been reset, and branch + * to what would be the reset vector. + * + * loc: location to jump to for soft reset + */ + .align 5 +ENTRY(cpu_arm1026_reset) + mov ip, #0 + mcr p15, 0, ip, c7, c7, 0 @ invalidate I,D caches + mcr p15, 0, ip, c7, c10, 4 @ drain WB + mcr p15, 0, ip, c8, c7, 0 @ invalidate I & D TLBs + mrc p15, 0, ip, c1, c0, 0 @ ctrl register + bic ip, ip, #0x000f @ ............wcam + bic ip, ip, #0x1100 @ ...i...s........ + mcr p15, 0, ip, c1, c0, 0 @ ctrl register + mov pc, r0 + +/* + * cpu_arm1026_do_idle() + */ + .align 5 +ENTRY(cpu_arm1026_do_idle) + mcr p15, 0, r0, c7, c0, 4 @ Wait for interrupt + mov pc, lr + +/* ================================= CACHE ================================ */ + + .align 5 +/* + * flush_user_cache_all() + * + * Invalidate all cache entries in a particular address + * space. + */ +ENTRY(arm1026_flush_user_cache_all) + /* FALLTHROUGH */ +/* + * flush_kern_cache_all() + * + * Clean and invalidate the entire cache. + */ +ENTRY(arm1026_flush_kern_cache_all) + mov r2, #VM_EXEC + mov ip, #0 +__flush_whole_cache: +#ifndef CONFIG_CPU_DCACHE_DISABLE +1: mrc p15, 0, r15, c7, c14, 3 @ test, clean, invalidate + bne 1b +#endif + tst r2, #VM_EXEC +#ifndef CONFIG_CPU_ICACHE_DISABLE + mcrne p15, 0, ip, c7, c5, 0 @ invalidate I cache +#endif + mcrne p15, 0, ip, c7, c10, 4 @ drain WB + mov pc, lr + +/* + * flush_user_cache_range(start, end, flags) + * + * Invalidate a range of cache entries in the specified + * address space. + * + * - start - start address (inclusive) + * - end - end address (exclusive) + * - flags - vm_flags for this space + */ +ENTRY(arm1026_flush_user_cache_range) + mov ip, #0 + sub r3, r1, r0 @ calculate total size + cmp r3, #CACHE_DLIMIT + bhs __flush_whole_cache + +#ifndef CONFIG_CPU_DCACHE_DISABLE +1: mcr p15, 0, r0, c7, c14, 1 @ clean+invalidate D entry + add r0, r0, #CACHE_DLINESIZE + cmp r0, r1 + blo 1b +#endif + tst r2, #VM_EXEC +#ifndef CONFIG_CPU_ICACHE_DISABLE + mcrne p15, 0, ip, c7, c5, 0 @ invalidate I cache +#endif + mcrne p15, 0, ip, c7, c10, 4 @ drain WB + mov pc, lr + +/* + * coherent_kern_range(start, end) + * + * Ensure coherency between the Icache and the Dcache in the + * region described by start. If you have non-snooping + * Harvard caches, you need to implement this function. + * + * - start - virtual start address + * - end - virtual end address + */ +ENTRY(arm1026_coherent_kern_range) + mov ip, #0 + bic r0, r0, #CACHE_DLINESIZE - 1 +1: +#ifndef CONFIG_CPU_DCACHE_DISABLE + mcr p15, 0, r0, c7, c10, 1 @ clean D entry +#endif +#ifndef CONFIG_CPU_ICACHE_DISABLE + mcr p15, 0, r0, c7, c5, 1 @ invalidate I entry +#endif + add r0, r0, #CACHE_DLINESIZE + cmp r0, r1 + blo 1b + mcr p15, 0, ip, c7, c10, 4 @ drain WB + mov pc, lr + +/* + * flush_kern_dcache_page(void *page) + * + * Ensure no D cache aliasing occurs, either with itself or + * the I cache + * + * - page - page aligned address + */ +ENTRY(arm1026_flush_kern_dcache_page) + mov ip, #0 +#ifndef CONFIG_CPU_DCACHE_DISABLE + add r1, r0, #PAGE_SZ +1: mcr p15, 0, r0, c7, c14, 1 @ clean+invalidate D entry + add r0, r0, #CACHE_DLINESIZE + cmp r0, r1 + blo 1b +#endif + mcr p15, 0, ip, c7, c10, 4 @ drain WB + mov pc, lr + +/* + * dma_inv_range(start, end) + * + * Invalidate (discard) the specified virtual address range. + * May not write back any entries. If 'start' or 'end' + * are not cache line aligned, those lines must be written + * back. + * + * - start - virtual start address + * - end - virtual end address + * + * (same as v4wb) + */ +ENTRY(arm1026_dma_inv_range) + mov ip, #0 +#ifndef CONFIG_CPU_DCACHE_DISABLE + tst r0, #CACHE_DLINESIZE - 1 + bic r0, r0, #CACHE_DLINESIZE - 1 + mcrne p15, 0, r0, c7, c10, 1 @ clean D entry + tst r1, #CACHE_DLINESIZE - 1 + mcrne p15, 0, r1, c7, c10, 1 @ clean D entry +1: mcr p15, 0, r0, c7, c6, 1 @ invalidate D entry + add r0, r0, #CACHE_DLINESIZE + cmp r0, r1 + blo 1b +#endif + mcr p15, 0, ip, c7, c10, 4 @ drain WB + mov pc, lr + +/* + * dma_clean_range(start, end) + * + * Clean the specified virtual address range. + * + * - start - virtual start address + * - end - virtual end address + * + * (same as v4wb) + */ +ENTRY(arm1026_dma_clean_range) + mov ip, #0 +#ifndef CONFIG_CPU_DCACHE_DISABLE + bic r0, r0, #CACHE_DLINESIZE - 1 +1: mcr p15, 0, r0, c7, c10, 1 @ clean D entry + add r0, r0, #CACHE_DLINESIZE + cmp r0, r1 + blo 1b +#endif + mcr p15, 0, ip, c7, c10, 4 @ drain WB + mov pc, lr + +/* + * dma_flush_range(start, end) + * + * Clean and invalidate the specified virtual address range. + * + * - start - virtual start address + * - end - virtual end address + */ +ENTRY(arm1026_dma_flush_range) + mov ip, #0 +#ifndef CONFIG_CPU_DCACHE_DISABLE + bic r0, r0, #CACHE_DLINESIZE - 1 +1: mcr p15, 0, r0, c7, c14, 1 @ clean+invalidate D entry + add r0, r0, #CACHE_DLINESIZE + cmp r0, r1 + blo 1b +#endif + mcr p15, 0, ip, c7, c10, 4 @ drain WB + mov pc, lr + +ENTRY(arm1026_cache_fns) + .long arm1026_flush_kern_cache_all + .long arm1026_flush_user_cache_all + .long arm1026_flush_user_cache_range + .long arm1026_coherent_kern_range + .long arm1026_flush_kern_dcache_page + .long arm1026_dma_inv_range + .long arm1026_dma_clean_range + .long arm1026_dma_flush_range + + .align 5 +ENTRY(cpu_arm1026_dcache_clean_area) +#ifndef CONFIG_CPU_DCACHE_DISABLE + mov ip, #0 +1: mcr p15, 0, r0, c7, c10, 1 @ clean D entry + add r0, r0, #CACHE_DLINESIZE + subs r1, r1, #CACHE_DLINESIZE + bhi 1b +#endif + mov pc, lr + +/* =============================== PageTable ============================== */ + +/* + * cpu_arm1026_switch_mm(pgd) + * + * Set the translation base pointer to be as described by pgd. + * + * pgd: new page tables + */ + .align 5 +ENTRY(cpu_arm1026_switch_mm) + mov r1, #0 +#ifndef CONFIG_CPU_DCACHE_DISABLE +1: mrc p15, 0, r15, c7, c14, 3 @ test, clean, invalidate + bne 1b +#endif +#ifndef CONFIG_CPU_ICACHE_DISABLE + mcr p15, 0, r1, c7, c5, 0 @ invalidate I cache +#endif + mcr p15, 0, r1, c7, c10, 4 @ drain WB + mcr p15, 0, r0, c2, c0, 0 @ load page table pointer + mcr p15, 0, r1, c8, c7, 0 @ invalidate I & D TLBs + mov pc, lr + +/* + * cpu_arm1026_set_pte(ptep, pte) + * + * Set a PTE and flush it out + */ + .align 5 +ENTRY(cpu_arm1026_set_pte) + str r1, [r0], #-2048 @ linux version + + eor r1, r1, #L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_WRITE | L_PTE_DIRTY + + bic r2, r1, #PTE_SMALL_AP_MASK + bic r2, r2, #PTE_TYPE_MASK + orr r2, r2, #PTE_TYPE_SMALL + + tst r1, #L_PTE_USER @ User? + orrne r2, r2, #PTE_SMALL_AP_URO_SRW + + tst r1, #L_PTE_WRITE | L_PTE_DIRTY @ Write and Dirty? + orreq r2, r2, #PTE_SMALL_AP_UNO_SRW + + tst r1, #L_PTE_PRESENT | L_PTE_YOUNG @ Present and Young? + movne r2, #0 + +#ifdef CONFIG_CPU_DCACHE_WRITETHROUGH + eor r3, r1, #0x0a @ C & small page? + tst r3, #0x0b + biceq r2, r2, #4 +#endif + str r2, [r0] @ hardware version + mov r0, r0 +#ifndef CONFIG_CPU_DCACHE_DISABLE + mcr p15, 0, r0, c7, c10, 1 @ clean D entry +#endif + mov pc, lr + + + __INIT + + .type __arm1026_setup, #function +__arm1026_setup: + mov r0, #0 + mcr p15, 0, r0, c7, c7 @ invalidate I,D caches on v4 + mcr p15, 0, r0, c7, c10, 4 @ drain write buffer on v4 + mcr p15, 0, r0, c8, c7 @ invalidate I,D TLBs on v4 + mcr p15, 0, r4, c2, c0 @ load page table pointer +#ifdef CONFIG_CPU_DCACHE_WRITETHROUGH + mov r0, #4 @ explicitly disable writeback + mcr p15, 7, r0, c15, c0, 0 +#endif + mov r0, #0x1f @ Domains 0, 1 = client + mcr p15, 0, r0, c3, c0 @ load domain access register + mrc p15, 0, r0, c1, c0 @ get control register v4 +/* + * Clear out 'unwanted' bits (then put them in if we need them) + */ + bic r0, r0, #0x1e00 @ ...i??r......... + bic r0, r0, #0x000e @ ............wca. +/* + * Turn on what we want + */ + orr r0, r0, #0x0031 @ ..........DP...M + orr r0, r0, #0x2100 @ ..V....S........ + +#ifdef CONFIG_CPU_CACHE_ROUND_ROBIN + orr r0, r0, #0x4000 @ .R.............. +#endif +#ifndef CONFIG_CPU_BPREDICT_DISABLE + orr r0, r0, #0x0800 @ ....Z........... +#endif +#ifndef CONFIG_CPU_DCACHE_DISABLE + orr r0, r0, #0x0004 @ .............C.. +#endif +#ifndef CONFIG_CPU_ICACHE_DISABLE + orr r0, r0, #0x1000 @ ...I............ +#endif + mov pc, lr + .size __arm1026_setup, . - __arm1026_setup + + __INITDATA + +/* + * Purpose : Function pointers used to access above functions - all calls + * come through these + */ + .type arm1026_processor_functions, #object +arm1026_processor_functions: + .word v5t_early_abort + .word cpu_arm1026_proc_init + .word cpu_arm1026_proc_fin + .word cpu_arm1026_reset + .word cpu_arm1026_do_idle + .word cpu_arm1026_dcache_clean_area + .word cpu_arm1026_switch_mm + .word cpu_arm1026_set_pte + .size arm1026_processor_functions, . - arm1026_processor_functions + + .section .rodata + + .type cpu_arch_name, #object +cpu_arch_name: + .asciz "armv5tej" + .size cpu_arch_name, . - cpu_arch_name + + .type cpu_elf_name, #object +cpu_elf_name: + .asciz "v5" + .size cpu_elf_name, . - cpu_elf_name + .align + + .type cpu_arm1026_name, #object +cpu_arm1026_name: + .ascii "ARM1026EJ-S" +#ifndef CONFIG_CPU_ICACHE_DISABLE + .ascii "i" +#endif +#ifndef CONFIG_CPU_DCACHE_DISABLE + .ascii "d" +#ifdef CONFIG_CPU_DCACHE_WRITETHROUGH + .ascii "(wt)" +#else + .ascii "(wb)" +#endif +#endif +#ifndef CONFIG_CPU_BPREDICT_DISABLE + .ascii "B" +#endif +#ifdef CONFIG_CPU_CACHE_ROUND_ROBIN + .ascii "RR" +#endif + .ascii "\0" + .size cpu_arm1026_name, . - cpu_arm1026_name + + .align + + .section ".proc.info", #alloc, #execinstr + + .type __arm1026_proc_info,#object +__arm1026_proc_info: + .long 0x4106a260 @ ARM 1026EJ-S (v5TEJ) + .long 0xff0ffff0 + .long 0x00000c12 @ mmuflags + b __arm1026_setup + .long cpu_arch_name + .long cpu_elf_name + .long HWCAP_SWP | HWCAP_HALF | HWCAP_THUMB | HWCAP_FAST_MULT + .long cpu_arm1026_name + .long arm1026_processor_functions + .long v4wbi_tlb_fns + .long v4wb_user_fns + .long arm1026_cache_fns + .size __arm1026_proc_info, . - __arm1026_proc_info diff -prauN linux-2.6.0-test5/arch/arm/mm/proc-arm6_7.S wli-2.6.0-test5-bk12-25/arch/arm/mm/proc-arm6_7.S --- linux-2.6.0-test5/arch/arm/mm/proc-arm6_7.S 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mm/proc-arm6_7.S 2003-09-25 19:15:45.000000000 -0700 @@ -14,6 +14,7 @@ #include #include #include +#include #include #include @@ -214,19 +215,19 @@ ENTRY(cpu_arm6_set_pte) ENTRY(cpu_arm7_set_pte) str r1, [r0], #-2048 @ linux version - eor r1, r1, #LPTE_PRESENT | LPTE_YOUNG | LPTE_WRITE | LPTE_DIRTY + eor r1, r1, #L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_WRITE | L_PTE_DIRTY - bic r2, r1, #0xff0 - bic r2, r2, #3 - orr r2, r2, #HPTE_TYPE_SMALL + bic r2, r1, #PTE_SMALL_AP_MASK + bic r2, r2, #PTE_TYPE_MASK + orr r2, r2, #PTE_TYPE_SMALL - tst r1, #LPTE_USER | LPTE_EXEC @ User or Exec? - orrne r2, r2, #HPTE_AP_READ + tst r1, #L_PTE_USER @ User? + orrne r2, r2, #PTE_SMALL_AP_URO_SRW - tst r1, #LPTE_WRITE | LPTE_DIRTY @ Write and Dirty? - orreq r2, r2, #HPTE_AP_WRITE + tst r1, #L_PTE_WRITE | L_PTE_DIRTY @ Write and Dirty? + orreq r2, r2, #PTE_SMALL_AP_UNO_SRW - tst r1, #LPTE_PRESENT | LPTE_YOUNG @ Present and Young + tst r1, #L_PTE_PRESENT | L_PTE_YOUNG @ Present and Young movne r2, #0 str r2, [r0] @ hardware version @@ -246,16 +247,9 @@ ENTRY(cpu_arm7_reset) mcr p15, 0, r1, c1, c0, 0 @ turn off MMU etc mov pc, r0 -cpu_arm6_name: .asciz "ARM6" -cpu_arm610_name: - .asciz "ARM610" -cpu_arm7_name: .asciz "ARM7" -cpu_arm710_name: - .asciz "ARM710" - .align - __INIT + .type __arm6_setup, #function __arm6_setup: mov r0, #0 mcr p15, 0, r0, c7, c0 @ flush caches on v3 mcr p15, 0, r0, c5, c0 @ flush TLBs on v3 @@ -265,7 +259,9 @@ __arm6_setup: mov r0, #0 mov r0, #0x3d @ . ..RS BLDP WCAM orr r0, r0, #0x100 @ . ..01 0011 1101 mov pc, lr + .size __arm6_setup, . - __arm6_setup + .type __arm7_setup, #function __arm7_setup: mov r0, #0 mcr p15, 0, r0, c7, c0 @ flush caches on v3 mcr p15, 0, r0, c5, c0 @ flush TLBs on v3 @@ -275,6 +271,9 @@ __arm7_setup: mov r0, #0 mov r0, #0x7d @ . ..RS BLDP WCAM orr r0, r0, #0x100 @ . ..01 0111 1101 mov pc, lr + .size __arm7_setup, . - __arm7_setup + + __INITDATA /* * Purpose : Function pointers used to access above functions - all calls @@ -308,6 +307,8 @@ ENTRY(arm7_processor_functions) .word cpu_arm7_set_pte .size arm7_processor_functions, . - arm7_processor_functions + .section ".rodata" + .type cpu_arch_name, #object cpu_arch_name: .asciz "armv3" .size cpu_arch_name, . - cpu_arch_name @@ -315,6 +316,25 @@ cpu_arch_name: .asciz "armv3" .type cpu_elf_name, #object cpu_elf_name: .asciz "v3" .size cpu_elf_name, . - cpu_elf_name + + .type cpu_arm6_name, #object +cpu_arm6_name: .asciz "ARM6" + .size cpu_arm6_name, . - cpu_arm6_name + + .type cpu_arm610_name, #object +cpu_arm610_name: + .asciz "ARM610" + .size cpu_arm610_name, . - cpu_arm610_name + + .type cpu_arm7_name, #object +cpu_arm7_name: .asciz "ARM7" + .size cpu_arm7_name, . - cpu_arm7_name + + .type cpu_arm710_name, #object +cpu_arm710_name: + .asciz "ARM710" + .size cpu_arm710_name, . - cpu_arm710_name + .align .section ".proc.info", #alloc, #execinstr diff -prauN linux-2.6.0-test5/arch/arm/mm/proc-arm720.S wli-2.6.0-test5-bk12-25/arch/arm/mm/proc-arm720.S --- linux-2.6.0-test5/arch/arm/mm/proc-arm720.S 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mm/proc-arm720.S 2003-09-25 19:15:45.000000000 -0700 @@ -34,6 +34,7 @@ #include #include #include +#include #include #include #include @@ -90,19 +91,19 @@ ENTRY(cpu_arm720_switch_mm) ENTRY(cpu_arm720_set_pte) str r1, [r0], #-2048 @ linux version - eor r1, r1, #LPTE_PRESENT | LPTE_YOUNG | LPTE_WRITE | LPTE_DIRTY + eor r1, r1, #L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_WRITE | L_PTE_DIRTY - bic r2, r1, #0xff0 - bic r2, r2, #3 - orr r2, r2, #HPTE_TYPE_SMALL + bic r2, r1, #PTE_SMALL_AP_MASK + bic r2, r2, #PTE_TYPE_MASK + orr r2, r2, #PTE_TYPE_SMALL - tst r1, #LPTE_USER @ User? - orrne r2, r2, #HPTE_AP_READ + tst r1, #L_PTE_USER @ User? + orrne r2, r2, #PTE_SMALL_AP_URO_SRW - tst r1, #LPTE_WRITE | LPTE_DIRTY @ Write and Dirty? - orreq r2, r2, #HPTE_AP_WRITE + tst r1, #L_PTE_WRITE | L_PTE_DIRTY @ Write and Dirty? + orreq r2, r2, #PTE_SMALL_AP_UNO_SRW - tst r1, #LPTE_PRESENT | LPTE_YOUNG @ Present and Young + tst r1, #L_PTE_PRESENT | L_PTE_YOUNG @ Present and Young movne r2, #0 str r2, [r0] @ hardware version @@ -123,13 +124,9 @@ ENTRY(cpu_arm720_reset) mcr p15, 0, ip, c1, c0, 0 @ ctrl register mov pc, r0 - -cpu_arm720_name: - .asciz "ARM720T" - .align - __INIT + .type __arm720_setup, #function __arm720_setup: mov r0, #0 mcr p15, 0, r0, c7, c7, 0 @ invalidate caches mcr p15, 0, r0, c8, c7, 0 @ flush TLB (v4) @@ -142,6 +139,9 @@ __arm720_setup: mov r0, #0 orr r0, r0, #0x2100 @ .... .... .111 .... (old) orr r0, r0, #0x003d @ ..1. ..01 ..11 1101 (new) mov pc, lr @ __ret (head-armv.S) + .size __arm720_setup, . - __arm720_setup + + __INITDATA /* * Purpose : Function pointers used to access above functions - all calls @@ -159,6 +159,8 @@ ENTRY(arm720_processor_functions) .word cpu_arm720_set_pte .size arm720_processor_functions, . - arm720_processor_functions + .section ".rodata" + .type cpu_arch_name, #object cpu_arch_name: .asciz "armv4t" .size cpu_arch_name, . - cpu_arch_name @@ -166,6 +168,12 @@ cpu_arch_name: .asciz "armv4t" .type cpu_elf_name, #object cpu_elf_name: .asciz "v4" .size cpu_elf_name, . - cpu_elf_name + + .type cpu_arm720_name, #object +cpu_arm720_name: + .asciz "ARM720T" + .size cpu_arm720_name, . - cpu_arm720_name + .align /* diff -prauN linux-2.6.0-test5/arch/arm/mm/proc-arm920.S wli-2.6.0-test5-bk12-25/arch/arm/mm/proc-arm920.S --- linux-2.6.0-test5/arch/arm/mm/proc-arm920.S 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mm/proc-arm920.S 2003-09-25 19:15:45.000000000 -0700 @@ -1,5 +1,5 @@ /* - * linux/arch/arm/mm/arm920.S: MMU functions for ARM920 + * linux/arch/arm/mm/proc-arm920.S: MMU functions for ARM920 * * Copyright (C) 1999,2000 ARM Limited * Copyright (C) 2000 Deep Blue Solutions Ltd. @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -333,19 +334,19 @@ ENTRY(cpu_arm920_switch_mm) ENTRY(cpu_arm920_set_pte) str r1, [r0], #-2048 @ linux version - eor r1, r1, #LPTE_PRESENT | LPTE_YOUNG | LPTE_WRITE | LPTE_DIRTY + eor r1, r1, #L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_WRITE | L_PTE_DIRTY - bic r2, r1, #0xff0 - bic r2, r2, #3 - orr r2, r2, #HPTE_TYPE_SMALL + bic r2, r1, #PTE_SMALL_AP_MASK + bic r2, r2, #PTE_TYPE_MASK + orr r2, r2, #PTE_TYPE_SMALL - tst r1, #LPTE_USER @ User or Exec? - orrne r2, r2, #HPTE_AP_READ + tst r1, #L_PTE_USER @ User? + orrne r2, r2, #PTE_SMALL_AP_URO_SRW - tst r1, #LPTE_WRITE | LPTE_DIRTY @ Write and Dirty? - orreq r2, r2, #HPTE_AP_WRITE + tst r1, #L_PTE_WRITE | L_PTE_DIRTY @ Write and Dirty? + orreq r2, r2, #PTE_SMALL_AP_UNO_SRW - tst r1, #LPTE_PRESENT | LPTE_YOUNG @ Present and Young? + tst r1, #L_PTE_PRESENT | L_PTE_YOUNG @ Present and Young? movne r2, #0 #ifdef CONFIG_CPU_DCACHE_WRITETHROUGH @@ -359,25 +360,9 @@ ENTRY(cpu_arm920_set_pte) mcr p15, 0, r0, c7, c10, 4 @ drain WB mov pc, lr - -ENTRY(cpu_arm920_name) - .ascii "Arm920T" -#ifndef CONFIG_CPU_ICACHE_DISABLE - .ascii "i" -#endif -#ifndef CONFIG_CPU_DCACHE_DISABLE - .ascii "d" -#ifdef CONFIG_CPU_DCACHE_WRITETHROUGH - .ascii "(wt)" -#else - .ascii "(wb)" -#endif -#endif - .ascii "\0" - .align - __INIT + .type __arm920_setup, #function __arm920_setup: mov r0, #0 mcr p15, 0, r0, c7, c7 @ invalidate I,D caches on v4 @@ -408,8 +393,9 @@ __arm920_setup: orr r0, r0, #0x1000 @ ...1 .... .... .... #endif mov pc, lr + .size __arm920_setup, . - __arm920_setup - .text + __INITDATA /* * Purpose : Function pointers used to access above functions - all calls @@ -427,6 +413,8 @@ arm920_processor_functions: .word cpu_arm920_set_pte .size arm920_processor_functions, . - arm920_processor_functions + .section ".rodata" + .type cpu_arch_name, #object cpu_arch_name: .asciz "armv4t" @@ -436,6 +424,24 @@ cpu_arch_name: cpu_elf_name: .asciz "v4" .size cpu_elf_name, . - cpu_elf_name + + .type cpu_arm920_name, #object +cpu_arm920_name: + .ascii "ARM920T" +#ifndef CONFIG_CPU_ICACHE_DISABLE + .ascii "i" +#endif +#ifndef CONFIG_CPU_DCACHE_DISABLE + .ascii "d" +#ifdef CONFIG_CPU_DCACHE_WRITETHROUGH + .ascii "(wt)" +#else + .ascii "(wb)" +#endif +#endif + .ascii "\0" + .size cpu_arm920_name, . - cpu_arm920_name + .align .section ".proc.info", #alloc, #execinstr diff -prauN linux-2.6.0-test5/arch/arm/mm/proc-arm922.S wli-2.6.0-test5-bk12-25/arch/arm/mm/proc-arm922.S --- linux-2.6.0-test5/arch/arm/mm/proc-arm922.S 2003-09-08 12:50:23.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mm/proc-arm922.S 2003-09-25 19:15:46.000000000 -0700 @@ -1,5 +1,5 @@ /* - * linux/arch/arm/mm/arm922.S: MMU functions for ARM922 + * linux/arch/arm/mm/proc-arm922.S: MMU functions for ARM922 * * Copyright (C) 1999,2000 ARM Limited * Copyright (C) 2000 Deep Blue Solutions Ltd. @@ -29,6 +29,7 @@ #include #include #include +#include #include #include #include @@ -337,19 +338,19 @@ ENTRY(cpu_arm922_switch_mm) ENTRY(cpu_arm922_set_pte) str r1, [r0], #-2048 @ linux version - eor r1, r1, #LPTE_PRESENT | LPTE_YOUNG | LPTE_WRITE | LPTE_DIRTY + eor r1, r1, #L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_WRITE | L_PTE_DIRTY - bic r2, r1, #0xff0 - bic r2, r2, #3 - orr r2, r2, #HPTE_TYPE_SMALL + bic r2, r1, #PTE_SMALL_AP_MASK + bic r2, r2, #PTE_TYPE_MASK + orr r2, r2, #PTE_TYPE_SMALL - tst r1, #LPTE_USER @ User? - orrne r2, r2, #HPTE_AP_READ + tst r1, #L_PTE_USER @ User? + orrne r2, r2, #PTE_SMALL_AP_URO_SRW - tst r1, #LPTE_WRITE | LPTE_DIRTY @ Write and Dirty? - orreq r2, r2, #HPTE_AP_WRITE + tst r1, #L_PTE_WRITE | L_PTE_DIRTY @ Write and Dirty? + orreq r2, r2, #PTE_SMALL_AP_UNO_SRW - tst r1, #LPTE_PRESENT | LPTE_YOUNG @ Present and Young? + tst r1, #L_PTE_PRESENT | L_PTE_YOUNG @ Present and Young? movne r2, #0 #ifdef CONFIG_CPU_DCACHE_WRITETHROUGH @@ -363,25 +364,9 @@ ENTRY(cpu_arm922_set_pte) mcr p15, 0, r0, c7, c10, 4 @ drain WB mov pc, lr - -ENTRY(cpu_arm922_name) - .ascii "Arm922T" -#ifndef CONFIG_CPU_ICACHE_DISABLE - .ascii "i" -#endif -#ifndef CONFIG_CPU_DCACHE_DISABLE - .ascii "d" -#ifdef CONFIG_CPU_DCACHE_WRITETHROUGH - .ascii "(wt)" -#else - .ascii "(wb)" -#endif -#endif - .ascii "\0" - .align - __INIT + .type __arm922_setup, #function __arm922_setup: mov r0, #0 mcr p15, 0, r0, c7, c7 @ invalidate I,D caches on v4 @@ -412,8 +397,9 @@ __arm922_setup: orr r0, r0, #0x1000 @ ...1 .... .... .... #endif mov pc, lr + .size __arm922_setup, . - __arm922_setup - .text + __INITDATA /* * Purpose : Function pointers used to access above functions - all calls @@ -431,6 +417,8 @@ arm922_processor_functions: .word cpu_arm922_set_pte .size arm922_processor_functions, . - arm922_processor_functions + .section ".rodata" + .type cpu_arch_name, #object cpu_arch_name: .asciz "armv4t" @@ -440,6 +428,24 @@ cpu_arch_name: cpu_elf_name: .asciz "v4" .size cpu_elf_name, . - cpu_elf_name + + .type cpu_arm922_name, #object +cpu_arm922_name: + .ascii "ARM922T" +#ifndef CONFIG_CPU_ICACHE_DISABLE + .ascii "i" +#endif +#ifndef CONFIG_CPU_DCACHE_DISABLE + .ascii "d" +#ifdef CONFIG_CPU_DCACHE_WRITETHROUGH + .ascii "(wt)" +#else + .ascii "(wb)" +#endif +#endif + .ascii "\0" + .size cpu_arm922_name, . - cpu_arm922_name + .align .section ".proc.info", #alloc, #execinstr diff -prauN linux-2.6.0-test5/arch/arm/mm/proc-arm926.S wli-2.6.0-test5-bk12-25/arch/arm/mm/proc-arm926.S --- linux-2.6.0-test5/arch/arm/mm/proc-arm926.S 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mm/proc-arm926.S 2003-09-25 19:15:46.000000000 -0700 @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -337,19 +338,19 @@ ENTRY(cpu_arm926_switch_mm) ENTRY(cpu_arm926_set_pte) str r1, [r0], #-2048 @ linux version - eor r1, r1, #LPTE_PRESENT | LPTE_YOUNG | LPTE_WRITE | LPTE_DIRTY + eor r1, r1, #L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_WRITE | L_PTE_DIRTY - bic r2, r1, #0xff0 - bic r2, r2, #3 - orr r2, r2, #HPTE_TYPE_SMALL + bic r2, r1, #PTE_SMALL_AP_MASK + bic r2, r2, #PTE_TYPE_MASK + orr r2, r2, #PTE_TYPE_SMALL - tst r1, #LPTE_USER @ User? - orrne r2, r2, #HPTE_AP_READ + tst r1, #L_PTE_USER @ User? + orrne r2, r2, #PTE_SMALL_AP_URO_SRW - tst r1, #LPTE_WRITE | LPTE_DIRTY @ Write and Dirty? - orreq r2, r2, #HPTE_AP_WRITE + tst r1, #L_PTE_WRITE | L_PTE_DIRTY @ Write and Dirty? + orreq r2, r2, #PTE_SMALL_AP_UNO_SRW - tst r1, #LPTE_PRESENT | LPTE_YOUNG @ Present and Young? + tst r1, #L_PTE_PRESENT | L_PTE_YOUNG @ Present and Young? movne r2, #0 #ifdef CONFIG_CPU_DCACHE_WRITETHROUGH @@ -365,28 +366,9 @@ ENTRY(cpu_arm926_set_pte) mcr p15, 0, r0, c7, c10, 4 @ drain WB mov pc, lr - -ENTRY(cpu_arm926_name) - .ascii "ARM926EJ-S" -#ifndef CONFIG_CPU_ICACHE_DISABLE - .ascii "i" -#endif -#ifndef CONFIG_CPU_DCACHE_DISABLE - .ascii "d" -#ifdef CONFIG_CPU_DCACHE_WRITETHROUGH - .ascii "(wt)" -#else - .ascii "(wb)" -#endif -#ifdef CONFIG_CPU_CACHE_ROUND_ROBIN - .ascii "RR" -#endif -#endif - .ascii "\0" - .align - __INIT + .type __arm926_setup, #function __arm926_setup: mov r0, #0 mcr p15, 0, r0, c7, c7 @ invalidate I,D caches on v4 @@ -427,8 +409,9 @@ __arm926_setup: orr r0, r0, #0x1000 @ ...1 .... .... .... #endif mov pc, lr + .size __arm926_setup, . - __arm926_setup - .text + __INITDATA /* * Purpose : Function pointers used to access above functions - all calls @@ -436,7 +419,7 @@ __arm926_setup: */ .type arm926_processor_functions, #object arm926_processor_functions: - .word v5tej_early_abort + .word v5tj_early_abort .word cpu_arm926_proc_init .word cpu_arm926_proc_fin .word cpu_arm926_reset @@ -446,6 +429,8 @@ arm926_processor_functions: .word cpu_arm926_set_pte .size arm926_processor_functions, . - arm926_processor_functions + .section ".rodata" + .type cpu_arch_name, #object cpu_arch_name: .asciz "armv5tej" @@ -455,14 +440,35 @@ cpu_arch_name: cpu_elf_name: .asciz "v5" .size cpu_elf_name, . - cpu_elf_name + + .type cpu_arm926_name, #object +cpu_arm926_name: + .ascii "ARM926EJ-S" +#ifndef CONFIG_CPU_ICACHE_DISABLE + .ascii "i" +#endif +#ifndef CONFIG_CPU_DCACHE_DISABLE + .ascii "d" +#ifdef CONFIG_CPU_DCACHE_WRITETHROUGH + .ascii "(wt)" +#else + .ascii "(wb)" +#endif +#ifdef CONFIG_CPU_CACHE_ROUND_ROBIN + .ascii "RR" +#endif +#endif + .ascii "\0" + .size cpu_arm926_name, . - cpu_arm926_name + .align .section ".proc.info", #alloc, #execinstr .type __arm926_proc_info,#object __arm926_proc_info: - .long 0x41009260 - .long 0xff00fff0 + .long 0x41069260 @ ARM926EJ-S (v5TEJ) + .long 0xff0ffff0 .long 0x00000c1e @ mmuflags b __arm926_setup .long cpu_arch_name diff -prauN linux-2.6.0-test5/arch/arm/mm/proc-sa110.S wli-2.6.0-test5-bk12-25/arch/arm/mm/proc-sa110.S --- linux-2.6.0-test5/arch/arm/mm/proc-sa110.S 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mm/proc-sa110.S 2003-09-25 19:15:46.000000000 -0700 @@ -163,11 +163,11 @@ ENTRY(cpu_sa110_set_pte) eor r1, r1, #L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_WRITE | L_PTE_DIRTY - bic r2, r1, #0xff0 - bic r2, r2, #3 + bic r2, r1, #PTE_SMALL_AP_MASK + bic r2, r2, #PTE_TYPE_MASK orr r2, r2, #PTE_TYPE_SMALL - tst r1, #L_PTE_USER @ User or Exec? + tst r1, #L_PTE_USER @ User? orrne r2, r2, #PTE_SMALL_AP_URO_SRW tst r1, #L_PTE_WRITE | L_PTE_DIRTY @ Write and Dirty? @@ -182,13 +182,9 @@ ENTRY(cpu_sa110_set_pte) mcr p15, 0, r0, c7, c10, 4 @ drain WB mov pc, lr - -cpu_sa110_name: - .asciz "StrongARM-110" - .align - __INIT + .type __sa110_setup, #function __sa110_setup: mrc p15, 0, r0, c1, c0 @ get control register v4 bic r0, r0, #0x2e00 @ ..VI ZFRS BLDP WCAM @@ -203,8 +199,9 @@ __sa110_setup: mov r10, #0x1f @ Domains 0, 1 = client mcr p15, 0, r10, c3, c0 @ load domain access register mov pc, lr + .size __sa110_setup, . - __sa110_setup - .text + __INITDATA /* * Purpose : Function pointers used to access above functions - all calls @@ -218,16 +215,13 @@ ENTRY(sa110_processor_functions) .word cpu_sa110_proc_fin .word cpu_sa110_reset .word cpu_sa110_do_idle - - /* dcache */ .word cpu_sa110_dcache_clean_area - - /* pgtable */ .word cpu_sa110_switch_mm .word cpu_sa110_set_pte - .size sa110_processor_functions, . - sa110_processor_functions + .section ".rodata" + .type cpu_arch_name, #object cpu_arch_name: .asciz "armv4" @@ -237,6 +231,12 @@ cpu_arch_name: cpu_elf_name: .asciz "v4" .size cpu_elf_name, . - cpu_elf_name + + .type cpu_sa110_name, #object +cpu_sa110_name: + .asciz "StrongARM-110" + .size cpu_sa110_name, . - cpu_sa110_name + .align .section ".proc.info", #alloc, #execinstr diff -prauN linux-2.6.0-test5/arch/arm/mm/proc-sa1100.S wli-2.6.0-test5-bk12-25/arch/arm/mm/proc-sa1100.S --- linux-2.6.0-test5/arch/arm/mm/proc-sa1100.S 2003-09-08 12:50:20.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mm/proc-sa1100.S 2003-09-25 19:15:46.000000000 -0700 @@ -1,5 +1,5 @@ /* - * linux/arch/arm/mm/proc-sa110.S + * linux/arch/arm/mm/proc-sa1100.S * * Copyright (C) 1997-2002 Russell King * @@ -187,11 +187,11 @@ ENTRY(cpu_sa1100_set_pte) eor r1, r1, #L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_WRITE | L_PTE_DIRTY - bic r2, r1, #0xff0 - bic r2, r2, #3 + bic r2, r1, #PTE_SMALL_AP_MASK + bic r2, r2, #PTE_TYPE_MASK orr r2, r2, #PTE_TYPE_SMALL - tst r1, #L_PTE_USER @ User or Exec? + tst r1, #L_PTE_USER @ User? orrne r2, r2, #PTE_SMALL_AP_URO_SRW tst r1, #L_PTE_WRITE | L_PTE_DIRTY @ Write and Dirty? @@ -206,15 +206,9 @@ ENTRY(cpu_sa1100_set_pte) mcr p15, 0, r0, c7, c10, 4 @ drain WB mov pc, lr - -cpu_sa1100_name: - .asciz "StrongARM-1100" -cpu_sa1110_name: - .asciz "StrongARM-1110" - .align - __INIT + .type __sa1100_setup, #function __sa1100_setup: mov r10, #0 mcr p15, 0, r10, c7, c7 @ invalidate I,D caches on v4 @@ -229,8 +223,9 @@ __sa1100_setup: orr r0, r0, #0x003d orr r0, r0, #0x3100 @ ..11 ...1 ..11 11.1 mov pc, lr + .size __sa1100_setup, . - __sa1100_setup - .text + __INITDATA /* * Purpose : Function pointers used to access above functions - all calls @@ -252,6 +247,8 @@ ENTRY(sa1100_processor_functions) .word cpu_sa1100_set_pte .size sa1100_processor_functions, . - sa1100_processor_functions + .section ".rodata" + .type cpu_arch_name, #object cpu_arch_name: .asciz "armv4" @@ -261,6 +258,17 @@ cpu_arch_name: cpu_elf_name: .asciz "v4" .size cpu_elf_name, . - cpu_elf_name + + .type cpu_sa1100_name, #object +cpu_sa1100_name: + .asciz "StrongARM-1100" + .size cpu_sa1100_name, . - cpu_sa1100_name + + .type cpu_sa1110_name, #object +cpu_sa1110_name: + .asciz "StrongARM-1110" + .size cpu_sa1110_name, . - cpu_sa1110_name + .align .section ".proc.info", #alloc, #execinstr diff -prauN linux-2.6.0-test5/arch/arm/mm/proc-xscale.S wli-2.6.0-test5-bk12-25/arch/arm/mm/proc-xscale.S --- linux-2.6.0-test5/arch/arm/mm/proc-xscale.S 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mm/proc-xscale.S 2003-09-25 19:15:46.000000000 -0700 @@ -236,6 +236,9 @@ ENTRY(xscale_flush_user_cache_range) * * - start - virtual start address * - end - virtual end address + * + * Note: single I-cache line invalidation isn't used here since + * it also trashes the mini I-cache used by JTAG debuggers. */ ENTRY(xscale_coherent_kern_range) bic r0, r0, #CACHELINESIZE - 1 @@ -568,22 +571,11 @@ ENTRY(cpu_xscale_set_pte) .ltorg -cpu_80200_name: - .asciz "XScale-80200" - -cpu_80321_name: - .asciz "XScale-IOP80321" - -cpu_pxa250_name: - .asciz "XScale-PXA250" - -cpu_pxa210_name: - .asciz "XScale-PXA210" - .align __INIT + .type __xscale_setup, #function __xscale_setup: mov r0, #PSR_F_BIT|PSR_I_BIT|SVC_MODE msr cpsr_c, r0 @@ -602,8 +594,9 @@ __xscale_setup: orr r0, r0, #0x0005 @ .... .... .... .C.M orr r0, r0, #0x3900 @ ..VI Z..S .... .... mov pc, lr + .size __xscale_setup, . - __xscale_setup - .text + __INITDATA /* * Purpose : Function pointers used to access above functions - all calls @@ -612,7 +605,7 @@ __xscale_setup: .type xscale_processor_functions, #object ENTRY(xscale_processor_functions) - .word xscale_abort + .word v5t_early_abort .word cpu_xscale_proc_init .word cpu_xscale_proc_fin .word cpu_xscale_reset @@ -622,6 +615,8 @@ ENTRY(xscale_processor_functions) .word cpu_xscale_set_pte .size xscale_processor_functions, . - xscale_processor_functions + .section ".rodata" + .type cpu_arch_name, #object cpu_arch_name: .asciz "armv5te" @@ -631,6 +626,27 @@ cpu_arch_name: cpu_elf_name: .asciz "v5" .size cpu_elf_name, . - cpu_elf_name + + .type cpu_80200_name, #object +cpu_80200_name: + .asciz "XScale-80200" + .size cpu_80200_name, . - cpu_80200_name + + .type cpu_80321_name, #object +cpu_80321_name: + .asciz "XScale-IOP80321" + .size cpu_80321_name, . - cpu_80321_name + + .type cpu_pxa250_name, #object +cpu_pxa250_name: + .asciz "XScale-PXA250" + .size cpu_pxa250_name, . - cpu_pxa250_name + + .type cpu_pxa210_name, #object +cpu_pxa210_name: + .asciz "XScale-PXA210" + .size cpu_pxa210_name, . - cpu_pxa210_name + .align .section ".proc.info", #alloc, #execinstr diff -prauN linux-2.6.0-test5/arch/arm/mm/tlb-v3.S wli-2.6.0-test5-bk12-25/arch/arm/mm/tlb-v3.S --- linux-2.6.0-test5/arch/arm/mm/tlb-v3.S 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mm/tlb-v3.S 2003-09-25 19:15:46.000000000 -0700 @@ -42,7 +42,7 @@ ENTRY(v3_flush_kern_tlb_range) blo 1b mov pc, lr - __INIT + __INITDATA .type v3_tlb_fns, #object ENTRY(v3_tlb_fns) diff -prauN linux-2.6.0-test5/arch/arm/mm/tlb-v4.S wli-2.6.0-test5-bk12-25/arch/arm/mm/tlb-v4.S --- linux-2.6.0-test5/arch/arm/mm/tlb-v4.S 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mm/tlb-v4.S 2003-09-25 19:15:46.000000000 -0700 @@ -34,7 +34,6 @@ ENTRY(v4_flush_user_tlb_range) act_mm r3 @ get current->active_mm eors r3, ip, r3 @ == mm ? movne pc, lr @ no, we dont do anything - vma_vm_flags ip, r2 .v4_flush_kern_tlb_range: bic r0, r0, #0x0ff bic r0, r0, #0xf00 @@ -56,7 +55,7 @@ ENTRY(v4_flush_user_tlb_range) .globl v4_flush_kern_tlb_range .equ v4_flush_kern_tlb_range, .v4_flush_kern_tlb_range - __INIT + __INITDATA .type v4_tlb_fns, #object ENTRY(v4_tlb_fns) diff -prauN linux-2.6.0-test5/arch/arm/mm/tlb-v4wb.S wli-2.6.0-test5-bk12-25/arch/arm/mm/tlb-v4wb.S --- linux-2.6.0-test5/arch/arm/mm/tlb-v4wb.S 2003-09-08 12:50:00.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mm/tlb-v4wb.S 2003-09-25 19:15:46.000000000 -0700 @@ -67,7 +67,7 @@ ENTRY(v4wb_flush_kern_tlb_range) blo 1b mov pc, lr - __INIT + __INITDATA .type v4wb_tlb_fns, #object ENTRY(v4wb_tlb_fns) diff -prauN linux-2.6.0-test5/arch/arm/mm/tlb-v4wbi.S wli-2.6.0-test5-bk12-25/arch/arm/mm/tlb-v4wbi.S --- linux-2.6.0-test5/arch/arm/mm/tlb-v4wbi.S 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/mm/tlb-v4wbi.S 2003-09-25 19:15:46.000000000 -0700 @@ -58,7 +58,7 @@ ENTRY(v4wbi_flush_kern_tlb_range) blo 1b mov pc, lr - __INIT + __INITDATA .type v4wbi_tlb_fns, #object ENTRY(v4wbi_tlb_fns) diff -prauN linux-2.6.0-test5/arch/arm/nwfpe/fpa11.c wli-2.6.0-test5-bk12-25/arch/arm/nwfpe/fpa11.c --- linux-2.6.0-test5/arch/arm/nwfpe/fpa11.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/nwfpe/fpa11.c 2003-09-25 19:15:46.000000000 -0700 @@ -26,6 +26,7 @@ #include "fpmodule.h" #include "fpmodule.inl" +#include #include #include #include diff -prauN linux-2.6.0-test5/arch/arm/nwfpe/fpa11.h wli-2.6.0-test5-bk12-25/arch/arm/nwfpe/fpa11.h --- linux-2.6.0-test5/arch/arm/nwfpe/fpa11.h 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/nwfpe/fpa11.h 2003-09-25 19:15:46.000000000 -0700 @@ -33,6 +33,7 @@ register unsigned int *user_registers as #define GET_USERREG() (user_registers) +#include #include /* includes */ diff -prauN linux-2.6.0-test5/arch/arm/nwfpe/fpa11_cpdo.c wli-2.6.0-test5-bk12-25/arch/arm/nwfpe/fpa11_cpdo.c --- linux-2.6.0-test5/arch/arm/nwfpe/fpa11_cpdo.c 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/nwfpe/fpa11_cpdo.c 2003-09-25 19:15:46.000000000 -0700 @@ -20,6 +20,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#include #include "fpa11.h" #include "fpopcode.h" diff -prauN linux-2.6.0-test5/arch/arm/nwfpe/fpa11_cpdt.c wli-2.6.0-test5-bk12-25/arch/arm/nwfpe/fpa11_cpdt.c --- linux-2.6.0-test5/arch/arm/nwfpe/fpa11_cpdt.c 2003-09-08 12:50:32.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/nwfpe/fpa11_cpdt.c 2003-09-25 19:15:46.000000000 -0700 @@ -20,6 +20,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#include #include "fpa11.h" #include "softfloat.h" #include "fpopcode.h" diff -prauN linux-2.6.0-test5/arch/arm/nwfpe/fpa11_cprt.c wli-2.6.0-test5-bk12-25/arch/arm/nwfpe/fpa11_cprt.c --- linux-2.6.0-test5/arch/arm/nwfpe/fpa11_cprt.c 2003-09-08 12:50:16.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/nwfpe/fpa11_cprt.c 2003-09-25 19:15:46.000000000 -0700 @@ -20,6 +20,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#include #include "fpa11.h" #include "fpopcode.h" #include "fpa11.inl" diff -prauN linux-2.6.0-test5/arch/arm/nwfpe/fpopcode.c wli-2.6.0-test5-bk12-25/arch/arm/nwfpe/fpopcode.c --- linux-2.6.0-test5/arch/arm/nwfpe/fpopcode.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/nwfpe/fpopcode.c 2003-09-25 19:15:46.000000000 -0700 @@ -19,6 +19,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#include #include "fpa11.h" #include "softfloat.h" #include "fpopcode.h" diff -prauN linux-2.6.0-test5/arch/arm/nwfpe/fpopcode.h wli-2.6.0-test5-bk12-25/arch/arm/nwfpe/fpopcode.h --- linux-2.6.0-test5/arch/arm/nwfpe/fpopcode.h 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/nwfpe/fpopcode.h 2003-09-25 19:15:46.000000000 -0700 @@ -23,6 +23,8 @@ #ifndef __FPOPCODE_H__ #define __FPOPCODE_H__ +#include + /* ARM Floating Point Instruction Classes | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | diff -prauN linux-2.6.0-test5/arch/arm/nwfpe/softfloat.h wli-2.6.0-test5-bk12-25/arch/arm/nwfpe/softfloat.h --- linux-2.6.0-test5/arch/arm/nwfpe/softfloat.h 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/nwfpe/softfloat.h 2003-09-25 19:15:46.000000000 -0700 @@ -32,6 +32,8 @@ this code that are retained. #ifndef __SOFTFLOAT_H__ #define __SOFTFLOAT_H__ +#include + /* ------------------------------------------------------------------------------- The macro `FLOATX80' must be defined to enable the extended double-precision diff -prauN linux-2.6.0-test5/arch/arm/tools/mach-types wli-2.6.0-test5-bk12-25/arch/arm/tools/mach-types --- linux-2.6.0-test5/arch/arm/tools/mach-types 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm/tools/mach-types 2003-09-25 19:15:46.000000000 -0700 @@ -6,7 +6,7 @@ # To add an entry into this database, please see Documentation/arm/README, # or contact rmk@arm.linux.org.uk # -# Last update: Sun Aug 3 16:26:10 2003 +# Last update: Thu Sep 18 17:15:55 2003 # # machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number # @@ -367,3 +367,21 @@ cx861xx ARCH_CX861XX CX861XX 355 ixp2000 ARCH_IXP2000 IXP2000 356 xda SA1100_XDA XDA 357 csir_ims ARCH_CSIR_IMS CSIR_IMS 358 +ixp421_dnaeeth ARCH_IXP421_DNAEETH IXP421_DNAEETH 359 +pocketserv9200 ARCH_POCKETSERV9200 POCKETSERV9200 360 +toto ARCH_TOTO TOTO 361 +s3c2440 ARCH_S3C2440 S3C2440 362 +ks8695p ARCH_KS8695P KS8695P 363 +se4000 ARCH_SE4000 SE4000 364 +quadriceps ARCH_QUADRICEPS QUADRICEPS 365 +bronco ARCH_BRONCO BRONCO 366 +esl_wireless_tab ARCH_ESL_WIRELESS_TABLETESL_WIRELESS_TABLET 367 +esl_sofcomp ARCH_ESL_SOFCOMP ESL_SOFCOMP 368 +s5c7375 ARCH_S5C7375 S5C7375 369 +spearhead ARCH_SPEARHEAD SPEARHEAD 370 +pantera ARCH_PANTERA PANTERA 371 +prayoglite ARCH_PRAYOGLITE PRAYOGLITE 372 +gumstik ARCH_GUMSTIK GUMSTIK 373 +rcube ARCH_RCUBE RCUBE 374 +rea_olv ARCH_REA_OLV REA_OLV 375 +pxa_iphone ARCH_PXA_IPHONE PXA_IPHONE 376 diff -prauN linux-2.6.0-test5/arch/arm26/boot/compressed/misc.c wli-2.6.0-test5-bk12-25/arch/arm26/boot/compressed/misc.c --- linux-2.6.0-test5/arch/arm26/boot/compressed/misc.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm26/boot/compressed/misc.c 2003-09-25 19:15:46.000000000 -0700 @@ -191,8 +191,8 @@ static void *malloc(int size) { void *p; - if (size <0) error("Malloc error\n"); - if (free_mem_ptr <= 0) error("Memory error\n"); + if (size <0) error("Malloc error"); + if (free_mem_ptr <= 0) error("Memory error"); free_mem_ptr = (free_mem_ptr + 3) & ~3; /* Align */ @@ -236,7 +236,7 @@ static void gzip_release(void **ptr) int fill_inbuf(void) { if (insize != 0) - error("ran out of input data\n"); + error("ran out of input data"); inbuf = input_data; insize = &input_data_end[0] - &input_data[0]; diff -prauN linux-2.6.0-test5/arch/arm26/kernel/entry.S wli-2.6.0-test5-bk12-25/arch/arm26/kernel/entry.S --- linux-2.6.0-test5/arch/arm26/kernel/entry.S 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm26/kernel/entry.S 2003-09-25 19:15:46.000000000 -0700 @@ -161,7 +161,7 @@ tsk .req r9 @ current thread_info #endif /* - * Our do_softirq out of line code. See include/asm-arm/softirq.h for + * Our do_softirq out of line code. See include/asm-arm26/hardirq.h for * the calling assembly. */ ENTRY(__do_softirq) diff -prauN linux-2.6.0-test5/arch/arm26/kernel/setup.c wli-2.6.0-test5-bk12-25/arch/arm26/kernel/setup.c --- linux-2.6.0-test5/arch/arm26/kernel/setup.c 2003-09-08 12:49:55.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm26/kernel/setup.c 2003-09-25 19:15:46.000000000 -0700 @@ -286,7 +286,7 @@ static int __init parse_tag_core(const s if (tag->hdr.size > 2) { if ((tag->u.core.flags & 1) == 0) root_mountflags &= ~MS_RDONLY; - ROOT_DEV = tag->u.core.rootdev; + ROOT_DEV = old_decode_dev(tag->u.core.rootdev); } return 0; } diff -prauN linux-2.6.0-test5/arch/arm26/mm/mm-memc.c wli-2.6.0-test5-bk12-25/arch/arm26/mm/mm-memc.c --- linux-2.6.0-test5/arch/arm26/mm/mm-memc.c 2003-09-08 12:50:37.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/arm26/mm/mm-memc.c 2003-09-25 20:03:30.000000000 -0700 @@ -79,7 +79,7 @@ pgd_t *get_pgd_slow(struct mm_struct *mm goto no_pgd; /* - * This lock is here just to satisfy pmd_alloc and pte_lock + * This lock is here just to satisfy pmd_alloc_kernel() and pte_lock * FIXME: I bet we could avoid taking it pretty much altogether */ spin_lock(&mm->page_table_lock); @@ -88,7 +88,7 @@ pgd_t *get_pgd_slow(struct mm_struct *mm * On ARM, first page must always be allocated since it contains * the machine vectors. */ - new_pmd = pmd_alloc(mm, new_pgd, 0); + new_pmd = pmd_alloc_kernel(mm, new_pgd, 0); if (!new_pmd) goto no_pmd; diff -prauN linux-2.6.0-test5/arch/cris/arch-v10/boot/compressed/misc.c wli-2.6.0-test5-bk12-25/arch/cris/arch-v10/boot/compressed/misc.c --- linux-2.6.0-test5/arch/cris/arch-v10/boot/compressed/misc.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/cris/arch-v10/boot/compressed/misc.c 2003-09-25 19:15:46.000000000 -0700 @@ -115,7 +115,7 @@ static void *malloc(int size) { void *p; - if (size <0) error("Malloc error\n"); + if (size <0) error("Malloc error"); free_mem_ptr = (free_mem_ptr + 3) & ~3; /* Align */ diff -prauN linux-2.6.0-test5/arch/cris/mm/ioremap.c wli-2.6.0-test5-bk12-25/arch/cris/mm/ioremap.c --- linux-2.6.0-test5/arch/cris/mm/ioremap.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/cris/mm/ioremap.c 2003-09-25 20:03:30.000000000 -0700 @@ -78,7 +78,7 @@ static int remap_area_pages(unsigned lon spin_lock(&init_mm.page_table_lock); do { pmd_t *pmd; - pmd = pmd_alloc(&init_mm, dir, address); + pmd = pmd_alloc_kernel(&init_mm, dir, address); error = -ENOMEM; if (!pmd) break; diff -prauN linux-2.6.0-test5/arch/h8300/kernel/h8300_ksyms.c wli-2.6.0-test5-bk12-25/arch/h8300/kernel/h8300_ksyms.c --- linux-2.6.0-test5/arch/h8300/kernel/h8300_ksyms.c 2003-09-08 12:50:28.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/h8300/kernel/h8300_ksyms.c 2003-09-25 19:15:46.000000000 -0700 @@ -16,7 +16,6 @@ #include #include #include -#include #include //asmlinkage long long __ashrdi3 (long long, int); diff -prauN linux-2.6.0-test5/arch/h8300/kernel/signal.c wli-2.6.0-test5-bk12-25/arch/h8300/kernel/signal.c --- linux-2.6.0-test5/arch/h8300/kernel/signal.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/h8300/kernel/signal.c 2003-09-25 19:15:46.000000000 -0700 @@ -593,7 +593,7 @@ asmlinkage int do_signal(sigset_t *oldse continue; case SIGTSTP: case SIGTTIN: case SIGTTOU: - if (is_orphaned_pgrp(current->pgrp)) + if (is_orphaned_pgrp(process_group(current))) continue; /* FALLTHRU */ diff -prauN linux-2.6.0-test5/arch/i386/Kconfig wli-2.6.0-test5-bk12-25/arch/i386/Kconfig --- linux-2.6.0-test5/arch/i386/Kconfig 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/Kconfig 2003-09-29 01:15:24.000000000 -0700 @@ -397,16 +397,10 @@ config X86_OOSTORE depends on MWINCHIP3D || MWINCHIP2 || MWINCHIPC6 default y -config HUGETLB_PAGE - bool "Huge TLB Page Support" - help - This enables support for huge pages. User space applications - can make use of this support with the sys_alloc_hugepages and - sys_free_hugepages system calls. If your applications are - huge page aware and your processor (Pentium or later for x86) - supports this, then say Y here. - - Otherwise, say N. +config X86_CMOV + bool + depends on M686 || MPENTIUMII || MPENTIUMIII || MPENTIUM4 || MK8 || MCRUSOE + default y config HPET_TIMER bool "HPET Timer Support" @@ -454,6 +448,7 @@ config SMP config NR_CPUS int "Maximum number of CPUs (2-255)" depends on SMP + default "32" if X86_NUMAQ || X86_SUMMIT || X86_BIGSMP || X86_ES7000 default "8" help This allows you to specify the maximum number of CPUs which this @@ -605,11 +600,9 @@ config MICROCODE ingredients for this driver, check: . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called microcode. If you want to compile it as - a module, say M here and read . If - you use modprobe or kmod you may also want to add the line + To compile this driver as a module, choose M here: the + module will be called microcode. + If you use modprobe or kmod you may also want to add the line 'alias char-major-10-184 microcode' to your /etc/modules.conf file. config X86_MSR @@ -737,6 +730,26 @@ config HIGHPTE low memory. Setting this option will put user-space page table entries in high memory. +config HIGHPMD + bool "Allocate 2nd-level pagetables from highmem" + depends on HIGHMEM64G && HIGHPTE + help + The VM uses one lowmem-allocated pmd entry for each pagetable + page of physical memory allocated, and preallocates them all + for 12KB of per-process lowmem overhead. For systems with + extreme amounts of highmem, this cannot be tolerated. Setting + this option will put userspace 2nd-level pagetables in highmem. + +config 4K_STACK + bool "Use smaller 4k per-task stacks" + help + This option will shrink the kernel's per-task stack from 8k to + 4k. This will greatly increase your chance of overflowing it. + But, if you use the per-cpu interrupt stacks as well, your chances + go way down. Also try the CONFIG_X86_STACK_CHECK overflow + detection. It is much more reliable than the currently in-kernel + version. + config MATH_EMULATION bool "Math emulation" ---help--- @@ -919,10 +932,8 @@ config APM 11) exchange RAM chips 12) exchange the motherboard. - To compile this driver as a module ( = code which can be inserted in - and removed from the running kernel whenever you want), say M here - and read . The module will be called - apm. + To compile this driver as a module, choose M here: the + module will be called apm. config APM_IGNORE_USER_SUSPEND bool "Ignore USER SUSPEND" @@ -1323,6 +1334,34 @@ config FRAME_POINTER If you don't debug the kernel, you can say N, but we may not be able to solve problems without frame pointers. +config X86_STACK_CHECK + bool "Detect stack overflows" + depends on FRAME_POINTER + help + Say Y here to have the kernel attempt to detect when the per-task + kernel stack overflows. This is much more robust checking than + the above overflow check, which will only occasionally detect + an overflow. The level of guarantee here is much greater. + + Some older versions of gcc don't handle the -p option correctly. + Kernprof is affected by the same problem, which is described here: + http://oss.sgi.com/projects/kernprof/faq.html#Q9 + + Basically, if you get oopses in __free_pages_ok during boot when + you have this turned on, you need to fix gcc. The Redhat 2.96 + version and gcc-3.x seem to work. + + If not debugging a stack overflow problem, say N + +config MMAP_TOPDOWN + bool "Top-down vma allocation" + help + Say Y here to have the kernel change its vma allocation policy + to allocate vma's from the top of the address space down, and + to shove the stack low so as to conserve virtualspace. This is + risky because various apps, including a number of versions of + ld.so, depend on the kernel's bottom-up behavior. + config X86_EXTRA_IRQS bool depends on X86_LOCAL_APIC || X86_VOYAGER diff -prauN linux-2.6.0-test5/arch/i386/Makefile wli-2.6.0-test5-bk12-25/arch/i386/Makefile --- linux-2.6.0-test5/arch/i386/Makefile 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/Makefile 2003-09-28 22:19:53.000000000 -0700 @@ -21,8 +21,6 @@ LDFLAGS_vmlinux := CFLAGS += -pipe -check_gcc = $(shell if $(CC) $(1) -S -o /dev/null -xc /dev/null > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi) - # prevent gcc from keeping the stack 16 byte aligned CFLAGS += $(call check_gcc,-mpreferred-stack-boundary=2,) @@ -86,6 +84,10 @@ mcore-$(CONFIG_X86_ES7000) := mach-es700 # default subarch .h files mflags-y += -Iinclude/asm-i386/mach-default +ifdef CONFIG_X86_STACK_CHECK +CFLAGS += -p +endif + head-y := arch/i386/kernel/head.o arch/i386/kernel/init_task.o libs-y += arch/i386/lib/ diff -prauN linux-2.6.0-test5/arch/i386/boot/Makefile wli-2.6.0-test5-bk12-25/arch/i386/boot/Makefile --- linux-2.6.0-test5/arch/i386/boot/Makefile 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/boot/Makefile 2003-09-25 19:15:46.000000000 -0700 @@ -99,4 +99,4 @@ zlilo: $(BOOTIMAGE) if [ -x /sbin/lilo ]; then /sbin/lilo; else /etc/lilo/install; fi install: $(BOOTIMAGE) - sh $(src)/install.sh $(KERNELRELEASE) $(BOOTIMAGE) System.map "$(INSTALL_PATH)" + sh $(srctree)/$(src)/install.sh $(KERNELRELEASE) $< System.map "$(INSTALL_PATH)" diff -prauN linux-2.6.0-test5/arch/i386/boot/compressed/misc.c wli-2.6.0-test5-bk12-25/arch/i386/boot/compressed/misc.c --- linux-2.6.0-test5/arch/i386/boot/compressed/misc.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/boot/compressed/misc.c 2003-09-28 22:19:53.000000000 -0700 @@ -132,8 +132,8 @@ static void *malloc(int size) { void *p; - if (size <0) error("Malloc error\n"); - if (free_mem_ptr <= 0) error("Memory error\n"); + if (size <0) error("Malloc error"); + if (free_mem_ptr <= 0) error("Memory error"); free_mem_ptr = (free_mem_ptr + 3) & ~3; /* Align */ @@ -141,7 +141,7 @@ static void *malloc(int size) free_mem_ptr += size; if (free_mem_ptr >= free_mem_end_ptr) - error("\nOut of memory\n"); + error("Out of memory"); return p; } @@ -232,7 +232,7 @@ static void* memcpy(void* __dest, __cons static int fill_inbuf(void) { if (insize != 0) { - error("ran out of input data\n"); + error("ran out of input data"); } inbuf = input_data; @@ -306,9 +306,9 @@ struct { static void setup_normal_output_buffer(void) { #ifdef STANDARD_MEMORY_BIOS_CALL - if (EXT_MEM_K < 1024) error("Less than 2MB of memory.\n"); + if (EXT_MEM_K < 1024) error("Less than 2MB of memory"); #else - if ((ALT_MEM_K > EXT_MEM_K ? ALT_MEM_K : EXT_MEM_K) < 1024) error("Less than 2MB of memory.\n"); + if ((ALT_MEM_K > EXT_MEM_K ? ALT_MEM_K : EXT_MEM_K) < 1024) error("Less than 2MB of memory"); #endif output_data = (char *)0x100000; /* Points to 1M */ free_mem_end_ptr = (long)real_mode; @@ -323,9 +323,9 @@ static void setup_output_buffer_if_we_ru { high_buffer_start = (uch *)(((ulg)&end) + HEAP_SIZE); #ifdef STANDARD_MEMORY_BIOS_CALL - if (EXT_MEM_K < (3*1024)) error("Less than 4MB of memory.\n"); + if (EXT_MEM_K < (3*1024)) error("Less than 4MB of memory"); #else - if ((ALT_MEM_K > EXT_MEM_K ? ALT_MEM_K : EXT_MEM_K) < (3*1024)) error("Less than 4MB of memory.\n"); + if ((ALT_MEM_K > EXT_MEM_K ? ALT_MEM_K : EXT_MEM_K) < (3*1024)) error("Less than 4MB of memory"); #endif mv->low_buffer_start = output_data = (char *)LOW_BUFFER_START; low_buffer_end = ((unsigned int)real_mode > LOW_BUFFER_MAX @@ -379,3 +379,7 @@ asmlinkage int decompress_kernel(struct if (high_loaded) close_output_buffer_if_we_run_high(mv); return high_loaded; } + +/* We don't actually check for stack overflows this early. */ +__asm__(".globl mcount ; mcount: ret\n"); + diff -prauN linux-2.6.0-test5/arch/i386/boot/setup.S wli-2.6.0-test5-bk12-25/arch/i386/boot/setup.S --- linux-2.6.0-test5/arch/i386/boot/setup.S 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/boot/setup.S 2003-09-25 19:15:46.000000000 -0700 @@ -506,6 +506,17 @@ no_voyager: movw $0xAA, (0x1ff) # device present no_psmouse: +#if defined(CONFIG_X86_SPEEDSTEP_SMI) || defined(CONFIG_X86_SPEEDSTEP_SMI_MODULE) + movl $0x0000E980, %eax # IST Support + movl $0x47534943, %edx # Request value + int $0x15 + + movl %eax, (96) + movl %ebx, (100) + movl %ecx, (104) + movl %edx, (108) +#endif + #if defined(CONFIG_APM) || defined(CONFIG_APM_MODULE) # Then check for an APM BIOS... # %ds points to the bootsector diff -prauN linux-2.6.0-test5/arch/i386/boot98/compressed/misc.c wli-2.6.0-test5-bk12-25/arch/i386/boot98/compressed/misc.c --- linux-2.6.0-test5/arch/i386/boot98/compressed/misc.c 2003-09-08 12:49:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/boot98/compressed/misc.c 2003-09-25 19:15:46.000000000 -0700 @@ -132,8 +132,8 @@ static void *malloc(int size) { void *p; - if (size <0) error("Malloc error\n"); - if (free_mem_ptr <= 0) error("Memory error\n"); + if (size <0) error("Malloc error"); + if (free_mem_ptr <= 0) error("Memory error"); free_mem_ptr = (free_mem_ptr + 3) & ~3; /* Align */ @@ -141,7 +141,7 @@ static void *malloc(int size) free_mem_ptr += size; if (free_mem_ptr >= free_mem_end_ptr) - error("\nOut of memory\n"); + error("Out of memory"); return p; } @@ -232,7 +232,7 @@ static void* memcpy(void* __dest, __cons static int fill_inbuf(void) { if (insize != 0) { - error("ran out of input data\n"); + error("ran out of input data"); } inbuf = input_data; @@ -306,9 +306,9 @@ struct { static void setup_normal_output_buffer(void) { #ifdef STANDARD_MEMORY_BIOS_CALL - if (EXT_MEM_K < 1024) error("Less than 2MB of memory.\n"); + if (EXT_MEM_K < 1024) error("Less than 2MB of memory"); #else - if ((ALT_MEM_K > EXT_MEM_K ? ALT_MEM_K : EXT_MEM_K) < 1024) error("Less than 2MB of memory.\n"); + if ((ALT_MEM_K > EXT_MEM_K ? ALT_MEM_K : EXT_MEM_K) < 1024) error("Less than 2MB of memory"); #endif output_data = (char *)0x100000; /* Points to 1M */ free_mem_end_ptr = (long)real_mode; @@ -323,9 +323,9 @@ static void setup_output_buffer_if_we_ru { high_buffer_start = (uch *)(((ulg)&end) + HEAP_SIZE); #ifdef STANDARD_MEMORY_BIOS_CALL - if (EXT_MEM_K < (3*1024)) error("Less than 4MB of memory.\n"); + if (EXT_MEM_K < (3*1024)) error("Less than 4MB of memory"); #else - if ((ALT_MEM_K > EXT_MEM_K ? ALT_MEM_K : EXT_MEM_K) < (3*1024)) error("Less than 4MB of memory.\n"); + if ((ALT_MEM_K > EXT_MEM_K ? ALT_MEM_K : EXT_MEM_K) < (3*1024)) error("Less than 4MB of memory"); #endif mv->low_buffer_start = output_data = (char *)LOW_BUFFER_START; low_buffer_end = ((unsigned int)real_mode > LOW_BUFFER_MAX diff -prauN linux-2.6.0-test5/arch/i386/kernel/apic.c wli-2.6.0-test5-bk12-25/arch/i386/kernel/apic.c --- linux-2.6.0-test5/arch/i386/kernel/apic.c 2003-09-08 12:50:47.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/kernel/apic.c 2003-09-28 22:07:47.000000000 -0700 @@ -1069,7 +1069,8 @@ inline void smp_local_timer_interrupt(st * interrupt as well. Thus we cannot inline the local irq ... ] */ -void smp_apic_timer_interrupt(struct pt_regs regs) +struct pt_regs * IRQHANDLER(smp_apic_timer_interrupt(struct pt_regs* regs)); +struct pt_regs * smp_apic_timer_interrupt(struct pt_regs* regs) { int cpu = smp_processor_id(); @@ -1089,14 +1090,16 @@ void smp_apic_timer_interrupt(struct pt_ * interrupt lock, which is the WrongThing (tm) to do. */ irq_enter(); - smp_local_timer_interrupt(®s); + smp_local_timer_interrupt(regs); irq_exit(); + return regs; } /* * This interrupt should _never_ happen with our APIC/SMP architecture */ -asmlinkage void smp_spurious_interrupt(void) +struct pt_regs * IRQHANDLER(smp_spurious_interrupt(struct pt_regs* regs)); +struct pt_regs * smp_spurious_interrupt(struct pt_regs* regs) { unsigned long v; @@ -1114,13 +1117,15 @@ asmlinkage void smp_spurious_interrupt(v printk(KERN_INFO "spurious APIC interrupt on CPU#%d, should never happen.\n", smp_processor_id()); irq_exit(); + return regs; } /* * This interrupt should never happen with our APIC/SMP architecture */ -asmlinkage void smp_error_interrupt(void) +struct pt_regs * IRQHANDLER(smp_error_interrupt(struct pt_regs* regs)); +struct pt_regs * smp_error_interrupt(struct pt_regs* regs) { unsigned long v, v1; @@ -1145,6 +1150,7 @@ asmlinkage void smp_error_interrupt(void printk (KERN_INFO "APIC error on CPU%d: %02lx(%02lx)\n", smp_processor_id(), v , v1); irq_exit(); + return regs; } /* diff -prauN linux-2.6.0-test5/arch/i386/kernel/apm.c wli-2.6.0-test5-bk12-25/arch/i386/kernel/apm.c --- linux-2.6.0-test5/arch/i386/kernel/apm.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/kernel/apm.c 2003-09-25 19:15:46.000000000 -0700 @@ -2008,7 +2008,7 @@ static int __init apm_init(void) if (apm_proc) apm_proc->owner = THIS_MODULE; - kernel_thread(apm, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND | SIGCHLD); + kernel_thread(apm, NULL, CLONE_KERNEL | SIGCHLD); if (num_online_cpus() > 1 && !smp ) { printk(KERN_NOTICE diff -prauN linux-2.6.0-test5/arch/i386/kernel/cpu/common.c wli-2.6.0-test5-bk12-25/arch/i386/kernel/cpu/common.c --- linux-2.6.0-test5/arch/i386/kernel/cpu/common.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/kernel/cpu/common.c 2003-09-25 19:15:46.000000000 -0700 @@ -493,8 +493,8 @@ void __init cpu_init (void) */ memcpy(thread->tls_array, cpu_gdt_table[cpu], GDT_ENTRY_TLS_ENTRIES * 8); - __asm__ __volatile__("lgdt %0": "=m" (cpu_gdt_descr[cpu])); - __asm__ __volatile__("lidt %0": "=m" (idt_descr)); + __asm__ __volatile__("lgdt %0" : : "m" (cpu_gdt_descr[cpu])); + __asm__ __volatile__("lidt %0" : : "m" (idt_descr)); /* * Delete NT diff -prauN linux-2.6.0-test5/arch/i386/kernel/cpu/cpufreq/Kconfig wli-2.6.0-test5-bk12-25/arch/i386/kernel/cpu/cpufreq/Kconfig --- linux-2.6.0-test5/arch/i386/kernel/cpu/cpufreq/Kconfig 2003-09-08 12:49:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/kernel/cpu/cpufreq/Kconfig 2003-09-25 19:15:46.000000000 -0700 @@ -99,34 +99,46 @@ config X86_GX_SUSPMOD If in doubt, say N. +config X86_SPEEDSTEP_CENTRINO + tristate "Intel Enhanced SpeedStep" + depends on CPU_FREQ_TABLE + help + This adds the CPUFreq driver for Enhanced SpeedStep enabled + mobile CPUs. This means Intel Pentium M (Centrino) CPUs. + + For details, take a look at linux/Documentation/cpu-freq. + + If in doubt, say N. + config X86_SPEEDSTEP_ICH - tristate "Intel Speedstep" + tristate "Intel Speedstep on ICH-M chipsets (ioport interface)" depends on CPU_FREQ_TABLE help This adds the CPUFreq driver for certain mobile Intel Pentium III (Coppermine), all mobile Intel Pentium III-M (Tualatin) and all - mobile Intel Pentium 4 P4-Ms, with an Intel ICH2, ICH3, - or ICH4 southbridge. + mobile Intel Pentium 4 P4-M on systems which have an Intel ICH2, + ICH3 or ICH4 southbridge. For details, take a look at linux/Documentation/cpu-freq. If in doubt, say N. -config X86_SPEEDSTEP_CENTRINO - tristate "Intel Enhanced SpeedStep" - depends on CPU_FREQ_TABLE +config X86_SPEEDSTEP_SMI + tristate "Intel SpeedStep on 440BX/ZX/MX chipsets (SMI interface)" + depends on CPU_FREQ_TABLE && EXPERIMENTAL help - This adds the CPUFreq driver for Enhanced SpeedStep enabled - mobile CPUs. This means Intel Pentium M (Centrino) CPUs. - - For details, take a look at linux/Documentation/cpu-freq. - + This adds the CPUFreq driver for certain mobile Intel Pentium III + (Coppermine), all mobile Intel Pentium III-M (Tualatin) + on systems which have an Intel 440BX/ZX/MX southbridge. + + For details, take a look at linux/Documentation/cpu-freq. + If in doubt, say N. config X86_SPEEDSTEP_LIB - tristate - depends on X86_SPEEDSTEP_ICH - default X86_SPEEDSTEP_ICH + tristate + depends on (X86_SPEEDSTEP_ICH || X86_SPEEDSTEP_SMI) + default (X86_SPEEDSTEP_ICH || X86_SPEEDSTEP_SMI) config X86_P4_CLOCKMOD tristate "Intel Pentium 4 clock modulation" diff -prauN linux-2.6.0-test5/arch/i386/kernel/cpu/cpufreq/Makefile wli-2.6.0-test5-bk12-25/arch/i386/kernel/cpu/cpufreq/Makefile --- linux-2.6.0-test5/arch/i386/kernel/cpu/cpufreq/Makefile 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/kernel/cpu/cpufreq/Makefile 2003-09-25 19:15:46.000000000 -0700 @@ -9,6 +9,7 @@ obj-$(CONFIG_X86_ACPI_CPUFREQ) += acpi.o obj-$(CONFIG_X86_SPEEDSTEP_ICH) += speedstep-ich.o obj-$(CONFIG_X86_SPEEDSTEP_CENTRINO) += speedstep-centrino.o obj-$(CONFIG_X86_SPEEDSTEP_LIB) += speedstep-lib.o +obj-$(CONFIG_X86_SPEEDSTEP_SMI) += speedstep-smi.o ifdef CONFIG_X86_ACPI_CPUFREQ ifdef CONFIG_ACPI_DEBUG diff -prauN linux-2.6.0-test5/arch/i386/kernel/cpu/cpufreq/acpi.c wli-2.6.0-test5-bk12-25/arch/i386/kernel/cpu/cpufreq/acpi.c --- linux-2.6.0-test5/arch/i386/kernel/cpu/cpufreq/acpi.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/kernel/cpu/cpufreq/acpi.c 2003-09-25 19:15:46.000000000 -0700 @@ -24,6 +24,7 @@ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ +#include #include #include #include diff -prauN linux-2.6.0-test5/arch/i386/kernel/cpu/cpufreq/p4-clockmod.c wli-2.6.0-test5-bk12-25/arch/i386/kernel/cpu/cpufreq/p4-clockmod.c --- linux-2.6.0-test5/arch/i386/kernel/cpu/cpufreq/p4-clockmod.c 2003-09-08 12:50:27.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/kernel/cpu/cpufreq/p4-clockmod.c 2003-09-25 19:15:46.000000000 -0700 @@ -20,6 +20,7 @@ * */ +#include #include #include #include diff -prauN linux-2.6.0-test5/arch/i386/kernel/cpu/cpufreq/powernow-k7.c wli-2.6.0-test5-bk12-25/arch/i386/kernel/cpu/cpufreq/powernow-k7.c --- linux-2.6.0-test5/arch/i386/kernel/cpu/cpufreq/powernow-k7.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/kernel/cpu/cpufreq/powernow-k7.c 2003-09-25 19:15:46.000000000 -0700 @@ -14,6 +14,7 @@ * - We disable half multipliers if ACPI is used on A0 stepping CPUs. */ +#include #include #include #include @@ -191,10 +192,11 @@ static void change_FID(int fid) { union msr_fidvidctl fidvidctl; + rdmsrl (MSR_K7_FID_VID_CTL, fidvidctl.val); if (fidvidctl.bits.FID != fid) { - rdmsrl (MSR_K7_FID_VID_CTL, fidvidctl.val); fidvidctl.bits.SGTC = latency; fidvidctl.bits.FID = fid; + fidvidctl.bits.VIDC = 0; fidvidctl.bits.FIDC = 1; wrmsrl (MSR_K7_FID_VID_CTL, fidvidctl.val); } @@ -205,9 +207,11 @@ static void change_VID(int vid) { union msr_fidvidctl fidvidctl; + rdmsrl (MSR_K7_FID_VID_CTL, fidvidctl.val); if (fidvidctl.bits.VID != vid) { - rdmsrl (MSR_K7_FID_VID_CTL, fidvidctl.val); + fidvidctl.bits.SGTC = latency; fidvidctl.bits.VID = vid; + fidvidctl.bits.FIDC = 0; fidvidctl.bits.VIDC = 1; wrmsrl (MSR_K7_FID_VID_CTL, fidvidctl.val); } @@ -297,8 +301,14 @@ static int powernow_decode_bios (int max dprintk (" voltage regulator)\n"); latency = psb->settlingtime; + if (latency < 100) { + printk (KERN_INFO PFX "BIOS set settling time to %d microseconds." + "Should be at least 100. Correcting.\n", latency); + latency = 100; + } dprintk (KERN_INFO PFX "Settling Time: %d microseconds.\n", psb->settlingtime); dprintk (KERN_INFO PFX "Has %d PST tables. (Only dumping ones relevant to this CPU).\n", psb->numpst); + latency *= 100; /* SGTC needs to be in units of 10ns */ p += sizeof (struct psb_s); diff -prauN linux-2.6.0-test5/arch/i386/kernel/cpu/cpufreq/speedstep-smi.c wli-2.6.0-test5-bk12-25/arch/i386/kernel/cpu/cpufreq/speedstep-smi.c --- linux-2.6.0-test5/arch/i386/kernel/cpu/cpufreq/speedstep-smi.c 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/i386/kernel/cpu/cpufreq/speedstep-smi.c 2003-09-25 19:15:46.000000000 -0700 @@ -0,0 +1,362 @@ +/* + * Intel SpeedStep SMI driver. + * + * (C) 2003 Hiroshi Miura + * + * Licensed under the terms of the GNU GPL License version 2. + * + */ + + +/********************************************************************* + * SPEEDSTEP - DEFINITIONS * + *********************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "speedstep-lib.h" + +#define PFX "speedstep-smi: " + +/* speedstep system management interface port/command. + * + * These parameters are got from IST-SMI BIOS call. + * If user gives it, these are used. + * + */ +static int smi_port = 0; +static int smi_cmd = 0; +static unsigned int smi_sig = 0; + + +/* + * There are only two frequency states for each processor. Values + * are in kHz for the time being. + */ +static struct cpufreq_frequency_table speedstep_freqs[] = { + {SPEEDSTEP_HIGH, 0}, + {SPEEDSTEP_LOW, 0}, + {0, CPUFREQ_TABLE_END}, +}; + +#define GET_SPEEDSTEP_OWNER 0 +#define GET_SPEEDSTEP_STATE 1 +#define SET_SPEEDSTEP_STATE 2 +#define GET_SPEEDSTEP_FREQS 4 + +/* DEBUG + * Define it if you want verbose debug output, e.g. for bug reporting + */ +#define SPEEDSTEP_DEBUG + +#ifdef SPEEDSTEP_DEBUG +#define dprintk(msg...) printk(msg) +#else +#define dprintk(msg...) do { } while(0) +#endif + +/** + * speedstep_smi_ownership + */ +static int speedstep_smi_ownership (void) +{ + u32 command, result, magic; + u32 function = GET_SPEEDSTEP_OWNER; + unsigned char magic_data[] = "Copyright (c) 1999 Intel Corporation"; + + command = (smi_sig & 0xffffff00) | (smi_cmd & 0xff); + magic = virt_to_phys(magic_data); + + __asm__ __volatile__( + "out %%al, (%%dx)\n" + : "=D" (result) + : "a" (command), "b" (function), "c" (0), "d" (smi_port), "D" (0), "S" (magic) + ); + + return result; +} + +/** + * speedstep_smi_get_freqs - get SpeedStep preferred & current freq. + * + */ +static int speedstep_smi_get_freqs (unsigned int *low, unsigned int *high) +{ + u32 command, result, edi, high_mhz, low_mhz; + u32 state=0; + u32 function = GET_SPEEDSTEP_FREQS; + + command = (smi_sig & 0xffffff00) | (smi_cmd & 0xff); + + __asm__ __volatile__("movl $0, %%edi\n" + "out %%al, (%%dx)\n" + : "=a" (result), "=b" (high_mhz), "=c" (low_mhz), "=d" (state), "=D" (edi) + : "a" (command), "b" (function), "c" (state), "d" (smi_port), "S" (0) + ); + *high = high_mhz * 1000; + *low = low_mhz * 1000; + + return result; +} + +/** + * speedstep_get_state - set the SpeedStep state + * @state: processor frequency state (SPEEDSTEP_LOW or SPEEDSTEP_HIGH) + * + */ +static int speedstep_get_state (void) +{ + u32 function=GET_SPEEDSTEP_STATE; + u32 result, state, edi, command; + + command = (smi_sig & 0xffffff00) | (smi_cmd & 0xff); + + __asm__ __volatile__("movl $0, %%edi\n" + "out %%al, (%%dx)\n" + : "=a" (result), "=b" (state), "=D" (edi) + : "a" (command), "b" (function), "c" (0), "d" (smi_port), "S" (0) + ); + + return state; +} + +/** + * speedstep_set_state - set the SpeedStep state + * @state: new processor frequency state (SPEEDSTEP_LOW or SPEEDSTEP_HIGH) + * + */ +static void speedstep_set_state (unsigned int state, unsigned int notify) +{ + unsigned int old_state, result, command, new_state; + unsigned long flags; + struct cpufreq_freqs freqs; + unsigned int function=SET_SPEEDSTEP_STATE; + + if (state > 0x1) + return; + + old_state = speedstep_get_state(); + freqs.old = speedstep_freqs[old_state].frequency; + freqs.new = speedstep_freqs[state].frequency; + freqs.cpu = 0; /* speedstep.c is UP only driver */ + + if (old_state == state) + return; + + if (notify) + cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE); + + /* Disable IRQs */ + local_irq_save(flags); + + command = (smi_sig & 0xffffff00) | (smi_cmd & 0xff); + __asm__ __volatile__( + "movl $0, %%edi\n" + "out %%al, (%%dx)\n" + : "=b" (new_state), "=D" (result) + : "a" (command), "b" (function), "c" (state), "d" (smi_port), "S" (0) + ); + + /* enable IRQs */ + local_irq_restore(flags); + + if (new_state == state) { + dprintk(KERN_INFO "cpufreq: change to %u MHz succeded\n", (freqs.new / 1000)); + } else { + printk(KERN_ERR "cpufreq: change failed\n"); + } + + if (notify) + cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE); + + return; +} + + +/** + * speedstep_target - set a new CPUFreq policy + * @policy: new policy + * @target_freq: new freq + * @relation: + * + * Sets a new CPUFreq policy/freq. + */ +static int speedstep_target (struct cpufreq_policy *policy, + unsigned int target_freq, unsigned int relation) +{ + unsigned int newstate = 0; + + if (cpufreq_frequency_table_target(policy, &speedstep_freqs[0], target_freq, relation, &newstate)) + return -EINVAL; + + speedstep_set_state(newstate, 1); + + return 0; +} + + +/** + * speedstep_verify - verifies a new CPUFreq policy + * @freq: new policy + * + * Limit must be within speedstep_low_freq and speedstep_high_freq, with + * at least one border included. + */ +static int speedstep_verify (struct cpufreq_policy *policy) +{ + return cpufreq_frequency_table_verify(policy, &speedstep_freqs[0]); +} + + +static int speedstep_cpu_init(struct cpufreq_policy *policy) +{ + int result; + unsigned int speed,state; + + /* capability check */ + if (policy->cpu != 0) + return -ENODEV; + + result = speedstep_smi_ownership(); + + if (result) + dprintk(KERN_INFO "cpufreq: fails an aquiring ownership of a SMI interface.\n"); + + /* detect low and high frequency */ + result = speedstep_smi_get_freqs(&speedstep_freqs[SPEEDSTEP_LOW].frequency, + &speedstep_freqs[SPEEDSTEP_HIGH].frequency); + if (result) { + /* fall back to speedstep_lib.c dection mechanism: try both states out */ + unsigned int speedstep_processor = speedstep_detect_processor(); + + dprintk(KERN_INFO PFX "could not detect low and high frequencies by SMI call.\n"); + if (!speedstep_processor) + return -ENODEV; + + result = speedstep_get_freqs(speedstep_processor, + &speedstep_freqs[SPEEDSTEP_LOW].frequency, + &speedstep_freqs[SPEEDSTEP_HIGH].frequency, + &speedstep_set_state); + + if (result) { + dprintk(KERN_INFO PFX "could not detect two different speeds -- aborting.\n"); + return result; + } else + dprintk(KERN_INFO PFX "workaround worked.\n"); + } + + /* get current speed setting */ + state = speedstep_get_state(); + speed = speedstep_freqs[state].frequency; + + dprintk(KERN_INFO "cpufreq: currently at %s speed setting - %i MHz\n", + (speed == speedstep_freqs[SPEEDSTEP_LOW].frequency) ? "low" : "high", + (speed / 1000)); + + /* cpuinfo and default policy values */ + policy->governor = CPUFREQ_DEFAULT_GOVERNOR; + policy->cpuinfo.transition_latency = CPUFREQ_ETERNAL; + policy->cur = speed; + + return cpufreq_frequency_table_cpuinfo(policy, &speedstep_freqs[0]); +} + + +static int speedstep_resume(struct cpufreq_policy *policy) +{ + int result = speedstep_smi_ownership(); + + if (result) + dprintk(KERN_INFO "cpufreq: fails an aquiring ownership of a SMI interface.\n"); + + return result; +} + + +static struct cpufreq_driver speedstep_driver = { + .name = "speedstep-smi", + .verify = speedstep_verify, + .target = speedstep_target, + .init = speedstep_cpu_init, + .resume = speedstep_resume, +}; + +/** + * speedstep_init - initializes the SpeedStep CPUFreq driver + * + * Initializes the SpeedStep support. Returns -ENODEV on unsupported + * BIOS, -EINVAL on problems during initiatization, and zero on + * success. + */ +static int __init speedstep_init(void) +{ + struct cpuinfo_x86 *c = cpu_data; + + if (c->x86_vendor != X86_VENDOR_INTEL) { + printk (KERN_INFO PFX "No Intel CPU detected.\n"); + return -ENODEV; + } + + dprintk(KERN_DEBUG PFX "signature:0x%.8lx, command:0x%.8lx, event:0x%.8lx, perf_level:0x%.8lx.\n", + ist_info.signature, ist_info.command, ist_info.event, ist_info.perf_level); + + + /* Error if no IST-SMI BIOS or no PARM + sig= 'ISGE' aka 'Intel Speedstep Gate E' */ + if ((ist_info.signature != 0x47534943) && ( + (smi_port == 0) || (smi_cmd == 0))) + return -ENODEV; + + if (smi_sig == 1) + smi_sig = 0x47534943; + else + smi_sig = ist_info.signature; + + /* setup smi_port from MODLULE_PARM or BIOS */ + if ((smi_port > 0xff) || (smi_port < 0)) { + return -EINVAL; + } else if (smi_port == 0) { + smi_port = ist_info.command & 0xff; + } + + if ((smi_cmd > 0xff) || (smi_cmd < 0)) { + return -EINVAL; + } else if (smi_cmd == 0) { + smi_cmd = (ist_info.command >> 16) & 0xff; + } + + return cpufreq_register_driver(&speedstep_driver); +} + + +/** + * speedstep_exit - unregisters SpeedStep support + * + * Unregisters SpeedStep support. + */ +static void __exit speedstep_exit(void) +{ + cpufreq_unregister_driver(&speedstep_driver); +} + +module_param(smi_port, int, 0444); +module_param(smi_cmd, int, 0444); +module_param(smi_sig, uint, 0444); + +MODULE_PARM_DESC(smi_port, "Override the BIOS-given IST port with this value -- Intel's default setting is 0xb2"); +MODULE_PARM_DESC(smi_cmd, "Override the BIOS-given IST command with this value -- Intel's default setting is 0x82"); +MODULE_PARM_DESC(smi_sig, "Set to 1 to fake the IST signature when using the SMI interface."); + +MODULE_AUTHOR ("Hiroshi Miura"); +MODULE_DESCRIPTION ("Speedstep driver for IST applet SMI interface."); +MODULE_LICENSE ("GPL"); + +module_init(speedstep_init); +module_exit(speedstep_exit); diff -prauN linux-2.6.0-test5/arch/i386/kernel/cpu/intel.c wli-2.6.0-test5-bk12-25/arch/i386/kernel/cpu/intel.c --- linux-2.6.0-test5/arch/i386/kernel/cpu/intel.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/kernel/cpu/intel.c 2003-09-25 19:15:46.000000000 -0700 @@ -164,7 +164,7 @@ static void __init init_intel(struct cpu } #endif - + select_idle_routine(c); if (c->cpuid_level > 1) { /* supports eax=2 call */ int i, j, n; diff -prauN linux-2.6.0-test5/arch/i386/kernel/cpu/mcheck/p4.c wli-2.6.0-test5-bk12-25/arch/i386/kernel/cpu/mcheck/p4.c --- linux-2.6.0-test5/arch/i386/kernel/cpu/mcheck/p4.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/kernel/cpu/mcheck/p4.c 2003-09-28 22:12:46.000000000 -0700 @@ -61,11 +61,13 @@ static void intel_thermal_interrupt(stru /* Thermal interrupt handler for this CPU setup */ static void (*vendor_thermal_interrupt)(struct pt_regs *regs) = unexpected_thermal_interrupt; -asmlinkage void smp_thermal_interrupt(struct pt_regs regs) +struct pt_regs * IRQHANDLER(smp_thermal_interrupt(struct pt_regs* regs)); +struct pt_regs * smp_thermal_interrupt(struct pt_regs* regs) { irq_enter(); - vendor_thermal_interrupt(®s); + vendor_thermal_interrupt(regs); irq_exit(); + return regs; } /* P4/Xeon Thermal regulation detect and init */ diff -prauN linux-2.6.0-test5/arch/i386/kernel/cpu/mtrr/if.c wli-2.6.0-test5-bk12-25/arch/i386/kernel/cpu/mtrr/if.c --- linux-2.6.0-test5/arch/i386/kernel/cpu/mtrr/if.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/kernel/cpu/mtrr/if.c 2003-09-25 19:15:46.000000000 -0700 @@ -13,7 +13,6 @@ /* RED-PEN: this is accessed without any locking */ extern unsigned int *usage_table; -static int mtrr_seq_show(struct seq_file *seq, void *offset); #define FILE_FCOUNT(f) (((struct seq_file *)((f)->private_data))->private) @@ -33,6 +32,8 @@ char *mtrr_attrib_to_str(int x) return (x <= 6) ? mtrr_strings[x] : "?"; } +#ifdef CONFIG_PROC_FS + static int mtrr_file_add(unsigned long base, unsigned long size, unsigned int type, char increment, struct file *file, int page) @@ -291,6 +292,8 @@ mtrr_close(struct inode *ino, struct fil return single_release(ino, file); } +static int mtrr_seq_show(struct seq_file *seq, void *offset); + static int mtrr_open(struct inode *inode, struct file *file) { if (!mtrr_if) @@ -310,11 +313,9 @@ static struct file_operations mtrr_fops .release = mtrr_close, }; -# ifdef CONFIG_PROC_FS static struct proc_dir_entry *proc_root_mtrr; -# endif /* CONFIG_PROC_FS */ static int mtrr_seq_show(struct seq_file *seq, void *offset) { @@ -351,15 +352,14 @@ static int mtrr_seq_show(struct seq_file static int __init mtrr_if_init(void) { -#ifdef CONFIG_PROC_FS proc_root_mtrr = create_proc_entry("mtrr", S_IWUSR | S_IRUGO, &proc_root); if (proc_root_mtrr) { proc_root_mtrr->owner = THIS_MODULE; proc_root_mtrr->proc_fops = &mtrr_fops; } -#endif return 0; } arch_initcall(mtrr_if_init); +#endif /* CONFIG_PROC_FS */ diff -prauN linux-2.6.0-test5/arch/i386/kernel/dmi_scan.c wli-2.6.0-test5-bk12-25/arch/i386/kernel/dmi_scan.c --- linux-2.6.0-test5/arch/i386/kernel/dmi_scan.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/kernel/dmi_scan.c 2003-09-25 19:15:46.000000000 -0700 @@ -205,7 +205,7 @@ struct dmi_blacklist /* * Reboot options and system auto-detection code provided by - * Dell Computer Corporation so their systems "just work". :-) + * Dell Inc. so their systems "just work". :-) */ /* diff -prauN linux-2.6.0-test5/arch/i386/kernel/edd.c wli-2.6.0-test5-bk12-25/arch/i386/kernel/edd.c --- linux-2.6.0-test5/arch/i386/kernel/edd.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/kernel/edd.c 2003-09-25 19:15:46.000000000 -0700 @@ -1,6 +1,6 @@ /* * linux/arch/i386/kernel/edd.c - * Copyright (C) 2002, 2003 Dell Computer Corporation + * Copyright (C) 2002, 2003 Dell Inc. * by Matt Domsch * * BIOS Enhanced Disk Drive Services (EDD) diff -prauN linux-2.6.0-test5/arch/i386/kernel/entry.S wli-2.6.0-test5-bk12-25/arch/i386/kernel/entry.S --- linux-2.6.0-test5/arch/i386/kernel/entry.S 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/kernel/entry.S 2003-09-28 22:19:53.000000000 -0700 @@ -160,7 +160,7 @@ do_lcall: movl %eax,EFLAGS(%ebp) # movl %edx,EIP(%ebp) # Now we move them to their "normal" places movl %ecx,CS(%ebp) # - andl $-8192, %ebp # GET_THREAD_INFO + GET_THREAD_INFO_WITH_ESP(%ebp) # GET_THREAD_INFO movl TI_EXEC_DOMAIN(%ebp), %edx # Get the execution domain call *4(%edx) # Call the lcall7 handler for the domain addl $4, %esp @@ -394,17 +394,78 @@ ENTRY(irq_entries_start) vector=vector+1 .endr + +# lets play optimizing compiler... +#ifdef CONFIG_X86_CMOV +#define COND_MOVE cmovnz %esi,%esp; +#else +#define COND_MOVE \ + jz 1f; \ + mov %esi,%esp; \ +1: +#endif + +# These macros will switch you to, and from a per-cpu interrupt stack +# They take the pt_regs arg and move it from the normal place on the +# stack to %eax. Any handler function can retrieve it using regparm(1). +# The handlers are expected to return the stack to switch back to in +# the same register. +# +# This means that the irq handlers need to return their arg +# +# SWITCH_TO_IRQSTACK clobbers %ebx, %ecx, %edx, %esi +# old stack gets put in %eax + +.macro SWITCH_TO_IRQSTACK + GET_THREAD_INFO(%ebx); + movl TI_IRQ_STACK(%ebx),%ecx; + movl TI_TASK(%ebx),%edx; + movl %esp,%eax; + + # %ecx+THREAD_SIZE is next stack -4 keeps us in the right one + leal (THREAD_SIZE-4)(%ecx),%esi; + + # is there a valid irq_stack? + testl %ecx,%ecx; + COND_MOVE; + + # update the task pointer in the irq stack + GET_THREAD_INFO(%esi); + movl %edx,TI_TASK(%esi); + + # update the preempt count in the irq stack + movl TI_PRE_COUNT(%ebx),%ecx; + movl %ecx,TI_PRE_COUNT(%esi); +.endm + +# copy flags from the irq stack back into the task's thread_info +# %esi is saved over the irq handler call and contains the irq stack's +# thread_info pointer +# %eax was returned from the handler, as described above +# %ebx contains the original thread_info pointer + +.macro RESTORE_FROM_IRQSTACK + movl %eax,%esp; + movl TI_FLAGS(%esi),%eax; + movl $0,TI_FLAGS(%esi); + LOCK orl %eax,TI_FLAGS(%ebx); +.endm + ALIGN common_interrupt: SAVE_ALL + SWITCH_TO_IRQSTACK call do_IRQ + RESTORE_FROM_IRQSTACK jmp ret_from_intr #define BUILD_INTERRUPT(name, nr) \ ENTRY(name) \ pushl $nr-256; \ SAVE_ALL \ - call smp_/**/name; \ + SWITCH_TO_IRQSTACK; \ + call smp_/**/name; \ + RESTORE_FROM_IRQSTACK; \ jmp ret_from_intr; /* The include is where all of the SMP etc. interrupts come from */ @@ -604,6 +665,61 @@ ENTRY(spurious_interrupt_bug) pushl $do_spurious_interrupt_bug jmp error_code + +#ifdef CONFIG_X86_STACK_CHECK +.data + .globl stack_overflowed +stack_overflowed: + .long 0 +.text + +ENTRY(mcount) + push %eax + movl $(THREAD_SIZE - 1),%eax + andl %esp,%eax + cmpl $STACK_WARN,%eax /* more than half the stack is used*/ + jle 1f +2: + popl %eax + ret +1: + lock; btsl $0,stack_overflowed + jc 2b + + # switch to overflow stack + movl %esp,%eax + movl $(stack_overflow_stack + THREAD_SIZE - 4),%esp + + pushf + cli + pushl %eax + + # push eip then esp of error for stack_overflow_panic + pushl 4(%eax) + pushl %eax + + # update the task pointer and cpu in the overflow stack's thread_info. + GET_THREAD_INFO_WITH_ESP(%eax) + movl TI_TASK(%eax),%ebx + movl %ebx,stack_overflow_stack+TI_TASK + movl TI_CPU(%eax),%ebx + movl %ebx,stack_overflow_stack+TI_CPU + + call stack_overflow + + # pop off call arguments + addl $8,%esp + + popl %eax + popf + movl %eax,%esp + popl %eax + movl $0,stack_overflowed + ret + +#warning stack check enabled +#endif + .data ENTRY(sys_call_table) .long sys_restart_syscall /* 0 - old "setup()" system call, used for restarting */ diff -prauN linux-2.6.0-test5/arch/i386/kernel/head.S wli-2.6.0-test5-bk12-25/arch/i386/kernel/head.S --- linux-2.6.0-test5/arch/i386/kernel/head.S 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/kernel/head.S 2003-09-28 22:06:44.000000000 -0700 @@ -16,6 +16,7 @@ #include #include #include +#include #define OLD_CL_MAGIC_ADDR 0x90020 #define OLD_CL_MAGIC 0xA33F @@ -325,7 +326,7 @@ rp_sidt: ret ENTRY(stack_start) - .long init_thread_union+8192 + .long init_thread_union+THREAD_SIZE .long __BOOT_DS /* This is the default interrupt "handler" :-) */ diff -prauN linux-2.6.0-test5/arch/i386/kernel/i386_ksyms.c wli-2.6.0-test5-bk12-25/arch/i386/kernel/i386_ksyms.c --- linux-2.6.0-test5/arch/i386/kernel/i386_ksyms.c 2003-09-08 12:50:42.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/kernel/i386_ksyms.c 2003-09-28 22:19:53.000000000 -0700 @@ -33,6 +33,7 @@ #include #include #include +#include extern void dump_thread(struct pt_regs *, struct user *); extern spinlock_t rtc_lock; @@ -62,9 +63,6 @@ extern unsigned long get_cmos_time(void) /* platform dependent support */ EXPORT_SYMBOL(boot_cpu_data); -#ifdef CONFIG_EISA -EXPORT_SYMBOL(EISA_bus); -#endif EXPORT_SYMBOL(MCA_bus); #ifdef CONFIG_DISCONTIGMEM EXPORT_SYMBOL(node_data); @@ -209,3 +207,12 @@ EXPORT_SYMBOL(kmap_atomic_to_page); EXPORT_SYMBOL(edd); EXPORT_SYMBOL(eddnr); #endif + +#if defined(CONFIG_X86_SPEEDSTEP_SMI) || defined(CONFIG_X86_SPEEDSTEP_SMI_MODULE) +EXPORT_SYMBOL(ist_info); +#endif + +#ifdef CONFIG_X86_STACK_CHECK +extern void mcount(void); +EXPORT_SYMBOL(mcount); +#endif diff -prauN linux-2.6.0-test5/arch/i386/kernel/init_task.c wli-2.6.0-test5-bk12-25/arch/i386/kernel/init_task.c --- linux-2.6.0-test5/arch/i386/kernel/init_task.c 2003-09-08 12:50:33.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/kernel/init_task.c 2003-09-28 22:19:53.000000000 -0700 @@ -14,6 +14,14 @@ static struct signal_struct init_signals static struct sighand_struct init_sighand = INIT_SIGHAND(init_sighand); struct mm_struct init_mm = INIT_MM(init_mm); +union thread_union init_irq_union + __attribute__((__section__(".data.init_task"))); + +#ifdef CONFIG_X86_STACK_CHECK +union thread_union stack_overflow_stack + __attribute__((__section__(".data.init_task"))); +#endif + /* * Initial thread structure. * diff -prauN linux-2.6.0-test5/arch/i386/kernel/io_apic.c wli-2.6.0-test5-bk12-25/arch/i386/kernel/io_apic.c --- linux-2.6.0-test5/arch/i386/kernel/io_apic.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/kernel/io_apic.c 2003-09-25 19:15:46.000000000 -0700 @@ -1143,6 +1143,7 @@ int irq_vector[NR_IRQS] = { FIRST_DEVICE static int __init assign_irq_vector(int irq) { static int current_vector = FIRST_DEVICE_VECTOR, offset = 0; + BUG_ON(irq >= NR_IRQS); if (IO_APIC_VECTOR(irq) > 0) return IO_APIC_VECTOR(irq); next: @@ -1652,6 +1653,10 @@ static void __init setup_ioapic_ids_from mp_ioapics[apic].mpc_apicid = reg_00.bits.ID; } + /* Don't check I/O APIC IDs for some xAPIC systems. They have + * no meaning without the serial APIC bus. */ + if (NO_IOAPIC_CHECK) + continue; /* * Sanity check, is the ID really free? Every APIC in a * system must have a unique ID or we get lots of nice diff -prauN linux-2.6.0-test5/arch/i386/kernel/irq.c wli-2.6.0-test5-bk12-25/arch/i386/kernel/irq.c --- linux-2.6.0-test5/arch/i386/kernel/irq.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/kernel/irq.c 2003-09-28 22:29:13.000000000 -0700 @@ -401,7 +401,8 @@ void enable_irq(unsigned int irq) * SMP cross-CPU interrupts have their own specific * handlers). */ -asmlinkage unsigned int do_IRQ(struct pt_regs regs) +struct pt_regs * IRQHANDLER(do_IRQ(struct pt_regs *regs)); +struct pt_regs * do_IRQ(struct pt_regs *regs) { /* * We ack quickly, we don't want the irq controller @@ -413,7 +414,7 @@ asmlinkage unsigned int do_IRQ(struct pt * 0 return value means that this irq is already being * handled by some other CPU. (or is disabled) */ - int irq = regs.orig_eax & 0xff; /* high bits used in ret_from_ code */ + int irq = regs->orig_eax & 0xff; /* high bits used in ret_from_ code */ irq_desc_t *desc = irq_desc + irq; struct irqaction * action; unsigned int status; @@ -426,7 +427,7 @@ asmlinkage unsigned int do_IRQ(struct pt long esp; __asm__ __volatile__("andl %%esp,%0" : - "=r" (esp) : "0" (8191)); + "=r" (esp) : "0" (THREAD_SIZE - 1)); if (unlikely(esp < (sizeof(struct thread_info) + 1024))) { printk("do_IRQ: stack overflow: %ld\n", esp - sizeof(struct thread_info)); @@ -479,7 +480,7 @@ asmlinkage unsigned int do_IRQ(struct pt irqreturn_t action_ret; spin_unlock(&desc->lock); - action_ret = handle_IRQ_event(irq, ®s, action); + action_ret = handle_IRQ_event(irq, regs, action); spin_lock(&desc->lock); if (!noirqdebug) note_interrupt(irq, desc, action_ret); @@ -499,7 +500,7 @@ out: irq_exit(); - return 1; + return regs; } /** diff -prauN linux-2.6.0-test5/arch/i386/kernel/mpparse.c wli-2.6.0-test5-bk12-25/arch/i386/kernel/mpparse.c --- linux-2.6.0-test5/arch/i386/kernel/mpparse.c 2003-09-08 12:50:00.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/kernel/mpparse.c 2003-09-25 19:15:46.000000000 -0700 @@ -167,6 +167,11 @@ void __init MP_processor_info (struct mp boot_cpu_logical_apicid = apicid; } + if (num_processors >= NR_CPUS) { + printk(KERN_WARNING "NR_CPUS limit of %i reached. Cannot " + "boot CPU(apicid 0x%d).\n", NR_CPUS, m->mpc_apicid); + return; + } num_processors++; if (MAX_APICS - m->mpc_apicid <= 0) { diff -prauN linux-2.6.0-test5/arch/i386/kernel/numaq.c wli-2.6.0-test5-bk12-25/arch/i386/kernel/numaq.c --- linux-2.6.0-test5/arch/i386/kernel/numaq.c 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/kernel/numaq.c 2003-09-25 19:15:46.000000000 -0700 @@ -99,8 +99,14 @@ static void __init initialize_physnode_m } } -void __init get_memcfg_numaq(void) +/* + * Unlike Summit, we don't really care to let the NUMA-Q + * fall back to flat mode. Don't compile for NUMA-Q + * unless you really need it! + */ +int __init get_memcfg_numaq(void) { smp_dump_qct(); initialize_physnode_map(); + return 1; } diff -prauN linux-2.6.0-test5/arch/i386/kernel/process.c wli-2.6.0-test5-bk12-25/arch/i386/kernel/process.c --- linux-2.6.0-test5/arch/i386/kernel/process.c 2003-09-08 12:49:50.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/kernel/process.c 2003-09-28 22:29:13.000000000 -0700 @@ -151,11 +151,57 @@ void cpu_idle (void) } } +/* + * This uses new MONITOR/MWAIT instructions on P4 processors with PNI, + * which can obviate IPI to trigger checking of need_resched. + * We execute MONITOR against need_resched and enter optimized wait state + * through MWAIT. Whenever someone changes need_resched, we would be woken + * up from MWAIT (without an IPI). + */ +static void mwait_idle(void) +{ + local_irq_enable(); + + if (!need_resched()) { + set_thread_flag(TIF_POLLING_NRFLAG); + do { + __monitor((void *)¤t_thread_info()->flags, 0, 0); + if (need_resched()) + break; + __mwait(0, 0); + } while (!need_resched()); + clear_thread_flag(TIF_POLLING_NRFLAG); + } +} + +void __init select_idle_routine(const struct cpuinfo_x86 *c) +{ + if (cpu_has(c, X86_FEATURE_MWAIT)) { + printk("monitor/mwait feature present.\n"); + /* + * Skip, if setup has overridden idle. + * Also, take care of system with asymmetric CPUs. + * Use, mwait_idle only if all cpus support it. + * If not, we fallback to default_idle() + */ + if (!pm_idle) { + printk("using mwait in idle threads.\n"); + pm_idle = mwait_idle; + } + return; + } + pm_idle = default_idle; + return; +} + static int __init idle_setup (char *str) { if (!strncmp(str, "poll", 4)) { printk("using polling idle threads.\n"); pm_idle = poll_idle; + } else if (!strncmp(str, "halt", 4)) { + printk("using halt in idle threads.\n"); + pm_idle = default_idle; } return 1; @@ -163,7 +209,25 @@ static int __init idle_setup (char *str) __setup("idle=", idle_setup); -void show_regs(struct pt_regs * regs) +void stack_overflow(unsigned long esp, unsigned long eip) +{ + int panicing = ((esp&(THREAD_SIZE-1)) <= STACK_PANIC); + + printk( "esp: 0x%lx masked: 0x%lx STACK_PANIC:0x%lx %d %d\n", + esp, (esp&(THREAD_SIZE-1)), STACK_PANIC, (((esp&(THREAD_SIZE-1)) <= STACK_PANIC)), panicing ); + + if (panicing) + print_symbol("stack overflow from %s\n", eip); + else + print_symbol("excessive stack use from %s\n", eip); + printk("esp: %p\n", (void*)esp); + show_trace(NULL, (void*)esp); + + if (panicing) + panic("stack overflow\n"); +} + +asmlinkage void show_regs(struct pt_regs * regs) { unsigned long cr0 = 0L, cr2 = 0L, cr3 = 0L, cr4 = 0L; @@ -451,7 +515,7 @@ struct task_struct * __switch_to(struct struct tss_struct *tss = init_tss + cpu; /* never put a printk in __switch_to... printk() calls wake_up*() indirectly */ - + next_p->thread_info->irq_stack = prev_p->thread_info->irq_stack; __unlazy_fpu(prev_p); /* diff -prauN linux-2.6.0-test5/arch/i386/kernel/reboot.c wli-2.6.0-test5-bk12-25/arch/i386/kernel/reboot.c --- linux-2.6.0-test5/arch/i386/kernel/reboot.c 2003-09-08 12:49:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/kernel/reboot.c 2003-09-25 19:15:46.000000000 -0700 @@ -251,7 +251,7 @@ void machine_restart(char * __unused) * other OSs see a clean IRQ state. */ smp_send_stop(); -#elif CONFIG_X86_LOCAL_APIC +#elif defined(CONFIG_X86_LOCAL_APIC) if (cpu_has_apic) { local_irq_disable(); disable_local_APIC(); diff -prauN linux-2.6.0-test5/arch/i386/kernel/setup.c wli-2.6.0-test5-bk12-25/arch/i386/kernel/setup.c --- linux-2.6.0-test5/arch/i386/kernel/setup.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/kernel/setup.c 2003-09-25 19:15:46.000000000 -0700 @@ -44,6 +44,7 @@ #include #include #include +#include #include "setup_arch_pre.h" #include "mach_resources.h" @@ -102,6 +103,7 @@ struct sys_desc_table_struct { unsigned char table[0]; }; struct edid_info edid_info; +struct ist_info ist_info; struct e820map e820; unsigned char aux_device_present; @@ -955,11 +957,12 @@ void __init setup_arch(char **cmdline_p) pre_setup_arch_hook(); early_cpu_init(); - ROOT_DEV = ORIG_ROOT_DEV; + ROOT_DEV = old_decode_dev(ORIG_ROOT_DEV); drive_info = DRIVE_INFO; screen_info = SCREEN_INFO; edid_info = EDID_INFO; apm_info.bios = APM_BIOS_INFO; + ist_info = IST_INFO; saved_videomode = VIDEO_MODE; printk("Video mode to be used for restore is %lx\n", saved_videomode); if( SYS_DESC_TABLE.length != 0 ) { diff -prauN linux-2.6.0-test5/arch/i386/kernel/smp.c wli-2.6.0-test5-bk12-25/arch/i386/kernel/smp.c --- linux-2.6.0-test5/arch/i386/kernel/smp.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/kernel/smp.c 2003-09-28 22:07:47.000000000 -0700 @@ -308,7 +308,8 @@ static inline void leave_mm (unsigned lo * 2) Leave the mm if we are in the lazy tlb mode. */ -asmlinkage void smp_invalidate_interrupt (void) +struct pt_regs * IRQHANDLER(smp_invalidate_interrupt(struct pt_regs *regs)); +struct pt_regs * smp_invalidate_interrupt(struct pt_regs *regs) { unsigned long cpu; @@ -340,6 +341,7 @@ asmlinkage void smp_invalidate_interrupt smp_mb__after_clear_bit(); out: put_cpu_no_resched(); + return regs; } static void flush_tlb_others(cpumask_t cpumask, struct mm_struct *mm, @@ -576,12 +578,15 @@ void smp_send_stop(void) * all the work is done automatically when * we return from the interrupt. */ -asmlinkage void smp_reschedule_interrupt(void) +struct pt_regs *IRQHANDLER(smp_reschedule_interrupt(struct pt_regs *)); +struct pt_regs *smp_reschedule_interrupt(struct pt_regs *regs) { ack_APIC_irq(); + return regs; } -asmlinkage void smp_call_function_interrupt(void) +struct pt_regs *IRQHANDLER(smp_call_function_interrupt(struct pt_regs *)); +struct pt_regs *smp_call_function_interrupt(struct pt_regs *regs) { void (*func) (void *info) = call_data->func; void *info = call_data->info; @@ -605,5 +610,6 @@ asmlinkage void smp_call_function_interr mb(); atomic_inc(&call_data->finished); } + return regs; } diff -prauN linux-2.6.0-test5/arch/i386/kernel/smpboot.c wli-2.6.0-test5-bk12-25/arch/i386/kernel/smpboot.c --- linux-2.6.0-test5/arch/i386/kernel/smpboot.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/kernel/smpboot.c 2003-09-29 01:07:31.000000000 -0700 @@ -71,6 +71,11 @@ static cpumask_t smp_commenced_mask; /* Per CPU bogomips and other parameters */ struct cpuinfo_x86 cpu_data[NR_CPUS] __cacheline_aligned; +/* Per CPU interrupt stacks */ +extern union thread_union init_irq_union; +union thread_union *irq_stacks[NR_CPUS] __cacheline_aligned = + { &init_irq_union, }; + /* Set when the idlers are all forked */ int smp_threads_ready; @@ -499,8 +504,8 @@ static struct task_struct * __init fork_ #ifdef CONFIG_NUMA /* which logical CPUs are on which nodes */ -cpumask_t node_2_cpu_mask[MAX_NR_NODES] = - { [0 ... MAX_NR_NODES-1] = CPU_MASK_NONE }; +cpumask_t node_2_cpu_mask[MAX_NUMNODES] = + { [0 ... MAX_NUMNODES-1] = CPU_MASK_NONE }; /* which node each logical CPU is on */ int cpu_2_node[NR_CPUS] = { [0 ... NR_CPUS-1] = 0 }; @@ -518,7 +523,7 @@ static inline void unmap_cpu_to_node(int int node; printk("Unmapping cpu %d from all nodes\n", cpu); - for (node = 0; node < MAX_NR_NODES; node ++) + for (node = 0; node < MAX_NUMNODES; node ++) cpu_clear(cpu, node_2_cpu_mask[node]); cpu_2_node[cpu] = -1; } @@ -770,6 +775,24 @@ wakeup_secondary_cpu(int phys_apicid, un } #endif /* WAKE_SECONDARY_VIA_INIT */ +static void __init setup_irq_stack(task_t *task, int cpu) +{ + unsigned long stack; + + stack = __get_free_pages(GFP_KERNEL, THREAD_ORDER); + if (!task) + panic("Cannot allocate irq stack\n"); + irq_stacks[cpu] = (void *)stack; + memset(irq_stacks[cpu], 0, THREAD_SIZE); + irq_stacks[cpu]->thread_info.cpu = cpu; + irq_stacks[cpu]->thread_info.preempt_count = 1; + task->thread_info->irq_stack = &irq_stacks[cpu]->thread_info; + /* + * If we want to make the irq stack more than one unit + * deep, we can chain them off the irq_stack pointer here. + */ +} + extern cpumask_t cpu_initialized; static int __init do_boot_cpu(int apicid) @@ -793,6 +816,7 @@ static int __init do_boot_cpu(int apicid idle = fork_by_hand(); if (IS_ERR(idle)) panic("failed fork for CPU %d", cpu); + setup_irq_stack(idle, cpu); wake_up_forked_process(idle); /* @@ -915,13 +939,13 @@ static void smp_tune_scheduling (void) cacheflush_time = (cpu_khz>>10) * (cachesize<<10) / bandwidth; } - cache_decay_ticks = (long)cacheflush_time/cpu_khz * HZ / 1000; + cache_decay_ticks = (long)cacheflush_time/cpu_khz + 1; printk("per-CPU timeslice cutoff: %ld.%02ld usecs.\n", (long)cacheflush_time/(cpu_khz/1000), ((long)cacheflush_time*100/(cpu_khz/1000)) % 100); printk("task migration cache decay timeout: %ld msecs.\n", - (cache_decay_ticks + 1) * 1000 / HZ); + cache_decay_ticks); } /* diff -prauN linux-2.6.0-test5/arch/i386/kernel/srat.c wli-2.6.0-test5-bk12-25/arch/i386/kernel/srat.c --- linux-2.6.0-test5/arch/i386/kernel/srat.c 2003-09-08 12:49:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/kernel/srat.c 2003-09-25 19:15:46.000000000 -0700 @@ -239,6 +239,11 @@ static int __init acpi20_parse_srat(stru } } + if (num_memory_chunks == 0) { + printk("could not finy any ACPI SRAT memory areas.\n"); + goto out_fail; + } + /* Calculate total number of nodes in system from PXM bitmap and create * a set of sequential node IDs starting at zero. (ACPI doesn't seem * to specify the range of _PXM values.) @@ -295,10 +300,12 @@ static int __init acpi20_parse_srat(stru } } } + return 1; +out_fail: return 0; } -void __init get_memcfg_from_srat(void) +int __init get_memcfg_from_srat(void) { struct acpi_table_header *header = NULL; struct acpi_table_rsdp *rsdp = NULL; @@ -316,11 +323,11 @@ void __init get_memcfg_from_srat(void) (u32)rsdp_address->pointer.physical; } else { printk("%s: rsdp_address is not a physical pointer\n", __FUNCTION__); - return; + goto out_err; } if (!rsdp) { printk("%s: Didn't find ACPI root!\n", __FUNCTION__); - return; + goto out_err; } printk(KERN_INFO "%.8s v%d [%.6s]\n", rsdp->signature, rsdp->revision, @@ -328,7 +335,7 @@ void __init get_memcfg_from_srat(void) if (strncmp(rsdp->signature, RSDP_SIG,strlen(RSDP_SIG))) { printk(KERN_WARNING "%s: RSDP table signature incorrect\n", __FUNCTION__); - return; + goto out_err; } rsdt = (struct acpi_table_rsdt *) @@ -338,14 +345,14 @@ void __init get_memcfg_from_srat(void) printk(KERN_WARNING "%s: ACPI: Invalid root system description tables (RSDT)\n", __FUNCTION__); - return; + goto out_err; } header = & rsdt->header; if (strncmp(header->signature, RSDT_SIG, strlen(RSDT_SIG))) { printk(KERN_WARNING "ACPI: RSDT signature incorrect\n"); - return; + goto out_err; } /* @@ -356,15 +363,18 @@ void __init get_memcfg_from_srat(void) */ tables = (header->length - sizeof(struct acpi_table_header)) / 4; + if (!tables) + goto out_err; + memcpy(&saved_rsdt, rsdt, sizeof(saved_rsdt)); if (saved_rsdt.header.length > sizeof(saved_rsdt)) { printk(KERN_WARNING "ACPI: Too big length in RSDT: %d\n", saved_rsdt.header.length); - return; + goto out_err; } -printk("Begin table scan....\n"); + printk("Begin SRAT table scan....\n"); for (i = 0; i < tables; i++) { /* Map in header, then map in full table length. */ @@ -379,10 +389,13 @@ printk("Begin table scan....\n"); if (strncmp((char *) &header->signature, "SRAT", 4)) continue; - acpi20_parse_srat((struct acpi_table_srat *)header); + /* we've found the srat table. don't need to look at any more tables */ - break; + return acpi20_parse_srat((struct acpi_table_srat *)header); } +out_err: + printk("failed to get NUMA memory information from SRAT table\n"); + return 0; } /* For each node run the memory list to determine whether there are diff -prauN linux-2.6.0-test5/arch/i386/kernel/timers/Makefile wli-2.6.0-test5-bk12-25/arch/i386/kernel/timers/Makefile --- linux-2.6.0-test5/arch/i386/kernel/timers/Makefile 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/kernel/timers/Makefile 2003-09-25 19:15:46.000000000 -0700 @@ -2,7 +2,7 @@ # Makefile for x86 timers # -obj-y := timer.o timer_none.o timer_tsc.o timer_pit.o +obj-y := timer.o timer_none.o timer_tsc.o timer_pit.o common.o obj-$(CONFIG_X86_CYCLONE_TIMER) += timer_cyclone.o obj-$(CONFIG_HPET_TIMER) += timer_hpet.o diff -prauN linux-2.6.0-test5/arch/i386/kernel/timers/common.c wli-2.6.0-test5-bk12-25/arch/i386/kernel/timers/common.c --- linux-2.6.0-test5/arch/i386/kernel/timers/common.c 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/i386/kernel/timers/common.c 2003-09-25 19:15:46.000000000 -0700 @@ -0,0 +1,139 @@ +/* + * Common functions used across the timers go here + */ + +#include +#include +#include + +#include +#include +#include + +#include "mach_timer.h" + +/* ------ Calibrate the TSC ------- + * Return 2^32 * (1 / (TSC clocks per usec)) for do_fast_gettimeoffset(). + * Too much 64-bit arithmetic here to do this cleanly in C, and for + * accuracy's sake we want to keep the overhead on the CTC speaker (channel 2) + * output busy loop as low as possible. We avoid reading the CTC registers + * directly because of the awkward 8-bit access mechanism of the 82C54 + * device. + */ + +#define CALIBRATE_TIME (5 * 1000020/HZ) + +unsigned long __init calibrate_tsc(void) +{ + mach_prepare_counter(); + + { + unsigned long startlow, starthigh; + unsigned long endlow, endhigh; + unsigned long count; + + rdtsc(startlow,starthigh); + mach_countup(&count); + rdtsc(endlow,endhigh); + + + /* Error: ECTCNEVERSET */ + if (count <= 1) + goto bad_ctc; + + /* 64-bit subtract - gcc just messes up with long longs */ + __asm__("subl %2,%0\n\t" + "sbbl %3,%1" + :"=a" (endlow), "=d" (endhigh) + :"g" (startlow), "g" (starthigh), + "0" (endlow), "1" (endhigh)); + + /* Error: ECPUTOOFAST */ + if (endhigh) + goto bad_ctc; + + /* Error: ECPUTOOSLOW */ + if (endlow <= CALIBRATE_TIME) + goto bad_ctc; + + __asm__("divl %2" + :"=a" (endlow), "=d" (endhigh) + :"r" (endlow), "0" (0), "1" (CALIBRATE_TIME)); + + return endlow; + } + + /* + * The CTC wasn't reliable: we got a hit on the very first read, + * or the CPU was so fast/slow that the quotient wouldn't fit in + * 32 bits.. + */ +bad_ctc: + return 0; +} + +#ifdef CONFIG_HPET_TIMER +/* ------ Calibrate the TSC using HPET ------- + * Return 2^32 * (1 / (TSC clocks per usec)) for getting the CPU freq. + * Second output is parameter 1 (when non NULL) + * Set 2^32 * (1 / (tsc per HPET clk)) for delay_hpet(). + * calibrate_tsc() calibrates the processor TSC by comparing + * it to the HPET timer of known frequency. + * Too much 64-bit arithmetic here to do this cleanly in C + */ +#define CALIBRATE_CNT_HPET (5 * hpet_tick) +#define CALIBRATE_TIME_HPET (5 * KERNEL_TICK_USEC) + +unsigned long __init calibrate_tsc_hpet(unsigned long *tsc_hpet_quotient_ptr) +{ + unsigned long tsc_startlow, tsc_starthigh; + unsigned long tsc_endlow, tsc_endhigh; + unsigned long hpet_start, hpet_end; + unsigned long result, remain; + + hpet_start = hpet_readl(HPET_COUNTER); + rdtsc(tsc_startlow, tsc_starthigh); + do { + hpet_end = hpet_readl(HPET_COUNTER); + } while ((hpet_end - hpet_start) < CALIBRATE_CNT_HPET); + rdtsc(tsc_endlow, tsc_endhigh); + + /* 64-bit subtract - gcc just messes up with long longs */ + __asm__("subl %2,%0\n\t" + "sbbl %3,%1" + :"=a" (tsc_endlow), "=d" (tsc_endhigh) + :"g" (tsc_startlow), "g" (tsc_starthigh), + "0" (tsc_endlow), "1" (tsc_endhigh)); + + /* Error: ECPUTOOFAST */ + if (tsc_endhigh) + goto bad_calibration; + + /* Error: ECPUTOOSLOW */ + if (tsc_endlow <= CALIBRATE_TIME_HPET) + goto bad_calibration; + + ASM_DIV64_REG(result, remain, tsc_endlow, 0, CALIBRATE_TIME_HPET); + if (remain > (tsc_endlow >> 1)) + result++; /* rounding the result */ + + if (tsc_hpet_quotient_ptr) { + unsigned long tsc_hpet_quotient; + + ASM_DIV64_REG(tsc_hpet_quotient, remain, tsc_endlow, 0, + CALIBRATE_CNT_HPET); + if (remain > (tsc_endlow >> 1)) + tsc_hpet_quotient++; /* rounding the result */ + *tsc_hpet_quotient_ptr = tsc_hpet_quotient; + } + + return result; +bad_calibration: + /* + * the CPU was so fast/slow that the quotient wouldn't fit in + * 32 bits.. + */ + return 0; +} +#endif + diff -prauN linux-2.6.0-test5/arch/i386/kernel/timers/timer_cyclone.c wli-2.6.0-test5-bk12-25/arch/i386/kernel/timers/timer_cyclone.c --- linux-2.6.0-test5/arch/i386/kernel/timers/timer_cyclone.c 2003-09-08 12:50:16.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/kernel/timers/timer_cyclone.c 2003-09-25 19:15:46.000000000 -0700 @@ -19,7 +19,6 @@ #include extern spinlock_t i8253_lock; -extern unsigned long calibrate_tsc(void); /* Number of usecs that the last interrupt was delayed */ static int delay_at_last_interrupt; diff -prauN linux-2.6.0-test5/arch/i386/kernel/timers/timer_hpet.c wli-2.6.0-test5-bk12-25/arch/i386/kernel/timers/timer_hpet.c --- linux-2.6.0-test5/arch/i386/kernel/timers/timer_hpet.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/kernel/timers/timer_hpet.c 2003-09-25 19:15:46.000000000 -0700 @@ -131,63 +131,6 @@ void delay_hpet(unsigned long loops) } while ((hpet_end - hpet_start) < (loops)); } -/* ------ Calibrate the TSC ------- - * Return 2^32 * (1 / (TSC clocks per usec)) for getting the CPU freq. - * Set 2^32 * (1 / (tsc per HPET clk)) for delay_hpet(). - * calibrate_tsc() calibrates the processor TSC by comparing - * it to the HPET timer of known frequency. - * Too much 64-bit arithmetic here to do this cleanly in C - */ -#define CALIBRATE_CNT_HPET (5 * hpet_tick) -#define CALIBRATE_TIME_HPET (5 * KERNEL_TICK_USEC) - -static unsigned long __init calibrate_tsc(void) -{ - unsigned long tsc_startlow, tsc_starthigh; - unsigned long tsc_endlow, tsc_endhigh; - unsigned long hpet_start, hpet_end; - unsigned long result, remain; - - hpet_start = hpet_readl(HPET_COUNTER); - rdtsc(tsc_startlow, tsc_starthigh); - do { - hpet_end = hpet_readl(HPET_COUNTER); - } while ((hpet_end - hpet_start) < CALIBRATE_CNT_HPET); - rdtsc(tsc_endlow, tsc_endhigh); - - /* 64-bit subtract - gcc just messes up with long longs */ - __asm__("subl %2,%0\n\t" - "sbbl %3,%1" - :"=a" (tsc_endlow), "=d" (tsc_endhigh) - :"g" (tsc_startlow), "g" (tsc_starthigh), - "0" (tsc_endlow), "1" (tsc_endhigh)); - - /* Error: ECPUTOOFAST */ - if (tsc_endhigh) - goto bad_calibration; - - /* Error: ECPUTOOSLOW */ - if (tsc_endlow <= CALIBRATE_TIME_HPET) - goto bad_calibration; - - ASM_DIV64_REG(result, remain, tsc_endlow, 0, CALIBRATE_TIME_HPET); - if (remain > (tsc_endlow >> 1)) - result++; /* rounding the result */ - - ASM_DIV64_REG(tsc_hpet_quotient, remain, tsc_endlow, 0, - CALIBRATE_CNT_HPET); - if (remain > (tsc_endlow >> 1)) - tsc_hpet_quotient++; /* rounding the result */ - - return result; -bad_calibration: - /* - * the CPU was so fast/slow that the quotient wouldn't fit in - * 32 bits.. - */ - return 0; -} - static int __init init_hpet(char* override) { unsigned long result, remain; @@ -201,7 +144,7 @@ static int __init init_hpet(char* overri printk("Using HPET for gettimeofday\n"); if (cpu_has_tsc) { - unsigned long tsc_quotient = calibrate_tsc(); + unsigned long tsc_quotient = calibrate_tsc_hpet(&tsc_hpet_quotient); if (tsc_quotient) { /* report CPU clock rate in Hz. * The formula is (10^6 * 2^32) / (2^32 * 1 / (clocks/us)) = diff -prauN linux-2.6.0-test5/arch/i386/kernel/timers/timer_tsc.c wli-2.6.0-test5-bk12-25/arch/i386/kernel/timers/timer_tsc.c --- linux-2.6.0-test5/arch/i386/kernel/timers/timer_tsc.c 2003-09-08 12:50:14.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/kernel/timers/timer_tsc.c 2003-09-25 19:15:46.000000000 -0700 @@ -39,7 +39,7 @@ static int delay_at_last_interrupt; static unsigned long last_tsc_low; /* lsb 32 bits of Time Stamp Counter */ static unsigned long last_tsc_high; /* msb 32 bits of Time Stamp Counter */ static unsigned long long monotonic_base; -static rwlock_t monotonic_lock = RW_LOCK_UNLOCKED; +static seqlock_t monotonic_lock = SEQLOCK_UNLOCKED; /* convert from cycles(64bits) => nanoseconds (64bits) * basic equation: @@ -111,12 +111,14 @@ static unsigned long get_offset_tsc(void static unsigned long long monotonic_clock_tsc(void) { unsigned long long last_offset, this_offset, base; + unsigned seq; /* atomically read monotonic base & last_offset */ - read_lock_irq(&monotonic_lock); - last_offset = ((unsigned long long)last_tsc_high<<32)|last_tsc_low; - base = monotonic_base; - read_unlock_irq(&monotonic_lock); + do { + seq = read_seqbegin(&monotonic_lock); + last_offset = ((unsigned long long)last_tsc_high<<32)|last_tsc_low; + base = monotonic_base; + } while (read_seqretry(&monotonic_lock, seq)); /* Read the Time Stamp Counter */ rdtscll(this_offset); @@ -125,6 +127,30 @@ static unsigned long long monotonic_cloc return base + cycles_2_ns(this_offset - last_offset); } +/* + * Scheduler clock - returns current time in nanosec units. + */ +unsigned long long sched_clock(void) +{ + unsigned long long this_offset; + + /* + * In the NUMA case we dont use the TSC as they are not + * synchronized across all CPUs. + */ +#ifndef CONFIG_NUMA + if (unlikely(!cpu_has_tsc)) +#endif + return (unsigned long long)jiffies * (1000000000 / HZ); + + /* Read the Time Stamp Counter */ + rdtscll(this_offset); + + /* return the value in ns */ + return cycles_2_ns(this_offset); +} + + static void mark_offset_tsc(void) { unsigned long lost,delay; @@ -135,7 +161,7 @@ static void mark_offset_tsc(void) unsigned long long this_offset, last_offset; static int lost_count = 0; - write_lock(&monotonic_lock); + write_seqlock(&monotonic_lock); last_offset = ((unsigned long long)last_tsc_high<<32)|last_tsc_low; /* * It is important that these two operations happen almost at @@ -204,7 +230,7 @@ static void mark_offset_tsc(void) /* update the monotonic base value */ this_offset = ((unsigned long long)last_tsc_high<<32)|last_tsc_low; monotonic_base += cycles_2_ns(this_offset - last_offset); - write_unlock(&monotonic_lock); + write_sequnlock(&monotonic_lock); /* calculate delay_at_last_interrupt */ count = ((LATCH-1) - count) * TICK_SIZE; @@ -230,74 +256,13 @@ static void delay_tsc(unsigned long loop } while ((now-bclock) < loops); } -/* ------ Calibrate the TSC ------- - * Return 2^32 * (1 / (TSC clocks per usec)) for do_fast_gettimeoffset(). - * Too much 64-bit arithmetic here to do this cleanly in C, and for - * accuracy's sake we want to keep the overhead on the CTC speaker (channel 2) - * output busy loop as low as possible. We avoid reading the CTC registers - * directly because of the awkward 8-bit access mechanism of the 82C54 - * device. - */ - -#define CALIBRATE_TIME (5 * 1000020/HZ) - -static unsigned long __init calibrate_tsc(void) -{ - mach_prepare_counter(); - - { - unsigned long startlow, starthigh; - unsigned long endlow, endhigh; - unsigned long count; - - rdtsc(startlow,starthigh); - mach_countup(&count); - rdtsc(endlow,endhigh); - - last_tsc_low = endlow; - - /* Error: ECTCNEVERSET */ - if (count <= 1) - goto bad_ctc; - - /* 64-bit subtract - gcc just messes up with long longs */ - __asm__("subl %2,%0\n\t" - "sbbl %3,%1" - :"=a" (endlow), "=d" (endhigh) - :"g" (startlow), "g" (starthigh), - "0" (endlow), "1" (endhigh)); - - /* Error: ECPUTOOFAST */ - if (endhigh) - goto bad_ctc; - - /* Error: ECPUTOOSLOW */ - if (endlow <= CALIBRATE_TIME) - goto bad_ctc; - - __asm__("divl %2" - :"=a" (endlow), "=d" (endhigh) - :"r" (endlow), "0" (0), "1" (CALIBRATE_TIME)); - - return endlow; - } - - /* - * The CTC wasn't reliable: we got a hit on the very first read, - * or the CPU was so fast/slow that the quotient wouldn't fit in - * 32 bits.. - */ -bad_ctc: - return 0; -} - #ifdef CONFIG_HPET_TIMER static void mark_offset_tsc_hpet(void) { unsigned long long this_offset, last_offset; unsigned long offset, temp, hpet_current; - write_lock(&monotonic_lock); + write_seqlock(&monotonic_lock); last_offset = ((unsigned long long)last_tsc_high<<32)|last_tsc_low; /* * It is important that these two operations happen almost at @@ -325,7 +290,7 @@ static void mark_offset_tsc_hpet(void) /* update the monotonic base value */ this_offset = ((unsigned long long)last_tsc_high<<32)|last_tsc_low; monotonic_base += cycles_2_ns(this_offset - last_offset); - write_unlock(&monotonic_lock); + write_sequnlock(&monotonic_lock); /* calculate delay_at_last_interrupt */ /* @@ -339,58 +304,6 @@ static void mark_offset_tsc_hpet(void) ASM_MUL64_REG(temp, delay_at_last_interrupt, hpet_usec_quotient, delay_at_last_interrupt); } - -/* ------ Calibrate the TSC based on HPET timer ------- - * Return 2^32 * (1 / (TSC clocks per usec)) for do_fast_gettimeoffset(). - * calibrate_tsc() calibrates the processor TSC by comparing - * it to the HPET timer of known frequency. - * Too much 64-bit arithmetic here to do this cleanly in C - */ - -#define CALIBRATE_CNT_HPET (5 * hpet_tick) -#define CALIBRATE_TIME_HPET (5 * KERNEL_TICK_USEC) - -unsigned long __init calibrate_tsc_hpet(void) -{ - unsigned long tsc_startlow, tsc_starthigh; - unsigned long tsc_endlow, tsc_endhigh; - unsigned long hpet_start, hpet_end; - unsigned long result, remain; - - hpet_start = hpet_readl(HPET_COUNTER); - rdtsc(tsc_startlow, tsc_starthigh); - do { - hpet_end = hpet_readl(HPET_COUNTER); - } while ((hpet_end - hpet_start) < CALIBRATE_CNT_HPET); - rdtsc(tsc_endlow, tsc_endhigh); - - /* 64-bit subtract - gcc just messes up with long longs */ - __asm__("subl %2,%0\n\t" - "sbbl %3,%1" - :"=a" (tsc_endlow), "=d" (tsc_endhigh) - :"g" (tsc_startlow), "g" (tsc_starthigh), - "0" (tsc_endlow), "1" (tsc_endhigh)); - - /* Error: ECPUTOOFAST */ - if (tsc_endhigh) - goto bad_calibration; - - /* Error: ECPUTOOSLOW */ - if (tsc_endlow <= CALIBRATE_TIME_HPET) - goto bad_calibration; - - ASM_DIV64_REG(result, remain, tsc_endlow, 0, CALIBRATE_TIME_HPET); - if (remain > (tsc_endlow >> 1)) - result++; /* rounding the result */ - - return result; -bad_calibration: - /* - * the CPU was so fast/slow that the quotient wouldn't fit in - * 32 bits.. - */ - return 0; -} #endif #ifdef CONFIG_CPU_FREQ @@ -425,6 +338,7 @@ time_cpufreq_notifier(struct notifier_bl if (use_tsc) { fast_gettimeoffset_quotient = cpufreq_scale(fast_gettimeoffset_ref, freq->new, ref_freq); cpu_khz = cpufreq_scale(cpu_khz_ref, ref_freq, freq->new); + set_cyc2ns_scale(cpu_khz/1000); } #endif } @@ -491,7 +405,7 @@ static int __init init_tsc(char* overrid if (is_hpet_enabled()){ unsigned long result, remain; printk("Using TSC for gettimeofday\n"); - tsc_quotient = calibrate_tsc_hpet(); + tsc_quotient = calibrate_tsc_hpet(NULL); timer_tsc.mark_offset = &mark_offset_tsc_hpet; /* * Math to calculate hpet to usec multiplier diff -prauN linux-2.6.0-test5/arch/i386/kernel/traps.c wli-2.6.0-test5-bk12-25/arch/i386/kernel/traps.c --- linux-2.6.0-test5/arch/i386/kernel/traps.c 2003-09-08 12:49:54.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/kernel/traps.c 2003-09-28 22:22:46.000000000 -0700 @@ -28,6 +28,7 @@ #ifdef CONFIG_EISA #include +#include #endif #ifdef CONFIG_MCA @@ -782,7 +783,7 @@ void __init trap_init_f00f_bug(void) * it uses the read-only mapped virtual address. */ idt_descr.address = fix_to_virt(FIX_F00F_IDT); - __asm__ __volatile__("lidt %0": "=m" (idt_descr)); + __asm__ __volatile__("lidt %0" : : "m" (idt_descr)); } #endif @@ -832,10 +833,6 @@ static void __init set_task_gate(unsigne } -#ifdef CONFIG_EISA -int EISA_bus; -#endif - void __init trap_init(void) { #ifdef CONFIG_EISA diff -prauN linux-2.6.0-test5/arch/i386/kernel/vm86.c wli-2.6.0-test5-bk12-25/arch/i386/kernel/vm86.c --- linux-2.6.0-test5/arch/i386/kernel/vm86.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/kernel/vm86.c 2003-09-28 21:47:08.000000000 -0700 @@ -127,16 +127,17 @@ struct pt_regs * save_v86_state(struct k return ret; } -static void mark_screen_rdonly(struct task_struct * tsk) +static void mark_screen_rdonly(task_t *task) { + struct mm_struct *mm = task->mm; pgd_t *pgd; pmd_t *pmd; pte_t *pte, *mapped; int i; preempt_disable(); - spin_lock(&tsk->mm->page_table_lock); - pgd = pgd_offset(tsk->mm, 0xA0000); + spin_lock(&mm->page_table_lock); + pgd = pgd_offset(mm, 0xA0000); if (pgd_none(*pgd)) goto out; if (pgd_bad(*pgd)) { @@ -144,23 +145,26 @@ static void mark_screen_rdonly(struct ta pgd_clear(pgd); goto out; } - pmd = pmd_offset(pgd, 0xA0000); - if (pmd_none(*pmd)) + pmd = pmd_offset_map(pgd, 0xA0000); + if (pmd_none(*pmd)) { + pmd_unmap(pmd); goto out; - if (pmd_bad(*pmd)) { + } else if (pmd_bad(*pmd)) { pmd_ERROR(*pmd); pmd_clear(pmd); + pmd_unmap(pmd); goto out; } pte = mapped = pte_offset_map(pmd, 0xA0000); for (i = 0; i < 32; i++) { if (pte_present(*pte)) - set_pte(pte, pte_wrprotect(*pte)); + vm_ptep_set_wrprotect(mm, pte); pte++; } pte_unmap(mapped); + pmd_unmap(pmd); out: - spin_unlock(&tsk->mm->page_table_lock); + spin_unlock(&mm->page_table_lock); preempt_enable(); flush_tlb(); } diff -prauN linux-2.6.0-test5/arch/i386/mm/discontig.c wli-2.6.0-test5-bk12-25/arch/i386/mm/discontig.c --- linux-2.6.0-test5/arch/i386/mm/discontig.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/mm/discontig.c 2003-09-29 01:07:31.000000000 -0700 @@ -30,6 +30,7 @@ #include #include #include +#include struct pglist_data *node_data[MAX_NUMNODES]; bootmem_data_t node0_bdata; @@ -71,8 +72,6 @@ extern unsigned long max_low_pfn; extern unsigned long totalram_pages; extern unsigned long totalhigh_pages; -#define LARGE_PAGE_BYTES (PTRS_PER_PTE * PAGE_SIZE) - unsigned long node_remap_start_pfn[MAX_NUMNODES]; unsigned long node_remap_size[MAX_NUMNODES]; unsigned long node_remap_offset[MAX_NUMNODES]; @@ -84,7 +83,7 @@ void set_pmd_pfn(unsigned long vaddr, un * a single node with all available processors in it with a flat * memory map. */ -void __init get_memcfg_numa_flat(void) +int __init get_memcfg_numa_flat(void) { int pfn; @@ -107,6 +106,7 @@ void __init get_memcfg_numa_flat(void) /* Indicate there is one node available. */ node_set_online(0); numnodes = 1; + return 1; } /* @@ -126,6 +126,48 @@ static void __init find_max_pfn_node(int BUG(); } +extern char __per_cpu_start[], __per_cpu_end[]; +unsigned long __per_cpu_offset[NR_CPUS]; + +#define PER_CPU_PAGES PFN_UP((unsigned long)(__per_cpu_end-__per_cpu_start)) +#define MEM_MAP_SIZE(n) PFN_UP((node_end_pfn[n]-node_start_pfn[n]+1)*sizeof(struct page)) + +static void __init allocate_per_cpu_pages(int cpu) +{ + int cpu_in_node, node = cpu_to_node(cpu); + unsigned long vaddr; + cpumask_t nodemask = node_to_cpumask(node); + + if (!PER_CPU_PAGES || node >= numnodes) + return; + + if (!node) { + vaddr = (unsigned long)alloc_bootmem(PER_CPU_PAGES*PAGE_SIZE); + __per_cpu_offset[cpu] = vaddr - (unsigned long)__per_cpu_start; + } else { + int k; + vaddr = (unsigned long)node_remap_start_vaddr[node]; + for (k = 0, cpu_in_node = 0; k < cpu; ++k) + if (cpu_isset(k, nodemask)) + ++cpu_in_node; + __per_cpu_offset[cpu] = vaddr + PAGE_SIZE*MEM_MAP_SIZE(node) + + PAGE_SIZE*PFN_UP(sizeof(pg_data_t)) + + PAGE_SIZE*PER_CPU_PAGES*cpu_in_node + - (unsigned long)__per_cpu_start; + } + memcpy(RELOC_HIDE((char *)__per_cpu_start, __per_cpu_offset[cpu]), + __per_cpu_start, + PER_CPU_PAGES*PAGE_SIZE); +} + +void __init setup_per_cpu_areas(void) +{ + int cpu; + for (cpu = 0; cpu < NR_CPUS; ++cpu) + allocate_per_cpu_pages(cpu); +} + + /* * Allocate memory for the pg_data_t via a crude pre-bootmem method * We ought to relocate these onto their own node later on during boot. @@ -203,13 +245,11 @@ static unsigned long calculate_numa_rema unsigned long size, reserve_pages = 0; for (nid = 1; nid < numnodes; nid++) { - /* calculate the size of the mem_map needed in bytes */ - size = (node_end_pfn[nid] - node_start_pfn[nid] + 1) - * sizeof(struct page) + sizeof(pg_data_t); - /* convert size to large (pmd size) pages, rounding up */ - size = (size + LARGE_PAGE_BYTES - 1) / LARGE_PAGE_BYTES; - /* now the roundup is correct, convert to PAGE_SIZE pages */ - size = size * PTRS_PER_PTE; + /* calculate the size of the mem_map needed in pages */ + size = MEM_MAP_SIZE(nid) + PFN_UP(sizeof(pg_data_t)) + + PER_CPU_PAGES*MAX_NODE_CPUS; + /* round up to nearest pmd boundary */ + size = (size + PTRS_PER_PTE - 1) & ~(PTRS_PER_PTE - 1); printk("Reserving %ld pages of KVA for lmem_map of node %d\n", size, nid); node_remap_size[nid] = size; @@ -355,17 +395,20 @@ void __init zone_sizes_init(void) unsigned long low = max_low_pfn; unsigned long start = node_start_pfn[nid]; unsigned long high = node_end_pfn[nid]; - + max_dma = virt_to_phys((char *)MAX_DMA_ADDRESS) >> PAGE_SHIFT; if (start > low) { #ifdef CONFIG_HIGHMEM - zones_size[ZONE_HIGHMEM] = high - start; + BUG_ON(start > high); + zones_size[ZONE_HIGHMEM] = high - start; #endif } else { if (low < max_dma) zones_size[ZONE_DMA] = low; else { + BUG_ON(max_dma > low); + BUG_ON(low > high); zones_size[ZONE_DMA] = max_dma; zones_size[ZONE_NORMAL] = low - max_dma; #ifdef CONFIG_HIGHMEM diff -prauN linux-2.6.0-test5/arch/i386/mm/fault.c wli-2.6.0-test5-bk12-25/arch/i386/mm/fault.c --- linux-2.6.0-test5/arch/i386/mm/fault.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/mm/fault.c 2003-09-25 20:03:30.000000000 -0700 @@ -247,6 +247,13 @@ no_context: printk(" printing eip:\n"); printk("%08lx\n", regs->eip); asm("movl %%cr3,%0":"=r" (page)); +#ifdef CONFIG_HIGHPMD /* Oh boy. Error reporting is going to blow major goats. */ + printk(KERN_ALERT "%%cr3 = 0x%lx\n", page); + /* Mask off flag bits. It should end up 32B-aligned. */ + page &= ~(PTRS_PER_PGD*sizeof(pgd_t) - 1); + printk(KERN_ALERT "*pdpte = 0x%Lx\n", + pgd_val(((pgd_t *)__va(page))[address >> PGDIR_SHIFT])); +#else /* !CONFIG_HIGHPMD */ page = ((unsigned long *) __va(page))[address >> 22]; printk(KERN_ALERT "*pde = %08lx\n", page); /* @@ -262,7 +269,8 @@ no_context: page = ((unsigned long *) __va(page))[address >> PAGE_SHIFT]; printk(KERN_ALERT "*pte = %08lx\n", page); } -#endif +#endif /* !CONFIG_HIGHPTE */ +#endif /* CONFIG_HIGHPMD */ die("Oops", regs, error_code); bust_spinlocks(0); do_exit(SIGKILL); @@ -330,8 +338,8 @@ vmalloc_fault: * and redundant with the set_pmd() on non-PAE. */ - pmd = pmd_offset(pgd, address); - pmd_k = pmd_offset(pgd_k, address); + pmd = pmd_offset_kernel(pgd, address); + pmd_k = pmd_offset_kernel(pgd_k, address); if (!pmd_present(*pmd_k)) goto no_context; set_pmd(pmd, *pmd_k); diff -prauN linux-2.6.0-test5/arch/i386/mm/highmem.c wli-2.6.0-test5-bk12-25/arch/i386/mm/highmem.c --- linux-2.6.0-test5/arch/i386/mm/highmem.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/mm/highmem.c 2003-09-28 21:58:40.000000000 -0700 @@ -1,22 +1,5 @@ #include -void *kmap(struct page *page) -{ - might_sleep(); - if (page < highmem_start_page) - return page_address(page); - return kmap_high(page); -} - -void kunmap(struct page *page) -{ - if (in_interrupt()) - BUG(); - if (page < highmem_start_page) - return; - kunmap_high(page); -} - /* * kmap_atomic/kunmap_atomic is significantly faster than kmap/kunmap because * no global lock is needed and because the kmap code must perform a global TLB @@ -25,40 +8,39 @@ void kunmap(struct page *page) * However when holding an atomic kmap is is not legal to sleep, so atomic * kmaps are appropriate for short, tight code paths only. */ -void *kmap_atomic(struct page *page, enum km_type type) +void *__kmap_atomic(struct page *page, enum km_type type, unsigned long vaddr) { enum fixed_addresses idx; - unsigned long vaddr; + unsigned long offset = KM_TYPE_NR*smp_processor_id(); + pte_t old_pte, pte, *kpte; - inc_preempt_count(); - if (page < highmem_start_page) - return page_address(page); - - idx = type + KM_TYPE_NR*smp_processor_id(); - vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx); + idx = type + offset; + vaddr -= PAGE_SIZE*offset; + kpte = kmap_pte - idx; + old_pte = *kpte; #ifdef CONFIG_DEBUG_HIGHMEM - if (!pte_none(*(kmap_pte-idx))) - BUG(); + BUG_ON(!pte_none(old_pte)); #endif - set_pte(kmap_pte-idx, mk_pte(page, kmap_prot)); - __flush_tlb_one(vaddr); - - return (void*) vaddr; + pte = mk_pte(page, kmap_prot); + if (!pte_same(old_pte, pte)) { + set_pte(kpte, pte); + if (!pte_none(old_pte)) + __flush_tlb_one(vaddr); + } + return (void *)vaddr; } -void kunmap_atomic(void *kvaddr, enum km_type type) -{ #ifdef CONFIG_DEBUG_HIGHMEM - unsigned long vaddr = (unsigned long) kvaddr & PAGE_MASK; - enum fixed_addresses idx = type + KM_TYPE_NR*smp_processor_id(); +void __kunmap_atomic(void *kvaddr, enum km_type type, unsigned long vaddr) +{ + unsigned long offset = KM_TYPE_NR*smp_processor_id(); + unsigned long uvaddr = (unsigned long) kvaddr & PAGE_MASK; + enum fixed_addresses idx; - if (vaddr < FIXADDR_START) { // FIXME - dec_preempt_count(); - return; - } + idx = type + offset; + vaddr -= PAGE_SIZE*offset; - if (vaddr != __fix_to_virt(FIX_KMAP_BEGIN+idx)) - BUG(); + BUG_ON(uvaddr != vaddr); /* * force other mappings to Oops if they'll try to access @@ -66,21 +48,5 @@ void kunmap_atomic(void *kvaddr, enum km */ pte_clear(kmap_pte-idx); __flush_tlb_one(vaddr); -#endif - - dec_preempt_count(); } - -struct page *kmap_atomic_to_page(void *ptr) -{ - unsigned long idx, vaddr = (unsigned long)ptr; - pte_t *pte; - - if (vaddr < FIXADDR_START) - return virt_to_page(ptr); - - idx = virt_to_fix(vaddr); - pte = kmap_pte - (idx - FIX_KMAP_BEGIN); - return pte_page(*pte); -} - +#endif diff -prauN linux-2.6.0-test5/arch/i386/mm/hugetlbpage.c wli-2.6.0-test5-bk12-25/arch/i386/mm/hugetlbpage.c --- linux-2.6.0-test5/arch/i386/mm/hugetlbpage.c 2003-09-08 12:50:28.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/mm/hugetlbpage.c 2003-09-28 23:04:07.000000000 -0700 @@ -87,8 +87,8 @@ static pte_t *huge_pte_alloc(struct mm_s pmd_t *pmd = NULL; pgd = pgd_offset(mm, addr); - pmd = pmd_alloc(mm, pgd, addr); - return (pte_t *) pmd; + pmd = pmd_alloc_map(mm, pgd, addr); + return (pte_t *)pmd; } static pte_t *huge_pte_offset(struct mm_struct *mm, unsigned long addr) @@ -97,11 +97,13 @@ static pte_t *huge_pte_offset(struct mm_ pmd_t *pmd = NULL; pgd = pgd_offset(mm, addr); - pmd = pmd_offset(pgd, addr); - return (pte_t *) pmd; + pmd = pmd_offset_map_nested(pgd, addr); + return (pte_t *)pmd; } -static void set_huge_pte(struct mm_struct *mm, struct vm_area_struct *vma, struct page *page, pte_t * page_table, int write_access) +static void set_huge_pte(struct mm_struct *mm, struct vm_area_struct *vma, + struct page *page, pte_t * page_table, + unsigned long addr, int write_access) { pte_t entry; @@ -114,6 +116,7 @@ static void set_huge_pte(struct mm_struc entry = pte_mkyoung(entry); mk_pte_huge(entry); set_pte(page_table, entry); + vm_account_huge_inc(vma, *page_table, addr); } /* @@ -145,6 +148,8 @@ int copy_hugetlb_page_range(struct mm_st ptepage = pte_page(entry); get_page(ptepage); set_pte(dst_pte, entry); + pmd_unmap(dst_pte); + pmd_unmap_nested(src_pte); dst->rss += (HPAGE_SIZE / PAGE_SIZE); addr += HPAGE_SIZE; } @@ -182,6 +187,7 @@ follow_hugetlb_page(struct mm_struct *mm get_page(page); pages[i] = page; + pmd_unmap_nested(pte); } if (vmas) @@ -271,6 +277,7 @@ follow_huge_pmd(struct mm_struct *mm, un page += ((address & ~HPAGE_MASK) >> PAGE_SHIFT); get_page(page); } + pmd_unmap(pmd); return page; } #endif @@ -278,7 +285,7 @@ follow_huge_pmd(struct mm_struct *mm, un void free_huge_page(struct page *page) { BUG_ON(page_count(page)); - BUG_ON(page->mapping); + BUG_ON(page_mapping(page)); INIT_LIST_HEAD(&page->list); @@ -314,6 +321,8 @@ void unmap_hugepage_range(struct vm_area page = pte_page(*pte); huge_page_release(page); pte_clear(pte); + vm_account_huge_dec(vma, *pte, address); + pmd_unmap_nested(pte); } mm->rss -= (end - start) >> PAGE_SHIFT; flush_tlb_range(vma, start, end); @@ -348,26 +357,39 @@ int hugetlb_prefault(struct address_spac ret = -ENOMEM; goto out; } - if (!pte_none(*pte)) + if (!pte_none(*pte)) { + pmd_unmap(pte); continue; + } idx = ((addr - vma->vm_start) >> HPAGE_SHIFT) + (vma->vm_pgoff >> (HPAGE_SHIFT - PAGE_SHIFT)); page = find_get_page(mapping, idx); if (!page) { + /* charge the fs quota first */ + if (hugetlb_get_quota(mapping)) { + ret = -ENOMEM; + pmd_unmap(pte); + goto out; + } page = alloc_hugetlb_page(); if (!page) { + hugetlb_put_quota(mapping); ret = -ENOMEM; + pmd_unmap(pte); goto out; } ret = add_to_page_cache(page, mapping, idx, GFP_ATOMIC); unlock_page(page); if (ret) { + hugetlb_put_quota(mapping); free_huge_page(page); + pmd_unmap(pte); goto out; } } - set_huge_pte(mm, vma, page, pte, vma->vm_flags & VM_WRITE); + set_huge_pte(mm, vma, page, pte, addr, vma->vm_flags & VM_WRITE); + pmd_unmap(pte); } out: spin_unlock(&mm->page_table_lock); diff -prauN linux-2.6.0-test5/arch/i386/mm/init.c wli-2.6.0-test5-bk12-25/arch/i386/mm/init.c --- linux-2.6.0-test5/arch/i386/mm/init.c 2003-09-08 12:50:19.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/mm/init.c 2003-09-25 20:26:41.000000000 -0700 @@ -56,10 +56,10 @@ static pmd_t * __init one_md_table_init( #ifdef CONFIG_X86_PAE pmd_table = (pmd_t *) alloc_bootmem_low_pages(PAGE_SIZE); set_pgd(pgd, __pgd(__pa(pmd_table) | _PAGE_PRESENT)); - if (pmd_table != pmd_offset(pgd, 0)) + if (pmd_table != pmd_offset_kernel(pgd, 0)) BUG(); #else - pmd_table = pmd_offset(pgd, 0); + pmd_table = pmd_offset_kernel(pgd, 0); #endif return pmd_table; @@ -110,7 +110,7 @@ static void __init page_table_range_init if (pgd_none(*pgd)) one_md_table_init(pgd); - pmd = pmd_offset(pgd, vaddr); + pmd = pmd_offset_kernel(pgd, vaddr); for (; (pmd_idx < PTRS_PER_PMD) && (vaddr != end); pmd++, pmd_idx++) { if (pmd_none(*pmd)) one_page_table_init(pmd); @@ -191,7 +191,7 @@ pte_t *kmap_pte; pgprot_t kmap_prot; #define kmap_get_fixmap_pte(vaddr) \ - pte_offset_kernel(pmd_offset(pgd_offset_k(vaddr), (vaddr)), (vaddr)) + pte_offset_kernel(pmd_offset_kernel(pgd_offset_k(vaddr), (vaddr)), (vaddr)) void __init kmap_init(void) { @@ -215,7 +215,7 @@ void __init permanent_kmaps_init(pgd_t * page_table_range_init(vaddr, vaddr + PAGE_SIZE*LAST_PKMAP, pgd_base); pgd = swapper_pg_dir + pgd_index(vaddr); - pmd = pmd_offset(pgd, vaddr); + pmd = pmd_offset_kernel(pgd, vaddr); pte = pte_offset_kernel(pmd, vaddr); pkmap_page_table = pte; } @@ -462,7 +462,7 @@ void __init mem_init(void) /* this will put all low memory onto the freelists */ totalram_pages += __free_all_bootmem(); - + tlb_init(); reservedpages = 0; for (tmp = 0; tmp < max_low_pfn; tmp++) /* @@ -510,20 +510,9 @@ void __init mem_init(void) } kmem_cache_t *pgd_cache; -kmem_cache_t *pmd_cache; void __init pgtable_cache_init(void) { - if (PTRS_PER_PMD > 1) { - pmd_cache = kmem_cache_create("pmd", - PTRS_PER_PMD*sizeof(pmd_t), - 0, - SLAB_HWCACHE_ALIGN | SLAB_MUST_HWCACHE_ALIGN, - pmd_ctor, - NULL); - if (!pmd_cache) - panic("pgtable_cache_init(): cannot create pmd cache"); - } pgd_cache = kmem_cache_create("pgd", PTRS_PER_PGD*sizeof(pgd_t), 0, diff -prauN linux-2.6.0-test5/arch/i386/mm/ioremap.c wli-2.6.0-test5-bk12-25/arch/i386/mm/ioremap.c --- linux-2.6.0-test5/arch/i386/mm/ioremap.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/mm/ioremap.c 2003-09-25 20:03:30.000000000 -0700 @@ -82,7 +82,7 @@ static int remap_area_pages(unsigned lon spin_lock(&init_mm.page_table_lock); do { pmd_t *pmd; - pmd = pmd_alloc(&init_mm, dir, address); + pmd = pmd_alloc_kernel(&init_mm, dir, address); error = -ENOMEM; if (!pmd) break; diff -prauN linux-2.6.0-test5/arch/i386/mm/pageattr.c wli-2.6.0-test5-bk12-25/arch/i386/mm/pageattr.c --- linux-2.6.0-test5/arch/i386/mm/pageattr.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/mm/pageattr.c 2003-09-25 20:03:31.000000000 -0700 @@ -23,7 +23,7 @@ static inline pte_t *lookup_address(unsi pmd_t *pmd; if (pgd_none(*pgd)) return NULL; - pmd = pmd_offset(pgd, address); + pmd = pmd_offset_kernel(pgd, address); if (pmd_none(*pmd)) return NULL; if (pmd_large(*pmd)) @@ -79,7 +79,7 @@ static void set_pmd_pte(pte_t *kpte, uns pgd_t *pgd; pmd_t *pmd; pgd = (pgd_t *)page_address(page) + pgd_index(address); - pmd = pmd_offset(pgd, address); + pmd = pmd_offset_kernel(pgd, address); set_pte_atomic((pte_t *)pmd, pte); } spin_unlock_irqrestore(&pgd_lock, flags); @@ -92,7 +92,7 @@ static void set_pmd_pte(pte_t *kpte, uns static inline void revert_page(struct page *kpte_page, unsigned long address) { pte_t *linear = (pte_t *) - pmd_offset(pgd_offset(&init_mm, address), address); + pmd_offset_kernel(pgd_offset_k(address), address); set_pmd_pte(linear, address, pfn_pte((__pa(address) & LARGE_PAGE_MASK) >> PAGE_SHIFT, PAGE_KERNEL_LARGE)); diff -prauN linux-2.6.0-test5/arch/i386/mm/pgtable.c wli-2.6.0-test5-bk12-25/arch/i386/mm/pgtable.c --- linux-2.6.0-test5/arch/i386/mm/pgtable.c 2003-09-08 12:50:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/mm/pgtable.c 2003-09-29 01:15:24.000000000 -0700 @@ -70,7 +70,7 @@ static void set_pte_pfn(unsigned long va BUG(); return; } - pmd = pmd_offset(pgd, vaddr); + pmd = pmd_offset_kernel(pgd, vaddr); if (pmd_none(*pmd)) { BUG(); return; @@ -110,7 +110,7 @@ void set_pmd_pfn(unsigned long vaddr, un printk ("set_pmd_pfn: pgd_none\n"); return; /* BUG(); */ } - pmd = pmd_offset(pgd, vaddr); + pmd = pmd_offset_kernel(pgd, vaddr); set_pmd(pmd, pfn_pmd(pfn, flags)); /* * It's enough to flush this one mapping. @@ -138,23 +138,76 @@ pte_t *pte_alloc_one_kernel(struct mm_st return pte; } -struct page *pte_alloc_one(struct mm_struct *mm, unsigned long address) +void tlb_init(void) { - struct page *pte; + int cpu; + for (cpu = 0; cpu < NR_CPUS; ++cpu) { + int zone; + struct mmu_gather *tlb = &per_cpu(mmu_gathers, cpu); + for (zone = 0; zone < MAX_ZONE_ID; ++zone) { + INIT_LIST_HEAD(&tlb->active_list[zone]); + INIT_LIST_HEAD(&tlb->ready_list[zone]); + } + } +} -#ifdef CONFIG_HIGHPTE - pte = alloc_pages(GFP_KERNEL|__GFP_HIGHMEM|__GFP_REPEAT, 0); -#else - pte = alloc_pages(GFP_KERNEL|__GFP_REPEAT, 0); -#endif - if (pte) - clear_highpage(pte); - return pte; +static inline struct page *pte_alloc_fresh(int gfp_mask) +{ + struct page *page = alloc_page(gfp_mask); + if (page) { + clear_highpage(page); + if (TestSetPagePTE(page)) + BUG(); + } + return page; +} + +static inline int zone_high(struct zone *zone) +{ + if (!zone) + return 1; + else + return zone - zone->zone_pgdat->node_zones >= ZONE_HIGHMEM; +} + +static inline struct page *pte_alloc_ready(int gfp_flags) +{ + struct mmu_gather *tlb = &per_cpu(mmu_gathers, get_cpu()); + unsigned long flags; + struct page *page = NULL; + + smp_local_irq_save(flags); + if (tlb->nr_pte_ready) { + int z; + for (z = MAX_ZONE_ID - 1; z >= 0; --z) { + struct zone *zone = zone_table[z]; + if (!(gfp_flags & __GFP_HIGHMEM) && zone_high(zone)) + continue; + if (!list_empty(&tlb->ready_list[z])) + break; + } + page = list_entry(tlb->ready_list[z].next, struct page, list); + if (TestSetPagePTE(page)) + BUG(); + list_del(&page->list); + tlb->ready_count[z]--; + tlb->nr_pte_ready--; + } + smp_local_irq_restore(flags); + put_cpu(); + return page; +} + +struct page *pte_alloc_one(struct mm_struct *mm, unsigned long address) +{ + struct page *page = pte_alloc_ready(GFP_PTE); + return page ? page : pte_alloc_fresh(GFP_PTE); } -void pmd_ctor(void *pmd, kmem_cache_t *cache, unsigned long flags) +static inline struct page *__pmd_alloc_one(void) { - memset(pmd, 0, PTRS_PER_PMD*sizeof(pmd_t)); + struct page *page = pte_alloc_ready(GFP_PMD); + return page ? page : pte_alloc_fresh(GFP_PMD); } /* @@ -212,16 +265,22 @@ pgd_t *pgd_alloc(struct mm_struct *mm) return pgd; for (i = 0; i < USER_PTRS_PER_PGD; ++i) { - pmd_t *pmd = kmem_cache_alloc(pmd_cache, GFP_KERNEL); + struct page *pmd = __pmd_alloc_one(); if (!pmd) goto out_oom; - set_pgd(&pgd[i], __pgd(1 + __pa((u64)((u32)pmd)))); + clear_highpage(pmd); + set_pgd(&pgd[i], __pgd(1ULL | (u64)page_to_pfn(pmd) << PAGE_SHIFT)); } return pgd; + /* + * This looks unusual. pte_free() is actually a convenient wrapper + * for queueing up preconstructed pmd and/or pte pages. The cases + * fall through to just queueing them in the per-cpu lists. + */ out_oom: for (i--; i >= 0; i--) - kmem_cache_free(pmd_cache, (void *)__va(pgd_val(pgd[i])-1)); + pte_free(pgd_page(pgd[i])); kmem_cache_free(pgd_cache, pgd); return NULL; } @@ -233,7 +292,115 @@ void pgd_free(pgd_t *pgd) /* in the PAE case user pgd entries are overwritten before usage */ if (PTRS_PER_PMD > 1) for (i = 0; i < USER_PTRS_PER_PGD; ++i) - kmem_cache_free(pmd_cache, (void *)__va(pgd_val(pgd[i])-1)); + pte_free(pgd_page(pgd[i])); /* in the non-PAE case, clear_page_tables() clears user pgd entries */ kmem_cache_free(pgd_cache, pgd); } + +static void shrink_cpu_pagetable_cache(void *__gfp_mask) +{ + int cpu, zone, high, gfp_mask = (int)gfp_mask; + unsigned long flags; + struct mmu_gather *tlb; + + high = !!(gfp_mask & __GFP_HIGHMEM); + cpu = get_cpu(); + tlb = &per_cpu(mmu_gathers, cpu); + smp_local_irq_save(flags); + + if (tlb->nr_pte_active || tlb->nr_nonpte) + tlb_flush(tlb); + + if (tlb->nr_nonpte) { + free_pages_and_swap_cache(tlb->nonpte, tlb->nr_nonpte); + tlb->nr_nonpte = 0; + } + + if (tlb->nr_pte_active) { + for (zone = 0; zone < MAX_ZONE_ID; ++zone) { + if (!high && zone_high(zone_table[zone])) + continue; + if (!tlb->active_count[zone]) + continue; + + list_splice_init(&tlb->active_list[zone], &tlb->ready_list[zone]); + tlb->ready_count[zone] += tlb->active_count[zone]; + tlb->active_count[zone] = 0; + } + tlb->nr_pte_ready += tlb->nr_pte_active; + tlb->nr_pte_active = 0; + } + + for (zone = 0; zone < MAX_ZONE_ID; ++zone) { + struct page *head; + + if (list_empty(&tlb->ready_list[zone])) + continue; + if (!high && zone_high(zone_table[zone])) + continue; + + head = list_entry(tlb->ready_list[zone].next, struct page, list); + list_del_init(&head->list); + list_splice_init(&tlb->ready_list[zone], &head->list); + head->private = tlb->ready_count[zone]; + tlb->nr_pte_ready -= tlb->ready_count[zone]; + tlb->ready_count[zone] = 0; + free_pages_bulk(zone_table[zone], head, 0); + } + + smp_local_irq_restore(flags); + put_cpu(); +} + +void shrink_pagetable_cache(int gfp_mask) +{ + BUG_ON(irqs_disabled()); + + preempt_disable(); + + /* disables interrupts appropriately internally */ + shrink_cpu_pagetable_cache((void *)gfp_mask); + + smp_call_function(shrink_cpu_pagetable_cache, (void *)gfp_mask, 1, 1); + preempt_enable(); +} + +unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, + unsigned long len, unsigned long pgoff, + unsigned long flags) +{ + struct mm_struct *mm = current->mm; + struct vm_area_struct *vma, *prev; + + len = PAGE_ALIGN(len); + addr = PAGE_ALIGN(addr); + + if (len > TASK_SIZE) + return -ENOMEM; + + if (addr) { + struct vm_area_struct *vma; + vma = find_vma(mm, addr); + if (TASK_SIZE - len >= addr && (!vma || addr + len <= vma->vm_start)) + goto out; + } + + if (!mm->mmap) { + addr = TASK_SIZE - len; + goto out; + } + + addr = -ENOMEM; + for (prev = NULL, vma = mm->mmap; vma; prev = vma, vma = vma->vm_next) { + unsigned long lo, hi; + lo = prev ? prev->vm_end : 0; + hi = vma->vm_start; + if (hi - lo >= len && (addr == -ENOMEM || addr < hi - len)) + addr = hi - len; + } + /* we're at the last one; let's try the top */ + if (prev && TASK_SIZE - prev->vm_end >= len) + addr = TASK_SIZE - len; +out: + return addr; +} diff -prauN linux-2.6.0-test5/arch/i386/oprofile/nmi_int.c wli-2.6.0-test5-bk12-25/arch/i386/oprofile/nmi_int.c --- linux-2.6.0-test5/arch/i386/oprofile/nmi_int.c 2003-09-08 12:50:29.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/i386/oprofile/nmi_int.c 2003-09-25 19:15:46.000000000 -0700 @@ -372,12 +372,12 @@ int __init nmi_init(struct oprofile_oper model = &op_athlon_spec; nmi_ops.cpu_type = "i386/athlon"; break; -#if defined(CONFIG_X86_64) case 0xf: model = &op_athlon_spec; + /* Actually it could be i386/hammer too, but give + user space an consistent name. */ nmi_ops.cpu_type = "x86-64/hammer"; break; -#endif /* CONFIG_X86_64 */ } break; diff -prauN linux-2.6.0-test5/arch/ia64/Kconfig wli-2.6.0-test5-bk12-25/arch/ia64/Kconfig --- linux-2.6.0-test5/arch/ia64/Kconfig 2003-09-08 12:50:32.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ia64/Kconfig 2003-09-25 19:15:46.000000000 -0700 @@ -267,7 +267,7 @@ config IA64_MCA unsure, answer Y. config PM - bool + bool "Power Management support" depends on IA64_GENERIC || IA64_DIG || IA64_HP_ZX1 default y ---help--- @@ -304,9 +304,6 @@ config FORCE_MAX_ZONEORDER int default "18" -config HUGETLB_PAGE - bool "IA-64 Huge TLB Page Support" - choice prompt "IA-64 Huge TLB Page Size" depends on HUGETLB_PAGE @@ -413,6 +410,16 @@ config IA64_PALINFO To use this option, you have to ensure that the "/proc file system support" (CONFIG_PROC_FS) is enabled, too. +config IA64_SALINFO + tristate "/proc/sal support" + help + The /proc/sal directory exports the SAL (system abstraction layer) + feature bits, like whether the platform is subject to ITC drift. It + is intended to be used by user programs that care about such things. + + To use this option, you have to ensure that the "/proc file system + support" (CONFIG_PROC_FS) is enabled, too. + config EFI_VARS tristate "/proc/efi/vars support" help @@ -424,9 +431,15 @@ config EFI_VARS support" (CONFIG_PROC_FS) is enabled, too. config NR_CPUS - int "Maximum number of CPUs (2-64)" + int "Maximum number of CPUs" depends on SMP default "64" + help + You should set this to the number of CPUs in your system, but + keep in mind that a kernel compiled for, e.g., 2 CPUs will boot but + only use 2 CPUs on a >2 CPU system. Setting this to a value larger + than 64 will cause the use of a CPU mask array, causing a small + performance hit. source "fs/Kconfig.binfmt" @@ -569,6 +582,7 @@ source "lib/Kconfig" source "arch/ia64/hp/sim/Kconfig" +source "arch/ia64/oprofile/Kconfig" menu "Kernel hacking" diff -prauN linux-2.6.0-test5/arch/ia64/Makefile wli-2.6.0-test5-bk12-25/arch/ia64/Makefile --- linux-2.6.0-test5/arch/ia64/Makefile 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ia64/Makefile 2003-09-25 19:15:46.000000000 -0700 @@ -65,6 +65,7 @@ drivers-$(CONFIG_PCI) += arch/ia64/pci/ drivers-$(CONFIG_IA64_HP_SIM) += arch/ia64/hp/sim/ drivers-$(CONFIG_IA64_HP_ZX1) += arch/ia64/hp/common/ arch/ia64/hp/zx1/ drivers-$(CONFIG_IA64_GENERIC) += arch/ia64/hp/common/ arch/ia64/hp/zx1/ arch/ia64/hp/sim/ +drivers-$(CONFIG_OPROFILE) += arch/ia64/oprofile/ boot := arch/ia64/hp/sim/boot diff -prauN linux-2.6.0-test5/arch/ia64/hp/common/sba_iommu.c wli-2.6.0-test5-bk12-25/arch/ia64/hp/common/sba_iommu.c --- linux-2.6.0-test5/arch/ia64/hp/common/sba_iommu.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ia64/hp/common/sba_iommu.c 2003-09-25 19:15:46.000000000 -0700 @@ -54,6 +54,11 @@ */ #define ALLOW_IOV_BYPASS +#ifdef CONFIG_PROC_FS + /* turn it off for now; without per-CPU counters, it's too much of a scalability bottleneck: */ +# define SBA_PROC_FS 0 +#endif + /* ** If a device prefetches beyond the end of a valid pdir entry, it will cause ** a hard failure, ie. MCA. Version 3.0 and later of the zx1 LBA should @@ -193,7 +198,7 @@ struct ioc { } saved[DELAYED_RESOURCE_CNT]; #endif -#ifdef CONFIG_PROC_FS +#if SBA_PROC_FS #define SBA_SEARCH_SAMPLE 0x100 unsigned long avg_search[SBA_SEARCH_SAMPLE]; unsigned long avg_idx; /* current index into avg_search */ @@ -227,12 +232,7 @@ struct ioc { static struct ioc *ioc_list; static int reserve_sba_gart = 1; -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) #define sba_sg_address(sg) (page_address((sg)->page) + (sg)->offset) -#else -#define sba_sg_address(sg) ((sg)->address ? (sg)->address : \ - page_address((sg)->page) + (sg)->offset) -#endif #ifdef FULL_VALID_PDIR static u64 prefetch_spill_page; @@ -522,7 +522,7 @@ static int sba_alloc_range(struct ioc *ioc, size_t size) { unsigned int pages_needed = size >> IOVP_SHIFT; -#ifdef CONFIG_PROC_FS +#if SBA_PROC_FS unsigned long itc_start = ia64_get_itc(); #endif unsigned long pide; @@ -556,7 +556,7 @@ sba_alloc_range(struct ioc *ioc, size_t (uint) ((unsigned long) ioc->res_hint - (unsigned long) ioc->res_map), ioc->res_bitshift ); -#ifdef CONFIG_PROC_FS +#if SBA_PROC_FS { unsigned long itc_end = ia64_get_itc(); unsigned long tmp = itc_end - itc_start; @@ -598,7 +598,7 @@ sba_free_range(struct ioc *ioc, dma_addr __FUNCTION__, (uint) iova, size, bits_not_wanted, m, pide, res_ptr, *res_ptr); -#ifdef CONFIG_PROC_FS +#if SBA_PROC_FS ioc->used_pages -= bits_not_wanted; #endif @@ -790,7 +790,7 @@ sba_map_single(struct device *dev, void ** Device is bit capable of DMA'ing to the buffer... ** just return the PCI address of ptr */ -#ifdef CONFIG_PROC_FS +#if SBA_PROC_FS spin_lock_irqsave(&ioc->res_lock, flags); ioc->msingle_bypass++; spin_unlock_irqrestore(&ioc->res_lock, flags); @@ -816,7 +816,7 @@ sba_map_single(struct device *dev, void panic("Sanity check failed"); #endif -#ifdef CONFIG_PROC_FS +#if SBA_PROC_FS ioc->msingle_calls++; ioc->msingle_pages += size >> IOVP_SHIFT; #endif @@ -875,7 +875,7 @@ void sba_unmap_single(struct device *dev /* ** Address does not fall w/in IOVA, must be bypassing */ -#ifdef CONFIG_PROC_FS +#if SBA_PROC_FS spin_lock_irqsave(&ioc->res_lock, flags); ioc->usingle_bypass++; spin_unlock_irqrestore(&ioc->res_lock, flags); @@ -900,7 +900,7 @@ void sba_unmap_single(struct device *dev size = ROUNDUP(size, IOVP_SIZE); spin_lock_irqsave(&ioc->res_lock, flags); -#ifdef CONFIG_PROC_FS +#if SBA_PROC_FS ioc->usingle_calls++; ioc->usingle_pages += size >> IOVP_SHIFT; #endif @@ -962,20 +962,20 @@ void sba_unmap_single(struct device *dev /** - * sba_alloc_consistent - allocate/map shared mem for DMA - * @hwdev: instance of PCI owned by the driver that's asking. + * sba_alloc_coherent - allocate/map shared mem for DMA + * @dev: instance of PCI owned by the driver that's asking. * @size: number of bytes mapped in driver buffer. * @dma_handle: IOVA of new buffer. * * See Documentation/DMA-mapping.txt */ void * -sba_alloc_coherent (struct device *hwdev, size_t size, dma_addr_t *dma_handle, int flags) +sba_alloc_coherent (struct device *dev, size_t size, dma_addr_t *dma_handle, int flags) { struct ioc *ioc; void *addr; - addr = (void *) __get_free_pages(flags, get_order(size)); + addr = (void *) __get_free_pages(flags, get_order(size)); if (!addr) return NULL; @@ -983,7 +983,7 @@ sba_alloc_coherent (struct device *hwdev * REVISIT: if sba_map_single starts needing more than dma_mask from the * device, this needs to be updated. */ - ioc = GET_IOC(hwdev); + ioc = GET_IOC(dev); ASSERT(ioc); *dma_handle = sba_map_single(&ioc->sac_only_dev->dev, addr, size, 0); @@ -993,17 +993,17 @@ sba_alloc_coherent (struct device *hwdev /** - * sba_free_consistent - free/unmap shared mem for DMA - * @hwdev: instance of PCI owned by the driver that's asking. + * sba_free_coherent - free/unmap shared mem for DMA + * @dev: instance of PCI owned by the driver that's asking. * @size: number of bytes mapped in driver buffer. * @vaddr: virtual address IOVA of "consistent" buffer. * @dma_handler: IO virtual address of "consistent" buffer. * * See Documentation/DMA-mapping.txt */ -void sba_free_coherent (struct device *hwdev, size_t size, void *vaddr, dma_addr_t dma_handle) +void sba_free_coherent (struct device *dev, size_t size, void *vaddr, dma_addr_t dma_handle) { - sba_unmap_single(hwdev, dma_handle, size, 0); + sba_unmap_single(dev, dma_handle, size, 0); free_pages((unsigned long) vaddr, get_order(size)); } @@ -1083,7 +1083,7 @@ sba_fill_pdir( cnt += dma_offset; dma_offset=0; /* only want offset on first chunk */ cnt = ROUNDUP(cnt, IOVP_SIZE); -#ifdef CONFIG_PROC_FS +#if SBA_PROC_FS ioc->msg_pages += cnt >> IOVP_SHIFT; #endif do { @@ -1273,7 +1273,7 @@ int sba_map_sg(struct device *dev, struc sg->dma_length = sg->length; sg->dma_address = virt_to_phys(sba_sg_address(sg)); } -#ifdef CONFIG_PROC_FS +#if SBA_PROC_FS spin_lock_irqsave(&ioc->res_lock, flags); ioc->msg_bypass++; spin_unlock_irqrestore(&ioc->res_lock, flags); @@ -1286,7 +1286,7 @@ int sba_map_sg(struct device *dev, struc sglist->dma_length = sglist->length; sglist->dma_address = sba_map_single(dev, sba_sg_address(sglist), sglist->length, dir); -#ifdef CONFIG_PROC_FS +#if SBA_PROC_FS /* ** Should probably do some stats counting, but trying to ** be precise quickly starts wasting CPU time. @@ -1305,7 +1305,7 @@ int sba_map_sg(struct device *dev, struc } #endif -#ifdef CONFIG_PROC_FS +#if SBA_PROC_FS ioc->msg_calls++; #endif @@ -1368,7 +1368,7 @@ void sba_unmap_sg (struct device *dev, s ioc = GET_IOC(dev); ASSERT(ioc); -#ifdef CONFIG_PROC_FS +#if SBA_PROC_FS ioc->usg_calls++; #endif @@ -1381,7 +1381,7 @@ void sba_unmap_sg (struct device *dev, s while (nents && sglist->dma_length) { sba_unmap_single(dev, sglist->dma_address, sglist->dma_length, dir); -#ifdef CONFIG_PROC_FS +#if SBA_PROC_FS /* ** This leaves inconsistent data in the stats, but we can't ** tell which sg lists were mapped by map_single and which @@ -1709,7 +1709,7 @@ ioc_init(u64 hpa, void *handle) ** **************************************************************************/ -#ifdef CONFIG_PROC_FS +#if SBA_PROC_FS static void * ioc_start(struct seq_file *s, loff_t *pos) { @@ -1763,7 +1763,7 @@ ioc_show(struct seq_file *s, void *v) if (ioc->avg_search[i] > max) max = ioc->avg_search[i]; if (ioc->avg_search[i] < min) min = ioc->avg_search[i]; } - avg /= SBA_SEARCH_SAMPLE; + avg /= SBA_SEARCH_SAMPLE; seq_printf(s, " Bitmap search : %ld/%ld/%ld (min/avg/max CPU Cycles)\n", min, avg, max); seq_printf(s, "pci_map_single(): %12ld calls %12ld pages (avg %d/1000)\n", @@ -1864,7 +1864,7 @@ ioc_proc_init(void) } #endif -void +static void sba_connect_bus(struct pci_bus *bus) { acpi_handle handle, parent; @@ -1872,7 +1872,7 @@ sba_connect_bus(struct pci_bus *bus) struct ioc *ioc; if (!PCI_CONTROLLER(bus)) - panic(PFX "no sysdata on bus %d!\n",bus->number); + panic(PFX "no sysdata on bus %d!\n", bus->number); if (PCI_CONTROLLER(bus)->iommu) return; @@ -1955,7 +1955,7 @@ sba_init(void) } #endif -#ifdef CONFIG_PROC_FS +#if SBA_PROC_FS ioc_proc_init(); #endif return 0; diff -prauN linux-2.6.0-test5/arch/ia64/hp/sim/boot/boot_head.S wli-2.6.0-test5-bk12-25/arch/ia64/hp/sim/boot/boot_head.S --- linux-2.6.0-test5/arch/ia64/hp/sim/boot/boot_head.S 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ia64/hp/sim/boot/boot_head.S 2003-09-25 19:15:46.000000000 -0700 @@ -27,6 +27,14 @@ GLOBAL_ENTRY(_start) br.call.sptk.many rp=start_bootloader END(_start) +/* + * Set a break point on this function so that symbols are available to set breakpoints in + * the kernel being debugged. + */ +GLOBAL_ENTRY(debug_break) + br.ret.sptk.many b0 +END(debug_break) + GLOBAL_ENTRY(ssc) .regstk 5,0,0,0 mov r15=in4 diff -prauN linux-2.6.0-test5/arch/ia64/hp/sim/boot/bootloader.c wli-2.6.0-test5-bk12-25/arch/ia64/hp/sim/boot/bootloader.c --- linux-2.6.0-test5/arch/ia64/hp/sim/boot/bootloader.c 2003-09-08 12:50:28.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ia64/hp/sim/boot/bootloader.c 2003-09-25 19:15:46.000000000 -0700 @@ -37,15 +37,7 @@ struct disk_stat { extern void jmp_to_kernel (unsigned long bp, unsigned long e_entry); extern struct ia64_boot_param *sys_fw_init (const char *args, int arglen); - -/* - * Set a break point on this function so that symbols are available to set breakpoints in - * the kernel being debugged. - */ -static void -debug_break (void) -{ -} +extern void debug_break (void); static void cons_write (const char *buf) diff -prauN linux-2.6.0-test5/arch/ia64/ia32/binfmt_elf32.c wli-2.6.0-test5-bk12-25/arch/ia64/ia32/binfmt_elf32.c --- linux-2.6.0-test5/arch/ia64/ia32/binfmt_elf32.c 2003-09-08 12:50:28.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ia64/ia32/binfmt_elf32.c 2003-09-28 21:47:08.000000000 -0700 @@ -203,7 +203,8 @@ ia32_setup_arg_pages (struct linux_binpr struct page *page = bprm->page[i]; if (page) { bprm->page[i] = NULL; - put_dirty_page(current, page, stack_base, PAGE_COPY); + put_dirty_page(current, mpnt, page, + stack_base, PAGE_COPY); } stack_base += PAGE_SIZE; } diff -prauN linux-2.6.0-test5/arch/ia64/ia32/elfcore32.h wli-2.6.0-test5-bk12-25/arch/ia64/ia32/elfcore32.h --- linux-2.6.0-test5/arch/ia64/ia32/elfcore32.h 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ia64/ia32/elfcore32.h 2003-09-25 19:15:46.000000000 -0700 @@ -8,6 +8,8 @@ #ifndef _ELFCORE32_H_ #define _ELFCORE32_H_ +#include + #define USE_ELF_CORE_DUMP 1 /* Override elfcore.h */ @@ -79,8 +81,7 @@ struct elf_prpsinfo pr_reg[11] = regs->r1; \ pr_reg[12] = regs->cr_iip; \ pr_reg[13] = regs->r17 & 0xffff; \ - asm volatile ("mov %0=ar.eflag ;;" \ - : "=r"(pr_reg[14])); \ + pr_reg[14] = ia64_getreg(_IA64_REG_AR_EFLAG); \ pr_reg[15] = regs->r12; \ pr_reg[16] = (regs->r17 >> 16) & 0xffff; diff -prauN linux-2.6.0-test5/arch/ia64/ia32/ia32priv.h wli-2.6.0-test5-bk12-25/arch/ia64/ia32/ia32priv.h --- linux-2.6.0-test5/arch/ia64/ia32/ia32priv.h 2003-09-08 12:50:38.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ia64/ia32/ia32priv.h 2003-09-25 19:15:46.000000000 -0700 @@ -168,15 +168,15 @@ struct ucontext_ia32 { }; struct stat64 { - unsigned short st_dev; - unsigned char __pad0[10]; + unsigned long long st_dev; + unsigned char __pad0[4]; unsigned int __st_ino; unsigned int st_mode; unsigned int st_nlink; unsigned int st_uid; unsigned int st_gid; - unsigned short st_rdev; - unsigned char __pad3[10]; + unsigned long long st_rdev; + unsigned char __pad3[4]; unsigned int st_size_lo; unsigned int st_size_hi; unsigned int st_blksize; diff -prauN linux-2.6.0-test5/arch/ia64/ia32/sys_ia32.c wli-2.6.0-test5-bk12-25/arch/ia64/ia32/sys_ia32.c --- linux-2.6.0-test5/arch/ia64/ia32/sys_ia32.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ia64/ia32/sys_ia32.c 2003-09-25 19:15:46.000000000 -0700 @@ -76,6 +76,7 @@ #define OFFSET4K(a) ((a) & 0xfff) #define PAGE_START(addr) ((addr) & PAGE_MASK) +#define MINSIGSTKSZ_IA32 2048 #define high2lowuid(uid) ((uid) > 65535 ? 65534 : (uid)) #define high2lowgid(gid) ((gid) > 65535 ? 65534 : (gid)) @@ -179,19 +180,21 @@ int cp_compat_stat(struct kstat *stat, s { int err; - if ((u64) stat->size > MAX_NON_LFS) + if ((u64) stat->size > MAX_NON_LFS || + !old_valid_dev(stat->dev) || + !old_valid_dev(stat->rdev)) return -EOVERFLOW; if (clear_user(ubuf, sizeof(*ubuf))) return -EFAULT; - err = __put_user(stat->dev, &ubuf->st_dev); + err = __put_user(old_encode_dev(stat->dev), &ubuf->st_dev); err |= __put_user(stat->ino, &ubuf->st_ino); err |= __put_user(stat->mode, &ubuf->st_mode); err |= __put_user(stat->nlink, &ubuf->st_nlink); err |= __put_user(high2lowuid(stat->uid), &ubuf->st_uid); err |= __put_user(high2lowgid(stat->gid), &ubuf->st_gid); - err |= __put_user(stat->rdev, &ubuf->st_rdev); + err |= __put_user(old_encode_dev(stat->rdev), &ubuf->st_rdev); err |= __put_user(stat->size, &ubuf->st_size); err |= __put_user(stat->atime.tv_sec, &ubuf->st_atime); err |= __put_user(stat->atime.tv_nsec, &ubuf->st_atime_nsec); @@ -2262,10 +2265,18 @@ sys32_sigaltstack (ia32_stack_t *uss32, return -EFAULT; uss.ss_sp = (void *) (long) buf32.ss_sp; uss.ss_flags = buf32.ss_flags; - uss.ss_size = buf32.ss_size; + /* MINSIGSTKSZ is different for ia32 vs ia64. We lie here to pass the + check and set it to the user requested value later */ + if (buf32.ss_size < MINSIGSTKSZ_IA32) { + ret = -ENOMEM; + goto out; + } + uss.ss_size = MINSIGSTKSZ; set_fs(KERNEL_DS); ret = do_sigaltstack(uss32 ? &uss : NULL, &uoss, pt->r12); + current->sas_ss_size = buf32.ss_size; set_fs(old_fs); +out: if (ret < 0) return(ret); if (uoss32) { @@ -2479,7 +2490,7 @@ putstat64 (struct stat64 *ubuf, struct k if (clear_user(ubuf, sizeof(*ubuf))) return -EFAULT; - err = __put_user(kbuf->dev, &ubuf->st_dev); + err = __put_user(huge_encode_dev(kbuf->dev), &ubuf->st_dev); err |= __put_user(kbuf->ino, &ubuf->__st_ino); err |= __put_user(kbuf->ino, &ubuf->st_ino_lo); err |= __put_user(kbuf->ino >> 32, &ubuf->st_ino_hi); @@ -2487,7 +2498,7 @@ putstat64 (struct stat64 *ubuf, struct k err |= __put_user(kbuf->nlink, &ubuf->st_nlink); err |= __put_user(kbuf->uid, &ubuf->st_uid); err |= __put_user(kbuf->gid, &ubuf->st_gid); - err |= __put_user(kbuf->rdev, &ubuf->st_rdev); + err |= __put_user(huge_encode_dev(kbuf->rdev), &ubuf->st_rdev); err |= __put_user(kbuf->size, &ubuf->st_size_lo); err |= __put_user((kbuf->size >> 32), &ubuf->st_size_hi); err |= __put_user(kbuf->atime.tv_sec, &ubuf->st_atime); diff -prauN linux-2.6.0-test5/arch/ia64/kernel/Makefile wli-2.6.0-test5-bk12-25/arch/ia64/kernel/Makefile --- linux-2.6.0-test5/arch/ia64/kernel/Makefile 2003-09-08 12:50:42.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ia64/kernel/Makefile 2003-09-25 19:15:46.000000000 -0700 @@ -14,6 +14,7 @@ obj-$(CONFIG_IA64_GENERIC) += acpi-ext.o obj-$(CONFIG_IA64_HP_ZX1) += acpi-ext.o obj-$(CONFIG_IA64_MCA) += mca.o mca_asm.o obj-$(CONFIG_IA64_PALINFO) += palinfo.o +obj-$(CONFIG_IA64_SALINFO) += salinfo.o obj-$(CONFIG_IOSAPIC) += iosapic.o obj-$(CONFIG_MODULES) += module.o obj-$(CONFIG_SMP) += smp.o smpboot.o diff -prauN linux-2.6.0-test5/arch/ia64/kernel/acpi.c wli-2.6.0-test5-bk12-25/arch/ia64/kernel/acpi.c --- linux-2.6.0-test5/arch/ia64/kernel/acpi.c 2003-09-08 12:50:04.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ia64/kernel/acpi.c 2003-09-25 19:15:46.000000000 -0700 @@ -331,7 +331,7 @@ acpi_parse_madt (unsigned long phys_addr #ifdef CONFIG_ACPI_NUMA -#define SLIT_DEBUG +#undef SLIT_DEBUG #define PXM_FLAG_LEN ((MAX_PXM_DOMAINS + 1)/32) @@ -603,11 +603,13 @@ acpi_boot_init (void) printk(KERN_ERR PREFIX "Can't find FADT\n"); #ifdef CONFIG_SMP - smp_boot_data.cpu_count = available_cpus; if (available_cpus == 0) { printk(KERN_INFO "ACPI: Found 0 CPUS; assuming 1\n"); + printk(KERN_INFO "CPU 0 (0x%04x)", hard_smp_processor_id()); + smp_boot_data.cpu_phys_id[available_cpus] = hard_smp_processor_id(); available_cpus = 1; /* We've got at least one of these, no? */ } + smp_boot_data.cpu_count = available_cpus; smp_build_cpu_map(); # ifdef CONFIG_NUMA diff -prauN linux-2.6.0-test5/arch/ia64/kernel/efi.c wli-2.6.0-test5-bk12-25/arch/ia64/kernel/efi.c --- linux-2.6.0-test5/arch/ia64/kernel/efi.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ia64/kernel/efi.c 2003-09-25 19:15:47.000000000 -0700 @@ -324,7 +324,7 @@ efi_memmap_walk (efi_freemem_callback_t check_md = q; if (check_md->attribute & EFI_MEMORY_WB) - trim_bottom(md, granule_addr); + trim_bottom(check_md, granule_addr); if (check_md->phys_addr < granule_addr) continue; @@ -446,10 +446,12 @@ efi_map_pal_code (void) panic("Woah! PAL code size bigger than a granule!"); mask = ~((1 << IA64_GRANULE_SHIFT) - 1); +#if EFI_DEBUG printk(KERN_INFO "CPU %d: mapping PAL code [0x%lx-0x%lx) into [0x%lx-0x%lx)\n", smp_processor_id(), md->phys_addr, md->phys_addr + (md->num_pages << EFI_PAGE_SHIFT), vaddr & mask, (vaddr & mask) + IA64_GRANULE_SIZE); +#endif /* * Cannot write to CRx with PSR.ic=1 diff -prauN linux-2.6.0-test5/arch/ia64/kernel/entry.S wli-2.6.0-test5-bk12-25/arch/ia64/kernel/entry.S --- linux-2.6.0-test5/arch/ia64/kernel/entry.S 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ia64/kernel/entry.S 2003-09-25 19:15:47.000000000 -0700 @@ -1448,7 +1448,7 @@ sys_call_table: data8 sys_sched_setaffinity data8 sys_sched_getaffinity data8 sys_set_tid_address - data8 sys_fadvise64 + data8 sys_fadvise64_64 data8 sys_tgkill // 1235 data8 sys_exit_group data8 sys_lookup_dcookie @@ -1473,7 +1473,7 @@ sys_call_table: data8 sys_clock_nanosleep data8 sys_fstatfs64 data8 sys_statfs64 - data8 sys_fadvise64_64 + data8 ia64_ni_syscall data8 ia64_ni_syscall // 1260 data8 ia64_ni_syscall data8 ia64_ni_syscall diff -prauN linux-2.6.0-test5/arch/ia64/kernel/fsys.S wli-2.6.0-test5-bk12-25/arch/ia64/kernel/fsys.S --- linux-2.6.0-test5/arch/ia64/kernel/fsys.S 2003-09-08 12:49:50.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ia64/kernel/fsys.S 2003-09-25 19:15:47.000000000 -0700 @@ -655,7 +655,7 @@ fsyscall_table: data8 0 // sched_setaffinity data8 0 // sched_getaffinity data8 fsys_set_tid_address // set_tid_address - data8 0 // fadvise64 + data8 0 // fadvise64_64 data8 0 // tgkill // 1235 data8 0 // exit_group data8 0 // lookup_dcookie @@ -680,7 +680,7 @@ fsyscall_table: data8 0 // clock_nanosleep data8 0 // fstatfs64 data8 0 // statfs64 - data8 0 // fadvise64_64 + data8 0 data8 0 // 1260 data8 0 data8 0 diff -prauN linux-2.6.0-test5/arch/ia64/kernel/init_task.c wli-2.6.0-test5-bk12-25/arch/ia64/kernel/init_task.c --- linux-2.6.0-test5/arch/ia64/kernel/init_task.c 2003-09-08 12:50:41.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ia64/kernel/init_task.c 2003-09-25 19:15:47.000000000 -0700 @@ -28,15 +28,13 @@ struct mm_struct init_mm = INIT_MM(init_ */ #define init_thread_info init_task_mem.s.thread_info -static union { +union { struct { struct task_struct task; struct thread_info thread_info; } s; unsigned long stack[KERNEL_STACK_SIZE/sizeof (unsigned long)]; -} init_task_mem asm ("init_task_mem") __attribute__((section(".data.init_task"))) = {{ +} init_task_mem asm ("init_task") __attribute__((section(".data.init_task"))) = {{ .task = INIT_TASK(init_task_mem.s.task), .thread_info = INIT_THREAD_INFO(init_task_mem.s.task) }}; - -extern struct task_struct init_task __attribute__ ((alias("init_task_mem"))); diff -prauN linux-2.6.0-test5/arch/ia64/kernel/mca.c wli-2.6.0-test5-bk12-25/arch/ia64/kernel/mca.c --- linux-2.6.0-test5/arch/ia64/kernel/mca.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ia64/kernel/mca.c 2003-09-25 19:15:47.000000000 -0700 @@ -6,7 +6,7 @@ * Copyright (C) 2003 Hewlett-Packard Co * David Mosberger-Tang * - * Copyright (C) 2002 Dell Computer Corporation + * Copyright (C) 2002 Dell Inc. * Copyright (C) Matt Domsch (Matt_Domsch@dell.com) * * Copyright (C) 2002 Intel @@ -1193,7 +1193,7 @@ static void ia64_mca_cmc_poll (unsigned long dummy) { /* Trigger a CMC interrupt cascade */ - platform_send_ipi(__ffs(cpu_online_map), IA64_CMCP_VECTOR, IA64_IPI_DM_INT, 0); + platform_send_ipi(first_cpu(cpu_online_map), IA64_CMCP_VECTOR, IA64_IPI_DM_INT, 0); } /* @@ -1260,7 +1260,7 @@ static void ia64_mca_cpe_poll (unsigned long dummy) { /* Trigger a CPE interrupt cascade */ - platform_send_ipi(__ffs(cpu_online_map), IA64_CPEP_VECTOR, IA64_IPI_DM_INT, 0); + platform_send_ipi(first_cpu(cpu_online_map), IA64_CPEP_VECTOR, IA64_IPI_DM_INT, 0); } /* diff -prauN linux-2.6.0-test5/arch/ia64/kernel/perfmon.c wli-2.6.0-test5-bk12-25/arch/ia64/kernel/perfmon.c --- linux-2.6.0-test5/arch/ia64/kernel/perfmon.c 2003-09-08 12:50:29.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ia64/kernel/perfmon.c 2003-09-25 19:15:47.000000000 -0700 @@ -58,23 +58,8 @@ #define PFM_CTX_ZOMBIE 4 /* owner of the context is closing it */ #define PFM_CTX_TERMINATED 5 /* the task the context was loaded onto is gone */ -#define CTX_LOADED(c) (c)->ctx_state = PFM_CTX_LOADED -#define CTX_UNLOADED(c) (c)->ctx_state = PFM_CTX_UNLOADED -#define CTX_ZOMBIE(c) (c)->ctx_state = PFM_CTX_ZOMBIE -#define CTX_DESTROYED(c) (c)->ctx_state = PFM_CTX_DESTROYED -#define CTX_MASKED(c) (c)->ctx_state = PFM_CTX_MASKED -#define CTX_TERMINATED(c) (c)->ctx_state = PFM_CTX_TERMINATED - -#define CTX_IS_UNLOADED(c) ((c)->ctx_state == PFM_CTX_UNLOADED) -#define CTX_IS_LOADED(c) ((c)->ctx_state == PFM_CTX_LOADED) -#define CTX_IS_ZOMBIE(c) ((c)->ctx_state == PFM_CTX_ZOMBIE) -#define CTX_IS_MASKED(c) ((c)->ctx_state == PFM_CTX_MASKED) -#define CTX_IS_TERMINATED(c) ((c)->ctx_state == PFM_CTX_TERMINATED) -#define CTX_IS_DEAD(c) ((c)->ctx_state == PFM_CTX_TERMINATED || (c)->ctx_state == PFM_CTX_ZOMBIE) - #define PFM_INVALID_ACTIVATION (~0UL) - /* * depth of message queue */ @@ -155,7 +140,7 @@ * in UP: * - we need to protect against PMU overflow interrupts (local_irq_disable) * - * spin_lock_irqsave()/spin_lock_irqrestore(): + * spin_lock_irqsave()/spin_unlock_irqrestore(): * in SMP: local_irq_disable + spin_lock * in UP : local_irq_disable * @@ -649,6 +634,7 @@ DEFINE_PER_CPU(struct task_struct *, pmu DEFINE_PER_CPU(pfm_context_t *, pmu_ctx); DEFINE_PER_CPU(unsigned long, pmu_activation_number); + /* forward declaration */ static struct file_operations pfm_file_ops; @@ -659,7 +645,13 @@ static struct file_operations pfm_file_o static void pfm_lazy_save_regs (struct task_struct *ta); #endif -#if defined(CONFIG_ITANIUM) +/* + * the HP simulator must be first because + * CONFIG_IA64_HP_SIM is independent of CONFIG_MCKINLEY or CONFIG_ITANIUM + */ +#if defined(CONFIG_IA64_HP_SIM) +#include "perfmon_hpsim.h" +#elif defined(CONFIG_ITANIUM) #include "perfmon_itanium.h" #elif defined(CONFIG_MCKINLEY) #include "perfmon_mckinley.h" @@ -953,13 +945,15 @@ pfm_restore_monitoring(struct task_struc struct thread_struct *th = &task->thread; unsigned long mask; unsigned long psr, val; - int i; + int i, is_system; + + is_system = ctx->ctx_fl_system; if (task != current) { printk(KERN_ERR "perfmon.%d: invalid task[%d] current[%d]\n", __LINE__, task->pid, current->pid); return; } - if (CTX_IS_MASKED(ctx) == 0) { + if (ctx->ctx_state != PFM_CTX_MASKED) { printk(KERN_ERR "perfmon.%d: task[%d] current[%d] invalid state=%d\n", __LINE__, task->pid, current->pid, ctx->ctx_state); return; @@ -975,7 +969,7 @@ pfm_restore_monitoring(struct task_struc * * system-wide session are pinned and self-monitoring */ - if (ctx->ctx_fl_system && (PFM_CPUINFO_GET() & PFM_CPUINFO_DCR_PP)) { + if (is_system && (PFM_CPUINFO_GET() & PFM_CPUINFO_DCR_PP)) { /* disable dcr pp */ ia64_setreg(_IA64_REG_CR_DCR, ia64_getreg(_IA64_REG_CR_DCR) & ~IA64_DCR_PP); pfm_clear_psr_pp(); @@ -1022,7 +1016,7 @@ pfm_restore_monitoring(struct task_struc /* * now restore PSR */ - if (ctx->ctx_fl_system && (PFM_CPUINFO_GET() & PFM_CPUINFO_DCR_PP)) { + if (is_system && (PFM_CPUINFO_GET() & PFM_CPUINFO_DCR_PP)) { /* enable dcr pp */ ia64_setreg(_IA64_REG_CR_DCR, ia64_getreg(_IA64_REG_CR_DCR) | IA64_DCR_PP); ia64_srlz_i(); @@ -1825,6 +1819,7 @@ pfm_close(struct inode *inode, struct fi void *smpl_buf_vaddr = NULL; void *smpl_buf_addr = NULL; int free_possible = 1; + int state, is_system; { u64 psr = pfm_get_psr(); BUG_ON((psr & IA64_PSR_I) == 0UL); @@ -1850,6 +1845,11 @@ pfm_close(struct inode *inode, struct fi PROTECT_CTX(ctx, flags); + state = ctx->ctx_state; + is_system = ctx->ctx_fl_system; + + task = PFM_CTX_TASK(ctx); + /* * remove our file from the async queue, if we use it */ @@ -1859,11 +1859,10 @@ pfm_close(struct inode *inode, struct fi DPRINT(("[%d] after async_queue=%p\n", current->pid, ctx->ctx_async_queue)); } - task = PFM_CTX_TASK(ctx); - DPRINT(("[%d] ctx_state=%d\n", current->pid, ctx->ctx_state)); + DPRINT(("[%d] ctx_state=%d\n", current->pid, state)); - if (CTX_IS_UNLOADED(ctx) || CTX_IS_TERMINATED(ctx)) { + if (state == PFM_CTX_UNLOADED || state == PFM_CTX_TERMINATED) { goto doit; } @@ -1884,7 +1883,7 @@ pfm_close(struct inode *inode, struct fi * * We need to release the resource on the ORIGINAL cpu. */ - if (ctx->ctx_fl_system && ctx->ctx_cpu != smp_processor_id()) { + if (is_system && ctx->ctx_cpu != smp_processor_id()) { DPRINT(("[%d] should be running on CPU%d\n", current->pid, ctx->ctx_cpu)); @@ -1900,9 +1899,10 @@ pfm_close(struct inode *inode, struct fi task->thread.pfm_context = NULL; ctx->ctx_task = NULL; - CTX_UNLOADED(ctx); + ctx->ctx_state = state = PFM_CTX_UNLOADED; pfm_unreserve_session(ctx, 1 , ctx->ctx_cpu); + } else #endif /* CONFIG_SMP */ { @@ -1914,19 +1914,20 @@ pfm_close(struct inode *inode, struct fi */ pfm_context_unload(ctx, NULL, 0, regs); - CTX_TERMINATED(ctx); + ctx->ctx_state = PFM_CTX_TERMINATED; - DPRINT(("[%d] ctx_state=%d\n", current->pid, ctx->ctx_state)); + DPRINT(("[%d] ctx_state=%d\n", current->pid, state)); } goto doit; } + /* * The task is currently blocked or will block after an overflow. * we must force it to wakeup to get out of the * MASKED state and transition to the unloaded state by itself */ - if (CTX_IS_MASKED(ctx) && CTX_OVFL_NOBLOCK(ctx) == 0) { + if (state == PFM_CTX_MASKED && CTX_OVFL_NOBLOCK(ctx) == 0) { /* * set a "partial" zombie state to be checked @@ -1949,7 +1950,7 @@ pfm_close(struct inode *inode, struct fi */ up(&ctx->ctx_restart_sem); - DPRINT(("waking up ctx_state=%d for [%d]\n", ctx->ctx_state, current->pid)); + DPRINT(("waking up ctx_state=%d for [%d]\n", state, current->pid)); /* * put ourself to sleep waiting for the other @@ -1971,24 +1972,24 @@ pfm_close(struct inode *inode, struct fi */ schedule(); - DPRINT(("woken up ctx_state=%d for [%d]\n", ctx->ctx_state, current->pid)); PROTECT_CTX(ctx, flags); + remove_wait_queue(&ctx->ctx_zombieq, &wait); set_current_state(TASK_RUNNING); /* * context is terminated at this point */ - DPRINT(("after zombie wakeup ctx_state=%d for [%d]\n", ctx->ctx_state, current->pid)); + DPRINT(("after zombie wakeup ctx_state=%d for [%d]\n", state, current->pid)); } else { #ifdef CONFIG_SMP /* * switch context to zombie state */ - CTX_ZOMBIE(ctx); + ctx->ctx_state = PFM_CTX_ZOMBIE; DPRINT(("zombie ctx for [%d]\n", task->pid)); /* @@ -2002,6 +2003,10 @@ pfm_close(struct inode *inode, struct fi } doit: /* cannot assume task is defined from now on */ + + /* reload state, may have changed during opening of critical section */ + state = ctx->ctx_state; + /* * the context is still attached to a task (possibly current) * we cannot destroy it right now @@ -2032,10 +2037,9 @@ doit: /* cannot assume task is defined f ctx->ctx_smpl_hdr = NULL; } - DPRINT(("[%d] ctx_state=%d free_possible=%d vaddr=%p addr=%p size=%lu\n", current->pid, - ctx->ctx_state, + state, free_possible, smpl_buf_vaddr, smpl_buf_addr, @@ -2047,7 +2051,7 @@ doit: /* cannot assume task is defined f * UNLOADED and TERMINATED mean that the session has already been * unreserved. */ - if (CTX_IS_ZOMBIE(ctx)) { + if (state == PFM_CTX_ZOMBIE) { pfm_unreserve_session(ctx, ctx->ctx_fl_system , ctx->ctx_cpu); } @@ -2360,10 +2364,23 @@ error_kmem: static int pfm_bad_permissions(struct task_struct *task) { - /* stolen from bad_signal() */ - return (current->session != task->session) - && (current->euid ^ task->suid) && (current->euid ^ task->uid) - && (current->uid ^ task->suid) && (current->uid ^ task->uid); + /* inspired by ptrace_attach() */ + DPRINT(("[%d] cur: uid=%d gid=%d task: euid=%d suid=%d uid=%d egid=%d sgid=%d\n", + current->pid, + current->uid, + current->gid, + task->euid, + task->suid, + task->uid, + task->egid, + task->sgid)); + + return ((current->uid != task->euid) + || (current->uid != task->suid) + || (current->uid != task->uid) + || (current->gid != task->egid) + || (current->gid != task->sgid) + || (current->gid != task->gid)) && !capable(CAP_SYS_PTRACE); } static int @@ -2655,7 +2672,7 @@ pfm_context_create(pfm_context_t *ctx, v /* * context is unloaded */ - CTX_UNLOADED(ctx); + ctx->ctx_state = PFM_CTX_UNLOADED; /* * initialization of context's flags @@ -2787,7 +2804,7 @@ pfm_reset_regs(pfm_context_t *ctx, unsig if (flag == PFM_PMD_NO_RESET) return; - if (CTX_IS_MASKED(ctx)) { + if (ctx->ctx_state == PFM_CTX_MASKED) { pfm_reset_regs_masked(ctx, ovfl_regs, flag); return; } @@ -2836,27 +2853,30 @@ pfm_write_pmcs(pfm_context_t *ctx, void unsigned long value; unsigned long smpl_pmds, reset_pmds; unsigned int cnum, reg_flags, flags; - int i, can_access_pmu = 0, is_loaded; - int is_monitor, is_counting; + int i, can_access_pmu = 0, is_loaded, is_system; + int is_monitor, is_counting, state; int ret = -EINVAL; #define PFM_CHECK_PMC_PM(x, y, z) ((x)->ctx_fl_system ^ PMC_PM(y, z)) - if (CTX_IS_DEAD(ctx)) return -EINVAL; + state = ctx->ctx_state; + is_loaded = state == PFM_CTX_LOADED ? 1 : 0; + is_system = ctx->ctx_fl_system; + + if (state == PFM_CTX_TERMINATED || state == PFM_CTX_ZOMBIE) return -EINVAL; - is_loaded = CTX_IS_LOADED(ctx); if (is_loaded) { thread = &ctx->ctx_task->thread; - can_access_pmu = GET_PMU_OWNER() == ctx->ctx_task ? 1 : 0; /* * In system wide and when the context is loaded, access can only happen * when the caller is running on the CPU being monitored by the session. * It does not have to be the owner (ctx_task) of the context per se. */ - if (ctx->ctx_fl_system && ctx->ctx_cpu != smp_processor_id()) { + if (is_system && ctx->ctx_cpu != smp_processor_id()) { DPRINT(("[%d] should be running on CPU%d\n", current->pid, ctx->ctx_cpu)); return -EBUSY; } + can_access_pmu = GET_PMU_OWNER() == ctx->ctx_task || is_system ? 1 : 0; } for (i = 0; i < count; i++, req++) { @@ -2885,7 +2905,7 @@ pfm_write_pmcs(pfm_context_t *ctx, void * - system-wide session: PMCx.pm=1 (privileged monitor) * - per-task : PMCx.pm=0 (user monitor) */ - if ((is_monitor || is_counting) && value != PMC_DFL_VAL(i) && PFM_CHECK_PMC_PM(ctx, cnum, value)) { + if ((is_monitor || is_counting) && value != PMC_DFL_VAL(cnum) && PFM_CHECK_PMC_PM(ctx, cnum, value)) { DPRINT(("pmc%u pmc_pm=%ld fl_system=%d\n", cnum, PMC_PM(cnum, value), @@ -2893,7 +2913,6 @@ pfm_write_pmcs(pfm_context_t *ctx, void goto error; } - if (is_counting) { pfm_monitor_t *p = (pfm_monitor_t *)&value; /* @@ -2975,7 +2994,7 @@ pfm_write_pmcs(pfm_context_t *ctx, void * make sure we do not try to reset on * restart because we have established new values */ - if (CTX_IS_MASKED(ctx)) ctx->ctx_ovfl_regs[0] &= ~1UL << cnum; + if (state == PFM_CTX_MASKED) ctx->ctx_ovfl_regs[0] &= ~1UL << cnum; } /* * Needed in case the user does not initialize the equivalent @@ -3007,7 +3026,7 @@ pfm_write_pmcs(pfm_context_t *ctx, void /* * write thread state */ - if (ctx->ctx_fl_system == 0) thread->pmcs[cnum] = value; + if (is_system == 0) thread->pmcs[cnum] = value; /* * write hardware register if we can @@ -3067,13 +3086,16 @@ pfm_write_pmds(pfm_context_t *ctx, void pfarg_reg_t *req = (pfarg_reg_t *)arg; unsigned long value, hw_value; unsigned int cnum; - int i, can_access_pmu = 0; - int is_counting, is_loaded; + int i, can_access_pmu = 0, state; + int is_counting, is_loaded, is_system; int ret = -EINVAL; - if (CTX_IS_DEAD(ctx)) return -EINVAL; - is_loaded = CTX_IS_LOADED(ctx); + state = ctx->ctx_state; + is_loaded = state == PFM_CTX_LOADED ? 1 : 0; + is_system = ctx->ctx_fl_system; + + if (state == PFM_CTX_TERMINATED || state == PFM_CTX_ZOMBIE) return -EINVAL; /* * on both UP and SMP, we can only write to the PMC when the task is @@ -3081,16 +3103,16 @@ pfm_write_pmds(pfm_context_t *ctx, void */ if (is_loaded) { thread = &ctx->ctx_task->thread; - can_access_pmu = GET_PMU_OWNER() == ctx->ctx_task ? 1 : 0; /* * In system wide and when the context is loaded, access can only happen * when the caller is running on the CPU being monitored by the session. * It does not have to be the owner (ctx_task) of the context per se. */ - if (ctx->ctx_fl_system && ctx->ctx_cpu != smp_processor_id()) { + if (is_system && ctx->ctx_cpu != smp_processor_id()) { DPRINT(("[%d] should be running on CPU%d\n", current->pid, ctx->ctx_cpu)); return -EBUSY; } + can_access_pmu = GET_PMU_OWNER() == ctx->ctx_task || is_system ? 1 : 0; } for (i = 0; i < count; i++, req++) { @@ -3179,7 +3201,7 @@ pfm_write_pmds(pfm_context_t *ctx, void * make sure we do not try to reset on * restart because we have established new values */ - if (is_counting && CTX_IS_MASKED(ctx)) { + if (is_counting && state == PFM_CTX_MASKED) { ctx->ctx_ovfl_regs[0] &= ~1UL << cnum; } @@ -3187,7 +3209,7 @@ pfm_write_pmds(pfm_context_t *ctx, void /* * write thread state */ - if (ctx->ctx_fl_system == 0) thread->pmds[cnum] = hw_value; + if (is_system == 0) thread->pmds[cnum] = hw_value; /* * write hardware register if we can @@ -3265,35 +3287,40 @@ pfm_read_pmds(pfm_context_t *ctx, void * unsigned long val = 0UL, lval ; pfarg_reg_t *req = (pfarg_reg_t *)arg; unsigned int cnum, reg_flags = 0; - int i, is_loaded, can_access_pmu = 0; + int i, can_access_pmu = 0, state; + int is_loaded, is_system; int ret = -EINVAL; - if (CTX_IS_ZOMBIE(ctx)) return -EINVAL; - /* * access is possible when loaded only for * self-monitoring tasks or in UP mode */ - is_loaded = CTX_IS_LOADED(ctx); + + state = ctx->ctx_state; + is_loaded = state == PFM_CTX_LOADED ? 1 : 0; + is_system = ctx->ctx_fl_system; + + if (state == PFM_CTX_ZOMBIE) return -EINVAL; if (is_loaded) { thread = &ctx->ctx_task->thread; /* - * this can be true when not self-monitoring only in UP - */ - can_access_pmu = GET_PMU_OWNER() == ctx->ctx_task? 1 : 0; - - if (can_access_pmu) ia64_srlz_d(); - /* * In system wide and when the context is loaded, access can only happen * when the caller is running on the CPU being monitored by the session. * It does not have to be the owner (ctx_task) of the context per se. */ - if (ctx->ctx_fl_system && ctx->ctx_cpu != smp_processor_id()) { + if (is_system && ctx->ctx_cpu != smp_processor_id()) { DPRINT(("[%d] should be running on CPU%d\n", current->pid, ctx->ctx_cpu)); return -EBUSY; } + /* + * this can be true when not self-monitoring only in UP + */ + can_access_pmu = GET_PMU_OWNER() == ctx->ctx_task || is_system ? 1 : 0; + + if (can_access_pmu) ia64_srlz_d(); } + DPRINT(("enter loaded=%d access_pmu=%d ctx_state=%d\n", is_loaded, can_access_pmu, @@ -3334,7 +3361,7 @@ pfm_read_pmds(pfm_context_t *ctx, void * * if context is zombie, then task does not exist anymore. * In this case, we use the full value saved in the context (pfm_flush_regs()). */ - val = CTX_IS_LOADED(ctx) ? thread->pmds[cnum] : 0UL; + val = state == PFM_CTX_LOADED ? thread->pmds[cnum] : 0UL; } if (PMD_IS_COUNTING(cnum)) { @@ -3628,7 +3655,7 @@ pfm_restart(pfm_context_t *ctx, void *ar if (rst_ctrl.bits.mask_monitoring == 0) { DPRINT(("resuming monitoring for [%d]\n", task->pid)); - if (CTX_IS_MASKED(ctx)) pfm_restore_monitoring(task); + if (state == PFM_CTX_MASKED) pfm_restore_monitoring(task); } else { DPRINT(("keeping monitoring stopped for [%d]\n", task->pid)); @@ -3643,7 +3670,7 @@ pfm_restart(pfm_context_t *ctx, void *ar /* * back to LOADED state */ - CTX_LOADED(ctx); + ctx->ctx_state = PFM_CTX_LOADED; return 0; } @@ -3706,30 +3733,34 @@ pfm_write_ibr_dbr(int mode, pfm_context_ dbreg_t dbreg; unsigned int rnum; int first_time; - int ret = 0; - int i, can_access_pmu = 0, is_loaded; + int ret = 0, state; + int i, can_access_pmu = 0; + int is_system, is_loaded; if (pmu_conf.use_rr_dbregs == 0) return -EINVAL; - if (CTX_IS_DEAD(ctx)) return -EINVAL; + state = ctx->ctx_state; + is_loaded = state == PFM_CTX_LOADED ? 1 : 0; + is_system = ctx->ctx_fl_system; + + if (state == PFM_CTX_TERMINATED || state == PFM_CTX_ZOMBIE) return -EINVAL; - is_loaded = CTX_IS_LOADED(ctx); /* * on both UP and SMP, we can only write to the PMC when the task is * the owner of the local PMU. */ if (is_loaded) { thread = &ctx->ctx_task->thread; - can_access_pmu = GET_PMU_OWNER() == ctx->ctx_task ? 1 : 0; /* * In system wide and when the context is loaded, access can only happen * when the caller is running on the CPU being monitored by the session. * It does not have to be the owner (ctx_task) of the context per se. */ - if (ctx->ctx_fl_system && ctx->ctx_cpu != smp_processor_id()) { + if (is_system && ctx->ctx_cpu != smp_processor_id()) { DPRINT(("[%d] should be running on CPU%d\n", current->pid, ctx->ctx_cpu)); return -EBUSY; } + can_access_pmu = GET_PMU_OWNER() == ctx->ctx_task || is_system ? 1 : 0; } /* @@ -3758,7 +3789,7 @@ pfm_write_ibr_dbr(int mode, pfm_context_ */ LOCK_PFS(); - if (first_time && ctx->ctx_fl_system) { + if (first_time && is_system) { if (pfm_sessions.pfs_ptrace_use_dbregs) ret = -EBUSY; else @@ -3906,16 +3937,19 @@ pfm_stop(pfm_context_t *ctx, void *arg, { struct pt_regs *tregs; struct task_struct *task = PFM_CTX_TASK(ctx); + int state, is_system; + state = ctx->ctx_state; + is_system = ctx->ctx_fl_system; - if (CTX_IS_LOADED(ctx) == 0 && CTX_IS_MASKED(ctx) == 0) return -EINVAL; + if (state != PFM_CTX_LOADED && state != PFM_CTX_MASKED) return -EINVAL; /* * In system wide and when the context is loaded, access can only happen * when the caller is running on the CPU being monitored by the session. * It does not have to be the owner (ctx_task) of the context per se. */ - if (ctx->ctx_fl_system && ctx->ctx_cpu != smp_processor_id()) { + if (is_system && ctx->ctx_cpu != smp_processor_id()) { DPRINT(("[%d] should be running on CPU%d\n", current->pid, ctx->ctx_cpu)); return -EBUSY; } @@ -3925,7 +3959,7 @@ pfm_stop(pfm_context_t *ctx, void *arg, * and the user level state of the caller, which may not * necessarily be the creator of the context. */ - if (ctx->ctx_fl_system) { + if (is_system) { /* * Update local PMU first * @@ -3985,15 +4019,19 @@ static int pfm_start(pfm_context_t *ctx, void *arg, int count, struct pt_regs *regs) { struct pt_regs *tregs; + int state, is_system; + + state = ctx->ctx_state; + is_system = ctx->ctx_fl_system; - if (CTX_IS_LOADED(ctx) == 0) return -EINVAL; + if (state != PFM_CTX_LOADED) return -EINVAL; /* * In system wide and when the context is loaded, access can only happen * when the caller is running on the CPU being monitored by the session. * It does not have to be the owner (ctx_task) of the context per se. */ - if (ctx->ctx_fl_system && ctx->ctx_cpu != smp_processor_id()) { + if (is_system && ctx->ctx_cpu != smp_processor_id()) { DPRINT(("[%d] should be running on CPU%d\n", current->pid, ctx->ctx_cpu)); return -EBUSY; } @@ -4003,7 +4041,7 @@ pfm_start(pfm_context_t *ctx, void *arg, * and the user level state of the caller, which may not * necessarily be the creator of the context. */ - if (ctx->ctx_fl_system) { + if (is_system) { /* * set user level psr.pp for the caller @@ -4055,7 +4093,6 @@ pfm_start(pfm_context_t *ctx, void *arg, */ ia64_psr(tregs)->up = 1; } - return 0; } @@ -4121,11 +4158,14 @@ pfm_context_load(pfm_context_t *ctx, voi unsigned long *pmcs_source, *pmds_source; int the_cpu; int ret = 0; + int state, is_system; + state = ctx->ctx_state; + is_system = ctx->ctx_fl_system; /* * can only load from unloaded or terminated state */ - if (CTX_IS_UNLOADED(ctx) == 0 && CTX_IS_TERMINATED(ctx) == 0) { + if (state != PFM_CTX_UNLOADED && state != PFM_CTX_TERMINATED) { DPRINT(("[%d] cannot load to [%d], invalid ctx_state=%d\n", current->pid, req->load_pid, @@ -4151,7 +4191,7 @@ pfm_context_load(pfm_context_t *ctx, voi /* * system wide is self monitoring only */ - if (ctx->ctx_fl_system && task != current) { + if (is_system && task != current) { DPRINT(("system wide is self monitoring only current=%d load_pid=%d\n", current->pid, req->load_pid)); @@ -4191,7 +4231,7 @@ pfm_context_load(pfm_context_t *ctx, voi /* * now reserve the session */ - ret = pfm_reserve_session(current, ctx->ctx_fl_system, the_cpu); + ret = pfm_reserve_session(current, is_system, the_cpu); if (ret) goto error; ret = -EBUSY; @@ -4216,15 +4256,14 @@ pfm_context_load(pfm_context_t *ctx, voi pfm_reset_msgq(ctx); - CTX_LOADED(ctx); + ctx->ctx_state = PFM_CTX_LOADED; /* * link context to task */ ctx->ctx_task = task; - if (ctx->ctx_fl_system) { - + if (is_system) { /* * we load as stopped */ @@ -4250,7 +4289,7 @@ pfm_context_load(pfm_context_t *ctx, voi */ if (task == current) { - if (ctx->ctx_fl_system == 0) { + if (is_system == 0) { /* allow user level control */ ia64_psr(regs)->sp = 0; @@ -4318,14 +4357,14 @@ error: /* * release task, there is now a link with the context */ - if (ctx->ctx_fl_system == 0 && task != current) { + if (is_system == 0 && task != current) { pfm_put_task(task); if (ret == 0) { ret = pfm_check_task_exist(ctx); if (ret) { - CTX_UNLOADED(ctx); - ctx->ctx_task = NULL; + ctx->ctx_state = PFM_CTX_UNLOADED; + ctx->ctx_task = NULL; } } } @@ -4347,40 +4386,34 @@ pfm_context_unload(pfm_context_t *ctx, v { struct task_struct *task = PFM_CTX_TASK(ctx); struct pt_regs *tregs; + int state, is_system; DPRINT(("ctx_state=%d task [%d]\n", ctx->ctx_state, task ? task->pid : -1)); + state = ctx->ctx_state; + is_system = ctx->ctx_fl_system; + /* * unload only when necessary */ - if (CTX_IS_TERMINATED(ctx) || CTX_IS_UNLOADED(ctx)) { + if (state == PFM_CTX_TERMINATED || state == PFM_CTX_UNLOADED) { DPRINT(("[%d] ctx_state=%d, nothing to do\n", current->pid, ctx->ctx_state)); return 0; } /* - * In system wide and when the context is loaded, access can only happen - * when the caller is running on the CPU being monitored by the session. - * It does not have to be the owner (ctx_task) of the context per se. - */ - if (ctx->ctx_fl_system && ctx->ctx_cpu != smp_processor_id()) { - DPRINT(("[%d] should be running on CPU%d\n", current->pid, ctx->ctx_cpu)); - return -EBUSY; - } - - /* * clear psr and dcr bits */ pfm_stop(ctx, NULL, 0, regs); - CTX_UNLOADED(ctx); + ctx->ctx_state = state = PFM_CTX_UNLOADED; /* * in system mode, we need to update the PMU directly * and the user level state of the caller, which may not * necessarily be the creator of the context. */ - if (ctx->ctx_fl_system) { + if (is_system) { /* * Update cpuinfo @@ -4524,7 +4557,7 @@ pfm_exit_thread(struct task_struct *task if (ret) { printk(KERN_ERR "perfmon: pfm_exit_thread [%d] state=%d unload failed %d\n", task->pid, ctx->ctx_state, ret); } - CTX_TERMINATED(ctx); + ctx->ctx_state = PFM_CTX_TERMINATED; DPRINT(("ctx terminated by [%d]\n", task->pid)); pfm_end_notify_user(ctx); @@ -4606,16 +4639,19 @@ static int pfm_check_task_state(pfm_context_t *ctx, int cmd, unsigned long flags) { struct task_struct *task; + int state; + + state = ctx->ctx_state; task = PFM_CTX_TASK(ctx); if (task == NULL) { - DPRINT(("context %d no task, state=%d\n", ctx->ctx_fd, ctx->ctx_state)); + DPRINT(("context %d no task, state=%d\n", ctx->ctx_fd, state)); return 0; } DPRINT(("context %d state=%d [%d] task_state=%ld must_stop=%d\n", ctx->ctx_fd, - ctx->ctx_state, + state, task->pid, task->state, PFM_CMD_STOPPED(cmd))); @@ -4631,9 +4667,9 @@ pfm_check_task_state(pfm_context_t *ctx, /* * context is UNLOADED, MASKED, TERMINATED we are safe to go */ - if (CTX_IS_LOADED(ctx) == 0) return 0; + if (state != PFM_CTX_LOADED == 0) return 0; - if (CTX_IS_ZOMBIE(ctx)) return -EINVAL; + if (state == PFM_CTX_ZOMBIE) return -EINVAL; /* * context is loaded, we must make sure the task is stopped @@ -4653,6 +4689,7 @@ pfm_check_task_state(pfm_context_t *ctx, pfm_wait_task_inactive(task); PROTECT_CTX(ctx, flags); + return 0; } @@ -4830,12 +4867,12 @@ pfm_resume_after_ovfl(pfm_context_t *ctx } if (rst_ctrl.bits.mask_monitoring == 0) { DPRINT(("resuming monitoring\n")); - if (CTX_IS_MASKED(ctx)) pfm_restore_monitoring(current); + if (ctx->ctx_state == PFM_CTX_MASKED) pfm_restore_monitoring(current); } else { DPRINT(("stopping monitoring\n")); //pfm_stop_monitoring(current, regs); } - CTX_LOADED(ctx); + ctx->ctx_state = PFM_CTX_LOADED; } } @@ -4869,7 +4906,7 @@ pfm_context_force_terminate(pfm_context_ /* * switch to terminated state */ - CTX_TERMINATED(ctx); + ctx->ctx_state = PFM_CTX_TERMINATED; DPRINT(("context <%d> terminated for [%d]\n", ctx->ctx_fd, current->pid)); @@ -4922,7 +4959,7 @@ pfm_handle_work(void) /* * must be done before we check non-blocking mode */ - if (ctx->ctx_fl_going_zombie || CTX_IS_ZOMBIE(ctx)) goto do_zombie; + if (ctx->ctx_fl_going_zombie || ctx->ctx_state == PFM_CTX_ZOMBIE) goto do_zombie; ovfl_regs = ctx->ctx_ovfl_regs[0]; @@ -4966,7 +5003,7 @@ nothing_to_do: static int pfm_notify_user(pfm_context_t *ctx, pfm_msg_t *msg) { - if (CTX_IS_ZOMBIE(ctx)) { + if (ctx->ctx_state == PFM_CTX_ZOMBIE) { DPRINT(("ignoring overflow notification, owner is zombie\n")); return 0; } @@ -5049,13 +5086,13 @@ pfm_overflow_handler(struct task_struct pfm_ovfl_arg_t ovfl_arg; unsigned long mask; unsigned long old_val; - unsigned long ovfl_notify = 0UL, ovfl_pmds = 0UL; + unsigned long ovfl_notify = 0UL, ovfl_pmds = 0UL, smpl_pmds = 0UL; unsigned long tstamp; pfm_ovfl_ctrl_t ovfl_ctrl; unsigned int i, has_smpl; int must_notify = 0; - if (unlikely(CTX_IS_ZOMBIE(ctx))) goto stop_monitoring; + if (unlikely(ctx->ctx_state == PFM_CTX_ZOMBIE)) goto stop_monitoring; /* * sanity test. Should never happen @@ -5106,10 +5143,9 @@ pfm_overflow_handler(struct task_struct if (PMC_OVFL_NOTIFY(ctx, i)) ovfl_notify |= 1UL << i; } - DPRINT_ovfl(("ctx_pmd[%d].val=0x%lx old_val=0x%lx pmd=0x%lx ovfl_pmds=0x%lx " - "ovfl_notify=0x%lx\n", - i, ctx->ctx_pmds[i].val, old_val, - ia64_get_pmd(i) & pmu_conf.ovfl_val, ovfl_pmds, ovfl_notify)); + DPRINT_ovfl(("ctx_pmd[%d].val=0x%lx old_val=0x%lx pmd=0x%lx ovfl_pmds=0x%lx ovfl_notify=0x%lx smpl_pmds=0x%lx\n", + i, ctx->ctx_pmds[i].val, old_val, + ia64_get_pmd(i) & pmu_conf.ovfl_val, ovfl_pmds, ovfl_notify, smpl_pmds)); } /* @@ -5128,7 +5164,7 @@ pfm_overflow_handler(struct task_struct */ if (has_smpl) { unsigned long start_cycles, end_cycles; - unsigned long pmd_mask, smpl_pmds; + unsigned long pmd_mask; int j, k, ret = 0; int this_cpu = smp_processor_id(); @@ -5257,7 +5293,7 @@ pfm_overflow_handler(struct task_struct */ if (ovfl_ctrl.bits.mask_monitoring) { pfm_mask_monitoring(task); - CTX_MASKED(ctx); + ctx->ctx_state = PFM_CTX_MASKED; } /* @@ -5553,19 +5589,18 @@ pfm_do_syst_wide_update_task(struct task pfm_set_psr_pp(); ia64_srlz_i(); } - { unsigned long val; - val = ia64_get_pmc(4); - if ((val & (1UL<<23)) == 0UL) printk("perfmon: PMU off: pmc4=0x%lx\n", val); - } } void pfm_syst_wide_update_task(struct task_struct *task, unsigned long info, int is_ctxswin) { unsigned long start, end; + pfm_stats[smp_processor_id()].pfm_sysupdt_count++; start = ia64_get_itc(); + pfm_do_syst_wide_update_task(task, info, is_ctxswin); + end = ia64_get_itc(); pfm_stats[smp_processor_id()].pfm_sysupdt_cycles += end-start; } @@ -5591,7 +5626,7 @@ pfm_save_regs(struct task_struct *task) */ flags = pfm_protect_ctx_ctxsw(ctx); - if (CTX_IS_ZOMBIE(ctx)) { + if (ctx->ctx_state == PFM_CTX_ZOMBIE) { struct pt_regs *regs = ia64_task_regs(task); pfm_clear_psr_up(); @@ -5840,7 +5875,7 @@ pfm_load_regs (struct task_struct *task) BUG_ON(psr & IA64_PSR_I); #endif - if (unlikely(CTX_IS_ZOMBIE(ctx))) { + if (unlikely(ctx->ctx_state == PFM_CTX_ZOMBIE)) { struct pt_regs *regs = ia64_task_regs(task); BUG_ON(ctx->ctx_smpl_hdr); diff -prauN linux-2.6.0-test5/arch/ia64/kernel/perfmon_hpsim.h wli-2.6.0-test5-bk12-25/arch/ia64/kernel/perfmon_hpsim.h --- linux-2.6.0-test5/arch/ia64/kernel/perfmon_hpsim.h 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/ia64/kernel/perfmon_hpsim.h 2003-09-25 19:15:47.000000000 -0700 @@ -0,0 +1,75 @@ +/* + * This file contains the HP SKI Simulator PMU register description tables + * and pmc checkers used by perfmon.c. + * + * Copyright (C) 2002-2003 Hewlett Packard Co + * Stephane Eranian + * + * File mostly contributed by Ian Wienand + * + * This file is included as a dummy template so the kernel does not + * try to initalize registers the simulator can't handle. + * + * Note the simulator does not (currently) implement these registers, i.e., + * they do not count anything. But you can read/write them. + */ + +#define RDEP(x) (1UL<<(x)) + +#ifndef CONFIG_IA64_HP_SIM +#error "This file should only be included for the HP Simulator" +#endif + +static pfm_reg_desc_t pfm_hpsim_pmc_desc[PMU_MAX_PMCS]={ +/* pmc0 */ { PFM_REG_CONTROL , 0, 0x1UL, -1UL, NULL, NULL, {0UL, 0UL, 0UL, 0UL}, {0UL,0UL, 0UL, 0UL}}, +/* pmc1 */ { PFM_REG_CONTROL , 0, 0x0UL, -1UL, NULL, NULL, {0UL, 0UL, 0UL, 0UL}, {0UL,0UL, 0UL, 0UL}}, +/* pmc2 */ { PFM_REG_CONTROL , 0, 0x0UL, -1UL, NULL, NULL, {0UL, 0UL, 0UL, 0UL}, {0UL,0UL, 0UL, 0UL}}, +/* pmc3 */ { PFM_REG_CONTROL , 0, 0x0UL, -1UL, NULL, NULL, {0UL, 0UL, 0UL, 0UL}, {0UL,0UL, 0UL, 0UL}}, +/* pmc4 */ { PFM_REG_COUNTING, 0, 0x0UL, -1UL, NULL, NULL, {RDEP(4), 0UL, 0UL, 0UL}, {0UL,0UL, 0UL, 0UL}}, +/* pmc5 */ { PFM_REG_COUNTING, 0, 0x0UL, -1UL, NULL, NULL, {RDEP(5), 0UL, 0UL, 0UL}, {0UL,0UL, 0UL, 0UL}}, +/* pmc6 */ { PFM_REG_COUNTING, 0, 0x0UL, -1UL, NULL, NULL, {RDEP(6), 0UL, 0UL, 0UL}, {0UL,0UL, 0UL, 0UL}}, +/* pmc7 */ { PFM_REG_COUNTING, 0, 0x0UL, -1UL, NULL, NULL, {RDEP(7), 0UL, 0UL, 0UL}, {0UL,0UL, 0UL, 0UL}}, +/* pmc8 */ { PFM_REG_COUNTING, 0, 0x0UL, -1UL, NULL, NULL, {RDEP(8), 0UL, 0UL, 0UL}, {0UL,0UL, 0UL, 0UL}}, +/* pmc9 */ { PFM_REG_COUNTING, 0, 0x0UL, -1UL, NULL, NULL, {RDEP(9), 0UL, 0UL, 0UL}, {0UL,0UL, 0UL, 0UL}}, +/* pmc10 */ { PFM_REG_COUNTING, 0, 0x0UL, -1UL, NULL, NULL, {RDEP(10), 0UL, 0UL, 0UL}, {0UL,0UL, 0UL, 0UL}}, +/* pmc11 */ { PFM_REG_COUNTING, 0, 0x0UL, -1UL, NULL, NULL, {RDEP(11), 0UL, 0UL, 0UL}, {0UL,0UL, 0UL, 0UL}}, +/* pmc12 */ { PFM_REG_COUNTING, 0, 0x0UL, -1UL, NULL, NULL, {RDEP(12), 0UL, 0UL, 0UL}, {0UL,0UL, 0UL, 0UL}}, +/* pmc13 */ { PFM_REG_COUNTING, 0, 0x0UL, -1UL, NULL, NULL, {RDEP(13), 0UL, 0UL, 0UL}, {0UL,0UL, 0UL, 0UL}}, +/* pmc14 */ { PFM_REG_COUNTING, 0, 0x0UL, -1UL, NULL, NULL, {RDEP(14), 0UL, 0UL, 0UL}, {0UL,0UL, 0UL, 0UL}}, +/* pmc15 */ { PFM_REG_COUNTING, 0, 0x0UL, -1UL, NULL, NULL, {RDEP(15), 0UL, 0UL, 0UL}, {0UL,0UL, 0UL, 0UL}}, + { PFM_REG_END , 0, 0x0UL, -1UL, NULL, NULL, {0,}, {0,}}, /* end marker */ +}; + +static pfm_reg_desc_t pfm_hpsim_pmd_desc[PMU_MAX_PMDS]={ +/* pmd0 */ { PFM_REG_BUFFER, 0, 0x0UL, -1UL, NULL, NULL, {0UL,0UL, 0UL, 0UL}, {0UL,0UL, 0UL, 0UL}}, +/* pmd1 */ { PFM_REG_BUFFER, 0, 0x0UL, -1UL, NULL, NULL, {0UL,0UL, 0UL, 0UL}, {0UL,0UL, 0UL, 0UL}}, +/* pmd2 */ { PFM_REG_BUFFER, 0, 0x0UL, -1UL, NULL, NULL, {0UL,0UL, 0UL, 0UL}, {0UL,0UL, 0UL, 0UL}}, +/* pmd3 */ { PFM_REG_BUFFER, 0, 0x0UL, -1UL, NULL, NULL, {0UL,0UL, 0UL, 0UL}, {0UL,0UL, 0UL, 0UL}}, +/* pmd4 */ { PFM_REG_COUNTING, 0, 0x0UL, -1UL, NULL, NULL, {0UL,0UL, 0UL, 0UL}, {RDEP(4),0UL, 0UL, 0UL}}, +/* pmd5 */ { PFM_REG_COUNTING, 0, 0x0UL, -1UL, NULL, NULL, {0UL,0UL, 0UL, 0UL}, {RDEP(5),0UL, 0UL, 0UL}}, +/* pmd6 */ { PFM_REG_COUNTING, 0, 0x0UL, -1UL, NULL, NULL, {0UL,0UL, 0UL, 0UL}, {RDEP(6),0UL, 0UL, 0UL}}, +/* pmd7 */ { PFM_REG_COUNTING, 0, 0x0UL, -1UL, NULL, NULL, {0UL,0UL, 0UL, 0UL}, {RDEP(7),0UL, 0UL, 0UL}}, +/* pmd8 */ { PFM_REG_COUNTING, 0, 0x0UL, -1UL, NULL, NULL, {0UL,0UL, 0UL, 0UL}, {RDEP(8),0UL, 0UL, 0UL}}, +/* pmd9 */ { PFM_REG_COUNTING, 0, 0x0UL, -1UL, NULL, NULL, {0UL,0UL, 0UL, 0UL}, {RDEP(9),0UL, 0UL, 0UL}}, +/* pmd10 */ { PFM_REG_COUNTING, 0, 0x0UL, -1UL, NULL, NULL, {0UL,0UL, 0UL, 0UL}, {RDEP(10),0UL, 0UL, 0UL}}, +/* pmd11 */ { PFM_REG_COUNTING, 0, 0x0UL, -1UL, NULL, NULL, {0UL,0UL, 0UL, 0UL}, {RDEP(11),0UL, 0UL, 0UL}}, +/* pmd12 */ { PFM_REG_COUNTING, 0, 0x0UL, -1UL, NULL, NULL, {0UL,0UL, 0UL, 0UL}, {RDEP(12),0UL, 0UL, 0UL}}, +/* pmd13 */ { PFM_REG_COUNTING, 0, 0x0UL, -1UL, NULL, NULL, {0UL,0UL, 0UL, 0UL}, {RDEP(13),0UL, 0UL, 0UL}}, +/* pmd14 */ { PFM_REG_COUNTING, 0, 0x0UL, -1UL, NULL, NULL, {0UL,0UL, 0UL, 0UL}, {RDEP(14),0UL, 0UL, 0UL}}, +/* pmd15 */ { PFM_REG_COUNTING, 0, 0x0UL, -1UL, NULL, NULL, {0UL,0UL, 0UL, 0UL}, {RDEP(15),0UL, 0UL, 0UL}}, + { PFM_REG_END , 0, 0x0UL, -1UL, NULL, NULL, {0,}, {0,}}, /* end marker */ +}; + +/* + * impl_pmcs, impl_pmds are computed at runtime to minimize errors! + */ +static pmu_config_t pmu_conf={ + .pmu_name = "hpsim", + .pmu_family = 0x7, /* ski emulator reports as Itanium */ + .enabled = 0, + .ovfl_val = (1UL << 32) - 1, + .num_ibrs = 0, /* does not use */ + .num_dbrs = 0, /* does not use */ + .pmd_desc = pfm_hpsim_pmd_desc, + .pmc_desc = pfm_hpsim_pmc_desc +}; diff -prauN linux-2.6.0-test5/arch/ia64/kernel/salinfo.c wli-2.6.0-test5-bk12-25/arch/ia64/kernel/salinfo.c --- linux-2.6.0-test5/arch/ia64/kernel/salinfo.c 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ia64/kernel/salinfo.c 2003-09-25 19:15:47.000000000 -0700 @@ -5,6 +5,7 @@ * * Copyright (c) 2001 Silicon Graphics, Inc. All rights reserved. * + * 09/11/2003 jbarnes@sgi.com updated for 2.6 * 10/30/2001 jbarnes@sgi.com copied much of Stephane's palinfo * code to create this file */ @@ -59,7 +60,7 @@ salinfo_init(void) *sdir = create_proc_read_entry (salinfo_entries[i].name, 0, salinfo_dir, salinfo_read, (void *)salinfo_entries[i].feature); if (*sdir) - *sdir->owner = THIS_MODULE; + (*sdir)->owner = THIS_MODULE; sdir++; } *sdir++ = salinfo_dir; diff -prauN linux-2.6.0-test5/arch/ia64/kernel/smpboot.c wli-2.6.0-test5-bk12-25/arch/ia64/kernel/smpboot.c --- linux-2.6.0-test5/arch/ia64/kernel/smpboot.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ia64/kernel/smpboot.c 2003-09-25 19:15:47.000000000 -0700 @@ -534,8 +534,8 @@ smp_prepare_cpus (unsigned int max_cpus) printk(KERN_INFO "SMP mode deactivated.\n"); cpus_clear(cpu_online_map); cpus_clear(phys_cpu_present_map); - cpu_set(1, cpu_online_map); - cpu_set(1, phys_cpu_present_map); + cpu_set(0, cpu_online_map); + cpu_set(0, phys_cpu_present_map); return; } } diff -prauN linux-2.6.0-test5/arch/ia64/kernel/time.c wli-2.6.0-test5-bk12-25/arch/ia64/kernel/time.c --- linux-2.6.0-test5/arch/ia64/kernel/time.c 2003-09-08 12:49:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ia64/kernel/time.c 2003-09-25 19:15:47.000000000 -0700 @@ -17,6 +17,7 @@ #include #include #include +#include #include #include @@ -38,27 +39,12 @@ unsigned long last_cli_ip; #endif -static void -do_profile (unsigned long ip) +unsigned long long +sched_clock (void) { - extern cpumask_t prof_cpu_mask; - - if (!prof_buffer) - return; + unsigned long offset = ia64_get_itc(); - if (!cpu_isset(smp_processor_id(), prof_cpu_mask)) - return; - - ip -= (unsigned long) _stext; - ip >>= prof_shift; - /* - * Don't ignore out-of-bounds IP values silently, put them into the last - * histogram slot, so if present, they will show up as a sharp peak. - */ - if (ip > prof_len - 1) - ip = prof_len - 1; - - atomic_inc((atomic_t *) &prof_buffer[ip]); + return (offset * local_cpu_data->nsec_per_cyc) >> IA64_NSEC_PER_CYC_SHIFT; } static void @@ -199,6 +185,52 @@ do_gettimeofday (struct timeval *tv) tv->tv_usec = usec; } +/* + * The profiling function is SMP safe. (nothing can mess + * around with "current", and the profiling counters are + * updated with atomic operations). This is especially + * useful with a profiling multiplier != 1 + */ +static inline void +ia64_do_profile (struct pt_regs * regs) +{ + unsigned long ip, slot; + extern cpumask_t prof_cpu_mask; + + profile_hook(regs); + + if (user_mode(regs)) + return; + + if (!prof_buffer) + return; + + ip = instruction_pointer(regs); + /* Conserve space in histogram by encoding slot bits in address + * bits 2 and 3 rather than bits 0 and 1. + */ + slot = ip & 3; + ip = (ip & ~3UL) + 4*slot; + + /* + * Only measure the CPUs specified by /proc/irq/prof_cpu_mask. + * (default is all CPUs.) + */ + if (!cpu_isset(smp_processor_id(), prof_cpu_mask)) + return; + + ip -= (unsigned long) &_stext; + ip >>= prof_shift; + /* + * Don't ignore out-of-bounds IP values silently, + * put them into the last histogram slot, so if + * present, they will show up as a sharp peak. + */ + if (ip > prof_len-1) + ip = prof_len-1; + atomic_inc((atomic_t *)&prof_buffer[ip]); +} + static irqreturn_t timer_interrupt (int irq, void *dev_id, struct pt_regs *regs) { @@ -210,14 +242,9 @@ timer_interrupt (int irq, void *dev_id, printk(KERN_ERR "Oops: timer tick before it's due (itc=%lx,itm=%lx)\n", ia64_get_itc(), new_itm); + ia64_do_profile(regs); + while (1) { - /* - * Do kernel PC profiling here. We multiply the instruction number by - * four so that we can use a prof_shift of 2 to get instruction-level - * instead of just bundle-level accuracy. - */ - if (!user_mode(regs)) - do_profile(regs->cr_iip + 4*ia64_psr(regs)->ri); #ifdef CONFIG_SMP smp_do_timer(regs); diff -prauN linux-2.6.0-test5/arch/ia64/kernel/traps.c wli-2.6.0-test5-bk12-25/arch/ia64/kernel/traps.c --- linux-2.6.0-test5/arch/ia64/kernel/traps.c 2003-09-08 12:50:32.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ia64/kernel/traps.c 2003-09-25 19:15:47.000000000 -0700 @@ -568,10 +568,10 @@ ia64_fault (unsigned long vector, unsign } siginfo.si_signo = SIGTRAP; siginfo.si_errno = 0; - siginfo.si_flags = 0; - siginfo.si_isr = 0; - siginfo.si_addr = (void *) ifa; - siginfo.si_imm = 0; + siginfo.si_addr = (void *) ifa; + siginfo.si_imm = 0; + siginfo.si_flags = __ISR_VALID; + siginfo.si_isr = isr; force_sig_info(SIGTRAP, &siginfo, current); return; diff -prauN linux-2.6.0-test5/arch/ia64/kernel/unwind.c wli-2.6.0-test5-bk12-25/arch/ia64/kernel/unwind.c --- linux-2.6.0-test5/arch/ia64/kernel/unwind.c 2003-09-08 12:50:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ia64/kernel/unwind.c 2003-09-25 19:15:47.000000000 -0700 @@ -1171,9 +1171,10 @@ desc_spill_sprel_p (unsigned char qp, un static inline unw_hash_index_t hash (unsigned long ip) { -# define magic 0x9e3779b97f4a7c16 /* based on (sqrt(5)/2-1)*2^64 */ +# define hashmagic 0x9e3779b97f4a7c16 /* based on (sqrt(5)/2-1)*2^64 */ - return (ip >> 4)*magic >> (64 - UNW_LOG_HASH_SIZE); + return (ip >> 4)*hashmagic >> (64 - UNW_LOG_HASH_SIZE); +#undef hashmagic } static inline long diff -prauN linux-2.6.0-test5/arch/ia64/mm/hugetlbpage.c wli-2.6.0-test5-bk12-25/arch/ia64/mm/hugetlbpage.c --- linux-2.6.0-test5/arch/ia64/mm/hugetlbpage.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ia64/mm/hugetlbpage.c 2003-09-28 23:04:07.000000000 -0700 @@ -60,9 +60,9 @@ huge_pte_alloc (struct mm_struct *mm, un pte_t *pte = NULL; pgd = pgd_offset(mm, taddr); - pmd = pmd_alloc(mm, pgd, taddr); + pmd = pmd_alloc_map(mm, pgd, taddr); if (pmd) - pte = pte_alloc_map(mm, pmd, taddr); + pte = pte_alloc_map(mm, pgd, &pmd, taddr); return pte; } @@ -223,7 +223,7 @@ follow_huge_pmd(struct mm_struct *mm, un void free_huge_page(struct page *page) { BUG_ON(page_count(page)); - BUG_ON(page->mapping); + BUG_ON(page_mapping(page)); INIT_LIST_HEAD(&page->list); @@ -297,14 +297,21 @@ int hugetlb_prefault(struct address_spac + (vma->vm_pgoff >> (HPAGE_SHIFT - PAGE_SHIFT)); page = find_get_page(mapping, idx); if (!page) { + /* charge the fs quota first */ + if (hugetlb_get_quota(mapping)) { + ret = -ENOMEM; + goto out; + } page = alloc_hugetlb_page(); if (!page) { + hugetlb_put_quota(mapping); ret = -ENOMEM; goto out; } ret = add_to_page_cache(page, mapping, idx, GFP_ATOMIC); unlock_page(page); if (ret) { + hugetlb_put_quota(mapping); free_huge_page(page); goto out; } diff -prauN linux-2.6.0-test5/arch/ia64/mm/init.c wli-2.6.0-test5-bk12-25/arch/ia64/mm/init.c --- linux-2.6.0-test5/arch/ia64/mm/init.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ia64/mm/init.c 2003-09-25 20:03:31.000000000 -0700 @@ -284,10 +284,10 @@ put_kernel_page (struct page *page, unsi spin_lock(&init_mm.page_table_lock); { - pmd = pmd_alloc(&init_mm, pgd, address); + pmd = pmd_alloc_kernel(&init_mm, pgd, address); if (!pmd) goto out; - pte = pte_alloc_map(&init_mm, pmd, address); + pte = pte_alloc_map(&init_mm, pgd, &pmd, address); if (!pte) goto out; if (!pte_none(*pte)) { diff -prauN linux-2.6.0-test5/arch/ia64/oprofile/Kconfig wli-2.6.0-test5-bk12-25/arch/ia64/oprofile/Kconfig --- linux-2.6.0-test5/arch/ia64/oprofile/Kconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/ia64/oprofile/Kconfig 2003-09-25 19:15:47.000000000 -0700 @@ -0,0 +1,22 @@ + +menu "Profiling support" + depends on EXPERIMENTAL + +config PROFILING + bool "Profiling support (EXPERIMENTAL)" + help + Say Y here to enable the extended profiling support mechanisms used + by profilers such as OProfile. + +config OPROFILE + tristate "OProfile system profiling (EXPERIMENTAL)" + depends on PROFILING + help + OProfile is a profiling system capable of profiling the + whole system, include the kernel, kernel modules, libraries, + and applications. + + If unsure, say N. + +endmenu + diff -prauN linux-2.6.0-test5/arch/ia64/oprofile/Makefile wli-2.6.0-test5-bk12-25/arch/ia64/oprofile/Makefile --- linux-2.6.0-test5/arch/ia64/oprofile/Makefile 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/ia64/oprofile/Makefile 2003-09-25 19:15:47.000000000 -0700 @@ -0,0 +1,9 @@ +obj-$(CONFIG_OPROFILE) += oprofile.o + +DRIVER_OBJS := $(addprefix ../../../drivers/oprofile/, \ + oprof.o cpu_buffer.o buffer_sync.o \ + event_buffer.o oprofile_files.o \ + oprofilefs.o oprofile_stats.o \ + timer_int.o ) + +oprofile-y := $(DRIVER_OBJS) init.o diff -prauN linux-2.6.0-test5/arch/ia64/oprofile/init.c wli-2.6.0-test5-bk12-25/arch/ia64/oprofile/init.c --- linux-2.6.0-test5/arch/ia64/oprofile/init.c 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/ia64/oprofile/init.c 2003-09-25 19:15:47.000000000 -0700 @@ -0,0 +1,25 @@ +/** + * @file init.c + * + * @remark Copyright 2002 OProfile authors + * @remark Read the file COPYING + * + * @author John Levon + */ + +#include +#include +#include +#include + +extern void timer_init(struct oprofile_operations ** ops); + +int __init oprofile_arch_init(struct oprofile_operations ** ops) +{ + return -ENODEV; +} + + +void oprofile_arch_exit(void) +{ +} diff -prauN linux-2.6.0-test5/arch/ia64/scripts/toolchain-flags wli-2.6.0-test5-bk12-25/arch/ia64/scripts/toolchain-flags --- linux-2.6.0-test5/arch/ia64/scripts/toolchain-flags 2003-09-08 12:50:32.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ia64/scripts/toolchain-flags 2003-09-25 19:15:47.000000000 -0700 @@ -20,7 +20,7 @@ warning: your linker cannot handle cross EOF fi -if ! $CC -c $dir/check-model.c -o $out 2>&1 | grep -q 'attribute directive ignored' +if ! $CC -c $dir/check-model.c -o $out 2>&1 | grep __model__ | grep -q attrib then CPPFLAGS="$CPPFLAGS -DHAVE_MODEL_SMALL_ATTRIBUTE" fi diff -prauN linux-2.6.0-test5/arch/ia64/sn/io/drivers/ioconfig_bus.c wli-2.6.0-test5-bk12-25/arch/ia64/sn/io/drivers/ioconfig_bus.c --- linux-2.6.0-test5/arch/ia64/sn/io/drivers/ioconfig_bus.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ia64/sn/io/drivers/ioconfig_bus.c 2003-09-25 19:15:47.000000000 -0700 @@ -24,7 +24,7 @@ #include #include #include -#include +#include #include #include @@ -157,7 +157,7 @@ build_moduleid_table(char *file_contents char *name; char *temp; char *next; - char *current; + char *curr; char *line; struct ascii_moduleid *moduleid; @@ -166,10 +166,10 @@ build_moduleid_table(char *file_contents name = kmalloc(125, GFP_KERNEL); memset(name, 0, 125); moduleid = table; - current = file_contents; - while (nextline(current, &next, line)){ + curr = file_contents; + while (nextline(curr, &next, line)){ - DBG("current 0x%lx next 0x%lx\n", current, next); + DBG("curr 0x%lx next 0x%lx\n", curr, next); temp = line; /* @@ -182,7 +182,7 @@ build_moduleid_table(char *file_contents break; if (*temp == '\n') { - current = next; + curr = next; memset(line, 0, 256); continue; } @@ -191,7 +191,7 @@ build_moduleid_table(char *file_contents * Skip comment lines */ if (*temp == '#') { - current = next; + curr = next; memset(line, 0, 256); continue; } @@ -204,7 +204,7 @@ build_moduleid_table(char *file_contents DBG("Found %s\n", name); moduleid++; free_entry++; - current = next; + curr = next; memset(line, 0, 256); } diff -prauN linux-2.6.0-test5/arch/ia64/sn/io/machvec/iomv.c wli-2.6.0-test5-bk12-25/arch/ia64/sn/io/machvec/iomv.c --- linux-2.6.0-test5/arch/ia64/sn/io/machvec/iomv.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ia64/sn/io/machvec/iomv.c 2003-09-25 19:15:47.000000000 -0700 @@ -6,13 +6,13 @@ * Copyright (C) 2000-2003 Silicon Graphics, Inc. All rights reserved. */ -#include #include #include #include #include #include #include +#include /** * sn_io_addr - convert an in/out port to an i/o address diff -prauN linux-2.6.0-test5/arch/ia64/sn/io/machvec/pci_bus_cvlink.c wli-2.6.0-test5-bk12-25/arch/ia64/sn/io/machvec/pci_bus_cvlink.c --- linux-2.6.0-test5/arch/ia64/sn/io/machvec/pci_bus_cvlink.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ia64/sn/io/machvec/pci_bus_cvlink.c 2003-09-25 19:15:47.000000000 -0700 @@ -544,7 +544,7 @@ sn_pci_fixup(int arg) pci_read_config_byte(device_dev, PCI_INTERRUPT_PIN, (unsigned char *)&lines); - irqpdaindr->current = device_dev; + irqpdaindr->curr = device_dev; intr_handle = pciio_intr_alloc(device_vertex, NULL, lines, device_vertex); irq = intr_handle->pi_irq; diff -prauN linux-2.6.0-test5/arch/ia64/sn/io/machvec/pci_dma.c wli-2.6.0-test5-bk12-25/arch/ia64/sn/io/machvec/pci_dma.c --- linux-2.6.0-test5/arch/ia64/sn/io/machvec/pci_dma.c 2003-09-08 12:49:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ia64/sn/io/machvec/pci_dma.c 2003-09-25 19:15:47.000000000 -0700 @@ -597,7 +597,7 @@ sn_dma_set_mask(struct device *dev, u64 if (!sn_dma_supported(dev, dma_mask)) return 0; - dev->dma_mask = dma_mask; + *dev->dma_mask = dma_mask; return 1; } EXPORT_SYMBOL(sn_dma_set_mask); diff -prauN linux-2.6.0-test5/arch/ia64/sn/io/sn2/ml_SN_intr.c wli-2.6.0-test5-bk12-25/arch/ia64/sn/io/sn2/ml_SN_intr.c --- linux-2.6.0-test5/arch/ia64/sn/io/sn2/ml_SN_intr.c 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ia64/sn/io/sn2/ml_SN_intr.c 2003-09-25 19:15:47.000000000 -0700 @@ -39,6 +39,7 @@ #include #include #include +#include extern irqpda_t *irqpdaindr; extern cnodeid_t master_node_get(vertex_hdl_t vhdl); @@ -174,8 +175,8 @@ do_intr_reserve_level(cpuid_t cpu, min_shared = 256; for (i=IA64_SN2_FIRST_DEVICE_VECTOR; i < IA64_SN2_LAST_DEVICE_VECTOR; i++) { /* Share with the same device class */ - if (irqpdaindr->current->vendor == irqpdaindr->device_dev[i]->vendor && - irqpdaindr->current->device == irqpdaindr->device_dev[i]->device && + if (irqpdaindr->curr->vendor == irqpdaindr->device_dev[i]->vendor && + irqpdaindr->curr->device == irqpdaindr->device_dev[i]->device && irqpdaindr->share_count[i] < min_shared) { min_shared = irqpdaindr->share_count[i]; bit = i; diff -prauN linux-2.6.0-test5/arch/ia64/sn/io/sn2/pcibr/pcibr_ate.c wli-2.6.0-test5-bk12-25/arch/ia64/sn/io/sn2/pcibr/pcibr_ate.c --- linux-2.6.0-test5/arch/ia64/sn/io/sn2/pcibr/pcibr_ate.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ia64/sn/io/sn2/pcibr/pcibr_ate.c 2003-09-25 19:15:47.000000000 -0700 @@ -26,7 +26,6 @@ #include #include #include -#include #include #include diff -prauN linux-2.6.0-test5/arch/ia64/sn/io/sn2/pcibr/pcibr_config.c wli-2.6.0-test5-bk12-25/arch/ia64/sn/io/sn2/pcibr/pcibr_config.c --- linux-2.6.0-test5/arch/ia64/sn/io/sn2/pcibr/pcibr_config.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ia64/sn/io/sn2/pcibr/pcibr_config.c 2003-09-25 19:15:47.000000000 -0700 @@ -27,7 +27,6 @@ #include #include #include -#include #include #include diff -prauN linux-2.6.0-test5/arch/ia64/sn/io/sn2/pcibr/pcibr_dvr.c wli-2.6.0-test5-bk12-25/arch/ia64/sn/io/sn2/pcibr/pcibr_dvr.c --- linux-2.6.0-test5/arch/ia64/sn/io/sn2/pcibr/pcibr_dvr.c 2003-09-08 12:50:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ia64/sn/io/sn2/pcibr/pcibr_dvr.c 2003-09-25 19:15:47.000000000 -0700 @@ -31,7 +31,6 @@ #include #include #include -#include #include #include diff -prauN linux-2.6.0-test5/arch/ia64/sn/io/sn2/pcibr/pcibr_error.c wli-2.6.0-test5-bk12-25/arch/ia64/sn/io/sn2/pcibr/pcibr_error.c --- linux-2.6.0-test5/arch/ia64/sn/io/sn2/pcibr/pcibr_error.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ia64/sn/io/sn2/pcibr/pcibr_error.c 2003-09-25 19:15:47.000000000 -0700 @@ -26,7 +26,6 @@ #include #include #include -#include #include #include diff -prauN linux-2.6.0-test5/arch/ia64/sn/io/sn2/pcibr/pcibr_hints.c wli-2.6.0-test5-bk12-25/arch/ia64/sn/io/sn2/pcibr/pcibr_hints.c --- linux-2.6.0-test5/arch/ia64/sn/io/sn2/pcibr/pcibr_hints.c 2003-09-08 12:50:27.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ia64/sn/io/sn2/pcibr/pcibr_hints.c 2003-09-25 19:15:47.000000000 -0700 @@ -26,7 +26,6 @@ #include #include #include -#include #include #include diff -prauN linux-2.6.0-test5/arch/ia64/sn/io/sn2/pcibr/pcibr_intr.c wli-2.6.0-test5-bk12-25/arch/ia64/sn/io/sn2/pcibr/pcibr_intr.c --- linux-2.6.0-test5/arch/ia64/sn/io/sn2/pcibr/pcibr_intr.c 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ia64/sn/io/sn2/pcibr/pcibr_intr.c 2003-09-25 19:15:47.000000000 -0700 @@ -26,7 +26,6 @@ #include #include #include -#include #include #include diff -prauN linux-2.6.0-test5/arch/ia64/sn/io/sn2/pcibr/pcibr_rrb.c wli-2.6.0-test5-bk12-25/arch/ia64/sn/io/sn2/pcibr/pcibr_rrb.c --- linux-2.6.0-test5/arch/ia64/sn/io/sn2/pcibr/pcibr_rrb.c 2003-09-08 12:50:41.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ia64/sn/io/sn2/pcibr/pcibr_rrb.c 2003-09-25 19:15:47.000000000 -0700 @@ -26,7 +26,6 @@ #include #include #include -#include #include #include diff -prauN linux-2.6.0-test5/arch/ia64/sn/io/sn2/pcibr/pcibr_slot.c wli-2.6.0-test5-bk12-25/arch/ia64/sn/io/sn2/pcibr/pcibr_slot.c --- linux-2.6.0-test5/arch/ia64/sn/io/sn2/pcibr/pcibr_slot.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ia64/sn/io/sn2/pcibr/pcibr_slot.c 2003-09-25 19:15:47.000000000 -0700 @@ -27,7 +27,6 @@ #include #include #include -#include #include #include diff -prauN linux-2.6.0-test5/arch/ia64/sn/io/sn2/pic.c wli-2.6.0-test5-bk12-25/arch/ia64/sn/io/sn2/pic.c --- linux-2.6.0-test5/arch/ia64/sn/io/sn2/pic.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ia64/sn/io/sn2/pic.c 2003-09-25 19:15:47.000000000 -0700 @@ -26,7 +26,6 @@ #include #include #include -#include #include #include diff -prauN linux-2.6.0-test5/arch/ia64/sn/io/sn2/shub.c wli-2.6.0-test5-bk12-25/arch/ia64/sn/io/sn2/shub.c --- linux-2.6.0-test5/arch/ia64/sn/io/sn2/shub.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ia64/sn/io/sn2/shub.c 2003-09-25 19:15:48.000000000 -0700 @@ -34,6 +34,8 @@ #include #include #include +#include +#include /* * Shub WAR for Xbridge Little Endian problem: @@ -491,7 +493,7 @@ linkstatd_init(void) spin_lock_init(&sn_linkstats_lock); sn_linkstats = kmalloc(numnodes * sizeof(struct s_linkstats), GFP_KERNEL); sn_linkstats_reset(60000UL); /* default 60 second update interval */ - kernel_thread(linkstatd_thread, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND); + kernel_thread(linkstatd_thread, NULL, CLONE_KERNEL); return 0; } diff -prauN linux-2.6.0-test5/arch/ia64/sn/kernel/irq.c wli-2.6.0-test5-bk12-25/arch/ia64/sn/kernel/irq.c --- linux-2.6.0-test5/arch/ia64/sn/kernel/irq.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ia64/sn/kernel/irq.c 2003-09-25 19:15:48.000000000 -0700 @@ -35,7 +35,6 @@ #include #include #include -#include #include #include #include @@ -44,7 +43,6 @@ #include #include #include -#include #include #include #include @@ -62,6 +60,7 @@ #include #include #include +#include int irq_to_bit_pos(int irq); static void force_interrupt(int irq); diff -prauN linux-2.6.0-test5/arch/m68k/Kconfig wli-2.6.0-test5-bk12-25/arch/m68k/Kconfig --- linux-2.6.0-test5/arch/m68k/Kconfig 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/m68k/Kconfig 2003-09-25 19:15:48.000000000 -0700 @@ -67,11 +67,8 @@ config PCMCIA for location). Please also read the PCMCIA-HOWTO, available from . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - When compiled this way, there will be modules called pcmcia_core - and ds. If you want to compile it as a module, say M here and - read . + To compile this driver as modules, choose M here: the + modules will be called pcmcia_core and ds. config AMIGA bool "Amiga support" @@ -425,13 +422,11 @@ config PARPORT It is possible to share a single parallel port among several devices and it is safe to compile all the corresponding drivers into the - kernel. If you want to compile parallel port support as a module - ( = code which can be inserted in and removed from the running - kernel whenever you want), say M here and read - . The module will be called - parport. If you have more than one parallel port and want to - specify which port and IRQ to be used by this driver at module load - time, take a look at . + kernel. To compile parallel port support as a module, choose M here: + the module will be called parport. + If you have more than one parallel port and want to specify which + port and IRQ to be used by this driver at module load time, take a + look at . If unsure, say Y. @@ -460,11 +455,8 @@ config PARPORT_PC PC compatible computers and some Alphas have PC-style parallel ports. - This code is also available as a module. If you want to compile it - as a module ( = code which can be inserted in and removed from the - running kernel whenever you want), say M here and read - . The module will be called - parport_pc. + To compile this driver as a module, choose M here: the + module will be called parport_pc. If unsure, say Y. @@ -488,10 +480,8 @@ config PRINTER It is possible to share one parallel port among several devices (e.g. printer and ZIP drive) and it is safe to compile the - corresponding drivers into the kernel. If you want to compile this - driver as a module however ( = code which can be inserted in and - removed from the running kernel whenever you want), say M here and - read and + corresponding drivers into the kernel. + To compile this driver as a module, choose M here and read . The module will be called lp. If you have several parallel ports, you can specify which ports to @@ -571,9 +561,8 @@ config SERIAL serial port drivers do not need this driver built in for them to work.) - If you want to compile this driver as a module, say M here and read - . The module will be called - serial. + To compile this driver as a module, choose M here: the + module will be called serial. [WARNING: Do not compile this driver as a module if you are using non-standard serial ports, since the configuration information will be lost when the driver is unloaded. This limitation may be lifted @@ -717,10 +706,8 @@ config NVRAM On Atari machines, /dev/nvram is always configured and does not need to be selected. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called nvram. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called nvram. config ATARI_MFPSER tristate "Atari MFP serial support" @@ -730,10 +717,7 @@ config ATARI_MFPSER Linux, say Y. The driver equally supports all kinds of MFP serial ports and automatically detects whether Serial1 is available. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - If you want to compile it as a module, say M here and read - . + To compile this driver as a module, choose M here. Note for Falcon users: You also have an MFP port, it's just not wired to the outside... But you could use the port under Linux. @@ -748,10 +732,7 @@ config ATARI_SCC two connectors for channel A (Serial2 and LAN), they are visible as two separate devices. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - If you want to compile it as a module, say M here and read - . + To compile this driver as a module, choose M here. config ATARI_SCC_DMA bool "Atari SCC serial DMA support" @@ -769,10 +750,7 @@ config ATARI_MIDI help If you want to use your Atari's MIDI port in Linux, say Y. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you - want). If you want to compile it as a module, say M here and read - . + To compile this driver as a module, choose M here. config ATARI_DSP56K tristate "Atari DSP56k support (EXPERIMENTAL)" @@ -782,10 +760,7 @@ config ATARI_DSP56K driver is still experimental, and if you don't know what it is, or if you don't have this processor, just say N. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - If you want to compile it as a module, say M here and read - . + To compile this driver as a module, choose M here. config AMIGA_BUILTIN_SERIAL tristate "Amiga builtin serial support" @@ -794,10 +769,7 @@ config AMIGA_BUILTIN_SERIAL If you want to use your Amiga's built-in serial port in Linux, answer Y. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you - want). If you want to compile it as a module, say M here and read - . + To compile this driver as a module, choose M here. config WHIPPET_SERIAL tristate "Hisoft Whippet PCMCIA serial support" @@ -813,10 +785,7 @@ config MULTIFACE_III_TTY If you want to use a Multiface III card's serial port in Linux, answer Y. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - If you want to compile it as a module, say M here and read - . + To compile this driver as a module, choose M here. config A2232 tristate "Commodore A2232 serial support (EXPERIMENTAL)" @@ -832,8 +801,7 @@ config A2232 This driver can be built as a module; but then "generic_serial" will also be built as a module. This has to be loaded before - "ser_a2232". If you want to do this, answer M here and read - "". + "ser_a2232". If you want to do this, answer M here. config GVPIOEXT tristate "GVP IO-Extender support" @@ -1086,11 +1054,8 @@ config SOFT_WATCHDOG from some situations that the hardware watchdog will recover from. Equally it's a lot cheaper to install. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - If you want to compile it as a module, say M here and read - . The module will be called - softdog. + To compile this driver as a module, choose M here: the + module will be called softdog. config GEN_RTC tristate "Generic /dev/rtc emulation" if !SUN3 @@ -1107,12 +1072,9 @@ config GEN_RTC for RTC_UIE which is required by some programs and may improve precision in some cases. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module is called genrtc. If you want to compile it as a module, - say M here and read . To load the - module automatically add 'alias char-major-10-135 genrtc' to your - /etc/modules.conf + To compile this driver as a module, choose M here: the + module will be called genrtc. To load the module automatically + add 'alias char-major-10-135 genrtc' to your /etc/modules.conf config GEN_RTC_X bool "Extended RTC operation" diff -prauN linux-2.6.0-test5/arch/m68k/kernel/head.S wli-2.6.0-test5-bk12-25/arch/m68k/kernel/head.S --- linux-2.6.0-test5/arch/m68k/kernel/head.S 2003-09-08 12:50:43.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/m68k/kernel/head.S 2003-09-25 20:03:31.000000000 -0700 @@ -110,7 +110,7 @@ * * These routines are used by other mmu routines to get a pointer into * a table, if necessary a new table is allocated. These routines are working - * basically like pmd_alloc() and pte_alloc() in . The root + * basically like pmd_alloc_map() and pte_alloc_map() in . The root * table needs of course only to be allocated once in mmu_get_root_table_entry, * so that here also some mmu specific initialization is done. The second page * at the start of the kernel (the first page is unmapped later) is used for diff -prauN linux-2.6.0-test5/arch/m68k/kernel/signal.c wli-2.6.0-test5-bk12-25/arch/m68k/kernel/signal.c --- linux-2.6.0-test5/arch/m68k/kernel/signal.c 2003-09-08 12:50:17.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/m68k/kernel/signal.c 2003-09-25 19:15:48.000000000 -0700 @@ -1082,7 +1082,7 @@ asmlinkage int do_signal(sigset_t *oldse continue; case SIGTSTP: case SIGTTIN: case SIGTTOU: - if (is_orphaned_pgrp(current->pgrp)) + if (is_orphaned_pgrp(process_group(current))) continue; /* FALLTHRU */ diff -prauN linux-2.6.0-test5/arch/m68k/mm/kmap.c wli-2.6.0-test5-bk12-25/arch/m68k/mm/kmap.c --- linux-2.6.0-test5/arch/m68k/mm/kmap.c 2003-09-08 12:50:37.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/m68k/mm/kmap.c 2003-09-25 20:03:31.000000000 -0700 @@ -189,7 +189,7 @@ void *__ioremap(unsigned long physaddr, printk ("\npa=%#lx va=%#lx ", physaddr, virtaddr); #endif pgd_dir = pgd_offset_k(virtaddr); - pmd_dir = pmd_alloc(&init_mm, pgd_dir, virtaddr); + pmd_dir = pmd_alloc_kernel(&init_mm, pgd_dir, virtaddr); if (!pmd_dir) { printk("ioremap: no mem for pmd_dir\n"); return NULL; diff -prauN linux-2.6.0-test5/arch/m68k/sun3x/dvma.c wli-2.6.0-test5-bk12-25/arch/m68k/sun3x/dvma.c --- linux-2.6.0-test5/arch/m68k/sun3x/dvma.c 2003-09-08 12:49:54.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/m68k/sun3x/dvma.c 2003-09-25 20:03:31.000000000 -0700 @@ -102,7 +102,7 @@ inline int dvma_map_cpu(unsigned long ka pmd_t *pmd; unsigned long end2; - if((pmd = pmd_alloc(&init_mm, pgd, vaddr)) == NULL) { + if((pmd = pmd_alloc_kernel(&init_mm, pgd, vaddr)) == NULL) { ret = -ENOMEM; goto out; } diff -prauN linux-2.6.0-test5/arch/m68knommu/kernel/signal.c wli-2.6.0-test5-bk12-25/arch/m68knommu/kernel/signal.c --- linux-2.6.0-test5/arch/m68knommu/kernel/signal.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/m68knommu/kernel/signal.c 2003-09-25 19:15:48.000000000 -0700 @@ -841,7 +841,7 @@ asmlinkage int do_signal(sigset_t *oldse continue; case SIGTSTP: case SIGTTIN: case SIGTTOU: - if (is_orphaned_pgrp(current->pgrp)) + if (is_orphaned_pgrp(process_group(current))) continue; /* FALLTHRU */ diff -prauN linux-2.6.0-test5/arch/mips/Kconfig wli-2.6.0-test5-bk12-25/arch/mips/Kconfig --- linux-2.6.0-test5/arch/mips/Kconfig 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/mips/Kconfig 2003-09-25 19:15:48.000000000 -0700 @@ -1272,12 +1272,10 @@ config SOUND If you have a PnP sound card and you want to configure it at boot time using the ISA PnP tools (read ), then you need to - compile the sound card support as a module ( = code which can be - inserted in and removed from the running kernel whenever you want) - and load that module after the PnP configuration is finished. To do - this, say M here and read as well - as ; the module will be - called soundcore. + compile the sound card support as a module and load that module + after the PnP configuration is finished. To do this, choose M here + and read ; the module + will be called soundcore. I'm told that even without a sound card, you can make your computer say more than an occasional beep, by programming the PC speaker. diff -prauN linux-2.6.0-test5/arch/mips/Makefile wli-2.6.0-test5-bk12-25/arch/mips/Makefile --- linux-2.6.0-test5/arch/mips/Makefile 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/mips/Makefile 2003-09-25 19:15:48.000000000 -0700 @@ -58,7 +58,6 @@ MODFLAGS += -mlong-calls cflags-$(CONFIG_KGDB) += -g cflags-$(CONFIG_SB1XXX_CORELIS) += -mno-sched-prolog -fno-omit-frame-pointer -check_gcc = $(shell if $(CC) $(1) -S -o /dev/null -xc /dev/null > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi) check_warning = $(shell if $(CC) $(1) -c -o /dev/null -xc /dev/null > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi) # diff -prauN linux-2.6.0-test5/arch/mips/jazz/setup.c wli-2.6.0-test5-bk12-25/arch/mips/jazz/setup.c --- linux-2.6.0-test5/arch/mips/jazz/setup.c 2003-09-08 12:50:14.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/mips/jazz/setup.c 2003-09-25 19:15:48.000000000 -0700 @@ -9,6 +9,7 @@ * Copyright (C) 2001 MIPS Technologies, Inc. */ #include +#include #include #include #include diff -prauN linux-2.6.0-test5/arch/mips/kernel/irixelf.c wli-2.6.0-test5-bk12-25/arch/mips/kernel/irixelf.c --- linux-2.6.0-test5/arch/mips/kernel/irixelf.c 2003-09-08 12:51:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/mips/kernel/irixelf.c 2003-09-25 19:15:48.000000000 -0700 @@ -1088,6 +1088,7 @@ static int irix_core_dump(long signr, st elf.e_ident[EI_CLASS] = ELFCLASS32; elf.e_ident[EI_DATA] = ELFDATA2LSB; elf.e_ident[EI_VERSION] = EV_CURRENT; + elf.e_ident[EI_OSABI] = ELF_OSABI; memset(elf.e_ident+EI_PAD, 0, EI_NIDENT-EI_PAD); elf.e_type = ET_CORE; @@ -1129,7 +1130,7 @@ static int irix_core_dump(long signr, st prstatus.pr_sighold = current->blocked.sig[0]; psinfo.pr_pid = prstatus.pr_pid = current->pid; psinfo.pr_ppid = prstatus.pr_ppid = current->parent->pid; - psinfo.pr_pgrp = prstatus.pr_pgrp = current->pgrp; + psinfo.pr_pgrp = prstatus.pr_pgrp = process_group(current); psinfo.pr_sid = prstatus.pr_sid = current->session; prstatus.pr_utime.tv_sec = CT_TO_SECS(current->utime); prstatus.pr_utime.tv_usec = CT_TO_USECS(current->utime); diff -prauN linux-2.6.0-test5/arch/mips/kernel/irixsig.c wli-2.6.0-test5-bk12-25/arch/mips/kernel/irixsig.c --- linux-2.6.0-test5/arch/mips/kernel/irixsig.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/mips/kernel/irixsig.c 2003-09-25 19:15:48.000000000 -0700 @@ -582,7 +582,7 @@ repeat: p = list_entry(_p,struct task_struct,sibling); if ((type == P_PID) && p->pid != pid) continue; - if ((type == P_PGID) && p->pgrp != pid) + if ((type == P_PGID) && process_group(p) != pid) continue; if ((p->exit_signal != SIGCHLD)) continue; diff -prauN linux-2.6.0-test5/arch/mips/kernel/linux32.c wli-2.6.0-test5-bk12-25/arch/mips/kernel/linux32.c --- linux-2.6.0-test5/arch/mips/kernel/linux32.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/mips/kernel/linux32.c 2003-09-25 19:15:48.000000000 -0700 @@ -71,14 +71,17 @@ int cp_compat_stat(struct kstat *stat, s { struct compat_stat tmp; + if (!new_valid_dev(stat->dev) || !new_valid_dev(stat->rdev)) + return -EOVERFLOW; + memset(&tmp, 0, sizeof(tmp)); - tmp.st_dev = stat->dev; + tmp.st_dev = new_encode_dev(stat->dev); tmp.st_ino = stat->ino; tmp.st_mode = stat->mode; tmp.st_nlink = stat->nlink; SET_STAT_UID(tmp, stat->uid); SET_STAT_GID(tmp, stat->gid); - tmp.st_rdev = stat->rdev; + tmp.st_rdev = new_encode_dev(stat->rdev); tmp.st_size = stat->size; tmp.st_atime = stat->atime.tv_sec; tmp.st_mtime = stat->mtime.tv_sec; diff -prauN linux-2.6.0-test5/arch/mips/kernel/mips_ksyms.c wli-2.6.0-test5-bk12-25/arch/mips/kernel/mips_ksyms.c --- linux-2.6.0-test5/arch/mips/kernel/mips_ksyms.c 2003-09-08 12:49:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/mips/kernel/mips_ksyms.c 2003-09-25 19:15:48.000000000 -0700 @@ -25,7 +25,6 @@ #include #include #include -#include #include #ifdef CONFIG_BLK_DEV_FD #include @@ -43,10 +42,6 @@ extern long __strnlen_user_asm(const cha EXPORT_SYMBOL(mips_machtype); -#ifdef CONFIG_EISA -EXPORT_SYMBOL(EISA_bus); -#endif - /* * String functions */ diff -prauN linux-2.6.0-test5/arch/mips/kernel/setup.c wli-2.6.0-test5-bk12-25/arch/mips/kernel/setup.c --- linux-2.6.0-test5/arch/mips/kernel/setup.c 2003-09-08 12:49:54.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/mips/kernel/setup.c 2003-09-25 19:15:48.000000000 -0700 @@ -44,15 +44,6 @@ struct cpuinfo_mips cpu_data[NR_CPUS]; struct screen_info screen_info; #endif -/* - * Set if box has EISA slots. - */ -#ifdef CONFIG_EISA -int EISA_bus; - -EXPORT_SYMBOL(EISA_bus); -#endif - #if defined(CONFIG_BLK_DEV_FD) || defined(CONFIG_BLK_DEV_FD_MODULE) extern struct fd_ops no_fd_ops; struct fd_ops *fd_ops; diff -prauN linux-2.6.0-test5/arch/mips/kernel/sysirix.c wli-2.6.0-test5-bk12-25/arch/mips/kernel/sysirix.c --- linux-2.6.0-test5/arch/mips/kernel/sysirix.c 2003-09-08 12:50:28.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/mips/kernel/sysirix.c 2003-09-25 19:15:48.000000000 -0700 @@ -803,11 +803,11 @@ asmlinkage int irix_setpgrp(int flags) printk("[%s:%d] setpgrp(%d) ", current->comm, current->pid, flags); #endif if(!flags) - error = current->pgrp; + error = process_group(current); else error = sys_setsid(); #ifdef DEBUG_PROCGRPS - printk("returning %d\n", current->pgrp); + printk("returning %d\n", process_group(current)); #endif return error; @@ -1187,13 +1187,7 @@ asmlinkage int irix_uname(struct iuname #undef DEBUG_XSTAT -static inline u32 -linux_to_irix_dev_t (dev_t t) -{ - return MAJOR (t) << 18 | MINOR (t); -} - -static inline int irix_xstat32_xlate(struct kstat *stat, void *ubuf) +static int irix_xstat32_xlate(struct kstat *stat, void *ubuf) { struct xstat32 { u32 st_dev, st_pad1[3], st_ino, st_mode, st_nlink, st_uid, st_gid; @@ -1206,13 +1200,15 @@ static inline int irix_xstat32_xlate(str u32 st_pad4[8]; } ub; - ub.st_dev = linux_to_irix_dev_t(stat->dev); + if (!sysv_valid_dev(stat->dev) || !sysv_valid_dev(stat->rdev)) + return -EOVERFLOW; + ub.st_dev = sysv_encode_dev(stat->dev); ub.st_ino = stat->ino; ub.st_mode = stat->mode; ub.st_nlink = stat->nlink; SET_STAT_UID(ub, stat->uid); SET_STAT_GID(ub, stat->gid); - ub.st_rdev = linux_to_irix_dev_t(stat->rdev); + ub.st_rdev = sysv_encode_dev(stat->rdev); #if BITS_PER_LONG == 32 if (stat->size > MAX_NON_LFS) return -EOVERFLOW; @@ -1231,7 +1227,7 @@ static inline int irix_xstat32_xlate(str return copy_to_user(ubuf, &ub, sizeof(ub)) ? -EFAULT : 0; } -static inline void irix_xstat64_xlate(struct kstat *stat, void *ubuf) +static int irix_xstat64_xlate(struct kstat *stat, void *ubuf) { struct xstat64 { u32 st_dev; s32 st_pad1[3]; @@ -1248,14 +1244,17 @@ static inline void irix_xstat64_xlate(st s32 st_pad4[8]; } ks; - ks.st_dev = linux_to_irix_dev_t(stat->dev); + if (!sysv_valid_dev(stat->dev) || !sysv_valid_dev(stat->rdev)) + return -EOVERFLOW; + + ks.st_dev = sysv_encode_dev(stat->dev); ks.st_pad1[0] = ks.st_pad1[1] = ks.st_pad1[2] = 0; ks.st_ino = (unsigned long long) stat->ino; ks.st_mode = (u32) stat->mode; ks.st_nlink = (u32) stat->nlink; ks.st_uid = (s32) stat->uid; ks.st_gid = (s32) stat->gid; - ks.st_rdev = linux_to_irix_dev_t (stat->rdev); + ks.st_rdev = sysv_encode_dev (stat->rdev); ks.st_pad2[0] = ks.st_pad2[1] = 0; ks.st_size = (long long) stat->size; ks.st_pad3 = 0; @@ -1275,7 +1274,7 @@ static inline void irix_xstat64_xlate(st ks.st_pad4[4] = ks.st_pad4[5] = ks.st_pad4[6] = ks.st_pad4[7] = 0; /* Now write it all back. */ - copy_to_user(ubuf, &ks, sizeof(struct xstat64)); + return copy_to_user(ubuf, &ks, sizeof(ks)) ? -EFAULT : 0; } asmlinkage int irix_xstat(int version, char *filename, struct stat *statbuf) @@ -1295,8 +1294,7 @@ asmlinkage int irix_xstat(int version, c retval = irix_xstat32_xlate(&stat, statbuf); break; case 3: - irix_xstat64_xlate(&stat, statbuf); - retval = 0; /* Really? */ + retval = irix_xstat64_xlate(&stat, statbuf); break; default: retval = -EINVAL; @@ -1323,8 +1321,7 @@ asmlinkage int irix_lxstat(int version, error = irix_xstat32_xlate(&stat, statbuf); break; case 3: - irix_xstat64_xlate(&stat, statbuf); - error = 0; + error = irix_xstat64_xlate(&stat, statbuf); break; default: error = -EINVAL; @@ -1350,8 +1347,7 @@ asmlinkage int irix_fxstat(int version, error = irix_xstat32_xlate(&stat, statbuf); break; case 3: - irix_xstat64_xlate(&stat, statbuf); - error = 0; + error = irix_xstat64_xlate(&stat, statbuf); break; default: error = -EINVAL; @@ -1360,17 +1356,17 @@ asmlinkage int irix_fxstat(int version, return error; } -extern asmlinkage int sys_mknod(const char * filename, int mode, dev_t dev); +extern asmlinkage int sys_mknod(const char * filename, int mode, unsigned dev); -asmlinkage int irix_xmknod(int ver, char *filename, int mode, dev_t dev) +asmlinkage int irix_xmknod(int ver, char *filename, int mode, unsigned dev) { int retval; - printk("[%s:%d] Wheee.. irix_xmknod(%d,%s,%x,%x)\n", - current->comm, current->pid, ver, filename, mode, (int) dev); + current->comm, current->pid, ver, filename, mode, dev); switch(ver) { case 2: + /* shouldn't we convert here as well as on stat()? */ retval = sys_mknod(filename, mode, dev); break; diff -prauN linux-2.6.0-test5/arch/mips/mm/ioremap.c wli-2.6.0-test5-bk12-25/arch/mips/mm/ioremap.c --- linux-2.6.0-test5/arch/mips/mm/ioremap.c 2003-09-08 12:50:04.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/mips/mm/ioremap.c 2003-09-25 20:03:31.000000000 -0700 @@ -81,7 +81,7 @@ static int remap_area_pages(unsigned lon spin_lock(&init_mm.page_table_lock); do { pmd_t *pmd; - pmd = pmd_alloc(&init_mm, dir, address); + pmd = pmd_alloc_kernel(&init_mm, dir, address); error = -ENOMEM; if (!pmd) break; diff -prauN linux-2.6.0-test5/arch/mips/sgi-ip22/ip22-eisa.c wli-2.6.0-test5-bk12-25/arch/mips/sgi-ip22/ip22-eisa.c --- linux-2.6.0-test5/arch/mips/sgi-ip22/ip22-eisa.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/mips/sgi-ip22/ip22-eisa.c 2003-09-25 19:15:48.000000000 -0700 @@ -20,6 +20,7 @@ */ #include +#include #include #include #include diff -prauN linux-2.6.0-test5/arch/mips/sni/setup.c wli-2.6.0-test5-bk12-25/arch/mips/sni/setup.c --- linux-2.6.0-test5/arch/mips/sni/setup.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/mips/sni/setup.c 2003-09-25 19:15:48.000000000 -0700 @@ -8,6 +8,7 @@ * Copyright (C) 1996, 1997, 1998, 2000, 2003 by Ralf Baechle */ #include +#include #include #include #include diff -prauN linux-2.6.0-test5/arch/parisc/Kconfig wli-2.6.0-test5-bk12-25/arch/parisc/Kconfig --- linux-2.6.0-test5/arch/parisc/Kconfig 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/parisc/Kconfig 2003-09-25 19:15:48.000000000 -0700 @@ -184,7 +184,7 @@ source "drivers/scsi/Kconfig" source "drivers/md/Kconfig" -#source drivers/message/fusion/Kconfig +source drivers/message/fusion/Kconfig #source drivers/ieee1394/Kconfig diff -prauN linux-2.6.0-test5/arch/parisc/Makefile wli-2.6.0-test5-bk12-25/arch/parisc/Makefile --- linux-2.6.0-test5/arch/parisc/Makefile 2003-09-08 12:50:27.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/parisc/Makefile 2003-09-25 19:15:48.000000000 -0700 @@ -16,7 +16,7 @@ # Modified for PA-RISC Linux by Paul Lahaie, Alex deVries, # Mike Shaver, Helge Deller and Martin K. Petersen # - +NM = sh arch/parisc/nm ifdef CONFIG_PARISC64 CROSS_COMPILE := hppa64-linux- UTS_MACHINE := parisc64 diff -prauN linux-2.6.0-test5/arch/parisc/defconfig wli-2.6.0-test5-bk12-25/arch/parisc/defconfig --- linux-2.6.0-test5/arch/parisc/defconfig 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/parisc/defconfig 2003-09-25 19:15:48.000000000 -0700 @@ -150,24 +150,25 @@ CONFIG_CHR_DEV_SG=y CONFIG_SCSI_LASI700=y CONFIG_53C700_MEM_MAPPED=y CONFIG_53C700_LE_ON_BE=y -# CONFIG_SCSI_NCR53C7xx is not set -# CONFIG_SCSI_SYM53C8XX_2 is not set +CONFIG_SCSI_SYM53C8XX_2=y +CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1 +CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 +CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 +# CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set CONFIG_SCSI_ZALON=y -# CONFIG_SCSI_NCR53C8XX is not set -CONFIG_SCSI_SYM53C8XX=y CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS=8 CONFIG_SCSI_NCR53C8XX_MAX_TAGS=32 CONFIG_SCSI_NCR53C8XX_SYNC=20 # CONFIG_SCSI_NCR53C8XX_PROFILE is not set -# CONFIG_SCSI_NCR53C8XX_PQS_PDS is not set # CONFIG_SCSI_NCR53C8XX_SYMBIOS_COMPAT is not set # CONFIG_SCSI_PCI2000 is not set # CONFIG_SCSI_PCI2220I is not set # CONFIG_SCSI_QLOGIC_ISP is not set # CONFIG_SCSI_QLOGIC_FC is not set # CONFIG_SCSI_QLOGIC_1280 is not set +# CONFIG_SCSI_SIM710 is not set +# CONFIG_SCSI_DC395x is not set # CONFIG_SCSI_DC390T is not set -# CONFIG_SCSI_U14_34F is not set # CONFIG_SCSI_NSP32 is not set # CONFIG_SCSI_DEBUG is not set @@ -374,7 +375,6 @@ CONFIG_SERIO=y # CONFIG_SERIO_CT82C710 is not set # CONFIG_SERIO_PARKBD is not set CONFIG_HP_SDC=y -CONFIG_HIL_MLC=y # # Input Device Drivers diff -prauN linux-2.6.0-test5/arch/parisc/hpux/fs.c wli-2.6.0-test5-bk12-25/arch/parisc/hpux/fs.c --- linux-2.6.0-test5/arch/parisc/hpux/fs.c 2003-09-08 12:49:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/parisc/hpux/fs.c 2003-09-25 19:15:48.000000000 -0700 @@ -123,14 +123,19 @@ static int cp_hpux_stat(struct kstat *st { struct hpux_stat64 tmp; + /* we probably want a different split here - is hpux 12:20? */ + + if (!new_valid_dev(stat->dev) || !new_valid_dev(stat->rdev)) + return -EOVERFLOW; + memset(&tmp, 0, sizeof(tmp)); - tmp.st_dev = stat->dev; + tmp.st_dev = new_encode_dev(stat->dev); tmp.st_ino = stat->ino; tmp.st_mode = stat->mode; tmp.st_nlink = stat->nlink; tmp.st_uid = stat->uid; tmp.st_gid = stat->gid; - tmp.st_rdev = stat->rdev; + tmp.st_rdev = new_encode_dev(stat->rdev); tmp.st_size = stat->size; tmp.st_atime = stat->atime.tv_sec; tmp.st_mtime = stat->mtime.tv_sec; diff -prauN linux-2.6.0-test5/arch/parisc/hpux/sys_hpux.c wli-2.6.0-test5-bk12-25/arch/parisc/hpux/sys_hpux.c --- linux-2.6.0-test5/arch/parisc/hpux/sys_hpux.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/parisc/hpux/sys_hpux.c 2003-09-25 19:15:48.000000000 -0700 @@ -272,7 +272,7 @@ int hpux_utssys(char *ubuf, int n, int t break ; case 2: /* ustat(): */ - return( hpux_ustat((dev_t)n, (struct hpux_ustat *)ubuf) ); + return( hpux_ustat(new_decode_dev(n), (struct hpux_ustat *)ubuf) ); break ; case 3: /* setuname(): diff -prauN linux-2.6.0-test5/arch/parisc/hpux/wrappers.S wli-2.6.0-test5-bk12-25/arch/parisc/hpux/wrappers.S --- linux-2.6.0-test5/arch/parisc/hpux/wrappers.S 2003-09-08 12:50:27.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/parisc/hpux/wrappers.S 2003-09-25 19:15:48.000000000 -0700 @@ -21,17 +21,20 @@ */ #ifdef __LP64__ -#warning Must be changed for PA64 +#warning PA64 support needs more work...did first cut #endif #include +#include +#include +#ifdef __LP64__ + .level 2.0w +#else .level 1.1 +#endif .text -#include -#include - /* These should probably go in a header file somewhere. * They are duplicated in kernel/wrappers.S * Possibly we should consider consolidating these @@ -41,41 +44,41 @@ #ifdef __LP64__ #warning NEEDS WORK for 64-bit #endif - stw %r3, PT_GR3(\regs) - stw %r4, PT_GR4(\regs) - stw %r5, PT_GR5(\regs) - stw %r6, PT_GR6(\regs) - stw %r7, PT_GR7(\regs) - stw %r8, PT_GR8(\regs) - stw %r9, PT_GR9(\regs) - stw %r10,PT_GR10(\regs) - stw %r11,PT_GR11(\regs) - stw %r12,PT_GR12(\regs) - stw %r13,PT_GR13(\regs) - stw %r14,PT_GR14(\regs) - stw %r15,PT_GR15(\regs) - stw %r16,PT_GR16(\regs) - stw %r17,PT_GR17(\regs) - stw %r18,PT_GR18(\regs) + STREG %r3, PT_GR3(\regs) + STREG %r4, PT_GR4(\regs) + STREG %r5, PT_GR5(\regs) + STREG %r6, PT_GR6(\regs) + STREG %r7, PT_GR7(\regs) + STREG %r8, PT_GR8(\regs) + STREG %r9, PT_GR9(\regs) + STREG %r10,PT_GR10(\regs) + STREG %r11,PT_GR11(\regs) + STREG %r12,PT_GR12(\regs) + STREG %r13,PT_GR13(\regs) + STREG %r14,PT_GR14(\regs) + STREG %r15,PT_GR15(\regs) + STREG %r16,PT_GR16(\regs) + STREG %r17,PT_GR17(\regs) + STREG %r18,PT_GR18(\regs) .endm .macro reg_restore regs - ldw PT_GR3(\regs), %r3 - ldw PT_GR4(\regs), %r4 - ldw PT_GR5(\regs), %r5 - ldw PT_GR6(\regs), %r6 - ldw PT_GR7(\regs), %r7 - ldw PT_GR8(\regs), %r8 - ldw PT_GR9(\regs), %r9 - ldw PT_GR10(\regs),%r10 - ldw PT_GR11(\regs),%r11 - ldw PT_GR12(\regs),%r12 - ldw PT_GR13(\regs),%r13 - ldw PT_GR14(\regs),%r14 - ldw PT_GR15(\regs),%r15 - ldw PT_GR16(\regs),%r16 - ldw PT_GR17(\regs),%r17 - ldw PT_GR18(\regs),%r18 + LDREG PT_GR3(\regs), %r3 + LDREG PT_GR4(\regs), %r4 + LDREG PT_GR5(\regs), %r5 + LDREG PT_GR6(\regs), %r6 + LDREG PT_GR7(\regs), %r7 + LDREG PT_GR8(\regs), %r8 + LDREG PT_GR9(\regs), %r9 + LDREG PT_GR10(\regs),%r10 + LDREG PT_GR11(\regs),%r11 + LDREG PT_GR12(\regs),%r12 + LDREG PT_GR13(\regs),%r13 + LDREG PT_GR14(\regs),%r14 + LDREG PT_GR15(\regs),%r15 + LDREG PT_GR16(\regs),%r16 + LDREG PT_GR17(\regs),%r17 + LDREG PT_GR18(\regs),%r18 .endm @@ -88,18 +91,18 @@ hpux_fork_wrapper: ;! pointer in task reg_save %r1 - stw %r2,-20(%r30) + STREG %r2,-20(%r30) ldo 64(%r30),%r30 - stw %r2,PT_GR19(%r1) ;! save for child - stw %r30,PT_GR21(%r1) ;! save for child + STREG %r2,PT_GR19(%r1) ;! save for child + STREG %r30,PT_GR21(%r1) ;! save for child - ldw PT_GR30(%r1),%r25 - mtctl %r25,%cr29 + LDREG PT_GR30(%r1),%r25 + mtctl %r25,%cr29 copy %r1,%r24 bl sys_clone,%r2 ldi SIGCHLD,%r26 - ldw -84(%r30),%r2 + LDREG -84(%r30),%r2 fork_return: ldo -64(%r30),%r30 ldo TASK_REGS-TASK_SZ_ALGN-64(%r30),%r1 ;! get pt regs @@ -116,14 +119,14 @@ fork_return: * know the difference. We can fix this later if necessary. */ - ldo -1024(%r0),%r1 + ldo -1024(%r0),%r1 comb,>>=,n %r28,%r1,fork_exit /* just let the syscall exit handle it */ - or,= %r28,%r0,%r0 - or,tr %r0,%r0,%r29 /* r28 <> 0, we are parent, set r29 to 0 */ - ldo 1(%r0),%r29 /* r28 == 0, we are child, set r29 to 1 */ + or,= %r28,%r0,%r0 + or,tr %r0,%r0,%r29 /* r28 <> 0, we are parent, set r29 to 0 */ + ldo 1(%r0),%r29 /* r28 == 0, we are child, set r29 to 1 */ fork_exit: - bv %r0(%r2) + bv %r0(%r2) nop /* Set the return value for the child */ @@ -134,7 +137,7 @@ hpux_child_return: nop #endif - ldw TASK_PT_GR19-TASK_SZ_ALGN-128(%r30),%r2 + LDREG TASK_PT_GR19-TASK_SZ_ALGN-128(%r30),%r2 b fork_return copy %r0,%r28 @@ -157,17 +160,17 @@ hpux_execve_wrapper: /* Store arg0, arg1 and arg2 so that hpux_execve will find them */ - stw %r26,PT_GR26(%r1) - stw %r25,PT_GR25(%r1) - stw %r24,PT_GR24(%r1) + STREG %r26,PT_GR26(%r1) + STREG %r25,PT_GR25(%r1) + STREG %r24,PT_GR24(%r1) - stw %r2,-20(%r30) + STREG %r2,-20(%r30) ldo 64(%r30),%r30 bl hpux_execve,%r2 copy %r1,%arg0 ldo -64(%r30),%r30 - ldw -20(%r30),%r2 + LDREG -20(%r30),%r2 /* If exec succeeded we need to load the args */ @@ -175,10 +178,10 @@ hpux_execve_wrapper: comb,>>= %r28,%r1,exec_error copy %r2,%r19 ldo -TASK_SZ_ALGN-64(%r30),%r1 ;! get task ptr - ldw TASK_PT_GR26(%r1),%r26 - ldw TASK_PT_GR25(%r1),%r25 - ldw TASK_PT_GR24(%r1),%r24 - ldw TASK_PT_GR23(%r1),%r23 + LDREG TASK_PT_GR26(%r1),%r26 + LDREG TASK_PT_GR25(%r1),%r25 + LDREG TASK_PT_GR24(%r1),%r24 + LDREG TASK_PT_GR23(%r1),%r23 copy %r0,%r2 /* Flag to syscall_exit not to clear args */ exec_error: @@ -191,7 +194,7 @@ exec_error: /* HP-UX expects pipefd's returned in r28 & r29 */ hpux_pipe_wrapper: - stw %r2,-20(%r30) + STREG %r2,-20(%r30) ldo 64(%r30),%r30 bl hpux_pipe,%r2 ldo -56(%r30),%r26 /* pass local array to hpux_pipe */ @@ -199,12 +202,12 @@ hpux_pipe_wrapper: ldo -1024(%r0),%r1 comb,>>= %r28,%r1,pipe_exit /* let syscall exit handle it */ - ldw -84(%r30),%r2 + LDREG -84(%r30),%r2 /* if success, load fd's from stack array */ - ldw -56(%r30),%r28 - ldw -52(%r30),%r29 + LDREG -56(%r30),%r28 + LDREG -52(%r30),%r29 pipe_exit: bv %r0(%r2) @@ -251,4 +254,4 @@ no_error: hpux_unimplemented_wrapper: b hpux_unimplemented - stw %r22,-64(%r30) /* overwrite arg8 with syscall number */ + STREG %r22,-64(%r30) /* overwrite arg8 with syscall number */ diff -prauN linux-2.6.0-test5/arch/parisc/kernel/cache.c wli-2.6.0-test5-bk12-25/arch/parisc/kernel/cache.c --- linux-2.6.0-test5/arch/parisc/kernel/cache.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/parisc/kernel/cache.c 2003-09-28 23:05:10.000000000 -0700 @@ -64,7 +64,7 @@ update_mmu_cache(struct vm_area_struct * { struct page *page = pte_page(pte); - if (VALID_PAGE(page) && page->mapping && + if (VALID_PAGE(page) && page_mapping(page) && test_bit(PG_dcache_dirty, &page->flags)) { flush_kernel_dcache_page(page_address(page)); @@ -230,14 +230,17 @@ void __flush_dcache_page(struct page *pa flush_kernel_dcache_page(page_address(page)); - if (!page->mapping) + if (!page_mapping(page)) return; - - list_for_each(l, &page->mapping->i_mmap_shared) { + /* check shared list first if it's not empty...it's usually + * the shortest */ + list_for_each_rcu(l, &page->mapping->i_mmap_shared) { struct vm_area_struct *mpnt; unsigned long off; mpnt = list_entry(l, struct vm_area_struct, shared); + if (mpnt->vm_flags & VM_DEAD) + continue; /* * If this VMA is not in our MM, we can ignore it. @@ -257,6 +260,33 @@ void __flush_dcache_page(struct page *pa /* All user shared mappings should be equivalently mapped, * so once we've flushed one we should be ok */ + return; + } + + /* then check private mapping list for read only shared mappings + * which are flagged by VM_MAYSHARE */ + list_for_each(l, &page->mapping->i_mmap) { + struct vm_area_struct *mpnt; + unsigned long off; + + mpnt = list_entry(l, struct vm_area_struct, shared); + + + if (mpnt->vm_mm != mm || !(mpnt->vm_flags & VM_MAYSHARE)) + continue; + + if (page->index < mpnt->vm_pgoff) + continue; + + off = page->index - mpnt->vm_pgoff; + if (off >= (mpnt->vm_end - mpnt->vm_start) >> PAGE_SHIFT) + continue; + + flush_cache_page(mpnt, mpnt->vm_start + (off << PAGE_SHIFT)); + + /* All user shared mappings should be equivalently mapped, + * so once we've flushed one we should be ok + */ break; } } diff -prauN linux-2.6.0-test5/arch/parisc/kernel/drivers.c wli-2.6.0-test5-bk12-25/arch/parisc/kernel/drivers.c --- linux-2.6.0-test5/arch/parisc/kernel/drivers.c 2003-09-08 12:50:23.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/parisc/kernel/drivers.c 2003-09-25 19:15:48.000000000 -0700 @@ -447,7 +447,7 @@ int register_parisc_device(struct parisc #define MAX_NATIVE_DEVICES 64 #define NATIVE_DEVICE_OFFSET 0x1000 -#define FLEX_MASK (unsigned long)0xfffffffffffc0000 +#define FLEX_MASK F_EXTEND(0xfffc0000) #define IO_IO_LOW offsetof(struct bc_module, io_io_low) #define IO_IO_HIGH offsetof(struct bc_module, io_io_high) #define READ_IO_IO_LOW(dev) (unsigned long)(signed int)__raw_readl(dev->hpa + IO_IO_LOW) @@ -514,7 +514,7 @@ static void walk_native_bus(unsigned lon } while(!devices_found && hpa < io_io_high); } -#define CENTRAL_BUS_ADDR (unsigned long) 0xfffffffffff80000 +#define CENTRAL_BUS_ADDR F_EXTEND(0xfff80000) /** * walk_central_bus - Find devices attached to the central bus diff -prauN linux-2.6.0-test5/arch/parisc/kernel/irq.c wli-2.6.0-test5-bk12-25/arch/parisc/kernel/irq.c --- linux-2.6.0-test5/arch/parisc/kernel/irq.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/parisc/kernel/irq.c 2003-09-25 19:15:48.000000000 -0700 @@ -22,7 +22,7 @@ */ #include #include -#include +#include #include #include #include @@ -39,6 +39,7 @@ #include #include +#include #undef DEBUG_IRQ #undef PARISC_IRQ_CR16_COUNTS @@ -842,6 +843,10 @@ int probe_irq_off(unsigned long val) return irq_found; } +unsigned int probe_irq_mask(unsigned long irqs) +{ + return 0; +} void __init init_IRQ(void) { diff -prauN linux-2.6.0-test5/arch/parisc/kernel/module.c wli-2.6.0-test5-bk12-25/arch/parisc/kernel/module.c --- linux-2.6.0-test5/arch/parisc/kernel/module.c 2003-09-08 12:50:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/parisc/kernel/module.c 2003-09-25 19:15:48.000000000 -0700 @@ -41,6 +41,13 @@ return -ENOEXEC; \ } +/* Maximum number of GOT entries. We use a long displacement ldd from + * the bottom of the table, which has a maximum signed displacement of + * 0x3fff; however, since we're only going forward, this becomes + * 0x1fff, and thus, since each GOT entry is 8 bytes long we can have + * at most 1023 entries */ +#define MAX_GOTS 1023 + /* three functions to determine where in the module core * or init pieces the location is */ static inline int is_init(struct module *me, void *loc) @@ -300,11 +307,14 @@ static Elf64_Word get_got(struct module got = me->module_core + me->arch.got_offset; for (i = 0; got[i].addr; i++) if (got[i].addr == value) - return i * sizeof(struct got_entry); + goto out; BUG_ON(++me->arch.got_count > me->arch.got_max); got[i].addr = value; + out: + DEBUGP("GOT ENTRY %d[%x] val %lx\n", i, i*sizeof(struct got_entry), + value); return i * sizeof(struct got_entry); } #endif /* __LP64__ */ @@ -387,7 +397,7 @@ static Elf_Addr get_stub(struct module * stub->insns[2] = 0xe820d000; /* bve (%r1) */ stub->insns[3] = 0x537b0030; /* ldd 18(%dp),%dp */ - stub->insns[0] |= reassemble_14(rrsel(get_got(me, value, addend),0)); + stub->insns[0] |= reassemble_14(get_got(me, value, addend) & 0x3fff); } else { @@ -516,6 +526,9 @@ int apply_relocate_add(Elf_Shdr *sechdrs case R_PARISC_PCREL22F: /* 22-bit PC relative address; only defined for pa20 */ val = get_stub(me, val, addend, 0, is_init(me, loc)); + DEBUGP("STUB FOR %s loc %lx+%lx at %lx\n", + strtab + sym->st_name, (unsigned long)loc, addend, + val) val = (val - dot - 8)/4; CHECK_RELOC(val, 22); *loc = (*loc & ~0x3ff1ffd) | reassemble_22(val); @@ -618,6 +631,9 @@ int apply_relocate_add(Elf_Shdr *sechdrs val = get_stub(me, val, addend, 0, is_init(me, loc)); } + DEBUGP("STUB FOR %s loc %lx, val %lx+%lx at %lx\n", + strtab + sym->st_name, loc, sym->st_value, + addend, val); /* FIXME: local symbols work as long as the * core and init pieces aren't separated too * far. If this is ever broken, you will trip @@ -646,6 +662,9 @@ int apply_relocate_add(Elf_Shdr *sechdrs /* 64-bit function address */ if(is_local(me, (void *)(val + addend))) { *loc64 = get_fdesc(me, val+addend); + DEBUGP("FDESC for %s at %p points to %lx\n", + strtab + sym->st_name, *loc64, + ((struct fdesc_entry *)*loc64)->addr); } else { /* if the symbol is not local to this * module then val+addend is a pointer @@ -711,8 +730,13 @@ int module_finalize(const Elf_Ehdr *hdr, } } - printk("module %s: strtab %p, symhdr %p\n", + DEBUGP("module %s: strtab %p, symhdr %p\n", me->name, strtab, symhdr); + + if(me->arch.got_count > MAX_GOTS) { + printk(KERN_ERR "%s: Global Offset Table overflow (used %ld, allowed %d\n", me->name, me->arch.got_count, MAX_GOTS); + return -EINVAL; + } /* no symbol table */ if(symhdr == NULL) diff -prauN linux-2.6.0-test5/arch/parisc/kernel/parisc_ksyms.c wli-2.6.0-test5-bk12-25/arch/parisc/kernel/parisc_ksyms.c --- linux-2.6.0-test5/arch/parisc/kernel/parisc_ksyms.c 2003-09-08 12:50:43.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/parisc/kernel/parisc_ksyms.c 2003-09-25 19:15:48.000000000 -0700 @@ -37,13 +37,11 @@ EXPORT_SYMBOL(get_pci_node_path); #include EXPORT_SYMBOL(enable_irq); EXPORT_SYMBOL(disable_irq); +EXPORT_SYMBOL(probe_irq_mask); #include EXPORT_SYMBOL(kernel_thread); EXPORT_SYMBOL(boot_cpu_data); -#ifdef CONFIG_EISA -EXPORT_SYMBOL(EISA_bus); -#endif #include EXPORT_SYMBOL(pm_power_off); @@ -201,6 +199,9 @@ EXPORT_SYMBOL(__ashldi3); EXPORT_SYMBOL(__lshrdi3); EXPORT_SYMBOL(__muldi3); +asmlinkage void * __canonicalize_funcptr_for_compare(void *); +EXPORT_SYMBOL(__canonicalize_funcptr_for_compare); + #ifdef __LP64__ extern void __divdi3(void); extern void __udivdi3(void); diff -prauN linux-2.6.0-test5/arch/parisc/kernel/pci-dma.c wli-2.6.0-test5-bk12-25/arch/parisc/kernel/pci-dma.c --- linux-2.6.0-test5/arch/parisc/kernel/pci-dma.c 2003-09-08 12:50:28.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/parisc/kernel/pci-dma.c 2003-09-25 20:03:31.000000000 -0700 @@ -133,7 +133,7 @@ static inline int map_uncached_pages(uns do { pmd_t *pmd; - pmd = pmd_alloc(NULL, dir, vaddr); + pmd = pmd_alloc_kernel(NULL, dir, vaddr); if (!pmd) return -ENOMEM; if (map_pmd_uncached(pmd, vaddr, end - vaddr, &paddr)) diff -prauN linux-2.6.0-test5/arch/parisc/kernel/pci.c wli-2.6.0-test5-bk12-25/arch/parisc/kernel/pci.c --- linux-2.6.0-test5/arch/parisc/kernel/pci.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/parisc/kernel/pci.c 2003-09-25 19:15:48.000000000 -0700 @@ -10,6 +10,7 @@ * Copyright (C) 1999-2001 Grant Grundler */ #include +#include #include #include #include @@ -25,7 +26,7 @@ #define DEBUG_CONFIG 0 #if DEBUG_CONFIG -# define DBGC(x...) printk(KERN_DEBUG x) +# define DBGC(x...) printk(KERN_DEBUG x) #else # define DBGC(x...) #endif @@ -38,13 +39,15 @@ #endif /* To be used as: mdelay(pci_post_reset_delay); -** -** post_reset is the time the kernel should stall to prevent anyone from -** accessing the PCI bus once #RESET is de-asserted. -** PCI spec somewhere says 1 second but with multi-PCI bus systems, -** this makes the boot time much longer than necessary. -** 20ms seems to work for all the HP PCI implementations to date. -*/ + * + * post_reset is the time the kernel should stall to prevent anyone from + * accessing the PCI bus once #RESET is de-asserted. + * PCI spec somewhere says 1 second but with multi-PCI bus systems, + * this makes the boot time much longer than necessary. + * 20ms seems to work for all the HP PCI implementations to date. + * + * XXX: turn into a #defined constant in ? + */ int pci_post_reset_delay = 50; struct pci_port_ops *pci_port; @@ -52,9 +55,7 @@ struct pci_bios_ops *pci_bios; int pci_hba_count = 0; -/* -** parisc_pci_hba used by pci_port->in/out() ops to lookup bus data. -*/ +/* parisc_pci_hba used by pci_port->in/out() ops to lookup bus data. */ #define PCI_HBA_MAX 32 struct pci_hba_data *parisc_pci_hba[PCI_HBA_MAX]; @@ -129,8 +130,6 @@ static int __init pcibios_init(void) /* Called from pci_do_scan_bus() *after* walking a bus but before walking PPBs. */ void pcibios_fixup_bus(struct pci_bus *bus) { - ASSERT(pci_bios != NULL); - if (pci_bios->fixup_bus) { pci_bios->fixup_bus(bus); } else { @@ -145,64 +144,26 @@ char *pcibios_setup(char *str) } -/* -** Used in drivers/pci/quirks.c -*/ +/* Used in drivers/pci/quirks.c */ struct pci_fixup pcibios_fixups[] = { {0} }; /* -** called by drivers/pci/setup.c:pdev_fixup_irq() -*/ -void __devinit pcibios_update_irq(struct pci_dev *dev, int irq) -{ -/* -** updates IRQ_LINE cfg register to reflect PCI-PCI bridge skewing. -** -** Calling path for Alpha is: -** alpha/kernel/pci.c:common_init_pci(swizzle_func, pci_map_irq_func ) -** drivers/pci/setup.c:pci_fixup_irqs() -** drivers/pci/setup.c:pci_fixup_irq() (for each PCI device) -** invoke swizzle and map functions -** alpha/kernel/pci.c:pcibios_update_irq() -** -** Don't need this for PA legacy PDC systems. -** -** On PAT PDC systems, We only support one "swizzle" for any number -** of PCI-PCI bridges deep. That's how bit3 PCI expansion chassis -** are implemented. The IRQ lines are "skewed" for all devices but -** *NOT* routed through the PCI-PCI bridge. Ie any device "0" will -** share an IRQ line. Legacy PDC is expecting this IRQ line routing -** as well. -** -** Unfortunately, PCI spec allows the IRQ lines to be routed -** around the PCI bridge as long as the IRQ lines are skewed -** based on the device number...... -** -** Lastly, dino.c might be able to use pci_fixup_irq() to -** support RS-232 and PS/2 children. Not sure how but it's -** something to think about. -*/ -} - - -/* -** Called by pci_set_master() - a driver interface. -** -** Legacy PDC guarantees to set: -** Map Memory BAR's into PA IO space. -** Map Expansion ROM BAR into one common PA IO space per bus. -** Map IO BAR's into PCI IO space. -** Command (see below) -** Cache Line Size -** Latency Timer -** Interrupt Line -** PPB: secondary latency timer, io/mmio base/limit, -** bus numbers, bridge control -** -*/ -void -pcibios_set_master(struct pci_dev *dev) + * Called by pci_set_master() - a driver interface. + * + * Legacy PDC guarantees to set: + * Map Memory BAR's into PA IO space. + * Map Expansion ROM BAR into one common PA IO space per bus. + * Map IO BAR's into PCI IO space. + * Command (see below) + * Cache Line Size + * Latency Timer + * Interrupt Line + * PPB: secondary latency timer, io/mmio base/limit, + * bus numbers, bridge control + * + */ +void pcibios_set_master(struct pci_dev *dev) { u8 lat; @@ -214,43 +175,36 @@ pcibios_set_master(struct pci_dev *dev) ** HP generally has fewer devices on the bus than other architectures. ** upper byte is PCI_LATENCY_TIMER. */ - pci_write_config_word(dev, PCI_CACHE_LINE_SIZE, + pci_write_config_word(dev, PCI_CACHE_LINE_SIZE, (0x80 << 8) | (L1_CACHE_BYTES / sizeof(u32))); } -void __init -pcibios_init_bus(struct pci_bus *bus) +void __init pcibios_init_bus(struct pci_bus *bus) { struct pci_dev *dev = bus->self; + unsigned short bridge_ctl; /* We deal only with pci controllers and pci-pci bridges. */ - if (dev && (dev->class >> 8) != PCI_CLASS_BRIDGE_PCI) + if (!dev || (dev->class >> 8) != PCI_CLASS_BRIDGE_PCI) return; - - if (dev) { - unsigned short bridge_ctl; - - /* PCI-PCI bridge - set the cache line and default latency - (32) for primary and secondary buses. */ - pci_write_config_byte(dev, PCI_SEC_LATENCY_TIMER, 32); - - /* Read bridge control */ - pci_read_config_word(dev, PCI_BRIDGE_CONTROL, &bridge_ctl); - pci_write_config_word(dev, PCI_BRIDGE_CONTROL, bridge_ctl - | PCI_BRIDGE_CTL_PARITY | PCI_BRIDGE_CTL_SERR); - } + /* PCI-PCI bridge - set the cache line and default latency + (32) for primary and secondary buses. */ + pci_write_config_byte(dev, PCI_SEC_LATENCY_TIMER, 32); + + pci_read_config_word(dev, PCI_BRIDGE_CONTROL, &bridge_ctl); + bridge_ctl |= PCI_BRIDGE_CTL_PARITY | PCI_BRIDGE_CTL_SERR; + pci_write_config_word(dev, PCI_BRIDGE_CONTROL, bridge_ctl); } -/* -** KLUGE: Link the child and parent resources - generic PCI didn't -*/ +/* KLUGE: Link the child and parent resources - generic PCI didn't */ static void pcibios_link_hba_resources( struct resource *hba_res, struct resource *r) { if (!r->parent) { + printk(KERN_EMERG "PCI: Tell willy he's wrong\n"); r->parent = hba_res; /* reverse link is harder *sigh* */ @@ -268,14 +222,9 @@ pcibios_link_hba_resources( struct resou } } -/* -** called by drivers/pci/setup-res.c:pci_setup_bridge(). -*/ -void __devinit pcibios_resource_to_bus( - struct pci_dev *dev, - struct pci_bus_region *region, - struct resource *res - ) +/* called by drivers/pci/setup-bus.c:pci_setup_bridge(). */ +void __devinit pcibios_resource_to_bus(struct pci_dev *dev, + struct pci_bus_region *region, struct resource *res) { struct pci_bus *bus = dev->bus; struct pci_hba_data *hba = HBA_DATA(bus->dev->platform_data); @@ -313,17 +262,16 @@ EXPORT_SYMBOL(pcibios_resource_to_bus); #endif /* -** pcibios align resources() is called everytime generic PCI code -** wants to generate a new address. The process of looking for -** an available address, each candidate is first "aligned" and -** then checked if the resource is available until a match is found. -** -** Since we are just checking candidates, don't use any fields other -** than res->start. -*/ -void __devinit -pcibios_align_resource(void *data, struct resource *res, - unsigned long size, unsigned long alignment) + * pcibios align resources() is called every time generic PCI code + * wants to generate a new address. The process of looking for + * an available address, each candidate is first "aligned" and + * then checked if the resource is available until a match is found. + * + * Since we are just checking candidates, don't use any fields other + * than res->start. + */ +void pcibios_align_resource(void *data, struct resource *res, + unsigned long size, unsigned long alignment) { unsigned long mask, align; @@ -332,10 +280,6 @@ pcibios_align_resource(void *data, struc res->parent, res->start, res->end, (int) res->flags, size, alignment); - /* has resource already been aligned/assigned? */ - if (res->parent) - return; - /* If it's not IO, then it's gotta be MEM */ align = (res->flags & IORESOURCE_IO) ? PCIBIOS_MIN_IO : PCIBIOS_MIN_MEM; @@ -344,32 +288,26 @@ pcibios_align_resource(void *data, struc res->start += mask; res->start &= ~mask; - /* - ** WARNING : caller is expected to update "end" field. - ** We can't since it might really represent the *size*. - ** The difference is "end = start + size" vs "end += start". - */ + /* The caller updates the end field, we don't. */ } -int __devinit -pcibios_enable_device(struct pci_dev *dev, int mask) +/* + * A driver is enabling the device. We make sure that all the appropriate + * bits are set to allow the device to operate as the driver is expecting. + * We enable the port IO and memory IO bits if the device has any BARs of + * that type, and we enable the PERR and SERR bits unconditionally. + * Drivers that do not need parity (eg graphics and possibly networking) + * can clear these bits if they want. + */ +int pcibios_enable_device(struct pci_dev *dev, int mask) { u16 cmd; int idx; - /* - ** The various platform PDC's (aka "BIOS" for PCs) don't - ** enable all the same bits. We just make sure they are here. - */ pci_read_config_word(dev, PCI_COMMAND, &cmd); - /* - ** See if any resources have been allocated - ** While "regular" PCI devices only use 0-5, Bridges use a few - ** beyond that for window registers. - */ - for (idx=0; idxresource[idx]; /* only setup requested resources */ @@ -382,14 +320,6 @@ pcibios_enable_device(struct pci_dev *de cmd |= PCI_COMMAND_MEMORY; } - /* - ** Enable System error and Parity Error reporting by default. - ** Devices that do NOT want those behaviors should clear them - ** (eg PCI graphics, possibly networking). - ** Interfaces like SCSI certainly should not. We want the - ** system to crash if a system or parity error is detected. - ** At least until the device driver can recover from such an error. - */ cmd |= (PCI_COMMAND_SERR | PCI_COMMAND_PARITY); #if 0 @@ -402,30 +332,15 @@ pcibios_enable_device(struct pci_dev *de return 0; } -void __init -pcibios_setup_host_bridge(struct pci_bus *bus) -{ - ASSERT(pci_bios != NULL); -#if 0 - if (pci_bios) - { - if (pci_bios->setup_host_bridge) { - (*pci_bios->setup_host_bridge)(bus); - } - } -#endif -} - - -/* -** PARISC specific (unfortunately) -*/ +/* PA-RISC specific */ void pcibios_register_hba(struct pci_hba_data *hba) { - ASSERT(pci_hba_count < PCI_HBA_MAX); + if (pci_hba_count >= PCI_HBA_MAX) { + printk(KERN_ERR "PCI: Too many Host Bus Adapters\n"); + return; + } - /* pci_port->in/out() uses parisc_pci_hba to lookup parameter. */ parisc_pci_hba[pci_hba_count] = hba; hba->hba_num = pci_hba_count++; } diff -prauN linux-2.6.0-test5/arch/parisc/kernel/process.c wli-2.6.0-test5-bk12-25/arch/parisc/kernel/process.c --- linux-2.6.0-test5/arch/parisc/kernel/process.c 2003-09-08 12:50:42.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/parisc/kernel/process.c 2003-09-25 19:15:48.000000000 -0700 @@ -19,7 +19,6 @@ #include #include #include -#include #include #include diff -prauN linux-2.6.0-test5/arch/parisc/kernel/real2.S wli-2.6.0-test5-bk12-25/arch/parisc/kernel/real2.S --- linux-2.6.0-test5/arch/parisc/kernel/real2.S 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/parisc/kernel/real2.S 2003-09-25 19:15:48.000000000 -0700 @@ -123,7 +123,7 @@ save_control_regs: nop restore_control_regs: - load32 PA(save_cr_space + (N_SAVED_REGS * REG_SZ)), %r26 + load32 PA(save_cr_space+(N_SAVED_REGS*REG_SZ)), %r26 POP_CR(%cr15, %r26) POP_CR(%cr31, %r26) POP_CR(%cr30, %r26) @@ -275,6 +275,7 @@ r64_ret: nop #endif + .export pc_in_user_space .text /* Doesn't belong here but I couldn't find a nicer spot. */ @@ -283,3 +284,17 @@ pc_in_user_space: bv,n 0(%rp) nop + + .export __canonicalize_funcptr_for_compare + .text + /* http://lists.parisc-linux.org/hypermail/parisc-linux/10916.html + ** GCC 3.3 and later has a new function in libgcc.a for + ** comparing function pointers. + */ +__canonicalize_funcptr_for_compare: +#ifdef __LP64__ + bve (%r2) +#else + bv %r0(%r2) +#endif + copy %r26,%r28 diff -prauN linux-2.6.0-test5/arch/parisc/kernel/setup.c wli-2.6.0-test5-bk12-25/arch/parisc/kernel/setup.c --- linux-2.6.0-test5/arch/parisc/kernel/setup.c 2003-09-08 12:50:32.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/parisc/kernel/setup.c 2003-09-25 19:15:48.000000000 -0700 @@ -52,10 +52,6 @@ char command_line[COMMAND_LINE_SIZE]; struct proc_dir_entry * proc_runway_root = NULL; struct proc_dir_entry * proc_gsc_root = NULL; -#ifdef CONFIG_EISA -int EISA_bus; /* This has to go somewhere in architecture specific code. */ -#endif - void __init setup_cmdline(char **cmdline_p) { extern unsigned int boot_args[]; diff -prauN linux-2.6.0-test5/arch/parisc/kernel/signal.c wli-2.6.0-test5-bk12-25/arch/parisc/kernel/signal.c --- linux-2.6.0-test5/arch/parisc/kernel/signal.c 2003-09-08 12:50:38.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/parisc/kernel/signal.c 2003-09-25 19:15:48.000000000 -0700 @@ -13,7 +13,6 @@ * arch/parisc/hpux/signal.c when we figure out how to do them. */ -#include #include #include #include @@ -458,6 +457,8 @@ do_signal(sigset_t *oldset, struct pt_re if (in_syscall) { /* Check the return code */ switch (regs->gr[28]) { + case -ERESTART_RESTARTBLOCK: + current_thread_info()->restart_block.fn = do_no_restart_syscall; case -ERESTARTNOHAND: DBG(("ERESTARTNOHAND: returning -EINTR\n")); regs->gr[28] = -EINTR; @@ -495,7 +496,8 @@ do_signal(sigset_t *oldset, struct pt_re /* Did we come from a system call? */ if (in_syscall) { /* Restart the system call - no handlers present */ - if (regs->gr[28] == -ERESTARTNOHAND || + if (regs->gr[28] == -ERESTART_RESTARTBLOCK || + regs->gr[28] == -ERESTARTNOHAND || regs->gr[28] == -ERESTARTSYS || regs->gr[28] == -ERESTARTNOINTR) { /* Hooray for delayed branching. We don't diff -prauN linux-2.6.0-test5/arch/parisc/kernel/sys_parisc.c wli-2.6.0-test5-bk12-25/arch/parisc/kernel/sys_parisc.c --- linux-2.6.0-test5/arch/parisc/kernel/sys_parisc.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/parisc/kernel/sys_parisc.c 2003-09-25 19:15:48.000000000 -0700 @@ -30,8 +30,6 @@ static unsigned long get_unshared_area(u { struct vm_area_struct *vma; - if (!addr) - addr = TASK_UNMAPPED_BASE; addr = PAGE_ALIGN(addr); for (vma = find_vma(current->mm, addr); ; vma = vma->vm_next) { @@ -46,17 +44,38 @@ static unsigned long get_unshared_area(u #define DCACHE_ALIGN(addr) (((addr) + (SHMLBA - 1)) &~ (SHMLBA - 1)) -static unsigned long get_shared_area(struct inode *inode, unsigned long addr, - unsigned long len, unsigned long pgoff) +/* + * We need to know the offset to use. Old scheme was to look for + * existing mapping and use the same offset. New scheme is to use the + * address of the kernel data structure as the seed for the offset. + * We'll see how that works... + */ +#if 0 +static int get_offset(struct address_space *mapping) +{ + struct vm_area_struct *vma = list_entry(mapping->i_mmap_shared.next, + struct vm_area_struct, shared); + return (vma->vm_start + ((pgoff - vma->vm_pgoff) << PAGE_SHIFT)) & + (SHMLBA - 1); +} +#else +/* The mapping is cacheline aligned, so there's no information in the bottom + * few bits of the address. We're looking for 10 bits (4MB / 4k), so let's + * drop the bottom 8 bits and use bits 8-17. + */ +static int get_offset(struct address_space *mapping) { - struct vm_area_struct *vma, *first_vma; - int offset; + int offset = (int) mapping << (PAGE_SHIFT - 8); + return offset & 0x3FF000; +} +#endif - first_vma = list_entry(inode->i_mapping->i_mmap_shared.next, struct vm_area_struct, shared); - offset = (first_vma->vm_start + ((pgoff - first_vma->vm_pgoff) << PAGE_SHIFT)) & (SHMLBA - 1); +static unsigned long get_shared_area(struct address_space *mapping, + unsigned long addr, unsigned long len, unsigned long pgoff) +{ + struct vm_area_struct *vma; + int offset = get_offset(mapping); - if (!addr) - addr = TASK_UNMAPPED_BASE; addr = DCACHE_ALIGN(addr - offset) + offset; for (vma = find_vma(current->mm, addr); ; vma = vma->vm_next) { @@ -74,17 +93,17 @@ static unsigned long get_shared_area(str unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, unsigned long len, unsigned long pgoff, unsigned long flags) { - struct inode *inode = NULL; + struct inode *inode; if (len > TASK_SIZE) return -ENOMEM; + if (!addr) + addr = TASK_UNMAPPED_BASE; - if (filp) { - inode = filp->f_dentry->d_inode; - } + inode = filp ? filp->f_dentry->d_inode : NULL; - if (inode && (flags & MAP_SHARED) && (!list_empty(&inode->i_mapping->i_mmap_shared))) { - addr = get_shared_area(inode, addr, len, pgoff); + if (inode && (flags & MAP_SHARED)) { + addr = get_shared_area(inode->i_mapping, addr, len, pgoff); } else { addr = get_unshared_area(addr, len); } @@ -185,6 +204,7 @@ extern asmlinkage ssize_t sys_pread64(un size_t count, loff_t pos); extern asmlinkage ssize_t sys_pwrite64(unsigned int fd, const char *buf, size_t count, loff_t pos); +extern asmlinkage ssize_t sys_readahead(int fd, loff_t offset, size_t count); asmlinkage ssize_t parisc_pread64(unsigned int fd, char *buf, size_t count, unsigned int high, unsigned int low) @@ -198,6 +218,11 @@ asmlinkage ssize_t parisc_pwrite64(unsig return sys_pwrite64(fd, buf, count, (loff_t)high << 32 | low); } +asmlinkage ssize_t parisc_readahead(int fd, unsigned int high, unsigned int low, + size_t count) +{ + return sys_readahead(fd, (loff_t)high << 32 | low, count); +} /* * FIXME, please remove this crap as soon as possible @@ -271,7 +296,7 @@ static int copyout_broken_shmid64(struct tbuf.shm_cpid = sbuf->shm_cpid; tbuf.shm_lpid = sbuf->shm_lpid; tbuf.shm_nattch = sbuf->shm_nattch; - return copy_to_user(buf, &tbuf, sizeof tbuf); + return copy_to_user(buf, &tbuf, sizeof tbuf) ? -EFAULT : 0; } int sys_msgctl_broken(int msqid, int cmd, struct msqid_ds *buf) diff -prauN linux-2.6.0-test5/arch/parisc/kernel/sys_parisc32.c wli-2.6.0-test5-bk12-25/arch/parisc/kernel/sys_parisc32.c --- linux-2.6.0-test5/arch/parisc/kernel/sys_parisc32.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/parisc/kernel/sys_parisc32.c 2003-09-25 19:15:48.000000000 -0700 @@ -46,6 +46,7 @@ #include #include #include +#include #include #include @@ -373,18 +374,16 @@ put_compat_timeval(struct compat_timeval return copy_to_user(u, &t32, sizeof t32); } -static int -get_compat_timeval(struct compat_timeval *u, struct timeval *t) +static inline long get_ts32(struct timespec *o, struct compat_timeval *i) { - int err; - struct compat_timeval t32; + long usec; - if ((err = copy_from_user(&t32, u, sizeof t32)) == 0) - { - t->tv_sec = t32.tv_sec; - t->tv_usec = t32.tv_usec; - } - return err; + if (__get_user(o->tv_sec, &i->tv_sec)) + return -EFAULT; + if (__get_user(usec, &i->tv_usec)) + return -EFAULT; + o->tv_nsec = usec * 1000; + return 0; } asmlinkage long sys32_time(compat_time_t *tloc) @@ -418,39 +417,39 @@ sys32_gettimeofday(struct compat_timeval return 0; } -asmlinkage int -sys32_settimeofday(struct compat_timespec *tv, struct timezone *tz) +asmlinkage +int sys32_settimeofday(struct compat_timeval *tv, struct timezone *tz) { - struct timeval ktv; - struct timezone ktz; - extern int do_sys_settimeofday(struct timespec *tv, struct timezone *tz); + struct timespec kts; + struct timezone ktz; - if (tv) { - if (get_compat_timeval(tv, &ktv)) - return -EFAULT; - } - if (tz) { - if (copy_from_user(&ktz, tz, sizeof(ktz))) - return -EFAULT; - } + if (tv) { + if (get_ts32(&kts, tv)) + return -EFAULT; + } + if (tz) { + if (copy_from_user(&ktz, tz, sizeof(ktz))) + return -EFAULT; + } - return do_sys_settimeofday(tv ? &ktv : NULL, tz ? &ktz : NULL); + return do_sys_settimeofday(tv ? &kts : NULL, tz ? &ktz : NULL); } int cp_compat_stat(struct kstat *stat, struct compat_stat *statbuf) { int err; - if (stat->size > MAX_NON_LFS) + if (stat->size > MAX_NON_LFS || !new_valid_dev(stat->dev) || + !new_valid_dev(stat->rdev)) return -EOVERFLOW; - err = put_user(stat->dev, &statbuf->st_dev); + err = put_user(new_encode_dev(stat->dev), &statbuf->st_dev); err |= put_user(stat->ino, &statbuf->st_ino); err |= put_user(stat->mode, &statbuf->st_mode); err |= put_user(stat->nlink, &statbuf->st_nlink); err |= put_user(0, &statbuf->st_reserved1); err |= put_user(0, &statbuf->st_reserved2); - err |= put_user(stat->rdev, &statbuf->st_rdev); + err |= put_user(new_encode_dev(stat->rdev), &statbuf->st_rdev); err |= put_user(stat->size, &statbuf->st_size); err |= put_user(stat->atime.tv_sec, &statbuf->st_atime); err |= put_user(stat->atime.tv_nsec, &statbuf->st_atime_nsec); @@ -1089,6 +1088,27 @@ asmlinkage long sys32_msgrcv(int msqid, return err; } + +extern asmlinkage ssize_t sys_sendfile(int out_fd, int in_fd, off_t *offset, size_t count); +asmlinkage int sys32_sendfile(int out_fd, int in_fd, compat_off_t *offset, s32 count) +{ + mm_segment_t old_fs = get_fs(); + int ret; + off_t of; + + if (offset && get_user(of, offset)) + return -EFAULT; + + set_fs(KERNEL_DS); + ret = sys_sendfile(out_fd, in_fd, offset ? &of : NULL, count); + set_fs(old_fs); + + if (offset && put_user(of, offset)) + return -EFAULT; + + return ret; +} + /* EXPORT/UNEXPORT */ struct nfsctl_export32 { char ex_client[NFSCLNT_IDMAX+1]; diff -prauN linux-2.6.0-test5/arch/parisc/kernel/syscall.S wli-2.6.0-test5-bk12-25/arch/parisc/kernel/syscall.S --- linux-2.6.0-test5/arch/parisc/kernel/syscall.S 2003-09-08 12:50:43.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/parisc/kernel/syscall.S 2003-09-25 19:15:48.000000000 -0700 @@ -483,7 +483,7 @@ sys_call_table: ENTRY_SAME(madvise) ENTRY_SAME(clone_wrapper) /* 120 */ ENTRY_SAME(setdomainname) - ENTRY_SAME(sendfile) + ENTRY_DIFF(sendfile) /* struct sockaddr... */ ENTRY_SAME(recvfrom) /* struct timex contains longs */ @@ -592,7 +592,7 @@ sys_call_table: ENTRY_SAME(ni_syscall) ENTRY_SAME(ni_syscall) /* 205 */ ENTRY_SAME(gettid) - ENTRY_SAME(readahead) + ENTRY_OURS(readahead) ENTRY_SAME(ni_syscall) /* tkill */ ENTRY_SAME(sendfile64) diff -prauN linux-2.6.0-test5/arch/parisc/kernel/traps.c wli-2.6.0-test5-bk12-25/arch/parisc/kernel/traps.c --- linux-2.6.0-test5/arch/parisc/kernel/traps.c 2003-09-08 12:50:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/parisc/kernel/traps.c 2003-09-25 19:15:48.000000000 -0700 @@ -221,6 +221,8 @@ void die_if_kernel(char *str, struct pt_ return; } + oops_in_progress = 1; + /* Amuse the user in a SPARC fashion */ printk( " _______________________________ \n" @@ -414,6 +416,8 @@ void parisc_terminate(char *msg, struct { static spinlock_t terminate_lock = SPIN_LOCK_UNLOCKED; + oops_in_progress = 1; + set_eiem(0); local_irq_disable(); spin_lock(&terminate_lock); diff -prauN linux-2.6.0-test5/arch/parisc/kernel/vmlinux.lds.S wli-2.6.0-test5-bk12-25/arch/parisc/kernel/vmlinux.lds.S --- linux-2.6.0-test5/arch/parisc/kernel/vmlinux.lds.S 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/parisc/kernel/vmlinux.lds.S 2003-09-25 19:15:48.000000000 -0700 @@ -0,0 +1,125 @@ +#include +#include + +/* ld script to make hppa Linux kernel */ +#ifndef CONFIG_PARISC64 +OUTPUT_FORMAT("elf32-hppa-linux") +OUTPUT_ARCH(hppa) +#else +OUTPUT_FORMAT("elf64-hppa-linux") +OUTPUT_ARCH(hppa:hppa2.0w) +#endif + +ENTRY(_stext) +#ifndef CONFIG_PARISC64 +jiffies = jiffies_64 + 4; +#else +jiffies = jiffies_64; +#endif +SECTIONS +{ + + . = 0x10100000; + + _text = .; /* Text and read-only data */ + .text BLOCK(16) : { + *(.text*) + *(.PARISC.unwind) + *(.fixup) + *(.lock.text) /* out-of-line lock text */ + *(.gnu.warning) + } = 0 + + _etext = .; /* End of text section */ + + . = ALIGN(16); /* Exception table */ + __start___ex_table = .; + __ex_table : { *(__ex_table) } + __stop___ex_table = .; + + RODATA + + .data BLOCK(8192) : { /* Data without special */ + data_start = .; + *(.data) + } + +#ifdef CONFIG_PARISC64 + . = ALIGN(16); /* Linkage tables */ + .opd : { *(.opd) } PROVIDE (__gp = .); + .plt : { *(.plt) } + .dlt : { *(.dlt) } +#endif + + . = ALIGN(16384); + __init_begin = .; + .init.text : { + _sinittext = .; + *(.init.text) + _einittext = .; + } + .init.data : { *(.init.data) } + . = ALIGN(16); + __setup_start = .; + .init.setup : { *(.init.setup) } + __setup_end = .; + __start___param =.; + __param : { *(__param) } + __stop___param = .; + __initcall_start = .; + .initcall.init : { + *(.initcall1.init) + *(.initcall2.init) + *(.initcall3.init) + *(.initcall4.init) + *(.initcall5.init) + *(.initcall6.init) + *(.initcall7.init) + } + __initcall_end = .; + __con_initcall_start = .; + .con_initcall.init : { *(.con_initcall.init) } + __con_initcall_end = .; + SECURITY_INIT + . = ALIGN(4096); + __initramfs_start = .; + .init.ramfs : { *(.init.ramfs) } + __initramfs_end = .; + . = ALIGN(32); + __per_cpu_start = .; + .data.percpu : { *(.data.percpu) } + __per_cpu_end = .; + . = ALIGN(4096); + __init_end = .; + + init_task BLOCK(16384) : { *(init_task) } /* The initial task and kernel stack */ + + _edata = .; /* End of data section */ + + + .bss : { *(.bss) *(COMMON) } /* BSS */ + + + _end = . ; + + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + .note 0 : { *(.note) } + +#ifdef CONFIG_PARISC64 + /* temporary hack until binutils is fixed to not emit these + for static binaries */ + /DISCARD/ : { + *(.dynsym) + *(.dynstr) + *(.dynamic) + *(.hash) + } +#endif +} diff -prauN linux-2.6.0-test5/arch/parisc/mm/ioremap.c wli-2.6.0-test5-bk12-25/arch/parisc/mm/ioremap.c --- linux-2.6.0-test5/arch/parisc/mm/ioremap.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/parisc/mm/ioremap.c 2003-09-25 20:03:31.000000000 -0700 @@ -77,7 +77,7 @@ static int remap_area_pages(unsigned lon spin_lock(&init_mm.page_table_lock); do { pmd_t *pmd; - pmd = pmd_alloc(dir, address); + pmd = pmd_alloc_kernel(dir, address); error = -ENOMEM; if (!pmd) break; diff -prauN linux-2.6.0-test5/arch/parisc/nm wli-2.6.0-test5-bk12-25/arch/parisc/nm --- linux-2.6.0-test5/arch/parisc/nm 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/parisc/nm 2003-09-25 19:15:48.000000000 -0700 @@ -0,0 +1,6 @@ +#!/bin/sh +## +# Hack to have an nm which removes the local symbols. We also rely +# on this nm being hidden out of the ordinarily executable path +## +${CROSS_COMPILE}nm $* | grep -v '.LC*[0-9]*$' diff -prauN linux-2.6.0-test5/arch/parisc/vmlinux.lds.S wli-2.6.0-test5-bk12-25/arch/parisc/vmlinux.lds.S --- linux-2.6.0-test5/arch/parisc/vmlinux.lds.S 2003-09-08 12:49:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/parisc/vmlinux.lds.S 1969-12-31 16:00:00.000000000 -0800 @@ -1,125 +0,0 @@ -#include -#include - -/* ld script to make hppa Linux kernel */ -#ifndef CONFIG_PARISC64 -OUTPUT_FORMAT("elf32-hppa-linux") -OUTPUT_ARCH(hppa) -#else -OUTPUT_FORMAT("elf64-hppa-linux") -OUTPUT_ARCH(hppa:hppa2.0w) -#endif - -ENTRY(_stext) -#ifndef CONFIG_PARISC64 -jiffies = jiffies_64 + 4; -#else -jiffies = jiffies_64; -#endif -SECTIONS -{ - - . = 0x10100000; - - _text = .; /* Text and read-only data */ - .text BLOCK(16) : { - *(.text*) - *(.PARISC.unwind) - *(.fixup) - *(.lock.text) /* out-of-line lock text */ - *(.gnu.warning) - } = 0 - - _etext = .; /* End of text section */ - - . = ALIGN(16); /* Exception table */ - __start___ex_table = .; - __ex_table : { *(__ex_table) } - __stop___ex_table = .; - - RODATA - - .data BLOCK(8192) : { /* Data without special */ - data_start = .; - *(.data) - } - -#ifdef CONFIG_PARISC64 - . = ALIGN(16); /* Linkage tables */ - .opd : { *(.opd) } PROVIDE (__gp = .); - .plt : { *(.plt) } - .dlt : { *(.dlt) } -#endif - - . = ALIGN(16384); - __init_begin = .; - .init.text : { - _sinittext = .; - *(.init.text) - _einittext = .; - } - .init.data : { *(.init.data) } - . = ALIGN(16); - __setup_start = .; - .init.setup : { *(.init.setup) } - __setup_end = .; - __start___param =.; - __param : { *(__param) } - __stop___param = .; - __initcall_start = .; - .initcall.init : { - *(.initcall1.init) - *(.initcall2.init) - *(.initcall3.init) - *(.initcall4.init) - *(.initcall5.init) - *(.initcall6.init) - *(.initcall7.init) - } - __initcall_end = .; - __con_initcall_start = .; - .con_initcall.init : { *(.con_initcall.init) } - __con_initcall_end = .; - SECURITY_INIT - . = ALIGN(4096); - __initramfs_start = .; - .init.ramfs : { *(.init.ramfs) } - __initramfs_end = .; - . = ALIGN(32); - __per_cpu_start = .; - .data.percpu : { *(.data.percpu) } - __per_cpu_end = .; - . = ALIGN(4096); - __init_end = .; - - init_task BLOCK(16384) : { *(init_task) } /* The initial task and kernel stack */ - - _edata = .; /* End of data section */ - - - .bss : { *(.bss) *(COMMON) } /* BSS */ - - - _end = . ; - - /* Stabs debugging sections. */ - .stab 0 : { *(.stab) } - .stabstr 0 : { *(.stabstr) } - .stab.excl 0 : { *(.stab.excl) } - .stab.exclstr 0 : { *(.stab.exclstr) } - .stab.index 0 : { *(.stab.index) } - .stab.indexstr 0 : { *(.stab.indexstr) } - .comment 0 : { *(.comment) } - .note 0 : { *(.note) } - -#ifdef CONFIG_PARISC64 - /* temporary hack until binutils is fixed to not emit these - for static binaries */ - /DISCARD/ : { - *(.dynsym) - *(.dynstr) - *(.dynamic) - *(.hash) - } -#endif -} diff -prauN linux-2.6.0-test5/arch/ppc/4xx_io/Makefile wli-2.6.0-test5-bk12-25/arch/ppc/4xx_io/Makefile --- linux-2.6.0-test5/arch/ppc/4xx_io/Makefile 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/4xx_io/Makefile 2003-09-25 19:15:48.000000000 -0700 @@ -1,5 +1,5 @@ # -# Makefile for the linux MPC4xx ppc-specific parts +# Makefile for the linux MPC4xx ppc-specific parts # diff -prauN linux-2.6.0-test5/arch/ppc/4xx_io/serial_sicc.c wli-2.6.0-test5-bk12-25/arch/ppc/4xx_io/serial_sicc.c --- linux-2.6.0-test5/arch/ppc/4xx_io/serial_sicc.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/4xx_io/serial_sicc.c 2003-09-25 19:15:48.000000000 -0700 @@ -63,7 +63,7 @@ /* ----------------------------------------------------------------------------- - * From STB03xxx SICC UART Specification + * From STB03xxx SICC UART Specification * ----------------------------------------------------------------------------- * UART Register Offsets. */ @@ -253,7 +253,7 @@ struct SICC_port { unsigned int fifosize; unsigned int tiocm_support; void (*set_mctrl)(struct SICC_port *, u_int mctrl); -}; +}; /* * This is the state information which is persistent across opens @@ -833,7 +833,7 @@ static void siccuart_change_speed(struct /* As a last resort, if the quotient is zero, default to 9600 bps */ if (!quot) quot = (info->port->uartclk / (16 * 9600)) - 1; - + info->timeout = info->port->fifosize * HZ * bits / baud; info->timeout += HZ/50; /* Add .02 seconds of slop */ @@ -1239,7 +1239,7 @@ static int get_lsr_info(struct SICC_info SICC_XMIT_SIZE) > 0) && !info->tty->stopped && !info->tty->hw_stopped)) result &= TIOCSER_TEMT; - + return put_user(result, value); } diff -prauN linux-2.6.0-test5/arch/ppc/8260_io/enet.c wli-2.6.0-test5-bk12-25/arch/ppc/8260_io/enet.c --- linux-2.6.0-test5/arch/ppc/8260_io/enet.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/8260_io/enet.c 2003-09-25 19:15:48.000000000 -0700 @@ -206,7 +206,7 @@ scc_enet_start_xmit(struct sk_buff *skb, cep->stats.tx_bytes += skb->len; cep->skb_cur = (cep->skb_cur+1) & TX_RING_MOD_MASK; - + spin_lock_irq(&cep->lock); /* Send it on its way. Tell CPM its ready, interrupt when done, @@ -429,7 +429,7 @@ scc_enet_rx(struct net_device *dev) for (;;) { if (bdp->cbd_sc & BD_ENET_RX_EMPTY) break; - + #ifndef final_version /* Since we have allocated space to hold a complete frame, both * the first and last indicators should be set. @@ -549,7 +549,7 @@ static void set_multicast_list(struct ne ep = (scc_enet_t *)dev->base_addr; if (dev->flags&IFF_PROMISC) { - + /* Log any net taps. */ printk("%s: Promiscuous mode enabled.\n", dev->name); cep->sccp->scc_pmsr |= SCC_PSMR_PRO; @@ -577,7 +577,7 @@ static void set_multicast_list(struct ne dmi = dev->mc_list; for (i=0; imc_count; i++) { - + /* Only support group multicast for now. */ if (!(dmi->dmi_addr[0] & 1)) @@ -660,7 +660,7 @@ static int __init scc_enet_init(void) (PC_ENET_RENA | PC_ENET_CLSN | PC_ENET_TXCLK | PC_ENET_RXCLK); io->iop_pdirc &= ~(PC_ENET_RENA | PC_ENET_CLSN | PC_ENET_TXCLK | PC_ENET_RXCLK); - io->iop_psorc &= + io->iop_psorc &= ~(PC_ENET_RENA | PC_ENET_TXCLK | PC_ENET_RXCLK); io->iop_psorc |= PC_ENET_CLSN; diff -prauN linux-2.6.0-test5/arch/ppc/8260_io/fcc_enet.c wli-2.6.0-test5-bk12-25/arch/ppc/8260_io/fcc_enet.c --- linux-2.6.0-test5/arch/ppc/8260_io/fcc_enet.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/8260_io/fcc_enet.c 2003-09-25 19:15:48.000000000 -0700 @@ -560,7 +560,7 @@ fcc_enet_interrupt(int irq, void * dev_i * down. We now issue a restart transmit. Since the * errors close the BD and update the pointers, the restart * _should_ pick up without having to reset any of our - * pointers either. Also, To workaround 8260 device erratum + * pointers either. Also, To workaround 8260 device erratum * CPM37, we must disable and then re-enable the transmitter * following a Late Collision, Underrun, or Retry Limit error. */ @@ -609,7 +609,7 @@ fcc_enet_rx(struct net_device *dev) for (;;) { if (bdp->cbd_sc & BD_ENET_RX_EMPTY) break; - + #ifndef final_version /* Since we have allocated space to hold a complete frame, both * the first and last indicators should be set. @@ -1242,7 +1242,7 @@ return; ep = (fcc_enet_t *)dev->base_addr; if (dev->flags&IFF_PROMISC) { - + /* Log any net taps. */ printk("%s: Promiscuous mode enabled.\n", dev->name); cep->fccp->fcc_fpsmr |= FCC_PSMR_PRO; @@ -1266,7 +1266,7 @@ return; dmi = dev->mc_list; for (i=0; imc_count; i++) { - + /* Only support group multicast for now. */ if (!(dmi->dmi_addr[0] & 1)) @@ -1307,12 +1307,12 @@ int fcc_enet_set_mac_address(struct net_ cep = (struct fcc_enet_private *)(dev->priv); ep = cep->ep; - + if (netif_running(dev)) return -EBUSY; memcpy(dev->dev_addr, addr->sa_data, dev->addr_len); - + eap = (unsigned char *) &(ep->fen_paddrh); for (i=5; i>=0; i--) *eap++ = addr->sa_data[i]; @@ -1547,7 +1547,7 @@ init_fcc_param(fcc_info_t *fip, struct n ep->fen_genfcc.fcc_tiptr = mem_addr+32; ep->fen_padptr = mem_addr+64; memset((char *)(&(immap->im_dprambase[(mem_addr+64)])), 0x88, 32); - + ep->fen_genfcc.fcc_rbptr = 0; ep->fen_genfcc.fcc_tbptr = 0; ep->fen_genfcc.fcc_rcrc = 0; @@ -1859,7 +1859,7 @@ fcc_stop(struct net_device *dev) fccp->fcc_gfmr &= ~(FCC_GFMR_ENR | FCC_GFMR_ENT); } #endif /* CONFIG_USE_MDIO */ - + static void fcc_restart(struct net_device *dev, int duplex) { diff -prauN linux-2.6.0-test5/arch/ppc/8260_io/uart.c wli-2.6.0-test5-bk12-25/arch/ppc/8260_io/uart.c --- linux-2.6.0-test5/arch/ppc/8260_io/uart.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/8260_io/uart.c 2003-09-25 19:15:48.000000000 -0700 @@ -18,10 +18,6 @@ * It still needs lots of work........When it was easy, I included code * to support the SCCs. * Only the SCCs support modem control, so that is not complete either. - * - * This module exports the following rs232 io functions: - * - * int rs_8xx_init(void); */ #include @@ -104,7 +100,7 @@ static unsigned long break_pressed; /* b #undef SERIAL_DEBUG_RS_WAIT_UNTIL_SENT #define _INLINE_ inline - + #define DBG_CNT(s) /* We overload some of the items in the data structure to meet our @@ -281,7 +277,7 @@ static void rs_8xx_stop(struct tty_struc if (serial_paranoia_check(info, tty->name, "rs_stop")) return; - + save_flags(flags); cli(); if ((idx = info->state->smc_scc_num) < SCC_NUM_BASE) { smcp = &immr->im_smc[idx]; @@ -304,7 +300,7 @@ static void rs_8xx_start(struct tty_stru if (serial_paranoia_check(info, tty->name, "rs_stop")) return; - + save_flags(flags); cli(); if ((idx = info->state->smc_scc_num) < SCC_NUM_BASE) { smcp = &immr->im_smc[idx]; @@ -329,7 +325,7 @@ static void rs_8xx_start(struct tty_stru * rs_interrupt() should try to keep the interrupt handler as fast as * possible. After you are done making modifications, it is not a bad * idea to do: - * + * * gcc -S -DKERNEL -Wall -Wstrict-prototypes -O6 -fomit-frame-pointer serial.c * * and look at the resulting assemble code in serial.s. @@ -444,7 +440,7 @@ static _INLINE_ void receive_chars(ser_i } */ status &= info->read_status_mask; - + if (status & (BD_SC_BR)) { #ifdef SERIAL_DEBUG_INTR printk("handling break...."); @@ -483,7 +479,7 @@ static _INLINE_ void receive_chars(ser_i break_pressed = 0; } #endif - + if (tty->flip.count >= TTY_FLIPBUF_SIZE) break; @@ -544,7 +540,7 @@ static _INLINE_ void receive_break(ser_i static _INLINE_ void transmit_chars(ser_info_t *info, struct pt_regs *regs) { - + if (info->flags & TX_WAKEUP) { rs_sched_event(info, RS_EVENT_WRITE_WAKEUP); } @@ -561,7 +557,7 @@ static _INLINE_ void check_modem_status( { int status; struct async_icount *icount; - + status = serial_in(info, UART_MSR); if (status & UART_MSR_ANY_DELTA) { @@ -588,7 +584,7 @@ static _INLINE_ void check_modem_status( #if (defined(SERIAL_DEBUG_OPEN) || defined(SERIAL_DEBUG_INTR)) printk("ttys%d CD now %s...", info->line, (status & UART_MSR_DCD) ? "on" : "off"); -#endif +#endif if (status & UART_MSR_DCD) wake_up_interruptible(&info->open_wait); else { @@ -636,7 +632,7 @@ static irqreturn_t rs_8xx_interrupt(int ser_info_t *info; volatile smc_t *smcp; volatile scc_t *sccp; - + info = (ser_info_t *)dev_id; if ((idx = info->state->smc_scc_num) < SCC_NUM_BASE) { @@ -661,7 +657,7 @@ static irqreturn_t rs_8xx_interrupt(int transmit_chars(info, regs); sccp->scc_scce = events; } - + #ifdef SERIAL_DEBUG_INTR printk("rs_interrupt_single(%d, %x)...", info->state->smc_scc_num, events); @@ -696,7 +692,7 @@ static void do_softint(void *private_) { ser_info_t *info = (ser_info_t *) private_; struct tty_struct *tty; - + tty = info->tty; if (!tty) return; @@ -716,13 +712,13 @@ static void do_softint(void *private_) * * serial interrupt routine -> (scheduler tqueue) -> * do_serial_hangup() -> tty->hangup() -> rs_hangup() - * + * */ static void do_serial_hangup(void *private_) { struct async_struct *info = (struct async_struct *) private_; struct tty_struct *tty; - + tty = info->tty; if (tty) tty_hangup(tty); @@ -771,7 +767,7 @@ static int startup(ser_info_t *info) if (info->tty->termios->c_cflag & CBAUD) info->MCR = UART_MCR_DTR | UART_MCR_RTS; #endif - + if (info->tty) clear_bit(TTY_IO_ERROR, &info->tty->flags); @@ -779,7 +775,7 @@ static int startup(ser_info_t *info) * and set the speed of the serial port */ change_speed(info); - + if ((idx = info->state->smc_scc_num) < SCC_NUM_BASE) { smcp = &immr->im_smc[idx]; @@ -824,7 +820,7 @@ static int startup(ser_info_t *info) info->flags |= ASYNC_INITIALIZED; restore_flags(flags); return 0; - + errout: restore_flags(flags); return retval; @@ -851,7 +847,7 @@ static void shutdown(ser_info_t * info) printk("Shutting down serial port %d (irq %d)....", info->line, state->irq); #endif - + save_flags(flags); cli(); /* Disable interrupts */ if ((idx = info->state->smc_scc_num) < SCC_NUM_BASE) { @@ -876,7 +872,7 @@ static void shutdown(ser_info_t * info) sccp->scc_gsmrl &= ~(SCC_GSMRL_ENR | SCC_GSMRL_ENT); #endif } - + if (info->tty) set_bit(TTY_IO_ERROR, &info->tty->flags); @@ -974,7 +970,7 @@ static void change_speed(ser_info_t *inf info->read_status_mask |= BD_SC_FR | BD_SC_PR; if (I_BRKINT(info->tty) || I_PARMRK(info->tty)) info->read_status_mask |= BD_SC_BR; - + /* * Characters to ignore */ @@ -984,7 +980,7 @@ static void change_speed(ser_info_t *inf if (I_IGNBRK(info->tty)) { info->ignore_status_mask |= BD_SC_BR; /* - * If we're ignore parity and break indicators, ignore + * If we're ignore parity and break indicators, ignore * overruns too. (For real raw support). */ if (I_IGNPAR(info->tty)) @@ -1062,7 +1058,7 @@ static int rs_8xx_write(struct tty_struc if (serial_paranoia_check(info, tty->name, "rs_write")) return 0; - if (!tty) + if (!tty) return 0; bdp = info->tx_cur; @@ -1130,7 +1126,7 @@ static int rs_8xx_write_room(struct tty_ static int rs_8xx_chars_in_buffer(struct tty_struct *tty) { ser_info_t *info = (ser_info_t *)tty->driver_data; - + if (serial_paranoia_check(info, tty->name, "rs_chars_in_buffer")) return 0; return 0; @@ -1139,7 +1135,7 @@ static int rs_8xx_chars_in_buffer(struct static void rs_8xx_flush_buffer(struct tty_struct *tty) { ser_info_t *info = (ser_info_t *)tty->driver_data; - + if (serial_paranoia_check(info, tty->name, "rs_flush_buffer")) return; @@ -1186,7 +1182,7 @@ static void rs_8xx_send_xchar(struct tty /* * ------------------------------------------------------------ * rs_throttle() - * + * * This routine is called by the upper-layer tty layer to signal that * incoming characters should be throttled. * ------------------------------------------------------------ @@ -1196,14 +1192,14 @@ static void rs_8xx_throttle(struct tty_s ser_info_t *info = (ser_info_t *)tty->driver_data; #ifdef SERIAL_DEBUG_THROTTLE char buf[64]; - + printk("throttle %s: %d....\n", _tty_name(tty, buf), tty->ldisc.chars_in_buffer(tty)); #endif if (serial_paranoia_check(info, tty->name, "rs_throttle")) return; - + if (I_IXOFF(tty)) rs_8xx_send_xchar(tty, STOP_CHAR(tty)); @@ -1222,14 +1218,14 @@ static void rs_8xx_unthrottle(struct tty ser_info_t *info = (ser_info_t *)tty->driver_data; #ifdef SERIAL_DEBUG_THROTTLE char buf[64]; - + printk("unthrottle %s: %d....\n", _tty_name(tty, buf), tty->ldisc.chars_in_buffer(tty)); #endif if (serial_paranoia_check(info, tty->name, "rs_unthrottle")) return; - + if (I_IXOFF(tty)) { if (info->x_char) info->x_char = 0; @@ -1260,7 +1256,7 @@ static void rs_8xx_unthrottle(struct tty * release the bus after transmitting. This must be done when * the transmit shift register is empty, not be done when the * transmit holding register is empty. This functionality - * allows an RS485 driver to be written in user space. + * allows an RS485 driver to be written in user space. */ static int get_lsr_info(struct async_struct * info, unsigned int *value) { @@ -1310,7 +1306,7 @@ static int set_modem_info(ser_info_t *in return error; #ifdef modem_control switch (cmd) { - case TIOCMBIS: + case TIOCMBIS: if (arg & TIOCM_RTS) info->MCR |= UART_MCR_RTS; if (arg & TIOCM_DTR) @@ -1485,7 +1481,7 @@ static int rs_8xx_ioctl(struct tty_struc if (tty->flags & (1 << TTY_IO_ERROR)) return -EIO; } - + switch (cmd) { case TCSBRK: /* SVID version: non-zero arg --> no break */ retval = tty_check_change(tty); @@ -1564,7 +1560,7 @@ static int rs_8xx_ioctl(struct tty_struc cli(); cnow = info->state->icount; /* atomic copy */ sti(); - if (cnow.rng == cprev.rng && cnow.dsr == cprev.dsr && + if (cnow.rng == cprev.rng && cnow.dsr == cprev.dsr && cnow.dcd == cprev.dcd && cnow.cts == cprev.cts) return -EIO; /* no change => error */ if ( ((arg & TIOCM_RNG) && (cnow.rng != cprev.rng)) || @@ -1580,7 +1576,7 @@ static int rs_8xx_ioctl(struct tty_struc return 0; #endif - /* + /* * Get counter of input serial line interrupts (DCD,RI,DSR,CTS) * Return: write counters to the user passed counter struct * NB: both 1->0 and 0->1 transitions are counted except for @@ -1614,7 +1610,7 @@ static void rs_8xx_set_termios(struct tt ser_info_t *info = (ser_info_t *)tty->driver_data; if ( (tty->termios->c_cflag == old_termios->c_cflag) - && ( RELEVANT_IFLAG(tty->termios->c_iflag) + && ( RELEVANT_IFLAG(tty->termios->c_iflag) == RELEVANT_IFLAG(old_termios->c_iflag))) return; @@ -1629,7 +1625,7 @@ static void rs_8xx_set_termios(struct tt serial_out(info, UART_MCR, info->MCR); sti(); } - + /* Handle transition away from B0 status */ if (!(old_termios->c_cflag & CBAUD) && (tty->termios->c_cflag & CBAUD)) { @@ -1642,7 +1638,7 @@ static void rs_8xx_set_termios(struct tt serial_out(info, UART_MCR, info->MCR); sti(); } - + /* Handle turning off CRTSCTS */ if ((old_termios->c_cflag & CRTSCTS) && !(tty->termios->c_cflag & CRTSCTS)) { @@ -1667,7 +1663,7 @@ static void rs_8xx_set_termios(struct tt /* * ------------------------------------------------------------ * rs_close() - * + * * This routine is called when the serial port gets closed. First, we * wait for the last remaining data to be sent. Then, we unlink its * async structure from the interrupt chain if necessary, and we free @@ -1687,16 +1683,16 @@ static void rs_8xx_close(struct tty_stru return; state = info->state; - + save_flags(flags); cli(); - + if (tty_hung_up_p(filp)) { DBG_CNT("before DEC-hung"); MOD_DEC_USE_COUNT; restore_flags(flags); return; } - + #ifdef SERIAL_DEBUG_OPEN printk("rs_close ttys%d, count = %d\n", info->line, state->count); #endif @@ -1725,7 +1721,7 @@ static void rs_8xx_close(struct tty_stru } info->flags |= ASYNC_CLOSING; /* - * Now we wait for the transmit buffer to clear; and we notify + * Now we wait for the transmit buffer to clear; and we notify * the line discipline to only process XON/XOFF characters. */ tty->closing = 1; @@ -1786,7 +1782,7 @@ static void rs_8xx_wait_until_sent(struc unsigned long orig_jiffies, char_time; /*int lsr;*/ volatile cbd_t *bdp; - + if (serial_paranoia_check(info, tty->name, "rs_wait_until_sent")) return; @@ -1800,7 +1796,7 @@ static void rs_8xx_wait_until_sent(struc * Set the check interval to be 1/5 of the estimated time to * send a single character, and make it at least 1. The check * interval should also be less than the timeout. - * + * * Note: we have to use pretty tight timings here to satisfy * the NIST-PCTS. */ @@ -1843,12 +1839,12 @@ static void rs_8xx_hangup(struct tty_str { ser_info_t *info = (ser_info_t *)tty->driver_data; struct serial_state *state = info->state; - + if (serial_paranoia_check(info, tty->name, "rs_hangup")) return; state = info->state; - + rs_8xx_flush_buffer(tty); shutdown(info); info->event = 0; @@ -1922,7 +1918,7 @@ static int block_til_ready(struct tty_st state->line, state->count); #endif cli(); - if (!tty_hung_up_p(filp)) + if (!tty_hung_up_p(filp)) state->count--; sti(); info->blocked_open++; @@ -1940,7 +1936,7 @@ static int block_til_ready(struct tty_st if (info->flags & ASYNC_HUP_NOTIFY) retval = -EAGAIN; else - retval = -ERESTARTSYS; + retval = -ERESTARTSYS; #else retval = -EAGAIN; #endif @@ -2079,7 +2075,7 @@ static inline int line_info(char *buf, s status = serial_in(info, UART_MSR); control = info ? info->MCR : serial_in(info, UART_MCR); sti(); - + stat_buf[0] = 0; stat_buf[1] = 0; if (control & UART_MCR_RTS) @@ -2105,12 +2101,12 @@ static inline int line_info(char *buf, s if (state->icount.frame) ret += sprintf(buf+ret, " fe:%d", state->icount.frame); - + if (state->icount.parity) ret += sprintf(buf+ret, " pe:%d", state->icount.parity); - + if (state->icount.brk) - ret += sprintf(buf+ret, " brk:%d", state->icount.brk); + ret += sprintf(buf+ret, " brk:%d", state->icount.brk); if (state->icount.overrun) ret += sprintf(buf+ret, " oe:%d", state->icount.overrun); @@ -2239,7 +2235,7 @@ static void my_console_write(int idx, co else cp = __va(bdp->cbd_bufaddr); *cp = *s; - + bdp->cbd_datlen = 1; bdp->cbd_sc |= BD_SC_READY; @@ -2279,7 +2275,7 @@ static void serial_console_write(struct unsigned count) { #if defined(CONFIG_KGDB_CONSOLE) && !defined(CONFIG_USE_SERIAL2_KGDB) - /* Try to let stub handle output. Returns true if it did. */ + /* Try to let stub handle output. Returns true if it did. */ if (kgdb_output_string(s, count)) return; #endif @@ -2507,7 +2503,7 @@ static struct tty_operations rs_8xx_ops /* * The serial driver boot-time initialization code! */ -int __init rs_8xx_init(void) +static int __init rs_8xx_init(void) { struct serial_state * state; ser_info_t *info; @@ -2522,7 +2518,7 @@ int __init rs_8xx_init(void) volatile scc_uart_t *sup; volatile immap_t *immap; volatile iop8260_t *io; - + serial_driver = alloc_tty_driver(NR_PORTS); if (!serial_driver) return -ENOMEM; @@ -2530,7 +2526,7 @@ int __init rs_8xx_init(void) show_serial_version(); /* Initialize the tty_driver structure */ - + serial_driver->driver_name = "serial"; serial_driver->devfs_name = "tts/"; serial_driver->name = "ttyS"; @@ -2626,7 +2622,7 @@ int __init rs_8xx_init(void) state->custom_divisor = 0; state->close_delay = 5*HZ/10; state->closing_wait = 30*HZ; - state->icount.cts = state->icount.dsr = + state->icount.cts = state->icount.dsr = state->icount.rng = state->icount.dcd = 0; state->icount.rx = state->icount.tx = 0; state->icount.frame = state->icount.parity = 0; @@ -2832,7 +2828,7 @@ int __init rs_8xx_init(void) * Enable receive and transmit. */ scp->scc_gsmrh = 0; - scp->scc_gsmrl = + scp->scc_gsmrl = (SCC_GSMRL_MODE_UART | SCC_GSMRL_TDCR_16 | SCC_GSMRL_RDCR_16); /* Disable all interrupts and clear all pending @@ -2867,6 +2863,7 @@ int __init rs_8xx_init(void) } return 0; } +module_init(rs_8xx_init); /* This must always be called before the rs_8xx_init() function, otherwise * it blows away the port control information. @@ -3009,7 +3006,7 @@ static int __init serial_console_setup(s * Enable receive and transmit. */ scp->scc_gsmrh = 0; - scp->scc_gsmrl = + scp->scc_gsmrl = (SCC_GSMRL_MODE_UART | SCC_GSMRL_TDCR_16 | SCC_GSMRL_RDCR_16); /* Disable all interrupts and clear all pending diff -prauN linux-2.6.0-test5/arch/ppc/8xx_io/cs4218_tdm.c wli-2.6.0-test5-bk12-25/arch/ppc/8xx_io/cs4218_tdm.c --- linux-2.6.0-test5/arch/ppc/8xx_io/cs4218_tdm.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/8xx_io/cs4218_tdm.c 2003-09-25 19:15:48.000000000 -0700 @@ -597,7 +597,7 @@ static ssize_t cs4218_ctx_law(const u_ch int hSpeed = sound.hard.speed, sSpeed = sound.soft.speed; int utotal, ftotal; int stereo = sound.soft.stereo; - + frameLeft >>= 2; if (stereo) userCount >>= 1; @@ -2087,7 +2087,7 @@ static int sq_open(struct inode *inode, read_sq_setup(numReadBufs,readbufSize<<10, sound_read_buffers); read_sq.open_mode = file->f_mode; - } + } /* Start up the 4218 by: * Reset. diff -prauN linux-2.6.0-test5/arch/ppc/8xx_io/enet.c wli-2.6.0-test5-bk12-25/arch/ppc/8xx_io/enet.c --- linux-2.6.0-test5/arch/ppc/8xx_io/enet.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/8xx_io/enet.c 2003-09-25 19:15:48.000000000 -0700 @@ -234,7 +234,7 @@ scc_enet_start_xmit(struct sk_buff *skb, cep->stats.tx_bytes += skb->len; cep->skb_cur = (cep->skb_cur+1) & TX_RING_MOD_MASK; - + /* Push the data cache so the CPM does not get stale memory * data. */ @@ -458,7 +458,7 @@ scc_enet_rx(struct net_device *dev) for (;;) { if (bdp->cbd_sc & BD_ENET_RX_EMPTY) break; - + #ifndef final_version /* Since we have allocated space to hold a complete frame, both * the first and last indicators should be set. @@ -578,7 +578,7 @@ static void set_multicast_list(struct ne ep = (scc_enet_t *)dev->base_addr; if (dev->flags&IFF_PROMISC) { - + /* Log any net taps. */ printk("%s: Promiscuous mode enabled.\n", dev->name); cep->sccp->scc_pmsr |= SCC_PMSR_PRO; @@ -606,7 +606,7 @@ static void set_multicast_list(struct ne dmi = dev->mc_list; for (i=0; imc_count; i++) { - + /* Only support group multicast for now. */ if (!(dmi->dmi_addr[0] & 1)) diff -prauN linux-2.6.0-test5/arch/ppc/8xx_io/uart.c wli-2.6.0-test5-bk12-25/arch/ppc/8xx_io/uart.c --- linux-2.6.0-test5/arch/ppc/8xx_io/uart.c 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/8xx_io/uart.c 2003-09-25 19:15:48.000000000 -0700 @@ -12,10 +12,6 @@ * It still needs lots of work........When it was easy, I included code * to support the SCCs, but this has never been tested, nor is it complete. * Only the SCCs support modem control, so that is not complete either. - * - * This module exports the following rs232 io functions: - * - * int rs_8xx_init(void); */ #include @@ -111,7 +107,7 @@ static unsigned long break_pressed; /* b #undef SERIAL_DEBUG_RS_WAIT_UNTIL_SENT #define _INLINE_ inline - + #define DBG_CNT(s) /* We overload some of the items in the data structure to meet our @@ -274,7 +270,7 @@ static void rs_8xx_stop(struct tty_struc if (serial_paranoia_check(info, tty->name, "rs_stop")) return; - + save_flags(flags); cli(); idx = PORT_NUM(info->state->smc_scc_num); if (info->state->smc_scc_num & NUM_IS_SCC) { @@ -298,7 +294,7 @@ static void rs_8xx_start(struct tty_stru if (serial_paranoia_check(info, tty->name, "rs_stop")) return; - + idx = PORT_NUM(info->state->smc_scc_num); save_flags(flags); cli(); if (info->state->smc_scc_num & NUM_IS_SCC) { @@ -324,7 +320,7 @@ static void rs_8xx_start(struct tty_stru * rs_interrupt() should try to keep the interrupt handler as fast as * possible. After you are done making modifications, it is not a bad * idea to do: - * + * * gcc -S -DKERNEL -Wall -Wstrict-prototypes -O6 -fomit-frame-pointer serial.c * * and look at the resulting assemble code in serial.s. @@ -469,7 +465,7 @@ static _INLINE_ void receive_chars(ser_i } #if defined(CONFIG_SERIAL_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ) if (break_pressed && info->line == sercons.index) { - if (ch != 0 && time_before(jiffies, + if (ch != 0 && time_before(jiffies, break_pressed + HZ*5)) { handle_sysrq(ch, regs, NULL); break_pressed = 0; @@ -487,7 +483,7 @@ static _INLINE_ void receive_chars(ser_i } #if defined(CONFIG_SERIAL_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ) - ignore_char: + ignore_char: #endif /* This BD is ready to be used again. Clear status. * Get next BD. @@ -535,7 +531,7 @@ static _INLINE_ void receive_break(ser_i static _INLINE_ void transmit_chars(ser_info_t *info, struct pt_regs *regs) { - + if ((info->flags & TX_WAKEUP) || (info->tty->flags & (1 << TTY_DO_WRITE_WAKEUP))) { rs_sched_event(info, RS_EVENT_WRITE_WAKEUP); @@ -553,7 +549,7 @@ static _INLINE_ void check_modem_status( { int status; struct async_icount *icount; - + status = serial_in(info, UART_MSR); if (status & UART_MSR_ANY_DELTA) { @@ -580,7 +576,7 @@ static _INLINE_ void check_modem_status( #if (defined(SERIAL_DEBUG_OPEN) || defined(SERIAL_DEBUG_INTR)) printk("ttys%d CD now %s...", info->line, (status & UART_MSR_DCD) ? "on" : "off"); -#endif +#endif if (status & UART_MSR_DCD) wake_up_interruptible(&info->open_wait); else { @@ -628,7 +624,7 @@ static void rs_8xx_interrupt(void *dev_i ser_info_t *info; volatile smc_t *smcp; volatile scc_t *sccp; - + info = (ser_info_t *)dev_id; idx = PORT_NUM(info->state->smc_scc_num); @@ -654,7 +650,7 @@ static void rs_8xx_interrupt(void *dev_i transmit_chars(info, regs); smcp->smc_smce = events; } - + #ifdef SERIAL_DEBUG_INTR printk("rs_interrupt_single(%d, %x)...", info->state->smc_scc_num, events); @@ -693,7 +689,7 @@ static void do_softint(void *private_) { ser_info_t *info = (ser_info_t *) private_; struct tty_struct *tty; - + tty = info->tty; if (!tty) return; @@ -713,13 +709,13 @@ static void do_softint(void *private_) * * serial interrupt routine -> (scheduler tqueue) -> * do_serial_hangup() -> tty->hangup() -> rs_hangup() - * + * */ static void do_serial_hangup(void *private_) { struct async_struct *info = (struct async_struct *) private_; struct tty_struct *tty; - + tty = info->tty; if (tty) tty_hangup(tty); @@ -768,7 +764,7 @@ static int startup(ser_info_t *info) if (info->tty->termios->c_cflag & CBAUD) info->MCR = UART_MCR_DTR | UART_MCR_RTS; #endif - + if (info->tty) clear_bit(TTY_IO_ERROR, &info->tty->flags); @@ -776,7 +772,7 @@ static int startup(ser_info_t *info) * and set the speed of the serial port */ change_speed(info); - + idx = PORT_NUM(info->state->smc_scc_num); if (info->state->smc_scc_num & NUM_IS_SCC) { sccp = &cpmp->cp_scc[idx]; @@ -811,7 +807,7 @@ static int startup(ser_info_t *info) info->flags |= ASYNC_INITIALIZED; restore_flags(flags); return 0; - + errout: restore_flags(flags); return retval; @@ -838,7 +834,7 @@ static void shutdown(ser_info_t * info) printk("Shutting down serial port %d (irq %d)....", info->line, state->irq); #endif - + save_flags(flags); cli(); /* Disable interrupts */ idx = PORT_NUM(state->smc_scc_num); @@ -867,7 +863,7 @@ static void shutdown(ser_info_t * info) #endif smcp->smc_smcmr &= ~(SMCMR_REN | SMCMR_TEN); } - + if (info->tty) set_bit(TTY_IO_ERROR, &info->tty->flags); @@ -968,7 +964,7 @@ static void change_speed(ser_info_t *inf info->read_status_mask |= BD_SC_FR | BD_SC_PR; if (I_BRKINT(info->tty) || I_PARMRK(info->tty)) info->read_status_mask |= BD_SC_BR; - + /* * Characters to ignore */ @@ -978,7 +974,7 @@ static void change_speed(ser_info_t *inf if (I_IGNBRK(info->tty)) { info->ignore_status_mask |= BD_SC_BR; /* - * If we're ignore parity and break indicators, ignore + * If we're ignore parity and break indicators, ignore * overruns too. (For real raw support). */ if (I_IGNPAR(info->tty)) @@ -1001,7 +997,7 @@ static void change_speed(ser_info_t *inf sccp = &cpmp->cp_scc[idx]; new_mode = (sbits << 12) | scval; prev_mode = sccp->scc_pmsr; - if (!(prev_mode & SCU_PMSR_PEN)) + if (!(prev_mode & SCU_PMSR_PEN)) /* If parity is disabled, mask out even/odd */ prev_mode &= ~(SCU_PMSR_TPM|SCU_PMSR_RPM); if (prev_mode != new_mode) @@ -1069,7 +1065,7 @@ static int rs_8xx_write(struct tty_struc unsigned char *cp; #ifdef CONFIG_KGDB_CONSOLE - /* Try to let stub handle output. Returns true if it did. */ + /* Try to let stub handle output. Returns true if it did. */ if (kgdb_output_string(buf, count)) return ret; #endif @@ -1077,7 +1073,7 @@ static int rs_8xx_write(struct tty_struc if (serial_paranoia_check(info, tty->name, "rs_write")) return 0; - if (!tty) + if (!tty) return 0; bdp = info->tx_cur; @@ -1146,7 +1142,7 @@ static int rs_8xx_write_room(struct tty_ static int rs_8xx_chars_in_buffer(struct tty_struct *tty) { ser_info_t *info = (ser_info_t *)tty->driver_data; - + if (serial_paranoia_check(info, tty->name, "rs_chars_in_buffer")) return 0; return 0; @@ -1155,7 +1151,7 @@ static int rs_8xx_chars_in_buffer(struct static void rs_8xx_flush_buffer(struct tty_struct *tty) { ser_info_t *info = (ser_info_t *)tty->driver_data; - + if (serial_paranoia_check(info, tty->name, "rs_flush_buffer")) return; @@ -1204,7 +1200,7 @@ static void rs_8xx_send_xchar(struct tty /* * ------------------------------------------------------------ * rs_throttle() - * + * * This routine is called by the upper-layer tty layer to signal that * incoming characters should be throttled. * ------------------------------------------------------------ @@ -1214,14 +1210,14 @@ static void rs_8xx_throttle(struct tty_s ser_info_t *info = (ser_info_t *)tty->driver_data; #ifdef SERIAL_DEBUG_THROTTLE char buf[64]; - + printk("throttle %s: %d....\n", _tty_name(tty, buf), tty->ldisc.chars_in_buffer(tty)); #endif if (serial_paranoia_check(info, tty->name, "rs_throttle")) return; - + if (I_IXOFF(tty)) rs_8xx_send_xchar(tty, STOP_CHAR(tty)); @@ -1240,14 +1236,14 @@ static void rs_8xx_unthrottle(struct tty ser_info_t *info = (ser_info_t *)tty->driver_data; #ifdef SERIAL_DEBUG_THROTTLE char buf[64]; - + printk("unthrottle %s: %d....\n", _tty_name(tty, buf), tty->ldisc.chars_in_buffer(tty)); #endif if (serial_paranoia_check(info, tty->name, "rs_unthrottle")) return; - + if (I_IXOFF(tty)) { if (info->x_char) info->x_char = 0; @@ -1278,7 +1274,7 @@ static void rs_8xx_unthrottle(struct tty * release the bus after transmitting. This must be done when * the transmit shift register is empty, not be done when the * transmit holding register is empty. This functionality - * allows an RS485 driver to be written in user space. + * allows an RS485 driver to be written in user space. */ static int get_lsr_info(struct async_struct * info, unsigned int *value) { @@ -1328,7 +1324,7 @@ static int set_modem_info(ser_info_t *in return error; #ifdef modem_control switch (cmd) { - case TIOCMBIS: + case TIOCMBIS: if (arg & TIOCM_RTS) info->MCR |= UART_MCR_RTS; if (arg & TIOCM_DTR) @@ -1461,7 +1457,7 @@ static int rs_8xx_ioctl(struct tty_struc if (tty->flags & (1 << TTY_IO_ERROR)) return -EIO; } - + switch (cmd) { case TCSBRK: /* SVID version: non-zero arg --> no break */ retval = tty_check_change(tty); @@ -1540,7 +1536,7 @@ static int rs_8xx_ioctl(struct tty_struc cli(); cnow = info->state->icount; /* atomic copy */ sti(); - if (cnow.rng == cprev.rng && cnow.dsr == cprev.dsr && + if (cnow.rng == cprev.rng && cnow.dsr == cprev.dsr && cnow.dcd == cprev.dcd && cnow.cts == cprev.cts) return -EIO; /* no change => error */ if ( ((arg & TIOCM_RNG) && (cnow.rng != cprev.rng)) || @@ -1556,7 +1552,7 @@ static int rs_8xx_ioctl(struct tty_struc return 0; #endif - /* + /* * Get counter of input serial line interrupts (DCD,RI,DSR,CTS) * Return: write counters to the user passed counter struct * NB: both 1->0 and 0->1 transitions are counted except for @@ -1590,7 +1586,7 @@ static void rs_8xx_set_termios(struct tt ser_info_t *info = (ser_info_t *)tty->driver_data; if ( (tty->termios->c_cflag == old_termios->c_cflag) - && ( RELEVANT_IFLAG(tty->termios->c_iflag) + && ( RELEVANT_IFLAG(tty->termios->c_iflag) == RELEVANT_IFLAG(old_termios->c_iflag))) return; @@ -1605,7 +1601,7 @@ static void rs_8xx_set_termios(struct tt serial_out(info, UART_MCR, info->MCR); sti(); } - + /* Handle transition away from B0 status */ if (!(old_termios->c_cflag & CBAUD) && (tty->termios->c_cflag & CBAUD)) { @@ -1618,7 +1614,7 @@ static void rs_8xx_set_termios(struct tt serial_out(info, UART_MCR, info->MCR); sti(); } - + /* Handle turning off CRTSCTS */ if ((old_termios->c_cflag & CRTSCTS) && !(tty->termios->c_cflag & CRTSCTS)) { @@ -1643,7 +1639,7 @@ static void rs_8xx_set_termios(struct tt /* * ------------------------------------------------------------ * rs_close() - * + * * This routine is called when the serial port gets closed. First, we * wait for the last remaining data to be sent. Then, we unlink its * async structure from the interrupt chain if necessary, and we free @@ -1663,16 +1659,16 @@ static void rs_8xx_close(struct tty_stru return; state = info->state; - + save_flags(flags); cli(); - + if (tty_hung_up_p(filp)) { DBG_CNT("before DEC-hung"); MOD_DEC_USE_COUNT; restore_flags(flags); return; } - + #ifdef SERIAL_DEBUG_OPEN printk("rs_close ttys%d, count = %d\n", info->line, state->count); #endif @@ -1701,7 +1697,7 @@ static void rs_8xx_close(struct tty_stru } info->flags |= ASYNC_CLOSING; /* - * Now we wait for the transmit buffer to clear; and we notify + * Now we wait for the transmit buffer to clear; and we notify * the line discipline to only process XON/XOFF characters. */ tty->closing = 1; @@ -1763,7 +1759,7 @@ static void rs_8xx_wait_until_sent(struc unsigned long orig_jiffies, char_time; /*int lsr;*/ volatile cbd_t *bdp; - + if (serial_paranoia_check(info, tty->name, "rs_wait_until_sent")) return; @@ -1777,7 +1773,7 @@ static void rs_8xx_wait_until_sent(struc * Set the check interval to be 1/5 of the estimated time to * send a single character, and make it at least 1. The check * interval should also be less than the timeout. - * + * * Note: we have to use pretty tight timings here to satisfy * the NIST-PCTS. */ @@ -1831,12 +1827,12 @@ static void rs_8xx_hangup(struct tty_str { ser_info_t *info = (ser_info_t *)tty->driver_data; struct serial_state *state = info->state; - + if (serial_paranoia_check(info, tty->name, "rs_hangup")) return; state = info->state; - + rs_8xx_flush_buffer(tty); shutdown(info); info->event = 0; @@ -1910,7 +1906,7 @@ static int block_til_ready(struct tty_st state->line, state->count); #endif cli(); - if (!tty_hung_up_p(filp)) + if (!tty_hung_up_p(filp)) state->count--; sti(); info->blocked_open++; @@ -1928,7 +1924,7 @@ static int block_til_ready(struct tty_st if (info->flags & ASYNC_HUP_NOTIFY) retval = -EAGAIN; else - retval = -ERESTARTSYS; + retval = -ERESTARTSYS; #else retval = -EAGAIN; #endif @@ -2068,7 +2064,7 @@ static inline int line_info(char *buf, s status = serial_in(info, UART_MSR); control = info ? info->MCR : serial_in(info, UART_MCR); sti(); - + stat_buf[0] = 0; stat_buf[1] = 0; if (control & UART_MCR_RTS) @@ -2094,12 +2090,12 @@ static inline int line_info(char *buf, s if (state->icount.frame) ret += sprintf(buf+ret, " fe:%d", state->icount.frame); - + if (state->icount.parity) ret += sprintf(buf+ret, " pe:%d", state->icount.parity); - + if (state->icount.brk) - ret += sprintf(buf+ret, " brk:%d", state->icount.brk); + ret += sprintf(buf+ret, " brk:%d", state->icount.brk); if (state->icount.overrun) ret += sprintf(buf+ret, " oe:%d", state->icount.overrun); @@ -2201,7 +2197,7 @@ static void my_console_write(int idx, co /* Get the address of the host memory buffer. */ bdp = bdbase = (cbd_t *)&cpmp->cp_dpmem[up->smc_tbase]; - + info = &consinfo; } @@ -2232,7 +2228,7 @@ static void my_console_write(int idx, co else cp = info->tx_va_base + ((bdp - info->tx_bd_base) * TX_BUF_SIZE); *cp = *s; - + bdp->cbd_datlen = 1; bdp->cbd_sc |= BD_SC_READY; @@ -2272,7 +2268,7 @@ static void serial_console_write(struct unsigned count) { #ifdef CONFIG_KGDB_CONSOLE - /* Try to let stub handle output. Returns true if it did. */ + /* Try to let stub handle output. Returns true if it did. */ if (kgdb_output_string(s, count)) return; #endif @@ -2499,7 +2495,7 @@ static struct tty_operations rs_8xx_ops /* * The serial driver boot-time initialization code! */ -int __init rs_8xx_init(void) +static int __init rs_8xx_init(void) { struct serial_state * state; ser_info_t *info; @@ -2517,13 +2513,13 @@ int __init rs_8xx_init(void) serial_driver = alloc_tty_driver(NR_PORTS); if (!serial_driver) return -ENOMEM; - + init_bh(SERIAL_BH, do_serial_bh); show_serial_version(); /* Initialize the tty_driver structure */ - + serial_driver->driver_name = "serial"; serial_driver->devfs_name = "tts/"; serial_driver->name = "ttyS"; @@ -2536,10 +2532,10 @@ int __init rs_8xx_init(void) baud_idx | CS8 | CREAD | HUPCL | CLOCAL; serial_driver->flags = TTY_DRIVER_REAL_RAW; tty_set_operations(serial_driver, &rs_8xx_ops); - + if (tty_register_driver(serial_driver)) panic("Couldn't register serial driver\n"); - + cp = cpmp; /* Get pointer to Communication Processor */ immap = (immap_t *)IMAP_ADDR; /* and to internal registers */ @@ -2598,7 +2594,7 @@ int __init rs_8xx_init(void) state->custom_divisor = 0; state->close_delay = 5*HZ/10; state->closing_wait = 30*HZ; - state->icount.cts = state->icount.dsr = + state->icount.cts = state->icount.dsr = state->icount.rng = state->icount.dcd = 0; state->icount.rx = state->icount.tx = 0; state->icount.frame = state->icount.parity = 0; @@ -2737,7 +2733,7 @@ int __init rs_8xx_init(void) * Enable receive and transmit. */ scp->scc_gsmrh = 0; - scp->scc_gsmrl = + scp->scc_gsmrl = (SCC_GSMRL_MODE_UART | SCC_GSMRL_TDCR_16 | SCC_GSMRL_RDCR_16); /* Disable all interrupts and clear all pending @@ -2846,6 +2842,7 @@ int __init rs_8xx_init(void) return 0; } +module_init(rs_8xx_init); /* This must always be called before the rs_8xx_init() function, otherwise * it blows away the port control information. @@ -2972,7 +2969,7 @@ static int __init serial_console_setup(s * Enable receive and transmit. */ scp->scc_gsmrh = 0; - scp->scc_gsmrl = + scp->scc_gsmrl = (SCC_GSMRL_MODE_UART | SCC_GSMRL_TDCR_16 | SCC_GSMRL_RDCR_16); /* Disable all interrupts and clear all pending diff -prauN linux-2.6.0-test5/arch/ppc/Kconfig wli-2.6.0-test5-bk12-25/arch/ppc/Kconfig --- linux-2.6.0-test5/arch/ppc/Kconfig 2003-09-08 12:50:40.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/Kconfig 2003-09-25 19:15:48.000000000 -0700 @@ -2,6 +2,8 @@ # see Documentation/kbuild/kconfig-language.txt. # +mainmenu "Linux/PowerPC Kernel Configuration" + config MMU bool default y @@ -20,32 +22,19 @@ config HAVE_DEC_LOCK bool default y - -mainmenu "Linux/PowerPC Kernel Configuration" - -source "init/Kconfig" - -menu "Platform support" - config PPC bool default y - ---help--- - The PowerPC is a modern RISC architecture descended from the POWER - architecture designed by IBM. The PowerPC architecture is designed - to allow high-speed implementations which can execute several - instructions in each clock cycle. IBM and Motorola design and - manufacture PowerPC processors aimed at embedded, desktop and server - applications. PowerPC chips are used in Apple Power Macintoshes - (including iMacs, iBooks and PowerBooks), in IBM pSeries (RS/6000) - and iSeries (AS/400) machines, and in a broad range of embedded - applications. The Linux PowerPC port has a home page at - . config PPC32 bool default y + +source "init/Kconfig" + +menu "Processor" + choice prompt "Processor Type" default 6xx @@ -56,12 +45,13 @@ config 6xx There are four types of PowerPC chips supported. The more common types (601, 603, 604, 740, 750, 7400), the Motorola embedded versions (821, 823, 850, 855, 860, 8260), the IBM embedded versions - (403 and 405) and the high end 64 bit Power processors (POWER 3) + (403 and 405) and the high end 64 bit Power processors (POWER 3, + POWER4, and IBM 970 also known as G5) Unless you are building a kernel for one of the embedded processor - systems, or a 64 bit IBM RS/6000, choose 6xx. Note that the kernel - runs in 32-bit mode even on 64-bit chips. Also note that because - the 82xx family has a 603e core, specific support for that chipset - is asked later on. + systems, 64 bit IBM RS/6000 or an Apple G5, choose 6xx. + Note that the kernel runs in 32-bit mode even on 64-bit chips. + Also note that because the 82xx family has a 603e core, specific + support for that chipset is asked later on. config 40x bool "40x" @@ -72,6 +62,9 @@ config 44x config POWER3 bool "POWER3" +config POWER4 + bool "POWER4 and 970 (G5)" + config 8xx bool "8xx" @@ -82,99 +75,171 @@ config PTE_64BIT depends on 44x default y -source arch/ppc/platforms/4xx/Kconfig +config ALTIVEC + bool "AltiVec Support" + depends on 6xx || POWER4 + depends on !8260 + ---help--- + This option enables kernel support for the Altivec extensions to the + PowerPC processor. The kernel currently supports saving and restoring + altivec registers, and turning on the 'altivec enable' bit so user + processes can execute altivec instructions. -config 8260 - bool "MPC8260 CPM Support" - depends on 6xx + This option is only usefully if you have a processor that supports + altivec (G4, otherwise known as 74xx series), but does not have + any affect on a non-altivec cpu (it does, however add code to the + kernel). + + If in doubt, say Y here. + +config TAU + bool "Thermal Management Support" + depends on 6xx && !8260 help - The MPC8260 CPM (Communications Processor Module) is a typical - embedded CPU made by Motorola. Selecting this option means that - you wish to build a kernel for a machine with specifically an 8260 - for a CPU. + G3 and G4 processors have an on-chip temperature sensor called the + 'Thermal Assist Unit (TAU)', which, in theory, can measure the on-die + temperature within 2-4 degrees Celsius. This option shows the current + on-die temperature in /proc/cpuinfo if the cpu supports it. - If in doubt, say N. + Unfortunately, on some chip revisions, this sensor is very inaccurate + and in some cases, does not work at all, so don't assume the cpu + temp is actually what /proc/cpuinfo says it is. -config GENERIC_ISA_DMA - bool - depends on POWER3 || 6xx && !8260 - default y +config TAU_INT + bool "Interrupt driven TAU driver (DANGEROUS)" + depends on TAU + ---help--- + The TAU supports an interrupt driven mode which causes an interrupt + whenever the temperature goes out of range. This is the fastest way + to get notified the temp has exceeded a range. With this option off, + a timer is used to re-check the temperature periodically. -config PPC64BRIDGE - bool - depends on POWER3 - default y + However, on some cpus it appears that the TAU interrupt hardware + is buggy and can cause a situation which would lead unexplained hard + lockups. -config PPC_STD_MMU - bool - depends on 6xx || POWER3 - default y + Unless you are extending the TAU driver, or enjoy kernel/hardware + debugging, leave this option off. -config SERIAL_CONSOLE +config TAU_AVERAGE + bool "Average high and low temp" + depends on TAU + ---help--- + The TAU hardware can compare the temperature to an upper and lower + bound. The default behavior is to show both the upper and lower + bound in /proc/cpuinfo. If the range is large, the temperature is + either changing a lot, or the TAU hardware is broken (likely on some + G4's). If the range is small (around 4 degrees), the temperature is + relatively stable. If you say Y here, a single temperature value, + halfway between the upper and lower bounds, will be reported in + /proc/cpuinfo. + + If in doubt, say N here. + +config MATH_EMULATION + bool "Math emulation" + depends on 4xx || 8xx + ---help--- + Some PowerPC chips designed for embedded applications do not have + a floating-point unit and therefore do not implement the + floating-point instructions in the PowerPC instruction set. If you + say Y here, the kernel will include code to emulate a floating-point + unit, which will allow programs that use floating-point + instructions to run. + + If you have an Apple machine or an IBM RS/6000 or pSeries machine, + or any machine with a 6xx, 7xx or 7xxx series processor, say N + here. Saying Y here will not hurt performance (on any machine) but + will increase the size of the kernel. + +config CPU_FREQ + bool "CPU Frequency scaling" + help + Clock scaling allows you to change the clock speed of CPUs on the + fly. This is a nice method to save battery power on notebooks, + because the lower the clock speed, the less power the CPU consumes. + + For more information, take a look at linux/Documentation/cpufreq or + at + + If in doubt, say N. + +config CPU_FREQ_TABLE bool - depends on 8xx || 8260 + depends on CPU_FREQ default y -choice - prompt "Machine Type" - depends on 8260 - default WILLOW_1 +config CPU_FREQ_PROC_INTF + bool "/proc/cpufreq interface (DEPRECATED)" + depends on CPU_FREQ && PROC_FS + help + This enables the /proc/cpufreq interface for controlling + CPUFreq. Please note that it is recommended to use the sysfs + interface instead (which is built automatically). + + For details, take a look at linux/Documentation/cpufreq. + + If in doubt, say N. -config EST8260 - bool "EST8260" - ---help--- - EST8260: - The EST8260 is a single-board computer manufactured by Wind River - Systems, Inc. (formerly Embedded Support Tools Corp.) and based on - the MPC8260. Wind River Systems has a website at - , but the EST8260 cannot be found on it - and has probably been discontinued or rebadged. +config CPU_FREQ_24_API + bool "/proc/sys/cpu/ interface (2.4. / OLD)" + depends on CPU_FREQ + help + This enables the /proc/sys/cpu/ sysctl interface for controlling + CPUFreq, as known from the 2.4.-kernel patches for CPUFreq. 2.5 + uses a sysfs interface instead. Please note that some drivers do + not work well with the 2.4. /proc/sys/cpu sysctl interface, + so if in doubt, say N here. - TQM8260: - MPC8260 based module, little larger than credit card, - up to 128 MB global + 64 MB local RAM, 32 MB Flash, - 32 kB EEPROM, 256 kB L@ Cache, 10baseT + 100baseT Ethernet, - 2 x serial ports, ... - Manufacturer: TQ Components, www.tq-group.de - Date of Release: June 2001 - End of Life: not yet :-) - URL: + For details, take a look at linux/Documentation/cpufreq. - PM826: - Modular system with MPC8260 CPU - Manufacturer: MicroSys GmbH, - Date of Release: mid 2001 - End of life: - - URL: + If in doubt, say N. - CU824: - VMEBus Board with PCI extension with MPC8240 CPU - Manufacturer: MicroSys GmbH, http://www.microsys.de/ - Date of Release: early 2001 (?) - End of life: - - URL: +config CPU_FREQ_PMAC + bool "Support for Apple PowerBooks" + depends on CPU_FREQ && ADB_PMU + help + This adds support for frequency switching on Apple PowerBooks, + this currently includes some models of iBook & Titanium + PowerBook. -config SBS8260 - bool "SBS8260" +config PPC601_SYNC_FIX + bool "Workarounds for PPC601 bugs" + depends on 6xx + help + Some versions of the PPC601 (the first PowerPC chip) have bugs which + mean that extra synchronization instructions are required near + certain instructions, typically those that make major changes to the + CPU state. These extra instructions reduce performance slightly. + If you say N here, these extra instructions will not be included, + resulting in a kernel which will run faster but may not run at all + on some systems with the PPC601 chip. -config RPX6 - bool "RPXSUPER" + If in doubt, say Y here. -config TQM8260 - bool "TQM8260" +source arch/ppc/platforms/4xx/Kconfig -config WILLOW_1 - bool "Willow" +config PPC64BRIDGE + bool + depends on POWER3 || POWER4 + default y -endchoice +config PPC_STD_MMU + bool + depends on 6xx || POWER3 || POWER4 + default y config NOT_COHERENT_CACHE bool depends on 4xx || 8xx default y +endmenu + +menu "Platform options" + choice - prompt "Machine Type" + prompt "8xx Machine Type" depends on 8xx default RPXLITE @@ -189,10 +254,10 @@ config RPXLITE Embedded Planet RPX Lite. PC104 form-factor SBC based on the MPC823. RPX-Classic: - Embedded Planet RPX Classic Low-fat. Credit-card-size SBC based on + Embedded Planet RPX Classic Low-fat. Credit-card-size SBC based on the MPC 860 - BSE-IP: + BSE-IP: Bright Star Engineering ip-Engine. TQM823L: @@ -234,7 +299,7 @@ config RPXLITE URL: IVML24: - MPC860 based board used in the "Integrated Voice Mail System", + MPC860 based board used in the "Integrated Voice Mail System", Large Version (24 voice channels) Manufacturer: Speech Design, Date of Release: March 2001 (?) @@ -256,7 +321,7 @@ config RPXLITE End of life: - URL: - IP860: + IP860: VMEBus IP (Industry Pack) carrier board with MPC860 Manufacturer: MicroSys GmbH, Date of Release: ? @@ -397,19 +462,9 @@ config WINCEPT endchoice -config TQM8xxL - bool - depends on 8xx && (TQM823L || TQM850L || FPS850L || TQM855L || TQM860L || SM850) - default y - -config EMBEDDEDBOOT - bool - depends on 8xx || 8260 - default y - choice prompt "Machine Type" - depends on (6xx || POWER3) && !8260 + depends on 6xx || POWER3 || POWER4 default PPC_MULTIPLATFORM ---help--- Linux currently supports several different kinds of PowerPC-based @@ -443,7 +498,7 @@ config APUS More information is available at: . -config WILLOW_2 +config WILLOW bool "Cogent-Willow" config PCORE @@ -498,354 +553,183 @@ config GEMINI series Single Board Computer. More information is available at: . -endchoice - -config PPC_CHRP - bool - depends on PPC_MULTIPLATFORM - default y - -config PPC_GEN550 - bool - depends on SANDPOINT - default y - -config PPC_PMAC - bool - depends on PPC_MULTIPLATFORM - default y - -config PPC_PREP - bool - depends on PPC_MULTIPLATFORM - default y - -config PPC_OF - bool - depends on PPC_PMAC || PPC_CHRP - default y - -config FORCE - bool - depends on 6xx && !8260 && (PCORE || POWERPMC250) - default y - -config EPIC_SERIAL_MODE - bool - depends on 6xx && !8260 && (LOPEC || SANDPOINT) - default y - -config WILLOW - bool - depends on WILLOW_1 || WILLOW_2 - default y - -config MPC10X_STORE_GATHERING - bool "Enable MPC10x store gathering" - depends on FORCE || SANDPOINT - -config GT64260 - bool - depends on EV64260 - default y - -config SERIAL_CONSOLE_BAUD - int - depends on EV64260 - default "115200" - -config CPC710_DATA_GATHERING - bool "Enable CPC710 data gathering" - depends on K2 - -config MVME5100_IPMC761_PRESENT - bool "MVME5100 configured with an IPMC761" - depends on MVME5100 - -config SPRUCE_BAUD_33M - bool "Spruce baud clock support" - depends on SPRUCE - -config SMP - bool "Symmetric multi-processing support" - ---help--- - This enables support for systems with more than one CPU. If you have - a system with only one CPU, say N. If you have a system with more - than one CPU, say Y. Note that the kernel does not currently - support SMP machines with 603/603e/603ev or PPC750 ("G3") processors - since they have inadequate hardware support for multiprocessor - operation. - - If you say N here, the kernel will run on single and multiprocessor - machines, but will use only one CPU of a multiprocessor machine. If - you say Y here, the kernel will run on single-processor machines. - On a single-processor machine, the kernel will run faster if you say - N here. - - If you don't know what to do here, say N. - -config IRQ_ALL_CPUS - bool "Distribute interrupts on all CPUs by default" - depends on SMP - help - This option gives the kernel permission to distribute IRQs across - multiple CPUs. Saying N here will route all IRQs to the first - CPU. Generally saying Y is safe, although some problems have been - reported with SMP Power Macintoshes with this option enabled. - -config NR_CPUS - int "Maximum number of CPUs (2-32)" - depends on SMP - default "32" - -config PREEMPT - bool "Preemptible Kernel" - depends on !SMP - help - This option reduces the latency of the kernel when reacting to - real-time or interactive events by allowing a low priority process to - be preempted even if it is in kernel mode executing a system call. - Unfortunately the kernel code has some race conditions if both - CONFIG_SMP and CONFIG_PREEMPT are enabled, so this option is - currently disabled if you are building an SMP kernel. - - Say Y here if you are building a kernel for a desktop, embedded - or real-time system. Say N if you are unsure. - -config ALTIVEC - bool "AltiVec Support" - depends on 6xx && !8260 - ---help--- - This option enables kernel support for the Altivec extensions to the - PowerPC processor. The kernel currently supports saving and restoring - altivec registers, and turning on the 'altivec enable' bit so user - processes can execute altivec instructions. - - This option is only usefully if you have a processor that supports - altivec (G4, otherwise known as 74xx series), but does not have - any affect on a non-altivec cpu (it does, however add code to the - kernel). - - If in doubt, say Y here. - -config TAU - bool "Thermal Management Support" - depends on 6xx && !8260 - help - G3 and G4 processors have an on-chip temperature sensor called the - 'Thermal Assist Unit (TAU)', which, in theory, can measure the on-die - temperature within 2-4 degrees Celsius. This option shows the current - on-die temperature in /proc/cpuinfo if the cpu supports it. - - Unfortunately, on some chip revisions, this sensor is very inaccurate - and in some cases, does not work at all, so don't assume the cpu - temp is actually what /proc/cpuinfo says it is. - -config TAU_INT - bool "Interrupt driven TAU driver (DANGEROUS)" - depends on TAU +config EST8260 + bool "EST8260" ---help--- - The TAU supports an interrupt driven mode which causes an interrupt - whenever the temperature goes out of range. This is the fastest way - to get notified the temp has exceeded a range. With this option off, - a timer is used to re-check the temperature periodically. - - However, on some cpus it appears that the TAU interrupt hardware - is buggy and can cause a situation which would lead unexplained hard - lockups. - - Unless you are extending the TAU driver, or enjoy kernel/hardware - debugging, leave this option off. + The EST8260 is a single-board computer manufactured by Wind River + Systems, Inc. (formerly Embedded Support Tools Corp.) and based on + the MPC8260. Wind River Systems has a website at + , but the EST8260 cannot be found on it + and has probably been discontinued or rebadged. -config TAU_AVERAGE - bool "Average high and low temp" - depends on TAU - ---help--- - The TAU hardware can compare the temperature to an upper and lower - bound. The default behavior is to show both the upper and lower - bound in /proc/cpuinfo. If the range is large, the temperature is - either changing a lot, or the TAU hardware is broken (likely on some - G4's). If the range is small (around 4 degrees), the temperature is - relatively stable. If you say Y here, a single temperature value, - halfway between the upper and lower bounds, will be reported in - /proc/cpuinfo. +config SBS8260 + bool "SBS8260" - If in doubt, say N here. +config RPX6 + bool "RPXSUPER" -config MATH_EMULATION - bool "Math emulation" - depends on 4xx || 8xx +config TQM8260 + bool "TQM8260" ---help--- - Some PowerPC chips designed for embedded applications do not have - a floating-point unit and therefore do not implement the - floating-point instructions in the PowerPC instruction set. If you - say Y here, the kernel will include code to emulate a floating-point - unit, which will allow programs that use floating-point - instructions to run. - - If you have an Apple machine or an IBM RS/6000 or pSeries machine, - or any machine with a 6xx, 7xx or 7xxx series processor, say N - here. Saying Y here will not hurt performance (on any machine) but - will increase the size of the kernel. - -config CPU_FREQ - bool "CPU Frequency scaling" - help - Clock scaling allows you to change the clock speed of CPUs on the - fly. This is a nice method to save battery power on notebooks, - because the lower the clock speed, the less power the CPU consumes. - - For more information, take a look at linux/Documentation/cpufreq or - at + MPC8260 based module, little larger than credit card, + up to 128 MB global + 64 MB local RAM, 32 MB Flash, + 32 kB EEPROM, 256 kB L@ Cache, 10baseT + 100baseT Ethernet, + 2 x serial ports, ... + Manufacturer: TQ Components, www.tq-group.de + Date of Release: June 2001 + End of Life: not yet :-) + URL: - If in doubt, say N. +endchoice -config CPU_FREQ_TABLE +config TQM8xxL bool - depends on CPU_FREQ + depends on 8xx && (TQM823L || TQM850L || FPS850L || TQM855L || TQM860L || SM850) default y -config CPU_FREQ_PROC_INTF - bool "/proc/cpufreq interface (DEPRECATED)" - depends on CPU_FREQ && PROC_FS - help - This enables the /proc/cpufreq interface for controlling - CPUFreq. Please note that it is recommended to use the sysfs - interface instead (which is built automatically). - - For details, take a look at linux/Documentation/cpufreq. - - If in doubt, say N. - -config CPU_FREQ_24_API - bool "/proc/sys/cpu/ interface (2.4. / OLD)" - depends on CPU_FREQ - help - This enables the /proc/sys/cpu/ sysctl interface for controlling - CPUFreq, as known from the 2.4.-kernel patches for CPUFreq. 2.5 - uses a sysfs interface instead. Please note that some drivers do - not work well with the 2.4. /proc/sys/cpu sysctl interface, - so if in doubt, say N here. - - For details, take a look at linux/Documentation/cpufreq. - - If in doubt, say N. - -config CPU_FREQ_PMAC - bool "Support for Apple PowerBooks" - depends on CPU_FREQ && ADB_PMU - help - This adds support for frequency switching on Apple PowerBooks, - this currently includes some models of iBook & Titanium - PowerBook. +config EMBEDDEDBOOT + bool + depends on 8xx || 8260 + default y -endmenu +config 8260 + bool "MPC8260 CPM Support" if WILLOW + depends on 6xx + default y if TQM8260 || RPXSUPER || EST8260 || SBS8260 + help + The MPC8260 CPM (Communications Processor Module) is a typical + embedded CPU made by Motorola. Selecting this option means that + you wish to build a kernel for a machine with specifically an 8260 + for a CPU. -menu "General setup" +config PPC_CHRP + bool + depends on PPC_MULTIPLATFORM + default y -config HIGHMEM - bool "High memory support" +config PPC_GEN550 + bool + depends on SANDPOINT + default y -config ISA - bool "Support for ISA-bus hardware" - depends on PREP || CHRP - help - Find out whether you have ISA slots on your motherboard. ISA is the - name of a bus system, i.e. the way the CPU talks to the other stuff - inside your box. If you have an Apple machine, say N here; if you - have an IBM RS/6000 or pSeries machine or a PReP machine, say Y. If - you have an embedded board, consult your board documentation. +config PPC_PMAC + bool + depends on PPC_MULTIPLATFORM + default y -config EISA +config PPC_PREP bool - help - The Extended Industry Standard Architecture (EISA) bus is a bus - architecture used on some older intel-based PCs. + depends on PPC_MULTIPLATFORM + default y -config SBUS +config PPC_OF bool + depends on PPC_PMAC || PPC_CHRP + default y -# Yes MCA RS/6000s exist but Linux-PPC does not currently support any -config MCA +config FORCE bool - help - MicroChannel Architecture is found in some older IBM RS/6000 - machines. It is a bus system similar to PCI or ISA. MCA-based - RS/6000 machines are currently not supported by Linux. + depends on 6xx && (PCORE || POWERPMC250) + default y -config PCI - bool "PCI support" if 40x || 8260 - default y if !40x && !8260 && !8xx && !APUS - default PCI_PERMEDIA if !4xx && !8260 && !8xx && APUS - default PCI_QSPAN if !4xx && !8260 && 8xx - help - Find out whether your system includes a PCI bus. PCI is the name of - a bus system, i.e. the way the CPU talks to the other stuff inside - your box. If you say Y here, the kernel will include drivers and - infrastructure code to support PCI bus devices. +config GT64260 + bool + depends on EV64260 + default y -config PCI_DOMAINS +config EPIC_SERIAL_MODE bool - default PCI + depends on 6xx && (LOPEC || SANDPOINT) + default y + +config MPC10X_STORE_GATHERING + bool "Enable MPC10x store gathering" + depends on FORCE || SANDPOINT + +config CPC710_DATA_GATHERING + bool "Enable CPC710 data gathering" + depends on K2 + +config MVME5100_IPMC761_PRESENT + bool "MVME5100 configured with an IPMC761" + depends on MVME5100 + +config SPRUCE_BAUD_33M + bool "Spruce baud clock support" + depends on SPRUCE config PC_KEYBOARD bool "PC PS/2 style Keyboard" depends on 4xx || 8260 -config PCI_QSPAN - bool "QSpan PCI" - depends on !4xx && !8260 && 8xx - help - Say Y here if you have a system based on a Motorola 8xx-series - embedded processor with a QSPAN PCI interface, otherwise say N. - -config PCI_PERMEDIA - bool "PCI for Permedia2" - depends on !4xx && !8xx && APUS - -config KERNEL_ELF +config SERIAL_CONSOLE bool + depends on 8xx || 8260 default y -source "fs/Kconfig.binfmt" +config SERIAL_CONSOLE_BAUD + int + depends on EV64260 + default "115200" -source "drivers/pci/Kconfig" +config PPCBUG_NVRAM + bool "Enable reading PPCBUG NVRAM during boot" if PPLUS || LOPEC + default y if PPC_PREP -config HOTPLUG - bool "Support for hot-pluggable devices" +config SMP + bool "Symmetric multi-processing support" ---help--- - Say Y here if you want to plug devices into your computer while - the system is running, and be able to use them quickly. In many - cases, the devices can likewise be unplugged at any time too. + This enables support for systems with more than one CPU. If you have + a system with only one CPU, say N. If you have a system with more + than one CPU, say Y. Note that the kernel does not currently + support SMP machines with 603/603e/603ev or PPC750 ("G3") processors + since they have inadequate hardware support for multiprocessor + operation. - One well known example of this is PCMCIA- or PC-cards, credit-card - size devices such as network cards, modems or hard drives which are - plugged into slots found on all modern laptop computers. Another - example, used on modern desktops as well as laptops, is USB. + If you say N here, the kernel will run on single and multiprocessor + machines, but will use only one CPU of a multiprocessor machine. If + you say Y here, the kernel will run on single-processor machines. + On a single-processor machine, the kernel will run faster if you say + N here. - Enable HOTPLUG and KMOD, and build a modular kernel. Get agent - software (at ) and install it. - Then your kernel will automatically call out to a user mode "policy - agent" (/sbin/hotplug) to load modules and set up software needed - to use devices as you hotplug them. + If you don't know what to do here, say N. -source "drivers/pcmcia/Kconfig" +config IRQ_ALL_CPUS + bool "Distribute interrupts on all CPUs by default" + depends on SMP + help + This option gives the kernel permission to distribute IRQs across + multiple CPUs. Saying N here will route all IRQs to the first + CPU. Generally saying Y is safe, although some problems have been + reported with SMP Power Macintoshes with this option enabled. -source "drivers/parport/Kconfig" +config NR_CPUS + int "Maximum number of CPUs (2-32)" + depends on SMP + default "32" -config PPC601_SYNC_FIX - bool "Workarounds for PPC601 bugs" - depends on 6xx && !POWER3 +config PREEMPT + bool "Preemptible Kernel" + depends on !SMP help - Some versions of the PPC601 (the first PowerPC chip) have bugs which - mean that extra synchronization instructions are required near - certain instructions, typically those that make major changes to the - CPU state. These extra instructions reduce performance slightly. - If you say N here, these extra instructions will not be included, - resulting in a kernel which will run faster but may not run at all - on some systems with the PPC601 chip. + This option reduces the latency of the kernel when reacting to + real-time or interactive events by allowing a low priority process to + be preempted even if it is in kernel mode executing a system call. + Unfortunately the kernel code has some race conditions if both + CONFIG_SMP and CONFIG_PREEMPT are enabled, so this option is + currently disabled if you are building an SMP kernel. - If in doubt, say Y here. + Say Y here if you are building a kernel for a desktop, embedded + or real-time system. Say N if you are unsure. + +config HIGHMEM + bool "High memory support" + +config KERNEL_ELF + bool + default y + +source "fs/Kconfig.binfmt" config PROC_DEVICETREE bool "Support for Open Firmware device tree in /proc" @@ -909,10 +793,6 @@ config PROC_PREPRESIDUAL (lsresidual) to parse it. If you aren't on a PReP system, you don't want this. -config PPCBUG_NVRAM - bool "Enable reading PPCBUG NVRAM during boot" if PPLUS || LOPEC - default y if PPC_PREP - config CMDLINE_BOOL bool "Default bootloader kernel arguments" @@ -969,10 +849,7 @@ config AMIGA_BUILTIN_SERIAL If you want to use your Amiga's built-in serial port in Linux, answer Y. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you - want). If you want to compile it as a module, say M here and read - . + To compile this driver as a module, choose M here. config GVPIOEXT tristate "GVP IO-Extender support" @@ -1002,10 +879,7 @@ config MULTIFACE_III_TTY If you want to use a Multiface III card's serial port in Linux, answer Y. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - If you want to compile it as a module, say M here and read - . + To compile this driver as a module, choose M here. config A2232 tristate "Commodore A2232 serial support (EXPERIMENTAL)" @@ -1021,8 +895,7 @@ config A2232 This driver can be built as a module; but then "generic_serial" will also be built as a module. This has to be loaded before - "ser_a2232". If you want to do this, answer M here and read - "". + "ser_a2232". If you want to do this, answer M here. config WHIPPET_SERIAL tristate "Hisoft Whippet PCMCIA serial support" @@ -1038,10 +911,8 @@ config APNE If you have a PCMCIA NE2000 compatible adapter, say Y. Otherwise, say N. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you - want). The module is called apne. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called apne. config SERIAL_CONSOLE bool "Support for serial port console" @@ -1063,6 +934,87 @@ source "drivers/zorro/Kconfig" endmenu +menu "Bus options" + +config ISA + bool "Support for ISA-bus hardware" + depends on PPC_PREP || PPC_CHRP + help + Find out whether you have ISA slots on your motherboard. ISA is the + name of a bus system, i.e. the way the CPU talks to the other stuff + inside your box. If you have an Apple machine, say N here; if you + have an IBM RS/6000 or pSeries machine or a PReP machine, say Y. If + you have an embedded board, consult your board documentation. + +config GENERIC_ISA_DMA + bool + depends on POWER3 || POWER4 || 6xx && !8260 + default y + +config EISA + bool + help + The Extended Industry Standard Architecture (EISA) bus is a bus + architecture used on some older intel-based PCs. + +config SBUS + bool + +# Yes MCA RS/6000s exist but Linux-PPC does not currently support any +config MCA + bool + +config PCI + bool "PCI support" if 40x || 8260 + default y if !40x && !8260 && !8xx && !APUS + default PCI_PERMEDIA if !4xx && !8260 && !8xx && APUS + default PCI_QSPAN if !4xx && !8260 && 8xx + help + Find out whether your system includes a PCI bus. PCI is the name of + a bus system, i.e. the way the CPU talks to the other stuff inside + your box. If you say Y here, the kernel will include drivers and + infrastructure code to support PCI bus devices. + +config PCI_DOMAINS + bool + default PCI + +config PCI_QSPAN + bool "QSpan PCI" + depends on !4xx && !8260 && 8xx + help + Say Y here if you have a system based on a Motorola 8xx-series + embedded processor with a QSPAN PCI interface, otherwise say N. + +config PCI_PERMEDIA + bool "PCI for Permedia2" + depends on !4xx && !8xx && APUS + +source "drivers/pci/Kconfig" + +config HOTPLUG + bool "Support for hot-pluggable devices" + ---help--- + Say Y here if you want to plug devices into your computer while + the system is running, and be able to use them quickly. In many + cases, the devices can likewise be unplugged at any time too. + + One well known example of this is PCMCIA- or PC-cards, credit-card + size devices such as network cards, modems or hard drives which are + plugged into slots found on all modern laptop computers. Another + example, used on modern desktops as well as laptops, is USB. + + Enable HOTPLUG and KMOD, and build a modular kernel. Get agent + software (at ) and install it. + Then your kernel will automatically call out to a user mode "policy + agent" (/sbin/hotplug) to load modules and set up software needed + to use devices as you hotplug them. + +source "drivers/pcmcia/Kconfig" + +source "drivers/parport/Kconfig" + +endmenu menu "Advanced setup" @@ -1409,7 +1361,7 @@ config DEBUG_SPINLOCK_SLEEP depends on DEBUG_KERNEL help If you say Y here, various routines which may sleep will become very - noisy if they are called with a spinlock held. + noisy if they are called with a spinlock held. config KGDB bool "Include kgdb kernel debugger" @@ -1465,7 +1417,6 @@ config BDI_SWITCH config DEBUG_INFO bool "Compile the kernel with debug info" depends on DEBUG_KERNEL - default y if BDI_SWITCH || XMON help If you say Y here the resulting kernel image will include debugging info resulting in a larger kernel image. @@ -1488,7 +1439,7 @@ config OCP bool depends on IBM_OCP default y - + endmenu source "security/Kconfig" diff -prauN linux-2.6.0-test5/arch/ppc/Makefile wli-2.6.0-test5-bk12-25/arch/ppc/Makefile --- linux-2.6.0-test5/arch/ppc/Makefile 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/Makefile 2003-09-25 19:15:48.000000000 -0700 @@ -32,6 +32,7 @@ head-$(CONFIG_4xx) := arch/ppc/kernel/h head-$(CONFIG_44x) := arch/ppc/kernel/head_44x.o head-$(CONFIG_6xx) += arch/ppc/kernel/idle_6xx.o +head-$(CONFIG_POWER4) += arch/ppc/kernel/idle_power4.o core-y += arch/ppc/kernel/ arch/ppc/platforms/ \ arch/ppc/mm/ arch/ppc/lib/ arch/ppc/syslib/ @@ -58,10 +59,6 @@ bzImage: zImage $(BOOT_TARGETS): vmlinux $(Q)$(MAKE) $(build)=arch/ppc/boot $@ -%_config: arch/ppc/configs/%_defconfig - rm -f .config arch/ppc/defconfig - cp -f arch/ppc/configs/$(@:config=defconfig) .config - archclean: $(Q)$(MAKE) $(clean)=arch/ppc/boot @@ -70,7 +67,7 @@ prepare: include/asm-$(ARCH)/offsets.h c arch/$(ARCH)/kernel/asm-offsets.s: include/asm include/linux/version.h \ include/config/MARKER -include/asm-$(ARCH)/offsets.h: arch/$(ARCH)/kernel/asm-offsets.s +include/asm-$(ARCH)/offsets.h: arch/$(ARCH)/kernel/asm-offsets.s $(call filechk,gen-asm-offsets) ifdef CONFIG_6xx diff -prauN linux-2.6.0-test5/arch/ppc/amiga/config.c wli-2.6.0-test5-bk12-25/arch/ppc/amiga/config.c --- linux-2.6.0-test5/arch/ppc/amiga/config.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/amiga/config.c 2003-09-25 19:15:48.000000000 -0700 @@ -323,7 +323,7 @@ static void __init amiga_identify(void) case AMI_DRACO: panic("No support for Draco yet"); - + default: panic("Unknown Amiga Model"); } @@ -620,7 +620,7 @@ static int amiga_hwclk(int op, struct hw volatile struct tod2000 *tod = TOD_2000; tod->cntrl1 = TOD2000_CNTRL1_HOLD; - + while (tod->cntrl1 & TOD2000_CNTRL1_BUSY) ; @@ -685,13 +685,13 @@ static int amiga_set_clock_mmss (unsigne tod->second2 = real_seconds % 10; tod->minute1 = real_minutes / 10; tod->minute2 = real_minutes % 10; - + tod->cntrl1 = TOD3000_CNTRL1_FREE; } else /* if (AMIGAHW_PRESENT(A2000_CLK)) */ { volatile struct tod2000 *tod = TOD_2000; tod->cntrl1 = TOD2000_CNTRL1_HOLD; - + while (tod->cntrl1 & TOD2000_CNTRL1_BUSY) ; @@ -950,7 +950,7 @@ int get_hardware_list(char *buffer) mach_get_model(model); else strcpy(model, "Unknown PowerPC"); - + len += sprintf(buffer+len, "Model:\t\t%s\n", model); len += get_cpuinfo(buffer+len); for (mem = 0, i = 0; i < m68k_realnum_memory; i++) diff -prauN linux-2.6.0-test5/arch/ppc/amiga/ints.c wli-2.6.0-test5-bk12-25/arch/ppc/amiga/ints.c --- linux-2.6.0-test5/arch/ppc/amiga/ints.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/amiga/ints.c 2003-09-25 19:15:48.000000000 -0700 @@ -77,8 +77,8 @@ irq_node_t *new_irq_node(void) return NULL; } -int sys_request_irq(unsigned int irq, - void (*handler)(int, void *, struct pt_regs *), +int sys_request_irq(unsigned int irq, + void (*handler)(int, void *, struct pt_regs *), unsigned long flags, const char *devname, void *dev_id) { if (irq < IRQ1 || irq > IRQ7) { diff -prauN linux-2.6.0-test5/arch/ppc/boot/common/crt0.S wli-2.6.0-test5-bk12-25/arch/ppc/boot/common/crt0.S --- linux-2.6.0-test5/arch/ppc/boot/common/crt0.S 2003-09-08 12:50:13.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/boot/common/crt0.S 2003-09-25 19:15:48.000000000 -0700 @@ -34,9 +34,9 @@ __start: ## Flush and invalidate the caches for the range in memory covering ## the .text section of the boot loader - + lis r9,_start@h # r9 = &_start - lis r8,_etext@ha # + lis r8,_etext@ha # addi r8,r8,_etext@l # r8 = &_etext 3: dcbf r0,r9 # Flush the data cache icbi r0,r9 # Invalidate the instruction cache @@ -50,12 +50,12 @@ __start: lis r7,_end@ha addi r7,r7,_end@l # r7 = &_end - lis r8,__bss_start@ha # + lis r8,__bss_start@ha # addi r8,r8,__bss_start@l # r8 = &_bss_start ## Determine how large an area, in number of words, to clear - - subf r7,r8,r7 # r7 = &_end - &_bss_start + 1 + + subf r7,r8,r7 # r7 = &_end - &_bss_start + 1 addi r7,r7,3 # r7 += 3 srwi. r7,r7,2 # r7 = size in words. beq 2f # If the size is zero, do not bother diff -prauN linux-2.6.0-test5/arch/ppc/boot/common/misc-common.c wli-2.6.0-test5-bk12-25/arch/ppc/boot/common/misc-common.c --- linux-2.6.0-test5/arch/ppc/boot/common/misc-common.c 2003-09-08 12:50:04.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/boot/common/misc-common.c 2003-09-25 19:15:48.000000000 -0700 @@ -1,6 +1,6 @@ /* * arch/ppc/boot/common/misc-common.c - * + * * Misc. bootloader code (almost) all platforms can use * * Author: Johnnie Peters @@ -75,7 +75,7 @@ void pause(void) void exit(void) { puts("exit\n"); - while(1); + while(1); } int tstc(void) @@ -103,7 +103,7 @@ int getc(void) } } -void +void putc(const char c) { int x,y; @@ -130,7 +130,7 @@ putc(const char c) x--; } } else { - vidmem [ ( x + cols * y ) * 2 ] = c; + vidmem [ ( x + cols * y ) * 2 ] = c; if ( ++x >= cols ) { x = 0; if ( ++y >= lines ) { @@ -171,7 +171,7 @@ void puts(const char *s) x--; } } else { - vidmem [ ( x + cols * y ) * 2 ] = c; + vidmem [ ( x + cols * y ) * 2 ] = c; if ( ++x >= cols ) { x = 0; if ( ++y >= lines ) { @@ -200,7 +200,7 @@ void error(char *x) void *zalloc(void *x, unsigned items, unsigned size) { void *p = avail_ram; - + size *= items; size = (size + 7) & -8; avail_ram += size; @@ -227,7 +227,7 @@ void gunzip(void *dst, int dstlen, unsig { z_stream s; int r, i, flags; - + /* skip header */ i = 10; flags = src[3]; @@ -249,7 +249,7 @@ void gunzip(void *dst, int dstlen, unsig puts("gunzip: ran out of data in header\n"); exit(); } - + s.zalloc = zalloc; s.zfree = zfree; r = inflateInit2(&s, -MAX_WBITS); diff -prauN linux-2.6.0-test5/arch/ppc/boot/common/mpc10x_memory.c wli-2.6.0-test5-bk12-25/arch/ppc/boot/common/mpc10x_memory.c --- linux-2.6.0-test5/arch/ppc/boot/common/mpc10x_memory.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/boot/common/mpc10x_memory.c 2003-09-25 19:15:48.000000000 -0700 @@ -1,6 +1,6 @@ /* * arch/ppc/boot/common/mpc10x_common.c - * + * * A routine to find out how much memory the machine has. * * Based on: diff -prauN linux-2.6.0-test5/arch/ppc/boot/common/util.S wli-2.6.0-test5-bk12-25/arch/ppc/boot/common/util.S --- linux-2.6.0-test5/arch/ppc/boot/common/util.S 2003-09-08 12:50:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/boot/common/util.S 2003-09-25 19:15:48.000000000 -0700 @@ -196,9 +196,9 @@ udelay: /* Change r4 to be the number of ticks using: * (nanoseconds + (timebase_period_ns - 1 )) / timebase_period_ns * timebase_period_ns defaults to 60 (16.6MHz) */ - lis r5,timebase_period_ns@h + lis r5,timebase_period_ns@ha lwz r5,timebase_period_ns@l(r5) - addi r4,r4,r5 + add r4,r4,r5 addi r4,r4,-1 divw r4,r4,r5 /* BUS ticks */ 1: mftbu r5 diff -prauN linux-2.6.0-test5/arch/ppc/boot/include/rs6000.h wli-2.6.0-test5-bk12-25/arch/ppc/boot/include/rs6000.h --- linux-2.6.0-test5/arch/ppc/boot/include/rs6000.h 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/boot/include/rs6000.h 2003-09-25 19:15:48.000000000 -0700 @@ -35,7 +35,7 @@ struct external_filehdr { /********************** AOUT "OPTIONAL HEADER" **********************/ -typedef struct +typedef struct { unsigned char magic[2]; /* type of file */ unsigned char vstamp[2]; /* version stamp */ @@ -135,7 +135,7 @@ struct external_lineno { #define E_FILNMLEN 14 /* # characters in a file name */ #define E_DIMNUM 4 /* # array dimensions in auxiliary entry */ -struct external_syment +struct external_syment { union { char e_name[E_SYMNMLEN]; @@ -157,7 +157,7 @@ struct external_syment #define N_TMASK (060) #define N_BTSHFT (4) #define N_TSHIFT (2) - + union external_auxent { struct { @@ -214,7 +214,7 @@ union external_auxent { }; #define SYMENT struct external_syment -#define SYMESZ 18 +#define SYMESZ 18 #define AUXENT union external_auxent #define AUXESZ 18 #define DBXMASK 0x80 /* for dbx storage mask */ diff -prauN linux-2.6.0-test5/arch/ppc/boot/include/zlib.h wli-2.6.0-test5-bk12-25/arch/ppc/boot/include/zlib.h --- linux-2.6.0-test5/arch/ppc/boot/include/zlib.h 2003-09-08 12:49:54.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/boot/include/zlib.h 2003-09-25 19:15:48.000000000 -0700 @@ -44,7 +44,7 @@ /* zconf.h -- configuration of the zlib compression library * Copyright (C) 1995 Jean-loup Gailly. - * For conditions of distribution and use, see copyright notice in zlib.h + * For conditions of distribution and use, see copyright notice in zlib.h */ /* From: zconf.h,v 1.12 1995/05/03 17:27:12 jloup Exp */ @@ -137,7 +137,7 @@ typedef uLong FAR uLongf; #define ZLIB_VERSION "0.95P" -/* +/* The 'zlib' compression library provides in-memory compression and decompression functions, including integrity checks of the uncompressed data. This version of the library supports only one compression method @@ -254,7 +254,7 @@ extern char *zlib_version; /* basic functions */ extern int inflateInit OF((z_stream *strm)); -/* +/* Initializes the internal stream state for decompression. The fields zalloc and zfree must be initialized before by the caller. If zalloc and zfree are set to Z_NULL, inflateInit updates them to use default allocation @@ -333,7 +333,7 @@ extern int inflateEnd OF((z_stream *strm extern int inflateInit2 OF((z_stream *strm, int windowBits)); -/* +/* This is another version of inflateInit with more compression options. The fields next_out, zalloc and zfree must be initialized before by the caller. @@ -365,7 +365,7 @@ extern int inflateInit2 OF((z_stream *st */ extern int inflateSync OF((z_stream *strm)); -/* +/* Skips invalid compressed data until the special marker (see deflate() above) can be found, or until all available input is skipped. No output is provided. diff -prauN linux-2.6.0-test5/arch/ppc/boot/lib/zlib.c wli-2.6.0-test5-bk12-25/arch/ppc/boot/lib/zlib.c --- linux-2.6.0-test5/arch/ppc/boot/lib/zlib.c 2003-09-08 12:49:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/boot/lib/zlib.c 2003-09-25 19:15:48.000000000 -0700 @@ -118,7 +118,7 @@ typedef uLong (*check_func) OF((uLong ch /* deflate.h -- internal compression state * Copyright (C) 1995 Jean-loup Gailly - * For conditions of distribution and use, see copyright notice in zlib.h + * For conditions of distribution and use, see copyright notice in zlib.h */ /* WARNING: this file should *not* be used by applications. It is @@ -129,7 +129,7 @@ typedef uLong (*check_func) OF((uLong ch /*+++++*/ /* infblock.h -- header to use infblock.c * Copyright (C) 1995 Mark Adler - * For conditions of distribution and use, see copyright notice in zlib.h + * For conditions of distribution and use, see copyright notice in zlib.h */ /* WARNING: this file should *not* be used by applications. It is @@ -170,7 +170,7 @@ local int inflate_packet_flush OF(( /*+++++*/ /* inftrees.h -- header to use inftrees.c * Copyright (C) 1995 Mark Adler - * For conditions of distribution and use, see copyright notice in zlib.h + * For conditions of distribution and use, see copyright notice in zlib.h */ /* WARNING: this file should *not* be used by applications. It is @@ -232,7 +232,7 @@ local int inflate_trees_free OF(( /*+++++*/ /* infcodes.h -- header to use infcodes.c * Copyright (C) 1995 Mark Adler - * For conditions of distribution and use, see copyright notice in zlib.h + * For conditions of distribution and use, see copyright notice in zlib.h */ /* WARNING: this file should *not* be used by applications. It is @@ -261,7 +261,7 @@ local void inflate_codes_free OF(( /*+++++*/ /* inflate.c -- zlib interface to inflate modules * Copyright (C) 1995 Mark Adler - * For conditions of distribution and use, see copyright notice in zlib.h + * For conditions of distribution and use, see copyright notice in zlib.h */ /* inflate private state */ @@ -293,7 +293,7 @@ struct internal_state { /* mode independent information */ int nowrap; /* flag for no wrapper */ uInt wbits; /* log2(window size) (8..15, defaults to 15) */ - inflate_blocks_statef + inflate_blocks_statef *blocks; /* current inflate_blocks state */ }; @@ -393,7 +393,7 @@ int inflateInit( int inflate( z_stream *z, - int f + int f ) { int r; @@ -575,7 +575,7 @@ int inflateSync( /*+++++*/ /* infutil.h -- types and macros common to blocks and codes * Copyright (C) 1995 Mark Adler - * For conditions of distribution and use, see copyright notice in zlib.h + * For conditions of distribution and use, see copyright notice in zlib.h */ /* WARNING: this file should *not* be used by applications. It is @@ -613,7 +613,7 @@ struct inflate_blocks_state { } trees; /* if DTREE, decoding info for trees */ struct { inflate_huft *tl, *td; /* trees to free */ - inflate_codes_statef + inflate_codes_statef *codes; } decode; /* if CODES, current state */ } sub; /* submode */ @@ -671,7 +671,7 @@ local int inflate_flush OF(( /*+++++*/ /* inffast.h -- header to use inffast.c * Copyright (C) 1995 Mark Adler - * For conditions of distribution and use, see copyright notice in zlib.h + * For conditions of distribution and use, see copyright notice in zlib.h */ /* WARNING: this file should *not* be used by applications. It is @@ -691,7 +691,7 @@ local int inflate_fast OF(( /*+++++*/ /* infblock.c -- interpret and process block types to last block * Copyright (C) 1995 Mark Adler - * For conditions of distribution and use, see copyright notice in zlib.h + * For conditions of distribution and use, see copyright notice in zlib.h */ /* Table for deflate from PKZIP's appnote.txt. */ @@ -1145,7 +1145,7 @@ local int inflate_packet_flush( /*+++++*/ /* inftrees.c -- generate Huffman trees for efficient decoding * Copyright (C) 1995 Mark Adler - * For conditions of distribution and use, see copyright notice in zlib.h + * For conditions of distribution and use, see copyright notice in zlib.h */ /* simplify the use of the inflate_huft type with some defines */ @@ -1613,14 +1613,14 @@ local int inflate_trees_free( q = (--p)->next; ZFREE(z, p, p->word.Nalloc * sizeof(inflate_huft)); p = q; - } + } return Z_OK; } /*+++++*/ /* infcodes.c -- process literals and length/distance pairs * Copyright (C) 1995 Mark Adler - * For conditions of distribution and use, see copyright notice in zlib.h + * For conditions of distribution and use, see copyright notice in zlib.h */ /* simplify the use of the inflate_huft type with some defines */ @@ -1866,7 +1866,7 @@ local void inflate_codes_free( /*+++++*/ /* inflate_util.c -- data and routines common to blocks and codes * Copyright (C) 1995 Mark Adler - * For conditions of distribution and use, see copyright notice in zlib.h + * For conditions of distribution and use, see copyright notice in zlib.h */ /* copy as much as possible from the sliding window to the output area */ @@ -1940,7 +1940,7 @@ local int inflate_flush( /*+++++*/ /* inffast.c -- process literals and length/distance pairs fast * Copyright (C) 1995 Mark Adler - * For conditions of distribution and use, see copyright notice in zlib.h + * For conditions of distribution and use, see copyright notice in zlib.h */ /* simplify the use of the inflate_huft type with some defines */ @@ -2104,7 +2104,7 @@ local int inflate_fast( /*+++++*/ /* zutil.c -- target dependent utility functions for the compression library * Copyright (C) 1995 Jean-loup Gailly. - * For conditions of distribution and use, see copyright notice in zlib.h + * For conditions of distribution and use, see copyright notice in zlib.h */ /* From: zutil.c,v 1.8 1995/05/03 17:27:12 jloup Exp */ @@ -2125,7 +2125,7 @@ char *z_errmsg[] = { /*+++++*/ /* adler32.c -- compute the Adler-32 checksum of a data stream * Copyright (C) 1995 Mark Adler - * For conditions of distribution and use, see copyright notice in zlib.h + * For conditions of distribution and use, see copyright notice in zlib.h */ /* From: adler32.c,v 1.6 1995/05/03 17:27:08 jloup Exp */ diff -prauN linux-2.6.0-test5/arch/ppc/boot/of1275/map.c wli-2.6.0-test5-bk12-25/arch/ppc/boot/of1275/map.c --- linux-2.6.0-test5/arch/ppc/boot/of1275/map.c 2003-09-08 12:50:00.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/boot/of1275/map.c 2003-09-25 19:15:48.000000000 -0700 @@ -1,4 +1,3 @@ - /* * Copyright (C) Paul Mackerras 1997. * Copyright (C) Leigh Brown 2002. @@ -22,7 +21,7 @@ map(unsigned int phys, unsigned int virt int nargs; int nret; char *method; - ihandle mmu_ihandle; + ihandle mmu_ihandle; int misc; unsigned int phys; unsigned int virt; diff -prauN linux-2.6.0-test5/arch/ppc/boot/of1275/ofinit.c wli-2.6.0-test5-bk12-25/arch/ppc/boot/of1275/ofinit.c --- linux-2.6.0-test5/arch/ppc/boot/of1275/ofinit.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/boot/of1275/ofinit.c 2003-09-25 19:15:48.000000000 -0700 @@ -19,7 +19,7 @@ ofinit(prom_entry prom_ptr) phandle chosen; of_prom_entry = prom_ptr; - + if ((chosen = finddevice("/chosen")) == OF_INVALID_HANDLE) return; if (getprop(chosen, "mmu", &of_prom_mmu, sizeof(ihandle)) != 4) diff -prauN linux-2.6.0-test5/arch/ppc/boot/of1275/ofstdio.c wli-2.6.0-test5-bk12-25/arch/ppc/boot/of1275/ofstdio.c --- linux-2.6.0-test5/arch/ppc/boot/of1275/ofstdio.c 2003-09-08 12:50:28.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/boot/of1275/ofstdio.c 2003-09-25 19:15:48.000000000 -0700 @@ -15,7 +15,7 @@ ofstdio(ihandle *stdin, ihandle *stdout, { ihandle in, out; phandle chosen; - + if ((chosen = finddevice("/chosen")) == OF_INVALID_HANDLE) goto err; if (getprop(chosen, "stdout", &out, sizeof(out)) != 4) diff -prauN linux-2.6.0-test5/arch/ppc/boot/openfirmware/chrpmain.c wli-2.6.0-test5-bk12-25/arch/ppc/boot/openfirmware/chrpmain.c --- linux-2.6.0-test5/arch/ppc/boot/openfirmware/chrpmain.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/boot/openfirmware/chrpmain.c 2003-09-25 19:15:49.000000000 -0700 @@ -50,7 +50,7 @@ boot(int a1, int a2, void *prom) void *dst; unsigned char *im; unsigned int initrd_size, initrd_start; - + printf("chrpboot starting: loaded at 0x%p\n\r", &_start); initrd_size = &__ramdisk_end - &__ramdisk_begin; @@ -89,7 +89,7 @@ boot(int a1, int a2, void *prom) flush_cache(dst, len); make_bi_recs(((unsigned long) dst + len), "chrpboot", _MACH_chrp, (PROG_START + PROG_SIZE)); - + sa = PROG_START; printf("start address = 0x%x\n\r", sa); diff -prauN linux-2.6.0-test5/arch/ppc/boot/openfirmware/coffmain.c wli-2.6.0-test5-bk12-25/arch/ppc/boot/openfirmware/coffmain.c --- linux-2.6.0-test5/arch/ppc/boot/openfirmware/coffmain.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/boot/openfirmware/coffmain.c 2003-09-25 19:15:49.000000000 -0700 @@ -50,7 +50,7 @@ void boot(int a1, int a2, void *prom) void *dst; unsigned char *im; unsigned initrd_start, initrd_size; - + printf("coffboot starting: loaded at 0x%p\n", &_start); setup_bats(ram_start); diff -prauN linux-2.6.0-test5/arch/ppc/boot/openfirmware/newworldmain.c wli-2.6.0-test5-bk12-25/arch/ppc/boot/openfirmware/newworldmain.c --- linux-2.6.0-test5/arch/ppc/boot/openfirmware/newworldmain.c 2003-09-08 12:49:50.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/boot/openfirmware/newworldmain.c 2003-09-25 19:15:49.000000000 -0700 @@ -43,7 +43,7 @@ void boot(int a1, int a2, void *prom) void *dst; unsigned char *im; unsigned initrd_start, initrd_size; - + printf("chrpboot starting: loaded at 0x%p\n", &_start); initrd_size = (char *)(&__ramdisk_end) - (char *)(&__ramdisk_begin); diff -prauN linux-2.6.0-test5/arch/ppc/boot/prep/Makefile wli-2.6.0-test5-bk12-25/arch/ppc/boot/prep/Makefile --- linux-2.6.0-test5/arch/ppc/boot/prep/Makefile 2003-09-08 12:50:27.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/boot/prep/Makefile 2003-09-25 19:15:49.000000000 -0700 @@ -15,7 +15,7 @@ TFTPIMAGE := /tftpboot/zImage.prep ifeq ($(CONFIG_SMP),y) -TFTPIMAGE := $(TFTPBOOT).smp +TFTPIMAGE := $(TFTPIMAGE).smp endif boot-y := head.o misc.o @@ -32,12 +32,12 @@ OBJCOPYFLAGS := -O elf32-powerpc LIBS := $(common)/lib.a $(bootlib)/lib.a targets := $(boot-y) dummy.o ../simple/legacy.o -OBJS := $(addprefix $(obj)/,$(boot-y)) $(simple)/legacy.o +OBJS := $(addprefix $(obj)/,$(boot-y)) $(simple)/legacy.o # Extra include search dirs CFLAGS_kbd.o += -Idrivers/char -zImage: initrd := +zImage: initrd := zImage: $(images)/zImage.prep @echo ' kernel: $@ is ready ($<)' @@ -47,7 +47,7 @@ zImage.initrd: $(images)/zImage.initrd.p $(images)/ramdisk.image.gz: @echo ' MISSING $@' - @echo ' RAM disk image must be provided separatly' + @echo ' RAM disk image must be provided separately' @/bin/false OBJCOPYFLAGS_image.o := \ diff -prauN linux-2.6.0-test5/arch/ppc/boot/simple/Makefile wli-2.6.0-test5-bk12-25/arch/ppc/boot/simple/Makefile --- linux-2.6.0-test5/arch/ppc/boot/simple/Makefile 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/boot/simple/Makefile 2003-09-25 19:15:49.000000000 -0700 @@ -3,11 +3,6 @@ # # Author: Tom Rini # -# 2001-2002 (c) MontaVista, Software, Inc. This file is licensed under -# the terms of the GNU General Public License version 2. This program -# is licensed "as is" without any warranty of any kind, whether express -# or implied. -# # Notes: # (1) For machine targets which produce more than one image, define # ZNETBOOT and ZNETBOOTRD to the image which should be available for @@ -33,6 +28,12 @@ images := $(boot)/images # whatnot. Sometimes we need to override this however. misc-y := misc.o +# Additionally, we normally don't need to mess with the L2 / L3 caches +# if present on 'classic' PPC. +cacheflag-y := -DCLEAR_CACHES="" +# This file will flush / disable the L2, and L3 if present. +clear_L2_L3 := $(boot)/simple/clear.S + # # See arch/ppc/kconfig and arch/ppc/platforms/Kconfig # for definition of what platform each config option refer to. @@ -60,6 +61,7 @@ zimageinitrd-$(CONFIG_OCOTEA) := zImage extra.o-$(CONFIG_EV64260) := direct.o misc-ev64260.o tftpimage-$(CONFIG_EV64260) := /tftpboot/zImage.ev64260 + cacheflag-$(CONFIG_EV64260) := -include $(clear_L2_L3) zimage-$(CONFIG_GEMINI) := zImage-STRIPELF zimageinitrd-$(CONFIG_GEMINI) := zImage.initrd-STRIPELF @@ -68,33 +70,32 @@ zimageinitrd-$(CONFIG_GEMINI) := zImage extra.o-$(CONFIG_K2) := legacy.o tftpimage-$(CONFIG_K2) := /tftpboot/zImage.k2 + cacheflag-$(CONFIG_K2) := -include $(clear_L2_L3) -# kconfig 'feature', only one of these will ever by 'y' at a time. +# kconfig 'feature', only one of these will ever be 'y' at a time. # The rest will be unset. -multi := $(CONFIG_MCPN765)$(CONFIG_MVME5100)$(CONFIG_PRPMC750) \ +motorola := $(CONFIG_MCPN765)$(CONFIG_MVME5100)$(CONFIG_PRPMC750) \ $(CONFIG_PRPMC800)$(CONFIG_LOPEC)$(CONFIG_PPLUS) - zimage-$(multi) := zImage-PPLUS -zimageinitrd-$(multi) := zImage.initrd-PPLUS - tftpimage-$(multi) := /tftpboot/zImage.pplus - znetboot-$(multi) := zImage.pplus - znetbootrd-$(multi) := zImage.initrd.pplus +pcore := $(CONFIG_PCORE)$(CONFIG_POWERPMC250) + + zimage-$(motorola) := zImage-PPLUS +zimageinitrd-$(motorola) := zImage.initrd-PPLUS + tftpimage-$(motorola) := /tftpboot/zImage.pplus + znetboot-$(motorola) := zImage.pplus + znetbootrd-$(motorola) := zImage.initrd.pplus # Overrides previous assingment extra.o-$(CONFIG_PPLUS) := legacy.o - zimage-$(CONFIG_PCORE) := zImage-STRIPELF -zimageinitrd-$(CONFIG_PCORE) := zImage.initrd-STRIPELF - extra.o-$(CONFIG_PCORE) := chrpmap.o - end-$(CONFIG_PCORE) := pcore - tftpimage-$(CONFIG_PCORE) := /tftpboot/zImage.$(end-y) - - zimage-$(CONFIG_POWERPMC250) := zImage-STRIPELF -zimageinitrd-$(CONFIG_POWERPMC250) := zImage.initrd-STRIPELF - extra.o-$(CONFIG_POWERPMC250) := chrpmap.o - end-$(CONFIG_POWERPMC250) := pcore - tftpimage-$(CONFIG_POWERPMC250) := /tftpboot/zImage.$(end-y) + zimage-$(pcore) := zImage-STRIPELF +zimageinitrd-$(pcore) := zImage.initrd-STRIPELF + extra.o-$(pcore) := chrpmap.o + end-$(pcore) := pcore + tftpimage-$(pcore) := /tftpboot/zImage.$(end-y) + cacheflag-$(pcore) := -include $(clear_L2_L3) tftpimage-$(CONFIG_SANDPOINT) := /tftpboot/zImage.sandpoint + cacheflag-$(CONFIG_SANDPOINT) := -include $(clear_L2_L3) zimage-$(CONFIG_SPRUCE) := zImage-TREE zimageinitrd-$(CONFIG_SPRUCE) := zImage.initrd-TREE @@ -112,6 +113,8 @@ tftpimage-$(CONFIG_SMP) += .smp extra-aflags-$(CONFIG_REDWOOD_4) := -Wa,-m405 extra.o-$(CONFIG_REDWOOD_4) := rw4/rw4_init.o rw4/rw4_init_brd.o EXTRA_AFLAGS := $(extra-aflags-y) +# head.o needs to get the cacheflags defined. +AFLAGS_head.o += $(cacheflag-y) # Linker args. This specifies where the image will be run at. LD_ARGS := -T $(boot)/ld.script \ @@ -119,7 +122,7 @@ LD_ARGS := -T $(boot)/ld.script \ OBJCOPY_ARGS := -O elf32-powerpc # head.o and relocate.o must be at the start. -boot-y := head.o relocate.o $(extra.o-y) $(misc-y) +boot-y := head.o relocate.o $(extra.o-y) $(misc-y) boot-$(CONFIG_40x) += embed_config.o boot-$(CONFIG_8xx) += embed_config.o boot-$(CONFIG_8260) += embed_config.o diff -prauN linux-2.6.0-test5/arch/ppc/boot/simple/clear.S wli-2.6.0-test5-bk12-25/arch/ppc/boot/simple/clear.S --- linux-2.6.0-test5/arch/ppc/boot/simple/clear.S 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/ppc/boot/simple/clear.S 2003-09-25 19:15:49.000000000 -0700 @@ -0,0 +1,19 @@ +/* + * Code to call _setup_L2CR to flus, invalidate and disable the L2, + * and if present, do the same to the L3. + */ + +#define CLEAR_CACHES \ + bl _setup_L2CR; \ + \ + /* If 745x, turn off L3CR as well */ \ + mfspr r8,PVR; \ + srwi r8,r8,16; \ + \ + cmpli cr0,r8,0x8000; /* 7450 */ \ + cmpli cr1,r8,0x8001; /* 7455 */ \ + cmpli cr2,r8,0x8002; /* 7457 */ \ + /* Now test if any are true. */ \ + cror 4*cr0+eq,4*cr0+eq,4*cr1+eq; \ + cror 4*cr0+eq,4*cr0+eq,4*cr2+eq; \ + beql _setup_L3CR diff -prauN linux-2.6.0-test5/arch/ppc/boot/simple/gt64260_tty.c wli-2.6.0-test5-bk12-25/arch/ppc/boot/simple/gt64260_tty.c --- linux-2.6.0-test5/arch/ppc/boot/simple/gt64260_tty.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/boot/simple/gt64260_tty.c 2003-09-25 19:15:49.000000000 -0700 @@ -1,6 +1,6 @@ /* * arch/ppc/boot/simple/gt64260_tty.c - * + * * Bootloader version of the embedded MPSC/UART driver for the GT64260[A]. * Note: Due to 64260A errata, DMA will be used for UART input (via SDMA). * diff -prauN linux-2.6.0-test5/arch/ppc/boot/simple/head.S wli-2.6.0-test5-bk12-25/arch/ppc/boot/simple/head.S --- linux-2.6.0-test5/arch/ppc/boot/simple/head.S 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/boot/simple/head.S 2003-09-25 19:15:49.000000000 -0700 @@ -71,21 +71,8 @@ start_: #ifdef CONFIG_6xx bl disable_6xx_mmu bl disable_6xx_l1cache -#if defined(CONFIG_FORCE) || defined(CONFIG_K2) \ - || defined(CONFIG_EV64260) || defined(CONFIG_PAL4) - bl _setup_L2CR - - /* If 745x, turn off L3CR as well */ - mfspr r8,PVR - srwi r8,r8,16 - - cmpli cr0,r8,0x8000 /* 7450 */ - cmpli cr1,r8,0x8001 /* 7455 */ - cmpli cr2,r8,0x8002 /* 7457 */ - cror 4*cr0+eq,4*cr0+eq,4*cr1+eq /* Now test if any are true. */ - cror 4*cr0+eq,4*cr0+eq,4*cr2+eq - beql _setup_L3CR -#endif + + CLEAR_CACHES #endif #ifdef CONFIG_8xx diff -prauN linux-2.6.0-test5/arch/ppc/boot/simple/misc-ev64260.S wli-2.6.0-test5-bk12-25/arch/ppc/boot/simple/misc-ev64260.S --- linux-2.6.0-test5/arch/ppc/boot/simple/misc-ev64260.S 2003-09-08 12:50:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/boot/simple/misc-ev64260.S 2003-09-25 19:15:49.000000000 -0700 @@ -1,6 +1,6 @@ /* * arch/ppc/boot/simple/misc-ev64260.S - * + * * Host bridge init code for the Marvell/Galileo EV-64260-BP evaluation board * with a GT64260 onboard. * @@ -26,7 +26,7 @@ ev64260_init: /* Relocate galileo's regs */ addis r25,0,GT64260_INTERNAL_SPACE_DEFAULT_ADDR@h - ori r25,r25,GT64260_INTERNAL_SPACE_DECODE + ori r25,r25,GT64260_INTERNAL_SPACE_DECODE lwbrx r26,0,(r25) lis r24,0xffff and r26,r26,r24 @@ -45,7 +45,7 @@ ev64260_init: /* Change CS2 (UARTS on device module) window */ addis r25,0,EV64260_BRIDGE_REG_BASE@h - ori r25,r25,GT64260_CPU_CS_DECODE_2_BOT + ori r25,r25,GT64260_CPU_CS_DECODE_2_BOT addis r26,0,EV64260_UART_BASE@h srw r26,r26,r23 stwbrx r26,0,(r25) diff -prauN linux-2.6.0-test5/arch/ppc/boot/simple/misc-spruce.c wli-2.6.0-test5-bk12-25/arch/ppc/boot/simple/misc-spruce.c --- linux-2.6.0-test5/arch/ppc/boot/simple/misc-spruce.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/boot/simple/misc-spruce.c 2003-09-25 19:15:49.000000000 -0700 @@ -383,7 +383,7 @@ load_kernel(unsigned long load_addr, int unsigned long rec_loc = _ALIGN((unsigned long)(zimage_size) + (1 << 20) - 1, (1 << 20)); rec = (struct bi_record *)rec_loc; - + /* We need to make sure that the initrd and bi_recs do not * overlap. */ if ( initrd_size ) { diff -prauN linux-2.6.0-test5/arch/ppc/boot/simple/misc.c wli-2.6.0-test5-bk12-25/arch/ppc/boot/simple/misc.c --- linux-2.6.0-test5/arch/ppc/boot/simple/misc.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/boot/simple/misc.c 2003-09-25 19:15:49.000000000 -0700 @@ -230,7 +230,7 @@ decompress_kernel(unsigned long load_add puts("\n"); } } - + rec->tag = BI_FIRST; rec->size = sizeof(struct bi_record); rec = (struct bi_record *)((unsigned long)rec + rec->size); diff -prauN linux-2.6.0-test5/arch/ppc/boot/simple/relocate.S wli-2.6.0-test5-bk12-25/arch/ppc/boot/simple/relocate.S --- linux-2.6.0-test5/arch/ppc/boot/simple/relocate.S 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/boot/simple/relocate.S 2003-09-25 19:15:49.000000000 -0700 @@ -21,8 +21,8 @@ #include #define GETSYM(reg, sym) \ - lis reg, sym@h; ori reg, reg, sym@l - + lis reg, sym@h; ori reg, reg, sym@l + .text /* We get called from the early initialization code. * Register 3 has the address where we were loaded, @@ -54,7 +54,7 @@ relocate: cmp cr0,r3,r4 beq start_ldr /* If 0, we don't need to relocate */ - /* Move this code somewhere safe. This is max(load + size, end) + /* Move this code somewhere safe. This is max(load + size, end) * r8 == load address */ GETSYM(r4, start) @@ -66,10 +66,10 @@ relocate: cmpw r5,r6 bgt 1f b 2f -1: - mr r6, r5 -2: - /* dest is in r6 */ +1: + mr r6, r5 +2: + /* dest is in r6 */ /* Ensure alignment --- this code is precautionary */ addi r6,r6,4 li r5,0x0003 @@ -81,20 +81,20 @@ relocate: GETSYM(r3, start) /* Size to copy */ - sub r4,r4,r5 + sub r4,r4,r5 srwi r4,r4,2 - + /* Src addr to copy (= __relocate_start - start + where_loaded) */ sub r3,r5,r3 - add r5,r8,r3 + add r5,r8,r3 /* Save dest */ mr r3, r6 - /* Do the copy */ - mtctr r4 + /* Do the copy */ + mtctr r4 3: lwz r4,0(r5) - stw r4,0(r3) + stw r4,0(r3) addi r3,r3,4 addi r5,r5,4 bdnz 3b @@ -110,23 +110,23 @@ relocate: b flush_instruction_cache .section ".relocate_code","xa" - -do_relocate: - /* We have 2 cases --- start < load, or start > load + +do_relocate: + /* We have 2 cases --- start < load, or start > load * This determines whether we copy from the end, or the start. * Its easier to have 2 loops than to have paramaterised * loops. Sigh. */ li r6,0 /* Clear checksum */ mtctr r7 /* Setup for a loop */ - + GETSYM(r4, start) mr r3,r8 /* Get the load addr */ cmp cr0,r4,r3 /* If we need to copy from the end, do so */ bgt do_relocate_from_end - -do_relocate_from_start: + +do_relocate_from_start: 1: lwz r5,0(r3) /* Load and decrement */ stw r5,0(r4) /* Store and decrement */ addi r3,r3,4 @@ -135,7 +135,7 @@ do_relocate_from_start: bdnz 1b /* Are we done? */ b do_relocate_out /* Finished */ -do_relocate_from_end: +do_relocate_from_end: GETSYM(r3, end) slwi r4,r7,2 add r4,r8,r4 /* Get the physical end */ @@ -144,7 +144,7 @@ do_relocate_from_end: xor r6,r6,r5 bdnz 1b -do_relocate_out: +do_relocate_out: GETSYM(r3,start_ldr) mtlr r3 /* Easiest way to do an absolute jump */ /* Some boards don't boot up with the I-cache enabled. Do that @@ -155,7 +155,7 @@ do_relocate_out: b flush_instruction_cache .previous - + start_ldr: /* Clear all of BSS and set up stack for C calls */ lis r3,edata@h diff -prauN linux-2.6.0-test5/arch/ppc/boot/utils/addRamDisk.c wli-2.6.0-test5-bk12-25/arch/ppc/boot/utils/addRamDisk.c --- linux-2.6.0-test5/arch/ppc/boot/utils/addRamDisk.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/boot/utils/addRamDisk.c 2003-09-25 19:15:49.000000000 -0700 @@ -23,7 +23,7 @@ void put4k(FILE *file, char *buf ) fwrite(buf, 1, 4096, file); } -void death(const char *msg, FILE *fdesc, const char *fname) +void death(const char *msg, FILE *fdesc, const char *fname) { printf(msg); fclose(fdesc); @@ -112,7 +112,7 @@ int main(int argc, char **argv) round = actualKernelLen % 4096; roundedKernelLen = actualKernelLen; - if ( round ) + if ( round ) roundedKernelLen += (4096 - round); printf("actual kernel length rounded up to a 4k multiple = %d\n", roundedKernelLen); @@ -147,7 +147,7 @@ int main(int argc, char **argv) fclose(inputVmlinux); /* And flush the written output file */ fflush(outputVmlinux); - + /* fseek to the hvReleaseData pointer */ fseek(outputVmlinux, ElfHeaderSize + 0x24, SEEK_SET); if (fread(&hvReleaseData, 4, 1, outputVmlinux) != 1) { @@ -155,7 +155,7 @@ int main(int argc, char **argv) } hvReleaseData = ntohl(hvReleaseData); /* Convert to native int */ printf("hvReleaseData is at %08x\n", hvReleaseData); - + /* fseek to the hvReleaseData */ fseek(outputVmlinux, ElfHeaderSize + hvReleaseData, SEEK_SET); if (fread(inbuf, 0x40, 1, outputVmlinux) != 1) { @@ -164,11 +164,11 @@ int main(int argc, char **argv) /* Check hvReleaseData sanity */ if (memcmp(inbuf, &eyeCatcher, 4) != 0) { death("hvReleaseData is invalid\n", outputVmlinux, argv[3]); - } + } /* Get the naca pointer */ naca = ntohl(*((u_int32_t *) &inbuf[0x0c])) - KERNELBASE; printf("naca is at %08x\n", naca); - + /* fseek to the naca */ fseek(outputVmlinux, ElfHeaderSize + naca, SEEK_SET); if (fread(inbuf, 0x18, 1, outputVmlinux) != 1) { @@ -183,7 +183,7 @@ int main(int argc, char **argv) /* Fill in the values */ *((u_int32_t *) &inbuf[0x0c]) = htonl(ramStartOffs); *((u_int32_t *) &inbuf[0x14]) = htonl(ramPages); - + /* Write out the new naca */ fflush(outputVmlinux); fseek(outputVmlinux, ElfHeaderSize + naca, SEEK_SET); @@ -192,12 +192,12 @@ int main(int argc, char **argv) } printf("RAM Disk of 0x%x pages size is attached to the kernel at offset 0x%08x\n", ramPages, ramStartOffs); - + /* Done */ fclose(outputVmlinux); /* Set permission to executable */ chmod(argv[3], S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH); - + return 0; } diff -prauN linux-2.6.0-test5/arch/ppc/boot/utils/addSystemMap.c wli-2.6.0-test5-bk12-25/arch/ppc/boot/utils/addSystemMap.c --- linux-2.6.0-test5/arch/ppc/boot/utils/addSystemMap.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/boot/utils/addSystemMap.c 2003-09-25 19:15:49.000000000 -0700 @@ -118,7 +118,7 @@ int main(int argc, char **argv) round = actualKernelLen % 4096; roundedKernelLen = actualKernelLen; - if ( round ) + if ( round ) roundedKernelLen += (4096 - round); printf("actual kernel length rounded up to a 4k multiple = %ld\n", roundedKernelLen); diff -prauN linux-2.6.0-test5/arch/ppc/boot/utils/mkbugboot.c wli-2.6.0-test5-bk12-25/arch/ppc/boot/utils/mkbugboot.c --- linux-2.6.0-test5/arch/ppc/boot/utils/mkbugboot.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/boot/utils/mkbugboot.c 2003-09-25 19:15:49.000000000 -0700 @@ -1,8 +1,8 @@ /* * arch/ppc/pp3boot/mkbugboot.c - * - * Makes a Motorola PPCBUG ROM bootable image which can be flashed - * into one of the FLASH banks on a Motorola PowerPlus board. + * + * Makes a Motorola PPCBUG ROM bootable image which can be flashed + * into one of the FLASH banks on a Motorola PowerPlus board. * * Author: Matt Porter * @@ -95,7 +95,7 @@ void write_bugboot_header(int32_t out_fd { uint8_t header_block[HEADER_SIZE]; bug_boot_header_t *bbh = (bug_boot_header_t *)&header_block[0]; - + bzero(header_block, HEADER_SIZE); /* Fill in the PPCBUG ROM boot header */ @@ -142,7 +142,7 @@ int main(int argc, char *argv[]) } /* Get file args */ - + /* kernel image file */ if ((image_fd = open( argv[argptr] , 0)) < 0) exit(-1); @@ -178,7 +178,7 @@ int main(int argc, char *argv[]) bugboot_fd = open(bugbootname, O_RDWR); /* Calculate checksum */ - checksum = calc_checksum(bugboot_fd); + checksum = calc_checksum(bugboot_fd); /* Write out the calculated checksum */ write(bugboot_fd, &checksum, 2); diff -prauN linux-2.6.0-test5/arch/ppc/boot/utils/mkprep.c wli-2.6.0-test5-bk12-25/arch/ppc/boot/utils/mkprep.c --- linux-2.6.0-test5/arch/ppc/boot/utils/mkprep.c 2003-09-08 12:50:16.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/boot/utils/mkprep.c 2003-09-25 19:15:49.000000000 -0700 @@ -96,14 +96,14 @@ int main(int argc, char *argv[]) } /* needs to handle args more elegantly -- but this is a small/simple program */ - + /* check for -pbp */ if ( !strcmp( argv[argptr], "-pbp" ) ) { prep = 1; argptr++; } - + /* check for -asm */ if ( !strcmp( argv[argptr], "-asm" ) ) { @@ -130,7 +130,7 @@ int main(int argc, char *argv[]) /* skip elf header in input file */ /*if ( !prep )*/ lseek(in_fd, elfhdr_size, SEEK_SET); - + /* write prep partition if necessary */ if ( prep ) write_prep_partition( in_fd, out_fd ); @@ -140,7 +140,7 @@ int main(int argc, char *argv[]) write_asm_data( in_fd, out_fd ); else copy_image(in_fd, out_fd); - + return 0; } @@ -151,15 +151,15 @@ void write_prep_partition(int in, int ou dword_t *entry = (dword_t *)&block[0]; dword_t *length = (dword_t *)&block[sizeof(long)]; struct stat info; - + if (fstat(in, &info) < 0) { fprintf(stderr,"info failed\n"); exit(-1); } - + bzero( block, sizeof block ); - + /* set entry point and boot image size skipping over elf header */ #ifdef __i386__ *entry = 0x400/*+65536*/; @@ -172,7 +172,7 @@ void write_prep_partition(int in, int ou /* sets magic number for msdos partition (used by linux) */ block[510] = 0x55; block[511] = 0xAA; - + /* * Build a "PReP" partition table entry in the boot record * - "PReP" may only look at the system_indicator @@ -203,13 +203,13 @@ void write_prep_partition(int in, int ou #if 0 pe->beginning_sector = cpu_to_le32(1); #else - /* This has to be 0 on the PowerStack? */ + /* This has to be 0 on the PowerStack? */ #ifdef __i386__ pe->beginning_sector = 0; #else pe->beginning_sector = cpu_to_le32(0); #endif /* __i386__ */ -#endif +#endif #ifdef __i386__ pe->number_of_sectors = 2*18*80-1; @@ -219,7 +219,7 @@ void write_prep_partition(int in, int ou write( out, block, sizeof(block) ); write( out, entry, sizeof(*entry) ); - write( out, length, sizeof(*length) ); + write( out, length, sizeof(*length) ); /* set file position to 2nd sector where image will be written */ lseek( out, 0x400, SEEK_SET ); } @@ -245,7 +245,7 @@ write_asm_data( int in, int out ) unsigned char *lp; unsigned char buf[SIZE]; unsigned char str[256]; - + write( out, "\t.data\n\t.globl input_data\ninput_data:\n", strlen( "\t.data\n\t.globl input_data\ninput_data:\n" ) ); pos = 0; diff -prauN linux-2.6.0-test5/arch/ppc/kernel/Makefile wli-2.6.0-test5-bk12-25/arch/ppc/kernel/Makefile --- linux-2.6.0-test5/arch/ppc/kernel/Makefile 2003-09-08 12:50:23.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/kernel/Makefile 2003-09-25 19:15:49.000000000 -0700 @@ -15,6 +15,7 @@ extra-$(CONFIG_40x) := head_4xx.o extra-$(CONFIG_44x) := head_44x.o extra-$(CONFIG_8xx) := head_8xx.o extra-$(CONFIG_6xx) += idle_6xx.o +extra-$(CONFIG_POWER4) += idle_power4.o extra-y += vmlinux.lds.s obj-y := entry.o traps.o irq.o idle.o time.o misc.o \ @@ -23,7 +24,7 @@ obj-y := entry.o traps.o irq.o idle.o cputable.o ppc_htab.o obj-$(CONFIG_6xx) += l2cr.o cpu_setup_6xx.o obj-$(CONFIG_MODULES) += module.o ppc_ksyms.o -obj-$(CONFIG_PCI) += pci.o +obj-$(CONFIG_PCI) += pci.o obj-$(CONFIG_PCI) += pci-dma.o obj-$(CONFIG_KGDB) += ppc-stub.o obj-$(CONFIG_SMP) += smp.o diff -prauN linux-2.6.0-test5/arch/ppc/kernel/align.c wli-2.6.0-test5-bk12-25/arch/ppc/kernel/align.c --- linux-2.6.0-test5/arch/ppc/kernel/align.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/kernel/align.c 2003-09-25 19:15:49.000000000 -0700 @@ -21,11 +21,11 @@ struct aligninfo { unsigned char flags; }; -#if defined(CONFIG_4xx) +#if defined(CONFIG_4xx) || defined(CONFIG_POWER4) #define OPCD(inst) (((inst) & 0xFC000000) >> 26) #define RS(inst) (((inst) & 0x03E00000) >> 21) #define RA(inst) (((inst) & 0x001F0000) >> 16) -#define IS_DFORM(code) ((code) >= 32 && (code) <= 55) +#define IS_XFORM(code) ((code) == 31) #endif #define INVALID { 0, 0 } @@ -61,9 +61,9 @@ static struct aligninfo aligninfo[128] = { 4, ST+F+S }, /* 00 0 1010: stfs */ { 8, ST+F }, /* 00 0 1011: stfd */ INVALID, /* 00 0 1100 */ - INVALID, /* 00 0 1101 */ + INVALID, /* 00 0 1101: ld/ldu/lwa */ INVALID, /* 00 0 1110 */ - INVALID, /* 00 0 1111 */ + INVALID, /* 00 0 1111: std/stdu */ { 4, LD+U }, /* 00 1 0000: lwzu */ INVALID, /* 00 1 0001 */ { 4, ST+U }, /* 00 1 0010: stwu */ @@ -80,12 +80,12 @@ static struct aligninfo aligninfo[128] = INVALID, /* 00 1 1101 */ INVALID, /* 00 1 1110 */ INVALID, /* 00 1 1111 */ - INVALID, /* 01 0 0000 */ + INVALID, /* 01 0 0000: ldx */ INVALID, /* 01 0 0001 */ - INVALID, /* 01 0 0010 */ + INVALID, /* 01 0 0010: stdx */ INVALID, /* 01 0 0011 */ INVALID, /* 01 0 0100 */ - INVALID, /* 01 0 0101: lwax?? */ + INVALID, /* 01 0 0101: lwax */ INVALID, /* 01 0 0110 */ INVALID, /* 01 0 0111 */ { 0, LD+HARD }, /* 01 0 1000: lswx */ @@ -96,12 +96,12 @@ static struct aligninfo aligninfo[128] = INVALID, /* 01 0 1101 */ INVALID, /* 01 0 1110 */ INVALID, /* 01 0 1111 */ - INVALID, /* 01 1 0000 */ + INVALID, /* 01 1 0000: ldux */ INVALID, /* 01 1 0001 */ - INVALID, /* 01 1 0010 */ + INVALID, /* 01 1 0010: stdux */ INVALID, /* 01 1 0011 */ INVALID, /* 01 1 0100 */ - INVALID, /* 01 1 0101: lwaux?? */ + INVALID, /* 01 1 0101: lwaux */ INVALID, /* 01 1 0110 */ INVALID, /* 01 1 0111 */ INVALID, /* 01 1 1000 */ @@ -157,9 +157,9 @@ static struct aligninfo aligninfo[128] = { 4, ST+F+S }, /* 11 0 1010: stfsx */ { 8, ST+F }, /* 11 0 1011: stfdx */ INVALID, /* 11 0 1100 */ - INVALID, /* 11 0 1101 */ + INVALID, /* 11 0 1101: lmd */ INVALID, /* 11 0 1110 */ - INVALID, /* 11 0 1111 */ + INVALID, /* 11 0 1111: stmd */ { 4, LD+U }, /* 11 1 0000: lwzux */ INVALID, /* 11 1 0001 */ { 4, ST+U }, /* 11 1 0010: stwux */ @@ -184,7 +184,7 @@ int fix_alignment(struct pt_regs *regs) { int instr, nb, flags; -#if defined(CONFIG_4xx) +#if defined(CONFIG_4xx) || defined(CONFIG_POWER4) int opcode, f1, f2, f3; #endif int i, t; @@ -199,9 +199,11 @@ fix_alignment(struct pt_regs *regs) CHECK_FULL_REGS(regs); -#if defined(CONFIG_4xx) +#if defined(CONFIG_4xx) || defined(CONFIG_POWER4) /* The 4xx-family processors have no DSISR register, * so we emulate it. + * The POWER4 has a DSISR register but doesn't set it on + * an alignment fault. -- paulus */ instr = *((unsigned int *)regs->nip); @@ -209,7 +211,7 @@ fix_alignment(struct pt_regs *regs) reg = RS(instr); areg = RA(instr); - if (IS_DFORM(opcode)) { + if (!IS_XFORM(opcode)) { f1 = 0; f2 = (instr & 0x04000000) >> 26; f3 = (instr & 0x78000000) >> 27; diff -prauN linux-2.6.0-test5/arch/ppc/kernel/asm-offsets.c wli-2.6.0-test5-bk12-25/arch/ppc/kernel/asm-offsets.c --- linux-2.6.0-test5/arch/ppc/kernel/asm-offsets.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/kernel/asm-offsets.c 2003-09-25 19:15:49.000000000 -0700 @@ -52,6 +52,7 @@ main(void) DEFINE(THREAD_VR0, offsetof(struct thread_struct, vr[0])); DEFINE(THREAD_VRSAVE, offsetof(struct thread_struct, vrsave)); DEFINE(THREAD_VSCR, offsetof(struct thread_struct, vscr)); + DEFINE(THREAD_USED_VR, offsetof(struct thread_struct, used_vr)); #endif /* CONFIG_ALTIVEC */ /* Interrupt register frame */ DEFINE(STACK_FRAME_OVERHEAD, STACK_FRAME_OVERHEAD); @@ -101,7 +102,7 @@ main(void) DEFINE(_XER, STACK_FRAME_OVERHEAD+offsetof(struct pt_regs, xer)); DEFINE(_DAR, STACK_FRAME_OVERHEAD+offsetof(struct pt_regs, dar)); DEFINE(_DSISR, STACK_FRAME_OVERHEAD+offsetof(struct pt_regs, dsisr)); - /* The PowerPC 400-class processors have neither the DAR nor the DSISR + /* The PowerPC 400-class & Book-E processors have neither the DAR nor the DSISR * SPRs. Hence, we overload them to hold the similar DEAR and ESR SPRs * for such processors. For critical interrupts we use them to * hold SRR0 and SRR1. diff -prauN linux-2.6.0-test5/arch/ppc/kernel/cputable.c wli-2.6.0-test5-bk12-25/arch/ppc/kernel/cputable.c --- linux-2.6.0-test5/arch/ppc/kernel/cputable.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/kernel/cputable.c 2003-09-25 19:15:49.000000000 -0700 @@ -28,11 +28,13 @@ extern void __setup_cpu_7400(unsigned lo extern void __setup_cpu_7410(unsigned long offset, int cpu_nr, struct cpu_spec* spec); extern void __setup_cpu_745x(unsigned long offset, int cpu_nr, struct cpu_spec* spec); extern void __setup_cpu_power3(unsigned long offset, int cpu_nr, struct cpu_spec* spec); +extern void __setup_cpu_power4(unsigned long offset, int cpu_nr, struct cpu_spec* spec); +extern void __setup_cpu_ppc970(unsigned long offset, int cpu_nr, struct cpu_spec* spec); extern void __setup_cpu_8xx(unsigned long offset, int cpu_nr, struct cpu_spec* spec); extern void __setup_cpu_generic(unsigned long offset, int cpu_nr, struct cpu_spec* spec); #define CLASSIC_PPC (!defined(CONFIG_8xx) && !defined(CONFIG_4xx) && \ - !defined(CONFIG_POWER3)) + !defined(CONFIG_POWER3) && !defined(CONFIG_POWER4)) /* This table only contains "desktop" CPUs, it need to be filled with embedded * ones as well... @@ -44,9 +46,11 @@ extern void __setup_cpu_generic(unsigned * support */ #ifdef CONFIG_ALTIVEC -#define CPU_FTR_ALTIVEC_COMP CPU_FTR_ALTIVEC +#define CPU_FTR_ALTIVEC_COMP CPU_FTR_ALTIVEC +#define PPC_FEATURE_ALTIVEC_COMP PPC_FEATURE_HAS_ALTIVEC #else -#define CPU_FTR_ALTIVEC_COMP 0 +#define CPU_FTR_ALTIVEC_COMP 0 +#define PPC_FEATURE_ALTIVEC_COMP 0 #endif struct cpu_spec cpu_specs[] = { @@ -181,7 +185,7 @@ struct cpu_spec cpu_specs[] = { 32, 32, __setup_cpu_750fx }, - + { /* 740/750 (L2CR bit need fixup for 740) */ 0xffff0000, 0x00080000, "740/750", CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_CAN_DOZE | CPU_FTR_USE_TB | @@ -195,7 +199,7 @@ struct cpu_spec cpu_specs[] = { CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | CPU_FTR_HPTE_TABLE | CPU_FTR_CAN_NAP, - COMMON_PPC | PPC_FEATURE_HAS_ALTIVEC, + COMMON_PPC | PPC_FEATURE_ALTIVEC_COMP, 32, 32, __setup_cpu_7400 }, @@ -204,7 +208,7 @@ struct cpu_spec cpu_specs[] = { CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR | CPU_FTR_TAU | CPU_FTR_ALTIVEC_COMP | CPU_FTR_HPTE_TABLE | CPU_FTR_CAN_NAP, - COMMON_PPC | PPC_FEATURE_HAS_ALTIVEC, + COMMON_PPC | PPC_FEATURE_ALTIVEC_COMP, 32, 32, __setup_cpu_7400 }, @@ -213,7 +217,7 @@ struct cpu_spec cpu_specs[] = { CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR | CPU_FTR_TAU | CPU_FTR_ALTIVEC_COMP | CPU_FTR_HPTE_TABLE | CPU_FTR_CAN_NAP, - COMMON_PPC | PPC_FEATURE_HAS_ALTIVEC, + COMMON_PPC | PPC_FEATURE_ALTIVEC_COMP, 32, 32, __setup_cpu_7410 }, @@ -222,7 +226,7 @@ struct cpu_spec cpu_specs[] = { CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | CPU_FTR_L3CR | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450, - COMMON_PPC | PPC_FEATURE_HAS_ALTIVEC, + COMMON_PPC | PPC_FEATURE_ALTIVEC_COMP, 32, 32, __setup_cpu_745x }, @@ -232,7 +236,7 @@ struct cpu_spec cpu_specs[] = { CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | CPU_FTR_L3CR | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_L3_DISABLE_NAP, - COMMON_PPC | PPC_FEATURE_HAS_ALTIVEC, + COMMON_PPC | PPC_FEATURE_ALTIVEC_COMP, 32, 32, __setup_cpu_745x }, @@ -241,7 +245,7 @@ struct cpu_spec cpu_specs[] = { CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | CPU_FTR_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | CPU_FTR_L3CR | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | CPU_FTR_NAP_DISABLE_L2_PR, - COMMON_PPC | PPC_FEATURE_HAS_ALTIVEC, + COMMON_PPC | PPC_FEATURE_ALTIVEC_COMP, 32, 32, __setup_cpu_745x }, @@ -250,7 +254,7 @@ struct cpu_spec cpu_specs[] = { CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | CPU_FTR_L3CR | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | CPU_FTR_HAS_HIGH_BATS, - COMMON_PPC | PPC_FEATURE_HAS_ALTIVEC, + COMMON_PPC | PPC_FEATURE_ALTIVEC_COMP, 32, 32, __setup_cpu_745x }, @@ -260,7 +264,7 @@ struct cpu_spec cpu_specs[] = { CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | CPU_FTR_L3CR | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_L3_DISABLE_NAP | CPU_FTR_HAS_HIGH_BATS, - COMMON_PPC | PPC_FEATURE_HAS_ALTIVEC, + COMMON_PPC | PPC_FEATURE_ALTIVEC_COMP, 32, 32, __setup_cpu_745x }, @@ -270,7 +274,7 @@ struct cpu_spec cpu_specs[] = { CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | CPU_FTR_L3CR | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_HAS_HIGH_BATS, - COMMON_PPC | PPC_FEATURE_HAS_ALTIVEC, + COMMON_PPC | PPC_FEATURE_ALTIVEC_COMP, 32, 32, __setup_cpu_745x }, @@ -280,7 +284,7 @@ struct cpu_spec cpu_specs[] = { CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | CPU_FTR_L3CR | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_HAS_HIGH_BATS, - COMMON_PPC | PPC_FEATURE_HAS_ALTIVEC, + COMMON_PPC | PPC_FEATURE_ALTIVEC_COMP, 32, 32, __setup_cpu_745x }, @@ -298,7 +302,7 @@ struct cpu_spec cpu_specs[] = { 32, 32, __setup_cpu_generic }, -#endif /* CLASSIC_PPC */ +#endif /* CLASSIC_PPC */ #ifdef CONFIG_PPC64BRIDGE { /* Power3 */ 0xffff0000, 0x00400000, "Power3 (630)", @@ -328,7 +332,24 @@ struct cpu_spec cpu_specs[] = { 128, 128, __setup_cpu_power3 }, -#endif /* CONFIG_PPC64BRIDGE */ +#endif /* CONFIG_PPC64BRIDGE */ +#ifdef CONFIG_POWER4 + { /* Power4 */ + 0xffff0000, 0x00350000, "Power4", + CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE, + COMMON_PPC | PPC_FEATURE_64, + 128, 128, + __setup_cpu_power4 + }, + { /* PPC970 */ + 0xffff0000, 0x00390000, "PPC970", + CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE | + CPU_FTR_ALTIVEC_COMP | CPU_FTR_CAN_NAP, + COMMON_PPC | PPC_FEATURE_64 | PPC_FEATURE_ALTIVEC_COMP, + 128, 128, + __setup_cpu_ppc970 + }, +#endif /* CONFIG_POWER4 */ #ifdef CONFIG_8xx { /* 8xx */ 0xffff0000, 0x00500000, "8xx", diff -prauN linux-2.6.0-test5/arch/ppc/kernel/entry.S wli-2.6.0-test5-bk12-25/arch/ppc/kernel/entry.S --- linux-2.6.0-test5/arch/ppc/kernel/entry.S 2003-09-08 12:50:23.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/kernel/entry.S 2003-09-25 19:15:49.000000000 -0700 @@ -1,5 +1,5 @@ /* - * PowerPC version + * PowerPC version * Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org) * Rewritten by Cort Dougan (cort@fsmlabs.com) for PReP * Copyright (C) 1996 Cort Dougan @@ -16,7 +16,7 @@ * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version * 2 of the License, or (at your option) any later version. - * + * */ #include @@ -433,7 +433,7 @@ ppc_clone: * * The code which creates the new task context is in 'copy_thread' * in arch/ppc/kernel/process.c - */ + */ _GLOBAL(_switch) stwu r1,-INT_FRAME_SIZE(r1) mflr r0 @@ -818,7 +818,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_601) .comm ee_restarts,4 /* - * PROM code for specific machines follows. Put it + * PROM code for specific machines follows. Put it * here so it's easy to add arch-specific sections later. * -- Cort */ diff -prauN linux-2.6.0-test5/arch/ppc/kernel/head.S wli-2.6.0-test5-bk12-25/arch/ppc/kernel/head.S --- linux-2.6.0-test5/arch/ppc/kernel/head.S 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/kernel/head.S 2003-09-25 19:15:49.000000000 -0700 @@ -1,5 +1,5 @@ /* - * PowerPC version + * PowerPC version * Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org) * * Rewritten by Cort Dougan (cort@cs.nmt.edu) for PReP @@ -66,7 +66,7 @@ mtspr DBAT##n##U,RA; \ mtspr DBAT##n##L,RB; \ 1: -#endif /* CONFIG_PPC64BRIDGE */ +#endif /* CONFIG_PPC64BRIDGE */ .text .stabs "arch/ppc/kernel/",N_SO,0,0,0f @@ -82,7 +82,7 @@ _stext: .text .globl _start _start: - /* + /* * These are here for legacy reasons, the kernel used to * need to look like a coff function entry for the pmac * but we're always started by some kind of bootloader now. @@ -140,16 +140,28 @@ __start: mr r28,r6 mr r27,r7 li r24,0 /* cpu # */ + +#ifdef CONFIG_POWER4 +/* + * On the PPC970, we have to turn off real-mode cache inhibit + * early, before we first turn the MMU off. + */ + mfspr r0,SPRN_PVR + srwi r0,r0,16 + cmpwi r0,0x39 + beql ppc970_setup_hid +#endif /* CONFIG_POWER4 */ + /* * early_init() does the early machine identification and does * the necessary low-level setup and clears the BSS * -- Cort - */ + */ bl early_init #ifdef CONFIG_APUS -/* On APUS the __va/__pa constants need to be set to the correct - * values before continuing. +/* On APUS the __va/__pa constants need to be set to the correct + * values before continuing. */ mr r4,r30 bl fix_mem_constants @@ -160,6 +172,7 @@ __start: */ bl mmu_off __after_mmu_off: +#ifndef CONFIG_POWER4 bl clear_bats bl flush_tlbs @@ -167,6 +180,28 @@ __after_mmu_off: #if !defined(CONFIG_APUS) && defined(CONFIG_BOOTX_TEXT) bl setup_disp_bat #endif +#else /* CONFIG_POWER4 */ +/* + * Load up the SDR1 and segment register values now + * since we don't have the BATs. + * Also make sure we are running in 32-bit mode. + */ + bl reloc_offset + addis r14,r3,_SDR1@ha /* get the value from _SDR1 */ + lwz r14,_SDR1@l(r14) /* assume hash table below 4GB */ + mtspr SDR1,r14 + slbia + lis r4,0x2000 /* set pseudo-segment reg 12 */ + ori r5,r4,0x0ccc + mtsr 12,r5 + ori r4,r4,0x0888 /* set pseudo-segment reg 8 */ + mtsr 8,r4 /* (for access to serial port) */ + mfmsr r0 + clrldi r0,r0,1 + sync + mtmsr r0 + isync +#endif /* CONFIG_POWER4 */ /* * Call setup_cpu for CPU 0 and initialize 6xx Idle @@ -178,8 +213,12 @@ __after_mmu_off: bl reloc_offset bl init_idle_6xx #endif /* CONFIG_6xx */ +#ifdef CONFIG_POWER4 + bl reloc_offset + bl init_idle_power4 +#endif /* CONFIG_POWER4 */ + - #ifndef CONFIG_APUS /* * We need to run with _start at physical address 0. @@ -683,12 +722,21 @@ DataStoreTLBMiss: mtcrf 0x80,r3 rfi +#ifndef CONFIG_ALTIVEC +#define AltivecAssistException UnknownException +#endif EXCEPTION(0x1300, Trap_13, InstructionBreakpoint, EXC_XFER_EE) EXCEPTION(0x1400, SMI, SMIException, EXC_XFER_EE) EXCEPTION(0x1500, Trap_15, UnknownException, EXC_XFER_EE) +#ifdef CONFIG_POWER4 EXCEPTION(0x1600, Trap_16, UnknownException, EXC_XFER_EE) + EXCEPTION(0x1700, Trap_17, AltivecAssistException, EXC_XFER_EE) + EXCEPTION(0x1800, Trap_18, TAUException, EXC_XFER_STD) +#else /* !CONFIG_POWER4 */ + EXCEPTION(0x1600, Trap_16, AltivecAssistException, EXC_XFER_EE) EXCEPTION(0x1700, Trap_17, TAUException, EXC_XFER_STD) EXCEPTION(0x1800, Trap_18, UnknownException, EXC_XFER_EE) +#endif /* CONFIG_POWER4 */ EXCEPTION(0x1900, Trap_19, UnknownException, EXC_XFER_EE) EXCEPTION(0x1a00, Trap_1a, UnknownException, EXC_XFER_EE) EXCEPTION(0x1b00, Trap_1b, UnknownException, EXC_XFER_EE) @@ -915,7 +963,9 @@ load_up_altivec: /* enable use of AltiVec after return */ oris r9,r9,MSR_VEC@h mfspr r5,SPRG3 /* current task's THREAD (phys) */ + li r4,1 li r10,THREAD_VSCR + stw r4,THREAD_USED_VR(r5) lvx vr0,r10,r5 mtvscr vr0 REST_32VR(0,r10,r5) @@ -1101,7 +1151,7 @@ fix_mem_constants: /* * Map the memory where the exception handlers will - * be copied to when hash constants have been patched. + * be copied to when hash constants have been patched. */ #ifdef CONFIG_APUS_FAST_EXCEPT lis r8,0xfff0 @@ -1197,6 +1247,10 @@ __secondary_start: lis r3,-KERNELBASE@h bl init_idle_6xx #endif /* CONFIG_6xx */ +#ifdef CONFIG_POWER4 + lis r3,-KERNELBASE@h + bl init_idle_power4 +#endif /* CONFIG_POWER4 */ /* get current_thread_info and current */ lis r1,secondary_ti@ha @@ -1224,6 +1278,7 @@ __secondary_start: /* enable MMU and jump to start_secondary */ li r4,MSR_KERNEL + FIX_SRR1(r4,r5) lis r3,start_secondary@h ori r3,r3,start_secondary@l mtspr SRR0,r3 @@ -1238,6 +1293,10 @@ __secondary_start: */ _GLOBAL(__setup_cpu_power3) blr +_GLOBAL(__setup_cpu_power4) + blr +_GLOBAL(__setup_cpu_ppc970) + blr _GLOBAL(__setup_cpu_generic) blr @@ -1245,6 +1304,13 @@ _GLOBAL(__setup_cpu_generic) _GLOBAL(__save_cpu_setup) blr _GLOBAL(__restore_cpu_setup) +#ifdef CONFIG_POWER4 + /* turn off real-mode cache inhibit on the PPC970 */ + mfspr r0,SPRN_PVR + srwi r0,r0,16 + cmpwi r0,0x39 + beq ppc970_setup_hid +#endif blr #endif /* CONFIG_6xx */ @@ -1254,6 +1320,11 @@ _GLOBAL(__restore_cpu_setup) * IR=0 and DR=0. */ load_up_mmu: + sync /* Force all PTE updates to finish */ + isync + tlbia /* Clear all TLB entries */ + sync /* wait for tlbia/tlbie to finish */ + TLBSYNC /* ... on all CPUs */ /* Load the SDR1 register (hash table base & size) */ lis r6,_SDR1@ha tophys(r6,r6) @@ -1272,6 +1343,7 @@ load_up_mmu: addi r3,r3,0x111 /* increment VSID */ addis r4,r4,0x1000 /* address of next segment */ bdnz 3b +#ifndef CONFIG_POWER4 /* Load the BAT registers with the values set up by MMU_init. MMU_init takes care of whether we're on a 601 or not. */ mfpvr r3 @@ -1284,6 +1356,7 @@ load_up_mmu: LOAD_BAT(1,r3,r4,r5) LOAD_BAT(2,r3,r4,r5) LOAD_BAT(3,r3,r4,r5) +#endif /* CONFIG_POWER4 */ blr /* @@ -1347,15 +1420,9 @@ start_here: SYNC RFI /* Load up the kernel context */ -2: - sync /* Force all PTE updates to finish */ - ISYNC_601 - tlbia /* Clear all TLB entries */ - sync /* wait for tlbia/tlbie to finish */ - TLBSYNC /* ... on all CPUs */ - - bl load_up_mmu +2: bl load_up_mmu +#ifdef CONFIG_BDI_SWITCH /* Add helper information for the Abatron bdiGDB debugger. * We do this here because we know the mmu is disabled, and * will be enabled for real in just a few instructions. @@ -1367,6 +1434,7 @@ start_here: ori r6, r6, swapper_pg_dir@l tophys(r5, r5) stw r6, 0(r5) +#endif /* CONFIG_BDI_SWITCH */ /* Now turn on the MMU for real! */ li r4,MSR_KERNEL @@ -1414,13 +1482,13 @@ END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC) isync blr -/* +/* * An undocumented "feature" of 604e requires that the v bit * be cleared before changing BAT values. * * Also, newer IBM firmware does not clear bat3 and 4 so * this makes sure it's done. - * -- Cort + * -- Cort */ clear_bats: li r10,0 @@ -1491,6 +1559,7 @@ mmu_off: sync RFI +#ifndef CONFIG_POWER4 /* * Use the first pair of BAT registers to map the 1st 16MB * of RAM to KERNELBASE. From this point on we can't safely @@ -1564,6 +1633,41 @@ setup_disp_bat: #endif /* !defined(CONFIG_APUS) && defined(CONFIG_BOOTX_TEXT) */ +#else /* CONFIG_POWER4 */ +ppc970_setup_hid: + li r0,0 + sync + mtspr 0x3f4,r0 + isync + sync + mtspr 0x3f6,r0 + isync + mfspr r0,SPRN_HID0 + li r11,1 /* clear DOZE, NAP and SLEEP */ + rldimi r0,r11,52,8 /* set DPM */ + mtspr SPRN_HID0,r0 + mfspr r0,SPRN_HID0 + mfspr r0,SPRN_HID0 + mfspr r0,SPRN_HID0 + mfspr r0,SPRN_HID0 + mfspr r0,SPRN_HID0 + mfspr r0,SPRN_HID0 + sync + isync + mfspr r0,SPRN_HID1 + li r11,0x1200 /* enable i-fetch cacheability */ + sldi r11,r11,44 /* and prefetch */ + or r0,r0,r11 + mtspr SPRN_HID1,r0 + mtspr SPRN_HID1,r0 + isync + li r0,0 + sync + mtspr 0x137,0 + isync + blr +#endif /* CONFIG_POWER4 */ + #ifdef CONFIG_8260 /* Jump into the system reset for the rom. * We first disable the MMU, and then jump to the ROM reset address. diff -prauN linux-2.6.0-test5/arch/ppc/kernel/head_44x.S wli-2.6.0-test5-bk12-25/arch/ppc/kernel/head_44x.S --- linux-2.6.0-test5/arch/ppc/kernel/head_44x.S 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/kernel/head_44x.S 2003-09-25 19:15:49.000000000 -0700 @@ -33,7 +33,7 @@ li r26,vector_label@l; \ mtspr SPRN_IVOR##vector_number,r26; \ sync - + /* As with the other PowerPC ports, it is expected that when code * execution begins here, the following registers contain valid, yet * optional, information: @@ -44,7 +44,7 @@ * r6 - Start of kernel command line string (e.g. "mem=128") * r7 - End of kernel command line string * - */ + */ .text _GLOBAL(_stext) _GLOBAL(_start) @@ -102,7 +102,7 @@ _GLOBAL(_start) oris r3,r3,PPC44x_MMUCR_STS@h /* Set STS=1 */ wmmucr: mtspr SPRN_MMUCR,r3 /* Put MMUCR */ sync - + bl invstr /* Find our address */ invstr: mflr r5 /* Make it accessible */ tlbsx r23,0,r5 /* Find entry we are in */ @@ -190,7 +190,7 @@ skpinv: addi r4,r4,1 /* Increment */ * are used for polled operation. */ /* pageid fields */ - lis r3,0xe000 + lis r3,0xe000 ori r3,r3,(PPC44x_TLB_VALID | PPC44x_TLB_PAGESZ(PPC44x_PAGESZ_256M)) /* xlat fields */ @@ -243,7 +243,7 @@ skpinv: addi r4,r4,1 /* Increment */ /* * This is where the main kernel code starts. - */ + */ /* ptr to current */ lis r2,init_task@h @@ -299,7 +299,7 @@ skpinv: addi r4,r4,1 /* Increment */ * this case we handle interrupts in the kernel virtual address * space. * - * Interrupt vectors are dynamically placed relative to the + * Interrupt vectors are dynamically placed relative to the * interrupt prefix as determined by the address of interrupt_base. * The interrupt vectors offsets are programmed using the labels * for each interrupt vector entry. @@ -525,7 +525,7 @@ interrupt_base: rlwimi r12, r10, 23, 20, 28 /* Compute pte address */ lwz r11, 4(r12) /* Get pte entry */ - + andi. r13, r11, _PAGE_RW /* Is it writeable? */ beq 2f /* Bail if not */ @@ -888,7 +888,7 @@ finish_tlb_load: ori r13, r13, tlb_44x_hwater@l lwz r11, 0(r13) - + /* Increment, rollover, and store TLB index */ addi r14, r14, 1 cmpw 0, r14, r11 /* reserve entries 62-63 for kernel */ @@ -971,7 +971,7 @@ _GLOBAL(giveup_fpu) * extern void abort(void) * * At present, this routine just applies a system reset. - */ + */ _GLOBAL(abort) mfspr r13,SPRN_DBCR0 oris r13,r13,DBCR_RST(DBCR_RST_SYSTEM)@h diff -prauN linux-2.6.0-test5/arch/ppc/kernel/head_4xx.S wli-2.6.0-test5-bk12-25/arch/ppc/kernel/head_4xx.S --- linux-2.6.0-test5/arch/ppc/kernel/head_4xx.S 2003-09-08 12:50:40.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/kernel/head_4xx.S 2003-09-25 19:15:49.000000000 -0700 @@ -53,7 +53,7 @@ * r7 - End of kernel command line string * * This is all going to change RSN when we add bi_recs....... -- Dan - */ + */ .text _GLOBAL(_stext) _GLOBAL(_start) @@ -121,7 +121,7 @@ _GLOBAL(crit_srr1) * Note that we have to have decremented r1 before we write to any fields * of the exception frame, since a critical interrupt could occur at any * time, and it will write to the area immediately below the current r1. - */ + */ #define NORMAL_EXCEPTION_PROLOG \ mtspr SPRN_SPRG0,r10; /* save two registers to work with */\ mtspr SPRN_SPRG1,r11; \ @@ -666,7 +666,7 @@ label: mr r11, r12 b finish_tlb_load - + 5: /* The bailout. Restore registers to pre-exception conditions * and call the heavyweights to help us out. @@ -771,7 +771,7 @@ DataAccess: * have vectors from 0x2100 through 0x2F00 defined, but marked as reserved. * However, for the 4xx-series processors these are neither defined nor * reserved. - */ + */ /* Damn, I came up one instruction too many to fit into the * exception space :-). Both the instruction and data TLB @@ -838,7 +838,7 @@ _GLOBAL(giveup_fpu) blr /* This is where the main kernel code starts. - */ + */ start_here: /* ptr to current */ @@ -916,7 +916,7 @@ start_here: */ initial_mmu: tlbia /* Invalidate all TLB entries */ - isync + isync /* We should still be executing code at physical address 0x0000xxxx * at this point. However, start_here is at virtual address @@ -953,7 +953,7 @@ initial_mmu: tlbwe r3,r0,TLB_TAG /* Load the tag portion of the entry */ #if defined(CONFIG_SERIAL_TEXT_DEBUG) && defined(SERIAL_DEBUG_IO_BASE) - + /* Load a TLB entry for the UART, so that ppc4xx_progress() can use * the UARTs nice and early. We use a 4k real==virtual mapping. */ @@ -1012,7 +1012,7 @@ _GLOBAL(empty_zero_page) _GLOBAL(swapper_pg_dir) .space 4096 - + /* Stack for handling critical exceptions from kernel mode */ .section .bss critical_stack_bottom: diff -prauN linux-2.6.0-test5/arch/ppc/kernel/head_8xx.S wli-2.6.0-test5-bk12-25/arch/ppc/kernel/head_8xx.S --- linux-2.6.0-test5/arch/ppc/kernel/head_8xx.S 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/kernel/head_8xx.S 2003-09-25 19:15:49.000000000 -0700 @@ -1,7 +1,7 @@ /* * arch/ppc/kernel/except_8xx.S * - * PowerPC version + * PowerPC version * Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org) * Rewritten by Cort Dougan (cort@cs.nmt.edu) for PReP * Copyright (C) 1996 Cort Dougan @@ -18,7 +18,7 @@ * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version * 2 of the License, or (at your option) any later version. - * + * */ #include @@ -77,7 +77,7 @@ _start: * and the CCR at memory location 0.....Someday I'll fix this..... * -- Dan */ - + .globl __start __start: mr r31,r3 /* save parameters */ @@ -166,7 +166,7 @@ label: \ STD_EXCEPTION(0x100, Reset, __secondary_start_psurge) #else STD_EXCEPTION(0x100, Reset, UnknownException) -#endif +#endif /* Machine check */ STD_EXCEPTION(0x200, MachineCheck, MachineCheckException) @@ -218,7 +218,7 @@ HardwareInterrupt: do_IRQ_intercept: .long do_IRQ; .long ret_from_intercept - + /* Alignment exception */ . = 0x600 @@ -516,20 +516,20 @@ DataTLBError: andis. r21, r20, 0x0200 /* If set, indicates store op */ beq 2f - /* The EA of a data TLB miss is automatically stored in the MD_EPN - * register. The EA of a data TLB error is automatically stored in - * the DAR, but not the MD_EPN register. We must copy the 20 most - * significant bits of the EA from the DAR to MD_EPN before we - * start walking the page tables. We also need to copy the CASID + /* The EA of a data TLB miss is automatically stored in the MD_EPN + * register. The EA of a data TLB error is automatically stored in + * the DAR, but not the MD_EPN register. We must copy the 20 most + * significant bits of the EA from the DAR to MD_EPN before we + * start walking the page tables. We also need to copy the CASID * value from the M_CASID register. - * Addendum: The EA of a data TLB error is _supposed_ to be stored - * in DAR, but it seems that this doesn't happen in some cases, such - * as when the error is due to a dcbi instruction to a page with a - * TLB that doesn't have the changed bit set. In such cases, there - * does not appear to be any way to recover the EA of the error - * since it is neither in DAR nor MD_EPN. As a workaround, the - * _PAGE_HWWRITE bit is set for all kernel data pages when the PTEs - * are initialized in mapin_ram(). This will avoid the problem, + * Addendum: The EA of a data TLB error is _supposed_ to be stored + * in DAR, but it seems that this doesn't happen in some cases, such + * as when the error is due to a dcbi instruction to a page with a + * TLB that doesn't have the changed bit set. In such cases, there + * does not appear to be any way to recover the EA of the error + * since it is neither in DAR nor MD_EPN. As a workaround, the + * _PAGE_HWWRITE bit is set for all kernel data pages when the PTEs + * are initialized in mapin_ram(). This will avoid the problem, * assuming we only use the dcbi instruction on kernel addresses. */ mfspr r20, DAR @@ -901,7 +901,7 @@ set_dec_cpu6: SYNC blr #endif - + /* * We put a few things here that have to be page-aligned. * This stuff goes at the beginning of the data segment, @@ -916,12 +916,12 @@ empty_zero_page: .globl swapper_pg_dir swapper_pg_dir: - .space 4096 + .space 4096 /* * This space gets a copy of optional info passed to us by the bootstrap * Used to pass parameters into the kernel like root=/dev/sda1, etc. - */ + */ .globl cmd_line cmd_line: .space 512 diff -prauN linux-2.6.0-test5/arch/ppc/kernel/idle.c wli-2.6.0-test5-bk12-25/arch/ppc/kernel/idle.c --- linux-2.6.0-test5/arch/ppc/kernel/idle.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/kernel/idle.c 2003-09-25 19:15:49.000000000 -0700 @@ -64,5 +64,5 @@ int cpu_idle(void) ppc_md.idle(); else default_idle(); - return 0; + return 0; } diff -prauN linux-2.6.0-test5/arch/ppc/kernel/idle_power4.S wli-2.6.0-test5-bk12-25/arch/ppc/kernel/idle_power4.S --- linux-2.6.0-test5/arch/ppc/kernel/idle_power4.S 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/ppc/kernel/idle_power4.S 2003-09-25 19:15:49.000000000 -0700 @@ -0,0 +1,115 @@ +/* + * This file contains the power_save function for 6xx & 7xxx CPUs + * rewritten in assembler + * + * Warning ! This code assumes that if your machine has a 750fx + * it will have PLL 1 set to low speed mode (used during NAP/DOZE). + * if this is not the case some additional changes will have to + * be done to check a runtime var (a bit like powersave-nap) + * + * 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 of the License, or (at your option) any later version. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#undef DEBUG + + .text + +/* + * Init idle, called at early CPU setup time from head.S for each CPU + * Make sure no rest of NAP mode remains in HID0, save default + * values for some CPU specific registers. Called with r24 + * containing CPU number and r3 reloc offset + */ + .globl init_idle_power4 +init_idle_power4: +BEGIN_FTR_SECTION + mfspr r4,SPRN_HID0 + rlwinm r4,r4,0,10,8 /* Clear NAP */ + mtspr SPRN_HID0, r4 +END_FTR_SECTION_IFSET(CPU_FTR_CAN_NAP) + blr + +/* + * Here is the power_save_6xx function. This could eventually be + * split into several functions & changing the function pointer + * depending on the various features. + */ + .globl power4_idle +power4_idle: + /* Check if we can nap or doze, put HID0 mask in r3 + */ + lis r3, 0 +BEGIN_FTR_SECTION + /* We must dynamically check for the NAP feature as it + * can be cleared by CPU init after the fixups are done + */ + lis r4,cur_cpu_spec@ha + lwz r4,cur_cpu_spec@l(r4) + lwz r4,CPU_SPEC_FEATURES(r4) + andi. r0,r4,CPU_FTR_CAN_NAP + beq 1f + /* Now check if user or arch enabled NAP mode */ + lis r4,powersave_nap@ha + lwz r4,powersave_nap@l(r4) + cmpi 0,r4,0 + beq 1f + lis r3,HID0_NAP@h +1: +END_FTR_SECTION_IFSET(CPU_FTR_CAN_NAP) + cmpi 0,r3,0 + beqlr + + /* Clear MSR:EE */ + mfmsr r7 + rlwinm r0,r7,0,17,15 + mtmsr r0 + + /* Check current_thread_info()->flags */ + rlwinm r4,r1,0,0,18 + lwz r4,TI_FLAGS(r4) + andi. r0,r4,_TIF_NEED_RESCHED + beq 1f + mtmsr r7 /* out of line this ? */ + blr +1: + /* Go to NAP now */ + mfspr r4,SPRN_HID0 + lis r5,(HID0_NAP|HID0_SLEEP)@h + andc r4,r4,r5 + or r4,r4,r3 + oris r4,r4,HID0_DPM@h /* that should be done once for all */ + mtspr SPRN_HID0,r4 + mfspr r0,SPRN_HID0 + mfspr r0,SPRN_HID0 + mfspr r0,SPRN_HID0 + mfspr r0,SPRN_HID0 + mfspr r0,SPRN_HID0 + mfspr r0,SPRN_HID0 +BEGIN_FTR_SECTION + DSSALL + sync +END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC) + ori r7,r7,MSR_EE /* Could be ommited (already set) */ + oris r7,r7,MSR_POW@h + sync + isync + mtmsr r7 + isync + sync + blr + + .globl powersave_nap +powersave_nap: + .long 0 diff -prauN linux-2.6.0-test5/arch/ppc/kernel/irq.c wli-2.6.0-test5-bk12-25/arch/ppc/kernel/irq.c --- linux-2.6.0-test5/arch/ppc/kernel/irq.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/kernel/irq.c 2003-09-25 19:15:49.000000000 -0700 @@ -10,7 +10,7 @@ * Adapted for Power Macintosh by Paul Mackerras * Copyright (C) 1996 Paul Mackerras (paulus@cs.anu.edu.au) * Amiga/APUS changes by Jesper Skov (jskov@cygnus.co.uk). - * + * * This file contains the code used by various IRQ handling routines: * asking for different IRQ's should be done through these routines * instead of just grabbing them. Thus setups with different IRQ numbers @@ -72,7 +72,7 @@ irq_desc_t irq_desc[NR_IRQS] __cacheline .lock = SPIN_LOCK_UNLOCKED } }; - + int ppc_spurious_interrupts = 0; struct irqaction *ppc_irq_action[NR_IRQS]; unsigned long ppc_cached_irq_mask[NR_MASK_WORDS]; @@ -228,27 +228,27 @@ int request_irq(unsigned int irq, dump_stack(); return 0; } - + action = (struct irqaction *) irq_kmalloc(sizeof(struct irqaction), GFP_KERNEL); if (!action) { printk(KERN_ERR "irq_kmalloc() failed for irq %d !\n", irq); return -ENOMEM; } - + action->handler = handler; - action->flags = irqflags; + action->flags = irqflags; action->mask = 0; action->name = devname; action->dev_id = dev_id; action->next = NULL; - + retval = setup_irq(irq, action); if (retval) { kfree(action); return retval; } - + return 0; } @@ -256,9 +256,9 @@ int request_irq(unsigned int irq, * Generic enable/disable code: this just calls * down into the PIC-specific version for the actual * hardware disable after having gotten the irq - * controller lock. + * controller lock. */ - + /** * disable_irq_nosync - disable an irq without waiting * @irq: Interrupt to disable @@ -296,7 +296,7 @@ void disable_irq_nosync(unsigned int irq * * This function may be called - with care - from IRQ context. */ - + void disable_irq(unsigned int irq) { disable_irq_nosync(irq); @@ -312,7 +312,7 @@ void disable_irq(unsigned int irq) * * This function may be called from IRQ context. */ - + void enable_irq(unsigned int irq) { irq_desc_t *desc = irq_desc + irq; @@ -356,16 +356,16 @@ int show_interrupts(struct seq_file *p, action = irq_desc[i].action; if ( !action || !action->handler ) goto skip; - seq_printf(p, "%3d: ", i); + seq_printf(p, "%3d: ", i); #ifdef CONFIG_SMP for (j = 0; j < NR_CPUS; j++) if (cpu_online(j)) seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]); -#else +#else seq_printf(p, "%10u ", kstat_irqs(i)); #endif /* CONFIG_SMP */ - if (irq_desc[i].handler) + if (irq_desc[i].handler) seq_printf(p, " %s ", irq_desc[i].handler->typename); else seq_puts(p, " None "); @@ -390,7 +390,7 @@ skip: /* should this be per processor send/receive? */ seq_printf(p, "IPI (recv/sent): %10u/%u\n", atomic_read(&ipi_recv), atomic_read(&ipi_sent)); -#endif +#endif seq_printf(p, "BAD: %10u\n", ppc_spurious_interrupts); return 0; } @@ -425,7 +425,7 @@ void ppc_irq_dispatch_handler(struct pt_ kstat_this_cpu.irqs[irq]++; spin_lock(&desc->lock); - ack_irq(irq); + ack_irq(irq); /* REPLAY is when Linux resends an IRQ that was dropped earlier WAITING is used by probe to mark irqs that are being tested @@ -482,7 +482,7 @@ void ppc_irq_dispatch_handler(struct pt_ spin_unlock(&desc->lock); handle_irq_event(irq, regs, action); spin_lock(&desc->lock); - + if (likely(!(desc->status & IRQ_PENDING))) break; desc->status &= ~IRQ_PENDING; diff -prauN linux-2.6.0-test5/arch/ppc/kernel/l2cr.S wli-2.6.0-test5-bk12-25/arch/ppc/kernel/l2cr.S --- linux-2.6.0-test5/arch/ppc/kernel/l2cr.S 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/kernel/l2cr.S 2003-09-25 19:15:49.000000000 -0700 @@ -1,17 +1,17 @@ /* L2CR functions Copyright © 1997-1998 by PowerLogix R & D, Inc. - + 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 of the License, 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, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. @@ -36,7 +36,7 @@ several months. The L2CR is similar, but I'm going to assume the user of this functions knows what they are doing. - + Author: Terry Greeniaus (tgree@phys.ualberta.ca) Please e-mail updates to this file to me, thanks! */ @@ -47,7 +47,7 @@ #include /* Usage: - + When setting the L2CR register, you must do a few special things. If you are enabling the cache, you must perform a global invalidate. If you are disabling the cache, you must @@ -104,7 +104,7 @@ BEGIN_FTR_SECTION END_FTR_SECTION_IFCLR(CPU_FTR_L2CR) mflr r9 - + /* Stop DST streams */ BEGIN_FTR_SECTION DSSALL @@ -134,10 +134,10 @@ END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC) mr r5,r3 bl __flush_disable_L1 mr r3,r5 - + /* Get the current enable bit of the L2CR into r4 */ mfspr r4,L2CR - + /* Tweak some bits */ rlwinm r5,r3,0,0,0 /* r5 contains the new enable bit */ rlwinm r3,r3,0,11,9 /* Turn off the invalidate bit */ @@ -152,7 +152,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC) * the size of the L2 cache plus the size of the L1 cache, but 4MB will * cover everything just to be safe). */ - + /**** Might be a good idea to set L2DO here - to prevent instructions from getting into the cache. But since we invalidate the next time we enable the cache it doesn't really matter. @@ -170,7 +170,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC) addi r4,r4,32 /* Go to start of next cache line */ bdnz 1b isync - + /* Now, flush the first 4MB of memory */ lis r4,0x0002 mtctr r4 @@ -198,7 +198,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC) 21: sync isync b 22b - + 23: /* Perform a global invalidation */ oris r3,r3,0x0020 @@ -220,12 +220,12 @@ END_FTR_SECTION_IFSET(CPU_FTR_SPEC7450) 3: mfspr r3,L2CR rlwinm. r4,r3,0,31,31 bne 3b - + 11: rlwinm r3,r3,0,11,9 /* Turn off the L2I bit */ sync mtspr L2CR,r3 sync - + /* See if we need to enable the cache */ cmplwi r5,0 beq 4f @@ -264,7 +264,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_L2CR) * Here is a similar routine for dealing with the L3 cache * on the 745x family of chips */ - + _GLOBAL(_set_L3CR) /* Make sure this is a 745x chip */ BEGIN_FTR_SECTION @@ -283,10 +283,10 @@ END_FTR_SECTION_IFCLR(CPU_FTR_L3CR) /* Stop DST streams */ DSSALL sync - + /* Get the current enable bit of the L3CR into r4 */ mfspr r4,SPRN_L3CR - + /* Tweak some bits */ rlwinm r5,r3,0,0,0 /* r5 contains the new enable bit */ rlwinm r3,r3,0,22,20 /* Turn off the invalidate bit */ @@ -298,7 +298,7 @@ END_FTR_SECTION_IFCLR(CPU_FTR_L3CR) /* Flush the cache. */ - + /* TODO: use HW flush assist */ lis r4,0x0008 @@ -309,7 +309,7 @@ END_FTR_SECTION_IFCLR(CPU_FTR_L3CR) dcbf 0,r4 addi r4,r4,32 /* Go to start of next cache line */ bdnz 1b - + 2: /* Set up the L3CR configuration bits (and switch L3 off) */ sync @@ -327,7 +327,7 @@ END_FTR_SECTION_IFCLR(CPU_FTR_L3CR) li r0,256 mtctr r0 1: bdnz 1b - + /* Perform a global invalidation */ ori r3,r3,0x0400 sync @@ -349,7 +349,7 @@ END_FTR_SECTION_IFCLR(CPU_FTR_L3CR) li r0,256 mtctr r0 1: bdnz 1b - + /* See if we need to enable the cache */ cmplwi r5,0 beq 4f @@ -389,13 +389,13 @@ END_FTR_SECTION_IFSET(CPU_FTR_L3CR) */ .globl __flush_disable_L1 __flush_disable_L1: - + /* Stop pending alitvec streams and memory accesses */ BEGIN_FTR_SECTION DSSALL END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC) sync - + /* Load counter to 0x1000 cache lines (128k) and * load cache with datas */ @@ -426,7 +426,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC) rlwinm r3,r3,0,18,15 mtspr SPRN_HID0,r3 sync - isync + isync blr /* inval_enable_L1 - Invalidate and enable L1 cache @@ -449,4 +449,4 @@ END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC) blr - + diff -prauN linux-2.6.0-test5/arch/ppc/kernel/misc.S wli-2.6.0-test5-bk12-25/arch/ppc/kernel/misc.S --- linux-2.6.0-test5/arch/ppc/kernel/misc.S 2003-09-08 12:50:28.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/kernel/misc.S 2003-09-25 19:15:49.000000000 -0700 @@ -222,7 +222,7 @@ _GLOBAL(low_choose_750fx_pll) mtspr HID0,r5 isync sync - + 1: /* Calc new HID1 value */ mfspr r4,SPRN_HID1 /* Build a HID1:PS bit from parameter */ @@ -247,9 +247,9 @@ _GLOBAL(low_choose_750fx_pll) mtspr HID0,r5 isync sync - -1: - /* Return */ + +1: + /* Return */ mtmsr r7 blr @@ -260,7 +260,7 @@ _GLOBAL(local_save_flags_ptr) mfmsr r4 stw r4,0(r3) blr - /* + /* * Need these nops here for taking over save/restore to * handle lost intrs * -- Cort @@ -284,7 +284,7 @@ _GLOBAL(local_save_flags_ptr) nop _GLOBAL(local_save_flags_ptr_end) -/* void local_irq_restore(unsigned long flags) */ +/* void local_irq_restore(unsigned long flags) */ _GLOBAL(local_irq_restore) /* * Just set/clear the MSR_EE bit through restore/flags but do not @@ -332,7 +332,7 @@ _GLOBAL(local_irq_disable) SYNC /* Some chip revs have problems here... */ mtmsr r0 /* Update machine state */ blr /* Done */ - /* + /* * Need these nops here for taking over save/restore to * handle lost intrs * -- Cort @@ -360,7 +360,7 @@ _GLOBAL(local_irq_enable) SYNC /* Some chip revs have problems here... */ mtmsr r3 /* Update machine state */ blr - /* + /* * Need these nops here for taking over save/restore to * handle lost intrs * -- Cort @@ -453,7 +453,7 @@ _GLOBAL(_tlbia) sync #endif /* CONFIG_SMP */ #endif /* ! defined(CONFIG_40x) */ - blr + blr /* * Flush MMU TLB for a particular address @@ -543,7 +543,7 @@ _GLOBAL(flush_instruction_cache) li r3, 512 mtctr r3 lis r4, KERNELBASE@h -1: iccci 0, r4 +1: iccci 0, r4 addi r4, r4, 16 bdnz 1b #else @@ -742,7 +742,7 @@ _GLOBAL(__flush_dcache_icache_phys) mtmsr r10 /* restore DR */ isync blr - + /* * Clear a page using the dcbz instruction, which doesn't cause any * memory traffic (except to write out any cache lines which get @@ -878,7 +878,7 @@ _GLOBAL(_outsb) stb r5,0(r3) eieio bdnz 00b - blr + blr _GLOBAL(_insw) cmpwi 0,r5,0 @@ -898,9 +898,9 @@ _GLOBAL(_outsw) blelr- 00: lhzu r5,2(r4) eieio - sthbrx r5,0,r3 + sthbrx r5,0,r3 bdnz 00b - blr + blr _GLOBAL(_insl) cmpwi 0,r5,0 @@ -922,7 +922,7 @@ _GLOBAL(_outsl) stwbrx r5,0,r3 eieio bdnz 00b - blr + blr _GLOBAL(__ide_mm_insw) _GLOBAL(_insw_ns) @@ -946,7 +946,7 @@ _GLOBAL(_outsw_ns) sth r5,0(r3) eieio bdnz 00b - blr + blr _GLOBAL(__ide_mm_insl) _GLOBAL(_insl_ns) @@ -970,11 +970,11 @@ _GLOBAL(_outsl_ns) stw r5,0(r3) eieio bdnz 00b - blr + blr /* * Extended precision shifts. - * + * * Updated to be valid for shift counts from 0 to 63 inclusive. * -- Gabriel * @@ -982,12 +982,12 @@ _GLOBAL(_outsl_ns) * R5 has shift count * result in R3/R4 * - * ashrdi3: arithmetic right shift (sign propagation) - * lshrdi3: logical right shift + * ashrdi3: arithmetic right shift (sign propagation) + * lshrdi3: logical right shift * ashldi3: left shift */ _GLOBAL(__ashrdi3) - subfic r6,r5,32 + subfic r6,r5,32 srw r4,r4,r5 # LSW = count > 31 ? 0 : LSW >> count addi r7,r5,32 # could be xori, or addi with -32 slw r6,r3,r6 # t1 = count > 31 ? 0 : MSW << (32-count) @@ -1000,7 +1000,7 @@ _GLOBAL(__ashrdi3) blr _GLOBAL(__ashldi3) - subfic r6,r5,32 + subfic r6,r5,32 slw r3,r3,r5 # MSW = count > 31 ? 0 : MSW << count addi r7,r5,32 # could be xori, or addi with -32 srw r6,r4,r6 # t1 = count > 31 ? 0 : LSW >> (32-count) @@ -1011,14 +1011,14 @@ _GLOBAL(__ashldi3) blr _GLOBAL(__lshrdi3) - subfic r6,r5,32 + subfic r6,r5,32 srw r4,r4,r5 # LSW = count > 31 ? 0 : LSW >> count addi r7,r5,32 # could be xori, or addi with -32 slw r6,r3,r6 # t1 = count > 31 ? 0 : MSW << (32-count) srw r7,r3,r7 # t2 = count < 32 ? 0 : MSW >> (count-32) or r4,r4,r6 # LSW |= t1 srw r3,r3,r5 # MSW = MSW >> count - or r4,r4,r7 # LSW |= t2 + or r4,r4,r7 # LSW |= t2 blr _GLOBAL(abs) @@ -1030,7 +1030,7 @@ _GLOBAL(abs) _GLOBAL(_get_SP) mr r3,r1 /* Close enough */ blr - + /* * These are used in the alignment trap handler when emulating * single-precision loads and stores. @@ -1100,7 +1100,7 @@ _GLOBAL(kernel_thread) /* * This routine is just here to keep GCC happy - sigh... - */ + */ _GLOBAL(__main) blr @@ -1126,7 +1126,7 @@ SYSCALL(dup) SYSCALL(execve) SYSCALL(waitpid) -/* Why isn't this a) automatic, b) written in 'C'? */ +/* Why isn't this a) automatic, b) written in 'C'? */ .data .align 4 _GLOBAL(sys_call_table) @@ -1304,7 +1304,7 @@ _GLOBAL(sys_call_table) .long sys_prctl .long sys_rt_sigreturn .long sys_rt_sigaction - .long sys_rt_sigprocmask + .long sys_rt_sigprocmask .long sys_rt_sigpending /* 175 */ .long sys_rt_sigtimedwait .long sys_rt_sigqueueinfo @@ -1322,14 +1322,14 @@ _GLOBAL(sys_call_table) .long ppc_vfork .long sys_getrlimit /* 190 */ .long sys_readahead - .long sys_mmap2 + .long sys_mmap2 .long sys_truncate64 .long sys_ftruncate64 .long sys_stat64 /* 195 */ .long sys_lstat64 .long sys_fstat64 .long sys_pciconfig_read - .long sys_pciconfig_write + .long sys_pciconfig_write .long sys_pciconfig_iobase /* 200 */ .long sys_ni_syscall /* 201 - reserved - MacOnLinux - new */ .long sys_getdents64 @@ -1379,7 +1379,7 @@ _GLOBAL(sys_call_table) .long sys_clock_gettime .long sys_clock_getres .long sys_clock_nanosleep - .long sys_ni_syscall /* reserved for swapcontext */ + .long sys_swapcontext .long sys_tgkill /* 250 */ .long sys_utimes .long sys_statfs64 diff -prauN linux-2.6.0-test5/arch/ppc/kernel/module.c wli-2.6.0-test5-bk12-25/arch/ppc/kernel/module.c --- linux-2.6.0-test5/arch/ppc/kernel/module.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/kernel/module.c 2003-09-25 19:15:49.000000000 -0700 @@ -152,7 +152,7 @@ static inline int entry_matches(struct p /* Set up a trampoline in the PLT to bounce us to the distant function */ static uint32_t do_plt_call(void *location, - Elf32_Addr val, + Elf32_Addr val, Elf32_Shdr *sechdrs, struct module *mod) { @@ -217,7 +217,7 @@ int apply_relocate_add(Elf32_Shdr *sechd /* Low half of the symbol */ *(uint16_t *)location = value; break; - + case R_PPC_ADDR16_HA: /* Sign-adjusted lower 16 bits: PPC ELF ABI says: (((x >> 16) + ((x & 0x8000) ? 1 : 0))) & 0xFFFF. @@ -237,7 +237,7 @@ int apply_relocate_add(Elf32_Shdr *sechd value, (uint32_t)location); DEBUGP("Location before: %08X.\n", *(uint32_t *)location); - *(uint32_t *)location + *(uint32_t *)location = (*(uint32_t *)location & ~0x03fffffc) | ((value - (uint32_t)location) & 0x03fffffc); diff -prauN linux-2.6.0-test5/arch/ppc/kernel/pci.c wli-2.6.0-test5-bk12-25/arch/ppc/kernel/pci.c --- linux-2.6.0-test5/arch/ppc/kernel/pci.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/kernel/pci.c 2003-09-25 19:15:49.000000000 -0700 @@ -69,7 +69,7 @@ struct pci_fixup pcibios_fixups[] = { { PCI_FIXUP_HEADER, PCI_ANY_ID, PCI_ANY_ID, pcibios_fixup_resources }, #ifdef CONFIG_PPC_PMAC /* We should add per-machine fixup support in xxx_setup.c or xxx_pci.c */ - { PCI_FIXUP_FINAL, PCI_VENDOR_ID_TI, PCI_ANY_ID, pcibios_fixup_cardbus }, + { PCI_FIXUP_FINAL, PCI_VENDOR_ID_TI, PCI_ANY_ID, pcibios_fixup_cardbus }, #endif /* CONFIG_PPC_PMAC */ { 0 } }; @@ -173,7 +173,7 @@ pcibios_fixup_cardbus(struct pci_dev* de /* Enable PCI interrupt */ if (pci_read_config_byte(dev, 0x91, &val) == 0) pci_write_config_byte(dev, 0x91, val | 0x30); - /* Disable ISA interrupt mode */ + /* Disable ISA interrupt mode */ if (pci_read_config_byte(dev, 0x92, &val) == 0) pci_write_config_byte(dev, 0x92, val & ~0x06); } @@ -185,7 +185,7 @@ pcibios_fixup_cardbus(struct pci_dev* de signal out the MFUNC0 pin */ if (pci_read_config_byte(dev, 0x8c, &val) == 0) pci_write_config_byte(dev, 0x8c, (val & ~0x0f) | 2); - /* Disable ISA interrupt mode */ + /* Disable ISA interrupt mode */ if (pci_read_config_byte(dev, 0x92, &val) == 0) pci_write_config_byte(dev, 0x92, val & ~0x06); } @@ -640,7 +640,7 @@ pcibios_enable_resources(struct pci_dev /* Only set up the requested stuff */ if (!(mask & (1<resource[idx]; if (r->flags & IORESOURCE_UNSET) { printk(KERN_ERR "PCI: Device %s not available because of resource collisions\n", pci_name(dev)); @@ -669,7 +669,7 @@ pcibios_alloc_controller(void) hose = (struct pci_controller *)alloc_bootmem(sizeof(*hose)); memset(hose, 0, sizeof(struct pci_controller)); - + *hose_tail = hose; hose_tail = &hose->next; @@ -687,7 +687,7 @@ make_one_node_map(struct device_node* no { int *bus_range; int len; - + if (pci_bus >= pci_bus_count) return; bus_range = (int *) get_property(node, "bus-range", &len); @@ -697,11 +697,11 @@ make_one_node_map(struct device_node* no return; } pci_to_OF_bus_map[pci_bus] = bus_range[0]; - + for (node=node->child; node != 0;node = node->sibling) { struct pci_dev* dev; unsigned int *class_code, *reg; - + class_code = (unsigned int *) get_property(node, "class-code", 0); if (!class_code || ((*class_code >> 8) != PCI_CLASS_BRIDGE_PCI && (*class_code >> 8) != PCI_CLASS_BRIDGE_CARDBUS)) @@ -715,29 +715,29 @@ make_one_node_map(struct device_node* no make_one_node_map(node, dev->subordinate->number); } } - + void __openfirmware pcibios_make_OF_bus_map(void) { int i; struct pci_controller* hose; u8* of_prop_map; - + pci_to_OF_bus_map = (u8*)kmalloc(pci_bus_count, GFP_KERNEL); if (!pci_to_OF_bus_map) { printk(KERN_ERR "Can't allocate OF bus map !\n"); return; } - + /* We fill the bus map with invalid values, that helps * debugging. */ for (i=0; inext) { - struct device_node* node; + struct device_node* node; node = (struct device_node *)hose->arch_data; if (!node) continue; @@ -753,7 +753,7 @@ pcibios_make_OF_bus_map(void) continue; printk("%d -> %d\n", i, pci_to_OF_bus_map[i]); } -#endif +#endif } typedef int (*pci_OF_scan_iterator)(struct device_node* node, void* data); @@ -762,10 +762,10 @@ static struct device_node* __openfirmwar scan_OF_pci_childs(struct device_node* node, pci_OF_scan_iterator filter, void* data) { struct device_node* sub_node; - + for (; node != 0;node = node->sibling) { unsigned int *class_code; - + if (filter(node, data)) return node; @@ -791,7 +791,7 @@ scan_OF_pci_childs_iterator(struct devic { unsigned int *reg; u8* fdata = (u8*)data; - + reg = (unsigned int *) get_property(node, "reg", 0); if (reg && ((reg[0] >> 8) & 0xff) == fdata[1] && ((reg[0] >> 16) & 0xff) == fdata[0]) @@ -807,7 +807,7 @@ scan_OF_childs_for_device(struct device_ return scan_OF_pci_childs(node, scan_OF_pci_childs_iterator, filter_data); } -/* +/* * Scans the OF tree for a device node matching a PCI device */ struct device_node * @@ -816,10 +816,10 @@ pci_busdev_to_OF_node(struct pci_bus *bu struct pci_controller *hose; struct device_node *node; int busnr; - + if (!have_of) return NULL; - + /* Lookup the hose */ busnr = bus->number; hose = pci_bus_to_hose(busnr); @@ -836,7 +836,7 @@ pci_busdev_to_OF_node(struct pci_bus *bu busnr = pci_to_OF_bus_map[busnr]; if (busnr == 0xff) return NULL; - + /* Now, lookup childs of the hose */ return scan_OF_childs_for_device(node->child, busnr, devfn); } @@ -875,7 +875,7 @@ find_OF_pci_device_filter(struct device_ return ((void *)node == data); } -/* +/* * Returns the PCI device matching a given OF node */ int @@ -884,7 +884,7 @@ pci_device_from_OF_node(struct device_no unsigned int *reg; struct pci_controller* hose; struct pci_dev* dev = NULL; - + if (!have_of) return -ENODEV; /* Make sure it's really a PCI device */ @@ -1018,7 +1018,7 @@ void __init pci_create_OF_bus_map(void) { struct property* of_prop; - + of_prop = (struct property*) alloc_bootmem(sizeof(struct property) + 256); if (of_prop && find_path_device("/")) { memset(of_prop, -1, sizeof(struct property) + 256); @@ -1034,13 +1034,13 @@ pci_create_OF_bus_map(void) /* * This set of routines checks for PCI<->PCI bridges that have closed * IO resources and have child devices. It tries to re-open an IO - * window on them. - * + * window on them. + * * This is a _temporary_ fix to workaround a problem with Apple's OF * closing IO windows on P2P bridges when the OF drivers of cards * below this bridge don't claim any IO range (typically ATI or * Adaptec). - * + * * A more complete fix would be to use drivers/pci/setup-bus.c, which * involves a working pcibios_fixup_pbus_ranges(), some more care about * ordering when creating the host bus resources, and maybe a few more @@ -1056,7 +1056,7 @@ do_update_p2p_io_resource(struct pci_bus u32 l; u16 w; struct resource res; - + res = *(bus->resource[0]); DBG("Remapping Bus %d, bridge: %s\n", bus->number, bridge->name); @@ -1156,7 +1156,7 @@ do_fixup_p2p_level(struct pci_bus *bus) break; if (parent_io >= 4) return; - + for (ln=bus->children.next; ln != &bus->children; ln=ln->next) { struct pci_bus *b = pci_bus_b(ln); struct pci_dev *d = b->self; @@ -1174,7 +1174,7 @@ do_fixup_p2p_level(struct pci_bus *bus) */ if (tmp_res.start == 0) tmp_res.start = 0x1000; - + if (!list_empty(&b->devices) && res && res->flags == 0 && res != bus->resource[parent_io] && (d->class >> 8) == PCI_CLASS_BRIDGE_PCI && @@ -1203,7 +1203,7 @@ do_fixup_p2p_level(struct pci_bus *bus) *res = tmp_res; res->flags = IORESOURCE_IO; res->name = b->name; - + /* Find a resource in the parent where we can allocate */ for (i = 0 ; i < 4; i++) { struct resource *r = bus->resource[i]; @@ -1214,7 +1214,7 @@ do_fixup_p2p_level(struct pci_bus *bus) DBG("Trying to allocate from %08lx, size %08lx from parent" " res %d: %08lx -> %08lx\n", res->start, res->end, i, r->start, r->end); - + if (allocate_resource(r, res, res->end + 1, res->start, max, res->end + 1, NULL, NULL) < 0) { DBG("Failed !\n"); @@ -1403,7 +1403,7 @@ int pcibios_enable_device(struct pci_dev if (ppc_md.pcibios_enable_device_hook) if (ppc_md.pcibios_enable_device_hook(dev, 0)) return -EINVAL; - + pci_read_config_word(dev, PCI_COMMAND, &cmd); old_cmd = cmd; for (idx=0; idx<6; idx++) { @@ -1670,7 +1670,7 @@ sys_pciconfig_iobase(long which, unsigne if (!hose) return -ENODEV; - + switch (which) { case IOBASE_BRIDGE_NUMBER: return (long)hose->first_busno; diff -prauN linux-2.6.0-test5/arch/ppc/kernel/ppc_htab.c wli-2.6.0-test5-bk12-25/arch/ppc/kernel/ppc_htab.c --- linux-2.6.0-test5/arch/ppc/kernel/ppc_htab.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/kernel/ppc_htab.c 2003-09-25 19:15:49.000000000 -0700 @@ -83,7 +83,7 @@ static char *pmc1_lookup(unsigned long m default: return "unknown"; } -} +} static char *pmc2_lookup(unsigned long mmcr0) { @@ -102,7 +102,7 @@ static char *pmc2_lookup(unsigned long m default: return "unknown"; } -} +} /* * print some useful info about the hash table. This function @@ -162,7 +162,7 @@ static ssize_t ppc_htab_read(struct file else uptes++; } - + n += sprintf( buffer + n, "PTE Hash Table Information\n" "Size\t\t: %luKb\n" @@ -234,7 +234,7 @@ static ssize_t ppc_htab_write(struct fil if (cur_cpu_spec[0]->cpu_features & CPU_FTR_604_PERF_MON) { asm volatile ("mtspr %0, %3 \n\t" "mtspr %1, %3 \n\t" - "mtspr %2, %3 \n\t" + "mtspr %2, %3 \n\t" :: "i" (MMCR0), "i" (PMC1), "i" (PMC2), "r" (0)); } } @@ -285,7 +285,7 @@ static ssize_t ppc_htab_write(struct fil "i" (PMC1), "r" (0), "i"(PMC2) ); } } - + /* PMC1 values */ if ( !strncmp( buffer, "dtlb", 4) ) { @@ -300,7 +300,7 @@ static ssize_t ppc_htab_write(struct fil :: "r" (tmp), "i" (MMCR0), "i" (MMCR0_PMC1_DTLB), "i" (PMC1), "r" (0) ); } - } + } if ( !strncmp( buffer, "ic miss", 7) ) { @@ -315,7 +315,7 @@ static ssize_t ppc_htab_write(struct fil :: "r" (tmp), "i" (MMCR0), "i" (MMCR0_PMC1_ICACHEMISS), "i" (PMC1), "r" (0)); } - } + } /* PMC2 values */ if ( !strncmp( buffer, "load miss time", 14) ) @@ -333,7 +333,7 @@ static ssize_t ppc_htab_write(struct fil "i" (PMC2), "r" (0) ); } } - + if ( !strncmp( buffer, "itlb", 4) ) { if (cur_cpu_spec[0]->cpu_features & CPU_FTR_604_PERF_MON) { @@ -364,8 +364,8 @@ static ssize_t ppc_htab_write(struct fil : "i" (MMCR0), "i" (MMCR0_PMC2_DCACHEMISS), "i" (PMC2), "r" (0) ); } - } - + } + return count; #else /* CONFIG_PPC_STD_MMU */ return 0; @@ -416,12 +416,12 @@ int proc_dol2crvec(ctl_table *table, int if (!(cur_cpu_spec[0]->cpu_features & CPU_FTR_L2CR)) return -EFAULT; - + if ( /*!table->maxlen ||*/ (filp->f_pos && !write)) { *lenp = 0; return 0; } - + vleft = table->maxlen / sizeof(int); left = *lenp; @@ -475,9 +475,9 @@ int proc_dol2crvec(ctl_table *table, int p += sprintf(p, "%s", (val>>15)&1 ? ", DLL slow" : ""); p += sprintf(p, "%s", (val>>14)&1 ? ", diff clock" :""); p += sprintf(p, "%s", (val>>13)&1 ? ", DLL bypass" :""); - + p += sprintf(p,"\n"); - + len = strlen(buf); if (len > left) len = left; diff -prauN linux-2.6.0-test5/arch/ppc/kernel/process.c wli-2.6.0-test5-bk12-25/arch/ppc/kernel/process.c --- linux-2.6.0-test5/arch/ppc/kernel/process.c 2003-09-08 12:50:04.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/kernel/process.c 2003-09-25 19:15:49.000000000 -0700 @@ -7,7 +7,7 @@ * Updated and modified by Cort Dougan (cort@cs.nmt.edu) and * Paul Mackerras (paulus@cs.anu.edu.au) * - * PowerPC version + * PowerPC version * Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org) * * This program is free software; you can redistribute it and/or @@ -92,7 +92,7 @@ int check_stack(struct task_struct *tsk) unsigned long tsk_top = task_top(tsk); int ret = 0; -#if 0 +#if 0 /* check thread magic */ if ( tsk->thread.magic != THREAD_MAGIC ) { @@ -103,7 +103,7 @@ int check_stack(struct task_struct *tsk) if ( !tsk ) printk("check_stack(): tsk bad tsk %p\n",tsk); - + /* check if stored ksp is bad */ if ( (tsk->thread.ksp > stack_top) || (tsk->thread.ksp < tsk_top) ) { @@ -113,7 +113,7 @@ int check_stack(struct task_struct *tsk) tsk_top, tsk->thread.ksp, stack_top); ret |= 2; } - + /* check if stack ptr RIGHT NOW is bad */ if ( (tsk == current) && ((_get_SP() > stack_top ) || (_get_SP() < tsk_top)) ) { @@ -124,7 +124,7 @@ int check_stack(struct task_struct *tsk) ret |= 4; } -#if 0 +#if 0 /* check amount of free stack */ for ( i = (unsigned long *)task_top(tsk) ; i < kernel_stack_top(tsk) ; i++ ) { @@ -159,7 +159,7 @@ dump_altivec(struct pt_regs *regs, elf_v return 1; } -void +void enable_kernel_altivec(void) { #ifdef CONFIG_SMP @@ -201,7 +201,7 @@ struct task_struct *__switch_to(struct t struct thread_struct *new_thread, *old_thread; unsigned long s; struct task_struct *last; - + local_irq_save(s); #ifdef CHECK_STACK check_stack(prev); @@ -212,7 +212,7 @@ struct task_struct *__switch_to(struct t /* avoid complexity of lazy save/restore of fpu * by just saving it every time we switch out if * this task used the fpu during the last quantum. - * + * * If it tries to use the fpu again, it'll trap and * reload its fp regs. So we don't have to do a restore * every switch, just a save. @@ -220,7 +220,7 @@ struct task_struct *__switch_to(struct t */ if (prev->thread.regs && (prev->thread.regs->msr & MSR_FP)) giveup_fpu(prev); -#ifdef CONFIG_ALTIVEC +#ifdef CONFIG_ALTIVEC /* * If the previous thread used altivec in the last quantum * (thus changing altivec regs) then save them. @@ -234,7 +234,7 @@ struct task_struct *__switch_to(struct t */ if ((prev->thread.regs && (prev->thread.regs->msr & MSR_VEC))) giveup_altivec(prev); -#endif /* CONFIG_ALTIVEC */ +#endif /* CONFIG_ALTIVEC */ #endif /* CONFIG_SMP */ /* Avoid the trap. On smp this this never happens since @@ -278,7 +278,7 @@ void show_regs(struct pt_regs * regs) mfdcr(DCRN_POB0_BEAR), mfdcr(DCRN_POB0_BESR0), mfdcr(DCRN_POB0_BESR1)); #endif - + #ifdef CONFIG_SMP printk(" CPU: %d", smp_processor_id()); #endif /* CONFIG_SMP */ @@ -415,6 +415,7 @@ void start_thread(struct pt_regs *regs, memset(current->thread.vr, 0, sizeof(current->thread.vr)); memset(¤t->thread.vscr, 0, sizeof(current->thread.vscr)); current->thread.vrsave = 0; + current->thread.used_vr = 0; #endif /* CONFIG_ALTIVEC */ } @@ -482,7 +483,7 @@ int sys_execve(unsigned long a0, unsigne #ifdef CONFIG_ALTIVEC if (regs->msr & MSR_VEC) giveup_altivec(current); -#endif /* CONFIG_ALTIVEC */ +#endif /* CONFIG_ALTIVEC */ error = do_execve(filename, (char __user *__user *) a1, (char __user *__user *) a2, regs); if (error == 0) @@ -598,7 +599,7 @@ void __init ll_puts(const char *s) return; } -#if 0 +#if 0 if ( have_of ) { prom_print(s); @@ -625,7 +626,7 @@ void __init ll_puts(const char *s) y = 0; } } else { - vidmem [ ( x + cols * y ) * 2 ] = c; + vidmem [ ( x + cols * y ) * 2 ] = c; if ( ++x >= cols ) { x = 0; if ( ++y >= lines ) { diff -prauN linux-2.6.0-test5/arch/ppc/kernel/ptrace.c wli-2.6.0-test5-bk12-25/arch/ppc/kernel/ptrace.c --- linux-2.6.0-test5/arch/ppc/kernel/ptrace.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/kernel/ptrace.c 2003-09-25 19:15:49.000000000 -0700 @@ -114,12 +114,12 @@ static inline int set_vrregs(struct task /* copy AltiVec registers VR[0] .. VR[31] */ for (i = 0; i < 32; i++) - for (j = 0; j < 4; j++, data++) + for (j = 0; j < 4; j++, data++) if (__get_user(task->thread.vr[i].u[j], data)) return -EFAULT; /* copy VSCR */ - for (i = 0; i < 4; i++, data++) + for (i = 0; i < 4; i++, data++) if (__get_user(task->thread.vscr.u[i], data)) return -EFAULT; @@ -213,7 +213,7 @@ int sys_ptrace(long request, long pid, l switch (request) { /* when I and D space are separate, these will need to be fixed. */ - case PTRACE_PEEKTEXT: /* read word at location addr. */ + case PTRACE_PEEKTEXT: /* read word at location addr. */ case PTRACE_PEEKDATA: { unsigned long tmp; int copied; @@ -303,8 +303,8 @@ int sys_ptrace(long request, long pid, l } /* - * make the child exit. Best I can do is send it a sigkill. - * perhaps it should be put in the status that it wants to + * make the child exit. Best I can do is send it a sigkill. + * perhaps it should be put in the status that it wants to * exit. */ case PTRACE_KILL: { diff -prauN linux-2.6.0-test5/arch/ppc/kernel/setup.c wli-2.6.0-test5-bk12-25/arch/ppc/kernel/setup.c --- linux-2.6.0-test5/arch/ppc/kernel/setup.c 2003-09-08 12:50:31.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/kernel/setup.c 2003-09-25 19:15:49.000000000 -0700 @@ -54,6 +54,7 @@ extern void kgdb_map_scc(void); #endif extern void ppc6xx_idle(void); +extern void power4_idle(void); extern boot_infos_t *boot_infos; char saved_command_line[256]; @@ -63,7 +64,7 @@ char *sysmap; unsigned long sysmap_size; /* Used with the BI_MEMSIZE bootinfo parameter to store the memory - size value reported by the boot loader. */ + size value reported by the boot loader. */ unsigned long boot_mem_size; unsigned long ISA_DMA_THRESHOLD; @@ -117,12 +118,12 @@ void machine_restart(char *cmd) { ppc_md.restart(cmd); } - + void machine_power_off(void) { ppc_md.power_off(); } - + void machine_halt(void) { ppc_md.halt(); @@ -219,7 +220,7 @@ int show_cpuinfo(struct seq_file *m, voi break; } - seq_printf(m, "revision\t: %hd.%hd (pvr %04x %04x)\n", + seq_printf(m, "revision\t: %hd.%hd (pvr %04x %04x)\n", maj, min, PVR_VER(pvr), PVR_REV(pvr)); seq_printf(m, "bogomips\t: %lu.%02lu\n", @@ -318,7 +319,7 @@ of_show_percpuinfo(struct seq_file *m, i { struct device_node *cpu_node; int *fp, s; - + cpu_node = find_type_devices("cpu"); if (!cpu_node) return 0; @@ -335,7 +336,7 @@ intuit_machine_type(void) { char *model; struct device_node *root; - + /* ask the OF info if we're a chrp or pmac */ root = find_path_device("/"); if (root != 0) { @@ -366,7 +367,7 @@ platform_init(unsigned long r3, unsigned btext_clearscreen(); btext_welcome(); } -#endif +#endif parse_bootinfo(find_bootinfo()); @@ -403,7 +404,7 @@ platform_init(unsigned long r3, unsigned * bootargs property of the /chosen node. * If an initial ramdisk is present, r3 and r4 * are used for initrd_start and initrd_size, - * otherwise they contain 0xdeadbeef. + * otherwise they contain 0xdeadbeef. */ cmd_line[0] = 0; if (r3 >= 0x4000 && r3 < 0x800000 && r4 == 0) { @@ -426,7 +427,7 @@ platform_init(unsigned long r3, unsigned } else { struct device_node *chosen; char *p; - + #ifdef CONFIG_BLK_DEV_INITRD if (r3 && r4 && r4 != 0xdeadbeef) { if (r3 < KERNELBASE) @@ -450,7 +451,7 @@ platform_init(unsigned long r3, unsigned extern int __adb_probe_sync; __adb_probe_sync = 1; } -#endif /* CONFIG_ADB */ +#endif /* CONFIG_ADB */ switch (_machine) { case _MACH_Pmac: @@ -529,9 +530,12 @@ machine_init(unsigned long r3, unsigned strcpy(cmd_line, CONFIG_CMDLINE); #endif /* CONFIG_CMDLINE */ -#if defined(CONFIG_6xx) +#ifdef CONFIG_6xx ppc_md.power_save = ppc6xx_idle; #endif +#ifdef CONFIG_POWER4 + ppc_md.power_save = power4_idle; +#endif platform_init(r3, r4, r5, r6, r7); @@ -578,7 +582,7 @@ static struct cpu cpu_devices[NR_CPUS]; int __init ppc_init(void) { int i; - + /* clear the progress line */ if ( ppc_md.progress ) ppc_md.progress(" ", 0xffff); @@ -652,7 +656,7 @@ void __init setup_arch(char **cmdline_p) init_mm.end_code = (unsigned long) _etext; init_mm.end_data = (unsigned long) _edata; init_mm.brk = (unsigned long) klimit; - + /* Save unparsed command line copy for /proc/cmdline */ strcpy(saved_command_line, cmd_line); *cmdline_p = cmd_line; diff -prauN linux-2.6.0-test5/arch/ppc/kernel/signal.c wli-2.6.0-test5-bk12-25/arch/ppc/kernel/signal.c --- linux-2.6.0-test5/arch/ppc/kernel/signal.c 2003-09-08 12:50:40.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/kernel/signal.c 2003-09-25 19:15:49.000000000 -0700 @@ -1,7 +1,7 @@ /* * arch/ppc/kernel/signal.c * - * PowerPC version + * PowerPC version * Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org) * * Derived from "arch/i386/kernel/signal.c" @@ -41,18 +41,6 @@ extern void sigreturn_exit(struct pt_reg #define GP_REGS_SIZE min(sizeof(elf_gregset_t), sizeof(struct pt_regs)) -/* - * These are the flags in the MSR that the user is allowed to change - * by modifying the saved value of the MSR on the stack. SE and BE - * should not be in this list since gdb may want to change these. I.e, - * you should be able to step out of a signal handler to see what - * instruction executes next after the signal handler completes. - * Alternately, if you stepped into a signal handler, you should be - * able to continue 'til the next breakpoint from within the signal - * handler, even if the handler returns. - */ -#define MSR_USERCHANGE (MSR_FE0 | MSR_FE1) - int do_signal(sigset_t *oldset, struct pt_regs *regs); /* @@ -72,8 +60,8 @@ sys_sigsuspend(old_sigset_t mask, int p2 spin_unlock_irq(¤t->sighand->siglock); regs->result = -EINTR; - regs->ccr |= 0x10000000; regs->gpr[3] = EINTR; + regs->ccr |= 0x10000000; while (1) { current->state = TASK_INTERRUPTIBLE; schedule(); @@ -103,8 +91,8 @@ sys_rt_sigsuspend(sigset_t __user *unews spin_unlock_irq(¤t->sighand->siglock); regs->result = -EINTR; - regs->ccr |= 0x10000000; regs->gpr[3] = EINTR; + regs->ccr |= 0x10000000; while (1) { current->state = TASK_INTERRUPTIBLE; schedule(); @@ -121,7 +109,7 @@ sys_sigaltstack(const stack_t __user *us return do_sigaltstack(uss, uoss, regs->gpr[1]); } -int +int sys_sigaction(int sig, const struct old_sigaction __user *act, struct old_sigaction __user *oact) { @@ -164,305 +152,389 @@ sys_sigaction(int sig, const struct old_ * */ struct sigregs { - elf_gregset_t gp_regs; - double fp_regs[ELF_NFPREG]; - unsigned long tramp[2]; + struct mcontext mctx; /* all the register values */ /* Programs using the rs6000/xcoff abi can save up to 19 gp regs and 18 fp regs below sp before decrementing it. */ int abigap[56]; }; -struct rt_sigframe -{ - unsigned long _unused[2]; - struct siginfo *pinfo; - void *puc; - struct siginfo info; - struct ucontext uc; -}; - +/* We use the mc_pad field for the signal return trampoline. */ +#define tramp mc_pad /* * When we have rt signals to deliver, we set up on the * user stack, going down from the original stack pointer: - * a sigregs struct - * one rt_sigframe struct (siginfo + ucontext) - * a gap of __SIGNAL_FRAMESIZE bytes + * one rt_sigframe struct (siginfo + ucontext + ABI gap) + * a gap of __SIGNAL_FRAMESIZE+16 bytes + * (the +16 is to get the siginfo and ucontext in the same + * positions as in older kernels). * * Each of these things must be a multiple of 16 bytes in size. * */ -int sys_rt_sigreturn(int r3, int r4, int r5, int r6, int r7, int r8, - struct pt_regs *regs) +struct rt_sigframe { - struct rt_sigframe __user *rt_sf; - struct sigcontext sigctx; - struct sigregs __user *sr; - elf_gregset_t saved_regs; /* an array of ELF_NGREG unsigned longs */ - sigset_t set; - stack_t st; + struct siginfo info; + struct ucontext uc; + /* Programs using the rs6000/xcoff abi can save up to 19 gp regs + and 18 fp regs below sp before decrementing it. */ + int abigap[56]; +}; - rt_sf = (struct rt_sigframe __user *)(regs->gpr[1] + __SIGNAL_FRAMESIZE); - if (copy_from_user(&sigctx, &rt_sf->uc.uc_mcontext, sizeof(sigctx)) - || copy_from_user(&set, &rt_sf->uc.uc_sigmask, sizeof(set)) - || copy_from_user(&st, &rt_sf->uc.uc_stack, sizeof(st))) - goto badframe; - sigdelsetmask(&set, ~_BLOCKABLE); - spin_lock_irq(¤t->sighand->siglock); - current->blocked = set; - recalc_sigpending(); - spin_unlock_irq(¤t->sighand->siglock); +/* + * Save the current user registers on the user stack. + * We only save the altivec registers if the process has used + * altivec instructions at some point. + */ +static int +save_user_regs(struct pt_regs *regs, struct mcontext *frame, int sigret) +{ + /* save general and floating-point registers */ + CHECK_FULL_REGS(regs); if (regs->msr & MSR_FP) giveup_fpu(current); + if (__copy_to_user(&frame->mc_gregs, regs, GP_REGS_SIZE) + || __copy_to_user(&frame->mc_fregs, current->thread.fpr, + ELF_NFPREG * sizeof(double))) + return 1; + + current->thread.fpscr = 0; /* turn off all fp exceptions */ - /* restore registers - - * sigctx is initialized to point to the - * preamble frame (where registers are stored) - * see handle_signal() +#ifdef CONFIG_ALTIVEC + /* save altivec registers */ + if (current->thread.used_vr) { + if (regs->msr & MSR_VEC) + giveup_altivec(current); + if (__copy_to_user(&frame->mc_vregs, current->thread.vr, + ELF_NVRREG * sizeof(vector128))) + return 1; + /* set MSR_VEC in the saved MSR value to indicate that + frame->mc_vregs contains valid data */ + if (__put_user(regs->msr | MSR_VEC, &frame->mc_gregs[PT_MSR])) + return 1; + } + /* else assert((regs->msr & MSR_VEC) == 0) */ + + /* We always copy to/from vrsave, it's 0 if we don't have or don't + * use altivec. Since VSCR only contains 32 bits saved in the least + * significant bits of a vector, we "cheat" and stuff VRSAVE in the + * most significant bits of that same vector. --BenH */ - sr = (struct sigregs __user *) sigctx.regs; - if (copy_from_user(saved_regs, &sr->gp_regs, sizeof(sr->gp_regs))) - goto badframe; - saved_regs[PT_MSR] = (regs->msr & ~MSR_USERCHANGE) - | (saved_regs[PT_MSR] & MSR_USERCHANGE); - memcpy(regs, saved_regs, GP_REGS_SIZE); - if (copy_from_user(current->thread.fpr, &sr->fp_regs, - sizeof(sr->fp_regs))) - goto badframe; + if (__put_user(current->thread.vrsave, (u32 *)&frame->mc_vregs[32])) + return 1; +#endif /* CONFIG_ALTIVEC */ + + if (sigret) { + /* Set up the sigreturn trampoline: li r0,sigret; sc */ + if (__put_user(0x38000000UL + sigret, &frame->tramp[0]) + || __put_user(0x44000002UL, &frame->tramp[1])) + return 1; + flush_icache_range((unsigned long) &frame->tramp[0], + (unsigned long) &frame->tramp[2]); + } - sigreturn_exit(regs); /* doesn't return here */ return 0; +} -badframe: - do_exit(SIGSEGV); +/* + * Restore the current user register values from the user stack, + * (except for MSR). + */ +static int +restore_user_regs(struct pt_regs *regs, struct mcontext __user *sr) +{ +#ifdef CONFIG_ALTIVEC + unsigned long msr; +#endif + + /* copy up to but not including MSR */ + if (__copy_from_user(regs, &sr->mc_gregs, PT_MSR * sizeof(elf_greg_t))) + return 1; + /* copy from orig_r3 (the word after the MSR) up to the end */ + if (__copy_from_user(®s->orig_gpr3, &sr->mc_gregs[PT_ORIG_R3], + GP_REGS_SIZE - PT_ORIG_R3 * sizeof(elf_greg_t))) + return 1; + + /* force the process to reload the FP registers from + current->thread when it next does FP instructions */ + regs->msr &= ~MSR_FP; + if (__copy_from_user(current->thread.fpr, &sr->mc_fregs, + sizeof(sr->mc_fregs))) + return 1; + +#ifdef CONFIG_ALTIVEC + /* force the process to reload the altivec registers from + current->thread when it next does altivec instructions */ + regs->msr &= ~MSR_VEC; + if (!__get_user(msr, &sr->mc_gregs[PT_MSR]) && (msr & MSR_VEC) != 0) { + /* restore altivec registers from the stack */ + if (__copy_from_user(current->thread.vr, &sr->mc_vregs, + sizeof(sr->mc_vregs))) + return 1; + } else if (current->thread.used_vr) + memset(¤t->thread.vr, 0, sizeof(current->thread.vr)); + + /* Always get VRSAVE back */ + if (__get_user(current->thread.vrsave, (u32 *)&sr->mc_vregs[32])) + return 1; +#endif /* CONFIG_ALTIVEC */ + + return 0; } +/* + * Restore the user process's signal mask + */ static void -setup_rt_frame(struct pt_regs *regs, struct sigregs __user *frame, - signed long newsp) +restore_sigmask(sigset_t *set) { - struct rt_sigframe __user *rt_sf = (struct rt_sigframe __user *) newsp; + sigdelsetmask(set, ~_BLOCKABLE); + spin_lock_irq(¤t->sighand->siglock); + current->blocked = *set; + recalc_sigpending(); + spin_unlock_irq(¤t->sighand->siglock); +} - /* Set up preamble frame */ - if (verify_area(VERIFY_WRITE, frame, sizeof(*frame))) +/* + * Set up a signal frame for a "real-time" signal handler + * (one which gets siginfo). + */ +static void +handle_rt_signal(unsigned long sig, struct k_sigaction *ka, + siginfo_t *info, sigset_t *oldset, struct pt_regs * regs, + unsigned long newsp) +{ + struct rt_sigframe __user *rt_sf; + struct mcontext __user *frame; + unsigned long origsp = newsp; + + /* Set up Signal Frame */ + /* Put a Real Time Context onto stack */ + newsp -= sizeof(*rt_sf); + rt_sf = (struct rt_sigframe __user *) newsp; + + /* create a stack frame for the caller of the handler */ + newsp -= __SIGNAL_FRAMESIZE + 16; + + if (verify_area(VERIFY_WRITE, (void __user *) newsp, origsp - newsp)) goto badframe; - CHECK_FULL_REGS(regs); - if (regs->msr & MSR_FP) - giveup_fpu(current); - if (__copy_to_user(&frame->gp_regs, regs, GP_REGS_SIZE) - || __copy_to_user(&frame->fp_regs, current->thread.fpr, - ELF_NFPREG * sizeof(double)) - /* Set up to return from user space. - It calls the sc exception at offset 0x9999 - for sys_rt_sigreturn(). - */ - || __put_user(0x38000000UL + __NR_rt_sigreturn, &frame->tramp[0]) - || __put_user(0x44000002UL, &frame->tramp[1])) /* sc */ + + /* Put the siginfo & fill in most of the ucontext */ + if (copy_siginfo_to_user(&rt_sf->info, info) + || __put_user(0, &rt_sf->uc.uc_flags) + || __put_user(0, &rt_sf->uc.uc_link) + || __put_user(current->sas_ss_sp, &rt_sf->uc.uc_stack.ss_sp) + || __put_user(sas_ss_flags(regs->gpr[1]), + &rt_sf->uc.uc_stack.ss_flags) + || __put_user(current->sas_ss_size, &rt_sf->uc.uc_stack.ss_size) + || __put_user(&rt_sf->uc.uc_mcontext, &rt_sf->uc.uc_regs) + || __copy_to_user(&rt_sf->uc.uc_oldsigmask, oldset, sizeof(*oldset)) + || __copy_to_user(&rt_sf->uc.uc_sigmask, oldset, sizeof(*oldset))) goto badframe; - flush_icache_range((unsigned long) &frame->tramp[0], - (unsigned long) &frame->tramp[2]); - current->thread.fpscr = 0; /* turn off all fp exceptions */ - /* Retrieve rt_sigframe from stack and - set up registers for signal handler - */ - newsp -= __SIGNAL_FRAMESIZE; - if (put_user(regs->gpr[1], (unsigned long __user *)newsp) - || get_user(regs->nip, &rt_sf->uc.uc_mcontext.handler) - || get_user(regs->gpr[3], &rt_sf->uc.uc_mcontext.signal) - || get_user(regs->gpr[4], (unsigned long __user *)&rt_sf->pinfo) - || get_user(regs->gpr[5], (unsigned long __user *)&rt_sf->puc)) + /* Save user registers on the stack */ + frame = &rt_sf->uc.uc_mcontext; + if (save_user_regs(regs, frame, __NR_rt_sigreturn)) goto badframe; + if (put_user(regs->gpr[1], (unsigned long __user *)newsp)) + goto badframe; regs->gpr[1] = newsp; + regs->gpr[3] = sig; + regs->gpr[4] = (unsigned long) &rt_sf->info; + regs->gpr[5] = (unsigned long) &rt_sf->uc; regs->gpr[6] = (unsigned long) rt_sf; + regs->nip = (unsigned long) ka->sa.sa_handler; regs->link = (unsigned long) frame->tramp; + regs->trap = 0; return; badframe: #if DEBUG_SIG - printk("badframe in setup_rt_frame, regs=%p frame=%p newsp=%lx\n", + printk("badframe in handle_rt_signal, regs=%p frame=%p newsp=%lx\n", regs, frame, newsp); #endif - do_exit(SIGSEGV); + if (sig == SIGSEGV) + ka->sa.sa_handler = SIG_DFL; + force_sig(SIGSEGV, current); } -/* - * Do a signal return; undo the signal stack. - */ -int sys_sigreturn(int r3, int r4, int r5, int r6, int r7, int r8, - struct pt_regs *regs) +static int do_setcontext(struct ucontext __user *ucp, struct pt_regs *regs) { - struct sigcontext __user *sc; - struct sigcontext sigctx; - struct sigregs __user *sr; - elf_gregset_t saved_regs; /* an array of ELF_NGREG unsigned longs */ sigset_t set; - sc = (struct sigcontext __user *)(regs->gpr[1] + __SIGNAL_FRAMESIZE); - if (copy_from_user(&sigctx, sc, sizeof(sigctx))) - goto badframe; + if (__copy_from_user(&set, &ucp->uc_sigmask, sizeof(set))) + return -EFAULT; + restore_sigmask(&set); - set.sig[0] = sigctx.oldmask; -#if _NSIG_WORDS > 1 - set.sig[1] = sigctx._unused[3]; -#endif - sigdelsetmask(&set, ~_BLOCKABLE); - spin_lock_irq(¤t->sighand->siglock); - current->blocked = set; - recalc_sigpending(); - spin_unlock_irq(¤t->sighand->siglock); - if (regs->msr & MSR_FP ) - giveup_fpu(current); + if (restore_user_regs(regs, &ucp->uc_mcontext)) + return -EFAULT; - /* restore registers */ - sr = (struct sigregs __user *) sigctx.regs; - if (copy_from_user(saved_regs, &sr->gp_regs, sizeof(sr->gp_regs))) - goto badframe; - saved_regs[PT_MSR] = (regs->msr & ~MSR_USERCHANGE) - | (saved_regs[PT_MSR] & MSR_USERCHANGE); - memcpy(regs, saved_regs, GP_REGS_SIZE); + return 0; +} - if (copy_from_user(current->thread.fpr, &sr->fp_regs, - sizeof(sr->fp_regs))) - goto badframe; +int sys_swapcontext(struct ucontext __user *old_ctx, + struct ucontext __user *new_ctx, + int r5, int r6, int r7, int r8, struct pt_regs *regs) +{ + unsigned char tmp; + + if (old_ctx != NULL) { + if (verify_area(VERIFY_WRITE, old_ctx, sizeof(*old_ctx)) + || save_user_regs(regs, &old_ctx->uc_mcontext, 0) + || __copy_to_user(&old_ctx->uc_sigmask, + ¤t->blocked, sizeof(sigset_t)) + /* the next 2 things aren't strictly necessary */ + || __copy_to_user(&old_ctx->uc_oldsigmask, + ¤t->blocked, sizeof(sigset_t)) + || __put_user(&old_ctx->uc_mcontext, &old_ctx->uc_regs)) + return -EFAULT; + } + if (new_ctx == NULL) + return 0; + if (verify_area(VERIFY_READ, new_ctx, sizeof(*new_ctx)) + || __get_user(tmp, (u8 *) new_ctx) + || __get_user(tmp, (u8 *) (new_ctx + 1) - 1)) + return -EFAULT; + + /* + * If we get a fault copying the context into the kernel's + * image of the user's registers, we can't just return -EFAULT + * because the user's registers will be corrupted. For instance + * the NIP value may have been updated but not some of the + * other registers. Given that we have done the verify_area + * and successfully read the first and last bytes of the region + * above, this should only happen in an out-of-memory situation + * or if another thread unmaps the region containing the context. + * We kill the task with a SIGSEGV in this situation. + */ + if (do_setcontext(new_ctx, regs)) + do_exit(SIGSEGV); + sigreturn_exit(regs); + /* doesn't actually return back to here */ + return 0; +} + +int sys_rt_sigreturn(int r3, int r4, int r5, int r6, int r7, int r8, + struct pt_regs *regs) +{ + struct rt_sigframe __user *rt_sf; + + rt_sf = (struct rt_sigframe __user *) + (regs->gpr[1] + __SIGNAL_FRAMESIZE + 16); + if (verify_area(VERIFY_READ, rt_sf, sizeof(struct rt_sigframe))) + goto bad; + if (do_setcontext(&rt_sf->uc, regs)) + goto bad; + + /* + * It's not clear whether or why it is desirable to save the + * sigaltstack setting on signal delivery and restore it on + * signal return. But other architectures do this and we have + * always done it up until now so it is probably better not to + * change it. -- paulus + */ + do_sigaltstack(&rt_sf->uc.uc_stack, NULL, regs->gpr[1]); sigreturn_exit(regs); /* doesn't return here */ return 0; -badframe: - do_exit(SIGSEGV); -} + bad: + force_sig(SIGSEGV, current); + return 0; +} /* - * Set up a signal frame. + * OK, we're invoking a handler */ static void -setup_frame(struct pt_regs *regs, struct sigregs __user *frame, - unsigned long newsp) +handle_signal(unsigned long sig, struct k_sigaction *ka, + siginfo_t *info, sigset_t *oldset, struct pt_regs * regs, + unsigned long newsp) { - struct sigcontext __user *sc = (struct sigcontext __user *) newsp; + struct sigcontext __user *sc; + struct sigregs __user *frame; + unsigned long origsp = newsp; + + /* Set up Signal Frame */ + newsp -= sizeof(struct sigregs); + frame = (struct sigregs __user *) newsp; + + /* Put a sigcontext on the stack */ + newsp -= sizeof(*sc); + sc = (struct sigcontext __user *) newsp; + + /* create a stack frame for the caller of the handler */ + newsp -= __SIGNAL_FRAMESIZE; - if (verify_area(VERIFY_WRITE, frame, sizeof(*frame))) + if (verify_area(VERIFY_WRITE, (void *) newsp, origsp - newsp)) goto badframe; - CHECK_FULL_REGS(regs); - if (regs->msr & MSR_FP) - giveup_fpu(current); - if (__copy_to_user(&frame->gp_regs, regs, GP_REGS_SIZE) - || __copy_to_user(&frame->fp_regs, current->thread.fpr, - ELF_NFPREG * sizeof(double)) - || __put_user(0x38000000UL + __NR_sigreturn, &frame->tramp[0]) - || __put_user(0x44000002UL, &frame->tramp[1])) /* sc */ + +#if _NSIG != 64 +#error "Please adjust handle_signal()" +#endif + if (__put_user((unsigned long) ka->sa.sa_handler, &sc->handler) + || __put_user(oldset->sig[0], &sc->oldmask) + || __put_user(oldset->sig[1], &sc->_unused[3]) + || __put_user((struct pt_regs *)frame, &sc->regs) + || __put_user(sig, &sc->signal)) goto badframe; - flush_icache_range((unsigned long) &frame->tramp[0], - (unsigned long) &frame->tramp[2]); - current->thread.fpscr = 0; /* turn off all fp exceptions */ - newsp -= __SIGNAL_FRAMESIZE; - if (put_user(regs->gpr[1], (unsigned long __user *)newsp) - || get_user(regs->nip, &sc->handler) - || get_user(regs->gpr[3], &sc->signal)) + if (save_user_regs(regs, &frame->mctx, __NR_sigreturn)) + goto badframe; + + if (put_user(regs->gpr[1], (unsigned long *)newsp)) goto badframe; regs->gpr[1] = newsp; + regs->gpr[3] = sig; regs->gpr[4] = (unsigned long) sc; - regs->link = (unsigned long) frame->tramp; + regs->nip = (unsigned long) ka->sa.sa_handler; + regs->link = (unsigned long) frame->mctx.tramp; + regs->trap = 0; return; badframe: #if DEBUG_SIG - printk("badframe in setup_frame, regs=%p frame=%p newsp=%lx\n", - regs, frame, newsp); + printk("badframe in handle_signal, regs=%p frame=%lx newsp=%lx\n", + regs, frame, *newspp); #endif - do_exit(SIGSEGV); + if (sig == SIGSEGV) + ka->sa.sa_handler = SIG_DFL; + force_sig(SIGSEGV, current); } /* - * OK, we're invoking a handler + * Do a signal return; undo the signal stack. */ -static void -handle_signal(unsigned long sig, siginfo_t *info, sigset_t *oldset, - struct pt_regs * regs, unsigned long *newspp, unsigned long frame) +int sys_sigreturn(int r3, int r4, int r5, int r6, int r7, int r8, + struct pt_regs *regs) { struct sigcontext __user *sc; - struct rt_sigframe __user *rt_sf; - struct k_sigaction *ka = ¤t->sighand->action[sig-1]; + struct sigcontext sigctx; + struct mcontext __user *sr; + sigset_t set; - if (TRAP(regs) == 0x0C00 /* System Call! */ - && ((int)regs->result == -ERESTARTNOHAND || - (int)regs->result == -ERESTART_RESTARTBLOCK || - ((int)regs->result == -ERESTARTSYS && - !(ka->sa.sa_flags & SA_RESTART)))) { - if ((int)regs->result == -ERESTART_RESTARTBLOCK) - current_thread_info()->restart_block.fn - = do_no_restart_syscall; - regs->result = -EINTR; - regs->gpr[3] = EINTR; - regs->ccr |= 0x10000000; - } + sc = (struct sigcontext __user *)(regs->gpr[1] + __SIGNAL_FRAMESIZE); + if (copy_from_user(&sigctx, sc, sizeof(sigctx))) + goto badframe; - /* Set up Signal Frame */ - if (ka->sa.sa_flags & SA_SIGINFO) { - /* Put a Real Time Context onto stack */ - *newspp -= sizeof(*rt_sf); - rt_sf = (struct rt_sigframe __user *) *newspp; - if (verify_area(VERIFY_WRITE, rt_sf, sizeof(*rt_sf))) - goto badframe; - - if (__put_user((unsigned long) ka->sa.sa_handler, &rt_sf->uc.uc_mcontext.handler) - || __put_user(&rt_sf->info, &rt_sf->pinfo) - || __put_user(&rt_sf->uc, &rt_sf->puc) - /* Put the siginfo */ - || copy_siginfo_to_user(&rt_sf->info, info) - /* Create the ucontext */ - || __put_user(0, &rt_sf->uc.uc_flags) - || __put_user(0, &rt_sf->uc.uc_link) - || __put_user(current->sas_ss_sp, &rt_sf->uc.uc_stack.ss_sp) - || __put_user(sas_ss_flags(regs->gpr[1]), - &rt_sf->uc.uc_stack.ss_flags) - || __put_user(current->sas_ss_size, &rt_sf->uc.uc_stack.ss_size) - || __copy_to_user(&rt_sf->uc.uc_sigmask, oldset, sizeof(*oldset)) - /* mcontext.regs points to preamble register frame */ - || __put_user((struct pt_regs *)frame, &rt_sf->uc.uc_mcontext.regs) - || __put_user(sig, &rt_sf->uc.uc_mcontext.signal)) - goto badframe; - } else { - /* Put a sigcontext on the stack */ - *newspp -= sizeof(*sc); - sc = (struct sigcontext __user *) *newspp; - if (verify_area(VERIFY_WRITE, sc, sizeof(*sc))) - goto badframe; - - if (__put_user((unsigned long) ka->sa.sa_handler, &sc->handler) - || __put_user(oldset->sig[0], &sc->oldmask) -#if _NSIG_WORDS > 1 - || __put_user(oldset->sig[1], &sc->_unused[3]) -#endif - || __put_user((struct pt_regs *)frame, &sc->regs) - || __put_user(sig, &sc->signal)) - goto badframe; - } + set.sig[0] = sigctx.oldmask; + set.sig[1] = sigctx._unused[3]; + restore_sigmask(&set); - if (ka->sa.sa_flags & SA_ONESHOT) - ka->sa.sa_handler = SIG_DFL; + sr = (struct mcontext *) sigctx.regs; + if (verify_area(VERIFY_READ, sr, sizeof(*sr)) + || restore_user_regs(regs, sr)) + goto badframe; - if (!(ka->sa.sa_flags & SA_NODEFER)) { - spin_lock_irq(¤t->sighand->siglock); - sigorsets(¤t->blocked,¤t->blocked,&ka->sa.sa_mask); - sigaddset(¤t->blocked,sig); - recalc_sigpending(); - spin_unlock_irq(¤t->sighand->siglock); - } - return; + sigreturn_exit(regs); /* doesn't return */ + return 0; badframe: -#if DEBUG_SIG - printk("badframe in handle_signal, regs=%p frame=%lx newsp=%lx\n", - regs, frame, *newspp); - printk("sc=%p sig=%d ka=%p info=%p oldset=%p\n", sc, sig, ka, info, oldset); -#endif - do_exit(SIGSEGV); + force_sig(SIGSEGV, current); + return 0; } /* @@ -475,7 +547,7 @@ int do_signal(sigset_t *oldset, struct p siginfo_t info; struct k_sigaction *ka; unsigned long frame, newsp; - int signr; + int signr, ret; if (!oldset) oldset = ¤t->blocked; @@ -483,40 +555,65 @@ int do_signal(sigset_t *oldset, struct p newsp = frame = 0; signr = get_signal_to_deliver(&info, regs, NULL); - if (signr > 0) { - ka = ¤t->sighand->action[signr-1]; - if ( (ka->sa.sa_flags & SA_ONSTACK) - && (! on_sig_stack(regs->gpr[1]))) - newsp = (current->sas_ss_sp + current->sas_ss_size); - else - newsp = regs->gpr[1]; - newsp = frame = newsp - sizeof(struct sigregs); - /* Whee! Actually deliver the signal. */ - handle_signal(signr, &info, oldset, regs, &newsp, frame); - } + ka = (signr == 0)? NULL: ¤t->sighand->action[signr-1]; - if (TRAP(regs) == 0x0C00) { /* System Call! */ - if ((int)regs->result == -ERESTARTNOHAND || - (int)regs->result == -ERESTARTSYS || - (int)regs->result == -ERESTARTNOINTR) { - regs->gpr[3] = regs->orig_gpr3; + if (TRAP(regs) == 0x0C00 /* System Call! */ + && regs->ccr & 0x10000000 /* error signalled */ + && ((ret = regs->gpr[3]) == ERESTARTSYS + || ret == ERESTARTNOHAND || ret == ERESTARTNOINTR + || ret == ERESTART_RESTARTBLOCK)) { + + if (signr > 0 + && (ret == ERESTARTNOHAND || ret == ERESTART_RESTARTBLOCK + || (ret == ERESTARTSYS + && !(ka->sa.sa_flags & SA_RESTART)))) { + /* make the system call return an EINTR error */ + regs->result = -EINTR; + regs->gpr[3] = EINTR; + /* note that the cr0.SO bit is already set */ + /* clear any restart function that was set */ + if (ret == ERESTART_RESTARTBLOCK) + current_thread_info()->restart_block.fn + = do_no_restart_syscall; + } else { regs->nip -= 4; /* Back up & retry system call */ regs->result = 0; - } else if ((int)regs->result == -ERESTART_RESTARTBLOCK) { - regs->gpr[0] = __NR_restart_syscall; - regs->nip -= 4; - regs->result = 0; + regs->trap = 0; + if (ret == ERESTART_RESTARTBLOCK) + regs->gpr[0] = __NR_restart_syscall; + else + regs->gpr[3] = regs->orig_gpr3; } } - if (newsp == frame) + if (signr == 0) return 0; /* no signals delivered */ + if ((ka->sa.sa_flags & SA_ONSTACK) && current->sas_ss_size + && !on_sig_stack(regs->gpr[1])) + newsp = current->sas_ss_sp + current->sas_ss_size; + else + newsp = regs->gpr[1]; + newsp &= ~0xfUL; + + /* Whee! Actually deliver the signal. */ if (ka->sa.sa_flags & SA_SIGINFO) - setup_rt_frame(regs, (struct sigregs __user *) frame, newsp); + handle_rt_signal(signr, ka, &info, oldset, regs, newsp); else - setup_frame(regs, (struct sigregs __user *) frame, newsp); + handle_signal(signr, ka, &info, oldset, regs, newsp); + + if (ka->sa.sa_flags & SA_ONESHOT) + ka->sa.sa_handler = SIG_DFL; + + if (!(ka->sa.sa_flags & SA_NODEFER)) { + spin_lock_irq(¤t->sighand->siglock); + sigorsets(¤t->blocked,¤t->blocked,&ka->sa.sa_mask); + sigaddset(¤t->blocked, signr); + recalc_sigpending(); + spin_unlock_irq(¤t->sighand->siglock); + } + return 1; } diff -prauN linux-2.6.0-test5/arch/ppc/kernel/smp.c wli-2.6.0-test5-bk12-25/arch/ppc/kernel/smp.c --- linux-2.6.0-test5/arch/ppc/kernel/smp.c 2003-09-08 12:50:31.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/kernel/smp.c 2003-09-25 19:15:49.000000000 -0700 @@ -72,7 +72,7 @@ static int __smp_call_function(void (*fu extern void __save_cpu_setup(void); /* Since OpenPIC has only 4 IPIs, we use slightly different message numbers. - * + * * Make sure this matches openpic_request_IPIs in open_pic.c, or what shows up * in /proc/interrupts will be wrong!!! --Troy */ #define PPC_MSG_CALL_FUNCTION 0 @@ -86,7 +86,7 @@ extern void __save_cpu_setup(void); smp_ops->message_pass((t),(m),(d),(w)); \ } while(0) -/* +/* * Common functions */ void smp_local_timer_interrupt(struct pt_regs * regs) @@ -102,12 +102,12 @@ void smp_local_timer_interrupt(struct pt void smp_message_recv(int msg, struct pt_regs *regs) { atomic_inc(&ipi_recv); - + switch( msg ) { case PPC_MSG_CALL_FUNCTION: smp_call_function_interrupt(); break; - case PPC_MSG_RESCHEDULE: + case PPC_MSG_RESCHEDULE: set_need_resched(); break; case PPC_MSG_INVALIDATE_TLB: @@ -424,7 +424,7 @@ int __cpu_up(unsigned int cpu) /* wake up cpu */ smp_ops->kick_cpu(cpu); - + /* * wait to see if the cpu made a callin (is actually up). * use this value that I found through experimentation. diff -prauN linux-2.6.0-test5/arch/ppc/kernel/syscalls.c wli-2.6.0-test5-bk12-25/arch/ppc/kernel/syscalls.c --- linux-2.6.0-test5/arch/ppc/kernel/syscalls.c 2003-09-08 12:50:32.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/kernel/syscalls.c 2003-09-25 19:15:49.000000000 -0700 @@ -1,7 +1,7 @@ /* * arch/ppc/kernel/sys_ppc.c * - * PowerPC version + * PowerPC version * Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org) * * Derived from "arch/i386/kernel/sys_i386.c" @@ -125,7 +125,7 @@ sys_ipc (uint call, int first, int secon ret = put_user (raddr, (ulong __user *) third); break; } - case SHMDT: + case SHMDT: ret = sys_shmdt ((char __user *)ptr); break; case SHMGET: @@ -169,7 +169,7 @@ do_mmap2(unsigned long addr, size_t len, if (!(file = fget(fd))) goto out; } - + down_write(¤t->mm->mmap_sem); ret = do_mmap_pgoff(file, addr, len, prot, flags, pgoff); up_write(¤t->mm->mmap_sem); @@ -244,7 +244,7 @@ int sys_olduname(struct oldold_utsname _ return -EFAULT; if (!access_ok(VERIFY_WRITE,name,sizeof(struct oldold_utsname))) return -EFAULT; - + down_read(&uts_sem); error = __copy_to_user(&name->sysname,&system_utsname.sysname,__OLD_UTS_LEN); error -= __put_user(0,name->sysname+__OLD_UTS_LEN); diff -prauN linux-2.6.0-test5/arch/ppc/kernel/temp.c wli-2.6.0-test5-bk12-25/arch/ppc/kernel/temp.c --- linux-2.6.0-test5/arch/ppc/kernel/temp.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/kernel/temp.c 2003-09-25 19:15:49.000000000 -0700 @@ -6,7 +6,7 @@ * TODO: * dynamic power management to limit peak CPU temp (using ICTC) * calibration??? - * + * * Silly, crazy ideas: use cpu load (from scheduler) and ICTC to extend battery * life in portables, and add a 'performance/watt' metric somewhere in /proc */ @@ -111,7 +111,7 @@ void TAUupdate(int cpu) #endif #ifndef CONFIG_TAU_INT /* tau_timeout will do this if not using interrupts */ - set_thresholds(cpu); + set_thresholds(cpu); #endif } @@ -128,7 +128,7 @@ void TAUException(struct pt_regs * regs) irq_enter(); tau[cpu].interrupts++; - + TAUupdate(cpu); irq_exit(); @@ -141,7 +141,7 @@ static void tau_timeout(void * info) unsigned long flags; int size; int shrink; - + /* disabling interrupts *should* be okay */ local_irq_save(flags); cpu = smp_processor_id(); @@ -149,7 +149,7 @@ static void tau_timeout(void * info) #ifndef CONFIG_TAU_INT TAUupdate(cpu); #endif - + size = tau[cpu].high - tau[cpu].low; if (size > min_window && ! tau[cpu].grew) { /* do an exponential shrink of half the amount currently over size */ @@ -168,19 +168,19 @@ static void tau_timeout(void * info) } tau[cpu].grew = 0; - + set_thresholds(cpu); /* * Do the enable every time, since otherwise a bunch of (relatively) * complex sleep code needs to be added. One mtspr every time * tau_timeout is called is probably not a big deal. - * + * * Enable thermal sensor and set up sample interval timer * need 20 us to do the compare.. until a nice 'cpu_speed' function * call is implemented, just assume a 500 mhz clock. It doesn't really - * matter if we take too long for a compare since it's all interrupt - * driven anyway. + * matter if we take too long for a compare since it's all interrupt + * driven anyway. * * use a extra long time.. (60 us @ 500 mhz) */ @@ -199,7 +199,7 @@ static void tau_timeout_smp(unsigned lon /* * setup the TAU - * + * * Set things up to use THRM1 as a temperature lower bound, and THRM2 as an upper bound. * Start off at zero */ @@ -209,7 +209,7 @@ int tau_initialized = 0; void __init TAU_init_smp(void * info) { unsigned long cpu = smp_processor_id(); - + /* set these to a reasonable value and let the timer shrink the * window */ tau[cpu].low = 5; @@ -235,16 +235,16 @@ int __init TAU_init(void) tau_timer.function = tau_timeout_smp; tau_timer.expires = jiffies + shrink_timer; add_timer(&tau_timer); - + on_each_cpu(TAU_init_smp, NULL, 1, 0); - + printk("Thermal assist unit "); #ifdef CONFIG_TAU_INT printk("using interrupts, "); #else printk("using timers, "); #endif - printk("shrink_timer: %d jiffies\n", shrink_timer); + printk("shrink_timer: %d jiffies\n", shrink_timer); tau_initialized = 1; return 0; diff -prauN linux-2.6.0-test5/arch/ppc/kernel/time.c wli-2.6.0-test5-bk12-25/arch/ppc/kernel/time.c --- linux-2.6.0-test5/arch/ppc/kernel/time.c 2003-09-08 12:50:19.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/kernel/time.c 2003-09-25 19:15:49.000000000 -0700 @@ -83,6 +83,7 @@ time_t last_rtc_update; unsigned tb_ticks_per_jiffy; unsigned tb_to_us; unsigned tb_last_stamp; +unsigned long tb_to_ns_scale; extern unsigned long wall_jiffies; @@ -151,7 +152,7 @@ void timer_interrupt(struct pt_regs * re do_IRQ(regs); irq_enter(); - + while ((next_dec = tb_ticks_per_jiffy - tb_delta(&jiffy_stamp)) < 0) { jiffy_stamp += tb_ticks_per_jiffy; if (!user_mode(regs)) @@ -264,7 +265,7 @@ int do_settimeofday(struct timespec *tv) * harmful to relatively short timers. */ - /* This works perfectly on SMP only if the tb are in sync but + /* This works perfectly on SMP only if the tb are in sync but * guarantees an error < 1 jiffy even if they are off by eons, * still reasonable when gettimeofday resolution is 1 jiffy. */ @@ -279,7 +280,7 @@ int do_settimeofday(struct timespec *tv) set_normalized_timespec(&xtime, new_sec, new_nsec); set_normalized_timespec(&wall_to_monotonic, wtm_sec, wtm_nsec); - /* In case of a large backwards jump in time with NTP, we want the + /* In case of a large backwards jump in time with NTP, we want the * clock to be updated as soon as the PLL is again in lock. */ last_rtc_update = new_sec - 658; @@ -309,9 +310,10 @@ void __init time_init(void) tb_to_us = 0x418937; } else { ppc_md.calibrate_decr(); + tb_to_ns_scale = mulhwu(tb_to_us, 1000 << 10); } - /* Now that the decrementer is calibrated, it can be used in case the + /* Now that the decrementer is calibrated, it can be used in case the * clock is stuck, but the fact that we have to handle the 601 * makes things more complex. Repeatedly read the RTC until the * next second boundary to try to achieve some precision. If there @@ -323,7 +325,7 @@ void __init time_init(void) sec = ppc_md.get_rtc_time(); elapsed = 0; do { - old_stamp = stamp; + old_stamp = stamp; old_sec = sec; stamp = get_native_tbl(); if (__USE_RTC() && stamp < old_stamp) @@ -432,3 +434,26 @@ unsigned mulhwu_scale_factor(unsigned in return mlt; } +unsigned long long sched_clock(void) +{ + unsigned long lo, hi, hi2; + unsigned long long tb; + + if (!__USE_RTC()) { + do { + hi = get_tbu(); + lo = get_tbl(); + hi2 = get_tbu(); + } while (hi2 != hi); + tb = ((unsigned long long) hi << 32) | lo; + tb = (tb * tb_to_ns_scale) >> 10; + } else { + do { + hi = get_rtcu(); + lo = get_rtcl(); + hi2 = get_rtcu(); + } while (hi2 != hi); + tb = ((unsigned long long) hi) * 1000000000 + lo; + } + return tb; +} diff -prauN linux-2.6.0-test5/arch/ppc/kernel/traps.c wli-2.6.0-test5-bk12-25/arch/ppc/kernel/traps.c --- linux-2.6.0-test5/arch/ppc/kernel/traps.c 2003-09-08 12:49:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/kernel/traps.c 2003-09-25 19:15:49.000000000 -0700 @@ -95,14 +95,19 @@ void die(const char * str, struct pt_reg } void -_exception(int signr, struct pt_regs *regs) +_exception(int signr, struct pt_regs *regs, int code, unsigned long addr) { - if (!user_mode(regs)) - { + siginfo_t info; + + if (!user_mode(regs)) { debugger(regs); die("Exception in kernel mode", regs, signr); } - force_sig(signr, current); + info.si_signo = signr; + info.si_errno = 0; + info.si_code = code; + info.si_addr = (void *) addr; + force_sig_info(signr, &info, current); } /* @@ -154,12 +159,40 @@ static inline int check_io_access(struct return 0; } +#if defined(CONFIG_4xx) || defined(CONFIG_BOOKE) +/* On 4xx, the reason for the machine check or program exception + is in the ESR. */ +#define get_reason(regs) ((regs)->dsisr) +#define REASON_FP 0 +#define REASON_ILLEGAL ESR_PIL +#define REASON_PRIVILEGED ESR_PPR +#define REASON_TRAP ESR_PTR + +/* single-step stuff */ +#define single_stepping(regs) (current->thread.dbcr0 & DBCR0_IC) +#define clear_single_step(regs) (current->thread.dbcr0 &= ~DBCR0_IC) + +#else +/* On non-4xx, the reason for the machine check or program + exception is in the MSR. */ +#define get_reason(regs) ((regs)->msr) +#define REASON_FP 0x100000 +#define REASON_ILLEGAL 0x80000 +#define REASON_PRIVILEGED 0x40000 +#define REASON_TRAP 0x20000 + +#define single_stepping(regs) ((regs)->msr & MSR_SE) +#define clear_single_step(regs) ((regs)->msr &= ~MSR_SE) +#endif + void MachineCheckException(struct pt_regs *regs) { + unsigned long reason = get_reason(regs); + if (user_mode(regs)) { regs->msr |= MSR_RI; - _exception(SIGSEGV, regs); + _exception(SIGBUS, regs, BUS_ADRERR, regs->nip); return; } @@ -178,10 +211,18 @@ MachineCheckException(struct pt_regs *re if (check_io_access(regs)) return; -#ifndef CONFIG_4xx - printk(KERN_CRIT "Machine check in kernel mode.\n"); - printk(KERN_CRIT "Caused by (from SRR1=%lx): ", regs->msr); - switch (regs->msr & 0x601F0000) { +#ifdef CONFIG_4xx + if (reason & ESR_IMCP) { + printk("Instruction"); + mtspr(SPRN_ESR, reason & ~ESR_IMCP); + } else + printk("Data"); + printk(" machine check in kernel mode.\n"); + +#else /* !CONFIG_4xx */ + printk("Machine check in kernel mode.\n"); + printk("Caused by (from SRR1=%lx): ", reason); + switch (reason & 0x601F0000) { case 0x80000: printk("Machine check signal\n"); break; @@ -208,15 +249,6 @@ MachineCheckException(struct pt_regs *re default: printk("Unknown values in msr\n"); } - -#else /* CONFIG_4xx */ - /* Note that the ESR gets stored in regs->dsisr on 4xx. */ - if (regs->dsisr & ESR_MCI) { - printk(KERN_CRIT "Instruction"); - mtspr(SPRN_ESR, regs->dsisr & ~ESR_MCI); - } else - printk(KERN_CRIT "Data"); - printk(" machine check in kernel mode.\n"); #endif /* CONFIG_4xx */ debugger(regs); @@ -238,7 +270,7 @@ UnknownException(struct pt_regs *regs) { printk("Bad trap at PC: %lx, MSR: %lx, vector=%lx %s\n", regs->nip, regs->msr, regs->trap, print_tainted()); - _exception(SIGTRAP, regs); + _exception(SIGTRAP, regs, 0, 0); } void @@ -246,13 +278,13 @@ InstructionBreakpoint(struct pt_regs *re { if (debugger_iabr_match(regs)) return; - _exception(SIGTRAP, regs); + _exception(SIGTRAP, regs, TRAP_BRKPT, 0); } void RunModeException(struct pt_regs *regs) { - _exception(SIGTRAP, regs); + _exception(SIGTRAP, regs, 0, 0); } /* Illegal instruction emulation support. Originally written to @@ -271,17 +303,17 @@ RunModeException(struct pt_regs *regs) static int emulate_instruction(struct pt_regs *regs) { - uint instword; - uint rd; - uint retval; + u32 instword; + u32 rd; + int retval; - retval = EINVAL; + retval = -EINVAL; if (!user_mode(regs)) return retval; CHECK_FULL_REGS(regs); - if (get_user(instword, (uint __user *)(regs->nip))) + if (get_user(instword, (u32 __user *)(regs->nip))) return -EFAULT; /* Emulate the mfspr rD, PVR. @@ -290,10 +322,23 @@ emulate_instruction(struct pt_regs *regs rd = (instword >> 21) & 0x1f; regs->gpr[rd] = mfspr(PVR); retval = 0; - } - if (retval == 0) regs->nip += 4; - return(retval); + } + return retval; +} + +/* + * After we have successfully emulated an instruction, we have to + * check if the instruction was being single-stepped, and if so, + * pretend we got a single-step exception. This was pointed out + * by Kumar Gala. -- paulus + */ +static void emulate_single_step(struct pt_regs *regs) +{ + if (single_stepping(regs)) { + clear_single_step(regs); + _exception(SIGTRAP, regs, TRAP_TRACE, 0); + } } /* @@ -349,29 +394,47 @@ check_bug_trap(struct pt_regs *regs) void ProgramCheckException(struct pt_regs *regs) { - int errcode; - -#if defined(CONFIG_4xx) - unsigned int esr = regs->dsisr; - int isbpt = esr & ESR_PTR; + unsigned int reason = get_reason(regs); extern int do_mathemu(struct pt_regs *regs); #ifdef CONFIG_MATH_EMULATION - if (!isbpt && do_mathemu(regs) == 0) + /* (reason & REASON_ILLEGAL) would be the obvious thing here, + * but there seems to be a hardware bug on the 405GP (RevD) + * that means ESR is sometimes set incorrectly - either to + * ESR_DST (!?) or 0. In the process of chasing this with the + * hardware people - not sure if it can happen on any illegal + * instruction or only on FP instructions, whether there is a + * pattern to occurences etc. -dgibson 31/Mar/2003 */ + if (!(reason & REASON_TRAP) && do_mathemu(regs) == 0) { + emulate_single_step(regs); return; + } #endif /* CONFIG_MATH_EMULATION */ -#else /* ! CONFIG_4xx */ - int isbpt = regs->msr & 0x20000; - - if (regs->msr & 0x100000) { + if (reason & REASON_FP) { /* IEEE FP exception */ - _exception(SIGFPE, regs); + int code = 0; + u32 fpscr; + + if (regs->msr & MSR_FP) + giveup_fpu(current); + fpscr = current->thread.fpscr; + fpscr &= fpscr << 22; /* mask summary bits with enables */ + if (fpscr & FPSCR_VX) + code = FPE_FLTINV; + else if (fpscr & FPSCR_OX) + code = FPE_FLTOVF; + else if (fpscr & FPSCR_UX) + code = FPE_FLTUND; + else if (fpscr & FPSCR_ZX) + code = FPE_FLTDIV; + else if (fpscr & FPSCR_XX) + code = FPE_FLTRES; + _exception(SIGFPE, regs, code, regs->nip); return; } -#endif /* ! CONFIG_4xx */ - if (isbpt) { + if (reason & REASON_TRAP) { /* trap exception */ if (debugger_bpt(regs)) return; @@ -379,17 +442,21 @@ ProgramCheckException(struct pt_regs *re regs->nip += 4; return; } - _exception(SIGTRAP, regs); + _exception(SIGTRAP, regs, TRAP_BRKPT, 0); return; } - /* Try to emulate it if we should. */ - if ((errcode = emulate_instruction(regs))) { - if (errcode == -EFAULT) - _exception(SIGBUS, regs); - else - _exception(SIGILL, regs); + if (reason & REASON_PRIVILEGED) { + /* Try to emulate it if we should. */ + if (emulate_instruction(regs) == 0) { + emulate_single_step(regs); + return; + } + _exception(SIGILL, regs, ILL_PRVOPC, regs->nip); + return; } + + _exception(SIGILL, regs, ILL_ILLOPC, regs->nip); } void @@ -398,7 +465,7 @@ SingleStepException(struct pt_regs *regs regs->msr &= ~MSR_SE; /* Turn off 'trace' bit */ if (debugger_sstep(regs)) return; - _exception(SIGTRAP, regs); + _exception(SIGTRAP, regs, TRAP_TRACE, 0); } void @@ -414,12 +481,12 @@ AlignmentException(struct pt_regs *regs) if (fixed == -EFAULT) { /* fixed == -EFAULT means the operand address was bad */ if (user_mode(regs)) - force_sig(SIGSEGV, current); + _exception(SIGSEGV, regs, SEGV_ACCERR, regs->dar); else bad_page_fault(regs, regs->dar, SIGSEGV); return; } - _exception(SIGBUS, regs); + _exception(SIGBUS, regs, BUS_ADRALN, regs->dar); } void @@ -470,16 +537,17 @@ SoftwareEmulation(struct pt_regs *regs) #endif if (errcode) { if (errcode > 0) - _exception(SIGFPE, regs); + _exception(SIGFPE, regs, 0, 0); else if (errcode == -EFAULT) - _exception(SIGSEGV, regs); + _exception(SIGSEGV, regs, 0, 0); else - _exception(SIGILL, regs); - } + _exception(SIGILL, regs, ILL_ILLOPC, regs->nip); + } else + emulate_single_step(regs); } #endif /* CONFIG_8xx */ -#if defined(CONFIG_4xx) +#if defined(CONFIG_4xx) || defined(CONFIG_BOOKE) void DebugException(struct pt_regs *regs, unsigned long debug_status) { @@ -487,7 +555,7 @@ void DebugException(struct pt_regs *regs if (debug_status & DBSR_TIE) { /* trap instruction*/ if (!user_mode(regs) && debugger_bpt(regs)) return; - _exception(SIGTRAP, regs); + _exception(SIGTRAP, regs, 0, 0); } #endif @@ -495,10 +563,10 @@ void DebugException(struct pt_regs *regs if (!user_mode(regs) && debugger_sstep(regs)) return; current->thread.dbcr0 &= ~DBCR0_IC; - _exception(SIGTRAP, regs); + _exception(SIGTRAP, regs, TRAP_TRACE, 0); } } -#endif /* CONFIG_4xx */ +#endif /* CONFIG_4xx || CONFIG_BOOKE */ #if !defined(CONFIG_TAU_INT) void @@ -509,6 +577,17 @@ TAUException(struct pt_regs *regs) } #endif /* CONFIG_INT_TAU */ +#ifdef CONFIG_ALTIVEC +void +AltivecAssistException(struct pt_regs *regs) +{ + if (regs->msr & MSR_VEC) + giveup_altivec(current); + /* XXX quick hack for now: set the non-Java bit in the VSCR */ + current->thread.vscr.u[3] |= 0x10000; +} +#endif /* CONFIG_ALTIVEC */ + void __init trap_init(void) { } diff -prauN linux-2.6.0-test5/arch/ppc/kernel/vmlinux.lds.S wli-2.6.0-test5-bk12-25/arch/ppc/kernel/vmlinux.lds.S --- linux-2.6.0-test5/arch/ppc/kernel/vmlinux.lds.S 2003-09-08 12:51:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/kernel/vmlinux.lds.S 2003-09-25 19:15:49.000000000 -0700 @@ -79,12 +79,12 @@ SECTIONS . = ALIGN(4096); __init_begin = .; - .init.text : { + .init.text : { _sinittext = .; *(.init.text) _einittext = .; } - .init.data : { + .init.data : { *(.init.data); __vtop_table_begin = .; *(.vtop_fixup); @@ -102,12 +102,12 @@ SECTIONS __stop___param = .; __initcall_start = .; .initcall.init : { - *(.initcall1.init) - *(.initcall2.init) - *(.initcall3.init) - *(.initcall4.init) - *(.initcall5.init) - *(.initcall6.init) + *(.initcall1.init) + *(.initcall2.init) + *(.initcall3.init) + *(.initcall4.init) + *(.initcall5.init) + *(.initcall6.init) *(.initcall7.init) } __initcall_end = .; diff -prauN linux-2.6.0-test5/arch/ppc/lib/locks.c wli-2.6.0-test5-bk12-25/arch/ppc/lib/locks.c --- linux-2.6.0-test5/arch/ppc/lib/locks.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/lib/locks.c 2003-09-25 19:15:49.000000000 -0700 @@ -1,6 +1,6 @@ /* - * Locks for smp ppc - * + * Locks for smp ppc + * * Written by Cort Dougan (cort@cs.nmt.edu) */ @@ -70,7 +70,7 @@ int _raw_spin_trylock(spinlock_t *lock) { if (__spin_trylock(&lock->lock)) return 0; - lock->owner_cpu = smp_processor_id(); + lock->owner_cpu = smp_processor_id(); lock->owner_pc = (unsigned long)__builtin_return_address(0); return 1; } @@ -101,7 +101,7 @@ void _raw_read_lock(rwlock_t *rw) unsigned long stuck = INIT_STUCK; int cpu = smp_processor_id(); -again: +again: /* get our read lock in there */ atomic_inc((atomic_t *) &(rw)->lock); if ( (signed long)((rw)->lock) < 0) /* someone has a write lock */ @@ -153,7 +153,7 @@ again: } goto again; } - + if ( (rw)->lock & ~(1<<31)) /* someone has a read lock */ { /* clear our write lock and wait for reads to go away */ diff -prauN linux-2.6.0-test5/arch/ppc/math-emu/fcmpo.c wli-2.6.0-test5-bk12-25/arch/ppc/math-emu/fcmpo.c --- linux-2.6.0-test5/arch/ppc/math-emu/fcmpo.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/math-emu/fcmpo.c 2003-09-25 19:15:49.000000000 -0700 @@ -37,7 +37,7 @@ fcmpo(u32 *ccr, int crfD, void *frA, voi *ccr &= ~(15 << ((7 - crfD) << 2)); *ccr |= (cmp << ((7 - crfD) << 2)); - + #ifdef DEBUG printk("CR: %08x\n", *ccr); #endif diff -prauN linux-2.6.0-test5/arch/ppc/math-emu/op-1.h wli-2.6.0-test5-bk12-25/arch/ppc/math-emu/op-1.h --- linux-2.6.0-test5/arch/ppc/math-emu/op-1.h 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/math-emu/op-1.h 2003-09-25 19:15:49.000000000 -0700 @@ -197,14 +197,14 @@ udiv_qrnnd(_q, _r, _nh, _nl, Y##_f); \ R##_f = _q | (_r != 0); \ } while (0) - - + + /* * Square root algorithms: * We have just one right now, maybe Newton approximation * should be added for those machines where division is fast. */ - + #define _FP_SQRT_MEAT_1(R, S, T, X, q) \ do { \ while (q) \ @@ -222,7 +222,7 @@ } while (0) /* - * Assembly/disassembly for converting to/from integral types. + * Assembly/disassembly for converting to/from integral types. * No shifting or overflow handled here. */ diff -prauN linux-2.6.0-test5/arch/ppc/math-emu/op-2.h wli-2.6.0-test5-bk12-25/arch/ppc/math-emu/op-2.h --- linux-2.6.0-test5/arch/ppc/math-emu/op-2.h 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/math-emu/op-2.h 2003-09-25 19:15:49.000000000 -0700 @@ -98,7 +98,7 @@ #define _FP_MINFRAC_2 0, 1 /* - * Internals + * Internals */ #define __FP_FRAC_SET_2(X,I1,I0) (X##_f0 = I0, X##_f1 = I1) @@ -210,8 +210,8 @@ /* This next macro appears to be totally broken. Fortunately nowhere * seems to use it :-> The problem is that we define _z[4] but * then use it in _FP_FRAC_SRS_4, which will attempt to access - * _z_f[n] which will cause an error. The fix probably involves - * declaring it with _FP_FRAC_DECL_4, see previous macro. -- PMM 02/1998 + * _z_f[n] which will cause an error. The fix probably involves + * declaring it with _FP_FRAC_DECL_4, see previous macro. -- PMM 02/1998 */ #define _FP_MUL_MEAT_2_gmp(fs, R, X, Y) \ do { \ @@ -232,7 +232,7 @@ /* * Division algorithms: - * This seems to be giving me difficulties -- PMM + * This seems to be giving me difficulties -- PMM * Look, NetBSD seems to be able to comment algorithms. Can't you? * I've thrown printks at the problem. * This now appears to work, but I still don't really know why. @@ -354,7 +354,7 @@ * We have just one right now, maybe Newton approximation * should be added for those machines where division is fast. */ - + #define _FP_SQRT_MEAT_2(R, S, T, X, q) \ do { \ while (q) \ @@ -391,7 +391,7 @@ /* - * Assembly/disassembly for converting to/from integral types. + * Assembly/disassembly for converting to/from integral types. * No shifting or overflow handled here. */ diff -prauN linux-2.6.0-test5/arch/ppc/math-emu/op-4.h wli-2.6.0-test5-bk12-25/arch/ppc/math-emu/op-4.h --- linux-2.6.0-test5/arch/ppc/math-emu/op-4.h 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/math-emu/op-4.h 2003-09-25 19:15:49.000000000 -0700 @@ -7,14 +7,14 @@ * _FP_MUL_MEAT_2_wide() uses _FP_FRAC_DECL_4, _FP_FRAC_WORD_4, * _FP_FRAC_ADD_4, _FP_FRAC_SRS_4 * _FP_MUL_MEAT_2_gmp() uses _FP_FRAC_SRS_4 (and should use - * _FP_FRAC_DECL_4: it appears to be broken and is not used + * _FP_FRAC_DECL_4: it appears to be broken and is not used * anywhere anyway. ) * * I've now fixed all the macros that were here from the sparc64 code. * [*none* of the shift macros were correct!] -- PMM 02/1998 - * - * The only quadword stuff that remains to be coded is: - * 1) the conversion to/from ints, which requires + * + * The only quadword stuff that remains to be coded is: + * 1) the conversion to/from ints, which requires * that we check (in op-common.h) that the following do the right thing * for quadwords: _FP_TO_INT(Q,4,r,X,rsz,rsg), _FP_FROM_INT(Q,4,X,r,rs,rt) * 2) multiply, divide and sqrt, which require: @@ -32,9 +32,9 @@ /* The _FP_FRAC_SET_n(X,I) macro is intended for use with another * macro such as _FP_ZEROFRAC_n which returns n comma separated values. * The result is that we get an expansion of __FP_FRAC_SET_n(X,I0,I1,I2,I3) - * which just assigns the In values to the array X##_f[]. + * which just assigns the In values to the array X##_f[]. * This is why the number of parameters doesn't appear to match - * at first glance... -- PMM + * at first glance... -- PMM */ #define _FP_FRAC_SET_4(X,I) __FP_FRAC_SET_4(X, I) #define _FP_FRAC_HIGH_4(X) (X##_f[3]) @@ -70,7 +70,7 @@ } while (0) -/* Right shift with sticky-lsb. +/* Right shift with sticky-lsb. * What this actually means is that we do a standard right-shift, * but that if any of the bits that fall off the right hand side * were one then we always set the LSbit. @@ -187,7 +187,7 @@ /* - * Internals + * Internals */ #define __FP_FRAC_SET_4(X,I3,I2,I1,I0) \ @@ -218,9 +218,9 @@ /* Convert FP values between word sizes. This appears to be more * complicated than I'd have expected it to be, so these might be * wrong... These macros are in any case somewhat bogus because they - * use information about what various FRAC_n variables look like + * use information about what various FRAC_n variables look like * internally [eg, that 2 word vars are X_f0 and x_f1]. But so do - * the ones in op-2.h and op-1.h. + * the ones in op-2.h and op-1.h. */ #define _FP_FRAC_CONV_1_4(dfs, sfs, D, S) \ do { \ @@ -237,7 +237,7 @@ D##_f1 = S##_f[1]; \ } while (0) -/* Assembly/disassembly for converting to/from integral types. +/* Assembly/disassembly for converting to/from integral types. * No shifting or overflow handled here. */ /* Put the FP value X into r, which is an integer of size rsize. */ diff -prauN linux-2.6.0-test5/arch/ppc/math-emu/op-common.h wli-2.6.0-test5-bk12-25/arch/ppc/math-emu/op-common.h --- linux-2.6.0-test5/arch/ppc/math-emu/op-common.h 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/math-emu/op-common.h 2003-09-25 19:15:49.000000000 -0700 @@ -525,7 +525,7 @@ do { \ * Convert from FP to integer */ -/* "When a NaN, infinity, large positive argument >= 2147483648.0, or +/* "When a NaN, infinity, large positive argument >= 2147483648.0, or * large negative argument <= -2147483649.0 is converted to an integer, * the invalid_current bit...should be set and fp_exception_IEEE_754 should * be raised. If the floating point invalid trap is disabled, no trap occurs @@ -538,7 +538,7 @@ do { \ * -- SPARC Architecture Manual V9, Appendix B, which specifies how * SPARCs resolve implementation dependencies in the IEEE-754 spec. * I don't believe that the code below follows this. I'm not even sure - * it's right! + * it's right! * It doesn't cope with needing to convert to an n bit integer when there * is no n bit integer type. Fortunately gcc provides long long so this * isn't a problem for sparc32. @@ -546,7 +546,7 @@ do { \ * -- PMM 02/1998 * NB: rsigned is not 'is r declared signed?' but 'should the value stored * in r be signed or unsigned?'. r is always(?) declared unsigned. - * Comments below are mine, BTW -- PMM + * Comments below are mine, BTW -- PMM */ #define _FP_TO_INT(fs, wc, r, X, rsize, rsigned) \ do { \ diff -prauN linux-2.6.0-test5/arch/ppc/math-emu/sfp-machine.h wli-2.6.0-test5-bk12-25/arch/ppc/math-emu/sfp-machine.h --- linux-2.6.0-test5/arch/ppc/math-emu/sfp-machine.h 2003-09-08 12:49:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/math-emu/sfp-machine.h 2003-09-25 19:15:49.000000000 -0700 @@ -15,10 +15,10 @@ You should have received a copy of the GNU Library General Public License along with the GNU C Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., - 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. Actually, this is a PPC (32bit) version, written based on the - i386, sparc, and sparc64 versions, by me, + i386, sparc, and sparc64 versions, by me, Peter Maydell (pmaydell@chiark.greenend.org.uk). Comments are by and large also mine, although they may be inaccurate. @@ -48,12 +48,12 @@ /* We need to know how to multiply and divide. If the host word size * is >= 2*fracbits you can use FP_MUL_MEAT_n_imm(t,R,X,Y) which * codes the multiply with whatever gcc does to 'a * b'. - * _FP_MUL_MEAT_n_wide(t,R,X,Y,f) is used when you have an asm - * function that can multiply two 1W values and get a 2W result. + * _FP_MUL_MEAT_n_wide(t,R,X,Y,f) is used when you have an asm + * function that can multiply two 1W values and get a 2W result. * Otherwise you're stuck with _FP_MUL_MEAT_n_hard(t,R,X,Y) which * does bitshifting to avoid overflow. * For division there is FP_DIV_MEAT_n_imm(t,R,X,Y,f) for word size - * >= 2*fracbits, where f is either _FP_DIV_HELP_imm or + * >= 2*fracbits, where f is either _FP_DIV_HELP_imm or * _FP_DIV_HELP_ldiv (see op-1.h). * _FP_DIV_MEAT_udiv() is if you have asm to do 2W/1W => (1W, 1W). * [GCC and glibc have longlong.h which has the asm macro udiv_qrnnd @@ -85,7 +85,7 @@ #define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_udiv(S,R,X,Y) #define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_2_udiv_64(D,R,X,Y) -/* These macros define what NaN looks like. They're supposed to expand to +/* These macros define what NaN looks like. They're supposed to expand to * a comma-separated set of 32bit unsigned ints that encode NaN. */ #define _FP_NANFRAC_S _FP_QNANBIT_S @@ -94,10 +94,10 @@ #define _FP_KEEPNANFRACP 1 -/* This macro appears to be called when both X and Y are NaNs, and +/* This macro appears to be called when both X and Y are NaNs, and * has to choose one and copy it to R. i386 goes for the larger of the * two, sparc64 just picks Y. I don't understand this at all so I'll - * go with sparc64 because it's shorter :-> -- PMM + * go with sparc64 because it's shorter :-> -- PMM */ #define _FP_CHOOSENAN(fs, wc, R, X, Y) \ do { \ @@ -105,7 +105,7 @@ _FP_FRAC_COPY_##wc(R,Y); \ R##_c = FP_CLS_NAN; \ } while (0) - + extern void fp_unpack_d(long *, unsigned long *, unsigned long *, long *, long *, void *); @@ -151,7 +151,7 @@ extern int fp_pack_ds(void *, long, uns _flo->bits.exp = X##_e; \ _flo->bits.sign = X##_s; \ } while (0) - + #define __FP_PACK_RAW_2(fs, val, X) \ do { \ union _FP_UNION_##fs *_flo = \ @@ -288,7 +288,7 @@ extern int fp_pack_ds(void *, long, uns "r" ((USItype)(bl))); \ } while (0) -/* asm fragments for mul and div */ +/* asm fragments for mul and div */ /* umul_ppmm(high_prod, low_prod, multipler, multiplicand) multiplies two * UWtype integers MULTIPLER and MULTIPLICAND, and generates a two UWtype diff -prauN linux-2.6.0-test5/arch/ppc/math-emu/stfd.c wli-2.6.0-test5-bk12-25/arch/ppc/math-emu/stfd.c --- linux-2.6.0-test5/arch/ppc/math-emu/stfd.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/math-emu/stfd.c 2003-09-25 19:15:49.000000000 -0700 @@ -1,7 +1,7 @@ #include #include #include - + int stfd(void *frS, void *ea) { diff -prauN linux-2.6.0-test5/arch/ppc/mm/44x_mmu.c wli-2.6.0-test5-bk12-25/arch/ppc/mm/44x_mmu.c --- linux-2.6.0-test5/arch/ppc/mm/44x_mmu.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/mm/44x_mmu.c 2003-09-25 19:15:49.000000000 -0700 @@ -5,7 +5,7 @@ * This file contains the routines for initializing the MMU * on the 4xx series of chips. * -- paulus - * + * * Derived from arch/ppc/mm/init.c: * Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org) * diff -prauN linux-2.6.0-test5/arch/ppc/mm/4xx_mmu.c wli-2.6.0-test5-bk12-25/arch/ppc/mm/4xx_mmu.c --- linux-2.6.0-test5/arch/ppc/mm/4xx_mmu.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/mm/4xx_mmu.c 2003-09-25 19:15:49.000000000 -0700 @@ -2,7 +2,7 @@ * This file contains the routines for initializing the MMU * on the 4xx series of chips. * -- paulus - * + * * Derived from arch/ppc/mm/init.c: * Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org) * @@ -118,7 +118,7 @@ unsigned long __init mmu_mapin_ram(void) p += LARGE_PAGE_SIZE_16M; s += LARGE_PAGE_SIZE_16M; } - + while (s <= (total_lowmem - LARGE_PAGE_SIZE_4M)) { pmd_t *pmdp; unsigned long val = p | _PMD_SIZE_4M | _PAGE_HWEXEC | _PAGE_HWWRITE; diff -prauN linux-2.6.0-test5/arch/ppc/mm/fault.c wli-2.6.0-test5-bk12-25/arch/ppc/mm/fault.c --- linux-2.6.0-test5/arch/ppc/mm/fault.c 2003-09-08 12:49:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/mm/fault.c 2003-09-25 19:15:49.000000000 -0700 @@ -1,7 +1,7 @@ /* * arch/ppc/mm/fault.c * - * PowerPC version + * PowerPC version * Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org) * * Derived from "arch/i386/mm/fault.c" @@ -201,7 +201,7 @@ good_area: /* Guarded storage error. */ goto bad_area; #endif /* CONFIG_8xx */ - + /* a write */ if (is_write) { if (!(vma->vm_flags & VM_WRITE)) @@ -281,7 +281,7 @@ good_area: bad_area: up_read(&mm->mmap_sem); - pte_errors++; + pte_errors++; /* User mode accesses cause a SIGSEGV */ if (user_mode(regs)) { @@ -379,7 +379,7 @@ pte_t *va_to_pte(unsigned long address) unsigned long va_to_phys(unsigned long address) { pte_t *pte; - + pte = va_to_pte(address); if (pte) return(((unsigned long)(pte_val(*pte)) & PAGE_MASK) | (address & ~(PAGE_MASK))); @@ -402,7 +402,7 @@ print_8xx_pte(struct mm_struct *mm, unsi if (pte) { printk(" (0x%08lx)->(0x%08lx)->0x%08lx\n", (long)pgd, (long)pte, (long)pte_val(*pte)); -#define pp ((long)pte_val(*pte)) +#define pp ((long)pte_val(*pte)) printk(" RPN: %05lx PP: %lx SPS: %lx SH: %lx " "CI: %lx v: %lx\n", pp>>12, /* rpn */ @@ -412,7 +412,7 @@ print_8xx_pte(struct mm_struct *mm, unsi (pp>>1)&1, /* cache inhibit */ pp&1 /* valid */ ); -#undef pp +#undef pp } else { printk("no pte\n"); diff -prauN linux-2.6.0-test5/arch/ppc/mm/hashtable.S wli-2.6.0-test5-bk12-25/arch/ppc/mm/hashtable.S --- linux-2.6.0-test5/arch/ppc/mm/hashtable.S 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/mm/hashtable.S 2003-09-25 19:15:49.000000000 -0700 @@ -3,7 +3,7 @@ * * $Id: hashtable.S,v 1.6 1999/10/08 01:56:15 paulus Exp $ * - * PowerPC version + * PowerPC version * Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org) * Rewritten by Cort Dougan (cort@cs.nmt.edu) for PReP * Copyright (C) 1996 Cort Dougan @@ -20,7 +20,7 @@ * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version * 2 of the License, or (at your option) any later version. - * + * */ #include @@ -150,7 +150,7 @@ retry: lwz r7,GPR7(r11) lwz r8,GPR8(r11) b fast_exception_return - + #ifdef CONFIG_SMP hash_page_out: eieio diff -prauN linux-2.6.0-test5/arch/ppc/mm/init.c wli-2.6.0-test5-bk12-25/arch/ppc/mm/init.c --- linux-2.6.0-test5/arch/ppc/mm/init.c 2003-09-08 12:49:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/mm/init.c 2003-09-28 23:04:07.000000000 -0700 @@ -473,14 +473,14 @@ void __init mem_init(void) printk(KERN_INFO "AGP special page: 0x%08lx\n", agp_special_page); #endif - /* Make sure all our pagetable pages have page->mapping + /* Make sure all our pagetable pages have page_mapping(page) and page->index set correctly. */ for (addr = KERNELBASE; addr != 0; addr += PGDIR_SIZE) { struct page *pg; pmd_t *pmd = pmd_offset(pgd_offset_k(addr), addr); if (pmd_present(*pmd)) { pg = pmd_page(*pmd); - pg->mapping = (void *) &init_mm; + set_page_mapping(pg, &init_mm); pg->index = addr; } } @@ -537,14 +537,14 @@ set_phys_avail(unsigned long total_memor * memory as high as possible (it must be outside of the * bus address seen as the AGP aperture). It will be used * by the r128 DRM driver - * + * * FIXME: We need to make sure that page doesn't overlap any of the\ * above. This could be done by improving mem_pieces_find to be able * to do a backward search from the end of the list. */ if (_machine == _MACH_Pmac && find_devices("uni-north-agp")) { agp_special_page = (total_memory - PAGE_SIZE); - mem_pieces_remove(&phys_avail, agp_special_page, PAGE_SIZE, 0); + mem_pieces_remove(&phys_avail, agp_special_page, PAGE_SIZE, 0); agp_special_page = (unsigned long)__va(agp_special_page); } #endif /* CONFIG_PPC_PMAC */ diff -prauN linux-2.6.0-test5/arch/ppc/mm/mem_pieces.c wli-2.6.0-test5-bk12-25/arch/ppc/mm/mem_pieces.c --- linux-2.6.0-test5/arch/ppc/mm/mem_pieces.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/mm/mem_pieces.c 2003-09-25 19:15:50.000000000 -0700 @@ -46,14 +46,14 @@ mem_pieces_find(unsigned int size, unsig } } panic("Couldn't find %u bytes at %u alignment\n", size, align); - + return NULL; } /* * Remove some memory from an array of pieces */ -void __init +void __init mem_pieces_remove(struct mem_pieces *mp, unsigned int start, unsigned int size, int must_exist) { diff -prauN linux-2.6.0-test5/arch/ppc/mm/mmu_context.c wli-2.6.0-test5-bk12-25/arch/ppc/mm/mmu_context.c --- linux-2.6.0-test5/arch/ppc/mm/mmu_context.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/mm/mmu_context.c 2003-09-25 19:15:50.000000000 -0700 @@ -4,7 +4,7 @@ * architecture specification. This includes the 6xx, 7xx, 7xxx, * 8260, and POWER3 implementations but excludes the 8xx and 4xx. * -- paulus - * + * * Derived from arch/ppc/mm/init.c: * Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org) * diff -prauN linux-2.6.0-test5/arch/ppc/mm/mmu_decl.h wli-2.6.0-test5-bk12-25/arch/ppc/mm/mmu_decl.h --- linux-2.6.0-test5/arch/ppc/mm/mmu_decl.h 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/mm/mmu_decl.h 2003-09-25 19:15:50.000000000 -0700 @@ -1,7 +1,7 @@ /* * Declarations of procedures and variables shared between files * in arch/ppc/mm/. - * + * * Derived from arch/ppc/mm/init.c: * Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org) * diff -prauN linux-2.6.0-test5/arch/ppc/mm/pgtable.c wli-2.6.0-test5-bk12-25/arch/ppc/mm/pgtable.c --- linux-2.6.0-test5/arch/ppc/mm/pgtable.c 2003-09-08 12:49:55.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/mm/pgtable.c 2003-09-25 19:15:50.000000000 -0700 @@ -1,7 +1,7 @@ /* * This file contains the routines setting up the linux page tables. * -- paulus - * + * * Derived from arch/ppc/mm/init.c: * Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org) * @@ -189,7 +189,7 @@ __ioremap(phys_addr_t addr, unsigned lon */ if ((v = p_mapped_by_bats(p)) /*&& p_mapped_by_bats(p+size-1)*/ ) goto out; - + if (mem_init_done) { struct vm_struct *area; area = get_vm_area(size, VM_IOREMAP); @@ -366,7 +366,7 @@ unsigned long iopa(unsigned long addr) mm = current->mm; else mm = &init_mm; - + pa = 0; if (get_pteptr(mm, addr, &pte)) { pa = (pte_val(*pte) & PAGE_MASK) | (addr & ~PAGE_MASK); @@ -401,7 +401,7 @@ mm_ptov (unsigned long paddr) goto exit; } } - + ret = (unsigned long) __va(paddr); } exit: diff -prauN linux-2.6.0-test5/arch/ppc/mm/ppc_mmu.c wli-2.6.0-test5-bk12-25/arch/ppc/mm/ppc_mmu.c --- linux-2.6.0-test5/arch/ppc/mm/ppc_mmu.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/mm/ppc_mmu.c 2003-09-25 19:15:50.000000000 -0700 @@ -4,7 +4,7 @@ * architecture specification. This includes the 6xx, 7xx, 7xxx, * 8260, and POWER3 implementations but excludes the 8xx and 4xx. * -- paulus - * + * * Derived from arch/ppc/mm/init.c: * Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org) * diff -prauN linux-2.6.0-test5/arch/ppc/mm/tlb.c wli-2.6.0-test5-bk12-25/arch/ppc/mm/tlb.c --- linux-2.6.0-test5/arch/ppc/mm/tlb.c 2003-09-08 12:50:16.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/mm/tlb.c 2003-09-25 19:15:50.000000000 -0700 @@ -1,10 +1,10 @@ /* * This file contains the routines for TLB flushing. * On machines where the MMU uses a hash table to store virtual to - * physical translations, these routines flush entries from the + * physical translations, these routines flush entries from the * hash table also. * -- paulus - * + * * Derived from arch/ppc/mm/init.c: * Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org) * diff -prauN linux-2.6.0-test5/arch/ppc/ocp/ocp-driver.c wli-2.6.0-test5-bk12-25/arch/ppc/ocp/ocp-driver.c --- linux-2.6.0-test5/arch/ppc/ocp/ocp-driver.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/ocp/ocp-driver.c 2003-09-25 19:15:50.000000000 -0700 @@ -1,7 +1,7 @@ /* * FILE NAME: ocp-driver.c * - * BRIEF MODULE DESCRIPTION: + * BRIEF MODULE DESCRIPTION: * driver callback, id matching and registration * Based on drivers/pci/pci-driver, Copyright (c) 1997--1999 Martin Mares * @@ -105,7 +105,7 @@ ocp_device_resume(struct device *dev, u3 * of the IDs listed for a given OCP driver. * @dev: the generic device struct for the OCP device * @drv: the generic driver struct for the OCP driver - * + * * Used by a driver to check whether a OCP device present in the * system is in its list of supported devices. Returns 1 for a * match, or 0 if there is no match. @@ -150,7 +150,7 @@ postcore_initcall(ocp_driver_init); /** * ocp_register_driver - register a new ocp driver * @drv: the driver structure to register - * + * * Adds the driver structure to the list of registered drivers * Returns the number of ocp devices which were claimed by the driver * during registration. The driver remains registered even if the @@ -177,7 +177,7 @@ ocp_register_driver(struct ocp_driver *d /** * ocp_unregister_driver - unregister a ocp driver * @drv: the driver structure to unregister - * + * * Deletes the driver structure from the list of registered OCP drivers, * gives it a chance to clean up by calling its remove() function for * each device it was responsible for, and marks those devices as diff -prauN linux-2.6.0-test5/arch/ppc/ocp/ocp-probe.c wli-2.6.0-test5-bk12-25/arch/ppc/ocp/ocp-probe.c --- linux-2.6.0-test5/arch/ppc/ocp/ocp-probe.c 2003-09-08 12:50:55.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/ocp/ocp-probe.c 2003-09-25 19:15:50.000000000 -0700 @@ -1,7 +1,7 @@ /* * FILE NAME: ocp-probe.c * - * BRIEF MODULE DESCRIPTION: + * BRIEF MODULE DESCRIPTION: * Device scanning & bus set routines * Based on drivers/pci/probe, Copyright (c) 1997--1999 Martin Mares * @@ -57,7 +57,7 @@ ocp_setup_dev(struct ocp_def *odef, unsi dev->current_state = 4; sprintf(dev->name, "OCP device %04x:%04x", dev->vendor, dev->device); - + DBG("%s %s 0x%lx irq:%d pm:0x%lx \n", dev->slot_name, dev->name, (unsigned long) dev->paddr, dev->irq, dev->pm); diff -prauN linux-2.6.0-test5/arch/ppc/ocp/ocp.c wli-2.6.0-test5-bk12-25/arch/ppc/ocp/ocp.c --- linux-2.6.0-test5/arch/ppc/ocp/ocp.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/ocp/ocp.c 2003-09-25 19:15:50.000000000 -0700 @@ -45,7 +45,7 @@ * ocp_get_num - This determines how many OCP devices of a given * device are registered * @device: OCP device such as HOST, PCI, GPT, UART, OPB, IIC, GPIO, EMAC, ZMII, - * + * * The routine returns the number that devices which is registered */ unsigned int ocp_get_num(unsigned int device) @@ -63,11 +63,11 @@ unsigned int ocp_get_num(unsigned int de } /** - * ocp_get_dev - get ocp driver pointer for ocp device and instance of it + * ocp_get_dev - get ocp driver pointer for ocp device and instance of it * @device: OCP device such as PCI, GPT, UART, OPB, IIC, GPIO, EMAC, ZMII * @dev_num: ocp device number whos paddr you want - * - * The routine returns ocp device pointer + * + * The routine returns ocp device pointer * in list based on device and instance of that device * */ diff -prauN linux-2.6.0-test5/arch/ppc/platforms/4xx/Kconfig wli-2.6.0-test5-bk12-25/arch/ppc/platforms/4xx/Kconfig --- linux-2.6.0-test5/arch/ppc/platforms/4xx/Kconfig 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/4xx/Kconfig 2003-09-25 19:15:50.000000000 -0700 @@ -4,6 +4,7 @@ config 4xx default y menu "IBM 4xx options" + depends on 4xx choice prompt "Machine Type" diff -prauN linux-2.6.0-test5/arch/ppc/platforms/4xx/Makefile wli-2.6.0-test5-bk12-25/arch/ppc/platforms/4xx/Makefile --- linux-2.6.0-test5/arch/ppc/platforms/4xx/Makefile 2003-09-08 12:50:23.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/4xx/Makefile 2003-09-25 19:15:50.000000000 -0700 @@ -2,16 +2,16 @@ # Makefile for the PowerPC 4xx linux kernel. obj-$(CONFIG_ASH) += ash.o -obj-$(CONFIG_BEECH) += beech.o +obj-$(CONFIG_BEECH) += beech.o obj-$(CONFIG_CEDAR) += cedar.o obj-$(CONFIG_CPCI405) += cpci405.o -obj-$(CONFIG_EBONY) += ebony.o +obj-$(CONFIG_EBONY) += ebony.o obj-$(CONFIG_EP405) += ep405.o obj-$(CONFIG_OAK) += oak.o obj-$(CONFIG_OCOTEA) += ocotea.o obj-$(CONFIG_REDWOOD_4) += redwood.o obj-$(CONFIG_REDWOOD_5) += redwood5.o -obj-$(CONFIG_REDWOOD_6) += redwood6.o +obj-$(CONFIG_REDWOOD_6) += redwood6.o obj-$(CONFIG_SYCAMORE) += sycamore.o obj-$(CONFIG_WALNUT) += walnut.o diff -prauN linux-2.6.0-test5/arch/ppc/platforms/4xx/ash.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/4xx/ash.c --- linux-2.6.0-test5/arch/ppc/platforms/4xx/ash.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/4xx/ash.c 2003-09-25 19:15:50.000000000 -0700 @@ -1,8 +1,8 @@ /* * arch/ppc/platforms/4xx/ash.c - * + * * Support for the IBM NP405H ash eval board - * + * * Author: Armin Kuster * * 2001-2002 (c) MontaVista, Software, Inc. This file is licensed under @@ -172,7 +172,7 @@ bios_fixup(struct pci_controller *hose, out_le32((void *) &(pcip->pmm[2].pcila), 0x00000000); out_le32((void *) &(pcip->pmm[2].pciha), 0x00000000); out_le32((void *) &(pcip->pmm[2].ma), 0x00000000); - + /* Enable PTM1 and PTM2, mapped to PLB address 0. */ out_le32((void *) &(pcip->ptm1la), 0x00000000); @@ -183,7 +183,7 @@ bios_fixup(struct pci_controller *hose, /* Write zero to PTM1 BAR. */ early_write_config_dword(hose, hose->first_busno, - PCI_FUNC(hose->first_busno), + PCI_FUNC(hose->first_busno), PCI_BASE_ADDRESS_1, 0x00000000); diff -prauN linux-2.6.0-test5/arch/ppc/platforms/4xx/beech.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/4xx/beech.c --- linux-2.6.0-test5/arch/ppc/platforms/4xx/beech.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/4xx/beech.c 2003-09-25 19:15:50.000000000 -0700 @@ -44,7 +44,7 @@ static void beech_ebc_setup(void); static void beech_fpga_setup(void); -/* +/* Beech board physical memory map: Main Memory (Initialized by the BIOS) @@ -64,19 +64,19 @@ static void beech_fpga_setup(void); Touch Panel Controller 0xEF600A00 DES Controller 0xEF600B00 - + EBC Space: (Mapped virtual = physical in ppc4xx_map_io(); EBC setup for PCMCIA left to 4xx_pccf) Space EBC Bank Physical Addresses EBC Base Address ========================================================================= - PCMCIA (32 MB) x F0000000 - F1FFFFFF F0000000 + PCMCIA (32 MB) x F0000000 - F1FFFFFF F0000000 Expansion 2 F8000000 - F8FFFFFF F8000000 Linux Flash (16 MB) F9000000 - F9FFFFFF NVRAM (32 KB) 1 FFE00000 - FFE07FFF FFE00000 - + Ethernet(I/O) 1 FFE20300 - FFE2030F FFE00000 (MEM) FFE40000 - FFE40FFF @@ -161,7 +161,7 @@ beech_ebc_setup(void) speed = 8 cycle access with 2 turnaround cycles (30 ns). These parameters will work for the SRAM as well, which is a 70 ns - part. + part. NB: IBM BIOS sets this bank to burst, however bursting will never happen in Linux because this region is mapped non-cacheable and @@ -181,7 +181,7 @@ beech_ebc_setup(void) /* EBC bank 1 is used for many purposes: NVRAM, Ethernet, and FPGA registers. This is a 1 MB, 16-bit bank. The access parameters must - handle the worst case of all of the devices. + handle the worst case of all of the devices. The Ethernet chip needs 20 ns setup of the addresses to the I/O write signal (generated from the chip select), a minimum 150 ns diff -prauN linux-2.6.0-test5/arch/ppc/platforms/4xx/beech.h wli-2.6.0-test5-bk12-25/arch/ppc/platforms/4xx/beech.h --- linux-2.6.0-test5/arch/ppc/platforms/4xx/beech.h 2003-09-08 12:50:24.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/4xx/beech.h 2003-09-25 19:15:50.000000000 -0700 @@ -23,7 +23,7 @@ * IBM Research, Austin Center for Low-Power Computing * bcbrock@us.ibm.com * March, 2002 - * + * */ #ifdef __KERNEL__ @@ -38,7 +38,7 @@ * Data structure defining board information maintained by the standard boot * ROM on the IBM Beech board. An effort has been made to * keep the field names consistent with the 8xx 'bd_t' board info - * structures. + * structures. */ typedef struct board_info { @@ -146,7 +146,7 @@ typedef struct board_info { bank. The lower 16 MB are available for expansion devices. The upper 16 MB are used for the "Linux" flash. - Partitioning information is for the benefit of the MTD driver. See + Partitioning information is for the benefit of the MTD driver. See drivers/mtd/maps/ibm4xx.c. We currently allocate the lower 1 MB for a kernel, and the other 15 MB for a filesystem. diff -prauN linux-2.6.0-test5/arch/ppc/platforms/4xx/cedar.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/4xx/cedar.c --- linux-2.6.0-test5/arch/ppc/platforms/4xx/cedar.c 2003-09-08 12:50:16.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/4xx/cedar.c 2003-09-25 19:15:50.000000000 -0700 @@ -1,6 +1,6 @@ /* * arch/ppc/platforms/4xx/cedar.c - * + * * Support for the IBM NP405L ceder eval board * * Author: Armin Kuster diff -prauN linux-2.6.0-test5/arch/ppc/platforms/4xx/cedar.h wli-2.6.0-test5-bk12-25/arch/ppc/platforms/4xx/cedar.h --- linux-2.6.0-test5/arch/ppc/platforms/4xx/cedar.h 2003-09-08 12:50:13.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/4xx/cedar.h 2003-09-25 19:15:50.000000000 -0700 @@ -48,7 +48,6 @@ extern void *cedar_rtc_base; #define CEDAR_RTC_VADDR CEDAR_RTC_PADDR #define CEDAR_RTC_SIZE ((uint)8*1024) - /* Early initialization address mapping for block_io. * Standard 405GP map. */ @@ -56,7 +55,6 @@ extern void *cedar_rtc_base; #define PPC4xx_ONB_IO_VADDR PPC4xx_ONB_IO_PADDR #define PPC4xx_ONB_IO_SIZE ((uint)4*1024) - #ifdef CONFIG_PPC405GP_INTERNAL_CLOCK #define BASE_BAUD 201600 #else @@ -65,9 +63,6 @@ extern void *cedar_rtc_base; #define PPC4xx_MACHINE_NAME "IBM NP405L Cedar" - - - #endif /* !__ASSEMBLY__ */ #endif /* __ASM_CEDAR_H__ */ #endif /* __KERNEL__ */ diff -prauN linux-2.6.0-test5/arch/ppc/platforms/4xx/cpci405.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/4xx/cpci405.c --- linux-2.6.0-test5/arch/ppc/platforms/4xx/cpci405.c 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/4xx/cpci405.c 2003-09-25 19:15:50.000000000 -0700 @@ -23,7 +23,7 @@ #include #include -void *cpci405_nvram; +void *cpci405_nvram; /* * Some IRQs unique to CPCI-405. diff -prauN linux-2.6.0-test5/arch/ppc/platforms/4xx/ebony.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/4xx/ebony.c --- linux-2.6.0-test5/arch/ppc/platforms/4xx/ebony.c 2003-09-08 12:50:43.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/4xx/ebony.c 2003-09-25 19:15:50.000000000 -0700 @@ -144,7 +144,7 @@ ebony_calibrate_decr(void) freq = EBONY_440GP_RC_SYSCLK; break; } - + tb_ticks_per_jiffy = freq / HZ; tb_to_us = mulhwu_scale_factor(freq, 1000000); @@ -173,7 +173,7 @@ ebony_map_irq(struct pci_dev *dev, unsig { static char pci_irq_table[][4] = /* - * PCI IDSEL/INTPIN->INTLINE + * PCI IDSEL/INTPIN->INTLINE * A B C D */ { @@ -209,7 +209,7 @@ ebony_setup_pcix(void) PCIX_WRITEL(0, PCIX0_PIM0SA); PCIX_WRITEL(0, PCIX0_PIM1SA); PCIX_WRITEL(0, PCIX0_PIM2SA); - + /* Setup 2GB PLB->PCI outbound mem window (3_8000_0000->0_8000_0000) */ PCIX_WRITEL(0x00000003, PCIX0_POM0LAH); PCIX_WRITEL(0x80000000, PCIX0_POM0LAL); @@ -331,7 +331,7 @@ ebony_setup_arch(void) */ ibm440gp_get_clocks(&clocks, 33333333, 6 * 1843200); __res.bi_opb_busfreq = clocks.opb; - + /* Use IIC in standard (100 kHz) mode */ __res.bi_iic_fast[0] = __res.bi_iic_fast[1] = 0; diff -prauN linux-2.6.0-test5/arch/ppc/platforms/4xx/ep405.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/4xx/ep405.c --- linux-2.6.0-test5/arch/ppc/platforms/4xx/ep405.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/4xx/ep405.c 2003-09-25 19:15:50.000000000 -0700 @@ -5,7 +5,7 @@ * http://www.embeddedplanet.com * * Author: Matthew Locke - * + * * 2001 (c) MontaVista, Software, Inc. This file is licensed under * the terms of the GNU General Public License version 2. This program * is licensed "as is" without any warranty of any kind, whether express diff -prauN linux-2.6.0-test5/arch/ppc/platforms/4xx/ibm405lp.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/4xx/ibm405lp.c --- linux-2.6.0-test5/arch/ppc/platforms/4xx/ibm405lp.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/4xx/ibm405lp.c 2003-09-25 19:15:50.000000000 -0700 @@ -55,12 +55,12 @@ struct ocp_def core_ocp[] __initdata = #ifdef CONFIG_PM /* Set up the 405LP clock and power management unit for aggressive power - management. + management. Briefly, there are 3 CPM "classes": Class 1 - Either completely asleep or awake. The "force" state is - equivalent to the "enabled" state. Many Class 1 units are + equivalent to the "enabled" state. Many Class 1 units are critical system components and are never power managed. Class 2 - Can be enabled for power management, where sleep requests are @@ -69,20 +69,20 @@ struct ocp_def core_ocp[] __initdata = awaken the unit whenever it is targeted with a transaction. Class 3 - Can be enabled for power management, where sleep requests are - made by the CPM. Power management for these units typically + made by the CPM. Power management for these units typically will require intelligence in a device driver. In the current implementation, the "force" bits are only used on Class 1 devices, and only when the associated driver has the intelligence necessary to "unforce" the power management state. A previous scheme, which tried to enable power management based on whether a particular driver was compiled - with the kernel, caused many problems and is never used here. + with the kernel, caused many problems and is never used here. Class 2 devices with timeouts are normally initialized for the most aggressive values. There is no power management benefit of "forcing" Class 2 devices over letting their inactivity timeouts take effect. Therefore, after being set up here, Class 2 device drivers don't need to worry about - CPM. + CPM. No Class 3 devices are handled yet. */ @@ -123,7 +123,7 @@ ibm405lp_setup_cpm(void) enable |= IBM_CPM_DMA; /* BRG - Class 2. Seems to crash the system when enabled in 405LP Pass - 1 + 1 DCP (CodePack) - Class 2. The semantics of the sleep delay are not documented. We'll use 32 (what the heck). */ @@ -188,7 +188,7 @@ ibm405lp_setup_cpm(void) mtdcri(DCRN_SLA0, SLPMD, sla0_slpmd.reg); enable |= IBM_CPM_SLA; - /* CSI - Class 1. + /* CSI - Class 1. TPC - Class 1. TDES - Class 1. diff -prauN linux-2.6.0-test5/arch/ppc/platforms/4xx/ibm405lp.h wli-2.6.0-test5-bk12-25/arch/ppc/platforms/4xx/ibm405lp.h --- linux-2.6.0-test5/arch/ppc/platforms/4xx/ibm405lp.h 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/4xx/ibm405lp.h 2003-09-25 19:15:50.000000000 -0700 @@ -44,7 +44,7 @@ At the end of the DCR defines several synonyms are defined for backwards compatibility, but all new code specific to the 405LP uses the consistent - names. + names. Version 07/24/02 1.1 - Armin added default pm define @@ -147,7 +147,7 @@ /***************************************************************************** * Indirectly accessed DCRs. Note that unlike direct-access DCRs whose numbers * must be hard-coded into the instruction, indirect-access DCR numbers can be - * computed. + * computed. *****************************************************************************/ /* Offsets for SDRAM Controler Registers */ @@ -311,7 +311,7 @@ #define TDES0_IO_BASE 0xef600b00 /***************************************************************************** - * CPM bits for the 405LP. + * CPM bits for the 405LP. *****************************************************************************/ #define CPM_BITMASK(i) (((unsigned)0x80000000) >> i) @@ -460,7 +460,7 @@ typedef union { /* APM0_IER -- APM Interrupt Enable Register APM0_IPR -- APM Interrupt Polarity Register APM0_ISR -- APM Interrupt Status Register - APM0_ITR -- APM Interrupt Trigger Register + APM0_ITR -- APM Interrupt Trigger Register The interrupts are also accessed via standard interrupt numbers: @@ -860,7 +860,7 @@ typedef union { The mask is a mask with 1s in every reserved bit position. NB: This routine always writes the register with the valid bit set, - regardless of the valid bit setting in the 'new' parameter. + regardless of the valid bit setting in the 'new' parameter. Unfortunately this must be a macro to work (due to mtdcr()). diff -prauN linux-2.6.0-test5/arch/ppc/platforms/4xx/ibm440gx.h wli-2.6.0-test5-bk12-25/arch/ppc/platforms/4xx/ibm440gx.h --- linux-2.6.0-test5/arch/ppc/platforms/4xx/ibm440gx.h 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/4xx/ibm440gx.h 2003-09-25 19:15:50.000000000 -0700 @@ -12,7 +12,7 @@ * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2 of the License, or (at your * option) any later version. - * + * */ #ifdef __KERNEL__ @@ -109,7 +109,7 @@ | IBM_CPM_TMRCLK | IBM_CPM_DMA | IBM_CPM_PCI \ | IBM_CPM_TAHOE0 | IBM_CPM_TAHOE1 \ | IBM_CPM_EMAC0 | IBM_CPM_EMAC1 \ - | IBM_CPM_EMAC2 | IBM_CPM_EMAC3 ) + | IBM_CPM_EMAC2 | IBM_CPM_EMAC3 ) /* OPB */ #define PPC440GX_OPB_BASE_START 0x0000000140000000ULL diff -prauN linux-2.6.0-test5/arch/ppc/platforms/4xx/ibmstb3.h wli-2.6.0-test5-bk12-25/arch/ppc/platforms/4xx/ibmstb3.h --- linux-2.6.0-test5/arch/ppc/platforms/4xx/ibmstb3.h 2003-09-08 12:50:28.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/4xx/ibmstb3.h 2003-09-25 19:15:50.000000000 -0700 @@ -56,7 +56,7 @@ #endif /* UART 0 is duped here so when the SICC is the default console - * then ttys1 is configured properly - armin + * then ttys1 is configured properly - armin */ #define UART1_INT 20 diff -prauN linux-2.6.0-test5/arch/ppc/platforms/4xx/ocotea.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/4xx/ocotea.c --- linux-2.6.0-test5/arch/ppc/platforms/4xx/ocotea.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/4xx/ocotea.c 2003-09-25 19:15:50.000000000 -0700 @@ -58,7 +58,7 @@ ocotea_calibrate_decr(void) unsigned int freq; freq = OCOTEA_SYSCLK; - + tb_ticks_per_jiffy = freq / HZ; tb_to_us = mulhwu_scale_factor(freq, 1000000); @@ -86,7 +86,7 @@ ocotea_map_irq(struct pci_dev *dev, unsi { static char pci_irq_table[][4] = /* - * PCI IDSEL/INTPIN->INTLINE + * PCI IDSEL/INTPIN->INTLINE * A B C D */ { @@ -133,7 +133,7 @@ ocotea_setup_pcix(void) PCIX_WRITEL(0, PCIX0_PIM1SA); PCIX_WRITEL(0, PCIX0_PIM2SA); PCIX_WRITEL(0, PCIX0_PIM2SAH); - + /* Setup 2GB PLB->PCI outbound mem window (3_8000_0000->0_8000_0000) */ PCIX_WRITEL(0x00000003, PCIX0_POM0LAH); PCIX_WRITEL(0x80000000, PCIX0_POM0LAL); @@ -263,7 +263,7 @@ ocotea_setup_arch(void) /* Setup PCI host bridge */ ocotea_setup_hose(); - + #ifdef CONFIG_BLK_DEV_INITRD if (initrd_start) ROOT_DEV = Root_RAM0; diff -prauN linux-2.6.0-test5/arch/ppc/platforms/4xx/redwood.h wli-2.6.0-test5-bk12-25/arch/ppc/platforms/4xx/redwood.h --- linux-2.6.0-test5/arch/ppc/platforms/4xx/redwood.h 2003-09-08 12:50:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/4xx/redwood.h 2003-09-25 19:15:50.000000000 -0700 @@ -5,7 +5,7 @@ * STB03xxx "Redwood" evaluation board. * * Author: Frank Rowand , or source@mvista.com - * + * * 2001 (c) MontaVista, Software, Inc. This file is licensed under * the terms of the GNU General Public License version 2. This program * is licensed "as is" without any warranty of any kind, whether express diff -prauN linux-2.6.0-test5/arch/ppc/platforms/4xx/redwood6.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/4xx/redwood6.c --- linux-2.6.0-test5/arch/ppc/platforms/4xx/redwood6.c 2003-09-08 12:50:32.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/4xx/redwood6.c 2003-09-25 19:15:50.000000000 -0700 @@ -19,7 +19,7 @@ /* - * Define all of the IRQ senses and polarities. + * Define all of the IRQ senses and polarities. */ static u_char redwood6_IRQ_initsenses[] __initdata = { diff -prauN linux-2.6.0-test5/arch/ppc/platforms/4xx/sycamore.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/4xx/sycamore.c --- linux-2.6.0-test5/arch/ppc/platforms/4xx/sycamore.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/4xx/sycamore.c 2003-09-25 19:15:50.000000000 -0700 @@ -2,7 +2,7 @@ * arch/ppc/platforms/4xx/sycamore.c * * Architecture- / platform-specific boot-time initialization code for - * IBM PowerPC 4xx based boards. + * IBM PowerPC 4xx based boards. * * Author: Armin Kuster * @@ -44,7 +44,7 @@ void *kb_data; void *sycamore_rtc_base; /* - * Define all of the IRQ senses and polarities. + * Define all of the IRQ senses and polarities. */ static u_char Sycamore_IRQ_initsenses[] __initdata = { diff -prauN linux-2.6.0-test5/arch/ppc/platforms/adir.h wli-2.6.0-test5-bk12-25/arch/ppc/platforms/adir.h --- linux-2.6.0-test5/arch/ppc/platforms/adir.h 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/adir.h 2003-09-25 19:15:50.000000000 -0700 @@ -1,6 +1,6 @@ /* * arch/ppc/platforms/adir.h - * + * * Definitions for SBS Adirondack board support * * By Michael Sokolov diff -prauN linux-2.6.0-test5/arch/ppc/platforms/adir_pci.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/adir_pci.c --- linux-2.6.0-test5/arch/ppc/platforms/adir_pci.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/adir_pci.c 2003-09-25 19:15:50.000000000 -0700 @@ -1,6 +1,6 @@ /* * arch/ppc/platforms/adir_pci.c - * + * * PCI support for SBS Adirondack * * By Michael Sokolov @@ -74,7 +74,7 @@ adir_map_irq(struct pci_dev *dev, unsign if (!hose->index) { static char pci_irq_table[][4] = /* - * PCI IDSEL/INTPIN->INTLINE + * PCI IDSEL/INTPIN->INTLINE * A B C D */ { @@ -89,7 +89,7 @@ adir_map_irq(struct pci_dev *dev, unsign } else { static char pci_irq_table[][4] = /* - * PCI IDSEL/INTPIN->INTLINE + * PCI IDSEL/INTPIN->INTLINE * A B C D */ { @@ -112,7 +112,7 @@ adir_pcibios_fixup_resources(struct pci_ if ((dev->vendor == PCI_VENDOR_ID_IBM) && (dev->device == PCI_DEVICE_ID_IBM_CPC710_PCI64)) - { + { DBG("Fixup CPC710 resources\n"); for (i=0; i 21 on PCI0, */ -static int +static int adir_exclude_device(u_char bus, u_char devfn) { if ((bus == 0) && (PCI_SLOT(devfn) > 21)) diff -prauN linux-2.6.0-test5/arch/ppc/platforms/adir_pic.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/adir_pic.c --- linux-2.6.0-test5/arch/ppc/platforms/adir_pic.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/adir_pic.c 2003-09-25 19:15:50.000000000 -0700 @@ -1,6 +1,6 @@ /* * arch/ppc/platforms/adir_pic.c - * + * * Interrupt controller support for SBS Adirondack * * By Michael Sokolov @@ -61,7 +61,7 @@ adir_onboard_pic_enable(unsigned int irq /* Change irq to Adirondack onboard native value */ irq -= 16; - /* Enable requested irq number */ + /* Enable requested irq number */ out_be16(maskreg, in_be16(maskreg) & ~(1 << irq)); } @@ -73,7 +73,7 @@ adir_onboard_pic_disable(unsigned int ir /* Change irq to Adirondack onboard native value */ irq -= 16; - /* Disable requested irq number */ + /* Disable requested irq number */ out_be16(maskreg, in_be16(maskreg) | (1 << irq)); } diff -prauN linux-2.6.0-test5/arch/ppc/platforms/apus_pci.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/apus_pci.c --- linux-2.6.0-test5/arch/ppc/platforms/apus_pci.c 2003-09-08 12:50:23.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/apus_pci.c 2003-09-25 19:15:50.000000000 -0700 @@ -33,7 +33,7 @@ #define DPRINTK(a,b...) printk(KERN_DEBUG "apus_pci: %s: " a, __FUNCTION__ , ## b) #else #define DPRINTK(a,b...) -#endif +#endif /* * The _DEFINITIVE_ memory mapping/unmapping functions. @@ -147,9 +147,9 @@ static void __init apus_pcibios_fixup_bu } -/* +/* * This is from pm2fb.c again - * + * * Check if PCI (B/CVisionPPC) is available, initialize it and set up * the pcibios_* pointers */ diff -prauN linux-2.6.0-test5/arch/ppc/platforms/ccm.h wli-2.6.0-test5-bk12-25/arch/ppc/platforms/ccm.h --- linux-2.6.0-test5/arch/ppc/platforms/ccm.h 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/ccm.h 2003-09-25 19:15:50.000000000 -0700 @@ -1,6 +1,6 @@ /* * Siemens Card Controller Module specific definitions - * + * * Copyright (C) 2001-2002 Wolfgang Denk (wd@denx.de) */ @@ -8,7 +8,7 @@ #define __MACH_CCM_H #include - + #include #define CCM_IMMR_BASE 0xF0000000 /* phys. addr of IMMR */ diff -prauN linux-2.6.0-test5/arch/ppc/platforms/chrp_setup.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/chrp_setup.c --- linux-2.6.0-test5/arch/ppc/platforms/chrp_setup.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/chrp_setup.c 2003-09-25 19:15:50.000000000 -0700 @@ -73,7 +73,7 @@ extern int of_show_percpuinfo(struct seq * XXX this should be in xmon.h, but putting it there means xmon.h * has to include (to get irqreturn_t), which * causes all sorts of problems. -- paulus - */ + */ extern irqreturn_t xmon_irq(int, void *, struct pt_regs *); extern dev_t boot_dev; @@ -227,7 +227,7 @@ chrp_setup_arch(void) #ifdef CONFIG_BLK_DEV_INITRD /* this is fine for chrp */ initrd_below_start_ok = 1; - + if (initrd_start) ROOT_DEV = Root_RAM0; else @@ -290,7 +290,7 @@ chrp_event_scan(void) __pa(log), 1024 ); ppc_md.heartbeat_count = ppc_md.heartbeat_reset; } - + void __chrp chrp_restart(char *cmd) { @@ -385,7 +385,7 @@ void __init chrp_init_IRQ(void) int i; unsigned long chrp_int_ack; unsigned char init_senses[NR_IRQS - NUM_8259_INTERRUPTS]; -#if defined(CONFIG_VT) && defined(CONFIG_INPUT_ADBHID) && defined(XMON) +#if defined(CONFIG_VT) && defined(CONFIG_INPUT_ADBHID) && defined(XMON) struct device_node *kbd; #endif @@ -428,7 +428,7 @@ void __init chrp_init_IRQ(void) void __init chrp_init2(void) { -#ifdef CONFIG_NVRAM +#ifdef CONFIG_NVRAM // XX replace this in a more saner way // pmac_nvram_init(); #endif @@ -509,7 +509,7 @@ chrp_init(unsigned long r3, unsigned lon /* * Print the banner, then scroll down so boot progress - * can be printed. -- Cort + * can be printed. -- Cort */ if (ppc_md.progress) ppc_md.progress("Linux/PPC "UTS_RELEASE"\n", 0x0); } diff -prauN linux-2.6.0-test5/arch/ppc/platforms/chrp_time.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/chrp_time.c --- linux-2.6.0-test5/arch/ppc/platforms/chrp_time.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/chrp_time.c 2003-09-25 19:15:50.000000000 -0700 @@ -133,10 +133,10 @@ unsigned long __chrp chrp_get_rtc_time(v /* Since the UIP flag is set for about 2.2 ms and the clock * is typically written with a precision of 1 jiffy, trying - * to obtain a precision better than a few milliseconds is + * to obtain a precision better than a few milliseconds is * an illusion. Only consistency is interesting, this also * allows to use the routine for /dev/rtc without a potential - * 1 second kernel busy loop triggered by any reader of /dev/rtc. + * 1 second kernel busy loop triggered by any reader of /dev/rtc. */ for ( i = 0; i<1000000; i++) { diff -prauN linux-2.6.0-test5/arch/ppc/platforms/error_log.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/error_log.c --- linux-2.6.0-test5/arch/ppc/platforms/error_log.c 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/error_log.c 2003-09-25 19:15:50.000000000 -0700 @@ -1,6 +1,6 @@ /* * arch/ppc/kernel/error_log.c - * + * * Copyright (c) 2000 Tilmann Bitterberg * (tilmann@bitterberg.de) * @@ -15,10 +15,10 @@ #include "error_log.h" /* ****************************************************************** */ -/* +/* * EVENT-SCAN * The whole stuff below here doesn't take any action when it found - * an error, it just prints as much information as possible and + * an error, it just prints as much information as possible and * then its up to the user to decide what to do. * * Returns 0 if no errors were found @@ -92,7 +92,7 @@ useful information, which leads to the s #endif /* VERBOSE_ERRORS */ }; -const char *_errlog_initiator[] = { +const char *_errlog_initiator[] = { "Unknown or not applicable", "CPU", "PCI", @@ -101,7 +101,7 @@ const char *_errlog_initiator[] = { "Power management" }; -const char *_errlog_target[] = { +const char *_errlog_target[] = { "Unknown or not applicable", "CPU", "PCI", @@ -128,7 +128,7 @@ const char *_errlog_target[] = { return 0; } if (error_log.version != 1) - printk(KERN_WARNING "Unknown version (%d), please implement me\n", + printk(KERN_WARNING "Unknown version (%d), please implement me\n", error_log.version); switch (error_log.disposition) { @@ -139,19 +139,19 @@ const char *_errlog_target[] = { printk("We have a really serious Problem!\n"); case DISP_LIMITED_RECOVERY: printk("Error classification\n"); - printk("Severity : %s\n", + printk("Severity : %s\n", ppc_rtas_errorlog_check_severity (error_log)); - printk("Initiator : %s\n", + printk("Initiator : %s\n", ppc_rtas_errorlog_check_initiator (error_log)); - printk("Target : %s\n", + printk("Target : %s\n", ppc_rtas_errorlog_check_target (error_log)); - printk("Type : %s\n", + printk("Type : %s\n", ppc_rtas_errorlog_check_type (error_log)); - printk("Ext. log : %s\n", + printk("Ext. log : %s\n", ppc_rtas_errorlog_check_extended (error_log)); if (error_log.extended) ppc_rtas_errorlog_disect_extended (logdata); - return 1; + return 1; default: /* nothing */ break; @@ -174,8 +174,8 @@ const char * ppc_rtas_errorlog_check_typ "uncorrectable ECC error", "corrected ECC error" /* 10 */ }; - if (error_log.type == TYPE_EPOW) - return "EPOW"; + if (error_log.type == TYPE_EPOW) + return "EPOW"; if (error_log.type >= TYPE_PMGM_POWER_SW_ON) return "PowerMGM Event (not handled right now)"; return _errlog_type[error_log.type]; diff -prauN linux-2.6.0-test5/arch/ppc/platforms/error_log.h wli-2.6.0-test5-bk12-25/arch/ppc/platforms/error_log.h --- linux-2.6.0-test5/arch/ppc/platforms/error_log.h 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/error_log.h 2003-09-25 19:15:50.000000000 -0700 @@ -45,7 +45,7 @@ #define TYPE_ECC_UNCORR 0x09 #define TYPE_ECC_CORR 0x0a #define TYPE_EPOW 0x40 -/* I don't add PowerMGM events right now, this is a different topic */ +/* I don't add PowerMGM events right now, this is a different topic */ #define TYPE_PMGM_POWER_SW_ON 0x60 #define TYPE_PMGM_POWER_SW_OFF 0x61 #define TYPE_PMGM_LID_OPEN 0x62 diff -prauN linux-2.6.0-test5/arch/ppc/platforms/est8260_setup.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/est8260_setup.c --- linux-2.6.0-test5/arch/ppc/platforms/est8260_setup.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/est8260_setup.c 2003-09-25 19:15:50.000000000 -0700 @@ -1,6 +1,6 @@ /* * arch/ppc/platforms/est8260_setup.c - * + * * EST8260 platform support * * Author: Allen Curtis @@ -24,7 +24,7 @@ static void (*callback_setup_arch)(void) extern unsigned char __res[sizeof(bd_t)]; -extern void m8260_init(unsigned long r3, unsigned long r4, +extern void m8260_init(unsigned long r3, unsigned long r4, unsigned long r5, unsigned long r6, unsigned long r7); static int diff -prauN linux-2.6.0-test5/arch/ppc/platforms/ev64260.h wli-2.6.0-test5-bk12-25/arch/ppc/platforms/ev64260.h --- linux-2.6.0-test5/arch/ppc/platforms/ev64260.h 2003-09-08 12:49:50.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/ev64260.h 2003-09-25 19:15:50.000000000 -0700 @@ -1,6 +1,6 @@ /* * arch/ppc/platforms/ev64260.h - * + * * Definitions for Marvell/Galileo EV-64260-BP Evaluation Board. * * Author: Mark A. Greer diff -prauN linux-2.6.0-test5/arch/ppc/platforms/ev64260_setup.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/ev64260_setup.c --- linux-2.6.0-test5/arch/ppc/platforms/ev64260_setup.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/ev64260_setup.c 2003-09-25 19:15:50.000000000 -0700 @@ -67,7 +67,7 @@ ev64260_map_irq(struct pci_dev *dev, uns if (hose->index == 0) { static char pci_irq_table[][4] = /* - * PCI IDSEL/INTPIN->INTLINE + * PCI IDSEL/INTPIN->INTLINE * A B C D */ { @@ -81,7 +81,7 @@ ev64260_map_irq(struct pci_dev *dev, uns else { static char pci_irq_table[][4] = /* - * PCI IDSEL/INTPIN->INTLINE + * PCI IDSEL/INTPIN->INTLINE * A B C D */ { diff -prauN linux-2.6.0-test5/arch/ppc/platforms/gemini.h wli-2.6.0-test5-bk12-25/arch/ppc/platforms/gemini.h --- linux-2.6.0-test5/arch/ppc/platforms/gemini.h 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/gemini.h 2003-09-25 19:15:50.000000000 -0700 @@ -2,7 +2,7 @@ * arch/ppc/platforms/gemini.h * * - * Onboard registers and descriptions for Synergy Microsystems' + * Onboard registers and descriptions for Synergy Microsystems' * "Gemini" boards. * */ diff -prauN linux-2.6.0-test5/arch/ppc/platforms/hermes.h wli-2.6.0-test5-bk12-25/arch/ppc/platforms/hermes.h --- linux-2.6.0-test5/arch/ppc/platforms/hermes.h 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/hermes.h 2003-09-25 19:15:50.000000000 -0700 @@ -1,6 +1,6 @@ /* * Multidata HERMES-PRO ( / SL ) board specific definitions - * + * * Copyright (c) 2000, 2001 Wolfgang Denk (wd@denx.de) */ @@ -8,7 +8,7 @@ #define __MACH_HERMES_H #include - + #include #define HERMES_IMMR_BASE 0xFF000000 /* phys. addr of IMMR */ diff -prauN linux-2.6.0-test5/arch/ppc/platforms/ip860.h wli-2.6.0-test5-bk12-25/arch/ppc/platforms/ip860.h --- linux-2.6.0-test5/arch/ppc/platforms/ip860.h 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/ip860.h 2003-09-25 19:15:50.000000000 -0700 @@ -1,6 +1,6 @@ /* * MicroSys IP860 VMEBus board specific definitions - * + * * Copyright (c) 2000, 2001 Wolfgang Denk (wd@denx.de) */ @@ -8,7 +8,7 @@ #define __MACH_IP860_H #include - + #include #define IP860_IMMR_BASE 0xF1000000 /* phys. addr of IMMR */ diff -prauN linux-2.6.0-test5/arch/ppc/platforms/k2.h wli-2.6.0-test5-bk12-25/arch/ppc/platforms/k2.h --- linux-2.6.0-test5/arch/ppc/platforms/k2.h 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/k2.h 2003-09-25 19:15:50.000000000 -0700 @@ -1,6 +1,6 @@ /* * arch/ppc/platforms/k2.h - * + * * Definitions for SBS K2 board support * * Author: Matt Porter diff -prauN linux-2.6.0-test5/arch/ppc/platforms/k2_pci.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/k2_pci.c --- linux-2.6.0-test5/arch/ppc/platforms/k2_pci.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/k2_pci.c 2003-09-25 19:15:50.000000000 -0700 @@ -1,6 +1,6 @@ /* * arch/ppc/platforms/k2_pci.c - * + * * PCI support for SBS K2 * * Author: Matt Porter @@ -45,7 +45,7 @@ k2_map_irq(struct pci_dev *dev, unsigned { static char pci_irq_table[][4] = /* - * PCI IDSEL/INTPIN->INTLINE + * PCI IDSEL/INTPIN->INTLINE * A B C D */ { @@ -72,7 +72,7 @@ k2_map_irq(struct pci_dev *dev, unsigned { static char pci_irq_table[][4] = /* - * PCI IDSEL/INTPIN->INTLINE + * PCI IDSEL/INTPIN->INTLINE * A B C D */ { @@ -86,11 +86,11 @@ k2_map_irq(struct pci_dev *dev, unsigned }; const long min_idsel = 15, max_idsel = 21, irqs_per_slot = 4; return PCI_IRQ_TABLE_LOOKUP; - } + } } void k2_pcibios_fixup(void) -{ +{ #if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_IDE_MODULE) struct pci_dev *ide_dev; @@ -118,7 +118,7 @@ void k2_pcibios_fixup_resources(struct p if ((dev->vendor == PCI_VENDOR_ID_IBM) && (dev->device == PCI_DEVICE_ID_IBM_CPC710_PCI64)) - { + { DBG("Fixup CPC710 resources\n"); for (i=0; i - + #include #define IMAP_ADDR 0xFFF00000 /* physical base address of IMMR area */ diff -prauN linux-2.6.0-test5/arch/ppc/platforms/lopec_pci.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/lopec_pci.c --- linux-2.6.0-test5/arch/ppc/platforms/lopec_pci.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/lopec_pci.c 2003-09-25 19:15:50.000000000 -0700 @@ -1,6 +1,6 @@ /* * arch/ppc/platforms/lopec_pci.c - * + * * PCI setup routines for the Motorola LoPEC. * * Author: Dan Cox diff -prauN linux-2.6.0-test5/arch/ppc/platforms/lopec_serial.h wli-2.6.0-test5-bk12-25/arch/ppc/platforms/lopec_serial.h --- linux-2.6.0-test5/arch/ppc/platforms/lopec_serial.h 2003-09-08 12:50:23.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/lopec_serial.h 2003-09-25 19:15:50.000000000 -0700 @@ -1,6 +1,6 @@ /* * include/asm-ppc/lopec_serial.h - * + * * Definitions for Motorola LoPEC board. * * Author: Dan Cox diff -prauN linux-2.6.0-test5/arch/ppc/platforms/lopec_setup.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/lopec_setup.c --- linux-2.6.0-test5/arch/ppc/platforms/lopec_setup.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/lopec_setup.c 2003-09-25 19:15:50.000000000 -0700 @@ -1,6 +1,6 @@ /* * arch/ppc/platforms/lopec_setup.c - * + * * Setup routines for the Motorola LoPEC. * * Author: Dan Cox @@ -232,7 +232,7 @@ lopec_request_io(void) request_region(0x80, 0x10, "dma page reg"); request_region(0xa0, 0x20, "pic2"); request_region(0xc0, 0x20, "dma2"); - + return 0; } @@ -328,7 +328,7 @@ lopec_setup_arch(void) conswitchp = &dummy_con; #endif #ifdef CONFIG_PPCBUG_NVRAM - /* Read in NVRAM data */ + /* Read in NVRAM data */ init_prep_nvram(); /* if no bootargs, look in NVRAM */ diff -prauN linux-2.6.0-test5/arch/ppc/platforms/lwmon.h wli-2.6.0-test5-bk12-25/arch/ppc/platforms/lwmon.h --- linux-2.6.0-test5/arch/ppc/platforms/lwmon.h 2003-09-08 12:50:37.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/lwmon.h 2003-09-25 19:15:50.000000000 -0700 @@ -1,6 +1,6 @@ /* * Liebherr LWMON board specific definitions - * + * * Copyright (c) 2001 Wolfgang Denk (wd@denx.de) */ @@ -8,7 +8,7 @@ #define __MACH_LWMON_H #include - + #include #define IMAP_ADDR 0xFFF00000 /* physical base address of IMMR area */ diff -prauN linux-2.6.0-test5/arch/ppc/platforms/mcpn765.h wli-2.6.0-test5-bk12-25/arch/ppc/platforms/mcpn765.h --- linux-2.6.0-test5/arch/ppc/platforms/mcpn765.h 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/mcpn765.h 2003-09-25 19:15:50.000000000 -0700 @@ -1,6 +1,6 @@ /* * arch/ppc/platforms/mcpn765.h - * + * * Definitions for Motorola MCG MCPN765 cPCI Board. * * Author: Mark A. Greer diff -prauN linux-2.6.0-test5/arch/ppc/platforms/mcpn765_pci.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/mcpn765_pci.c --- linux-2.6.0-test5/arch/ppc/platforms/mcpn765_pci.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/mcpn765_pci.c 2003-09-25 19:15:50.000000000 -0700 @@ -1,6 +1,6 @@ /* * arch/ppc/platforms/mcpn765_pci.c - * + * * PCI setup routines for the Motorola MCG MCPN765 cPCI board. * * Author: Mark A. Greer @@ -35,7 +35,7 @@ mcpn765_map_irq(struct pci_dev *dev, uns { static char pci_irq_table[][4] = /* - * PCI IDSEL/INTPIN->INTLINE + * PCI IDSEL/INTPIN->INTLINE * A B C D */ { diff -prauN linux-2.6.0-test5/arch/ppc/platforms/mcpn765_serial.h wli-2.6.0-test5-bk12-25/arch/ppc/platforms/mcpn765_serial.h --- linux-2.6.0-test5/arch/ppc/platforms/mcpn765_serial.h 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/mcpn765_serial.h 2003-09-25 19:15:50.000000000 -0700 @@ -1,6 +1,6 @@ /* * include/asm-ppc/mcpn765_serial.h - * + * * Definitions for Motorola MCG MCPN765 cPCI board support * * Author: Mark A. Greer diff -prauN linux-2.6.0-test5/arch/ppc/platforms/mpc82xx.h wli-2.6.0-test5-bk12-25/arch/ppc/platforms/mpc82xx.h --- linux-2.6.0-test5/arch/ppc/platforms/mpc82xx.h 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/mpc82xx.h 2003-09-25 19:15:50.000000000 -0700 @@ -1,6 +1,6 @@ /* * arch/ppc/platforms/mpc82xx.h - * + * * Board specific support for various 82xx platforms. * * Author: Allen Curtis diff -prauN linux-2.6.0-test5/arch/ppc/platforms/mvme5100.h wli-2.6.0-test5-bk12-25/arch/ppc/platforms/mvme5100.h --- linux-2.6.0-test5/arch/ppc/platforms/mvme5100.h 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/mvme5100.h 2003-09-25 19:15:50.000000000 -0700 @@ -1,6 +1,6 @@ /* * include/asm-ppc/platforms/mvme5100.h - * + * * Definitions for Motorola MVME5100. * * Author: Matt Porter diff -prauN linux-2.6.0-test5/arch/ppc/platforms/mvme5100_pci.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/mvme5100_pci.c --- linux-2.6.0-test5/arch/ppc/platforms/mvme5100_pci.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/mvme5100_pci.c 2003-09-25 19:15:50.000000000 -0700 @@ -1,6 +1,6 @@ /* * arch/ppc/platforms/mvme5100_pci.c - * + * * PCI setup routines for the Motorola MVME5100. * * Author: Matt Porter @@ -31,7 +31,7 @@ mvme5100_map_irq(struct pci_dev *dev, un static char pci_irq_table[][4] = /* - * PCI IDSEL/INTPIN->INTLINE + * PCI IDSEL/INTPIN->INTLINE * A B C D */ { @@ -52,7 +52,7 @@ mvme5100_map_irq(struct pci_dev *dev, un /* If lookup is zero, always return 0 */ if (!irq) return 0; - else + else #ifdef CONFIG_MVME5100_IPMC761_PRESENT /* If IPMC761 present, return table value */ return irq; diff -prauN linux-2.6.0-test5/arch/ppc/platforms/mvme5100_serial.h wli-2.6.0-test5-bk12-25/arch/ppc/platforms/mvme5100_serial.h --- linux-2.6.0-test5/arch/ppc/platforms/mvme5100_serial.h 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/mvme5100_serial.h 2003-09-25 19:15:50.000000000 -0700 @@ -1,6 +1,6 @@ /* * include/asm-ppc/mvme5100_serial.h - * + * * Definitions for Motorola MVME5100 support * * Author: Matt Porter diff -prauN linux-2.6.0-test5/arch/ppc/platforms/pal4.h wli-2.6.0-test5-bk12-25/arch/ppc/platforms/pal4.h --- linux-2.6.0-test5/arch/ppc/platforms/pal4.h 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/pal4.h 2003-09-25 19:15:50.000000000 -0700 @@ -1,6 +1,6 @@ /* * arch/ppc/platforms/pal4.h - * + * * Definitions for SBS Palomar IV board * * Author: Dan Cox diff -prauN linux-2.6.0-test5/arch/ppc/platforms/pal4_pci.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/pal4_pci.c --- linux-2.6.0-test5/arch/ppc/platforms/pal4_pci.c 2003-09-08 12:50:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/pal4_pci.c 2003-09-25 19:15:50.000000000 -0700 @@ -1,9 +1,9 @@ /* * arch/ppc/platforms/pal4_pci.c - * + * * PCI support for SBS Palomar IV * - * Author: Dan Cox + * Author: Dan Cox * * 2002 (c) MontaVista, Software, Inc. This file is licensed under * the terms of the GNU General Public License version 2. This program @@ -50,7 +50,7 @@ pal4_find_bridges(void) /* Could snatch these from the CPC700.... */ pci_init_resource(&hose->io_resource, - 0x0, + 0x0, 0x03ffffff, IORESOURCE_IO, "PCI host bridge"); @@ -66,10 +66,10 @@ pal4_find_bridges(void) hose->mem_space.start = 0x90000000; hose->mem_space.end = 0x9fffffff; hose->io_base_virt = (void *) 0xf8000000; - + setup_indirect_pci(hose, CPC700_PCI_CONFIG_ADDR, CPC700_PCI_CONFIG_DATA); - + hose->last_busno = pciauto_bus_scan(hose, hose->first_busno); ppc_md.pci_swizzle = common_swizzle; diff -prauN linux-2.6.0-test5/arch/ppc/platforms/pal4_serial.h wli-2.6.0-test5-bk12-25/arch/ppc/platforms/pal4_serial.h --- linux-2.6.0-test5/arch/ppc/platforms/pal4_serial.h 2003-09-08 12:50:44.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/pal4_serial.h 2003-09-25 19:15:50.000000000 -0700 @@ -1,7 +1,7 @@ /* * arch/ppc/platforms/pal4_serial.h - * - * Definitions for SBS PalomarIV serial support + * + * Definitions for SBS PalomarIV serial support * * Author: Dan Cox * diff -prauN linux-2.6.0-test5/arch/ppc/platforms/pal4_setup.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/pal4_setup.c --- linux-2.6.0-test5/arch/ppc/platforms/pal4_setup.c 2003-09-08 12:50:28.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/pal4_setup.c 2003-09-25 19:15:50.000000000 -0700 @@ -112,7 +112,7 @@ pal4_setup_arch(void) { unsigned long l2; - TODC_INIT(TODC_TYPE_MK48T37, 0, 0, + TODC_INIT(TODC_TYPE_MK48T37, 0, 0, ioremap(PAL4_NVRAM, PAL4_NVRAM_SIZE), 8); pal4_find_bridges(); @@ -151,10 +151,10 @@ platform_init(unsigned long r3, unsigned isa_io_base = 0 /*PAL4_ISA_IO_BASE*/; pci_dram_offset = 0 /*PAL4_PCI_SYS_MEM_BASE*/; - + ppc_md.setup_arch = pal4_setup_arch; ppc_md.show_cpuinfo = pal4_show_cpuinfo; - + ppc_md.setup_io_mappings = pal4_map_io; ppc_md.init_IRQ = cpc700_init_IRQ; diff -prauN linux-2.6.0-test5/arch/ppc/platforms/pcore.h wli-2.6.0-test5-bk12-25/arch/ppc/platforms/pcore.h --- linux-2.6.0-test5/arch/ppc/platforms/pcore.h 2003-09-08 12:49:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/pcore.h 2003-09-25 19:15:50.000000000 -0700 @@ -1,6 +1,6 @@ /* * arch/ppc/platforms/pcore.h - * + * * Definitions for Force PowerCore board support * * Author: Matt Porter @@ -21,7 +21,7 @@ #define PCORE_NVRAM_AS0 0x73 #define PCORE_NVRAM_AS1 0x75 -#define PCORE_NVRAM_DATA 0x77 +#define PCORE_NVRAM_DATA 0x77 #define PCORE_DCCR_REG (MPC10X_MAPB_ISA_IO_BASE + 0x308) #define PCORE_DCCR_L2_MASK 0xc0 diff -prauN linux-2.6.0-test5/arch/ppc/platforms/pcore_pci.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/pcore_pci.c --- linux-2.6.0-test5/arch/ppc/platforms/pcore_pci.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/pcore_pci.c 2003-09-25 19:15:50.000000000 -0700 @@ -1,6 +1,6 @@ /* * arch/ppc/platforms/pcore_pci.c - * + * * PCI support for Force PCORE boards * * Author: Matt Porter @@ -31,7 +31,7 @@ #define DBG(x...) printk(x) #else #define DBG(x...) -#endif /* DEBUG */ +#endif /* DEBUG */ static inline int __init pcore_6750_map_irq(struct pci_dev *dev, unsigned char idsel, unsigned char pin) @@ -40,7 +40,7 @@ pcore_6750_map_irq(struct pci_dev *dev, /* * PCI IDSEL/INTPIN->INTLINE * A B C D - */ + */ { {9, 10, 11, 12}, /* IDSEL 24 - DEC 21554 */ {10, 0, 0, 0}, /* IDSEL 25 - DEC 21143 */ @@ -61,7 +61,7 @@ pcore_680_map_irq(struct pci_dev *dev, u /* * PCI IDSEL/INTPIN->INTLINE * A B C D - */ + */ { {9, 10, 11, 12}, /* IDSEL 24 - Sentinel */ {10, 0, 0, 0}, /* IDSEL 25 - i82559 #1 */ @@ -87,16 +87,16 @@ pcore_pcibios_fixup(void) /* Reroute interrupts both IDE channels to 15 */ pci_write_config_byte(dev, PCORE_WINBOND_IDE_INT, - 0xff); + 0xff); /* Route INTA-D to IRQ9-12, respectively */ pci_write_config_word(dev, PCORE_WINBOND_PCI_INT, - 0x9abc); + 0x9abc); /* * Set up 8259 edge/level triggering - */ + */ outb(0x00, PCORE_WINBOND_PRI_EDG_LVL); outb(0x1e, PCORE_WINBOND_SEC_EDG_LVL); } diff -prauN linux-2.6.0-test5/arch/ppc/platforms/pcu_e.h wli-2.6.0-test5-bk12-25/arch/ppc/platforms/pcu_e.h --- linux-2.6.0-test5/arch/ppc/platforms/pcu_e.h 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/pcu_e.h 2003-09-25 19:15:50.000000000 -0700 @@ -1,6 +1,6 @@ /* * Siemens PCU E board specific definitions - * + * * Copyright (c) 2001 Wolfgang Denk (wd@denx.de) */ @@ -8,7 +8,7 @@ #define __MACH_PCU_E_H #include - + #include #define PCU_E_IMMR_BASE 0xFE000000 /* phys. addr of IMMR */ diff -prauN linux-2.6.0-test5/arch/ppc/platforms/pmac_backlight.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/pmac_backlight.c --- linux-2.6.0-test5/arch/ppc/platforms/pmac_backlight.c 2003-09-08 12:50:43.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/pmac_backlight.c 2003-09-25 19:15:50.000000000 -0700 @@ -1,7 +1,7 @@ /* * Miscellaneous procedures for dealing with the PowerMac hardware. * Contains support for the backlight. - * + * * Copyright (C) 2000 Benjamin Herrenschmidt * */ @@ -38,7 +38,7 @@ register_backlight_controller(struct bac int valid = 0; bk_node = find_devices("backlight"); - + #ifdef CONFIG_ADB_PMU /* Special case for the old PowerBook since I can't test on it */ backlight_autosave = machine_is_compatible("AAPL,3400/2400") @@ -58,7 +58,7 @@ register_backlight_controller(struct bac return; backlighter = ctrler; backlighter_data = data; - + if (bk_node && !backlight_autosave) prop = get_property(bk_node, "bklt", NULL); else @@ -68,7 +68,7 @@ register_backlight_controller(struct bac if (backlight_level > BACKLIGHT_MAX) backlight_level = BACKLIGHT_MAX; } - + #ifdef CONFIG_ADB_PMU if (backlight_autosave) { struct adb_request req; @@ -97,7 +97,7 @@ int __pmac set_backlight_enable(int enable) { int rc; - + if (!backlighter) return -ENODEV; rc = backlighter->set_enable(enable, backlight_level, backlighter_data); @@ -118,7 +118,7 @@ int __pmac set_backlight_level(int level) { int rc = 0; - + if (!backlighter) return -ENODEV; if (level < BACKLIGHT_MIN) diff -prauN linux-2.6.0-test5/arch/ppc/platforms/pmac_cpufreq.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/pmac_cpufreq.c --- linux-2.6.0-test5/arch/ppc/platforms/pmac_cpufreq.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/pmac_cpufreq.c 2003-09-25 19:15:50.000000000 -0700 @@ -97,11 +97,11 @@ static int __pmac cpu_750fx_cpu_speed(int low_speed) { #ifdef DEBUG_FREQ - printk(KERN_DEBUG "HID1, before: %x\n", mfspr(SPRN_HID1)); + printk(KERN_DEBUG "HID1, before: %x\n", mfspr(SPRN_HID1)); #endif low_choose_750fx_pll(low_speed); #ifdef DEBUG_FREQ - printk(KERN_DEBUG "HID1, after: %x\n", mfspr(SPRN_HID1)); + printk(KERN_DEBUG "HID1, after: %x\n", mfspr(SPRN_HID1)); debug_calc_bogomips(); #endif @@ -116,9 +116,9 @@ pmu_set_cpu_speed(unsigned int low_speed struct adb_request req; unsigned long save_l2cr; unsigned long save_l3cr; - + #ifdef DEBUG_FREQ - printk(KERN_DEBUG "HID1, before: %x\n", mfspr(SPRN_HID1)); + printk(KERN_DEBUG "HID1, before: %x\n", mfspr(SPRN_HID1)); #endif /* Disable all interrupt sources on openpic */ openpic_suspend(NULL, 1); @@ -158,12 +158,12 @@ pmu_set_cpu_speed(unsigned int low_speed /* Prepare the northbridge for the speed transition */ pmac_call_feature(PMAC_FTR_SLEEP_STATE,NULL,1,1); - + /* Call low level code to backup CPU state and recover from * hardware reset */ low_sleep_handler(); - + /* Restore the northbridge */ pmac_call_feature(PMAC_FTR_SLEEP_STATE,NULL,1,0); @@ -178,7 +178,7 @@ pmu_set_cpu_speed(unsigned int low_speed set_context(current->active_mm->context, current->active_mm->pgd); #ifdef DEBUG_FREQ - printk(KERN_DEBUG "HID1, after: %x\n", mfspr(SPRN_HID1)); + printk(KERN_DEBUG "HID1, after: %x\n", mfspr(SPRN_HID1)); #endif /* Restore low level PMU operations */ @@ -205,7 +205,7 @@ do_set_cpu_speed(int speed_mode) { struct cpufreq_freqs freqs; int rc; - + freqs.old = cur_freq; freqs.new = (speed_mode == PMAC_CPU_HIGH_SPEED) ? hi_freq : low_freq; freqs.cpu = smp_processor_id(); @@ -273,7 +273,7 @@ static struct cpufreq_driver pmac_cpufre }; /* Currently, we support the following machines: - * + * * - Titanium PowerBook 800 (PMU based, 667Mhz & 800Mhz) * - Titanium PowerBook 500 (PMU based, 300Mhz & 500Mhz) * - iBook2 500 (PMU based, 400Mhz & 500Mhz) @@ -281,11 +281,11 @@ static struct cpufreq_driver pmac_cpufre */ static int __init pmac_cpufreq_setup(void) -{ +{ struct device_node *cpunode; u32 *value; int has_freq_ctl = 0; - + if (strstr(cmd_line, "nocpufreq")) return 0; @@ -312,11 +312,11 @@ pmac_cpufreq_setup(void) * here */ if (low_freq < 100000) low_freq *= 10; - + value = (u32 *)get_property(cpunode, "max-clock-frequency", NULL); if (!value) goto out; - hi_freq = (*value) / 1000; + hi_freq = (*value) / 1000; has_freq_ctl = 1; cpufreq_uses_pmu = 1; } @@ -343,7 +343,7 @@ pmac_cpufreq_setup(void) /* Else check for 750FX */ else if (PVR_VER(mfspr(PVR)) == 0x7000) { if (get_property(cpunode, "dynamic-power-step", NULL) == NULL) - goto out; + goto out; hi_freq = cur_freq; value = (u32 *)get_property(cpunode, "reduced-clock-frequency", NULL); if (!value) @@ -355,7 +355,7 @@ pmac_cpufreq_setup(void) out: if (!has_freq_ctl) return -ENODEV; - + pmac_cpu_freqs[CPUFREQ_LOW].frequency = low_freq; pmac_cpu_freqs[CPUFREQ_HIGH].frequency = hi_freq; diff -prauN linux-2.6.0-test5/arch/ppc/platforms/pmac_feature.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/pmac_feature.c --- linux-2.6.0-test5/arch/ppc/platforms/pmac_feature.c 2003-09-08 12:50:28.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/pmac_feature.c 2003-09-25 19:15:50.000000000 -0700 @@ -8,9 +8,9 @@ * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version * 2 of the License, or (at your option) any later version. - * - * TODO: - * + * + * TODO: + * * - Replace mdelay with some schedule loop if possible * - Shorten some obfuscated delays on some routines (like modem * power) @@ -74,7 +74,7 @@ macio_find(struct device_node* child, in { while(child) { int i; - + for (i=0; i < MAX_MACIO_CHIPS && macio_chips[i].of_node; i++) if (child == macio_chips[i].of_node && (!type || macio_chips[i].type == type)) @@ -84,7 +84,7 @@ macio_find(struct device_node* child, in return NULL; } -static const char* macio_names[] __pmacdata = +static const char* macio_names[] __pmacdata = { "Unknown", "Grand Central", @@ -103,7 +103,7 @@ static const char* macio_names[] __pmacd /* * Uninorth reg. access. Note that Uni-N regs are big endian */ - + #define UN_REG(r) (uninorth_base + ((r) >> 2)) #define UN_IN(r) (in_be32(UN_REG(r))) #define UN_OUT(r,v) (out_be32(UN_REG(r), (v))) @@ -123,7 +123,7 @@ static u32 uninorth_rev __pmacdata; typedef int (*feature_call)(struct device_node* node, int param, int value); struct feature_table_entry { - unsigned int selector; + unsigned int selector; feature_call function; }; @@ -146,7 +146,7 @@ simple_feature_tweak(struct device_node* { struct macio_chip* macio; unsigned long flags; - + macio = macio_find(node, type); if (!macio) return -ENODEV; @@ -170,7 +170,7 @@ ohare_htw_scc_enable(struct device_node* unsigned long flags; int htw, trans; unsigned long rmask; - + macio = macio_find(node, 0); if (!macio) return -ENODEV; @@ -190,7 +190,7 @@ ohare_htw_scc_enable(struct device_node* #ifdef CONFIG_ADB_PMU if ((param & 0xfff) == PMAC_SCC_IRDA) pmu_enable_irled(1); -#endif /* CONFIG_ADB_PMU */ +#endif /* CONFIG_ADB_PMU */ LOCK(flags); fcr = MACIO_IN32(OHARE_FCR); /* Check if scc cell need enabling */ @@ -249,7 +249,7 @@ ohare_htw_scc_enable(struct device_node* #ifdef CONFIG_ADB_PMU if ((param & 0xfff) == PMAC_SCC_IRDA) pmu_enable_irled(0); -#endif /* CONFIG_ADB_PMU */ +#endif /* CONFIG_ADB_PMU */ } return 0; } @@ -316,7 +316,7 @@ ohare_sleep_state(struct device_node* no } else if (value == 0) { MACIO_BIS(OHARE_FCR, OH_IOBUS_ENABLE); } - + return 0; } @@ -326,7 +326,7 @@ heathrow_modem_enable(struct device_node struct macio_chip* macio; u8 gpio; unsigned long flags; - + macio = macio_find(node, macio_unknown); if (!macio) return -ENODEV; @@ -378,7 +378,7 @@ heathrow_mesh_enable(struct device_node* { struct macio_chip* macio; unsigned long flags; - + macio = macio_find(node, macio_unknown); if (!macio) return -ENODEV; @@ -405,7 +405,7 @@ heathrow_mesh_enable(struct device_node* MACIO_BIC(HEATHROW_MBCR, 0x00040000); else MACIO_BIS(HEATHROW_MBCR, 0x00040000); -#endif +#endif (void)MACIO_IN32(HEATHROW_MBCR); udelay(10); UNLOCK(flags); @@ -448,7 +448,7 @@ heathrow_bmac_enable(struct device_node* { struct macio_chip* macio; unsigned long flags; - + macio = macio_find(node, 0); if (!macio) return -ENODEV; @@ -484,7 +484,7 @@ heathrow_sound_enable(struct device_node if (pmac_mb.model_id == PMAC_TYPE_YOSEMITE || pmac_mb.model_id == PMAC_TYPE_YIKES) return 0; - + macio = macio_find(node, 0); if (!macio) return -ENODEV; @@ -516,7 +516,7 @@ static void __pmac dbdma_save(struct macio_chip* macio, struct dbdma_regs* save) { int i; - + /* Save state & config of DBDMA channels */ for (i=0; i<13; i++) { volatile struct dbdma_regs* chan = (volatile struct dbdma_regs*) @@ -533,7 +533,7 @@ static void __pmac dbdma_restore(struct macio_chip* macio, struct dbdma_regs* save) { int i; - + /* Save state & config of DBDMA channels */ for (i=0; i<13; i++) { volatile struct dbdma_regs* chan = (volatile struct dbdma_regs*) @@ -632,7 +632,7 @@ core99_scc_enable(struct device_node* no unsigned long flags; unsigned long chan_mask; u32 fcr; - + macio = macio_find(node, 0); if (!macio) return -ENODEV; @@ -646,7 +646,7 @@ core99_scc_enable(struct device_node* no if (value) { int need_reset_scc = 0; int need_reset_irda = 0; - + LOCK(flags); fcr = MACIO_IN32(KEYLARGO_FCR0); /* Check if scc cell need enabling */ @@ -734,7 +734,7 @@ core99_modem_enable(struct device_node* unsigned long flags; /* Hack for internal USB modem */ - if (node == NULL) { + if (node == NULL) { if (macio_chips[0].type != macio_keylargo) return -ENODEV; node = macio_chips[0].of_node; @@ -745,7 +745,7 @@ core99_modem_enable(struct device_node* gpio = MACIO_IN8(KL_GPIO_MODEM_RESET); gpio |= KEYLARGO_GPIO_OUTPUT_ENABLE; gpio &= ~KEYLARGO_GPIO_OUTOUT_DATA; - + if (!value) { LOCK(flags); MACIO_OUT8(KL_GPIO_MODEM_RESET, gpio); @@ -784,9 +784,9 @@ pangea_modem_enable(struct device_node* struct macio_chip* macio; u8 gpio; unsigned long flags; - + /* Hack for internal USB modem */ - if (node == NULL) { + if (node == NULL) { if (macio_chips[0].type != macio_pangea && macio_chips[0].type != macio_intrepid) return -ENODEV; @@ -798,7 +798,7 @@ pangea_modem_enable(struct device_node* gpio = MACIO_IN8(KL_GPIO_MODEM_RESET); gpio |= KEYLARGO_GPIO_OUTPUT_ENABLE; gpio &= ~KEYLARGO_GPIO_OUTOUT_DATA; - + if (!value) { LOCK(flags); MACIO_OUT8(KL_GPIO_MODEM_RESET, gpio); @@ -926,7 +926,7 @@ core99_gmac_phy_reset(struct device_node { unsigned long flags; struct macio_chip* macio; - + macio = &macio_chips[0]; if (macio->type != macio_keylargo && macio->type != macio_pangea && macio->type != macio_intrepid) @@ -951,7 +951,7 @@ core99_sound_chip_enable(struct device_n { struct macio_chip* macio; unsigned long flags; - + macio = macio_find(node, 0); if (!macio) return -ENODEV; @@ -982,11 +982,11 @@ core99_airport_enable(struct device_node struct macio_chip* macio; unsigned long flags; int state; - + macio = macio_find(node, 0); if (!macio) return -ENODEV; - + /* Hint: we allow passing of macio itself for the sake of the * sleep code */ @@ -1074,11 +1074,11 @@ core99_reset_cpu(struct device_node* nod KL_GPIO_RESET_CPU1, KL_GPIO_RESET_CPU2, KL_GPIO_RESET_CPU3 }; - + macio = &macio_chips[0]; if (macio->type != macio_keylargo) return -ENODEV; - + np = find_path_device("/cpus"); if (np == NULL) return -ENODEV; @@ -1094,7 +1094,7 @@ core99_reset_cpu(struct device_node* nod } if (np == NULL || reset_io == 0) reset_io = dflt_reset_lines[param]; - + LOCK(flags); MACIO_OUT8(reset_io, KEYLARGO_GPIO_OUTPUT_ENABLE); (void)MACIO_IN8(reset_io); @@ -1115,7 +1115,7 @@ core99_usb_enable(struct device_node* no char* prop; int number; u32 reg; - + macio = &macio_chips[0]; if (macio->type != macio_keylargo && macio->type != macio_pangea && macio->type != macio_intrepid) @@ -1205,7 +1205,7 @@ core99_firewire_enable(struct device_nod return -ENODEV; if (!(macio->flags & MACIO_FLAG_FW_SUPPORTED)) return -ENODEV; - + LOCK(flags); if (value) { UN_BIS(UNI_N_CLOCK_CNTL, UNI_N_CLOCK_CNTL_FW); @@ -1235,7 +1235,7 @@ core99_firewire_cable_power(struct devic return -ENODEV; if (!(macio->flags & MACIO_FLAG_FW_SUPPORTED)) return -ENODEV; - + LOCK(flags); if (value) { MACIO_OUT8(KL_GPIO_FW_CABLE_POWER , 0); @@ -1255,7 +1255,7 @@ static int __pmac core99_read_gpio(struct device_node* node, int param, int value) { struct macio_chip* macio = &macio_chips[0]; - + return MACIO_IN8(param); } @@ -1285,7 +1285,7 @@ keylargo_shutdown(struct macio_chip* mac KL0_SCC_CELL_ENABLE | KL0_IRDA_ENABLE | KL0_IRDA_CLK32_ENABLE | KL0_IRDA_CLK19_ENABLE); - + MACIO_BIC(KEYLARGO_MBCR, KL_MBCR_MB0_DEV_MASK); MACIO_BIS(KEYLARGO_MBCR, KL_MBCR_MB0_IDE_ENABLE); @@ -1308,7 +1308,7 @@ keylargo_shutdown(struct macio_chip* mac if (sleep_mode) temp |= KL3_SHUTDOWN_PLL_TOTAL; } - + temp |= KL3_SHUTDOWN_PLLKW6 | KL3_SHUTDOWN_PLLKW4 | KL3_SHUTDOWN_PLLKW35; if (sleep_mode) @@ -1343,7 +1343,7 @@ pangea_shutdown(struct macio_chip* macio MACIO_BIC(KEYLARGO_FCR1, KL1_UIDE_RESET_N); MACIO_BIS(KEYLARGO_FCR2, KL2_ALT_DATA_OUT); - + temp = MACIO_IN32(KEYLARGO_FCR3); temp |= KL3_SHUTDOWN_PLLKW6 | KL3_SHUTDOWN_PLLKW4 | KL3_SHUTDOWN_PLLKW35; @@ -1375,7 +1375,7 @@ intrepid_shutdown(struct macio_chip* mac MACIO_BIC(KEYLARGO_FCR1, KL1_UIDE_RESET_N); MACIO_BIS(KEYLARGO_FCR2, KL2_ALT_DATA_OUT); - + temp = MACIO_IN32(KEYLARGO_FCR3); temp |= KL3_IT_SHUTDOWN_PLL1 | KL3_IT_SHUTDOWN_PLL2 | KL3_IT_SHUTDOWN_PLL3; @@ -1399,7 +1399,7 @@ core99_sleep(void) if (macio->type != macio_keylargo && macio->type != macio_pangea && macio->type != macio_intrepid) return -ENODEV; - + /* We power off the wireless slot in case it was not done * by the driver. We don't power it on automatically however */ @@ -1420,7 +1420,7 @@ core99_sleep(void) /* We make sure the sound is off as well */ core99_sound_chip_enable(macio->of_node, 0, 0); - + /* * Save various bits of KeyLargo */ @@ -1446,7 +1446,7 @@ core99_sleep(void) /* Save state & config of DBDMA channels */ dbdma_save(macio, save_dbdma); - + /* * Turn off as much as we can */ @@ -1456,8 +1456,8 @@ core99_sleep(void) intrepid_shutdown(macio, 1); else if (macio->type == macio_keylargo) keylargo_shutdown(macio, 1); - - /* + + /* * Put the host bridge to sleep */ @@ -1496,7 +1496,7 @@ core99_wake_up(void) udelay(10); UN_OUT(UNI_N_HWINIT_STATE, UNI_N_HWINIT_STATE_RUNNING); udelay(10); - + /* * Restore KeyLargo */ @@ -1576,7 +1576,7 @@ generic_get_mb_info(struct device_node* return pmac_mb.model_id; case PMAC_MB_INFO_FLAGS: return pmac_mb.board_flags; - case PMAC_MB_INFO_NAME: + case PMAC_MB_INFO_NAME: /* hack hack hack... but should work */ *((const char **)value) = pmac_mb.model_name; break; @@ -1585,10 +1585,10 @@ generic_get_mb_info(struct device_node* } -/* +/* * Table definitions */ - + /* Used on any machine */ static struct feature_table_entry any_features[] __pmacdata = { @@ -1740,7 +1740,7 @@ static struct feature_table_entry intrep { PMAC_FTR_WRITE_GPIO, core99_write_gpio }, { 0, NULL } }; - + static struct pmac_mb_def pmac_mb_defs[] __pmacdata = { /* Warning: ordering is important as some models may claim * beeing compatible with several types @@ -1921,7 +1921,7 @@ pmac_do_feature_call(unsigned int select int param, value, i; feature_call func = NULL; va_list args; - + if (pmac_mb.features) for (i=0; pmac_mb.features[i].function; i++) if (pmac_mb.features[i].selector == selector) { @@ -1953,7 +1953,7 @@ probe_motherboard(void) struct macio_chip* macio = &macio_chips[0]; const char* model = NULL; struct device_node *dt; - + /* Lookup known motherboard type in device-tree. First try an * exact match on the "model" property, then try a "compatible" * match is none is found. @@ -2062,8 +2062,8 @@ found: if (model && (strncmp(model, "PowerBook", 9) == 0 || strncmp(model, "iBook", 5) == 0)) pmac_mb.board_flags |= PMAC_MB_MOBILE; - - + + printk(KERN_INFO "PowerMac motherboard: %s\n", pmac_mb.model_name); return 0; } @@ -2074,7 +2074,7 @@ static void __init probe_uninorth(void) { unsigned long actrl; - + /* Locate core99 Uni-N */ uninorth_node = find_devices("uni-n"); if (uninorth_node && uninorth_node->n_addrs > 0) { @@ -2082,10 +2082,10 @@ probe_uninorth(void) uninorth_rev = in_be32(UN_REG(UNI_N_VERSION)); } else uninorth_node = NULL; - + if (!uninorth_node) return; - + printk(KERN_INFO "Found Uninorth memory controller & host bridge, revision: %d\n", uninorth_rev); printk(KERN_INFO "Mapped at 0x%08lx\n", (unsigned long)uninorth_base); @@ -2105,7 +2105,7 @@ probe_uninorth(void) */ if ((uninorth_rev >= 0x11 && uninorth_rev <= 0x24) || uninorth_rev == 0xc0) UN_OUT(0x2160, UN_IN(0x2160) & 0x00ffffff); -} +} static void __init probe_one_macio(const char* name, const char* compat, int type) @@ -2114,7 +2114,7 @@ probe_one_macio(const char* name, const int i; volatile u32* base; u32* revp; - + node = find_devices(name); if (!node || !node->n_addrs) return; @@ -2203,7 +2203,7 @@ initial_serial_shutdown(struct device_no char *conn; int port_type = PMAC_SCC_ASYNC; int modem = 0; - + slots = (struct slot_names_prop *)get_property(np, "slot-names", &len); conn = get_property(np, "AAPL,connector", &len); if (conn && (strcmp(conn, "infrared") == 0)) @@ -2225,7 +2225,7 @@ static void __init set_initial_features(void) { struct device_node* np; - + /* That hack appears to be necessary for some StarMax motherboards * but I'm not too sure it was audited for side-effects on other * ohare based machines... @@ -2268,7 +2268,7 @@ set_initial_features(void) while(np) { if (np->parent && device_is_compatible(np->parent, "uni-north") - && (device_is_compatible(np, "pci106b,18") || + && (device_is_compatible(np, "pci106b,18") || device_is_compatible(np, "pci106b,30") || device_is_compatible(np, "pci11c1,5811"))) { macio_chips[0].flags |= MACIO_FLAG_FW_SUPPORTED; @@ -2276,7 +2276,7 @@ set_initial_features(void) } np = np->next; } - + /* Enable ATA-100 before PCI probe. */ np = find_devices("ata-6"); while(np) { @@ -2287,7 +2287,7 @@ set_initial_features(void) } np = np->next; } - + /* Switch airport off */ np = find_devices("radio"); while(np) { @@ -2353,7 +2353,7 @@ int __init pmac_feature_late_init(void) { struct device_node* np; - + /* Request some resources late */ if (uninorth_node) request_OF_resource(uninorth_node, 0, NULL); diff -prauN linux-2.6.0-test5/arch/ppc/platforms/pmac_nvram.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/pmac_nvram.c --- linux-2.6.0-test5/arch/ppc/platforms/pmac_nvram.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/pmac_nvram.c 2003-09-25 19:15:50.000000000 -0700 @@ -7,7 +7,7 @@ * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version * 2 of the License, or (at your option) any later version. - * + * * Todo: - cleanup some coding horrors in the flash code * - add support for the OF persistent properties */ @@ -114,7 +114,7 @@ core99_calc_adler(u8 *buffer) } low %= 65521UL; high %= 65521UL; - + return (high << 16) | low; } @@ -126,7 +126,7 @@ core99_check(u8* datas) if (hdr99->hdr.signature != CORE99_SIGNATURE) { #ifdef DEBUG printk("Invalid signature\n"); -#endif +#endif return 0; } if (hdr99->hdr.cksum != chrp_checksum(&hdr99->hdr)) { @@ -148,9 +148,9 @@ static int __pmac core99_erase_bank(int bank) { int stat, i; - + u8* base = (u8 *)nvram_data + core99_bank*NVRAM_SIZE; - + out_8(base, CORE99_FLASH_CMD_ERASE_SETUP); out_8(base, CORE99_FLASH_CMD_ERASE_CONFIRM); do { stat = in_8(base); } @@ -172,9 +172,9 @@ static int __pmac core99_write_bank(int bank, u8* datas) { int i, stat = 0; - + u8* base = (u8 *)nvram_data + core99_bank*NVRAM_SIZE; - + for (i=0; isibling) { int * bus_range; - unsigned int *class_code; + unsigned int *class_code; int len; /* For PCI<->PCI bridges or CardBus bridges, we go down */ @@ -71,7 +71,7 @@ fixup_one_level_bus_range(struct device_ /* This routine fixes the "bus-range" property of all bridges in the * system since they tend to have their "last" member wrong on macs - * + * * Note that the bus numbers manipulated here are OF bus numbers, they * are not Linux bus numbers. */ @@ -80,8 +80,8 @@ fixup_bus_range(struct device_node *brid { int * bus_range; int len; - - /* Lookup the "bus-range" property for the hose */ + + /* Lookup the "bus-range" property for the hose */ bus_range = (int *) get_property(bridge, "bus-range", &len); if (bus_range == NULL || len < 2 * sizeof(int)) { printk(KERN_WARNING "Can't get bus-range for %s\n", @@ -93,11 +93,11 @@ fixup_bus_range(struct device_node *brid /* * Apple MacRISC (UniNorth, Bandit, Chaos) PCI controllers. - * + * * The "Bandit" version is present in all early PCI PowerMacs, * and up to the first ones using Grackle. Some machines may * have 2 bandit controllers (2 PCI busses). - * + * * "Chaos" is used in some "Bandit"-type machines as a bridge * for the separate display bus. It is accessed the same * way as bandit, but cannot be probed for devices. It therefore @@ -118,19 +118,19 @@ fixup_bus_range(struct device_node *brid |(((unsigned long)(devfn)) << 8) \ |(((unsigned long)(off)) & 0xFCUL) \ |1UL) - + static unsigned int __pmac macrisc_cfg_access(struct pci_controller* hose, u8 bus, u8 dev_fn, u8 offset) { unsigned int caddr; - + if (bus == hose->first_busno) { if (dev_fn < (11 << 3)) return 0; caddr = MACRISC_CFA0(dev_fn, offset); } else caddr = MACRISC_CFA1(bus, dev_fn, offset); - + /* Uninorth will return garbage if we don't read back the value ! */ do { out_le32(hose->cfg_addr, caddr); @@ -263,7 +263,7 @@ init_bandit(struct pci_controller *bp) out_le32(bp->cfg_addr, (1UL << BANDIT_DEVNUM) + PCI_VENDOR_ID); udelay(2); vendev = in_le32((volatile unsigned int *)bp->cfg_data); - if (vendev == (PCI_DEVICE_ID_APPLE_BANDIT << 16) + + if (vendev == (PCI_DEVICE_ID_APPLE_BANDIT << 16) + PCI_VENDOR_ID_APPLE) { /* read the revision id */ out_le32(bp->cfg_addr, @@ -311,17 +311,17 @@ init_p2pbridge(void) if (pci_device_from_OF_node(p2pbridge, &bus, &devfn) < 0) { #ifdef DEBUG printk("Can't find PCI infos for PCI<->PCI bridge\n"); -#endif +#endif return; } - /* Warning: At this point, we have not yet renumbered all busses. + /* Warning: At this point, we have not yet renumbered all busses. * So we must use OF walking to find out hose */ hose = pci_find_hose_for_OF_device(p2pbridge); if (!hose) { #ifdef DEBUG printk("Can't find hose for PCI<->PCI bridge\n"); -#endif +#endif return; } if (early_read_config_word(hose, bus, devfn, @@ -435,7 +435,7 @@ add_bridges(struct device_node *dev) char* disp_name; int *bus_range; int first = 1, primary; - + for (; dev != NULL; dev = dev->next) { addr = (struct reg_property *) get_property(dev, "reg", &len); if (addr == NULL || len < sizeof(*addr)) { @@ -448,7 +448,7 @@ add_bridges(struct device_node *dev) printk(KERN_WARNING "Can't get bus-range for %s, assume bus 0\n", dev->full_name); } - + hose = pcibios_alloc_controller(); if (!hose) continue; @@ -478,8 +478,8 @@ add_bridges(struct device_node *dev) #ifdef DEBUG printk(" ->Hose at 0x%08lx, cfg_addr=0x%08lx,cfg_data=0x%08lx\n", hose, hose->cfg_addr, hose->cfg_data); -#endif - +#endif + /* Interpret the "ranges" property */ /* This also maps the I/O region and sets isa_io/mem_base */ pci_process_bridge_OF_ranges(hose, dev, primary); @@ -493,9 +493,9 @@ add_bridges(struct device_node *dev) static void __init pcibios_fixup_OF_interrupts(void) -{ +{ struct pci_dev* dev = NULL; - + /* * Open Firmware often doesn't initialize the * PCI_INTERRUPT_LINE config register properly, so we @@ -540,19 +540,19 @@ pmac_pci_enable_device_hook(struct pci_d uninorth_child = node->parent && device_is_compatible(node->parent, "uni-north"); - + /* Firewire & GMAC were disabled after PCI probe, the driver is * claiming them, we must re-enable them now. */ - if (uninorth_child && !strcmp(node->name, "firewire") && - (device_is_compatible(node, "pci106b,18") || + if (uninorth_child && !strcmp(node->name, "firewire") && + (device_is_compatible(node, "pci106b,18") || device_is_compatible(node, "pci106b,30") || device_is_compatible(node, "pci11c1,5811"))) { pmac_call_feature(PMAC_FTR_1394_CABLE_POWER, node, 0, 1); pmac_call_feature(PMAC_FTR_1394_ENABLE, node, 0, 1); updatecfg = 1; } - if (uninorth_child && !strcmp(node->name, "ethernet") && + if (uninorth_child && !strcmp(node->name, "ethernet") && device_is_compatible(node, "gmac")) { pmac_call_feature(PMAC_FTR_GMAC_ENABLE, node, 0, 1); updatecfg = 1; @@ -560,14 +560,14 @@ pmac_pci_enable_device_hook(struct pci_d if (updatecfg) { u16 cmd; - + /* * Make sure PCI is correctly configured * * We use old pci_bios versions of the function since, by * default, gmac is not powered up, and so will be absent - * from the kernel initial PCI lookup. - * + * from the kernel initial PCI lookup. + * * Should be replaced by 2.4 new PCI mecanisms and really * regiser the device. */ @@ -577,7 +577,7 @@ pmac_pci_enable_device_hook(struct pci_d pci_write_config_byte(dev, PCI_LATENCY_TIMER, 16); pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, 8); } - + return 0; } @@ -594,12 +594,12 @@ pmac_pcibios_after_init(void) /* OF fails to initialize IDE controllers on macs * (and maybe other machines) - * + * * Ideally, this should be moved to the IDE layer, but we need * to check specifically with Andre Hedrick how to do it cleanly * since the common IDE code seem to care about the fact that the * BIOS may have disabled a controller. - * + * * -- BenH */ while ((dev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, dev)) != NULL) { diff -prauN linux-2.6.0-test5/arch/ppc/platforms/pmac_pic.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/pmac_pic.c --- linux-2.6.0-test5/arch/ppc/platforms/pmac_pic.c 2003-09-08 12:50:23.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/pmac_pic.c 2003-09-25 19:15:50.000000000 -0700 @@ -41,7 +41,7 @@ * XXX this should be in xmon.h, but putting it there means xmon.h * has to include (to get irqreturn_t), which * causes all sorts of problems. -- paulus - */ + */ extern irqreturn_t xmon_irq(int, void *, struct pt_regs *); struct pmac_irq_hw { @@ -191,7 +191,7 @@ struct hw_interrupt_type gatwick_pic = { static irqreturn_t gatwick_action(int cpl, void *dev_id, struct pt_regs *regs) { int irq, bits; - + for (irq = max_irqs; (irq -= 32) >= max_real_irqs; ) { int i = irq >> 5; bits = in_le32(&pmac_irq_hw[i]->event) | ppc_lost_interrupts[i]; @@ -216,7 +216,7 @@ pmac_get_irq(struct pt_regs *regs) #ifdef CONFIG_SMP void psurge_smp_message_recv(struct pt_regs *); - + /* IPI's are a hack on the powersurge -- Cort */ if ( smp_processor_id() != 0 ) { psurge_smp_message_recv(regs); @@ -246,7 +246,7 @@ pmac_fix_gatwick_interrupts(struct devic { struct device_node *node; int count; - + memset(gatwick_int_pool, 0, sizeof(gatwick_int_pool)); node = gw->child; count = 0; @@ -259,7 +259,7 @@ pmac_fix_gatwick_interrupts(struct devic node->child->intrs = &gatwick_int_pool[count]; count += 3; } - node->child->n_intrs = 3; + node->child->n_intrs = 3; node->child->intrs[0].line = 15+irq_base; node->child->intrs[1].line = 4+irq_base; node->child->intrs[2].line = 5+irq_base; @@ -278,7 +278,7 @@ pmac_fix_gatwick_interrupts(struct devic node->intrs[0].line = 29+irq_base; printk(KERN_INFO "irq: fixed media-bay on second controller (%d)\n", node->intrs[0].line); - + ya_node = node->child; while(ya_node) { @@ -292,7 +292,7 @@ pmac_fix_gatwick_interrupts(struct devic ya_node->intrs[1].line = 1+irq_base; printk(KERN_INFO "irq: fixed floppy on second controller (%d,%d)\n", ya_node->intrs[0].line, ya_node->intrs[1].line); - } + } if (strcasecmp(ya_node->name, "ata4") == 0) { if (ya_node->n_intrs < 2) { ya_node->intrs = &gatwick_int_pool[count]; @@ -303,7 +303,7 @@ pmac_fix_gatwick_interrupts(struct devic ya_node->intrs[1].line = 3+irq_base; printk(KERN_INFO "irq: fixed ide on second controller (%d,%d)\n", ya_node->intrs[0].line, ya_node->intrs[1].line); - } + } ya_node = ya_node->sibling; } } @@ -370,7 +370,7 @@ pmac_pic_init(void) struct device_node *irqctrler; unsigned long addr; int irq_cascade = -1; - + /* We first try to detect Apple's new Core99 chipset, since mac-io * is quite different on those machines and contains an IBM MPIC2. */ @@ -428,7 +428,7 @@ pmac_pic_init(void) /* * G3 powermacs and 1999 G3 PowerBooks have 64 interrupts, - * 1998 G3 Series PowerBooks have 128, + * 1998 G3 Series PowerBooks have 128, * other powermacs have 32. * The combo ethernet/modem card for the Powerstar powerbooks * (2400/3400/3500, ohare based) has a second ohare chip @@ -450,17 +450,17 @@ pmac_pic_init(void) /* get addresses of first controller */ if (irqctrler) { if (irqctrler->n_addrs > 0) { - addr = (unsigned long) + addr = (unsigned long) ioremap(irqctrler->addrs[0].address, 0x40); for (i = 0; i < 2; ++i) pmac_irq_hw[i] = (volatile struct pmac_irq_hw*) (addr + (2 - i) * 0x10); } - + /* get addresses of second controller */ irqctrler = irqctrler->next; if (irqctrler && irqctrler->n_addrs > 0) { - addr = (unsigned long) + addr = (unsigned long) ioremap(irqctrler->addrs[0].address, 0x40); for (i = 2; i < 4; ++i) pmac_irq_hw[i] = (volatile struct pmac_irq_hw*) @@ -489,7 +489,7 @@ pmac_pic_init(void) for (i = 0; i < max_irqs; i++) if (level_mask[i >> 5] & (1UL << (i & 0x1f))) irq_desc[i].status = IRQ_LEVEL; - + /* get interrupt line of secondary interrupt controller */ if (irq_cascade >= 0) { printk(KERN_INFO "irq: secondary controller on irq %d\n", @@ -524,7 +524,7 @@ unsigned long sleep_save_mask[2]; static int pmacpic_find_viaint(void) { int viaint = -1; - + #ifdef CONFIG_ADB_PMU struct device_node *np; @@ -543,7 +543,7 @@ not_found: static int pmacpic_suspend(struct sys_device *sysdev, u32 state) { int viaint = pmacpic_find_viaint(); - + sleep_save_mask[0] = ppc_cached_irq_mask[0]; sleep_save_mask[1] = ppc_cached_irq_mask[1]; ppc_cached_irq_mask[0] = 0; @@ -591,7 +591,7 @@ static struct sysdev_driver driver_pmacp #ifdef CONFIG_PM .suspend = &pmacpic_suspend, .resume = &pmacpic_resume, -#endif /* CONFIG_PM */ +#endif /* CONFIG_PM */ }; static int __init init_pmacpic_sysfs(void) diff -prauN linux-2.6.0-test5/arch/ppc/platforms/pmac_setup.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/pmac_setup.c --- linux-2.6.0-test5/arch/ppc/platforms/pmac_setup.c 2003-09-08 12:50:09.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/pmac_setup.c 2003-09-25 19:15:50.000000000 -0700 @@ -1,7 +1,7 @@ /* * arch/ppc/platforms/setup.c * - * PowerPC version + * PowerPC version * Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org) * * Adapted for Power Macintosh by Paul Mackerras @@ -107,7 +107,7 @@ extern char saved_command_line[]; extern int pmac_newworld; -#define DEFAULT_ROOT_DEVICE 0x0801 /* sda1 - slightly silly choice */ +#define DEFAULT_ROOT_DEVICE Root_SDA1 /* sda1 - slightly silly choice */ extern void zs_kgdb_hook(int tty_num); static void ohare_init(void); @@ -136,7 +136,7 @@ pmac_show_cpuinfo(struct seq_file *m) if (pmac_call_feature(PMAC_FTR_GET_MB_INFO, NULL, PMAC_MB_INFO_NAME, (int)&mbname) != 0) mbname = "Unknown"; - + /* find motherboard type */ seq_printf(m, "machine\t\t: "); np = find_devices("device-tree"); @@ -163,7 +163,7 @@ pmac_show_cpuinfo(struct seq_file *m) /* print parsed model */ seq_printf(m, "detected as\t: %d (%s)\n", mbmodel, mbname); seq_printf(m, "pmac flags\t: %08x\n", mbflags); - + /* find l2 cache info */ np = find_devices("l2-cache"); if (np == 0) @@ -196,7 +196,7 @@ pmac_show_cpuinfo(struct seq_file *m) int n; struct reg_property *reg = (struct reg_property *) get_property(np, "reg", &n); - + if (reg != 0) { unsigned long total = 0; @@ -207,9 +207,9 @@ pmac_show_cpuinfo(struct seq_file *m) } /* Checks "l2cr-value" property in the registry */ - np = find_devices("cpus"); + np = find_devices("cpus"); if (np == 0) - np = find_type_devices("cpu"); + np = find_type_devices("cpu"); if (np != 0) { unsigned int *l2cr = (unsigned int *) get_property(np, "l2cr-value", NULL); @@ -217,11 +217,11 @@ pmac_show_cpuinfo(struct seq_file *m) seq_printf(m, "l2cr override\t: 0x%x\n", *l2cr); } } - + /* Indicate newworld/oldworld */ seq_printf(m, "pmac-generation\t: %s\n", pmac_newworld ? "NewWorld" : "OldWorld"); - + return 0; } @@ -248,7 +248,7 @@ pmac_setup_arch(void) struct device_node *cpu; int *fp; unsigned long pvr; - + pvr = PVR_VER(mfspr(PVR)); /* Set loops_per_jiffy to a half-way reasonable value, @@ -274,12 +274,12 @@ pmac_setup_arch(void) /* Lookup PCI hosts */ pmac_find_bridges(); - + /* Checks "l2cr-value" property in the registry */ if (cur_cpu_spec[0]->cpu_features & CPU_FTR_L2CR) { - struct device_node *np = find_devices("cpus"); + struct device_node *np = find_devices("cpus"); if (np == 0) - np = find_type_devices("cpu"); + np = find_type_devices("cpu"); if (np != 0) { unsigned int *l2cr = (unsigned int *) get_property(np, "l2cr-value", NULL); @@ -296,7 +296,7 @@ pmac_setup_arch(void) printk(KERN_INFO "L2CR overriden (0x%x), backside cache is %s\n", ppc_override_l2cr_value, (ppc_override_l2cr_value & 0x80000000) ? "enabled" : "disabled"); - + #ifdef CONFIG_KGDB zs_kgdb_hook(0); #endif @@ -308,7 +308,7 @@ pmac_setup_arch(void) printk("WARNING ! Your machine is Cuda based but your kernel\n"); printk(" wasn't compiled with CONFIG_ADB_CUDA option !\n"); } -#endif +#endif #ifdef CONFIG_ADB_PMU find_via_pmu(); #else @@ -316,7 +316,7 @@ pmac_setup_arch(void) printk("WARNING ! Your machine is PMU based but your kernel\n"); printk(" wasn't compiled with CONFIG_ADB_PMU option !\n"); } -#endif +#endif #ifdef CONFIG_NVRAM pmac_nvram_init(); #endif @@ -472,7 +472,7 @@ pmac_restart(char *cmd) #ifdef CONFIG_NVRAM pmac_nvram_update(); #endif - + switch (sys_ctrler) { #ifdef CONFIG_ADB_CUDA case SYS_CTRLER_CUDA: @@ -482,11 +482,11 @@ pmac_restart(char *cmd) cuda_poll(); break; #endif /* CONFIG_ADB_CUDA */ -#ifdef CONFIG_ADB_PMU +#ifdef CONFIG_ADB_PMU case SYS_CTRLER_PMU: pmu_restart(); break; -#endif /* CONFIG_ADB_PMU */ +#endif /* CONFIG_ADB_PMU */ default: ; } } @@ -501,7 +501,7 @@ pmac_power_off(void) #ifdef CONFIG_NVRAM pmac_nvram_update(); #endif - + switch (sys_ctrler) { #ifdef CONFIG_ADB_CUDA case SYS_CTRLER_CUDA: @@ -623,7 +623,7 @@ pmac_init(unsigned long r3, unsigned lon ppc_md.irq_canonicalize = NULL; ppc_md.init_IRQ = pmac_pic_init; ppc_md.get_irq = pmac_get_irq; /* Changed later on ... */ - + ppc_md.pcibios_fixup = pmac_pcibios_fixup; ppc_md.pcibios_enable_device_hook = pmac_pci_enable_device_hook; ppc_md.pcibios_after_init = pmac_pcibios_after_init; @@ -658,7 +658,7 @@ pmac_init(unsigned long r3, unsigned lon #endif /* CONFIG_BOOTX_TEXT */ if (ppc_md.progress) ppc_md.progress("pmac_init(): exit", 0); - + } #ifdef CONFIG_BOOTX_TEXT diff -prauN linux-2.6.0-test5/arch/ppc/platforms/pmac_sleep.S wli-2.6.0-test5-bk12-25/arch/ppc/platforms/pmac_sleep.S --- linux-2.6.0-test5/arch/ppc/platforms/pmac_sleep.S 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/pmac_sleep.S 2003-09-25 19:15:50.000000000 -0700 @@ -54,6 +54,9 @@ * vector that will be called by the ROM on wakeup */ _GLOBAL(low_sleep_handler) +#ifndef CONFIG_6xx + blr +#else mflr r0 stw r0,4(r1) stwu r1,-SL_SIZE(r1) @@ -76,7 +79,7 @@ _GLOBAL(low_sleep_handler) mftbu r3 cmpw r3,r4 bne 1b - + /* Save SPRGs */ mfsprg r4,0 stw r4,SL_SPRG0(r1) @@ -164,7 +167,7 @@ _GLOBAL(low_sleep_handler) sync mtspr SPRN_HID0,r3 sync - + /* Turn off data relocation. */ mfmsr r3 /* Save MSR in r7 */ rlwinm r3,r3,0,28,26 /* Turn off DR bit */ @@ -199,7 +202,7 @@ _GLOBAL(low_sleep_handler) isync b 1b -/* +/* * Here is the resume code. */ @@ -219,7 +222,7 @@ _GLOBAL(core99_wake_up) /* Won't that cause problems on CPU that doesn't support it ? */ lis r3, 0 mtspr SPRN_MMCR0, r3 - + /* sanitize MSR */ mfmsr r3 ori r3,r3,MSR_EE|MSR_IP @@ -237,11 +240,11 @@ _GLOBAL(core99_wake_up) lwz r1,0(r3) /* Pass thru to older resume code ... */ -/* +/* * Here is the resume code for older machines. * r1 has the physical address of SL_PC(sp). */ - + grackle_wake_up: /* Invalidate & enable L1 cache, we don't care about * whatever the ROM may have tried to write to memory @@ -262,7 +265,7 @@ grackle_wake_up: bdnz 3b sync isync - + subi r1,r1,SL_PC /* Restore various CPU config stuffs */ @@ -342,7 +345,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_HAS_HIGH_B /* restore the MSR and turn on the MMU */ lwz r3,SL_MSR(r1) - bl turn_on_mmu + bl turn_on_mmu /* get back the stack pointer */ tovirt(r1,r1) @@ -381,4 +384,6 @@ turn_on_mmu: sleep_storage: .long 0 .balign L1_CACHE_LINE_SIZE, 0 + +#endif /* CONFIG_6xx */ .section .text diff -prauN linux-2.6.0-test5/arch/ppc/platforms/pmac_smp.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/pmac_smp.c --- linux-2.6.0-test5/arch/ppc/platforms/pmac_smp.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/pmac_smp.c 2003-09-25 19:15:50.000000000 -0700 @@ -3,7 +3,7 @@ * * We support both the old "powersurge" SMP architecture * and the current Core99 (G4 PowerMac) machines. - * + * * Note that we don't support the very first rev. of * Apple/DayStar 2 CPUs board, the one with the funky * watchdog. Hopefully, none of these should be there except @@ -461,13 +461,13 @@ smp_core99_kick_cpu(int nr) local_irq_save(flags); local_irq_disable(); - + /* Save reset vector */ save_vector = *vector; - - /* Setup fake reset vector that does + + /* Setup fake reset vector that does * b __secondary_start_psurge - KERNELBASE - */ + */ switch(nr) { case 1: new_vector = (unsigned long)__secondary_start_psurge; @@ -480,24 +480,24 @@ smp_core99_kick_cpu(int nr) break; } *vector = 0x48000002 + new_vector - KERNELBASE; - + /* flush data cache and inval instruction cache */ flush_icache_range((unsigned long) vector, (unsigned long) vector + 4); - + /* Put some life in our friend */ pmac_call_feature(PMAC_FTR_RESET_CPU, NULL, nr, 0); - + /* FIXME: We wait a bit for the CPU to take the exception, I should * instead wait for the entry code to set something for me. Well, * ideally, all that crap will be done in prom.c and the CPU left * in a RAM-based wait loop like CHRP. */ mdelay(1); - + /* Restore our exception vector */ *vector = save_vector; flush_icache_range((unsigned long) vector, (unsigned long) vector + 4); - + local_irq_restore(flags); if (ppc_md.progress) ppc_md.progress("smp_core99_kick_cpu done", 0x347); } @@ -508,7 +508,7 @@ smp_core99_setup_cpu(int cpu_nr) /* Setup some registers */ if (cpu_nr != 0) core99_init_caches(cpu_nr); - + /* Setup openpic */ do_openpic_setup_cpu(); diff -prauN linux-2.6.0-test5/arch/ppc/platforms/powerpmc250.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/powerpmc250.c --- linux-2.6.0-test5/arch/ppc/platforms/powerpmc250.c 2003-09-08 12:49:55.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/powerpmc250.c 2003-09-25 19:15:50.000000000 -0700 @@ -1,6 +1,6 @@ /* * arch/ppc/platforms/powerpmc250.c - * + * * Board setup routines for Force PowerPMC-250 Processor PMC * * Author: Troy Benjegerdes @@ -74,10 +74,10 @@ powerpmc250_setup_arch(void) { /* init to some ~sane value until calibrate_delay() runs */ loops_per_jiffy = 50000000/HZ; - + /* Lookup PCI host bridges */ powerpmc250_find_bridges(); - + #ifdef CONFIG_BLK_DEV_INITRD if (initrd_start) ROOT_DEV = Root_RAM0; @@ -155,7 +155,7 @@ unsigned long __init powerpmc250_get_bus } #endif -static void __init +static void __init powerpmc250_calibrate_decr(void) { unsigned long freq; @@ -233,7 +233,7 @@ powerpmc250_find_end_of_memory(void) /* yuck, better hope your ram size is a power of 2 -- paulus */ powerpmc250_set_bat(); - return mpc10x_get_mem_size(MPC10X_MEM_MAP_B); + return mpc10x_get_mem_size(MPC10X_MEM_MAP_B); } static void __init @@ -262,10 +262,10 @@ platform_init(unsigned long r3, unsigned *(char *)(r7 + KERNELBASE) = 0; strcpy(cmd_line, (char *)(r6 + KERNELBASE)); } - + isa_io_base = MPC10X_MAPB_ISA_IO_BASE; isa_mem_base = MPC10X_MAPB_ISA_MEM_BASE; - pci_dram_offset = MPC10X_MAPB_DRAM_OFFSET; + pci_dram_offset = MPC10X_MAPB_DRAM_OFFSET; ppc_md.setup_arch = powerpmc250_setup_arch; ppc_md.show_cpuinfo = powerpmc250_show_cpuinfo; @@ -274,7 +274,7 @@ platform_init(unsigned long r3, unsigned ppc_md.find_end_of_memory = powerpmc250_find_end_of_memory; ppc_md.setup_io_mappings = powerpmc250_map_io; - + ppc_md.restart = powerpmc250_restart; ppc_md.power_off = powerpmc250_power_off; ppc_md.halt = powerpmc250_halt; @@ -289,7 +289,7 @@ platform_init(unsigned long r3, unsigned /* * (This used to be arch/ppc/platforms/powerpmc250_pci.c) - * + * * PCI support for Force PowerPMC250 * */ @@ -299,7 +299,7 @@ platform_init(unsigned long r3, unsigned #define DBG(x...) printk(x) #else #define DBG(x...) -#endif /* DEBUG */ +#endif /* DEBUG */ static inline int __init powerpmc250_map_irq(struct pci_dev *dev, unsigned char idsel, unsigned char pin) @@ -308,7 +308,7 @@ powerpmc250_map_irq(struct pci_dev *dev, /* * PCI IDSEL/INTPIN->INTLINE * A B C D - */ + */ { {17, 0, 0, 0}, /* Device 11 - 82559 */ {0, 0, 0, 0}, /* 12 */ @@ -321,7 +321,7 @@ powerpmc250_map_irq(struct pci_dev *dev, return PCI_IRQ_TABLE_LOOKUP; }; -static int +static int powerpmc250_exclude_device(u_char bus, u_char devfn) { /* @@ -329,15 +329,15 @@ powerpmc250_exclude_device(u_char bus, u * device on the PCI Bus, will create an incorrect response and * later will respond incorrectly to Configuration read coming * from another device. - * + * * The work around is that when doing a PCI Scan one * should skip its own device number in the scan. - * + * * The top IDsel is AD13 and the middle is AD14. * * -- Note from force */ - + if ((bus == 0) && (PCI_SLOT(devfn) == 13 || PCI_SLOT(devfn) == 14)) { return PCIBIOS_DEVICE_NOT_FOUND; } @@ -368,10 +368,10 @@ powerpmc250_find_bridges(void) hose->mem_resources[0].end = 0xffffffff; hose->last_busno = pciauto_bus_scan(hose, hose->first_busno); - + /* ppc_md.pcibios_fixup = pcore_pcibios_fixup; */ ppc_md.pci_swizzle = common_swizzle; - + ppc_md.pci_exclude_device = powerpmc250_exclude_device; ppc_md.pci_map_irq = powerpmc250_map_irq; } else { diff -prauN linux-2.6.0-test5/arch/ppc/platforms/powerpmc250.h wli-2.6.0-test5-bk12-25/arch/ppc/platforms/powerpmc250.h --- linux-2.6.0-test5/arch/ppc/platforms/powerpmc250.h 2003-09-08 12:50:13.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/powerpmc250.h 2003-09-25 19:15:50.000000000 -0700 @@ -1,10 +1,10 @@ /* * include/asm-ppc/platforms/powerpmc250.h - * + * * Definitions for Force PowerPMC-250 board support * * Author: Troy Benjegerdes - * + * * Borrowed heavily from prpmc750.h by Matt Porter * * 2001 (c) MontaVista, Software, Inc. This file is licensed under diff -prauN linux-2.6.0-test5/arch/ppc/platforms/powerpmc250_serial.h wli-2.6.0-test5-bk12-25/arch/ppc/platforms/powerpmc250_serial.h --- linux-2.6.0-test5/arch/ppc/platforms/powerpmc250_serial.h 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/powerpmc250_serial.h 2003-09-25 19:15:50.000000000 -0700 @@ -1,6 +1,6 @@ /* * include/asm-ppc/platforms/powerpmc250_serial.h - * + * * Motorola PrPMC750 serial support * * Author: Troy Benjegerdes diff -prauN linux-2.6.0-test5/arch/ppc/platforms/pplus_pci.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/pplus_pci.c --- linux-2.6.0-test5/arch/ppc/platforms/pplus_pci.c 2003-09-08 12:51:00.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/pplus_pci.c 2003-09-25 19:15:50.000000000 -0700 @@ -36,7 +36,7 @@ unsigned char *Motherboard_map_name; -/* Tables for known hardware */ +/* Tables for known hardware */ /* Motorola Mesquite */ static inline int @@ -173,7 +173,7 @@ Genesis2_map_irq(struct pci_dev *dev, un /* 2300 * Raven 31 * ISA 11 - * Univ 13 + * Univ 13 * eth 14 - IRQ2 * PMC1 16 - 9,10,11,12 = A-D * PMC2 17 - 9,10,11,12 = B,C,D,A @@ -369,7 +369,7 @@ pplus_pib_init(void) * Perform specific configuration for the Via Tech or * or Winbond PCI-ISA-Bridge part. */ - if ((dev = pci_find_device(PCI_VENDOR_ID_VIA, + if ((dev = pci_find_device(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_1, dev))) { /* * PPCBUG does not set the enable bits @@ -523,7 +523,7 @@ pplus_setup_hose(void) pplus_set_VIA_IDE_legacy(); - hose->last_busno = pciauto_bus_scan(hose, hose->first_busno); + hose->last_busno = pciauto_bus_scan(hose, hose->first_busno); ppc_md.pcibios_fixup = pplus_pcibios_fixup; ppc_md.pci_swizzle = common_swizzle; diff -prauN linux-2.6.0-test5/arch/ppc/platforms/pplus_setup.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/pplus_setup.c --- linux-2.6.0-test5/arch/ppc/platforms/pplus_setup.c 2003-09-08 12:50:32.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/pplus_setup.c 2003-09-25 19:15:50.000000000 -0700 @@ -101,10 +101,10 @@ pplus_setup_arch(void) if ( ppc_md.progress ) ppc_md.progress("pplus_setup_arch: find_bridges\n", 0); - + /* Setup PCI host bridge */ pplus_setup_hose(); - + /* Set up floppy in PS/2 mode */ outb(0x09, SIO_CONFIG_RA); reg = inb(SIO_CONFIG_RD); @@ -142,7 +142,7 @@ pplus_setup_arch(void) conswitchp = &dummy_con; #endif #ifdef CONFIG_PPCBUG_NVRAM - /* Read in NVRAM data */ + /* Read in NVRAM data */ init_prep_nvram(); /* if no bootargs, look in NVRAM */ @@ -227,14 +227,14 @@ pplus_init_IRQ(void) openpic_init(1, NUM_8259_INTERRUPTS, 0, -1); for ( i = 0 ; i < NUM_8259_INTERRUPTS ; i++ ) irq_desc[i].handler = &i8259_pic; - i8259_init(NULL); + i8259_init(NULL); } #if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_IDE_MODULE) /* * IDE stuff. */ -static int +static int pplus_ide_default_irq(unsigned long base) { switch (base) { @@ -244,7 +244,7 @@ pplus_ide_default_irq(unsigned long base } } -static unsigned long +static unsigned long pplus_ide_default_io_base(int index) { switch (index) { diff -prauN linux-2.6.0-test5/arch/ppc/platforms/prep_pci.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/prep_pci.c --- linux-2.6.0-test5/arch/ppc/platforms/prep_pci.c 2003-09-08 12:50:33.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/prep_pci.c 2003-09-25 19:15:50.000000000 -0700 @@ -41,7 +41,7 @@ static void Powerplus_Map_Non0(struct pc /* Used for Motorola to store system config register */ static unsigned long *ProcInfo; -/* Tables for known hardware */ +/* Tables for known hardware */ /* Motorola PowerStackII - Utah */ static char Utah_pci_IRQ_map[23] __prepdata = @@ -153,7 +153,7 @@ static char Blackhawk_pci_IRQ_routes[] _ 15, /* Line 3 */ 15 /* Line 4 */ }; - + /* Motorola Mesquite */ static char Mesquite_pci_IRQ_map[23] __prepdata = { @@ -269,7 +269,7 @@ static char Raven_pci_IRQ_routes[] __pre { 0, /* This is a dummy structure */ }; - + /* Motorola MVME16xx */ static char Genesis_pci_IRQ_map[16] __prepdata = { @@ -299,7 +299,7 @@ static char Genesis_pci_IRQ_routes[] __p 14, /* Line 3 */ 15 /* Line 4 */ }; - + static char Genesis2_pci_IRQ_map[23] __prepdata = { 0, /* Slot 0 - unused */ @@ -772,7 +772,7 @@ raven_init(void) OpenPIC_NumInitSenses = sizeof(prep_openpic_initsenses); ppc_md.get_irq = openpic_get_irq; - + /* If raven is present on Motorola store the system config register * for later use. */ @@ -948,7 +948,7 @@ prep_route_pci_interrupts(void) unsigned char *ibc_pirq = (unsigned char *)0x80800860; unsigned char *ibc_pcicon = (unsigned char *)0x80800840; int i; - + if ( _prep_type == _PREP_Motorola) { unsigned short irq_mode; @@ -1021,7 +1021,7 @@ prep_route_pci_interrupts(void) printk("No known machine pci routing!\n"); return; } - + /* Set up mapping from slots */ for (i = 1; i <= 4; i++) ibc_pirq[i-1] = Motherboard_routes[i]; @@ -1042,7 +1042,7 @@ prep_pib_init(void) * Perform specific configuration for the Via Tech or * or Winbond PCI-ISA-Bridge part. */ - if ((dev = pci_find_device(PCI_VENDOR_ID_VIA, + if ((dev = pci_find_device(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_1, dev))) { /* * PPCBUG does not set the enable bits @@ -1140,7 +1140,7 @@ Powerplus_Map_Non0(struct pci_dev *dev) * the devfn of the bus bridge with secondary inputs, use those. * Otherwise, assume it's a PMC site and get the interrupt line * value from the interrupt routing table. - */ + */ if (mot_info[mot_entry].secondary_bridge_devfn) { pbus = dev->bus; @@ -1213,8 +1213,8 @@ prep_pcibios_after_init(void) { #if 0 struct pci_dev *dev; - - /* If there is a WD 90C, reset the IO BAR to 0x0 (it started that + + /* If there is a WD 90C, reset the IO BAR to 0x0 (it started that * way, but the PCI layer relocated it because it thought 0x0 was * invalid for a BAR). * If you don't do this, the card's VGA base will be +0xc0000 @@ -1265,7 +1265,7 @@ prep_find_bridges(void) PREP_ISA_IO_BASE + 0xcfc); printk("PReP architecture\n"); -#ifdef CONFIG_PREP_RESIDUAL +#ifdef CONFIG_PREP_RESIDUAL { PPC_DEVICE *hostbridge; @@ -1279,7 +1279,7 @@ prep_find_bridges(void) 3, 0); if(pkt) { #define p pkt->L4_Pack.L4_Data.L4_PPCPack - setup_indirect_pci(hose, + setup_indirect_pci(hose, ld_le32((unsigned *) (p.PPCData)), ld_le32((unsigned *) (p.PPCData+8))); #undef p diff -prauN linux-2.6.0-test5/arch/ppc/platforms/prep_setup.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/prep_setup.c --- linux-2.6.0-test5/arch/ppc/platforms/prep_setup.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/prep_setup.c 2003-09-25 19:15:50.000000000 -0700 @@ -93,7 +93,7 @@ extern void prep_tiger1_setup_pci(char * /* for the mac fs */ dev_t boot_dev; -#ifdef CONFIG_SOUND_CS4232 +#ifdef CONFIG_SOUND_CS4232 long ppc_cs4232_dma, ppc_cs4232_dma2; #endif @@ -102,7 +102,7 @@ extern unsigned long Hash_size, Hash_mas extern int probingmem; extern unsigned long loops_per_jiffy; -#ifdef CONFIG_SOUND_CS4232 +#ifdef CONFIG_SOUND_CS4232 EXPORT_SYMBOL(ppc_cs4232_dma); EXPORT_SYMBOL(ppc_cs4232_dma2); #endif @@ -188,7 +188,7 @@ prep_ibm_cpuinfo(struct seq_file *m) /* print info about the SCSI fuse */ seq_printf(m, "scsi fuse\t: "); - if (equip_reg & PREP_IBM_EQUIPMENT_SCSIFUSE) + if (equip_reg & PREP_IBM_EQUIPMENT_SCSIFUSE) seq_printf(m, "ok"); else seq_printf(m, "bad"); @@ -202,8 +202,8 @@ prep_ibm_cpuinfo(struct seq_file *m) for (i = 0; (res->ActualNumMemories) && (i < MAX_MEMS); i++) { if (res->Memories[i].SIMMSize != 0) seq_printf(m, "%d:%ldMiB ", i, - (res->Memories[i].SIMMSize > 1024) ? - res->Memories[i].SIMMSize>>20 : + (res->Memories[i].SIMMSize > 1024) ? + res->Memories[i].SIMMSize>>20 : res->Memories[i].SIMMSize); } seq_printf(m, "\n"); @@ -361,12 +361,12 @@ prep_tiger1_cpuinfo(struct seq_file *m) seq_printf(m, "async, "); else seq_printf(m, "sync burst, "); - + if (l2_reg & 0x4) seq_printf(m, "parity, "); else seq_printf(m, "no parity, "); - + switch (l2_reg & 0x3) { case 0x0: seq_printf(m, "256KiB\n"); @@ -440,8 +440,8 @@ no_l2: for (i = 0; (res->ActualNumMemories) && (i < MAX_MEMS); i++) { if (res->Memories[i].SIMMSize != 0) seq_printf(m, "%d:%ldM ", i, - (res->Memories[i].SIMMSize > 1024) ? - res->Memories[i].SIMMSize>>20 : + (res->Memories[i].SIMMSize > 1024) ? + res->Memories[i].SIMMSize>>20 : res->Memories[i].SIMMSize); } seq_printf(m, "\n"); @@ -562,7 +562,7 @@ prep_show_percpuinfo(struct seq_file *m, { /* PREP's without residual data will give incorrect values here */ seq_printf(m, "clock\t\t: "); -#ifdef CONFIG_PREP_RESIDUAL +#ifdef CONFIG_PREP_RESIDUAL if (res->ResidualLength) seq_printf(m, "%ldMHz\n", (res->VitalProductData.ProcessorHz > 1024) ? @@ -575,7 +575,7 @@ prep_show_percpuinfo(struct seq_file *m, return 0; } -#ifdef CONFIG_SOUND_CS4232 +#ifdef CONFIG_SOUND_CS4232 static long __init masktoint(unsigned int i) { int t = -1; @@ -586,7 +586,7 @@ static long __init masktoint(unsigned in /* * ppc_cs4232_dma and ppc_cs4232_dma2 are used in include/asm/dma.h - * to distinguish sound dma-channels from others. This is because + * to distinguish sound dma-channels from others. This is because * blocksize on 16 bit dma-channels 5,6,7 is 128k, but * the cs4232.c uses 64k like on 8 bit dma-channels 0,1,2,3 */ @@ -597,7 +597,7 @@ static void __init prep_init_sound(void) /* * Get the needed resource informations from residual data. - * + * */ #ifdef CONFIG_PREP_RESIDUAL audiodevice = residual_find_device(~0, NULL, MultimediaController, @@ -619,7 +619,7 @@ static void __init prep_init_sound(void) /* * These are the PReP specs' defaults for the cs4231. We use these * as fallback incase we don't have residual data. - * At least the IBM Thinkpad 850 with IDE DMA Channels at 6 and 7 + * At least the IBM Thinkpad 850 with IDE DMA Channels at 6 and 7 * will use the other values. */ if (audiodevice == NULL) { @@ -628,7 +628,7 @@ static void __init prep_init_sound(void) ppc_cs4232_dma = 1; ppc_cs4232_dma2 = -1; break; - default: + default: ppc_cs4232_dma = 6; ppc_cs4232_dma2 = 7; } @@ -692,10 +692,10 @@ prep_setup_arch(void) /* init to some ~sane value until calibrate_delay() runs */ loops_per_jiffy = 50000000; - + /* Lookup PCI host bridges */ prep_find_bridges(); - + /* Set up floppy in PS/2 mode */ outb(0x09, SIO_CONFIG_RA); reg = inb(SIO_CONFIG_RD); @@ -775,7 +775,7 @@ prep_setup_arch(void) break; } - /* Read in NVRAM data */ + /* Read in NVRAM data */ init_prep_nvram(); /* if no bootargs, look in NVRAM */ @@ -789,7 +789,7 @@ prep_setup_arch(void) } } -#ifdef CONFIG_SOUND_CS4232 +#ifdef CONFIG_SOUND_CS4232 prep_init_sound(); #endif /* CONFIG_SOUND_CS4232 */ @@ -833,7 +833,7 @@ prep_res_calibrate_decr(void) tb_ticks_per_jiffy = freq / HZ / divisor; return 0; } else -#endif +#endif return 1; } @@ -905,12 +905,12 @@ mk48t59_init(void) { tmp = ppc_md.nvram_read_val(MK48T59_RTC_CONTROLB); if (tmp & MK48T59_RTC_CB_STOP) { printk("Warning: RTC was stopped, date will be wrong.\n"); - ppc_md.nvram_write_val(MK48T59_RTC_CONTROLB, + ppc_md.nvram_write_val(MK48T59_RTC_CONTROLB, tmp & ~MK48T59_RTC_CB_STOP); /* Low frequency crystal oscillators may take a very long * time to startup and stabilize. For now just ignore the * the issue, but attempting to calibrate the decrementer - * from the RTC just after this wakeup is likely to be very + * from the RTC just after this wakeup is likely to be very * inaccurate. Firmware should not allow to load * the OS with the clock stopped anyway... */ @@ -934,11 +934,11 @@ mk48t59_calibrate_decr(void) unsigned char save_control; long i; unsigned char sec; - - + + /* Make sure the time is not stopped. */ save_control = ppc_md.nvram_read_val(MK48T59_RTC_CONTROLB); - + ppc_md.nvram_write_val(MK48T59_RTC_CONTROLA, (save_control & (~MK48T59_RTC_CB_STOP))); @@ -1120,7 +1120,7 @@ void __init prep_init(unsigned long r3, unsigned long r4, unsigned long r5, unsigned long r6, unsigned long r7) { -#ifdef CONFIG_PREP_RESIDUAL +#ifdef CONFIG_PREP_RESIDUAL /* make a copy of residual data */ if ( r3 ) { memcpy((void *)res,(void *)(r3+KERNELBASE), @@ -1136,7 +1136,7 @@ prep_init(unsigned long r3, unsigned lon DMA_MODE_WRITE = 0x48; /* figure out what kind of prep workstation we are */ -#ifdef CONFIG_PREP_RESIDUAL +#ifdef CONFIG_PREP_RESIDUAL if ( res->ResidualLength != 0 ) { if ( !strncmp(res->VitalProductData.PrintableModel,"IBM",3) ) _prep_type = _PREP_IBM; diff -prauN linux-2.6.0-test5/arch/ppc/platforms/prep_time.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/prep_time.c --- linux-2.6.0-test5/arch/ppc/platforms/prep_time.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/prep_time.c 2003-09-25 19:15:50.000000000 -0700 @@ -115,10 +115,10 @@ unsigned long mc146818_get_rtc_time(void /* Since the UIP flag is set for about 2.2 ms and the clock * is typically written with a precision of 1 jiffy, trying - * to obtain a precision better than a few milliseconds is + * to obtain a precision better than a few milliseconds is * an illusion. Only consistency is interesting, this also * allows to use the routine for /dev/rtc without a potential - * 1 second kernel busy loop triggered by any reader of /dev/rtc. + * 1 second kernel busy loop triggered by any reader of /dev/rtc. */ for ( i = 0; i<1000000; i++) { diff -prauN linux-2.6.0-test5/arch/ppc/platforms/proc_rtas.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/proc_rtas.c --- linux-2.6.0-test5/arch/ppc/platforms/proc_rtas.c 2003-09-08 12:50:44.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/proc_rtas.c 2003-09-25 19:15:50.000000000 -0700 @@ -93,7 +93,7 @@ /* Tokens for indicators */ #define TONE_FREQUENCY 0x0001 /* 0 - 1000 (HZ)*/ #define TONE_VOLUME 0x0002 /* 0 - 100 (%) */ -#define SYSTEM_POWER_STATE 0x0003 +#define SYSTEM_POWER_STATE 0x0003 #define WARNING_LIGHT 0x0004 #define DISK_ACTIVITY_LIGHT 0x0005 #define HEX_DISPLAY_UNIT 0x0006 @@ -107,7 +107,7 @@ /* 9006 - 9999: Vendor specific */ /* other */ -#define MAX_SENSORS 17 /* I only know of 17 sensors */ +#define MAX_SENSORS 17 /* I only know of 17 sensors */ #define MAX_LINELENGTH 256 #define SENSOR_PREFIX "ibm,sensor-" #define cel_to_fahr(x) ((x*9/5)+32) @@ -138,9 +138,9 @@ struct rtas_sensors { /* Declarations */ static int ppc_rtas_sensor_read(char * buf, char ** start, off_t off, int count, int *eof, void *data); -static ssize_t ppc_rtas_clock_read(struct file * file, char * buf, +static ssize_t ppc_rtas_clock_read(struct file * file, char * buf, size_t count, loff_t *ppos); -static ssize_t ppc_rtas_clock_write(struct file * file, const char * buf, +static ssize_t ppc_rtas_clock_write(struct file * file, const char * buf, size_t count, loff_t *ppos); static ssize_t ppc_rtas_progress_read(struct file * file, char * buf, size_t count, loff_t *ppos); @@ -184,7 +184,7 @@ struct file_operations ppc_rtas_tone_vol }; int ppc_rtas_find_all_sensors (void); -int ppc_rtas_process_sensor(struct individual_sensor s, int state, +int ppc_rtas_process_sensor(struct individual_sensor s, int state, int error, char * buf); char * ppc_rtas_process_error(int error); int get_location_code(struct individual_sensor s, char * buf); @@ -202,7 +202,7 @@ void proc_rtas_init(void) if ((rtas == 0) || (_machine != _MACH_chrp)) { return; } - + proc_rtas = proc_mkdir("rtas", 0); if (proc_rtas == 0) return; @@ -212,19 +212,19 @@ void proc_rtas_init(void) entry = create_proc_entry("progress", S_IRUGO|S_IWUSR, proc_rtas); if (entry) entry->proc_fops = &ppc_rtas_progress_operations; - entry = create_proc_entry("clock", S_IRUGO|S_IWUSR, proc_rtas); + entry = create_proc_entry("clock", S_IRUGO|S_IWUSR, proc_rtas); if (entry) entry->proc_fops = &ppc_rtas_clock_operations; - entry = create_proc_entry("poweron", S_IWUSR|S_IRUGO, proc_rtas); + entry = create_proc_entry("poweron", S_IWUSR|S_IRUGO, proc_rtas); if (entry) entry->proc_fops = &ppc_rtas_poweron_operations; - create_proc_read_entry("sensors", S_IRUGO, proc_rtas, + create_proc_read_entry("sensors", S_IRUGO, proc_rtas, ppc_rtas_sensor_read, NULL); - - entry = create_proc_entry("frequency", S_IWUSR|S_IRUGO, proc_rtas); + + entry = create_proc_entry("frequency", S_IWUSR|S_IRUGO, proc_rtas); if (entry) entry->proc_fops = &ppc_rtas_tone_freq_operations; - entry = create_proc_entry("volume", S_IWUSR|S_IRUGO, proc_rtas); + entry = create_proc_entry("volume", S_IWUSR|S_IRUGO, proc_rtas); if (entry) entry->proc_fops = &ppc_rtas_tone_volume_operations; } @@ -248,11 +248,11 @@ static ssize_t ppc_rtas_poweron_write(st to_tm(nowtime, &tm); - error = call_rtas("set-time-for-power-on", 7, 1, NULL, - tm.tm_year, tm.tm_mon, tm.tm_mday, + error = call_rtas("set-time-for-power-on", 7, 1, NULL, + tm.tm_year, tm.tm_mon, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec, 0 /* nano */); if (error != 0) - printk(KERN_WARNING "error: setting poweron time returned: %s\n", + printk(KERN_WARNING "error: setting poweron time returned: %s\n", ppc_rtas_process_error(error)); return count; } @@ -287,7 +287,7 @@ static ssize_t ppc_rtas_progress_write(s strcpy(progress_led, buf); /* save the string */ /* Lets see if the user passed hexdigits */ hex = simple_strtoul(buf, NULL, 10); - + ppc_md.progress ((char *)buf, hex); return count; @@ -313,7 +313,7 @@ static ssize_t ppc_rtas_progress_read(st /* ****************************************************************** */ /* CLOCK */ /* ****************************************************************** */ -static ssize_t ppc_rtas_clock_write(struct file * file, const char * buf, +static ssize_t ppc_rtas_clock_write(struct file * file, const char * buf, size_t count, loff_t *ppos) { struct rtc_time tm; @@ -328,16 +328,16 @@ static ssize_t ppc_rtas_clock_write(stru } to_tm(nowtime, &tm); - error = call_rtas("set-time-of-day", 7, 1, NULL, - tm.tm_year, tm.tm_mon, tm.tm_mday, + error = call_rtas("set-time-of-day", 7, 1, NULL, + tm.tm_year, tm.tm_mon, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec, 0); if (error != 0) - printk(KERN_WARNING "error: setting the clock returned: %s\n", + printk(KERN_WARNING "error: setting the clock returned: %s\n", ppc_rtas_process_error(error)); return count; } /* ****************************************************************** */ -static ssize_t ppc_rtas_clock_read(struct file * file, char * buf, +static ssize_t ppc_rtas_clock_read(struct file * file, char * buf, size_t count, loff_t *ppos) { unsigned int year, mon, day, hour, min, sec; @@ -345,15 +345,15 @@ static ssize_t ppc_rtas_clock_read(struc int n, error; error = call_rtas("get-time-of-day", 0, 8, ret); - + year = ret[0]; mon = ret[1]; day = ret[2]; hour = ret[3]; min = ret[4]; sec = ret[5]; if (error != 0){ - printk(KERN_WARNING "error: reading the clock returned: %s\n", + printk(KERN_WARNING "error: reading the clock returned: %s\n", ppc_rtas_process_error(error)); n = sprintf (buf, "0"); - } else { + } else { n = sprintf (buf, "%lu\n", mktime(year, mon, day, hour, min, sec)); } kfree(ret); @@ -395,7 +395,7 @@ static int ppc_rtas_sensor_read(char * b j = sensors.sensor[i].quant; /* A sensor may have multiple instances */ while (j >= 0) { - error = call_rtas("get-sensor-state", 2, 2, &ret, + error = call_rtas("get-sensor-state", 2, 2, &ret, sensors.sensor[i].token, sensors.sensor[i].quant-j); state = (int) ret; n += ppc_rtas_process_sensor(sensors.sensor[i], state, error, buffer+n ); @@ -479,8 +479,8 @@ char * ppc_rtas_process_error(int error) * Builds a string out of what the sensor said */ -int ppc_rtas_process_sensor(struct individual_sensor s, int state, - int error, char * buf) +int ppc_rtas_process_sensor(struct individual_sensor s, int state, + int error, char * buf) { /* Defined return vales */ const char * key_switch[] = { "Off\t", "Normal\t", "Secure\t", "Mainenance" }; @@ -488,7 +488,7 @@ int ppc_rtas_process_sensor(struct indiv const char * lid_status[] = { " ", "Open", "Closed" }; const char * power_source[] = { "AC\t", "Battery", "AC & Battery" }; const char * battery_remaining[] = { "Very Low", "Low", "Mid", "High" }; - const char * epow_sensor[] = { + const char * epow_sensor[] = { "EPOW Reset", "Cooling warning", "Power warning", "System shutdown", "System halt", "EPOW main enclosure", "EPOW power off" }; @@ -632,8 +632,8 @@ int check_location (char *c, int idx, ch /* ****************************************************************** */ -/* - * Format: +/* + * Format: * ${LETTER}${NUMBER}[[-/]${LETTER}${NUMBER} [ ... ] ] * the '.' may be an abbrevation */ @@ -670,7 +670,7 @@ int get_location_code(struct individual_ len = strlen(tmp); while (strlen(tmp) < 4) n += sprintf (tmp+n, "0"); - + /* invert the string */ while (tmp[i]) { if (i 100) volume = 100; - + rtas_tone_volume = volume; /* save it for later */ error = call_rtas("set-indicator", 3, 1, NULL, TONE_VOLUME, 0, volume); if (error != 0) - printk(KERN_WARNING "error: setting tone volume returned: %s\n", + printk(KERN_WARNING "error: setting tone volume returned: %s\n", ppc_rtas_process_error(error)); return count; } diff -prauN linux-2.6.0-test5/arch/ppc/platforms/prpmc750.h wli-2.6.0-test5-bk12-25/arch/ppc/platforms/prpmc750.h --- linux-2.6.0-test5/arch/ppc/platforms/prpmc750.h 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/prpmc750.h 2003-09-25 19:15:50.000000000 -0700 @@ -1,6 +1,6 @@ /* * include/asm-ppc/platforms/prpmc750.h - * + * * Definitions for Motorola PrPMC750 board support * * Author: Matt Porter diff -prauN linux-2.6.0-test5/arch/ppc/platforms/prpmc750_pci.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/prpmc750_pci.c --- linux-2.6.0-test5/arch/ppc/platforms/prpmc750_pci.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/prpmc750_pci.c 2003-09-25 19:15:50.000000000 -0700 @@ -1,6 +1,6 @@ /* * arch/ppc/platforms/prpmc750_pci.c - * + * * PCI support for Motorola PrPMC750 * * Author: Matt Porter @@ -35,7 +35,7 @@ prpmc_map_irq(struct pci_dev *dev, unsig /* * PCI IDSEL/INTPIN->INTLINE * A B C D - */ + */ { {12, 0, 0, 0}, /* IDSEL 14 - Ethernet, base */ {0, 0, 0, 0}, /* IDSEL 15 - unused */ @@ -114,7 +114,7 @@ prpmc750_find_bridges(void) hose->mem_space.end = PRPMC750_PCI_UPPER_MEM_AUTO; hose->io_base_virt = (void *)PRPMC750_ISA_IO_BASE; - + setup_indirect_pci(hose, PRPMC750_PCI_CONFIG_ADDR, PRPMC750_PCI_CONFIG_DATA); diff -prauN linux-2.6.0-test5/arch/ppc/platforms/prpmc750_serial.h wli-2.6.0-test5-bk12-25/arch/ppc/platforms/prpmc750_serial.h --- linux-2.6.0-test5/arch/ppc/platforms/prpmc750_serial.h 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/prpmc750_serial.h 2003-09-25 19:15:50.000000000 -0700 @@ -1,6 +1,6 @@ /* * include/asm-ppc/platforms/prpmc750_serial.h - * + * * Motorola PrPMC750 serial support * * Author: Matt Porter diff -prauN linux-2.6.0-test5/arch/ppc/platforms/prpmc800.h wli-2.6.0-test5-bk12-25/arch/ppc/platforms/prpmc800.h --- linux-2.6.0-test5/arch/ppc/platforms/prpmc800.h 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/prpmc800.h 2003-09-25 19:15:50.000000000 -0700 @@ -1,6 +1,6 @@ /* * include/asm-ppc/platforms/prpmc800.h - * + * * Definitions for Motorola PrPMC800 board support * * Author: Dale Farnsworth diff -prauN linux-2.6.0-test5/arch/ppc/platforms/prpmc800_pci.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/prpmc800_pci.c --- linux-2.6.0-test5/arch/ppc/platforms/prpmc800_pci.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/prpmc800_pci.c 2003-09-25 19:15:50.000000000 -0700 @@ -1,6 +1,6 @@ /* * arch/ppc/platforms/prpmc800_pci.c - * + * * PCI support for Motorola PrPMC800 * * Author: Dale Farnsworth @@ -36,7 +36,7 @@ prpmc_map_irq(struct pci_dev *dev, unsig /* * PCI IDSEL/INTPIN->INTLINE * A B C D - */ + */ { {12, 0, 0, 0}, /* IDSEL 14 - Ethernet, base */ {0, 0, 0, 0}, /* IDSEL 15 - unused */ diff -prauN linux-2.6.0-test5/arch/ppc/platforms/prpmc800_serial.h wli-2.6.0-test5-bk12-25/arch/ppc/platforms/prpmc800_serial.h --- linux-2.6.0-test5/arch/ppc/platforms/prpmc800_serial.h 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/prpmc800_serial.h 2003-09-25 19:15:50.000000000 -0700 @@ -1,6 +1,6 @@ /* * arch/ppc/platforms/prpmc800_serial.h - * + * * Definitions for Motorola MCG PRPMC800 cPCI board support * * Author: Dale Farnsworth dale.farnsworth@mvista.com diff -prauN linux-2.6.0-test5/arch/ppc/platforms/residual.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/residual.c --- linux-2.6.0-test5/arch/ppc/platforms/residual.c 2003-09-08 12:49:56.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/residual.c 2003-09-25 19:15:51.000000000 -0700 @@ -141,15 +141,15 @@ unsigned char * PnP_INTERFACES[] __initd "\001\002\006CHRP_Floppy", /* CHRP Floppy in PR*P system */ "\001\003\000GeneralIPI", - + "\002\000\000GeneralEther", "\002\001\000GeneralToken", "\002\002\000GeneralFDDI", - + "\003\000\000GeneralVGA", "\003\001\000GeneralSVGA", "\003\002\000GeneralXGA", - + "\004\000\000GeneralVideo", "\004\001\000GeneralAudio", "\004\001\001CS4232Audio", /* CS 4232 Plug 'n Play Configured */ @@ -159,7 +159,7 @@ unsigned char * PnP_INTERFACES[] __initd "\005\000\000PCIMemoryController", /* PCI Config Method */ "\005\000\001RS6KMemoryController", /* RS6K Config Method */ "\005\001\000GeneralFLASH", - + "\006\000\000GeneralHostBridge", "\006\001\000GeneralISABridge", "\006\002\000GeneralEISABridge", @@ -170,7 +170,7 @@ unsigned char * PnP_INTERFACES[] __initd "\006\004\002PCIBridgeRS6K", "\006\005\000GeneralPCMCIABridge", "\006\006\000GeneralVMEBridge", - + "\007\000\000GeneralRS232", "\007\000\001COMx", "\007\000\002Compatible16450", @@ -190,7 +190,7 @@ unsigned char * PnP_INTERFACES[] __initd "\007\001\003NS26EParPort", /* Ports 26E and 26F */ "\007\001\004NS15CParPort", /* Ports 15C and 15D */ "\007\001\005NS2EParPort", /* Ports 2E and 2F */ - + "\010\000\000GeneralPIC", "\010\000\001ISA_PIC", "\010\000\002EISA_PIC", @@ -206,7 +206,7 @@ unsigned char * PnP_INTERFACES[] __initd "\010\002\002EISA_Timer", "\010\003\000GeneralRTC", "\010\003\001ISA_RTC", - + "\010\004\001StoreThruOnly", "\010\004\002StoreInEnabled", "\010\004\003RS6KL2Cache", @@ -218,7 +218,7 @@ unsigned char * PnP_INTERFACES[] __initd "\010\006\000GeneralPowerManagement", "\010\006\001EPOWPowerManagement", "\010\006\002PowerControl", // d1378 - + "\010\007\000GeneralCMOS", "\010\010\000GeneralOPPanel", @@ -233,30 +233,30 @@ unsigned char * PnP_INTERFACES[] __initd "\010\011\000GeneralServiceProcessor", "\010\012\000GeneralServiceProcessor", "\010\013\000GeneralServiceProcessor", - + "\010\014\001TransferData", "\010\014\002IGMC32", "\010\014\003IGMC64", - + "\010\017\000GeneralSystemPlanar", /* 10/5/95 */ NULL }; -static const unsigned char __init *PnP_SUB_TYPE_STR(unsigned char BaseType, +static const unsigned char __init *PnP_SUB_TYPE_STR(unsigned char BaseType, unsigned char SubType) { unsigned char ** s=PnP_SUB_TYPES; - while (*s && !((*s)[0]==BaseType + while (*s && !((*s)[0]==BaseType && (*s)[1]==SubType)) s++; if (*s) return *s+2; else return("Unknown !"); }; -static const unsigned char __init *PnP_INTERFACE_STR(unsigned char BaseType, +static const unsigned char __init *PnP_INTERFACE_STR(unsigned char BaseType, unsigned char SubType, unsigned char Interface) { unsigned char ** s=PnP_INTERFACES; - while (*s && !((*s)[0]==BaseType - && (*s)[1]==SubType + while (*s && !((*s)[0]==BaseType + && (*s)[1]==SubType && (*s)[2]==Interface)) s++; if (*s) return *s+3; else return NULL; @@ -293,7 +293,7 @@ static void __init printsmallpacket(PnP_ switch (tag_small_item_name(pkt->S1_Pack.Tag)) { case PnPVersion: - printk(" PnPversion 0x%x.%x\n", + printk(" PnPversion 0x%x.%x\n", pkt->S1_Pack.Version[0], /* How to interpret version ? */ pkt->S1_Pack.Version[1]); break; @@ -303,7 +303,7 @@ static void __init printsmallpacket(PnP_ break; case IRQFormat: #define p pkt->S4_Pack - printk(" IRQ Mask 0x%4.4x, %s %s sensitive\n", + printk(" IRQ Mask 0x%4.4x, %s %s sensitive\n", ld_le16((unsigned short *)p.IRQMask), intlevel[(size>3) ? !(p.IRQInfo&0x05) : 0], intsense[(size>3) ? !(p.IRQInfo&0x03) : 0]); @@ -328,7 +328,7 @@ static void __init printsmallpacket(PnP_ p.IOInfo&ISAAddr16bit?16:10, ld_le16((unsigned short *)p.RangeMin), ld_le16((unsigned short *)p.RangeMax), - p.IOAlign, p.IONum); + p.IOAlign, p.IONum); #undef p break; case FixedIOPort: @@ -336,20 +336,20 @@ static void __init printsmallpacket(PnP_ printk(" Fixed (10 decoded bits) I/O port from %3.3x to %3.3x\n", (p.Range[1]<<8)|p.Range[0], ((p.Range[1]<<8)|p.Range[0])+p.IONum-1); -#undef p +#undef p break; case Res1: case Res2: case Res3: - printk(" Undefined packet type %d!\n", + printk(" Undefined packet type %d!\n", tag_small_item_name(pkt->S1_Pack.Tag)); break; case SmallVendorItem: printsmallvendor(pkt,size); break; default: - printk(" Type 0x2.2x%d, size=%d\n", - pkt->S1_Pack.Tag, size); + printk(" Type 0x2.2x%d, size=%d\n", + pkt->S1_Pack.Tag, size); break; } } @@ -431,7 +431,7 @@ static void __init printlargevendor(PnP_ break; case 7: printk(" SCSI buses: %d, id(s):", p.PPCData[0]); - for(i=1; i<=p.PPCData[0]; i++) + for(i=1; i<=p.PPCData[0]; i++) printk(" %d%c", p.PPCData[i], i==p.PPCData[0] ? '\n' : ','); break; case 9: @@ -447,11 +447,11 @@ static void __init printlargevendor(PnP_ p.PPCData[1]); printk(" ISA interrupts routed to %s\n" - " lines", + " lines", tmpstr); for(i=0; i<16; i++) { int line=ld_le16((unsigned short *)p.PPCData+i+1); - if (line!=0xffff) printk(" %d(IRQ%d)", line, i); + if (line!=0xffff) printk(" %d(IRQ%d)", line, i); } printk("\n"); break; @@ -470,8 +470,8 @@ static void __init printlargepacket(PnP_ printlargevendor(pkt, size); break; default: - printk(" Type 0x2.2x%d, size=%d\n", - pkt->S1_Pack.Tag, size); + printk(" Type 0x2.2x%d, size=%d\n", + pkt->S1_Pack.Tag, size); break; } } @@ -487,7 +487,7 @@ static void __init printpackets(PnP_TAG_ int size; if (tag_type(pkt->S1_Pack.Tag)) { size= 3 + - pkt->L1_Pack.Count0 + + pkt->L1_Pack.Count0 + pkt->L1_Pack.Count1*256; printlargepacket(pkt, size); } else { @@ -503,11 +503,11 @@ void __init print_residual_device_info(v int i; PPC_DEVICE *dev; #define did dev->DeviceId - + /* make sure we have residual data first */ if ( res->ResidualLength == 0 ) return; - + printk("Residual: %ld devices\n", res->ActualNumDevices); for ( i = 0; i < res->ActualNumDevices ; @@ -516,23 +516,23 @@ void __init print_residual_device_info(v char decomp[4], sn[20]; const char * s; dev = &res->Devices[i]; - s = PnP_INTERFACE_STR(did.BaseType, did.SubType, + s = PnP_INTERFACE_STR(did.BaseType, did.SubType, did.Interface); if(!s) { sprintf(sn, "interface %d", did.Interface); s=sn; } - if ( did.BusId & PCIDEVICE ) + if ( did.BusId & PCIDEVICE ) printk("PCI Device, Bus %d, DevFunc 0x%x:", dev->BusAccess.PCIAccess.BusNumber, dev->BusAccess.PCIAccess.DevFuncNumber); if ( did.BusId & PNPISADEVICE ) printk("PNPISA Device:"); - if ( did.BusId & ISADEVICE ) + if ( did.BusId & ISADEVICE ) printk("ISA Device, Slot %d, LogicalDev %d:", dev->BusAccess.ISAAccess.SlotNumber, dev->BusAccess.ISAAccess.LogicalDevNumber); if ( did.BusId & EISADEVICE ) printk("EISA Device:"); - if ( did.BusId & PROCESSORDEVICE ) + if ( did.BusId & PROCESSORDEVICE ) printk("ProcBus Device, Bus %d, BUID %d: ", dev->BusAccess.ProcBusAccess.BusNumber, dev->BusAccess.ProcBusAccess.BUID); @@ -545,7 +545,7 @@ void __init print_residual_device_info(v decomp[1]='A'-1+((did.DevId>>21)&0x1F); decomp[2]='A'-1+((did.DevId>>16)&0x1F); decomp[3]=0; - printk(" %s%4.4lX, %s, %s, %s\n", + printk(" %s%4.4lX, %s, %s, %s\n", decomp, did.DevId&0xffff, PnP_BASE_TYPES[did.BaseType], PnP_SUB_TYPE_STR(did.BaseType,did.SubType), @@ -573,15 +573,15 @@ static void __init printVPD(void) { static const char* Usage[]={ "FirmwareStack", "FirmwareHeap", "FirmwareCode", "BootImage", "Free", "Unpopulated", "ISAAddr", "PCIConfig", - "IOMemory", "SystemIO", "SystemRegs", "PCIAddr", - "UnPopSystemRom", "SystemROM", "ResumeBlock", "Other" + "IOMemory", "SystemIO", "SystemRegs", "PCIAddr", + "UnPopSystemRom", "SystemROM", "ResumeBlock", "Other" }; static const unsigned char *FWMan[]={ "IBM", "Motorola", "FirmWorks", "Bull" }; static const unsigned char *FWFlags[]={ "Conventional", "OpenFirmware", "Diagnostics", "LowDebug", - "MultiBoot", "LowClient", "Hex41", "FAT", + "MultiBoot", "LowClient", "Hex41", "FAT", "ISO9660", "SCSI_ID_Override", "Tape_Boot", "FW_Boot_Path" }; static const unsigned char *ESM[]={ @@ -597,15 +597,15 @@ static void __init printVPD(void) { printk("FirmwareFlags:"); for(j=0; j<12; j++) { if (vpd.FirmwareSupports & (1<2 ? 2 : vpd.EndianSwitchMethod]); - printk("SpreadIOMethod: %s\n", + printk("SpreadIOMethod: %s\n", SIOM[vpd.SpreadIOMethod>3 ? 3 : vpd.SpreadIOMethod]); printk("Processor/Bus frequencies (Hz): %ld/%ld\n", vpd.ProcessorHz, vpd.ProcessorBusHz); @@ -615,7 +615,7 @@ static void __init printVPD(void) { vpd.CoherenceBlockSize, vpd.GranuleSize); for (i=0; iActualNumMemSegs; i++) { int mask=res->Segs[i].Usage, first, j; - printk("%8.8lx-%8.8lx ", + printk("%8.8lx-%8.8lx ", res->Segs[i].BasePage*ps, (res->Segs[i].PageCount+res->Segs[i].BasePage)*ps-1); for(j=15, first=1; j>=0; j--) { @@ -638,7 +638,7 @@ void print_residual_device_info(void) union _PnP_TAG_PACKET *pkt; PPC_DEVICE *dev; #define did dev->DeviceId - + /* make sure we have residual data first */ if ( res->ResidualLength == 0 ) return; @@ -665,7 +665,7 @@ void print_residual_device_info(void) pci_strdev(did.DevId>>16, did.DevId&0xffff) ); - + if ( did.BusId & PNPISADEVICE ) { printk(" pnp:"); @@ -694,7 +694,7 @@ void print_residual_device_info(void) did.BaseType, did.SubType); printk("\n"); continue; - } + } /* * eisa devices */ @@ -704,7 +704,7 @@ void print_residual_device_info(void) did.BaseType, did.SubType); printk("\n"); continue; - } + } /* * proc bus devices */ @@ -724,26 +724,26 @@ void print_residual_device_info(void) did.BaseType, did.SubType); printk("\n"); continue; - } + } printk("Unknown bus access device: busid %lx\n", did.BusId); } } -#endif +#endif -/* Returns the device index in the residual data, +/* Returns the device index in the residual data, any of the search items may be set as -1 for wildcard, - DevID number field (second halfword) is big endian ! + DevID number field (second halfword) is big endian ! Examples: - search for the Interrupt controller (8259 type), 2 methods: - 1) i8259 = residual_find_device(~0, - NULL, - SystemPeripheral, - ProgrammableInterruptController, - ISA_PIC, + 1) i8259 = residual_find_device(~0, + NULL, + SystemPeripheral, + ProgrammableInterruptController, + ISA_PIC, 0); - 2) i8259 = residual_find_device(~0, "PNP0000", -1, -1, -1, 0) + 2) i8259 = residual_find_device(~0, "PNP0000", -1, -1, -1, 0) - search for the first two serial devices, whatever their type) iserial1 = residual_find_device(~0,NULL, @@ -755,8 +755,8 @@ void print_residual_device_info(void) RS232Device, -1, 1) - but search for typical COM1 and COM2 is not easy due to the - fact that the interface may be anything and the name "PNP0500" or - "PNP0501". Quite bad. + fact that the interface may be anything and the name "PNP0500" or + "PNP0501". Quite bad. */ @@ -769,7 +769,7 @@ two very similar functions */ static int __init same_DevID(unsigned short vendor, unsigned short Number, - char * str) + char * str) { static unsigned const char hexdigit[]="0123456789ABCDEF"; if (strlen(str)!=7) return 0; @@ -837,11 +837,11 @@ PnP_TAG_PACKET *PnP_find_packet(unsigned if (tag_type(packet_tag)) mask=0xff; else mask=0xF8; masked_tag = packet_tag&mask; for(; *p != END_TAG; p+=size) { - if ((*p & mask) == masked_tag && !(n--)) + if ((*p & mask) == masked_tag && !(n--)) return (PnP_TAG_PACKET *) p; if (tag_type(*p)) size=ld_le16((unsigned short *)(p+1))+3; - else + else size=tag_small_count(*p)+1; } return 0; /* not found */ @@ -854,7 +854,7 @@ PnP_TAG_PACKET __init *PnP_find_small_ve int next=0; while (p) { p = (unsigned char *) PnP_find_packet(p, 0x70, next); - if (p && p[1]==packet_type && !(n--)) + if (p && p[1]==packet_type && !(n--)) return (PnP_TAG_PACKET *) p; next = 1; }; @@ -868,7 +868,7 @@ PnP_TAG_PACKET __init *PnP_find_large_ve int next=0; while (p) { p = (unsigned char *) PnP_find_packet(p, 0x84, next); - if (p && p[3]==packet_type && !(n--)) + if (p && p[3]==packet_type && !(n--)) return (PnP_TAG_PACKET *) p; next = 1; }; diff -prauN linux-2.6.0-test5/arch/ppc/platforms/sandpoint.h wli-2.6.0-test5-bk12-25/arch/ppc/platforms/sandpoint.h --- linux-2.6.0-test5/arch/ppc/platforms/sandpoint.h 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/sandpoint.h 2003-09-25 19:15:51.000000000 -0700 @@ -1,6 +1,6 @@ /* * arch/ppc/platforms/sandpoint.h - * + * * Definitions for Motorola SPS Sandpoint Test Platform * * Author: Mark A. Greer diff -prauN linux-2.6.0-test5/arch/ppc/platforms/spd8xx.h wli-2.6.0-test5-bk12-25/arch/ppc/platforms/spd8xx.h --- linux-2.6.0-test5/arch/ppc/platforms/spd8xx.h 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/spd8xx.h 2003-09-25 19:15:51.000000000 -0700 @@ -1,6 +1,6 @@ /* * Speech Design SPD8xxTS board specific definitions - * + * * Copyright (c) 2000,2001 Wolfgang Denk (wd@denx.de) */ @@ -9,7 +9,7 @@ #define __ASM_SPD8XX_H__ #include - + #include #ifndef __ASSEMBLY__ diff -prauN linux-2.6.0-test5/arch/ppc/platforms/spruce.h wli-2.6.0-test5-bk12-25/arch/ppc/platforms/spruce.h --- linux-2.6.0-test5/arch/ppc/platforms/spruce.h 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/spruce.h 2003-09-25 19:15:51.000000000 -0700 @@ -1,6 +1,6 @@ /* * include/asm-ppc/platforms/spruce.h - * + * * Definitions for IBM Spruce reference board support * * Authors: Matt Porter and Johnnie Peters diff -prauN linux-2.6.0-test5/arch/ppc/platforms/spruce_pci.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/spruce_pci.c --- linux-2.6.0-test5/arch/ppc/platforms/spruce_pci.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/spruce_pci.c 2003-09-25 19:15:51.000000000 -0700 @@ -1,6 +1,6 @@ /* * arch/ppc/platforms/spruce_pci.c - * + * * PCI support for IBM Spruce * * Author: Johnnie Peters @@ -31,7 +31,7 @@ spruce_map_irq(struct pci_dev *dev, unsi { static char pci_irq_table[][4] = /* - * PCI IDSEL/INTPIN->INTLINE + * PCI IDSEL/INTPIN->INTLINE * A B C D */ { @@ -52,7 +52,7 @@ spruce_setup_hose(void) /* Setup hose */ hose = pcibios_alloc_controller(); - if (!hose) + if (!hose) return; hose->first_busno = 0; diff -prauN linux-2.6.0-test5/arch/ppc/platforms/spruce_serial.h wli-2.6.0-test5-bk12-25/arch/ppc/platforms/spruce_serial.h --- linux-2.6.0-test5/arch/ppc/platforms/spruce_serial.h 2003-09-08 12:50:32.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/spruce_serial.h 2003-09-25 19:15:51.000000000 -0700 @@ -1,6 +1,6 @@ /* * include/asm-ppc/spruce_serial.h - * + * * Definitions for IBM Spruce reference board support * * Authors: Matt Porter and Johnnie Peters diff -prauN linux-2.6.0-test5/arch/ppc/platforms/tqm8260.h wli-2.6.0-test5-bk12-25/arch/ppc/platforms/tqm8260.h --- linux-2.6.0-test5/arch/ppc/platforms/tqm8260.h 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/tqm8260.h 2003-09-25 19:15:51.000000000 -0700 @@ -1,6 +1,6 @@ /* * TQM8260 board specific definitions - * + * * Copyright (c) 2001 Wolfgang Denk (wd@denx.de) */ @@ -8,7 +8,7 @@ #define __TQM8260_PLATFORM #include - + #include #define IMAP_ADDR ((uint)0xFFF00000) diff -prauN linux-2.6.0-test5/arch/ppc/platforms/tqm8260_setup.c wli-2.6.0-test5-bk12-25/arch/ppc/platforms/tqm8260_setup.c --- linux-2.6.0-test5/arch/ppc/platforms/tqm8260_setup.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/tqm8260_setup.c 2003-09-25 19:15:51.000000000 -0700 @@ -1,6 +1,6 @@ /* * arch/ppc/platforms/tqm8260_setup.c - * + * * TQM8260 platform support * * Author: Allen Curtis @@ -25,7 +25,7 @@ static void (*callback_setup_arch)(void) extern unsigned char __res[sizeof(bd_t)]; -extern void m8260_init(unsigned long r3, unsigned long r4, +extern void m8260_init(unsigned long r3, unsigned long r4, unsigned long r5, unsigned long r6, unsigned long r7); static int diff -prauN linux-2.6.0-test5/arch/ppc/platforms/tqm8xx.h wli-2.6.0-test5-bk12-25/arch/ppc/platforms/tqm8xx.h --- linux-2.6.0-test5/arch/ppc/platforms/tqm8xx.h 2003-09-08 12:50:27.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/platforms/tqm8xx.h 2003-09-25 19:15:51.000000000 -0700 @@ -1,6 +1,6 @@ /* * TQM8xx(L) board specific definitions - * + * * Copyright (c) 1999-2002 Wolfgang Denk (wd@denx.de) */ @@ -9,7 +9,7 @@ #define __MACH_TQM8xx_H #include - + #include #ifndef __ASSEMBLY__ diff -prauN linux-2.6.0-test5/arch/ppc/syslib/btext.c wli-2.6.0-test5-bk12-25/arch/ppc/syslib/btext.c --- linux-2.6.0-test5/arch/ppc/syslib/btext.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/syslib/btext.c 2003-09-25 19:15:51.000000000 -0700 @@ -112,13 +112,13 @@ btext_welcome(void) /* Calc BAT values for mapping the display and store them * in disp_BAT. Those values are then used from head.S to map * the display during identify_machine() and MMU_Init() - * + * * The display is mapped to virtual address 0xD0000000, rather * than 1:1, because some some CHRP machines put the frame buffer * in the region starting at 0xC0000000 (KERNELBASE). * This mapping is temporary and will disappear as soon as the * setup done by MMU_Init() is applied. - * + * * For now, we align the BAT and then map 8Mb on 601 and 16Mb * on other PPCs. This may cause trouble if the framebuffer * is really badly aligned, but I didn't encounter this case @@ -142,7 +142,7 @@ btext_prepare_BAT(void) lowbits = addr & ~0xFF000000UL; addr &= 0xFF000000UL; disp_BAT[0] = vaddr | (BL_16M<<2) | 2; - disp_BAT[1] = addr | (_PAGE_NO_CACHE | _PAGE_GUARDED | BPP_RW); + disp_BAT[1] = addr | (_PAGE_NO_CACHE | _PAGE_GUARDED | BPP_RW); } else { /* 601 */ lowbits = addr & ~0xFF800000UL; @@ -178,9 +178,9 @@ btext_setup_display(int width, int heigh /* Here's a small text engine to use during early boot * or for debugging purposes - * + * * todo: - * + * * - build some kind of vgacon with it to enable early printk * - move to a separate file * - add a few video driver hooks to keep in sync with display @@ -262,7 +262,7 @@ void BTEXT btext_clearscreen(void) unsigned long width = ((bi->dispDeviceRect[2] - bi->dispDeviceRect[0]) * (bi->dispDeviceDepth >> 3)) >> 2; int i,j; - + for (i=0; i<(bi->dispDeviceRect[3] - bi->dispDeviceRect[1]); i++) { unsigned long *ptr = base; @@ -284,7 +284,7 @@ void BTEXT btext_flushscreen(void) unsigned long width = ((bi->dispDeviceRect[2] - bi->dispDeviceRect[0]) * (bi->dispDeviceDepth >> 3)) >> 2; int i,j; - + for (i=0; i<(bi->dispDeviceRect[3] - bi->dispDeviceRect[1]); i++) { unsigned long *ptr = base; @@ -306,7 +306,7 @@ scrollscreen(void) unsigned long width = ((bi->dispDeviceRect[2] - bi->dispDeviceRect[0]) * (bi->dispDeviceDepth >> 3)) >> 2; int i,j; - + #ifdef CONFIG_ADB_PMU pmu_suspend(); /* PMU will not shut us down ! */ #endif @@ -393,7 +393,7 @@ void BTEXT btext_drawhex(unsigned long v) { static char hex_table[] = "0123456789abcdef"; - + if (!boot_text_mapped) return; btext_drawchar(hex_table[(v >> 28) & 0x0000000FUL]); @@ -414,7 +414,7 @@ draw_byte(unsigned char c, long locX, lo unsigned char *base = calc_base(bi, locX << 3, locY << 4); unsigned char *font = &vga_font[((unsigned long)c) * 16]; int rb = bi->dispDeviceRowBytes; - + switch(bi->dispDeviceDepth) { case 24: case 32: @@ -460,10 +460,10 @@ static unsigned long expand_bits_16[4] B static void BTEXT draw_byte_32(unsigned char *font, unsigned long *base, int rb) { - int l, bits; + int l, bits; int fg = 0xFFFFFFFFUL; int bg = 0x00000000UL; - + for (l = 0; l < 16; ++l) { bits = *font++; @@ -482,7 +482,7 @@ draw_byte_32(unsigned char *font, unsign static void BTEXT draw_byte_16(unsigned char *font, unsigned long *base, int rb) { - int l, bits; + int l, bits; int fg = 0xFFFFFFFFUL; int bg = 0x00000000UL; unsigned long *eb = expand_bits_16; @@ -501,7 +501,7 @@ draw_byte_16(unsigned char *font, unsign static void BTEXT draw_byte_8(unsigned char *font, unsigned long *base, int rb) { - int l, bits; + int l, bits; int fg = 0x0F0F0F0FUL; int bg = 0x00000000UL; unsigned long *eb = expand_bits_8; @@ -516,346 +516,346 @@ draw_byte_8(unsigned char *font, unsigne } static unsigned char vga_font[cmapsz] BTDATA = { -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x81, 0xa5, 0x81, 0x81, 0xbd, -0x99, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xff, -0xdb, 0xff, 0xff, 0xc3, 0xe7, 0xff, 0xff, 0x7e, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x6c, 0xfe, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7c, 0xfe, -0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, -0x3c, 0x3c, 0xe7, 0xe7, 0xe7, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x18, 0x18, 0x3c, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, -0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, -0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, -0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00, -0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0x99, 0xbd, -0xbd, 0x99, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x1e, 0x0e, -0x1a, 0x32, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x18, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x33, 0x3f, 0x30, 0x30, 0x30, -0x30, 0x70, 0xf0, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x63, -0x7f, 0x63, 0x63, 0x63, 0x63, 0x67, 0xe7, 0xe6, 0xc0, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x18, 0x18, 0xdb, 0x3c, 0xe7, 0x3c, 0xdb, 0x18, 0x18, -0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfe, 0xf8, -0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x0e, -0x1e, 0x3e, 0xfe, 0x3e, 0x1e, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, -0x66, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xdb, -0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x00, 0x00, 0x00, 0x00, -0x00, 0x7c, 0xc6, 0x60, 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x38, 0x0c, 0xc6, -0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, -0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, -0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, -0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x24, 0x66, 0xff, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x7c, 0x7c, 0xfe, 0xfe, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x7c, 0x7c, -0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, -0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x24, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, -0x6c, 0xfe, 0x6c, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, -0x18, 0x18, 0x7c, 0xc6, 0xc2, 0xc0, 0x7c, 0x06, 0x06, 0x86, 0xc6, 0x7c, -0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0xc6, 0x0c, 0x18, -0x30, 0x60, 0xc6, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, -0x6c, 0x38, 0x76, 0xdc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, -0x00, 0x30, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, -0x30, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x18, -0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, -0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x02, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xce, 0xde, 0xf6, 0xe6, 0xc6, 0xc6, 0x7c, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18, -0x18, 0x18, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, -0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0x3c, 0x06, 0x06, 0x06, 0xc6, 0x7c, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x1c, 0x3c, 0x6c, 0xcc, 0xfe, -0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0, -0xc0, 0xc0, 0xfc, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x38, 0x60, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc6, 0x06, 0x06, 0x0c, 0x18, -0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, -0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06, 0x0c, 0x78, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, -0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x06, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, -0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, -0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x0c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xde, 0xde, -0xde, 0xdc, 0xc0, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, -0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x66, 0x66, 0xfc, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, -0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x6c, -0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xfe, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, -0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, -0xc2, 0xc0, 0xc0, 0xde, 0xc6, 0xc6, 0x66, 0x3a, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, -0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x0c, -0x0c, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0x66, 0xe6, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, -0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xe7, -0xff, 0xff, 0xdb, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0xc6, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, -0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x66, -0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xde, 0x7c, -0x0c, 0x0e, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, -0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, -0xc6, 0x60, 0x38, 0x0c, 0x06, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0xff, 0xdb, 0x99, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, -0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3, -0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xdb, 0xdb, 0xff, 0x66, 0x66, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x18, -0x3c, 0x66, 0xc3, 0xc3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3, -0xc3, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0xff, 0xc3, 0x86, 0x0c, 0x18, 0x30, 0x60, 0xc1, 0xc3, 0xff, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, -0x30, 0x30, 0x30, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, -0xc0, 0xe0, 0x70, 0x38, 0x1c, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, -0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, -0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0c, 0x7c, -0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x60, -0x60, 0x78, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, -0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0x60, 0xf0, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, -0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00, 0x00, 0x00, 0xe0, 0x60, -0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x0e, 0x06, 0x06, -0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0xe0, 0x60, -0x60, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0xff, 0xdb, -0xdb, 0xdb, 0xdb, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, -0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x0c, 0x1e, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0xf0, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x60, -0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x30, -0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3, 0xc3, -0xc3, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0xc3, 0xc3, 0xc3, 0xdb, 0xdb, 0xff, 0x66, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0xc3, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, -0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0xfe, 0xcc, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x0e, 0x18, 0x18, 0x18, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, -0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x18, -0x18, 0x18, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, -0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, -0xc2, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x0c, 0x06, 0x7c, 0x00, 0x00, -0x00, 0x00, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, -0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, 0x00, 0x7c, 0xc6, 0xfe, -0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, -0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0xcc, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, -0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x00, 0x78, 0x0c, 0x7c, -0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x38, -0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x60, 0x60, 0x66, 0x3c, 0x0c, 0x06, -0x3c, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xfe, -0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00, -0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, -0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x38, 0x18, 0x18, -0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, 0x66, -0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, -0x00, 0x60, 0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, -0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, -0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x38, 0x00, -0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, -0x18, 0x30, 0x60, 0x00, 0xfe, 0x66, 0x60, 0x7c, 0x60, 0x60, 0x66, 0xfe, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x3b, 0x1b, -0x7e, 0xd8, 0xdc, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x6c, -0xcc, 0xcc, 0xfe, 0xcc, 0xcc, 0xcc, 0xcc, 0xce, 0x00, 0x00, 0x00, 0x00, -0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, 0x7c, 0xc6, 0xc6, -0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x30, 0x18, -0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, -0x00, 0x30, 0x78, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, -0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x00, 0xcc, 0xcc, 0xcc, -0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00, -0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0x78, 0x00, -0x00, 0xc6, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, -0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, -0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, -0xc3, 0xc0, 0xc0, 0xc0, 0xc3, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, -0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0x60, 0xe6, 0xfc, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x66, 0x3c, 0x18, 0xff, 0x18, -0xff, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x66, 0x66, -0x7c, 0x62, 0x66, 0x6f, 0x66, 0x66, 0x66, 0xf3, 0x00, 0x00, 0x00, 0x00, -0x00, 0x0e, 0x1b, 0x18, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, -0xd8, 0x70, 0x00, 0x00, 0x00, 0x18, 0x30, 0x60, 0x00, 0x78, 0x0c, 0x7c, -0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, -0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, -0x00, 0x18, 0x30, 0x60, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, -0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x60, 0x00, 0xcc, 0xcc, 0xcc, -0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, -0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, -0x76, 0xdc, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, -0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x6c, -0x38, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x60, 0xc0, 0xc6, 0xc6, 0x7c, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0, -0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0xfe, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0xc0, 0xc0, 0xc2, 0xc6, 0xcc, 0x18, 0x30, 0x60, 0xce, 0x9b, 0x06, -0x0c, 0x1f, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc2, 0xc6, 0xcc, 0x18, 0x30, -0x66, 0xce, 0x96, 0x3e, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, -0x00, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6c, 0xd8, 0x6c, 0x36, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x6c, 0x36, -0x6c, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x44, 0x11, 0x44, -0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, -0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, -0x55, 0xaa, 0x55, 0xaa, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, -0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0x18, 0x18, 0x18, 0x18, -0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, -0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, -0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, -0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x36, 0x36, 0x36, 0x36, -0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36, 0x36, -0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0xf8, -0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x36, 0x36, 0x36, 0x36, -0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, -0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, -0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0xf6, -0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, -0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, -0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, -0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, -0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, -0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, -0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, -0x18, 0x18, 0x18, 0x18, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, -0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, -0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, -0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xff, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, -0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, -0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x36, 0x36, 0x36, -0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, -0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36, 0x36, -0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x3f, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, -0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, -0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, -0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, -0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, -0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, -0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, -0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, -0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, -0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, -0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, -0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, -0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x76, 0xdc, 0xd8, 0xd8, 0xd8, 0xdc, 0x76, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x78, 0xcc, 0xcc, 0xcc, 0xd8, 0xcc, 0xc6, 0xc6, 0xc6, 0xcc, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc6, 0xc6, 0xc0, 0xc0, 0xc0, -0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xfe, 0xc6, 0x60, 0x30, 0x18, 0x30, 0x60, 0xc6, 0xfe, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xd8, 0xd8, -0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xc0, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x18, 0x3c, 0x66, 0x66, -0x66, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, -0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0x6c, 0x6c, 0x6c, 0x6c, 0xee, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x30, 0x18, 0x0c, 0x3e, 0x66, -0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x7e, 0xdb, 0xdb, 0xdb, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x03, 0x06, 0x7e, 0xdb, 0xdb, 0xf3, 0x7e, 0x60, 0xc0, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x30, 0x60, 0x60, 0x7c, 0x60, -0x60, 0x60, 0x30, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, -0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, -0x18, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, -0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x00, 0x7e, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x1b, 0x1b, 0x1b, 0x18, 0x18, -0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, -0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x7e, 0x00, 0x18, 0x18, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00, -0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x6c, -0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0c, 0x0c, -0x0c, 0x0c, 0x0c, 0xec, 0x6c, 0x6c, 0x3c, 0x1c, 0x00, 0x00, 0x00, 0x00, -0x00, 0xd8, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xd8, 0x30, 0x60, 0xc8, 0xf8, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x81, 0xa5, 0x81, 0x81, 0xbd, +0x99, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xff, +0xdb, 0xff, 0xff, 0xc3, 0xe7, 0xff, 0xff, 0x7e, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x6c, 0xfe, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7c, 0xfe, +0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, +0x3c, 0x3c, 0xe7, 0xe7, 0xe7, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x18, 0x18, 0x3c, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, +0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00, +0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0x99, 0xbd, +0xbd, 0x99, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x1e, 0x0e, +0x1a, 0x32, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x18, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x33, 0x3f, 0x30, 0x30, 0x30, +0x30, 0x70, 0xf0, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x63, +0x7f, 0x63, 0x63, 0x63, 0x63, 0x67, 0xe7, 0xe6, 0xc0, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x18, 0x18, 0xdb, 0x3c, 0xe7, 0x3c, 0xdb, 0x18, 0x18, +0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfe, 0xf8, +0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x0e, +0x1e, 0x3e, 0xfe, 0x3e, 0x1e, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, +0x66, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xdb, +0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x00, 0x00, 0x00, 0x00, +0x00, 0x7c, 0xc6, 0x60, 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x38, 0x0c, 0xc6, +0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, +0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, +0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, +0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x24, 0x66, 0xff, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x7c, 0x7c, 0xfe, 0xfe, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x7c, 0x7c, +0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, +0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x24, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, +0x6c, 0xfe, 0x6c, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, +0x18, 0x18, 0x7c, 0xc6, 0xc2, 0xc0, 0x7c, 0x06, 0x06, 0x86, 0xc6, 0x7c, +0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0xc6, 0x0c, 0x18, +0x30, 0x60, 0xc6, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, +0x6c, 0x38, 0x76, 0xdc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, +0x00, 0x30, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, +0x30, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x18, +0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, +0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x02, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xce, 0xde, 0xf6, 0xe6, 0xc6, 0xc6, 0x7c, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18, +0x18, 0x18, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, +0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0x3c, 0x06, 0x06, 0x06, 0xc6, 0x7c, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x1c, 0x3c, 0x6c, 0xcc, 0xfe, +0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0, +0xc0, 0xc0, 0xfc, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x38, 0x60, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc6, 0x06, 0x06, 0x0c, 0x18, +0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, +0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06, 0x0c, 0x78, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, +0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x06, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, +0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, +0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x0c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xde, 0xde, +0xde, 0xdc, 0xc0, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, +0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x66, 0x66, 0xfc, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, +0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x6c, +0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xfe, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, +0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, +0xc2, 0xc0, 0xc0, 0xde, 0xc6, 0xc6, 0x66, 0x3a, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, +0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x0c, +0x0c, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0x66, 0xe6, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, +0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xe7, +0xff, 0xff, 0xdb, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0xc6, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, +0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x66, +0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xde, 0x7c, +0x0c, 0x0e, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, +0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, +0xc6, 0x60, 0x38, 0x0c, 0x06, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0xff, 0xdb, 0x99, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, +0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3, +0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xdb, 0xdb, 0xff, 0x66, 0x66, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x18, +0x3c, 0x66, 0xc3, 0xc3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3, +0xc3, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0xff, 0xc3, 0x86, 0x0c, 0x18, 0x30, 0x60, 0xc1, 0xc3, 0xff, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, +0x30, 0x30, 0x30, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, +0xc0, 0xe0, 0x70, 0x38, 0x1c, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, +0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, +0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0c, 0x7c, +0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x60, +0x60, 0x78, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, +0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0x60, 0xf0, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, +0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00, 0x00, 0x00, 0xe0, 0x60, +0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x0e, 0x06, 0x06, +0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0xe0, 0x60, +0x60, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0xff, 0xdb, +0xdb, 0xdb, 0xdb, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, +0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x0c, 0x1e, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0xf0, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x60, +0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x30, +0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3, 0xc3, +0xc3, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0xc3, 0xc3, 0xc3, 0xdb, 0xdb, 0xff, 0x66, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0xc3, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, +0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0xfe, 0xcc, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x0e, 0x18, 0x18, 0x18, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, +0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x18, +0x18, 0x18, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, +0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, +0xc2, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x0c, 0x06, 0x7c, 0x00, 0x00, +0x00, 0x00, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, +0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, 0x00, 0x7c, 0xc6, 0xfe, +0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, +0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0xcc, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, +0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x00, 0x78, 0x0c, 0x7c, +0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x38, +0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x60, 0x60, 0x66, 0x3c, 0x0c, 0x06, +0x3c, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xfe, +0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00, +0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, +0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x38, 0x18, 0x18, +0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, 0x66, +0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, +0x00, 0x60, 0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, +0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, +0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x38, 0x00, +0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, +0x18, 0x30, 0x60, 0x00, 0xfe, 0x66, 0x60, 0x7c, 0x60, 0x60, 0x66, 0xfe, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x3b, 0x1b, +0x7e, 0xd8, 0xdc, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x6c, +0xcc, 0xcc, 0xfe, 0xcc, 0xcc, 0xcc, 0xcc, 0xce, 0x00, 0x00, 0x00, 0x00, +0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, 0x7c, 0xc6, 0xc6, +0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x30, 0x18, +0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, +0x00, 0x30, 0x78, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, +0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x00, 0xcc, 0xcc, 0xcc, +0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00, +0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0x78, 0x00, +0x00, 0xc6, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, +0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, +0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, +0xc3, 0xc0, 0xc0, 0xc0, 0xc3, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, +0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0x60, 0xe6, 0xfc, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x66, 0x3c, 0x18, 0xff, 0x18, +0xff, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x66, 0x66, +0x7c, 0x62, 0x66, 0x6f, 0x66, 0x66, 0x66, 0xf3, 0x00, 0x00, 0x00, 0x00, +0x00, 0x0e, 0x1b, 0x18, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, +0xd8, 0x70, 0x00, 0x00, 0x00, 0x18, 0x30, 0x60, 0x00, 0x78, 0x0c, 0x7c, +0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, +0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, +0x00, 0x18, 0x30, 0x60, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, +0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x60, 0x00, 0xcc, 0xcc, 0xcc, +0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, +0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, +0x76, 0xdc, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, +0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x6c, +0x38, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x60, 0xc0, 0xc6, 0xc6, 0x7c, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0, +0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0xfe, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0xc0, 0xc0, 0xc2, 0xc6, 0xcc, 0x18, 0x30, 0x60, 0xce, 0x9b, 0x06, +0x0c, 0x1f, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc2, 0xc6, 0xcc, 0x18, 0x30, +0x66, 0xce, 0x96, 0x3e, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, +0x00, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6c, 0xd8, 0x6c, 0x36, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x6c, 0x36, +0x6c, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x44, 0x11, 0x44, +0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, +0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, +0x55, 0xaa, 0x55, 0xaa, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, +0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0x18, 0x18, 0x18, 0x18, +0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, +0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, +0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, +0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x36, 0x36, 0x36, 0x36, +0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36, 0x36, +0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0xf8, +0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x36, 0x36, 0x36, 0x36, +0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, +0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, +0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0xf6, +0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, +0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, +0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, +0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, +0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, +0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, +0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, +0x18, 0x18, 0x18, 0x18, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, +0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, +0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, +0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xff, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, +0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, +0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x36, 0x36, 0x36, +0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, +0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36, 0x36, +0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x3f, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, +0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, +0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, +0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, +0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, +0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, +0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, +0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, +0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, +0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x76, 0xdc, 0xd8, 0xd8, 0xd8, 0xdc, 0x76, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x78, 0xcc, 0xcc, 0xcc, 0xd8, 0xcc, 0xc6, 0xc6, 0xc6, 0xcc, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc6, 0xc6, 0xc0, 0xc0, 0xc0, +0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0xfe, 0xc6, 0x60, 0x30, 0x18, 0x30, 0x60, 0xc6, 0xfe, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xd8, 0xd8, +0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xc0, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x18, 0x3c, 0x66, 0x66, +0x66, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, +0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0x6c, 0x6c, 0x6c, 0x6c, 0xee, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x30, 0x18, 0x0c, 0x3e, 0x66, +0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x7e, 0xdb, 0xdb, 0xdb, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x03, 0x06, 0x7e, 0xdb, 0xdb, 0xf3, 0x7e, 0x60, 0xc0, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x30, 0x60, 0x60, 0x7c, 0x60, +0x60, 0x60, 0x30, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, +0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, +0x18, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, +0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x00, 0x7e, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x1b, 0x1b, 0x1b, 0x18, 0x18, +0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, +0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x7e, 0x00, 0x18, 0x18, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00, +0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x6c, +0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0c, 0x0c, +0x0c, 0x0c, 0x0c, 0xec, 0x6c, 0x6c, 0x3c, 0x1c, 0x00, 0x00, 0x00, 0x00, +0x00, 0xd8, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xd8, 0x30, 0x60, 0xc8, 0xf8, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, }; diff -prauN linux-2.6.0-test5/arch/ppc/syslib/cpc700.h wli-2.6.0-test5-bk12-25/arch/ppc/syslib/cpc700.h --- linux-2.6.0-test5/arch/ppc/syslib/cpc700.h 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/syslib/cpc700.h 2003-09-25 19:15:51.000000000 -0700 @@ -1,6 +1,6 @@ /* * arch/ppc/syslib/cpc700.h - * + * * Header file for IBM CPC700 Host Bridge, et. al. * * Author: Mark A. Greer @@ -85,7 +85,7 @@ */ extern struct hw_interrupt_type cpc700_pic; extern unsigned int cpc700_irq_assigns[32][2]; - + extern void __init cpc700_init_IRQ(void); extern int cpc700_get_irq(struct pt_regs *); diff -prauN linux-2.6.0-test5/arch/ppc/syslib/cpc700_pic.c wli-2.6.0-test5-bk12-25/arch/ppc/syslib/cpc700_pic.c --- linux-2.6.0-test5/arch/ppc/syslib/cpc700_pic.c 2003-09-08 12:49:56.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/syslib/cpc700_pic.c 2003-09-25 19:15:51.000000000 -0700 @@ -1,6 +1,6 @@ /* * arch/ppc/syslib/cpc700_pic.c - * + * * Interrupt controller support for IBM Spruce * * Authors: Mark Greer, Matt Porter, and Johnnie Peters @@ -47,7 +47,7 @@ cpc700_unmask_irq(unsigned int irq) /* Know IRQ fits in entry 0 of ppc_cached_irq_mask[] */ ppc_cached_irq_mask[0] |= CPC700_UIC_IRQ_BIT(irq); - + CPC700_OUT_32(CPC700_UIC_UICER, ppc_cached_irq_mask[0]); } return; @@ -128,10 +128,10 @@ cpc700_pic_init_irq(unsigned int irq) tmp = CPC700_IN_32(CPC700_UIC_UICCR); tmp |= CPC700_UIC_IRQ_BIT(irq); CPC700_OUT_32(CPC700_UIC_UICCR, tmp); - + return; } - + __init void cpc700_init_IRQ(void) { @@ -179,7 +179,7 @@ cpc700_get_irq(struct pt_regs *regs) irq++; irq_test <<= 1; } while (irq < NR_IRQS); - + if (irq == NR_IRQS) irq = 33; diff -prauN linux-2.6.0-test5/arch/ppc/syslib/cpc710.h wli-2.6.0-test5-bk12-25/arch/ppc/syslib/cpc710.h --- linux-2.6.0-test5/arch/ppc/syslib/cpc710.h 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/syslib/cpc710.h 2003-09-25 19:15:51.000000000 -0700 @@ -1,6 +1,6 @@ /* * arch/ppc/syslib/cpc710.h - * + * * Definitions for the IBM CPC710 PCI Host Bridge * * Author: Matt Porter diff -prauN linux-2.6.0-test5/arch/ppc/syslib/gen550_kgdb.c wli-2.6.0-test5-bk12-25/arch/ppc/syslib/gen550_kgdb.c --- linux-2.6.0-test5/arch/ppc/syslib/gen550_kgdb.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/syslib/gen550_kgdb.c 2003-09-25 19:15:51.000000000 -0700 @@ -7,7 +7,7 @@ * port(s) to be used can be accomplished by setting * ppc_md.early_serial_map to a platform-specific mapping function. * - * Adapted from ppc4xx_kgdb.c. + * Adapted from ppc4xx_kgdb.c. * * Author: Matt Porter * diff -prauN linux-2.6.0-test5/arch/ppc/syslib/gt64260_common.c wli-2.6.0-test5-bk12-25/arch/ppc/syslib/gt64260_common.c --- linux-2.6.0-test5/arch/ppc/syslib/gt64260_common.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/syslib/gt64260_common.c 2003-09-25 19:15:51.000000000 -0700 @@ -1,6 +1,6 @@ /* * arch/ppc/syslib/gt64260_common.c - * + * * Common routines for the Marvell/Galileo GT64260 (Discovery) host bridge, * interrupt controller, memory controller, serial controller, enet controller, * etc. @@ -352,14 +352,14 @@ gt64260_bridge_init(gt64260_bridge_info_ /* Disable all the access control windows */ for (window=0; windowmem_size, GT64260_PCI_SNOOP_WB); - + gt64260_pci_snoop_set_window(1, 0, 0x00000000, @@ -1084,7 +1084,7 @@ gt64260_pci_slave_p2p_mem_set_window(str u32 other_bus_base_addr, u32 size) { - static u32 + static u32 pci_p2p_mem_windows[GT64260_PCI_BUSES][GT64260_PCI_P2P_MEM_WINDOWS][4]={ { /* PCI 0 */ { 2, 0x10, @@ -1151,7 +1151,7 @@ gt64260_pci_slave_dac_scs_set_window(str u32 cpu_base_addr, u32 size) { - static u32 + static u32 pci_dac_scs_windows[GT64260_PCI_BUSES][GT64260_PCI_DAC_SCS_WINDOWS][5]={ { /* PCI 0 */ { 4, 0x10, 0x14, @@ -1217,7 +1217,7 @@ gt64260_pci_slave_dac_cs_set_window(stru u32 cpu_base_addr, u32 size) { - static u32 + static u32 pci_dac_cs_windows[GT64260_PCI_BUSES][GT64260_PCI_DAC_CS_WINDOWS][5] = { { /* PCI 0 */ { 6, 0x10, 0x14, @@ -1310,7 +1310,7 @@ gt64260_pci_slave_dac_p2p_mem_set_window u32 other_bus_base_addr, u32 size) { - static u32 + static u32 pci_dac_p2p_mem_windows[GT64260_PCI_BUSES][GT64260_PCI_DAC_P2P_MEM_WINDOWS][5] = { { /* PCI 0 */ { 4, 0x20, 0x24, @@ -1616,7 +1616,7 @@ gt64260_pci_exclude_device(u8 bus, u8 de * gt64260_putc() * * Dump a character out the MPSC port for gt64260_mpsc_progress - * this assumes the baud rate has already been set up and the + * this assumes the baud rate has already been set up and the * MPSC initialized by the bootloader or firmware. */ @@ -1641,19 +1641,19 @@ puthex(unsigned long val){ val <<= 4; } gt_putc('\r'); - gt_putc('\n'); - + gt_putc('\n'); + } void gt64260_mpsc_progress(char *s, unsigned short hex){ /* spit stuff out the 64260 mpsc */ - + volatile char c; while ((c = *s++) != 0){ gt_putc(c); - if ( c == '\n' ) gt_putc('\r'); + if ( c == '\n' ) gt_putc('\r'); } gt_putc('\n'); gt_putc('\r'); diff -prauN linux-2.6.0-test5/arch/ppc/syslib/gt64260_pic.c wli-2.6.0-test5-bk12-25/arch/ppc/syslib/gt64260_pic.c --- linux-2.6.0-test5/arch/ppc/syslib/gt64260_pic.c 2003-09-08 12:50:13.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/syslib/gt64260_pic.c 2003-09-25 19:15:51.000000000 -0700 @@ -1,6 +1,6 @@ /* * arch/ppc/syslib/gt64260_pic.c - * + * * Interrupt controller support for Galileo's GT64260. * * Author: Chris Zankel @@ -22,13 +22,13 @@ * summarizes the interrupts generated by the units of the GT64260. * Each bit is assigned to an interrupt number, where the low register * are assigned from IRQ0 to IRQ31 and the high cause register - * from IRQ32 to IRQ63 - * The GPP (General Purpose Port) interrupts are assigned from IRQ64 (GPP0) - * to IRQ95 (GPP31). + * from IRQ32 to IRQ63 + * The GPP (General Purpose Port) interrupts are assigned from IRQ64 (GPP0) + * to IRQ95 (GPP31). * get_irq() returns the lowest interrupt number that is currently asserted. * - * Note: - * - This driver does not initialize the GPP when used as an interrupt + * Note: + * - This driver does not initialize the GPP when used as an interrupt * input. */ @@ -114,7 +114,7 @@ gt64260_init_irq(void) /* gt64260_get_irq() * * This function returns the lowest interrupt number of all interrupts that - * are currently asserted. + * are currently asserted. * * Input Variable(s): * struct pt_regs* not used @@ -124,7 +124,7 @@ gt64260_init_irq(void) * * Returns: * int or -2 (bogus interrupt) - * + * */ int gt64260_get_irq(struct pt_regs *regs) @@ -187,16 +187,16 @@ gt64260_unmask_irq(unsigned int irq) if (irq > 31) { if (irq > 63) { /* unmask GPP irq */ - gt_write(GT64260_GPP_INTR_MASK, + gt_write(GT64260_GPP_INTR_MASK, ppc_cached_irq_mask[2] |= (1<<(irq-64))); } else { /* mask high interrupt register */ - gt_write(GT64260_IC_CPU_INTR_MASK_HI, + gt_write(GT64260_IC_CPU_INTR_MASK_HI, ppc_cached_irq_mask[1] |= (1<<(irq-32))); } } else { /* mask low interrupt register */ - gt_write(GT64260_IC_CPU_INTR_MASK_LO, + gt_write(GT64260_IC_CPU_INTR_MASK_LO, ppc_cached_irq_mask[0] |= (1< 31) { if (irq > 63) { /* mask GPP irq */ - gt_write(GT64260_GPP_INTR_MASK, + gt_write(GT64260_GPP_INTR_MASK, ppc_cached_irq_mask[2] &= ~(1<<(irq-64))); } else { /* mask high interrupt register */ - gt_write(GT64260_IC_CPU_INTR_MASK_HI, + gt_write(GT64260_IC_CPU_INTR_MASK_HI, ppc_cached_irq_mask[1] &= ~(1<<(irq-32))); } } else { /* mask low interrupt register */ - gt_write(GT64260_IC_CPU_INTR_MASK_LO, + gt_write(GT64260_IC_CPU_INTR_MASK_LO, ppc_cached_irq_mask[0] &= ~(1<cpu = p->plb = sys_clk; } else { u32 fbdv, fwdva, fwdvb, m, vco; - + fbdv = (cpc0_sys0 >> 18) & 0x0f; if (!fbdv) fbdv = 16; - + fwdva = 8 - ((cpc0_sys0 >> 15) & 0x7); fwdvb = 8 - ((cpc0_sys0 >> 12) & 0x7); - - /* Feedback path */ + + /* Feedback path */ if (cpc0_sys0 & 0x00000080){ /* PerClk */ m = fwdvb * opdv * epdv; @@ -58,19 +58,19 @@ void __init ibm440gp_get_clocks(struct i p->cpu = vco / fwdva; p->plb = vco / fwdvb; } - + opdv = ((cpc0_sys0 >> 10) & 0x3) + 1; epdv = ((cpc0_sys0 >> 8) & 0x3) + 1; - + p->opb = p->plb / opdv; p->ebc = p->opb / epdv; - + if (cpc0_cr0 & 0x00400000){ /* External UART clock */ p->uart = ser_clk; } else { - /* Internal UART clock */ + /* Internal UART clock */ u32 uart_div = ((cpc0_cr0 >> 16) & 0x1f) + 1; p->uart = p->plb / uart_div; } diff -prauN linux-2.6.0-test5/arch/ppc/syslib/ibm440gp_common.h wli-2.6.0-test5-bk12-25/arch/ppc/syslib/ibm440gp_common.h --- linux-2.6.0-test5/arch/ppc/syslib/ibm440gp_common.h 2003-09-08 12:49:55.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/syslib/ibm440gp_common.h 2003-09-25 19:15:51.000000000 -0700 @@ -29,17 +29,17 @@ struct ibm440gp_clocks { unsigned int plb; /* PLBClk */ unsigned int opb; /* OPBClk */ unsigned int ebc; /* PerClk */ - unsigned int uart; + unsigned int uart; }; /* * Please, refer to the Figure 13.1 in 440GP user manual - * + * * if internal UART clock is used, ser_clk is ignored */ -void ibm440gp_get_clocks(struct ibm440gp_clocks*, unsigned int sys_clk, +void ibm440gp_get_clocks(struct ibm440gp_clocks*, unsigned int sys_clk, unsigned int ser_clk) __init; - + #endif /* __ASSEMBLY__ */ #endif /* __PPC_SYSLIB_IBM440GP_COMMON_H */ #endif /* __KERNEL__ */ diff -prauN linux-2.6.0-test5/arch/ppc/syslib/mpc10x_common.c wli-2.6.0-test5-bk12-25/arch/ppc/syslib/mpc10x_common.c --- linux-2.6.0-test5/arch/ppc/syslib/mpc10x_common.c 2003-09-08 12:49:54.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/syslib/mpc10x_common.c 2003-09-25 19:15:51.000000000 -0700 @@ -1,6 +1,6 @@ /* * arch/ppc/syslib/mpc10x_common.c - * + * * Common routines for the Motorola SPS MPC106, MPC107 and MPC8240 Host bridge, * Mem ctlr, EPIC, etc. * @@ -224,7 +224,7 @@ mpc10x_bridge_init(struct pci_controller printk("Host bridge in Agent mode\n"); /* Read or Set LMBAR & PCSRBAR? */ } - + /* Set base addr of the 8240/107 EUMB. */ early_write_config_dword(hose, 0, @@ -233,7 +233,7 @@ mpc10x_bridge_init(struct pci_controller phys_eumb_base); /* Map EPIC register part of EUMB into vitual memory */ - OpenPIC_Addr = + OpenPIC_Addr = ioremap(phys_eumb_base + MPC10X_EUMB_EPIC_OFFSET, MPC10X_EUMB_EPIC_SIZE); } diff -prauN linux-2.6.0-test5/arch/ppc/syslib/of_device.c wli-2.6.0-test5-bk12-25/arch/ppc/syslib/of_device.c --- linux-2.6.0-test5/arch/ppc/syslib/of_device.c 2003-09-08 12:50:43.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/syslib/of_device.c 2003-09-25 19:15:51.000000000 -0700 @@ -11,9 +11,9 @@ * of_match structure * @ids: array of of device match structures to search in * @dev: the of device structure to match against - * + * * Used by a driver to check whether an of_device present in the - * system is in its list of supported devices. + * system is in its list of supported devices. */ const struct of_match * of_match_device(const struct of_match *matches, const struct of_device *dev) @@ -38,13 +38,13 @@ const struct of_match * of_match_device( return NULL; } -static int of_platform_bus_match(struct device *dev, struct device_driver *drv) +static int of_platform_bus_match(struct device *dev, struct device_driver *drv) { struct of_device * of_dev = to_of_device(dev); struct of_platform_driver * of_drv = to_of_platform_driver(drv); const struct of_match * matches = of_drv->match_table; - if (!matches) + if (!matches) return 0; return of_match_device(matches, of_dev) != NULL; @@ -192,11 +192,11 @@ int of_device_register(struct of_device struct of_device **odprop; BUG_ON(ofdev->node == NULL); - + odprop = (struct of_device **)get_property(ofdev->node, "linux,device", NULL); if (!odprop) { struct property *new_prop; - + new_prop = kmalloc(sizeof(struct property) + sizeof(struct of_device *), GFP_KERNEL); if (new_prop == NULL) @@ -236,7 +236,7 @@ struct of_device* of_platform_device_cre { struct of_device *dev; u32 *reg; - + dev = kmalloc(sizeof(*dev), GFP_KERNEL); if (!dev) return NULL; diff -prauN linux-2.6.0-test5/arch/ppc/syslib/open_pic.c wli-2.6.0-test5-bk12-25/arch/ppc/syslib/open_pic.c --- linux-2.6.0-test5/arch/ppc/syslib/open_pic.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/syslib/open_pic.c 2003-09-25 19:15:51.000000000 -0700 @@ -557,7 +557,7 @@ static void __init openpic_initipi(u_int /* * Send an IPI to one or more CPUs - * + * * Externally called, however, it takes an IPI number (0...OPENPIC_NUM_IPI) * and not a system-wide interrupt number */ @@ -574,12 +574,12 @@ void openpic_cause_IPI(u_int ipi, u_int void openpic_request_IPIs(void) { int i; - + /* - * Make sure this matches what is defined in smp.c for - * smp_message_{pass|recv}() or what shows up in + * Make sure this matches what is defined in smp.c for + * smp_message_{pass|recv}() or what shows up in * /proc/interrupts will be wrong!!! --Troy */ - + if (OpenPIC == NULL) return; @@ -702,7 +702,7 @@ static void openpic_disable_irq(u_int ir { volatile u_int *vpp; u32 vp; - + check_arg_irq(irq); vpp = &ISR[irq - open_pic_irq_offset]->Vector_Priority; openpic_setfield(vpp, OPENPIC_MASK); @@ -716,7 +716,7 @@ static void openpic_disable_irq(u_int ir #ifdef CONFIG_SMP /* * Enable/disable an IPI interrupt source - * + * * Externally called, irq is an offseted system-wide interrupt number */ void openpic_enable_ipi(u_int irq) @@ -886,13 +886,13 @@ static int openpic_suspend_count; static void openpic_cached_enable_irq(u_int irq) { check_arg_irq(irq); - save_irq_src_vp[irq - open_pic_irq_offset] &= ~OPENPIC_MASK; + save_irq_src_vp[irq - open_pic_irq_offset] &= ~OPENPIC_MASK; } static void openpic_cached_disable_irq(u_int irq) { check_arg_irq(irq); - save_irq_src_vp[irq - open_pic_irq_offset] |= OPENPIC_MASK; + save_irq_src_vp[irq - open_pic_irq_offset] |= OPENPIC_MASK; } /* WARNING: Can be called directly by the cpufreq code with NULL parameter, @@ -903,7 +903,7 @@ int openpic_suspend(struct sys_device *s { int i; unsigned long flags; - + spin_lock_irqsave(&openpic_setup_lock, flags); if (openpic_suspend_count++ > 0) { @@ -947,7 +947,7 @@ int openpic_resume(struct sys_device *sy OPENPIC_MASK; spin_lock_irqsave(&openpic_setup_lock, flags); - + if ((--openpic_suspend_count) > 0) { spin_unlock_irqrestore(&openpic_setup_lock, flags); return 0; @@ -960,7 +960,7 @@ int openpic_resume(struct sys_device *sy openpic_set_spurious(OPENPIC_VEC_SPURIOUS+open_pic_irq_offset); } while(openpic_readfield(&OpenPIC->Global.Spurious_Vector, OPENPIC_VECTOR_MASK) != (OPENPIC_VEC_SPURIOUS + open_pic_irq_offset)); - + openpic_disable_8259_pass_through(); for (i=0; i @@ -80,7 +80,7 @@ void __init pciauto_setup_bars(struct pc PCI_BASE_ADDRESS_MEM_TYPE_64) found_mem64 = 1; - addr_mask = PCI_BASE_ADDRESS_MEM_MASK; + addr_mask = PCI_BASE_ADDRESS_MEM_MASK; upper_limit = &pciauto_upper_memspc; DBG("PCI Autoconfig: BAR 0x%x, Mem ", bar); } @@ -104,7 +104,7 @@ void __init pciauto_setup_bars(struct pc * If we are a 64-bit decoder then increment to the * upper 32 bits of the bar and force it to locate * in the lower 4GB of memory. - */ + */ if (found_mem64) { bar += 4; early_write_config_dword(hose, @@ -243,7 +243,7 @@ void __init pciauto_postscan_setup_bridg pci_devfn, PCI_IO_BASE_UPPER16, pciauto_upper_iospc >> 16); - + /* Enable memory and I/O accesses, enable bus master */ early_read_config_dword(hose, current_bus, @@ -329,9 +329,9 @@ void __init pciauto_postscan_setup_cardb /* * Reserve an additional 4MB for mem space and 16KB for * I/O space. This should cover any additional space - * requirement of unusual CardBus devices with + * requirement of unusual CardBus devices with * additional bridges that can consume more address space. - * + * * Although pcmcia-cs currently will reprogram bridge * windows, the goal is to add an option to leave them * alone and use the bridge window ranges as the regions @@ -359,7 +359,7 @@ void __init pciauto_postscan_setup_cardb pci_devfn, 0x2c, pciauto_upper_iospc); - + /* Enable memory and I/O accesses, enable bus master */ early_read_config_dword(hose, current_bus, diff -prauN linux-2.6.0-test5/arch/ppc/syslib/ppc405_pci.c wli-2.6.0-test5-bk12-25/arch/ppc/syslib/ppc405_pci.c --- linux-2.6.0-test5/arch/ppc/syslib/ppc405_pci.c 2003-09-08 12:50:09.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/syslib/ppc405_pci.c 2003-09-25 19:15:51.000000000 -0700 @@ -22,7 +22,7 @@ #include #include - + extern void bios_fixup(struct pci_controller *, struct pcil0_regs *); extern int ppc405_map_irq(struct pci_dev *dev, unsigned char idsel, unsigned char pin); @@ -137,7 +137,7 @@ ppc4xx_find_bridges(void) tmp_addr = tmp_addr + (0xffffffff - (tmp_size & 0xffffc000)); if (tmp_addr > PPC405_PCI_UPPER_MEM) { - new_pmm_max = tmp_addr; // PPC405_PCI_UPPER_MEM + new_pmm_max = tmp_addr; // PPC405_PCI_UPPER_MEM } else { new_pmm_max = PPC405_PCI_UPPER_MEM; } diff -prauN linux-2.6.0-test5/arch/ppc/syslib/ppc4xx_dma.c wli-2.6.0-test5-bk12-25/arch/ppc/syslib/ppc4xx_dma.c --- linux-2.6.0-test5/arch/ppc/syslib/ppc4xx_dma.c 2003-09-08 12:50:44.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/syslib/ppc4xx_dma.c 2003-09-25 19:15:51.000000000 -0700 @@ -41,10 +41,10 @@ ppc_dma_ch_t dma_channels[MAX_405GP_DMA_ /* * Configures a DMA channel, including the peripheral bus width, if a * peripheral is attached to the channel, the polarity of the DMAReq and - * DMAAck signals, etc. This information should really be setup by the boot + * DMAAck signals, etc. This information should really be setup by the boot * code, since most likely the configuration won't change dynamically. * If the kernel has to call this function, it's recommended that it's - * called from platform specific init code. The driver should not need to + * called from platform specific init code. The driver should not need to * call this function. */ int hw_init_dma_channel(unsigned int dmanr, ppc_dma_ch_t *p_init) @@ -75,9 +75,9 @@ int hw_init_dma_channel(unsigned int dma * new value. */ - control |= ( + control |= ( SET_DMA_CIE_ENABLE(p_init->int_enable) | /* interrupt enable */ - SET_DMA_BEN(p_init->buffer_enable) | /* buffer enable */ + SET_DMA_BEN(p_init->buffer_enable) | /* buffer enable */ SET_DMA_ETD(p_init->etd_output) | /* end of transfer pin */ SET_DMA_TCE(p_init->tce_enable) | /* terminal count enable */ SET_DMA_PL(p_init->pl) | /* peripheral location */ @@ -128,7 +128,7 @@ int hw_init_dma_channel(unsigned int dma default: return DMA_STATUS_BAD_CHANNEL; } - + /* save these values in our dma channel structure */ memcpy(p_dma_ch, p_init, sizeof(ppc_dma_ch_t)); @@ -174,22 +174,22 @@ int get_channel_config(unsigned int dman switch (dmanr) { case 0: - p_dma_ch->polarity = + p_dma_ch->polarity = polarity & (DMAReq0_ActiveLow | DMAAck0_ActiveLow | EOT0_ActiveLow); control = mfdcr(DCRN_DMACR0); break; case 1: - p_dma_ch->polarity = + p_dma_ch->polarity = polarity & (DMAReq1_ActiveLow | DMAAck1_ActiveLow | EOT1_ActiveLow); control = mfdcr(DCRN_DMACR1); break; case 2: - p_dma_ch->polarity = + p_dma_ch->polarity = polarity & (DMAReq2_ActiveLow | DMAAck2_ActiveLow | EOT2_ActiveLow); control = mfdcr(DCRN_DMACR2); break; case 3: - p_dma_ch->polarity = + p_dma_ch->polarity = polarity & (DMAReq3_ActiveLow | DMAAck3_ActiveLow | EOT3_ActiveLow); control = mfdcr(DCRN_DMACR3); break; @@ -211,7 +211,7 @@ int get_channel_config(unsigned int dman /* * Sets the priority for the DMA channel dmanr. - * Since this is setup by the hardware init function, this function + * Since this is setup by the hardware init function, this function * can be used to dynamically change the priority of a channel. * * Acceptable priorities: @@ -269,7 +269,7 @@ int set_channel_priority(unsigned int dm /* * Returns the width of the peripheral attached to this channel. This assumes - * that someone who knows the hardware configuration, boot code or some other + * that someone who knows the hardware configuration, boot code or some other * init code, already set the width. * * The return value is one of: @@ -313,27 +313,27 @@ unsigned int get_peripheral_width(unsign * Create a scatter/gather list handle. This is simply a structure which * describes a scatter/gather list. * - * A handle is returned in "handle" which the driver should save in order to - * be able to access this list later. A chunk of memory will be allocated - * to be used by the API for internal management purposes, including managing - * the sg list and allocating memory for the sgl descriptors. One page should - * be more than enough for that purpose. Perhaps it's a bit wasteful to use - * a whole page for a single sg list, but most likely there will be only one + * A handle is returned in "handle" which the driver should save in order to + * be able to access this list later. A chunk of memory will be allocated + * to be used by the API for internal management purposes, including managing + * the sg list and allocating memory for the sgl descriptors. One page should + * be more than enough for that purpose. Perhaps it's a bit wasteful to use + * a whole page for a single sg list, but most likely there will be only one * sg list per channel. * * Interrupt notes: * Each sgl descriptor has a copy of the DMA control word which the DMA engine - * loads in the control register. The control word has a "global" interrupt + * loads in the control register. The control word has a "global" interrupt * enable bit for that channel. Interrupts are further qualified by a few bits * in the sgl descriptor count register. In order to setup an sgl, we have to * know ahead of time whether or not interrupts will be enabled at the completion * of the transfers. Thus, enable_dma_interrupt()/disable_dma_interrupt() MUST * be called before calling alloc_dma_handle(). If the interrupt mode will never - * change after powerup, then enable_dma_interrupt()/disable_dma_interrupt() + * change after powerup, then enable_dma_interrupt()/disable_dma_interrupt() * do not have to be called -- interrupts will be enabled or disabled based * on how the channel was configured after powerup by the hw_init_dma_channel() * function. Each sgl descriptor will be setup to interrupt if an error occurs; - * however, only the last descriptor will be setup to interrupt. Thus, an + * however, only the last descriptor will be setup to interrupt. Thus, an * interrupt will occur (if interrupts are enabled) only after the complete * sgl transfer is done. */ diff -prauN linux-2.6.0-test5/arch/ppc/syslib/ppc4xx_pic.c wli-2.6.0-test5-bk12-25/arch/ppc/syslib/ppc4xx_pic.c --- linux-2.6.0-test5/arch/ppc/syslib/ppc4xx_pic.c 2003-09-08 12:49:50.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/syslib/ppc4xx_pic.c 2003-09-25 19:15:51.000000000 -0700 @@ -164,7 +164,7 @@ ppc405_uic_enable(unsigned int irq) else /* lets hope this works since in linux/irq.h * there is no define for EDGE and it's assumed - * once you set status to LEVEL you would not + * once you set status to LEVEL you would not * want to change it - Armin */ desc->status = desc->status & ~IRQ_LEVEL; @@ -176,7 +176,7 @@ ppc405_uic_enable(unsigned int irq) else /* lets hope this works since in linux/irq.h * there is no define for EDGE and it's assumed - * once you set status to LEVEL you would not + * once you set status to LEVEL you would not * want to change it - Armin */ desc->status = desc->status & ~IRQ_LEVEL; @@ -340,7 +340,7 @@ ppc405_pic_get_irq(struct pt_regs *regs) void __init ppc4xx_extpic_init(void) { - /* set polarity + /* set polarity * 1 = default/pos/rising , 0= neg/falling internal * 1 = neg/falling , 0= pos/rising external * Sense @@ -427,7 +427,7 @@ ppc4xx_pic_init(void) #endif mtdcr(DCRN_UIC_ER(UIC0), ppc_cached_irq_mask[0]); mtdcr(DCRN_UIC_CR(UIC0), 0); - + if (ibm4xxPIC_InitSenses != NULL) ppc4xx_extpic_init(); diff -prauN linux-2.6.0-test5/arch/ppc/syslib/ppc4xx_serial.c wli-2.6.0-test5-bk12-25/arch/ppc/syslib/ppc4xx_serial.c --- linux-2.6.0-test5/arch/ppc/syslib/ppc4xx_serial.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/syslib/ppc4xx_serial.c 2003-09-25 19:15:51.000000000 -0700 @@ -13,7 +13,7 @@ * is licensed "as is" without any warranty of any kind, whether express * or implied. * - * Console I/O support for Early kernel bringup. + * Console I/O support for Early kernel bringup. */ #include @@ -55,7 +55,7 @@ static int ppc405_sercons_setup(struct c */ -#ifdef CONFIG_IBM405GP_INTERNAL_CLOCK +#ifdef CONFIG_IBM405GP_INTERNAL_CLOCK /* ftr revisit ** why is bit 19 of chcr0 (0x1000) being set? */ @@ -78,7 +78,7 @@ static int ppc405_sercons_setup(struct c static void ppc405_sercons_write(struct console *co, const char *ptr, unsigned nb) -{ +{ int i; #ifdef CONFIG_UART0_DEBUG_CONSOLE @@ -102,7 +102,7 @@ ppc405_sercons_write(struct console *co, if (ptr[i] == '\n') { /* add a carriage return */ - + /* wait for transmit reg (possibly fifo) to empty */ while ((*uart_lsr & 0x40) == 0) ; @@ -117,7 +117,7 @@ ppc405_sercons_write(struct console *co, static int ppc405_sercons_read(struct console *co, char *ptr, unsigned nb) -{ +{ #ifdef CONFIG_UART0_DEBUG_CONSOLE volatile unsigned char *uart_rcv = (char *)0xef600300; volatile unsigned char *uart_lsr = (char *)0xef600305; @@ -157,7 +157,7 @@ static struct console ppc405_sercons = { void register_debug_console(void) { - register_console(&ppc405_sercons); + register_console(&ppc405_sercons); } void diff -prauN linux-2.6.0-test5/arch/ppc/syslib/ppc8xx_pic.c wli-2.6.0-test5-bk12-25/arch/ppc/syslib/ppc8xx_pic.c --- linux-2.6.0-test5/arch/ppc/syslib/ppc8xx_pic.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/syslib/ppc8xx_pic.c 2003-09-25 19:15:51.000000000 -0700 @@ -51,7 +51,7 @@ static void m8xx_end_irq(unsigned int ir word = irq_nr >> 5; ppc_cached_irq_mask[word] |= (1 << (31-bit)); - ((immap_t *)IMAP_ADDR)->im_siu_conf.sc_simask = + ((immap_t *)IMAP_ADDR)->im_siu_conf.sc_simask = ppc_cached_irq_mask[word]; } } @@ -125,7 +125,7 @@ m8xx_get_irq(struct pt_regs *regs) irq = ((immap_t *)IMAP_ADDR)->im_siu_conf.sc_sivec >> 26; /* - * When we read the sivec without an interrupt to process, we will + * When we read the sivec without an interrupt to process, we will * get back SIU_LEVEL7. In this case, return -1 */ if (irq == SIU_LEVEL7) @@ -149,7 +149,7 @@ void mbx_i8259_action(int cpl, void *dev */ irq = (inl(0x508) >> 24)&0xff; if ( irq != 0xff ) printk("iack %d\n", irq); - + outb(0x0C, 0x20); irq = inb(0x20) & 7; if (irq == 2) diff -prauN linux-2.6.0-test5/arch/ppc/syslib/pplus_common.c wli-2.6.0-test5-bk12-25/arch/ppc/syslib/pplus_common.c --- linux-2.6.0-test5/arch/ppc/syslib/pplus_common.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/syslib/pplus_common.c 2003-09-25 19:15:51.000000000 -0700 @@ -1,6 +1,6 @@ /* * arch/ppc/syslib/pplus_common.c - * + * * Common Motorola PowerPlus Platform--really Falcon/Raven or HAWK. * * Author: Mark A. Greer diff -prauN linux-2.6.0-test5/arch/ppc/syslib/prep_nvram.c wli-2.6.0-test5-bk12-25/arch/ppc/syslib/prep_nvram.c --- linux-2.6.0-test5/arch/ppc/syslib/prep_nvram.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/syslib/prep_nvram.c 2003-09-25 19:15:51.000000000 -0700 @@ -30,7 +30,7 @@ unsigned char __prep prep_nvram_read_val outb(addr>>8, PREP_NVRAM_AS1); return inb(PREP_NVRAM_DATA); } - + void __prep prep_nvram_write_val(int addr, unsigned char val) { @@ -38,7 +38,7 @@ void __prep prep_nvram_write_val(int outb(addr>>8, PREP_NVRAM_AS1); outb(val, PREP_NVRAM_DATA); } - + void __init init_prep_nvram(void) { unsigned char *nvp; @@ -56,7 +56,7 @@ void __init init_prep_nvram(void) *nvp = ppc_md.nvram_read_val(i); nvp++; } - + /* * The PReP NvRAM may be any size so read in the header to * determine how much we must read in order to get the complete diff -prauN linux-2.6.0-test5/arch/ppc/syslib/prom.c wli-2.6.0-test5-bk12-25/arch/ppc/syslib/prom.c --- linux-2.6.0-test5/arch/ppc/syslib/prom.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/syslib/prom.c 2003-09-25 19:15:51.000000000 -0700 @@ -803,7 +803,7 @@ prom_get_irq_senses(unsigned char *sense senses[i-off] = (IRQ_SENSE_LEVEL | IRQ_POLARITY_NEGATIVE); else - senses[i-off] = (IRQ_SENSE_EDGE + senses[i-off] = (IRQ_SENSE_EDGE | IRQ_POLARITY_POSITIVE); } } @@ -962,7 +962,7 @@ find_path_device(const char *path) * * Returns a node pointer with refcount incremented, use * of_node_put() on it when done. - */ + */ struct device_node *of_find_node_by_name(struct device_node *from, const char *name) { @@ -1116,7 +1116,7 @@ struct device_node *of_node_get(struct d * allocation on ppc32 */ void of_node_put(struct device_node *node) -{ +{ } /* @@ -1188,8 +1188,8 @@ find_parent_pci_resource(struct pci_dev* { unsigned long mask; int i; - - /* Check this one */ + + /* Check this one */ mask = bus_space_to_resource_flags(range->space); for (i=0; iresource[i].flags & mask) == mask && @@ -1237,7 +1237,7 @@ request_OF_resource(struct device_node* parent = &ioport_resource; else goto fail; - + /* Find a PCI parent if any */ nd = node; pcidev = NULL; @@ -1292,7 +1292,7 @@ release_OF_resource(struct device_node* parent = &ioport_resource; else return -EINVAL; - + /* Find a PCI parent if any */ nd = node; pcidev = NULL; diff -prauN linux-2.6.0-test5/arch/ppc/syslib/prom_init.c wli-2.6.0-test5-bk12-25/arch/ppc/syslib/prom_init.c --- linux-2.6.0-test5/arch/ppc/syslib/prom_init.c 2003-09-08 12:50:40.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/syslib/prom_init.c 2003-09-25 19:15:51.000000000 -0700 @@ -434,9 +434,14 @@ setup_disp_fake_bi(ihandle dp) if (strcmp(name, "valkyrie") == 0) address += 0x1000; +#ifdef CONFIG_POWER4 + extern int boot_text_mapped; + btext_setup_display(width, height, depth, pitch, address); + boot_text_mapped = 0; +#else btext_setup_display(width, height, depth, pitch, address); - btext_prepare_BAT(); +#endif #endif /* CONFIG_BOOTX_TEXT */ } @@ -644,6 +649,72 @@ prom_hold_cpus(unsigned long mem) } } +#ifdef CONFIG_POWER4 +/* + * Set up a hash table with a set of entries in it to map the + * first 64MB of RAM. This is used on 64-bit machines since + * some of them don't have BATs. + * We assume the PTE will fit in the primary PTEG. + */ + +static inline void make_pte(unsigned long htab, unsigned int hsize, + unsigned int va, unsigned int pa, int mode) +{ + unsigned int *pteg; + unsigned int hash, i, vsid; + + vsid = ((va >> 28) * 0x111) << 12; + hash = ((va ^ vsid) >> 5) & 0x7fff80; + pteg = (unsigned int *)(htab + (hash & (hsize - 1))); + for (i = 0; i < 8; ++i, pteg += 4) { + if ((pteg[1] & 1) == 0) { + pteg[1] = vsid | ((va >> 16) & 0xf80) | 1; + pteg[3] = pa | mode; + break; + } + } +} + +extern unsigned long _SDR1; +extern PTE *Hash; +extern unsigned long Hash_size; + +static void __init +prom_alloc_htab(void) +{ + unsigned int hsize; + unsigned long htab; + unsigned int addr; + + /* + * Because of OF bugs we can't use the "claim" client + * interface to allocate memory for the hash table. + * This code is only used on 64-bit PPCs, and the only + * 64-bit PPCs at the moment are RS/6000s, and their + * OF is based at 0xc00000 (the 12M point), so we just + * arbitrarily use the 0x800000 - 0xc00000 region for the + * hash table. + * -- paulus. + */ + hsize = 4 << 20; /* POWER4 has no BATs */ + htab = (8 << 20); + call_prom("claim", 3, 1, htab, hsize, 0); + Hash = (void *)(htab + KERNELBASE); + Hash_size = hsize; + _SDR1 = htab + __ilog2(hsize) - 18; + + /* + * Put in PTEs for the first 64MB of RAM + */ + cacheable_memzero((void *)htab, hsize); + for (addr = 0; addr < 0x4000000; addr += 0x1000) + make_pte(htab, hsize, addr + KERNELBASE, addr, + _PAGE_ACCESSED | _PAGE_COHERENT | PP_RWXX); + make_pte(htab, hsize, 0x80013000, 0x80013000, + _PAGE_ACCESSED | _PAGE_NO_CACHE | _PAGE_GUARDED | PP_RWXX); +} +#endif /* CONFIG_POWER4 */ + static void __init prom_instantiate_rtas(void) { @@ -745,6 +816,13 @@ prom_init(int r3, int r4, prom_entry pp) prom_instantiate_rtas(); +#ifdef CONFIG_POWER4 + /* + * Find out how much memory we have and allocate a + * suitably-sized hash table. + */ + prom_alloc_htab(); +#endif mem = check_display(mem); prom_print("copying OF device tree..."); diff -prauN linux-2.6.0-test5/arch/ppc/syslib/todc_time.c wli-2.6.0-test5-bk12-25/arch/ppc/syslib/todc_time.c --- linux-2.6.0-test5/arch/ppc/syslib/todc_time.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/syslib/todc_time.c 2003-09-25 19:15:51.000000000 -0700 @@ -1,6 +1,6 @@ /* * arch/ppc/syslib/todc_time.c - * + * * Time of Day Clock support for the M48T35, M48T37, M48T59, and MC146818 * Real Time Clocks/Timekeepers. * @@ -84,7 +84,7 @@ todc_direct_read_val(int addr) { return readb(todc_info->nvram_data + addr); } - + void todc_direct_write_val(int addr, unsigned char val) { @@ -100,7 +100,7 @@ todc_m48txx_read_val(int addr) outb(addr>>todc_info->as0_bits, todc_info->nvram_as1); return inb(todc_info->nvram_data); } - + void todc_m48txx_write_val(int addr, unsigned char val) { @@ -117,7 +117,7 @@ todc_mc146818_read_val(int addr) outb(addr, todc_info->nvram_as0); return inb(todc_info->nvram_data); } - + void todc_mc146818_write_val(int addr, unsigned char val) { @@ -273,7 +273,7 @@ todc_get_rtc_time(void) if (todc_info->rtc_type != TODC_TYPE_MC146818) { switch (todc_info->rtc_type) { case TODC_TYPE_DS1557: - case TODC_TYPE_DS1743: + case TODC_TYPE_DS1743: case TODC_TYPE_DS1746: /* XXXX BAD HACK -> FIX */ case TODC_TYPE_DS1747: break; @@ -347,7 +347,7 @@ todc_set_rtc_time(unsigned long nowtime) ppc_md.nvram_write_val(todc_info->month, tm.tm_mon); ppc_md.nvram_write_val(todc_info->day_of_month, tm.tm_mday); ppc_md.nvram_write_val(todc_info->year, tm.tm_year); - + ppc_md.nvram_write_val(todc_info->control_a, save_control); if (todc_info->rtc_type == TODC_TYPE_MC146818) { @@ -394,7 +394,7 @@ static unsigned char __init todc_read_ti } return val; -} +} /* * This was taken from prep_setup.c @@ -407,7 +407,7 @@ todc_calibrate_decr(void) ulong tbl, tbu; long i, loop_count; u_char sec; - + todc_time_init(); /* diff -prauN linux-2.6.0-test5/arch/ppc/xmon/ppc-opc.c wli-2.6.0-test5-bk12-25/arch/ppc/xmon/ppc-opc.c --- linux-2.6.0-test5/arch/ppc/xmon/ppc-opc.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/xmon/ppc-opc.c 2003-09-25 19:15:51.000000000 -0700 @@ -393,7 +393,7 @@ const struct powerpc_operand powerpc_ope same. */ /*ARGSUSED*/ -static unsigned long +static unsigned long insert_bat(unsigned long insn, long value, const char **errmsg) { return insn | (((insn >> 21) & 0x1f) << 16); @@ -795,7 +795,7 @@ insert_ras(unsigned long insn, long valu extraction function just checks that the fields are the same. */ /*ARGSUSED*/ -static unsigned long +static unsigned long insert_rbs(unsigned long insn, long value, const char **errmsg) { return insn | (((insn >> 21) & 0x1f) << 11); diff -prauN linux-2.6.0-test5/arch/ppc/xmon/start.c wli-2.6.0-test5-bk12-25/arch/ppc/xmon/start.c --- linux-2.6.0-test5/arch/ppc/xmon/start.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc/xmon/start.c 2003-09-25 19:15:51.000000000 -0700 @@ -95,12 +95,12 @@ static unsigned long chrp_find_phys_io_b #ifdef CONFIG_MAGIC_SYSRQ static void sysrq_handle_xmon(int key, struct pt_regs *regs, - struct tty_struct *tty) + struct tty_struct *tty) { xmon(regs); } -static struct sysrq_key_op sysrq_xmon_op = +static struct sysrq_key_op sysrq_xmon_op = { .handler = sysrq_handle_xmon, .help_msg = "Xmon", @@ -113,7 +113,7 @@ xmon_map_scc(void) { #ifdef CONFIG_PPC_MULTIPLATFORM volatile unsigned char *base; - + if (_machine == _MACH_Pmac) { struct device_node *np; unsigned long addr; @@ -178,7 +178,7 @@ xmon_map_scc(void) #endif TXRDY = 4; RXRDY = 1; - + np = find_devices("mac-io"); if (np && np->n_addrs) addr = np->addrs[0].address + 0x13020; diff -prauN linux-2.6.0-test5/arch/ppc64/Makefile wli-2.6.0-test5-bk12-25/arch/ppc64/Makefile --- linux-2.6.0-test5/arch/ppc64/Makefile 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc64/Makefile 2003-09-25 19:15:51.000000000 -0700 @@ -18,7 +18,13 @@ KERNELLOAD := 0xc000000000000000 LDFLAGS := -m elf64ppc LDFLAGS_vmlinux := -Bstatic -e $(KERNELLOAD) -Ttext $(KERNELLOAD) CFLAGS += -msoft-float -pipe -Wno-uninitialized -mminimal-toc \ - -mtraceback=full -mcpu=power4 + -mcpu=power4 + +have_zero_bss := $(shell if $(CC) -fno-zero-initialized-in-bss -S -o /dev/null -xc /dev/null > /dev/null 2>&1; then echo y; else echo n; fi) + +ifeq ($(have_zero_bss),y) +CFLAGS += -fno-zero-initialized-in-bss +endif head-y := arch/ppc64/kernel/head.o @@ -35,9 +41,11 @@ boottarget-$(CONFIG_PPC_ISERIES) := vmli $(boottarget-y): vmlinux $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@ -%_config: arch/ppc64/configs/%_defconfig - rm -f .config arch/ppc64/defconfig - cp -f arch/ppc64/configs/$(@:config=defconfig) arch/ppc64/defconfig +bootimage-$(CONFIG_PPC_PSERIES) := zImage +bootimage-$(CONFIG_PPC_ISERIES) := vmlinux.sm +BOOTIMAGE := $(bootimage-y) +install: vmlinux + $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(BOOTIMAGE) $@ archclean: $(Q)$(MAKE) $(clean)=$(boot) diff -prauN linux-2.6.0-test5/arch/ppc64/boot/Makefile wli-2.6.0-test5-bk12-25/arch/ppc64/boot/Makefile --- linux-2.6.0-test5/arch/ppc64/boot/Makefile 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc64/boot/Makefile 2003-09-25 19:15:51.000000000 -0700 @@ -122,5 +122,7 @@ $(obj)/imagesize.c: vmlinux awk '{printf "unsigned long vmlinux_memsize = 0x%s;\n", substr($$1,8)}' \ >> $(obj)/imagesize.c +install: $(CONFIGURE) $(obj)/$(BOOTIMAGE) + sh -x $(src)/install.sh "$(KERNELRELEASE)" "$(obj)/$(BOOTIMAGE)" "$(TOPDIR)/System.map" "$(INSTALL_PATH)" clean-files := $(patsubst $(obj)/%,%, $(obj-boot)) diff -prauN linux-2.6.0-test5/arch/ppc64/boot/install.sh wli-2.6.0-test5-bk12-25/arch/ppc64/boot/install.sh --- linux-2.6.0-test5/arch/ppc64/boot/install.sh 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/ppc64/boot/install.sh 2003-09-25 19:15:51.000000000 -0700 @@ -0,0 +1,41 @@ +#!/bin/sh +# +# arch/ppc64/boot/install.sh +# +# This file is subject to the terms and conditions of the GNU General Public +# License. See the file "COPYING" in the main directory of this archive +# for more details. +# +# Copyright (C) 1995 by Linus Torvalds +# +# Blatantly stolen from in arch/i386/boot/install.sh by Dave Hansen +# +# "make install" script for ppc64 architecture +# +# Arguments: +# $1 - kernel version +# $2 - kernel image file +# $3 - kernel map file +# $4 - default install path (blank if root directory) +# + +# User may have a custom install script + +if [ -x ~/bin/installkernel ]; then exec ~/bin/installkernel "$@"; fi +if [ -x /sbin/installkernel ]; then exec /sbin/installkernel "$@"; fi + +# Default install + +# this should work for both the pSeries zImage and the iSeries vmlinux.sm +image_name=`basename $2` + +if [ -f $4/$image_name ]; then + mv $4/$image_name $4/$image_name.old +fi + +if [ -f $4/System.map ]; then + mv $4/System.map $4/System.old +fi + +cat $2 > $4/$image_name +cp $3 $4/System.map diff -prauN linux-2.6.0-test5/arch/ppc64/defconfig wli-2.6.0-test5-bk12-25/arch/ppc64/defconfig --- linux-2.6.0-test5/arch/ppc64/defconfig 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc64/defconfig 2003-09-25 19:15:51.000000000 -0700 @@ -8,11 +8,13 @@ CONFIG_HAVE_DEC_LOCK=y CONFIG_EARLY_PRINTK=y CONFIG_COMPAT=y CONFIG_FRAME_POINTER=y +CONFIG_FORCE_MAX_ZONEORDER=13 # # Code maturity level options # CONFIG_EXPERIMENTAL=y +# CONFIG_BROKEN is not set # # General setup @@ -21,11 +23,14 @@ CONFIG_SWAP=y CONFIG_SYSVIPC=y # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y -CONFIG_LOG_BUF_SHIFT=15 +CONFIG_LOG_BUF_SHIFT=16 +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y # CONFIG_EMBEDDED is not set CONFIG_KALLSYMS=y CONFIG_FUTEX=y CONFIG_EPOLL=y +CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y @@ -72,7 +77,6 @@ CONFIG_PROC_DEVICETREE=y # # Generic Driver Options # -# CONFIG_FW_LOADER is not set # # Memory Technology Devices (MTD) @@ -99,7 +103,7 @@ CONFIG_BLK_DEV_FD=y # CONFIG_BLK_DEV_UMEM is not set CONFIG_BLK_DEV_LOOP=y # CONFIG_BLK_DEV_CRYPTOLOOP is not set -CONFIG_BLK_DEV_NBD=y +CONFIG_BLK_DEV_NBD=m CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM_SIZE=4096 CONFIG_BLK_DEV_INITRD=y @@ -127,9 +131,9 @@ CONFIG_CHR_DEV_SG=y # # Some SCSI devices (e.g. CD jukebox) support multiple LUNs # -# CONFIG_SCSI_MULTI_LUN is not set -# CONFIG_SCSI_REPORT_LUNS is not set -# CONFIG_SCSI_CONSTANTS is not set +CONFIG_SCSI_MULTI_LUN=y +CONFIG_SCSI_REPORT_LUNS=y +CONFIG_SCSI_CONSTANTS=y # CONFIG_SCSI_LOGGING is not set # @@ -178,7 +182,8 @@ CONFIG_MD_RAID0=y CONFIG_MD_RAID1=y CONFIG_MD_RAID5=y # CONFIG_MD_MULTIPATH is not set -# CONFIG_BLK_DEV_DM is not set +CONFIG_BLK_DEV_DM=y +CONFIG_DM_IOCTL_V4=y # # Fusion MPT device support @@ -206,9 +211,8 @@ CONFIG_NET=y CONFIG_PACKET=y # CONFIG_PACKET_MMAP is not set # CONFIG_NETLINK_DEV is not set -# CONFIG_NETFILTER is not set CONFIG_UNIX=y -# CONFIG_NET_KEY is not set +CONFIG_NET_KEY=m CONFIG_INET=y CONFIG_IP_MULTICAST=y # CONFIG_IP_ADVANCED_ROUTER is not set @@ -217,13 +221,17 @@ CONFIG_NET_IPIP=y # CONFIG_NET_IPGRE is not set # CONFIG_IP_MROUTE is not set # CONFIG_ARPD is not set -# CONFIG_INET_ECN is not set +CONFIG_INET_ECN=y CONFIG_SYN_COOKIES=y -# CONFIG_INET_AH is not set -# CONFIG_INET_ESP is not set -# CONFIG_INET_IPCOMP is not set +CONFIG_INET_AH=m +CONFIG_INET_ESP=m +CONFIG_INET_IPCOMP=m # CONFIG_IPV6 is not set -# CONFIG_XFRM_USER is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_NETFILTER is not set +CONFIG_XFRM=y +CONFIG_XFRM_USER=m # # SCTP Configuration (EXPERIMENTAL) @@ -233,8 +241,6 @@ CONFIG_IPV6_SCTP__=y # CONFIG_ATM is not set # CONFIG_VLAN_8021Q is not set # CONFIG_LLC is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set # CONFIG_X25 is not set # CONFIG_LAPB is not set # CONFIG_NET_DIVERT is not set @@ -258,10 +264,10 @@ CONFIG_NETDEVICES=y # ARCnet devices # # CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set +CONFIG_DUMMY=m +CONFIG_BONDING=m # CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set +CONFIG_TUN=m # CONFIG_ETHERTAP is not set # @@ -312,6 +318,7 @@ CONFIG_E1000=y # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_R8169 is not set +# CONFIG_SIS190 is not set # CONFIG_SK98LIN is not set # CONFIG_TIGON3 is not set @@ -321,7 +328,14 @@ CONFIG_E1000=y # CONFIG_IXGB is not set # CONFIG_FDDI is not set # CONFIG_HIPPI is not set -# CONFIG_PPP is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +CONFIG_PPPOE=m # CONFIG_SLIP is not set # @@ -489,26 +503,32 @@ CONFIG_RAW_DRIVER=y # File systems # CONFIG_EXT2_FS=y -# CONFIG_EXT2_FS_XATTR is not set +CONFIG_EXT2_FS_XATTR=y +CONFIG_EXT2_FS_POSIX_ACL=y +# CONFIG_EXT2_FS_SECURITY is not set CONFIG_EXT3_FS=y -# CONFIG_EXT3_FS_XATTR is not set +CONFIG_EXT3_FS_XATTR=y +CONFIG_EXT3_FS_POSIX_ACL=y +# CONFIG_EXT3_FS_SECURITY is not set CONFIG_JBD=y # CONFIG_JBD_DEBUG is not set +CONFIG_FS_MBCACHE=y CONFIG_REISERFS_FS=y # CONFIG_REISERFS_CHECK is not set # CONFIG_REISERFS_PROC_INFO is not set CONFIG_JFS_FS=y -# CONFIG_JFS_POSIX_ACL is not set +CONFIG_JFS_POSIX_ACL=y # CONFIG_JFS_DEBUG is not set # CONFIG_JFS_STATISTICS is not set -CONFIG_XFS_FS=y +CONFIG_FS_POSIX_ACL=y +CONFIG_XFS_FS=m # CONFIG_XFS_RT is not set # CONFIG_XFS_QUOTA is not set -# CONFIG_XFS_POSIX_ACL is not set +CONFIG_XFS_POSIX_ACL=y # CONFIG_MINIX_FS is not set # CONFIG_ROMFS_FS is not set # CONFIG_QUOTA is not set -CONFIG_AUTOFS_FS=y +CONFIG_AUTOFS_FS=m # CONFIG_AUTOFS4_FS is not set # @@ -517,7 +537,7 @@ CONFIG_AUTOFS_FS=y CONFIG_ISO9660_FS=y # CONFIG_JOLIET is not set # CONFIG_ZISOFS is not set -# CONFIG_UDF_FS is not set +CONFIG_UDF_FS=m # # DOS/FAT/NT Filesystems @@ -533,8 +553,9 @@ CONFIG_VFAT_FS=y CONFIG_PROC_FS=y # CONFIG_DEVFS_FS is not set CONFIG_DEVPTS_FS=y -# CONFIG_DEVPTS_FS_XATTR is not set -# CONFIG_TMPFS is not set +CONFIG_DEVPTS_FS_XATTR=y +# CONFIG_DEVPTS_FS_SECURITY is not set +CONFIG_TMPFS=y CONFIG_RAMFS=y # @@ -546,7 +567,7 @@ CONFIG_RAMFS=y # CONFIG_BEFS_FS is not set # CONFIG_BFS_FS is not set # CONFIG_EFS_FS is not set -# CONFIG_CRAMFS is not set +CONFIG_CRAMFS=y # CONFIG_VXFS_FS is not set # CONFIG_HPFS_FS is not set # CONFIG_QNX4FS_FS is not set @@ -561,15 +582,16 @@ CONFIG_NFS_V3=y CONFIG_NFS_V4=y CONFIG_NFSD=y CONFIG_NFSD_V3=y -# CONFIG_NFSD_V4 is not set +CONFIG_NFSD_V4=y CONFIG_NFSD_TCP=y CONFIG_LOCKD=y CONFIG_LOCKD_V4=y CONFIG_EXPORTFS=y CONFIG_SUNRPC=y -# CONFIG_SUNRPC_GSS is not set +CONFIG_SUNRPC_GSS=m +CONFIG_RPCSEC_GSS_KRB5=m # CONFIG_SMB_FS is not set -CONFIG_CIFS=y +CONFIG_CIFS=m # CONFIG_NCP_FS is not set # CONFIG_CODA_FS is not set # CONFIG_INTERMEZZO_FS is not set @@ -705,6 +727,7 @@ CONFIG_MAGIC_SYSRQ=y CONFIG_XMON=y CONFIG_XMON_DEFAULT=y # CONFIG_PPCDBG is not set +# CONFIG_DEBUG_INFO is not set # # Security options @@ -714,9 +737,27 @@ CONFIG_XMON_DEFAULT=y # # Cryptographic options # -# CONFIG_CRYPTO is not set +CONFIG_CRYPTO=y +CONFIG_CRYPTO_HMAC=y +CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=m +CONFIG_CRYPTO_SHA1=m +CONFIG_CRYPTO_SHA256=m +CONFIG_CRYPTO_SHA512=m +CONFIG_CRYPTO_DES=m +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_AES=m +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_DEFLATE=m +CONFIG_CRYPTO_TEST=m # # Library routines # CONFIG_CRC32=y +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=m diff -prauN linux-2.6.0-test5/arch/ppc64/kernel/asm-offsets.c wli-2.6.0-test5-bk12-25/arch/ppc64/kernel/asm-offsets.c --- linux-2.6.0-test5/arch/ppc64/kernel/asm-offsets.c 2003-09-08 12:50:12.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc64/kernel/asm-offsets.c 2003-09-25 19:15:51.000000000 -0700 @@ -83,9 +83,7 @@ int main(void) DEFINE(PACALPQUEUE, offsetof(struct paca_struct, lpQueuePtr)); DEFINE(PACATOC, offsetof(struct paca_struct, xTOC)); DEFINE(PACAEXCSP, offsetof(struct paca_struct, exception_sp)); - DEFINE(PACAHRDWINTSTACK, offsetof(struct paca_struct, xHrdIntStack)); DEFINE(PACAPROCENABLED, offsetof(struct paca_struct, xProcEnabled)); - DEFINE(PACAHRDWINTCOUNT, offsetof(struct paca_struct, xHrdIntCount)); DEFINE(PACADEFAULTDECR, offsetof(struct paca_struct, default_decr)); DEFINE(PACAPROFENABLED, offsetof(struct paca_struct, prof_enabled)); DEFINE(PACAPROFLEN, offsetof(struct paca_struct, prof_len)); diff -prauN linux-2.6.0-test5/arch/ppc64/kernel/chrp_setup.c wli-2.6.0-test5-bk12-25/arch/ppc64/kernel/chrp_setup.c --- linux-2.6.0-test5/arch/ppc64/kernel/chrp_setup.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc64/kernel/chrp_setup.c 2003-09-25 19:15:51.000000000 -0700 @@ -72,6 +72,7 @@ extern void openpic_init_IRQ(void); extern void find_and_init_phbs(void); +extern void pSeries_get_boot_time(struct rtc_time *rtc_time); extern void pSeries_get_rtc_time(struct rtc_time *rtc_time); extern int pSeries_set_rtc_time(struct rtc_time *rtc_time); void pSeries_calibrate_decr(void); @@ -256,7 +257,7 @@ chrp_init(unsigned long r3, unsigned lon ppc_md.power_off = rtas_power_off; ppc_md.halt = rtas_halt; - ppc_md.get_boot_time = pSeries_get_rtc_time; + ppc_md.get_boot_time = pSeries_get_boot_time; ppc_md.get_rtc_time = pSeries_get_rtc_time; ppc_md.set_rtc_time = pSeries_set_rtc_time; ppc_md.calibrate_decr = pSeries_calibrate_decr; diff -prauN linux-2.6.0-test5/arch/ppc64/kernel/eeh.c wli-2.6.0-test5-bk12-25/arch/ppc64/kernel/eeh.c --- linux-2.6.0-test5/arch/ppc64/kernel/eeh.c 2003-09-08 12:50:09.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc64/kernel/eeh.c 2003-09-25 19:15:51.000000000 -0700 @@ -115,8 +115,17 @@ unsigned long eeh_check_failure(void *to ret = rtas_call(ibm_read_slot_reset_state, 3, 3, rets, dn->eeh_config_addr, BUID_HI(dn->phb->buid), BUID_LO(dn->phb->buid)); if (ret == 0 && rets[1] == 1 && rets[0] >= 2) { - panic("EEH: MMIO failure (%ld) on device:\n %s %s\n", - rets[0], pci_name(dev), dev->dev.name); + /* + * XXX We should create a separate sysctl for this. + * + * Since the panic_on_oops sysctl is used to halt + * the system in light of potential corruption, we + * can use it here. + */ + if (panic_on_oops) + panic("EEH: MMIO failure (%ld) on device:\n%s\n", rets[0], pci_name(dev)); + else + printk("EEH: MMIO failure (%ld) on device:\n%s\n", rets[0], pci_name(dev)); } } eeh_false_positives++; diff -prauN linux-2.6.0-test5/arch/ppc64/kernel/head.S wli-2.6.0-test5-bk12-25/arch/ppc64/kernel/head.S --- linux-2.6.0-test5/arch/ppc64/kernel/head.S 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc64/kernel/head.S 2003-09-25 19:15:51.000000000 -0700 @@ -40,6 +40,15 @@ #define DO_SOFT_DISABLE #endif +/* copy saved SOFTE bit or EE bit from saved MSR depending + * if we are doing soft-disable or not + */ +#ifdef DO_SOFT_DISABLE +#define DO_COPY_EE() ld r20,SOFTE(r1) +#else +#define DO_COPY_EE() rldicl r20,r23,49,63 +#endif + /* * hcall interface to pSeries LPAR */ @@ -618,11 +627,7 @@ stab_bolted_user_return: ld r4,_DAR(r1) ld r5,_DSISR(r1) addi r3,r1,STACK_FRAME_OVERHEAD -#ifdef DO_SOFT_DISABLE - ld r20,SOFTE(r1) /* Copy saved SOFTE bit */ -#else - rldicl r20,r23,49,63 /* copy EE bit from saved MSR */ -#endif + DO_COPY_EE() li r6,0x300 bl .save_remaining_regs bl .do_page_fault @@ -644,12 +649,9 @@ DataAccessSLB_common: or. r3,r3,r3 /* Check return code */ beq fast_exception_return /* Return if we succeeded */ addi r3,r1,STACK_FRAME_OVERHEAD -#ifdef DO_SOFT_DISABLE - ld r20,SOFTE(r1) -#else - rldicl r20,r23,49,63 /* copy EE bit from saved MSR */ -#endif + DO_COPY_EE() li r6,0x380 + li r5,0 bl .save_remaining_regs bl .do_page_fault b .ret_from_except @@ -670,13 +672,9 @@ InstructionAccess_common: bl .do_hash_page_ISI /* Try to handle as hpte fault */ 1: mr r4,r22 - mr r5,r23 + rlwinm r5,r23,0,4,4 /* We only care about PR in error_code */ addi r3,r1,STACK_FRAME_OVERHEAD -#ifdef DO_SOFT_DISABLE - ld r20,SOFTE(r1) -#else - rldicl r20,r23,49,63 /* copy EE bit from saved MSR */ -#endif + DO_COPY_EE() li r6,0x400 bl .save_remaining_regs bl .do_page_fault @@ -692,12 +690,9 @@ InstructionAccessSLB_common: beq+ fast_exception_return /* Return if we succeeded */ addi r3,r1,STACK_FRAME_OVERHEAD -#ifdef DO_SOFT_DISABLE - ld r20,SOFTE(r1) -#else - rldicl r20,r23,49,63 /* copy EE bit from saved MSR */ -#endif + DO_COPY_EE() li r6,0x480 + li r5,0 bl .save_remaining_regs bl .do_page_fault b .ret_from_except @@ -710,70 +705,14 @@ HardwareInterrupt_entry: li r20,0 li r6,0x500 bl .save_remaining_regs - /* Determine if need to run do_irq on a hardware interrupt stack */ - /* The first invocation of do_irq will occur on the kernel */ - /* stack in the current stack */ - /* All other invocations of do_irq will run on the hardware */ - /* interrupt stack associated with the PACA of the current */ - /* processor. */ - /* */ - /* The call to do_irq will preserve the value of r14 - r31 */ - /* */ -/* - * XXX turn off interrupt stacks until the thread_info stuff is fixed. - * Otherwise we end up setting need_resched etc bits in the interrupt - * stack and they never get seen when we return to the process stack - Anton - */ -#if 0 - lbz r21,PACAHRDWINTCOUNT(r13) /* get hardware interrupt cnt */ - cmpi 0,r21,1 /* */ - addi r21,r21,1 /* incr hardware interrupt cnt*/ - stb r21,PACAHRDWINTCOUNT(r13) /* */ - bne 2f /* */ - - mr r14,r1 /* preserve current r1 */ - ld r1,PACAHRDWINTSTACK(r13) /* */ - std r14,0(r1) /* set the back chain */ bl .do_IRQ - lbz r22,PACAHRDWINTCOUNT(r13) /* get hardware interrupt cnt */ - cmp 0,r22,r21 /* debug test */ - bne 3f - subi r21,r21,1 - stb r21,PACAHRDWINTCOUNT(r13) /* */ - mr r1,r14 /* */ b .ret_from_except -#endif - -2: - bl .do_IRQ - -#if 0 - lbz r22,PACAHRDWINTCOUNT(r13) /* get hardware interrupt cnt */ - cmp 0,r22,r21 /* debug test */ - bne 3f /* */ - subi r21,r21,1 /* decr hardware interrupt cnt*/ - stb r21,PACAHRDWINTCOUNT(r13) /* */ -#endif - - b .ret_from_except - -3: - /* error - counts out of sync */ -#ifdef CONFIG_XMON - bl .xmon -#endif -4: b 4b - .globl Alignment_common Alignment_common: EXCEPTION_PROLOG_COMMON addi r3,r1,STACK_FRAME_OVERHEAD -#ifdef DO_SOFT_DISABLE - ld r20,SOFTE(r1) -#else - rldicl r20,r23,49,63 /* copy EE bit from saved MSR */ -#endif + DO_COPY_EE() li r6,0x600 bl .save_remaining_regs bl .AlignmentException @@ -783,11 +722,7 @@ Alignment_common: ProgramCheck_common: EXCEPTION_PROLOG_COMMON addi r3,r1,STACK_FRAME_OVERHEAD -#ifdef DO_SOFT_DISABLE - ld r20,SOFTE(r1) -#else - rldicl r20,r23,49,63 /* copy EE bit from saved MSR */ -#endif + DO_COPY_EE() li r6,0x700 bl .save_remaining_regs bl .ProgramCheckException @@ -798,11 +733,7 @@ FPUnavailable_common: EXCEPTION_PROLOG_COMMON bne .load_up_fpu /* if from user, just load it up */ addi r3,r1,STACK_FRAME_OVERHEAD -#ifdef DO_SOFT_DISABLE - ld r20,SOFTE(r1) -#else - rldicl r20,r23,49,63 /* copy EE bit from saved MSR */ -#endif + DO_COPY_EE() li r6,0x800 bl .save_remaining_regs bl .KernelFPUnavailableException @@ -818,11 +749,7 @@ SystemCall_common: beq+ HardwareInterrupt_entry 1: #endif -#ifdef DO_SOFT_DISABLE - ld r20,SOFTE(r1) -#else - rldicl r20,r23,49,63 /* copy EE bit from saved MSR */ -#endif + DO_COPY_EE() li r6,0xC00 bl .save_remaining_regs bl .DoSyscall @@ -1866,18 +1793,6 @@ _STATIC(start_here_common) li r5,0 std r0,PACAKSAVE(r13) - /* ptr to hardware interrupt stack for boot processor */ - LOADADDR(r3, hardware_int_paca0) - li r5,PAGE_SIZE - sldi r5,r5,3 - subi r5,r5,STACK_FRAME_OVERHEAD - - add r3,r3,r5 - std r3,PACAHRDWINTSTACK(r13) - - li r3,0 - stb r3,PACAHRDWINTCOUNT(r13) - /* Restore the parms passed in from the bootloader. */ mr r3,r31 mr r4,r30 @@ -1999,10 +1914,6 @@ swapper_pg_dir: ioremap_dir: .space 4096 - .globl hardware_int_paca0 -hardware_int_paca0: - .space 8*PAGE_SIZE - /* 1 page segment table per cpu (max 48, cpu0 allocated at STAB0_PHYS_ADDR) */ .globl stab_array stab_array: diff -prauN linux-2.6.0-test5/arch/ppc64/kernel/htab.c wli-2.6.0-test5-bk12-25/arch/ppc64/kernel/htab.c --- linux-2.6.0-test5/arch/ppc64/kernel/htab.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc64/kernel/htab.c 2003-09-25 19:15:51.000000000 -0700 @@ -197,7 +197,7 @@ pte_t *find_linux_pte(pgd_t *pgdir, unsi if (!pgd_none(*pg)) { pm = pmd_offset(pg, ea); - if (!pmd_none(*pm)) { + if (pmd_present(*pm)) { pt = pte_offset_kernel(pm, ea); pte = *pt; if (!pte_present(pte)) @@ -436,8 +436,12 @@ int hash_page(unsigned long ea, unsigned if (user_region && cpus_equal(mm->cpu_vm_mask, tmp)) local = 1; - ptep = find_linux_pte(pgdir, ea); - ret = __hash_page(ea, access, vsid, ptep, trap, local); + ret = hash_huge_page(mm, access, ea, vsid, local); + if (ret < 0) { + ptep = find_linux_pte(pgdir, ea); + ret = __hash_page(ea, access, vsid, ptep, trap, local); + } + spin_unlock(&mm->page_table_lock); return ret; diff -prauN linux-2.6.0-test5/arch/ppc64/kernel/irq.c wli-2.6.0-test5-bk12-25/arch/ppc64/kernel/irq.c --- linux-2.6.0-test5/arch/ppc64/kernel/irq.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc64/kernel/irq.c 2003-09-25 19:15:51.000000000 -0700 @@ -39,6 +39,7 @@ #include #include #include +#include #include #include @@ -350,14 +351,11 @@ skip: return 0; } -extern char *ppc_find_proc_name(unsigned *p, char *buf, unsigned buflen); - -static inline void handle_irq_event(int irq, struct pt_regs *regs, - struct irqaction *action) +static inline int handle_irq_event(int irq, struct pt_regs *regs, + struct irqaction *action) { int status = 0; int retval = 0; - struct irqaction *first_action = action; if (!(action->flags & SA_INTERRUPT)) local_irq_enable(); @@ -370,28 +368,88 @@ static inline void handle_irq_event(int if (status & SA_SAMPLE_RANDOM) add_interrupt_randomness(irq); local_irq_disable(); - if (retval != 1) { - static int count = 100; - char name_buf[256]; - if (count) { - count--; - if (retval) { - printk("irq event %d: bogus retval mask %x\n", - irq, retval); - } else { - printk("irq %d: nobody cared!\n", irq); - } - dump_stack(); - printk("handlers:\n"); - action = first_action; - do { - printk("[<%p>]", action->handler); - printk(" (%s)\n", - ppc_find_proc_name((unsigned *)action->handler, name_buf, 256)); - action = action->next; - } while (action); - } + return retval; +} + +static void __report_bad_irq(int irq, irq_desc_t *desc, irqreturn_t action_ret) +{ + struct irqaction *action; + + if (action_ret != IRQ_HANDLED && action_ret != IRQ_NONE) { + printk(KERN_ERR "irq event %d: bogus return value %x\n", + irq, action_ret); + } else { + printk(KERN_ERR "irq %d: nobody cared!\n", irq); + } + dump_stack(); + printk(KERN_ERR "handlers:\n"); + action = desc->action; + do { + printk(KERN_ERR "[<%p>]", action->handler); + print_symbol(" (%s)", + (unsigned long)action->handler); + printk("\n"); + action = action->next; + } while (action); +} + +static void report_bad_irq(int irq, irq_desc_t *desc, irqreturn_t action_ret) +{ + static int count = 100; + + if (count) { + count--; + __report_bad_irq(irq, desc, action_ret); + } +} + +static int noirqdebug; + +static int __init noirqdebug_setup(char *str) +{ + noirqdebug = 1; + printk("IRQ lockup detection disabled\n"); + return 1; +} + +__setup("noirqdebug", noirqdebug_setup); + +/* + * If 99,900 of the previous 100,000 interrupts have not been handled then + * assume that the IRQ is stuck in some manner. Drop a diagnostic and try to + * turn the IRQ off. + * + * (The other 100-of-100,000 interrupts may have been a correctly-functioning + * device sharing an IRQ with the failing one) + * + * Called under desc->lock + */ +static void note_interrupt(int irq, irq_desc_t *desc, irqreturn_t action_ret) +{ + if (action_ret != IRQ_HANDLED) { + desc->irqs_unhandled++; + if (action_ret != IRQ_NONE) + report_bad_irq(irq, desc, action_ret); } + + desc->irq_count++; + if (desc->irq_count < 100000) + return; + + desc->irq_count = 0; + if (desc->irqs_unhandled > 99900) { + /* + * The interrupt is stuck + */ + __report_bad_irq(irq, desc, action_ret); + /* + * Now kill the IRQ + */ + printk(KERN_EMERG "Disabling IRQ #%d\n", irq); + desc->status |= IRQ_DISABLED; + desc->handler->disable(irq); + } + desc->irqs_unhandled = 0; } /* @@ -462,10 +520,13 @@ void ppc_irq_dispatch_handler(struct pt_ * SMP environment. */ for (;;) { + irqreturn_t action_ret; + spin_unlock(&desc->lock); - handle_irq_event(irq, regs, action); + action_ret = handle_irq_event(irq, regs, action); spin_lock(&desc->lock); - + if (!noirqdebug) + note_interrupt(irq, desc, action_ret); if (likely(!(desc->status & IRQ_PENDING))) break; desc->status &= ~IRQ_PENDING; diff -prauN linux-2.6.0-test5/arch/ppc64/kernel/pSeries_lpar.c wli-2.6.0-test5-bk12-25/arch/ppc64/kernel/pSeries_lpar.c --- linux-2.6.0-test5/arch/ppc64/kernel/pSeries_lpar.c 2003-09-08 12:50:44.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc64/kernel/pSeries_lpar.c 2003-09-25 19:15:51.000000000 -0700 @@ -36,18 +36,6 @@ #include #include - -long plpar_pte_enter(unsigned long flags, - unsigned long ptex, - unsigned long new_pteh, unsigned long new_ptel, - unsigned long *old_pteh_ret, unsigned long *old_ptel_ret) -{ - unsigned long dummy, ret; - ret = plpar_hcall(H_ENTER, flags, ptex, new_pteh, new_ptel, - old_pteh_ret, old_ptel_ret, &dummy); - return(ret); -} - long plpar_pte_remove(unsigned long flags, unsigned long ptex, unsigned long avpn, @@ -83,7 +71,6 @@ long plpar_tce_get(unsigned long liobn, tce_ret, &dummy, &dummy); } - long plpar_tce_put(unsigned long liobn, unsigned long ioba, unsigned long tceval) @@ -104,10 +91,9 @@ long plpar_put_term_char(unsigned long t unsigned long len, const char *buffer) { - unsigned long dummy; unsigned long *lbuf = (unsigned long *)buffer; /* ToDo: alignment? */ - return plpar_hcall(H_PUT_TERM_CHAR, termno, len, - lbuf[0], lbuf[1], &dummy, &dummy, &dummy); + return plpar_hcall_norets(H_PUT_TERM_CHAR, termno, len, lbuf[0], + lbuf[1]); } static void tce_build_pSeriesLP(struct TceTable *tbl, long tcenum, @@ -287,12 +273,11 @@ int hvc_get_chars(int index, char *buf, int hvc_put_chars(int index, const char *buf, int count) { - unsigned long dummy; unsigned long *lbuf = (unsigned long *) buf; long ret; - ret = plpar_hcall(H_PUT_TERM_CHAR, index, count, lbuf[0], lbuf[1], - &dummy, &dummy, &dummy); + ret = plpar_hcall_norets(H_PUT_TERM_CHAR, index, count, lbuf[0], + lbuf[1]); if (ret == H_Success) return count; if (ret == H_Busy) @@ -318,7 +303,6 @@ int hvc_count(int *start_termno) - long pSeries_lpar_hpte_insert(unsigned long hpte_group, unsigned long va, unsigned long prpn, int secondary, unsigned long hpteflags, @@ -329,6 +313,7 @@ long pSeries_lpar_hpte_insert(unsigned l unsigned long flags; unsigned long slot; HPTE lhpte; + unsigned long dummy0, dummy1; /* Fill in the local HPTE with absolute rpn, avpn and flags */ lhpte.dw1.dword1 = 0; @@ -348,7 +333,6 @@ long pSeries_lpar_hpte_insert(unsigned l /* Now fill in the actual HPTE */ /* Set CEC cookie to 0 */ - /* Large page = 0 */ /* Zero page = 0 */ /* I-cache Invalidate = 0 */ /* I-cache synchronize = 0 */ @@ -359,19 +343,8 @@ long pSeries_lpar_hpte_insert(unsigned l if (hpteflags & (_PAGE_GUARDED|_PAGE_NO_CACHE)) lhpte.dw1.flags.flags &= ~_PAGE_COHERENT; - __asm__ __volatile__ ( - H_ENTER_r3 - "mr 4, %2\n" - "mr 5, %3\n" - "mr 6, %4\n" - "mr 7, %5\n" - HSC - "mr %0, 3\n" - "mr %1, 4\n" - : "=r" (lpar_rc), "=r" (slot) - : "r" (flags), "r" (hpte_group), "r" (lhpte.dw0.dword0), - "r" (lhpte.dw1.dword1) - : "r3", "r4", "r5", "r6", "r7", "cc"); + lpar_rc = plpar_hcall(H_ENTER, flags, hpte_group, lhpte.dw0.dword0, + lhpte.dw1.dword1, &slot, &dummy0, &dummy1); if (lpar_rc == H_PTEG_Full) return -1; diff -prauN linux-2.6.0-test5/arch/ppc64/kernel/pSeries_pci.c wli-2.6.0-test5-bk12-25/arch/ppc64/kernel/pSeries_pci.c --- linux-2.6.0-test5/arch/ppc64/kernel/pSeries_pci.c 2003-09-08 12:50:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc64/kernel/pSeries_pci.c 2003-09-25 19:15:51.000000000 -0700 @@ -427,6 +427,7 @@ unsigned long __init find_and_init_phbs( void pcibios_name_device(struct pci_dev *dev) { +#if 0 struct device_node *dn; /* @@ -446,6 +447,7 @@ void pcibios_name_device(struct pci_dev } } } +#endif } void __init pcibios_fixup_device_resources(struct pci_dev *dev, diff -prauN linux-2.6.0-test5/arch/ppc64/kernel/ppc_ksyms.c wli-2.6.0-test5-bk12-25/arch/ppc64/kernel/ppc_ksyms.c --- linux-2.6.0-test5/arch/ppc64/kernel/ppc_ksyms.c 2003-09-08 12:49:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc64/kernel/ppc_ksyms.c 2003-09-25 19:15:51.000000000 -0700 @@ -49,8 +49,6 @@ extern int sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg); extern int do_signal(sigset_t *, struct pt_regs *); -extern int register_ioctl32_conversion(unsigned int cmd, int (*handler)(unsigned int, unsigned int, unsigned long, struct file *)); -extern int unregister_ioctl32_conversion(unsigned int cmd); int abs(int); @@ -66,9 +64,6 @@ EXPORT_SYMBOL(disable_irq_nosync); EXPORT_SYMBOL(synchronize_irq); #endif /* CONFIG_SMP */ -EXPORT_SYMBOL(register_ioctl32_conversion); -EXPORT_SYMBOL(unregister_ioctl32_conversion); - EXPORT_SYMBOL(isa_io_base); EXPORT_SYMBOL(pci_io_base); diff -prauN linux-2.6.0-test5/arch/ppc64/kernel/process.c wli-2.6.0-test5-bk12-25/arch/ppc64/kernel/process.c --- linux-2.6.0-test5/arch/ppc64/kernel/process.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc64/kernel/process.c 2003-09-25 19:15:51.000000000 -0700 @@ -32,6 +32,7 @@ #include #include #include +#include #include #include @@ -130,12 +131,9 @@ struct task_struct *__switch_to(struct t return last; } -char *ppc_find_proc_name(unsigned *p, char *buf, unsigned buflen); - void show_regs(struct pt_regs * regs) { int i; - char name_buf[256]; printk("NIP: %016lX XER: %016lX LR: %016lX\n", regs->nip, regs->xer, regs->link); @@ -170,8 +168,7 @@ void show_regs(struct pt_regs * regs) * above info out without failing */ printk("NIP [%016lx] ", regs->nip); - printk("%s\n", ppc_find_proc_name((unsigned *)regs->nip, - name_buf, 256)); + print_symbol("%s\n", regs->nip); show_stack(current, (unsigned long *)regs->gpr[1]); } @@ -385,102 +382,6 @@ out: return error; } -void initialize_paca_hardware_interrupt_stack(void) -{ - int i; - unsigned long stack; - unsigned long end_of_stack =0; - - for (i=1; i < NR_CPUS; i++) { - if (!cpu_possible(i)) - continue; - /* Carve out storage for the hardware interrupt stack */ - stack = __get_free_pages(GFP_ATOMIC, get_order(8*PAGE_SIZE)); - - if ( !stack ) { - printk("ERROR, cannot find space for hardware stack.\n"); - panic(" no hardware stack "); - } - - - /* Store the stack value in the PACA for the processor */ - paca[i].xHrdIntStack = stack + (8*PAGE_SIZE) - STACK_FRAME_OVERHEAD; - paca[i].xHrdIntCount = 0; - - } - - /* - * __get_free_pages() might give us a page > KERNBASE+256M which - * is mapped with large ptes so we can't set up the guard page. - */ - if (cur_cpu_spec->cpu_features & CPU_FTR_16M_PAGE) - return; - - for (i=0; i < NR_CPUS; i++) { - if (!cpu_possible(i)) - continue; - /* set page at the top of stack to be protected - prevent overflow */ - end_of_stack = paca[i].xHrdIntStack - (8*PAGE_SIZE - STACK_FRAME_OVERHEAD); - ppc_md.hpte_updateboltedpp(PP_RXRX,end_of_stack); - } -} - -char *ppc_find_proc_name(unsigned *p, char *buf, unsigned buflen) -{ - unsigned long tb_flags; - unsigned short name_len; - unsigned long tb_start, code_start, code_ptr, code_offset; - unsigned int code_len; - unsigned long end; - - strcpy(buf, "Unknown"); - code_ptr = (unsigned long)p; - code_offset = 0; - - /* handle functions in text and init sections */ - if (((unsigned long)p >= (unsigned long)_stext) && - ((unsigned long)p < (unsigned long)_etext)) - end = (unsigned long)_etext; - else if (((unsigned long)p >= (unsigned long)__init_begin) && - ((unsigned long)p < (unsigned long)__init_end)) - end = (unsigned long)__init_end; - else - return buf; - - while ((unsigned long)p < end) { - if (*p == 0) { - tb_start = (unsigned long)p; - ++p; /* Point to traceback flags */ - tb_flags = *((unsigned long *)p); - p += 2; /* Skip over traceback flags */ - if (tb_flags & TB_NAME_PRESENT) { - if (tb_flags & TB_PARMINFO) - ++p; /* skip over parminfo data */ - if (tb_flags & TB_HAS_TBOFF) { - code_len = *p; /* get code length */ - code_start = tb_start - code_len; - code_offset = code_ptr - code_start + 1; - if (code_offset > 0x100000) - break; - ++p; /* skip over code size */ - } - name_len = *((unsigned short *)p); - if (name_len > (buflen-20)) - name_len = buflen-20; - memcpy(buf, ((char *)p)+2, name_len); - buf[name_len] = 0; - if (code_offset) - sprintf(buf+name_len, "+0x%lx", - code_offset-1); - } - break; - } - ++p; - } - - return buf; -} - /* * These bracket the sleeping functions.. */ @@ -520,7 +421,6 @@ void show_stack(struct task_struct *p, u unsigned long ip; unsigned long stack_page = (unsigned long)p->thread_info; int count = 0; - char name_buf[256]; unsigned long sp = (unsigned long)_sp; if (!p) @@ -539,8 +439,7 @@ void show_stack(struct task_struct *p, u if (__get_user(ip, (unsigned long *)(sp + 16))) break; printk("[%016lx] ", ip); - printk("%s\n", ppc_find_proc_name((unsigned *)ip, - name_buf, 256)); + print_symbol("%s\n", ip); } while (count++ < 32); } diff -prauN linux-2.6.0-test5/arch/ppc64/kernel/rtas.c wli-2.6.0-test5-bk12-25/arch/ppc64/kernel/rtas.c --- linux-2.6.0-test5/arch/ppc64/kernel/rtas.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc64/kernel/rtas.c 2003-09-25 19:15:51.000000000 -0700 @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -178,6 +179,26 @@ rtas_call(int token, int nargs, int nret return (ulong)((nret > 0) ? rtas_args->rets[0] : 0); } +/* Given an RTAS status code of 990n compute the hinted delay of 10^n + * (last digit) milliseconds. For now we bound at n=3 (1 sec). + */ +unsigned int +rtas_extended_busy_delay_time(int status) +{ + int order = status - 9900; + unsigned int ms; + + if (order < 0) + order = 0; /* RTC depends on this for -2 clock busy */ + else if (order > 3) + order = 3; /* bound */ + + /* Use microseconds for reasonable accuracy */ + for (ms = 1000; order > 0; order--) + ms = ms * 10; + return ms / (1000000/HZ); /* round down is fine */ +} + #define FLASH_BLOCK_LIST_VERSION (1UL) static void rtas_flash_firmware(void) diff -prauN linux-2.6.0-test5/arch/ppc64/kernel/rtc.c wli-2.6.0-test5-bk12-25/arch/ppc64/kernel/rtc.c --- linux-2.6.0-test5/arch/ppc64/kernel/rtc.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc64/kernel/rtc.c 2003-09-25 19:15:51.000000000 -0700 @@ -35,6 +35,7 @@ #include #include +#include #include #include #include @@ -340,20 +341,63 @@ void iSeries_get_boot_time(struct rtc_ti #endif #ifdef CONFIG_PPC_PSERIES +#define MAX_RTC_WAIT 5000 /* 5 sec */ +#define RTAS_CLOCK_BUSY (-2) +void pSeries_get_boot_time(struct rtc_time *rtc_tm) +{ + unsigned long ret[8]; + int error, wait_time; + unsigned long max_wait_tb; + + max_wait_tb = __get_tb() + tb_ticks_per_usec * 1000 * MAX_RTC_WAIT; + do { + error = rtas_call(rtas_token("get-time-of-day"), 0, 8, (void *)&ret); + if (error == RTAS_CLOCK_BUSY || rtas_is_extended_busy(error)) { + wait_time = rtas_extended_busy_delay_time(error); + /* This is boot time so we spin. */ + udelay(wait_time*1000); + error = RTAS_CLOCK_BUSY; + } + } while (error == RTAS_CLOCK_BUSY && (__get_tb() < max_wait_tb)); + + if (error != 0) { + printk(KERN_WARNING "error: reading the clock failed (%d)\n", + error); + return; + } + + rtc_tm->tm_sec = ret[5]; + rtc_tm->tm_min = ret[4]; + rtc_tm->tm_hour = ret[3]; + rtc_tm->tm_mday = ret[2]; + rtc_tm->tm_mon = ret[1] - 1; + rtc_tm->tm_year = ret[0] - 1900; +} + +/* NOTE: get_rtc_time will get an error if executed in interrupt context + * and if a delay is needed to read the clock. In this case we just + * silently return without updating rtc_tm. + */ void pSeries_get_rtc_time(struct rtc_time *rtc_tm) { unsigned long ret[8]; - int error; - int count; + int error, wait_time; + unsigned long max_wait_tb; - /* - * error -2 is clock busy, we keep retrying a few times to see - * if it will come good -- paulus - */ - count = 0; + max_wait_tb = __get_tb() + tb_ticks_per_usec * 1000 * MAX_RTC_WAIT; do { error = rtas_call(rtas_token("get-time-of-day"), 0, 8, (void *)&ret); - } while (error == -2 && ++count < 1000); + if (error == RTAS_CLOCK_BUSY || rtas_is_extended_busy(error)) { + if (in_interrupt()) { + printk(KERN_WARNING "error: reading clock would delay interrupt\n"); + return; /* delay not allowed */ + } + wait_time = rtas_extended_busy_delay_time(error); + set_current_state(TASK_INTERRUPTIBLE); + schedule_timeout(wait_time); + error = RTAS_CLOCK_BUSY; + } + } while (error == RTAS_CLOCK_BUSY && (__get_tb() < max_wait_tb)); if (error != 0) { printk(KERN_WARNING "error: reading the clock failed (%d)\n", @@ -371,20 +415,24 @@ void pSeries_get_rtc_time(struct rtc_tim int pSeries_set_rtc_time(struct rtc_time *tm) { - int error; - int count; + int error, wait_time; + unsigned long max_wait_tb; - /* - * error -2 is clock busy, we keep retrying a few times to see - * if it will come good -- paulus - */ - count = 0; + max_wait_tb = __get_tb() + tb_ticks_per_usec * 1000 * MAX_RTC_WAIT; do { error = rtas_call(rtas_token("set-time-of-day"), 7, 1, NULL, tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec, 0); - } while (error == -2 && ++count < 1000); + if (error == RTAS_CLOCK_BUSY || rtas_is_extended_busy(error)) { + if (in_interrupt()) + return 1; /* probably decrementer */ + wait_time = rtas_extended_busy_delay_time(error); + set_current_state(TASK_INTERRUPTIBLE); + schedule_timeout(wait_time); + error = RTAS_CLOCK_BUSY; + } + } while (error == RTAS_CLOCK_BUSY && (__get_tb() < max_wait_tb)); if (error != 0) printk(KERN_WARNING "error: setting the clock failed (%d)\n", diff -prauN linux-2.6.0-test5/arch/ppc64/kernel/semaphore.c wli-2.6.0-test5-bk12-25/arch/ppc64/kernel/semaphore.c --- linux-2.6.0-test5/arch/ppc64/kernel/semaphore.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc64/kernel/semaphore.c 2003-09-25 19:15:51.000000000 -0700 @@ -75,9 +75,8 @@ void __down(struct semaphore *sem) struct task_struct *tsk = current; DECLARE_WAITQUEUE(wait, tsk); - tsk->state = TASK_UNINTERRUPTIBLE; + __set_task_state(tsk, TASK_UNINTERRUPTIBLE); add_wait_queue_exclusive(&sem->wait, &wait); - smp_wmb(); /* * Try to get the semaphore. If the count is > 0, then we've @@ -87,10 +86,10 @@ void __down(struct semaphore *sem) */ while (__sem_update_count(sem, -1) <= 0) { schedule(); - tsk->state = TASK_UNINTERRUPTIBLE; + set_task_state(tsk, TASK_UNINTERRUPTIBLE); } remove_wait_queue(&sem->wait, &wait); - tsk->state = TASK_RUNNING; + __set_task_state(tsk, TASK_RUNNING); /* * If there are any more sleepers, wake one of them up so @@ -106,9 +105,8 @@ int __down_interruptible(struct semaphor struct task_struct *tsk = current; DECLARE_WAITQUEUE(wait, tsk); - tsk->state = TASK_INTERRUPTIBLE; + __set_task_state(tsk, TASK_INTERRUPTIBLE); add_wait_queue_exclusive(&sem->wait, &wait); - smp_wmb(); while (__sem_update_count(sem, -1) <= 0) { if (signal_pending(current)) { @@ -122,10 +120,11 @@ int __down_interruptible(struct semaphor break; } schedule(); - tsk->state = TASK_INTERRUPTIBLE; + set_task_state(tsk, TASK_INTERRUPTIBLE); } - tsk->state = TASK_RUNNING; remove_wait_queue(&sem->wait, &wait); + __set_task_state(tsk, TASK_RUNNING); + wake_up(&sem->wait); return retval; } diff -prauN linux-2.6.0-test5/arch/ppc64/kernel/stab.c wli-2.6.0-test5-bk12-25/arch/ppc64/kernel/stab.c --- linux-2.6.0-test5/arch/ppc64/kernel/stab.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc64/kernel/stab.c 2003-09-25 19:15:51.000000000 -0700 @@ -221,15 +221,18 @@ write_entry: } static inline void __ste_allocate(unsigned long esid, unsigned long vsid, - int kernel_segment) + int kernel_segment, mm_context_t context) { if (cur_cpu_spec->cpu_features & CPU_FTR_SLB) { + int large = 0; + #ifndef CONFIG_PPC_ISERIES if (REGION_ID(esid << SID_SHIFT) == KERNEL_REGION_ID) - make_slbe(esid, vsid, 1, kernel_segment); - else + large = 1; + else if (REGION_ID(esid << SID_SHIFT) == USER_REGION_ID) + large = in_hugepage_area(context, esid << SID_SHIFT); #endif - make_slbe(esid, vsid, 0, kernel_segment); + make_slbe(esid, vsid, large, kernel_segment); } else { unsigned char top_entry, stab_entry, *segments; @@ -255,6 +258,7 @@ int ste_allocate(unsigned long ea) { unsigned long vsid, esid; int kernel_segment = 0; + mm_context_t context; PMC_SW_PROCESSOR(stab_faults); @@ -266,16 +270,18 @@ int ste_allocate(unsigned long ea) if (REGION_ID(ea) >= KERNEL_REGION_ID) { kernel_segment = 1; vsid = get_kernel_vsid(ea); + context = REGION_ID(ea); } else { - struct mm_struct *mm = current->mm; - if (mm) - vsid = get_vsid(mm->context, ea); - else + if (! current->mm) return 1; + + context = current->mm->context; + + vsid = get_vsid(context, ea); } esid = GET_ESID(ea); - __ste_allocate(esid, vsid, kernel_segment); + __ste_allocate(esid, vsid, kernel_segment, context); if (!(cur_cpu_spec->cpu_features & CPU_FTR_SLB)) { /* Order update */ asm volatile("sync":::"memory"); @@ -302,7 +308,7 @@ static void preload_stab(struct task_str for (esid = 0; esid < 16; esid++) { unsigned long ea = esid << SID_SHIFT; vsid = get_vsid(mm->context, ea); - __ste_allocate(esid, vsid, 0); + __ste_allocate(esid, vsid, 0, mm->context); } } else { unsigned long pc = KSTK_EIP(tsk); @@ -316,7 +322,7 @@ static void preload_stab(struct task_str (REGION_ID(pc) >= KERNEL_REGION_ID)) return; vsid = get_vsid(mm->context, pc); - __ste_allocate(GET_ESID(pc), vsid, 0); + __ste_allocate(GET_ESID(pc), vsid, 0, mm->context); } if (stack && (pc_segment != stack_segment)) { @@ -324,7 +330,7 @@ static void preload_stab(struct task_str (REGION_ID(stack) >= KERNEL_REGION_ID)) return; vsid = get_vsid(mm->context, stack); - __ste_allocate(GET_ESID(stack), vsid, 0); + __ste_allocate(GET_ESID(stack), vsid, 0, mm->context); } } diff -prauN linux-2.6.0-test5/arch/ppc64/kernel/sys_ppc32.c wli-2.6.0-test5-bk12-25/arch/ppc64/kernel/sys_ppc32.c --- linux-2.6.0-test5/arch/ppc64/kernel/sys_ppc32.c 2003-09-08 12:50:17.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc64/kernel/sys_ppc32.c 2003-09-25 19:15:51.000000000 -0700 @@ -748,16 +748,16 @@ int cp_compat_stat(struct kstat *stat, s { int err; - if (stat->size > MAX_NON_LFS) - return -EOVERFLOW; + if (stat->size > MAX_NON_LFS || !new_valid_dev(stat->dev) || + !new_valid_dev(stat->rdev)) - err = put_user(stat->dev, &statbuf->st_dev); + err = put_user(new_encode_dev(stat->dev), &statbuf->st_dev); err |= put_user(stat->ino, &statbuf->st_ino); err |= put_user(stat->mode, &statbuf->st_mode); err |= put_user(stat->nlink, &statbuf->st_nlink); err |= put_user(stat->uid, &statbuf->st_uid); err |= put_user(stat->gid, &statbuf->st_gid); - err |= put_user(stat->rdev, &statbuf->st_rdev); + err |= put_user(new_encode_dev(stat->rdev), &statbuf->st_rdev); err |= put_user(stat->size, &statbuf->st_size); err |= put_user(stat->atime.tv_sec, &statbuf->st_atime); err |= put_user(0, &statbuf->__unused1); @@ -1243,16 +1243,19 @@ asmlinkage long sys32_settimeofday(struc } -struct msgbuf32 { s32 mtype; char mtext[1]; }; +struct msgbuf32 { + compat_long_t mtype; + char mtext[1]; +}; struct semid_ds32 { struct ipc_perm sem_perm; compat_time_t sem_otime; compat_time_t sem_ctime; - u32 sem_base; - u32 sem_pending; - u32 sem_pending_last; - u32 undo; + compat_uptr_t sem_base; + compat_uptr_t sem_pending; + compat_uptr_t sem_pending_last; + compat_uptr_t undo; unsigned short sem_nsems; }; @@ -1262,21 +1265,20 @@ struct semid64_ds32 { compat_time_t sem_otime; unsigned int __unused2; compat_time_t sem_ctime; - u32 sem_nsems; - u32 __unused3; - u32 __unused4; + compat_ulong_t sem_nsems; + compat_ulong_t __unused3; + compat_ulong_t __unused4; }; -struct msqid_ds32 -{ +struct msqid_ds32 { struct ipc_perm msg_perm; - u32 msg_first; - u32 msg_last; + compat_uptr_t msg_first; + compat_uptr_t msg_last; compat_time_t msg_stime; compat_time_t msg_rtime; compat_time_t msg_ctime; - u32 msg_lcbytes; - u32 msg_lqbytes; + compat_ulong_t msg_lcbytes; + compat_ulong_t msg_lqbytes; unsigned short msg_cbytes; unsigned short msg_qnum; unsigned short msg_qbytes; @@ -1292,13 +1294,13 @@ struct msqid64_ds32 { compat_time_t msg_rtime; unsigned int __unused3; compat_time_t msg_ctime; - unsigned int msg_cbytes; - unsigned int msg_qnum; - unsigned int msg_qbytes; + compat_ulong_t msg_cbytes; + compat_ulong_t msg_qnum; + compat_ulong_t msg_qbytes; compat_pid_t msg_lspid; compat_pid_t msg_lrpid; - unsigned int __unused4; - unsigned int __unused5; + compat_ulong_t __unused4; + compat_ulong_t __unused5; }; struct shmid_ds32 { @@ -1311,8 +1313,8 @@ struct shmid_ds32 { compat_ipc_pid_t shm_lpid; unsigned short shm_nattch; unsigned short __unused; - unsigned int __unused2; - unsigned int __unused3; + compat_uptr_t __unused2; + compat_uptr_t __unused3; }; struct shmid64_ds32 { @@ -1327,9 +1329,9 @@ struct shmid64_ds32 { compat_size_t shm_segsz; compat_pid_t shm_cpid; compat_pid_t shm_lpid; - unsigned int shm_nattch; - unsigned int __unused5; - unsigned int __unused6; + compat_ulong_t shm_nattch; + compat_ulong_t __unused5; + compat_ulong_t __unused6; }; /* @@ -1350,7 +1352,7 @@ static long do_sys32_semctl(int first, i err = -EFAULT; if (get_user(pad, (u32 *)uptr)) return err; - if (third == SETVAL) + if ((third & ~IPC_64) == SETVAL) fourth.val = (int)pad; else fourth.__pad = (void *)A(pad); diff -prauN linux-2.6.0-test5/arch/ppc64/kernel/syscalls.c wli-2.6.0-test5-bk12-25/arch/ppc64/kernel/syscalls.c --- linux-2.6.0-test5/arch/ppc64/kernel/syscalls.c 2003-09-08 12:50:16.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc64/kernel/syscalls.c 2003-09-25 19:15:51.000000000 -0700 @@ -1,5 +1,5 @@ /* - * linux/arch/ppc/kernel/sys_ppc.c + * linux/arch/ppc64/kernel/sys_ppc.c * * PowerPC version * Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org) @@ -40,7 +40,6 @@ #include #include #include -#include #include extern unsigned long wall_jiffies; @@ -79,6 +78,7 @@ sys_ipc (uint call, int first, int secon case SEMCTL: { union semun fourth; + ret = -EINVAL; if (!ptr) break; if ((ret = get_user(fourth.__pad, (void **)ptr))) @@ -94,6 +94,7 @@ sys_ipc (uint call, int first, int secon case 0: { struct ipc_kludge tmp; + ret = -EINVAL; if (!ptr) break; if ((ret = copy_from_user(&tmp, @@ -127,6 +128,7 @@ sys_ipc (uint call, int first, int secon break; } case 1: /* iBCS2 emulator entry point */ + ret = -EINVAL; if (!segment_eq(get_fs(), get_ds())) break; ret = sys_shmat (first, (char *) ptr, second, diff -prauN linux-2.6.0-test5/arch/ppc64/kernel/time.c wli-2.6.0-test5-bk12-25/arch/ppc64/kernel/time.c --- linux-2.6.0-test5/arch/ppc64/kernel/time.c 2003-09-08 12:50:28.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc64/kernel/time.c 2003-09-25 19:15:51.000000000 -0700 @@ -307,6 +307,15 @@ int timer_interrupt(struct pt_regs * reg return 1; } +/* + * Scheduler clock - returns current time in nanosec units. + * + * This is wrong, but my CPUs run at 1GHz, so nyer nyer. + */ +unsigned long long sched_clock(void) +{ + return get_tb(); +} /* * This version of gettimeofday has microsecond resolution. diff -prauN linux-2.6.0-test5/arch/ppc64/kernel/vmlinux.lds.S wli-2.6.0-test5-bk12-25/arch/ppc64/kernel/vmlinux.lds.S --- linux-2.6.0-test5/arch/ppc64/kernel/vmlinux.lds.S 2003-09-08 12:50:19.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc64/kernel/vmlinux.lds.S 2003-09-25 19:15:51.000000000 -0700 @@ -137,4 +137,9 @@ SECTIONS . = ALIGN(4096); _end = . ; PROVIDE (end = .); + + /* Sections to be discarded. */ + /DISCARD/ : { + *(.exitcall.exit) + } } diff -prauN linux-2.6.0-test5/arch/ppc64/kernel/xics.c wli-2.6.0-test5-bk12-25/arch/ppc64/kernel/xics.c --- linux-2.6.0-test5/arch/ppc64/kernel/xics.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc64/kernel/xics.c 2003-09-25 19:15:51.000000000 -0700 @@ -267,6 +267,15 @@ void xics_disable_irq(u_int virq) irq, call_status); return; } + + /* Have to set XIVE to 0xff to be able to remove a slot */ + call_status = rtas_call(ibm_set_xive, 3, 1, NULL, irq, default_server, + 0xff); + if (call_status != 0) { + printk("xics_disable_irq: irq=%x: ibm_set_xive(0xff) returned %lx\n", + irq, call_status); + return; + } } void xics_end_irq(u_int irq) @@ -375,12 +384,12 @@ void xics_init_IRQ(void) int i; unsigned long intr_size = 0; struct device_node *np; - uint *ireg, ilen, indx=0; + uint *ireg, ilen, indx = 0; unsigned long intr_base = 0; struct xics_interrupt_node { - unsigned long long addr; - unsigned long long size; - } inodes[NR_CPUS*2]; + unsigned long addr; + unsigned long size; + } inodes[NR_CPUS]; ppc64_boot_msg(0x20, "XICS Init"); diff -prauN linux-2.6.0-test5/arch/ppc64/mm/Makefile wli-2.6.0-test5-bk12-25/arch/ppc64/mm/Makefile --- linux-2.6.0-test5/arch/ppc64/mm/Makefile 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc64/mm/Makefile 2003-09-25 19:15:51.000000000 -0700 @@ -6,3 +6,4 @@ EXTRA_CFLAGS += -mno-minimal-toc obj-y := fault.o init.o extable.o imalloc.o obj-$(CONFIG_DISCONTIGMEM) += numa.o +obj-$(CONFIG_HUGETLB_PAGE) += hugetlbpage.o diff -prauN linux-2.6.0-test5/arch/ppc64/mm/fault.c wli-2.6.0-test5-bk12-25/arch/ppc64/mm/fault.c --- linux-2.6.0-test5/arch/ppc64/mm/fault.c 2003-09-08 12:50:19.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc64/mm/fault.c 2003-09-25 19:15:51.000000000 -0700 @@ -46,8 +46,10 @@ int debugger_kernel_faults = 1; void bad_page_fault(struct pt_regs *, unsigned long, int); /* - * For 600- and 800-family processors, the error_code parameter is DSISR - * for a data fault, SRR1 for an instruction fault. + * The error_code parameter is + * - DSISR for a non-SLB data access fault, + * - SRR1 & 0x08000000 for a non-SLB instruction access fault + * - 0 any SLB fault. */ void do_page_fault(struct pt_regs *regs, unsigned long address, unsigned long error_code) @@ -58,17 +60,6 @@ void do_page_fault(struct pt_regs *regs, unsigned long code = SEGV_MAPERR; unsigned long is_write = error_code & 0x02000000; - /* - * Fortunately the bit assignments in SRR1 for an instruction - * fault and DSISR for a data fault are mostly the same for the - * bits we are interested in. But there are some bits which - * indicate errors in DSISR but can validly be set in SRR1. - */ - if (regs->trap == 0x400) - error_code &= 0x48200000; - else if (regs->trap != 0x300) /* ensure error_code is 0 on SLB miss */ - error_code = 0; - #ifdef CONFIG_DEBUG_KERNEL if (debugger_fault_handler && (regs->trap == 0x300 || regs->trap == 0x380)) { diff -prauN linux-2.6.0-test5/arch/ppc64/mm/hugetlbpage.c wli-2.6.0-test5-bk12-25/arch/ppc64/mm/hugetlbpage.c --- linux-2.6.0-test5/arch/ppc64/mm/hugetlbpage.c 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/arch/ppc64/mm/hugetlbpage.c 2003-09-25 19:15:51.000000000 -0700 @@ -0,0 +1,925 @@ +/* + * PPC64 (POWER4) Huge TLB Page Support for Kernel. + * + * Copyright (C) 2003 David Gibson, IBM Corporation. + * + * Based on the IA-32 version: + * Copyright (C) 2002, Rohit Seth + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +int htlbpage_max; + +/* This lock protects the two counters and list below */ +static spinlock_t htlbpage_lock = SPIN_LOCK_UNLOCKED; + +static int htlbpage_free; /* = 0 */ +static int htlbpage_total; /* = 0 */ +static struct list_head hugepage_freelists[MAX_NUMNODES]; + +static void enqueue_huge_page(struct page *page) +{ + list_add(&page->list, + &hugepage_freelists[page_zone(page)->zone_pgdat->node_id]); +} + +/* XXX make this a sysctl */ +unsigned long largepage_roundrobin = 1; + +static struct page *dequeue_huge_page(void) +{ + static int nid = 0; + struct page *page = NULL; + int i; + + if (!largepage_roundrobin) + nid = numa_node_id(); + + for (i = 0; i < numnodes; i++) { + if (!list_empty(&hugepage_freelists[nid])) + break; + nid = (nid + 1) % numnodes; + } + + if (!list_empty(&hugepage_freelists[nid])) { + page = list_entry(hugepage_freelists[nid].next, struct page, list); + list_del(&page->list); + } + + if (largepage_roundrobin) + nid = (nid + 1) % numnodes; + + return page; +} + +static struct page *alloc_fresh_huge_page(void) +{ + static int nid = 0; + struct page *page; + + page = alloc_pages_node(nid, GFP_HIGHUSER, HUGETLB_PAGE_ORDER); + if (!page) + return NULL; + + nid = page_zone(page)->zone_pgdat->node_id; + nid = (nid + 1) % numnodes; + return page; +} + +/* HugePTE layout: + * + * 31 30 ... 15 14 13 12 10 9 8 7 6 5 4 3 2 1 0 + * PFN>>12..... - - - - - - HASH_IX.... 2ND HASH RW - HG=1 + */ + +#define HUGEPTE_SHIFT 15 +#define _HUGEPAGE_PFN 0xffff8000 +#define _HUGEPAGE_BAD 0x00007f00 +#define _HUGEPAGE_HASHPTE 0x00000008 +#define _HUGEPAGE_SECONDARY 0x00000010 +#define _HUGEPAGE_GROUP_IX 0x000000e0 +#define _HUGEPAGE_HPTEFLAGS (_HUGEPAGE_HASHPTE | _HUGEPAGE_SECONDARY | \ + _HUGEPAGE_GROUP_IX) +#define _HUGEPAGE_RW 0x00000004 + +typedef struct {unsigned int val;} hugepte_t; +#define hugepte_val(hugepte) ((hugepte).val) +#define __hugepte(x) ((hugepte_t) { (x) } ) +#define hugepte_pfn(x) \ + ((unsigned long)(hugepte_val(x)>>HUGEPTE_SHIFT) << HUGETLB_PAGE_ORDER) +#define mk_hugepte(page,wr) __hugepte( \ + ((page_to_pfn(page)>>HUGETLB_PAGE_ORDER) << HUGEPTE_SHIFT ) \ + | (!!(wr) * _HUGEPAGE_RW) | _PMD_HUGEPAGE ) + +#define hugepte_bad(x) ( !(hugepte_val(x) & _PMD_HUGEPAGE) || \ + (hugepte_val(x) & _HUGEPAGE_BAD) ) +#define hugepte_page(x) pfn_to_page(hugepte_pfn(x)) +#define hugepte_none(x) (!(hugepte_val(x) & _HUGEPAGE_PFN)) + + +static void free_huge_page(struct page *page); +static void flush_hash_hugepage(mm_context_t context, unsigned long ea, + hugepte_t pte, int local); + +static inline unsigned int hugepte_update(hugepte_t *p, unsigned int clr, + unsigned int set) +{ + unsigned int old, tmp; + + __asm__ __volatile__( + "1: lwarx %0,0,%3 # pte_update\n\ + andc %1,%0,%4 \n\ + or %1,%1,%5 \n\ + stwcx. %1,0,%3 \n\ + bne- 1b" + : "=&r" (old), "=&r" (tmp), "=m" (*p) + : "r" (p), "r" (clr), "r" (set), "m" (*p) + : "cc" ); + return old; +} + +static inline void set_hugepte(hugepte_t *ptep, hugepte_t pte) +{ + hugepte_update(ptep, ~_HUGEPAGE_HPTEFLAGS, + hugepte_val(pte) & ~_HUGEPAGE_HPTEFLAGS); +} + +static struct page *alloc_hugetlb_page(void) +{ + int i; + struct page *page; + + spin_lock(&htlbpage_lock); + page = dequeue_huge_page(); + if (!page) { + spin_unlock(&htlbpage_lock); + return NULL; + } + + htlbpage_free--; + spin_unlock(&htlbpage_lock); + set_page_count(page, 1); + page->lru.prev = (void *)free_huge_page; + for (i = 0; i < (HPAGE_SIZE/PAGE_SIZE); ++i) + clear_highpage(&page[i]); + return page; +} + +static hugepte_t *hugepte_alloc(struct mm_struct *mm, unsigned long addr) +{ + pgd_t *pgd; + pmd_t *pmd = NULL; + + BUG_ON(!in_hugepage_area(mm->context, addr)); + + pgd = pgd_offset(mm, addr); + pmd = pmd_alloc(mm, pgd, addr); + + /* We shouldn't find a (normal) PTE page pointer here */ + BUG_ON(!pmd_none(*pmd) && !pmd_hugepage(*pmd)); + + return (hugepte_t *)pmd; +} + +static hugepte_t *hugepte_offset(struct mm_struct *mm, unsigned long addr) +{ + pgd_t *pgd; + pmd_t *pmd = NULL; + + BUG_ON(!in_hugepage_area(mm->context, addr)); + + pgd = pgd_offset(mm, addr); + pmd = pmd_offset(pgd, addr); + + /* We shouldn't find a (normal) PTE page pointer here */ + BUG_ON(!pmd_none(*pmd) && !pmd_hugepage(*pmd)); + + return (hugepte_t *)pmd; +} + +static void setup_huge_pte(struct mm_struct *mm, struct page *page, + hugepte_t *ptep, int write_access) +{ + hugepte_t entry; + int i; + + mm->rss += (HPAGE_SIZE / PAGE_SIZE); + entry = mk_hugepte(page, write_access); + for (i = 0; i < HUGEPTE_BATCH_SIZE; i++) + set_hugepte(ptep+i, entry); +} + +static void teardown_huge_pte(hugepte_t *ptep) +{ + int i; + + for (i = 0; i < HUGEPTE_BATCH_SIZE; i++) + pmd_clear((pmd_t *)(ptep+i)); +} + +/* + * This function checks for proper alignment of input addr and len parameters. + */ +int is_aligned_hugepage_range(unsigned long addr, unsigned long len) +{ + if (len & ~HPAGE_MASK) + return -EINVAL; + if (addr & ~HPAGE_MASK) + return -EINVAL; + if (! is_hugepage_only_range(addr, len)) + return -EINVAL; + return 0; +} + +static void do_slbia(void *unused) +{ + asm volatile ("isync; slbia; isync":::"memory"); +} + +/* Activate the low hpage region for 32bit processes. mmap_sem must + * be held*/ +static int open_32bit_htlbpage_range(struct mm_struct *mm) +{ + struct vm_area_struct *vma; + unsigned long addr; + + if (mm->context & CONTEXT_LOW_HPAGES) + return 0; /* The window is already open */ + + /* Check no VMAs are in the region */ + vma = find_vma(mm, TASK_HPAGE_BASE_32); + + if (vma && (vma->vm_start < TASK_HPAGE_END_32)) + return -EBUSY; + + /* Clean up any leftover PTE pages in the region */ + spin_lock(&mm->page_table_lock); + for (addr = TASK_HPAGE_BASE_32; addr < TASK_HPAGE_END_32; + addr += PMD_SIZE) { + pgd_t *pgd = pgd_offset(mm, addr); + pmd_t *pmd = pmd_offset(pgd, addr); + + if (! pmd_none(*pmd)) { + struct page *page = pmd_page(*pmd); + pte_t *pte = (pte_t *)pmd_page_kernel(*pmd); + int i; + + /* No VMAs, so there should be no PTEs, check + * just in case. */ + for (i = 0; i < PTRS_PER_PTE; i++) { + BUG_ON(! pte_none(*pte)); + pte++; + } + + pmd_clear(pmd); + pgtable_remove_rmap(page); + pte_free(page); + } + } + spin_unlock(&mm->page_table_lock); + + /* FIXME: do we need to scan for PTEs too? */ + + mm->context |= CONTEXT_LOW_HPAGES; + + /* the context change must make it to memory before the slbia, + * so that further SLB misses do the right thing. */ + mb(); + + on_each_cpu(do_slbia, NULL, 0, 1); + + return 0; +} + +int copy_hugetlb_page_range(struct mm_struct *dst, struct mm_struct *src, + struct vm_area_struct *vma) +{ + hugepte_t *src_pte, *dst_pte, entry; + struct page *ptepage; + unsigned long addr = vma->vm_start; + unsigned long end = vma->vm_end; + + while (addr < end) { + BUG_ON(! in_hugepage_area(src->context, addr)); + BUG_ON(! in_hugepage_area(dst->context, addr)); + + dst_pte = hugepte_alloc(dst, addr); + if (!dst_pte) + return -ENOMEM; + + src_pte = hugepte_offset(src, addr); + entry = *src_pte; + + if ((addr % HPAGE_SIZE) == 0) { + /* This is the first hugepte in a batch */ + ptepage = hugepte_page(entry); + get_page(ptepage); + dst->rss += (HPAGE_SIZE / PAGE_SIZE); + } + set_hugepte(dst_pte, entry); + + + addr += PMD_SIZE; + } + return 0; +} + +int +follow_hugetlb_page(struct mm_struct *mm, struct vm_area_struct *vma, + struct page **pages, struct vm_area_struct **vmas, + unsigned long *position, int *length, int i) +{ + unsigned long vpfn, vaddr = *position; + int remainder = *length; + + WARN_ON(!is_vm_hugetlb_page(vma)); + + vpfn = vaddr/PAGE_SIZE; + while (vaddr < vma->vm_end && remainder) { + BUG_ON(!in_hugepage_area(mm->context, vaddr)); + + if (pages) { + hugepte_t *pte; + struct page *page; + + pte = hugepte_offset(mm, vaddr); + + /* hugetlb should be locked, and hence, prefaulted */ + WARN_ON(!pte || hugepte_none(*pte)); + + page = &hugepte_page(*pte)[vpfn % (HPAGE_SIZE/PAGE_SIZE)]; + + WARN_ON(!PageCompound(page)); + + get_page(page); + pages[i] = page; + } + + if (vmas) + vmas[i] = vma; + + vaddr += PAGE_SIZE; + ++vpfn; + --remainder; + ++i; + } + + *length = remainder; + *position = vaddr; + + return i; +} + +struct page * +follow_huge_addr(struct mm_struct *mm, + struct vm_area_struct *vma, unsigned long address, int write) +{ + return NULL; +} + +struct vm_area_struct *hugepage_vma(struct mm_struct *mm, unsigned long addr) +{ + return NULL; +} + +int pmd_huge(pmd_t pmd) +{ + return pmd_hugepage(pmd); +} + +struct page * +follow_huge_pmd(struct mm_struct *mm, unsigned long address, + pmd_t *pmd, int write) +{ + struct page *page; + + BUG_ON(! pmd_hugepage(*pmd)); + + page = hugepte_page(*(hugepte_t *)pmd); + if (page) { + page += ((address & ~HPAGE_MASK) >> PAGE_SHIFT); + get_page(page); + } + return page; +} + +static void free_huge_page(struct page *page) +{ + BUG_ON(page_count(page)); + BUG_ON(page->mapping); + + INIT_LIST_HEAD(&page->list); + + spin_lock(&htlbpage_lock); + enqueue_huge_page(page); + htlbpage_free++; + spin_unlock(&htlbpage_lock); +} + +void huge_page_release(struct page *page) +{ + if (!put_page_testzero(page)) + return; + + free_huge_page(page); +} + +void unmap_hugepage_range(struct vm_area_struct *vma, + unsigned long start, unsigned long end) +{ + struct mm_struct *mm = vma->vm_mm; + unsigned long addr; + hugepte_t *ptep; + struct page *page; + int local = 0; + cpumask_t tmp; + + WARN_ON(!is_vm_hugetlb_page(vma)); + BUG_ON((start % HPAGE_SIZE) != 0); + BUG_ON((end % HPAGE_SIZE) != 0); + + /* XXX are there races with checking cpu_vm_mask? - Anton */ + tmp = cpumask_of_cpu(smp_processor_id()); + if (cpus_equal(vma->vm_mm->cpu_vm_mask, tmp)) + local = 1; + + for (addr = start; addr < end; addr += HPAGE_SIZE) { + hugepte_t pte; + + BUG_ON(!in_hugepage_area(mm->context, addr)); + + ptep = hugepte_offset(mm, addr); + if (!ptep || hugepte_none(*ptep)) + continue; + + pte = *ptep; + page = hugepte_page(pte); + teardown_huge_pte(ptep); + + if (hugepte_val(pte) & _HUGEPAGE_HASHPTE) + flush_hash_hugepage(mm->context, addr, + pte, local); + + huge_page_release(page); + } + + mm->rss -= (end - start) >> PAGE_SHIFT; +} + +void zap_hugepage_range(struct vm_area_struct *vma, + unsigned long start, unsigned long length) +{ + struct mm_struct *mm = vma->vm_mm; + + spin_lock(&mm->page_table_lock); + unmap_hugepage_range(vma, start, start + length); + spin_unlock(&mm->page_table_lock); +} + +int hugetlb_prefault(struct address_space *mapping, struct vm_area_struct *vma) +{ + struct mm_struct *mm = current->mm; + unsigned long addr; + int ret = 0; + + WARN_ON(!is_vm_hugetlb_page(vma)); + BUG_ON((vma->vm_start % HPAGE_SIZE) != 0); + BUG_ON((vma->vm_end % HPAGE_SIZE) != 0); + + spin_lock(&mm->page_table_lock); + for (addr = vma->vm_start; addr < vma->vm_end; addr += HPAGE_SIZE) { + unsigned long idx; + hugepte_t *pte = hugepte_alloc(mm, addr); + struct page *page; + + BUG_ON(!in_hugepage_area(mm->context, addr)); + + if (!pte) { + ret = -ENOMEM; + goto out; + } + if (!hugepte_none(*pte)) + continue; + + idx = ((addr - vma->vm_start) >> HPAGE_SHIFT) + + (vma->vm_pgoff >> (HPAGE_SHIFT - PAGE_SHIFT)); + page = find_get_page(mapping, idx); + if (!page) { + page = alloc_hugetlb_page(); + if (!page) { + ret = -ENOMEM; + goto out; + } + ret = add_to_page_cache(page, mapping, idx, GFP_ATOMIC); + unlock_page(page); + if (ret) { + free_huge_page(page); + goto out; + } + } + setup_huge_pte(mm, page, pte, vma->vm_flags & VM_WRITE); + } +out: + spin_unlock(&mm->page_table_lock); + return ret; +} + +/* Because we have an exclusive hugepage region which lies within the + * normal user address space, we have to take special measures to make + * non-huge mmap()s evade the hugepage reserved region. */ +unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, + unsigned long len, unsigned long pgoff, + unsigned long flags) +{ + struct mm_struct *mm = current->mm; + struct vm_area_struct *vma; + unsigned long start_addr; + + if (len > TASK_SIZE) + return -ENOMEM; + + if (addr) { + addr = PAGE_ALIGN(addr); + vma = find_vma(mm, addr); + if (TASK_SIZE - len >= addr && + (!vma || addr + len <= vma->vm_start) && + !is_hugepage_only_range(addr,len)) + return addr; + } + start_addr = addr = mm->free_area_cache; + +full_search: + for (vma = find_vma(mm, addr); ; vma = vma->vm_next) { + /* At this point: (!vma || addr < vma->vm_end). */ + if (TASK_SIZE - len < addr) { + /* + * Start a new search - just in case we missed + * some holes. + */ + if (start_addr != TASK_UNMAPPED_BASE) { + start_addr = addr = TASK_UNMAPPED_BASE; + goto full_search; + } + return -ENOMEM; + } + if (!vma || addr + len <= vma->vm_start) { + if (is_hugepage_only_range(addr, len)) { + if (addr < TASK_HPAGE_END_32) + addr = TASK_HPAGE_END_32; + else + addr = TASK_HPAGE_END; + + continue; + } + /* + * Remember the place where we stopped the search: + */ + mm->free_area_cache = addr + len; + return addr; + } + addr = vma->vm_end; + } +} + + +unsigned long hugetlb_get_unmapped_area(struct file *file, unsigned long addr, + unsigned long len, unsigned long pgoff, + unsigned long flags) +{ + struct vm_area_struct *vma; + unsigned long base, end; + + if (len & ~HPAGE_MASK) + return -EINVAL; + + if (!(cur_cpu_spec->cpu_features & CPU_FTR_16M_PAGE)) + return -EINVAL; + + if (test_thread_flag(TIF_32BIT)) { + int err; + + err = open_32bit_htlbpage_range(current->mm); + if (err) + return err; /* Should this just be EINVAL? */ + + base = TASK_HPAGE_BASE_32; + end = TASK_HPAGE_END_32; + } else { + base = TASK_HPAGE_BASE; + end = TASK_HPAGE_END; + } + + if (!in_hugepage_area(current->mm->context, addr) + || (addr & (HPAGE_SIZE - 1))) + addr = base; + + for (vma = find_vma(current->mm, addr); ; vma = vma->vm_next) { + /* At this point: (!vma || addr < vma->vm_end). */ + if (addr + len > end) + return -ENOMEM; + if (!vma || (addr + len) <= vma->vm_start) + return addr; + addr = ALIGN(vma->vm_end, HPAGE_SIZE); + + /* Because we're in an exclusively hugepage region, + * this alignment shouldn't have skipped over any + * other vmas */ + } +} + +static inline unsigned long computeHugeHptePP(unsigned int hugepte) +{ + unsigned long flags = 0x2; + + if (! (hugepte & _HUGEPAGE_RW)) + flags |= 0x1; + return flags; +} + +int hash_huge_page(struct mm_struct *mm, unsigned long access, + unsigned long ea, unsigned long vsid, int local) +{ + hugepte_t *ptep; + unsigned long va, vpn; + int is_write; + hugepte_t old_pte, new_pte; + unsigned long hpteflags, prpn; + long slot; + + /* Is this for us? */ + if (!in_hugepage_area(mm->context, ea)) + return -1; + + ea &= ~(HPAGE_SIZE-1); + + /* We have to find the first hugepte in the batch, since + * that's the one that will store the HPTE flags */ + ptep = hugepte_offset(mm, ea); + + /* Search the Linux page table for a match with va */ + va = (vsid << 28) | (ea & 0x0fffffff); + vpn = va >> HPAGE_SHIFT; + + /* + * If no pte found or not present, send the problem up to + * do_page_fault + */ + if (unlikely(!ptep || hugepte_none(*ptep))) + return 1; + + BUG_ON(hugepte_bad(*ptep)); + + /* + * Check the user's access rights to the page. If access should be + * prevented then send the problem up to do_page_fault. + */ + is_write = access & _PAGE_RW; + if (unlikely(is_write && !(hugepte_val(*ptep) & _HUGEPAGE_RW))) + return 1; + + /* + * At this point, we have a pte (old_pte) which can be used to build + * or update an HPTE. There are 2 cases: + * + * 1. There is a valid (present) pte with no associated HPTE (this is + * the most common case) + * 2. There is a valid (present) pte with an associated HPTE. The + * current values of the pp bits in the HPTE prevent access + * because we are doing software DIRTY bit management and the + * page is currently not DIRTY. + */ + + old_pte = *ptep; + new_pte = old_pte; + + hpteflags = computeHugeHptePP(hugepte_val(new_pte)); + + /* Check if pte already has an hpte (case 2) */ + if (unlikely(hugepte_val(old_pte) & _HUGEPAGE_HASHPTE)) { + /* There MIGHT be an HPTE for this pte */ + unsigned long hash, slot; + + hash = hpt_hash(vpn, 1); + if (hugepte_val(old_pte) & _HUGEPAGE_SECONDARY) + hash = ~hash; + slot = (hash & htab_data.htab_hash_mask) * HPTES_PER_GROUP; + slot += (hugepte_val(old_pte) & _HUGEPAGE_GROUP_IX) >> 5; + + if (ppc_md.hpte_updatepp(slot, hpteflags, va, 1, local) == -1) + hugepte_val(old_pte) &= ~_HUGEPAGE_HPTEFLAGS; + } + + if (likely(!(hugepte_val(old_pte) & _HUGEPAGE_HASHPTE))) { + unsigned long hash = hpt_hash(vpn, 1); + unsigned long hpte_group; + + prpn = hugepte_pfn(old_pte); + +repeat: + hpte_group = ((hash & htab_data.htab_hash_mask) * + HPTES_PER_GROUP) & ~0x7UL; + + /* Update the linux pte with the HPTE slot */ + hugepte_val(new_pte) &= ~_HUGEPAGE_HPTEFLAGS; + hugepte_val(new_pte) |= _HUGEPAGE_HASHPTE; + + /* Add in WIMG bits */ + /* XXX We should store these in the pte */ + hpteflags |= _PAGE_COHERENT; + + slot = ppc_md.hpte_insert(hpte_group, va, prpn, 0, + hpteflags, 0, 1); + + /* Primary is full, try the secondary */ + if (unlikely(slot == -1)) { + hugepte_val(new_pte) |= _HUGEPAGE_SECONDARY; + hpte_group = ((~hash & htab_data.htab_hash_mask) * + HPTES_PER_GROUP) & ~0x7UL; + slot = ppc_md.hpte_insert(hpte_group, va, prpn, + 1, hpteflags, 0, 1); + if (slot == -1) { + if (mftb() & 0x1) + hpte_group = ((hash & htab_data.htab_hash_mask) * HPTES_PER_GROUP) & ~0x7UL; + + ppc_md.hpte_remove(hpte_group); + goto repeat; + } + } + + if (unlikely(slot == -2)) + panic("hash_huge_page: pte_insert failed\n"); + + hugepte_val(new_pte) |= (slot<<5) & _HUGEPAGE_GROUP_IX; + + /* + * No need to use ldarx/stdcx here because all who + * might be updating the pte will hold the + * page_table_lock or the hash_table_lock + * (we hold both) + */ + *ptep = new_pte; + } + + return 0; +} + +static void flush_hash_hugepage(mm_context_t context, unsigned long ea, + hugepte_t pte, int local) +{ + unsigned long vsid, vpn, va, hash, secondary, slot; + + BUG_ON(hugepte_bad(pte)); + BUG_ON(!in_hugepage_area(context, ea)); + + vsid = get_vsid(context, ea); + + va = (vsid << 28) | (ea & 0x0fffffff); + vpn = va >> LARGE_PAGE_SHIFT; + hash = hpt_hash(vpn, 1); + secondary = !!(hugepte_val(pte) & _HUGEPAGE_SECONDARY); + if (secondary) + hash = ~hash; + slot = (hash & htab_data.htab_hash_mask) * HPTES_PER_GROUP; + slot += (hugepte_val(pte) & _HUGEPAGE_GROUP_IX) >> 5; + + ppc_md.hpte_invalidate(slot, va, 1, local); +} + +static void split_and_free_hugepage(struct page *page) +{ + int j; + struct page *map; + + map = page; + htlbpage_total--; + for (j = 0; j < (HPAGE_SIZE / PAGE_SIZE); j++) { + map->flags &= ~(1 << PG_locked | 1 << PG_error | 1 << PG_referenced | + 1 << PG_dirty | 1 << PG_active | 1 << PG_reserved | + 1 << PG_private | 1<< PG_writeback); + set_page_count(map, 0); + map++; + } + set_page_count(page, 1); + __free_pages(page, HUGETLB_PAGE_ORDER); +} + +int set_hugetlb_mem_size(int count) +{ + int lcount; + struct page *page; + + if (!(cur_cpu_spec->cpu_features & CPU_FTR_16M_PAGE)) + return 0; + + if (count < 0) + lcount = count; + else + lcount = count - htlbpage_total; + + if (lcount == 0) + return htlbpage_total; + if (lcount > 0) { /* Increase the mem size. */ + while (lcount--) { + page = alloc_fresh_huge_page(); + if (page == NULL) + break; + spin_lock(&htlbpage_lock); + enqueue_huge_page(page); + htlbpage_free++; + htlbpage_total++; + spin_unlock(&htlbpage_lock); + } + return htlbpage_total; + } + /* Shrink the memory size. */ + while (lcount++) { + page = alloc_hugetlb_page(); + if (page == NULL) + break; + spin_lock(&htlbpage_lock); + split_and_free_hugepage(page); + spin_unlock(&htlbpage_lock); + } + return htlbpage_total; +} + +int hugetlb_sysctl_handler(ctl_table *table, int write, + struct file *file, void *buffer, size_t *length) +{ + proc_dointvec(table, write, file, buffer, length); + htlbpage_max = set_hugetlb_mem_size(htlbpage_max); + return 0; +} + +static int __init hugetlb_setup(char *s) +{ + if (sscanf(s, "%d", &htlbpage_max) <= 0) + htlbpage_max = 0; + return 1; +} +__setup("hugepages=", hugetlb_setup); + +static int __init hugetlb_init(void) +{ + int i; + struct page *page; + + if (cur_cpu_spec->cpu_features & CPU_FTR_16M_PAGE) { + for (i = 0; i < MAX_NUMNODES; ++i) + INIT_LIST_HEAD(&hugepage_freelists[i]); + + for (i = 0; i < htlbpage_max; ++i) { + page = alloc_fresh_huge_page(); + if (!page) + break; + spin_lock(&htlbpage_lock); + enqueue_huge_page(page); + spin_unlock(&htlbpage_lock); + } + htlbpage_max = htlbpage_free = htlbpage_total = i; + printk("Total HugeTLB memory allocated, %d\n", htlbpage_free); + } else { + htlbpage_max = 0; + printk("CPU does not support HugeTLB\n"); + } + + return 0; +} +module_init(hugetlb_init); + +int hugetlb_report_meminfo(char *buf) +{ + return sprintf(buf, + "HugePages_Total: %5d\n" + "HugePages_Free: %5d\n" + "Hugepagesize: %5lu kB\n", + htlbpage_total, + htlbpage_free, + HPAGE_SIZE/1024); +} + +/* This is advisory only, so we can get away with accesing + * htlbpage_free without taking the lock. */ +int is_hugepage_mem_enough(size_t size) +{ + return (size + ~HPAGE_MASK)/HPAGE_SIZE <= htlbpage_free; +} + +/* + * We cannot handle pagefaults against hugetlb pages at all. They cause + * handle_mm_fault() to try to instantiate regular-sized pages in the + * hugegpage VMA. do_page_fault() is supposed to trap this, so BUG is we get + * this far. + */ +static struct page *hugetlb_nopage(struct vm_area_struct *vma, + unsigned long address, int unused) +{ + BUG(); + return NULL; +} + +struct vm_operations_struct hugetlb_vm_ops = { + .nopage = hugetlb_nopage, +}; diff -prauN linux-2.6.0-test5/arch/ppc64/mm/init.c wli-2.6.0-test5-bk12-25/arch/ppc64/mm/init.c --- linux-2.6.0-test5/arch/ppc64/mm/init.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc64/mm/init.c 2003-09-25 20:03:31.000000000 -0700 @@ -205,7 +205,7 @@ static void map_io_page(unsigned long ea if (mem_init_done) { spin_lock(&ioremap_mm.page_table_lock); pgdp = pgd_offset_i(ea); - pmdp = pmd_alloc(&ioremap_mm, pgdp, ea); + pmdp = pmd_alloc_kernel(&ioremap_mm, pgdp, ea); ptep = pte_alloc_kernel(&ioremap_mm, pmdp, ea); pa = absolute_to_phys(pa); @@ -290,7 +290,7 @@ flush_tlb_page(struct vm_area_struct *vm if (!pgd_none(*pgd)) { pmd = pmd_offset(pgd, vmaddr); - if (!pmd_none(*pmd)) { + if (pmd_present(*pmd)) { ptep = pte_offset_kernel(pmd, vmaddr); /* Check if HPTE might exist and flush it if so */ pte = __pte(pte_update(ptep, _PAGE_HPTEFLAGS, 0)); @@ -298,6 +298,7 @@ flush_tlb_page(struct vm_area_struct *vm flush_hash_page(context, vmaddr, pte, local); } } + WARN_ON(pmd_hugepage(*pmd)); } } @@ -348,7 +349,7 @@ __flush_tlb_range(struct mm_struct *mm, pmd_end = (start + PMD_SIZE) & PMD_MASK; if (pmd_end > end) pmd_end = end; - if (!pmd_none(*pmd)) { + if (pmd_present(*pmd)) { ptep = pte_offset_kernel(pmd, start); do { if (pte_val(*ptep) & _PAGE_HASHPTE) { @@ -367,6 +368,7 @@ __flush_tlb_range(struct mm_struct *mm, ++ptep; } while (start < pmd_end); } else { + WARN_ON(pmd_hugepage(*pmd)); start = pmd_end; } ++pmd; @@ -540,8 +542,6 @@ static int __init setup_kcore(void) } module_init(setup_kcore); -void initialize_paca_hardware_interrupt_stack(void); - void __init mem_init(void) { #ifndef CONFIG_DISCONTIGMEM @@ -608,9 +608,6 @@ void __init mem_init(void) #endif mem_init_done = 1; - /* set the last page of each hardware interrupt stack to be protected */ - initialize_paca_hardware_interrupt_stack(); - #ifdef CONFIG_PPC_ISERIES create_virtual_bus_tce_table(); #endif diff -prauN linux-2.6.0-test5/arch/ppc64/mm/numa.c wli-2.6.0-test5-bk12-25/arch/ppc64/mm/numa.c --- linux-2.6.0-test5/arch/ppc64/mm/numa.c 2003-09-08 12:50:16.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc64/mm/numa.c 2003-09-25 19:15:51.000000000 -0700 @@ -24,18 +24,21 @@ int numa_cpu_lookup_table[NR_CPUS] = { [ 0 ... (NR_CPUS - 1)] = -1}; int numa_memory_lookup_table[MAX_MEMORY >> MEMORY_INCREMENT_SHIFT] = { [ 0 ... ((MAX_MEMORY >> MEMORY_INCREMENT_SHIFT) - 1)] = -1}; -unsigned long numa_cpumask_lookup_table[MAX_NUMNODES]; +cpumask_t numa_cpumask_lookup_table[MAX_NUMNODES]; int nr_cpus_in_node[MAX_NUMNODES] = { [0 ... (MAX_NUMNODES -1)] = 0}; struct pglist_data node_data[MAX_NUMNODES]; bootmem_data_t plat_node_bdata[MAX_NUMNODES]; +EXPORT_SYMBOL(node_data); +EXPORT_SYMBOL(numa_memory_lookup_table); + static inline void map_cpu_to_node(int cpu, int node) { dbg("cpu %d maps to domain %d\n", cpu, node); numa_cpu_lookup_table[cpu] = node; - if (!(numa_cpumask_lookup_table[node] & 1UL << cpu)) { - numa_cpumask_lookup_table[node] |= 1UL << cpu; + if (!(cpu_isset(cpu, numa_cpumask_lookup_table[node]))) { + cpu_set(cpu, numa_cpumask_lookup_table[node]); nr_cpus_in_node[node]++; } } diff -prauN linux-2.6.0-test5/arch/ppc64/xmon/xmon.c wli-2.6.0-test5-bk12-25/arch/ppc64/xmon/xmon.c --- linux-2.6.0-test5/arch/ppc64/xmon/xmon.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/ppc64/xmon/xmon.c 2003-09-25 19:15:51.000000000 -0700 @@ -15,6 +15,8 @@ #include #include #include +#include + #include #include #include @@ -27,6 +29,7 @@ #include #include #include + #include "nonstdio.h" #include "privinst.h" @@ -59,7 +62,6 @@ struct bpt { unsigned instr; unsigned long count; unsigned char enabled; - char funcname[64]; /* function name for humans */ }; #define NBPTS 16 @@ -79,14 +81,9 @@ static void memex(void); static int bsesc(void); static void dump(void); static void prdump(unsigned long, long); -#ifdef __MWERKS__ -static void prndump(unsigned, int); -static int nvreadb(unsigned); -#endif static int ppc_inst_dump(unsigned long, long); void print_address(unsigned long); static int getsp(void); -static void dump_hash_table(void); static void backtrace(struct pt_regs *); static void excprint(struct pt_regs *); static void prregs(struct pt_regs *); @@ -106,7 +103,6 @@ static void take_input(char *); static unsigned long read_spr(int); static void write_spr(int, unsigned long); static void super_regs(void); -static void print_sysmap(void); static void remove_bpts(void); static void insert_bpts(void); static struct bpt *at_breakpoint(unsigned long pc); @@ -158,7 +154,6 @@ Commands:\n\ dd dump double values\n\ e print exception information\n\ f flush cache\n\ - h dump hash table\n\ m examine/change memory\n\ mm move a block of memory\n\ ms set a block of memory\n\ @@ -183,6 +178,13 @@ static int xmon_trace[NR_CPUS]; static struct pt_regs *xmon_regs[NR_CPUS]; +void __xmon_print_symbol(const char *fmt, unsigned long address); +#define xmon_print_symbol(fmt, addr) \ +do { \ + __check_printsym_format(fmt, ""); \ + __xmon_print_symbol(fmt, addr); \ +} while(0) + /* * Stuff for reading and writing memory safely */ @@ -211,42 +213,6 @@ extern inline void sync(void) no functions have been called from the current function. */ -/* - A traceback table typically follows each function. - The find_tb_table() func will fill in this struct. Note that the struct - is not an exact match with the encoded table defined by the ABI. It is - defined here more for programming convenience. - */ -struct tbtable { - unsigned long flags; /* flags: */ -#define TBTAB_FLAGSGLOBALLINK (1L<<47) -#define TBTAB_FLAGSISEPROL (1L<<46) -#define TBTAB_FLAGSHASTBOFF (1L<<45) -#define TBTAB_FLAGSINTPROC (1L<<44) -#define TBTAB_FLAGSHASCTL (1L<<43) -#define TBTAB_FLAGSTOCLESS (1L<<42) -#define TBTAB_FLAGSFPPRESENT (1L<<41) -#define TBTAB_FLAGSNAMEPRESENT (1L<<38) -#define TBTAB_FLAGSUSESALLOCA (1L<<37) -#define TBTAB_FLAGSSAVESCR (1L<<33) -#define TBTAB_FLAGSSAVESLR (1L<<32) -#define TBTAB_FLAGSSTORESBC (1L<<31) -#define TBTAB_FLAGSFIXUP (1L<<30) -#define TBTAB_FLAGSPARMSONSTK (1L<<0) - unsigned char fp_saved; /* num fp regs saved f(32-n)..f31 */ - unsigned char gpr_saved; /* num gpr's saved */ - unsigned char fixedparms; /* num fixed point parms */ - unsigned char floatparms; /* num float parms */ - unsigned char parminfo[32]; /* types of args. null terminated */ -#define TBTAB_PARMFIXED 1 -#define TBTAB_PARMSFLOAT 2 -#define TBTAB_PARMDFLOAT 3 - unsigned int tb_offset; /* offset from start of func */ - unsigned long funcstart; /* addr of start of function */ - char name[64]; /* name of function (null terminated)*/ -}; -static int find_tb_table(unsigned long codeaddr, struct tbtable *tab); - #define SURVEILLANCE_TOKEN 9000 static inline void disable_surveillance(void) @@ -304,8 +270,7 @@ xmon(struct pt_regs *excp) std 29,232(%0)\n\ std 30,240(%0)\n\ std 31,248(%0)" : : "b" (®s)); - /* Fetch the link reg for this stack frame. - NOTE: the prev printf fills in the lr. */ + regs.nip = regs.link = ((unsigned long *)(regs.gpr[1]))[2]; regs.msr = get_msr(); regs.ctr = get_ctr(); @@ -380,7 +345,9 @@ xmon_bpt(struct pt_regs *regs) xmon_trace[smp_processor_id()] = BRSTEP; regs->msr |= MSR_SE; } else { - printf("Stopped at breakpoint %x (%lx %s)\n", (bp - bpts)+1, bp->address, bp->funcname); + printf("Stopped at breakpoint %x (%lx ", (bp - bpts) + 1, + bp->address); + xmon_print_symbol("%s)\n", bp->address); xmon(regs); } return 1; @@ -578,9 +545,6 @@ cmds(struct pt_regs *excp) else excprint(excp); break; - case 'M': - print_sysmap(); - break; case 'S': super_regs(); break; @@ -590,9 +554,6 @@ cmds(struct pt_regs *excp) case 'f': cacheflush(); break; - case 'h': - dump_hash_table(); - break; case 's': case 'x': case EOF: @@ -773,7 +734,6 @@ bpt_cmds(void) unsigned long a; int mode, i; struct bpt *bp; - struct tbtable tab; cmd = inchar(); switch (cmd) { @@ -829,7 +789,9 @@ bpt_cmds(void) if (bp == 0) { printf("No breakpoint at %x\n", a); } else { - printf("Cleared breakpoint %x (%lx %s)\n", (bp - bpts)+1, bp->address, bp->funcname); + printf("Cleared breakpoint %x (%lx ", + (bp - bpts) + 1, bp->address); + xmon_print_symbol("%s)\n", bp->address); bp->enabled = 0; } } @@ -863,8 +825,11 @@ bpt_cmds(void) printf(" inst %.16lx %8x\n", iabr.address & ~3, iabr.count); for (bp = bpts, bpnum = 1; bp < &bpts[NBPTS]; ++bp, ++bpnum) - if (bp->enabled) - printf("%2x trap %.16lx %8x %s\n", bpnum, bp->address, bp->count, bp->funcname); + if (bp->enabled) { + printf("%2x trap %.16lx %8x ", + bpnum, bp->address, bp->count); + xmon_print_symbol("%s\n", bp->address); + } break; } bp = at_breakpoint(a); @@ -881,14 +846,9 @@ bpt_cmds(void) bp->address = a; bp->count = 0; scanhex(&bp->count); - /* Find the function name just once. */ - bp->funcname[0] = '\0'; - if (find_tb_table(bp->address, &tab) && tab.name[0]) { - /* Got a nice name for it. */ - int delta = bp->address - tab.funcstart; - sprintf(bp->funcname, "%s+0x%x", tab.name, delta); - } - printf("Set breakpoint %2x trap %.16lx %8x %s\n", (bp-bpts)+1, bp->address, bp->count, bp->funcname); + printf("Set breakpoint %2x trap %.16lx %8x ", (bp-bpts) + 1, + bp->address, bp->count); + xmon_print_symbol("%s\n", bp->address); break; } } @@ -925,7 +885,6 @@ backtrace(struct pt_regs *excp) unsigned long lr; unsigned long stack[3]; struct pt_regs regs; - struct tbtable tab; int framecount; char *funcname; /* declare these as raw ptrs so we don't get func descriptors */ @@ -971,17 +930,11 @@ backtrace(struct pt_regs *excp) break; printf("exception: %lx %s regs %lx\n", regs.trap, getvecname(regs.trap), sp+112); printf(" %.16lx", regs.nip); - if ((regs.nip & 0xffffffff00000000UL) && - find_tb_table(regs.nip, &tab)) { - int delta = regs.nip-tab.funcstart; - if (delta < 0) - printf(" "); - else - printf(" %s+0x%x", tab.name, delta); - } + if (regs.nip & 0xffffffff00000000UL) + xmon_print_symbol(" %s", regs.nip); printf("\n"); if (regs.gpr[1] < sp) { - printf("\n", regs.gpr[1]); + printf("\n", regs.gpr[1]); break; } @@ -989,13 +942,8 @@ backtrace(struct pt_regs *excp) if (mread(sp, stack, sizeof(stack)) != sizeof(stack)) break; } else { - if (stack[2] && find_tb_table(stack[2], &tab)) { - int delta = stack[2]-tab.funcstart; - if (delta < 0) - printf(" "); - else - printf(" %s+0x%x", tab.name, delta); - } + if (stack[2]) + xmon_print_symbol(" %s", stack[2]); printf("\n"); } if (stack[0] && stack[0] <= sp) { @@ -1024,8 +972,6 @@ spinlock_t exception_print_lock = SPIN_L void excprint(struct pt_regs *fp) { - struct task_struct *c; - struct tbtable tab; unsigned long flags; spin_lock_irqsave(&exception_print_lock, flags); @@ -1034,21 +980,13 @@ excprint(struct pt_regs *fp) printf("cpu %d: ", smp_processor_id()); #endif /* CONFIG_SMP */ - printf("Vector: %lx %s at [%lx]\n", fp->trap, getvecname(fp->trap), fp); + printf("Vector: %lx %s at [%lx]\n", fp->trap, getvecname(fp->trap), fp); printf(" pc: %lx", fp->nip); - if (find_tb_table(fp->nip, &tab) && tab.name[0]) { - /* Got a nice name for it */ - int delta = fp->nip - tab.funcstart; - printf(" (%s+0x%x)", tab.name, delta); - } - printf("\n"); + xmon_print_symbol(" (%s)\n", fp->nip); + printf(" lr: %lx", fp->link); - if (find_tb_table(fp->link, &tab) && tab.name[0]) { - /* Got a nice name for it */ - int delta = fp->link - tab.funcstart; - printf(" (%s+0x%x)", tab.name, delta); - } - printf("\n"); + xmon_print_symbol(" (%s)\n", fp->link); + printf(" sp: %lx\n", fp->gpr[1]); printf(" msr: %lx\n", fp->msr); @@ -1057,13 +995,11 @@ excprint(struct pt_regs *fp) printf(" dsisr: %lx\n", fp->dsisr); } - /* XXX: need to copy current or we die. Why? */ - c = current; - printf(" current = 0x%lx\n", c); + printf(" current = 0x%lx\n", current); printf(" paca = 0x%lx\n", get_paca()); - if (c) { - printf(" current = %lx, pid = %ld, comm = %s\n", - c, c->pid, c->comm); + if (current) { + printf(" pid = %ld, comm = %s\n", + current->pid, current->comm); } spin_unlock_irqrestore(&exception_print_lock, flags); @@ -1153,14 +1089,6 @@ extern char exc_prolog; extern char dec_exc; void -print_sysmap(void) -{ - extern char *sysmap; - if ( sysmap ) - printf("System.map: \n%s", sysmap); -} - -void super_regs() { int i, cmd; @@ -1228,152 +1156,6 @@ super_regs() scannl(); } -#ifndef CONFIG_PPC64BRIDGE -static void -dump_hash_table_seg(unsigned seg, unsigned start, unsigned end) -{ - extern void *Hash; - extern unsigned long Hash_size; - unsigned *htab = Hash; - unsigned hsize = Hash_size; - unsigned v, hmask, va, last_va; - int found, last_found, i; - unsigned *hg, w1, last_w2, last_va0; - - last_found = 0; - hmask = hsize / 64 - 1; - va = start; - start = (start >> 12) & 0xffff; - end = (end >> 12) & 0xffff; - for (v = start; v < end; ++v) { - found = 0; - hg = htab + (((v ^ seg) & hmask) * 16); - w1 = 0x80000000 | (seg << 7) | (v >> 10); - for (i = 0; i < 8; ++i, hg += 2) { - if (*hg == w1) { - found = 1; - break; - } - } - if (!found) { - w1 ^= 0x40; - hg = htab + ((~(v ^ seg) & hmask) * 16); - for (i = 0; i < 8; ++i, hg += 2) { - if (*hg == w1) { - found = 1; - break; - } - } - } - if (!(last_found && found && (hg[1] & ~0x180) == last_w2 + 4096)) { - if (last_found) { - if (last_va != last_va0) - printf(" ... %x", last_va); - printf("\n"); - } - if (found) { - printf("%x to %x", va, hg[1]); - last_va0 = va; - } - last_found = found; - } - if (found) { - last_w2 = hg[1] & ~0x180; - last_va = va; - } - va += 4096; - } - if (last_found) - printf(" ... %x\n", last_va); -} - -#else /* CONFIG_PPC64BRIDGE */ -static void -dump_hash_table_seg(unsigned seg, unsigned start, unsigned end) -{ - extern void *Hash; - extern unsigned long Hash_size; - unsigned *htab = Hash; - unsigned hsize = Hash_size; - unsigned v, hmask, va, last_va; - int found, last_found, i; - unsigned *hg, w1, last_w2, last_va0; - - last_found = 0; - hmask = hsize / 128 - 1; - va = start; - start = (start >> 12) & 0xffff; - end = (end >> 12) & 0xffff; - for (v = start; v < end; ++v) { - found = 0; - hg = htab + (((v ^ seg) & hmask) * 32); - w1 = 1 | (seg << 12) | ((v & 0xf800) >> 4); - for (i = 0; i < 8; ++i, hg += 4) { - if (hg[1] == w1) { - found = 1; - break; - } - } - if (!found) { - w1 ^= 2; - hg = htab + ((~(v ^ seg) & hmask) * 32); - for (i = 0; i < 8; ++i, hg += 4) { - if (hg[1] == w1) { - found = 1; - break; - } - } - } - if (!(last_found && found && (hg[3] & ~0x180) == last_w2 + 4096)) { - if (last_found) { - if (last_va != last_va0) - printf(" ... %x", last_va); - printf("\n"); - } - if (found) { - printf("%x to %x", va, hg[3]); - last_va0 = va; - } - last_found = found; - } - if (found) { - last_w2 = hg[3] & ~0x180; - last_va = va; - } - va += 4096; - } - if (last_found) - printf(" ... %x\n", last_va); -} -#endif /* CONFIG_PPC64BRIDGE */ - -static unsigned long hash_ctx; -static unsigned long hash_start; -static unsigned long hash_end; - -static void -dump_hash_table() -{ - int seg; - unsigned seg_start, seg_end; - - hash_ctx = 0; - hash_start = 0; - hash_end = 0xfffff000; - scanhex(&hash_ctx); - scanhex(&hash_start); - scanhex(&hash_end); - printf("Mappings for context %x\n", hash_ctx); - seg_start = hash_start; - for (seg = hash_start >> 28; seg <= hash_end >> 28; ++seg) { - seg_end = (seg << 28) | 0x0ffff000; - if (seg_end > hash_end) - seg_end = hash_end; - dump_hash_table_seg((hash_ctx << 4) + seg, seg_start, seg_end); - seg_start = seg_end + 0x1000; - } -} - int mread(unsigned long adrs, void *buf, int size) { @@ -2073,111 +1855,52 @@ char *str; lineptr = str; } - -/* Starting at codeaddr scan forward for a tbtable and fill in the - given table. Return non-zero if successful at doing something. - */ -static int -find_tb_table(unsigned long codeaddr, struct tbtable *tab) +/* xmon version of __print_symbol */ +void __xmon_print_symbol(const char *fmt, unsigned long address) { - unsigned long codeaddr_max; - unsigned long tbtab_start; - int nr; - int instr; - int num_parms; + char *modname; + const char *name; + unsigned long offset, size; + char namebuf[128]; - /* don't look for traceback table in userspace */ - if (codeaddr < PAGE_OFFSET) - return 0; + if (setjmp(bus_error_jmp) == 0) { + debugger_fault_handler = handle_fault; + sync(); + name = kallsyms_lookup(address, &size, &offset, &modname, + namebuf); + sync(); + /* wait a little while to see if we get a machine check */ + __delay(200); + } else { + name = "symbol lookup failed"; + } - if (tab == NULL) - return 0; - memset(tab, 0, sizeof(tab)); + debugger_fault_handler = 0; - /* Scan instructions starting at codeaddr for 128k max */ - for (codeaddr_max = codeaddr + 128*1024*4; - codeaddr < codeaddr_max; - codeaddr += 4) { - nr = mread(codeaddr, &instr, 4); - if (nr != 4) - return 0; /* Bad read. Give up promptly. */ - if (instr == 0) { - /* table should follow. */ - int version; - unsigned long flags; - tbtab_start = codeaddr; /* save it to compute func start addr */ - codeaddr += 4; - nr = mread(codeaddr, &flags, 8); - if (nr != 8) - return 0; /* Bad read or no tb table. */ - tab->flags = flags; - version = (flags >> 56) & 0xff; - if (version != 0) - continue; /* No tb table here. */ - /* Now, like the version, some of the flags are values - that are more conveniently extracted... */ - tab->fp_saved = (flags >> 24) & 0x3f; - tab->gpr_saved = (flags >> 16) & 0x3f; - tab->fixedparms = (flags >> 8) & 0xff; - tab->floatparms = (flags >> 1) & 0x7f; - codeaddr += 8; - num_parms = tab->fixedparms + tab->floatparms; - if (num_parms) { - unsigned int parminfo; - int parm; - if (num_parms > 32) - return 1; /* incomplete */ - nr = mread(codeaddr, &parminfo, 4); - if (nr != 4) - return 1; /* incomplete */ - /* decode parminfo...32 bits. - A zero means fixed. A one means float and the - following bit determines single (0) or double (1). - */ - for (parm = 0; parm < num_parms; parm++) { - if (parminfo & 0x80000000) { - parminfo <<= 1; - if (parminfo & 0x80000000) - tab->parminfo[parm] = TBTAB_PARMDFLOAT; - else - tab->parminfo[parm] = TBTAB_PARMSFLOAT; - } else { - tab->parminfo[parm] = TBTAB_PARMFIXED; - } - parminfo <<= 1; - } - codeaddr += 4; - } - if (flags & TBTAB_FLAGSHASTBOFF) { - nr = mread(codeaddr, &tab->tb_offset, 4); - if (nr != 4) - return 1; /* incomplete */ - if (tab->tb_offset > 0) { - tab->funcstart = tbtab_start - tab->tb_offset; - } - codeaddr += 4; - } - /* hand_mask appears to be always be omitted. */ - if (flags & TBTAB_FLAGSHASCTL) { - /* Assume this will never happen for C or asm */ - return 1; /* incomplete */ - } - if (flags & TBTAB_FLAGSNAMEPRESENT) { - short namlen; - nr = mread(codeaddr, &namlen, 2); - if (nr != 2) - return 1; /* incomplete */ - if (namlen >= sizeof(tab->name)) - namlen = sizeof(tab->name)-1; - codeaddr += 2; - nr = mread(codeaddr, tab->name, namlen); - tab->name[namlen] = '\0'; - codeaddr += namlen; - } - return 1; - } + if (!name) { + char addrstr[sizeof("0x%lx") + (BITS_PER_LONG*3/10)]; + + sprintf(addrstr, "0x%lx", address); + printf(fmt, addrstr); + return; + } + + if (modname) { + /* This is pretty small. */ + char buffer[sizeof("%s+%#lx/%#lx [%s]") + + strlen(name) + 2*(BITS_PER_LONG*3/10) + + strlen(modname)]; + + sprintf(buffer, "%s+%#lx/%#lx [%s]", + name, offset, size, modname); + printf(fmt, buffer); + } else { + char buffer[sizeof("%s+%#lx/%#lx") + + strlen(name) + 2*(BITS_PER_LONG*3/10)]; + + sprintf(buffer, "%s+%#lx/%#lx", name, offset, size); + printf(fmt, buffer); } - return 0; /* hit max...sorry. */ } void diff -prauN linux-2.6.0-test5/arch/s390/Kconfig wli-2.6.0-test5-bk12-25/arch/s390/Kconfig --- linux-2.6.0-test5/arch/s390/Kconfig 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/s390/Kconfig 2003-09-25 19:15:51.000000000 -0700 @@ -166,10 +166,8 @@ config QDIO For details please refer to the documentation provided by IBM at - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called qdio. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called qdio. If unsure, say Y. diff -prauN linux-2.6.0-test5/arch/s390/Makefile wli-2.6.0-test5-bk12-25/arch/s390/Makefile --- linux-2.6.0-test5/arch/s390/Makefile 2003-09-08 12:49:55.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/s390/Makefile 2003-09-25 19:15:51.000000000 -0700 @@ -13,8 +13,6 @@ # Copyright (C) 1994 by Linus Torvalds # -check_gcc = $(shell if $(CC) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi) - ifdef CONFIG_ARCH_S390_31 LDFLAGS := -m elf_s390 CFLAGS += -m31 diff -prauN linux-2.6.0-test5/arch/s390/kernel/compat_exec.c wli-2.6.0-test5-bk12-25/arch/s390/kernel/compat_exec.c --- linux-2.6.0-test5/arch/s390/kernel/compat_exec.c 2003-09-08 12:50:23.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/s390/kernel/compat_exec.c 2003-09-28 21:47:08.000000000 -0700 @@ -81,7 +81,8 @@ int setup_arg_pages32(struct linux_binpr struct page *page = bprm->page[i]; if (page) { bprm->page[i] = NULL; - put_dirty_page(current,page,stack_base,PAGE_COPY); + put_dirty_page(current, mpnt, page, + stack_base, PAGE_COPY); } stack_base += PAGE_SIZE; } diff -prauN linux-2.6.0-test5/arch/s390/kernel/compat_linux.c wli-2.6.0-test5-bk12-25/arch/s390/kernel/compat_linux.c --- linux-2.6.0-test5/arch/s390/kernel/compat_linux.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/s390/kernel/compat_linux.c 2003-09-25 19:15:51.000000000 -0700 @@ -1316,13 +1316,16 @@ int cp_compat_stat(struct kstat *stat, s { int err; - err = put_user(stat->dev, &statbuf->st_dev); + if (!old_valid_dev(stat->dev) || !old_valid_dev(stat->rdev)) + return -EOVERFLOW; + + err = put_user(old_encode_dev(stat->dev), &statbuf->st_dev); err |= put_user(stat->ino, &statbuf->st_ino); err |= put_user(stat->mode, &statbuf->st_mode); err |= put_user(stat->nlink, &statbuf->st_nlink); err |= put_user(high2lowuid(stat->uid), &statbuf->st_uid); err |= put_user(high2lowgid(stat->gid), &statbuf->st_gid); - err |= put_user(stat->rdev, &statbuf->st_rdev); + err |= put_user(old_encode_dev(stat->rdev), &statbuf->st_rdev); err |= put_user(stat->size, &statbuf->st_size); err |= put_user(stat->atime.tv_sec, &statbuf->st_atime); err |= put_user(stat->atime.tv_nsec, &statbuf->st_atime_nsec); @@ -2543,8 +2546,7 @@ extern asmlinkage long sys32_sysctl(stru } struct stat64_emu31 { - unsigned char __pad0[6]; - unsigned short st_dev; + unsigned long long st_dev; unsigned int __pad1; #define STAT64_HAS_BROKEN_ST_INO 1 u32 __st_ino; @@ -2552,8 +2554,7 @@ struct stat64_emu31 { unsigned int st_nlink; u32 st_uid; u32 st_gid; - unsigned char __pad2[6]; - unsigned short st_rdev; + unsigned long long st_rdev; unsigned int __pad3; long st_size; u32 st_blksize; @@ -2569,93 +2570,55 @@ struct stat64_emu31 { unsigned long st_ino; }; -static inline int -putstat64 (struct stat64_emu31 *ubuf, struct stat *kbuf) +static int cp_stat64(struct stat64_emu31 *ubuf, struct kstat *stat) { - struct stat64_emu31 tmp; - - memset(&tmp, 0, sizeof(tmp)); - - tmp.st_dev = (unsigned short)kbuf->st_dev; - tmp.st_ino = kbuf->st_ino; - tmp.__st_ino = (u32)kbuf->st_ino; - tmp.st_mode = kbuf->st_mode; - tmp.st_nlink = (unsigned int)kbuf->st_nlink; - tmp.st_uid = kbuf->st_uid; - tmp.st_gid = kbuf->st_gid; - tmp.st_rdev = (unsigned short)kbuf->st_rdev; - tmp.st_size = kbuf->st_size; - tmp.st_blksize = (u32)kbuf->st_blksize; - tmp.st_blocks = (u32)kbuf->st_blocks; - tmp.st_atime = (u32)kbuf->st_atime; - tmp.st_mtime = (u32)kbuf->st_mtime; - tmp.st_ctime = (u32)kbuf->st_ctime; + struct stat64_emu31 tmp; - return copy_to_user(ubuf,&tmp,sizeof(tmp)) ? -EFAULT : 0; -} + memset(&tmp, 0, sizeof(tmp)); -extern asmlinkage long sys_newstat(char * filename, struct stat * statbuf); + tmp.st_dev = huge_encode_dev(stat->dev); + tmp.st_ino = stat->ino; + tmp.__st_ino = (u32)stat->ino; + tmp.st_mode = stat->mode; + tmp.st_nlink = (unsigned int)stat->nlink; + tmp.uid = stat->uid; + tmp.gid = stat->gid; + tmp.st_rdev = huge_encode_dev(stat->rdev); + tmp.st_size = stat->st_size; + tmp.st_blksize = (u32)stat->blksize; + tmp.st_blocks = (u32)stat->blocks; + tmp.st_atime = (u32)stat->atime.tv_sec; + tmp.st_mtime = (u32)stat->mtime.tv_sec; + tmp.st_ctime = (u32)stat->ctime.tv_sec; + + return copy_to_user(ubuf,&tmp,sizeof(tmp)) ? -EFAULT : 0; +} asmlinkage long sys32_stat64(char * filename, struct stat64_emu31 * statbuf, long flags) { - int ret; - struct stat s; - char * tmp; - int err; - mm_segment_t old_fs = get_fs(); - - tmp = getname(filename); - err = PTR_ERR(tmp); - if (IS_ERR(tmp)) - return err; - - set_fs (KERNEL_DS); - ret = sys_newstat(tmp, &s); - set_fs (old_fs); - putname(tmp); - if (putstat64 (statbuf, &s)) - return -EFAULT; - return ret; + struct kstat stat; + int ret = vfs_stat(filename, &stat); + if (!ret) + ret = cp_stat64(statbuf, &stat); + return ret; } -extern asmlinkage long sys_newlstat(char * filename, struct stat * statbuf); - asmlinkage long sys32_lstat64(char * filename, struct stat64_emu31 * statbuf, long flags) { - int ret; - struct stat s; - char * tmp; - int err; - mm_segment_t old_fs = get_fs(); - - tmp = getname(filename); - err = PTR_ERR(tmp); - if (IS_ERR(tmp)) - return err; - - set_fs (KERNEL_DS); - ret = sys_newlstat(tmp, &s); - set_fs (old_fs); - putname(tmp); - if (putstat64 (statbuf, &s)) - return -EFAULT; - return ret; + struct kstat stat; + int ret = vfs_lstat(filename, &stat); + if (!ret) + ret = cp_stat64(statbuf, &stat); + return ret; } -extern asmlinkage long sys_newfstat(unsigned int fd, struct stat * statbuf); - asmlinkage long sys32_fstat64(unsigned long fd, struct stat64_emu31 * statbuf, long flags) { - int ret; - struct stat s; - mm_segment_t old_fs = get_fs(); - - set_fs (KERNEL_DS); - ret = sys_newfstat(fd, &s); - set_fs (old_fs); - if (putstat64 (statbuf, &s)) - return -EFAULT; - return ret; + struct kstat stat; + int ret = vfs_fstat(fd, &stat); + if (!ret) + ret = cp_stat64(statbuf, &stat); + return ret; } /* diff -prauN linux-2.6.0-test5/arch/s390/mm/ioremap.c wli-2.6.0-test5-bk12-25/arch/s390/mm/ioremap.c --- linux-2.6.0-test5/arch/s390/mm/ioremap.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/s390/mm/ioremap.c 2003-09-25 20:03:31.000000000 -0700 @@ -83,7 +83,7 @@ static int remap_area_pages(unsigned lon spin_lock(&init_mm.page_table_lock); do { pmd_t *pmd; - pmd = pmd_alloc(&init_mm, dir, address); + pmd = pmd_alloc_kernel(&init_mm, dir, address); error = -ENOMEM; if (!pmd) break; diff -prauN linux-2.6.0-test5/arch/sh/Kconfig wli-2.6.0-test5-bk12-25/arch/sh/Kconfig --- linux-2.6.0-test5/arch/sh/Kconfig 2003-09-08 12:50:41.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/sh/Kconfig 2003-09-25 19:15:51.000000000 -0700 @@ -839,9 +839,8 @@ config SERIAL serial port drivers do not need this driver built in for them to work.) - If you want to compile this driver as a module, say M here and read - . The module will be called - serial. + To compile this driver as a module, choose M here: the + module will be called serial. [WARNING: Do not compile this driver as a module if you are using non-standard serial ports, since the configuration information will be lost when the driver is unloaded. This limitation may be lifted @@ -973,10 +972,8 @@ config PRINTER It is possible to share one parallel port among several devices (e.g. printer and ZIP drive) and it is safe to compile the - corresponding drivers into the kernel. If you want to compile this - driver as a module however ( = code which can be inserted in and - removed from the running kernel whenever you want), say M here and - read and + corresponding drivers into the kernel. + To compile this driver as a module, choose M here and read . The module will be called lp. If you have several parallel ports, you can specify which ports to @@ -1018,10 +1015,8 @@ config PPDEV It is safe to say N to this -- it is not needed for normal printing or parallel port CD-ROM/disk support. - This support is also available as a module. If you want to compile - it as a module, say M here and read - . The module will be called - ppdev. + To compile this support as a module, choose M here: the + module will be called ppdev. If unsure, say N. @@ -1097,10 +1092,8 @@ config SH_WDT some performance issues. As such, the WDT should be avoided here unless it is absolutely necessary. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module is called shwdt. If you want to compile it as a module, - say M here and read Documentation/modules.txt. + To compile this driver as a module, choose M here: the + module will be called shwdt. endmenu @@ -1126,10 +1119,8 @@ config RTC sampling), then say Y here, and read for details. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module is called rtc. If you want to compile it as a module, - say M here and read . + To compile this driver as a module, choose M here: the + module will be called rtc. source "drivers/char/pcmcia/Kconfig" diff -prauN linux-2.6.0-test5/arch/sh/boot/compressed/misc.c wli-2.6.0-test5-bk12-25/arch/sh/boot/compressed/misc.c --- linux-2.6.0-test5/arch/sh/boot/compressed/misc.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/sh/boot/compressed/misc.c 2003-09-25 19:15:51.000000000 -0700 @@ -105,8 +105,8 @@ static void *malloc(int size) { void *p; - if (size <0) error("Malloc error\n"); - if (free_mem_ptr == 0) error("Memory error\n"); + if (size <0) error("Malloc error"); + if (free_mem_ptr == 0) error("Memory error"); free_mem_ptr = (free_mem_ptr + 3) & ~3; /* Align */ @@ -114,7 +114,7 @@ static void *malloc(int size) free_mem_ptr += size; if (free_mem_ptr >= free_mem_end_ptr) - error("\nOut of memory\n"); + error("Out of memory"); return p; } @@ -180,7 +180,7 @@ void* memcpy(void* __dest, __const void* static int fill_inbuf(void) { if (insize != 0) { - error("ran out of input data\n"); + error("ran out of input data"); } inbuf = input_data; diff -prauN linux-2.6.0-test5/arch/sh/kernel/setup.c wli-2.6.0-test5-bk12-25/arch/sh/kernel/setup.c --- linux-2.6.0-test5/arch/sh/kernel/setup.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/sh/kernel/setup.c 2003-09-25 19:15:51.000000000 -0700 @@ -353,7 +353,7 @@ void __init setup_arch(char **cmdline_p) sh_console_init(); #endif - ROOT_DEV = ORIG_ROOT_DEV; + ROOT_DEV = old_decode_dev(ORIG_ROOT_DEV); #ifdef CONFIG_BLK_DEV_RAM rd_image_start = RAMDISK_FLAGS & RAMDISK_IMAGE_START_MASK; diff -prauN linux-2.6.0-test5/arch/sh/mm/ioremap.c wli-2.6.0-test5-bk12-25/arch/sh/mm/ioremap.c --- linux-2.6.0-test5/arch/sh/mm/ioremap.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/sh/mm/ioremap.c 2003-09-25 20:03:31.000000000 -0700 @@ -45,7 +45,7 @@ static inline void remap_area_pte(pte_t } while (address && (address < end)); } -static inline int remap_area_pmd(pmd_t * pmd, unsigned long address, +static inline int remap_area_pmd(pgd_t *pgd, pmd_t * pmd, unsigned long address, unsigned long size, unsigned long phys_addr, unsigned long flags) { unsigned long end; @@ -83,11 +83,11 @@ int remap_area_pages(unsigned long addre spin_lock(&init_mm.page_table_lock); do { pmd_t *pmd; - pmd = pmd_alloc(&init_mm, dir, address); + pmd = pmd_alloc_map(&init_mm, dir, address); error = -ENOMEM; if (!pmd) break; - if (remap_area_pmd(pmd, address, end - address, + if (remap_area_pmd(dir, pmd, address, end - address, phys_addr + address, flags)) break; error = 0; diff -prauN linux-2.6.0-test5/arch/sparc/Kconfig wli-2.6.0-test5-bk12-25/arch/sparc/Kconfig --- linux-2.6.0-test5/arch/sparc/Kconfig 2003-09-08 12:49:50.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/sparc/Kconfig 2003-09-25 19:15:51.000000000 -0700 @@ -162,11 +162,8 @@ config PCMCIA for location). Please also read the PCMCIA-HOWTO, available from . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - When compiled this way, there will be modules called pcmcia_core - and ds. If you want to compile it as a module, say M here and - read . + To compile this driver as modules, choose M here: the + modules will be called pcmcia_core and ds. config SBUS bool @@ -248,11 +245,8 @@ config SUN_OPENPROMFS virtual file system, which you can mount to /proc/openprom by "mount -t openpromfs none /proc/openprom". - If you want to compile the /proc/openprom support as a module ( = - code which can be inserted in and removed from the running kernel - whenever you want), say M here and read - . - The module will be called openpromfs. If unsure, say M. + To compile the /proc/openprom support as a module, choose M here: the + module will be called openpromfs. If unsure, choose M. source "fs/Kconfig.binfmt" @@ -280,9 +274,7 @@ config PRINTER It is possible to share one parallel port among several devices (e.g. printer and ZIP drive) and it is safe to compile the corresponding drivers into the kernel. If you want to compile this - driver as a module however ( = code which can be inserted in and - removed from the running kernel whenever you want), say M here and - read and + driver as a module however, choose M here and read . The module will be called lp. If you have several parallel ports, you can specify which ports to @@ -321,10 +313,8 @@ config BLK_DEV_FD well as location of the fdutils package used to configure additional parameters of the driver at run time. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called floppy. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called floppy. config BLK_DEV_LOOP tristate "Loopback device support" @@ -370,10 +360,8 @@ config BLK_DEV_LOOP Note that this loop device has nothing to do with the loopback device used for network connections from the machine to itself. - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module - will be called loop. + To compile this driver as a module, choose M here: the + module will be called loop. Most users will answer N here. @@ -399,10 +387,8 @@ config BLK_DEV_NBD Note that this has nothing to do with the network file systems NFS or Coda; you can say N here even if you intend to use NFS or Coda. - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module - will be called nbd. + To compile this driver as a module, choose M here: the + module will be called nbd. If unsure, say N. @@ -421,10 +407,8 @@ config BLK_DEV_RAM Note that the kernel command line option "ramdisk=XX" is now obsolete. For details, read . - 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 and read . The module will be - called rd. + To compile this driver as a module, choose M here: the + module will be called rd. Most normal users won't need the RAM disk functionality, and can thus say N here. @@ -534,11 +518,8 @@ config SOFT_WATCHDOG from some situations that the hardware watchdog will recover from. Equally it's a lot cheaper to install. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - If you want to compile it as a module, say M here and read - . The module will be called - softdog. + To compile this driver as a module, choose M here: the + module will be called softdog. endmenu diff -prauN linux-2.6.0-test5/arch/sparc/boot/btfixupprep.c wli-2.6.0-test5-bk12-25/arch/sparc/boot/btfixupprep.c --- linux-2.6.0-test5/arch/sparc/boot/btfixupprep.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/sparc/boot/btfixupprep.c 2003-09-25 19:15:51.000000000 -0700 @@ -171,6 +171,8 @@ main1: } } else if (buffer[nbase+4] != '_') continue; + if (!strcmp (sect, ".text.exit")) + continue; if (strcmp (sect, ".text") && strcmp (sect, ".init.text") && strcmp (sect, ".fixup") && diff -prauN linux-2.6.0-test5/arch/sparc/kernel/setup.c wli-2.6.0-test5-bk12-25/arch/sparc/kernel/setup.c --- linux-2.6.0-test5/arch/sparc/kernel/setup.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/sparc/kernel/setup.c 2003-09-25 19:15:51.000000000 -0700 @@ -321,7 +321,7 @@ void __init setup_arch(char **cmdline_p) if (!root_flags) root_mountflags &= ~MS_RDONLY; - ROOT_DEV = root_dev; + ROOT_DEV = old_decode_dev(root_dev); #ifdef CONFIG_BLK_DEV_INITRD rd_image_start = ram_flags & RAMDISK_IMAGE_START_MASK; rd_prompt = ((ram_flags & RAMDISK_PROMPT_FLAG) != 0); diff -prauN linux-2.6.0-test5/arch/sparc/kernel/sun4d_smp.c wli-2.6.0-test5-bk12-25/arch/sparc/kernel/sun4d_smp.c --- linux-2.6.0-test5/arch/sparc/kernel/sun4d_smp.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/sparc/kernel/sun4d_smp.c 2003-09-25 19:15:52.000000000 -0700 @@ -343,11 +343,11 @@ void smp4d_cross_call(smpfunc_t func, un unsigned long a3 asm("i3") = arg3; unsigned long a4 asm("i4") = arg4; unsigned long a5 asm("i5") = arg5; - - __asm__ __volatile__(" - std %0, [%6] - std %2, [%6 + 8] - std %4, [%6 + 16]" : : + + __asm__ __volatile__( + "std %0, [%6]\n\t" + "std %2, [%6 + 8]\n\t" + "std %4, [%6 + 16]\n\t" : : "r"(f), "r"(a1), "r"(a2), "r"(a3), "r"(a4), "r"(a5), "r" (&ccall_info.func)); } diff -prauN linux-2.6.0-test5/arch/sparc/lib/checksum.S wli-2.6.0-test5-bk12-25/arch/sparc/lib/checksum.S --- linux-2.6.0-test5/arch/sparc/lib/checksum.S 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/sparc/lib/checksum.S 2003-09-25 19:15:52.000000000 -0700 @@ -145,36 +145,39 @@ cpout: retl ! get outta here .globl C_LABEL(__csum_partial_copy_start), C_LABEL(__csum_partial_copy_end) C_LABEL(__csum_partial_copy_start): -#define EX(x,y,a,b,z) \ +/* Work around cpp -rob */ +#define ALLOC #alloc +#define EXECINSTR #execinstr +#define EX(x,y,a,b) \ 98: x,y; \ - .section .fixup,z##alloc,z##execinstr; \ + .section .fixup,ALLOC,EXECINSTR; \ .align 4; \ 99: ba 30f; \ a, b, %o3; \ - .section __ex_table,z##alloc; \ + .section __ex_table,ALLOC; \ .align 4; \ .word 98b, 99b; \ .text; \ .align 4 -#define EX2(x,y,z) \ +#define EX2(x,y) \ 98: x,y; \ - .section __ex_table,z##alloc; \ + .section __ex_table,ALLOC; \ .align 4; \ .word 98b, 30f; \ .text; \ .align 4 -#define EX3(x,y,z) \ +#define EX3(x,y) \ 98: x,y; \ - .section __ex_table,z##alloc; \ + .section __ex_table,ALLOC; \ .align 4; \ .word 98b, 96f; \ .text; \ .align 4 -#define EXT(start,end,handler,z) \ - .section __ex_table,z##alloc; \ +#define EXT(start,end,handler) \ + .section __ex_table,ALLOC; \ .align 4; \ .word start, 0, end, handler; \ .text; \ @@ -247,21 +250,21 @@ C_LABEL(__csum_partial_copy_start): cc_end_cruft: be 1f andcc %o3, 4, %g0 - EX(ldd [%o0 + 0x00], %g2, and %o3, 0xf,#) + EX(ldd [%o0 + 0x00], %g2, and %o3, 0xf) add %o1, 8, %o1 addcc %g2, %g7, %g7 add %o0, 8, %o0 addxcc %g3, %g7, %g7 - EX2(st %g2, [%o1 - 0x08],#) + EX2(st %g2, [%o1 - 0x08]) addx %g0, %g7, %g7 andcc %o3, 4, %g0 - EX2(st %g3, [%o1 - 0x04],#) + EX2(st %g3, [%o1 - 0x04]) 1: be 1f andcc %o3, 3, %o3 - EX(ld [%o0 + 0x00], %g2, add %o3, 4,#) + EX(ld [%o0 + 0x00], %g2, add %o3, 4) add %o1, 4, %o1 addcc %g2, %g7, %g7 - EX2(st %g2, [%o1 - 0x04],#) + EX2(st %g2, [%o1 - 0x04]) addx %g0, %g7, %g7 andcc %o3, 3, %g0 add %o0, 4, %o0 @@ -271,14 +274,14 @@ cc_end_cruft: subcc %o3, 2, %o3 b 4f or %g0, %g0, %o4 -2: EX(lduh [%o0 + 0x00], %o4, add %o3, 2,#) +2: EX(lduh [%o0 + 0x00], %o4, add %o3, 2) add %o0, 2, %o0 - EX2(sth %o4, [%o1 + 0x00],#) + EX2(sth %o4, [%o1 + 0x00]) be 6f add %o1, 2, %o1 sll %o4, 16, %o4 -4: EX(ldub [%o0 + 0x00], %o5, add %g0, 1,#) - EX2(stb %o5, [%o1 + 0x00],#) +4: EX(ldub [%o0 + 0x00], %o5, add %g0, 1) + EX2(stb %o5, [%o1 + 0x00]) sll %o5, 8, %o5 or %o5, %o4, %o4 6: addcc %o4, %g7, %g7 @@ -295,9 +298,9 @@ cc_dword_align: andcc %o0, 0x2, %g0 be 1f andcc %o0, 0x4, %g0 - EX(lduh [%o0 + 0x00], %g4, add %g1, 0,#) + EX(lduh [%o0 + 0x00], %g4, add %g1, 0) sub %g1, 2, %g1 - EX2(sth %g4, [%o1 + 0x00],#) + EX2(sth %g4, [%o1 + 0x00]) add %o0, 2, %o0 sll %g4, 16, %g4 addcc %g4, %g7, %g7 @@ -311,9 +314,9 @@ cc_dword_align: or %g3, %g7, %g7 1: be 3f andcc %g1, 0xffffff80, %g0 - EX(ld [%o0 + 0x00], %g4, add %g1, 0,#) + EX(ld [%o0 + 0x00], %g4, add %g1, 0) sub %g1, 4, %g1 - EX2(st %g4, [%o1 + 0x00],#) + EX2(st %g4, [%o1 + 0x00]) add %o0, 4, %o0 addcc %g4, %g7, %g7 add %o1, 4, %o1 @@ -342,7 +345,7 @@ C_LABEL(__csum_partial_copy_sparc_generi CSUMCOPY_BIGCHUNK(%o0,%o1,%g7,0x20,%o4,%o5,%g2,%g3,%g4,%g5,%o2,%o3) CSUMCOPY_BIGCHUNK(%o0,%o1,%g7,0x40,%o4,%o5,%g2,%g3,%g4,%g5,%o2,%o3) CSUMCOPY_BIGCHUNK(%o0,%o1,%g7,0x60,%o4,%o5,%g2,%g3,%g4,%g5,%o2,%o3) -10: EXT(5b, 10b, 20f,#) ! note for exception handling +10: EXT(5b, 10b, 20f) ! note for exception handling sub %g1, 128, %g1 ! detract from length addx %g0, %g7, %g7 ! add in last carry bit andcc %g1, 0xffffff80, %g0 ! more to csum? @@ -367,7 +370,7 @@ cctbl: CSUMCOPY_LASTCHUNK(%o0,%o1,%g7,0x CSUMCOPY_LASTCHUNK(%o0,%o1,%g7,0x28,%g2,%g3,%g4,%g5) CSUMCOPY_LASTCHUNK(%o0,%o1,%g7,0x18,%g2,%g3,%g4,%g5) CSUMCOPY_LASTCHUNK(%o0,%o1,%g7,0x08,%g2,%g3,%g4,%g5) -12: EXT(cctbl, 12b, 22f,#) ! note for exception table handling +12: EXT(cctbl, 12b, 22f) ! note for exception table handling addx %g0, %g7, %g7 andcc %o3, 0xf, %g0 ! check for low bits set ccte: bne cc_end_cruft ! something left, handle it out of band @@ -378,7 +381,7 @@ ccdbl: CSUMCOPY_BIGCHUNK_ALIGNED(%o0,%o1 CSUMCOPY_BIGCHUNK_ALIGNED(%o0,%o1,%g7,0x20,%o4,%o5,%g2,%g3,%g4,%g5,%o2,%o3) CSUMCOPY_BIGCHUNK_ALIGNED(%o0,%o1,%g7,0x40,%o4,%o5,%g2,%g3,%g4,%g5,%o2,%o3) CSUMCOPY_BIGCHUNK_ALIGNED(%o0,%o1,%g7,0x60,%o4,%o5,%g2,%g3,%g4,%g5,%o2,%o3) -11: EXT(ccdbl, 11b, 21f,#) ! note for exception table handling +11: EXT(ccdbl, 11b, 21f) ! note for exception table handling sub %g1, 128, %g1 ! detract from length addx %g0, %g7, %g7 ! add in last carry bit andcc %g1, 0xffffff80, %g0 ! more to csum? @@ -395,9 +398,9 @@ ccslow: cmp %g1, 0 be,a 1f srl %g1, 1, %g4 sub %g1, 1, %g1 - EX(ldub [%o0], %g5, add %g1, 1,#) + EX(ldub [%o0], %g5, add %g1, 1) add %o0, 1, %o0 - EX2(stb %g5, [%o1],#) + EX2(stb %g5, [%o1]) srl %g1, 1, %g4 add %o1, 1, %o1 1: cmp %g4, 0 @@ -406,34 +409,34 @@ ccslow: cmp %g1, 0 andcc %o0, 2, %g0 be,a 1f srl %g4, 1, %g4 - EX(lduh [%o0], %o4, add %g1, 0,#) + EX(lduh [%o0], %o4, add %g1, 0) sub %g1, 2, %g1 srl %o4, 8, %g2 sub %g4, 1, %g4 - EX2(stb %g2, [%o1],#) + EX2(stb %g2, [%o1]) add %o4, %g5, %g5 - EX2(stb %o4, [%o1 + 1],#) + EX2(stb %o4, [%o1 + 1]) add %o0, 2, %o0 srl %g4, 1, %g4 add %o1, 2, %o1 1: cmp %g4, 0 be,a 2f andcc %g1, 2, %g0 - EX3(ld [%o0], %o4,#) + EX3(ld [%o0], %o4) 5: srl %o4, 24, %g2 srl %o4, 16, %g3 - EX2(stb %g2, [%o1],#) + EX2(stb %g2, [%o1]) srl %o4, 8, %g2 - EX2(stb %g3, [%o1 + 1],#) + EX2(stb %g3, [%o1 + 1]) add %o0, 4, %o0 - EX2(stb %g2, [%o1 + 2],#) + EX2(stb %g2, [%o1 + 2]) addcc %o4, %g5, %g5 - EX2(stb %o4, [%o1 + 3],#) + EX2(stb %o4, [%o1 + 3]) addx %g5, %g0, %g5 ! I am now to lazy to optimize this (question it add %o1, 4, %o1 ! is worthy). Maybe some day - with the sll/srl subcc %g4, 1, %g4 ! tricks bne,a 5b - EX3(ld [%o0], %o4,#) + EX3(ld [%o0], %o4) sll %g5, 16, %g2 srl %g5, 16, %g5 srl %g2, 16, %g2 @@ -441,19 +444,19 @@ ccslow: cmp %g1, 0 add %g2, %g5, %g5 2: be,a 3f andcc %g1, 1, %g0 - EX(lduh [%o0], %o4, and %g1, 3,#) + EX(lduh [%o0], %o4, and %g1, 3) andcc %g1, 1, %g0 srl %o4, 8, %g2 add %o0, 2, %o0 - EX2(stb %g2, [%o1],#) + EX2(stb %g2, [%o1]) add %g5, %o4, %g5 - EX2(stb %o4, [%o1 + 1],#) + EX2(stb %o4, [%o1 + 1]) add %o1, 2, %o1 3: be,a 1f sll %g5, 16, %o4 - EX(ldub [%o0], %g2, add %g0, 1,#) + EX(ldub [%o0], %g2, add %g0, 1) sll %g2, 8, %o4 - EX2(stb %g2, [%o1],#) + EX2(stb %g2, [%o1]) add %g5, %o4, %g5 sll %g5, 16, %o4 1: addcc %o4, %g5, %g5 diff -prauN linux-2.6.0-test5/arch/sparc/lib/copy_user.S wli-2.6.0-test5-bk12-25/arch/sparc/lib/copy_user.S --- linux-2.6.0-test5/arch/sparc/lib/copy_user.S 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/sparc/lib/copy_user.S 2003-09-25 19:15:52.000000000 -0700 @@ -16,41 +16,44 @@ #include #include -#define EX(x,y,a,b,z) \ +/* Work around cpp -rob */ +#define ALLOC #alloc +#define EXECINSTR #execinstr +#define EX(x,y,a,b) \ 98: x,y; \ - .section .fixup,z##alloc,z##execinstr; \ + .section .fixup,ALLOC,EXECINSTR; \ .align 4; \ 99: ba fixupretl; \ a, b, %g3; \ - .section __ex_table,z##alloc; \ + .section __ex_table,ALLOC; \ .align 4; \ .word 98b, 99b; \ .text; \ .align 4 -#define EX2(x,y,c,d,e,a,b,z) \ +#define EX2(x,y,c,d,e,a,b) \ 98: x,y; \ - .section .fixup,z##alloc,z##execinstr; \ + .section .fixup,ALLOC,EXECINSTR; \ .align 4; \ 99: c, d, e; \ ba fixupretl; \ a, b, %g3; \ - .section __ex_table,z##alloc; \ + .section __ex_table,ALLOC; \ .align 4; \ .word 98b, 99b; \ .text; \ .align 4 -#define EXO2(x,y,z) \ -98: x,##y; \ - .section __ex_table,z##alloc; \ +#define EXO2(x,y) \ +98: x, y; \ + .section __ex_table,ALLOC; \ .align 4; \ .word 98b, 97f; \ .text; \ .align 4 -#define EXT(start,end,handler,z) \ - .section __ex_table,z##alloc; \ +#define EXT(start,end,handler) \ + .section __ex_table,ALLOC; \ .align 4; \ .word start, 0, end, handler; \ .text; \ @@ -121,23 +124,23 @@ dword_align: be 4f andcc %o1, 2, %g0 - EXO2(ldub [%o1], %g2,#) + EXO2(ldub [%o1], %g2) add %o1, 1, %o1 - EXO2(stb %g2, [%o0],#) + EXO2(stb %g2, [%o0]) sub %o2, 1, %o2 bne 3f add %o0, 1, %o0 - EXO2(lduh [%o1], %g2,#) + EXO2(lduh [%o1], %g2) add %o1, 2, %o1 - EXO2(sth %g2, [%o0],#) + EXO2(sth %g2, [%o0]) sub %o2, 2, %o2 b 3f add %o0, 2, %o0 4: - EXO2(lduh [%o1], %g2,#) + EXO2(lduh [%o1], %g2) add %o1, 2, %o1 - EXO2(sth %g2, [%o0],#) + EXO2(sth %g2, [%o0]) sub %o2, 2, %o2 b 3f add %o0, 2, %o0 @@ -160,9 +163,9 @@ C_LABEL(__copy_user): /* %o0=dst %o1=src be 2f mov %o2, %g1 - EXO2(ld [%o1], %o4,#) + EXO2(ld [%o1], %o4) sub %g1, 4, %g1 - EXO2(st %o4, [%o0],#) + EXO2(st %o4, [%o0]) add %o1, 4, %o1 add %o0, 4, %o0 2: @@ -177,7 +180,7 @@ C_LABEL(__copy_user): /* %o0=dst %o1=src MOVE_BIGCHUNK(o1, o0, 0x40, o2, o3, o4, o5, g2, g3, g4, g5) MOVE_BIGCHUNK(o1, o0, 0x60, o2, o3, o4, o5, g2, g3, g4, g5) 80: - EXT(5b, 80b, 50f,#) + EXT(5b, 80b, 50f) subcc %g7, 128, %g7 add %o1, 128, %o1 bne 5b @@ -204,37 +207,37 @@ copy_user_table: MOVE_LASTCHUNK(o1, o0, 0x10, g2, g3, g4, g5) MOVE_LASTCHUNK(o1, o0, 0x00, g2, g3, g4, g5) copy_user_table_end: - EXT(copy_user_table, copy_user_table_end, 51f,#) + EXT(copy_user_table, copy_user_table_end, 51f) be copy_user_last7 andcc %g1, 4, %g0 - EX(ldd [%o1], %g2, and %g1, 0xf,#) + EX(ldd [%o1], %g2, and %g1, 0xf) add %o0, 8, %o0 add %o1, 8, %o1 - EX(st %g2, [%o0 - 0x08], and %g1, 0xf,#) - EX2(st %g3, [%o0 - 0x04], and %g1, 0xf, %g1, sub %g1, 4,#) + EX(st %g2, [%o0 - 0x08], and %g1, 0xf) + EX2(st %g3, [%o0 - 0x04], and %g1, 0xf, %g1, sub %g1, 4) copy_user_last7: be 1f andcc %g1, 2, %g0 - EX(ld [%o1], %g2, and %g1, 7,#) + EX(ld [%o1], %g2, and %g1, 7) add %o1, 4, %o1 - EX(st %g2, [%o0], and %g1, 7,#) + EX(st %g2, [%o0], and %g1, 7) add %o0, 4, %o0 1: be 1f andcc %g1, 1, %g0 - EX(lduh [%o1], %g2, and %g1, 3,#) + EX(lduh [%o1], %g2, and %g1, 3) add %o1, 2, %o1 - EX(sth %g2, [%o0], and %g1, 3,#) + EX(sth %g2, [%o0], and %g1, 3) add %o0, 2, %o0 1: be 1f nop - EX(ldub [%o1], %g2, add %g0, 1,#) - EX(stb %g2, [%o0], add %g0, 1,#) + EX(ldub [%o1], %g2, add %g0, 1) + EX(stb %g2, [%o0], add %g0, 1) 1: retl clr %o0 @@ -245,7 +248,7 @@ ldd_std: MOVE_BIGALIGNCHUNK(o1, o0, 0x40, o2, o3, o4, o5, g2, g3, g4, g5) MOVE_BIGALIGNCHUNK(o1, o0, 0x60, o2, o3, o4, o5, g2, g3, g4, g5) 81: - EXT(ldd_std, 81b, 52f,#) + EXT(ldd_std, 81b, 52f) subcc %g7, 128, %g7 add %o1, 128, %o1 bne ldd_std @@ -274,9 +277,9 @@ cannot_optimize: be 10f nop - EXO2(ldub [%o1], %g2,#) + EXO2(ldub [%o1], %g2) add %o1, 1, %o1 - EXO2(stb %g2, [%o0],#) + EXO2(stb %g2, [%o0]) sub %o2, 1, %o2 andcc %o2, 0xfffffff0, %o3 be short_end @@ -285,7 +288,7 @@ cannot_optimize: MOVE_HALFCHUNK(o1, o0, 0x00, g2, g3, g4, g5) MOVE_HALFCHUNK(o1, o0, 0x08, g2, g3, g4, g5) 82: - EXT(10b, 82b, 53f,#) + EXT(10b, 82b, 53f) subcc %o3, 0x10, %o3 add %o1, 0x10, %o1 bne 10b @@ -303,7 +306,7 @@ byte_chunk: MOVE_SHORTCHUNK(o1, o0, -0x0e, g2, g3) MOVE_SHORTCHUNK(o1, o0, -0x10, g2, g3) 83: - EXT(byte_chunk, 83b, 54f,#) + EXT(byte_chunk, 83b, 54f) subcc %o3, 0x10, %o3 add %o1, 0x10, %o1 bne byte_chunk @@ -328,11 +331,11 @@ short_end: MOVE_SHORTCHUNK(o1, o0, 0x02, g2, g3) MOVE_SHORTCHUNK(o1, o0, 0x00, g2, g3) short_table_end: - EXT(84b, short_table_end, 55f,#) + EXT(84b, short_table_end, 55f) be 1f nop - EX(ldub [%o1], %g2, add %g0, 1,#) - EX(stb %g2, [%o0], add %g0, 1,#) + EX(ldub [%o1], %g2, add %g0, 1) + EX(stb %g2, [%o0], add %g0, 1) 1: retl clr %o0 @@ -344,11 +347,11 @@ short_aligned_end: be 1f andcc %o2, 4, %g0 - EXO2(ld [%o1 + 0x00], %g2,#) - EXO2(ld [%o1 + 0x04], %g3,#) + EXO2(ld [%o1 + 0x00], %g2) + EXO2(ld [%o1 + 0x04], %g3) add %o1, 8, %o1 - EXO2(st %g2, [%o0 + 0x00],#) - EX(st %g3, [%o0 + 0x04], sub %o2, 4,#) + EXO2(st %g2, [%o0 + 0x00]) + EX(st %g3, [%o0 + 0x04], sub %o2, 4) add %o0, 8, %o0 1: b copy_user_last7 diff -prauN linux-2.6.0-test5/arch/sparc/lib/memset.S wli-2.6.0-test5-bk12-25/arch/sparc/lib/memset.S --- linux-2.6.0-test5/arch/sparc/lib/memset.S 2003-09-08 12:49:56.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/sparc/lib/memset.S 2003-09-25 19:15:52.000000000 -0700 @@ -10,20 +10,23 @@ #include #include -#define EX(x,y,a,b,z) \ +/* Work around cpp -rob */ +#define ALLOC #alloc +#define EXECINSTR #execinstr +#define EX(x,y,a,b) \ 98: x,y; \ - .section .fixup,z##alloc,z##execinstr; \ + .section .fixup,ALLOC,EXECINSTR; \ .align 4; \ 99: ba 30f; \ a, b, %o0; \ - .section __ex_table,z##alloc; \ + .section __ex_table,ALLOC; \ .align 4; \ .word 98b, 99b; \ .text; \ .align 4 -#define EXT(start,end,handler,z) \ - .section __ex_table,z##alloc; \ +#define EXT(start,end,handler) \ + .section __ex_table,ALLOC; \ .align 4; \ .word start, 0, end, handler; \ .text; \ @@ -74,13 +77,13 @@ C_LABEL(memset): 3: cmp %o2, 3 be 2f - EX(stb %g3, [%o0], sub %o1, 0,#) + EX(stb %g3, [%o0], sub %o1, 0) cmp %o2, 2 be 2f - EX(stb %g3, [%o0 + 0x01], sub %o1, 1,#) + EX(stb %g3, [%o0 + 0x01], sub %o1, 1) - EX(stb %g3, [%o0 + 0x02], sub %o1, 2,#) + EX(stb %g3, [%o0 + 0x02], sub %o1, 2) 2: sub %o2, 4, %o2 add %o1, %o2, %o1 @@ -101,7 +104,7 @@ C_LABEL(__bzero): be 2f mov %g3, %g2 - EX(st %g3, [%o0], sub %o1, 0,#) + EX(st %g3, [%o0], sub %o1, 0) sub %o1, 4, %o1 add %o0, 4, %o0 2: @@ -113,7 +116,7 @@ C_LABEL(__bzero): subcc %o3, 128, %o3 ZERO_BIG_BLOCK(%o0, 0x40, %g2) 11: - EXT(10b, 11b, 20f,#) + EXT(10b, 11b, 20f) bne 10b add %o0, 128, %o0 @@ -138,17 +141,17 @@ C_LABEL(__bzero): be 1f andcc %o1, 2, %g0 - EX(st %g3, [%o0], and %o1, 7,#) + EX(st %g3, [%o0], and %o1, 7) add %o0, 4, %o0 1: be 1f andcc %o1, 1, %g0 - EX(sth %g3, [%o0], and %o1, 3,#) + EX(sth %g3, [%o0], and %o1, 3) add %o0, 2, %o0 1: bne,a 8f - EX(stb %g3, [%o0], and %o1, 1,#) + EX(stb %g3, [%o0], and %o1, 1) 8: retl clr %o0 @@ -161,7 +164,7 @@ C_LABEL(__bzero): add %o0, 1, %o0 subcc %o1, 1, %o1 bne,a 8b - EX(stb %g3, [%o0 - 1], add %o1, 1,#) + EX(stb %g3, [%o0 - 1], add %o1, 1) 0: retl clr %o0 diff -prauN linux-2.6.0-test5/arch/sparc/math-emu/sfp-util.h wli-2.6.0-test5-bk12-25/arch/sparc/math-emu/sfp-util.h --- linux-2.6.0-test5/arch/sparc/math-emu/sfp-util.h 2003-09-08 12:50:47.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/sparc/math-emu/sfp-util.h 2003-09-25 19:15:52.000000000 -0700 @@ -4,8 +4,8 @@ #include #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ - __asm__ ("addcc %r4,%5,%1 - addx %r2,%3,%0" \ + __asm__ ("addcc %r4,%5,%1\n\t" \ + "addx %r2,%3,%0\n" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "%rJ" ((USItype)(ah)), \ @@ -14,8 +14,8 @@ "rI" ((USItype)(bl)) \ : "cc") #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ - __asm__ ("subcc %r4,%5,%1 - subx %r2,%3,%0" \ + __asm__ ("subcc %r4,%5,%1\n\t" \ + "subx %r2,%3,%0\n" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "rJ" ((USItype)(ah)), \ @@ -25,46 +25,46 @@ : "cc") #define umul_ppmm(w1, w0, u, v) \ - __asm__ ("! Inlined umul_ppmm - wr %%g0,%2,%%y ! SPARC has 0-3 delay insn after a wr - sra %3,31,%%g2 ! Don't move this insn - and %2,%%g2,%%g2 ! Don't move this insn - andcc %%g0,0,%%g1 ! Don't move this insn - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,%3,%%g1 - mulscc %%g1,0,%%g1 - add %%g1,%%g2,%0 - rd %%y,%1" \ + __asm__ ("! Inlined umul_ppmm\n\t" \ + "wr %%g0,%2,%%y ! SPARC has 0-3 delay insn after a wr\n\t" \ + "sra %3,31,%%g2 ! Don't move this insn\n\t" \ + "and %2,%%g2,%%g2 ! Don't move this insn\n\t" \ + "andcc %%g0,0,%%g1 ! Don't move this insn\n\t" \ + "mulscc %%g1,%3,%%g1\n\t" \ + "mulscc %%g1,%3,%%g1\n\t" \ + "mulscc %%g1,%3,%%g1\n\t" \ + "mulscc %%g1,%3,%%g1\n\t" \ + "mulscc %%g1,%3,%%g1\n\t" \ + "mulscc %%g1,%3,%%g1\n\t" \ + "mulscc %%g1,%3,%%g1\n\t" \ + "mulscc %%g1,%3,%%g1\n\t" \ + "mulscc %%g1,%3,%%g1\n\t" \ + "mulscc %%g1,%3,%%g1\n\t" \ + "mulscc %%g1,%3,%%g1\n\t" \ + "mulscc %%g1,%3,%%g1\n\t" \ + "mulscc %%g1,%3,%%g1\n\t" \ + "mulscc %%g1,%3,%%g1\n\t" \ + "mulscc %%g1,%3,%%g1\n\t" \ + "mulscc %%g1,%3,%%g1\n\t" \ + "mulscc %%g1,%3,%%g1\n\t" \ + "mulscc %%g1,%3,%%g1\n\t" \ + "mulscc %%g1,%3,%%g1\n\t" \ + "mulscc %%g1,%3,%%g1\n\t" \ + "mulscc %%g1,%3,%%g1\n\t" \ + "mulscc %%g1,%3,%%g1\n\t" \ + "mulscc %%g1,%3,%%g1\n\t" \ + "mulscc %%g1,%3,%%g1\n\t" \ + "mulscc %%g1,%3,%%g1\n\t" \ + "mulscc %%g1,%3,%%g1\n\t" \ + "mulscc %%g1,%3,%%g1\n\t" \ + "mulscc %%g1,%3,%%g1\n\t" \ + "mulscc %%g1,%3,%%g1\n\t" \ + "mulscc %%g1,%3,%%g1\n\t" \ + "mulscc %%g1,%3,%%g1\n\t" \ + "mulscc %%g1,%3,%%g1\n\t" \ + "mulscc %%g1,0,%%g1\n\t" \ + "add %%g1,%%g2,%0\n\t" \ + "rd %%y,%1\n" \ : "=r" ((USItype)(w1)), \ "=r" ((USItype)(w0)) \ : "%rI" ((USItype)(u)), \ @@ -74,30 +74,30 @@ /* It's quite necessary to add this much assembler for the sparc. The default udiv_qrnnd (in C) is more than 10 times slower! */ #define udiv_qrnnd(q, r, n1, n0, d) \ - __asm__ ("! Inlined udiv_qrnnd - mov 32,%%g1 - subcc %1,%2,%%g0 -1: bcs 5f - addxcc %0,%0,%0 ! shift n1n0 and a q-bit in lsb - sub %1,%2,%1 ! this kills msb of n - addx %1,%1,%1 ! so this can't give carry - subcc %%g1,1,%%g1 -2: bne 1b - subcc %1,%2,%%g0 - bcs 3f - addxcc %0,%0,%0 ! shift n1n0 and a q-bit in lsb - b 3f - sub %1,%2,%1 ! this kills msb of n -4: sub %1,%2,%1 -5: addxcc %1,%1,%1 - bcc 2b - subcc %%g1,1,%%g1 -! Got carry from n. Subtract next step to cancel this carry. - bne 4b - addcc %0,%0,%0 ! shift n1n0 and a 0-bit in lsb - sub %1,%2,%1 -3: xnor %0,0,%0 - ! End of inline udiv_qrnnd" \ + __asm__ ("! Inlined udiv_qrnnd\n\t" \ + "mov 32,%%g1\n\t" \ + "subcc %1,%2,%%g0\n\t" \ + "1: bcs 5f\n\t" \ + "addxcc %0,%0,%0 ! shift n1n0 and a q-bit in lsb\n\t" \ + "sub %1,%2,%1 ! this kills msb of n\n\t" \ + "addx %1,%1,%1 ! so this can't give carry\n\t" \ + "subcc %%g1,1,%%g1\n\t" \ + "2: bne 1b\n\t" \ + "subcc %1,%2,%%g0\n\t" \ + "bcs 3f\n\t" \ + "addxcc %0,%0,%0 ! shift n1n0 and a q-bit in lsb\n\t" \ + "b 3f\n\t" \ + "sub %1,%2,%1 ! this kills msb of n\n\t" \ + "4: sub %1,%2,%1\n\t" \ + "5: addxcc %1,%1,%1\n\t" \ + "bcc 2b\n\t" \ + "subcc %%g1,1,%%g1\n\t" \ + "! Got carry from n. Subtract next step to cancel this carry.\n\t" \ + "bne 4b\n\t" \ + "addcc %0,%0,%0 ! shift n1n0 and a 0-bit in lsb\n\t" \ + "sub %1,%2,%1\n\t" \ + "3: xnor %0,0,%0\n\t" \ + "! End of inline udiv_qrnnd\n" \ : "=&r" ((USItype)(q)), \ "=&r" ((USItype)(r)) \ : "r" ((USItype)(d)), \ diff -prauN linux-2.6.0-test5/arch/sparc/mm/generic.c wli-2.6.0-test5-bk12-25/arch/sparc/mm/generic.c --- linux-2.6.0-test5/arch/sparc/mm/generic.c 2003-09-08 12:50:27.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/sparc/mm/generic.c 2003-09-25 20:03:31.000000000 -0700 @@ -67,7 +67,7 @@ static inline void io_remap_pte_range(pt } while (address < end); } -static inline int io_remap_pmd_range(pmd_t * pmd, unsigned long address, unsigned long size, +static inline int io_remap_pmd_range(pgd_t *pgd, pmd_t * pmd, unsigned long address, unsigned long size, unsigned long offset, pgprot_t prot, int space) { unsigned long end; @@ -78,7 +78,7 @@ static inline int io_remap_pmd_range(pmd end = PGDIR_SIZE; offset -= address; do { - pte_t * pte = pte_alloc_map(current->mm, pmd, address); + pte_t * pte = pte_alloc_map(current->mm, pgd, &pmd, address); if (!pte) return -ENOMEM; io_remap_pte_range(pte, address, end - address, address + offset, prot, space); @@ -103,11 +103,11 @@ int io_remap_page_range(struct vm_area_s spin_lock(&mm->page_table_lock); while (from < end) { - pmd_t *pmd = pmd_alloc(current->mm, dir, from); + pmd_t *pmd = pmd_alloc_map(current->mm, dir, from); error = -ENOMEM; if (!pmd) break; - error = io_remap_pmd_range(pmd, from, end - from, offset + from, prot, space); + error = io_remap_pmd_range(pgd, pmd, from, end - from, offset + from, prot, space); if (error) break; from = (from + PGDIR_SIZE) & PGDIR_MASK; diff -prauN linux-2.6.0-test5/arch/sparc/mm/srmmu.c wli-2.6.0-test5-bk12-25/arch/sparc/mm/srmmu.c --- linux-2.6.0-test5/arch/sparc/mm/srmmu.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/sparc/mm/srmmu.c 2003-09-25 20:03:31.000000000 -0700 @@ -330,9 +330,6 @@ static unsigned long __srmmu_get_nocache offset = bit_map_string_get(&srmmu_nocache_map, size >> SRMMU_NOCACHE_BITMAP_SHIFT, align >> SRMMU_NOCACHE_BITMAP_SHIFT); -/* P3 */ /* printk("srmmu: get size %d align %d, got %d (0x%x)\n", - size >> SRMMU_NOCACHE_BITMAP_SHIFT, align >> SRMMU_NOCACHE_BITMAP_SHIFT, - offset, offset); */ if (offset == -1) { printk("srmmu: out of nocache %d: %d/%d\n", size, (int) srmmu_nocache_size, @@ -385,7 +382,6 @@ void srmmu_free_nocache(unsigned long va offset = (vaddr - SRMMU_NOCACHE_VADDR) >> SRMMU_NOCACHE_BITMAP_SHIFT; size = size >> SRMMU_NOCACHE_BITMAP_SHIFT; -/* P3 */ /* printk("srmmu: free off %d (0x%x) size %d\n", offset, offset, size); */ bit_map_clear(&srmmu_nocache_map, offset, size); } @@ -447,9 +443,6 @@ void srmmu_nocache_init(void) paddr = __pa((unsigned long)srmmu_nocache_pool); vaddr = SRMMU_NOCACHE_VADDR; -/* P3 */ printk("srmmu: pool 0x%x vaddr 0x%x bitmap 0x%x bits %d (0x%x)\n", - (int)srmmu_nocache_pool, vaddr, srmmu_nocache_bitmap, bitmap_bits, bitmap_bits); - while (vaddr < srmmu_nocache_end) { pgd = pgd_offset_k(vaddr); pmd = srmmu_pmd_offset(__nocache_fix(pgd), vaddr); @@ -2187,7 +2180,7 @@ void __init ld_mmu_srmmu(void) BTFIXUPSET_CALL(pte_pfn, srmmu_pte_pfn, BTFIXUPCALL_NORM); BTFIXUPSET_CALL(pmd_page, srmmu_pmd_page, BTFIXUPCALL_NORM); - BTFIXUPSET_CALL(pgd_page, srmmu_pgd_page, BTFIXUPCALL_NORM); + BTFIXUPSET_CALL(__pgd_page, srmmu_pgd_page, BTFIXUPCALL_NORM); BTFIXUPSET_SETHI(none_mask, 0xF0000000); @@ -2219,7 +2212,7 @@ void __init ld_mmu_srmmu(void) BTFIXUPSET_CALL(pte_alloc_one_kernel, srmmu_pte_alloc_one_kernel, BTFIXUPCALL_NORM); BTFIXUPSET_CALL(pte_alloc_one, srmmu_pte_alloc_one, BTFIXUPCALL_NORM); BTFIXUPSET_CALL(free_pmd_fast, srmmu_pmd_free, BTFIXUPCALL_NORM); - BTFIXUPSET_CALL(pmd_alloc_one, srmmu_pmd_alloc_one, BTFIXUPCALL_NORM); + BTFIXUPSET_CALL(__pmd_alloc_one, srmmu_pmd_alloc_one, BTFIXUPCALL_NORM); BTFIXUPSET_CALL(free_pgd_fast, srmmu_free_pgd_fast, BTFIXUPCALL_NORM); BTFIXUPSET_CALL(get_pgd_fast, srmmu_get_pgd_fast, BTFIXUPCALL_NORM); diff -prauN linux-2.6.0-test5/arch/sparc/mm/sun4c.c wli-2.6.0-test5-bk12-25/arch/sparc/mm/sun4c.c --- linux-2.6.0-test5/arch/sparc/mm/sun4c.c 2003-09-08 12:50:19.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/sparc/mm/sun4c.c 2003-09-25 20:03:31.000000000 -0700 @@ -2211,7 +2211,7 @@ void __init ld_mmu_sun4c(void) BTFIXUPSET_CALL(pte_alloc_one_kernel, sun4c_pte_alloc_one_kernel, BTFIXUPCALL_NORM); BTFIXUPSET_CALL(pte_alloc_one, sun4c_pte_alloc_one, BTFIXUPCALL_NORM); BTFIXUPSET_CALL(free_pmd_fast, sun4c_free_pmd_fast, BTFIXUPCALL_NOP); - BTFIXUPSET_CALL(pmd_alloc_one, sun4c_pmd_alloc_one, BTFIXUPCALL_RETO0); + BTFIXUPSET_CALL(__pmd_alloc_one, sun4c_pmd_alloc_one, BTFIXUPCALL_RETO0); BTFIXUPSET_CALL(free_pgd_fast, sun4c_free_pgd_fast, BTFIXUPCALL_NORM); BTFIXUPSET_CALL(get_pgd_fast, sun4c_get_pgd_fast, BTFIXUPCALL_NORM); @@ -2252,5 +2252,5 @@ void __init ld_mmu_sun4c(void) /* These should _never_ get called with two level tables. */ BTFIXUPSET_CALL(pgd_set, sun4c_pgd_set, BTFIXUPCALL_NOP); - BTFIXUPSET_CALL(pgd_page, sun4c_pgd_page, BTFIXUPCALL_RETO0); + BTFIXUPSET_CALL(__pgd_page, sun4c_pgd_page, BTFIXUPCALL_RETO0); } diff -prauN linux-2.6.0-test5/arch/sparc64/Kconfig wli-2.6.0-test5-bk12-25/arch/sparc64/Kconfig --- linux-2.6.0-test5/arch/sparc64/Kconfig 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/sparc64/Kconfig 2003-09-25 19:15:52.000000000 -0700 @@ -29,7 +29,8 @@ config BBC_I2C smartcard reader, if present. Say Y to enable support for these. config VT - bool + bool "Virtual terminal" if EMBEDDED + select INPUT default y ---help--- If you say Y here, you will get support for terminal devices with @@ -59,7 +60,8 @@ config VT shiny Linux system :-) config VT_CONSOLE - bool + bool "Support for console on virtual terminal" if EMBEDDED + depends on VT default y ---help--- The system console is the device which receives all kernel messages @@ -83,16 +85,6 @@ config HW_CONSOLE bool default y -config HUGETLB_PAGE - bool "SPARC64 Huge TLB Page Support" - help - This enables support for huge pages. User space applications - can make use of this support with the sys_alloc_hugepages and - sys_free_hugepages system calls. If your applications are - huge page aware, then say Y here. - - Otherwise, say N. - config SMP bool "Symmetric multi-processing support" ---help--- @@ -238,10 +230,8 @@ config ISAPNP Say Y here if you would like support for ISA Plug and Play devices. Some information is in . - This support is also available as a module called isapnp ( = - code which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this driver as a module, choose M here: the + module will be called isapnp. If unsure, say Y. @@ -283,11 +273,8 @@ config PCMCIA for location). Please also read the PCMCIA-HOWTO, available from . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - When compiled this way, there will be modules called pcmcia_core - and ds. If you want to compile it as a module, say M here and - read . + To compile this driver as modules, choose M here: the + modules will be called pcmcia_core and ds. config SBUS bool @@ -346,10 +333,8 @@ config RTC sampling), then say Y here, and read for details. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module is called rtc. If you want to compile it as a module, - say M here and read . + To compile this driver as a module, choose M here: the + module will be called rtc. source "drivers/pci/Kconfig" @@ -360,11 +345,8 @@ config SUN_OPENPROMFS virtual file system, which you can mount to /proc/openprom by "mount -t openpromfs none /proc/openprom". - If you want to compile the /proc/openprom support as a module ( = - code which can be inserted in and removed from the running kernel - whenever you want), say M here and read - . - The module will be called openpromfs. If unsure, say M. + To compile the /proc/openprom support as a module, choose M here: the + module will be called openpromfs. If unsure, choose M. config SPARC32_COMPAT bool "Kernel support for Linux/Sparc 32bit binary compatibility" @@ -410,10 +392,8 @@ config SOLARIS_EMUL This is experimental code which will enable you to run (many) Solaris binaries on your SPARC Linux machine. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called solaris. If you want to compile it as a - module, say M here and read . + To compile this code as a module, choose M here: the + module will be called solaris. source "drivers/parport/Kconfig" @@ -429,10 +409,8 @@ config PRINTER It is possible to share one parallel port among several devices (e.g. printer and ZIP drive) and it is safe to compile the - corresponding drivers into the kernel. If you want to compile this - driver as a module however ( = code which can be inserted in and - removed from the running kernel whenever you want), say M here and - read and + corresponding drivers into the kernel. + To compile this driver as a module, choose M here and read . The module will be called lp. If you have several parallel ports, you can specify which ports to @@ -451,10 +429,8 @@ config ENVCTRL Kernel support for temperature and fan monitoring on Sun SME machines. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called envctrl. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called envctrl. config DISPLAY7SEG tristate "7-Segment Display support" @@ -463,10 +439,8 @@ config DISPLAY7SEG This is the driver for the 7-segment display and LED present on Sun Microsystems CompactPCI models CP1400 and CP1500. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called display7seg. If you want to compile it - as a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called display7seg. If you do not have a CompactPCI model CP1400 or CP1500, or another UltraSPARC-IIi-cEngine boardset with a 7-segment display, @@ -479,10 +453,8 @@ config WATCHDOG_CP1XXX This is the driver for the hardware watchdog timers present on Sun Microsystems CompactPCI models CP1400 and CP1500. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called cpwatchdog. If you want to compile it - as a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called cpwatchdog. If you do not have a CompactPCI model CP1400 or CP1500, or another UltraSPARC-IIi-cEngine boardset with hardware watchdog, @@ -521,10 +493,8 @@ config BLK_DEV_FD well as location of the fdutils package used to configure additional parameters of the driver at run time. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called floppy. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called floppy. config BLK_DEV_LOOP tristate "Loopback device support" @@ -570,10 +540,8 @@ config BLK_DEV_LOOP Note that this loop device has nothing to do with the loopback device used for network connections from the machine to itself. - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module - will be called loop. + To compile this driver as a module, choose M here: the + module will be called loop. Most users will answer N here. @@ -599,10 +567,8 @@ config BLK_DEV_NBD Note that this has nothing to do with the network file systems NFS or Coda; you can say N here even if you intend to use NFS or Coda. - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module - will be called nbd. + To compile this driver as a module, choose M here: the + module will be called nbd. If unsure, say N. @@ -621,10 +587,8 @@ config BLK_DEV_RAM Note that the kernel command line option "ramdisk=XX" is now obsolete. For details, read . - 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 and read . The module will be - called rd. + To compile this driver as a module, choose M here: the + module will be called rd. Most normal users won't need the RAM disk functionality, and can thus say N here. @@ -783,11 +747,8 @@ config SOFT_WATCHDOG from some situations that the hardware watchdog will recover from. Equally it's a lot cheaper to install. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - If you want to compile it as a module, say M here and read - . The module will be called - softdog. + To compile this driver as a module, choose M here: the + module will be called softdog. endmenu diff -prauN linux-2.6.0-test5/arch/sparc64/defconfig wli-2.6.0-test5-bk12-25/arch/sparc64/defconfig --- linux-2.6.0-test5/arch/sparc64/defconfig 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/sparc64/defconfig 2003-09-25 19:15:52.000000000 -0700 @@ -1,13 +1,15 @@ # # Automatically generated make config: don't edit # +CONFIG_64BIT=y CONFIG_MMU=y # # Code maturity level options # CONFIG_EXPERIMENTAL=y -CONFIG_BROKEN=y +CONFIG_CLEAN_COMPILE=y +CONFIG_STANDALONE=y # # General setup @@ -17,6 +19,7 @@ CONFIG_SYSVIPC=y # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y CONFIG_LOG_BUF_SHIFT=15 +# CONFIG_IKCONFIG is not set # CONFIG_EMBEDDED is not set CONFIG_KALLSYMS=y CONFIG_FUTEX=y @@ -51,6 +54,10 @@ CONFIG_CPU_FREQ_TABLE=y CONFIG_US3_FREQ=m CONFIG_US2E_FREQ=m CONFIG_CPU_FREQ_PROC_INTF=y +CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set +CONFIG_CPU_FREQ_GOV_PERFORMANCE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=m CONFIG_CPU_FREQ_GOV_USERSPACE=m # CONFIG_CPU_FREQ_24_API is not set CONFIG_SPARC64=y @@ -67,7 +74,6 @@ CONFIG_RTC=y # CONFIG_PCI_LEGACY_PROC is not set # CONFIG_PCI_NAMES is not set CONFIG_SUN_OPENPROMFS=m -CONFIG_KCORE_ELF=y CONFIG_SPARC32_COMPAT=y CONFIG_COMPAT=y CONFIG_BINFMT_ELF32=y @@ -102,8 +108,6 @@ CONFIG_FW_LOADER=m # Graphics support # CONFIG_FB=y -# CONFIG_FB_CIRRUS is not set -# CONFIG_FB_PM2 is not set # CONFIG_FB_CYBER2000 is not set # CONFIG_FB_IMSTT is not set # CONFIG_FB_BW2 is not set @@ -119,7 +123,6 @@ CONFIG_FB_CG6=y # CONFIG_FB_3DFX is not set # CONFIG_FB_VOODOO1 is not set # CONFIG_FB_TRIDENT is not set -# CONFIG_FB_PM3 is not set CONFIG_FB_SBUS=y CONFIG_FB_FFB=y # CONFIG_FB_TCX is not set @@ -274,6 +277,7 @@ CONFIG_IDEDMA_AUTO=y # SCSI device support # CONFIG_SCSI=y +CONFIG_SCSI_PROC_FS=y # # SCSI support type (disk, tape, CD-ROM) @@ -309,7 +313,6 @@ CONFIG_AIC79XX_RESET_DELAY_MS=15000 # CONFIG_AIC79XX_DEBUG_ENABLE is not set CONFIG_AIC79XX_DEBUG_MASK=0 # CONFIG_AIC79XX_REG_PRETTY_PRINT is not set -# CONFIG_SCSI_DPT_I2O is not set # CONFIG_SCSI_ADVANSYS is not set # CONFIG_SCSI_MEGARAID is not set # CONFIG_SCSI_BUSLOGIC is not set @@ -319,7 +322,7 @@ CONFIG_SCSI_DMX3191D=m CONFIG_SCSI_EATA_PIO=m # CONFIG_SCSI_FUTURE_DOMAIN is not set # CONFIG_SCSI_GDTH is not set -# CONFIG_SCSI_INITIO is not set +CONFIG_SCSI_IPS=m CONFIG_SCSI_INIA100=m CONFIG_SCSI_PPA=m CONFIG_SCSI_IMM=m @@ -330,15 +333,12 @@ CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MOD CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 # CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set -# CONFIG_SCSI_PCI2000 is not set -# CONFIG_SCSI_PCI2220I is not set CONFIG_SCSI_QLOGIC_ISP=m CONFIG_SCSI_QLOGIC_FC=y CONFIG_SCSI_QLOGIC_FC_FIRMWARE=y # CONFIG_SCSI_QLOGIC_1280 is not set CONFIG_SCSI_QLOGICPTI=m CONFIG_SCSI_DC395x=m -# CONFIG_SCSI_DC390T is not set # CONFIG_SCSI_NSP32 is not set CONFIG_SCSI_DEBUG=m CONFIG_SCSI_SUNESP=y @@ -474,6 +474,7 @@ CONFIG_DECNET_ROUTE_FWMARK=y CONFIG_BRIDGE=m CONFIG_NETFILTER=y # CONFIG_NETFILTER_DEBUG is not set +CONFIG_BRIDGE_NETFILTER=y # # IP: Netfilter Configuration @@ -486,6 +487,7 @@ CONFIG_IP_NF_AMANDA=m CONFIG_IP_NF_QUEUE=m CONFIG_IP_NF_IPTABLES=m CONFIG_IP_NF_MATCH_LIMIT=m +CONFIG_IP_NF_MATCH_IPRANGE=m CONFIG_IP_NF_MATCH_MAC=m CONFIG_IP_NF_MATCH_PKTTYPE=m CONFIG_IP_NF_MATCH_MARK=m @@ -501,16 +503,16 @@ CONFIG_IP_NF_MATCH_TCPMSS=m CONFIG_IP_NF_MATCH_HELPER=m CONFIG_IP_NF_MATCH_STATE=m CONFIG_IP_NF_MATCH_CONNTRACK=m -CONFIG_IP_NF_MATCH_UNCLEAN=m CONFIG_IP_NF_MATCH_OWNER=m CONFIG_IP_NF_MATCH_PHYSDEV=m CONFIG_IP_NF_FILTER=m CONFIG_IP_NF_TARGET_REJECT=m -CONFIG_IP_NF_TARGET_MIRROR=m CONFIG_IP_NF_NAT=m CONFIG_IP_NF_NAT_NEEDED=y CONFIG_IP_NF_TARGET_MASQUERADE=m CONFIG_IP_NF_TARGET_REDIRECT=m +CONFIG_IP_NF_TARGET_NETMAP=m +CONFIG_IP_NF_TARGET_SAME=m CONFIG_IP_NF_NAT_LOCAL=y CONFIG_IP_NF_NAT_SNMP_BASIC=m CONFIG_IP_NF_NAT_IRC=m @@ -522,6 +524,7 @@ CONFIG_IP_NF_TARGET_TOS=m CONFIG_IP_NF_TARGET_ECN=m CONFIG_IP_NF_TARGET_DSCP=m CONFIG_IP_NF_TARGET_MARK=m +CONFIG_IP_NF_TARGET_CLASSIFY=m CONFIG_IP_NF_TARGET_LOG=m CONFIG_IP_NF_TARGET_ULOG=m CONFIG_IP_NF_TARGET_TCPMSS=m @@ -558,21 +561,27 @@ CONFIG_IP6_NF_TARGET_MARK=m # DECnet: Netfilter Configuration # CONFIG_DECNET_NF_GRABULATOR=m + +# +# Bridge: Netfilter Configuration +# CONFIG_BRIDGE_NF_EBTABLES=m +CONFIG_BRIDGE_EBT_BROUTE=m CONFIG_BRIDGE_EBT_T_FILTER=m CONFIG_BRIDGE_EBT_T_NAT=m -CONFIG_BRIDGE_EBT_BROUTE=m -CONFIG_BRIDGE_EBT_LOG=m -CONFIG_BRIDGE_EBT_IP=m +CONFIG_BRIDGE_EBT_802_3=m CONFIG_BRIDGE_EBT_ARP=m -CONFIG_BRIDGE_EBT_VLAN=m +CONFIG_BRIDGE_EBT_IP=m CONFIG_BRIDGE_EBT_MARK=m CONFIG_BRIDGE_EBT_PKTTYPE=m CONFIG_BRIDGE_EBT_STP=m -CONFIG_BRIDGE_EBT_SNAT=m +CONFIG_BRIDGE_EBT_VLAN=m +CONFIG_BRIDGE_EBT_ARPREPLY=m CONFIG_BRIDGE_EBT_DNAT=m -CONFIG_BRIDGE_EBT_REDIRECT=m CONFIG_BRIDGE_EBT_MARK_T=m +CONFIG_BRIDGE_EBT_REDIRECT=m +CONFIG_BRIDGE_EBT_SNAT=m +CONFIG_BRIDGE_EBT_LOG=m CONFIG_XFRM=y CONFIG_XFRM_USER=m @@ -781,7 +790,6 @@ CONFIG_NET_WIRELESS=y # Token Ring devices (depends on LLC=y) # CONFIG_NET_FC=y -# CONFIG_IPHASE5526 is not set # CONFIG_RCPCI is not set CONFIG_SHAPER=m @@ -830,8 +838,6 @@ CONFIG_ROSE=m # # AX.25 network device drivers # -# CONFIG_MKISS is not set -# CONFIG_6PACK is not set # CONFIG_BPQETHER is not set # CONFIG_BAYCOM_SER_FDX is not set # CONFIG_BAYCOM_SER_HDX is not set @@ -875,7 +881,6 @@ CONFIG_IRDA_FAST_RR=y # # Old SIR device drivers # -# CONFIG_IRTTY_OLD is not set # CONFIG_IRPORT_SIR is not set # @@ -886,7 +891,6 @@ CONFIG_IRDA_FAST_RR=y # FIR device drivers # # CONFIG_USB_IRDA is not set -# CONFIG_TOSHIBA_OLD is not set # CONFIG_TOSHIBA_FIR is not set # CONFIG_VLSI_FIR is not set @@ -896,11 +900,6 @@ CONFIG_IRDA_FAST_RR=y CONFIG_ISDN_BOOL=y # -# Old ISDN4Linux -# -# CONFIG_ISDN is not set - -# # CAPI subsystem # CONFIG_ISDN_CAPI=m @@ -1000,7 +999,6 @@ CONFIG_I2C_PROSAVAGE=m CONFIG_I2C_PHILIPSPAR=m CONFIG_SCx200_ACB=m CONFIG_I2C_ALGOPCF=m -# CONFIG_I2C_ELEKTOR is not set CONFIG_I2C_CHARDEV=m # @@ -1198,7 +1196,6 @@ CONFIG_VIDEO_DEV=y # # Video For Linux # -CONFIG_VIDEO_PROC_FS=y # # Video Adapters @@ -1214,7 +1211,6 @@ CONFIG_VIDEO_SAA5249=m CONFIG_TUNER_3036=m # CONFIG_VIDEO_STRADIS is not set # CONFIG_VIDEO_ZORAN is not set -# CONFIG_VIDEO_ZR36120 is not set CONFIG_VIDEO_SAA7134=m CONFIG_VIDEO_MXB=m CONFIG_VIDEO_DPC=m @@ -1247,7 +1243,6 @@ CONFIG_DVB_GRUNDIG_29504_491=m CONFIG_DVB_GRUNDIG_29504_401=m CONFIG_DVB_MT312=m CONFIG_DVB_VES1820=m -# CONFIG_DVB_TDA1004X is not set # # Supported SAA7146 based PCI Adapters @@ -1262,7 +1257,6 @@ CONFIG_DVB_BUDGET_PATCH=m # Supported USB Adapters # # CONFIG_DVB_TTUSB_BUDGET is not set -# CONFIG_DVB_TTUSB_DEC is not set # # Supported FlexCopII (B2C2) Adapters @@ -1430,7 +1424,7 @@ CONFIG_USB_HPUSBSCSI=m # # USB Network adaptors # -CONFIG_USB_AX8817X=m +CONFIG_USB_AX8817X_STANDALONE=m CONFIG_USB_CATC=m CONFIG_USB_KAWETH=m CONFIG_USB_PEGASUS=m @@ -1455,6 +1449,11 @@ CONFIG_USB_ZAURUS=y CONFIG_USB_CDCETHER=y # +# USB Network Adapters +# +CONFIG_USB_AX8817X=y + +# # USB port drivers # CONFIG_USB_USS720=m diff -prauN linux-2.6.0-test5/arch/sparc64/kernel/setup.c wli-2.6.0-test5-bk12-25/arch/sparc64/kernel/setup.c --- linux-2.6.0-test5/arch/sparc64/kernel/setup.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/sparc64/kernel/setup.c 2003-09-25 19:15:52.000000000 -0700 @@ -517,7 +517,7 @@ void __init setup_arch(char **cmdline_p) if (!root_flags) root_mountflags &= ~MS_RDONLY; - ROOT_DEV = root_dev; + ROOT_DEV = old_decode_dev(root_dev); #ifdef CONFIG_BLK_DEV_INITRD rd_image_start = ram_flags & RAMDISK_IMAGE_START_MASK; rd_prompt = ((ram_flags & RAMDISK_PROMPT_FLAG) != 0); diff -prauN linux-2.6.0-test5/arch/sparc64/kernel/smp.c wli-2.6.0-test5-bk12-25/arch/sparc64/kernel/smp.c --- linux-2.6.0-test5/arch/sparc64/kernel/smp.c 2003-09-08 12:49:50.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/sparc64/kernel/smp.c 2003-09-28 23:04:07.000000000 -0700 @@ -677,9 +677,9 @@ static __inline__ void __local_flush_dca #if (L1DCACHE_SIZE > PAGE_SIZE) __flush_dcache_page(page->virtual, ((tlb_type == spitfire) && - page->mapping != NULL)); + page_mapping(page) != NULL)); #else - if (page->mapping != NULL && + if (page_mapping(page) != NULL && tlb_type == spitfire) __flush_icache_page(__pa(page->virtual)); #endif @@ -700,7 +700,7 @@ void smp_flush_dcache_page_impl(struct p if (tlb_type == spitfire) { data0 = ((u64)&xcall_flush_dcache_page_spitfire); - if (page->mapping != NULL) + if (page_mapping(page) != NULL) data0 |= ((u64)1 << 32); spitfire_xcall_deliver(data0, __pa(page->virtual), @@ -732,7 +732,7 @@ void flush_dcache_page_all(struct mm_str goto flush_self; if (tlb_type == spitfire) { data0 = ((u64)&xcall_flush_dcache_page_spitfire); - if (page->mapping != NULL) + if (page_mapping(page) != NULL) data0 |= ((u64)1 << 32); spitfire_xcall_deliver(data0, __pa(page->virtual), diff -prauN linux-2.6.0-test5/arch/sparc64/kernel/sys_sparc32.c wli-2.6.0-test5-bk12-25/arch/sparc64/kernel/sys_sparc32.c --- linux-2.6.0-test5/arch/sparc64/kernel/sys_sparc32.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/sparc64/kernel/sys_sparc32.c 2003-09-25 19:15:52.000000000 -0700 @@ -1304,16 +1304,17 @@ int cp_compat_stat(struct kstat *stat, s { int err; - if (stat->size > MAX_NON_LFS) + if (stat->size > MAX_NON_LFS || !old_valid_dev(stat->dev) || + !old_valid_dev(stat->rdev)) return -EOVERFLOW; - err = put_user(stat->dev, &statbuf->st_dev); + err = put_user(old_encode_dev(stat->dev), &statbuf->st_dev); err |= put_user(stat->ino, &statbuf->st_ino); err |= put_user(stat->mode, &statbuf->st_mode); err |= put_user(stat->nlink, &statbuf->st_nlink); err |= put_user(high2lowuid(stat->uid), &statbuf->st_uid); err |= put_user(high2lowgid(stat->gid), &statbuf->st_gid); - err |= put_user(stat->rdev, &statbuf->st_rdev); + err |= put_user(old_encode_dev(stat->rdev), &statbuf->st_rdev); err |= put_user(stat->size, &statbuf->st_size); err |= put_user(stat->atime.tv_sec, &statbuf->st_atime); err |= put_user(0, &statbuf->__unused1); diff -prauN linux-2.6.0-test5/arch/sparc64/kernel/time.c wli-2.6.0-test5-bk12-25/arch/sparc64/kernel/time.c --- linux-2.6.0-test5/arch/sparc64/kernel/time.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/sparc64/kernel/time.c 2003-09-25 19:15:52.000000000 -0700 @@ -416,6 +416,7 @@ unsigned long timer_tick_offset; unsigned long timer_tick_compare; static unsigned long timer_ticks_per_usec_quotient; +static unsigned long timer_ticks_per_nsec_quotient; #define TICK_SIZE (tick_nsec / 1000) @@ -1051,12 +1052,18 @@ static struct notifier_block sparc64_cpu #endif /* The quotient formula is taken from the IA64 port. */ +#define SPARC64_USEC_PER_CYC_SHIFT 30UL +#define SPARC64_NSEC_PER_CYC_SHIFT 30UL void __init time_init(void) { unsigned long clock = sparc64_init_timers(timer_interrupt); timer_ticks_per_usec_quotient = - (((1000000UL << 30) + + (((1000000UL << SPARC64_USEC_PER_CYC_SHIFT) + + (clock / 2)) / clock); + + timer_ticks_per_nsec_quotient = + (((NSEC_PER_SEC << SPARC64_NSEC_PER_CYC_SHIFT) + (clock / 2)) / clock); #ifdef CONFIG_CPU_FREQ @@ -1072,7 +1079,16 @@ static __inline__ unsigned long do_getti ticks += timer_tick_offset; ticks -= timer_tick_compare; - return (ticks * timer_ticks_per_usec_quotient) >> 30UL; + return (ticks * timer_ticks_per_usec_quotient) + >> SPARC64_USEC_PER_CYC_SHIFT; +} + +unsigned long long sched_clock(void) +{ + unsigned long ticks = tick_ops->get_tick(); + + return (ticks * timer_ticks_per_nsec_quotient) + >> SPARC64_NSEC_PER_CYC_SHIFT; } int do_settimeofday(struct timespec *tv) diff -prauN linux-2.6.0-test5/arch/sparc64/mm/generic.c wli-2.6.0-test5-bk12-25/arch/sparc64/mm/generic.c --- linux-2.6.0-test5/arch/sparc64/mm/generic.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/sparc64/mm/generic.c 2003-09-25 20:03:31.000000000 -0700 @@ -85,7 +85,7 @@ static inline void io_remap_pte_range(pt } while (address < end); } -static inline int io_remap_pmd_range(pmd_t * pmd, unsigned long address, unsigned long size, +static inline int io_remap_pmd_range(pgd_t *pgd, pmd_t * pmd, unsigned long address, unsigned long size, unsigned long offset, pgprot_t prot, int space) { unsigned long end; @@ -96,7 +96,7 @@ static inline int io_remap_pmd_range(pmd end = PGDIR_SIZE; offset -= address; do { - pte_t * pte = pte_alloc_map(current->mm, pmd, address); + pte_t * pte = pte_alloc_map(current->mm, pgd, &pmd, address); if (!pte) return -ENOMEM; io_remap_pte_range(pte, address, end - address, address + offset, prot, space); @@ -122,11 +122,11 @@ int io_remap_page_range(struct vm_area_s spin_lock(&mm->page_table_lock); while (from < end) { - pmd_t *pmd = pmd_alloc(current->mm, dir, from); + pmd_t *pmd = pmd_alloc_map(current->mm, dir, from); error = -ENOMEM; if (!pmd) break; - error = io_remap_pmd_range(pmd, from, end - from, offset + from, prot, space); + error = io_remap_pmd_range(pgd, pmd, from, end - from, offset + from, prot, space); if (error) break; from = (from + PGDIR_SIZE) & PGDIR_MASK; diff -prauN linux-2.6.0-test5/arch/sparc64/mm/hugetlbpage.c wli-2.6.0-test5-bk12-25/arch/sparc64/mm/hugetlbpage.c --- linux-2.6.0-test5/arch/sparc64/mm/hugetlbpage.c 2003-09-08 12:50:13.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/sparc64/mm/hugetlbpage.c 2003-09-28 23:04:07.000000000 -0700 @@ -74,8 +74,8 @@ static struct page *alloc_hugetlb_page(v static void free_hugetlb_page(struct page *page) { spin_lock(&htlbpage_lock); - if ((page->mapping != NULL) && (page_count(page) == 2)) { - struct inode *inode = page->mapping->host; + if ((page_mapping(page) != NULL) && (page_count(page) == 2)) { + struct inode *inode = page_mapping(page)->host; int i; ClearPageDirty(page); @@ -107,9 +107,11 @@ static pte_t *huge_pte_alloc_map(struct pgd = pgd_offset(mm, addr); if (pgd) { - pmd = pmd_alloc(mm, pgd, addr); - if (pmd) - pte = pte_alloc_map(mm, pmd, addr); + pmd = pmd_alloc_map(mm, pgd, addr); + if (pmd) { + pte = pte_alloc_map(mm, pgd, &pmd, addr); + pmd_unmap(pmd); + } } return pte; } @@ -122,9 +124,11 @@ static pte_t *huge_pte_offset_map(struct pgd = pgd_offset(mm, addr); if (pgd) { - pmd = pmd_offset(pgd, addr); - if (pmd) + pmd = pmd_offset_map(pgd, addr); + if (pmd) { pte = pte_offset_map(pmd, addr); + pmd_unmap(pmd); + } } return pte; } diff -prauN linux-2.6.0-test5/arch/sparc64/mm/init.c wli-2.6.0-test5-bk12-25/arch/sparc64/mm/init.c --- linux-2.6.0-test5/arch/sparc64/mm/init.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/sparc64/mm/init.c 2003-09-28 23:04:07.000000000 -0700 @@ -128,9 +128,9 @@ __inline__ void flush_dcache_page_impl(s #if (L1DCACHE_SIZE > PAGE_SIZE) __flush_dcache_page(page->virtual, ((tlb_type == spitfire) && - page->mapping != NULL)); + page_mapping(page) != NULL)); #else - if (page->mapping != NULL && + if (page_mapping(page) != NULL && tlb_type == spitfire) __flush_icache_page(__pa(page->virtual)); #endif @@ -192,7 +192,7 @@ void update_mmu_cache(struct vm_area_str pfn = pte_pfn(pte); if (pfn_valid(pfn) && - (page = pfn_to_page(pfn), page->mapping) && + (page = pfn_to_page(pfn), page_mapping(page)) && ((pg_flags = page->flags) & (1UL << PG_dcache_dirty))) { int cpu = ((pg_flags >> 24) & (NR_CPUS - 1UL)); @@ -216,9 +216,9 @@ void flush_dcache_page(struct page *page int dirty = test_bit(PG_dcache_dirty, &page->flags); int dirty_cpu = dcache_dirty_cpu(page); - if (page->mapping && - list_empty(&page->mapping->i_mmap) && - list_empty(&page->mapping->i_mmap_shared)) { + if (page_mapping(page) && + list_empty(&page_mapping(page)->i_mmap) && + list_empty(&page_mapping(page)->i_mmap_shared)) { if (dirty) { if (dirty_cpu == smp_processor_id()) return; @@ -226,7 +226,7 @@ void flush_dcache_page(struct page *page } set_dcache_dirty(page); } else { - /* We could delay the flush for the !page->mapping + /* We could delay the flush for the !page_mapping(page) * case too. But that case is for exec env/arg * pages and those are %99 certainly going to get * faulted into the tlb (and thus flushed) anyways. @@ -268,7 +268,7 @@ static inline void flush_cache_pte_range if (!pfn_valid(pfn)) continue; page = pfn_to_page(pfn); - if (PageReserved(page) || !page->mapping) + if (PageReserved(page) || !page_mapping(page)) continue; pgaddr = (unsigned long) page_address(page); uaddr = address + offset; @@ -1706,10 +1706,6 @@ void __init mem_init(void) unsigned long addr, last; int i; -#ifndef CONFIG_SMP - cpu_data(0).udelay_val = loops_per_jiffy; -#endif - i = last_valid_pfn >> ((22 - PAGE_SHIFT) + 6); i += 1; sparc64_valid_addr_bitmap = (unsigned long *) diff -prauN linux-2.6.0-test5/arch/sparc64/mm/ultra.S wli-2.6.0-test5-bk12-25/arch/sparc64/mm/ultra.S --- linux-2.6.0-test5/arch/sparc64/mm/ultra.S 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/sparc64/mm/ultra.S 2003-09-28 23:04:07.000000000 -0700 @@ -615,7 +615,7 @@ xcall_flush_dcache_page_cheetah: /* %g1 .globl xcall_flush_dcache_page_spitfire xcall_flush_dcache_page_spitfire: /* %g1 == physical page address %g7 == kernel page virtual address - %g5 == (page->mapping != NULL) */ + %g5 == (page_mapping(page) != NULL) */ #if (L1DCACHE_SIZE > PAGE_SIZE) srlx %g1, (13 - 2), %g1 ! Form tag comparitor sethi %hi(L1DCACHE_SIZE), %g3 ! D$ size == 16K diff -prauN linux-2.6.0-test5/arch/sparc64/solaris/fs.c wli-2.6.0-test5-bk12-25/arch/sparc64/solaris/fs.c --- linux-2.6.0-test5/arch/sparc64/solaris/fs.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/sparc64/solaris/fs.c 2003-09-25 19:15:52.000000000 -0700 @@ -28,9 +28,6 @@ #include "conv.h" -#define R4_DEV(DEV) ((DEV & 0xff) | ((DEV & 0xff00) << 10)) -#define R4_MAJOR(DEV) (((DEV) >> 18) & 0x3fff) -#define R4_MINOR(DEV) ((DEV) & 0x3ffff) #define R3_VERSION 1 #define R4_VERSION 2 @@ -84,15 +81,17 @@ struct sol_stat64 { static inline int putstat(struct sol_stat *ubuf, struct kstat *kbuf) { - if (kbuf->size > MAX_NON_LFS) + if (kbuf->size > MAX_NON_LFS || + !sysv_valid_dev(kbuf->dev) || + !sysv_valid_dev(kbuf->rdev)) return -EOVERFLOW; - if (put_user (R4_DEV(kbuf->dev), &ubuf->st_dev) || + if (put_user (sysv_encode_dev(kbuf->dev), &ubuf->st_dev) || __put_user (kbuf->ino, &ubuf->st_ino) || __put_user (kbuf->mode, &ubuf->st_mode) || __put_user (kbuf->nlink, &ubuf->st_nlink) || __put_user (kbuf->uid, &ubuf->st_uid) || __put_user (kbuf->gid, &ubuf->st_gid) || - __put_user (R4_DEV(kbuf->rdev), &ubuf->st_rdev) || + __put_user (sysv_encode_dev(kbuf->rdev), &ubuf->st_rdev) || __put_user (kbuf->size, &ubuf->st_size) || __put_user (kbuf->atime.tv_sec, &ubuf->st_atime.tv_sec) || __put_user (kbuf->atime.tv_nsec, &ubuf->st_atime.tv_nsec) || @@ -109,13 +108,15 @@ static inline int putstat(struct sol_sta static inline int putstat64(struct sol_stat64 *ubuf, struct kstat *kbuf) { - if (put_user (R4_DEV(kbuf->dev), &ubuf->st_dev) || + if (!sysv_valid_dev(kbuf->dev) || !sysv_valid_dev(kbuf->rdev)) + return -EOVERFLOW; + if (put_user (sysv_encode_dev(kbuf->dev), &ubuf->st_dev) || __put_user (kbuf->ino, &ubuf->st_ino) || __put_user (kbuf->mode, &ubuf->st_mode) || __put_user (kbuf->nlink, &ubuf->st_nlink) || __put_user (kbuf->uid, &ubuf->st_uid) || __put_user (kbuf->gid, &ubuf->st_gid) || - __put_user (R4_DEV(kbuf->rdev), &ubuf->st_rdev) || + __put_user (sysv_encode_dev(kbuf->rdev), &ubuf->st_rdev) || __put_user (kbuf->size, &ubuf->st_size) || __put_user (kbuf->atime.tv_sec, &ubuf->st_atime.tv_sec) || __put_user (kbuf->atime.tv_nsec, &ubuf->st_atime.tv_nsec) || @@ -245,13 +246,16 @@ asmlinkage int solaris_fstat64(unsigned asmlinkage int solaris_mknod(u32 path, u32 mode, s32 dev) { - int (*sys_mknod)(const char *,int,dev_t) = - (int (*)(const char *,int,dev_t))SYS(mknod); - int major, minor; - - if ((major = R4_MAJOR(dev)) > 255 || - (minor = R4_MINOR(dev)) > 255) return -EINVAL; - return sys_mknod((const char *)A(path), mode, MKDEV(major,minor)); + int (*sys_mknod)(const char *,int,unsigned) = + (int (*)(const char *,int,unsigned))SYS(mknod); + int major = sysv_major(dev); + int minor = sysv_minor(dev); + + /* minor is guaranteed to be OK for MKDEV, major might be not */ + if (major > 0xfff) + return -EINVAL; + return sys_mknod((const char *)A(path), mode, + new_encode_dev(MKDEV(major,minor))); } asmlinkage int solaris_xmknod(int vers, u32 path, u32 mode, s32 dev) @@ -403,6 +407,8 @@ static int report_statvfs(struct vfsmoun if (j > 15) j = 15; if (IS_RDONLY(inode)) i = 1; if (mnt->mnt_flags & MNT_NOSUID) i |= 2; + if (!sysv_valid_dev(inode->i_sb->s_dev)) + return -EOVERFLOW; if (put_user (s.f_bsize, &ss->f_bsize) || __put_user (0, &ss->f_frsize) || __put_user (s.f_blocks, &ss->f_blocks) || @@ -411,7 +417,7 @@ static int report_statvfs(struct vfsmoun __put_user (s.f_files, &ss->f_files) || __put_user (s.f_ffree, &ss->f_ffree) || __put_user (s.f_ffree, &ss->f_favail) || - __put_user (R4_DEV(inode->i_sb->s_dev), &ss->f_fsid) || + __put_user (sysv_encode_dev(inode->i_sb->s_dev), &ss->f_fsid) || __copy_to_user (ss->f_basetype,p,j) || __put_user (0, (char *)&ss->f_basetype[j]) || __put_user (s.f_namelen, &ss->f_namemax) || @@ -437,6 +443,8 @@ static int report_statvfs64(struct vfsmo if (j > 15) j = 15; if (IS_RDONLY(inode)) i = 1; if (mnt->mnt_flags & MNT_NOSUID) i |= 2; + if (!sysv_valid_dev(inode->i_sb->s_dev)) + return -EOVERFLOW; if (put_user (s.f_bsize, &ss->f_bsize) || __put_user (0, &ss->f_frsize) || __put_user (s.f_blocks, &ss->f_blocks) || @@ -445,7 +453,7 @@ static int report_statvfs64(struct vfsmo __put_user (s.f_files, &ss->f_files) || __put_user (s.f_ffree, &ss->f_ffree) || __put_user (s.f_ffree, &ss->f_favail) || - __put_user (R4_DEV(inode->i_sb->s_dev), &ss->f_fsid) || + __put_user (sysv_encode_dev(inode->i_sb->s_dev), &ss->f_fsid) || __copy_to_user (ss->f_basetype,p,j) || __put_user (0, (char *)&ss->f_basetype[j]) || __put_user (s.f_namelen, &ss->f_namemax) || diff -prauN linux-2.6.0-test5/arch/sparc64/solaris/misc.c wli-2.6.0-test5-bk12-25/arch/sparc64/solaris/misc.c --- linux-2.6.0-test5/arch/sparc64/solaris/misc.c 2003-09-08 12:50:32.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/sparc64/solaris/misc.c 2003-09-25 19:15:52.000000000 -0700 @@ -392,7 +392,7 @@ asmlinkage int solaris_procids(int cmd, switch (cmd) { case 0: /* getpgrp */ - return current->pgrp; + return process_group(current); case 1: /* setpgrp */ { int (*sys_setpgid)(pid_t,pid_t) = @@ -403,7 +403,7 @@ asmlinkage int solaris_procids(int cmd, ret = sys_setpgid(0, 0); if (ret) return ret; current->tty = NULL; - return current->pgrp; + return process_group(current); } case 2: /* getsid */ { diff -prauN linux-2.6.0-test5/arch/x86_64/Kconfig wli-2.6.0-test5-bk12-25/arch/x86_64/Kconfig --- linux-2.6.0-test5/arch/x86_64/Kconfig 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/x86_64/Kconfig 2003-09-25 19:15:52.000000000 -0700 @@ -171,14 +171,6 @@ config MTRR See for more information. -config HUGETLB_PAGE - bool "Huge TLB Page Support" - help - This enables support for huge pages. User space applications - can make use of this support with the hugetlbfs file system - To actually use it you need to pass an hugepages= argument - to the kernel at boot time. - config SMP bool "Symmetric multi-processing support" ---help--- diff -prauN linux-2.6.0-test5/arch/x86_64/Makefile wli-2.6.0-test5-bk12-25/arch/x86_64/Makefile --- linux-2.6.0-test5/arch/x86_64/Makefile 2003-09-08 12:50:23.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/x86_64/Makefile 2003-09-25 19:15:52.000000000 -0700 @@ -37,6 +37,8 @@ LDFLAGS := -m elf_x86_64 OBJCOPYFLAGS := -O binary -R .note -R .comment -S LDFLAGS_vmlinux := -e stext +check_gcc = $(shell if $(CC) $(1) -S -o /dev/null -xc /dev/null > /dev/null 2>&1 ; then echo "$(1)"; else echo "$(2)"; fi) + CFLAGS += -mno-red-zone CFLAGS += -mcmodel=kernel CFLAGS += -pipe @@ -44,13 +46,13 @@ CFLAGS += -pipe # actually it makes the kernel smaller too. CFLAGS += -fno-reorder-blocks # should lower this a lot and see how much .text is saves -CFLAGS += -finline-limit=2000 +# CFLAGS += -finline-limit=2000 CFLAGS += -Wno-sign-compare # don't enable this when you use kgdb: ifneq ($(CONFIG_X86_REMOTE_DEBUG),y) CFLAGS += -fno-asynchronous-unwind-tables endif -#CFLAGS += -funit-at-a-time +CFLAGS += $(call check_gcc,-funit-at-a-time,) head-y := arch/x86_64/kernel/head.o arch/x86_64/kernel/head64.o arch/x86_64/kernel/init_task.o diff -prauN linux-2.6.0-test5/arch/x86_64/boot/compressed/misc.c wli-2.6.0-test5-bk12-25/arch/x86_64/boot/compressed/misc.c --- linux-2.6.0-test5/arch/x86_64/boot/compressed/misc.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/x86_64/boot/compressed/misc.c 2003-09-25 19:15:52.000000000 -0700 @@ -116,8 +116,8 @@ static void *malloc(int size) { void *p; - if (size <0) error("Malloc error\n"); - if (free_mem_ptr <= 0) error("Memory error\n"); + if (size <0) error("Malloc error"); + if (free_mem_ptr <= 0) error("Memory error"); free_mem_ptr = (free_mem_ptr + 3) & ~3; /* Align */ @@ -125,7 +125,7 @@ static void *malloc(int size) free_mem_ptr += size; if (free_mem_ptr >= free_mem_end_ptr) - error("\nOut of memory\n"); + error("Out of memory"); return p; } @@ -215,7 +215,7 @@ void* memcpy(void* dest, const void* src static int fill_inbuf(void) { if (insize != 0) { - error("ran out of input data\n"); + error("ran out of input data"); } inbuf = input_data; @@ -280,9 +280,9 @@ static void error(char *x) void setup_normal_output_buffer(void) { #ifdef STANDARD_MEMORY_BIOS_CALL - if (EXT_MEM_K < 1024) error("Less than 2MB of memory.\n"); + if (EXT_MEM_K < 1024) error("Less than 2MB of memory"); #else - if ((ALT_MEM_K > EXT_MEM_K ? ALT_MEM_K : EXT_MEM_K) < 1024) error("Less than 2MB of memory.\n"); + if ((ALT_MEM_K > EXT_MEM_K ? ALT_MEM_K : EXT_MEM_K) < 1024) error("Less than 2MB of memory"); #endif output_data = (char *)0x100000; /* Points to 1M */ free_mem_end_ptr = (long)real_mode; @@ -297,9 +297,9 @@ void setup_output_buffer_if_we_run_high( { high_buffer_start = (uch *)(((ulg)&end) + HEAP_SIZE); #ifdef STANDARD_MEMORY_BIOS_CALL - if (EXT_MEM_K < (3*1024)) error("Less than 4MB of memory.\n"); + if (EXT_MEM_K < (3*1024)) error("Less than 4MB of memory"); #else - if ((ALT_MEM_K > EXT_MEM_K ? ALT_MEM_K : EXT_MEM_K) < (3*1024)) error("Less than 4MB of memory.\n"); + if ((ALT_MEM_K > EXT_MEM_K ? ALT_MEM_K : EXT_MEM_K) < (3*1024)) error("Less than 4MB of memory"); #endif mv->low_buffer_start = output_data = (char *)LOW_BUFFER_START; low_buffer_end = ((unsigned int)real_mode > LOW_BUFFER_MAX diff -prauN linux-2.6.0-test5/arch/x86_64/defconfig wli-2.6.0-test5-bk12-25/arch/x86_64/defconfig --- linux-2.6.0-test5/arch/x86_64/defconfig 2003-09-08 12:50:16.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/x86_64/defconfig 2003-09-25 19:15:52.000000000 -0700 @@ -2,6 +2,7 @@ # Automatically generated make config: don't edit # CONFIG_X86_64=y +CONFIG_64BIT=y CONFIG_X86=y CONFIG_MMU=y CONFIG_RWSEM_GENERIC_SPINLOCK=y @@ -14,7 +15,8 @@ CONFIG_GENERIC_ISA_DMA=y # Code maturity level options # CONFIG_EXPERIMENTAL=y -# CONFIG_BROKEN is not set +CONFIG_CLEAN_COMPILE=y +CONFIG_STANDALONE=y # # General setup @@ -110,7 +112,6 @@ CONFIG_PCI_DIRECT=y # # Executable file formats / Emulations # -CONFIG_KCORE_ELF=y CONFIG_BINFMT_ELF=y # CONFIG_BINFMT_MISC is not set CONFIG_IA32_EMULATION=y @@ -215,6 +216,7 @@ CONFIG_IDEDMA_AUTO=y # SCSI device support # CONFIG_SCSI=y +# CONFIG_SCSI_PROC_FS is not set # # SCSI support type (disk, tape, CD-ROM) @@ -243,7 +245,6 @@ CONFIG_BLK_DEV_SD=y # CONFIG_SCSI_AIC7XXX_OLD is not set # CONFIG_SCSI_AIC79XX is not set # CONFIG_SCSI_ADVANSYS is not set -# CONFIG_SCSI_AM53C974 is not set # CONFIG_SCSI_MEGARAID is not set # CONFIG_SCSI_BUSLOGIC is not set # CONFIG_SCSI_CPQFCTS is not set @@ -253,17 +254,12 @@ CONFIG_BLK_DEV_SD=y # CONFIG_SCSI_FUTURE_DOMAIN is not set # CONFIG_SCSI_GDTH is not set CONFIG_SCSI_IPS=m -# CONFIG_SCSI_INITIO is not set # CONFIG_SCSI_INIA100 is not set # CONFIG_SCSI_SYM53C8XX_2 is not set -# CONFIG_SCSI_SYM53C8XX is not set -# CONFIG_SCSI_PCI2000 is not set -# CONFIG_SCSI_PCI2220I is not set # CONFIG_SCSI_QLOGIC_ISP is not set # CONFIG_SCSI_QLOGIC_FC is not set # CONFIG_SCSI_QLOGIC_1280 is not set # CONFIG_SCSI_DC395x is not set -# CONFIG_SCSI_DC390T is not set # CONFIG_SCSI_NSP32 is not set # CONFIG_SCSI_DEBUG is not set @@ -357,7 +353,6 @@ CONFIG_NETDEVICES=y # CONFIG_BONDING is not set # CONFIG_EQUALIZER is not set # CONFIG_TUN is not set -# CONFIG_ETHERTAP is not set # # Ethernet (10 or 100Mbit) @@ -559,7 +554,6 @@ CONFIG_RTC=y # # Ftape, the floppy tape device driver # -# CONFIG_FTAPE is not set CONFIG_AGP=y CONFIG_AGP_AMD64=y # CONFIG_DRM is not set @@ -716,8 +710,6 @@ CONFIG_SOUND_ICH=y # CONFIG_SOUND_RME96XX is not set # CONFIG_SOUND_SONICVIBES is not set # CONFIG_SOUND_TRIDENT is not set -# CONFIG_SOUND_MSNDCLAS is not set -# CONFIG_SOUND_MSNDPIN is not set # CONFIG_SOUND_VIA82CXXX is not set # CONFIG_SOUND_OSS is not set # CONFIG_SOUND_ALI5455 is not set diff -prauN linux-2.6.0-test5/arch/x86_64/ia32/Makefile wli-2.6.0-test5-bk12-25/arch/x86_64/ia32/Makefile --- linux-2.6.0-test5/arch/x86_64/ia32/Makefile 2003-09-08 12:49:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/x86_64/ia32/Makefile 2003-09-25 19:15:52.000000000 -0700 @@ -8,12 +8,16 @@ obj-$(CONFIG_IA32_EMULATION) := ia32entr $(obj)/syscall32.o: $(src)/syscall32.c $(obj)/vsyscall.so -# The DSO images are built using a special linker script. -$(obj)/vsyscall.so: $(src)/vsyscall.lds $(obj)/vsyscall.o - $(CC) -m32 -nostdlib -shared -s -Wl,-soname=linux-gate.so.1 \ - -o $@ -Wl,-T,$^ +# Teach kbuild about targets +targets := vsyscall.o vsyscall.so -clean-files += vsyscall.so +# The DSO images are built using a special linker script +quiet_cmd_vsyscall = SYSCALL $@ + cmd_vsyscall = $(CC) -m32 -nostdlib -shared -s \ + -Wl,-soname=linux-gate.so.1 -o $@ \ + -Wl,-T,$(filter-out FORCE,$^) +$(obj)/vsyscall.so: $(src)/vsyscall.lds $(obj)/vsyscall.o FORCE + $(call if_changed,vsyscall) AFLAGS_vsyscall.o = -m32 CFLAGS_ia32_ioctl.o += -Ifs/ diff -prauN linux-2.6.0-test5/arch/x86_64/ia32/ia32_binfmt.c wli-2.6.0-test5-bk12-25/arch/x86_64/ia32/ia32_binfmt.c --- linux-2.6.0-test5/arch/x86_64/ia32/ia32_binfmt.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/x86_64/ia32/ia32_binfmt.c 2003-09-28 21:47:08.000000000 -0700 @@ -368,7 +368,8 @@ int setup_arg_pages(struct linux_binprm struct page *page = bprm->page[i]; if (page) { bprm->page[i] = NULL; - put_dirty_page(current,page,stack_base,PAGE_COPY_EXEC); + put_dirty_page(current, mpnt, page, + stack_base, PAGE_COPY_EXEC); } stack_base += PAGE_SIZE; } diff -prauN linux-2.6.0-test5/arch/x86_64/ia32/ia32_ioctl.c wli-2.6.0-test5-bk12-25/arch/x86_64/ia32/ia32_ioctl.c --- linux-2.6.0-test5/arch/x86_64/ia32/ia32_ioctl.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/x86_64/ia32/ia32_ioctl.c 2003-09-25 19:15:52.000000000 -0700 @@ -35,7 +35,7 @@ static int tiocgdev(unsigned fd, unsigne real_tty = (struct tty_struct *)file->private_data; if (!real_tty) return -EINVAL; - return put_user(real_tty->device, ptr); + return put_user(new_encode_dev(tty_devnum(real_tty)), ptr); } diff -prauN linux-2.6.0-test5/arch/x86_64/ia32/sys_ia32.c wli-2.6.0-test5-bk12-25/arch/x86_64/ia32/sys_ia32.c --- linux-2.6.0-test5/arch/x86_64/ia32/sys_ia32.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/x86_64/ia32/sys_ia32.c 2003-09-25 19:15:52.000000000 -0700 @@ -89,27 +89,18 @@ #define low2highgid(gid) ((gid) == (u16)-1) ? (gid_t)-1 : (gid_t)(gid) extern int overflowuid,overflowgid; - -extern asmlinkage long sys_newstat(char * filename, struct stat * statbuf); -extern asmlinkage long sys_newlstat(char * filename, struct stat * statbuf); -extern asmlinkage long sys_newfstat(unsigned int fd, struct stat * statbuf); - - -extern asmlinkage long sys_newstat(char * filename, struct stat * statbuf); -extern asmlinkage long sys_newlstat(char * filename, struct stat * statbuf); -extern asmlinkage long sys_newfstat(unsigned int fd, struct stat * statbuf); - - int cp_compat_stat(struct kstat *kbuf, struct compat_stat *ubuf) { + if (!old_valid_dev(kbuf->dev) || !old_valid_dev(kbuf->rdev)) + return -EOVERFLOW; if (verify_area(VERIFY_WRITE, ubuf, sizeof(struct compat_stat)) || - __put_user (kbuf->dev, &ubuf->st_dev) || + __put_user (old_encode_dev(kbuf->dev), &ubuf->st_dev) || __put_user (kbuf->ino, &ubuf->st_ino) || __put_user (kbuf->mode, &ubuf->st_mode) || __put_user (kbuf->nlink, &ubuf->st_nlink) || __put_user (kbuf->uid, &ubuf->st_uid) || __put_user (kbuf->gid, &ubuf->st_gid) || - __put_user (kbuf->rdev, &ubuf->st_rdev) || + __put_user (old_encode_dev(kbuf->rdev), &ubuf->st_rdev) || __put_user (kbuf->size, &ubuf->st_size) || __put_user (kbuf->atime.tv_sec, &ubuf->st_atime) || __put_user (kbuf->atime.tv_nsec, &ubuf->st_atime_nsec) || @@ -127,26 +118,26 @@ int cp_compat_stat(struct kstat *kbuf, s support for 64bit inode numbers. */ static int -putstat64(struct stat64 *ubuf, struct stat *kbuf) +cp_stat64(struct stat64 *ubuf, struct kstat *stat) { if (verify_area(VERIFY_WRITE, ubuf, sizeof(struct stat64)) || - __put_user (kbuf->st_dev, &ubuf->st_dev) || - __put_user (kbuf->st_ino, &ubuf->__st_ino) || - __put_user (kbuf->st_ino, &ubuf->st_ino) || - __put_user (kbuf->st_mode, &ubuf->st_mode) || - __put_user (kbuf->st_nlink, &ubuf->st_nlink) || - __put_user (kbuf->st_uid, &ubuf->st_uid) || - __put_user (kbuf->st_gid, &ubuf->st_gid) || - __put_user (kbuf->st_rdev, &ubuf->st_rdev) || - __put_user (kbuf->st_size, &ubuf->st_size) || - __put_user (kbuf->st_atime, &ubuf->st_atime) || - __put_user (kbuf->st_atime_nsec, &ubuf->st_atime_nsec) || - __put_user (kbuf->st_mtime, &ubuf->st_mtime) || - __put_user (kbuf->st_mtime_nsec, &ubuf->st_mtime_nsec) || - __put_user (kbuf->st_ctime, &ubuf->st_ctime) || - __put_user (kbuf->st_ctime_nsec, &ubuf->st_ctime_nsec) || - __put_user (kbuf->st_blksize, &ubuf->st_blksize) || - __put_user (kbuf->st_blocks, &ubuf->st_blocks)) + __put_user(huge_encode_dev(stat->dev), &ubuf->st_dev) || + __put_user (stat->ino, &ubuf->__st_ino) || + __put_user (stat->ino, &ubuf->st_ino) || + __put_user (stat->mode, &ubuf->st_mode) || + __put_user (stat->nlink, &ubuf->st_nlink) || + __put_user (stat->uid, &ubuf->st_uid) || + __put_user (stat->gid, &ubuf->st_gid) || + __put_user (huge_encode_dev(stat->rdev), &ubuf->st_rdev) || + __put_user (stat->size, &ubuf->st_size) || + __put_user (stat->atime.tv_sec, &ubuf->st_atime) || + __put_user (stat->atime.tv_nsec, &ubuf->st_atime_nsec) || + __put_user (stat->mtime.tv_sec, &ubuf->st_mtime) || + __put_user (stat->mtime.tv_nsec, &ubuf->st_mtime_nsec) || + __put_user (stat->ctime.tv_sec, &ubuf->st_ctime) || + __put_user (stat->ctime.tv_nsec, &ubuf->st_ctime_nsec) || + __put_user (stat->blksize, &ubuf->st_blksize) || + __put_user (stat->blocks, &ubuf->st_blocks)) return -EFAULT; return 0; } @@ -154,50 +145,33 @@ putstat64(struct stat64 *ubuf, struct st asmlinkage long sys32_stat64(char * filename, struct stat64 *statbuf) { - int ret; - struct stat s; - mm_segment_t old_fs = get_fs(); - - set_fs (KERNEL_DS); - ret = sys_newstat(filename, &s); - set_fs (old_fs); - if (putstat64 (statbuf, &s)) - return -EFAULT; + struct kstat stat; + int ret = vfs_stat(filename, &stat); + if (!ret) + ret = cp_stat64(statbuf, &stat); return ret; } asmlinkage long sys32_lstat64(char * filename, struct stat64 *statbuf) { - int ret; - struct stat s; - mm_segment_t old_fs = get_fs(); - - set_fs (KERNEL_DS); - ret = sys_newlstat(filename, &s); - set_fs (old_fs); - if (putstat64 (statbuf, &s)) - return -EFAULT; + struct kstat stat; + int ret = vfs_lstat(filename, &stat); + if (!ret) + ret = cp_stat64(statbuf, &stat); return ret; } asmlinkage long sys32_fstat64(unsigned int fd, struct stat64 *statbuf) { - int ret; - struct stat s; - mm_segment_t old_fs = get_fs(); - - set_fs (KERNEL_DS); - ret = sys_newfstat(fd, &s); - set_fs (old_fs); - if (putstat64 (statbuf, &s)) - return -EFAULT; + struct kstat stat; + int ret = vfs_fstat(fd, &stat); + if (!ret) + ret = cp_stat64(statbuf, &stat); return ret; } - - /* * Linux/i386 didn't use to be able to handle more than * 4 system call parameters, so these system calls used a memory @@ -1476,7 +1450,7 @@ long sys32_uname(struct old_utsname * na extern int sys_ustat(dev_t, struct ustat *); -long sys32_ustat(dev_t dev, struct ustat32 *u32p) +long sys32_ustat(unsigned dev, struct ustat32 *u32p) { struct ustat u; mm_segment_t seg; diff -prauN linux-2.6.0-test5/arch/x86_64/ia32/syscall32.c wli-2.6.0-test5-bk12-25/arch/x86_64/ia32/syscall32.c --- linux-2.6.0-test5/arch/x86_64/ia32/syscall32.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/x86_64/ia32/syscall32.c 2003-09-25 20:03:31.000000000 -0700 @@ -29,12 +29,15 @@ char *syscall32_page; and let it be handled by generic VM */ int map_syscall32(struct mm_struct *mm, unsigned long address) { + pgd_t *pgd; + pmd_t *pmd; pte_t *pte; int err = 0; down_read(&mm->mmap_sem); spin_lock(&mm->page_table_lock); - pmd_t *pmd = pmd_alloc(mm, pgd_offset(mm, address), address); - if (pmd && (pte = pte_alloc_map(mm, pmd, address)) != NULL) { + pgd = pgd_offset(mm, address); + pmd = pmd_alloc_map(mm, pgd, address); + if (pmd && (pte = pte_alloc_map(mm, pgd, &pmd, address)) != NULL) { if (pte_none(*pte)) { set_pte(pte, mk_pte(virt_to_page(syscall32_page), diff -prauN linux-2.6.0-test5/arch/x86_64/kernel/entry.S wli-2.6.0-test5-bk12-25/arch/x86_64/kernel/entry.S --- linux-2.6.0-test5/arch/x86_64/kernel/entry.S 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/x86_64/kernel/entry.S 2003-09-25 19:15:52.000000000 -0700 @@ -41,11 +41,10 @@ #include #include #include +#include .code64 -#define PDAREF(field) %gs:field - #ifdef CONFIG_PREEMPT #define preempt_stop cli #else @@ -63,7 +62,7 @@ /* %rsp:at FRAMEEND */ .macro FIXUP_TOP_OF_STACK tmp - movq PDAREF(pda_oldrsp),\tmp + movq %gs:pda_oldrsp,\tmp movq \tmp,RSP(%rsp) movq $__USER_DS,SS(%rsp) movq $__USER_CS,CS(%rsp) @@ -74,7 +73,7 @@ .macro RESTORE_TOP_OF_STACK tmp,offset=0 movq RSP-\offset(%rsp),\tmp - movq \tmp,PDAREF(pda_oldrsp) + movq \tmp,%gs:pda_oldrsp movq EFLAGS-\offset(%rsp),\tmp movq \tmp,R11-\offset(%rsp) .endm @@ -146,8 +145,8 @@ rff_trace: ENTRY(system_call) swapgs - movq %rsp,PDAREF(pda_oldrsp) - movq PDAREF(pda_kernelstack),%rsp + movq %rsp,%gs:pda_oldrsp + movq %gs:pda_kernelstack,%rsp sti SAVE_ARGS 8,1 movq %rax,ORIG_RAX-ARGOFFSET(%rsp) @@ -176,7 +175,7 @@ sysret_check: jnz sysret_careful movq RIP-ARGOFFSET(%rsp),%rcx RESTORE_ARGS 0,-ARG_SKIP,1 - movq PDAREF(pda_oldrsp),%rsp + movq %gs:pda_oldrsp,%rsp swapgs sysretq @@ -369,8 +368,8 @@ ENTRY(stub_rt_sigreturn) testl $3,CS(%rdi) je 1f swapgs -1: addl $1,PDAREF(pda_irqcount) # RED-PEN should check preempt count - movq PDAREF(pda_irqstackptr),%rax +1: addl $1,%gs:pda_irqcount # RED-PEN should check preempt count + movq %gs:pda_irqstackptr,%rax cmoveq %rax,%rsp pushq %rdi # save old stack call \func @@ -382,7 +381,7 @@ ENTRY(common_interrupt) ret_from_intr: popq %rdi cli - subl $1,PDAREF(pda_irqcount) + subl $1,%gs:pda_irqcount leaq ARGOFFSET(%rdi),%rsp exit_intr: GET_THREAD_INFO(%rcx) diff -prauN linux-2.6.0-test5/arch/x86_64/kernel/ioport.c wli-2.6.0-test5-bk12-25/arch/x86_64/kernel/ioport.c --- linux-2.6.0-test5/arch/x86_64/kernel/ioport.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/x86_64/kernel/ioport.c 2003-09-25 19:15:52.000000000 -0700 @@ -19,35 +19,13 @@ /* Set EXTENT bits starting at BASE in BITMAP to value TURN_ON. */ static void set_bitmap(unsigned long *bitmap, unsigned int base, unsigned int extent, int new_value) { - unsigned long mask; - unsigned long *bitmap_base = bitmap + (base / BITS_PER_LONG); - unsigned int low_index = base & (BITS_PER_LONG-1); - int length = low_index + extent; - - if (low_index != 0) { - mask = (~0UL << low_index); - if (length < BITS_PER_LONG) - mask &= ~(~0UL << length); + int i; if (new_value) - *bitmap_base++ |= mask; + for (i = base; i < base + extent; i++) + __set_bit(i, bitmap); else - *bitmap_base++ &= ~mask; - length -= BITS_PER_LONG; - } - - mask = (new_value ? ~0UL : 0UL); - while (length >= BITS_PER_LONG) { - *bitmap_base++ = mask; - length -= BITS_PER_LONG; - } - - if (length > 0) { - mask = ~(~0UL << length); - if (new_value) - *bitmap_base++ |= mask; - else - *bitmap_base++ &= ~mask; - } + for (i = base; i < base + extent; i++) + clear_bit(i, bitmap); } diff -prauN linux-2.6.0-test5/arch/x86_64/kernel/pci-gart.c wli-2.6.0-test5-bk12-25/arch/x86_64/kernel/pci-gart.c --- linux-2.6.0-test5/arch/x86_64/kernel/pci-gart.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/x86_64/kernel/pci-gart.c 2003-09-25 19:15:52.000000000 -0700 @@ -76,7 +76,6 @@ static u32 northbridge_flush_word[NR_CPU #define EMERGENCY_PAGES 32 /* = 128KB */ #ifdef CONFIG_AGP -extern int agp_init(void); #define AGPEXTERN extern #else #define AGPEXTERN diff -prauN linux-2.6.0-test5/arch/x86_64/kernel/setup.c wli-2.6.0-test5-bk12-25/arch/x86_64/kernel/setup.c --- linux-2.6.0-test5/arch/x86_64/kernel/setup.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/x86_64/kernel/setup.c 2003-09-25 19:15:52.000000000 -0700 @@ -64,7 +64,7 @@ struct cpuinfo_x86 boot_cpu_data; unsigned long mmu_cr4_features; EXPORT_SYMBOL_GPL(mmu_cr4_features); -int acpi_disabled __initdata = 0; +int acpi_disabled = 0; /* For PCI or other memory-mapped resources */ unsigned long pci_mem_start = 0x10000000; @@ -317,7 +317,7 @@ void __init setup_arch(char **cmdline_p) { unsigned long low_mem_size; - ROOT_DEV = ORIG_ROOT_DEV; + ROOT_DEV = old_decode_dev(ORIG_ROOT_DEV); drive_info = DRIVE_INFO; screen_info = SCREEN_INFO; edid_info = EDID_INFO; @@ -499,16 +499,16 @@ static void __init display_cacheinfo(str cpuid(0x80000005, &dummy, &ebx, &ecx, &edx); printk(KERN_INFO "CPU: L1 I Cache: %dK (%d bytes/line), D cache %dK (%d bytes/line)\n", edx>>24, edx&0xFF, ecx>>24, ecx&0xFF); - c->x86_cache_size = (ecx>>24)+(edx>>24); + c->x86_cache_size=(ecx>>24)+(edx>>24); /* DTLB and ITLB together, but only 4K */ - c->x86_tlbsize = ((ebx >> 16) & 0xff) + (ebx & 0xff); + c->x86_tlbsize = ((ebx>>16)&0xff) + (ebx&0xff); } if (n >= 0x80000006) { cpuid(0x80000006, &dummy, &ebx, &ecx, &edx); ecx = cpuid_ecx(0x80000006); c->x86_cache_size = ecx >> 16; - c->x86_tlbsize += ((ebx >> 16) & 0xff) + (ebx & 0xff); + c->x86_tlbsize += ((ebx >> 16) & 0xfff) + (ebx & 0xfff); printk(KERN_INFO "CPU: L2 Cache: %dK (%d bytes/line)\n", c->x86_cache_size, ecx & 0xFF); diff -prauN linux-2.6.0-test5/arch/x86_64/kernel/time.c wli-2.6.0-test5-bk12-25/arch/x86_64/kernel/time.c --- linux-2.6.0-test5/arch/x86_64/kernel/time.c 2003-09-08 12:50:16.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/x86_64/kernel/time.c 2003-09-25 19:15:52.000000000 -0700 @@ -370,6 +370,19 @@ static irqreturn_t timer_interrupt(int i return IRQ_HANDLED; } +/* RED-PEN: calculation is done in 32bits with multiply for performance + and could overflow, it may be better (but slower)to use an 64bit division. */ +unsigned long long sched_clock(void) +{ + unsigned long a; + + if (__vxtime.mode == VXTIME_HPET) + return (hpet_readl(HPET_COUNTER) * vxtime.quot) >> 32; + + rdtscll(a); + return (a * vxtime.tsc_quot) >> 32; +} + unsigned long get_cmos_time(void) { unsigned int timeout, year, mon, day, hour, min, sec; diff -prauN linux-2.6.0-test5/arch/x86_64/kernel/traps.c wli-2.6.0-test5-bk12-25/arch/x86_64/kernel/traps.c --- linux-2.6.0-test5/arch/x86_64/kernel/traps.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/x86_64/kernel/traps.c 2003-09-25 19:15:52.000000000 -0700 @@ -333,25 +333,34 @@ void oops_begin(void) bust_spinlocks(1); } +void oops_end(void) +{ + die_owner = -1; + bust_spinlocks(0); + spin_unlock(&die_lock); + local_irq_enable(); /* make sure back scroll still works */ +} + void __die(const char * str, struct pt_regs * regs, long err) { static int die_counter; - handle_BUG(regs); - printk(KERN_EMERG "%s: %04lx [%u]\n", str, err & 0xffff, ++die_counter); + printk(KERN_EMERG "%s: %04lx [%u]\n", str, err & 0xffff,++die_counter); notify_die(DIE_OOPS, (char *)str, regs, err, 255, SIGSEGV); show_registers(regs); - bust_spinlocks(0); - die_owner = -1; - spin_unlock_irq(&die_lock); - do_exit(SIGSEGV); + /* Execute summary in case the oops scrolled away */ + printk(KERN_EMERG "RIP "); + printk_address(regs->rip); + printk(" RSP <%016lx>\n", regs->rsp); } void die(const char * str, struct pt_regs * regs, long err) { oops_begin(); + handle_BUG(regs); __die(str, regs, err); + oops_end(); + do_exit(SIGSEGV); } - static inline void die_if_kernel(const char * str, struct pt_regs * regs, long err) { if (!(regs->eflags & VM_MASK) && (regs->cs == __KERNEL_CS)) diff -prauN linux-2.6.0-test5/arch/x86_64/lib/copy_page.S wli-2.6.0-test5-bk12-25/arch/x86_64/lib/copy_page.S --- linux-2.6.0-test5/arch/x86_64/lib/copy_page.S 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/x86_64/lib/copy_page.S 2003-09-25 19:15:52.000000000 -0700 @@ -10,14 +10,8 @@ copy_page: prefetch (%rsi) prefetch 1*64(%rsi) - prefetch 2*64(%rsi) - prefetch 3*64(%rsi) - prefetch 4*64(%rsi) prefetchw (%rdi) prefetchw 1*64(%rdi) - prefetchw 2*64(%rdi) - prefetchw 3*64(%rdi) - prefetchw 4*64(%rdi) subq $3*8,%rsp movq %rbx,(%rsp) diff -prauN linux-2.6.0-test5/arch/x86_64/lib/csum-copy.S wli-2.6.0-test5-bk12-25/arch/x86_64/lib/csum-copy.S --- linux-2.6.0-test5/arch/x86_64/lib/csum-copy.S 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/x86_64/lib/csum-copy.S 2003-09-25 19:15:52.000000000 -0700 @@ -64,21 +64,9 @@ csum_partial_copy_generic: ignore prefetch 1*64(%rdi) ignore - prefetch 2*64(%rdi) - ignore - prefetch 3*64(%rdi) - ignore - prefetch 4*64(%rdi) - ignore prefetchw (%rsi) ignore prefetchw 1*64(%rsi) - ignore - prefetchw 2*64(%rsi) - ignore - prefetchw 3*64(%rsi) - ignore - prefetchw 4*64(%rsi) .Lignore: subq $7*8,%rsp diff -prauN linux-2.6.0-test5/arch/x86_64/mm/fault.c wli-2.6.0-test5-bk12-25/arch/x86_64/mm/fault.c --- linux-2.6.0-test5/arch/x86_64/mm/fault.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/x86_64/mm/fault.c 2003-09-25 19:15:52.000000000 -0700 @@ -53,6 +53,87 @@ void bust_spinlocks(int yes) } } +/* Sometimes the CPU reports invalid exceptions on prefetch. + Check that here and ignore. + Opcode checker based on code by Richard Brunner */ +static int is_prefetch(struct pt_regs *regs, unsigned long addr) +{ + unsigned char *instr = (unsigned char *)(regs->rip); + int scan_more = 1; + int prefetch = 0; + unsigned char *max_instr = instr + 15; + + /* Avoid recursive faults for this common case */ + if (regs->rip == addr) + return 0; + + /* Code segments in LDT could have a non zero base. Don't check + when that's possible */ + if (regs->cs & (1<<2)) + return 0; + + while (scan_more && instr < max_instr) { + unsigned char opcode; + unsigned char instr_hi; + unsigned char instr_lo; + + if (__get_user(opcode, instr)) + break; + + instr_hi = opcode & 0xf0; + instr_lo = opcode & 0x0f; + instr++; + + switch (instr_hi) { + case 0x20: + case 0x30: + /* Values 0x26,0x2E,0x36,0x3E are valid x86 + prefixes. In long mode, the CPU will signal + invalid opcode if some of these prefixes are + present so we will never get here anyway */ + scan_more = ((instr_lo & 7) == 0x6); + break; + + case 0x40: + /* In AMD64 long mode, 0x40 to 0x4F are valid REX prefixes + Need to figure out under what instruction mode the + instruction was issued ... */ + /* Could check the LDT for lm, but for now it's good + enough to assume that long mode only uses well known + segments or kernel. */ + scan_more = ((regs->cs & 3) == 0) || (regs->cs == __USER_CS); + break; + + case 0x60: + /* 0x64 thru 0x67 are valid prefixes in all modes. */ + scan_more = (instr_lo & 0xC) == 0x4; + break; + case 0xF0: + /* 0xF0, 0xF2, and 0xF3 are valid prefixes in all modes. */ + scan_more = !instr_lo || (instr_lo>>1) == 1; + break; + case 0x00: + /* Prefetch instruction is 0x0F0D or 0x0F18 */ + scan_more = 0; + if (__get_user(opcode, instr)) + break; + prefetch = (instr_lo == 0xF) && + (opcode == 0x0D || opcode == 0x18); + break; + default: + scan_more = 0; + break; + } + } + +#if 1 + if (prefetch) + printk("%s: prefetch caused page fault at %lx/%lx\n", current->comm, + regs->rip, addr); +#endif + return prefetch; +} + static int bad_address(void *p) { unsigned long dummy; @@ -90,6 +171,12 @@ bad: printk("BAD\n"); } +static inline int unhandled_signal(struct task_struct *tsk, int sig) +{ + return (tsk->sighand->action[sig-1].sa.sa_handler == SIG_IGN) || + (tsk->sighand->action[sig-1].sa.sa_handler == SIG_DFL); +} + int page_fault_trace; int exception_trace = 1; @@ -151,7 +238,7 @@ asmlinkage void do_page_fault(struct pt_ * context, we must not take the fault.. */ if (unlikely(in_atomic() || !mm)) - goto no_context; + goto bad_area_nosemaphore; again: down_read(&mm->mmap_sem); @@ -234,13 +321,16 @@ bad_area_nosemaphore: /* User mode accesses just cause a SIGSEGV */ if (error_code & 4) { + if (is_prefetch(regs, address)) + return; + if (exception_trace && !(tsk->ptrace & PT_PTRACED) && - (tsk->sighand->action[SIGSEGV-1].sa.sa_handler == SIG_IGN || - (tsk->sighand->action[SIGSEGV-1].sa.sa_handler == SIG_DFL))) + !unhandled_signal(tsk, SIGSEGV)) { printk(KERN_INFO "%s[%d]: segfault at %016lx rip %016lx rsp %016lx error %lx\n", tsk->comm, tsk->pid, address, regs->rip, regs->rsp, error_code); + } tsk->thread.cr2 = address; tsk->thread.error_code = error_code; @@ -262,6 +352,9 @@ no_context: return; } + if (is_prefetch(regs, address)) + return; + /* * Oops. The kernel tried to access some bad page. We'll have to * terminate things with extreme prejudice. @@ -273,13 +366,13 @@ no_context: printk(KERN_ALERT "Unable to handle kernel NULL pointer dereference"); else printk(KERN_ALERT "Unable to handle kernel paging request"); - printk(" at virtual address %016lx\n",address); - printk(" printing rip:\n"); - printk("%016lx\n", regs->rip); + printk(" at %016lx RIP: \n",address); + printk_address(regs->rip); dump_pagetable(address); __die("Oops", regs, error_code); - - /* never reached */ + /* Execute summary in case the body of the oops scrolled away */ + printk(KERN_EMERG "CR2: %016lx\n", address); + oops_end(); do_exit(SIGKILL); /* @@ -301,10 +394,10 @@ out_of_memory2: do_sigbus: up_read(&mm->mmap_sem); - /* - * Send a sigbus, regardless of whether we were in kernel - * or user mode. - */ + /* Kernel mode? Handle exceptions or die */ + if (!(error_code & 4)) + goto no_context; + tsk->thread.cr2 = address; tsk->thread.error_code = error_code; tsk->thread.trap_no = 14; @@ -313,13 +406,8 @@ do_sigbus: info.si_code = BUS_ADRERR; info.si_addr = (void *)address; force_sig_info(SIGBUS, &info, tsk); - - /* Kernel mode? Handle exceptions or die */ - if (!(error_code & 4)) - goto no_context; return; - vmalloc_fault: { pgd_t *pgd; diff -prauN linux-2.6.0-test5/arch/x86_64/mm/ioremap.c wli-2.6.0-test5-bk12-25/arch/x86_64/mm/ioremap.c --- linux-2.6.0-test5/arch/x86_64/mm/ioremap.c 2003-09-08 12:50:30.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/arch/x86_64/mm/ioremap.c 2003-09-25 20:03:31.000000000 -0700 @@ -82,7 +82,7 @@ static int remap_area_pages(unsigned lon spin_lock(&init_mm.page_table_lock); do { pmd_t *pmd; - pmd = pmd_alloc(&init_mm, dir, address); + pmd = pmd_alloc_kernel(&init_mm, dir, address); error = -ENOMEM; if (!pmd) break; diff -prauN linux-2.6.0-test5/crypto/proc.c wli-2.6.0-test5-bk12-25/crypto/proc.c --- linux-2.6.0-test5/crypto/proc.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/crypto/proc.c 2003-09-25 19:15:52.000000000 -0700 @@ -57,6 +57,7 @@ static int c_show(struct seq_file *m, vo switch (alg->cra_flags & CRYPTO_ALG_TYPE_MASK) { case CRYPTO_ALG_TYPE_CIPHER: + seq_printf(m, "type : cipher\n"); seq_printf(m, "blocksize : %u\n", alg->cra_blocksize); seq_printf(m, "min keysize : %u\n", alg->cra_cipher.cia_min_keysize); @@ -65,10 +66,17 @@ static int c_show(struct seq_file *m, vo break; case CRYPTO_ALG_TYPE_DIGEST: + seq_printf(m, "type : digest\n"); seq_printf(m, "blocksize : %u\n", alg->cra_blocksize); seq_printf(m, "digestsize : %u\n", alg->cra_digest.dia_digestsize); break; + case CRYPTO_ALG_TYPE_COMPRESS: + seq_printf(m, "type : compression\n"); + break; + default: + seq_printf(m, "type : unknown\n"); + break; } seq_putc(m, '\n'); diff -prauN linux-2.6.0-test5/drivers/atm/Kconfig wli-2.6.0-test5-bk12-25/drivers/atm/Kconfig --- linux-2.6.0-test5/drivers/atm/Kconfig 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/atm/Kconfig 2003-09-25 19:15:52.000000000 -0700 @@ -241,7 +241,7 @@ config ATM_IDT77252_USE_SUNI config ATM_AMBASSADOR tristate "Madge Ambassador (Collage PCI 155 Server)" - depends on PCI && ATM && BROKEN_ON_SMP + depends on PCI && ATM help This is a driver for ATMizer based ATM card produced by Madge Networks Ltd. Say Y (or M to compile as a module named ambassador) diff -prauN linux-2.6.0-test5/drivers/atm/eni.c wli-2.6.0-test5-bk12-25/drivers/atm/eni.c --- linux-2.6.0-test5/drivers/atm/eni.c 2003-09-08 12:49:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/atm/eni.c 2003-09-25 19:15:52.000000000 -0700 @@ -2272,8 +2272,6 @@ static int __devinit eni_init_one(struct DPRINTK("eni_init_one\n"); - MOD_INC_USE_COUNT; /* @@@ we don't support unloading yet */ - if (pci_enable_device(pci_dev)) { error = -EIO; goto out0; @@ -2307,7 +2305,6 @@ out2: out1: kfree(eni_dev); out0: - MOD_DEC_USE_COUNT; /* @@@ we don't support unloading yet */ return error; } @@ -2351,16 +2348,7 @@ static int __init eni_init(void) } -static void __exit eni_cleanup(void) -{ - /* - * Well, there's no way to get rid of the driver yet, so we don't - * have to clean up, right ? :-) - */ -} - - module_init(eni_init); -module_exit(eni_cleanup); +/* @@@ since exit routine not defined, this module can not be unloaded */ MODULE_LICENSE("GPL"); diff -prauN linux-2.6.0-test5/drivers/atm/firestream.c wli-2.6.0-test5-bk12-25/drivers/atm/firestream.c --- linux-2.6.0-test5/drivers/atm/firestream.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/atm/firestream.c 2003-09-25 19:15:52.000000000 -0700 @@ -250,7 +250,7 @@ struct reginit_item { }; -struct reginit_item PHY_NTC_INIT[] __initdata = { +struct reginit_item PHY_NTC_INIT[] __devinitdata = { { PHY_CLEARALL, 0x40 }, { 0x12, 0x0001 }, { 0x13, 0x7605 }, @@ -1282,9 +1282,7 @@ static const struct atmdev_ops ops = { .open = fs_open, .close = fs_close, .send = fs_send, -#if 0 .owner = THIS_MODULE, -#endif /* ioctl: fs_ioctl, */ /* getsockopt: fs_getsockopt, */ /* setsockopt: fs_setsockopt, */ @@ -1296,7 +1294,7 @@ static const struct atmdev_ops ops = { }; -static void __init undocumented_pci_fix (struct pci_dev *pdev) +static void __devinit undocumented_pci_fix (struct pci_dev *pdev) { int tint; @@ -1320,13 +1318,13 @@ static void __init undocumented_pci_fix * PHY routines * **************************************************************************/ -static void __init write_phy (struct fs_dev *dev, int regnum, int val) +static void __devinit write_phy (struct fs_dev *dev, int regnum, int val) { submit_command (dev, &dev->hp_txq, QE_CMD_PRP_WR | QE_CMD_IMM_INQ, regnum, val, 0); } -static int __init init_phy (struct fs_dev *dev, struct reginit_item *reginit) +static int __devinit init_phy (struct fs_dev *dev, struct reginit_item *reginit) { int i; @@ -1382,7 +1380,7 @@ static void reset_chip (struct fs_dev *d } } -static void __init *aligned_kmalloc (int size, int flags, int alignment) +static void __devinit *aligned_kmalloc (int size, int flags, int alignment) { void *t; @@ -1399,7 +1397,7 @@ static void __init *aligned_kmalloc (int return NULL; } -static int __init init_q (struct fs_dev *dev, +static int __devinit init_q (struct fs_dev *dev, struct queue *txq, int queue, int nentries, int is_rq) { int sz = nentries * sizeof (struct FS_QENTRY); @@ -1435,7 +1433,7 @@ static int __init init_q (struct fs_dev } -static int __init init_fp (struct fs_dev *dev, +static int __devinit init_fp (struct fs_dev *dev, struct freepool *fp, int queue, int bufsize, int nr_buffers) { func_enter (); @@ -1655,7 +1653,7 @@ static void fs_poll (unsigned long data) } #endif -static int __init fs_init (struct fs_dev *dev) +static int __devinit fs_init (struct fs_dev *dev) { struct pci_dev *pci_dev; int isr, to; @@ -1890,7 +1888,7 @@ static int __init fs_init (struct fs_dev return 0; } -static int __init firestream_init_one (struct pci_dev *pci_dev, +static int __devinit firestream_init_one (struct pci_dev *pci_dev, const struct pci_device_id *ent) { struct atm_dev *atm_dev; diff -prauN linux-2.6.0-test5/drivers/atm/he.c wli-2.6.0-test5-bk12-25/drivers/atm/he.c --- linux-2.6.0-test5/drivers/atm/he.c 2003-09-08 12:49:54.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/atm/he.c 2003-09-25 19:15:52.000000000 -0700 @@ -2860,8 +2860,10 @@ he_ioctl(struct atm_dev *atm_dev, unsign if (!capable(CAP_NET_ADMIN)) return -EPERM; - copy_from_user(®, (struct he_ioctl_reg *) arg, - sizeof(struct he_ioctl_reg)); + if (copy_from_user(®, (struct he_ioctl_reg *) arg, + sizeof(struct he_ioctl_reg))) + return -EFAULT; + spin_lock_irqsave(&he_dev->global_lock, flags); switch (reg.type) { case HE_REGTYPE_PCI: @@ -2885,8 +2887,9 @@ he_ioctl(struct atm_dev *atm_dev, unsign } spin_unlock_irqrestore(&he_dev->global_lock, flags); if (err == 0) - copy_to_user((struct he_ioctl_reg *) arg, ®, - sizeof(struct he_ioctl_reg)); + if (copy_to_user((struct he_ioctl_reg *) arg, ®, + sizeof(struct he_ioctl_reg))) + return -EFAULT; break; default: #ifdef CONFIG_ATM_HE_USE_SUNI diff -prauN linux-2.6.0-test5/drivers/atm/idt77252.c wli-2.6.0-test5-bk12-25/drivers/atm/idt77252.c --- linux-2.6.0-test5/drivers/atm/idt77252.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/atm/idt77252.c 2003-09-25 19:15:53.000000000 -0700 @@ -147,7 +147,8 @@ static struct atmdev_ops idt77252_ops = .phy_put = idt77252_phy_put, .phy_get = idt77252_phy_get, .change_qos = idt77252_change_qos, - .proc_read = idt77252_proc_read + .proc_read = idt77252_proc_read, + .owner = THIS_MODULE }; static struct idt77252_dev *idt77252_chain = NULL; @@ -2544,7 +2545,6 @@ idt77252_open(struct atm_vcc *vcc, short } set_bit(ATM_VF_READY, &vcc->flags); - MOD_INC_USE_COUNT; up(&card->mutex); return 0; @@ -2631,7 +2631,6 @@ done: free_scq(card, vc->scq); } - MOD_DEC_USE_COUNT; up(&card->mutex); } diff -prauN linux-2.6.0-test5/drivers/atm/lanai.c wli-2.6.0-test5-bk12-25/drivers/atm/lanai.c --- linux-2.6.0-test5/drivers/atm/lanai.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/atm/lanai.c 2003-09-25 19:15:53.000000000 -0700 @@ -2242,7 +2242,6 @@ static int __init lanai_dev_open(struct printk(KERN_ERR DEV_LABEL ": can't allocate interrupt\n"); goto error_vcctable; } - MOD_INC_USE_COUNT; /* At this point we can't fail */ mb(); /* Make sure that all that made it */ intr_enable(lanai, INT_ALL & ~(INT_PING | INT_WAKE)); /* 3.11: initialize loop mode (i.e. turn looping off) */ @@ -2312,7 +2311,6 @@ static void lanai_dev_close(struct atm_d service_buffer_deallocate(lanai); iounmap((void *) lanai->base); kfree(lanai); - MOD_DEC_USE_COUNT; } /* close a vcc */ @@ -2686,7 +2684,8 @@ static const struct atmdev_ops ops = { .phy_put = NULL, .phy_get = NULL, .change_qos = lanai_change_qos, - .proc_read = lanai_proc_read + .proc_read = lanai_proc_read, + .owner = THIS_MODULE }; /* initialize one probed card */ diff -prauN linux-2.6.0-test5/drivers/atm/uPD98402.c wli-2.6.0-test5-bk12-25/drivers/atm/uPD98402.c --- linux-2.6.0-test5/drivers/atm/uPD98402.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/atm/uPD98402.c 2003-09-25 19:15:53.000000000 -0700 @@ -246,7 +246,7 @@ static const struct atmphy_ops uPD98402_ }; -int __init uPD98402_init(struct atm_dev *dev) +int uPD98402_init(struct atm_dev *dev) { DPRINTK("phy_init\n"); dev->phy = &uPD98402_ops; @@ -254,22 +254,13 @@ DPRINTK("phy_init\n"); } -#ifdef MODULE MODULE_LICENSE("GPL"); EXPORT_SYMBOL(uPD98402_init); - -int init_module(void) +static __init int uPD98402_module_init(void) { - MOD_INC_USE_COUNT; return 0; } - - -void cleanup_module(void) -{ - /* Nay */ -} - -#endif +module_init(uPD98402_module_init); +/* module_exit not defined so not unloadable */ diff -prauN linux-2.6.0-test5/drivers/atm/zatm.c wli-2.6.0-test5-bk12-25/drivers/atm/zatm.c --- linux-2.6.0-test5/drivers/atm/zatm.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/atm/zatm.c 2003-09-25 19:15:53.000000000 -0700 @@ -1619,11 +1619,10 @@ static int __init zatm_module_init(void) out: kfree(zatm_dev); - /* XXX: currently the driver is not unloadable.. */ - MOD_INC_USE_COUNT; return 0; } MODULE_LICENSE("GPL"); module_init(zatm_module_init); +/* module_exit not defined so not unloadable */ diff -prauN linux-2.6.0-test5/drivers/block/DAC960.c wli-2.6.0-test5-bk12-25/drivers/block/DAC960.c --- linux-2.6.0-test5/drivers/block/DAC960.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/block/DAC960.c 2003-09-25 19:15:53.000000000 -0700 @@ -71,7 +71,7 @@ static int DAC960_open(struct inode *ino { struct gendisk *disk = inode->i_bdev->bd_disk; DAC960_Controller_T *p = disk->queue->queuedata; - int drive_nr = (int)disk->private_data; + int drive_nr = (long)disk->private_data; if (p->FirmwareType == DAC960_V1_Controller) { if (p->V1.LogicalDriveInformation[drive_nr]. @@ -96,7 +96,7 @@ static int DAC960_ioctl(struct inode *in { struct gendisk *disk = inode->i_bdev->bd_disk; DAC960_Controller_T *p = disk->queue->queuedata; - int drive_nr = (int)disk->private_data; + int drive_nr = (long)disk->private_data; struct hd_geometry g, *loc = (struct hd_geometry *)arg; if (cmd != HDIO_GETGEO || !loc) @@ -136,7 +136,7 @@ static int DAC960_ioctl(struct inode *in static int DAC960_media_changed(struct gendisk *disk) { DAC960_Controller_T *p = disk->queue->queuedata; - int drive_nr = (int)disk->private_data; + int drive_nr = (long)disk->private_data; if (!p->LogicalDriveInitiallyAccessible[drive_nr]) return 1; @@ -146,7 +146,7 @@ static int DAC960_media_changed(struct g static int DAC960_revalidate_disk(struct gendisk *disk) { DAC960_Controller_T *p = disk->queue->queuedata; - int unit = (int)disk->private_data; + int unit = (long)disk->private_data; set_capacity(disk, disk_size(p, unit)); return 0; @@ -1603,6 +1603,26 @@ static boolean DAC960_V1_ReadControllerC DAC960PU/PD/PL 3.51 and above DAC960PU/PD/PL/P 2.73 and above */ +#if defined(CONFIG_ALPHA) + /* + DEC Alpha machines were often equipped with DAC960 cards that were + OEMed from Mylex, and had their own custom firmware. Version 2.70, + the last custom FW revision to be released by DEC for these older + controllers, appears to work quite well with this driver. + + Cards tested successfully were several versions each of the PD and + PU, called by DEC the KZPSC and KZPAC, respectively, and having + the Manufacturer Numbers (from Mylex), usually on a sticker on the + back of the board, of: + + KZPSC: D040347 (1-channel) or D040348 (2-channel) or D040349 (3-channel) + KZPAC: D040395 (1-channel) or D040396 (2-channel) or D040397 (3-channel) + */ +# define FIRMWARE_27X "2.70" +#else +# define FIRMWARE_27X "2.73" +#endif + if (Enquiry2->FirmwareID.MajorVersion == 0) { Enquiry2->FirmwareID.MajorVersion = @@ -1622,7 +1642,7 @@ static boolean DAC960_V1_ReadControllerC (Controller->FirmwareVersion[0] == '3' && strcmp(Controller->FirmwareVersion, "3.51") >= 0) || (Controller->FirmwareVersion[0] == '2' && - strcmp(Controller->FirmwareVersion, "2.73") >= 0))) + strcmp(Controller->FirmwareVersion, FIRMWARE_27X) >= 0))) { DAC960_Failure(Controller, "FIRMWARE VERSION VERIFICATION"); DAC960_Error("Firmware Version = '%s'\n", Controller, @@ -2485,7 +2505,7 @@ static boolean DAC960_RegisterBlockDevic disk->queue = RequestQueue; sprintf(disk->disk_name, "rd/c%dd%d", Controller->ControllerNumber, n); - sprintf(disk->devfs_name, "rd/c%dd%d", Controller->ControllerNumber, n); + sprintf(disk->devfs_name, "rd/host%d/target%d", Controller->ControllerNumber, n); disk->major = MajorNumber; disk->first_minor = n << DAC960_MaxPartitionsBits; disk->fops = &DAC960_BlockDeviceOperations; @@ -2708,12 +2728,12 @@ DAC960_DetectController(struct pci_dev * break; } - pci_set_drvdata(PCI_Device, (void *)((int)Controller->ControllerNumber)); + pci_set_drvdata(PCI_Device, (void *)((long)Controller->ControllerNumber)); for (i = 0; i < DAC960_MaxLogicalDrives; i++) { Controller->disks[i] = alloc_disk(1<disks[i]) goto Failure; - Controller->disks[i]->private_data = (void *)i; + Controller->disks[i]->private_data = (void *)((long)i); } init_waitqueue_head(&Controller->CommandWaitQueue); init_waitqueue_head(&Controller->HealthStatusWaitQueue); @@ -3097,7 +3117,7 @@ DAC960_Probe(struct pci_dev *dev, const static void DAC960_Remove(struct pci_dev *PCI_Device) { - int Controller_Number = (int)pci_get_drvdata(PCI_Device); + int Controller_Number = (long)pci_get_drvdata(PCI_Device); DAC960_Controller_T *Controller = DAC960_Controllers[Controller_Number]; if (Controller != NULL) DAC960_FinalizeController(Controller); @@ -3272,7 +3292,7 @@ static boolean DAC960_ProcessRequest(DAC Command->CommandType = DAC960_WriteCommand; } Command->Completion = Request->waiting; - Command->LogicalDriveNumber = (int)Request->rq_disk->private_data; + Command->LogicalDriveNumber = (long)Request->rq_disk->private_data; Command->BlockNumber = Request->sector; Command->BlockCount = Request->nr_sectors; Command->Request = Request; @@ -3280,7 +3300,7 @@ static boolean DAC960_ProcessRequest(DAC Command->SegmentCount = blk_rq_map_sg(Controller->RequestQueue, Command->Request, Command->cmd_sglist); /* pci_map_sg MAY change the value of SegCount */ - Command->SegmentCount = pci_map_sg(Command->PciDevice, Command->cmd_sglist, + Command->SegmentCount = pci_map_sg(Controller->PCIDevice, Command->cmd_sglist, Command->SegmentCount, Command->DmaDirection); DAC960_QueueReadWriteCommand(Command); @@ -3316,7 +3336,7 @@ static void DAC960_queue_partial_rw(DAC9 (void)blk_rq_map_sg(Controller->RequestQueue, Command->Request, Command->cmd_sglist); - (void)pci_map_sg(Command->PciDevice, Command->cmd_sglist, 1, + (void)pci_map_sg(Controller->PCIDevice, Command->cmd_sglist, 1, Command->DmaDirection); /* * Resubmitting the request sector at a time is really tedious. @@ -3357,7 +3377,7 @@ static inline boolean DAC960_ProcessComp if (SuccessfulIO) UpToDate = 1; - pci_unmap_sg(Command->PciDevice, Command->cmd_sglist, + pci_unmap_sg(Command->Controller->PCIDevice, Command->cmd_sglist, Command->SegmentCount, Command->DmaDirection); if (!end_that_request_first(Request, UpToDate, Command->BlockCount)) { diff -prauN linux-2.6.0-test5/drivers/block/DAC960.h wli-2.6.0-test5-bk12-25/drivers/block/DAC960.h --- linux-2.6.0-test5/drivers/block/DAC960.h 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/block/DAC960.h 2003-09-25 19:15:53.000000000 -0700 @@ -2248,7 +2248,6 @@ typedef struct DAC960_Command int DmaDirection; struct scatterlist *cmd_sglist; struct request *Request; - struct pci_dev *PciDevice; union { struct { DAC960_V1_CommandMailbox_T CommandMailbox; diff -prauN linux-2.6.0-test5/drivers/block/Kconfig wli-2.6.0-test5-bk12-25/drivers/block/Kconfig --- linux-2.6.0-test5/drivers/block/Kconfig 2003-09-08 12:49:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/block/Kconfig 2003-09-25 19:15:53.000000000 -0700 @@ -15,10 +15,8 @@ config BLK_DEV_FD well as location of the fdutils package used to configure additional parameters of the driver at run time. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called floppy. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called floppy. config AMIGA_FLOPPY tristate "Amiga floppy support" @@ -44,15 +42,13 @@ config BLK_DEV_SWIM_IOP config BLK_DEV_PS2 tristate "PS/2 ESDI hard disk support" - depends on MCA + depends on MCA && MCA_LEGACY help Say Y here if you have a PS/2 machine with a MCA bus and an ESDI hard disk. - If you want to compile the driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module - will be called ps2esdi. + To compile this driver as a module, choose M here: the + module will be called ps2esdi. config AMIGA_Z2RAM tristate "Amiga Zorro II ramdisk support" @@ -60,11 +56,10 @@ config AMIGA_Z2RAM help This enables support for using Chip RAM and Zorro II RAM as a ramdisk or as a swap partition. Say Y if you want to include this - driver in the kernel. This driver is also available as a module - ( = code which can be inserted in and removed from the running - kernel whenever you want). The module is called z2ram. If you want - to compile it as a module, say M here and read - . + driver in the kernel. + + To compile this driver as a module, choose M here: the + module will be called z2ram. config ATARI_ACSI tristate "Atari ACSI support" @@ -80,9 +75,8 @@ config ATARI_ACSI Ethernet, and PAMsNet Ethernet. If you want to use one of these devices, you need ACSI support, too. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called acsi. + To compile this driver as a module, choose M here: the + module will be called acsi. comment "Some devices (e.g. CD jukebox) support multiple LUNs" depends on ATARI && ATARI_ACSI @@ -116,10 +110,8 @@ config BLK_DEV_XD Very old 8 bit hard disk controllers used in the IBM XT computer will be supported if you say Y here. - If you want to compile the driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module - will be called xd. + To compile this driver as a module, choose M here: the + module will be called xd. It's pretty unlikely that you have one of these: say N. @@ -195,10 +187,8 @@ config BLK_DEV_DAC960 for further information about this driver. - If you want to compile the driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module - will be called DAC960. + To compile this driver as a module, choose M here: the + module will be called DAC960. config BLK_DEV_UMEM tristate "Micro Memory MM5415 Battery Backed RAM support (EXPERIMENTAL)" @@ -211,10 +201,8 @@ config BLK_DEV_UMEM The cards appear as block devices that can be partitioned into as many as 15 partitions. - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read Documentation/modules.txt. The module will be - called umem. + To compile this driver as a module, choose M here: the + module will be called umem. The umem driver has not yet been allocated a MAJOR number, so one is chosen dynamically. Use "devfs" or look in /proc/devices @@ -255,10 +243,8 @@ config BLK_DEV_LOOP Note that this loop device has nothing to do with the loopback device used for network connections from the machine to itself. - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module - will be called loop. + To compile this driver as a module, choose M here: the + module will be called loop. Most users will answer N here. @@ -293,10 +279,8 @@ config BLK_DEV_NBD Note that this has nothing to do with the network file systems NFS or Coda; you can say N here even if you intend to use NFS or Coda. - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module - will be called nbd. + To compile this driver as a module, choose M here: the + module will be called nbd. If unsure, say N. @@ -313,10 +297,8 @@ config BLK_DEV_RAM Note that the kernel command line option "ramdisk=XX" is now obsolete. For details, read . - 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 and read . The module will be - called rd. + To compile this driver as a module, choose M here: the + module will be called rd. Most normal users won't need the RAM disk functionality, and can thus say N here. diff -prauN linux-2.6.0-test5/drivers/block/acsi.c wli-2.6.0-test5-bk12-25/drivers/block/acsi.c --- linux-2.6.0-test5/drivers/block/acsi.c 2003-09-08 12:50:42.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/block/acsi.c 2003-09-25 19:15:53.000000000 -0700 @@ -1729,10 +1729,14 @@ int acsi_init( void ) for( i = 0; i < NDevices; ++i ) { struct gendisk *disk = acsi_gendisk[i]; sprintf(disk->disk_name, "ad%c", 'a'+i); + aip = &acsi_info[NDevices]; + sprintf(disk->devfs_name, "ad/target%d/lun%d", aip->target, aip->lun); disk->major = ACSI_MAJOR; disk->first_minor = i << 4; - if (acsi_info[i].type != HARDDISK) + if (acsi_info[i].type != HARDDISK) { disk->minors = 1; + strcat(disk->devfs_name, "/disc"); + } disk->fops = &acsi_fops; disk->private_data = &acsi_info[i]; set_capacity(disk, acsi_info[i].size); diff -prauN linux-2.6.0-test5/drivers/block/as-iosched.c wli-2.6.0-test5-bk12-25/drivers/block/as-iosched.c --- linux-2.6.0-test5/drivers/block/as-iosched.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/block/as-iosched.c 2003-09-25 19:15:53.000000000 -0700 @@ -162,7 +162,7 @@ struct as_rq { unsigned long expires; unsigned int is_sync; - enum arq_state state; /* debug only */ + enum arq_state state; }; #define RQ_DATA(rq) ((struct as_rq *) (rq)->elevator_private) @@ -344,11 +344,19 @@ static struct as_rq *as_find_first_arq(s } } -static struct as_rq *__as_add_arq_rb(struct as_data *ad, struct as_rq *arq) +/* + * Add the request to the rb tree if it is unique. If there is an alias (an + * existing request against the same sector), which can happen when using + * direct IO, then return the alias. + */ +static struct as_rq *as_add_arq_rb(struct as_data *ad, struct as_rq *arq) { struct rb_node **p = &ARQ_RB_ROOT(ad, arq)->rb_node; struct rb_node *parent = NULL; struct as_rq *__arq; + struct request *rq = arq->request; + + arq->rb_key = rq_rb_key(rq); while (*p) { parent = *p; @@ -363,28 +371,9 @@ static struct as_rq *__as_add_arq_rb(str } rb_link_node(&arq->rb_node, parent, p); - return 0; -} - -static void as_move_to_dispatch(struct as_data *ad, struct as_rq *arq); -/* - * Add the request to the rb tree if it is unique. If there is an alias (an - * existing request against the same sector), which can happen when using - * direct IO, then move the alias to the dispatch list and then add the - * request. - */ -static void as_add_arq_rb(struct as_data *ad, struct as_rq *arq) -{ - struct as_rq *alias; - struct request *rq = arq->request; - - arq->rb_key = rq_rb_key(rq); - - /* This can be caused by direct IO */ - while ((alias = __as_add_arq_rb(ad, arq))) - as_move_to_dispatch(ad, alias); - rb_insert_color(&arq->rb_node, ARQ_RB_ROOT(ad, arq)); + + return NULL; } static inline void as_del_arq_rb(struct as_data *ad, struct as_rq *arq) @@ -1021,6 +1010,7 @@ static void as_remove_dispatched_request } } } + /* * as_remove_request is called when a driver has finished with a request. * This should be only called for dispatched requests, but for some reason @@ -1095,6 +1085,7 @@ static inline int as_batch_expired(struc */ static void as_move_to_dispatch(struct as_data *ad, struct as_rq *arq) { + struct list_head *insert; const int data_dir = arq->is_sync; BUG_ON(!ON_RB(&arq->rb_node)); @@ -1109,8 +1100,6 @@ static void as_move_to_dispatch(struct a ad->last_sector[data_dir] = arq->request->sector + arq->request->nr_sectors; - ad->nr_dispatched++; - if (data_dir == REQ_SYNC) { /* In case we have to anticipate after this */ copy_io_context(&ad->io_context, &arq->io_context); @@ -1131,12 +1120,33 @@ static void as_move_to_dispatch(struct a * take it off the sort and fifo list, add to dispatch queue */ as_remove_queued_request(ad->q, arq->request); - list_add_tail(&arq->request->queuelist, ad->dispatch); + + insert = ad->dispatch->prev; + + while (!list_empty(&arq->request->queuelist)) { + struct request *rq = list_entry_rq(arq->request->queuelist.next); + struct as_rq *__arq = RQ_DATA(rq); + + list_move_tail(&rq->queuelist, ad->dispatch); + + if (__arq->io_context && __arq->io_context->aic) + atomic_inc(&__arq->io_context->aic->nr_dispatched); + + WARN_ON(__arq->state != AS_RQ_QUEUED); + __arq->state = AS_RQ_DISPATCHED; + + ad->nr_dispatched++; + } + + list_add(&arq->request->queuelist, insert); if (arq->io_context && arq->io_context->aic) atomic_inc(&arq->io_context->aic->nr_dispatched); WARN_ON(arq->state != AS_RQ_QUEUED); arq->state = AS_RQ_DISPATCHED; + + ad->nr_dispatched++; + } /* @@ -1290,10 +1300,31 @@ static struct request *as_next_request(r } /* + * Add arq to a list behind alias + */ +static inline void +as_add_aliased_request(struct as_data *ad, struct as_rq *arq, struct as_rq *alias) +{ + /* + * Another request with the same start sector on the rbtree. + * Link this request to that sector. They are untangled in + * as_move_to_dispatch + */ + list_add_tail(&arq->request->queuelist, &alias->request->queuelist); + + /* + * Don't want to have to handle merges. + */ + as_remove_merge_hints(ad->q, arq); + +} + +/* * add arq to rbtree and fifo */ static void as_add_request(struct as_data *ad, struct as_rq *arq) { + struct as_rq *alias; int data_dir; if (rq_data_dir(arq->request) == READ @@ -1310,15 +1341,40 @@ static void as_add_request(struct as_dat as_update_iohist(arq->io_context->aic, arq->request); } - as_add_arq_rb(ad, arq); + alias = as_add_arq_rb(ad, arq); + if (!alias) { + /* + * set expire time (only used for reads) and add to fifo list + */ + arq->expires = jiffies + ad->fifo_expire[data_dir]; + list_add_tail(&arq->fifo, &ad->fifo_list[data_dir]); + + if (rq_mergeable(arq->request)) { + as_add_arq_hash(ad, arq); + + if (!ad->q->last_merge) + ad->q->last_merge = arq->request; + } + as_update_arq(ad, arq); /* keep state machine up to date */ + + } else { + as_add_aliased_request(ad, arq, alias); + /* + * have we been anticipating this request? + * or does it come from the same process as the one we are + * anticipating for? + */ + if (ad->antic_status == ANTIC_WAIT_REQ + || ad->antic_status == ANTIC_WAIT_NEXT) { + if (as_can_break_anticipation(ad, arq)) + as_antic_stop(ad); + } + } + + + - /* - * set expire time (only used for reads) and add to fifo list - */ - arq->expires = jiffies + ad->fifo_expire[data_dir]; - list_add_tail(&arq->fifo, &ad->fifo_list[data_dir]); arq->state = AS_RQ_QUEUED; - as_update_arq(ad, arq); /* keep state machine up to date */ } /* @@ -1352,6 +1408,11 @@ as_insert_request(request_queue_t *q, st struct as_data *ad = q->elevator.elevator_data; struct as_rq *arq = RQ_DATA(rq); + /* barriers must flush the reorder queue */ + if (unlikely(rq->flags & (REQ_SOFTBARRIER | REQ_HARDBARRIER) + && where == ELEVATOR_INSERT_SORT)) + where = ELEVATOR_INSERT_BACK; + switch (where) { case ELEVATOR_INSERT_BACK: while (ad->next_arq[REQ_SYNC]) @@ -1359,7 +1420,9 @@ as_insert_request(request_queue_t *q, st while (ad->next_arq[REQ_ASYNC]) as_move_to_dispatch(ad, ad->next_arq[REQ_ASYNC]); + list_add_tail(&rq->queuelist, ad->dispatch); + as_antic_stop(ad); break; case ELEVATOR_INSERT_FRONT: list_add(&rq->queuelist, ad->dispatch); @@ -1373,13 +1436,6 @@ as_insert_request(request_queue_t *q, st printk("%s: bad insert point %d\n", __FUNCTION__,where); return; } - - if (rq_mergeable(rq)) { - as_add_arq_hash(ad, arq); - - if (!q->last_merge) - q->last_merge = rq; - } } /* @@ -1494,8 +1550,18 @@ static void as_merged_request(request_qu * if the merge was a front merge, we need to reposition request */ if (rq_rb_key(req) != arq->rb_key) { + struct as_rq *alias; + + /* + * Note! We should really be moving any old aliased requests + * off this request and try to insert them into the rbtree. We + * currently don't bother. Ditto the next function. + */ as_del_arq_rb(ad, arq); - as_add_arq_rb(ad, arq); + if ((alias = as_add_arq_rb(ad, arq)) ) { + list_del_init(&arq->fifo); + as_add_aliased_request(ad, arq, alias); + } /* * Note! At this stage of this and the next function, our next * request may not be optimal - eg the request may have "grown" @@ -1525,8 +1591,12 @@ as_merged_requests(request_queue_t *q, s as_add_arq_hash(ad, arq); if (rq_rb_key(req) != arq->rb_key) { + struct as_rq *alias; as_del_arq_rb(ad, arq); - as_add_arq_rb(ad, arq); + if ((alias = as_add_arq_rb(ad, arq)) ) { + list_del_init(&arq->fifo); + as_add_aliased_request(ad, arq, alias); + } } /* @@ -1865,7 +1935,7 @@ elevator_t iosched_as = { .elevator_exit_fn = as_exit, .elevator_ktype = &as_ktype, - .elevator_name = "anticipatory scheduling", + .elevator_name = "anticipatory", }; EXPORT_SYMBOL(iosched_as); diff -prauN linux-2.6.0-test5/drivers/block/cciss.c wli-2.6.0-test5-bk12-25/drivers/block/cciss.c --- linux-2.6.0-test5/drivers/block/cciss.c 2003-09-08 12:50:32.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/block/cciss.c 2003-09-25 19:15:53.000000000 -0700 @@ -243,7 +243,7 @@ cciss_proc_write(struct file *file, cons * Get us a file in /proc/cciss that says something about each controller. * Create /proc/cciss if it doesn't exist yet. */ -static void __init cciss_procinit(int i) +static void __devinit cciss_procinit(int i) { struct proc_dir_entry *pde; @@ -754,16 +754,24 @@ static int cciss_ioctl(struct inode *ino status = -ENOMEM; goto cleanup1; } - if (copy_from_user(ioc, (void *) arg, sizeof(*ioc))) - return -EFAULT; + if (copy_from_user(ioc, (void *) arg, sizeof(*ioc))) { + status = -EFAULT; + goto cleanup1; + } if ((ioc->buf_size < 1) && - (ioc->Request.Type.Direction != XFER_NONE)) - return -EINVAL; + (ioc->Request.Type.Direction != XFER_NONE)) { + status = -EINVAL; + goto cleanup1; + } /* Check kmalloc limits using all SGs */ - if (ioc->malloc_size > MAX_KMALLOC_SIZE) - return -EINVAL; - if (ioc->buf_size > ioc->malloc_size * MAXSGENTRIES) - return -EINVAL; + if (ioc->malloc_size > MAX_KMALLOC_SIZE) { + status = -EINVAL; + goto cleanup1; + } + if (ioc->buf_size > ioc->malloc_size * MAXSGENTRIES) { + status = -EINVAL; + goto cleanup1; + } buff = (unsigned char **) kmalloc(MAXSGENTRIES * sizeof(char *), GFP_KERNEL); if (!buff) { @@ -2427,7 +2435,7 @@ static void free_hba(int i) * stealing all these major device numbers. * returns the number of block devices registered. */ -static int __init cciss_init_one(struct pci_dev *pdev, +static int __devinit cciss_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) { request_queue_t *q; @@ -2531,6 +2539,7 @@ static int __init cciss_init_one(struct struct gendisk *disk = hba[i]->gendisk[j]; sprintf(disk->disk_name, "cciss/c%dd%d", i, j); + sprintf(disk->devfs_name, "cciss/host%d/target%d", i, j); disk->major = COMPAQ_CISS_MAJOR + i; disk->first_minor = j << NWD_SHIFT; disk->fops = &cciss_fops; diff -prauN linux-2.6.0-test5/drivers/block/deadline-iosched.c wli-2.6.0-test5-bk12-25/drivers/block/deadline-iosched.c --- linux-2.6.0-test5/drivers/block/deadline-iosched.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/block/deadline-iosched.c 2003-09-25 19:15:53.000000000 -0700 @@ -287,8 +287,11 @@ deadline_find_first_drq(struct deadline_ * add drq to rbtree and fifo */ static inline void -deadline_add_request(struct deadline_data *dd, struct deadline_rq *drq) +deadline_add_request(struct request_queue *q, struct request *rq) { + struct deadline_data *dd = q->elevator.elevator_data; + struct deadline_rq *drq = RQ_DATA(rq); + const int data_dir = rq_data_dir(drq->request); deadline_add_drq_rb(dd, drq); @@ -297,6 +300,13 @@ deadline_add_request(struct deadline_dat */ drq->expires = jiffies + dd->fifo_expire[data_dir]; list_add_tail(&drq->fifo, &dd->fifo_list[data_dir]); + + if (rq_mergeable(rq)) { + deadline_add_drq_hash(dd, drq); + + if (!q->last_merge) + q->last_merge = rq; + } } /* @@ -616,7 +626,11 @@ static void deadline_insert_request(request_queue_t *q, struct request *rq, int where) { struct deadline_data *dd = q->elevator.elevator_data; - struct deadline_rq *drq = RQ_DATA(rq); + + /* barriers must flush the reorder queue */ + if (unlikely(rq->flags & (REQ_SOFTBARRIER | REQ_HARDBARRIER) + && where == ELEVATOR_INSERT_SORT)) + where = ELEVATOR_INSERT_BACK; switch (where) { case ELEVATOR_INSERT_BACK: @@ -629,19 +643,12 @@ deadline_insert_request(request_queue_t break; case ELEVATOR_INSERT_SORT: BUG_ON(!blk_fs_request(rq)); - deadline_add_request(dd, drq); + deadline_add_request(q, rq); break; default: printk("%s: bad insert point %d\n", __FUNCTION__,where); return; } - - if (rq_mergeable(rq)) { - deadline_add_drq_hash(dd, drq); - - if (!q->last_merge) - q->last_merge = rq; - } } static int deadline_queue_empty(request_queue_t *q) diff -prauN linux-2.6.0-test5/drivers/block/floppy.c wli-2.6.0-test5-bk12-25/drivers/block/floppy.c --- linux-2.6.0-test5/drivers/block/floppy.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/block/floppy.c 2003-09-25 19:15:53.000000000 -0700 @@ -219,6 +219,7 @@ static int use_virtual_dma; */ static spinlock_t floppy_lock = SPIN_LOCK_UNLOCKED; +static struct completion device_release; static unsigned short virtual_dma_port=0x3f0; irqreturn_t floppy_interrupt(int irq, void *dev_id, struct pt_regs * regs); @@ -2152,18 +2153,20 @@ static int next_valid_format(void) static void bad_flp_intr(void) { + int err_count; + if (probing){ DRS->probed_format++; if (!next_valid_format()) return; } - (*errors)++; - INFBOUND(DRWE->badness, *errors); - if (*errors > DP->max_errors.abort) + err_count = ++(*errors); + INFBOUND(DRWE->badness, err_count); + if (err_count > DP->max_errors.abort) cont->done(0); - if (*errors > DP->max_errors.reset) + if (err_count > DP->max_errors.reset) FDCS->reset = 1; - else if (*errors > DP->max_errors.recal) + else if (err_count > DP->max_errors.recal) DRS->track = NEED_2_RECAL; } @@ -4203,9 +4206,17 @@ static int __init floppy_setup(char *str static int have_no_fdc= -ENODEV; +static void floppy_device_release(struct device *dev) +{ + complete(&device_release); +} + static struct platform_device floppy_device = { .name = "floppy", .id = 0, + .dev = { + .release = floppy_device_release, + } }; static struct kobject *floppy_find(dev_t dev, int *part, void *data) @@ -4576,11 +4587,15 @@ int init_module(void) void cleanup_module(void) { int drive; - + + init_completion(&device_release); platform_device_unregister(&floppy_device); blk_unregister_region(MKDEV(FLOPPY_MAJOR, 0), 256); unregister_blkdev(FLOPPY_MAJOR, "fd"); + for (drive = 0; drive < N_DRIVE; drive++) { + del_timer_sync(&motor_off_timer[drive]); + if ((allowed_drive_mask & (1 << drive)) && fdc_state[FDC(drive)].version != FDC_NONE) { del_gendisk(disks[drive]); @@ -4590,9 +4605,17 @@ void cleanup_module(void) } devfs_remove("floppy"); + del_timer_sync(&fd_timeout); + del_timer_sync(&fd_timer); blk_cleanup_queue(floppy_queue); + + if (usage_count) + floppy_release_irq_and_dma(); + /* eject disk, if any */ fd_eject(0); + + wait_for_completion(&device_release); } MODULE_PARM(floppy,"s"); diff -prauN linux-2.6.0-test5/drivers/block/ll_rw_blk.c wli-2.6.0-test5-bk12-25/drivers/block/ll_rw_blk.c --- linux-2.6.0-test5/drivers/block/ll_rw_blk.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/block/ll_rw_blk.c 2003-09-25 19:15:53.000000000 -0700 @@ -458,16 +458,19 @@ void blk_queue_free_tags(request_queue_t if (!bqt) return; - BUG_ON(bqt->busy); - BUG_ON(!list_empty(&bqt->busy_list)); + if (atomic_dec_and_test(&bqt->refcnt)) { + BUG_ON(bqt->busy); + BUG_ON(!list_empty(&bqt->busy_list)); - kfree(bqt->tag_index); - bqt->tag_index = NULL; + kfree(bqt->tag_index); + bqt->tag_index = NULL; - kfree(bqt->tag_map); - bqt->tag_map = NULL; + kfree(bqt->tag_map); + bqt->tag_map = NULL; + + kfree(bqt); + } - kfree(bqt); q->queue_tags = NULL; q->queue_flags &= ~(1 << QUEUE_FLAG_QUEUED); } @@ -503,6 +506,9 @@ init_tag_map(request_queue_t *q, struct for (i = depth; i < bits * BLK_TAGS_PER_LONG; i++) __set_bit(i, tags->tag_map); + INIT_LIST_HEAD(&tags->busy_list); + tags->busy = 0; + atomic_set(&tags->refcnt, 1); return 0; fail: kfree(tags->tag_index); @@ -514,19 +520,18 @@ fail: * @q: the request queue for the device * @depth: the maximum queue depth supported **/ -int blk_queue_init_tags(request_queue_t *q, int depth) +int blk_queue_init_tags(request_queue_t *q, int depth, + struct blk_queue_tag *tags) { - struct blk_queue_tag *tags; - - tags = kmalloc(sizeof(struct blk_queue_tag),GFP_ATOMIC); - if (!tags) - goto fail; - - if (init_tag_map(q, tags, depth)) - goto fail; + if (!tags) { + tags = kmalloc(sizeof(struct blk_queue_tag), GFP_ATOMIC); + if (!tags) + goto fail; - INIT_LIST_HEAD(&tags->busy_list); - tags->busy = 0; + if (init_tag_map(q, tags, depth)) + goto fail; + } else + atomic_inc(&tags->refcnt); /* * assign it, all done @@ -1016,7 +1021,13 @@ static int ll_merge_requests_fn(request_ void blk_plug_device(request_queue_t *q) { WARN_ON(!irqs_disabled()); - if (!blk_queue_plugged(q)) { + + /* + * don't plug a stopped queue, it must be paired with blk_start_queue() + * which will restart the queueing + */ + if (!blk_queue_plugged(q) + && !test_bit(QUEUE_FLAG_STOPPED, &q->queue_flags)) { spin_lock(&blk_plug_lock); list_add_tail(&q->plug_list, &blk_plug_list); mod_timer(&q->unplug_timer, jiffies + q->unplug_delay); @@ -2861,3 +2872,4 @@ EXPORT_SYMBOL(blk_run_queue); EXPORT_SYMBOL(blk_run_queues); EXPORT_SYMBOL(blk_rq_bio_prep); +EXPORT_SYMBOL(blk_rq_prep_restart); diff -prauN linux-2.6.0-test5/drivers/block/loop.c wli-2.6.0-test5-bk12-25/drivers/block/loop.c --- linux-2.6.0-test5/drivers/block/loop.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/block/loop.c 2003-09-25 19:15:53.000000000 -0700 @@ -757,7 +757,7 @@ static int loop_set_fd(struct loop_devic blk_queue_merge_bvec(lo->lo_queue, q->merge_bvec_fn); } - kernel_thread(loop_thread, lo, CLONE_FS | CLONE_FILES | CLONE_SIGHAND); + kernel_thread(loop_thread, lo, CLONE_KERNEL); down(&lo->lo_sem); fput(file); @@ -931,9 +931,9 @@ loop_get_status(struct loop_device *lo, return error; memset(info, 0, sizeof(*info)); info->lo_number = lo->lo_number; - info->lo_device = stat.dev; + info->lo_device = huge_encode_dev(stat.dev); info->lo_inode = stat.ino; - info->lo_rdevice = lo->lo_device ? stat.rdev : stat.dev; + info->lo_rdevice = huge_encode_dev(lo->lo_device ? stat.rdev : stat.dev); info->lo_offset = lo->lo_offset; info->lo_sizelimit = lo->lo_sizelimit; info->lo_flags = lo->lo_flags; diff -prauN linux-2.6.0-test5/drivers/block/ps2esdi.c wli-2.6.0-test5-bk12-25/drivers/block/ps2esdi.c --- linux-2.6.0-test5/drivers/block/ps2esdi.c 2003-09-08 12:49:50.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/block/ps2esdi.c 2003-09-25 19:15:53.000000000 -0700 @@ -62,8 +62,6 @@ static void reset_ctrl(void); -int ps2esdi_init(void); - static int ps2esdi_geninit(void); static void do_ps2esdi_request(request_queue_t * q); @@ -141,7 +139,7 @@ static struct block_device_operations ps static struct gendisk *ps2esdi_gendisk[2]; /* initialization routine called by ll_rw_blk.c */ -int __init ps2esdi_init(void) +static int __init ps2esdi_init(void) { int error = 0; @@ -169,9 +167,11 @@ int __init ps2esdi_init(void) return 0; } /* ps2esdi_init */ +#ifndef MODULE + module_init(ps2esdi_init); -#ifdef MODULE +#else static int cyl[MAX_HD] = {-1,-1}; static int head[MAX_HD] = {-1, -1}; @@ -187,7 +187,7 @@ int init_module(void) { int drive; for(drive = 0; drive < MAX_HD; drive++) { - struct ps2_esdi_i_struct *info = &ps2esdi_info[drive]; + struct ps2esdi_i_struct *info = &ps2esdi_info[drive]; if (cyl[drive] != -1) { info->cyl = info->lzone = cyl[drive]; @@ -204,6 +204,7 @@ int init_module(void) { void cleanup_module(void) { + int i; if(ps2esdi_slot) { mca_mark_as_unused(ps2esdi_slot); mca_set_adapter_procfn(ps2esdi_slot, NULL, NULL); @@ -421,6 +422,7 @@ static int __init ps2esdi_geninit(void) disk->major = PS2ESDI_MAJOR; disk->first_minor = i<<6; sprintf(disk->disk_name, "ed%c", 'a'+i); + sprintf(disk->devfs_name, "ed/target%d", i); disk->fops = &ps2esdi_fops; ps2esdi_gendisk[i] = disk; } diff -prauN linux-2.6.0-test5/drivers/block/umem.c wli-2.6.0-test5-bk12-25/drivers/block/umem.c --- linux-2.6.0-test5/drivers/block/umem.c 2003-09-08 12:50:42.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/block/umem.c 2003-09-25 19:15:53.000000000 -0700 @@ -52,7 +52,6 @@ #include /* O_ACCMODE */ #include /* HDIO_GETGEO */ -#include #include @@ -1204,11 +1203,10 @@ int __init mm_init(void) goto out; } - devfs_mk_dir("umem"); - for (i = 0; i < num_cards; i++) { struct gendisk *disk = mm_gendisk[i]; sprintf(disk->disk_name, "umem%c", 'a'+i); + sprintf(disk->devfs_name, "umem/card%d", i); spin_lock_init(&cards[i].lock); disk->major = major_nr; disk->first_minor = i << MM_SHIFT; @@ -1245,7 +1243,6 @@ void __exit mm_cleanup(void) del_gendisk(mm_gendisk[i]); put_disk(mm_gendisk[i]); } - devfs_remove("umem"); pci_unregister_driver(&mm_pci_driver); diff -prauN linux-2.6.0-test5/drivers/block/xd.c wli-2.6.0-test5-bk12-25/drivers/block/xd.c --- linux-2.6.0-test5/drivers/block/xd.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/block/xd.c 2003-09-25 19:15:53.000000000 -0700 @@ -45,7 +45,6 @@ #include #include #include -#include #include #include @@ -182,7 +181,6 @@ static int __init xd_init(void) if (!xd_queue) goto out1a; - devfs_mk_dir("xd"); if (xd_detect(&controller,&address)) { printk("Detected a%s controller (type %d) at address %06x\n", @@ -213,6 +211,7 @@ static int __init xd_init(void) disk->major = XT_DISK_MAJOR; disk->first_minor = i<<6; sprintf(disk->disk_name, "xd%c", i+'a'); + sprintf(disk->devfs_name, "xd/target%d", i); disk->fops = &xd_fops; disk->private_data = p; disk->queue = xd_queue; @@ -249,7 +248,6 @@ out4: out3: release_region(xd_iobase,4); out2: - devfs_remove("xd"); blk_cleanup_queue(xd_queue); out1a: unregister_blkdev(XT_DISK_MAJOR, "xd"); @@ -1064,7 +1062,6 @@ void cleanup_module(void) } blk_cleanup_queue(xd_queue); release_region(xd_iobase,4); - devfs_remove("xd"); if (xd_drives) { free_irq(xd_irq, NULL); free_dma(xd_dma); diff -prauN linux-2.6.0-test5/drivers/block/z2ram.c wli-2.6.0-test5-bk12-25/drivers/block/z2ram.c --- linux-2.6.0-test5/drivers/block/z2ram.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/block/z2ram.c 2003-09-25 19:15:53.000000000 -0700 @@ -354,6 +354,7 @@ z2_init(void) z2ram_gendisk->first_minor = 0; z2ram_gendisk->fops = &z2_fops; sprintf(z2ram_gendisk->disk_name, "z2ram"); + strcpy(z2ram_gendisk->devfs_name, z2ram_gendisk->disk_name); z2ram_gendisk->queue = z2_queue; add_disk(z2ram_gendisk); diff -prauN linux-2.6.0-test5/drivers/bluetooth/hci_usb.c wli-2.6.0-test5-bk12-25/drivers/bluetooth/hci_usb.c --- linux-2.6.0-test5/drivers/bluetooth/hci_usb.c 2003-09-08 12:50:29.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/bluetooth/hci_usb.c 2003-09-25 19:15:53.000000000 -0700 @@ -302,7 +302,8 @@ static int hci_usb_open(struct hci_dev * hci_usb_bulk_rx_submit(husb); #ifdef CONFIG_BT_USB_SCO - hci_usb_isoc_rx_submit(husb); + if (husb->isoc_iface) + hci_usb_isoc_rx_submit(husb); #endif } else { clear_bit(HCI_RUNNING, &hdev->flags); diff -prauN linux-2.6.0-test5/drivers/cdrom/Kconfig wli-2.6.0-test5-bk12-25/drivers/cdrom/Kconfig --- linux-2.6.0-test5/drivers/cdrom/Kconfig 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/cdrom/Kconfig 2003-09-25 19:15:54.000000000 -0700 @@ -24,10 +24,7 @@ config CD_NO_IDESCSI file drivers/cdrom/{driver_name}.h where you can define your interface parameters and switch some internal goodies. - All these CD-ROM drivers are also usable as a module ( = code which - can be inserted in and removed from the running kernel whenever you - want). If you want to compile them as module, say M instead of Y and - read . + To compile these CD-ROM drivers as a module, choose M instead of Y. If you want to use any of these CD-ROM drivers, you also have to answer Y or M to "ISO 9660 CD-ROM file system support" below (this @@ -49,10 +46,8 @@ config AZTCD file system support" below, because that's the file system used on CD-ROMs. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called aztcd. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called aztcd. config GSCD tristate "Goldstar R420 CDROM support" @@ -67,10 +62,8 @@ config GSCD file system support" below, because that's the file system used on CD-ROMs. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called gscd. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called gscd. config SBPCD tristate "Matsushita/Panasonic/Creative, Longshine, TEAC CDROM support" @@ -107,10 +100,8 @@ config SBPCD file system support" below, because that's the file system used on CD-ROMs. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called sbpcd. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called sbpcd. config MCD tristate "Mitsumi (standard) [no XA/Multisession] CDROM support" @@ -132,10 +123,8 @@ config MCD file system support" below, because that's the file system used on CD-ROMs. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called mcd. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called mcd. config MCD_IRQ int "MCD IRQ" @@ -173,10 +162,8 @@ config MCDX file system support" below, because that's the file system used on CD-ROMs. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called mcdx. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called mcdx. config OPTCD tristate "Optics Storage DOLPHIN 8000AT CDROM support" @@ -192,10 +179,8 @@ config OPTCD file system support" below, because that's the file system used on CD-ROMs. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called optcd. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called optcd. config CM206 tristate "Philips/LMS CM206 CDROM support" @@ -209,10 +194,8 @@ config CM206 file system support" below, because that's the file system used on CD-ROMs. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called cm206. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called cm206. config SJCD tristate "Sanyo CDR-H94A CDROM support" @@ -223,10 +206,8 @@ config SJCD "ISO 9660 CD-ROM file system support" below, because that's the file system used on CD-ROMs. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called sjcd. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called sjcd. config ISP16_CDI tristate "ISP16/MAD16/Mozart soft configurable cdrom interface support" @@ -238,10 +219,8 @@ config ISP16_CDI to a driver for the particular cdrom drive you have attached to the card. Read for details. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called isp16. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called isp16. config CDU31A tristate "Sony CDU31A/CDU33A CDROM support" @@ -260,14 +239,12 @@ config CDU31A file system support" below, because that's the file system used on CD-ROMs. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called cdu31a. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called cdu31a. config CDU535 tristate "Sony CDU535 CDROM support" - depends on CD_NO_IDESCSI && BROKEN_ON_SMP + depends on CD_NO_IDESCSI ---help--- This is the driver for the older Sony CDU-535 and CDU-531 CD-ROM drives. Please read the file . @@ -276,9 +253,7 @@ config CDU535 file system support" below, because that's the file system used on CD-ROMs. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called sonycd535. If you want to compile it as - a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called sonycd535. endmenu diff -prauN linux-2.6.0-test5/drivers/cdrom/cdrom.c wli-2.6.0-test5-bk12-25/drivers/cdrom/cdrom.c --- linux-2.6.0-test5/drivers/cdrom/cdrom.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/cdrom/cdrom.c 2003-09-25 19:15:54.000000000 -0700 @@ -1869,20 +1869,26 @@ static int cdrom_do_cmd(struct cdrom_dev if (cgc->buflen < 0 || cgc->buflen >= 131072) return -EINVAL; - if ((ubuf = cgc->buffer)) { + usense = cgc->sense; + cgc->sense = &sense; + if (usense && !access_ok(VERIFY_WRITE, usense, sizeof(*usense))) { + return -EFAULT; + } + + ubuf = cgc->buffer; + if (cgc->data_direction == CGC_DATA_READ || + cgc->data_direction == CGC_DATA_WRITE) { cgc->buffer = kmalloc(cgc->buflen, GFP_KERNEL); if (cgc->buffer == NULL) return -ENOMEM; } - usense = cgc->sense; - cgc->sense = &sense; - if (usense && !access_ok(VERIFY_WRITE, usense, sizeof(*usense))) - return -EFAULT; if (cgc->data_direction == CGC_DATA_READ) { - if (!access_ok(VERIFY_READ, ubuf, cgc->buflen)) + if (!access_ok(VERIFY_READ, ubuf, cgc->buflen)) { + kfree(cgc->buffer); return -EFAULT; + } } else if (cgc->data_direction == CGC_DATA_WRITE) { if (copy_from_user(cgc->buffer, ubuf, cgc->buflen)) { kfree(cgc->buffer); @@ -1894,7 +1900,10 @@ static int cdrom_do_cmd(struct cdrom_dev __copy_to_user(usense, cgc->sense, sizeof(*usense)); if (!ret && cgc->data_direction == CGC_DATA_READ) __copy_to_user(ubuf, cgc->buffer, cgc->buflen); - kfree(cgc->buffer); + if (cgc->data_direction == CGC_DATA_READ || + cgc->data_direction == CGC_DATA_WRITE) { + kfree(cgc->buffer); + } return ret; } diff -prauN linux-2.6.0-test5/drivers/cdrom/gscd.c wli-2.6.0-test5-bk12-25/drivers/cdrom/gscd.c --- linux-2.6.0-test5/drivers/cdrom/gscd.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/cdrom/gscd.c 2003-09-25 19:15:54.000000000 -0700 @@ -965,7 +965,7 @@ static int __init gscd_init(void) gscd_queue = blk_init_queue(do_gscd_request, &gscd_lock); if (!gscd_queue) { - ret -ENOMEM; + ret = -ENOMEM; goto err_out3; } diff -prauN linux-2.6.0-test5/drivers/cdrom/sonycd535.c wli-2.6.0-test5-bk12-25/drivers/cdrom/sonycd535.c --- linux-2.6.0-test5/drivers/cdrom/sonycd535.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/cdrom/sonycd535.c 2003-09-25 19:15:54.000000000 -0700 @@ -36,6 +36,10 @@ * module_init & module_exit. * Torben Mathiasen * + * September 2003 - Fix SMP support by removing cli/sti calls. + * Using spinlocks with a wait_queue instead. + * Felipe Damasio + * * Things to do: * - handle errors and status better, put everything into a single word * - use interrupts (code mostly there, but a big hole still missing) @@ -340,10 +344,14 @@ sony_sleep(void) if (sony535_irq_used <= 0) { /* poll */ yield(); } else { /* Interrupt driven */ - cli(); + DEFINE_WAIT(wait); + + spin_lock_irq(&sonycd535_lock); enable_interrupts(); - interruptible_sleep_on(&cdu535_irq_wait); - sti(); + prepare_to_wait(&cdu535_irq_wait, &wait, TASK_INTERRUPTIBLE); + spin_unlock_irq(&sonycd535_lock); + schedule(); + finish_wait(&cdu535_irq_wait, &wait); } } @@ -804,14 +812,14 @@ do_cdu535_request(request_queue_t * q) block = req->sector; nsect = req->nr_sectors; - if (!(req->flags & REQ_CMD)) - continue; /* FIXME */ + if (!blk_fs_request(req)) { + end_request(req, 0); + continue; + } if (rq_data_dir(req) == WRITE) { end_request(req, 0); continue; } - if (rq_data_dir(req) != READ) - panic("Unknown SONY CD cmd"); /* * If the block address is invalid or the request goes beyond * the end of the media, return an error. @@ -888,8 +896,10 @@ do_cdu535_request(request_queue_t * q) } if (readStatus == BAD_STATUS) { /* Sleep for a while, then retry */ - current->state = TASK_INTERRUPTIBLE; + set_current_state(TASK_INTERRUPTIBLE); + spin_unlock_irq(&sonycd535_lock); schedule_timeout(RETRY_FOR_BAD_STATUS*HZ/10); + spin_lock_irq(&sonycd535_lock); } #if DEBUG > 0 printk(CDU535_MESSAGE_NAME @@ -1473,7 +1483,7 @@ static int __init sony535_init(void) /* look for the CD-ROM, follows the procedure in the DOS driver */ inb(select_unit_reg); /* wait for 40 18 Hz ticks (reverse-engineered from DOS driver) */ - current->state = TASK_INTERRUPTIBLE; + set_current_state(TASK_INTERRUPTIBLE); schedule_timeout((HZ+17)*40/18); inb(result_reg); diff -prauN linux-2.6.0-test5/drivers/char/Kconfig wli-2.6.0-test5-bk12-25/drivers/char/Kconfig --- linux-2.6.0-test5/drivers/char/Kconfig 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/Kconfig 2003-09-25 19:15:54.000000000 -0700 @@ -90,10 +90,8 @@ config COMPUTONE order to become a dial-in server. If you have a card like that, say Y here and read . - 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 . You will get - two modules called ip2 and ip2main. + To compile this driver as modules, choose M here: the + modules will be called ip2 and ip2main. config ROCKETPORT tristate "Comtrol RocketPort support" @@ -104,9 +102,8 @@ config ROCKETPORT modems. For information about the RocketPort/RocketModem boards and this driver read . - If you want to compile this driver as a module, say M here and read - . The module will be called - rocket. + To compile this driver as a module, choose M here: the + module will be called rocket. If you want to compile this driver into the kernel, say Y here. If you don't have a Comtrol RocketPort/RocketModem card installed, say N. @@ -124,10 +121,8 @@ config CYCLADES As of 1.3.9x kernels, this driver's minor numbers start at 0 instead of 32. - 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 . The module - will be called cyclades. + To compile this driver as a module, choose M here: the + module will be called cyclades. If you haven't heard about it, it's safe to say N. @@ -159,8 +154,8 @@ config DIGIEPCA "Digiboard PC/Xx Support" below. You should (and can) only select one of the two drivers. - If you want to compile this driver as a module, say M here and read - . The module will be called epca. + To compile this driver as a module, choose M here: the + module will be called epca. config DIGI tristate "Digiboard PC/Xx Support" @@ -172,8 +167,8 @@ config DIGI order to become a dial-in server. If you have a card like that, say Y here and read the file . - If you want to compile this driver as a module, say M here and read - . The module will be called pcxx. + To compile this driver as a module, choose M here: the + module will be called pcxx. config ESPSERIAL tristate "Hayes ESP serial port support" @@ -183,10 +178,10 @@ config ESPSERIAL port cards and multiport cards are supported. Make sure to read . - To compile this driver as a module ( = code which can be inserted in - and removed from the running kernel whenever you want), say M here - and read . The module will be - called esp. If unsure, say N. + To compile this driver as a module, choose M here: the + module will be called esp. + + If unsure, say N. config MOXA_INTELLIO tristate "Moxa Intellio support" @@ -194,10 +189,8 @@ config MOXA_INTELLIO help Say Y here if you have a Moxa Intellio multiport serial card. - This driver can also be built as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called moxa. If you want to do that, say M - here. + To compile this driver as a module, choose M here: the + module will be called moxa. config MOXA_SMARTIO tristate "Moxa SmartIO support" @@ -216,10 +209,8 @@ config ISI help This is a driver for the Multi-Tech cards which provide several serial ports. The driver is experimental and can currently only be - built as a module ( = code which can be inserted in and removed from - the running kernel whenever you want). Please read - . The module will be called - isicom. + built as a module. The module will be called isicom. + If you want to do that, choose M here. config SYNCLINK tristate "Microgate SyncLink card support" @@ -345,23 +336,19 @@ config STALLION card, then this is for you; say Y. Make sure to read . - 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 . The module - will be called stallion. + To compile this driver as a module, choose M here: the + module will be called stallion. config ISTALLION tristate "Stallion EC8/64, ONboard, Brumby support" - depends on STALDRV && BROKEN + depends on STALDRV && BROKEN_ON_SMP help If you have an EasyConnection 8/64, ONboard, Brumby or Stallion serial multiport card, say Y here. Make sure to read . - To compile it as a module ( = code which can be inserted in and - removed from the running kernel whenever you want), say M here and - read . The module will be called - istallion. + To compile this driver as a module, choose M here: the + module will be called istallion. config SERIAL_TX3912 bool "TMPTX3912/PR31700 serial port support" @@ -437,8 +424,7 @@ config A2232 This driver can be built as a module; but then "generic_serial" will also be built as a module. This has to be loaded before - "ser_a2232". If you want to do this, answer M here and read - "". + "ser_a2232". If you want to do this, answer M here. source "drivers/serial/Kconfig" @@ -496,10 +482,9 @@ config PRINTER It is possible to share one parallel port among several devices (e.g. printer and ZIP drive) and it is safe to compile the - corresponding drivers into the kernel. If you want to compile this - driver as a module however ( = code which can be inserted in and - removed from the running kernel whenever you want), say M here and - read and + corresponding drivers into the kernel. + + To compile this driver as a module, choose M here and read . The module will be called lp. If you have several parallel ports, you can specify which ports to @@ -541,10 +526,8 @@ config PPDEV It is safe to say N to this -- it is not needed for normal printing or parallel port CD-ROM/disk support. - This support is also available as a module. If you want to compile - it as a module, say M here and read - . The module will be called - ppdev. + To compile this driver as a module, choose M here: the + module will be called ppdev. If unsure, say N. @@ -561,10 +544,8 @@ config TIPAR to use this precise link cable (depending on the permissions on the device nodes, though). - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called tipar. If you want to compile it as a - module, say M here and read Documentation/modules.txt. + To compile this driver as a module, choose M here: the + module will be called tipar. If you don't know what a parallel link cable is or what a Texas Instruments graphing calculator is, then you probably don't need this @@ -612,21 +593,18 @@ config BUSMOUSE you will have to say Y here and also to the specific driver for your mouse below. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called busmouse. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called busmouse. endmenu config QIC02_TAPE tristate "QIC-02 tape support" help - If you have a non-SCSI tape drive like that, say Y. Or, if you want - to compile this driver as a module ( = code which can be inserted in - and removed from the running kernel whenever you want), say M here - and read . The module will be called - tpqic02. + If you have a non-SCSI tape drive like that, say Y. + + To compile this driver as a module, choose M here: the + module will be called tpqic02. config QIC02_DYNCONF bool "Do you want runtime configuration for QIC-02" @@ -687,11 +665,8 @@ config NWBUTTON button; it will still execute a hard reset if the button is held down for longer than approximately five seconds. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - If you want to compile it as a module, say M here and read - . The module will be called - nwbutton. + To compile this driver as a module, choose M here: the + module will be called nwbutton. Most people will answer Y to this question and "Reboot Using Button" below to be able to initiate a system shutdown from the button. @@ -718,10 +693,8 @@ config NWFLASH flash contents can render your computer unbootable. On no account allow random users access to this device. :-) - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called nwflash. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called nwflash. If you're not sure, say N. @@ -735,10 +708,8 @@ config HW_RANDOM Provides a character driver, used to read() entropy data. - To compile this driver as a module ( = code which can be inserted in - and removed from the running kernel whenever you want), say M here - and read . The module will be called - hw_random. + To compile this driver as a module, choose M here: the + module will be called hw_random. If unsure, say N. @@ -764,10 +735,8 @@ config NVRAM On Atari machines, /dev/nvram is always configured and does not need to be selected. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called nvram. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called nvram. config RTC tristate "Enhanced Real Time Clock Support" @@ -792,10 +761,8 @@ config RTC sampling), then say Y here, and read for details. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module is called rtc. If you want to compile it as a module, - say M here and read . + To compile this driver as a module, choose M here: the + module will be called rtc. config GEN_RTC tristate "Generic /dev/rtc emulation" @@ -812,12 +779,9 @@ config GEN_RTC for RTC_UIE which is required by some programs and may improve precision in some cases. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module is called genrtc. If you want to compile it as a module, - say M here and read . To load the - module automatically add 'alias char-major-10-135 genrtc' to your - /etc/modules.conf + To compile this driver as a module, choose M here: the + module will be called genrtc. To load the module automatically + add 'alias char-major-10-135 genrtc' to your /etc/modules.conf config GEN_RTC_X bool "Extended RTC operation" @@ -854,10 +818,10 @@ config DTLK help This driver is for the DoubleTalk PC, a speech synthesizer manufactured by RC Systems (). It is also - called the `internal DoubleTalk'. 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 - . The module will be called dtlk. + called the `internal DoubleTalk'. + + To compile this driver as a module, choose M here: the + module will be called dtlk. config R3964 tristate "Siemens R3964 line discipline" @@ -866,10 +830,8 @@ config R3964 Siemens R3964 packet protocol. Unless you are dealing with special hardware like PLCs, you are unlikely to need this. - To compile this driver as a module ( = code which can be inserted in - and removed from the running kernel whenever you want), say M here - and read . The module will be called - n_r3964. + To compile this driver as a module, choose M here: the + module will be called n_r3964. If unsure, say N. @@ -882,10 +844,8 @@ config APPLICOM , or by email from David Woodhouse . - To compile this driver as a module ( = code which can be inserted in - and removed from the running kernel whenever you want), say M here - and read . The module will be called - applicom. + To compile this driver as a module, choose M here: the + module will be called applicom. If unsure, say N. @@ -899,10 +859,8 @@ config SONYPI If you have one of those laptops, read , and say Y or M here. - If you want to compile the driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module - will be called sonypi. + To compile this driver as a module, choose M here: the + module will be called sonypi. menu "Ftape, the floppy tape device driver" @@ -931,9 +889,7 @@ config FTAPE please read the file . The ftape kernel driver is also available as a runtime loadable - module ( = code which can be inserted in and removed from the - running kernel whenever you want). If you want to compile it as a - module, say M here and read . The + module. To compile this driver as a module, choose M here: the module will be called ftape. Note that the Ftape-HOWTO is out of date (sorry) and documents the @@ -959,6 +915,7 @@ source "drivers/char/pcmcia/Kconfig" config MWAVE tristate "ACP Modem (Mwave) support" depends on X86 + select SERIAL_8250 ---help--- The ACP modem (Mwave) for Linux is a WinModem. It is composed of a kernel driver and a user level application. Together these components @@ -978,10 +935,8 @@ config MWAVE If you own one of the above IBM Thinkpads which has the Mwave chipset in it, say Y. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called mwave. If you want to compile it as - a module, say M here and read Documentation/modules.txt. + To compile this driver as a module, choose M here: the + module will be called mwave. config SCx200_GPIO tristate "NatSemi SCx200 GPIO Support" @@ -1001,6 +956,7 @@ config RAW_DRIVER config HANGCHECK_TIMER tristate "Hangcheck timer" + depends on X86_64 || X86 help The hangcheck-timer module detects when the system has gone out to lunch past a certain margin. It can reboot the system diff -prauN linux-2.6.0-test5/drivers/char/Makefile wli-2.6.0-test5-bk12-25/drivers/char/Makefile --- linux-2.6.0-test5/drivers/char/Makefile 2003-09-08 12:50:32.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/Makefile 2003-09-25 19:15:54.000000000 -0700 @@ -7,40 +7,41 @@ # FONTMAPFILE = cp437.uni -obj-y += mem.o tty_io.o n_tty.o tty_ioctl.o pty.o misc.o random.o +obj-y += mem.o random.o tty_io.o n_tty.o tty_ioctl.o pty.o misc.o -obj-$(CONFIG_VT) += vt_ioctl.o vc_screen.o consolemap.o consolemap_deftbl.o selection.o keyboard.o -obj-$(CONFIG_HW_CONSOLE) += vt.o defkeymap.o -obj-$(CONFIG_MAGIC_SYSRQ) += sysrq.o -obj-$(CONFIG_ATARI_DSP56K) += dsp56k.o -obj-$(CONFIG_ROCKETPORT) += rocket.o -obj-$(CONFIG_MOXA_SMARTIO) += mxser.o -obj-$(CONFIG_MOXA_INTELLIO) += moxa.o -obj-$(CONFIG_DIGI) += pcxx.o -obj-$(CONFIG_DIGIEPCA) += epca.o -obj-$(CONFIG_CYCLADES) += cyclades.o -obj-$(CONFIG_STALLION) += stallion.o -obj-$(CONFIG_ISTALLION) += istallion.o -obj-$(CONFIG_COMPUTONE) += ip2.o ip2main.o -obj-$(CONFIG_RISCOM8) += riscom8.o -obj-$(CONFIG_ISI) += isicom.o -obj-$(CONFIG_ESPSERIAL) += esp.o -obj-$(CONFIG_SYNCLINK) += synclink.o -obj-$(CONFIG_SYNCLINKMP) += synclinkmp.o -obj-$(CONFIG_N_HDLC) += n_hdlc.o -obj-$(CONFIG_SPECIALIX) += specialix.o +obj-$(CONFIG_VT) += vt_ioctl.o vc_screen.o consolemap.o \ + consolemap_deftbl.o selection.o keyboard.o +obj-$(CONFIG_HW_CONSOLE) += vt.o defkeymap.o +obj-$(CONFIG_MAGIC_SYSRQ) += sysrq.o +obj-$(CONFIG_ESPSERIAL) += esp.o +obj-$(CONFIG_MVME147_SCC) += generic_serial.o vme_scc.o +obj-$(CONFIG_MVME162_SCC) += generic_serial.o vme_scc.o +obj-$(CONFIG_BVME6000_SCC) += generic_serial.o vme_scc.o +obj-$(CONFIG_SERIAL_TX3912) += generic_serial.o serial_tx3912.o +obj-$(CONFIG_ROCKETPORT) += rocket.o +obj-$(CONFIG_SERIAL167) += serial167.o +obj-$(CONFIG_CYCLADES) += cyclades.o +obj-$(CONFIG_STALLION) += stallion.o +obj-$(CONFIG_ISTALLION) += istallion.o +obj-$(CONFIG_DIGI) += pcxx.o +obj-$(CONFIG_DIGIEPCA) += epca.o +obj-$(CONFIG_SPECIALIX) += specialix.o +obj-$(CONFIG_MOXA_INTELLIO) += moxa.o +obj-$(CONFIG_A2232) += ser_a2232.o generic_serial.o +obj-$(CONFIG_ATARI_DSP56K) += dsp56k.o +obj-$(CONFIG_MOXA_SMARTIO) += mxser.o +obj-$(CONFIG_COMPUTONE) += ip2.o ip2main.o +obj-$(CONFIG_RISCOM8) += riscom8.o +obj-$(CONFIG_ISI) += isicom.o +obj-$(CONFIG_SYNCLINK) += synclink.o +obj-$(CONFIG_SYNCLINKMP) += synclinkmp.o +obj-$(CONFIG_N_HDLC) += n_hdlc.o obj-$(CONFIG_AMIGA_BUILTIN_SERIAL) += amiserial.o -obj-$(CONFIG_A2232) += ser_a2232.o generic_serial.o -obj-$(CONFIG_SX) += sx.o generic_serial.o -obj-$(CONFIG_RIO) += rio/ generic_serial.o -obj-$(CONFIG_SH_SCI) += sh-sci.o generic_serial.o -obj-$(CONFIG_SERIAL167) += serial167.o -obj-$(CONFIG_MVME147_SCC) += generic_serial.o vme_scc.o -obj-$(CONFIG_MVME162_SCC) += generic_serial.o vme_scc.o -obj-$(CONFIG_BVME6000_SCC) += generic_serial.o vme_scc.o -obj-$(CONFIG_SERIAL_TX3912) += generic_serial.o serial_tx3912.o -obj-$(CONFIG_HVC_CONSOLE) += hvc_console.o -obj-$(CONFIG_RAW_DRIVER) += raw.o +obj-$(CONFIG_SX) += sx.o generic_serial.o +obj-$(CONFIG_RIO) += rio/ generic_serial.o +obj-$(CONFIG_SH_SCI) += sh-sci.o generic_serial.o +obj-$(CONFIG_HVC_CONSOLE) += hvc_console.o +obj-$(CONFIG_RAW_DRIVER) += raw.o obj-$(CONFIG_PRINTER) += lp.o obj-$(CONFIG_TIPAR) += tipar.o diff -prauN linux-2.6.0-test5/drivers/char/agp/Kconfig wli-2.6.0-test5-bk12-25/drivers/char/agp/Kconfig --- linux-2.6.0-test5/drivers/char/agp/Kconfig 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/agp/Kconfig 2003-09-25 19:15:54.000000000 -0700 @@ -21,8 +21,7 @@ config AGP You should say Y here if you use XFree86 3.3.6 or 4.x and want to use GLX or DRI. If unsure, say N. - This driver is available as a module. If you want to compile it as - a module, say M here and read . The + To compile this driver as a module, choose M here: the module will be called agpgart. config AGP_ALI @@ -80,8 +79,8 @@ config AGP_INTEL tristate "Intel 440LX/BX/GX, I8xx and E7x05 chipset support" depends on AGP && X86 && !X86_64 help - This option gives you AGP support for the GLX component of - XFree86 4.x on Intel 440LX/BX/GX, 815, 820, 830, 840, 845, 850, 860 + This option gives you AGP support for the GLX component of XFree86 4.x + on Intel 440LX/BX/GX, 815, 820, 830, 840, 845, 850, 860, 875, E7205 and E7505 chipsets and full support for the 810, 815, 830M, 845G, 852GM, 855GM and 865G integrated graphics chipsets. diff -prauN linux-2.6.0-test5/drivers/char/agp/alpha-agp.c wli-2.6.0-test5-bk12-25/drivers/char/agp/alpha-agp.c --- linux-2.6.0-test5/drivers/char/agp/alpha-agp.c 2003-09-08 12:50:09.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/agp/alpha-agp.c 2003-09-25 19:15:54.000000000 -0700 @@ -183,7 +183,7 @@ alpha_core_agp_setup(void) alpha_bridge->dev = pdev; alpha_bridge->mode = agp->capability.lw; - printk(KERN_INFO "Detected AGP on hose %d\n", agp->hose->index); + printk(KERN_INFO PFX "Detected AGP on hose %d\n", agp->hose->index); return agp_add_bridge(alpha_bridge); fail: diff -prauN linux-2.6.0-test5/drivers/char/agp/amd64-agp.c wli-2.6.0-test5-bk12-25/drivers/char/agp/amd64-agp.c --- linux-2.6.0-test5/drivers/char/agp/amd64-agp.c 2003-09-08 12:50:13.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/agp/amd64-agp.c 2003-09-25 19:15:54.000000000 -0700 @@ -8,6 +8,7 @@ * work is done in the northbridge(s). */ +#include #include #include #include @@ -252,15 +253,15 @@ static int __init aperture_valid(u64 ape static int not_first_call; u32 pfn, c; if (aper == 0) { - printk(KERN_ERR "No aperture\n"); + printk(KERN_ERR PFX "No aperture\n"); return 0; } if (size < 32*1024*1024) { - printk(KERN_ERR "Aperture too small (%d MB)\n", size>>20); + printk(KERN_ERR PFX "Aperture too small (%d MB)\n", size>>20); return 0; } if (aper + size > 0xffffffff) { - printk(KERN_ERR "Aperture out of bounds\n"); + printk(KERN_ERR PFX "Aperture out of bounds\n"); return 0; } pfn = aper >> PAGE_SHIFT; @@ -268,7 +269,7 @@ static int __init aperture_valid(u64 ape if (!pfn_valid(pfn + c)) break; if (!PageReserved(pfn_to_page(pfn + c))) { - printk(KERN_ERR "Aperture pointing to RAM\n"); + printk(KERN_ERR PFX "Aperture pointing to RAM\n"); return 0; } } @@ -279,7 +280,7 @@ static int __init aperture_valid(u64 ape Maybe better to use pci_assign_resource/pci_enable_device instead trusting the bridges? */ if (!not_first_call && request_mem_region(aper, size, "aperture") < 0) { - printk(KERN_ERR "Aperture conflicts with PCI mapping.\n"); + printk(KERN_ERR PFX "Aperture conflicts with PCI mapping.\n"); return 0; } @@ -328,7 +329,7 @@ static __init int fix_northbridge(struct pci_read_config_dword(agp, 0x10, &aper_low); pci_read_config_dword(agp, 0x14, &aper_hi); aper = (aper_low & ~((1<<22)-1)) | ((u64)aper_hi << 32); - printk(KERN_INFO "Aperture from AGP @ %Lx size %u MB\n", aper, 32 << order); + printk(KERN_INFO PFX "Aperture from AGP @ %Lx size %u MB\n", aper, 32 << order); if (order < 0 || !aperture_valid(aper, (32*1024*1024)< 0) { struct pci_dev *dev; if (!agp_try_unsupported && !agp_try_unsupported_boot) { - printk(KERN_INFO "No supported AGP bridge found.\n"); + printk(KERN_INFO PFX "No supported AGP bridge found.\n"); #ifdef MODULE - printk(KERN_INFO "You can try agp_try_unsupported=1\n"); + printk(KERN_INFO PFX "You can try agp_try_unsupported=1\n"); #else - printk(KERN_INFO "You can boot with agp=try_unsupported\n"); + printk(KERN_INFO PFX "You can boot with agp=try_unsupported\n"); #endif return -ENODEV; } diff -prauN linux-2.6.0-test5/drivers/char/agp/ati-agp.c wli-2.6.0-test5-bk12-25/drivers/char/agp/ati-agp.c --- linux-2.6.0-test5/drivers/char/agp/ati-agp.c 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/agp/ati-agp.c 2003-09-25 19:15:54.000000000 -0700 @@ -214,7 +214,7 @@ static int ati_configure(void) /* pci_read_config_dword(agp_bridge.dev, AGP_APBASE, &temp); agp_bridge.gart_bus_addr = (temp & PCI_BASE_ADDRESS_MEM_MASK); - printk(KERN_INFO "IGP320 gart_bus_addr: %x\n", agp_bridge.gart_bus_addr); + printk(KERN_INFO PFX "IGP320 gart_bus_addr: %x\n", agp_bridge.gart_bus_addr); */ OUTREG32(ati_generic_private.registers, ATI_GART_FEATURE_ID, 0x60000); @@ -226,8 +226,6 @@ static int ati_configure(void) OUTREG32(ati_generic_private.registers, ATI_GART_BASE, agp_bridge->gatt_bus_addr); - /* Flush the tlb */ - OUTREG32(ati_generic_private.registers, ATI_GART_CACHE_CNTRL, 1); return 0; } @@ -491,7 +489,7 @@ static void __devexit agp_ati_remove(str agp_put_bridge(bridge); } -static struct pci_device_id agp_ati_pci_table[] __initdata = { +static struct pci_device_id agp_ati_pci_table[] = { { .class = (PCI_CLASS_BRIDGE_HOST << 8), .class_mask = ~0, diff -prauN linux-2.6.0-test5/drivers/char/agp/backend.c wli-2.6.0-test5-bk12-25/drivers/char/agp/backend.c --- linux-2.6.0-test5/drivers/char/agp/backend.c 2003-09-08 12:50:16.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/agp/backend.c 2003-09-25 19:15:54.000000000 -0700 @@ -26,7 +26,6 @@ * TODO: * - Allocate more than order 0 pages to avoid too much linear map splitting. */ -#include #include #include #include @@ -34,6 +33,7 @@ #include #include #include +#include #include #include #include "agp.h" @@ -318,6 +318,7 @@ void __exit agp_exit(void) { } +#ifndef MODULE static __init int agp_setup(char *s) { if (!strcmp(s,"off")) @@ -327,6 +328,7 @@ static __init int agp_setup(char *s) return 1; } __setup("agp=", agp_setup); +#endif MODULE_AUTHOR("Dave Jones "); MODULE_DESCRIPTION("AGP GART driver"); diff -prauN linux-2.6.0-test5/drivers/char/agp/hp-agp.c wli-2.6.0-test5-bk12-25/drivers/char/agp/hp-agp.c --- linux-2.6.0-test5/drivers/char/agp/hp-agp.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/agp/hp-agp.c 2003-09-25 19:15:54.000000000 -0700 @@ -42,6 +42,8 @@ /* AGP bridge need not be PCI device, but DRM thinks it is. */ static struct pci_dev fake_bridge_dev; +static int hp_zx1_gart_found; + static struct aper_size_info_fixed hp_zx1_sizes[] = { {0, 0, 0}, /* filled in by hp_zx1_fetch_size() */ @@ -386,8 +388,6 @@ hp_zx1_setup (u64 ioc_hpa, u64 lba_hpa) struct agp_bridge_data *bridge; int error; - printk(KERN_INFO PFX "Detected HP ZX1 AGP chipset (ioc=%lx, lba=%lx)\n", ioc_hpa, lba_hpa); - error = hp_zx1_ioc_init(ioc_hpa, lba_hpa); if (error) return error; @@ -416,7 +416,7 @@ zx1_gart_probe (acpi_handle obj, u32 dep status = hp_acpi_csr_space(obj, &lba_hpa, &length); if (ACPI_FAILURE(status)) - return 1; + return AE_OK; /* Look for an enclosing IOC scope and find its CSR space */ handle = obj; @@ -436,7 +436,7 @@ zx1_gart_probe (acpi_handle obj, u32 dep else { printk(KERN_ERR PFX "Detected HP ZX1 " "AGP LBA but no IOC.\n"); - return status; + return AE_OK; } } } @@ -446,22 +446,28 @@ zx1_gart_probe (acpi_handle obj, u32 dep } while (ACPI_SUCCESS(status)); if (hp_zx1_setup(sba_hpa + HP_ZX1_IOC_OFFSET, lba_hpa)) - return 1; - return 0; + return AE_OK; + + printk(KERN_INFO PFX "Detected HP ZX1 %s AGP chipset (ioc=%lx, lba=%lx)\n", + (char *) context, sba_hpa + HP_ZX1_IOC_OFFSET, lba_hpa); + + hp_zx1_gart_found = 1; + return AE_CTRL_TERMINATE; } static int __init agp_hp_init (void) { - acpi_status status; - status = acpi_get_devices("HWP0003", zx1_gart_probe, "HWP0003 AGP LBA", NULL); - if (!(ACPI_SUCCESS(status))) { - agp_bridge->type = NOT_SUPPORTED; - printk(KERN_INFO PFX "Failed to initialize zx1 AGP.\n"); - return -ENODEV; - } - return 0; + acpi_get_devices("HWP0003", zx1_gart_probe, "HWP0003", NULL); + if (hp_zx1_gart_found) + return 0; + + acpi_get_devices("HWP0007", zx1_gart_probe, "HWP0007", NULL); + if (hp_zx1_gart_found) + return 0; + + return -ENODEV; } static void __exit diff -prauN linux-2.6.0-test5/drivers/char/agp/intel-agp.c wli-2.6.0-test5-bk12-25/drivers/char/agp/intel-agp.c --- linux-2.6.0-test5/drivers/char/agp/intel-agp.c 2003-09-08 12:50:04.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/agp/intel-agp.c 2003-09-25 19:15:54.000000000 -0700 @@ -445,7 +445,7 @@ static int intel_i830_insert_entries(str num_entries = A_SIZE_FIX(temp)->num_entries; if (pg_start < intel_i830_private.gtt_entries) { - printk (KERN_DEBUG "pg_start == 0x%.8lx,intel_i830_private.gtt_entries == 0x%.8x\n", + printk (KERN_DEBUG PFX "pg_start == 0x%.8lx,intel_i830_private.gtt_entries == 0x%.8x\n", pg_start,intel_i830_private.gtt_entries); printk (KERN_INFO PFX "Trying to insert into local/stolen memory\n"); diff -prauN linux-2.6.0-test5/drivers/char/agp/nvidia-agp.c wli-2.6.0-test5-bk12-25/drivers/char/agp/nvidia-agp.c --- linux-2.6.0-test5/drivers/char/agp/nvidia-agp.c 2003-09-08 12:49:56.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/agp/nvidia-agp.c 2003-09-25 19:15:54.000000000 -0700 @@ -196,7 +196,7 @@ static void nvidia_tlbflush(struct agp_m pci_read_config_dword(nvidia_private.dev_1, NVIDIA_1_WBC, &wbc_reg); if ((signed)(end - jiffies) <= 0) { - printk(KERN_ERR + printk(KERN_ERR PFX "TLB flush took more than 3 seconds.\n"); } } while (wbc_reg & nvidia_private.wbc_mask); diff -prauN linux-2.6.0-test5/drivers/char/agp/sis-agp.c wli-2.6.0-test5-bk12-25/drivers/char/agp/sis-agp.c --- linux-2.6.0-test5/drivers/char/agp/sis-agp.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/agp/sis-agp.c 2003-09-25 19:15:54.000000000 -0700 @@ -215,7 +215,7 @@ static void __devexit agp_sis_remove(str agp_put_bridge(bridge); } -static struct pci_device_id agp_sis_pci_table[] __initdata = { +static struct pci_device_id agp_sis_pci_table[] = { { .class = (PCI_CLASS_BRIDGE_HOST << 8), .class_mask = ~0, diff -prauN linux-2.6.0-test5/drivers/char/agp/uninorth-agp.c wli-2.6.0-test5-bk12-25/drivers/char/agp/uninorth-agp.c --- linux-2.6.0-test5/drivers/char/agp/uninorth-agp.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/agp/uninorth-agp.c 2003-09-25 19:15:54.000000000 -0700 @@ -350,7 +350,7 @@ static void __devexit agp_uninorth_remov agp_put_bridge(bridge); } -static struct pci_device_id agp_uninorth_pci_table[] __initdata = { +static struct pci_device_id agp_uninorth_pci_table[] = { { .class = (PCI_CLASS_BRIDGE_HOST << 8), .class_mask = ~0, diff -prauN linux-2.6.0-test5/drivers/char/agp/via-agp.c wli-2.6.0-test5-bk12-25/drivers/char/agp/via-agp.c --- linux-2.6.0-test5/drivers/char/agp/via-agp.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/agp/via-agp.c 2003-09-25 19:15:54.000000000 -0700 @@ -432,7 +432,7 @@ static void __devexit agp_via_remove(str agp_put_bridge(bridge); } -static struct pci_device_id agp_via_pci_table[] __initdata = { +static struct pci_device_id agp_via_pci_table[] = { { .class = (PCI_CLASS_BRIDGE_HOST << 8), .class_mask = ~0, diff -prauN linux-2.6.0-test5/drivers/char/cyclades.c wli-2.6.0-test5-bk12-25/drivers/char/cyclades.c --- linux-2.6.0-test5/drivers/char/cyclades.c 2003-09-08 12:49:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/cyclades.c 2003-09-25 19:15:54.000000000 -0700 @@ -5433,7 +5433,7 @@ static struct tty_operations cy_ops = { .read_proc = cyclades_get_proc_info, }; -int __init +static int __init cy_init(void) { struct cyclades_port *info; @@ -5660,13 +5660,10 @@ cy_init(void) } /* cy_init */ -#ifdef MODULE -void +static void __exit cy_cleanup_module(void) { - int i; - int e1, e2; - unsigned long flags; + int i, e1; #ifndef CONFIG_CYZ_INTR if (cyz_timeron){ @@ -5702,11 +5699,10 @@ cy_cleanup_module(void) } } /* cy_cleanup_module */ -/* Module entry-points */ module_init(cy_init); module_exit(cy_cleanup_module); -#else /* MODULE */ +#ifndef MODULE /* called by linux/init/main.c to parse command line options */ void cy_setup(char *str, int *ints) diff -prauN linux-2.6.0-test5/drivers/char/drm/drmP.h wli-2.6.0-test5-bk12-25/drivers/char/drm/drmP.h --- linux-2.6.0-test5/drivers/char/drm/drmP.h 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/drm/drmP.h 2003-09-25 19:15:54.000000000 -0700 @@ -784,6 +784,7 @@ extern void DRM(mem_init)(void); extern int DRM(mem_info)(char *buf, char **start, off_t offset, int request, int *eof, void *data); extern void *DRM(alloc)(size_t size, int area); +extern void *DRM(calloc)(size_t nmemb, size_t size, int area); extern void *DRM(realloc)(void *oldpt, size_t oldsize, size_t size, int area); extern void DRM(free)(void *pt, size_t size, int area); diff -prauN linux-2.6.0-test5/drivers/char/drm/drm_drv.h wli-2.6.0-test5-bk12-25/drivers/char/drm/drm_drv.h --- linux-2.6.0-test5/drivers/char/drm/drm_drv.h 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/drm/drm_drv.h 2003-09-25 19:15:54.000000000 -0700 @@ -848,7 +848,7 @@ int DRM(release)( struct inode *inode, s */ DRM_DEBUG( "pid = %d, device = 0x%lx, open_count = %d\n", - current->pid, (long)dev->device, dev->open_count ); + current->pid, (long)old_encode_dev(dev->device), dev->open_count ); if ( priv->lock_count && dev->lock.hw_lock && _DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock) && @@ -983,7 +983,7 @@ int DRM(ioctl)( struct inode *inode, str ++priv->ioctl_count; DRM_DEBUG( "pid=%d, cmd=0x%02x, nr=0x%02x, dev 0x%lx, auth=%d\n", - current->pid, cmd, nr, (long)dev->device, + current->pid, cmd, nr, (long)old_encode_dev(dev->device), priv->authenticated ); if ( nr >= DRIVER_IOCTL_COUNT ) { diff -prauN linux-2.6.0-test5/drivers/char/drm/drm_fops.h wli-2.6.0-test5-bk12-25/drivers/char/drm/drm_fops.h --- linux-2.6.0-test5/drivers/char/drm/drm_fops.h 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/drm/drm_fops.h 2003-09-25 19:15:54.000000000 -0700 @@ -111,7 +111,7 @@ int DRM(flush)(struct file *filp) drm_device_t *dev = priv->dev; DRM_DEBUG("pid = %d, device = 0x%lx, open_count = %d\n", - current->pid, (long)dev->device, dev->open_count); + current->pid, (long)old_encode_dev(dev->device), dev->open_count); return 0; } @@ -122,7 +122,7 @@ int DRM(fasync)(int fd, struct file *fil drm_device_t *dev = priv->dev; int retcode; - DRM_DEBUG("fd = %d, device = 0x%lx\n", fd, (long)dev->device); + DRM_DEBUG("fd = %d, device = 0x%lx\n", fd, (long)old_encode_dev(dev->device)); retcode = fasync_helper(fd, filp, on, &dev->buf_async); if (retcode < 0) return retcode; return 0; diff -prauN linux-2.6.0-test5/drivers/char/drm/drm_memory.h wli-2.6.0-test5-bk12-25/drivers/char/drm/drm_memory.h --- linux-2.6.0-test5/drivers/char/drm/drm_memory.h 2003-09-08 12:49:54.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/drm/drm_memory.h 2003-09-25 20:03:31.000000000 -0700 @@ -117,10 +117,7 @@ agp_remap (unsigned long offset, unsigne page_map[i] = pfn_to_page(phys_addr_map[i] >> PAGE_SHIFT); addr = vmap(page_map, num_pages, VM_IOREMAP, PAGE_AGP); vfree(page_map); - if (!addr) - return NULL; - flush_tlb_kernel_range((unsigned long) addr, (unsigned long) addr + size); return addr; } @@ -128,7 +125,7 @@ static inline unsigned long drm_follow_page (void *vaddr) { pgd_t *pgd = pgd_offset_k((unsigned long) vaddr); - pmd_t *pmd = pmd_offset(pgd, (unsigned long) vaddr); + pmd_t *pmd = pmd_offset_kernel(pgd, (unsigned long)vaddr); pte_t *ptep = pte_offset_kernel(pmd, (unsigned long) vaddr); return pte_pfn(*ptep) << PAGE_SHIFT; } @@ -224,6 +221,18 @@ void *DRM(alloc)(size_t size, int area) return kmalloc(size, GFP_KERNEL); } +/** Wrapper around kmalloc() */ +void *DRM(calloc)(size_t size, size_t nmemb, int area) +{ + void *addr; + + addr = kmalloc(size * nmemb, GFP_KERNEL); + if (addr != NULL) + memset((void *)addr, 0, size * nmemb); + + return addr; +} + /** Wrapper around kmalloc() and kfree() */ void *DRM(realloc)(void *oldpt, size_t oldsize, size_t size, int area) { diff -prauN linux-2.6.0-test5/drivers/char/drm/drm_memory_debug.h wli-2.6.0-test5-bk12-25/drivers/char/drm/drm_memory_debug.h --- linux-2.6.0-test5/drivers/char/drm/drm_memory_debug.h 2003-09-08 12:49:54.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/drm/drm_memory_debug.h 2003-09-25 19:15:54.000000000 -0700 @@ -166,6 +166,17 @@ void *DRM(alloc)(size_t size, int area) return pt; } +void *DRM(calloc)(size_t size, size_t nmemb, int area) +{ + void *addr; + + addr = DRM(alloc)(nmemb * size, area); + if (addr != NULL) + memset((void *)addr, 0, size * nmemb); + + return addr; +} + void *DRM(realloc)(void *oldpt, size_t oldsize, size_t size, int area) { void *pt; diff -prauN linux-2.6.0-test5/drivers/char/drm/drm_proc.h wli-2.6.0-test5-bk12-25/drivers/char/drm/drm_proc.h --- linux-2.6.0-test5/drivers/char/drm/drm_proc.h 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/drm/drm_proc.h 2003-09-25 19:15:54.000000000 -0700 @@ -184,9 +184,9 @@ static int DRM(name_info)(char *buf, cha if (dev->unique) { DRM_PROC_PRINT("%s 0x%lx %s\n", - dev->name, (long)dev->device, dev->unique); + dev->name, (long)old_encode_dev(dev->device), dev->unique); } else { - DRM_PROC_PRINT("%s 0x%lx\n", dev->name, (long)dev->device); + DRM_PROC_PRINT("%s 0x%lx\n", dev->name, (long)old_encode_dev(dev->device)); } if (len > request + offset) return request; diff -prauN linux-2.6.0-test5/drivers/char/drm/i810_dma.c wli-2.6.0-test5-bk12-25/drivers/char/drm/i810_dma.c --- linux-2.6.0-test5/drivers/char/drm/i810_dma.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/drm/i810_dma.c 2003-09-25 19:15:54.000000000 -0700 @@ -83,7 +83,7 @@ static drm_buf_t *i810_freelist_get(drm_ /* In use is already a pointer */ used = cmpxchg(buf_priv->in_use, I810_BUF_FREE, I810_BUF_CLIENT); - if(used == I810_BUF_FREE) { + if (used == I810_BUF_FREE) { return buf; } } @@ -101,7 +101,7 @@ static int i810_freelist_put(drm_device_ /* In use is already a pointer */ used = cmpxchg(buf_priv->in_use, I810_BUF_CLIENT, I810_BUF_FREE); - if(used != I810_BUF_CLIENT) { + if (used != I810_BUF_CLIENT) { DRM_ERROR("Freeing buffer thats not in use : %d\n", buf->idx); return -EINVAL; } @@ -154,7 +154,8 @@ static int i810_map_buffer(drm_buf_t *bu struct file_operations *old_fops; int retcode = 0; - if(buf_priv->currently_mapped == I810_BUF_MAPPED) return -EINVAL; + if (buf_priv->currently_mapped == I810_BUF_MAPPED) + return -EINVAL; down_write( ¤t->mm->mmap_sem ); old_fops = filp->f_op; @@ -182,7 +183,7 @@ static int i810_unmap_buffer(drm_buf_t * drm_i810_buf_priv_t *buf_priv = buf->dev_private; int retcode = 0; - if(buf_priv->currently_mapped != I810_BUF_MAPPED) + if (buf_priv->currently_mapped != I810_BUF_MAPPED) return -EINVAL; down_write(¤t->mm->mmap_sem); @@ -212,7 +213,7 @@ static int i810_dma_get_buffer(drm_devic } retcode = i810_map_buffer(buf, filp); - if(retcode) { + if (retcode) { i810_freelist_put(dev, buf); DRM_ERROR("mapbuf failed, retcode %d\n", retcode); return retcode; @@ -244,7 +245,7 @@ int i810_dma_cleanup(drm_device_t *dev) drm_i810_private_t *dev_priv = (drm_i810_private_t *) dev->dev_private; - if(dev_priv->ring.virtual_start) { + if (dev_priv->ring.virtual_start) { DRM(ioremapfree)((void *) dev_priv->ring.virtual_start, dev_priv->ring.Size, dev); } @@ -289,7 +290,7 @@ static int i810_wait_ring(drm_device_t * } iters++; - if(time_before(end, jiffies)) { + if (time_before(end, jiffies)) { DRM_ERROR("space: %d wanted %d\n", ring->space, n); DRM_ERROR("lockup\n"); goto out_wait_ring; @@ -319,7 +320,7 @@ static int i810_freelist_init(drm_device u32 *hw_status = (u32 *)(dev_priv->hw_status_page + my_idx); int i; - if(dma->buf_count > 1019) { + if (dma->buf_count > 1019) { /* Not enough space in the status page for the freelist */ return -EINVAL; } @@ -350,28 +351,28 @@ static int i810_dma_initialize(drm_devic list_for_each(list, &dev->maplist->head) { drm_map_list_t *r_list = list_entry(list, drm_map_list_t, head); - if( r_list->map && + if (r_list->map && r_list->map->type == _DRM_SHM && r_list->map->flags & _DRM_CONTAINS_LOCK ) { dev_priv->sarea_map = r_list->map; break; } } - if(!dev_priv->sarea_map) { + if (!dev_priv->sarea_map) { dev->dev_private = (void *)dev_priv; i810_dma_cleanup(dev); DRM_ERROR("can not find sarea!\n"); return -EINVAL; } DRM_FIND_MAP( dev_priv->mmio_map, init->mmio_offset ); - if(!dev_priv->mmio_map) { + if (!dev_priv->mmio_map) { dev->dev_private = (void *)dev_priv; i810_dma_cleanup(dev); DRM_ERROR("can not find mmio map!\n"); return -EINVAL; } DRM_FIND_MAP( dev_priv->buffer_map, init->buffers_offset ); - if(!dev_priv->buffer_map) { + if (!dev_priv->buffer_map) { dev->dev_private = (void *)dev_priv; i810_dma_cleanup(dev); DRM_ERROR("can not find dma buffer map!\n"); @@ -431,7 +432,7 @@ static int i810_dma_initialize(drm_devic DRM_DEBUG("Enabled hardware status page\n"); /* Now we need to init our freelist */ - if(i810_freelist_init(dev, dev_priv) != 0) { + if (i810_freelist_init(dev, dev_priv) != 0) { dev->dev_private = (void *)dev_priv; i810_dma_cleanup(dev); DRM_ERROR("Not enough space in the status page for" @@ -467,8 +468,8 @@ int i810_dma_init_compat(drm_i810_init_t /* This is a v1.2 client, just get the v1.2 init data */ DRM_INFO("Using POST v1.2 init.\n"); - if(copy_from_user(init, (drm_i810_init_t *)arg, - sizeof(drm_i810_init_t))) { + if (copy_from_user(init, (drm_i810_init_t *)arg, + sizeof(drm_i810_init_t))) { return -EFAULT; } } else { @@ -496,7 +497,7 @@ int i810_dma_init(struct inode *inode, s int retcode = 0; /* Get only the init func */ - if (copy_from_user(&init, (void *)arg, sizeof(drm_i810_init_func_t))) + if (copy_from_user(&init, (void *)arg, sizeof(drm_i810_init_func_t))) return -EFAULT; switch(init.func) { @@ -513,9 +514,9 @@ int i810_dma_init(struct inode *inode, s dev_priv = DRM(alloc)(sizeof(drm_i810_private_t), DRM_MEM_DRIVER); if (dev_priv == NULL) - return -ENOMEM; + return -ENOMEM; retcode = i810_dma_initialize(dev, dev_priv, &init); - break; + break; default: case I810_INIT_DMA_1_4: @@ -526,15 +527,15 @@ int i810_dma_init(struct inode *inode, s } dev_priv = DRM(alloc)(sizeof(drm_i810_private_t), DRM_MEM_DRIVER); - if (dev_priv == NULL) - return -ENOMEM; + if (dev_priv == NULL) + return -ENOMEM; retcode = i810_dma_initialize(dev, dev_priv, &init); - break; + break; case I810_CLEANUP_DMA: DRM_INFO("DMA Cleanup\n"); retcode = i810_dma_cleanup(dev); - break; + break; } return retcode; @@ -1019,7 +1020,7 @@ void i810_reclaim_buffers(struct file *f if (used == I810_BUF_CLIENT) DRM_DEBUG("reclaimed from client\n"); - if(buf_priv->currently_mapped == I810_BUF_MAPPED) + if (buf_priv->currently_mapped == I810_BUF_MAPPED) buf_priv->currently_mapped = I810_BUF_UNMAPPED; } } @@ -1031,7 +1032,7 @@ int i810_flush_ioctl(struct inode *inode drm_file_t *priv = filp->private_data; drm_device_t *dev = priv->dev; - if(!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock)) { + if (!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock)) { DRM_ERROR("i810_flush_ioctl called without lock held\n"); return -EINVAL; } @@ -1056,7 +1057,7 @@ int i810_dma_vertex(struct inode *inode, if (copy_from_user(&vertex, (drm_i810_vertex_t *)arg, sizeof(vertex))) return -EFAULT; - if(!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock)) { + if (!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock)) { DRM_ERROR("i810_dma_vertex called without lock held\n"); return -EINVAL; } @@ -1064,7 +1065,8 @@ int i810_dma_vertex(struct inode *inode, DRM_DEBUG("i810 dma vertex, idx %d used %d discard %d\n", vertex.idx, vertex.used, vertex.discard); - if(vertex.idx < 0 || vertex.idx > dma->buf_count) return -EINVAL; + if (vertex.idx < 0 || vertex.idx > dma->buf_count) + return -EINVAL; i810_dma_dispatch_vertex( dev, dma->buflist[ vertex.idx ], @@ -1090,7 +1092,7 @@ int i810_clear_bufs(struct inode *inode, if (copy_from_user(&clear, (drm_i810_clear_t *)arg, sizeof(clear))) return -EFAULT; - if(!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock)) { + if (!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock)) { DRM_ERROR("i810_clear_bufs called without lock held\n"); return -EINVAL; } @@ -1114,7 +1116,7 @@ int i810_swap_bufs(struct inode *inode, DRM_DEBUG("i810_swap_bufs\n"); - if(!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock)) { + if (!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock)) { DRM_ERROR("i810_swap_buf called without lock held\n"); return -EINVAL; } @@ -1152,7 +1154,7 @@ int i810_getbuf(struct inode *inode, str if (copy_from_user(&d, (drm_i810_dma_t *)arg, sizeof(d))) return -EFAULT; - if(!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock)) { + if (!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock)) { DRM_ERROR("i810_dma called without lock held\n"); return -EINVAL; } @@ -1202,7 +1204,7 @@ static void i810_dma_dispatch_mc(drm_dev u = cmpxchg(buf_priv->in_use, I810_BUF_CLIENT, I810_BUF_HARDWARE); - if(u != I810_BUF_CLIENT) { + if (u != I810_BUF_CLIENT) { DRM_DEBUG("MC found buffer that isn't mine!\n"); } @@ -1266,7 +1268,7 @@ int i810_dma_mc(struct inode *inode, str return -EFAULT; - if(!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock)) { + if (!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock)) { DRM_ERROR("i810_dma_mc called without lock held\n"); return -EINVAL; } @@ -1314,7 +1316,7 @@ int i810_fstatus(struct inode *inode, st drm_device_t *dev = priv->dev; drm_i810_private_t *dev_priv = (drm_i810_private_t *)dev->dev_private; - if(!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock)) { + if (!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock)) { DRM_ERROR("i810_fstatus called without lock held\n"); return -EINVAL; } @@ -1328,7 +1330,7 @@ int i810_ov0_flip(struct inode *inode, s drm_device_t *dev = priv->dev; drm_i810_private_t *dev_priv = (drm_i810_private_t *)dev->dev_private; - if(!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock)) { + if (!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock)) { DRM_ERROR("i810_ov0_flip called without lock held\n"); return -EINVAL; } @@ -1373,7 +1375,7 @@ int i810_flip_bufs(struct inode *inode, DRM_DEBUG("%s\n", __FUNCTION__); - if(!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock)) { + if (!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock)) { DRM_ERROR("i810_flip_buf called without lock held\n"); return -EINVAL; } diff -prauN linux-2.6.0-test5/drivers/char/drm/r128_cce.c wli-2.6.0-test5-bk12-25/drivers/char/drm/r128_cce.c --- linux-2.6.0-test5/drivers/char/drm/r128_cce.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/drm/r128_cce.c 2003-09-25 19:15:54.000000000 -0700 @@ -81,8 +81,6 @@ static u32 r128_cce_microcode[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; -int r128_do_wait_for_idle( drm_r128_private_t *dev_priv ); - int R128_READ_PLL(drm_device_t *dev, int addr) { drm_r128_private_t *dev_priv = dev->dev_private; @@ -151,7 +149,7 @@ static int r128_do_wait_for_fifo( drm_r1 return DRM_ERR(EBUSY); } -int r128_do_wait_for_idle( drm_r128_private_t *dev_priv ) +static int r128_do_wait_for_idle( drm_r128_private_t *dev_priv ) { int i, ret; diff -prauN linux-2.6.0-test5/drivers/char/drm/radeon.h wli-2.6.0-test5-bk12-25/drivers/char/drm/radeon.h --- linux-2.6.0-test5/drivers/char/drm/radeon.h 2003-09-08 12:50:23.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/drm/radeon.h 2003-09-25 19:15:54.000000000 -0700 @@ -68,19 +68,19 @@ * 1.5 - Add r200 packets to cmdbuf ioctl * - Add r200 function to init ioctl * - Add 'scalar2' instruction to cmdbuf - * 1.6 - Add static agp memory manager + * 1.6 - Add static GART memory manager * Add irq handler (won't be turned on unless X server knows to) * Add irq ioctls and irq_active getparam. * Add wait command for cmdbuf ioctl - * Add agp offset query for getparam + * Add GART offset query for getparam * 1.7 - Add support for cube map registers: R200_PP_CUBIC_FACES_[0..5] * and R200_PP_CUBIC_OFFSET_F1_[0..5]. * Added packets R200_EMIT_PP_CUBIC_FACES_[0..5] and * R200_EMIT_PP_CUBIC_OFFSETS_[0..5]. (brian) * 1.8 - Remove need to call cleanup ioctls on last client exit (keith) * Add 'GET' queries for starting additional clients on different VT's. - * Add DRM_IOCTL_RADEON_CP_RESUME ioctl. - * 1.9 - Add texture rectangle support for r100. + * 1.9 - Add DRM_IOCTL_RADEON_CP_RESUME ioctl. + * Add texture rectangle support for r100. */ #define DRIVER_IOCTLS \ [DRM_IOCTL_NR(DRM_IOCTL_DMA)] = { radeon_cp_buffers, 1, 0 }, \ @@ -113,7 +113,7 @@ /* When a client dies: * - Check for and clean up flipped page state - * - Free any alloced agp memory. + * - Free any alloced GART memory. * * DRM infrastructure takes care of reclaiming dma buffers. */ @@ -124,7 +124,7 @@ do { \ if ( dev_priv->page_flipping ) { \ radeon_do_cleanup_pageflip( dev ); \ } \ - radeon_mem_release( filp, dev_priv->agp_heap ); \ + radeon_mem_release( filp, dev_priv->gart_heap ); \ radeon_mem_release( filp, dev_priv->fb_heap ); \ } \ } while (0) diff -prauN linux-2.6.0-test5/drivers/char/drm/radeon_cp.c wli-2.6.0-test5-bk12-25/drivers/char/drm/radeon_cp.c --- linux-2.6.0-test5/drivers/char/drm/radeon_cp.c 2003-09-08 12:49:55.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/drm/radeon_cp.c 2003-09-25 19:15:54.000000000 -0700 @@ -855,25 +855,23 @@ static void radeon_cp_init_ring_buffer( /* Initialize the memory controller */ RADEON_WRITE( RADEON_MC_FB_LOCATION, - (dev_priv->agp_vm_start - 1) & 0xffff0000 ); + (dev_priv->gart_vm_start - 1) & 0xffff0000 ); +#if __REALLY_HAVE_AGP if ( !dev_priv->is_pci ) { RADEON_WRITE( RADEON_MC_AGP_LOCATION, - (((dev_priv->agp_vm_start - 1 + - dev_priv->agp_size) & 0xffff0000) | - (dev_priv->agp_vm_start >> 16)) ); - } + (((dev_priv->gart_vm_start - 1 + + dev_priv->gart_size) & 0xffff0000) | + (dev_priv->gart_vm_start >> 16)) ); -#if __REALLY_HAVE_AGP - if ( !dev_priv->is_pci ) ring_start = (dev_priv->cp_ring->offset - dev->agp->base - + dev_priv->agp_vm_start); - else + + dev_priv->gart_vm_start); + } else #endif ring_start = (dev_priv->cp_ring->offset - dev->sg->handle - + dev_priv->agp_vm_start); + + dev_priv->gart_vm_start); RADEON_WRITE( RADEON_CP_RB_BASE, ring_start ); @@ -891,7 +889,7 @@ static void radeon_cp_init_ring_buffer( RADEON_WRITE( RADEON_CP_RB_RPTR_ADDR, dev_priv->ring_rptr->offset - dev->agp->base - + dev_priv->agp_vm_start); + + dev_priv->gart_vm_start); } else #endif { @@ -975,10 +973,36 @@ static void radeon_cp_init_ring_buffer( RADEON_ISYNC_CPSCRATCH_IDLEGUI) ); } +/* Enable or disable PCI GART on the chip */ +static void radeon_set_pcigart( drm_radeon_private_t *dev_priv, int on ) +{ + u32 tmp = RADEON_READ( RADEON_AIC_CNTL ); + + if ( on ) { + RADEON_WRITE( RADEON_AIC_CNTL, tmp | RADEON_PCIGART_TRANSLATE_EN ); + + /* set PCI GART page-table base address + */ + RADEON_WRITE( RADEON_AIC_PT_BASE, dev_priv->bus_pci_gart ); + + /* set address range for PCI address translate + */ + RADEON_WRITE( RADEON_AIC_LO_ADDR, dev_priv->gart_vm_start ); + RADEON_WRITE( RADEON_AIC_HI_ADDR, dev_priv->gart_vm_start + + dev_priv->gart_size - 1); + + /* Turn off AGP aperture -- is this required for PCI GART? + */ + RADEON_WRITE( RADEON_MC_AGP_LOCATION, 0xffffffc0 ); /* ?? */ + RADEON_WRITE( RADEON_AGP_COMMAND, 0 ); /* clear AGP_COMMAND */ + } else { + RADEON_WRITE( RADEON_AIC_CNTL, tmp & ~RADEON_PCIGART_TRANSLATE_EN ); + } +} + static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init ) { drm_radeon_private_t *dev_priv; - u32 tmp; DRM_DEBUG( "\n" ); dev_priv = DRM(alloc)( sizeof(drm_radeon_private_t), DRM_MEM_DRIVER ); @@ -1091,7 +1115,7 @@ static int radeon_do_init_cp( drm_device dev_priv->ring_offset = init->ring_offset; dev_priv->ring_rptr_offset = init->ring_rptr_offset; dev_priv->buffers_offset = init->buffers_offset; - dev_priv->agp_textures_offset = init->agp_textures_offset; + dev_priv->gart_textures_offset = init->gart_textures_offset; if(!dev_priv->sarea) { DRM_ERROR("could not find sarea!\n"); @@ -1136,11 +1160,10 @@ static int radeon_do_init_cp( drm_device return DRM_ERR(EINVAL); } - if ( !dev_priv->is_pci ) { - DRM_FIND_MAP( dev_priv->agp_textures, - init->agp_textures_offset ); - if(!dev_priv->agp_textures) { - DRM_ERROR("could not find agp texture region!\n"); + if ( init->gart_textures_offset ) { + DRM_FIND_MAP( dev_priv->gart_textures, init->gart_textures_offset ); + if ( !dev_priv->gart_textures ) { + DRM_ERROR("could not find GART texture region!\n"); dev->dev_private = (void *)dev_priv; radeon_do_cleanup_cp(dev); return DRM_ERR(EINVAL); @@ -1182,25 +1205,25 @@ static int radeon_do_init_cp( drm_device } - dev_priv->agp_size = init->agp_size; - dev_priv->agp_vm_start = RADEON_READ( RADEON_CONFIG_APER_SIZE ); + dev_priv->gart_size = init->gart_size; + dev_priv->gart_vm_start = RADEON_READ( RADEON_CONFIG_APER_SIZE ); #if __REALLY_HAVE_AGP if ( !dev_priv->is_pci ) - dev_priv->agp_buffers_offset = (dev_priv->buffers->offset + dev_priv->gart_buffers_offset = (dev_priv->buffers->offset - dev->agp->base - + dev_priv->agp_vm_start); + + dev_priv->gart_vm_start); else #endif - dev_priv->agp_buffers_offset = (dev_priv->buffers->offset + dev_priv->gart_buffers_offset = (dev_priv->buffers->offset - dev->sg->handle - + dev_priv->agp_vm_start); + + dev_priv->gart_vm_start); - DRM_DEBUG( "dev_priv->agp_size %d\n", - dev_priv->agp_size ); - DRM_DEBUG( "dev_priv->agp_vm_start 0x%x\n", - dev_priv->agp_vm_start ); - DRM_DEBUG( "dev_priv->agp_buffers_offset 0x%lx\n", - dev_priv->agp_buffers_offset ); + DRM_DEBUG( "dev_priv->gart_size %d\n", + dev_priv->gart_size ); + DRM_DEBUG( "dev_priv->gart_vm_start 0x%x\n", + dev_priv->gart_vm_start ); + DRM_DEBUG( "dev_priv->gart_buffers_offset 0x%lx\n", + dev_priv->gart_buffers_offset ); dev_priv->ring.start = (u32 *)dev_priv->cp_ring->handle; dev_priv->ring.end = ((u32 *)dev_priv->cp_ring->handle @@ -1213,7 +1236,13 @@ static int radeon_do_init_cp( drm_device dev_priv->ring.high_mark = RADEON_RING_HIGH_MARK; - if ( dev_priv->is_pci ) { +#if __REALLY_HAVE_AGP + if ( !dev_priv->is_pci ) { + /* Turn off PCI GART */ + radeon_set_pcigart( dev_priv, 0 ); + } else +#endif + { if (!DRM(ati_pcigart_init)( dev, &dev_priv->phys_pci_gart, &dev_priv->bus_pci_gart)) { DRM_ERROR( "failed to init PCI GART!\n" ); @@ -1221,32 +1250,9 @@ static int radeon_do_init_cp( drm_device radeon_do_cleanup_cp(dev); return DRM_ERR(ENOMEM); } - /* Turn on PCI GART - */ - tmp = RADEON_READ( RADEON_AIC_CNTL ) - | RADEON_PCIGART_TRANSLATE_EN; - RADEON_WRITE( RADEON_AIC_CNTL, tmp ); - /* set PCI GART page-table base address - */ - RADEON_WRITE( RADEON_AIC_PT_BASE, dev_priv->bus_pci_gart ); - - /* set address range for PCI address translate - */ - RADEON_WRITE( RADEON_AIC_LO_ADDR, dev_priv->agp_vm_start ); - RADEON_WRITE( RADEON_AIC_HI_ADDR, dev_priv->agp_vm_start - + dev_priv->agp_size - 1); - - /* Turn off AGP aperture -- is this required for PCIGART? - */ - RADEON_WRITE( RADEON_MC_AGP_LOCATION, 0xffffffc0 ); /* ?? */ - RADEON_WRITE( RADEON_AGP_COMMAND, 0 ); /* clear AGP_COMMAND */ - } else { - /* Turn off PCI GART - */ - tmp = RADEON_READ( RADEON_AIC_CNTL ) - & ~RADEON_PCIGART_TRANSLATE_EN; - RADEON_WRITE( RADEON_AIC_CNTL, tmp ); + /* Turn on PCI GART */ + radeon_set_pcigart( dev_priv, 1 ); } radeon_cp_load_microcode( dev_priv ); @@ -1304,162 +1310,30 @@ int radeon_do_cleanup_cp( drm_device_t * /* This code will reinit the Radeon CP hardware after a resume from disc. * AFAIK, it would be very difficult to pickle the state at suspend time, so * here we make sure that all Radeon hardware initialisation is re-done without - * affecting running applications. This function is called radeon_do_resume_cp() - * as it was derived from radeon_init_cp, where most of the initialisation takes - * place during DRI init. - * - * This patch is NOT to be confused with my and Michel Daenzer's earlier DRI - * reinit work, which de- and re-initialised the complete DRI at every VT - * switch. + * affecting running applications. * * Charl P. Botha */ -static int radeon_do_resume_cp( drm_device_t *dev) +static int radeon_do_resume_cp( drm_device_t *dev ) { - drm_radeon_private_t *dev_priv; - u32 tmp; - DRM_DEBUG( "\n" ); - - DRM_DEBUG("Starting radeon_do_resume_cp()\n"); - - /* get the existing dev_private */ - dev_priv = dev->dev_private; - -#if !defined(PCIGART_ENABLED) - /* PCI support is not 100% working, so we disable it here. - */ - if ( dev_priv->is_pci ) { - DRM_ERROR( "PCI GART not yet supported for Radeon!\n" ); - radeon_do_cleanup_cp(dev); - return DRM_ERR(EINVAL); - } -#endif - - if ( dev_priv->is_pci && !dev->sg ) { - DRM_ERROR( "PCI GART memory not allocated!\n" ); - radeon_do_cleanup_cp(dev); - return DRM_ERR(EINVAL); - } - - if ( dev_priv->usec_timeout < 1 || - dev_priv->usec_timeout > RADEON_MAX_USEC_TIMEOUT ) { - DRM_DEBUG( "TIMEOUT problem!\n" ); - radeon_do_cleanup_cp(dev); - return DRM_ERR(EINVAL); - } - - if ( ( dev_priv->cp_mode != RADEON_CSQ_PRIBM_INDDIS ) && - ( dev_priv->cp_mode != RADEON_CSQ_PRIBM_INDBM ) ) { - DRM_DEBUG( "BAD cp_mode (%x)!\n", dev_priv->cp_mode ); - radeon_do_cleanup_cp(dev); - return DRM_ERR(EINVAL); - } - - if(!dev_priv->sarea) { - DRM_ERROR("could not find sarea!\n"); - radeon_do_cleanup_cp(dev); - return DRM_ERR(EINVAL); - } - - if(!dev_priv->fb) { - DRM_ERROR("could not find framebuffer!\n"); - radeon_do_cleanup_cp(dev); - return DRM_ERR(EINVAL); - } - - if(!dev_priv->mmio) { - DRM_ERROR("could not find mmio region!\n"); - radeon_do_cleanup_cp(dev); - return DRM_ERR(EINVAL); - } - - if(!dev_priv->cp_ring) { - DRM_ERROR("could not find cp ring region!\n"); - radeon_do_cleanup_cp(dev); - return DRM_ERR(EINVAL); - } - - if(!dev_priv->ring_rptr) { - DRM_ERROR("could not find ring read pointer!\n"); - radeon_do_cleanup_cp(dev); - return DRM_ERR(EINVAL); - } - - if(!dev_priv->buffers) { - DRM_ERROR("could not find dma buffer region!\n"); - radeon_do_cleanup_cp(dev); - return DRM_ERR(EINVAL); - } - - if ( !dev_priv->is_pci ) { - if(!dev_priv->agp_textures) { - DRM_ERROR("could not find agp texture region!\n"); - radeon_do_cleanup_cp(dev); - return DRM_ERR(EINVAL); - } - } + drm_radeon_private_t *dev_priv = dev->dev_private; - if ( !dev_priv->is_pci ) { - if(!dev_priv->cp_ring->handle || - !dev_priv->ring_rptr->handle || - !dev_priv->buffers->handle) { - DRM_ERROR("could not find ioremap agp regions!\n"); - radeon_do_cleanup_cp(dev); - return DRM_ERR(EINVAL); - } - } else { - DRM_DEBUG( "dev_priv->cp_ring->handle %p\n", - dev_priv->cp_ring->handle ); - DRM_DEBUG( "dev_priv->ring_rptr->handle %p\n", - dev_priv->ring_rptr->handle ); - DRM_DEBUG( "dev_priv->buffers->handle %p\n", - dev_priv->buffers->handle ); + if ( !dev_priv ) { + DRM_ERROR( "Called with no initialization\n" ); + return DRM_ERR( EINVAL ); } - - DRM_DEBUG( "dev_priv->agp_size %d\n", - dev_priv->agp_size ); - DRM_DEBUG( "dev_priv->agp_vm_start 0x%x\n", - dev_priv->agp_vm_start ); - DRM_DEBUG( "dev_priv->agp_buffers_offset 0x%lx\n", - dev_priv->agp_buffers_offset ); + DRM_DEBUG("Starting radeon_do_resume_cp()\n"); #if __REALLY_HAVE_AGP if ( !dev_priv->is_pci ) { - /* Turn off PCI GART - */ - tmp = RADEON_READ( RADEON_AIC_CNTL ) - & ~RADEON_PCIGART_TRANSLATE_EN; - RADEON_WRITE( RADEON_AIC_CNTL, tmp ); + /* Turn off PCI GART */ + radeon_set_pcigart( dev_priv, 0 ); } else #endif { - /* I'm not so sure about this ati_picgart_init after at resume-time... */ - if (!DRM(ati_pcigart_init)( dev, &dev_priv->phys_pci_gart, - &dev_priv->bus_pci_gart)) { - DRM_ERROR( "failed to init PCI GART!\n" ); - radeon_do_cleanup_cp(dev); - return DRM_ERR(ENOMEM); - } - - tmp = RADEON_READ( RADEON_AIC_CNTL ) - | RADEON_PCIGART_TRANSLATE_EN; - RADEON_WRITE( RADEON_AIC_CNTL, tmp ); - - /* set PCI GART page-table base address - */ - RADEON_WRITE( RADEON_AIC_PT_BASE, dev_priv->bus_pci_gart ); - - /* set address range for PCI address translate - */ - RADEON_WRITE( RADEON_AIC_LO_ADDR, dev_priv->agp_vm_start ); - RADEON_WRITE( RADEON_AIC_HI_ADDR, dev_priv->agp_vm_start - + dev_priv->agp_size - 1); - - /* Turn off AGP aperture -- is this required for PCIGART? - */ - RADEON_WRITE( RADEON_MC_AGP_LOCATION, 0xffffffc0 ); /* ?? */ - RADEON_WRITE( RADEON_AGP_COMMAND, 0 ); /* clear AGP_COMMAND */ + /* Turn on PCI GART */ + radeon_set_pcigart( dev_priv, 1 ); } radeon_cp_load_microcode( dev_priv ); @@ -1467,6 +1341,8 @@ static int radeon_do_resume_cp( drm_devi radeon_do_engine_reset( dev ); + DRM_DEBUG("radeon_do_resume_cp() complete\n"); + return 0; } @@ -1584,7 +1460,7 @@ void radeon_do_release( drm_device_t *de RADEON_WRITE( RADEON_GEN_INT_CNTL, 0 ); /* Free memory heap structures */ - radeon_mem_takedown( &(dev_priv->agp_heap) ); + radeon_mem_takedown( &(dev_priv->gart_heap) ); radeon_mem_takedown( &(dev_priv->fb_heap) ); /* deallocate kernel resources */ diff -prauN linux-2.6.0-test5/drivers/char/drm/radeon_drm.h wli-2.6.0-test5-bk12-25/drivers/char/drm/radeon_drm.h --- linux-2.6.0-test5/drivers/char/drm/radeon_drm.h 2003-09-08 12:50:09.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/drm/radeon_drm.h 2003-09-25 19:15:54.000000000 -0700 @@ -214,11 +214,11 @@ typedef union { #define RADEON_NR_SAREA_CLIPRECTS 12 -/* There are 2 heaps (local/AGP). Each region within a heap is a +/* There are 2 heaps (local/GART). Each region within a heap is a * minimum of 64k, and there are at most 64 of them per heap. */ #define RADEON_LOCAL_TEX_HEAP 0 -#define RADEON_AGP_TEX_HEAP 1 +#define RADEON_GART_TEX_HEAP 1 #define RADEON_NR_TEX_HEAPS 2 #define RADEON_NR_TEX_REGIONS 64 #define RADEON_LOG_TEX_GRANULARITY 16 @@ -400,7 +400,7 @@ typedef struct drm_radeon_init { unsigned long sarea_priv_offset; int is_pci; int cp_mode; - int agp_size; + int gart_size; int ring_size; int usec_timeout; @@ -415,7 +415,7 @@ typedef struct drm_radeon_init { unsigned long ring_offset; unsigned long ring_rptr_offset; unsigned long buffers_offset; - unsigned long agp_textures_offset; + unsigned long gart_textures_offset; } drm_radeon_init_t; typedef struct drm_radeon_cp_stop { @@ -525,18 +525,18 @@ typedef struct drm_radeon_indirect { /* 1.3: An ioctl to get parameters that aren't available to the 3d * client any other way. */ -#define RADEON_PARAM_AGP_BUFFER_OFFSET 1 /* card offset of 1st agp buffer */ +#define RADEON_PARAM_GART_BUFFER_OFFSET 1 /* card offset of 1st GART buffer */ #define RADEON_PARAM_LAST_FRAME 2 #define RADEON_PARAM_LAST_DISPATCH 3 #define RADEON_PARAM_LAST_CLEAR 4 /* Added with DRM version 1.6. */ #define RADEON_PARAM_IRQ_NR 5 -#define RADEON_PARAM_AGP_BASE 6 /* card offset of agp base */ +#define RADEON_PARAM_GART_BASE 6 /* card offset of GART base */ /* Added with DRM version 1.8. */ #define RADEON_PARAM_REGISTER_HANDLE 7 /* for drmMap() */ #define RADEON_PARAM_STATUS_HANDLE 8 #define RADEON_PARAM_SAREA_HANDLE 9 -#define RADEON_PARAM_AGP_TEX_HANDLE 10 +#define RADEON_PARAM_GART_TEX_HANDLE 10 typedef struct drm_radeon_getparam { int param; @@ -545,14 +545,14 @@ typedef struct drm_radeon_getparam { /* 1.6: Set up a memory manager for regions of shared memory: */ -#define RADEON_MEM_REGION_AGP 1 -#define RADEON_MEM_REGION_FB 2 +#define RADEON_MEM_REGION_GART 1 +#define RADEON_MEM_REGION_FB 2 typedef struct drm_radeon_mem_alloc { int region; int alignment; int size; - int *region_offset; /* offset from start of fb or agp */ + int *region_offset; /* offset from start of fb or GART */ } drm_radeon_mem_alloc_t; typedef struct drm_radeon_mem_free { diff -prauN linux-2.6.0-test5/drivers/char/drm/radeon_drv.h wli-2.6.0-test5-bk12-25/drivers/char/drm/radeon_drv.h --- linux-2.6.0-test5/drivers/char/drm/radeon_drv.h 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/drm/radeon_drv.h 2003-09-25 19:15:54.000000000 -0700 @@ -73,9 +73,9 @@ typedef struct drm_radeon_private { drm_radeon_ring_buffer_t ring; drm_radeon_sarea_t *sarea_priv; - int agp_size; - u32 agp_vm_start; - unsigned long agp_buffers_offset; + int gart_size; + u32 gart_vm_start; + unsigned long gart_buffers_offset; int cp_mode; int cp_running; @@ -130,7 +130,7 @@ typedef struct drm_radeon_private { unsigned long ring_offset; unsigned long ring_rptr_offset; unsigned long buffers_offset; - unsigned long agp_textures_offset; + unsigned long gart_textures_offset; drm_local_map_t *sarea; drm_local_map_t *fb; @@ -138,9 +138,9 @@ typedef struct drm_radeon_private { drm_local_map_t *cp_ring; drm_local_map_t *ring_rptr; drm_local_map_t *buffers; - drm_local_map_t *agp_textures; + drm_local_map_t *gart_textures; - struct mem_block *agp_heap; + struct mem_block *gart_heap; struct mem_block *fb_heap; /* SW interrupt */ diff -prauN linux-2.6.0-test5/drivers/char/drm/radeon_mem.c wli-2.6.0-test5-bk12-25/drivers/char/drm/radeon_mem.c --- linux-2.6.0-test5/drivers/char/drm/radeon_mem.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/drm/radeon_mem.c 2003-09-25 19:15:54.000000000 -0700 @@ -1,4 +1,4 @@ -/* radeon_mem.c -- Simple agp/fb memory manager for radeon -*- linux-c -*- +/* radeon_mem.c -- Simple GART/fb memory manager for radeon -*- linux-c -*- * * Copyright (C) The Weather Channel, Inc. 2002. All Rights Reserved. * @@ -35,7 +35,7 @@ #include "radeon_drm.h" #include "radeon_drv.h" -/* Very simple allocator for agp memory, working on a static range +/* Very simple allocator for GART memory, working on a static range * already mapped into each client's address space. */ @@ -212,8 +212,8 @@ static struct mem_block **get_heap( drm_ int region ) { switch( region ) { - case RADEON_MEM_REGION_AGP: - return &dev_priv->agp_heap; + case RADEON_MEM_REGION_GART: + return &dev_priv->gart_heap; case RADEON_MEM_REGION_FB: return &dev_priv->fb_heap; default: diff -prauN linux-2.6.0-test5/drivers/char/drm/radeon_state.c wli-2.6.0-test5-bk12-25/drivers/char/drm/radeon_state.c --- linux-2.6.0-test5/drivers/char/drm/radeon_state.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/drm/radeon_state.c 2003-09-25 19:15:54.000000000 -0700 @@ -893,7 +893,7 @@ static void radeon_cp_dispatch_vertex( d { drm_radeon_private_t *dev_priv = dev->dev_private; drm_radeon_sarea_t *sarea_priv = dev_priv->sarea_priv; - int offset = dev_priv->agp_buffers_offset + buf->offset + prim->start; + int offset = dev_priv->gart_buffers_offset + buf->offset + prim->start; int numverts = (int)prim->numverts; int nbox = sarea_priv->nbox; int i = 0; @@ -966,7 +966,7 @@ static void radeon_cp_dispatch_indirect( buf->idx, start, end ); if ( start != end ) { - int offset = (dev_priv->agp_buffers_offset + int offset = (dev_priv->gart_buffers_offset + buf->offset + start); int dwords = (end - start + 3) / sizeof(u32); @@ -999,7 +999,7 @@ static void radeon_cp_dispatch_indices( { drm_radeon_private_t *dev_priv = dev->dev_private; drm_radeon_sarea_t *sarea_priv = dev_priv->sarea_priv; - int offset = dev_priv->agp_buffers_offset + prim->offset; + int offset = dev_priv->gart_buffers_offset + prim->offset; u32 *data; int dwords; int i = 0; @@ -2159,8 +2159,8 @@ int radeon_cp_getparam( DRM_IOCTL_ARGS ) DRM_DEBUG( "pid=%d\n", DRM_CURRENTPID ); switch( param.param ) { - case RADEON_PARAM_AGP_BUFFER_OFFSET: - value = dev_priv->agp_buffers_offset; + case RADEON_PARAM_GART_BUFFER_OFFSET: + value = dev_priv->gart_buffers_offset; break; case RADEON_PARAM_LAST_FRAME: dev_priv->stats.last_frame_reads++; @@ -2176,8 +2176,8 @@ int radeon_cp_getparam( DRM_IOCTL_ARGS ) case RADEON_PARAM_IRQ_NR: value = dev->irq; break; - case RADEON_PARAM_AGP_BASE: - value = dev_priv->agp_vm_start; + case RADEON_PARAM_GART_BASE: + value = dev_priv->gart_vm_start; break; case RADEON_PARAM_REGISTER_HANDLE: value = dev_priv->mmio_offset; @@ -2189,8 +2189,8 @@ int radeon_cp_getparam( DRM_IOCTL_ARGS ) /* The lock is the first dword in the sarea. */ value = (int)dev->lock.hw_lock; break; - case RADEON_PARAM_AGP_TEX_HANDLE: - value = dev_priv->agp_textures_offset; + case RADEON_PARAM_GART_TEX_HANDLE: + value = dev_priv->gart_textures_offset; break; default: return DRM_ERR(EINVAL); diff -prauN linux-2.6.0-test5/drivers/char/epca.c wli-2.6.0-test5-bk12-25/drivers/char/epca.c --- linux-2.6.0-test5/drivers/char/epca.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/epca.c 2003-09-25 19:15:54.000000000 -0700 @@ -3868,7 +3868,7 @@ static struct { }; -static int __init epca_init_one (struct pci_dev *pdev, +static int __devinit epca_init_one (struct pci_dev *pdev, const struct pci_device_id *ent) { static int board_num = -1; diff -prauN linux-2.6.0-test5/drivers/char/ftape/Kconfig wli-2.6.0-test5-bk12-25/drivers/char/ftape/Kconfig --- linux-2.6.0-test5/drivers/char/ftape/Kconfig 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/ftape/Kconfig 2003-09-25 19:15:54.000000000 -0700 @@ -14,11 +14,8 @@ config ZFTAPE interface (i.e. the hardware independent part of the driver) has been moved to a separate module. - If you say M zftape will be compiled as a runtime loadable - module ( = code which can be inserted in and removed from the - running kernel whenever you want). In this case you should read - . The module will be called - zftape. + To compile this driver as a module, choose M here: the + module will be called zftape. Regardless of whether you say Y or M here, an additional runtime loadable module called `zft-compressor' which contains code to diff -prauN linux-2.6.0-test5/drivers/char/ftape/lowlevel/ftape-init.c wli-2.6.0-test5-bk12-25/drivers/char/ftape/lowlevel/ftape-init.c --- linux-2.6.0-test5/drivers/char/ftape/lowlevel/ftape-init.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/ftape/lowlevel/ftape-init.c 2003-09-25 19:15:54.000000000 -0700 @@ -55,14 +55,24 @@ char ft_rev[] __initdata = "$Revision: 1 char ft_dat[] __initdata = "$Date: 1997/11/06 00:38:08 $"; +#ifndef CONFIG_FT_NO_TRACE_AT_ALL +static int ft_tracing = -1; +#endif + + /* Called by modules package when installing the driver * or by kernel during the initialization phase */ -int __init ftape_init(void) +static int __init ftape_init(void) { TRACE_FUN(ft_t_flow); #ifdef MODULE +#ifndef CONFIG_FT_NO_TRACE_AT_ALL + if (ft_tracing != -1) { + ftape_tracing = ft_tracing; + } +#endif printk(KERN_INFO FTAPE_VERSION "\n"); if (TRACE_LEVEL >= ft_t_info) { printk( @@ -112,13 +122,6 @@ KERN_INFO "Compiled for Linux version %s #endif TRACE_EXIT 0; } - -#ifdef MODULE - -#ifndef CONFIG_FT_NO_TRACE_AT_ALL -static int ft_tracing = -1; -#endif - #define FT_MOD_PARM(var,type,desc) \ MODULE_PARM(var,type); MODULE_PARM_DESC(var,desc) @@ -141,21 +144,7 @@ MODULE_DESCRIPTION( "QIC-117 driver for QIC-40/80/3010/3020 floppy tape drives."); MODULE_LICENSE("GPL"); -/* Called by modules package when installing the driver - */ -int init_module(void) -{ -#ifndef CONFIG_FT_NO_TRACE_AT_ALL - if (ft_tracing != -1) { - ftape_tracing = ft_tracing; - } -#endif - return ftape_init(); -} - -/* Called by modules package when removing the driver - */ -void cleanup_module(void) +static void __exit ftape_exit(void) { TRACE_FUN(ft_t_flow); @@ -166,4 +155,6 @@ void cleanup_module(void) printk(KERN_INFO "ftape: unloaded.\n"); TRACE_EXIT; } -#endif /* MODULE */ + +module_init(ftape_init); +module_exit(ftape_exit); diff -prauN linux-2.6.0-test5/drivers/char/hvc_console.c wli-2.6.0-test5-bk12-25/drivers/char/hvc_console.c --- linux-2.6.0-test5/drivers/char/hvc_console.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/hvc_console.c 2003-09-25 19:15:54.000000000 -0700 @@ -284,9 +284,6 @@ int __init hvc_init(void) if (tty_register_driver(hvc_driver)) panic("Couldn't register hvc console driver\n"); - for (i = 0; i < num; i++) - tty_register_device(hvc_driver, i, NULL); - if (num > 0) kernel_thread(khvcd, NULL, CLONE_KERNEL); diff -prauN linux-2.6.0-test5/drivers/char/hw_random.c wli-2.6.0-test5-bk12-25/drivers/char/hw_random.c --- linux-2.6.0-test5/drivers/char/hw_random.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/hw_random.c 2003-09-25 19:15:54.000000000 -0700 @@ -149,7 +149,7 @@ static struct rng_operations rng_vendor_ * register a pci_driver, because someone else might one day * want to register another driver on the same PCI id. */ -static struct pci_device_id rng_pci_tbl[] __initdata = { +static struct pci_device_id rng_pci_tbl[] = { { 0x1022, 0x7443, PCI_ANY_ID, PCI_ANY_ID, 0, 0, rng_hw_amd }, { 0x1022, 0x746b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, rng_hw_amd }, diff -prauN linux-2.6.0-test5/drivers/char/ip2.c wli-2.6.0-test5-bk12-25/drivers/char/ip2.c --- linux-2.6.0-test5/drivers/char/ip2.c 2003-09-08 12:50:04.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/ip2.c 2003-09-25 19:15:54.000000000 -0700 @@ -34,8 +34,6 @@ ip2_loadmain(int *, int *, unsigned cha static int io[IP2_MAX_BOARDS]= { 0, 0, 0, 0 }; static int irq[IP2_MAX_BOARDS] = { -1, -1, -1, -1 }; -#ifdef MODULE - static int poll_only = 0; MODULE_AUTHOR("Doug McNash"); @@ -48,48 +46,20 @@ MODULE_PARM(poll_only,"1i"); MODULE_PARM_DESC(poll_only,"Do not use card interrupts"); -//====================================================================== -int -init_module(void) +static int __init ip2_init(void) { - int rc; - - MOD_INC_USE_COUNT; // hold till done - if( poll_only ) { /* Hard lock the interrupts to zero */ irq[0] = irq[1] = irq[2] = irq[3] = 0; } - rc = ip2_loadmain(io,irq,(unsigned char *)fip_firm,sizeof(fip_firm)); - // The call to lock and load main, create dep - - MOD_DEC_USE_COUNT; //done - kerneld now can unload us - return rc; -} - -//====================================================================== -int -ip2_init(void) -{ - // call to this is in tty_io.c so we need this - return 0; -} - -//====================================================================== -void -cleanup_module(void) -{ + return ip2_loadmain(io,irq,(unsigned char *)fip_firm,sizeof(fip_firm)); } +module_init(ip2_init); MODULE_LICENSE("GPL"); -#else // !MODULE - -#ifndef NULL -# define NULL ((void *) 0) -#endif - +#ifndef MODULE /****************************************************************************** * ip2_setup: * str: kernel command line string @@ -136,15 +106,5 @@ static int __init ip2_setup(char *str) } return 1; } - -int -ip2_init(void) { - return ip2_loadmain(io,irq,(unsigned char *)fip_firm,sizeof(fip_firm)); -} - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,13)) __setup("ip2=", ip2_setup); -__initcall(ip2_init); -#endif - #endif /* !MODULE */ diff -prauN linux-2.6.0-test5/drivers/char/istallion.c wli-2.6.0-test5-bk12-25/drivers/char/istallion.c --- linux-2.6.0-test5/drivers/char/istallion.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/istallion.c 2003-09-25 19:15:54.000000000 -0700 @@ -2303,7 +2303,7 @@ static void stli_dohangup(void *arg) /* * FIXME: There's a module removal race here: tty_hangup - * calls schedule_task which will call into this + * calls schedule_work which will call into this * driver later. */ portp = (stliport_t *) arg; @@ -2944,7 +2944,7 @@ static inline int stli_hostcmd(stlibrd_t ((portp->sigs & TIOCM_CD) == 0)) { if (portp->flags & ASYNC_CHECK_CD) { if (tty) - schedule_task(&portp->tqhangup); + schedule_work(&portp->tqhangup); } } } diff -prauN linux-2.6.0-test5/drivers/char/keyboard.c wli-2.6.0-test5-bk12-25/drivers/char/keyboard.c --- linux-2.6.0-test5/drivers/char/keyboard.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/keyboard.c 2003-09-25 19:15:54.000000000 -0700 @@ -205,7 +205,7 @@ int setkeycode(unsigned int scancode, un INPUT_KEYCODE(dev, scancode) = keycode; for (i = 0; i < dev->keycodemax; i++) - if(INPUT_KEYCODE(dev, scancode) == oldkey) + if(keycode == oldkey) break; if (i == dev->keycodemax) clear_bit(oldkey, dev->keybit); diff -prauN linux-2.6.0-test5/drivers/char/mem.c wli-2.6.0-test5-bk12-25/drivers/char/mem.c --- linux-2.6.0-test5/drivers/char/mem.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/mem.c 2003-09-25 19:15:54.000000000 -0700 @@ -680,18 +680,9 @@ static int __init chr_dev_init(void) S_IFCHR | devlist[i].mode, devlist[i].name); } - rand_initialize(); #if defined (CONFIG_FB) fbmem_init(); #endif - tty_init(); -#ifdef CONFIG_M68K_PRINTER - lp_m68k_init(); -#endif - misc_init(); -#ifdef CONFIG_FTAPE - ftape_init(); -#endif return 0; } diff -prauN linux-2.6.0-test5/drivers/char/misc.c wli-2.6.0-test5-bk12-25/drivers/char/misc.c --- linux-2.6.0-test5/drivers/char/misc.c 2003-09-08 12:50:28.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/misc.c 2003-09-25 19:15:54.000000000 -0700 @@ -43,6 +43,7 @@ #include #include #include +#include #include #include #include @@ -53,7 +54,7 @@ /* * Head entry for the doubly linked miscdevice list */ -static struct miscdevice misc_list = { 0, "head", NULL, &misc_list, &misc_list }; +static LIST_HEAD(misc_list); static DECLARE_MUTEX(misc_sem); /* @@ -73,30 +74,64 @@ extern int pmu_device_init(void); extern int tosh_init(void); extern int i8k_init(void); -static int misc_read_proc(char *buf, char **start, off_t offset, - int len, int *eof, void *private) +#ifdef CONFIG_PROC_FS +static void *misc_seq_start(struct seq_file *seq, loff_t *pos) { struct miscdevice *p; - int written; + loff_t off = 0; - written=0; - for (p = misc_list.next; p != &misc_list && written < len; p = p->next) { - written += sprintf(buf+written, "%3i %s\n",p->minor, p->name ?: ""); - if (written < offset) { - offset -= written; - written = 0; - } - } - *start = buf + offset; - written -= offset; - if(written > len) { - *eof = 0; - return len; + down(&misc_sem); + list_for_each_entry(p, &misc_list, list) { + if (*pos == off++) + return p; } - *eof = 1; - return (written<0) ? 0 : written; + return NULL; +} + +static void *misc_seq_next(struct seq_file *seq, void *v, loff_t *pos) +{ + struct list_head *n = ((struct miscdevice *)v)->list.next; + + ++*pos; + + return (n != &misc_list) ? list_entry(n, struct miscdevice, list) + : NULL; +} + +static void misc_seq_stop(struct seq_file *seq, void *v) +{ + up(&misc_sem); +} + +static int misc_seq_show(struct seq_file *seq, void *v) +{ + const struct miscdevice *p = v; + + seq_printf(seq, "%3i %s\n", p->minor, p->name ? p->name : ""); + return 0; +} + + +static struct seq_operations misc_seq_ops = { + .start = misc_seq_start, + .next = misc_seq_next, + .stop = misc_seq_stop, + .show = misc_seq_show, +}; + +static int misc_seq_open(struct inode *inode, struct file *file) +{ + return seq_open(file, &misc_seq_ops); } +static struct file_operations misc_proc_fops = { + .owner = THIS_MODULE, + .open = misc_seq_open, + .read = seq_read, + .llseek = seq_lseek, + .release = seq_release, +}; +#endif static int misc_open(struct inode * inode, struct file * file) { @@ -107,21 +142,27 @@ static int misc_open(struct inode * inod down(&misc_sem); - c = misc_list.next; - - while ((c != &misc_list) && (c->minor != minor)) - c = c->next; - if (c != &misc_list) - new_fops = fops_get(c->fops); + list_for_each_entry(c, &misc_list, list) { + if (c->minor == minor) { + new_fops = fops_get(c->fops); + break; + } + } + if (!new_fops) { up(&misc_sem); request_module("char-major-%d-%d", MISC_MAJOR, minor); down(&misc_sem); - c = misc_list.next; - while ((c != &misc_list) && (c->minor != minor)) - c = c->next; - if (c == &misc_list || (new_fops = fops_get(c->fops)) == NULL) - goto fail; + + list_for_each_entry(c, &misc_list, list) { + if (c->minor == minor) { + new_fops = fops_get(c->fops); + if (!new_fops) + goto fail; + break; + } + } + goto fail; } err = 0; @@ -166,16 +207,12 @@ int misc_register(struct miscdevice * mi { struct miscdevice *c; - if (misc->next || misc->prev) - return -EBUSY; down(&misc_sem); - c = misc_list.next; - - while ((c != &misc_list) && (c->minor != misc->minor)) - c = c->next; - if (c != &misc_list) { - up(&misc_sem); - return -EBUSY; + list_for_each_entry(c, &misc_list, list) { + if (c->minor == misc->minor) { + up(&misc_sem); + return -EBUSY; + } } if (misc->minor == MISC_DYNAMIC_MINOR) { @@ -205,10 +242,7 @@ int misc_register(struct miscdevice * mi * Add it to the front, so that later devices can "override" * earlier defaults */ - misc->prev = &misc_list; - misc->next = misc_list.next; - misc->prev->next = misc; - misc->next->prev = misc; + list_add(&misc->list, &misc_list); up(&misc_sem); return 0; } @@ -226,13 +260,12 @@ int misc_register(struct miscdevice * mi int misc_deregister(struct miscdevice * misc) { int i = misc->minor; - if (!misc->next || !misc->prev) + + if (list_empty(&misc->list)) return -EINVAL; + down(&misc_sem); - misc->prev->next = misc->next; - misc->next->prev = misc->prev; - misc->next = NULL; - misc->prev = NULL; + list_del(&misc->list); devfs_remove(misc->devfs_name); if (i < DYNAMIC_MINORS && i>0) { misc_minors[i>>3] &= ~(1 << (misc->minor & 7)); @@ -244,9 +277,15 @@ int misc_deregister(struct miscdevice * EXPORT_SYMBOL(misc_register); EXPORT_SYMBOL(misc_deregister); -int __init misc_init(void) +static int __init misc_init(void) { - create_proc_read_entry("misc", 0, 0, misc_read_proc, NULL); +#ifdef CONFIG_PROC_FS + struct proc_dir_entry *ent; + + ent = create_proc_entry("misc", 0, NULL); + if (ent) + ent->proc_fops = &misc_proc_fops; +#endif #ifdef CONFIG_MVME16x rtc_MK48T08_init(); #endif @@ -281,3 +320,4 @@ int __init misc_init(void) } return 0; } +module_init(misc_init); diff -prauN linux-2.6.0-test5/drivers/char/moxa.c wli-2.6.0-test5-bk12-25/drivers/char/moxa.c --- linux-2.6.0-test5/drivers/char/moxa.c 2003-09-08 12:50:29.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/moxa.c 2003-09-25 19:15:54.000000000 -0700 @@ -189,7 +189,6 @@ static struct mxser_mstatus GMStatus[MAX static int verbose = 0; static int ttymajor = MOXAMAJOR; -#ifdef MODULE /* Variables for insmod */ static int baseaddr[] = {0, 0, 0, 0}; static int type[] = {0, 0, 0, 0}; @@ -204,8 +203,6 @@ MODULE_PARM(numports, "1-4i"); MODULE_PARM(ttymajor, "i"); MODULE_PARM(verbose, "i"); -#endif //MODULE - static struct tty_driver *moxaDriver; static struct moxa_str moxaChannels[MAX_PORTS]; static unsigned char *moxaXmitBuff; @@ -215,8 +212,6 @@ static int moxaEmptyTimer_on[MAX_PORTS]; static struct timer_list moxaEmptyTimer[MAX_PORTS]; static struct semaphore moxaBuffSem; -int moxa_init(void); - /* * static functions: */ @@ -278,42 +273,6 @@ static int moxa_get_serial_info(struct m static int moxa_set_serial_info(struct moxa_str *, struct serial_struct *); static void MoxaSetFifo(int port, int enable); -#ifdef MODULE -int init_module(void) -{ - int ret; - - if (verbose) - printk("Loading module moxa ...\n"); - ret = moxa_init(); - if (verbose) - printk("Done\n"); - return (ret); -} - -void cleanup_module(void) -{ - int i; - - if (verbose) - printk("Unloading module moxa ...\n"); - - if (moxaTimer_on) - del_timer(&moxaTimer); - - for (i = 0; i < MAX_PORTS; i++) - if (moxaEmptyTimer_on[i]) - del_timer(&moxaEmptyTimer[i]); - - if (tty_unregister_driver(moxaDriver)) - printk("Couldn't unregister MOXA Intellio family serial driver\n"); - put_tty_driver(moxaDriver); - if (verbose) - printk("Done\n"); - -} -#endif - static struct tty_operations moxa_ops = { .open = moxa_open, .close = moxa_close, @@ -332,7 +291,7 @@ static struct tty_operations moxa_ops = .hangup = moxa_hangup, }; -int moxa_init(void) +static int __init moxa_init(void) { int i, n, numBoards; struct moxa_str *ch; @@ -479,6 +438,31 @@ int moxa_init(void) return (0); } +static void __exit moxa_exit(void) +{ + int i; + + if (verbose) + printk("Unloading module moxa ...\n"); + + if (moxaTimer_on) + del_timer(&moxaTimer); + + for (i = 0; i < MAX_PORTS; i++) + if (moxaEmptyTimer_on[i]) + del_timer(&moxaEmptyTimer[i]); + + if (tty_unregister_driver(moxaDriver)) + printk("Couldn't unregister MOXA Intellio family serial driver\n"); + put_tty_driver(moxaDriver); + if (verbose) + printk("Done\n"); + +} + +module_init(moxa_init); +module_exit(moxa_exit); + static int moxa_get_PCI_conf(struct pci_dev *p, int board_type, moxa_board_conf * board) { board->baseAddr = pci_resource_start (p, 2); diff -prauN linux-2.6.0-test5/drivers/char/mwave/mwavedd.c wli-2.6.0-test5-bk12-25/drivers/char/mwave/mwavedd.c --- linux-2.6.0-test5/drivers/char/mwave/mwavedd.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/mwave/mwavedd.c 2003-09-25 19:15:54.000000000 -0700 @@ -293,8 +293,6 @@ static int mwave_ioctl(struct inode *ino case IOCTL_MW_GET_IPC: { unsigned int ipcnum = (unsigned int) ioarg; - spinlock_t ipc_lock = SPIN_LOCK_UNLOCKED; - unsigned long flags; PRINTK_3(TRACE_MWAVE, "mwavedd::mwave_ioctl IOCTL_MW_GET_IPC" @@ -310,32 +308,29 @@ static int mwave_ioctl(struct inode *ino } if (pDrvData->IPCs[ipcnum].bIsEnabled == TRUE) { + DECLARE_WAITQUEUE(wait, current); + PRINTK_2(TRACE_MWAVE, "mwavedd::mwave_ioctl, thread for" " ipc %x going to sleep\n", ipcnum); - - spin_lock_irqsave(&ipc_lock, flags); + add_wait_queue(&pDrvData->IPCs[ipcnum].ipc_wait_queue, &wait); + pDrvData->IPCs[ipcnum].bIsHere = TRUE; + set_current_state(TASK_INTERRUPTIBLE); /* check whether an event was signalled by */ /* the interrupt handler while we were gone */ if (pDrvData->IPCs[ipcnum].usIntCount == 1) { /* first int has occurred (race condition) */ pDrvData->IPCs[ipcnum].usIntCount = 2; /* first int has been handled */ - spin_unlock_irqrestore(&ipc_lock, flags); PRINTK_2(TRACE_MWAVE, "mwavedd::mwave_ioctl" " IOCTL_MW_GET_IPC ipcnum %x" " handling first int\n", ipcnum); } else { /* either 1st int has not yet occurred, or we have already handled the first int */ - pDrvData->IPCs[ipcnum].bIsHere = TRUE; -#warning "Sleeping on spinlock" - interruptible_sleep_on(&pDrvData->IPCs[ipcnum].ipc_wait_queue); - pDrvData->IPCs[ipcnum].bIsHere = FALSE; + schedule(); if (pDrvData->IPCs[ipcnum].usIntCount == 1) { - pDrvData->IPCs[ipcnum]. - usIntCount = 2; + pDrvData->IPCs[ipcnum].usIntCount = 2; } - spin_unlock_irqrestore(&ipc_lock, flags); PRINTK_2(TRACE_MWAVE, "mwavedd::mwave_ioctl" " IOCTL_MW_GET_IPC ipcnum %x" @@ -343,6 +338,9 @@ static int mwave_ioctl(struct inode *ino " application\n", ipcnum); } + pDrvData->IPCs[ipcnum].bIsHere = FALSE; + remove_wait_queue(&pDrvData->IPCs[ipcnum].ipc_wait_queue, &wait); + set_current_state(TASK_RUNNING); PRINTK_2(TRACE_MWAVE, "mwavedd::mwave_ioctl IOCTL_MW_GET_IPC," " returning thread for ipc %x" diff -prauN linux-2.6.0-test5/drivers/char/n_r3964.c wli-2.6.0-test5-bk12-25/drivers/char/n_r3964.c --- linux-2.6.0-test5/drivers/char/n_r3964.c 2003-09-08 12:50:32.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/n_r3964.c 2003-09-25 19:15:54.000000000 -0700 @@ -150,22 +150,18 @@ static void r3964_receive_buf(struct tty static int r3964_receive_room(struct tty_struct *tty); static struct tty_ldisc tty_ldisc_N_R3964 = { - TTY_LDISC_MAGIC, /* magic */ - "R3964", /* name */ - 0, /* num */ - 0, /* flags */ - r3964_open, /* open */ - r3964_close, /* close */ - 0, /* flush_buffer */ - 0, /* chars_in_buffer */ - r3964_read, /* read */ - r3964_write, /* write */ - r3964_ioctl, /* ioctl */ - r3964_set_termios, /* set_termios */ - r3964_poll, /* poll */ - r3964_receive_buf, /* receive_buf */ - r3964_receive_room, /* receive_room */ - 0 /* write_wakeup */ + .owner = THIS_MODULE, + .magic = TTY_LDISC_MAGIC, + .name = "R3964", + .open = r3964_open, + .close = r3964_close, + .read = r3964_read, + .write = r3964_write, + .ioctl = r3964_ioctl, + .set_termios = r3964_set_termios, + .poll = r3964_poll, + .receive_buf = r3964_receive_buf, + .receive_room = r3964_receive_room, }; @@ -1070,8 +1066,6 @@ static int r3964_open(struct tty_struct { struct r3964_info *pInfo; - MOD_INC_USE_COUNT; - TRACE_L("open"); TRACE_L("tty=%x, PID=%d, disc_data=%x", (int)tty, current->pid, (int)tty->disc_data); @@ -1188,8 +1182,6 @@ static void r3964_close(struct tty_struc TRACE_M("r3964_close - tx_buf kfree %x",(int)pInfo->tx_buf); kfree(pInfo); TRACE_M("r3964_close - info kfree %x",(int)pInfo); - - MOD_DEC_USE_COUNT; } static ssize_t r3964_read(struct tty_struct *tty, struct file *file, diff -prauN linux-2.6.0-test5/drivers/char/n_tty.c wli-2.6.0-test5-bk12-25/drivers/char/n_tty.c --- linux-2.6.0-test5/drivers/char/n_tty.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/n_tty.c 2003-09-25 19:15:54.000000000 -0700 @@ -977,11 +977,11 @@ do_it_again: if (file->f_op->write != redirected_tty_write && current->tty == tty) { if (tty->pgrp <= 0) printk("read_chan: tty->pgrp <= 0!\n"); - else if (current->pgrp != tty->pgrp) { + else if (process_group(current) != tty->pgrp) { if (is_ignored(SIGTTIN) || - is_orphaned_pgrp(current->pgrp)) + is_orphaned_pgrp(process_group(current))) return -EIO; - kill_pg(current->pgrp, SIGTTIN, 1); + kill_pg(process_group(current), SIGTTIN, 1); return -ERESTARTSYS; } } diff -prauN linux-2.6.0-test5/drivers/char/pcmcia/synclink_cs.c wli-2.6.0-test5-bk12-25/drivers/char/pcmcia/synclink_cs.c --- linux-2.6.0-test5/drivers/char/pcmcia/synclink_cs.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/pcmcia/synclink_cs.c 2003-09-25 19:15:54.000000000 -0700 @@ -725,14 +725,6 @@ static void mgslpc_release(u_long arg) if (debug_level >= DEBUG_LEVEL_INFO) printk("mgslpc_release(0x%p)\n", link); - if (link->open) { - if (debug_level >= DEBUG_LEVEL_INFO) - printk("synclink_cs: release postponed, '%s' still open\n", - link->dev->dev_name); - link->state |= DEV_STALE_CONFIG; - return; - } - /* Unlink the device chain */ link->dev = NULL; link->state &= ~DEV_CONFIG; diff -prauN linux-2.6.0-test5/drivers/char/pcxx.c wli-2.6.0-test5-bk12-25/drivers/char/pcxx.c --- linux-2.6.0-test5/drivers/char/pcxx.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/pcxx.c 2003-09-25 19:15:54.000000000 -0700 @@ -200,13 +200,7 @@ static void cleanup_board_resources(void } } -/*****************************************************************************/ - -#ifdef MODULE - -/*****************************************************************************/ - -static void pcxe_cleanup() +static void __exit pcxe_cleanup(void) { unsigned long flags; @@ -232,7 +226,6 @@ static void pcxe_cleanup() */ module_init(pcxe_init); module_cleanup(pcxe_cleanup); -#endif static inline struct channel *chan(register struct tty_struct *tty) { @@ -1018,6 +1011,9 @@ void __init pcxx_setup(char *str, int *i } #endif +module_init(pcxe_init) +module_exit(pcxe_exit) + static struct tty_operations pcxe_ops = { .open = pcxe_open, .close = pcxe_close, @@ -1040,7 +1036,7 @@ static struct tty_operations pcxe_ops = * function to initialize the driver with the given parameters, which are either * the default values from this file or the parameters given at boot. */ -int __init pcxe_init(void) +static int __init pcxe_init(void) { ulong memory_seg=0, memory_size=0; int lowwater, enabled_cards=0, i, crd, shrinkmem=0, topwin = 0xff00L, botwin=0x100L; diff -prauN linux-2.6.0-test5/drivers/char/pty.c wli-2.6.0-test5-bk12-25/drivers/char/pty.c --- linux-2.6.0-test5/drivers/char/pty.c 2003-09-08 12:50:00.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/pty.c 2003-09-25 19:15:54.000000000 -0700 @@ -313,7 +313,7 @@ static struct tty_operations pty_ops = { .set_termios = pty_set_termios, }; -int __init pty_init(void) +static int __init pty_init(void) { /* Traditional BSD devices */ @@ -414,3 +414,4 @@ int __init pty_init(void) #endif return 0; } +module_init(pty_init); diff -prauN linux-2.6.0-test5/drivers/char/random.c wli-2.6.0-test5-bk12-25/drivers/char/random.c --- linux-2.6.0-test5/drivers/char/random.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/random.c 2003-09-25 19:15:54.000000000 -0700 @@ -253,6 +253,7 @@ #include #include #include +#include #include #include @@ -281,6 +282,15 @@ static int random_read_wakeup_thresh = 6 static int random_write_wakeup_thresh = 128; /* + * When the input pool goes over trickle_thresh, start dropping most + * samples to avoid wasting CPU time and reduce lock contention. + */ + +static int trickle_thresh = DEFAULT_POOL_SIZE * 7; + +static DEFINE_PER_CPU(int, trickle_count) = 0; + +/* * A pool of size .poolwords is stirred with a primitive polynomial * of degree .poolwords over GF(2). The taps for various sizes are * defined below. They are chosen to be evenly spaced (minimum RMS @@ -778,6 +788,11 @@ static void add_timer_randomness(struct __s32 delta, delta2, delta3; int entropy = 0; + /* if over the trickle threshold, use only 1 in 4096 samples */ + if ( random_state->entropy_count > trickle_thresh && + (__get_cpu_var(trickle_count)++ & 0xfff)) + return; + #if defined (__i386__) || defined (__x86_64__) if (cpu_has_tsc) { __u32 high; @@ -1478,16 +1493,16 @@ static void init_std_data(struct entropy } } -void __init rand_initialize(void) +static int __init rand_initialize(void) { int i; if (create_entropy_store(DEFAULT_POOL_SIZE, &random_state)) - return; /* Error, return */ + goto err; if (batch_entropy_init(BATCH_ENTROPY_SIZE, random_state)) - return; /* Error, return */ + goto err; if (create_entropy_store(SECONDARY_POOL_SIZE, &sec_random_state)) - return; /* Error, return */ + goto err; clear_entropy_store(random_state); clear_entropy_store(sec_random_state); init_std_data(random_state); @@ -1500,7 +1515,11 @@ void __init rand_initialize(void) memset(&mouse_timer_state, 0, sizeof(struct timer_rand_state)); memset(&extract_timer_state, 0, sizeof(struct timer_rand_state)); extract_timer_state.dont_count_entropy = 1; + return 0; +err: + return -1; } +module_init(rand_initialize); void rand_initialize_irq(int irq) { diff -prauN linux-2.6.0-test5/drivers/char/rio/rio_linux.c wli-2.6.0-test5-bk12-25/drivers/char/rio/rio_linux.c --- linux-2.6.0-test5/drivers/char/rio/rio_linux.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/rio/rio_linux.c 2003-09-25 19:15:54.000000000 -0700 @@ -234,14 +234,12 @@ int rio_probe_addrs[]= {0xc0000, 0xd0000 support up to 64 bits on 64bit architectures. -- REW 20/06/99 */ long rio_irqmask = -1; -#ifndef TWO_ZERO MODULE_AUTHOR("Rogier Wolff , Patrick van de Lageweg "); MODULE_DESCRIPTION("RIO driver"); MODULE_LICENSE("GPL"); MODULE_PARM(rio_poll, "i"); MODULE_PARM(rio_debug, "i"); MODULE_PARM(rio_irqmask, "i"); -#endif static struct real_driver rio_real_driver = { rio_disable_tx_interrupts, @@ -1034,13 +1032,6 @@ static void __exit rio_release_drivers( func_exit(); } -#ifdef TWO_ZERO -#define PDEV unsigned char pci_bus, unsigned pci_fun -#define pdev pci_bus, pci_fun -#else -#define PDEV struct pci_dev *pdev -#endif - #ifdef CONFIG_PCI /* This was written for SX, but applies to RIO too... @@ -1062,7 +1053,7 @@ static void __exit rio_release_drivers( EEprom. As the bit is read/write for the CPU, we can fix it here, if we detect that it isn't set correctly. -- REW */ -void fix_rio_pci (PDEV) +void fix_rio_pci (struct pci_dev *pdev) { unsigned int hwbase; unsigned long rebase; @@ -1095,12 +1086,7 @@ static int __init rio_init(void) int okboard; #ifdef CONFIG_PCI -#ifndef TWO_ZERO struct pci_dev *pdev = NULL; -#else - unsigned char pci_bus, pci_fun; - /* in 2.2.x pdev is a pointer defining a PCI device. In 2.0 its the bus/fn */ -#endif unsigned int tint; unsigned short tshort; #endif @@ -1128,17 +1114,11 @@ static int __init rio_init(void) #ifdef CONFIG_PCI /* First look for the JET devices: */ -#ifndef TWO_ZERO while ((pdev = pci_find_device (PCI_VENDOR_ID_SPECIALIX, PCI_DEVICE_ID_SPECIALIX_SX_XIO_IO8, pdev))) { if (pci_enable_device(pdev)) continue; -#else - for (i=0;i< RIO_NBOARDS;i++) { - if (pcibios_find_device (PCI_VENDOR_ID_SPECIALIX, - PCI_DEVICE_ID_SPECIALIX_SX_XIO_IO8, i, - &pci_bus, &pci_fun)) break; -#endif + /* Specialix has a whole bunch of cards with 0x2000 as the device ID. They say its because the standard requires it. Stupid standard. */ @@ -1196,16 +1176,9 @@ static int __init rio_init(void) } else { iounmap((char*) (p->RIOHosts[p->RIONumHosts].Caddr)); } - -#ifdef TWO_ZERO - } /* We have two variants with the opening brace, so to prevent */ -#else - } /* Emacs from getting confused we have two closing braces too. */ -#endif + } /* Then look for the older PCI card.... : */ -#ifndef TWO_ZERO - /* These older PCI cards have problems (only byte-mode access is supported), which makes them a bit awkward to support. @@ -1219,12 +1192,6 @@ static int __init rio_init(void) PCI_DEVICE_ID_SPECIALIX_RIO, pdev))) { if (pci_enable_device(pdev)) continue; -#else - for (i=0;i< RIO_NBOARDS;i++) { - if (pcibios_find_device (PCI_VENDOR_ID_SPECIALIX, - PCI_DEVICE_ID_SPECIALIX_RIO, i, - &pci_bus, &pci_fun)) break; -#endif #ifdef CONFIG_RIO_OLDPCI pci_read_config_dword(pdev, PCI_BASE_ADDRESS_0, &tint); @@ -1272,11 +1239,7 @@ static int __init rio_init(void) printk (KERN_ERR "Found an older RIO PCI card, but the driver is not " "compiled to support it.\n"); #endif -#ifdef TWO_ZERO - } /* We have two variants with the opening brace, so to prevent */ -#else - } /* Emacs from getting confused we have two closing braces too. */ -#endif + } #endif /* PCI */ /* Now probe for ISA cards... */ diff -prauN linux-2.6.0-test5/drivers/char/rocket.c wli-2.6.0-test5-bk12-25/drivers/char/rocket.c --- linux-2.6.0-test5/drivers/char/rocket.c 2003-09-08 12:50:16.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/rocket.c 2003-09-25 19:15:54.000000000 -0700 @@ -956,7 +956,7 @@ static int rp_open(struct tty_struct *tt * Info->count is now 1; so it's safe to sleep now. */ info->session = current->session; - info->pgrp = current->pgrp; + info->pgrp = process_group(current); if ((info->flags & ROCKET_INITIALIZED) == 0) { cp = &info->channel; diff -prauN linux-2.6.0-test5/drivers/char/ser_a2232.c wli-2.6.0-test5-bk12-25/drivers/char/ser_a2232.c --- linux-2.6.0-test5/drivers/char/ser_a2232.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/ser_a2232.c 2003-09-25 19:15:54.000000000 -0700 @@ -122,8 +122,6 @@ static void a2232_init_portstructs(void) /* Initialize and register TTY drivers. */ /* returns 0 IFF successful */ static int a2232_init_drivers(void); -/* Initialize all A2232 boards; main entry point. */ -int a2232board_init(void); /* BEGIN GENERIC_SERIAL PROTOTYPES */ static void a2232_disable_tx_interrupts(void *ptr); @@ -720,7 +718,7 @@ static int a2232_init_drivers(void) return 0; } -int a2232board_init(void) +static int __init a2232board_init(void) { struct zorro_dev *z; @@ -813,13 +811,7 @@ int a2232board_init(void) return 0; } -#ifdef MODULE -int init_module(void) -{ - return a2232board_init(); -} - -void cleanup_module(void) +static void __exit a2232board_exit(void) { int i; @@ -831,8 +823,9 @@ void cleanup_module(void) put_tty_driver(a2232_driver); free_irq(IRQ_AMIGA_VERTB, a2232_driver_ID); } -#endif -/***************************** End of Functions *********************/ + +module_init(a2232board_init); +module_exit(a2232board_exit); MODULE_AUTHOR("Enver Haase"); MODULE_DESCRIPTION("Amiga A2232 multi-serial board driver"); diff -prauN linux-2.6.0-test5/drivers/char/serial167.c wli-2.6.0-test5-bk12-25/drivers/char/serial167.c --- linux-2.6.0-test5/drivers/char/serial167.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/serial167.c 2003-09-25 19:15:54.000000000 -0700 @@ -23,10 +23,6 @@ * * This version does not support shared irq's. * - * This module exports the following rs232 io functions: - * int cy_init(void); - * int cy_open(struct tty_struct *tty, struct file *filp); - * * $Log: cyclades.c,v $ * Revision 1.36.1.4 1995/03/29 06:14:14 bentson * disambiguate between Cyclom-16Y and Cyclom-32Ye; @@ -2321,7 +2317,7 @@ static struct tty_operations cy_ops = { If there are more cards with more ports than have been statically allocated above, a warning is printed and the extra ports are ignored. */ -int +static int __init serial167_init(void) { struct cyclades_port *info; @@ -2497,6 +2493,8 @@ cleanup_serial_driver: return ret; } /* serial167_init */ +module_init(serial167_init); + #ifdef CYCLOM_SHOW_STATUS static void diff -prauN linux-2.6.0-test5/drivers/char/serial_tx3912.c wli-2.6.0-test5-bk12-25/drivers/char/serial_tx3912.c --- linux-2.6.0-test5/drivers/char/serial_tx3912.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/serial_tx3912.c 2003-09-25 19:15:54.000000000 -0700 @@ -812,7 +812,7 @@ static int rs_init_drivers(void) } -void __init tx3912_rs_init(void) +static void __init tx3912_rs_init(void) { int rc; @@ -877,6 +877,7 @@ void __init tx3912_rs_init(void) func_exit(); } +module_init(tx3912_rs_init); /* * Begin serial console routines diff -prauN linux-2.6.0-test5/drivers/char/specialix.c wli-2.6.0-test5-bk12-25/drivers/char/specialix.c --- linux-2.6.0-test5/drivers/char/specialix.c 2003-09-08 12:50:23.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/specialix.c 2003-09-25 19:15:55.000000000 -0700 @@ -92,40 +92,7 @@ #include #include #include - - -/* ************************************************************** */ -/* * This section can be removed when 2.0 becomes outdated.... * */ -/* ************************************************************** */ - -#if LINUX_VERSION_CODE < 131328 /* Less than 2.1.0 */ -#define TWO_ZERO -#else -#if LINUX_VERSION_CODE < 131371 /* less than 2.1.43 */ -/* This has not been extensively tested yet. Sorry. */ -#warning "You're on your own between 2.1.0 and 2.1.43.... " -#warning "Please use a recent kernel." -#endif -#endif - - -#ifdef TWO_ZERO -#define Get_user(a,b) a = get_user(b) -#define copy_from_user(a,b,c) memcpy_fromfs(a,b,c) -#define copy_to_user(a,b,c) memcpy_tofs(a,b,c) -#define queue_task queue_task_irq_off -#else -#define Get_user(a,b) get_user(a,b) -#endif - -/* ************************************************************** */ -/* * End of compatibility section.. * */ -/* ************************************************************** */ - - -#ifndef TWO_ZERO #include -#endif #include "specialix_io8.h" #include "cd1865.h" @@ -1395,7 +1362,6 @@ static int sx_open(struct tty_struct * t int error; struct specialix_port * port; struct specialix_board * bp; - unsigned long flags; board = SX_BOARD(tty->index); @@ -1733,7 +1699,7 @@ static int sx_set_modem_info(struct spec if (error) return error; - Get_user(arg, (unsigned long *) value); + get_user(arg, (unsigned long *) value); switch (cmd) { case TIOCMBIS: /* if (arg & TIOCM_RTS) @@ -1925,7 +1891,7 @@ static int sx_ioctl(struct tty_struct * (unsigned long *) arg); return 0; case TIOCSSOFTCAR: - Get_user(arg, (unsigned long *) arg); + get_user(arg, (unsigned long *) arg); tty->termios->c_cflag = ((tty->termios->c_cflag & ~CLOCAL) | (arg ? CLOCAL : 0)); @@ -2238,7 +2204,7 @@ void specialix_setup(char *str, int * in /* * This routine must be called by kernel at boot time */ -int specialix_init(void) +static int __init specialix_init(void) { int i; int found = 0; @@ -2296,7 +2262,6 @@ int specialix_init(void) return 0; } -#ifdef MODULE int iobase[SX_NBOARD] = {0,}; int irq [SX_NBOARD] = {0,}; @@ -2313,7 +2278,7 @@ MODULE_PARM(irq,"1-" __MODULE_STRING(SX_ * only use 4 different interrupts. * */ -int init_module(void) +static int __init specialix_init_module(void) { int i; @@ -2327,8 +2292,7 @@ int init_module(void) return specialix_init(); } - -void cleanup_module(void) +static void __exit specialix_exit_module(void) { int i; @@ -2341,6 +2305,8 @@ void cleanup_module(void) #endif } -#endif /* MODULE */ + +module_init(specialix_init_module); +module_exit(specialix_exit_module); MODULE_LICENSE("GPL"); diff -prauN linux-2.6.0-test5/drivers/char/sx.c wli-2.6.0-test5-bk12-25/drivers/char/sx.c --- linux-2.6.0-test5/drivers/char/sx.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/sx.c 2003-09-25 19:15:55.000000000 -0700 @@ -2356,14 +2356,6 @@ static void __exit sx_release_drivers(vo func_exit(); } -#ifdef TWO_ZERO -#define PDEV unsigned char pci_bus, unsigned pci_fun -#define pdev pci_bus, pci_fun -#else -#define PDEV struct pci_dev *pdev -#endif - - #ifdef CONFIG_PCI /******************************************************** * Setting bit 17 in the CNTRL register of the PLX 9050 * @@ -2376,7 +2368,7 @@ static void __exit sx_release_drivers(vo EEprom. As the bit is read/write for the CPU, we can fix it here, if we detect that it isn't set correctly. -- REW */ -static void fix_sx_pci (PDEV, struct sx_board *board) +static void fix_sx_pci (struct pci_dev *pdev, struct sx_board *board) { unsigned int hwbase; unsigned long rebase; @@ -2406,12 +2398,7 @@ static int __init sx_init(void) struct sx_board *board; #ifdef CONFIG_PCI -#ifndef TWO_ZERO struct pci_dev *pdev = NULL; -#else - unsigned char pci_bus, pci_fun; - /* in 2.2.x pdev is a pointer defining a PCI device. In 2.0 its the bus/fn */ -#endif unsigned int tint; unsigned short tshort; #endif @@ -2431,19 +2418,12 @@ static int __init sx_init(void) } #ifdef CONFIG_PCI -#ifndef TWO_ZERO while ((pdev = pci_find_device (PCI_VENDOR_ID_SPECIALIX, PCI_DEVICE_ID_SPECIALIX_SX_XIO_IO8, pdev))) { if (pci_enable_device(pdev)) continue; -#else - for (i=0;i< SX_NBOARDS;i++) { - if (pcibios_find_device (PCI_VENDOR_ID_SPECIALIX, - PCI_DEVICE_ID_SPECIALIX_SX_XIO_IO8, i, - &pci_bus, &pci_fun)) - break; -#endif + /* Specialix has a whole bunch of cards with 0x2000 as the device ID. They say its because the standard requires it. Stupid standard. */ diff -prauN linux-2.6.0-test5/drivers/char/sysrq.c wli-2.6.0-test5-bk12-25/drivers/char/sysrq.c --- linux-2.6.0-test5/drivers/char/sysrq.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/sysrq.c 2003-09-25 19:15:55.000000000 -0700 @@ -37,7 +37,6 @@ #include extern void reset_vc(unsigned int); -extern struct list_head super_blocks; /* Whether we react on sysrq keys or just ignore them */ int sysrq_enabled = 1; diff -prauN linux-2.6.0-test5/drivers/char/tty_io.c wli-2.6.0-test5-bk12-25/drivers/char/tty_io.c --- linux-2.6.0-test5/drivers/char/tty_io.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/tty_io.c 2003-09-25 19:15:55.000000000 -0700 @@ -138,12 +138,7 @@ static int tty_release(struct inode *, s int tty_ioctl(struct inode * inode, struct file * file, unsigned int cmd, unsigned long arg); static int tty_fasync(int fd, struct file * filp, int on); -extern int vme_scc_init (void); -extern int serial167_init(void); -extern int rs_8xx_init(void); -extern void tub3270_init(void); extern void rs_360_init(void); -extern void tx3912_rs_init(void); static struct tty_struct *alloc_tty_struct(void) { @@ -325,13 +320,13 @@ int tty_check_change(struct tty_struct * printk(KERN_WARNING "tty_check_change: tty->pgrp <= 0!\n"); return 0; } - if (current->pgrp == tty->pgrp) + if (process_group(current) == tty->pgrp) return 0; if (is_ignored(SIGTTOU)) return 0; - if (is_orphaned_pgrp(current->pgrp)) + if (is_orphaned_pgrp(process_group(current))) return -EIO; - (void) kill_pg(current->pgrp,SIGTTOU,1); + (void) kill_pg(process_group(current), SIGTTOU, 1); return -ERESTARTSYS; } @@ -826,7 +821,6 @@ static int init_dev(struct tty_driver *d if(!tty) goto fail_no_mem; initialize_tty_struct(tty); - tty->device = MKDEV(driver->major, driver->minor_start) + idx; tty->driver = driver; tty->index = idx; tty_line_name(driver, idx, tty->name); @@ -854,8 +848,6 @@ static int init_dev(struct tty_driver *d if (!o_tty) goto free_mem_out; initialize_tty_struct(o_tty); - o_tty->device = MKDEV(driver->other->major, - driver->other->minor_start) + idx; o_tty->driver = driver->other; o_tty->index = idx; tty_line_name(driver->other, idx, o_tty->name); @@ -1406,7 +1398,7 @@ got_driver: task_unlock(current); current->tty_old_pgrp = 0; tty->session = current->session; - tty->pgrp = current->pgrp; + tty->pgrp = process_group(current); } return 0; } @@ -1580,7 +1572,7 @@ static int tiocsctty(struct tty_struct * task_unlock(current); current->tty_old_pgrp = 0; tty->session = current->session; - tty->pgrp = current->pgrp; + tty->pgrp = process_group(current); return 0; } @@ -2423,7 +2415,7 @@ static struct cdev vc0_cdev; * Ok, now we can initialize the rest of the tty devices and can count * on memory allocations, interrupts etc.. */ -void __init tty_init(void) +static int __init tty_init(void) { strcpy(tty_cdev.kobj.name, "dev.tty"); cdev_init(&tty_cdev, &tty_fops); @@ -2465,51 +2457,6 @@ void __init tty_init(void) vty_init(); #endif - -#ifdef CONFIG_ESPSERIAL /* init ESP before rs, so rs doesn't see the port */ - espserial_init(); -#endif -#if defined(CONFIG_MVME162_SCC) || defined(CONFIG_BVME6000_SCC) || defined(CONFIG_MVME147_SCC) - vme_scc_init(); -#endif -#ifdef CONFIG_SERIAL_TX3912 - tx3912_rs_init(); -#endif -#ifdef CONFIG_ROCKETPORT - rp_init(); -#endif -#ifdef CONFIG_SERIAL167 - serial167_init(); -#endif -#ifdef CONFIG_CYCLADES - cy_init(); -#endif -#ifdef CONFIG_STALLION - stl_init(); -#endif -#ifdef CONFIG_ISTALLION - stli_init(); -#endif -#ifdef CONFIG_DIGI - pcxe_init(); -#endif -#ifdef CONFIG_DIGIEPCA - pc_init(); -#endif -#ifdef CONFIG_SPECIALIX - specialix_init(); -#endif -#if (defined(CONFIG_8xx) || defined(CONFIG_8260)) - rs_8xx_init(); -#endif /* CONFIG_8xx */ - pty_init(); -#ifdef CONFIG_MOXA_INTELLIO - moxa_init(); -#endif -#ifdef CONFIG_TN3270 - tub3270_init(); -#endif -#ifdef CONFIG_A2232 - a2232board_init(); -#endif + return 0; } +module_init(tty_init); diff -prauN linux-2.6.0-test5/drivers/char/vme_scc.c wli-2.6.0-test5-bk12-25/drivers/char/vme_scc.c --- linux-2.6.0-test5/drivers/char/vme_scc.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/vme_scc.c 2003-09-25 19:15:55.000000000 -0700 @@ -396,14 +396,10 @@ static int bvme6000_scc_init(void) #endif -int vme_scc_init(void) +static int vme_scc_init(void) { int res = -ENODEV; - static int called = 0; - if (called) - return res; - called = 1; #ifdef CONFIG_MVME147_SCC if (MACH_IS_MVME147) res = mvme147_scc_init(); @@ -419,6 +415,8 @@ int vme_scc_init(void) return res; } +module_init(vme_scc_init); + /*--------------------------------------------------------------------------- * Interrupt handlers diff -prauN linux-2.6.0-test5/drivers/char/watchdog/Kconfig wli-2.6.0-test5-bk12-25/drivers/char/watchdog/Kconfig --- linux-2.6.0-test5/drivers/char/watchdog/Kconfig 2003-09-08 12:50:09.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/watchdog/Kconfig 2003-09-25 19:15:55.000000000 -0700 @@ -46,11 +46,8 @@ config SOFT_WATCHDOG from some situations that the hardware watchdog will recover from. Equally it's a lot cheaper to install. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - If you want to compile it as a module, say M here and read - . The module will be called - softdog. + To compile this driver as a module, choose M here: the + module will be called softdog. config WDT tristate "WDT Watchdog timer" @@ -63,10 +60,8 @@ config WDT documentation of your boot loader (lilo or loadlin) about how to pass options to the kernel at boot time). - 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 . The module - will be called wdt. + To compile this driver as a module, choose M here: the + module will be called wdt. config WDT_501 bool "WDT501 features" @@ -97,10 +92,8 @@ config WDTPCI boot loader (lilo or loadlin) about how to pass options to the kernel at boot time). - 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 . The module - will be called wdt_pci. + To compile this driver as a module, choose M here: the + module will be called wdt_pci. config WDT_501_PCI bool "WDT501-PCI features" @@ -124,10 +117,8 @@ config PCWATCHDOG hardware. Please read . The PC watchdog cards can be ordered from . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module is called pcwd. If you want to compile it as a module, - say M here and read . + To compile this driver as a module, choose M here: the + module will be called pcwd. Most people will say N. @@ -139,13 +130,12 @@ config ACQUIRE_WDT Board Computer produced by Acquire Inc (and others). This watchdog simply watches your kernel to make sure it doesn't freeze, and if it does, it reboots your computer after a certain amount of time. - This driver is like the WDT501 driver but for different hardware. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module is called acquirewdt. If you want to compile it as a - module, say M here and read . Most - people will say N. + + To compile this driver as a module, choose M here: the + module will be called acquirewdt. + + Most people will say N. config ADVANTECH_WDT tristate "Advantech SBC Watchdog Timer" @@ -187,10 +177,8 @@ config SA1100_WATCHDOG system when timeout is reached. NOTE, that once enabled, this timer cannot be disabled. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - If you want to compile it as a module, say M here and read - . The module will be called sa1100_wdt. + To compile this driver as a module, choose M here: the + module will be called sa1100_wdt. config EUROTECH_WDT tristate "Eurotech CPU-1220/1410 Watchdog Timer" @@ -211,11 +199,10 @@ config IB700_WDT This driver is like the WDT501 driver but for slightly different hardware. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module is called ib700wdt. If you want to compile it as a - module, say M here and read . Most people - will say N. + To compile this driver as a module, choose M here: the + module will be called ib700wdt. + + Most people will say N. config I810_TCO tristate "Intel i8xx TCO timer / Watchdog" @@ -234,9 +221,8 @@ config I810_TCO machine. If this is the case you will get a kernel message like "i810tco init: failed to reset NO_REBOOT flag". - If you want to compile this as a module, say M and read - . The module will be called - i810-tco. + To compile this driver as a module, choose M here: the + module will be called i810-tco. config MIXCOMWD tristate "Mixcom Watchdog" @@ -247,11 +233,10 @@ config MIXCOMWD and if it does, it reboots your computer after a certain amount of time. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module is called mixcomwd. If you want to compile it as a - module, say M here and read . Most - people will say N. + To compile this driver as a module, choose M here: the + module will be called mixcomwd. + + Most people will say N. config SCx200_WDT tristate "NatSemi SCx200 Watchdog" @@ -286,11 +271,10 @@ config W83877F_WDT and if it does, it reboots your computer after a certain amount of time. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module is called w83877f_wdt. If you want to compile it as a - module, say M here and read . Most - people will say N. + To compile this driver as a module, choose M here: the + module will be called w83877f_wdt. + + Most people will say N. config MACHZ_WDT tristate "ZF MachZ Watchdog" @@ -302,10 +286,8 @@ config MACHZ_WDT your kernel to make sure it doesn't freeze, and if it does, it reboots your computer after a certain amount of time. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module is called machzwd. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called machzwd. config SC520_WDT tristate "AMD Elan SC520 processor Watchdog" @@ -340,11 +322,10 @@ config ALIM7101_WDT This is the driver for the hardware watchdog on the ALi M7101 PMU as used in the x86 Cobalt servers. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module is called alim7101_wdt. If you want to compile it as a - module, say M here and read . Most - people will say N. + To compile this driver as a module, choose M here: the + module will be called alim7101_wdt. + + Most people will say N. config ALIM1535_WDT tristate "ALi M1535 PMU Watchdog Timer" @@ -352,11 +333,10 @@ config ALIM1535_WDT ---help--- This is the driver for the hardware watchdog on the ALi M1535 PMU. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module is called alim1535_wdt. If you want to compile it as a - module, say M here and read . Most - people will say N. + To compile this driver as a module, choose M here: the + module will be called alim1535_wdt. + + Most people will say N. config SC1200_WDT tristate "National Semiconductor PC87307/PC97307 (ala SC1200) Watchdog" @@ -367,11 +347,10 @@ config SC1200_WDT for power management purposes and can be used to power down the device during inactivity periods (includes interrupt activity monitoring). - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module is called sc1200wdt. If you want to compile it as a - module, say M here and read . Most - people will say N. + To compile this driver as a module, choose M here: the + module will be called sc1200wdt. + + Most people will say N. config WAFER_WDT tristate "ICP Wafer 5823 Single Board Computer Watchdog" @@ -380,20 +359,15 @@ config WAFER_WDT This is a driver for the hardware watchdog on the ICP Wafer 5823 Single Board Computer (and probably other similar models). - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - If you want to compile it as a module, say M here and read - . The module will be called - wafer5823wdt. + To compile this driver as a module, choose M here: the + module will be called wafer5823wdt. config CPU5_WDT tristate "SMA CPU5 Watchdog" depends on WATCHDOG ---help--- TBD. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module is called cpu5wdt. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called cpu5wdt. endmenu diff -prauN linux-2.6.0-test5/drivers/char/watchdog/alim1535_wdt.c wli-2.6.0-test5-bk12-25/drivers/char/watchdog/alim1535_wdt.c --- linux-2.6.0-test5/drivers/char/watchdog/alim1535_wdt.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/watchdog/alim1535_wdt.c 2003-09-25 19:15:55.000000000 -0700 @@ -317,7 +317,7 @@ static int ali_notify_sys(struct notifie * want to register another driver on the same PCI id. */ -static struct pci_device_id ali_pci_tbl[] __initdata = { +static struct pci_device_id ali_pci_tbl[] = { { PCI_VENDOR_ID_AL, 1535, PCI_ANY_ID, PCI_ANY_ID,}, { 0, }, }; diff -prauN linux-2.6.0-test5/drivers/char/watchdog/amd7xx_tco.c wli-2.6.0-test5-bk12-25/drivers/char/watchdog/amd7xx_tco.c --- linux-2.6.0-test5/drivers/char/watchdog/amd7xx_tco.c 2003-09-08 12:49:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/watchdog/amd7xx_tco.c 2003-09-25 19:15:55.000000000 -0700 @@ -294,7 +294,7 @@ static struct miscdevice amdtco_miscdev .fops = &amdtco_fops }; -static struct pci_device_id amdtco_pci_tbl[] __initdata = { +static struct pci_device_id amdtco_pci_tbl[] = { /* AMD 766 PCI_IDs here */ { PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_OPUS_7443, PCI_ANY_ID, PCI_ANY_ID, }, { 0, } diff -prauN linux-2.6.0-test5/drivers/char/watchdog/i810-tco.c wli-2.6.0-test5-bk12-25/drivers/char/watchdog/i810-tco.c --- linux-2.6.0-test5/drivers/char/watchdog/i810-tco.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/watchdog/i810-tco.c 2003-09-25 19:15:55.000000000 -0700 @@ -301,7 +301,7 @@ static int i810tco_ioctl (struct inode * * register a pci_driver, because someone else might one day * want to register another driver on the same PCI id. */ -static struct pci_device_id i810tco_pci_tbl[] __initdata = { +static struct pci_device_id i810tco_pci_tbl[] = { { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_0, PCI_ANY_ID, PCI_ANY_ID, }, { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_0, PCI_ANY_ID, PCI_ANY_ID, }, { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_0, PCI_ANY_ID, PCI_ANY_ID, }, diff -prauN linux-2.6.0-test5/drivers/char/watchdog/wdt_pci.c wli-2.6.0-test5-bk12-25/drivers/char/watchdog/wdt_pci.c --- linux-2.6.0-test5/drivers/char/watchdog/wdt_pci.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/char/watchdog/wdt_pci.c 2003-09-25 19:15:55.000000000 -0700 @@ -505,7 +505,7 @@ static struct notifier_block wdtpci_noti }; -static int __init wdtpci_init_one (struct pci_dev *dev, +static int __devinit wdtpci_init_one (struct pci_dev *dev, const struct pci_device_id *ent) { static int dev_count = 0; diff -prauN linux-2.6.0-test5/drivers/cpufreq/cpufreq.c wli-2.6.0-test5-bk12-25/drivers/cpufreq/cpufreq.c --- linux-2.6.0-test5/drivers/cpufreq/cpufreq.c 2003-09-08 12:49:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/cpufreq/cpufreq.c 2003-09-25 19:15:55.000000000 -0700 @@ -1,17 +1,16 @@ /* - * linux/kernel/cpufreq.c + * linux/drivers/cpufreq/cpufreq.c * * Copyright (C) 2001 Russell King * (C) 2002 - 2003 Dominik Brodowski * - * $Id: cpufreq.c,v 1.59 2003/01/20 17:31:48 db Exp $ - * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * */ +#include #include #include #include @@ -743,26 +742,9 @@ int cpufreq_get_policy(struct cpufreq_po EXPORT_SYMBOL(cpufreq_get_policy); -/** - * cpufreq_set_policy - set a new CPUFreq policy - * @policy: policy to be set. - * - * Sets a new CPU frequency and voltage scaling policy. - */ -int cpufreq_set_policy(struct cpufreq_policy *policy) +static int __cpufreq_set_policy(struct cpufreq_policy *data, struct cpufreq_policy *policy) { int ret = 0; - struct cpufreq_policy *data; - - if (!policy) - return -EINVAL; - - data = cpufreq_cpu_get(policy->cpu); - if (!data) - return -EINVAL; - - /* lock this CPU */ - down(&data->lock); memcpy(&policy->cpuinfo, &data->cpuinfo, @@ -829,6 +811,36 @@ int cpufreq_set_policy(struct cpufreq_po } error_out: + return ret; +} + +/** + * cpufreq_set_policy - set a new CPUFreq policy + * @policy: policy to be set. + * + * Sets a new CPU frequency and voltage scaling policy. + */ +int cpufreq_set_policy(struct cpufreq_policy *policy) +{ + int ret = 0; + struct cpufreq_policy *data; + + if (!policy) + return -EINVAL; + + data = cpufreq_cpu_get(policy->cpu); + if (!data) + return -EINVAL; + + /* lock this CPU */ + down(&data->lock); + + ret = __cpufreq_set_policy(data, policy); + data->user_policy.min = data->min; + data->user_policy.max = data->max; + data->user_policy.policy = data->policy; + data->user_policy.governor = data->governor; + up(&data->lock); cpufreq_cpu_put(data); @@ -837,6 +849,41 @@ int cpufreq_set_policy(struct cpufreq_po EXPORT_SYMBOL(cpufreq_set_policy); +/** + * cpufreq_update_policy - re-evaluate an existing cpufreq policy + * @cpu: CPU which shall be re-evaluated + * + * Usefull for policy notifiers which have different necessities + * at different times. + */ +int cpufreq_update_policy(unsigned int cpu) +{ + struct cpufreq_policy *data = cpufreq_cpu_get(cpu); + struct cpufreq_policy policy; + int ret = 0; + + if (!data) + return -ENODEV; + + down(&data->lock); + + memcpy(&policy, + &data, + sizeof(struct cpufreq_policy)); + policy.min = data->user_policy.min; + policy.max = data->user_policy.max; + policy.policy = data->user_policy.policy; + policy.governor = data->user_policy.governor; + + ret = __cpufreq_set_policy(data, &policy); + + up(&data->lock); + + cpufreq_cpu_put(data); + return ret; +} +EXPORT_SYMBOL(cpufreq_update_policy); + /********************************************************************* * EXTERNALLY AFFECTING FREQUENCY CHANGES * diff -prauN linux-2.6.0-test5/drivers/cpufreq/cpufreq_userspace.c wli-2.6.0-test5-bk12-25/drivers/cpufreq/cpufreq_userspace.c --- linux-2.6.0-test5/drivers/cpufreq/cpufreq_userspace.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/cpufreq/cpufreq_userspace.c 2003-09-25 19:15:55.000000000 -0700 @@ -1,17 +1,16 @@ /* - * drivers/cpufreq/userspace.c + * linux/drivers/cpufreq/cpufreq_userspace.c * * Copyright (C) 2001 Russell King * (C) 2002 - 2003 Dominik Brodowski * - * $Id:$ - * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * */ +#include #include #include #include diff -prauN linux-2.6.0-test5/drivers/eisa/eisa-bus.c wli-2.6.0-test5-bk12-25/drivers/eisa/eisa-bus.c --- linux-2.6.0-test5/drivers/eisa/eisa-bus.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/eisa/eisa-bus.c 2003-09-25 19:15:55.000000000 -0700 @@ -427,6 +427,11 @@ module_param(disable_dev, intarray, 0444 postcore_initcall (eisa_init); +#ifndef CONFIG_EISA_ALWAYS +int EISA_bus; +EXPORT_SYMBOL(EISA_bus); +#endif + EXPORT_SYMBOL (eisa_bus_type); EXPORT_SYMBOL (eisa_driver_register); EXPORT_SYMBOL (eisa_driver_unregister); diff -prauN linux-2.6.0-test5/drivers/fc4/Kconfig wli-2.6.0-test5-bk12-25/drivers/fc4/Kconfig --- linux-2.6.0-test5/drivers/fc4/Kconfig 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/fc4/Kconfig 2003-09-25 19:15:55.000000000 -0700 @@ -33,10 +33,8 @@ config FC4_SOC that if you have older firmware in the card, you'll need the microcode from the Solaris driver to make it work. - This support is also available as a module called soc ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this support as a module, choose M here: the module will + be called soc. config FC4_SOCAL tristate "Sun SOC+ (aka SOCAL)" @@ -48,10 +46,8 @@ config FC4_SOCAL Interface Board). You'll probably need the microcode from the Solaris driver to make it work. - This support is also available as a module called socal ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this support as a module, choose M here: the module will + be called socal. comment "FC4 targets" depends on FC4 @@ -62,10 +58,8 @@ config SCSI_PLUTO help If you never bought a disk array made by Sun, go with N. - This support is also available as a module called pluto ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this support as a module, choose M here: the module will + be called pluto. config SCSI_FCAL tristate "Sun Enterprise Network Array (A5000 and EX500)" if SPARC32 || SPARC64 @@ -76,10 +70,8 @@ config SCSI_FCAL common is either A5000 array or internal disks in E[3-6]000 machines. - This support is also available as a module called fcal ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . If unsure, say N. + To compile this support as a module, choose M here: the module will + be called fcal. config SCSI_FCAL prompt "Generic FC-AL disk driver" diff -prauN linux-2.6.0-test5/drivers/i2c/Kconfig wli-2.6.0-test5-bk12-25/drivers/i2c/Kconfig --- linux-2.6.0-test5/drivers/i2c/Kconfig 2003-09-08 12:49:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/Kconfig 2003-09-25 19:15:55.000000000 -0700 @@ -22,10 +22,20 @@ config I2C If you want I2C support, you should say Y here and also to the specific driver for your bus adapter(s) below. - This I2C support is also available as a module. If you want to - compile it as a module, say M here and read - . - The module will be called i2c-core. + This I2C support can also be built as a module. If so, the module + will be called i2c-core. + +config I2C_CHARDEV + tristate "I2C device interface" + depends on I2C + help + Say Y here to use i2c-* device files, usually found in the /dev + directory on your system. They make it possible to have user-space + programs use the I2C bus. Information on how to do this is + contained in the file . + + This support is also available as a module. If so, the module + will be called i2c-dev. config I2C_ALGOBIT tristate "I2C bit-banging interfaces" @@ -35,105 +45,8 @@ config I2C_ALGOBIT adapters. Say Y if you own an I2C adapter belonging to this class and then say Y to the specific driver for you adapter below. - This support is also available as a module. If you want to compile - it as a module, say M here and read - . - The module will be called i2c-algo-bit. - -config I2C_PROSAVAGE - tristate "S3/VIA (Pro)Savage" - depends on I2C_ALGOBIT && PCI && EXPERIMENTAL - help - If you say yes to this option, support will be included for the - I2C bus and DDC bus of the S3VIA embedded Savage4 and ProSavage8 - graphics processors. - chipsets supported: - S3/VIA KM266/VT8375 aka ProSavage8 - S3/VIA KM133/VT8365 aka Savage4 - - This can also be built as a module which can be inserted and removed - while the kernel is running. If you want to compile it as a module, - say M here and read . - The module will be called i2c-prosavage. - - You will also need the latest user-space utilties: you can find them - in the lm_sensors package, which you can download at - http://www.lm-sensors.nu - -config I2C_PHILIPSPAR - tristate "Philips style parallel port adapter" - depends on I2C_ALGOBIT && PARPORT - ---help--- - This supports parallel-port I2C adapters made by Philips. Say Y if - you own such an adapter. - - This driver is also available as a module. If you want to compile - it as a module, say M here and read - . - The module will be called i2c-philips-par. - - Note that if you want support for different parallel port devices, - life will be much easier if you compile them all as modules. - -config I2C_ELV - tristate "ELV adapter" - depends on I2C_ALGOBIT && ISA - help - This supports parallel-port I2C adapters called ELV. Say Y if you - own such an adapter. - - This driver is also available as a module. If you want to compile - it as a module, say M here and read - . - The module will be called i2c-elv. - -config I2C_VELLEMAN - tristate "Velleman K9000 adapter" - depends on I2C_ALGOBIT && ISA - help - This supports the Velleman K9000 parallel-port I2C adapter. Say Y - if you own such an adapter. - - This driver is also available as a module. If you want to compile - it as a module, say M here and read - . - The module will be called i2c-velleman. - -config SCx200_I2C - tristate "NatSemi SCx200 I2C using GPIO pins" - depends on SCx200 && I2C_ALGOBIT - help - Enable the use of two GPIO pins of a SCx200 processor as an I2C bus. - - If you don't know what to do here, say N. - - If compiled as a module, it will be called scx200_i2c. - -config SCx200_I2C_SCL - int "GPIO pin used for SCL" - depends on SCx200_I2C - default "12" - help - Enter the GPIO pin number used for the SCL signal. This value can - also be specified with a module parameter. - -config SCx200_I2C_SDA - int "GPIO pin used for SDA" - depends on SCx200_I2C - default "13" - help - Enter the GPIO pin number used for the SSA signal. This value can - also be specified with a module parameter. - -config SCx200_ACB - tristate "NatSemi SCx200 ACCESS.bus" - depends on I2C_ALGOBIT!=n && I2C - help - Enable the use of the ACCESS.bus controllers of a SCx200 processor. - - If you don't know what to do here, say N. - - If compiled as a module, it will be called scx200_acb. + This support is also available as a module. If so, the module + will be called i2c-algo-bit. config I2C_ALGOPCF tristate "I2C PCF 8584 interfaces" @@ -143,35 +56,10 @@ config I2C_ALGOPCF Say Y if you own an I2C adapter belonging to this class and then say Y to the specific driver for you adapter below. - This support is also available as a module. If you want to compile - it as a module, say M here and read - . - The module will be called i2c-algo-pcf. - -config I2C_ELEKTOR - tristate "Elektor ISA card" - depends on I2C_ALGOPCF && BROKEN_ON_SMP - help - This supports the PCF8584 ISA bus I2C adapter. Say Y if you own - such an adapter. + This support is also available as a module. If so, the module + will be called i2c-algo-pcf. - This driver is also available as a module. If you want to compile - it as a module, say M here and read - . - The module will be called i2c-elektor. - -config I2C_KEYWEST - tristate "Powermac Keywest I2C interface" - depends on I2C && PPC_PMAC - help - This supports the use of the I2C interface in the combo-I/O - chip on recent Apple machines. Say Y if you have such a machine. - - This driver is also available as a module. If you want to compile - it as a module, say M here and read Documentation/modules.txt. - The module will be called i2c-keywest. - -config ITE_I2C_ALGO +config I2C_ALGOITE tristate "ITE I2C Algorithm" depends on MIPS_ITE8172 && I2C help @@ -179,56 +67,13 @@ config ITE_I2C_ALGO systems. Say Y if you have one of these. You should also say Y for the ITE I2C peripheral driver support below. - This support is also available as a module. If you want to compile - it as a module, say M here and read Documentation/modules.txt. - The module will be called i2c-algo-ite. - -config ITE_I2C_ADAP - tristate "ITE I2C Adapter" - depends on ITE_I2C_ALGO - help - This supports the ITE8172 I2C peripheral found on some MIPS - systems. Say Y if you have one of these. You should also say Y for - the ITE I2C driver algorithm support above. - - This support is also available as a module. If you want to compile - it as a module, say M here and read Documentation/modules.txt. - The module will be called i2c-adap-ite. + This support is also available as a module. If so, the module + will be called i2c-algo-ite. config I2C_ALGO8XX tristate "MPC8xx CPM I2C interface" depends on 8xx && I2C -config I2C_RPXLITE - tristate "Embedded Planet RPX Lite/Classic suppoort" - depends on (RPXLITE || RPXCLASSIC) && I2C_ALGO8XX - -config I2C_IBM_OCP_ALGO - tristate "IBM on-chip I2C Algorithm" - depends on IBM_OCP && I2C - -config I2C_IBM_OCP_ADAP - tristate "IBM on-chip I2C Adapter" - depends on I2C_IBM_OCP_ALGO - -config I2C_IOP3XX - tristate "Intel XScale IOP3xx on-chip I2C interface" - depends on ARCH_IOP3XX && I2C - -config I2C_CHARDEV - tristate "I2C device interface" - depends on I2C - help - Say Y here to use i2c-* device files, usually found in the /dev - directory on your system. They make it possible to have user-space - programs use the I2C bus. Information on how to do this is - contained in the file . - - This code is also available as a module. If you want to compile - it as a module, say M here and read - . - The module will be called i2c-dev. - source drivers/i2c/busses/Kconfig source drivers/i2c/chips/Kconfig diff -prauN linux-2.6.0-test5/drivers/i2c/Makefile wli-2.6.0-test5-bk12-25/drivers/i2c/Makefile --- linux-2.6.0-test5/drivers/i2c/Makefile 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/Makefile 2003-09-25 19:15:55.000000000 -0700 @@ -1,21 +1,11 @@ # -# Makefile for the kernel i2c bus driver. +# Makefile for the i2c core. # obj-$(CONFIG_I2C) += i2c-core.o obj-$(CONFIG_I2C_CHARDEV) += i2c-dev.o +obj-$(CONFIG_I2C_SENSOR) += i2c-sensor.o obj-$(CONFIG_I2C_ALGOBIT) += i2c-algo-bit.o -obj-$(CONFIG_I2C_PROSAVAGE) += i2c-prosavage.o -obj-$(CONFIG_I2C_PHILIPSPAR) += i2c-philips-par.o -obj-$(CONFIG_I2C_ELV) += i2c-elv.o -obj-$(CONFIG_I2C_VELLEMAN) += i2c-velleman.o obj-$(CONFIG_I2C_ALGOPCF) += i2c-algo-pcf.o -obj-$(CONFIG_I2C_ELEKTOR) += i2c-elektor.o -obj-$(CONFIG_I2C_KEYWEST) += i2c-keywest.o -obj-$(CONFIG_ITE_I2C_ALGO) += i2c-algo-ite.o -obj-$(CONFIG_ITE_I2C_ADAP) += i2c-adap-ite.o -obj-$(CONFIG_SCx200_I2C) += scx200_i2c.o -obj-$(CONFIG_SCx200_ACB) += scx200_acb.o -obj-$(CONFIG_I2C_SENSOR) += i2c-sensor.o -obj-$(CONFIG_I2C_IOP3XX) += i2c-iop3xx.o +obj-$(CONFIG_I2C_ALGOITE) += i2c-algo-ite.o obj-y += busses/ chips/ diff -prauN linux-2.6.0-test5/drivers/i2c/busses/Kconfig wli-2.6.0-test5-bk12-25/drivers/i2c/busses/Kconfig --- linux-2.6.0-test5/drivers/i2c/busses/Kconfig 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/busses/Kconfig 2003-09-25 19:15:55.000000000 -0700 @@ -2,10 +2,10 @@ # Sensor device configuration # -menu "I2C Hardware Sensors Mainboard support" +menu "I2C Hardware Bus support" config I2C_ALI1535 - tristate " ALI 1535" + tristate "ALI 1535" depends on I2C && PCI && EXPERIMENTAL help If you say yes to this option, support will be included for the SMB @@ -13,63 +13,61 @@ config I2C_ALI1535 controller is part of the 7101 device, which is an ACPI-compliant Power Management Unit (PMU). - This can also be built as a module. If so, the module will be - called i2c-ali1535. - - You will also need the latest user-space utilties: you can find them - in the lm_sensors package, which you can download at - http://www.lm-sensors.nu + This driver can also be built as a module. If so, the module + will be called i2c-ali1535. config I2C_ALI15X3 - tristate " ALI 15x3" + tristate "ALI 15x3" depends on I2C && PCI && EXPERIMENTAL help If you say yes to this option, support will be included for the Acer Labs Inc. (ALI) M1514 and M1543 motherboard I2C interfaces. - This can also be built as a module. If so, the module will be - called i2c-ali15x3. - - You will also need the latest user-space utilties: you can find them - in the lm_sensors package, which you can download at - http://www.lm-sensors.nu + This driver can also be built as a module. If so, the module + will be called i2c-ali15x3. config I2C_AMD756 - tristate " AMD 756/766" + tristate "AMD 756/766" depends on I2C && EXPERIMENTAL help If you say yes to this option, support will be included for the AMD 756/766/768 mainboard I2C interfaces. - This can also be built as a module which can be inserted and removed - while the kernel is running. If you want to compile it as a module, - say M here and read . - - The module will be called i2c-amd756. - - You will also need the latest user-space utilties: you can find them - in the lm_sensors package, which you can download at - http://www.lm-sensors.nu + This driver can also be built as a module. If so, the module + will be called i2c-amd756. config I2C_AMD8111 - tristate " AMD 8111" + tristate "AMD 8111" depends on I2C && EXPERIMENTAL help If you say yes to this option, support will be included for the AMD 8111 mainboard I2C interfaces. - This can also be built as a module which can be inserted and removed - while the kernel is running. If you want to compile it as a module, - say M here and read . - - The module will be called i2c-amd8111. - - You will also need the latest user-space utilties: you can find them - in the lm_sensors package, which you can download at - http://www.lm-sensors.nu + This driver can also be built as a module. If so, the module + will be called i2c-amd8111. + +config I2C_ELEKTOR + tristate "Elektor ISA card" + depends on I2C_ALGOPCF && BROKEN_ON_SMP + help + This supports the PCF8584 ISA bus I2C adapter. Say Y if you own + such an adapter. + + This support is also available as a module. If so, the module + will be called i2c-elektor. + +config I2C_ELV + tristate "ELV adapter" + depends on I2C_ALGOBIT && ISA + help + This supports parallel-port I2C adapters called ELV. Say Y if you + own such an adapter. + + This support is also available as a module. If so, the module + will be called i2c-elv. config I2C_I801 - tristate " Intel 801" + tristate "Intel 801" depends on I2C && PCI && EXPERIMENTAL help If you say yes to this option, support will be included for the Intel @@ -81,53 +79,84 @@ config I2C_I801 82801CA/CAM 82801DB - This can also be built as a module which can be inserted and removed - while the kernel is running. If you want to compile it as a module, - say M here and read . - - The module will be called i2c-i801. - - You will also need the latest user-space utilties: you can find them - in the lm_sensors package, which you can download at - http://www.lm-sensors.nu + This driver can also be built as a module. If so, the module + will be called i2c-i801. + +config I2C_I810 + tristate "Intel 810/815" + depends on I2C_ALGOBIT && PCI && EXPERIMENTAL + help + If you say yes to this option, support will be included for the Intel + 810/815 family of mainboard I2C interfaces. Specifically, the + following versions of the chipset is supported: + i810AA + i810AB + i810E + i815 + + This driver can also be built as a module. If so, the module + will be called i2c-i810. + +config I2C_IBM_IIC + tristate "IBM IIC I2C" + depends on IBM_OCP && I2C + +config I2C_IOP3XX + tristate "Intel XScale IOP3xx on-chip I2C interface" + depends on ARCH_IOP3XX && I2C config I2C_ISA - tristate " ISA Bus support" + tristate "ISA Bus support" depends on I2C && ISA && EXPERIMENTAL help If you say yes to this option, support will be included for i2c interfaces that are on the ISA bus. - This can also be built as a module which can be inserted and removed - while the kernel is running. If you want to compile it as a module, - say M here and read . - - The module will be called i2c-isa. - - You will also need the latest user-space utilties: you can find them - in the lm_sensors package, which you can download at - http://www.lm-sensors.nu + This driver can also be built as a module. If so, the module + will be called i2c-isa. + +config I2C_ITE + tristate "ITE I2C Adapter" + depends on I2C_ALGOITE + help + This supports the ITE8172 I2C peripheral found on some MIPS + systems. Say Y if you have one of these. You should also say Y for + the ITE I2C driver algorithm support above. + + This support is also available as a module. If so, the module + will be called i2c-ite. + +config I2C_KEYWEST + tristate "Powermac Keywest I2C interface" + depends on I2C && PPC_PMAC + help + This supports the use of the I2C interface in the combo-I/O + chip on recent Apple machines. Say Y if you have such a machine. + + This support is also available as a module. If so, the module + will be called i2c-keywest. config I2C_NFORCE2 - tristate " Nvidia Nforce2" + tristate "Nvidia Nforce2" depends on I2C && PCI && EXPERIMENTAL help If you say yes to this option, support will be included for the Nvidia Nforce2 family of mainboard I2C interfaces. - This can also be built as a module which can be inserted and removed - while the kernel is running. If you want to compile it as a module, - say M here and read . - - The module will be called i2c-nforce2. - - You will also need the latest user-space utilties: you can find them - in the lm_sensors package, which you can download at - http://www.lm-sensors.nu + This driver can also be built as a module. If so, the module + will be called i2c-nforce2. + +config I2C_PHILIPSPAR + tristate "Philips style parallel port adapter" + depends on I2C_ALGOBIT && PARPORT + help + This supports parallel-port I2C adapters made by Philips. + This support is also available as a module. If so, the module + will be called i2c-philips-par. config I2C_PIIX4 - tristate " Intel PIIX4" + tristate "Intel PIIX4" depends on I2C && PCI && EXPERIMENTAL help If you say yes to this option, support will be included for the Intel @@ -139,19 +168,97 @@ config I2C_PIIX4 Serverworks CSB5 SMSC Victory66 - This can also be built as a module which can be inserted and removed - while the kernel is running. If you want to compile it as a module, - say M here and read . - - The module will be called i2c-piix4. - - You will also need the latest user-space utilties: you can find them - in the lm_sensors package, which you can download at - http://www.lm-sensors.nu + This driver can also be built as a module. If so, the module + will be called i2c-piix4. + +config I2C_PROSAVAGE + tristate "S3/VIA (Pro)Savage" + depends on I2C_ALGOBIT && PCI && EXPERIMENTAL + help + If you say yes to this option, support will be included for the + I2C bus and DDC bus of the S3VIA embedded Savage4 and ProSavage8 + graphics processors. + chipsets supported: + S3/VIA KM266/VT8375 aka ProSavage8 + S3/VIA KM133/VT8365 aka Savage4 + + This support is also available as a module. If so, the module + will be called i2c-prosavage. + +config I2C_RPXLITE + tristate "Embedded Planet RPX Lite/Classic suppoort" + depends on (RPXLITE || RPXCLASSIC) && I2C_ALGO8XX + +config I2C_SAVAGE4 + tristate "S3 Savage 4" + depends on I2C_ALGOBIT && PCI && EXPERIMENTAL + help + If you say yes to this option, support will be included for the + S3 Savage 4 I2C interface. + + This driver can also be built as a module. If so, the module + will be called i2c-savage4. + +config SCx200_I2C + tristate "NatSemi SCx200 I2C using GPIO pins" + depends on SCx200 && I2C_ALGOBIT + help + Enable the use of two GPIO pins of a SCx200 processor as an I2C bus. + + If you don't know what to do here, say N. + + This support is also available as a module. If so, the module + will be called scx200_i2c. + +config SCx200_I2C_SCL + int "GPIO pin used for SCL" + depends on SCx200_I2C + default "12" + help + Enter the GPIO pin number used for the SCL signal. This value can + also be specified with a module parameter. + +config SCx200_I2C_SDA + int "GPIO pin used for SDA" + depends on SCx200_I2C + default "13" + help + Enter the GPIO pin number used for the SSA signal. This value can + also be specified with a module parameter. + +config SCx200_ACB + tristate "NatSemi SCx200 ACCESS.bus" + depends on I2C_ALGOBIT!=n && I2C + help + Enable the use of the ACCESS.bus controllers of a SCx200 processor. + + If you don't know what to do here, say N. + + This support is also available as a module. If so, the module + will be called scx200_acb. + +config I2C_SIS5595 + tristate "SiS 5595" + depends on I2C && PCI && EXPERIMENTAL + help + If you say yes to this option, support will be included for the + SiS5595 SMBus (a subset of I2C) interface. + + This driver can also be built as a module. If so, the module + will be called i2c-sis5595. + +config I2C_SIS630 + tristate "SiS 630" + depends on I2C && PCI && EXPERIMENTAL + help + If you say yes to this option, support will be included for the + SiS630 SMBus (a subset of I2C) interface. + This driver can also be built as a module. If so, the module + will be called i2c-sis630. config I2C_SIS96X - tristate " SiS 96x" + tristate "SiS 96x" depends on I2C && PCI && EXPERIMENTAL help If you say yes to this option, support will be included for the SiS @@ -164,19 +271,32 @@ config I2C_SIS96X 650/961 735 - This can also be built as a module which can be inserted and removed - while the kernel is running. If you want to compile it as a module, - say M here and read . - - The module will be called i2c-sis96x. - - You will also need the latest user-space utilties: you can find them - in the lm_sensors package, which you can download at - http://www.lm-sensors.nu + This driver can also be built as a module. If so, the module + will be called i2c-sis96x. +config I2C_VELLEMAN + tristate "Velleman K9000 adapter" + depends on I2C_ALGOBIT && ISA + help + This supports the Velleman K9000 parallel-port I2C adapter. Say Y + if you own such an adapter. + + This support is also available as a module. If so, the module + will be called i2c-velleman. + +config I2C_VIA + tristate "VIA 82C58B" + depends on I2C_ALGOBIT && PCI && EXPERIMENTAL + help + + If you say yes to this option, support will be included for the VIA + 82C586B I2C interface + + This driver can also be built as a module. If so, the module + will be called i2c-via. config I2C_VIAPRO - tristate " VIA 82C596/82C686/823x" + tristate "VIA 82C596/82C686/823x" depends on I2C && PCI && EXPERIMENTAL help @@ -190,15 +310,18 @@ config I2C_VIAPRO 8233A 8235 - This can also be built as a module which can be inserted and removed - while the kernel is running. If you want to compile it as a module, - say M here and read . - - The module will be called i2c-viapro. - - You will also need the latest user-space utilties: you can find them - in the lm_sensors package, which you can download at - http://www.lm-sensors.nu + This driver can also be built as a module. If so, the module + will be called i2c-viapro. -endmenu +config I2C_VOODOO3 + tristate "Voodoo 3" + depends on I2C_ALGOBIT && PCI && EXPERIMENTAL + help + + If you say yes to this option, support will be included for the + Voodoo 3 I2C interface. + + This driver can also be built as a module. If so, the module + will be called i2c-voodoo3. +endmenu diff -prauN linux-2.6.0-test5/drivers/i2c/busses/Makefile wli-2.6.0-test5-bk12-25/drivers/i2c/busses/Makefile --- linux-2.6.0-test5/drivers/i2c/busses/Makefile 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/busses/Makefile 2003-09-25 19:15:55.000000000 -0700 @@ -1,14 +1,32 @@ # -# Makefile for the kernel hardware sensors bus drivers. +# Makefile for the i2c bus drivers. # obj-$(CONFIG_I2C_ALI1535) += i2c-ali1535.o obj-$(CONFIG_I2C_ALI15X3) += i2c-ali15x3.o obj-$(CONFIG_I2C_AMD756) += i2c-amd756.o obj-$(CONFIG_I2C_AMD8111) += i2c-amd8111.o +obj-$(CONFIG_I2C_ELEKTOR) += i2c-elektor.o +obj-$(CONFIG_I2C_ELV) += i2c-elv.o obj-$(CONFIG_I2C_I801) += i2c-i801.o +obj-$(CONFIG_I2C_I810) += i2c-i810.o +obj-$(CONFIG_I2C_IBM_IIC) += i2c-ibm_iic.o +obj-$(CONFIG_I2C_IOP3XX) += i2c-iop3xx.o obj-$(CONFIG_I2C_ISA) += i2c-isa.o +obj-$(CONFIG_I2C_ITE) += i2c-ite.o +obj-$(CONFIG_I2C_KEYWEST) += i2c-keywest.o obj-$(CONFIG_I2C_NFORCE2) += i2c-nforce2.o +obj-$(CONFIG_I2C_PHILIPSPAR) += i2c-philips-par.o obj-$(CONFIG_I2C_PIIX4) += i2c-piix4.o +obj-$(CONFIG_I2C_PROSAVAGE) += i2c-prosavage.o +obj-$(CONFIG_I2C_RPXLITE) += i2c-rpx.o +obj-$(CONFIG_I2C_SAVAGE4) += i2c-savage4.o +obj-$(CONFIG_I2C_SIS5595) += i2c-sis5595.o +obj-$(CONFIG_I2C_SIS630) += i2c-sis630.o obj-$(CONFIG_I2C_SIS96X) += i2c-sis96x.o +obj-$(CONFIG_I2C_VELLEMAN) += i2c-velleman.o +obj-$(CONFIG_I2C_VIA) += i2c-via.o obj-$(CONFIG_I2C_VIAPRO) += i2c-viapro.o +obj-$(CONFIG_I2C_VOODOO3) += i2c-voodoo3.o +obj-$(CONFIG_SCx200_ACB) += scx200_acb.o +obj-$(CONFIG_SCx200_I2C) += scx200_i2c.o diff -prauN linux-2.6.0-test5/drivers/i2c/busses/i2c-ali1535.c wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-ali1535.c --- linux-2.6.0-test5/drivers/i2c/busses/i2c-ali1535.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-ali1535.c 2003-09-25 19:15:55.000000000 -0700 @@ -481,7 +481,6 @@ static struct i2c_algorithm smbus_algori static struct i2c_adapter ali1535_adapter = { .owner = THIS_MODULE, - .id = I2C_ALGO_SMBUS | I2C_HW_SMBUS_ALI1535, .algo = &smbus_algorithm, .name = "unset", }; @@ -507,7 +506,7 @@ static int __devinit ali1535_probe(struc /* set up the driverfs linkage to our parent device */ ali1535_adapter.dev.parent = &dev->dev; - snprintf(ali1535_adapter.name, DEVICE_NAME_SIZE, + snprintf(ali1535_adapter.name, I2C_NAME_SIZE, "SMBus ALI1535 adapter at %04x", ali1535_smba); return i2c_add_adapter(&ali1535_adapter); } @@ -526,7 +525,6 @@ static struct pci_driver ali1535_driver static int __init i2c_ali1535_init(void) { - printk(KERN_INFO "i2c-ali1535 version %s (%s)\n", I2C_VERSION, I2C_DATE); return pci_module_init(&ali1535_driver); } diff -prauN linux-2.6.0-test5/drivers/i2c/busses/i2c-ali15x3.c wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-ali15x3.c --- linux-2.6.0-test5/drivers/i2c/busses/i2c-ali15x3.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-ali15x3.c 2003-09-25 19:15:55.000000000 -0700 @@ -471,7 +471,6 @@ static struct i2c_algorithm smbus_algori static struct i2c_adapter ali15x3_adapter = { .owner = THIS_MODULE, - .id = I2C_ALGO_SMBUS | I2C_HW_SMBUS_ALI15X3, .class = I2C_ADAP_CLASS_SMBUS, .algo = &smbus_algorithm, .name = "unset", @@ -498,7 +497,7 @@ static int __devinit ali15x3_probe(struc /* set up the driverfs linkage to our parent device */ ali15x3_adapter.dev.parent = &dev->dev; - snprintf(ali15x3_adapter.name, DEVICE_NAME_SIZE, + snprintf(ali15x3_adapter.name, I2C_NAME_SIZE, "SMBus ALI15X3 adapter at %04x", ali15x3_smba); return i2c_add_adapter(&ali15x3_adapter); } @@ -518,7 +517,6 @@ static struct pci_driver ali15x3_driver static int __init i2c_ali15x3_init(void) { - printk("i2c-ali15x3.o version %s (%s)\n", I2C_VERSION, I2C_DATE); return pci_module_init(&ali15x3_driver); } diff -prauN linux-2.6.0-test5/drivers/i2c/busses/i2c-amd756.c wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-amd756.c --- linux-2.6.0-test5/drivers/i2c/busses/i2c-amd756.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-amd756.c 2003-09-25 19:15:55.000000000 -0700 @@ -37,7 +37,6 @@ /* #define DEBUG 1 */ -#include #include #include #include @@ -304,7 +303,6 @@ static struct i2c_algorithm smbus_algori static struct i2c_adapter amd756_adapter = { .owner = THIS_MODULE, - .id = I2C_ALGO_SMBUS | I2C_HW_SMBUS_AMD756, .class = I2C_ADAP_CLASS_SMBUS, .algo = &smbus_algorithm, .name = "unset", @@ -369,7 +367,7 @@ static int __devinit amd756_probe(struct /* set up the driverfs linkage to our parent device */ amd756_adapter.dev.parent = &pdev->dev; - snprintf(amd756_adapter.name, DEVICE_NAME_SIZE, + snprintf(amd756_adapter.name, I2C_NAME_SIZE, "SMBus AMD75x adapter at %04x", amd756_ioport); error = i2c_add_adapter(&amd756_adapter); diff -prauN linux-2.6.0-test5/drivers/i2c/busses/i2c-amd8111.c wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-amd8111.c --- linux-2.6.0-test5/drivers/i2c/busses/i2c-amd8111.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-amd8111.c 2003-09-25 19:15:55.000000000 -0700 @@ -356,9 +356,8 @@ static int __devinit amd8111_probe(struc goto out_kfree; smbus->adapter.owner = THIS_MODULE; - snprintf(smbus->adapter.name, DEVICE_NAME_SIZE, + snprintf(smbus->adapter.name, I2C_NAME_SIZE, "SMBus2 AMD8111 adapter at %04x", smbus->base); - smbus->adapter.id = I2C_ALGO_SMBUS | I2C_HW_SMBUS_AMD8111; smbus->adapter.class = I2C_ADAP_CLASS_SMBUS; smbus->adapter.algo = &smbus_algorithm; smbus->adapter.algo_data = smbus; diff -prauN linux-2.6.0-test5/drivers/i2c/busses/i2c-elektor.c wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-elektor.c --- linux-2.6.0-test5/drivers/i2c/busses/i2c-elektor.c 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-elektor.c 2003-09-25 19:15:55.000000000 -0700 @@ -0,0 +1,286 @@ +/* ------------------------------------------------------------------------- */ +/* i2c-elektor.c i2c-hw access for PCF8584 style isa bus adaptes */ +/* ------------------------------------------------------------------------- */ +/* Copyright (C) 1995-97 Simon G. Vogl + 1998-99 Hans Berglund + + 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 of the License, 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, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +/* ------------------------------------------------------------------------- */ + +/* With some changes from Kyösti Mälkki and even + Frodo Looijaard */ + +/* Partialy rewriten by Oleg I. Vdovikin for mmapped support of + for Alpha Processor Inc. UP-2000(+) boards */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include + +#include "../i2c-pcf8584.h" + +#define DEFAULT_BASE 0x330 + +static int base; +static int irq; +static int clock = 0x1c; +static int own = 0x55; +static int mmapped; +static int i2c_debug; + +/* vdovikin: removed static struct i2c_pcf_isa gpi; code - + this module in real supports only one device, due to missing arguments + in some functions, called from the algo-pcf module. Sometimes it's + need to be rewriten - but for now just remove this for simpler reading */ + +static wait_queue_head_t pcf_wait; +static int pcf_pending; + +/* ----- global defines ----------------------------------------------- */ +#define DEB(x) if (i2c_debug>=1) x +#define DEB2(x) if (i2c_debug>=2) x +#define DEB3(x) if (i2c_debug>=3) x +#define DEBE(x) x /* error messages */ + +/* ----- local functions ---------------------------------------------- */ + +static void pcf_isa_setbyte(void *data, int ctl, int val) +{ + int address = ctl ? (base + 1) : base; + + /* enable irq if any specified for serial operation */ + if (ctl && irq && (val & I2C_PCF_ESO)) { + val |= I2C_PCF_ENI; + } + + DEB3(printk(KERN_DEBUG "i2c-elektor: Write 0x%X 0x%02X\n", address, val & 255)); + + switch (mmapped) { + case 0: /* regular I/O */ + outb(val, address); + break; + case 2: /* double mapped I/O needed for UP2000 board, + I don't know why this... */ + writeb(val, address); + /* fall */ + case 1: /* memory mapped I/O */ + writeb(val, address); + break; + } +} + +static int pcf_isa_getbyte(void *data, int ctl) +{ + int address = ctl ? (base + 1) : base; + int val = mmapped ? readb(address) : inb(address); + + DEB3(printk(KERN_DEBUG "i2c-elektor: Read 0x%X 0x%02X\n", address, val)); + + return (val); +} + +static int pcf_isa_getown(void *data) +{ + return (own); +} + + +static int pcf_isa_getclock(void *data) +{ + return (clock); +} + +static void pcf_isa_waitforpin(void) { + + int timeout = 2; + + if (irq > 0) { + cli(); + if (pcf_pending == 0) { + interruptible_sleep_on_timeout(&pcf_wait, timeout*HZ ); + } else + pcf_pending = 0; + sti(); + } else { + udelay(100); + } +} + + +static irqreturn_t pcf_isa_handler(int this_irq, void *dev_id, struct pt_regs *regs) { + pcf_pending = 1; + wake_up_interruptible(&pcf_wait); + return IRQ_HANDLED; +} + + +static int pcf_isa_init(void) +{ + if (!mmapped) { + if (!request_region(base, 2, "i2c (isa bus adapter)")) { + printk(KERN_ERR + "i2c-elektor: requested I/O region (0x%X:2) " + "is in use.\n", base); + return -ENODEV; + } + } + if (irq > 0) { + if (request_irq(irq, pcf_isa_handler, 0, "PCF8584", 0) < 0) { + printk(KERN_ERR "i2c-elektor: Request irq%d failed\n", irq); + irq = 0; + } else + enable_irq(irq); + } + return 0; +} + +/* ------------------------------------------------------------------------ + * Encapsulate the above functions in the correct operations structure. + * This is only done when more than one hardware adapter is supported. + */ +static struct i2c_algo_pcf_data pcf_isa_data = { + .setpcf = pcf_isa_setbyte, + .getpcf = pcf_isa_getbyte, + .getown = pcf_isa_getown, + .getclock = pcf_isa_getclock, + .waitforpin = pcf_isa_waitforpin, + .udelay = 10, + .mdelay = 10, + .timeout = 100, +}; + +static struct i2c_adapter pcf_isa_ops = { + .owner = THIS_MODULE, + .id = I2C_HW_P_ELEK, + .algo_data = &pcf_isa_data, + .name = "PCF8584 ISA adapter", +}; + +static int __init i2c_pcfisa_init(void) +{ +#ifdef __alpha__ + /* check to see we have memory mapped PCF8584 connected to the + Cypress cy82c693 PCI-ISA bridge as on UP2000 board */ + if (base == 0) { + + struct pci_dev *cy693_dev = + pci_find_device(PCI_VENDOR_ID_CONTAQ, + PCI_DEVICE_ID_CONTAQ_82C693, NULL); + + if (cy693_dev) { + char config; + /* yeap, we've found cypress, let's check config */ + if (!pci_read_config_byte(cy693_dev, 0x47, &config)) { + + DEB3(printk(KERN_DEBUG "i2c-elektor: found cy82c693, config register 0x47 = 0x%02x.\n", config)); + + /* UP2000 board has this register set to 0xe1, + but the most significant bit as seems can be + reset during the proper initialisation + sequence if guys from API decides to do that + (so, we can even enable Tsunami Pchip + window for the upper 1 Gb) */ + + /* so just check for ROMCS at 0xe0000, + ROMCS enabled for writes + and external XD Bus buffer in use. */ + if ((config & 0x7f) == 0x61) { + /* seems to be UP2000 like board */ + base = 0xe0000; + /* I don't know why we need to + write twice */ + mmapped = 2; + /* UP2000 drives ISA with + 8.25 MHz (PCI/4) clock + (this can be read from cypress) */ + clock = I2C_PCF_CLK | I2C_PCF_TRNS90; + printk(KERN_INFO "i2c-elektor: found API UP2000 like board, will probe PCF8584 later.\n"); + } + } + } + } +#endif + + /* sanity checks for mmapped I/O */ + if (mmapped && base < 0xc8000) { + printk(KERN_ERR "i2c-elektor: incorrect base address (0x%0X) specified for mmapped I/O.\n", base); + return -ENODEV; + } + + printk(KERN_INFO "i2c-elektor: i2c pcf8584-isa adapter driver\n"); + + if (base == 0) { + base = DEFAULT_BASE; + } + + init_waitqueue_head(&pcf_wait); + if (pcf_isa_init()) + return -ENODEV; + if (i2c_pcf_add_bus(&pcf_isa_ops) < 0) + goto fail; + + printk(KERN_ERR "i2c-elektor: found device at %#x.\n", base); + + return 0; + + fail: + if (irq > 0) { + disable_irq(irq); + free_irq(irq, 0); + } + + if (!mmapped) + release_region(base , 2); + return -ENODEV; +} + +static void i2c_pcfisa_exit(void) +{ + i2c_pcf_del_bus(&pcf_isa_ops); + + if (irq > 0) { + disable_irq(irq); + free_irq(irq, 0); + } + + if (!mmapped) + release_region(base , 2); +} + +MODULE_AUTHOR("Hans Berglund "); +MODULE_DESCRIPTION("I2C-Bus adapter routines for PCF8584 ISA bus adapter"); +MODULE_LICENSE("GPL"); + +MODULE_PARM(base, "i"); +MODULE_PARM(irq, "i"); +MODULE_PARM(clock, "i"); +MODULE_PARM(own, "i"); +MODULE_PARM(mmapped, "i"); +MODULE_PARM(i2c_debug, "i"); + +module_init(i2c_pcfisa_init); +module_exit(i2c_pcfisa_exit); diff -prauN linux-2.6.0-test5/drivers/i2c/busses/i2c-elv.c wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-elv.c --- linux-2.6.0-test5/drivers/i2c/busses/i2c-elv.c 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-elv.c 2003-09-25 19:15:55.000000000 -0700 @@ -0,0 +1,173 @@ +/* ------------------------------------------------------------------------- */ +/* i2c-elv.c i2c-hw access for philips style parallel port adapters */ +/* ------------------------------------------------------------------------- */ +/* Copyright (C) 1995-2000 Simon G. Vogl + + 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 of the License, 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, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +/* ------------------------------------------------------------------------- */ + +/* With some changes from Kyösti Mälkki and even + Frodo Looijaard */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define DEFAULT_BASE 0x378 +static int base=0; +static unsigned char port_data = 0; + +/* ----- global defines ----------------------------------------------- */ +#define DEB(x) /* should be reasonable open, close &c. */ +#define DEB2(x) /* low level debugging - very slow */ +#define DEBE(x) x /* error messages */ +#define DEBINIT(x) x /* detection status messages */ + +/* --- Convenience defines for the parallel port: */ +#define BASE (unsigned int)(data) +#define DATA BASE /* Centronics data port */ +#define STAT (BASE+1) /* Centronics status port */ +#define CTRL (BASE+2) /* Centronics control port */ + + +/* ----- local functions ---------------------------------------------- */ + + +static void bit_elv_setscl(void *data, int state) +{ + if (state) { + port_data &= 0xfe; + } else { + port_data |=1; + } + outb(port_data, DATA); +} + +static void bit_elv_setsda(void *data, int state) +{ + if (state) { + port_data &=0xfd; + } else { + port_data |=2; + } + outb(port_data, DATA); +} + +static int bit_elv_getscl(void *data) +{ + return ( 0 == ( (inb_p(STAT)) & 0x08 ) ); +} + +static int bit_elv_getsda(void *data) +{ + return ( 0 == ( (inb_p(STAT)) & 0x40 ) ); +} + +static int bit_elv_init(void) +{ + if (!request_region(base, (base == 0x3bc) ? 3 : 8, + "i2c (ELV adapter)")) + return -ENODEV; + + if (inb(base+1) & 0x80) { /* BUSY should be high */ + DEBINIT(printk(KERN_DEBUG "i2c-elv.o: Busy was low.\n")); + goto fail; + } + + outb(0x0c,base+2); /* SLCT auf low */ + udelay(400); + if (!(inb(base+1) && 0x10)) { + outb(0x04,base+2); + DEBINIT(printk(KERN_DEBUG "i2c-elv.o: Select was high.\n")); + goto fail; + } + + port_data = 0; + bit_elv_setsda((void*)base,1); + bit_elv_setscl((void*)base,1); + return 0; + +fail: + release_region(base , (base == 0x3bc) ? 3 : 8); + return -ENODEV; +} + +/* ------------------------------------------------------------------------ + * Encapsulate the above functions in the correct operations structure. + * This is only done when more than one hardware adapter is supported. + */ +static struct i2c_algo_bit_data bit_elv_data = { + .setsda = bit_elv_setsda, + .setscl = bit_elv_setscl, + .getsda = bit_elv_getsda, + .getscl = bit_elv_getscl, + .udelay = 80, + .mdelay = 80, + .timeout = HZ +}; + +static struct i2c_adapter bit_elv_ops = { + .owner = THIS_MODULE, + .algo_data = &bit_elv_data, + .name = "ELV Parallel port adaptor", +}; + +static int __init i2c_bitelv_init(void) +{ + printk(KERN_INFO "i2c ELV parallel port adapter driver\n"); + if (base==0) { + /* probe some values */ + base=DEFAULT_BASE; + bit_elv_data.data=(void*)DEFAULT_BASE; + if (bit_elv_init()==0) { + if(i2c_bit_add_bus(&bit_elv_ops) < 0) + return -ENODEV; + } else { + return -ENODEV; + } + } else { + i2c_set_adapdata(&bit_elv_ops, (void *)base); + if (bit_elv_init()==0) { + if(i2c_bit_add_bus(&bit_elv_ops) < 0) + return -ENODEV; + } else { + return -ENODEV; + } + } + printk(KERN_DEBUG "i2c-elv.o: found device at %#x.\n",base); + return 0; +} + +static void __exit i2c_bitelv_exit(void) +{ + i2c_bit_del_bus(&bit_elv_ops); + release_region(base , (base == 0x3bc) ? 3 : 8); +} + +MODULE_AUTHOR("Simon G. Vogl "); +MODULE_DESCRIPTION("I2C-Bus adapter routines for ELV parallel port adapter"); +MODULE_LICENSE("GPL"); + +MODULE_PARM(base, "i"); + +module_init(i2c_bitelv_init); +module_exit(i2c_bitelv_exit); diff -prauN linux-2.6.0-test5/drivers/i2c/busses/i2c-frodo.c wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-frodo.c --- linux-2.6.0-test5/drivers/i2c/busses/i2c-frodo.c 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-frodo.c 2003-09-25 19:15:55.000000000 -0700 @@ -0,0 +1,85 @@ + +/* + * linux/drivers/i2c/i2c-frodo.c + * + * Author: Abraham van der Merwe + * + * An I2C adapter driver for the 2d3D, Inc. StrongARM SA-1110 + * Development board (Frodo). + * + * This source code is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * version 2 as published by the Free Software Foundation. + */ + +#include +#include +#include +#include +#include +#include +#include + + +static void frodo_setsda (void *data,int state) +{ + if (state) + FRODO_CPLD_I2C |= FRODO_I2C_SDA_OUT; + else + FRODO_CPLD_I2C &= ~FRODO_I2C_SDA_OUT; +} + +static void frodo_setscl (void *data,int state) +{ + if (state) + FRODO_CPLD_I2C |= FRODO_I2C_SCL_OUT; + else + FRODO_CPLD_I2C &= ~FRODO_I2C_SCL_OUT; +} + +static int frodo_getsda (void *data) +{ + return ((FRODO_CPLD_I2C & FRODO_I2C_SDA_IN) != 0); +} + +static int frodo_getscl (void *data) +{ + return ((FRODO_CPLD_I2C & FRODO_I2C_SCL_IN) != 0); +} + +static struct i2c_algo_bit_data bit_frodo_data = { + .setsda = frodo_setsda, + .setscl = frodo_setscl, + .getsda = frodo_getsda, + .getscl = frodo_getscl, + .udelay = 80, + .mdelay = 80, + .timeout = HZ +}; + +static struct i2c_adapter frodo_ops = { + .owner = THIS_MODULE, + .id = I2C_HW_B_FRODO, + .algo_data = &bit_frodo_data, + .dev = { + .name = "Frodo adapter driver", + }, +}; + +static int __init i2c_frodo_init (void) +{ + return i2c_bit_add_bus(&frodo_ops); +} + +static void __exit i2c_frodo_exit (void) +{ + i2c_bit_del_bus(&frodo_ops); +} + +MODULE_AUTHOR ("Abraham van der Merwe "); +MODULE_DESCRIPTION ("I2C-Bus adapter routines for Frodo"); +MODULE_LICENSE ("GPL"); + +module_init (i2c_frodo_init); +module_exit (i2c_frodo_exit); + diff -prauN linux-2.6.0-test5/drivers/i2c/busses/i2c-i801.c wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-i801.c --- linux-2.6.0-test5/drivers/i2c/busses/i2c-i801.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-i801.c 2003-09-25 19:15:55.000000000 -0700 @@ -540,7 +540,6 @@ static struct i2c_algorithm smbus_algori static struct i2c_adapter i801_adapter = { .owner = THIS_MODULE, - .id = I2C_ALGO_SMBUS | I2C_HW_SMBUS_I801, .class = I2C_ADAP_CLASS_SMBUS, .algo = &smbus_algorithm, .name = "unset", @@ -598,7 +597,7 @@ static int __devinit i801_probe(struct p /* set up the driverfs linkage to our parent device */ i801_adapter.dev.parent = &dev->dev; - snprintf(i801_adapter.name, DEVICE_NAME_SIZE, + snprintf(i801_adapter.name, I2C_NAME_SIZE, "SMBus I801 adapter at %04x", i801_smba); return i2c_add_adapter(&i801_adapter); } @@ -617,7 +616,6 @@ static struct pci_driver i801_driver = { static int __init i2c_i801_init(void) { - printk(KERN_INFO "i2c-i801 version %s (%s)\n", I2C_VERSION, I2C_DATE); return pci_module_init(&i801_driver); } diff -prauN linux-2.6.0-test5/drivers/i2c/busses/i2c-i810.c wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-i810.c --- linux-2.6.0-test5/drivers/i2c/busses/i2c-i810.c 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-i810.c 2003-09-25 19:15:55.000000000 -0700 @@ -0,0 +1,257 @@ +/* + i2c-i810.c - Part of lm_sensors, Linux kernel modules for hardware + monitoring + Copyright (c) 1998, 1999, 2000 Frodo Looijaard , + Philip Edelbrock , + Ralph Metzler , and + Mark D. Studebaker + + Based on code written by Ralph Metzler and + Simon Vogl + + 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 of the License, 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, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ +/* + This interfaces to the I810/I815 to provide access to + the DDC Bus and the I2C Bus. + + SUPPORTED DEVICES PCI ID + i810AA 7121 + i810AB 7123 + i810E 7125 + i815 1132 +*/ + +#include +#include +#include +#include +#include +#include +#include + +/* GPIO register locations */ +#define I810_IOCONTROL_OFFSET 0x5000 +#define I810_HVSYNC 0x00 /* not used */ +#define I810_GPIOA 0x10 +#define I810_GPIOB 0x14 + +/* bit locations in the registers */ +#define SCL_DIR_MASK 0x0001 +#define SCL_DIR 0x0002 +#define SCL_VAL_MASK 0x0004 +#define SCL_VAL_OUT 0x0008 +#define SCL_VAL_IN 0x0010 +#define SDA_DIR_MASK 0x0100 +#define SDA_DIR 0x0200 +#define SDA_VAL_MASK 0x0400 +#define SDA_VAL_OUT 0x0800 +#define SDA_VAL_IN 0x1000 + +/* initialization states */ +#define INIT1 0x1 +#define INIT2 0x2 +#define INIT3 0x4 + +/* delays */ +#define CYCLE_DELAY 10 +#define TIMEOUT (HZ / 2) + +static void *ioaddr; + +/* The i810 GPIO registers have individual masks for each bit + so we never have to read before writing. Nice. */ + +static void bit_i810i2c_setscl(void *data, int val) +{ + writel((val ? SCL_VAL_OUT : 0) | SCL_DIR | SCL_DIR_MASK | SCL_VAL_MASK, + ioaddr + I810_GPIOB); + readl(ioaddr + I810_GPIOB); /* flush posted write */ +} + +static void bit_i810i2c_setsda(void *data, int val) +{ + writel((val ? SDA_VAL_OUT : 0) | SDA_DIR | SDA_DIR_MASK | SDA_VAL_MASK, + ioaddr + I810_GPIOB); + readl(ioaddr + I810_GPIOB); /* flush posted write */ +} + +/* The GPIO pins are open drain, so the pins could always remain outputs. + However, some chip versions don't latch the inputs unless they + are set as inputs. + We rely on the i2c-algo-bit routines to set the pins high before + reading the input from other chips. Following guidance in the 815 + prog. ref. guide, we do a "dummy write" of 0 to the register before + reading which forces the input value to be latched. We presume this + applies to the 810 as well; shouldn't hurt anyway. This is necessary to get + i2c_algo_bit bit_test=1 to pass. */ + +static int bit_i810i2c_getscl(void *data) +{ + writel(SCL_DIR_MASK, ioaddr + I810_GPIOB); + writel(0, ioaddr + I810_GPIOB); + return (0 != (readl(ioaddr + I810_GPIOB) & SCL_VAL_IN)); +} + +static int bit_i810i2c_getsda(void *data) +{ + writel(SDA_DIR_MASK, ioaddr + I810_GPIOB); + writel(0, ioaddr + I810_GPIOB); + return (0 != (readl(ioaddr + I810_GPIOB) & SDA_VAL_IN)); +} + +static void bit_i810ddc_setscl(void *data, int val) +{ + writel((val ? SCL_VAL_OUT : 0) | SCL_DIR | SCL_DIR_MASK | SCL_VAL_MASK, + ioaddr + I810_GPIOA); + readl(ioaddr + I810_GPIOA); /* flush posted write */ +} + +static void bit_i810ddc_setsda(void *data, int val) +{ + writel((val ? SDA_VAL_OUT : 0) | SDA_DIR | SDA_DIR_MASK | SDA_VAL_MASK, + ioaddr + I810_GPIOA); + readl(ioaddr + I810_GPIOA); /* flush posted write */ +} + +static int bit_i810ddc_getscl(void *data) +{ + writel(SCL_DIR_MASK, ioaddr + I810_GPIOA); + writel(0, ioaddr + I810_GPIOA); + return (0 != (readl(ioaddr + I810_GPIOA) & SCL_VAL_IN)); +} + +static int bit_i810ddc_getsda(void *data) +{ + writel(SDA_DIR_MASK, ioaddr + I810_GPIOA); + writel(0, ioaddr + I810_GPIOA); + return (0 != (readl(ioaddr + I810_GPIOA) & SDA_VAL_IN)); +} + +static int config_i810(struct pci_dev *dev) +{ + unsigned long cadr; + + /* map I810 memory */ + cadr = dev->resource[1].start; + cadr += I810_IOCONTROL_OFFSET; + cadr &= PCI_BASE_ADDRESS_MEM_MASK; + ioaddr = ioremap_nocache(cadr, 0x1000); + if (ioaddr) { + bit_i810i2c_setscl(NULL, 1); + bit_i810i2c_setsda(NULL, 1); + bit_i810ddc_setscl(NULL, 1); + bit_i810ddc_setsda(NULL, 1); + return 0; + } + return -ENODEV; +} + +static struct i2c_algo_bit_data i810_i2c_bit_data = { + .setsda = bit_i810i2c_setsda, + .setscl = bit_i810i2c_setscl, + .getsda = bit_i810i2c_getsda, + .getscl = bit_i810i2c_getscl, + .udelay = CYCLE_DELAY, + .mdelay = CYCLE_DELAY, + .timeout = TIMEOUT, +}; + +static struct i2c_adapter i810_i2c_adapter = { + .owner = THIS_MODULE, + .name = "I810/I815 I2C Adapter", + .algo_data = &i810_i2c_bit_data, +}; + +static struct i2c_algo_bit_data i810_ddc_bit_data = { + .setsda = bit_i810ddc_setsda, + .setscl = bit_i810ddc_setscl, + .getsda = bit_i810ddc_getsda, + .getscl = bit_i810ddc_getscl, + .udelay = CYCLE_DELAY, + .mdelay = CYCLE_DELAY, + .timeout = TIMEOUT, +}; + +static struct i2c_adapter i810_ddc_adapter = { + .owner = THIS_MODULE, + .name = "I810/I815 DDC Adapter", + .algo_data = &i810_ddc_bit_data, +}; + +static struct pci_device_id i810_ids[] __devinitdata = { + { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82810_IG1) }, + { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82810_IG3) }, + { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82810E_IG) }, + { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82815_CGC) }, + { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82845G_IG) }, + { 0, }, +}; + +static int __devinit i810_probe(struct pci_dev *dev, const struct pci_device_id *id) +{ + int retval; + + retval = config_i810(dev); + if (retval) + return retval; + dev_info(&dev->dev, "i810/i815 i2c device found.\n"); + + /* set up the sysfs linkage to our parent device */ + i810_i2c_adapter.dev.parent = &dev->dev; + i810_ddc_adapter.dev.parent = &dev->dev; + + retval = i2c_bit_add_bus(&i810_i2c_adapter); + if (retval) + return retval; + retval = i2c_bit_add_bus(&i810_ddc_adapter); + if (retval) + i2c_bit_del_bus(&i810_i2c_adapter); + return retval; +} + +static void __devexit i810_remove(struct pci_dev *dev) +{ + i2c_bit_del_bus(&i810_ddc_adapter); + i2c_bit_del_bus(&i810_i2c_adapter); + iounmap(ioaddr); +} + +static struct pci_driver i810_driver = { + .name = "i810 smbus", + .id_table = i810_ids, + .probe = i810_probe, + .remove = __devexit_p(i810_remove), +}; + +static int __init i2c_i810_init(void) +{ + return pci_module_init(&i810_driver); +} + +static void __exit i2c_i810_exit(void) +{ + pci_unregister_driver(&i810_driver); +} + +MODULE_AUTHOR("Frodo Looijaard , " + "Philip Edelbrock , " + "Ralph Metzler , " + "and Mark D. Studebaker "); +MODULE_DESCRIPTION("I810/I815 I2C/DDC driver"); +MODULE_LICENSE("GPL"); + +module_init(i2c_i810_init); +module_exit(i2c_i810_exit); diff -prauN linux-2.6.0-test5/drivers/i2c/busses/i2c-ibm_iic.c wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-ibm_iic.c --- linux-2.6.0-test5/drivers/i2c/busses/i2c-ibm_iic.c 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-ibm_iic.c 2003-09-25 19:15:55.000000000 -0700 @@ -0,0 +1,729 @@ +/* + * drivers/i2c/i2c-ibm_iic.c + * + * Support for the IIC peripheral on IBM PPC 4xx + * + * Copyright (c) 2003 Zultys Technologies. + * Eugene Surovegin or + * + * Based on original work by + * Ian DaSilva + * Armin Kuster + * Matt Porter + * + * Copyright 2000-2003 MontaVista Software Inc. + * + * Original driver version was highly leveraged from i2c-elektor.c + * + * Copyright 1995-97 Simon G. Vogl + * 1998-99 Hans Berglund + * + * With some changes from Kyösti Mälkki + * and even Frodo Looijaard + * + * 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 of the License, or (at your + * option) any later version. + * + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "i2c-ibm_iic.h" + +#define DRIVER_VERSION "2.0" + +MODULE_DESCRIPTION("IBM IIC driver v" DRIVER_VERSION); +MODULE_LICENSE("GPL"); + +static int iic_scan = 0; +MODULE_PARM(iic_scan, "i"); +MODULE_PARM_DESC(iic_scan, "Scan for active chips on the bus"); + +static int iic_force_poll = 0; +MODULE_PARM(iic_force_poll, "i"); +MODULE_PARM_DESC(iic_force_poll, "Force polling mode"); + +static int iic_force_fast = 0; +MODULE_PARM(iic_force_fast, "i"); +MODULE_PARM_DESC(iic_fast_poll, "Force fast mode (400 kHz)"); + +#define DBG_LEVEL 0 + +#ifdef DBG +#undef DBG +#endif + +#ifdef DBG2 +#undef DBG2 +#endif + +#if DBG_LEVEL > 0 +# define DBG(x...) printk(KERN_DEBUG "ibm-iic" ##x) +#else +# define DBG(x...) ((void)0) +#endif +#if DBG_LEVEL > 1 +# define DBG2(x...) DBG( ##x ) +#else +# define DBG2(x...) ((void)0) +#endif +#if DBG_LEVEL > 2 +static void dump_iic_regs(const char* header, struct ibm_iic_private* dev) +{ + volatile struct iic_regs *iic = dev->vaddr; + printk(KERN_DEBUG "ibm-iic%d: %s\n", dev->idx, header); + printk(KERN_DEBUG " cntl = 0x%02x, mdcntl = 0x%02x\n" + KERN_DEBUG " sts = 0x%02x, extsts = 0x%02x\n" + KERN_DEBUG " clkdiv = 0x%02x, xfrcnt = 0x%02x\n" + KERN_DEBUG " xtcntlss = 0x%02x, directcntl = 0x%02x\n", + in_8(&iic->cntl), in_8(&iic->mdcntl), in_8(&iic->sts), + in_8(&iic->extsts), in_8(&iic->clkdiv), in_8(&iic->xfrcnt), + in_8(&iic->xtcntlss), in_8(&iic->directcntl)); +} +# define DUMP_REGS(h,dev) dump_iic_regs((h),(dev)) +#else +# define DUMP_REGS(h,dev) ((void)0) +#endif + +/* Enable/disable interrupt generation */ +static inline void iic_interrupt_mode(struct ibm_iic_private* dev, int enable) +{ + out_8(&dev->vaddr->intmsk, enable ? INTRMSK_EIMTC : 0); +} + +/* + * Initialize IIC interface. + */ +static void iic_dev_init(struct ibm_iic_private* dev) +{ + volatile struct iic_regs *iic = dev->vaddr; + + DBG("%d: init\n", dev->idx); + + /* Clear master address */ + out_8(&iic->lmadr, 0); + out_8(&iic->hmadr, 0); + + /* Clear slave address */ + out_8(&iic->lsadr, 0); + out_8(&iic->hsadr, 0); + + /* Clear status & extended status */ + out_8(&iic->sts, STS_SCMP | STS_IRQA); + out_8(&iic->extsts, EXTSTS_IRQP | EXTSTS_IRQD | EXTSTS_LA + | EXTSTS_ICT | EXTSTS_XFRA); + + /* Set clock divider */ + out_8(&iic->clkdiv, dev->clckdiv); + + /* Clear transfer count */ + out_8(&iic->xfrcnt, 0); + + /* Clear extended control and status */ + out_8(&iic->xtcntlss, XTCNTLSS_SRC | XTCNTLSS_SRS | XTCNTLSS_SWC + | XTCNTLSS_SWS); + + /* Clear control register */ + out_8(&iic->cntl, 0); + + /* Enable interrupts if possible */ + iic_interrupt_mode(dev, dev->irq >= 0); + + /* Set mode control */ + out_8(&iic->mdcntl, MDCNTL_FMDB | MDCNTL_EINT | MDCNTL_EUBS + | (dev->fast_mode ? MDCNTL_FSM : 0)); + + DUMP_REGS("iic_init", dev); +} + +/* + * Reset IIC interface + */ +static void iic_dev_reset(struct ibm_iic_private* dev) +{ + volatile struct iic_regs *iic = dev->vaddr; + int i; + u8 dc; + + DBG("%d: soft reset\n", dev->idx); + DUMP_REGS("reset", dev); + + /* Place chip in the reset state */ + out_8(&iic->xtcntlss, XTCNTLSS_SRST); + + /* Check if bus is free */ + dc = in_8(&iic->directcntl); + if (!DIRCTNL_FREE(dc)){ + DBG("%d: trying to regain bus control\n", dev->idx); + + /* Try to set bus free state */ + out_8(&iic->directcntl, DIRCNTL_SDAC | DIRCNTL_SCC); + + /* Wait until we regain bus control */ + for (i = 0; i < 100; ++i){ + dc = in_8(&iic->directcntl); + if (DIRCTNL_FREE(dc)) + break; + + /* Toggle SCL line */ + dc ^= DIRCNTL_SCC; + out_8(&iic->directcntl, dc); + udelay(10); + dc ^= DIRCNTL_SCC; + out_8(&iic->directcntl, dc); + + /* be nice */ + cond_resched(); + } + } + + /* Remove reset */ + out_8(&iic->xtcntlss, 0); + + /* Reinitialize interface */ + iic_dev_init(dev); +} + +/* + * IIC interrupt handler + */ +static irqreturn_t iic_handler(int irq, void *dev_id, struct pt_regs *regs) +{ + struct ibm_iic_private* dev = (struct ibm_iic_private*)dev_id; + volatile struct iic_regs* iic = dev->vaddr; + + DBG2("%d: irq handler, STS = 0x%02x, EXTSTS = 0x%02x\n", + dev->idx, in_8(&iic->sts), in_8(&iic->extsts)); + + /* Acknowledge IRQ and wakeup iic_wait_for_tc */ + out_8(&iic->sts, STS_IRQA | STS_SCMP); + wake_up_interruptible(&dev->wq); + + return IRQ_HANDLED; +} + +/* + * Get master transfer result and clear errors if any. + * Returns the number of actually transferred bytes or error (<0) + */ +static int iic_xfer_result(struct ibm_iic_private* dev) +{ + volatile struct iic_regs *iic = dev->vaddr; + + if (unlikely(in_8(&iic->sts) & STS_ERR)){ + DBG("%d: xfer error, EXTSTS = 0x%02x\n", dev->idx, + in_8(&iic->extsts)); + + /* Clear errors and possible pending IRQs */ + out_8(&iic->extsts, EXTSTS_IRQP | EXTSTS_IRQD | + EXTSTS_LA | EXTSTS_ICT | EXTSTS_XFRA); + + /* Flush master data buffer */ + out_8(&iic->mdcntl, in_8(&iic->mdcntl) | MDCNTL_FMDB); + + /* Is bus free? + * If error happened during combined xfer + * IIC interface is usually stuck in some strange + * state, the only way out - soft reset. + */ + if ((in_8(&iic->extsts) & EXTSTS_BCS_MASK) != EXTSTS_BCS_FREE){ + DBG("%d: bus is stuck, resetting\n", dev->idx); + iic_dev_reset(dev); + } + return -EREMOTEIO; + } + else + return in_8(&iic->xfrcnt) & XFRCNT_MTC_MASK; +} + +/* + * Try to abort active transfer. + */ +static void iic_abort_xfer(struct ibm_iic_private* dev) +{ + volatile struct iic_regs *iic = dev->vaddr; + unsigned long x; + + DBG("%d: iic_abort_xfer\n", dev->idx); + + out_8(&iic->cntl, CNTL_HMT); + + /* + * Wait for the abort command to complete. + * It's not worth to be optimized, just poll (timeout >= 1 tick) + */ + x = jiffies + 2; + while ((in_8(&iic->extsts) & EXTSTS_BCS_MASK) != EXTSTS_BCS_FREE){ + if (time_after(jiffies, x)){ + DBG("%d: abort timeout, resetting...\n", dev->idx); + iic_dev_reset(dev); + return; + } + schedule(); + } + + /* Just to clear errors */ + iic_xfer_result(dev); +} + +/* + * Wait for master transfer to complete. + * It puts current process to sleep until we get interrupt or timeout expires. + * Returns the number of transferred bytes or error (<0) + */ +static int iic_wait_for_tc(struct ibm_iic_private* dev){ + + volatile struct iic_regs *iic = dev->vaddr; + int ret = 0; + + if (dev->irq >= 0){ + /* Interrupt mode */ + wait_queue_t wait; + init_waitqueue_entry(&wait, current); + + add_wait_queue(&dev->wq, &wait); + set_current_state(TASK_INTERRUPTIBLE); + if (in_8(&iic->sts) & STS_PT) + schedule_timeout(dev->adap.timeout * HZ); + set_current_state(TASK_RUNNING); + remove_wait_queue(&dev->wq, &wait); + + if (unlikely(signal_pending(current))){ + DBG("%d: wait interrupted\n", dev->idx); + ret = -ERESTARTSYS; + } else if (unlikely(in_8(&iic->sts) & STS_PT)){ + DBG("%d: wait timeout\n", dev->idx); + ret = -ETIMEDOUT; + } + } + else { + /* Polling mode */ + unsigned long x = jiffies + dev->adap.timeout * HZ; + + while (in_8(&iic->sts) & STS_PT){ + if (unlikely(time_after(jiffies, x))){ + DBG("%d: poll timeout\n", dev->idx); + ret = -ETIMEDOUT; + break; + } + + if (unlikely(signal_pending(current))){ + DBG("%d: poll interrupted\n", dev->idx); + ret = -ERESTARTSYS; + break; + } + schedule(); + } + } + + if (unlikely(ret < 0)) + iic_abort_xfer(dev); + else + ret = iic_xfer_result(dev); + + DBG2("%d: iic_wait_for_tc -> %d\n", dev->idx, ret); + + return ret; +} + +/* + * Low level master transfer routine + */ +static int iic_xfer_bytes(struct ibm_iic_private* dev, struct i2c_msg* pm, + int combined_xfer) +{ + volatile struct iic_regs *iic = dev->vaddr; + char* buf = pm->buf; + int i, j, loops, ret = 0; + int len = pm->len; + + u8 cntl = (in_8(&iic->cntl) & CNTL_AMD) | CNTL_PT; + if (pm->flags & I2C_M_RD) + cntl |= CNTL_RW; + + loops = (len + 3) / 4; + for (i = 0; i < loops; ++i, len -= 4){ + int count = len > 4 ? 4 : len; + u8 cmd = cntl | ((count - 1) << CNTL_TCT_SHIFT); + + if (!(cntl & CNTL_RW)) + for (j = 0; j < count; ++j) + out_8((volatile u8*)&iic->mdbuf, *buf++); + + if (i < loops - 1) + cmd |= CNTL_CHT; + else if (combined_xfer) + cmd |= CNTL_RPST; + + DBG2("%d: xfer_bytes, %d, CNTL = 0x%02x\n", dev->idx, count, cmd); + + /* Start transfer */ + out_8(&iic->cntl, cmd); + + /* Wait for completion */ + ret = iic_wait_for_tc(dev); + + if (unlikely(ret < 0)) + break; + else if (unlikely(ret != count)){ + DBG("%d: xfer_bytes, requested %d, transfered %d\n", + dev->idx, count, ret); + + /* If it's not a last part of xfer, abort it */ + if (combined_xfer || (i < loops - 1)) + iic_abort_xfer(dev); + + ret = -EREMOTEIO; + break; + } + + if (cntl & CNTL_RW) + for (j = 0; j < count; ++j) + *buf++ = in_8((volatile u8*)&iic->mdbuf); + } + + return ret > 0 ? 0 : ret; +} + +/* + * Set target slave address for master transfer + */ +static inline void iic_address(struct ibm_iic_private* dev, struct i2c_msg* msg) +{ + volatile struct iic_regs *iic = dev->vaddr; + u16 addr = msg->addr; + + DBG2("%d: iic_address, 0x%03x (%d-bit)\n", dev->idx, + addr, msg->flags & I2C_M_TEN ? 10 : 7); + + if (msg->flags & I2C_M_TEN){ + out_8(&iic->cntl, CNTL_AMD); + out_8(&iic->lmadr, addr); + out_8(&iic->hmadr, 0xf0 | ((addr >> 7) & 0x06)); + } + else { + out_8(&iic->cntl, 0); + out_8(&iic->lmadr, addr << 1); + } +} + +static inline int iic_invalid_address(const struct i2c_msg* p) +{ + return (p->addr > 0x3ff) || (!(p->flags & I2C_M_TEN) && (p->addr > 0x7f)); +} + +static inline int iic_address_neq(const struct i2c_msg* p1, + const struct i2c_msg* p2) +{ + return (p1->addr != p2->addr) + || ((p1->flags & I2C_M_TEN) != (p2->flags & I2C_M_TEN)); +} + +/* + * Generic master transfer entrypoint. + * Returns the number of processed messages or error (<0) + */ +static int iic_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num) +{ + struct ibm_iic_private* dev = (struct ibm_iic_private*)(i2c_get_adapdata(adap)); + volatile struct iic_regs *iic = dev->vaddr; + int i, ret = 0; + + DBG2("%d: iic_xfer, %d msg(s)\n", dev->idx, num); + + if (!num) + return 0; + + /* Check the sanity of the passed messages. + * Uhh, generic i2c layer is more suitable place for such code... + */ + if (unlikely(iic_invalid_address(&msgs[0]))){ + DBG("%d: invalid address 0x%03x (%d-bit)\n", dev->idx, + msgs[0].addr, msgs[0].flags & I2C_M_TEN ? 10 : 7); + return -EINVAL; + } + for (i = 0; i < num; ++i){ + if (unlikely(msgs[i].len <= 0)){ + DBG("%d: invalid len %d in msg[%d]\n", dev->idx, + msgs[i].len, i); + return -EINVAL; + } + if (unlikely(iic_address_neq(&msgs[0], &msgs[i]))){ + DBG("%d: invalid addr in msg[%d]\n", dev->idx, i); + return -EINVAL; + } + } + + /* Check bus state */ + if (unlikely((in_8(&iic->extsts) & EXTSTS_BCS_MASK) != EXTSTS_BCS_FREE)){ + DBG("%d: iic_xfer, bus is not free\n", dev->idx); + + /* Usually it means something serious has happend. + * We *cannot* have unfinished previous transfer + * so it doesn't make any sense to try to stop it. + * Probably we were not able to recover from the + * previous error. + * The only *reasonable* thing I can think of here + * is soft reset. --ebs + */ + iic_dev_reset(dev); + + if ((in_8(&iic->extsts) & EXTSTS_BCS_MASK) != EXTSTS_BCS_FREE){ + DBG("%d: iic_xfer, bus is still not free\n", dev->idx); + return -EREMOTEIO; + } + } + else { + /* Flush master data buffer (just in case) */ + out_8(&iic->mdcntl, in_8(&iic->mdcntl) | MDCNTL_FMDB); + } + + /* Load slave address */ + iic_address(dev, &msgs[0]); + + /* Do real transfer */ + for (i = 0; i < num && !ret; ++i) + ret = iic_xfer_bytes(dev, &msgs[i], i < num - 1); + + return ret < 0 ? ret : num; +} + +static u32 iic_func(struct i2c_adapter *adap) +{ + return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL | I2C_FUNC_10BIT_ADDR; +} + +static struct i2c_algorithm iic_algo = { + .name = "IBM IIC algorithm", + .id = I2C_ALGO_OCP, + .master_xfer = iic_xfer, + .smbus_xfer = NULL, + .slave_send = NULL, + .slave_recv = NULL, + .algo_control = NULL, + .functionality = iic_func +}; + +/* + * Scan bus for valid 7-bit addresses (ie things that ACK on 1 byte read) + * We only scan range [0x08 - 0x77], all other addresses are reserved anyway + */ +static void __devinit iic_scan_bus(struct ibm_iic_private* dev) +{ + int found = 0; + char dummy; + struct i2c_msg msg = { + .buf = &dummy, + .len = sizeof(dummy), + .flags = I2C_M_RD + }; + + printk(KERN_INFO "ibm-iic%d: scanning bus...\n" KERN_INFO, dev->idx); + + for (msg.addr = 8; msg.addr < 0x78; ++msg.addr) + if (iic_xfer(&dev->adap, &msg, 1) == 1){ + ++found; + printk(" 0x%02x", msg.addr); + } + + printk("%sibm-iic%d: %d device(s) detected\n", + found ? "\n" KERN_INFO : "", dev->idx, found); +} + +/* + * Calculates IICx_CLCKDIV value for a specific OPB clock frequency + */ +static inline u8 iic_clckdiv(unsigned int opb) +{ + /* Compatibility kludge, should go away after all cards + * are fixed to fill correct value for opbfreq. + * Previous driver version used hardcoded divider value 4, + * it corresponds to OPB frequency from the range (40, 50] MHz + */ + if (!opb){ + printk(KERN_WARNING "ibm-iic: using compatibility value for OPB freq," + " fix your board specific setup\n"); + opb = 50000000; + } + + /* Convert to MHz */ + opb /= 1000000; + + if (opb < 20 || opb > 150){ + printk(KERN_CRIT "ibm-iic: invalid OPB clock frequency %u MHz\n", + opb); + opb = opb < 20 ? 20 : 150; + } + return (u8)((opb + 9) / 10 - 1); +} + +/* + * Register single IIC interface + */ +static int __devinit iic_probe(struct ocp_device *ocp){ + + struct ibm_iic_private* dev; + struct i2c_adapter* adap; + int ret; + bd_t* bd = (bd_t*)&__res; + + if (!(dev = kmalloc(sizeof(*dev), GFP_KERNEL))){ + printk(KERN_CRIT "ibm-iic: failed to allocate device data\n"); + return -ENOMEM; + } + + memset(dev, 0, sizeof(*dev)); + dev->idx = ocp->num; + ocp_set_drvdata(ocp, dev); + + if (!(dev->vaddr = ioremap(ocp->paddr, sizeof(struct iic_regs)))){ + printk(KERN_CRIT "ibm-iic%d: failed to ioremap device registers\n", + dev->idx); + ret = -ENXIO; + goto fail2; + } + + init_waitqueue_head(&dev->wq); + + dev->irq = iic_force_poll ? -1 : ocp->irq; + if (dev->irq >= 0){ + /* Disable interrupts until we finish intialization, + assumes level-sensitive IRQ setup... + */ + iic_interrupt_mode(dev, 0); + if (request_irq(dev->irq, iic_handler, 0, "IBM IIC", dev)){ + printk(KERN_ERR "ibm-iic%d: request_irq %d failed\n", + dev->idx, dev->irq); + /* Fallback to the polling mode */ + dev->irq = -1; + } + } + + if (dev->irq < 0) + printk(KERN_WARNING "ibm-iic%d: using polling mode\n", + dev->idx); + + /* Board specific settings */ + BUG_ON(dev->idx >= sizeof(bd->bi_iic_fast) / sizeof(bd->bi_iic_fast[0])); + dev->fast_mode = iic_force_fast ? 1 : bd->bi_iic_fast[dev->idx]; + + /* clckdiv is the same for *all* IIC interfaces, + * but I'd rather make a copy than introduce another global. --ebs + */ + dev->clckdiv = iic_clckdiv(bd->bi_opb_busfreq); + DBG("%d: clckdiv = %d\n", dev->idx, dev->clckdiv); + + /* Initialize IIC interface */ + iic_dev_init(dev); + + /* Register it with i2c layer */ + adap = &dev->adap; + strcpy(adap->dev.name, "IBM IIC"); + i2c_set_adapdata(adap, dev); + adap->id = I2C_HW_OCP | iic_algo.id; + adap->algo = &iic_algo; + adap->client_register = NULL; + adap->client_unregister = NULL; + adap->timeout = 1; + adap->retries = 1; + + if ((ret = i2c_add_adapter(adap)) != 0){ + printk(KERN_CRIT "ibm-iic%d: failed to register i2c adapter\n", + dev->idx); + goto fail; + } + + printk(KERN_INFO "ibm-iic%d: using %s mode\n", dev->idx, + dev->fast_mode ? "fast (400 kHz)" : "standard (100 kHz)"); + + /* Scan bus if requested by user */ + if (iic_scan) + iic_scan_bus(dev); + + return 0; + +fail: + if (dev->irq >= 0){ + iic_interrupt_mode(dev, 0); + free_irq(dev->irq, dev); + } + + iounmap((void*)dev->vaddr); +fail2: + ocp_set_drvdata(ocp, 0); + kfree(dev); + return ret; +} + +/* + * Cleanup initialized IIC interface + */ +static void __devexit iic_remove(struct ocp_device *ocp) +{ + struct ibm_iic_private* dev = (struct ibm_iic_private*)ocp_get_drvdata(ocp); + BUG_ON(dev == NULL); + if (i2c_del_adapter(&dev->adap)){ + printk(KERN_CRIT "ibm-iic%d: failed to delete i2c adapter :(\n", + dev->idx); + /* That's *very* bad, just shutdown IRQ ... */ + if (dev->irq >= 0){ + iic_interrupt_mode(dev, 0); + free_irq(dev->irq, dev); + dev->irq = -1; + } + } else { + if (dev->irq >= 0){ + iic_interrupt_mode(dev, 0); + free_irq(dev->irq, dev); + } + iounmap((void*)dev->vaddr); + kfree(dev); + } +} + +static struct ocp_device_id ibm_iic_ids[] __devinitdata = +{ + { .vendor = OCP_VENDOR_IBM, .device = OCP_FUNC_IIC }, + { .vendor = OCP_VENDOR_INVALID } +}; + +MODULE_DEVICE_TABLE(ocp, ibm_iic_ids); + +static struct ocp_driver ibm_iic_driver = +{ + .name = "ocp_iic", + .id_table = ibm_iic_ids, + .probe = iic_probe, + .remove = __devexit_p(iic_remove), +#if defined(CONFIG_PM) + .suspend = NULL, + .resume = NULL, +#endif +}; + +static int __init iic_init(void) +{ + printk(KERN_INFO "IBM IIC driver v" DRIVER_VERSION "\n"); + return ocp_module_init(&ibm_iic_driver); +} + +static void __exit iic_exit(void) +{ + ocp_unregister_driver(&ibm_iic_driver); +} + +module_init(iic_init); +module_exit(iic_exit); diff -prauN linux-2.6.0-test5/drivers/i2c/busses/i2c-ibm_iic.h wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-ibm_iic.h --- linux-2.6.0-test5/drivers/i2c/busses/i2c-ibm_iic.h 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-ibm_iic.h 2003-09-25 19:15:55.000000000 -0700 @@ -0,0 +1,124 @@ +/* + * drivers/i2c/i2c-ibm_iic.h + * + * Support for the IIC peripheral on IBM PPC 4xx + * + * Copyright (c) 2003 Zultys Technologies. + * Eugene Surovegin or + * + * Based on original work by + * Ian DaSilva + * Armin Kuster + * Matt Porter + * + * Copyright 2000-2003 MontaVista Software Inc. + * + * 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 of the License, or (at your + * option) any later version. + * + */ +#ifndef __I2C_IBM_IIC_H_ +#define __I2C_IBM_IIC_H_ + +#include +#include + +struct iic_regs { + u16 mdbuf; + u16 sbbuf; + u8 lmadr; + u8 hmadr; + u8 cntl; + u8 mdcntl; + u8 sts; + u8 extsts; + u8 lsadr; + u8 hsadr; + u8 clkdiv; + u8 intmsk; + u8 xfrcnt; + u8 xtcntlss; + u8 directcntl; +}; + +struct ibm_iic_private { + struct i2c_adapter adap; + volatile struct iic_regs *vaddr; + wait_queue_head_t wq; + int idx; + int irq; + int fast_mode; + u8 clckdiv; +}; + +/* IICx_CNTL register */ +#define CNTL_HMT 0x80 +#define CNTL_AMD 0x40 +#define CNTL_TCT_MASK 0x30 +#define CNTL_TCT_SHIFT 4 +#define CNTL_RPST 0x08 +#define CNTL_CHT 0x04 +#define CNTL_RW 0x02 +#define CNTL_PT 0x01 + +/* IICx_MDCNTL register */ +#define MDCNTL_FSDB 0x80 +#define MDCNTL_FMDB 0x40 +#define MDCNTL_EGC 0x20 +#define MDCNTL_FSM 0x10 +#define MDCNTL_ESM 0x08 +#define MDCNTL_EINT 0x04 +#define MDCNTL_EUBS 0x02 +#define MDCNTL_HSCL 0x01 + +/* IICx_STS register */ +#define STS_SSS 0x80 +#define STS_SLPR 0x40 +#define STS_MDBS 0x20 +#define STS_MDBF 0x10 +#define STS_SCMP 0x08 +#define STS_ERR 0x04 +#define STS_IRQA 0x02 +#define STS_PT 0x01 + +/* IICx_EXTSTS register */ +#define EXTSTS_IRQP 0x80 +#define EXTSTS_BCS_MASK 0x70 +#define EXTSTS_BCS_FREE 0x40 +#define EXTSTS_IRQD 0x08 +#define EXTSTS_LA 0x04 +#define EXTSTS_ICT 0x02 +#define EXTSTS_XFRA 0x01 + +/* IICx_INTRMSK register */ +#define INTRMSK_EIRC 0x80 +#define INTRMSK_EIRS 0x40 +#define INTRMSK_EIWC 0x20 +#define INTRMSK_EIWS 0x10 +#define INTRMSK_EIHE 0x08 +#define INTRMSK_EIIC 0x04 +#define INTRMSK_EITA 0x02 +#define INTRMSK_EIMTC 0x01 + +/* IICx_XFRCNT register */ +#define XFRCNT_MTC_MASK 0x07 + +/* IICx_XTCNTLSS register */ +#define XTCNTLSS_SRC 0x80 +#define XTCNTLSS_SRS 0x40 +#define XTCNTLSS_SWC 0x20 +#define XTCNTLSS_SWS 0x10 +#define XTCNTLSS_SRST 0x01 + +/* IICx_DIRECTCNTL register */ +#define DIRCNTL_SDAC 0x08 +#define DIRCNTL_SCC 0x04 +#define DIRCNTL_MSDA 0x02 +#define DIRCNTL_MSC 0x01 + +/* Check if we really control the I2C bus and bus is free */ +#define DIRCTNL_FREE(v) (((v) & 0x0f) == 0x0f) + +#endif /* __I2C_IBM_IIC_H_ */ diff -prauN linux-2.6.0-test5/drivers/i2c/busses/i2c-iop3xx.c wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-iop3xx.c --- linux-2.6.0-test5/drivers/i2c/busses/i2c-iop3xx.c 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-iop3xx.c 2003-09-25 19:15:55.000000000 -0700 @@ -0,0 +1,536 @@ +/* ------------------------------------------------------------------------- */ +/* i2c-iop3xx.c i2c driver algorithms for Intel XScale IOP3xx */ +/* ------------------------------------------------------------------------- */ +/* Copyright (C) 2003 Peter Milne, D-TACQ Solutions Ltd + * + + 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. + + + 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, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +/* ------------------------------------------------------------------------- */ +/* + With acknowledgements to i2c-algo-ibm_ocp.c by + Ian DaSilva, MontaVista Software, Inc. idasilva@mvista.com + + And i2c-algo-pcf.c, which was created by Simon G. Vogl and Hans Berglund: + + Copyright (C) 1995-1997 Simon G. Vogl, 1998-2000 Hans Berglund + + And which acknowledged Kyösti Mälkki , + Frodo Looijaard , Martin Bailey + + ---------------------------------------------------------------------------*/ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#include +#include +#include "i2c-iop3xx.h" + + +/* ----- global defines ----------------------------------------------- */ +#define PASSERT(x) do { if (!(x) ) \ + printk(KERN_CRIT "PASSERT %s in %s:%d\n", #x, __FILE__, __LINE__ );\ + } while (0) + + +/* ----- global variables --------------------------------------------- */ + + +static inline unsigned char iic_cook_addr(struct i2c_msg *msg) +{ + unsigned char addr; + + addr = (msg->addr << 1); + + if (msg->flags & I2C_M_RD) + addr |= 1; + + /* PGM: what is M_REV_DIR_ADDR - do we need it ?? */ + if (msg->flags & I2C_M_REV_DIR_ADDR) + addr ^= 1; + + return addr; +} + + +static inline void iop3xx_adap_reset(struct i2c_algo_iop3xx_data *iop3xx_adap) +{ + /* Follows devman 9.3 */ + *iop3xx_adap->biu->CR = IOP321_ICR_UNIT_RESET; + *iop3xx_adap->biu->SR = IOP321_ISR_CLEARBITS; + *iop3xx_adap->biu->CR = 0; +} + +static inline void iop3xx_adap_set_slave_addr(struct i2c_algo_iop3xx_data *iop3xx_adap) +{ + *iop3xx_adap->biu->SAR = MYSAR; +} + +static inline void iop3xx_adap_enable(struct i2c_algo_iop3xx_data *iop3xx_adap) +{ + u32 cr = IOP321_ICR_GCD|IOP321_ICR_SCLEN|IOP321_ICR_UE; + + /* NB SR bits not same position as CR IE bits :-( */ + iop3xx_adap->biu->SR_enabled = + IOP321_ISR_ALD | IOP321_ISR_BERRD | + IOP321_ISR_RXFULL | IOP321_ISR_TXEMPTY; + + cr |= IOP321_ICR_ALDIE | IOP321_ICR_BERRIE | + IOP321_ICR_RXFULLIE | IOP321_ICR_TXEMPTYIE; + + *iop3xx_adap->biu->CR = cr; +} + +static void iop3xx_adap_transaction_cleanup(struct i2c_algo_iop3xx_data *iop3xx_adap) +{ + unsigned cr = *iop3xx_adap->biu->CR; + + cr &= ~(IOP321_ICR_MSTART | IOP321_ICR_TBYTE | + IOP321_ICR_MSTOP | IOP321_ICR_SCLEN); + *iop3xx_adap->biu->CR = cr; +} + +static void iop3xx_adap_final_cleanup(struct i2c_algo_iop3xx_data *iop3xx_adap) +{ + unsigned cr = *iop3xx_adap->biu->CR; + + cr &= ~(IOP321_ICR_ALDIE | IOP321_ICR_BERRIE | + IOP321_ICR_RXFULLIE | IOP321_ICR_TXEMPTYIE); + iop3xx_adap->biu->SR_enabled = 0; + *iop3xx_adap->biu->CR = cr; +} + +/* + * NB: the handler has to clear the source of the interrupt! + * Then it passes the SR flags of interest to BH via adap data + */ +static void iop3xx_i2c_handler(int this_irq, + void *dev_id, + struct pt_regs *regs) +{ + struct i2c_algo_iop3xx_data *iop3xx_adap = dev_id; + + u32 sr = *iop3xx_adap->biu->SR; + + if ((sr &= iop3xx_adap->biu->SR_enabled)) { + *iop3xx_adap->biu->SR = sr; + iop3xx_adap->biu->SR_received |= sr; + wake_up_interruptible(&iop3xx_adap->waitq); + } +} + +/* check all error conditions, clear them , report most important */ +static int iop3xx_adap_error(u32 sr) +{ + int rc = 0; + + if ((sr&IOP321_ISR_BERRD)) { + if ( !rc ) rc = -I2C_ERR_BERR; + } + if ((sr&IOP321_ISR_ALD)) { + if ( !rc ) rc = -I2C_ERR_ALD; + } + return rc; +} + +static inline u32 get_srstat(struct i2c_algo_iop3xx_data *iop3xx_adap) +{ + unsigned long flags; + u32 sr; + + spin_lock_irqsave(&iop3xx_adap->lock, flags); + sr = iop3xx_adap->biu->SR_received; + iop3xx_adap->biu->SR_received = 0; + spin_unlock_irqrestore(&iop3xx_adap->lock, flags); + + return sr; +} + +/* + * sleep until interrupted, then recover and analyse the SR + * saved by handler + */ +typedef int (* compare_func)(unsigned test, unsigned mask); +/* returns 1 on correct comparison */ + +static int iop3xx_adap_wait_event(struct i2c_algo_iop3xx_data *iop3xx_adap, + unsigned flags, unsigned* status, + compare_func compare) +{ + unsigned sr = 0; + int interrupted; + int done; + int rc; + + do { + interrupted = wait_event_interruptible_timeout ( + iop3xx_adap->waitq, + (done = compare( sr = get_srstat(iop3xx_adap),flags )), + iop3xx_adap->timeout + ); + if ((rc = iop3xx_adap_error(sr)) < 0) { + *status = sr; + return rc; + }else if (!interrupted) { + *status = sr; + return rc = -ETIMEDOUT; + } + } while(!done); + + *status = sr; + + return rc = 0; +} + +/* + * Concrete compare_funcs + */ +static int all_bits_clear(unsigned test, unsigned mask) +{ + return (test & mask) == 0; +} +static int any_bits_set(unsigned test, unsigned mask) +{ + return (test & mask) != 0; +} + +static int iop3xx_adap_wait_tx_done(struct i2c_algo_iop3xx_data *iop3xx_adap, int *status) +{ + return iop3xx_adap_wait_event( + iop3xx_adap, + IOP321_ISR_TXEMPTY|IOP321_ISR_ALD|IOP321_ISR_BERRD, + status, any_bits_set); +} + +static int iop3xx_adap_wait_rx_done(struct i2c_algo_iop3xx_data *iop3xx_adap, int *status) +{ + return iop3xx_adap_wait_event( + iop3xx_adap, + IOP321_ISR_RXFULL|IOP321_ISR_ALD|IOP321_ISR_BERRD, + status, any_bits_set); +} + +static int iop3xx_adap_wait_idle(struct i2c_algo_iop3xx_data *iop3xx_adap, int *status) +{ + return iop3xx_adap_wait_event( + iop3xx_adap, IOP321_ISR_UNITBUSY, status, all_bits_clear); +} + +/* + * Description: This performs the IOP3xx initialization sequence + * Valid for IOP321. Maybe valid for IOP310?. + */ +static int iop3xx_adap_init (struct i2c_algo_iop3xx_data *iop3xx_adap) +{ + *IOP321_GPOD &= ~(iop3xx_adap->channel==0 ? + IOP321_GPOD_I2C0: + IOP321_GPOD_I2C1); + + iop3xx_adap_reset(iop3xx_adap); + iop3xx_adap_set_slave_addr(iop3xx_adap); + iop3xx_adap_enable(iop3xx_adap); + + return 0; +} + +static int iop3xx_adap_send_target_slave_addr(struct i2c_algo_iop3xx_data *iop3xx_adap, + struct i2c_msg* msg) +{ + unsigned cr = *iop3xx_adap->biu->CR; + int status; + int rc; + + *iop3xx_adap->biu->DBR = iic_cook_addr(msg); + + cr &= ~(IOP321_ICR_MSTOP | IOP321_ICR_NACK); + cr |= IOP321_ICR_MSTART | IOP321_ICR_TBYTE; + + *iop3xx_adap->biu->CR = cr; + rc = iop3xx_adap_wait_tx_done(iop3xx_adap, &status); + /* this assert fires every time, contrary to IOP manual + PASSERT((status&IOP321_ISR_UNITBUSY)!=0); + */ + PASSERT((status&IOP321_ISR_RXREAD)==0); + + return rc; +} + +static int iop3xx_adap_write_byte(struct i2c_algo_iop3xx_data *iop3xx_adap, char byte, int stop) +{ + unsigned cr = *iop3xx_adap->biu->CR; + int status; + int rc; + + *iop3xx_adap->biu->DBR = byte; + cr &= ~IOP321_ICR_MSTART; + if (stop) { + cr |= IOP321_ICR_MSTOP; + } else { + cr &= ~IOP321_ICR_MSTOP; + } + *iop3xx_adap->biu->CR = cr |= IOP321_ICR_TBYTE; + rc = iop3xx_adap_wait_tx_done(iop3xx_adap, &status); + + return rc; +} + +static int iop3xx_adap_read_byte(struct i2c_algo_iop3xx_data *iop3xx_adap, + char* byte, int stop) +{ + unsigned cr = *iop3xx_adap->biu->CR; + int status; + int rc; + + cr &= ~IOP321_ICR_MSTART; + + if (stop) { + cr |= IOP321_ICR_MSTOP|IOP321_ICR_NACK; + } else { + cr &= ~(IOP321_ICR_MSTOP|IOP321_ICR_NACK); + } + *iop3xx_adap->biu->CR = cr |= IOP321_ICR_TBYTE; + + rc = iop3xx_adap_wait_rx_done(iop3xx_adap, &status); + + *byte = *iop3xx_adap->biu->DBR; + + return rc; +} + +static int iop3xx_i2c_writebytes(struct i2c_adapter *i2c_adap, + const char *buf, int count) +{ + struct i2c_algo_iop3xx_data *iop3xx_adap = i2c_adap->algo_data; + int ii; + int rc = 0; + + for (ii = 0; rc == 0 && ii != count; ++ii) { + rc = iop3xx_adap_write_byte(iop3xx_adap, buf[ii], ii==count-1); + } + return rc; +} + +static int iop3xx_i2c_readbytes(struct i2c_adapter *i2c_adap, + char *buf, int count) +{ + struct i2c_algo_iop3xx_data *iop3xx_adap = i2c_adap->algo_data; + int ii; + int rc = 0; + + for (ii = 0; rc == 0 && ii != count; ++ii) { + rc = iop3xx_adap_read_byte(iop3xx_adap, &buf[ii], ii==count-1); + } + return rc; +} + +/* + * Description: This function implements combined transactions. Combined + * transactions consist of combinations of reading and writing blocks of data. + * FROM THE SAME ADDRESS + * Each transfer (i.e. a read or a write) is separated by a repeated start + * condition. + */ +static int iop3xx_handle_msg(struct i2c_adapter *i2c_adap, struct i2c_msg* pmsg) +{ + struct i2c_algo_iop3xx_data *iop3xx_adap = i2c_adap->algo_data; + int rc; + + rc = iop3xx_adap_send_target_slave_addr(iop3xx_adap, pmsg); + if (rc < 0) { + return rc; + } + + if ((pmsg->flags&I2C_M_RD)) { + return iop3xx_i2c_readbytes(i2c_adap, pmsg->buf, pmsg->len); + } else { + return iop3xx_i2c_writebytes(i2c_adap, pmsg->buf, pmsg->len); + } +} + +/* + * master_xfer() - main read/write entry + */ +static int iop3xx_master_xfer(struct i2c_adapter *i2c_adap, struct i2c_msg msgs[], int num) +{ + struct i2c_algo_iop3xx_data *iop3xx_adap = i2c_adap->algo_data; + int im = 0; + int ret = 0; + int status; + + iop3xx_adap_wait_idle(iop3xx_adap, &status); + iop3xx_adap_reset(iop3xx_adap); + iop3xx_adap_enable(iop3xx_adap); + + for (im = 0; ret == 0 && im != num; ++im) { + ret = iop3xx_handle_msg(i2c_adap, &msgs[im]); + } + + iop3xx_adap_transaction_cleanup(iop3xx_adap); + + return ret; +} + +static int algo_control(struct i2c_adapter *adapter, unsigned int cmd, + unsigned long arg) +{ + return 0; +} + +static u32 iic_func(struct i2c_adapter *adap) +{ + return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL; +} + + +/* -----exported algorithm data: ------------------------------------- */ + +static struct i2c_algorithm iic_algo = { + .name = "IOP3xx I2C algorithm", + .id = I2C_ALGO_OCP_IOP3XX, + .master_xfer = iop3xx_master_xfer, + .algo_control = algo_control, + .functionality = iic_func, +}; + +/* + * registering functions to load algorithms at runtime + */ +static int i2c_iop3xx_add_bus(struct i2c_adapter *iic_adap) +{ + struct i2c_algo_iop3xx_data *iop3xx_adap = iic_adap->algo_data; + + if (!request_region( REGION_START(iop3xx_adap), + REGION_LENGTH(iop3xx_adap), + iic_adap->name)) { + return -ENODEV; + } + + init_waitqueue_head(&iop3xx_adap->waitq); + spin_lock_init(&iop3xx_adap->lock); + + if (request_irq( + iop3xx_adap->biu->irq, + iop3xx_i2c_handler, + /* SA_SAMPLE_RANDOM */ 0, + iic_adap->name, + iop3xx_adap)) { + return -ENODEV; + } + + /* register new iic_adapter to i2c module... */ + iic_adap->id |= iic_algo.id; + iic_adap->algo = &iic_algo; + + iic_adap->timeout = 100; /* default values, should */ + iic_adap->retries = 3; /* be replaced by defines */ + + iop3xx_adap_init(iic_adap->algo_data); + i2c_add_adapter(iic_adap); + return 0; +} + +static int i2c_iop3xx_del_bus(struct i2c_adapter *iic_adap) +{ + struct i2c_algo_iop3xx_data *iop3xx_adap = iic_adap->algo_data; + + iop3xx_adap_final_cleanup(iop3xx_adap); + free_irq(iop3xx_adap->biu->irq, iop3xx_adap); + + release_region(REGION_START(iop3xx_adap), REGION_LENGTH(iop3xx_adap)); + + return i2c_del_adapter(iic_adap); +} + +#ifdef CONFIG_ARCH_IOP321 + +static struct iop3xx_biu biu0 = { + .CR = IOP321_ICR0, + .SR = IOP321_ISR0, + .SAR = IOP321_ISAR0, + .DBR = IOP321_IDBR0, + .BMR = IOP321_IBMR0, + .irq = IRQ_IOP321_I2C_0, +}; + +static struct iop3xx_biu biu1 = { + .CR = IOP321_ICR1, + .SR = IOP321_ISR1, + .SAR = IOP321_ISAR1, + .DBR = IOP321_IDBR1, + .BMR = IOP321_IBMR1, + .irq = IRQ_IOP321_I2C_1, +}; + +#define ADAPTER_NAME_ROOT "IOP321 i2c biu adapter " +#else +#error Please define the BIU struct iop3xx_biu for your processor arch +#endif + +static struct i2c_algo_iop3xx_data algo_iop3xx_data0 = { + .channel = 0, + .biu = &biu0, + .timeout = 1*HZ, +}; +static struct i2c_algo_iop3xx_data algo_iop3xx_data1 = { + .channel = 1, + .biu = &biu1, + .timeout = 1*HZ, +}; + +static struct i2c_adapter iop3xx_ops0 = { + .owner = THIS_MODULE, + .name = ADAPTER_NAME_ROOT "0", + .id = I2C_HW_IOP321, + .algo_data = &algo_iop3xx_data0, +}; +static struct i2c_adapter iop3xx_ops1 = { + .owner = THIS_MODULE, + .name = ADAPTER_NAME_ROOT "1", + .id = I2C_HW_IOP321, + .algo_data = &algo_iop3xx_data1, +}; + +static int __init i2c_iop3xx_init (void) +{ + return i2c_iop3xx_add_bus(&iop3xx_ops0) || + i2c_iop3xx_add_bus(&iop3xx_ops1); +} + +static void __exit i2c_iop3xx_exit (void) +{ + i2c_iop3xx_del_bus(&iop3xx_ops0); + i2c_iop3xx_del_bus(&iop3xx_ops1); +} + +module_init (i2c_iop3xx_init); +module_exit (i2c_iop3xx_exit); + +MODULE_AUTHOR("D-TACQ Solutions Ltd "); +MODULE_DESCRIPTION("IOP3xx iic algorithm and driver"); +MODULE_LICENSE("GPL"); + +MODULE_PARM(i2c_debug,"i"); + +MODULE_PARM_DESC(i2c_debug, "debug level - 0 off; 1 normal; 2,3 more verbose; 9 iic-protocol"); + diff -prauN linux-2.6.0-test5/drivers/i2c/busses/i2c-iop3xx.h wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-iop3xx.h --- linux-2.6.0-test5/drivers/i2c/busses/i2c-iop3xx.h 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-iop3xx.h 2003-09-25 19:15:55.000000000 -0700 @@ -0,0 +1,118 @@ +/* ------------------------------------------------------------------------- */ +/* i2c-iop3xx.h algorithm driver definitions private to i2c-iop3xx.c */ +/* ------------------------------------------------------------------------- */ +/* Copyright (C) 2003 Peter Milne, D-TACQ Solutions Ltd + * + + 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. + + 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, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +/* ------------------------------------------------------------------------- */ + + +#ifndef I2C_IOP3XX_H +#define I2C_IOP3XX_H 1 + +/* + * iop321 hardware bit definitions + */ +#define IOP321_ICR_FAST_MODE 0x8000 /* 1=400kBps, 0=100kBps */ +#define IOP321_ICR_UNIT_RESET 0x4000 /* 1=RESET */ +#define IOP321_ICR_SADIE 0x2000 /* 1=Slave Detect Interrupt Enable */ +#define IOP321_ICR_ALDIE 0x1000 /* 1=Arb Loss Detect Interrupt Enable */ +#define IOP321_ICR_SSDIE 0x0800 /* 1=Slave STOP Detect Interrupt Enable */ +#define IOP321_ICR_BERRIE 0x0400 /* 1=Bus Error Interrupt Enable */ +#define IOP321_ICR_RXFULLIE 0x0200 /* 1=Receive Full Interrupt Enable */ +#define IOP321_ICR_TXEMPTYIE 0x0100 /* 1=Transmit Empty Interrupt Enable */ +#define IOP321_ICR_GCD 0x0080 /* 1=General Call Disable */ +/* + * IOP321_ICR_GCD: 1 disables response as slave. "This bit must be set + * when sending a master mode general call message from the I2C unit" + */ +#define IOP321_ICR_UE 0x0040 /* 1=Unit Enable */ +/* + * "NOTE: To avoid I2C bus integrity problems, + * the user needs to ensure that the GPIO Output Data Register - + * GPOD bits associated with an I2C port are cleared prior to setting + * the enable bit for that I2C serial port. + * The user prepares to enable I2C port 0 and + * I2C port 1 by clearing GPOD bits 7:6 and GPOD bits 5:4, respectively. + */ +#define IOP321_ICR_SCLEN 0x0020 /* 1=SCL enable for master mode */ +#define IOP321_ICR_MABORT 0x0010 /* 1=Send a STOP with no data + * NB TBYTE must be clear */ +#define IOP321_ICR_TBYTE 0x0008 /* 1=Send/Receive a byte. i2c clears */ +#define IOP321_ICR_NACK 0x0004 /* 1=reply with NACK */ +#define IOP321_ICR_MSTOP 0x0002 /* 1=send a STOP after next data byte */ +#define IOP321_ICR_MSTART 0x0001 /* 1=initiate a START */ + + +#define IOP321_ISR_BERRD 0x0400 /* 1=BUS ERROR Detected */ +#define IOP321_ISR_SAD 0x0200 /* 1=Slave ADdress Detected */ +#define IOP321_ISR_GCAD 0x0100 /* 1=General Call Address Detected */ +#define IOP321_ISR_RXFULL 0x0080 /* 1=Receive Full */ +#define IOP321_ISR_TXEMPTY 0x0040 /* 1=Transmit Empty */ +#define IOP321_ISR_ALD 0x0020 /* 1=Arbitration Loss Detected */ +#define IOP321_ISR_SSD 0x0010 /* 1=Slave STOP Detected */ +#define IOP321_ISR_BBUSY 0x0008 /* 1=Bus BUSY */ +#define IOP321_ISR_UNITBUSY 0x0004 /* 1=Unit Busy */ +#define IOP321_ISR_NACK 0x0002 /* 1=Unit Rx or Tx a NACK */ +#define IOP321_ISR_RXREAD 0x0001 /* 1=READ 0=WRITE (R/W bit of slave addr */ + +#define IOP321_ISR_CLEARBITS 0x07f0 + +#define IOP321_ISAR_SAMASK 0x007f + +#define IOP321_IDBR_MASK 0x00ff + +#define IOP321_IBMR_SCL 0x0002 +#define IOP321_IBMR_SDA 0x0001 + +#define IOP321_GPOD_I2C0 0x00c0 /* clear these bits to enable ch0 */ +#define IOP321_GPOD_I2C1 0x0030 /* clear these bits to enable ch1 */ + +#define MYSAR 0x02 /* SWAG a suitable slave address */ + +#define I2C_ERR 321 +#define I2C_ERR_BERR (I2C_ERR+0) +#define I2C_ERR_ALD (I2C_ERR+1) + + +struct iop3xx_biu { /* Bus Interface Unit - the hardware */ +/* physical hardware defs - regs*/ + u32 *CR; + u32 *SR; + u32 *SAR; + u32 *DBR; + u32 *BMR; +/* irq bit vector */ + u32 irq; +/* stored flags */ + u32 SR_enabled, SR_received; +}; + +struct i2c_algo_iop3xx_data { + int channel; + + wait_queue_head_t waitq; + spinlock_t lock; + int timeout; + struct iop3xx_biu* biu; +}; + +#define REGION_START(adap) ((u32)((adap)->biu->CR)) +#define REGION_END(adap) ((u32)((adap)->biu->BMR+1)) +#define REGION_LENGTH(adap) (REGION_END(adap)-REGION_START(adap)) + +#define IRQ_STATUS_MASK(adap) (1<biu->irq) + +#endif /* I2C_IOP3XX_H */ diff -prauN linux-2.6.0-test5/drivers/i2c/busses/i2c-isa.c wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-isa.c --- linux-2.6.0-test5/drivers/i2c/busses/i2c-isa.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-isa.c 2003-09-25 19:15:55.000000000 -0700 @@ -30,21 +30,29 @@ #include #include +static u32 isa_func(struct i2c_adapter *adapter); + /* This is the actual algorithm we define */ static struct i2c_algorithm isa_algorithm = { .name = "ISA bus algorithm", .id = I2C_ALGO_ISA, + .functionality = isa_func, }; /* There can only be one... */ static struct i2c_adapter isa_adapter = { .owner = THIS_MODULE, - .id = I2C_ALGO_ISA | I2C_HW_ISA, .class = I2C_ADAP_CLASS_SMBUS, .algo = &isa_algorithm, .name = "ISA main adapter", }; +/* We can't do a thing... */ +static u32 isa_func(struct i2c_adapter *adapter) +{ + return 0; +} + static int __init i2c_isa_init(void) { return i2c_add_adapter(&isa_adapter); diff -prauN linux-2.6.0-test5/drivers/i2c/busses/i2c-ite.c wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-ite.c --- linux-2.6.0-test5/drivers/i2c/busses/i2c-ite.c 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-ite.c 2003-09-25 19:15:55.000000000 -0700 @@ -0,0 +1,278 @@ +/* + ------------------------------------------------------------------------- + i2c-adap-ite.c i2c-hw access for the IIC peripheral on the ITE MIPS system + ------------------------------------------------------------------------- + Hai-Pao Fan, MontaVista Software, Inc. + hpfan@mvista.com or source@mvista.com + + Copyright 2001 MontaVista Software Inc. + + ---------------------------------------------------------------------------- + This file was highly leveraged from i2c-elektor.c, which was created + by Simon G. Vogl and Hans Berglund: + + + Copyright (C) 1995-97 Simon G. Vogl + 1998-99 Hans Berglund + + 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 of the License, 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, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +/* ------------------------------------------------------------------------- */ + +/* With some changes from Kyösti Mälkki and even + Frodo Looijaard */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include "../i2c-ite.h" + +#define DEFAULT_BASE 0x14014030 +#define ITE_IIC_IO_SIZE 0x40 +#define DEFAULT_IRQ 0 +#define DEFAULT_CLOCK 0x1b0e /* default 16MHz/(27+14) = 400KHz */ +#define DEFAULT_OWN 0x55 + +static int base = 0; +static int irq = 0; +static int clock = 0; +static int own = 0; + +static int i2c_debug=0; +static struct iic_ite gpi; +static wait_queue_head_t iic_wait; +static int iic_pending; + +/* ----- global defines ----------------------------------------------- */ +#define DEB(x) if (i2c_debug>=1) x +#define DEB2(x) if (i2c_debug>=2) x +#define DEB3(x) if (i2c_debug>=3) x +#define DEBE(x) x /* error messages */ + + +/* ----- local functions ---------------------------------------------- */ + +static void iic_ite_setiic(void *data, int ctl, short val) +{ + unsigned long j = jiffies + 10; + + DEB3(printk(" Write 0x%02x to 0x%x\n",(unsigned short)val, ctl&0xff)); + DEB3({while (time_before(jiffies, j)) schedule();}) + outw(val,ctl); +} + +static short iic_ite_getiic(void *data, int ctl) +{ + short val; + + val = inw(ctl); + DEB3(printk("Read 0x%02x from 0x%x\n",(unsigned short)val, ctl&0xff)); + return (val); +} + +/* Return our slave address. This is the address + * put on the I2C bus when another master on the bus wants to address us + * as a slave + */ +static int iic_ite_getown(void *data) +{ + return (gpi.iic_own); +} + + +static int iic_ite_getclock(void *data) +{ + return (gpi.iic_clock); +} + + +#if 0 +static void iic_ite_sleep(unsigned long timeout) +{ + schedule_timeout( timeout * HZ); +} +#endif + + +/* Put this process to sleep. We will wake up when the + * IIC controller interrupts. + */ +static void iic_ite_waitforpin(void) { + + int timeout = 2; + + /* If interrupts are enabled (which they are), then put the process to + * sleep. This process will be awakened by two events -- either the + * the IIC peripheral interrupts or the timeout expires. + * If interrupts are not enabled then delay for a reasonable amount + * of time and return. + */ + if (gpi.iic_irq > 0) { + cli(); + if (iic_pending == 0) { + interruptible_sleep_on_timeout(&iic_wait, timeout*HZ ); + } else + iic_pending = 0; + sti(); + } else { + udelay(100); + } +} + + +static void iic_ite_handler(int this_irq, void *dev_id, struct pt_regs *regs) +{ + + iic_pending = 1; + + DEB2(printk("iic_ite_handler: in interrupt handler\n")); + wake_up_interruptible(&iic_wait); +} + + +/* Lock the region of memory where I/O registers exist. Request our + * interrupt line and register its associated handler. + */ +static int iic_hw_resrc_init(void) +{ + if (!request_region(gpi.iic_base, ITE_IIC_IO_SIZE, "i2c")) + return -ENODEV; + + if (gpi.iic_irq <= 0) + return 0; + + if (request_irq(gpi.iic_irq, iic_ite_handler, 0, "ITE IIC", 0) < 0) + gpi.iic_irq = 0; + else + enable_irq(gpi.iic_irq); + + return 0; +} + + +static void iic_ite_release(void) +{ + if (gpi.iic_irq > 0) { + disable_irq(gpi.iic_irq); + free_irq(gpi.iic_irq, 0); + } + release_region(gpi.iic_base , 2); +} + +/* ------------------------------------------------------------------------ + * Encapsulate the above functions in the correct operations structure. + * This is only done when more than one hardware adapter is supported. + */ +static struct i2c_algo_iic_data iic_ite_data = { + NULL, + iic_ite_setiic, + iic_ite_getiic, + iic_ite_getown, + iic_ite_getclock, + iic_ite_waitforpin, + 80, 80, 100, /* waits, timeout */ +}; + +static struct i2c_adapter iic_ite_ops = { + .owner = THIS_MODULE, + .id = I2C_HW_I_IIC, + .algo_data = &iic_ite_data, + .dev = { + .name = "ITE IIC adapter", + }, +}; + +/* Called when the module is loaded. This function starts the + * cascade of calls up through the hierarchy of i2c modules (i.e. up to the + * algorithm layer and into to the core layer) + */ +static int __init iic_ite_init(void) +{ + + struct iic_ite *piic = &gpi; + + printk(KERN_INFO "Initialize ITE IIC adapter module\n"); + if (base == 0) + piic->iic_base = DEFAULT_BASE; + else + piic->iic_base = base; + + if (irq == 0) + piic->iic_irq = DEFAULT_IRQ; + else + piic->iic_irq = irq; + + if (clock == 0) + piic->iic_clock = DEFAULT_CLOCK; + else + piic->iic_clock = clock; + + if (own == 0) + piic->iic_own = DEFAULT_OWN; + else + piic->iic_own = own; + + iic_ite_data.data = (void *)piic; + init_waitqueue_head(&iic_wait); + if (iic_hw_resrc_init() == 0) { + if (i2c_iic_add_bus(&iic_ite_ops) < 0) + return -ENODEV; + } else { + return -ENODEV; + } + printk(KERN_INFO " found device at %#x irq %d.\n", + piic->iic_base, piic->iic_irq); + return 0; +} + + +static void iic_ite_exit(void) +{ + i2c_iic_del_bus(&iic_ite_ops); + iic_ite_release(); +} + +/* If modules is NOT defined when this file is compiled, then the MODULE_* + * macros will resolve to nothing + */ +MODULE_AUTHOR("MontaVista Software "); +MODULE_DESCRIPTION("I2C-Bus adapter routines for ITE IIC bus adapter"); +MODULE_LICENSE("GPL"); + +MODULE_PARM(base, "i"); +MODULE_PARM(irq, "i"); +MODULE_PARM(clock, "i"); +MODULE_PARM(own, "i"); +MODULE_PARM(i2c_debug,"i"); + + +/* Called when module is loaded or when kernel is initialized. + * If MODULES is defined when this file is compiled, then this function will + * resolve to init_module (the function called when insmod is invoked for a + * module). Otherwise, this function is called early in the boot, when the + * kernel is intialized. Check out /include/init.h to see how this works. + */ +module_init(iic_ite_init); + +/* Resolves to module_cleanup when MODULES is defined. */ +module_exit(iic_ite_exit); diff -prauN linux-2.6.0-test5/drivers/i2c/busses/i2c-keywest.c wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-keywest.c --- linux-2.6.0-test5/drivers/i2c/busses/i2c-keywest.c 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-keywest.c 2003-09-25 19:15:55.000000000 -0700 @@ -0,0 +1,653 @@ +/* + i2c Support for Apple Keywest I2C Bus Controller + + Copyright (c) 2001 Benjamin Herrenschmidt + + Original work by + + Copyright (c) 2000 Philip Edelbrock + + 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 of the License, 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, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + Changes: + + 2001/12/13 BenH New implementation + 2001/12/15 BenH Add support for "byte" and "quick" + transfers. Add i2c_xfer routine. + + My understanding of the various modes supported by keywest are: + + - Dumb mode : not implemented, probably direct tweaking of lines + - Standard mode : simple i2c transaction of type + S Addr R/W A Data A Data ... T + - Standard sub mode : combined 8 bit subaddr write with data read + S Addr R/W A SubAddr A Data A Data ... T + - Combined mode : Subaddress and Data sequences appended with no stop + S Addr R/W A SubAddr S Addr R/W A Data A Data ... T + + Currently, this driver uses only Standard mode for i2c xfer, and + smbus byte & quick transfers ; and uses StandardSub mode for + other smbus transfers instead of combined as we need that for the + sound driver to be happy +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "i2c-keywest.h" + +#define DBG(x...) do {\ + if (debug > 0) \ + printk(KERN_DEBUG "KW:" x); \ + } while(0) + + +MODULE_AUTHOR("Benjamin Herrenschmidt "); +MODULE_DESCRIPTION("I2C driver for Apple's Keywest"); +MODULE_LICENSE("GPL"); +MODULE_PARM(probe, "i"); +MODULE_PARM(debug, "i"); + +int probe = 0; +int debug = 0; + +static void +do_stop(struct keywest_iface* iface, int result) +{ + write_reg(reg_control, read_reg(reg_control) | KW_I2C_CTL_STOP); + iface->state = state_stop; + iface->result = result; +} + +/* Main state machine for standard & standard sub mode */ +static int +handle_interrupt(struct keywest_iface *iface, u8 isr) +{ + int ack; + int rearm_timer = 1; + + DBG("handle_interrupt(), got: %x, status: %x, state: %d\n", + isr, read_reg(reg_status), iface->state); + if (isr == 0 && iface->state != state_stop) { + do_stop(iface, -1); + return rearm_timer; + } + if (isr & KW_I2C_IRQ_STOP && iface->state != state_stop) { + iface->result = -1; + iface->state = state_stop; + } + switch(iface->state) { + case state_addr: + if (!(isr & KW_I2C_IRQ_ADDR)) { + do_stop(iface, -1); + break; + } + ack = read_reg(reg_status); + DBG("ack on set address: %x\n", ack); + if ((ack & KW_I2C_STAT_LAST_AAK) == 0) { + do_stop(iface, -1); + break; + } + /* Handle rw "quick" mode */ + if (iface->datalen == 0) + do_stop(iface, 0); + else if (iface->read_write == I2C_SMBUS_READ) { + iface->state = state_read; + if (iface->datalen > 1) + write_reg(reg_control, read_reg(reg_control) + | KW_I2C_CTL_AAK); + } else { + iface->state = state_write; + DBG("write byte: %x\n", *(iface->data)); + write_reg(reg_data, *(iface->data++)); + iface->datalen--; + } + + break; + case state_read: + if (!(isr & KW_I2C_IRQ_DATA)) { + do_stop(iface, -1); + break; + } + *(iface->data++) = read_reg(reg_data); + DBG("read byte: %x\n", *(iface->data-1)); + iface->datalen--; + if (iface->datalen == 0) + iface->state = state_stop; + else + write_reg(reg_control, 0); + break; + case state_write: + if (!(isr & KW_I2C_IRQ_DATA)) { + do_stop(iface, -1); + break; + } + /* Check ack status */ + ack = read_reg(reg_status); + DBG("ack on data write: %x\n", ack); + if ((ack & KW_I2C_STAT_LAST_AAK) == 0) { + do_stop(iface, -1); + break; + } + if (iface->datalen) { + DBG("write byte: %x\n", *(iface->data)); + write_reg(reg_data, *(iface->data++)); + iface->datalen--; + } else + do_stop(iface, 0); + break; + + case state_stop: + if (!(isr & KW_I2C_IRQ_STOP) && (++iface->stopretry) < 10) + do_stop(iface, -1); + else { + rearm_timer = 0; + iface->state = state_idle; + write_reg(reg_control, 0x00); + write_reg(reg_ier, 0x00); + complete(&iface->complete); + } + break; + } + + write_reg(reg_isr, isr); + + return rearm_timer; +} + +/* Interrupt handler */ +static irqreturn_t +keywest_irq(int irq, void *dev_id, struct pt_regs *regs) +{ + struct keywest_iface *iface = (struct keywest_iface *)dev_id; + + spin_lock(&iface->lock); + del_timer(&iface->timeout_timer); + if (handle_interrupt(iface, read_reg(reg_isr))) + mod_timer(&iface->timeout_timer, jiffies + POLL_TIMEOUT); + spin_unlock(&iface->lock); + return IRQ_HANDLED; +} + +static void +keywest_timeout(unsigned long data) +{ + struct keywest_iface *iface = (struct keywest_iface *)data; + + DBG("timeout !\n"); + spin_lock_irq(&iface->lock); + if (handle_interrupt(iface, read_reg(reg_isr))) + mod_timer(&iface->timeout_timer, jiffies + POLL_TIMEOUT); + spin_unlock(&iface->lock); +} + +/* + * SMBUS-type transfer entrypoint + */ +static s32 +keywest_smbus_xfer( struct i2c_adapter* adap, + u16 addr, + unsigned short flags, + char read_write, + u8 command, + int size, + union i2c_smbus_data* data) +{ + struct keywest_chan* chan = i2c_get_adapdata(adap); + struct keywest_iface* iface = chan->iface; + int len; + u8* buffer; + u16 cur_word; + int rc = 0; + + if (iface->state == state_dead) + return -1; + + /* Prepare datas & select mode */ + iface->cur_mode &= ~KW_I2C_MODE_MODE_MASK; + switch (size) { + case I2C_SMBUS_QUICK: + len = 0; + buffer = NULL; + iface->cur_mode |= KW_I2C_MODE_STANDARD; + break; + case I2C_SMBUS_BYTE: + len = 1; + buffer = &data->byte; + iface->cur_mode |= KW_I2C_MODE_STANDARD; + break; + case I2C_SMBUS_BYTE_DATA: + len = 1; + buffer = &data->byte; + iface->cur_mode |= KW_I2C_MODE_STANDARDSUB; + break; + case I2C_SMBUS_WORD_DATA: + len = 2; + cur_word = cpu_to_le16(data->word); + buffer = (u8 *)&cur_word; + iface->cur_mode |= KW_I2C_MODE_STANDARDSUB; + break; + case I2C_SMBUS_BLOCK_DATA: + len = data->block[0]; + buffer = &data->block[1]; + iface->cur_mode |= KW_I2C_MODE_STANDARDSUB; + break; + default: + return -1; + } + + /* Original driver had this limitation */ + if (len > 32) + len = 32; + + down(&iface->sem); + + DBG("chan: %d, addr: 0x%x, transfer len: %d, read: %d\n", + chan->chan_no, addr, len, read_write == I2C_SMBUS_READ); + + iface->data = buffer; + iface->datalen = len; + iface->state = state_addr; + iface->result = 0; + iface->stopretry = 0; + iface->read_write = read_write; + + /* Setup channel & clear pending irqs */ + write_reg(reg_mode, iface->cur_mode | (chan->chan_no << 4)); + write_reg(reg_isr, read_reg(reg_isr)); + write_reg(reg_status, 0); + + /* Set up address and r/w bit */ + write_reg(reg_addr, + (addr << 1) | ((read_write == I2C_SMBUS_READ) ? 0x01 : 0x00)); + + /* Set up the sub address */ + if ((iface->cur_mode & KW_I2C_MODE_MODE_MASK) == KW_I2C_MODE_STANDARDSUB + || (iface->cur_mode & KW_I2C_MODE_MODE_MASK) == KW_I2C_MODE_COMBINED) + write_reg(reg_subaddr, command); + + /* Arm timeout */ + mod_timer(&iface->timeout_timer, jiffies + POLL_TIMEOUT); + + /* Start sending address & enable interrupt*/ + write_reg(reg_control, read_reg(reg_control) | KW_I2C_CTL_XADDR); + write_reg(reg_ier, KW_I2C_IRQ_MASK); + + /* Wait interrupt operations completion */ + wait_for_completion(&iface->complete); + + rc = iface->result; + DBG("transfer done, result: %d\n", rc); + + if (rc == 0 && size == I2C_SMBUS_WORD_DATA && read_write == I2C_SMBUS_READ) + data->word = le16_to_cpu(cur_word); + + /* Release sem */ + up(&iface->sem); + + return rc; +} + +/* + * Generic i2c master transfer entrypoint + */ +static int +keywest_xfer( struct i2c_adapter *adap, + struct i2c_msg msgs[], + int num) +{ + struct keywest_chan* chan = i2c_get_adapdata(adap); + struct keywest_iface* iface = chan->iface; + struct i2c_msg *pmsg; + int i, completed; + int rc = 0; + + down(&iface->sem); + + /* Set adapter to standard mode */ + iface->cur_mode &= ~KW_I2C_MODE_MODE_MASK; + iface->cur_mode |= KW_I2C_MODE_STANDARD; + + completed = 0; + for (i = 0; rc >= 0 && i < num;) { + u8 addr; + + pmsg = &msgs[i++]; + addr = pmsg->addr; + if (pmsg->flags & I2C_M_TEN) { + printk(KERN_ERR "i2c-keywest: 10 bits addr not supported !\n"); + rc = -EINVAL; + break; + } + DBG("xfer: chan: %d, doing %s %d bytes to 0x%02x - %d of %d messages\n", + chan->chan_no, + pmsg->flags & I2C_M_RD ? "read" : "write", + pmsg->len, addr, i, num); + + /* Setup channel & clear pending irqs */ + write_reg(reg_mode, iface->cur_mode | (chan->chan_no << 4)); + write_reg(reg_isr, read_reg(reg_isr)); + write_reg(reg_status, 0); + + iface->data = pmsg->buf; + iface->datalen = pmsg->len; + iface->state = state_addr; + iface->result = 0; + iface->stopretry = 0; + if (pmsg->flags & I2C_M_RD) + iface->read_write = I2C_SMBUS_READ; + else + iface->read_write = I2C_SMBUS_WRITE; + + /* Set up address and r/w bit */ + if (pmsg->flags & I2C_M_REV_DIR_ADDR) + addr ^= 1; + write_reg(reg_addr, + (addr << 1) | + ((iface->read_write == I2C_SMBUS_READ) ? 0x01 : 0x00)); + + /* Arm timeout */ + mod_timer(&iface->timeout_timer, jiffies + POLL_TIMEOUT); + + /* Start sending address & enable interrupt*/ + write_reg(reg_control, read_reg(reg_control) | KW_I2C_CTL_XADDR); + write_reg(reg_ier, KW_I2C_IRQ_MASK); + + /* Wait interrupt operations completion */ + wait_for_completion(&iface->complete); + + rc = iface->result; + if (rc == 0) + completed++; + DBG("transfer done, result: %d\n", rc); + } + + /* Release sem */ + up(&iface->sem); + + return completed; +} + +static u32 +keywest_func(struct i2c_adapter * adapter) +{ + return I2C_FUNC_SMBUS_QUICK | I2C_FUNC_SMBUS_BYTE | + I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA | + I2C_FUNC_SMBUS_BLOCK_DATA; +} + +/* For now, we only handle combined mode (smbus) */ +static struct i2c_algorithm keywest_algorithm = { + .name = "Keywest i2c", + .id = I2C_ALGO_SMBUS, + .smbus_xfer = keywest_smbus_xfer, + .master_xfer = keywest_xfer, + .functionality = keywest_func, +}; + + +static int +create_iface(struct device_node *np, struct device *dev) +{ + unsigned long steps, *psteps, *prate; + unsigned bsteps, tsize, i, nchan, addroffset; + struct keywest_iface* iface; + int rc; + + psteps = (unsigned long *)get_property(np, "AAPL,address-step", NULL); + steps = psteps ? (*psteps) : 0x10; + + /* Hrm... maybe we can be smarter here */ + for (bsteps = 0; (steps & 0x01) == 0; bsteps++) + steps >>= 1; + + if (!strcmp(np->parent->name, "uni-n")) { + nchan = 2; + addroffset = 3; + } else { + addroffset = 0; + nchan = 1; + } + + tsize = sizeof(struct keywest_iface) + + (sizeof(struct keywest_chan) + 4) * nchan; + iface = (struct keywest_iface *) kmalloc(tsize, GFP_KERNEL); + if (iface == NULL) { + printk(KERN_ERR "i2c-keywest: can't allocate inteface !\n"); + return -ENOMEM; + } + memset(iface, 0, tsize); + init_MUTEX(&iface->sem); + spin_lock_init(&iface->lock); + init_completion(&iface->complete); + iface->bsteps = bsteps; + iface->chan_count = nchan; + iface->state = state_idle; + iface->irq = np->intrs[0].line; + iface->channels = (struct keywest_chan *) + (((unsigned long)(iface + 1) + 3UL) & ~3UL); + iface->base = (unsigned long)ioremap(np->addrs[0].address + addroffset, + np->addrs[0].size); + if (iface->base == 0) { + printk(KERN_ERR "i2c-keywest: can't map inteface !\n"); + kfree(iface); + return -ENOMEM; + } + + init_timer(&iface->timeout_timer); + iface->timeout_timer.function = keywest_timeout; + iface->timeout_timer.data = (unsigned long)iface; + + /* Select interface rate */ + iface->cur_mode = KW_I2C_MODE_100KHZ; + prate = (unsigned long *)get_property(np, "AAPL,i2c-rate", NULL); + if (prate) switch(*prate) { + case 100: + iface->cur_mode = KW_I2C_MODE_100KHZ; + break; + case 50: + iface->cur_mode = KW_I2C_MODE_50KHZ; + break; + case 25: + iface->cur_mode = KW_I2C_MODE_25KHZ; + break; + default: + printk(KERN_WARNING "i2c-keywest: unknown rate %ldKhz, using 100KHz\n", + *prate); + } + + /* Select standard sub mode */ + iface->cur_mode |= KW_I2C_MODE_STANDARDSUB; + + /* Write mode */ + write_reg(reg_mode, iface->cur_mode); + + /* Switch interrupts off & clear them*/ + write_reg(reg_ier, 0x00); + write_reg(reg_isr, KW_I2C_IRQ_MASK); + + /* Request chip interrupt */ + rc = request_irq(iface->irq, keywest_irq, 0, "keywest i2c", iface); + if (rc) { + printk(KERN_ERR "i2c-keywest: can't get IRQ %d !\n", iface->irq); + iounmap((void *)iface->base); + kfree(iface); + return -ENODEV; + } + + dev_set_drvdata(dev, iface); + + for (i=0; ichannels[i]; + u8 addr; + + sprintf(chan->adapter.name, "%s %d", np->parent->name, i); + chan->iface = iface; + chan->chan_no = i; + chan->adapter.id = I2C_ALGO_SMBUS; + chan->adapter.algo = &keywest_algorithm; + chan->adapter.algo_data = NULL; + chan->adapter.client_register = NULL; + chan->adapter.client_unregister = NULL; + i2c_set_adapdata(&chan->adapter, chan); + chan->adapter.dev.parent = dev; + + rc = i2c_add_adapter(&chan->adapter); + if (rc) { + printk("i2c-keywest.c: Adapter %s registration failed\n", + chan->adapter.name); + i2c_set_adapdata(&chan->adapter, NULL); + } + if (probe) { + printk("Probe: "); + for (addr = 0x00; addr <= 0x7f; addr++) { + if (i2c_smbus_xfer(&chan->adapter,addr, + 0,0,0,I2C_SMBUS_QUICK,NULL) >= 0) + printk("%02x ", addr); + } + printk("\n"); + } + } + + printk(KERN_INFO "Found KeyWest i2c on \"%s\", %d channel%s, stepping: %d bits\n", + np->parent->name, nchan, nchan > 1 ? "s" : "", bsteps); + + return 0; +} + +static int +dispose_iface(struct device *dev) +{ + struct keywest_iface *iface = dev_get_drvdata(dev); + int i, rc; + + /* Make sure we stop all activity */ + down(&iface->sem); + + spin_lock_irq(&iface->lock); + while (iface->state != state_idle) { + spin_unlock_irq(&iface->lock); + set_task_state(current,TASK_UNINTERRUPTIBLE); + schedule_timeout(HZ/10); + spin_lock_irq(&iface->lock); + } + iface->state = state_dead; + spin_unlock_irq(&iface->lock); + free_irq(iface->irq, iface); + up(&iface->sem); + + /* Release all channels */ + for (i=0; ichan_count; i++) { + struct keywest_chan* chan = &iface->channels[i]; + if (i2c_get_adapdata(&chan->adapter) == NULL) + continue; + rc = i2c_del_adapter(&chan->adapter); + i2c_set_adapdata(&chan->adapter, NULL); + /* We aren't that prepared to deal with this... */ + if (rc) + printk("i2c-keywest.c: i2c_del_adapter failed, that's bad !\n"); + } + iounmap((void *)iface->base); + dev_set_drvdata(dev, NULL); + kfree(iface); + + return 0; +} + +static int +create_iface_macio(struct macio_dev* dev, const struct of_match *match) +{ + return create_iface(dev->ofdev.node, &dev->ofdev.dev); +} + +static int +dispose_iface_macio(struct macio_dev* dev) +{ + return dispose_iface(&dev->ofdev.dev); +} + +static int +create_iface_of_platform(struct of_device* dev, const struct of_match *match) +{ + return create_iface(dev->node, &dev->dev); +} + +static int +dispose_iface_of_platform(struct of_device* dev) +{ + return dispose_iface(&dev->dev); +} + +static struct of_match i2c_keywest_match[] = +{ + { + .name = OF_ANY_MATCH, + .type = "i2c", + .compatible = "keywest" + }, + {}, +}; + +static struct macio_driver i2c_keywest_macio_driver = +{ + .name = "i2c-keywest", + .match_table = i2c_keywest_match, + .probe = create_iface_macio, + .remove = dispose_iface_macio +}; + +static struct of_platform_driver i2c_keywest_of_platform_driver = +{ + .name = "i2c-keywest", + .match_table = i2c_keywest_match, + .probe = create_iface_of_platform, + .remove = dispose_iface_of_platform +}; + +static int __init +i2c_keywest_init(void) +{ + macio_register_driver(&i2c_keywest_macio_driver); + of_register_driver(&i2c_keywest_of_platform_driver); + + return 0; +} + +static void __exit +i2c_keywest_cleanup(void) +{ + macio_unregister_driver(&i2c_keywest_macio_driver); + of_unregister_driver(&i2c_keywest_of_platform_driver); +} + +module_init(i2c_keywest_init); +module_exit(i2c_keywest_cleanup); diff -prauN linux-2.6.0-test5/drivers/i2c/busses/i2c-keywest.h wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-keywest.h --- linux-2.6.0-test5/drivers/i2c/busses/i2c-keywest.h 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-keywest.h 2003-09-25 19:15:55.000000000 -0700 @@ -0,0 +1,110 @@ +#ifndef __I2C_KEYWEST_H__ +#define __I2C_KEYWEST_H__ + +/* The Tumbler audio equalizer can be really slow sometimes */ +#define POLL_TIMEOUT (2*HZ) + +/* Register indices */ +typedef enum { + reg_mode = 0, + reg_control, + reg_status, + reg_isr, + reg_ier, + reg_addr, + reg_subaddr, + reg_data +} reg_t; + + +/* Mode register */ +#define KW_I2C_MODE_100KHZ 0x00 +#define KW_I2C_MODE_50KHZ 0x01 +#define KW_I2C_MODE_25KHZ 0x02 +#define KW_I2C_MODE_DUMB 0x00 +#define KW_I2C_MODE_STANDARD 0x04 +#define KW_I2C_MODE_STANDARDSUB 0x08 +#define KW_I2C_MODE_COMBINED 0x0C +#define KW_I2C_MODE_MODE_MASK 0x0C +#define KW_I2C_MODE_CHAN_MASK 0xF0 + +/* Control register */ +#define KW_I2C_CTL_AAK 0x01 +#define KW_I2C_CTL_XADDR 0x02 +#define KW_I2C_CTL_STOP 0x04 +#define KW_I2C_CTL_START 0x08 + +/* Status register */ +#define KW_I2C_STAT_BUSY 0x01 +#define KW_I2C_STAT_LAST_AAK 0x02 +#define KW_I2C_STAT_LAST_RW 0x04 +#define KW_I2C_STAT_SDA 0x08 +#define KW_I2C_STAT_SCL 0x10 + +/* IER & ISR registers */ +#define KW_I2C_IRQ_DATA 0x01 +#define KW_I2C_IRQ_ADDR 0x02 +#define KW_I2C_IRQ_STOP 0x04 +#define KW_I2C_IRQ_START 0x08 +#define KW_I2C_IRQ_MASK 0x0F + +/* Physical interface */ +struct keywest_iface +{ + unsigned long base; + unsigned bsteps; + int irq; + struct semaphore sem; + spinlock_t lock; + struct keywest_chan* channels; + unsigned chan_count; + u8 cur_mode; + char read_write; + u8* data; + unsigned datalen; + int state; + int result; + int stopretry; + struct timer_list timeout_timer; + struct completion complete; +}; + +enum { + state_idle, + state_addr, + state_read, + state_write, + state_stop, + state_dead +}; + +/* Channel on an interface */ +struct keywest_chan +{ + struct i2c_adapter adapter; + struct keywest_iface* iface; + unsigned chan_no; +}; + +/* Register access */ + +static inline u8 __read_reg(struct keywest_iface *iface, reg_t reg) +{ + return in_8(((volatile u8 *)iface->base) + + (((unsigned)reg) << iface->bsteps)); +} + +static inline void __write_reg(struct keywest_iface *iface, reg_t reg, u8 val) +{ + out_8(((volatile u8 *)iface->base) + + (((unsigned)reg) << iface->bsteps), val); + (void)__read_reg(iface, reg); + udelay(10); +} + +#define write_reg(reg, val) __write_reg(iface, reg, val) +#define read_reg(reg) __read_reg(iface, reg) + + + +#endif /* __I2C_KEYWEST_H__ */ diff -prauN linux-2.6.0-test5/drivers/i2c/busses/i2c-nforce2.c wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-nforce2.c --- linux-2.6.0-test5/drivers/i2c/busses/i2c-nforce2.c 2003-09-08 12:49:54.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-nforce2.c 2003-09-25 19:15:55.000000000 -0700 @@ -118,7 +118,6 @@ static struct i2c_algorithm smbus_algori static struct i2c_adapter nforce2_adapter = { .owner = THIS_MODULE, - .id = I2C_ALGO_SMBUS | I2C_HW_SMBUS_NFORCE2, .class = I2C_ADAP_CLASS_SMBUS, .algo = &smbus_algorithm, .name = "unset", @@ -321,7 +320,7 @@ static int __devinit nforce2_probe_smb ( smbus->adapter = nforce2_adapter; smbus->adapter.algo_data = smbus; smbus->adapter.dev.parent = &dev->dev; - snprintf(smbus->adapter.name, DEVICE_NAME_SIZE, + snprintf(smbus->adapter.name, I2C_NAME_SIZE, "SMBus nForce2 adapter at %04x", smbus->base); error = i2c_add_adapter(&smbus->adapter); diff -prauN linux-2.6.0-test5/drivers/i2c/busses/i2c-philips-par.c wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-philips-par.c --- linux-2.6.0-test5/drivers/i2c/busses/i2c-philips-par.c 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-philips-par.c 2003-09-25 19:15:55.000000000 -0700 @@ -0,0 +1,243 @@ +/* ------------------------------------------------------------------------- */ +/* i2c-philips-par.c i2c-hw access for philips style parallel port adapters */ +/* ------------------------------------------------------------------------- */ +/* Copyright (C) 1995-2000 Simon G. Vogl + + 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 of the License, 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, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +/* ------------------------------------------------------------------------- */ + +/* With some changes from Kyösti Mälkki and even + Frodo Looijaard */ + +/* $Id: i2c-philips-par.c,v 1.29 2003/01/21 08:08:16 kmalkki Exp $ */ + +#include +#include +#include +#include +#include +#include + +static int type; + +struct i2c_par +{ + struct pardevice *pdev; + struct i2c_adapter adapter; + struct i2c_algo_bit_data bit_lp_data; + struct i2c_par *next; +}; + +static struct i2c_par *adapter_list; + + +/* ----- printer port defines ------------------------------------------*/ + /* Pin Port Inverted name */ +#define I2C_ON 0x20 /* 12 status N paper */ + /* ... only for phil. not used */ +#define I2C_SDA 0x80 /* 9 data N data7 */ +#define I2C_SCL 0x08 /* 17 ctrl N dsel */ + +#define I2C_SDAIN 0x80 /* 11 stat Y busy */ +#define I2C_SCLIN 0x08 /* 15 stat Y enable */ + +#define I2C_DMASK 0x7f +#define I2C_CMASK 0xf7 + +/* ----- local functions ---------------------------------------------- */ + +static void bit_lp_setscl(void *data, int state) +{ + /*be cautious about state of the control register - + touch only the one bit needed*/ + if (state) { + parport_write_control((struct parport *) data, + parport_read_control((struct parport *) data)|I2C_SCL); + } else { + parport_write_control((struct parport *) data, + parport_read_control((struct parport *) data)&I2C_CMASK); + } +} + +static void bit_lp_setsda(void *data, int state) +{ + if (state) { + parport_write_data((struct parport *) data, I2C_DMASK); + } else { + parport_write_data((struct parport *) data, I2C_SDA); + } +} + +static int bit_lp_getscl(void *data) +{ + return parport_read_status((struct parport *) data) & I2C_SCLIN; +} + +static int bit_lp_getsda(void *data) +{ + return parport_read_status((struct parport *) data) & I2C_SDAIN; +} + +static void bit_lp_setscl2(void *data, int state) +{ + if (state) { + parport_write_data((struct parport *) data, + parport_read_data((struct parport *) data)|0x1); + } else { + parport_write_data((struct parport *) data, + parport_read_data((struct parport *) data)&0xfe); + } +} + +static void bit_lp_setsda2(void *data, int state) +{ + if (state) { + parport_write_data((struct parport *) data, + parport_read_data((struct parport *) data)|0x2); + } else { + parport_write_data((struct parport *) data, + parport_read_data((struct parport *) data)&0xfd); + } +} + +static int bit_lp_getsda2(void *data) +{ + return (parport_read_status((struct parport *) data) & + PARPORT_STATUS_BUSY) ? 0 : 1; +} + +/* ------------------------------------------------------------------------ + * Encapsulate the above functions in the correct operations structure. + * This is only done when more than one hardware adapter is supported. + */ + +static struct i2c_algo_bit_data bit_lp_data = { + .setsda = bit_lp_setsda, + .setscl = bit_lp_setscl, + .getsda = bit_lp_getsda, + .getscl = bit_lp_getscl, + .udelay = 80, + .mdelay = 80, + .timeout = HZ +}; + +static struct i2c_algo_bit_data bit_lp_data2 = { + .setsda = bit_lp_setsda2, + .setscl = bit_lp_setscl2, + .getsda = bit_lp_getsda2, + .udelay = 80, + .mdelay = 80, + .timeout = HZ +}; + +static struct i2c_adapter bit_lp_ops = { + .owner = THIS_MODULE, + .id = I2C_HW_B_LP, + .name = "Philips Parallel port adapter", +}; + +static void i2c_parport_attach (struct parport *port) +{ + struct i2c_par *adapter = kmalloc(sizeof(struct i2c_par), + GFP_KERNEL); + if (!adapter) { + printk(KERN_ERR "i2c-philips-par: Unable to malloc.\n"); + return; + } + memset (adapter, 0x00, sizeof(struct i2c_par)); + + /* printk(KERN_DEBUG "i2c-philips-par.o: attaching to %s\n", port->name); */ + + adapter->pdev = parport_register_device(port, "i2c-philips-par", + NULL, NULL, NULL, + PARPORT_FLAG_EXCL, + NULL); + if (!adapter->pdev) { + printk(KERN_ERR "i2c-philips-par: Unable to register with parport.\n"); + kfree(adapter); + return; + } + + adapter->adapter = bit_lp_ops; + adapter->adapter.algo_data = &adapter->bit_lp_data; + adapter->bit_lp_data = type ? bit_lp_data2 : bit_lp_data; + adapter->bit_lp_data.data = port; + + if (parport_claim_or_block(adapter->pdev) < 0 ) { + printk(KERN_ERR "i2c-philips-par: Could not claim parallel port.\n"); + kfree(adapter); + return; + } + /* reset hardware to sane state */ + bit_lp_setsda(port, 1); + bit_lp_setscl(port, 1); + parport_release(adapter->pdev); + + if (i2c_bit_add_bus(&adapter->adapter) < 0) { + printk(KERN_ERR "i2c-philips-par: Unable to register with I2C.\n"); + parport_unregister_device(adapter->pdev); + kfree(adapter); + return; /* No good */ + } + + adapter->next = adapter_list; + adapter_list = adapter; +} + +static void i2c_parport_detach (struct parport *port) +{ + struct i2c_par *adapter, *prev = NULL; + + for (adapter = adapter_list; adapter; adapter = adapter->next) { + if (adapter->pdev->port == port) { + parport_unregister_device(adapter->pdev); + i2c_bit_del_bus(&adapter->adapter); + if (prev) + prev->next = adapter->next; + else + adapter_list = adapter->next; + kfree(adapter); + return; + } + prev = adapter; + } +} + +static struct parport_driver i2c_driver = { + .name = "i2c-philips-par", + .attach = i2c_parport_attach, + .detach = i2c_parport_detach, +}; + +int __init i2c_bitlp_init(void) +{ + printk(KERN_INFO "i2c Philips parallel port adapter driver\n"); + + return parport_register_driver(&i2c_driver); +} + +void __exit i2c_bitlp_exit(void) +{ + parport_unregister_driver(&i2c_driver); +} + +MODULE_AUTHOR("Simon G. Vogl "); +MODULE_DESCRIPTION("I2C-Bus adapter routines for Philips parallel port adapter"); +MODULE_LICENSE("GPL"); + +MODULE_PARM(type, "i"); + +module_init(i2c_bitlp_init); +module_exit(i2c_bitlp_exit); diff -prauN linux-2.6.0-test5/drivers/i2c/busses/i2c-piix4.c wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-piix4.c --- linux-2.6.0-test5/drivers/i2c/busses/i2c-piix4.c 2003-09-08 12:49:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-piix4.c 2003-09-25 19:15:55.000000000 -0700 @@ -395,7 +395,6 @@ static struct i2c_algorithm smbus_algori static struct i2c_adapter piix4_adapter = { .owner = THIS_MODULE, - .id = I2C_ALGO_SMBUS | I2C_HW_SMBUS_PIIX4, .class = I2C_ADAP_CLASS_SMBUS, .algo = &smbus_algorithm, .name = "unset", @@ -451,7 +450,7 @@ static int __devinit piix4_probe(struct /* set up the driverfs linkage to our parent device */ piix4_adapter.dev.parent = &dev->dev; - snprintf(piix4_adapter.name, DEVICE_NAME_SIZE, + snprintf(piix4_adapter.name, I2C_NAME_SIZE, "SMBus PIIX4 adapter at %04x", piix4_smba); retval = i2c_add_adapter(&piix4_adapter); @@ -474,7 +473,6 @@ static struct pci_driver piix4_driver = static int __init i2c_piix4_init(void) { - printk(KERN_INFO "i2c-piix4 version %s (%s)\n", I2C_VERSION, I2C_DATE); return pci_module_init(&piix4_driver); } diff -prauN linux-2.6.0-test5/drivers/i2c/busses/i2c-prosavage.c wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-prosavage.c --- linux-2.6.0-test5/drivers/i2c/busses/i2c-prosavage.c 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-prosavage.c 2003-09-25 19:15:55.000000000 -0700 @@ -0,0 +1,338 @@ +/* + * kernel/busses/i2c-prosavage.c + * + * i2c bus driver for S3/VIA 8365/8375 graphics processor. + * Copyright (c) 2003 Henk Vergonet + * Based on code written by: + * Frodo Looijaard , + * Philip Edelbrock , + * Ralph Metzler , and + * Mark D. Studebaker + * Simon Vogl + * and others + * + * Please read the lm_sensors documentation for details on use. + * + * 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 of the License, 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, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ +/* 18-05-2003 HVE - created + * 14-06-2003 HVE - adapted for lm_sensors2 + * 17-06-2003 HVE - linux 2.5.xx compatible + * 18-06-2003 HVE - codingstyle + * 21-06-2003 HVE - compatibility lm_sensors2 and linux 2.5.xx + * codingstyle, mmio enabled + * + * This driver interfaces to the I2C bus of the VIA north bridge embedded + * ProSavage4/8 devices. Usefull for gaining access to the TV Encoder chips. + * + * Graphics cores: + * S3/VIA KM266/VT8375 aka ProSavage8 + * S3/VIA KM133/VT8365 aka Savage4 + * + * Two serial busses are implemented: + * SERIAL1 - I2C serial communications interface + * SERIAL2 - DDC2 monitor communications interface + * + * Tested on a FX41 mainboard, see http://www.shuttle.com + * + * + * TODO: + * - integration with prosavage framebuffer device + * (Additional documentation needed :( + */ + +#include +#include +#include +#include +#include +#include + +/* + * driver configuration + */ +#define MAX_BUSSES 2 + +struct s_i2c_bus { + void *mmvga; + int i2c_reg; + int adap_ok; + struct i2c_adapter adap; + struct i2c_algo_bit_data algo; +}; + +struct s_i2c_chip { + void *mmio; + struct s_i2c_bus i2c_bus[MAX_BUSSES]; +}; + + +/* + * i2c configuration + */ +#ifndef I2C_HW_B_S3VIA +#define I2C_HW_B_S3VIA 0x18 /* S3VIA ProSavage adapter */ +#endif + +/* delays */ +#define CYCLE_DELAY 10 +#define TIMEOUT (HZ / 2) + + +/* + * S3/VIA 8365/8375 registers + */ +#ifndef PCI_DEVICE_ID_S3_SAVAGE4 +#define PCI_DEVICE_ID_S3_SAVAGE4 0x8a25 +#endif +#ifndef PCI_DEVICE_ID_S3_PROSAVAGE8 +#define PCI_DEVICE_ID_S3_PROSAVAGE8 0x8d04 +#endif + +#define VGA_CR_IX 0x3d4 +#define VGA_CR_DATA 0x3d5 + +#define CR_SERIAL1 0xa0 /* I2C serial communications interface */ +#define MM_SERIAL1 0xff20 +#define CR_SERIAL2 0xb1 /* DDC2 monitor communications interface */ + +/* based on vt8365 documentation */ +#define I2C_ENAB 0x10 +#define I2C_SCL_OUT 0x01 +#define I2C_SDA_OUT 0x02 +#define I2C_SCL_IN 0x04 +#define I2C_SDA_IN 0x08 + +#define SET_CR_IX(p, val) writeb((val), (p)->mmvga + VGA_CR_IX) +#define SET_CR_DATA(p, val) writeb((val), (p)->mmvga + VGA_CR_DATA) +#define GET_CR_DATA(p) readb((p)->mmvga + VGA_CR_DATA) + + +/* + * Serial bus line handling + * + * serial communications register as parameter in private data + * + * TODO: locks with other code sections accessing video registers? + */ +static void bit_s3via_setscl(void *bus, int val) +{ + struct s_i2c_bus *p = (struct s_i2c_bus *)bus; + unsigned int r; + + SET_CR_IX(p, p->i2c_reg); + r = GET_CR_DATA(p); + r |= I2C_ENAB; + if (val) { + r |= I2C_SCL_OUT; + } else { + r &= ~I2C_SCL_OUT; + } + SET_CR_DATA(p, r); +} + +static void bit_s3via_setsda(void *bus, int val) +{ + struct s_i2c_bus *p = (struct s_i2c_bus *)bus; + unsigned int r; + + SET_CR_IX(p, p->i2c_reg); + r = GET_CR_DATA(p); + r |= I2C_ENAB; + if (val) { + r |= I2C_SDA_OUT; + } else { + r &= ~I2C_SDA_OUT; + } + SET_CR_DATA(p, r); +} + +static int bit_s3via_getscl(void *bus) +{ + struct s_i2c_bus *p = (struct s_i2c_bus *)bus; + + SET_CR_IX(p, p->i2c_reg); + return (0 != (GET_CR_DATA(p) & I2C_SCL_IN)); +} + +static int bit_s3via_getsda(void *bus) +{ + struct s_i2c_bus *p = (struct s_i2c_bus *)bus; + + SET_CR_IX(p, p->i2c_reg); + return (0 != (GET_CR_DATA(p) & I2C_SDA_IN)); +} + + +/* + * adapter initialisation + */ +static int i2c_register_bus(struct pci_dev *dev, struct s_i2c_bus *p, u8 *mmvga, u32 i2c_reg) +{ + int ret; + p->adap.owner = THIS_MODULE; + p->adap.id = I2C_HW_B_S3VIA; + p->adap.algo_data = &p->algo; + p->adap.dev.parent = &dev->dev; + p->algo.setsda = bit_s3via_setsda; + p->algo.setscl = bit_s3via_setscl; + p->algo.getsda = bit_s3via_getsda; + p->algo.getscl = bit_s3via_getscl; + p->algo.udelay = CYCLE_DELAY; + p->algo.mdelay = CYCLE_DELAY; + p->algo.timeout = TIMEOUT; + p->algo.data = p; + p->mmvga = mmvga; + p->i2c_reg = i2c_reg; + + ret = i2c_bit_add_bus(&p->adap); + if (ret) { + return ret; + } + + p->adap_ok = 1; + return 0; +} + + +/* + * Cleanup stuff + */ +static void __devexit prosavage_remove(struct pci_dev *dev) +{ + struct s_i2c_chip *chip; + int i, ret; + + chip = (struct s_i2c_chip *)pci_get_drvdata(dev); + + if (!chip) { + return; + } + for (i = MAX_BUSSES - 1; i >= 0; i--) { + if (chip->i2c_bus[i].adap_ok == 0) + continue; + + ret = i2c_bit_del_bus(&chip->i2c_bus[i].adap); + if (ret) { + dev_err(&dev->dev, ": %s not removed\n", + chip->i2c_bus[i].adap.name); + } + } + if (chip->mmio) { + iounmap(chip->mmio); + } + kfree(chip); +} + + +/* + * Detect chip and initialize it + */ +static int __devinit prosavage_probe(struct pci_dev *dev, const struct pci_device_id *id) +{ + int ret; + unsigned long base, len; + struct s_i2c_chip *chip; + struct s_i2c_bus *bus; + + pci_set_drvdata(dev, kmalloc(sizeof(struct s_i2c_chip), GFP_KERNEL)); + chip = (struct s_i2c_chip *)pci_get_drvdata(dev); + if (chip == NULL) { + return -ENOMEM; + } + + memset(chip, 0, sizeof(struct s_i2c_chip)); + + base = dev->resource[0].start & PCI_BASE_ADDRESS_MEM_MASK; + len = dev->resource[0].end - base + 1; + chip->mmio = ioremap_nocache(base, len); + + if (chip->mmio == NULL) { + dev_err(&dev->dev, "ioremap failed\n"); + prosavage_remove(dev); + return -ENODEV; + } + + + /* + * Chip initialisation + */ + /* Unlock Extended IO Space ??? */ + + + /* + * i2c bus registration + */ + bus = &chip->i2c_bus[0]; + snprintf(bus->adap.name, sizeof(bus->adap.name), + "ProSavage I2C bus at %02x:%02x.%x", + dev->bus->number, PCI_SLOT(dev->devfn), PCI_FUNC(dev->devfn)); + ret = i2c_register_bus(dev, bus, chip->mmio + 0x8000, CR_SERIAL1); + if (ret) { + goto err_adap; + } + /* + * ddc bus registration + */ + bus = &chip->i2c_bus[1]; + snprintf(bus->adap.name, sizeof(bus->adap.name), + "ProSavage DDC bus at %02x:%02x.%x", + dev->bus->number, PCI_SLOT(dev->devfn), PCI_FUNC(dev->devfn)); + ret = i2c_register_bus(dev, bus, chip->mmio + 0x8000, CR_SERIAL2); + if (ret) { + goto err_adap; + } + return 0; +err_adap: + dev_err(&dev->dev, ": %s failed\n", bus->adap.name); + prosavage_remove(dev); + return ret; +} + + +/* + * Data for PCI driver interface + */ +static struct pci_device_id prosavage_pci_tbl[] = { + { PCI_DEVICE(PCI_VENDOR_ID_S3, PCI_DEVICE_ID_S3_SAVAGE4) }, + { PCI_DEVICE(PCI_VENDOR_ID_S3, PCI_DEVICE_ID_S3_PROSAVAGE8) }, + { 0, }, +}; + +static struct pci_driver prosavage_driver = { + .name = "prosavage-smbus", + .id_table = prosavage_pci_tbl, + .probe = prosavage_probe, + .remove = __devexit_p(prosavage_remove), +}; + +static int __init i2c_prosavage_init(void) +{ + return pci_module_init(&prosavage_driver); +} + +static void __exit i2c_prosavage_exit(void) +{ + pci_unregister_driver(&prosavage_driver); +} + +MODULE_DEVICE_TABLE(pci, prosavage_pci_tbl); +MODULE_AUTHOR("Henk Vergonet"); +MODULE_DESCRIPTION("ProSavage VIA 8365/8375 smbus driver"); +MODULE_LICENSE("GPL"); + +module_init (i2c_prosavage_init); +module_exit (i2c_prosavage_exit); diff -prauN linux-2.6.0-test5/drivers/i2c/busses/i2c-rpx.c wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-rpx.c --- linux-2.6.0-test5/drivers/i2c/busses/i2c-rpx.c 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-rpx.c 2003-09-25 19:15:55.000000000 -0700 @@ -0,0 +1,103 @@ +/* + * Embedded Planet RPX Lite MPC8xx CPM I2C interface. + * Copyright (c) 1999 Dan Malek (dmalek@jlc.net). + * + * moved into proper i2c interface; + * Brad Parker (brad@heeltoe.com) + * + * RPX lite specific parts of the i2c interface + * Update: There actually isn't anything RPXLite-specific about this module. + * This should work for most any 8xx board. The console messages have been + * changed to eliminate RPXLite references. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +static void +rpx_iic_init(struct i2c_algo_8xx_data *data) +{ + volatile cpm8xx_t *cp; + volatile immap_t *immap; + + cp = cpmp; /* Get pointer to Communication Processor */ + immap = (immap_t *)IMAP_ADDR; /* and to internal registers */ + + data->iip = (iic_t *)&cp->cp_dparam[PROFF_IIC]; + + /* Check for and use a microcode relocation patch. + */ + if ((data->reloc = data->iip->iic_rpbase)) + data->iip = (iic_t *)&cp->cp_dpmem[data->iip->iic_rpbase]; + + data->i2c = (i2c8xx_t *)&(immap->im_i2c); + data->cp = cp; + + /* Initialize Port B IIC pins. + */ + cp->cp_pbpar |= 0x00000030; + cp->cp_pbdir |= 0x00000030; + cp->cp_pbodr |= 0x00000030; + + /* Allocate space for two transmit and two receive buffer + * descriptors in the DP ram. + */ + data->dp_addr = m8xx_cpm_dpalloc(sizeof(cbd_t) * 4); + + /* ptr to i2c area */ + data->i2c = (i2c8xx_t *)&(((immap_t *)IMAP_ADDR)->im_i2c); +} + +static int rpx_install_isr(int irq, void (*func)(void *, void *), void *data) +{ + /* install interrupt handler */ + cpm_install_handler(irq, (void (*)(void *, struct pt_regs *)) func, data); + + return 0; +} + +static struct i2c_algo_8xx_data rpx_data = { + .setisr = rpx_install_isr +}; + +static struct i2c_adapter rpx_ops = { + .owner = THIS_MODULE, + .name = "m8xx", + .id = I2C_HW_MPC8XX_EPON, + .algo_data = &rpx_data, +}; + +int __init i2c_rpx_init(void) +{ + printk(KERN_INFO "i2c-rpx: i2c MPC8xx driver\n"); + + /* reset hardware to sane state */ + rpx_iic_init(&rpx_data); + + if (i2c_8xx_add_bus(&rpx_ops) < 0) { + printk("i2c-rpx: Unable to register with I2C\n"); + return -ENODEV; + } + + return 0; +} + +void __exit i2c_rpx_exit(void) +{ + i2c_8xx_del_bus(&rpx_ops); +} + +MODULE_AUTHOR("Dan Malek "); +MODULE_DESCRIPTION("I2C-Bus adapter routines for MPC8xx boards"); + +module_init(i2c_rpx_init); +module_exit(i2c_rpx_exit); diff -prauN linux-2.6.0-test5/drivers/i2c/busses/i2c-savage4.c wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-savage4.c --- linux-2.6.0-test5/drivers/i2c/busses/i2c-savage4.c 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-savage4.c 2003-09-25 19:15:55.000000000 -0700 @@ -0,0 +1,206 @@ +/* + i2c-savage4.c - Part of lm_sensors, Linux kernel modules for hardware + monitoring + Copyright (c) 1998, 1999 Frodo Looijaard , + Philip Edelbrock , + Ralph Metzler , and + Mark D. Studebaker + + Based on code written by Ralph Metzler and + Simon Vogl + + 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 of the License, 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, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +/* This interfaces to the I2C bus of the Savage4 to gain access to + the BT869 and possibly other I2C devices. The DDC bus is not + yet supported because its register is not memory-mapped. + However we leave the DDC code here, commented out, to make + it easier to add later. +*/ + +#include +#include +#include +#include +#include +#include +#include + +/* 3DFX defines */ +#define PCI_CHIP_SAVAGE3D 0x8A20 +#define PCI_CHIP_SAVAGE3D_MV 0x8A21 +#define PCI_CHIP_SAVAGE4 0x8A22 +#define PCI_CHIP_SAVAGE2000 0x9102 +#define PCI_CHIP_PROSAVAGE_PM 0x8A25 +#define PCI_CHIP_PROSAVAGE_KM 0x8A26 +#define PCI_CHIP_SAVAGE_MX_MV 0x8c10 +#define PCI_CHIP_SAVAGE_MX 0x8c11 +#define PCI_CHIP_SAVAGE_IX_MV 0x8c12 +#define PCI_CHIP_SAVAGE_IX 0x8c13 + +#define REG 0xff20 /* Serial Port 1 Register */ + +/* bit locations in the register */ +#define DDC_ENAB 0x00040000 +#define DDC_SCL_OUT 0x00080000 +#define DDC_SDA_OUT 0x00100000 +#define DDC_SCL_IN 0x00200000 +#define DDC_SDA_IN 0x00400000 +#define I2C_ENAB 0x00000020 +#define I2C_SCL_OUT 0x00000001 +#define I2C_SDA_OUT 0x00000002 +#define I2C_SCL_IN 0x00000008 +#define I2C_SDA_IN 0x00000010 + +/* initialization states */ +#define INIT2 0x20 +#define INIT3 0x04 + +/* delays */ +#define CYCLE_DELAY 10 +#define TIMEOUT (HZ / 2) + + +static void *ioaddr; + +/* The sav GPIO registers don't have individual masks for each bit + so we always have to read before writing. */ + +static void bit_savi2c_setscl(void *data, int val) +{ + unsigned int r; + r = readl(ioaddr + REG); + if(val) + r |= I2C_SCL_OUT; + else + r &= ~I2C_SCL_OUT; + writel(r, ioaddr + REG); + readl(ioaddr + REG); /* flush posted write */ +} + +static void bit_savi2c_setsda(void *data, int val) +{ + unsigned int r; + r = readl(ioaddr + REG); + if(val) + r |= I2C_SDA_OUT; + else + r &= ~I2C_SDA_OUT; + writel(r, ioaddr + REG); + readl(ioaddr + REG); /* flush posted write */ +} + +/* The GPIO pins are open drain, so the pins always remain outputs. + We rely on the i2c-algo-bit routines to set the pins high before + reading the input from other chips. */ + +static int bit_savi2c_getscl(void *data) +{ + return (0 != (readl(ioaddr + REG) & I2C_SCL_IN)); +} + +static int bit_savi2c_getsda(void *data) +{ + return (0 != (readl(ioaddr + REG) & I2C_SDA_IN)); +} + +/* Configures the chip */ + +static int config_s4(struct pci_dev *dev) +{ + unsigned int cadr; + + /* map memory */ + cadr = dev->resource[0].start; + cadr &= PCI_BASE_ADDRESS_MEM_MASK; + ioaddr = ioremap_nocache(cadr, 0x0080000); + if (ioaddr) { + /* writel(0x8160, ioaddr + REG2); */ + writel(0x00000020, ioaddr + REG); + dev_info(&dev->dev, "Using Savage4 at %p\n", ioaddr); + return 0; + } + return -ENODEV; +} + +static struct i2c_algo_bit_data sav_i2c_bit_data = { + .setsda = bit_savi2c_setsda, + .setscl = bit_savi2c_setscl, + .getsda = bit_savi2c_getsda, + .getscl = bit_savi2c_getscl, + .udelay = CYCLE_DELAY, + .mdelay = CYCLE_DELAY, + .timeout = TIMEOUT +}; + +static struct i2c_adapter savage4_i2c_adapter = { + .owner = THIS_MODULE, + .name = "I2C Savage4 adapter", + .algo_data = &sav_i2c_bit_data, +}; + +static struct pci_device_id savage4_ids[] __devinitdata = { + { PCI_DEVICE(PCI_VENDOR_ID_S3, PCI_CHIP_SAVAGE4) }, + { PCI_DEVICE(PCI_VENDOR_ID_S3, PCI_CHIP_SAVAGE2000) }, + { 0, } +}; + +static int __devinit savage4_probe(struct pci_dev *dev, const struct pci_device_id *id) +{ + int retval; + + retval = config_s4(dev); + if (retval) + return retval; + + /* set up the sysfs linkage to our parent device */ + savage4_i2c_adapter.dev.parent = &dev->dev; + + return i2c_bit_add_bus(&savage4_i2c_adapter); +} + +static void __devexit savage4_remove(struct pci_dev *dev) +{ + i2c_bit_del_bus(&savage4_i2c_adapter); + iounmap(ioaddr); +} + +static struct pci_driver savage4_driver = { + .name = "savage4 smbus", + .id_table = savage4_ids, + .probe = savage4_probe, + .remove = __devexit_p(savage4_remove), +}; + +static int __init i2c_savage4_init(void) +{ + return pci_module_init(&savage4_driver); +} + +static void __exit i2c_savage4_exit(void) +{ + pci_unregister_driver(&savage4_driver); +} + +MODULE_AUTHOR("Frodo Looijaard , " + "Philip Edelbrock , " + "Ralph Metzler , " + "and Mark D. Studebaker "); +MODULE_DESCRIPTION("Savage4 I2C/SMBus driver"); +MODULE_LICENSE("GPL"); + +module_init(i2c_savage4_init); +module_exit(i2c_savage4_exit); diff -prauN linux-2.6.0-test5/drivers/i2c/busses/i2c-sis5595.c wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-sis5595.c --- linux-2.6.0-test5/drivers/i2c/busses/i2c-sis5595.c 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-sis5595.c 2003-09-25 19:15:55.000000000 -0700 @@ -0,0 +1,417 @@ +/* + sis5595.c - Part of lm_sensors, Linux kernel modules for hardware + monitoring + Copyright (c) 1998, 1999 Frodo Looijaard and + Philip Edelbrock + + 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 of the License, 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, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +/* Note: we assume there can only be one SIS5595 with one SMBus interface */ + +/* + Note: all have mfr. ID 0x1039. + SUPPORTED PCI ID + 5595 0008 + + Note: these chips contain a 0008 device which is incompatible with the + 5595. We recognize these by the presence of the listed + "blacklist" PCI ID and refuse to load. + + NOT SUPPORTED PCI ID BLACKLIST PCI ID + 540 0008 0540 + 550 0008 0550 + 5513 0008 5511 + 5581 0008 5597 + 5582 0008 5597 + 5597 0008 5597 + 5598 0008 5597/5598 + 630 0008 0630 + 645 0008 0645 + 646 0008 0646 + 648 0008 0648 + 650 0008 0650 + 651 0008 0651 + 730 0008 0730 + 735 0008 0735 + 745 0008 0745 + 746 0008 0746 +*/ + +/* TO DO: + * Add Block Transfers (ugly, but supported by the adapter) + * Add adapter resets + */ + +/* #define DEBUG 1 */ + +#include +#include +#include +#include +#include +#include +#include + +static int blacklist[] = { + PCI_DEVICE_ID_SI_540, + PCI_DEVICE_ID_SI_550, + PCI_DEVICE_ID_SI_630, + PCI_DEVICE_ID_SI_645, + PCI_DEVICE_ID_SI_646, + PCI_DEVICE_ID_SI_648, + PCI_DEVICE_ID_SI_650, + PCI_DEVICE_ID_SI_651, + PCI_DEVICE_ID_SI_730, + PCI_DEVICE_ID_SI_735, + PCI_DEVICE_ID_SI_745, + PCI_DEVICE_ID_SI_746, + PCI_DEVICE_ID_SI_5511, /* 5513 chip has the 0008 device but that ID + shows up in other chips so we use the 5511 + ID for recognition */ + PCI_DEVICE_ID_SI_5597, + PCI_DEVICE_ID_SI_5598, + 0, /* terminates the list */ +}; + +/* Length of ISA address segment */ +#define SIS5595_EXTENT 8 +/* SIS5595 SMBus registers */ +#define SMB_STS_LO 0x00 +#define SMB_STS_HI 0x01 +#define SMB_CTL_LO 0x02 +#define SMB_CTL_HI 0x03 +#define SMB_ADDR 0x04 +#define SMB_CMD 0x05 +#define SMB_PCNT 0x06 +#define SMB_CNT 0x07 +#define SMB_BYTE 0x08 +#define SMB_DEV 0x10 +#define SMB_DB0 0x11 +#define SMB_DB1 0x12 +#define SMB_HAA 0x13 + +/* PCI Address Constants */ +#define SMB_INDEX 0x38 +#define SMB_DAT 0x39 +#define SIS5595_ENABLE_REG 0x40 +#define ACPI_BASE 0x90 + +/* Other settings */ +#define MAX_TIMEOUT 500 + +/* SIS5595 constants */ +#define SIS5595_QUICK 0x00 +#define SIS5595_BYTE 0x02 +#define SIS5595_BYTE_DATA 0x04 +#define SIS5595_WORD_DATA 0x06 +#define SIS5595_PROC_CALL 0x08 +#define SIS5595_BLOCK_DATA 0x0A + +/* insmod parameters */ + +/* If force_addr is set to anything different from 0, we forcibly enable + the device at the given address. */ +static int force_addr = 0; +MODULE_PARM(force_addr, "i"); +MODULE_PARM_DESC(force_addr, "Initialize the base address of the i2c controller"); + +static unsigned short sis5595_base = 0; + +static u8 sis5595_read(u8 reg) +{ + outb(reg, sis5595_base + SMB_INDEX); + return inb(sis5595_base + SMB_DAT); +} + +static void sis5595_write(u8 reg, u8 data) +{ + outb(reg, sis5595_base + SMB_INDEX); + outb(data, sis5595_base + SMB_DAT); +} + +static int sis5595_setup(struct pci_dev *SIS5595_dev) +{ + u16 a; + u8 val; + int *i; + int retval = -ENODEV; + + /* Look for imposters */ + for (i = blacklist; *i != 0; i++) { + struct pci_dev *dev; + dev = pci_get_device(PCI_VENDOR_ID_SI, *i, NULL); + if (dev) { + dev_err(&SIS5595_dev->dev, "Looked for SIS5595 but found unsupported device %.4x\n", *i); + pci_dev_put(dev); + return -ENODEV; + } + } + + /* Determine the address of the SMBus areas */ + pci_read_config_word(SIS5595_dev, ACPI_BASE, &sis5595_base); + if (sis5595_base == 0 && force_addr == 0) { + dev_err(&SIS5595_dev->dev, "ACPI base address uninitialized - upgrade BIOS or use force_addr=0xaddr\n"); + return -ENODEV; + } + + if (force_addr) + sis5595_base = force_addr & ~(SIS5595_EXTENT - 1); + dev_dbg(&SIS5595_dev->dev, "ACPI Base address: %04x\n", sis5595_base); + + /* NB: We grab just the two SMBus registers here, but this may still + * interfere with ACPI :-( */ + if (!request_region(sis5595_base + SMB_INDEX, 2, "sis5595-smbus")) { + dev_err(&SIS5595_dev->dev, "SMBus registers 0x%04x-0x%04x already in use!\n", + sis5595_base + SMB_INDEX, sis5595_base + SMB_INDEX + 1); + return -ENODEV; + } + + if (force_addr) { + dev_info(&SIS5595_dev->dev, "forcing ISA address 0x%04X\n", sis5595_base); + if (!pci_write_config_word(SIS5595_dev, ACPI_BASE, sis5595_base)) + goto error; + if (!pci_read_config_word(SIS5595_dev, ACPI_BASE, &a)) + goto error; + if ((a & ~(SIS5595_EXTENT - 1)) != sis5595_base) { + /* doesn't work for some chips! */ + dev_err(&SIS5595_dev->dev, "force address failed - not supported?\n"); + goto error; + } + } + + if (!pci_read_config_byte(SIS5595_dev, SIS5595_ENABLE_REG, &val)) + goto error; + if ((val & 0x80) == 0) { + dev_info(&SIS5595_dev->dev, "enabling ACPI\n"); + if (!pci_write_config_byte(SIS5595_dev, SIS5595_ENABLE_REG, val | 0x80)) + goto error; + if (!pci_read_config_byte(SIS5595_dev, SIS5595_ENABLE_REG, &val)) + goto error; + if ((val & 0x80) == 0) { + /* doesn't work for some chips? */ + dev_err(&SIS5595_dev->dev, "ACPI enable failed - not supported?\n"); + goto error; + } + } + + /* Everything is happy */ + return 0; + +error: + release_region(sis5595_base + SMB_INDEX, 2); + return retval; +} + +static int sis5595_transaction(struct i2c_adapter *adap) +{ + int temp; + int result = 0; + int timeout = 0; + + /* Make sure the SMBus host is ready to start transmitting */ + temp = sis5595_read(SMB_STS_LO) + (sis5595_read(SMB_STS_HI) << 8); + if (temp != 0x00) { + dev_dbg(&adap->dev, "SMBus busy (%04x). Resetting... \n", temp); + sis5595_write(SMB_STS_LO, temp & 0xff); + sis5595_write(SMB_STS_HI, temp >> 8); + if ((temp = sis5595_read(SMB_STS_LO) + (sis5595_read(SMB_STS_HI) << 8)) != 0x00) { + dev_dbg(&adap->dev, "Failed! (%02x)\n", temp); + return -1; + } else { + dev_dbg(&adap->dev, "Successfull!\n"); + } + } + + /* start the transaction by setting bit 4 */ + sis5595_write(SMB_CTL_LO, sis5595_read(SMB_CTL_LO) | 0x10); + + /* We will always wait for a fraction of a second! */ + do { + i2c_delay(1); + temp = sis5595_read(SMB_STS_LO); + } while (!(temp & 0x40) && (timeout++ < MAX_TIMEOUT)); + + /* If the SMBus is still busy, we give up */ + if (timeout >= MAX_TIMEOUT) { + dev_dbg(&adap->dev, "SMBus Timeout!\n"); + result = -1; + } + + if (temp & 0x10) { + dev_dbg(&adap->dev, "Error: Failed bus transaction\n"); + result = -1; + } + + if (temp & 0x20) { + dev_err(&adap->dev, "Bus collision! SMBus may be locked until " + "next hard reset (or not...)\n"); + /* Clock stops and slave is stuck in mid-transmission */ + result = -1; + } + + temp = sis5595_read(SMB_STS_LO) + (sis5595_read(SMB_STS_HI) << 8); + if (temp != 0x00) { + sis5595_write(SMB_STS_LO, temp & 0xff); + sis5595_write(SMB_STS_HI, temp >> 8); + } + + temp = sis5595_read(SMB_STS_LO) + (sis5595_read(SMB_STS_HI) << 8); + if (temp != 0x00) + dev_dbg(&adap->dev, "Failed reset at end of transaction (%02x)\n", temp); + + return result; +} + +/* Return -1 on error. */ +static s32 sis5595_access(struct i2c_adapter *adap, u16 addr, + unsigned short flags, char read_write, + u8 command, int size, union i2c_smbus_data *data) +{ + switch (size) { + case I2C_SMBUS_QUICK: + sis5595_write(SMB_ADDR, ((addr & 0x7f) << 1) | (read_write & 0x01)); + size = SIS5595_QUICK; + break; + case I2C_SMBUS_BYTE: + sis5595_write(SMB_ADDR, ((addr & 0x7f) << 1) | (read_write & 0x01)); + if (read_write == I2C_SMBUS_WRITE) + sis5595_write(SMB_CMD, command); + size = SIS5595_BYTE; + break; + case I2C_SMBUS_BYTE_DATA: + sis5595_write(SMB_ADDR, ((addr & 0x7f) << 1) | (read_write & 0x01)); + sis5595_write(SMB_CMD, command); + if (read_write == I2C_SMBUS_WRITE) + sis5595_write(SMB_BYTE, data->byte); + size = SIS5595_BYTE_DATA; + break; + case I2C_SMBUS_PROC_CALL: + case I2C_SMBUS_WORD_DATA: + sis5595_write(SMB_ADDR, ((addr & 0x7f) << 1) | (read_write & 0x01)); + sis5595_write(SMB_CMD, command); + if (read_write == I2C_SMBUS_WRITE) { + sis5595_write(SMB_BYTE, data->word & 0xff); + sis5595_write(SMB_BYTE + 1, + (data->word & 0xff00) >> 8); + } + size = (size == I2C_SMBUS_PROC_CALL) ? SIS5595_PROC_CALL : SIS5595_WORD_DATA; + break; +/* + case I2C_SMBUS_BLOCK_DATA: + printk("sis5595.o: Block data not yet implemented!\n"); + return -1; + break; +*/ + default: + printk + (KERN_WARNING "sis5595.o: Unsupported transaction %d\n", size); + return -1; + } + + sis5595_write(SMB_CTL_LO, ((size & 0x0E))); + + if (sis5595_transaction(adap)) + return -1; + + if ((size != SIS5595_PROC_CALL) && + ((read_write == I2C_SMBUS_WRITE) || (size == SIS5595_QUICK))) + return 0; + + + switch (size) { + case SIS5595_BYTE: /* Where is the result put? I assume here it is in + SMB_DATA but it might just as well be in the + SMB_CMD. No clue in the docs */ + case SIS5595_BYTE_DATA: + data->byte = sis5595_read(SMB_BYTE); + break; + case SIS5595_WORD_DATA: + case SIS5595_PROC_CALL: + data->word = sis5595_read(SMB_BYTE) + (sis5595_read(SMB_BYTE + 1) << 8); + break; + } + return 0; +} + +static u32 sis5595_func(struct i2c_adapter *adapter) +{ + return I2C_FUNC_SMBUS_QUICK | I2C_FUNC_SMBUS_BYTE | + I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA | + I2C_FUNC_SMBUS_PROC_CALL; +} + +static struct i2c_algorithm smbus_algorithm = { + .name = "Non-I2C SMBus adapter", + .id = I2C_ALGO_SMBUS, + .smbus_xfer = sis5595_access, + .functionality = sis5595_func, +}; + +static struct i2c_adapter sis5595_adapter = { + .owner = THIS_MODULE, + .name = "unset", + .algo = &smbus_algorithm, +}; + +static struct pci_device_id sis5595_ids[] __devinitdata = { + { PCI_DEVICE(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_503) }, + { 0, } +}; + +static int __devinit sis5595_probe(struct pci_dev *dev, const struct pci_device_id *id) +{ + if (sis5595_setup(dev)) { + dev_err(&dev->dev, "SIS5595 not detected, module not inserted.\n"); + return -ENODEV; + } + + /* set up the driverfs linkage to our parent device */ + sis5595_adapter.dev.parent = &dev->dev; + + sprintf(sis5595_adapter.name, "SMBus SIS5595 adapter at %04x", + sis5595_base + SMB_INDEX); + return i2c_add_adapter(&sis5595_adapter); +} + +static void __devexit sis5595_remove(struct pci_dev *dev) +{ + i2c_del_adapter(&sis5595_adapter); +} + +static struct pci_driver sis5595_driver = { + .name = "sis5595 smbus", + .id_table = sis5595_ids, + .probe = sis5595_probe, + .remove = __devexit_p(sis5595_remove), +}; + +static int __init i2c_sis5595_init(void) +{ + return pci_module_init(&sis5595_driver); +} + +static void __exit i2c_sis5595_exit(void) +{ + pci_unregister_driver(&sis5595_driver); + release_region(sis5595_base + SMB_INDEX, 2); +} + +MODULE_AUTHOR("Frodo Looijaard "); +MODULE_DESCRIPTION("SIS5595 SMBus driver"); +MODULE_LICENSE("GPL"); + +module_init(i2c_sis5595_init); +module_exit(i2c_sis5595_exit); diff -prauN linux-2.6.0-test5/drivers/i2c/busses/i2c-sis630.c wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-sis630.c --- linux-2.6.0-test5/drivers/i2c/busses/i2c-sis630.c 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-sis630.c 2003-09-25 19:15:55.000000000 -0700 @@ -0,0 +1,493 @@ +/* + i2c-sis630.c - Part of lm_sensors, Linux kernel modules for hardware + monitoring + + Copyright (c) 2002,2003 Alexander Malysh + + 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 of the License, 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, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +/* + Changes: + 24.08.2002 + Fixed the typo in sis630_access (Thanks to Mark M. Hoffman) + Changed sis630_transaction.(Thanks to Mark M. Hoffman) + 18.09.2002 + Added SIS730 as supported + 21.09.2002 + Added high_clock module option.If this option is set + used Host Master Clock 56KHz (default 14KHz).For now we are save old Host + Master Clock and after transaction completed restore (otherwise + it's confuse BIOS and hung Machine). + 24.09.2002 + Fixed typo in sis630_access + Fixed logical error by restoring of Host Master Clock + 31.07.2003 + Added block data read/write support. +*/ + +/* + Status: beta + + Supports: + SIS 630 + SIS 730 + + Note: we assume there can only be one device, with one SMBus interface. +*/ + +/* #define DEBUG 1 */ + +#include +#include +#include +#include +#include +#include +#include + +/* SIS630 SMBus registers */ +#define SMB_STS 0x80 /* status */ +#define SMB_EN 0x81 /* status enable */ +#define SMB_CNT 0x82 +#define SMBHOST_CNT 0x83 +#define SMB_ADDR 0x84 +#define SMB_CMD 0x85 +#define SMB_PCOUNT 0x86 /* processed count */ +#define SMB_COUNT 0x87 +#define SMB_BYTE 0x88 /* ~0x8F data byte field */ +#define SMBDEV_ADDR 0x90 +#define SMB_DB0 0x91 +#define SMB_DB1 0x92 +#define SMB_SAA 0x93 + +/* register count for request_region */ +#define SIS630_SMB_IOREGION 20 + +/* PCI address constants */ +/* acpi base address register */ +#define SIS630_ACPI_BASE_REG 0x74 +/* bios control register */ +#define SIS630_BIOS_CTL_REG 0x40 + +/* Other settings */ +#define MAX_TIMEOUT 500 + +/* SIS630 constants */ +#define SIS630_QUICK 0x00 +#define SIS630_BYTE 0x01 +#define SIS630_BYTE_DATA 0x02 +#define SIS630_WORD_DATA 0x03 +#define SIS630_PCALL 0x04 +#define SIS630_BLOCK_DATA 0x05 + +/* insmod parameters */ +static int high_clock = 0; +MODULE_PARM(high_clock, "i"); +MODULE_PARM_DESC(high_clock, "Set Host Master Clock to 56KHz (default 14KHz)."); + + +static unsigned short acpi_base = 0; + +static inline u8 sis630_read(u8 reg) +{ + return inb(acpi_base + reg); +} + +static inline void sis630_write(u8 reg, u8 data) +{ + outb(data, acpi_base + reg); +} + +static int sis630_transaction_start(struct i2c_adapter *adap, int size, u8 *oldclock) +{ + int temp; + + /* Make sure the SMBus host is ready to start transmitting. */ + if ((temp = sis630_read(SMB_CNT) & 0x03) != 0x00) { + dev_dbg(&adap->dev, "SMBus busy (%02x).Resetting...\n",temp); + /* kill smbus transaction */ + sis630_write(SMBHOST_CNT, 0x20); + + if ((temp = sis630_read(SMB_CNT) & 0x03) != 0x00) { + dev_dbg(&adap->dev, "Failed! (%02x)\n", temp); + return -1; + } else { + dev_dbg(&adap->dev, "Successfull!\n"); + } + } + + /* save old clock, so we can prevent machine for hung */ + *oldclock = sis630_read(SMB_CNT); + + dev_dbg(&adap->dev, "saved clock 0x%02x\n", *oldclock); + + /* disable timeout interrupt , set Host Master Clock to 56KHz if requested */ + if (high_clock > 0) + sis630_write(SMB_CNT, 0x20); + else + sis630_write(SMB_CNT, (*oldclock & ~0x40)); + + /* clear all sticky bits */ + temp = sis630_read(SMB_STS); + sis630_write(SMB_STS, temp & 0x1e); + + /* start the transaction by setting bit 4 and size */ + sis630_write(SMBHOST_CNT,0x10 | (size & 0x07)); + + return 0; +} + +static int sis630_transaction_wait(struct i2c_adapter *adap, int size) +{ + int temp, result = 0, timeout = 0; + + /* We will always wait for a fraction of a second! */ + do { + i2c_delay(1); + temp = sis630_read(SMB_STS); + /* check if block transmitted */ + if (size == SIS630_BLOCK_DATA && (temp & 0x10)) + break; + } while (!(temp & 0x0e) && (timeout++ < MAX_TIMEOUT)); + + /* If the SMBus is still busy, we give up */ + if (timeout >= MAX_TIMEOUT) { + dev_dbg(&adap->dev, "SMBus Timeout!\n"); + result = -1; + } + + if (temp & 0x02) { + dev_dbg(&adap->dev, "Error: Failed bus transaction\n"); + result = -1; + } + + if (temp & 0x04) { + dev_err(&adap->dev, "Bus collision!\n"); + result = -1; + /* + TBD: Datasheet say: + the software should clear this bit and restart SMBUS operation. + Should we do it or user start request again? + */ + } + + return result; +} + +static void sis630_transaction_end(struct i2c_adapter *adap, u8 oldclock) +{ + int temp = 0; + + /* clear all status "sticky" bits */ + sis630_write(SMB_STS, temp); + + dev_dbg(&adap->dev, "SMB_CNT before clock restore 0x%02x\n", sis630_read(SMB_CNT)); + + /* + * restore old Host Master Clock if high_clock is set + * and oldclock was not 56KHz + */ + if (high_clock > 0 && !(oldclock & 0x20)) + sis630_write(SMB_CNT,(sis630_read(SMB_CNT) & ~0x20)); + + dev_dbg(&adap->dev, "SMB_CNT after clock restore 0x%02x\n", sis630_read(SMB_CNT)); +} + +static int sis630_transaction(struct i2c_adapter *adap, int size) +{ + int result = 0; + u8 oldclock = 0; + + result = sis630_transaction_start(adap, size, &oldclock); + if (!result) { + result = sis630_transaction_wait(adap, size); + sis630_transaction_end(adap, oldclock); + } + + return result; +} + +static int sis630_block_data(struct i2c_adapter *adap, union i2c_smbus_data *data, int read_write) +{ + int i, len = 0, rc = 0; + u8 oldclock = 0; + + if (read_write == I2C_SMBUS_WRITE) { + len = data->block[0]; + if (len < 0) + len = 0; + else if (len > 32) + len = 32; + sis630_write(SMB_COUNT, len); + for (i=1; i <= len; i++) { + dev_dbg(&adap->dev, "set data 0x%02x\n", data->block[i]); + /* set data */ + sis630_write(SMB_BYTE+(i-1)%8, data->block[i]); + if (i==8 || (len<8 && i==len)) { + dev_dbg(&adap->dev, "start trans len=%d i=%d\n",len ,i); + /* first transaction */ + if (sis630_transaction_start(adap, SIS630_BLOCK_DATA, &oldclock)) + return -1; + } + else if ((i-1)%8 == 7 || i==len) { + dev_dbg(&adap->dev, "trans_wait len=%d i=%d\n",len,i); + if (i>8) { + dev_dbg(&adap->dev, "clear smbary_sts len=%d i=%d\n",len,i); + /* + If this is not first transaction, + we must clear sticky bit. + clear SMBARY_STS + */ + sis630_write(SMB_STS,0x10); + } + if (sis630_transaction_wait(adap, SIS630_BLOCK_DATA)) { + dev_dbg(&adap->dev, "trans_wait failed\n"); + rc = -1; + break; + } + } + } + } + else { + /* read request */ + data->block[0] = len = 0; + if (sis630_transaction_start(adap, SIS630_BLOCK_DATA, &oldclock)) { + return -1; + } + do { + if (sis630_transaction_wait(adap, SIS630_BLOCK_DATA)) { + dev_dbg(&adap->dev, "trans_wait failed\n"); + rc = -1; + break; + } + /* if this first transaction then read byte count */ + if (len == 0) + data->block[0] = sis630_read(SMB_COUNT); + + dev_dbg(&adap->dev, "block data read len=0x%x\n", data->block[0]); + + for (i=0; i < 8 && len < data->block[0]; i++,len++) { + dev_dbg(&adap->dev, "read i=%d len=%d\n", i, len); + data->block[len+1] = sis630_read(SMB_BYTE+i); + } + + dev_dbg(&adap->dev, "clear smbary_sts len=%d i=%d\n",len,i); + + /* clear SMBARY_STS */ + sis630_write(SMB_STS,0x10); + } while(len < data->block[0]); + } + + sis630_transaction_end(adap, oldclock); + + return rc; +} + +/* Return -1 on error. */ +static s32 sis630_access(struct i2c_adapter *adap, u16 addr, + unsigned short flags, char read_write, + u8 command, int size, union i2c_smbus_data *data) +{ + switch (size) { + case I2C_SMBUS_QUICK: + sis630_write(SMB_ADDR, ((addr & 0x7f) << 1) | (read_write & 0x01)); + size = SIS630_QUICK; + break; + case I2C_SMBUS_BYTE: + sis630_write(SMB_ADDR, ((addr & 0x7f) << 1) | (read_write & 0x01)); + if (read_write == I2C_SMBUS_WRITE) + sis630_write(SMB_CMD, command); + size = SIS630_BYTE; + break; + case I2C_SMBUS_BYTE_DATA: + sis630_write(SMB_ADDR, ((addr & 0x7f) << 1) | (read_write & 0x01)); + sis630_write(SMB_CMD, command); + if (read_write == I2C_SMBUS_WRITE) + sis630_write(SMB_BYTE, data->byte); + size = SIS630_BYTE_DATA; + break; + case I2C_SMBUS_PROC_CALL: + case I2C_SMBUS_WORD_DATA: + sis630_write(SMB_ADDR,((addr & 0x7f) << 1) | (read_write & 0x01)); + sis630_write(SMB_CMD, command); + if (read_write == I2C_SMBUS_WRITE) { + sis630_write(SMB_BYTE, data->word & 0xff); + sis630_write(SMB_BYTE + 1,(data->word & 0xff00) >> 8); + } + size = (size == I2C_SMBUS_PROC_CALL ? SIS630_PCALL : SIS630_WORD_DATA); + break; + case I2C_SMBUS_BLOCK_DATA: + sis630_write(SMB_ADDR,((addr & 0x7f) << 1) | (read_write & 0x01)); + sis630_write(SMB_CMD, command); + size = SIS630_BLOCK_DATA; + return sis630_block_data(adap, data, read_write); + default: + printk("Unsupported I2C size\n"); + return -1; + break; + } + + if (sis630_transaction(adap, size)) + return -1; + + if ((size != SIS630_PCALL) && + ((read_write == I2C_SMBUS_WRITE) || (size == SIS630_QUICK))) { + return 0; + } + + switch(size) { + case SIS630_BYTE: + case SIS630_BYTE_DATA: + data->byte = sis630_read(SMB_BYTE); + break; + case SIS630_PCALL: + case SIS630_WORD_DATA: + data->word = sis630_read(SMB_BYTE) + (sis630_read(SMB_BYTE + 1) << 8); + break; + default: + return -1; + break; + } + + return 0; +} + +static u32 sis630_func(struct i2c_adapter *adapter) +{ + return I2C_FUNC_SMBUS_QUICK | I2C_FUNC_SMBUS_BYTE | I2C_FUNC_SMBUS_BYTE_DATA | + I2C_FUNC_SMBUS_WORD_DATA | I2C_FUNC_SMBUS_PROC_CALL | + I2C_FUNC_SMBUS_BLOCK_DATA; +} + +static int sis630_setup(struct pci_dev *dummy) +{ + unsigned char b; + struct pci_dev *sis630_dev = NULL; + int retval = -ENODEV; + + /* We need ISA bridge and not pci device passed in. */ + sis630_dev = pci_get_device(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_503, sis630_dev); + if (!sis630_dev) { + dev_err(&dummy->dev, "Error: Can't detect 85C503/5513 ISA bridge!\n"); + return -ENODEV; + } + + /* + Enable ACPI first , so we can accsess reg 74-75 + in acpi io space and read acpi base addr + */ + if (!pci_read_config_byte(sis630_dev, SIS630_BIOS_CTL_REG,&b)) { + dev_err(&sis630_dev->dev, "Error: Can't read bios ctl reg\n"); + goto exit; + } + + /* if ACPI already enabled , do nothing */ + if (!(b & 0x80) && + !pci_write_config_byte(sis630_dev, SIS630_BIOS_CTL_REG, b | 0x80)) { + dev_err(&sis630_dev->dev, "Error: Can't enable ACPI\n"); + goto exit; + } + /* Determine the ACPI base address */ + if (!pci_read_config_word(sis630_dev,SIS630_ACPI_BASE_REG,&acpi_base)) { + dev_err(&sis630_dev->dev, "Error: Can't determine ACPI base address\n"); + goto exit; + } + + dev_dbg(&sis630_dev->dev, "ACPI base at 0x%04x\n", acpi_base); + + /* Everything is happy, let's grab the memory and set things up. */ + if (!request_region(acpi_base + SMB_STS, SIS630_SMB_IOREGION, "sis630-smbus")) { + dev_err(&sis630_dev->dev, "SMBus registers 0x%04x-0x%04x already " + "in use!\n", acpi_base + SMB_STS, acpi_base + SMB_SAA); + goto exit; + } + + retval = 0; + +exit: + pci_dev_put(sis630_dev); + return retval; +} + + +static struct i2c_algorithm smbus_algorithm = { + .name = "Non-I2C SMBus adapter", + .id = I2C_ALGO_SMBUS, + .smbus_xfer = sis630_access, + .functionality = sis630_func, +}; + +static struct i2c_adapter sis630_adapter = { + .owner = THIS_MODULE, + .name = "unset", + .algo = &smbus_algorithm, +}; + +static struct pci_device_id sis630_ids[] __devinitdata = { + { PCI_DEVICE(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_630) }, + { PCI_DEVICE(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_730) }, + { 0, } +}; + +static int __devinit sis630_probe(struct pci_dev *dev, const struct pci_device_id *id) +{ + + if (sis630_setup(dev)) { + dev_err(&dev->dev, "SIS630 comp. bus not detected, module not inserted.\n"); + return -ENODEV; + } + + /* set up the driverfs linkage to our parent device */ + sis630_adapter.dev.parent = &dev->dev; + + sprintf(sis630_adapter.name, "SMBus SIS630 adapter at %04x", + acpi_base + SMB_STS); + + return i2c_add_adapter(&sis630_adapter); +} + +static void __devexit sis630_remove(struct pci_dev *dev) +{ + i2c_del_adapter(&sis630_adapter); +} + + +static struct pci_driver sis630_driver = { + .name = "sis630 smbus", + .id_table = sis630_ids, + .probe = sis630_probe, + .remove = __devexit_p(sis630_remove), +}; + +static int __init i2c_sis630_init(void) +{ + return pci_module_init(&sis630_driver); +} + + +static void __exit i2c_sis630_exit(void) +{ + pci_unregister_driver(&sis630_driver); + release_region(acpi_base + SMB_STS, SIS630_SMB_IOREGION); +} + + +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Alexander Malysh "); +MODULE_DESCRIPTION("SIS630 SMBus driver"); + +module_init(i2c_sis630_init); +module_exit(i2c_sis630_exit); diff -prauN linux-2.6.0-test5/drivers/i2c/busses/i2c-sis96x.c wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-sis96x.c --- linux-2.6.0-test5/drivers/i2c/busses/i2c-sis96x.c 2003-09-08 12:49:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-sis96x.c 2003-09-25 19:15:55.000000000 -0700 @@ -261,7 +261,6 @@ static struct i2c_algorithm smbus_algori static struct i2c_adapter sis96x_adapter = { .owner = THIS_MODULE, - .id = I2C_ALGO_SMBUS | I2C_HW_SMBUS_SIS96X, .class = I2C_ADAP_CLASS_SMBUS, .algo = &smbus_algorithm, .name = "unset", @@ -318,7 +317,7 @@ static int __devinit sis96x_probe(struct /* set up the driverfs linkage to our parent device */ sis96x_adapter.dev.parent = &dev->dev; - snprintf(sis96x_adapter.name, DEVICE_NAME_SIZE, + snprintf(sis96x_adapter.name, I2C_NAME_SIZE, "SiS96x SMBus adapter at 0x%04x", sis96x_smbus_base); if ((retval = i2c_add_adapter(&sis96x_adapter))) { diff -prauN linux-2.6.0-test5/drivers/i2c/busses/i2c-velleman.c wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-velleman.c --- linux-2.6.0-test5/drivers/i2c/busses/i2c-velleman.c 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-velleman.c 2003-09-25 19:15:55.000000000 -0700 @@ -0,0 +1,160 @@ +/* ------------------------------------------------------------------------- */ +/* i2c-velleman.c i2c-hw access for Velleman K9000 adapters */ +/* ------------------------------------------------------------------------- */ +/* Copyright (C) 1995-96, 2000 Simon G. Vogl + + 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 of the License, 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, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +/* ------------------------------------------------------------------------- */ + +/* $Id: i2c-velleman.c,v 1.29 2003/01/21 08:08:16 kmalkki Exp $ */ + +#include +#include +#include +#include +#include +#include +#include +#include + +/* ----- global defines ----------------------------------------------- */ +#define DEB(x) /* should be reasonable open, close &c. */ +#define DEB2(x) /* low level debugging - very slow */ +#define DEBE(x) x /* error messages */ + + /* Pin Port Inverted name */ +#define I2C_SDA 0x02 /* ctrl bit 1 (inv) */ +#define I2C_SCL 0x08 /* ctrl bit 3 (inv) */ + +#define I2C_SDAIN 0x10 /* stat bit 4 */ +#define I2C_SCLIN 0x08 /* ctrl bit 3 (inv)(reads own output)*/ + +#define I2C_DMASK 0xfd +#define I2C_CMASK 0xf7 + + +/* --- Convenience defines for the parallel port: */ +#define BASE (unsigned int)(data) +#define DATA BASE /* Centronics data port */ +#define STAT (BASE+1) /* Centronics status port */ +#define CTRL (BASE+2) /* Centronics control port */ + +#define DEFAULT_BASE 0x378 +static int base=0; + +/* ----- local functions --------------------------------------------------- */ + +static void bit_velle_setscl(void *data, int state) +{ + if (state) { + outb(inb(CTRL) & I2C_CMASK, CTRL); + } else { + outb(inb(CTRL) | I2C_SCL, CTRL); + } + +} + +static void bit_velle_setsda(void *data, int state) +{ + if (state) { + outb(inb(CTRL) & I2C_DMASK , CTRL); + } else { + outb(inb(CTRL) | I2C_SDA, CTRL); + } + +} + +static int bit_velle_getscl(void *data) +{ + return ( 0 == ( (inb(CTRL)) & I2C_SCLIN ) ); +} + +static int bit_velle_getsda(void *data) +{ + return ( 0 != ( (inb(STAT)) & I2C_SDAIN ) ); +} + +static int bit_velle_init(void) +{ + if (!request_region(base, (base == 0x3bc) ? 3 : 8, + "i2c (Vellemann adapter)")) + return -ENODEV; + + bit_velle_setsda((void*)base,1); + bit_velle_setscl((void*)base,1); + return 0; +} + +/* ------------------------------------------------------------------------ + * Encapsulate the above functions in the correct operations structure. + * This is only done when more than one hardware adapter is supported. + */ + +static struct i2c_algo_bit_data bit_velle_data = { + .setsda = bit_velle_setsda, + .setscl = bit_velle_setscl, + .getsda = bit_velle_getsda, + .getscl = bit_velle_getscl, + .udelay = 10, + .mdelay = 10, + .timeout = HZ +}; + +static struct i2c_adapter bit_velle_ops = { + .owner = THIS_MODULE, + .algo_data = &bit_velle_data, + .name = "Velleman K8000", +}; + +static int __init i2c_bitvelle_init(void) +{ + printk(KERN_INFO "i2c-velleman: i2c Velleman K8000 driver\n"); + if (base==0) { + /* probe some values */ + base=DEFAULT_BASE; + bit_velle_data.data=(void*)DEFAULT_BASE; + if (bit_velle_init()==0) { + if(i2c_bit_add_bus(&bit_velle_ops) < 0) + return -ENODEV; + } else { + return -ENODEV; + } + } else { + bit_velle_data.data=(void*)base; + if (bit_velle_init()==0) { + if(i2c_bit_add_bus(&bit_velle_ops) < 0) + return -ENODEV; + } else { + return -ENODEV; + } + } + printk(KERN_DEBUG "i2c-velleman: found device at %#x.\n",base); + return 0; +} + +static void __exit i2c_bitvelle_exit(void) +{ + i2c_bit_del_bus(&bit_velle_ops); + release_region(base, (base == 0x3bc) ? 3 : 8); +} + +MODULE_AUTHOR("Simon G. Vogl "); +MODULE_DESCRIPTION("I2C-Bus adapter routines for Velleman K8000 adapter"); +MODULE_LICENSE("GPL"); + +MODULE_PARM(base, "i"); + +module_init(i2c_bitvelle_init); +module_exit(i2c_bitvelle_exit); diff -prauN linux-2.6.0-test5/drivers/i2c/busses/i2c-via.c wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-via.c --- linux-2.6.0-test5/drivers/i2c/busses/i2c-via.c 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-via.c 2003-09-25 19:15:55.000000000 -0700 @@ -0,0 +1,183 @@ +/* + i2c-via.c - Part of lm_sensors, Linux kernel modules + for hardware monitoring + + i2c Support for Via Technologies 82C586B South Bridge + + Copyright (c) 1998, 1999 Kyösti Mälkki + + 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 of the License, 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, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#define DEBUG + +#include +#include +#include +#include +#include +#include +#include +#include + +/* Power management registers */ +#define PM_CFG_REVID 0x08 /* silicon revision code */ +#define PM_CFG_IOBASE0 0x20 +#define PM_CFG_IOBASE1 0x48 + +#define I2C_DIR (pm_io_base+0x40) +#define I2C_OUT (pm_io_base+0x42) +#define I2C_IN (pm_io_base+0x44) +#define I2C_SCL 0x02 /* clock bit in DIR/OUT/IN register */ +#define I2C_SDA 0x04 + +/* io-region reservation */ +#define IOSPACE 0x06 +#define IOTEXT "via-i2c" + +static u16 pm_io_base = 0; + +/* + It does not appear from the datasheet that the GPIO pins are + open drain. So a we set a low value by setting the direction to + output and a high value by setting the direction to input and + relying on the required I2C pullup. The data value is initialized + to 0 in via_init() and never changed. +*/ +static void bit_via_setscl(void *data, int state) +{ + outb(state ? inb(I2C_DIR) & ~I2C_SCL : inb(I2C_DIR) | I2C_SCL, I2C_DIR); +} + +static void bit_via_setsda(void *data, int state) +{ + outb(state ? inb(I2C_DIR) & ~I2C_SDA : inb(I2C_DIR) | I2C_SDA, I2C_DIR); +} + +static int bit_via_getscl(void *data) +{ + return (0 != (inb(I2C_IN) & I2C_SCL)); +} + +static int bit_via_getsda(void *data) +{ + return (0 != (inb(I2C_IN) & I2C_SDA)); +} + + +static struct i2c_algo_bit_data bit_data = { + .setsda = bit_via_setsda, + .setscl = bit_via_setscl, + .getsda = bit_via_getsda, + .getscl = bit_via_getscl, + .udelay = 5, + .mdelay = 5, + .timeout = HZ +}; + +static struct i2c_adapter vt586b_adapter = { + .owner = THIS_MODULE, + .name = "VIA i2c", + .algo_data = &bit_data, +}; + + +static struct pci_device_id vt586b_ids[] __devinitdata = { + { PCI_DEVICE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_3) }, + { 0, } +}; + +static int __devinit vt586b_probe(struct pci_dev *dev, const struct pci_device_id *id) +{ + u16 base; + u8 rev; + int res; + + if (pm_io_base) { + dev_err(&dev->dev, "i2c-via: Will only support one host\n"); + return -ENODEV; + } + + pci_read_config_byte(dev, PM_CFG_REVID, &rev); + + switch (rev) { + case 0x00: + base = PM_CFG_IOBASE0; + break; + case 0x01: + case 0x10: + base = PM_CFG_IOBASE1; + break; + + default: + base = PM_CFG_IOBASE1; + /* later revision */ + } + + pci_read_config_word(dev, base, &pm_io_base); + pm_io_base &= (0xff << 8); + + if (!request_region(I2C_DIR, IOSPACE, IOTEXT)) { + dev_err(&dev->dev, "IO 0x%x-0x%x already in use\n", I2C_DIR, I2C_DIR + IOSPACE); + return -ENODEV; + } + + outb(inb(I2C_DIR) & ~(I2C_SDA | I2C_SCL), I2C_DIR); + outb(inb(I2C_OUT) & ~(I2C_SDA | I2C_SCL), I2C_OUT); + + /* set up the driverfs linkage to our parent device */ + vt586b_adapter.dev.parent = &dev->dev; + + res = i2c_bit_add_bus(&vt586b_adapter); + if ( res < 0 ) { + release_region(I2C_DIR, IOSPACE); + pm_io_base = 0; + return res; + } + return 0; +} + +static void __devexit vt586b_remove(struct pci_dev *dev) +{ + i2c_bit_del_bus(&vt586b_adapter); + release_region(I2C_DIR, IOSPACE); + pm_io_base = 0; +} + + +static struct pci_driver vt586b_driver = { + .name = "vt586b smbus", + .id_table = vt586b_ids, + .probe = vt586b_probe, + .remove = __devexit_p(vt586b_remove), +}; + +static int __init i2c_vt586b_init(void) +{ + return pci_module_init(&vt586b_driver); +} + +static void __exit i2c_vt586b_exit(void) +{ + pci_unregister_driver(&vt586b_driver); +} + + +MODULE_AUTHOR("Kyösti Mälkki "); +MODULE_DESCRIPTION("i2c for Via vt82c586b southbridge"); +MODULE_LICENSE("GPL"); + +module_init(i2c_vt586b_init); +module_exit(i2c_vt586b_exit); diff -prauN linux-2.6.0-test5/drivers/i2c/busses/i2c-viapro.c wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-viapro.c --- linux-2.6.0-test5/drivers/i2c/busses/i2c-viapro.c 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-viapro.c 2003-09-25 19:15:55.000000000 -0700 @@ -287,7 +287,6 @@ static struct i2c_algorithm smbus_algori static struct i2c_adapter vt596_adapter = { .owner = THIS_MODULE, - .id = I2C_ALGO_SMBUS | I2C_HW_SMBUS_VIA2, .class = I2C_ADAP_CLASS_SMBUS, .algo = &smbus_algorithm, .name = "unset", @@ -376,7 +375,7 @@ static int __devinit vt596_probe(struct dev_dbg(&pdev->dev, "VT596_smba = 0x%X\n", vt596_smba); vt596_adapter.dev.parent = &pdev->dev; - snprintf(vt596_adapter.name, DEVICE_NAME_SIZE, + snprintf(vt596_adapter.name, I2C_NAME_SIZE, "SMBus Via Pro adapter at %04x", vt596_smba); return i2c_add_adapter(&vt596_adapter); diff -prauN linux-2.6.0-test5/drivers/i2c/busses/i2c-voodoo3.c wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-voodoo3.c --- linux-2.6.0-test5/drivers/i2c/busses/i2c-voodoo3.c 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/busses/i2c-voodoo3.c 2003-09-25 19:15:55.000000000 -0700 @@ -0,0 +1,249 @@ +/* + voodoo3.c - Part of lm_sensors, Linux kernel modules for hardware + monitoring + Copyright (c) 1998, 1999 Frodo Looijaard , + Philip Edelbrock , + Ralph Metzler , and + Mark D. Studebaker + + Based on code written by Ralph Metzler and + Simon Vogl + + 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 of the License, 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, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +/* This interfaces to the I2C bus of the Voodoo3 to gain access to + the BT869 and possibly other I2C devices. */ + +#include +#include +#include +#include +#include +#include +#include + +/* the only registers we use */ +#define REG 0x78 +#define REG2 0x70 + +/* bit locations in the register */ +#define DDC_ENAB 0x00040000 +#define DDC_SCL_OUT 0x00080000 +#define DDC_SDA_OUT 0x00100000 +#define DDC_SCL_IN 0x00200000 +#define DDC_SDA_IN 0x00400000 +#define I2C_ENAB 0x00800000 +#define I2C_SCL_OUT 0x01000000 +#define I2C_SDA_OUT 0x02000000 +#define I2C_SCL_IN 0x04000000 +#define I2C_SDA_IN 0x08000000 + +/* initialization states */ +#define INIT2 0x2 +#define INIT3 0x4 + +/* delays */ +#define CYCLE_DELAY 10 +#define TIMEOUT (HZ / 2) + + +static void *ioaddr; + +/* The voo GPIO registers don't have individual masks for each bit + so we always have to read before writing. */ + +static void bit_vooi2c_setscl(void *data, int val) +{ + unsigned int r; + r = readl(ioaddr + REG); + if (val) + r |= I2C_SCL_OUT; + else + r &= ~I2C_SCL_OUT; + writel(r, ioaddr + REG); + readl(ioaddr + REG); /* flush posted write */ +} + +static void bit_vooi2c_setsda(void *data, int val) +{ + unsigned int r; + r = readl(ioaddr + REG); + if (val) + r |= I2C_SDA_OUT; + else + r &= ~I2C_SDA_OUT; + writel(r, ioaddr + REG); + readl(ioaddr + REG); /* flush posted write */ +} + +/* The GPIO pins are open drain, so the pins always remain outputs. + We rely on the i2c-algo-bit routines to set the pins high before + reading the input from other chips. */ + +static int bit_vooi2c_getscl(void *data) +{ + return (0 != (readl(ioaddr + REG) & I2C_SCL_IN)); +} + +static int bit_vooi2c_getsda(void *data) +{ + return (0 != (readl(ioaddr + REG) & I2C_SDA_IN)); +} + +static void bit_vooddc_setscl(void *data, int val) +{ + unsigned int r; + r = readl(ioaddr + REG); + if (val) + r |= DDC_SCL_OUT; + else + r &= ~DDC_SCL_OUT; + writel(r, ioaddr + REG); + readl(ioaddr + REG); /* flush posted write */ +} + +static void bit_vooddc_setsda(void *data, int val) +{ + unsigned int r; + r = readl(ioaddr + REG); + if (val) + r |= DDC_SDA_OUT; + else + r &= ~DDC_SDA_OUT; + writel(r, ioaddr + REG); + readl(ioaddr + REG); /* flush posted write */ +} + +static int bit_vooddc_getscl(void *data) +{ + return (0 != (readl(ioaddr + REG) & DDC_SCL_IN)); +} + +static int bit_vooddc_getsda(void *data) +{ + return (0 != (readl(ioaddr + REG) & DDC_SDA_IN)); +} + +static int config_v3(struct pci_dev *dev) +{ + unsigned int cadr; + + /* map Voodoo3 memory */ + cadr = dev->resource[0].start; + cadr &= PCI_BASE_ADDRESS_MEM_MASK; + ioaddr = ioremap_nocache(cadr, 0x1000); + if (ioaddr) { + writel(0x8160, ioaddr + REG2); + writel(0xcffc0020, ioaddr + REG); + dev_info(&dev->dev, "Using Banshee/Voodoo3 I2C device at %p\n", ioaddr); + return 0; + } + return -ENODEV; +} + +static struct i2c_algo_bit_data voo_i2c_bit_data = { + .setsda = bit_vooi2c_setsda, + .setscl = bit_vooi2c_setscl, + .getsda = bit_vooi2c_getsda, + .getscl = bit_vooi2c_getscl, + .udelay = CYCLE_DELAY, + .mdelay = CYCLE_DELAY, + .timeout = TIMEOUT +}; + +static struct i2c_adapter voodoo3_i2c_adapter = { + .owner = THIS_MODULE, + .name = "I2C Voodoo3/Banshee adapter", + .algo_data = &voo_i2c_bit_data, +}; + +static struct i2c_algo_bit_data voo_ddc_bit_data = { + .setsda = bit_vooddc_setsda, + .setscl = bit_vooddc_setscl, + .getsda = bit_vooddc_getsda, + .getscl = bit_vooddc_getscl, + .udelay = CYCLE_DELAY, + .mdelay = CYCLE_DELAY, + .timeout = TIMEOUT +}; + +static struct i2c_adapter voodoo3_ddc_adapter = { + .owner = THIS_MODULE, + .name = "DDC Voodoo3/Banshee adapter", + .algo_data = &voo_ddc_bit_data, +}; + +static struct pci_device_id voodoo3_ids[] __devinitdata = { + { PCI_DEVICE(PCI_VENDOR_ID_3DFX, PCI_DEVICE_ID_3DFX_VOODOO3) }, + { PCI_DEVICE(PCI_VENDOR_ID_3DFX, PCI_DEVICE_ID_3DFX_BANSHEE) }, + { 0, } +}; + +static int __devinit voodoo3_probe(struct pci_dev *dev, const struct pci_device_id *id) +{ + int retval; + + retval = config_v3(dev); + if (retval) + return retval; + + /* set up the sysfs linkage to our parent device */ + voodoo3_i2c_adapter.dev.parent = &dev->dev; + voodoo3_ddc_adapter.dev.parent = &dev->dev; + + retval = i2c_bit_add_bus(&voodoo3_i2c_adapter); + if (retval) + return retval; + retval = i2c_bit_add_bus(&voodoo3_ddc_adapter); + if (retval) + i2c_bit_del_bus(&voodoo3_i2c_adapter); + return retval; +} + +static void __devexit voodoo3_remove(struct pci_dev *dev) +{ + i2c_bit_del_bus(&voodoo3_i2c_adapter); + i2c_bit_del_bus(&voodoo3_ddc_adapter); + iounmap(ioaddr); +} + +static struct pci_driver voodoo3_driver = { + .name = "voodoo3 smbus", + .id_table = voodoo3_ids, + .probe = voodoo3_probe, + .remove = __devexit_p(voodoo3_remove), +}; + +static int __init i2c_voodoo3_init(void) +{ + return pci_module_init(&voodoo3_driver); +} + +static void __exit i2c_voodoo3_exit(void) +{ + pci_unregister_driver(&voodoo3_driver); +} + + +MODULE_AUTHOR("Frodo Looijaard , " + "Philip Edelbrock , " + "Ralph Metzler , " + "and Mark D. Studebaker "); +MODULE_DESCRIPTION("Voodoo3 I2C/SMBus driver"); +MODULE_LICENSE("GPL"); + +module_init(i2c_voodoo3_init); +module_exit(i2c_voodoo3_exit); diff -prauN linux-2.6.0-test5/drivers/i2c/busses/scx200_acb.c wli-2.6.0-test5-bk12-25/drivers/i2c/busses/scx200_acb.c --- linux-2.6.0-test5/drivers/i2c/busses/scx200_acb.c 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/busses/scx200_acb.c 2003-09-25 19:15:55.000000000 -0700 @@ -0,0 +1,553 @@ +/* linux/drivers/i2c/scx200_acb.c + + Copyright (c) 2001,2002 Christer Weinigel + + National Semiconductor SCx200 ACCESS.bus support + + Based on i2c-keywest.c which is: + Copyright (c) 2001 Benjamin Herrenschmidt + Copyright (c) 2000 Philip Edelbrock + + 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 of the + License, 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, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#define NAME "scx200_acb" + +MODULE_AUTHOR("Christer Weinigel "); +MODULE_DESCRIPTION("NatSemi SCx200 ACCESS.bus Driver"); +MODULE_LICENSE("GPL"); + +#define MAX_DEVICES 4 +static int base[MAX_DEVICES] = { 0x840 }; +MODULE_PARM(base, "1-4i"); +MODULE_PARM_DESC(base, "Base addresses for the ACCESS.bus controllers"); + +#define DEBUG 0 + +#if DEBUG +#define DBG(x...) printk(KERN_DEBUG NAME ": " x) +#else +#define DBG(x...) +#endif + +/* The hardware supports interrupt driven mode too, but I haven't + implemented that. */ +#define POLLED_MODE 1 +#define POLL_TIMEOUT (HZ) + +enum scx200_acb_state { + state_idle, + state_address, + state_command, + state_repeat_start, + state_quick, + state_read, + state_write, +}; + +static const char *scx200_acb_state_name[] = { + "idle", + "address", + "command", + "repeat_start", + "quick", + "read", + "write", +}; + +/* Physical interface */ +struct scx200_acb_iface +{ + struct scx200_acb_iface *next; + struct i2c_adapter adapter; + unsigned base; + struct semaphore sem; + + /* State machine data */ + enum scx200_acb_state state; + int result; + u8 address_byte; + u8 command; + u8 *ptr; + char needs_reset; + unsigned len; +}; + +/* Register Definitions */ +#define ACBSDA (iface->base + 0) +#define ACBST (iface->base + 1) +#define ACBST_SDAST 0x40 /* SDA Status */ +#define ACBST_BER 0x20 +#define ACBST_NEGACK 0x10 /* Negative Acknowledge */ +#define ACBST_STASTR 0x08 /* Stall After Start */ +#define ACBST_MASTER 0x02 +#define ACBCST (iface->base + 2) +#define ACBCST_BB 0x02 +#define ACBCTL1 (iface->base + 3) +#define ACBCTL1_STASTRE 0x80 +#define ACBCTL1_NMINTE 0x40 +#define ACBCTL1_ACK 0x10 +#define ACBCTL1_STOP 0x02 +#define ACBCTL1_START 0x01 +#define ACBADDR (iface->base + 4) +#define ACBCTL2 (iface->base + 5) +#define ACBCTL2_ENABLE 0x01 + +/************************************************************************/ + +static void scx200_acb_machine(struct scx200_acb_iface *iface, u8 status) +{ + const char *errmsg; + + DBG("state %s, status = 0x%02x\n", + scx200_acb_state_name[iface->state], status); + + if (status & ACBST_BER) { + errmsg = "bus error"; + goto error; + } + if (!(status & ACBST_MASTER)) { + errmsg = "not master"; + goto error; + } + if (status & ACBST_NEGACK) + goto negack; + + switch (iface->state) { + case state_idle: + dev_warn(&iface->adapter.dev, "interrupt in idle state\n"); + break; + + case state_address: + /* Do a pointer write first */ + outb(iface->address_byte & ~1, ACBSDA); + + iface->state = state_command; + break; + + case state_command: + outb(iface->command, ACBSDA); + + if (iface->address_byte & 1) + iface->state = state_repeat_start; + else + iface->state = state_write; + break; + + case state_repeat_start: + outb(inb(ACBCTL1) | ACBCTL1_START, ACBCTL1); + /* fallthrough */ + + case state_quick: + if (iface->address_byte & 1) { + if (iface->len == 1) + outb(inb(ACBCTL1) | ACBCTL1_ACK, ACBCTL1); + else + outb(inb(ACBCTL1) & ~ACBCTL1_ACK, ACBCTL1); + outb(iface->address_byte, ACBSDA); + + iface->state = state_read; + } else { + outb(iface->address_byte, ACBSDA); + + iface->state = state_write; + } + break; + + case state_read: + /* Set ACK if receiving the last byte */ + if (iface->len == 1) + outb(inb(ACBCTL1) | ACBCTL1_ACK, ACBCTL1); + else + outb(inb(ACBCTL1) & ~ACBCTL1_ACK, ACBCTL1); + + *iface->ptr++ = inb(ACBSDA); + --iface->len; + + if (iface->len == 0) { + iface->result = 0; + iface->state = state_idle; + outb(inb(ACBCTL1) | ACBCTL1_STOP, ACBCTL1); + } + + break; + + case state_write: + if (iface->len == 0) { + iface->result = 0; + iface->state = state_idle; + outb(inb(ACBCTL1) | ACBCTL1_STOP, ACBCTL1); + break; + } + + outb(*iface->ptr++, ACBSDA); + --iface->len; + + break; + } + + return; + + negack: + DBG("negative acknowledge in state %s\n", + scx200_acb_state_name[iface->state]); + + iface->state = state_idle; + iface->result = -ENXIO; + + outb(inb(ACBCTL1) | ACBCTL1_STOP, ACBCTL1); + outb(ACBST_STASTR | ACBST_NEGACK, ACBST); + return; + + error: + dev_err(&iface->adapter.dev, "%s in state %s\n", errmsg, + scx200_acb_state_name[iface->state]); + + iface->state = state_idle; + iface->result = -EIO; + iface->needs_reset = 1; +} + +static void scx200_acb_timeout(struct scx200_acb_iface *iface) +{ + dev_err(&iface->adapter.dev, "timeout in state %s\n", + scx200_acb_state_name[iface->state]); + + iface->state = state_idle; + iface->result = -EIO; + iface->needs_reset = 1; +} + +#ifdef POLLED_MODE +static void scx200_acb_poll(struct scx200_acb_iface *iface) +{ + u8 status = 0; + unsigned long timeout; + + timeout = jiffies + POLL_TIMEOUT; + while (time_before(jiffies, timeout)) { + status = inb(ACBST); + if ((status & (ACBST_SDAST|ACBST_BER|ACBST_NEGACK)) != 0) { + scx200_acb_machine(iface, status); + return; + } + schedule_timeout(HZ/100+1); + } + + scx200_acb_timeout(iface); +} +#endif /* POLLED_MODE */ + +static void scx200_acb_reset(struct scx200_acb_iface *iface) +{ + /* Disable the ACCESS.bus device and Configure the SCL + frequency: 16 clock cycles */ + outb(0x70, ACBCTL2); + /* Polling mode */ + outb(0, ACBCTL1); + /* Disable slave address */ + outb(0, ACBADDR); + /* Enable the ACCESS.bus device */ + outb(inb(ACBCTL2) | ACBCTL2_ENABLE, ACBCTL2); + /* Free STALL after START */ + outb(inb(ACBCTL1) & ~(ACBCTL1_STASTRE | ACBCTL1_NMINTE), ACBCTL1); + /* Send a STOP */ + outb(inb(ACBCTL1) | ACBCTL1_STOP, ACBCTL1); + /* Clear BER, NEGACK and STASTR bits */ + outb(ACBST_BER | ACBST_NEGACK | ACBST_STASTR, ACBST); + /* Clear BB bit */ + outb(inb(ACBCST) | ACBCST_BB, ACBCST); +} + +static s32 scx200_acb_smbus_xfer(struct i2c_adapter *adapter, + u16 address, unsigned short flags, + char rw, u8 command, int size, + union i2c_smbus_data *data) +{ + struct scx200_acb_iface *iface = i2c_get_adapdata(adapter); + int len; + u8 *buffer; + u16 cur_word; + int rc; + + switch (size) { + case I2C_SMBUS_QUICK: + len = 0; + buffer = NULL; + break; + case I2C_SMBUS_BYTE: + if (rw == I2C_SMBUS_READ) { + len = 1; + buffer = &data->byte; + } else { + len = 1; + buffer = &command; + } + break; + case I2C_SMBUS_BYTE_DATA: + len = 1; + buffer = &data->byte; + break; + case I2C_SMBUS_WORD_DATA: + len = 2; + cur_word = cpu_to_le16(data->word); + buffer = (u8 *)&cur_word; + break; + case I2C_SMBUS_BLOCK_DATA: + len = data->block[0]; + buffer = &data->block[1]; + break; + default: + return -EINVAL; + } + + DBG("size=%d, address=0x%x, command=0x%x, len=%d, read=%d\n", + size, address, command, len, rw == I2C_SMBUS_READ); + + if (!len && rw == I2C_SMBUS_READ) { + dev_warn(&adapter->dev, "zero length read\n"); + return -EINVAL; + } + + if (len && !buffer) { + dev_warn(&adapter->dev, "nonzero length but no buffer\n"); + return -EFAULT; + } + + down(&iface->sem); + + iface->address_byte = address<<1; + if (rw == I2C_SMBUS_READ) + iface->address_byte |= 1; + iface->command = command; + iface->ptr = buffer; + iface->len = len; + iface->result = -EINVAL; + iface->needs_reset = 0; + + outb(inb(ACBCTL1) | ACBCTL1_START, ACBCTL1); + + if (size == I2C_SMBUS_QUICK || size == I2C_SMBUS_BYTE) + iface->state = state_quick; + else + iface->state = state_address; + +#ifdef POLLED_MODE + while (iface->state != state_idle) + scx200_acb_poll(iface); +#else /* POLLED_MODE */ +#error Interrupt driven mode not implemented +#endif /* POLLED_MODE */ + + if (iface->needs_reset) + scx200_acb_reset(iface); + + rc = iface->result; + + up(&iface->sem); + + if (rc == 0 && size == I2C_SMBUS_WORD_DATA && rw == I2C_SMBUS_READ) + data->word = le16_to_cpu(cur_word); + +#if DEBUG + printk(KERN_DEBUG NAME ": transfer done, result: %d", rc); + if (buffer) { + int i; + printk(" data:"); + for (i = 0; i < len; ++i) + printk(" %02x", buffer[i]); + } + printk("\n"); +#endif + + return rc; +} + +static u32 scx200_acb_func(struct i2c_adapter *adapter) +{ + return I2C_FUNC_SMBUS_QUICK | I2C_FUNC_SMBUS_BYTE | + I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA | + I2C_FUNC_SMBUS_BLOCK_DATA; +} + +/* For now, we only handle combined mode (smbus) */ +static struct i2c_algorithm scx200_acb_algorithm = { + .name = "NatSemi SCx200 ACCESS.bus", + .id = I2C_ALGO_SMBUS, + .smbus_xfer = scx200_acb_smbus_xfer, + .functionality = scx200_acb_func, +}; + +struct scx200_acb_iface *scx200_acb_list; + +int scx200_acb_probe(struct scx200_acb_iface *iface) +{ + u8 val; + + /* Disable the ACCESS.bus device and Configure the SCL + frequency: 16 clock cycles */ + outb(0x70, ACBCTL2); + + if (inb(ACBCTL2) != 0x70) { + DBG("ACBCTL2 readback failed\n"); + return -ENXIO; + } + + outb(inb(ACBCTL1) | ACBCTL1_NMINTE, ACBCTL1); + + val = inb(ACBCTL1); + if (val) { + DBG("disabled, but ACBCTL1=0x%02x\n", val); + return -ENXIO; + } + + outb(inb(ACBCTL2) | ACBCTL2_ENABLE, ACBCTL2); + + outb(inb(ACBCTL1) | ACBCTL1_NMINTE, ACBCTL1); + + val = inb(ACBCTL1); + if ((val & ACBCTL1_NMINTE) != ACBCTL1_NMINTE) { + DBG("enabled, but NMINTE won't be set, ACBCTL1=0x%02x\n", val); + return -ENXIO; + } + + return 0; +} + +static int __init scx200_acb_create(int base, int index) +{ + struct scx200_acb_iface *iface; + struct i2c_adapter *adapter; + int rc = 0; + char description[64]; + + iface = kmalloc(sizeof(*iface), GFP_KERNEL); + if (!iface) { + printk(KERN_ERR NAME ": can't allocate memory\n"); + rc = -ENOMEM; + goto errout; + } + + memset(iface, 0, sizeof(*iface)); + adapter = &iface->adapter; + i2c_set_adapdata(adapter, iface); + snprintf(adapter->name, I2C_NAME_SIZE, "SCx200 ACB%d", index); + adapter->owner = THIS_MODULE; + adapter->id = I2C_ALGO_SMBUS; + adapter->algo = &scx200_acb_algorithm; + + init_MUTEX(&iface->sem); + + snprintf(description, sizeof(description), "NatSemi SCx200 ACCESS.bus [%s]", adapter->name); + if (request_region(base, 8, description) == 0) { + dev_err(&adapter->dev, "can't allocate io 0x%x-0x%x\n", + base, base + 8-1); + rc = -EBUSY; + goto errout; + } + iface->base = base; + + rc = scx200_acb_probe(iface); + if (rc) { + dev_warn(&adapter->dev, "probe failed\n"); + goto errout; + } + + scx200_acb_reset(iface); + + if (i2c_add_adapter(adapter) < 0) { + dev_err(&adapter->dev, "failed to register\n"); + rc = -ENODEV; + goto errout; + } + + lock_kernel(); + iface->next = scx200_acb_list; + scx200_acb_list = iface; + unlock_kernel(); + + return 0; + + errout: + if (iface) { + if (iface->base) + release_region(iface->base, 8); + kfree(iface); + } + return rc; +} + +static int __init scx200_acb_init(void) +{ + int i; + int rc; + + printk(KERN_DEBUG NAME ": NatSemi SCx200 ACCESS.bus Driver\n"); + + /* Verify that this really is a SCx200 processor */ + if (pci_find_device(PCI_VENDOR_ID_NS, + PCI_DEVICE_ID_NS_SCx200_BRIDGE, + NULL) == NULL) + return -ENODEV; + + rc = -ENXIO; + for (i = 0; i < MAX_DEVICES; ++i) { + if (base[i] > 0) + rc = scx200_acb_create(base[i], i); + } + if (scx200_acb_list) + return 0; + return rc; +} + +static void __exit scx200_acb_cleanup(void) +{ + struct scx200_acb_iface *iface; + lock_kernel(); + while ((iface = scx200_acb_list) != NULL) { + scx200_acb_list = iface->next; + unlock_kernel(); + + i2c_del_adapter(&iface->adapter); + release_region(iface->base, 8); + kfree(iface); + lock_kernel(); + } + unlock_kernel(); +} + +module_init(scx200_acb_init); +module_exit(scx200_acb_cleanup); + +/* + Local variables: + compile-command: "make -k -C ../.. SUBDIRS=drivers/i2c modules" + c-basic-offset: 8 + End: +*/ + diff -prauN linux-2.6.0-test5/drivers/i2c/busses/scx200_i2c.c wli-2.6.0-test5-bk12-25/drivers/i2c/busses/scx200_i2c.c --- linux-2.6.0-test5/drivers/i2c/busses/scx200_i2c.c 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/busses/scx200_i2c.c 2003-09-25 19:15:55.000000000 -0700 @@ -0,0 +1,132 @@ +/* linux/drivers/i2c/scx200_i2c.c + + Copyright (c) 2001,2002 Christer Weinigel + + National Semiconductor SCx200 I2C bus on GPIO pins + + Based on i2c-velleman.c Copyright (C) 1995-96, 2000 Simon G. Vogl + + 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 of the License, 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, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#define NAME "scx200_i2c" + +MODULE_AUTHOR("Christer Weinigel "); +MODULE_DESCRIPTION("NatSemi SCx200 I2C Driver"); +MODULE_LICENSE("GPL"); + +MODULE_PARM(scl, "i"); +MODULE_PARM_DESC(scl, "GPIO line for SCL"); +MODULE_PARM(sda, "i"); +MODULE_PARM_DESC(sda, "GPIO line for SDA"); + +static int scl = CONFIG_SCx200_I2C_SCL; +static int sda = CONFIG_SCx200_I2C_SDA; + +static void scx200_i2c_setscl(void *data, int state) +{ + scx200_gpio_set(scl, state); +} + +static void scx200_i2c_setsda(void *data, int state) +{ + scx200_gpio_set(sda, state); +} + +static int scx200_i2c_getscl(void *data) +{ + return scx200_gpio_get(scl); +} + +static int scx200_i2c_getsda(void *data) +{ + return scx200_gpio_get(sda); +} + +/* ------------------------------------------------------------------------ + * Encapsulate the above functions in the correct operations structure. + * This is only done when more than one hardware adapter is supported. + */ + +static struct i2c_algo_bit_data scx200_i2c_data = { + NULL, + scx200_i2c_setsda, + scx200_i2c_setscl, + scx200_i2c_getsda, + scx200_i2c_getscl, + 10, 10, 100, /* waits, timeout */ +}; + +static struct i2c_adapter scx200_i2c_ops = { + .owner = THIS_MODULE, + .algo_data = &scx200_i2c_data, + .name = "NatSemi SCx200 I2C", +}; + +int scx200_i2c_init(void) +{ + printk(KERN_DEBUG NAME ": NatSemi SCx200 I2C Driver\n"); + + if (!scx200_gpio_present()) { + printk(KERN_ERR NAME ": no SCx200 gpio pins available\n"); + return -ENODEV; + } + + printk(KERN_DEBUG NAME ": SCL=GPIO%02u, SDA=GPIO%02u\n", + scl, sda); + + if (scl == -1 || sda == -1 || scl == sda) { + printk(KERN_ERR NAME ": scl and sda must be specified\n"); + return -EINVAL; + } + + /* Configure GPIOs as open collector outputs */ + scx200_gpio_configure(scl, ~2, 5); + scx200_gpio_configure(sda, ~2, 5); + + if (i2c_bit_add_bus(&scx200_i2c_ops) < 0) { + printk(KERN_ERR NAME ": adapter %s registration failed\n", + scx200_i2c_ops.name); + return -ENODEV; + } + + return 0; +} + +void scx200_i2c_cleanup(void) +{ + i2c_bit_del_bus(&scx200_i2c_ops); +} + +module_init(scx200_i2c_init); +module_exit(scx200_i2c_cleanup); + +/* + Local variables: + compile-command: "make -k -C ../.. SUBDIRS=drivers/i2c modules" + c-basic-offset: 8 + End: +*/ diff -prauN linux-2.6.0-test5/drivers/i2c/chips/Kconfig wli-2.6.0-test5-bk12-25/drivers/i2c/chips/Kconfig --- linux-2.6.0-test5/drivers/i2c/chips/Kconfig 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/chips/Kconfig 2003-09-25 19:15:55.000000000 -0700 @@ -1,112 +1,93 @@ # -# Sensor device configuration -# All depend on EXPERIMENTAL and I2C +# I2C Sensor device configuration # menu "I2C Hardware Sensors Chip support" +config I2C_SENSOR + tristate + default n + config SENSORS_ADM1021 - tristate " Analog Devices ADM1021 and compatibles" + tristate "Analog Devices ADM1021 and compatibles" depends on I2C && EXPERIMENTAL + select I2C_SENSOR help If you say yes here you get support for Analog Devices ADM1021 and ADM1023 sensor chips and clones: Maxim MAX1617 and MAX1617A, Genesys Logic GL523SM, National Semi LM84, TI THMC10, - and the XEON processor built-in sensor. This can also - be built as a module which can be inserted and removed while the - kernel is running. + and the XEON processor built-in sensor. - The module will be called adm1021. - - You will also need the latest user-space utilties: you can find them - in the lm_sensors package, which you can download at - http://www.lm-sensors.nu + This driver can also be built as a module. If so, the module + will be called adm1021. config SENSORS_IT87 - tristate " National Semiconductors IT87 and compatibles" + tristate "National Semiconductors IT87 and compatibles" depends on I2C && EXPERIMENTAL + select I2C_SENSOR help - The module will be called it87. + If you say yes here you get support for National Semiconductor IT87 + sensor chips and clones: IT8705F, IT8712F and SiS960. - You will also need the latest user-space utilties: you can find them - in the lm_sensors package, which you can download at - http://www.lm-sensors.nu + This driver can also be built as a module. If so, the module + will be called it87. config SENSORS_LM75 - tristate " National Semiconductors LM75 and compatibles" + tristate "National Semiconductors LM75 and compatibles" depends on I2C && EXPERIMENTAL + select I2C_SENSOR help If you say yes here you get support for National Semiconductor LM75 sensor chips and clones: Dallas Semi DS75 and DS1775, TelCon - TCN75, and National Semi LM77. This can also be built as a module - which can be inserted and removed while the kernel is running. - - The module will be called lm75. - - You will also need the latest user-space utilties: you can find them - in the lm_sensors package, which you can download at - http://www.lm-sensors.nu - -config SENSORS_LM85 - tristate " National Semiconductors LM85 and compatibles" - depends on I2C && EXPERIMENTAL - help - If you say yes here you get support for National Semiconductor LM85 - sensor chips and clones: ADT7463 and ADM1027. - This can also be built as a module which can be inserted and - removed while the kernel is running. + TCN75, and National Semi LM77. - The module will be called lm85. + This driver can also be built as a module. If so, the module + will be called lm75. - You will also need the latest user-space utilties: you can find them - in the lm_sensors package, which you can download at - http://www.lm-sensors.nu - config SENSORS_LM78 - tristate " National Semiconductors LM78 and compatibles" + tristate "National Semiconductors LM78 and compatibles" depends on I2C && EXPERIMENTAL + select I2C_SENSOR help If you say yes here you get support for National Semiconductor LM78, LM78-J and LM79. This can also be built as a module which can be inserted and removed while the kernel is running. - The module will be called lm78. + This driver can also be built as a module. If so, the module + will be called lm78. + +config SENSORS_LM85 + tristate "National Semiconductors LM85 and compatibles" + depends on I2C && EXPERIMENTAL + select I2C_SENSOR + help + If you say yes here you get support for National Semiconductor LM85 + sensor chips and clones: ADT7463 and ADM1027. + + This driver can also be built as a module. If so, the module + will be called lm85. - You will also need the latest user-space utilties: you can find them - in the lm_sensors package, which you can download at - http://www.lm-sensors.nu - config SENSORS_VIA686A - tristate " VIA686A" + tristate "VIA686A" depends on I2C && EXPERIMENTAL + select I2C_SENSOR help - support for via686a If you say yes here you get support for the integrated sensors in - Via 686A/B South Bridges. This can also be built as a module - which can be inserted and removed while the kernel is running. + Via 686A/B South Bridges. - You will also need the latest user-space utilties: you can find them - in the lm_sensors package, which you can download at - http://www.lm-sensors.nu + This driver can also be built as a module. If so, the module + will be called via686a. config SENSORS_W83781D - tristate " Winbond W83781D, W83782D, W83783S, W83627HF, Asus AS99127F" + tristate "Winbond W83781D, W83782D, W83783S, W83627HF, Asus AS99127F" depends on I2C && EXPERIMENTAL + select I2C_SENSOR help If you say yes here you get support for the Winbond W8378x series of sensor chips: the W83781D, W83782D, W83783S and W83682HF, - and the similar Asus AS99127F. This - can also be built as a module which can be inserted and removed - while the kernel is running. + and the similar Asus AS99127F. - You will also need the latest user-space utilties: you can find them - in the lm_sensors package, which you can download at - http://www.lm-sensors.nu - -config I2C_SENSOR - tristate - default y if SENSORS_ADM1021=y || SENSORS_IT87=y || SENSORS_LM75=y || SENSORS_VIA686A=y || SENSORS_W83781D=y || SENSORS_LM85=y - default m if SENSORS_ADM1021=m || SENSORS_IT87=m || SENSORS_LM75=m || SENSORS_VIA686A=m || SENSORS_W83781D=m || SENSORS_LM85=m - default n + This driver can also be built as a module. If so, the module + will be called w83781d. endmenu diff -prauN linux-2.6.0-test5/drivers/i2c/chips/adm1021.c wli-2.6.0-test5-bk12-25/drivers/i2c/chips/adm1021.c --- linux-2.6.0-test5/drivers/i2c/chips/adm1021.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/chips/adm1021.c 2003-09-25 19:15:55.000000000 -0700 @@ -225,7 +225,6 @@ static int adm1021_detect(struct i2c_ada struct adm1021_data *data; int err = 0; const char *type_name = ""; - const char *client_name = ""; /* Make sure we aren't probing the ISA bus!! This is just a safety check at this moment; i2c_detect really won't call us. */ @@ -291,28 +290,20 @@ static int adm1021_detect(struct i2c_ada if (kind == max1617) { type_name = "max1617"; - client_name = "MAX1617 chip"; } else if (kind == max1617a) { type_name = "max1617a"; - client_name = "MAX1617A chip"; } else if (kind == adm1021) { type_name = "adm1021"; - client_name = "ADM1021 chip"; } else if (kind == adm1023) { type_name = "adm1023"; - client_name = "ADM1023 chip"; } else if (kind == thmc10) { type_name = "thmc10"; - client_name = "THMC10 chip"; } else if (kind == lm84) { type_name = "lm84"; - client_name = "LM84 chip"; } else if (kind == gl523sm) { type_name = "gl523sm"; - client_name = "GL523SM chip"; } else if (kind == mc1066) { type_name = "mc1066"; - client_name = "MC1066 chip"; } else { dev_err(&adapter->dev, "Internal error: unknown kind (%d)?!?", kind); @@ -320,7 +311,7 @@ static int adm1021_detect(struct i2c_ada } /* Fill in the remaining client fields and put it into the global list */ - strlcpy(new_client->name, client_name, DEVICE_NAME_SIZE); + strlcpy(new_client->name, type_name, I2C_NAME_SIZE); data->type = kind; new_client->id = adm1021_id++; diff -prauN linux-2.6.0-test5/drivers/i2c/chips/it87.c wli-2.6.0-test5-bk12-25/drivers/i2c/chips/it87.c --- linux-2.6.0-test5/drivers/i2c/chips/it87.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/chips/it87.c 2003-09-25 19:15:55.000000000 -0700 @@ -592,7 +592,6 @@ int it87_detect(struct i2c_adapter *adap struct it87_data *data; int err = 0; const char *name = ""; - const char *client_name = ""; int is_isa = i2c_is_isa_adapter(adapter); if (!is_isa && @@ -681,10 +680,8 @@ int it87_detect(struct i2c_adapter *adap if (kind == it87) { name = "it87"; - client_name = "IT87 chip"; } /* else if (kind == it8712) { name = "it8712"; - client_name = "IT87-J chip"; } */ else { dev_dbg(&adapter->dev, "Internal error: unknown kind (%d)?!?", kind); @@ -692,7 +689,7 @@ int it87_detect(struct i2c_adapter *adap } /* Fill in the remaining client fields and put it into the global list */ - strlcpy(new_client->name, name, DEVICE_NAME_SIZE); + strlcpy(new_client->name, name, I2C_NAME_SIZE); data->type = kind; diff -prauN linux-2.6.0-test5/drivers/i2c/chips/lm75.c wli-2.6.0-test5-bk12-25/drivers/i2c/chips/lm75.c --- linux-2.6.0-test5/drivers/i2c/chips/lm75.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/chips/lm75.c 2003-09-25 19:15:55.000000000 -0700 @@ -194,7 +194,7 @@ static int lm75_detect(struct i2c_adapte } /* Fill in the remaining client fields and put it into the global list */ - strlcpy(new_client->name, name, DEVICE_NAME_SIZE); + strlcpy(new_client->name, name, I2C_NAME_SIZE); new_client->id = lm75_id++; data->valid = 0; diff -prauN linux-2.6.0-test5/drivers/i2c/chips/lm78.c wli-2.6.0-test5-bk12-25/drivers/i2c/chips/lm78.c --- linux-2.6.0-test5/drivers/i2c/chips/lm78.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/chips/lm78.c 2003-09-25 19:15:55.000000000 -0700 @@ -625,11 +625,11 @@ int lm78_detect(struct i2c_adapter *adap } if (kind == lm78) { - client_name = "LM78 chip"; + client_name = "lm78"; } else if (kind == lm78j) { - client_name = "LM78-J chip"; + client_name = "lm78-j"; } else if (kind == lm79) { - client_name = "LM79 chip"; + client_name = "lm79"; } else { dev_dbg(&adapter->dev, "Internal error: unknown kind (%d)?!?", kind); @@ -638,7 +638,7 @@ int lm78_detect(struct i2c_adapter *adap } /* Fill in the remaining client fields and put into the global list */ - strlcpy(new_client->name, client_name, DEVICE_NAME_SIZE); + strlcpy(new_client->name, client_name, I2C_NAME_SIZE); data->type = kind; data->valid = 0; diff -prauN linux-2.6.0-test5/drivers/i2c/chips/lm85.c wli-2.6.0-test5-bk12-25/drivers/i2c/chips/lm85.c --- linux-2.6.0-test5/drivers/i2c/chips/lm85.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/chips/lm85.c 2003-09-25 19:15:55.000000000 -0700 @@ -853,24 +853,20 @@ int lm85_detect(struct i2c_adapter *adap /* Fill in the chip specific driver values */ if ( kind == any_chip ) { type_name = "lm85"; - strlcpy(new_client->name, "Generic LM85", DEVICE_NAME_SIZE); } else if ( kind == lm85b ) { type_name = "lm85b"; - strlcpy(new_client->name, "National LM85-B", DEVICE_NAME_SIZE); } else if ( kind == lm85c ) { type_name = "lm85c"; - strlcpy(new_client->name, "National LM85-C", DEVICE_NAME_SIZE); } else if ( kind == adm1027 ) { type_name = "adm1027"; - strlcpy(new_client->name, "Analog Devices ADM1027", DEVICE_NAME_SIZE); } else if ( kind == adt7463 ) { type_name = "adt7463"; - strlcpy(new_client->name, "Analog Devices ADT7463", DEVICE_NAME_SIZE); } else { dev_dbg(&adapter->dev, "Internal error, invalid kind (%d)!", kind); err = -EFAULT ; goto ERROR1; } + strlcpy(new_client->name, type_name, I2C_NAME_SIZE); /* Fill in the remaining client fields */ new_client->id = lm85_id++; diff -prauN linux-2.6.0-test5/drivers/i2c/chips/via686a.c wli-2.6.0-test5-bk12-25/drivers/i2c/chips/via686a.c --- linux-2.6.0-test5/drivers/i2c/chips/via686a.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/chips/via686a.c 2003-09-25 19:15:55.000000000 -0700 @@ -671,7 +671,7 @@ static int via686a_detect(struct i2c_ada struct i2c_client *new_client; struct via686a_data *data; int err = 0; - const char client_name[] = "via686a chip"; + const char client_name[] = "via686a"; u16 val; /* Make sure we are probing the ISA bus!! */ @@ -727,7 +727,7 @@ static int via686a_detect(struct i2c_ada new_client->dev.parent = &adapter->dev; /* Fill in the remaining client fields and put into the global list */ - snprintf(new_client->name, DEVICE_NAME_SIZE, client_name); + snprintf(new_client->name, I2C_NAME_SIZE, client_name); data->valid = 0; init_MUTEX(&data->update_lock); diff -prauN linux-2.6.0-test5/drivers/i2c/chips/w83781d.c wli-2.6.0-test5-bk12-25/drivers/i2c/chips/w83781d.c --- linux-2.6.0-test5/drivers/i2c/chips/w83781d.c 2003-09-08 12:49:50.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/chips/w83781d.c 2003-09-25 19:15:55.000000000 -0700 @@ -378,8 +378,8 @@ static ssize_t store_in_##reg (struct de struct w83781d_data *data = i2c_get_clientdata(client); \ u32 val; \ \ - val = simple_strtoul(buf, NULL, 10); \ - data->in_##reg[nr] = (IN_TO_REG(val) / 10); \ + val = simple_strtoul(buf, NULL, 10) / 10; \ + data->in_##reg[nr] = IN_TO_REG(val); \ w83781d_write_value(client, W83781D_REG_IN_##REG(nr), data->in_##reg[nr]); \ \ return count; \ @@ -1098,15 +1098,15 @@ w83781d_detect_subclients(struct i2c_ada } if (kind == w83781d) - client_name = "W83781D subclient"; + client_name = "w83781d subclient"; else if (kind == w83782d) - client_name = "W83782D subclient"; + client_name = "w83782d subclient"; else if (kind == w83783s) - client_name = "W83783S subclient"; + client_name = "w83783s subclient"; else if (kind == w83627hf) - client_name = "W83627HF subclient"; + client_name = "w83627hf subclient"; else if (kind == as99127f) - client_name = "AS99127F subclient"; + client_name = "as99127f subclient"; else client_name = "unknown subclient?"; @@ -1117,7 +1117,7 @@ w83781d_detect_subclients(struct i2c_ada data->lm75[i]->driver = &w83781d_driver; data->lm75[i]->flags = 0; strlcpy(data->lm75[i]->name, client_name, - DEVICE_NAME_SIZE); + I2C_NAME_SIZE); if ((err = i2c_attach_client(data->lm75[i]))) { dev_err(&new_client->dev, "Subclient %d " "registration at address 0x%x " @@ -1304,20 +1304,20 @@ w83781d_detect(struct i2c_adapter *adapt } if (kind == w83781d) { - client_name = "W83781D chip"; + client_name = "w83781d"; } else if (kind == w83782d) { - client_name = "W83782D chip"; + client_name = "w83782d"; } else if (kind == w83783s) { - client_name = "W83783S chip"; + client_name = "w83783s"; } else if (kind == w83627hf) { if (val1 == 0x90) - client_name = "W83627THF chip"; + client_name = "w83627thf"; else - client_name = "W83627HF chip"; + client_name = "w83627hf"; } else if (kind == as99127f) { - client_name = "AS99127F chip"; + client_name = "as99127f"; } else if (kind == w83697hf) { - client_name = "W83697HF chip"; + client_name = "w83697hf"; } else { dev_err(&new_client->dev, "Internal error: unknown " "kind (%d)?!?", kind); @@ -1326,7 +1326,7 @@ w83781d_detect(struct i2c_adapter *adapt } /* Fill in the remaining client fields and put into the global list */ - strlcpy(new_client->name, client_name, DEVICE_NAME_SIZE); + strlcpy(new_client->name, client_name, I2C_NAME_SIZE); data->type = kind; data->valid = 0; diff -prauN linux-2.6.0-test5/drivers/i2c/i2c-adap-ite.c wli-2.6.0-test5-bk12-25/drivers/i2c/i2c-adap-ite.c --- linux-2.6.0-test5/drivers/i2c/i2c-adap-ite.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/i2c-adap-ite.c 1969-12-31 16:00:00.000000000 -0800 @@ -1,279 +0,0 @@ -/* - ------------------------------------------------------------------------- - i2c-adap-ite.c i2c-hw access for the IIC peripheral on the ITE MIPS system - ------------------------------------------------------------------------- - Hai-Pao Fan, MontaVista Software, Inc. - hpfan@mvista.com or source@mvista.com - - Copyright 2001 MontaVista Software Inc. - - ---------------------------------------------------------------------------- - This file was highly leveraged from i2c-elektor.c, which was created - by Simon G. Vogl and Hans Berglund: - - - Copyright (C) 1995-97 Simon G. Vogl - 1998-99 Hans Berglund - - 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 of the License, 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, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* ------------------------------------------------------------------------- */ - -/* With some changes from Kyösti Mälkki and even - Frodo Looijaard */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include "i2c-ite.h" - -#define DEFAULT_BASE 0x14014030 -#define ITE_IIC_IO_SIZE 0x40 -#define DEFAULT_IRQ 0 -#define DEFAULT_CLOCK 0x1b0e /* default 16MHz/(27+14) = 400KHz */ -#define DEFAULT_OWN 0x55 - -static int base = 0; -static int irq = 0; -static int clock = 0; -static int own = 0; - -static int i2c_debug=0; -static struct iic_ite gpi; -static wait_queue_head_t iic_wait; -static int iic_pending; - -/* ----- global defines ----------------------------------------------- */ -#define DEB(x) if (i2c_debug>=1) x -#define DEB2(x) if (i2c_debug>=2) x -#define DEB3(x) if (i2c_debug>=3) x -#define DEBE(x) x /* error messages */ - - -/* ----- local functions ---------------------------------------------- */ - -static void iic_ite_setiic(void *data, int ctl, short val) -{ - unsigned long j = jiffies + 10; - - DEB3(printk(" Write 0x%02x to 0x%x\n",(unsigned short)val, ctl&0xff)); - DEB3({while (time_before(jiffies, j)) schedule();}) - outw(val,ctl); -} - -static short iic_ite_getiic(void *data, int ctl) -{ - short val; - - val = inw(ctl); - DEB3(printk("Read 0x%02x from 0x%x\n",(unsigned short)val, ctl&0xff)); - return (val); -} - -/* Return our slave address. This is the address - * put on the I2C bus when another master on the bus wants to address us - * as a slave - */ -static int iic_ite_getown(void *data) -{ - return (gpi.iic_own); -} - - -static int iic_ite_getclock(void *data) -{ - return (gpi.iic_clock); -} - - -#if 0 -static void iic_ite_sleep(unsigned long timeout) -{ - schedule_timeout( timeout * HZ); -} -#endif - - -/* Put this process to sleep. We will wake up when the - * IIC controller interrupts. - */ -static void iic_ite_waitforpin(void) { - - int timeout = 2; - - /* If interrupts are enabled (which they are), then put the process to - * sleep. This process will be awakened by two events -- either the - * the IIC peripheral interrupts or the timeout expires. - * If interrupts are not enabled then delay for a reasonable amount - * of time and return. - */ - if (gpi.iic_irq > 0) { - cli(); - if (iic_pending == 0) { - interruptible_sleep_on_timeout(&iic_wait, timeout*HZ ); - } else - iic_pending = 0; - sti(); - } else { - udelay(100); - } -} - - -static void iic_ite_handler(int this_irq, void *dev_id, struct pt_regs *regs) -{ - - iic_pending = 1; - - DEB2(printk("iic_ite_handler: in interrupt handler\n")); - wake_up_interruptible(&iic_wait); -} - - -/* Lock the region of memory where I/O registers exist. Request our - * interrupt line and register its associated handler. - */ -static int iic_hw_resrc_init(void) -{ - if (!request_region(gpi.iic_base, ITE_IIC_IO_SIZE, "i2c")) - return -ENODEV; - - if (gpi.iic_irq <= 0) - return 0; - - if (request_irq(gpi.iic_irq, iic_ite_handler, 0, "ITE IIC", 0) < 0) - gpi.iic_irq = 0; - else - enable_irq(gpi.iic_irq); - - return 0; -} - - -static void iic_ite_release(void) -{ - if (gpi.iic_irq > 0) { - disable_irq(gpi.iic_irq); - free_irq(gpi.iic_irq, 0); - } - release_region(gpi.iic_base , 2); -} - -/* ------------------------------------------------------------------------ - * Encapsulate the above functions in the correct operations structure. - * This is only done when more than one hardware adapter is supported. - */ -static struct i2c_algo_iic_data iic_ite_data = { - NULL, - iic_ite_setiic, - iic_ite_getiic, - iic_ite_getown, - iic_ite_getclock, - iic_ite_waitforpin, - 80, 80, 100, /* waits, timeout */ -}; - -static struct i2c_adapter iic_ite_ops = { - .owner = THIS_MODULE, - .id = I2C_HW_I_IIC, - .algo_data = &iic_ite_data, - .dev = { - .name = "ITE IIC adapter", - }, -}; - -/* Called when the module is loaded. This function starts the - * cascade of calls up through the hierarchy of i2c modules (i.e. up to the - * algorithm layer and into to the core layer) - */ -static int __init iic_ite_init(void) -{ - - struct iic_ite *piic = &gpi; - - printk(KERN_INFO "Initialize ITE IIC adapter module\n"); - if (base == 0) - piic->iic_base = DEFAULT_BASE; - else - piic->iic_base = base; - - if (irq == 0) - piic->iic_irq = DEFAULT_IRQ; - else - piic->iic_irq = irq; - - if (clock == 0) - piic->iic_clock = DEFAULT_CLOCK; - else - piic->iic_clock = clock; - - if (own == 0) - piic->iic_own = DEFAULT_OWN; - else - piic->iic_own = own; - - iic_ite_data.data = (void *)piic; - init_waitqueue_head(&iic_wait); - if (iic_hw_resrc_init() == 0) { - if (i2c_iic_add_bus(&iic_ite_ops) < 0) - return -ENODEV; - } else { - return -ENODEV; - } - printk(KERN_INFO " found device at %#x irq %d.\n", - piic->iic_base, piic->iic_irq); - return 0; -} - - -static void iic_ite_exit(void) -{ - i2c_iic_del_bus(&iic_ite_ops); - iic_ite_release(); -} - -/* If modules is NOT defined when this file is compiled, then the MODULE_* - * macros will resolve to nothing - */ -MODULE_AUTHOR("MontaVista Software "); -MODULE_DESCRIPTION("I2C-Bus adapter routines for ITE IIC bus adapter"); -MODULE_LICENSE("GPL"); - -MODULE_PARM(base, "i"); -MODULE_PARM(irq, "i"); -MODULE_PARM(clock, "i"); -MODULE_PARM(own, "i"); -MODULE_PARM(i2c_debug,"i"); - - -/* Called when module is loaded or when kernel is initialized. - * If MODULES is defined when this file is compiled, then this function will - * resolve to init_module (the function called when insmod is invoked for a - * module). Otherwise, this function is called early in the boot, when the - * kernel is intialized. Check out /include/init.h to see how this works. - */ -module_init(iic_ite_init); - -/* Resolves to module_cleanup when MODULES is defined. */ -module_exit(iic_ite_exit); diff -prauN linux-2.6.0-test5/drivers/i2c/i2c-algo-ibm_ocp.c wli-2.6.0-test5-bk12-25/drivers/i2c/i2c-algo-ibm_ocp.c --- linux-2.6.0-test5/drivers/i2c/i2c-algo-ibm_ocp.c 2003-09-08 12:50:12.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/i2c-algo-ibm_ocp.c 1969-12-31 16:00:00.000000000 -0800 @@ -1,900 +0,0 @@ -/* - ------------------------------------------------------------------------- - i2c-algo-ibm_ocp.c i2c driver algorithms for IBM PPC 405 adapters - ------------------------------------------------------------------------- - - Ian DaSilva, MontaVista Software, Inc. - idasilva@mvista.com or source@mvista.com - - Copyright 2000 MontaVista Software Inc. - - Changes made to support the IIC peripheral on the IBM PPC 405 - - - --------------------------------------------------------------------------- - This file was highly leveraged from i2c-algo-pcf.c, which was created - by Simon G. Vogl and Hans Berglund: - - - Copyright (C) 1995-1997 Simon G. Vogl - 1998-2000 Hans Berglund - - With some changes from Kyösti Mälkki and - Frodo Looijaard ,and also from Martin Bailey - - - - 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 of the License, 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, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - --------------------------------------------------------------------------- - - History: 01/20/12 - Armin - akuster@mvista.com - ported up to 2.4.16+ - - Version 02/03/25 - Armin - converted to ocp format - removed commented out or #if 0 code - added Gérard Basler's fix to iic_combined_transaction() such that it - returns the number of successfully completed transfers . -*/ - - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -/* ----- global defines ----------------------------------------------- */ -#define DEB(x) if (i2c_debug>=1) x -#define DEB2(x) if (i2c_debug>=2) x -#define DEB3(x) if (i2c_debug>=3) x /* print several statistical values*/ -#define DEBPROTO(x) if (i2c_debug>=9) x; - /* debug the protocol by showing transferred bits */ -#define DEF_TIMEOUT 5 - - -/* ----- global variables --------------------------------------------- */ - - -/* module parameters: - */ -static int i2c_debug=0; - -/* --- setting states on the bus with the right timing: --------------- */ - -#define iic_outb(adap, reg, val) adap->setiic(adap->data, (int) &(reg), val) -#define iic_inb(adap, reg) adap->getiic(adap->data, (int) &(reg)) - -#define IICO_I2C_SDAHIGH 0x0780 -#define IICO_I2C_SDALOW 0x0781 -#define IICO_I2C_SCLHIGH 0x0782 -#define IICO_I2C_SCLLOW 0x0783 -#define IICO_I2C_LINEREAD 0x0784 - -#define IIC_SINGLE_XFER 0 -#define IIC_COMBINED_XFER 1 - -#define IIC_ERR_LOST_ARB -2 -#define IIC_ERR_INCOMPLETE_XFR -3 -#define IIC_ERR_NACK -1 - -/* --- other auxiliary functions -------------------------------------- */ - - -// -// Description: Puts this process to sleep for a period equal to timeout -// -static inline void iic_sleep(unsigned long timeout) -{ - schedule_timeout( timeout * HZ); -} - - -// -// Description: This performs the IBM PPC 405 IIC initialization sequence -// as described in the PPC405GP data book. -// -static int iic_init (struct i2c_algo_iic_data *adap) -{ - struct iic_regs *iic; - struct iic_ibm *adap_priv_data = adap->data; - unsigned short retval; - iic = (struct iic_regs *) adap_priv_data->iic_base; - - /* Clear master low master address */ - iic_outb(adap,iic->lmadr, 0); - - /* Clear high master address */ - iic_outb(adap,iic->hmadr, 0); - - /* Clear low slave address */ - iic_outb(adap,iic->lsadr, 0); - - /* Clear high slave address */ - iic_outb(adap,iic->hsadr, 0); - - /* Clear status */ - iic_outb(adap,iic->sts, 0x0a); - - /* Clear extended status */ - iic_outb(adap,iic->extsts, 0x8f); - - /* Set clock division */ - iic_outb(adap,iic->clkdiv, 0x04); - - retval = iic_inb(adap, iic->clkdiv); - DEB(printk("iic_init: CLKDIV register = %x\n", retval)); - - /* Enable interrupts on Requested Master Transfer Complete */ - iic_outb(adap,iic->intmsk, 0x01); - - /* Clear transfer count */ - iic_outb(adap,iic->xfrcnt, 0x0); - - /* Clear extended control and status */ - iic_outb(adap,iic->xtcntlss, 0xf0); - - /* Set mode control (flush master data buf, enable hold SCL, exit */ - /* unknown state. */ - iic_outb(adap,iic->mdcntl, 0x47); - - /* Clear control register */ - iic_outb(adap,iic->cntl, 0x0); - - DEB2(printk(KERN_DEBUG "iic_init: Initialized IIC on PPC 405\n")); - return 0; -} - - -// -// Description: After we issue a transaction on the IIC bus, this function -// is called. It puts this process to sleep until we get an interrupt from -// from the controller telling us that the transaction we requested in complete. -// -static int wait_for_pin(struct i2c_algo_iic_data *adap, int *status) -{ - - int timeout = DEF_TIMEOUT; - int retval; - struct iic_regs *iic; - struct iic_ibm *adap_priv_data = adap->data; - iic = (struct iic_regs *) adap_priv_data->iic_base; - - - *status = iic_inb(adap, iic->sts); -#ifndef STUB_I2C - - while (timeout-- && (*status & 0x01)) { - adap->waitforpin(adap->data); - *status = iic_inb(adap, iic->sts); - } -#endif - if (timeout <= 0) { - /* Issue stop signal on the bus, and force an interrupt */ - retval = iic_inb(adap, iic->cntl); - iic_outb(adap, iic->cntl, retval | 0x80); - /* Clear status register */ - iic_outb(adap, iic->sts, 0x0a); - /* Exit unknown bus state */ - retval = iic_inb(adap, iic->mdcntl); - iic_outb(adap, iic->mdcntl, (retval | 0x02)); - - // Check the status of the controller. Does it still see a - // pending transfer, even though we've tried to stop any - // ongoing transaction? - retval = iic_inb(adap, iic->sts); - retval = retval & 0x01; - if(retval) { - // The iic controller is hosed. It is not responding to any - // of our commands. We have already tried to force it into - // a known state, but it has not worked. Our only choice now - // is a soft reset, which will clear all registers, and force - // us to re-initialize the controller. - /* Soft reset */ - iic_outb(adap, iic->xtcntlss, 0x01); - udelay(500); - iic_init(adap); - /* Is the pending transfer bit in the sts reg finally cleared? */ - retval = iic_inb(adap, iic->sts); - retval = retval & 0x01; - if(retval) { - printk(KERN_CRIT "The IIC Controller is hosed. A processor reset is required\n"); - } - // For some reason, even though the interrupt bit in this - // register was set during iic_init, it didn't take. We - // need to set it again. Don't ask me why....this is just what - // I saw when testing timeouts. - iic_outb(adap, iic->intmsk, 0x01); - } - return(-1); - } - else - return(0); -} - - -//------------------------------------ -// Utility functions -// - - -// -// Description: Look at the status register to see if there was an error -// in the requested transaction. If there is, look at the extended status -// register and determine the exact cause. -// -int analyze_status(struct i2c_algo_iic_data *adap, int *error_code) -{ - int ret; - struct iic_regs *iic; - struct iic_ibm *adap_priv_data = adap->data; - iic = (struct iic_regs *) adap_priv_data->iic_base; - - - ret = iic_inb(adap, iic->sts); - if(ret & 0x04) { - // Error occurred - ret = iic_inb(adap, iic->extsts); - if(ret & 0x04) { - // Lost arbitration - *error_code = IIC_ERR_LOST_ARB; - } - if(ret & 0x02) { - // Incomplete transfer - *error_code = IIC_ERR_INCOMPLETE_XFR; - } - if(ret & 0x01) { - // Master transfer aborted by a NACK during the transfer of the - // address byte - *error_code = IIC_ERR_NACK; - } - return -1; - } - return 0; -} - - -// -// Description: This function is called by the upper layers to do the -// grunt work for a master send transaction -// -static int iic_sendbytes(struct i2c_adapter *i2c_adap,const char *buf, - int count, int xfer_flag) -{ - struct iic_regs *iic; - struct i2c_algo_iic_data *adap = i2c_adap->algo_data; - struct iic_ibm *adap_priv_data = adap->data; - int wrcount, status, timeout; - int loops, remainder, i, j; - int ret, error_code; - iic = (struct iic_regs *) adap_priv_data->iic_base; - - - if( count == 0 ) return 0; - wrcount = 0; - loops = count / 4; - remainder = count % 4; - - if((loops > 1) && (remainder == 0)) { - for(i=0; i<(loops-1); i++) { - // - // Write four bytes to master data buffer - // - for(j=0; j<4; j++) { - iic_outb(adap, iic->mdbuf, - buf[wrcount++]); - } - // - // Issue command to IICO device to begin transmission - // - iic_outb(adap, iic->cntl, 0x35); - // - // Wait for transmission to complete. When it does, - //loop to the top of the for statement and write the - // next four bytes. - // - timeout = wait_for_pin(adap, &status); - if(timeout < 0) { - // - // Error handling - // - //printk(KERN_ERR "Error: write timeout\n"); - return wrcount; - } - ret = analyze_status(adap, &error_code); - if(ret < 0) { - if(error_code == IIC_ERR_INCOMPLETE_XFR) { - // Return the number of bytes transferred - ret = iic_inb(adap, iic->xfrcnt); - ret = ret & 0x07; - return (wrcount-4+ret); - } - else return error_code; - } - } - } - else if((loops >= 1) && (remainder > 0)){ - //printk(KERN_DEBUG "iic_sendbytes: (loops >= 1)\n"); - for(i=0; imdbuf, - buf[wrcount++]); - } - // - // Issue command to IICO device to begin transmission - // - iic_outb(adap, iic->cntl, 0x35); - // - // Wait for transmission to complete. When it does, - //loop to the top of the for statement and write the - // next four bytes. - // - timeout = wait_for_pin(adap, &status); - if(timeout < 0) { - // - // Error handling - // - //printk(KERN_ERR "Error: write timeout\n"); - return wrcount; - } - ret = analyze_status(adap, &error_code); - if(ret < 0) { - if(error_code == IIC_ERR_INCOMPLETE_XFR) { - // Return the number of bytes transferred - ret = iic_inb(adap, iic->xfrcnt); - ret = ret & 0x07; - return (wrcount-4+ret); - } - else return error_code; - } - } - } - - //printk(KERN_DEBUG "iic_sendbytes: expedite write\n"); - if(remainder == 0) remainder = 4; - // remainder = remainder - 1; - // - // Write the remaining bytes (less than or equal to 4) - // - for(i=0; imdbuf, buf[wrcount++]); - //printk(KERN_DEBUG "iic_sendbytes: data transferred = %x, wrcount = %d\n", buf[wrcount-1], (wrcount-1)); - } - //printk(KERN_DEBUG "iic_sendbytes: Issuing write\n"); - - if(xfer_flag == IIC_COMBINED_XFER) { - iic_outb(adap, iic->cntl, (0x09 | ((remainder-1) << 4))); - } - else { - iic_outb(adap, iic->cntl, (0x01 | ((remainder-1) << 4))); - } - DEB2(printk(KERN_DEBUG "iic_sendbytes: Waiting for interrupt\n")); - timeout = wait_for_pin(adap, &status); - if(timeout < 0) { - // - // Error handling - // - //printk(KERN_ERR "Error: write timeout\n"); - return wrcount; - } - ret = analyze_status(adap, &error_code); - if(ret < 0) { - if(error_code == IIC_ERR_INCOMPLETE_XFR) { - // Return the number of bytes transferred - ret = iic_inb(adap, iic->xfrcnt); - ret = ret & 0x07; - return (wrcount-4+ret); - } - else return error_code; - } - DEB2(printk(KERN_DEBUG "iic_sendbytes: Got interrupt\n")); - return wrcount; -} - - -// -// Description: Called by the upper layers to do the grunt work for -// a master read transaction. -// -static int iic_readbytes(struct i2c_adapter *i2c_adap, char *buf, int count, int xfer_type) -{ - struct iic_regs *iic; - int rdcount=0, i, status, timeout; - struct i2c_algo_iic_data *adap = i2c_adap->algo_data; - struct iic_ibm *adap_priv_data = adap->data; - int loops, remainder, j; - int ret, error_code; - iic = (struct iic_regs *) adap_priv_data->iic_base; - - if(count == 0) return 0; - loops = count / 4; - remainder = count % 4; - - //printk(KERN_DEBUG "iic_readbytes: loops = %d, remainder = %d\n", loops, remainder); - - if((loops > 1) && (remainder == 0)) { - //printk(KERN_DEBUG "iic_readbytes: (loops > 1) && (remainder == 0)\n"); - for(i=0; i<(loops-1); i++) { - // - // Issue command to begin master read (4 bytes maximum) - // - //printk(KERN_DEBUG "--->Issued read command\n"); - iic_outb(adap, iic->cntl, 0x37); - // - // Wait for transmission to complete. When it does, - // loop to the top of the for statement and write the - // next four bytes. - // - //printk(KERN_DEBUG "--->Waiting for interrupt\n"); - timeout = wait_for_pin(adap, &status); - if(timeout < 0) { - // Error Handler - //printk(KERN_ERR "Error: read timed out\n"); - return rdcount; - } - //printk(KERN_DEBUG "--->Got interrupt\n"); - - ret = analyze_status(adap, &error_code); - if(ret < 0) { - if(error_code == IIC_ERR_INCOMPLETE_XFR) - return rdcount; - else - return error_code; - } - - for(j=0; j<4; j++) { - // Wait for data to shuffle to top of data buffer - // This value needs to optimized. - udelay(1); - buf[rdcount] = iic_inb(adap, iic->mdbuf); - rdcount++; - //printk(KERN_DEBUG "--->Read one byte\n"); - } - } - } - - else if((loops >= 1) && (remainder > 0)){ - //printk(KERN_DEBUG "iic_readbytes: (loops >=1) && (remainder > 0)\n"); - for(i=0; iIssued read command\n"); - iic_outb(adap, iic->cntl, 0x37); - // - // Wait for transmission to complete. When it does, - // loop to the top of the for statement and write the - // next four bytes. - // - //printk(KERN_DEBUG "--->Waiting for interrupt\n"); - timeout = wait_for_pin(adap, &status); - if(timeout < 0) { - // Error Handler - //printk(KERN_ERR "Error: read timed out\n"); - return rdcount; - } - //printk(KERN_DEBUG "--->Got interrupt\n"); - - ret = analyze_status(adap, &error_code); - if(ret < 0) { - if(error_code == IIC_ERR_INCOMPLETE_XFR) - return rdcount; - else - return error_code; - } - - for(j=0; j<4; j++) { - // Wait for data to shuffle to top of data buffer - // This value needs to optimized. - udelay(1); - buf[rdcount] = iic_inb(adap, iic->mdbuf); - rdcount++; - //printk(KERN_DEBUG "--->Read one byte\n"); - } - } - } - - //printk(KERN_DEBUG "iic_readbytes: expedite read\n"); - if(remainder == 0) remainder = 4; - DEB2(printk(KERN_DEBUG "iic_readbytes: writing %x to IICO_CNTL\n", (0x03 | ((remainder-1) << 4)))); - - if(xfer_type == IIC_COMBINED_XFER) { - iic_outb(adap, iic->cntl, (0x0b | ((remainder-1) << 4))); - } - else { - iic_outb(adap, iic->cntl, (0x03 | ((remainder-1) << 4))); - } - DEB2(printk(KERN_DEBUG "iic_readbytes: Wait for pin\n")); - timeout = wait_for_pin(adap, &status); - DEB2(printk(KERN_DEBUG "iic_readbytes: Got the interrupt\n")); - if(timeout < 0) { - // Error Handler - //printk(KERN_ERR "Error: read timed out\n"); - return rdcount; - } - - ret = analyze_status(adap, &error_code); - if(ret < 0) { - if(error_code == IIC_ERR_INCOMPLETE_XFR) - return rdcount; - else - return error_code; - } - - //printk(KERN_DEBUG "iic_readbyte: Begin reading data buffer\n"); - for(i=0; imdbuf); - // printk(KERN_DEBUG "iic_readbytes: Character read = %x\n", buf[rdcount]); - rdcount++; - } - - return rdcount; -} - - -// -// Description: This function implements combined transactions. Combined -// transactions consist of combinations of reading and writing blocks of data. -// Each transfer (i.e. a read or a write) is separated by a repeated start -// condition. -// -static int iic_combined_transaction(struct i2c_adapter *i2c_adap, struct i2c_msg msgs[], int num) -{ - int i; - struct i2c_msg *pmsg; - int ret; - - DEB2(printk(KERN_DEBUG "Beginning combined transaction\n")); - for(i=0; i < num; i++) { - pmsg = &msgs[i]; - if(pmsg->flags & I2C_M_RD) { - - // Last read or write segment needs to be terminated with a stop - if(i < num-1) { - DEB2(printk(KERN_DEBUG "This one is a read\n")); - } - else { - DEB2(printk(KERN_DEBUG "Doing the last read\n")); - } - ret = iic_readbytes(i2c_adap, pmsg->buf, pmsg->len, (i < num-1) ? IIC_COMBINED_XFER : IIC_SINGLE_XFER); - - if (ret != pmsg->len) { - DEB2(printk("i2c-algo-ppc405.o: fail: " - "only read %d bytes.\n",ret)); - return i; - } - else { - DEB2(printk("i2c-algo-ppc405.o: read %d bytes.\n",ret)); - } - } - else if(!(pmsg->flags & I2C_M_RD)) { - - // Last read or write segment needs to be terminated with a stop - if(i < num-1) { - DEB2(printk(KERN_DEBUG "This one is a write\n")); - } - else { - DEB2(printk(KERN_DEBUG "Doing the last write\n")); - } - ret = iic_sendbytes(i2c_adap, pmsg->buf, pmsg->len, (i < num-1) ? IIC_COMBINED_XFER : IIC_SINGLE_XFER); - - if (ret != pmsg->len) { - DEB2(printk("i2c-algo-ppc405.o: fail: " - "only wrote %d bytes.\n",ret)); - return i; - } - else { - DEB2(printk("i2c-algo-ppc405.o: wrote %d bytes.\n",ret)); - } - } - } - - return num; -} - - -// -// Description: Whenever we initiate a transaction, the first byte clocked -// onto the bus after the start condition is the address (7 bit) of the -// device we want to talk to. This function manipulates the address specified -// so that it makes sense to the hardware when written to the IIC peripheral. -// -// Note: 10 bit addresses are not supported in this driver, although they are -// supported by the hardware. This functionality needs to be implemented. -// -static inline int iic_doAddress(struct i2c_algo_iic_data *adap, - struct i2c_msg *msg, int retries) -{ - struct iic_regs *iic; - unsigned short flags = msg->flags; - unsigned char addr; - struct iic_ibm *adap_priv_data = adap->data; - iic = (struct iic_regs *) adap_priv_data->iic_base; - -// -// The following segment for 10 bit addresses needs to be ported -// -/* Ten bit addresses not supported right now - if ( (flags & I2C_M_TEN) ) { - // a ten bit address - addr = 0xf0 | (( msg->addr >> 7) & 0x03); - DEB2(printk(KERN_DEBUG "addr0: %d\n",addr)); - // try extended address code... - ret = try_address(adap, addr, retries); - if (ret!=1) { - printk(KERN_ERR "iic_doAddress: died at extended address code.\n"); - return -EREMOTEIO; - } - // the remaining 8 bit address - iic_outb(adap,msg->addr & 0x7f); - // Status check comes here - if (ret != 1) { - printk(KERN_ERR "iic_doAddress: died at 2nd address code.\n"); - return -EREMOTEIO; - } - if ( flags & I2C_M_RD ) { - i2c_repstart(adap); - // okay, now switch into reading mode - addr |= 0x01; - ret = try_address(adap, addr, retries); - if (ret!=1) { - printk(KERN_ERR "iic_doAddress: died at extended address code.\n"); - return -EREMOTEIO; - } - } - } else ----------> // normal 7 bit address - -Ten bit addresses not supported yet */ - - addr = ( msg->addr << 1 ); - if (flags & I2C_M_RD ) - addr |= 1; - if (flags & I2C_M_REV_DIR_ADDR ) - addr ^= 1; - // - // Write to the low slave address - // - iic_outb(adap, iic->lmadr, addr); - // - // Write zero to the high slave register since we are - // only using 7 bit addresses - // - iic_outb(adap, iic->hmadr, 0); - - return 0; -} - - -// -// Description: Prepares the controller for a transaction (clearing status -// registers, data buffers, etc), and then calls either iic_readbytes or -// iic_sendbytes to do the actual transaction. -// -static int iic_xfer(struct i2c_adapter *i2c_adap, - struct i2c_msg msgs[], - int num) -{ - struct iic_regs *iic; - struct i2c_algo_iic_data *adap = i2c_adap->algo_data; - struct iic_ibm *adap_priv_data = adap->data; - struct i2c_msg *pmsg; - int i = 0; - int ret; - iic = (struct iic_regs *) adap_priv_data->iic_base; - - pmsg = &msgs[i]; - - // - // Clear status register - // - DEB2(printk(KERN_DEBUG "iic_xfer: iic_xfer: Clearing status register\n")); - iic_outb(adap, iic->sts, 0x0a); - - // - // Wait for any pending transfers to complete - // - DEB2(printk(KERN_DEBUG "iic_xfer: Waiting for any pending transfers to complete\n")); - while((ret = iic_inb(adap, iic->sts)) == 0x01) { - ; - } - - // - // Flush master data buf - // - DEB2(printk(KERN_DEBUG "iic_xfer: Clearing master data buffer\n")); - ret = iic_inb(adap, iic->mdcntl); - iic_outb(adap, iic->mdcntl, ret | 0x40); - - // - // Load slave address - // - DEB2(printk(KERN_DEBUG "iic_xfer: Loading slave address\n")); - ret = iic_doAddress(adap, pmsg, i2c_adap->retries); - - // - // Check to see if the bus is busy - // - ret = iic_inb(adap, iic->extsts); - // Mask off the irrelevent bits - ret = ret & 0x70; - // When the bus is free, the BCS bits in the EXTSTS register are 0b100 - if(ret != 0x40) return IIC_ERR_LOST_ARB; - - // - // Combined transaction (read and write) - // - if(num > 1) { - DEB2(printk(KERN_DEBUG "iic_xfer: Call combined transaction\n")); - ret = iic_combined_transaction(i2c_adap, msgs, num); - } - // - // Read only - // - else if((num == 1) && (pmsg->flags & I2C_M_RD)) { - // - // Tell device to begin reading data from the master data - // - DEB2(printk(KERN_DEBUG "iic_xfer: Call adapter's read\n")); - ret = iic_readbytes(i2c_adap, pmsg->buf, pmsg->len, IIC_SINGLE_XFER); - } - // - // Write only - // - else if((num == 1 ) && (!(pmsg->flags & I2C_M_RD))) { - // - // Write data to master data buffers and tell our device - // to begin transmitting - // - DEB2(printk(KERN_DEBUG "iic_xfer: Call adapter's write\n")); - ret = iic_sendbytes(i2c_adap, pmsg->buf, pmsg->len, IIC_SINGLE_XFER); - } - - return ret; -} - - -// -// Description: Implements device specific ioctls. Higher level ioctls can -// be found in i2c-core.c and are typical of any i2c controller (specifying -// slave address, timeouts, etc). These ioctls take advantage of any hardware -// features built into the controller for which this algorithm-adapter set -// was written. These ioctls allow you to take control of the data and clock -// lines on the IBM PPC 405 IIC controller and set the either high or low, -// similar to a GPIO pin. -// -static int algo_control(struct i2c_adapter *adapter, - unsigned int cmd, unsigned long arg) -{ - struct iic_regs *iic; - struct i2c_algo_iic_data *adap = adapter->algo_data; - struct iic_ibm *adap_priv_data = adap->data; - int ret=0; - int lines; - iic = (struct iic_regs *) adap_priv_data->iic_base; - - lines = iic_inb(adap, iic->directcntl); - - if (cmd == IICO_I2C_SDAHIGH) { - lines = lines & 0x01; - if( lines ) lines = 0x04; - else lines = 0; - iic_outb(adap, iic->directcntl,(0x08|lines)); - } - else if (cmd == IICO_I2C_SDALOW) { - lines = lines & 0x01; - if( lines ) lines = 0x04; - else lines = 0; - iic_outb(adap, iic->directcntl,(0x00|lines)); - } - else if (cmd == IICO_I2C_SCLHIGH) { - lines = lines & 0x02; - if( lines ) lines = 0x08; - else lines = 0; - iic_outb(adap, iic->directcntl,(0x04|lines)); - } - else if (cmd == IICO_I2C_SCLLOW) { - lines = lines & 0x02; - if( lines ) lines = 0x08; - else lines = 0; - iic_outb(adap, iic->directcntl,(0x00|lines)); - } - else if (cmd == IICO_I2C_LINEREAD) { - ret = lines; - } - return ret; -} - - -static u32 iic_func(struct i2c_adapter *adap) -{ - return I2C_FUNC_SMBUS_EMUL | I2C_FUNC_10BIT_ADDR | - I2C_FUNC_PROTOCOL_MANGLING; -} - - -/* -----exported algorithm data: ------------------------------------- */ - -static struct i2c_algorithm iic_algo = { - .name = "IBM on-chip IIC algorithm", - .id = I2C_ALGO_OCP, - .master_xfer = iic_xfer, - .algo_control = algo_control, - .functionality = iic_func, -}; - -/* - * registering functions to load algorithms at runtime - */ - - -// -// Description: Register bus structure -// -int i2c_ocp_add_bus(struct i2c_adapter *adap) -{ - struct i2c_algo_iic_data *iic_adap = adap->algo_data; - - DEB2(printk(KERN_DEBUG "i2c-algo-iic.o: hw routines for %s registered.\n", - adap->name)); - - /* register new adapter to i2c module... */ - - adap->id |= iic_algo.id; - adap->algo = &iic_algo; - - adap->timeout = 100; /* default values, should */ - adap->retries = 3; /* be replaced by defines */ - - iic_init(iic_adap); - i2c_add_adapter(adap); - return 0; -} - - -// -// Done -// -int i2c_ocp_del_bus(struct i2c_adapter *adap) -{ - return i2c_del_adapter(adap); -} - - -EXPORT_SYMBOL(i2c_ocp_add_bus); -EXPORT_SYMBOL(i2c_ocp_del_bus); - -// -// The MODULE_* macros resolve to nothing if MODULES is not defined -// when this file is compiled. -// -MODULE_AUTHOR("MontaVista Software "); -MODULE_DESCRIPTION("PPC 405 iic algorithm"); -MODULE_LICENSE("GPL"); - -MODULE_PARM(i2c_debug,"i"); - -MODULE_PARM_DESC(i2c_debug, - "debug level - 0 off; 1 normal; 2,3 more verbose; 9 iic-protocol"); - diff -prauN linux-2.6.0-test5/drivers/i2c/i2c-algo-ibm_ocp.h wli-2.6.0-test5-bk12-25/drivers/i2c/i2c-algo-ibm_ocp.h --- linux-2.6.0-test5/drivers/i2c/i2c-algo-ibm_ocp.h 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/i2c-algo-ibm_ocp.h 1969-12-31 16:00:00.000000000 -0800 @@ -1,55 +0,0 @@ -/* ------------------------------------------------------------------------- */ -/* i2c-algo-ibm_ocp.h i2c driver algorithms for IBM PPC 405 IIC adapters */ -/* ------------------------------------------------------------------------- */ -/* Copyright (C) 1995-97 Simon G. Vogl - 1998-99 Hans Berglund - - 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 of the License, 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, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* ------------------------------------------------------------------------- */ - -/* With some changes from Kyösti Mälkki and even - Frodo Looijaard */ - -/* Modifications by MontaVista Software, August 2000 - Changes made to support the IIC peripheral on the IBM PPC 405 */ - -#ifndef I2C_ALGO_IIC_H -#define I2C_ALGO_IIC_H 1 - -/* --- Defines for pcf-adapters --------------------------------------- */ -#include - -struct i2c_algo_iic_data { - struct iic_regs *data; /* private data for lolevel routines */ - void (*setiic) (void *data, int ctl, int val); - int (*getiic) (void *data, int ctl); - int (*getown) (void *data); - int (*getclock) (void *data); - void (*waitforpin) (void *data); - - /* local settings */ - int udelay; - int mdelay; - int timeout; -}; - - -#define I2C_IIC_ADAP_MAX 16 - - -int i2c_ocp_add_bus(struct i2c_adapter *); -int i2c_ocp_del_bus(struct i2c_adapter *); - -#endif /* I2C_ALGO_IIC_H */ diff -prauN linux-2.6.0-test5/drivers/i2c/i2c-algo-ite.c wli-2.6.0-test5-bk12-25/drivers/i2c/i2c-algo-ite.c --- linux-2.6.0-test5/drivers/i2c/i2c-algo-ite.c 2003-09-08 12:50:24.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/i2c-algo-ite.c 2003-09-25 19:15:55.000000000 -0700 @@ -38,7 +38,6 @@ #include #include #include -#include #include #include #include diff -prauN linux-2.6.0-test5/drivers/i2c/i2c-core.c wli-2.6.0-test5-bk12-25/drivers/i2c/i2c-core.c --- linux-2.6.0-test5/drivers/i2c/i2c-core.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/i2c-core.c 2003-09-25 19:15:55.000000000 -0700 @@ -581,8 +581,7 @@ int i2c_master_send(struct i2c_client *c */ return (ret == 1 )? count : ret; } else { - printk(KERN_ERR "i2c-core.o: I2C adapter %04x: I2C level transfers not supported\n", - client->adapter->id); + dev_err(&client->adapter->dev, "I2C level transfers not supported\n"); return -ENOSYS; } } @@ -614,8 +613,7 @@ int i2c_master_recv(struct i2c_client *c */ return (ret == 1 )? count : ret; } else { - printk(KERN_DEBUG "i2c-core.o: I2C adapter %04x: I2C level transfers not supported\n", - client->adapter->id); + dev_err(&client->adapter->dev, "I2C level transfers not supported\n"); return -ENOSYS; } } diff -prauN linux-2.6.0-test5/drivers/i2c/i2c-dev.c wli-2.6.0-test5-bk12-25/drivers/i2c/i2c-dev.c --- linux-2.6.0-test5/drivers/i2c/i2c-dev.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/i2c-dev.c 2003-09-25 19:15:55.000000000 -0700 @@ -505,8 +505,7 @@ static int __init i2c_dev_init(void) { int res; - printk(KERN_INFO "i2c /dev entries driver module version %s (%s)\n", - I2C_VERSION, I2C_DATE); + printk(KERN_INFO "i2c /dev entries driver\n"); if (register_chrdev(I2C_MAJOR,"i2c",&i2cdev_fops)) { printk(KERN_ERR "i2c-dev.o: unable to get major %d for i2c bus\n", diff -prauN linux-2.6.0-test5/drivers/i2c/i2c-elektor.c wli-2.6.0-test5-bk12-25/drivers/i2c/i2c-elektor.c --- linux-2.6.0-test5/drivers/i2c/i2c-elektor.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/i2c-elektor.c 1969-12-31 16:00:00.000000000 -0800 @@ -1,287 +0,0 @@ -/* ------------------------------------------------------------------------- */ -/* i2c-elektor.c i2c-hw access for PCF8584 style isa bus adaptes */ -/* ------------------------------------------------------------------------- */ -/* Copyright (C) 1995-97 Simon G. Vogl - 1998-99 Hans Berglund - - 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 of the License, 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, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* ------------------------------------------------------------------------- */ - -/* With some changes from Kyösti Mälkki and even - Frodo Looijaard */ - -/* Partialy rewriten by Oleg I. Vdovikin for mmapped support of - for Alpha Processor Inc. UP-2000(+) boards */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include -#include - -#include "i2c-pcf8584.h" - -#define DEFAULT_BASE 0x330 - -static int base; -static int irq; -static int clock = 0x1c; -static int own = 0x55; -static int mmapped; -static int i2c_debug; - -/* vdovikin: removed static struct i2c_pcf_isa gpi; code - - this module in real supports only one device, due to missing arguments - in some functions, called from the algo-pcf module. Sometimes it's - need to be rewriten - but for now just remove this for simpler reading */ - -static wait_queue_head_t pcf_wait; -static int pcf_pending; - -/* ----- global defines ----------------------------------------------- */ -#define DEB(x) if (i2c_debug>=1) x -#define DEB2(x) if (i2c_debug>=2) x -#define DEB3(x) if (i2c_debug>=3) x -#define DEBE(x) x /* error messages */ - -/* ----- local functions ---------------------------------------------- */ - -static void pcf_isa_setbyte(void *data, int ctl, int val) -{ - int address = ctl ? (base + 1) : base; - - /* enable irq if any specified for serial operation */ - if (ctl && irq && (val & I2C_PCF_ESO)) { - val |= I2C_PCF_ENI; - } - - DEB3(printk(KERN_DEBUG "i2c-elektor.o: Write 0x%X 0x%02X\n", address, val & 255)); - - switch (mmapped) { - case 0: /* regular I/O */ - outb(val, address); - break; - case 2: /* double mapped I/O needed for UP2000 board, - I don't know why this... */ - writeb(val, address); - /* fall */ - case 1: /* memory mapped I/O */ - writeb(val, address); - break; - } -} - -static int pcf_isa_getbyte(void *data, int ctl) -{ - int address = ctl ? (base + 1) : base; - int val = mmapped ? readb(address) : inb(address); - - DEB3(printk(KERN_DEBUG "i2c-elektor.o: Read 0x%X 0x%02X\n", address, val)); - - return (val); -} - -static int pcf_isa_getown(void *data) -{ - return (own); -} - - -static int pcf_isa_getclock(void *data) -{ - return (clock); -} - -static void pcf_isa_waitforpin(void) { - - int timeout = 2; - - if (irq > 0) { - cli(); - if (pcf_pending == 0) { - interruptible_sleep_on_timeout(&pcf_wait, timeout*HZ ); - } else - pcf_pending = 0; - sti(); - } else { - udelay(100); - } -} - - -static irqreturn_t pcf_isa_handler(int this_irq, void *dev_id, struct pt_regs *regs) { - pcf_pending = 1; - wake_up_interruptible(&pcf_wait); - return IRQ_HANDLED; -} - - -static int pcf_isa_init(void) -{ - if (!mmapped) { - if (!request_region(base, 2, "i2c (isa bus adapter)")) { - printk(KERN_ERR - "i2c-elektor.o: requested I/O region (0x%X:2) " - "is in use.\n", base); - return -ENODEV; - } - } - if (irq > 0) { - if (request_irq(irq, pcf_isa_handler, 0, "PCF8584", 0) < 0) { - printk(KERN_ERR "i2c-elektor.o: Request irq%d failed\n", irq); - irq = 0; - } else - enable_irq(irq); - } - return 0; -} - -/* ------------------------------------------------------------------------ - * Encapsulate the above functions in the correct operations structure. - * This is only done when more than one hardware adapter is supported. - */ -static struct i2c_algo_pcf_data pcf_isa_data = { - .setpcf = pcf_isa_setbyte, - .getpcf = pcf_isa_getbyte, - .getown = pcf_isa_getown, - .getclock = pcf_isa_getclock, - .waitforpin = pcf_isa_waitforpin, - .udelay = 10, - .mdelay = 10, - .timeout = 100, -}; - -static struct i2c_adapter pcf_isa_ops = { - .owner = THIS_MODULE, - .id = I2C_HW_P_ELEK, - .algo_data = &pcf_isa_data, - .name = "PCF8584 ISA adapter", -}; - -static int __init i2c_pcfisa_init(void) -{ -#ifdef __alpha__ - /* check to see we have memory mapped PCF8584 connected to the - Cypress cy82c693 PCI-ISA bridge as on UP2000 board */ - if (base == 0) { - - struct pci_dev *cy693_dev = - pci_find_device(PCI_VENDOR_ID_CONTAQ, - PCI_DEVICE_ID_CONTAQ_82C693, NULL); - - if (cy693_dev) { - char config; - /* yeap, we've found cypress, let's check config */ - if (!pci_read_config_byte(cy693_dev, 0x47, &config)) { - - DEB3(printk(KERN_DEBUG "i2c-elektor.o: found cy82c693, config register 0x47 = 0x%02x.\n", config)); - - /* UP2000 board has this register set to 0xe1, - but the most significant bit as seems can be - reset during the proper initialisation - sequence if guys from API decides to do that - (so, we can even enable Tsunami Pchip - window for the upper 1 Gb) */ - - /* so just check for ROMCS at 0xe0000, - ROMCS enabled for writes - and external XD Bus buffer in use. */ - if ((config & 0x7f) == 0x61) { - /* seems to be UP2000 like board */ - base = 0xe0000; - /* I don't know why we need to - write twice */ - mmapped = 2; - /* UP2000 drives ISA with - 8.25 MHz (PCI/4) clock - (this can be read from cypress) */ - clock = I2C_PCF_CLK | I2C_PCF_TRNS90; - printk(KERN_INFO "i2c-elektor.o: found API UP2000 like board, will probe PCF8584 later.\n"); - } - } - } - } -#endif - - /* sanity checks for mmapped I/O */ - if (mmapped && base < 0xc8000) { - printk(KERN_ERR "i2c-elektor.o: incorrect base address (0x%0X) specified for mmapped I/O.\n", base); - return -ENODEV; - } - - printk(KERN_INFO "i2c-elektor.o: i2c pcf8584-isa adapter module version %s (%s)\n", I2C_VERSION, I2C_DATE); - - if (base == 0) { - base = DEFAULT_BASE; - } - - init_waitqueue_head(&pcf_wait); - if (pcf_isa_init()) - return -ENODEV; - if (i2c_pcf_add_bus(&pcf_isa_ops) < 0) - goto fail; - - printk(KERN_ERR "i2c-elektor.o: found device at %#x.\n", base); - - return 0; - - fail: - if (irq > 0) { - disable_irq(irq); - free_irq(irq, 0); - } - - if (!mmapped) - release_region(base , 2); - return -ENODEV; -} - -static void i2c_pcfisa_exit(void) -{ - i2c_pcf_del_bus(&pcf_isa_ops); - - if (irq > 0) { - disable_irq(irq); - free_irq(irq, 0); - } - - if (!mmapped) - release_region(base , 2); -} - -MODULE_AUTHOR("Hans Berglund "); -MODULE_DESCRIPTION("I2C-Bus adapter routines for PCF8584 ISA bus adapter"); -MODULE_LICENSE("GPL"); - -MODULE_PARM(base, "i"); -MODULE_PARM(irq, "i"); -MODULE_PARM(clock, "i"); -MODULE_PARM(own, "i"); -MODULE_PARM(mmapped, "i"); -MODULE_PARM(i2c_debug, "i"); - -module_init(i2c_pcfisa_init); -module_exit(i2c_pcfisa_exit); diff -prauN linux-2.6.0-test5/drivers/i2c/i2c-elv.c wli-2.6.0-test5-bk12-25/drivers/i2c/i2c-elv.c --- linux-2.6.0-test5/drivers/i2c/i2c-elv.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/i2c-elv.c 1969-12-31 16:00:00.000000000 -0800 @@ -1,176 +0,0 @@ -/* ------------------------------------------------------------------------- */ -/* i2c-elv.c i2c-hw access for philips style parallel port adapters */ -/* ------------------------------------------------------------------------- */ -/* Copyright (C) 1995-2000 Simon G. Vogl - - 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 of the License, 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, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* ------------------------------------------------------------------------- */ - -/* With some changes from Kyösti Mälkki and even - Frodo Looijaard */ - -/* $Id: i2c-elv.c,v 1.27 2003/01/21 08:08:16 kmalkki Exp $ */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define DEFAULT_BASE 0x378 -static int base=0; -static unsigned char PortData = 0; - -/* ----- global defines ----------------------------------------------- */ -#define DEB(x) /* should be reasonable open, close &c. */ -#define DEB2(x) /* low level debugging - very slow */ -#define DEBE(x) x /* error messages */ -#define DEBINIT(x) x /* detection status messages */ - -/* --- Convenience defines for the parallel port: */ -#define BASE (unsigned int)(data) -#define DATA BASE /* Centronics data port */ -#define STAT (BASE+1) /* Centronics status port */ -#define CTRL (BASE+2) /* Centronics control port */ - - -/* ----- local functions ---------------------------------------------- */ - - -static void bit_elv_setscl(void *data, int state) -{ - if (state) { - PortData &= 0xfe; - } else { - PortData |=1; - } - outb(PortData, DATA); -} - -static void bit_elv_setsda(void *data, int state) -{ - if (state) { - PortData &=0xfd; - } else { - PortData |=2; - } - outb(PortData, DATA); -} - -static int bit_elv_getscl(void *data) -{ - return ( 0 == ( (inb_p(STAT)) & 0x08 ) ); -} - -static int bit_elv_getsda(void *data) -{ - return ( 0 == ( (inb_p(STAT)) & 0x40 ) ); -} - -static int bit_elv_init(void) -{ - if (!request_region(base, (base == 0x3bc) ? 3 : 8, - "i2c (ELV adapter)")) - return -ENODEV; - - if (inb(base+1) & 0x80) { /* BUSY should be high */ - DEBINIT(printk(KERN_DEBUG "i2c-elv.o: Busy was low.\n")); - goto fail; - } - - outb(0x0c,base+2); /* SLCT auf low */ - udelay(400); - if (!(inb(base+1) && 0x10)) { - outb(0x04,base+2); - DEBINIT(printk(KERN_DEBUG "i2c-elv.o: Select was high.\n")); - goto fail; - } - - PortData = 0; - bit_elv_setsda((void*)base,1); - bit_elv_setscl((void*)base,1); - return 0; - -fail: - release_region(base , (base == 0x3bc) ? 3 : 8); - return -ENODEV; -} - -/* ------------------------------------------------------------------------ - * Encapsulate the above functions in the correct operations structure. - * This is only done when more than one hardware adapter is supported. - */ -static struct i2c_algo_bit_data bit_elv_data = { - .setsda = bit_elv_setsda, - .setscl = bit_elv_setscl, - .getsda = bit_elv_getsda, - .getscl = bit_elv_getscl, - .udelay = 80, - .mdelay = 80, - .timeout = HZ -}; - -static struct i2c_adapter bit_elv_ops = { - .owner = THIS_MODULE, - .id = I2C_HW_B_ELV, - .algo_data = &bit_elv_data, - .name = "ELV Parallel port adaptor", -}; - -static int __init i2c_bitelv_init(void) -{ - printk(KERN_INFO "i2c-elv.o: i2c ELV parallel port adapter module version %s (%s)\n", I2C_VERSION, I2C_DATE); - if (base==0) { - /* probe some values */ - base=DEFAULT_BASE; - bit_elv_data.data=(void*)DEFAULT_BASE; - if (bit_elv_init()==0) { - if(i2c_bit_add_bus(&bit_elv_ops) < 0) - return -ENODEV; - } else { - return -ENODEV; - } - } else { - i2c_set_adapdata(&bit_elv_ops, (void *)base); - if (bit_elv_init()==0) { - if(i2c_bit_add_bus(&bit_elv_ops) < 0) - return -ENODEV; - } else { - return -ENODEV; - } - } - printk(KERN_DEBUG "i2c-elv.o: found device at %#x.\n",base); - return 0; -} - -static void __exit i2c_bitelv_exit(void) -{ - i2c_bit_del_bus(&bit_elv_ops); - release_region(base , (base == 0x3bc) ? 3 : 8); -} - -MODULE_AUTHOR("Simon G. Vogl "); -MODULE_DESCRIPTION("I2C-Bus adapter routines for ELV parallel port adapter"); -MODULE_LICENSE("GPL"); - -MODULE_PARM(base, "i"); - -module_init(i2c_bitelv_init); -module_exit(i2c_bitelv_exit); diff -prauN linux-2.6.0-test5/drivers/i2c/i2c-frodo.c wli-2.6.0-test5-bk12-25/drivers/i2c/i2c-frodo.c --- linux-2.6.0-test5/drivers/i2c/i2c-frodo.c 2003-09-08 12:49:50.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/i2c-frodo.c 1969-12-31 16:00:00.000000000 -0800 @@ -1,85 +0,0 @@ - -/* - * linux/drivers/i2c/i2c-frodo.c - * - * Author: Abraham van der Merwe - * - * An I2C adapter driver for the 2d3D, Inc. StrongARM SA-1110 - * Development board (Frodo). - * - * This source code is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 as published by the Free Software Foundation. - */ - -#include -#include -#include -#include -#include -#include -#include - - -static void frodo_setsda (void *data,int state) -{ - if (state) - FRODO_CPLD_I2C |= FRODO_I2C_SDA_OUT; - else - FRODO_CPLD_I2C &= ~FRODO_I2C_SDA_OUT; -} - -static void frodo_setscl (void *data,int state) -{ - if (state) - FRODO_CPLD_I2C |= FRODO_I2C_SCL_OUT; - else - FRODO_CPLD_I2C &= ~FRODO_I2C_SCL_OUT; -} - -static int frodo_getsda (void *data) -{ - return ((FRODO_CPLD_I2C & FRODO_I2C_SDA_IN) != 0); -} - -static int frodo_getscl (void *data) -{ - return ((FRODO_CPLD_I2C & FRODO_I2C_SCL_IN) != 0); -} - -static struct i2c_algo_bit_data bit_frodo_data = { - .setsda = frodo_setsda, - .setscl = frodo_setscl, - .getsda = frodo_getsda, - .getscl = frodo_getscl, - .udelay = 80, - .mdelay = 80, - .timeout = HZ -}; - -static struct i2c_adapter frodo_ops = { - .owner = THIS_MODULE, - .id = I2C_HW_B_FRODO, - .algo_data = &bit_frodo_data, - .dev = { - .name = "Frodo adapter driver", - }, -}; - -static int __init i2c_frodo_init (void) -{ - return i2c_bit_add_bus(&frodo_ops); -} - -static void __exit i2c_frodo_exit (void) -{ - i2c_bit_del_bus(&frodo_ops); -} - -MODULE_AUTHOR ("Abraham van der Merwe "); -MODULE_DESCRIPTION ("I2C-Bus adapter routines for Frodo"); -MODULE_LICENSE ("GPL"); - -module_init (i2c_frodo_init); -module_exit (i2c_frodo_exit); - diff -prauN linux-2.6.0-test5/drivers/i2c/i2c-iop3xx.c wli-2.6.0-test5-bk12-25/drivers/i2c/i2c-iop3xx.c --- linux-2.6.0-test5/drivers/i2c/i2c-iop3xx.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/i2c-iop3xx.c 1969-12-31 16:00:00.000000000 -0800 @@ -1,536 +0,0 @@ -/* ------------------------------------------------------------------------- */ -/* i2c-iop3xx.c i2c driver algorithms for Intel XScale IOP3xx */ -/* ------------------------------------------------------------------------- */ -/* Copyright (C) 2003 Peter Milne, D-TACQ Solutions Ltd - * - - 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. - - - 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, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* ------------------------------------------------------------------------- */ -/* - With acknowledgements to i2c-algo-ibm_ocp.c by - Ian DaSilva, MontaVista Software, Inc. idasilva@mvista.com - - And i2c-algo-pcf.c, which was created by Simon G. Vogl and Hans Berglund: - - Copyright (C) 1995-1997 Simon G. Vogl, 1998-2000 Hans Berglund - - And which acknowledged Kyösti Mälkki , - Frodo Looijaard , Martin Bailey - - ---------------------------------------------------------------------------*/ - - -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -#include -#include -#include "i2c-iop3xx.h" - - -/* ----- global defines ----------------------------------------------- */ -#define PASSERT(x) do { if (!(x) ) \ - printk(KERN_CRIT "PASSERT %s in %s:%d\n", #x, __FILE__, __LINE__ );\ - } while (0) - - -/* ----- global variables --------------------------------------------- */ - - -static inline unsigned char iic_cook_addr(struct i2c_msg *msg) -{ - unsigned char addr; - - addr = (msg->addr << 1); - - if (msg->flags & I2C_M_RD) - addr |= 1; - - /* PGM: what is M_REV_DIR_ADDR - do we need it ?? */ - if (msg->flags & I2C_M_REV_DIR_ADDR) - addr ^= 1; - - return addr; -} - - -static inline void iop3xx_adap_reset(struct i2c_algo_iop3xx_data *iop3xx_adap) -{ - /* Follows devman 9.3 */ - *iop3xx_adap->biu->CR = IOP321_ICR_UNIT_RESET; - *iop3xx_adap->biu->SR = IOP321_ISR_CLEARBITS; - *iop3xx_adap->biu->CR = 0; -} - -static inline void iop3xx_adap_set_slave_addr(struct i2c_algo_iop3xx_data *iop3xx_adap) -{ - *iop3xx_adap->biu->SAR = MYSAR; -} - -static inline void iop3xx_adap_enable(struct i2c_algo_iop3xx_data *iop3xx_adap) -{ - u32 cr = IOP321_ICR_GCD|IOP321_ICR_SCLEN|IOP321_ICR_UE; - - /* NB SR bits not same position as CR IE bits :-( */ - iop3xx_adap->biu->SR_enabled = - IOP321_ISR_ALD | IOP321_ISR_BERRD | - IOP321_ISR_RXFULL | IOP321_ISR_TXEMPTY; - - cr |= IOP321_ICR_ALDIE | IOP321_ICR_BERRIE | - IOP321_ICR_RXFULLIE | IOP321_ICR_TXEMPTYIE; - - *iop3xx_adap->biu->CR = cr; -} - -static void iop3xx_adap_transaction_cleanup(struct i2c_algo_iop3xx_data *iop3xx_adap) -{ - unsigned cr = *iop3xx_adap->biu->CR; - - cr &= ~(IOP321_ICR_MSTART | IOP321_ICR_TBYTE | - IOP321_ICR_MSTOP | IOP321_ICR_SCLEN); - *iop3xx_adap->biu->CR = cr; -} - -static void iop3xx_adap_final_cleanup(struct i2c_algo_iop3xx_data *iop3xx_adap) -{ - unsigned cr = *iop3xx_adap->biu->CR; - - cr &= ~(IOP321_ICR_ALDIE | IOP321_ICR_BERRIE | - IOP321_ICR_RXFULLIE | IOP321_ICR_TXEMPTYIE); - iop3xx_adap->biu->SR_enabled = 0; - *iop3xx_adap->biu->CR = cr; -} - -/* - * NB: the handler has to clear the source of the interrupt! - * Then it passes the SR flags of interest to BH via adap data - */ -static void iop3xx_i2c_handler(int this_irq, - void *dev_id, - struct pt_regs *regs) -{ - struct i2c_algo_iop3xx_data *iop3xx_adap = dev_id; - - u32 sr = *iop3xx_adap->biu->SR; - - if ((sr &= iop3xx_adap->biu->SR_enabled)) { - *iop3xx_adap->biu->SR = sr; - iop3xx_adap->biu->SR_received |= sr; - wake_up_interruptible(&iop3xx_adap->waitq); - } -} - -/* check all error conditions, clear them , report most important */ -static int iop3xx_adap_error(u32 sr) -{ - int rc = 0; - - if ((sr&IOP321_ISR_BERRD)) { - if ( !rc ) rc = -I2C_ERR_BERR; - } - if ((sr&IOP321_ISR_ALD)) { - if ( !rc ) rc = -I2C_ERR_ALD; - } - return rc; -} - -static inline u32 get_srstat(struct i2c_algo_iop3xx_data *iop3xx_adap) -{ - unsigned long flags; - u32 sr; - - spin_lock_irqsave(&iop3xx_adap->lock, flags); - sr = iop3xx_adap->biu->SR_received; - iop3xx_adap->biu->SR_received = 0; - spin_unlock_irqrestore(&iop3xx_adap->lock, flags); - - return sr; -} - -/* - * sleep until interrupted, then recover and analyse the SR - * saved by handler - */ -typedef int (* compare_func)(unsigned test, unsigned mask); -/* returns 1 on correct comparison */ - -static int iop3xx_adap_wait_event(struct i2c_algo_iop3xx_data *iop3xx_adap, - unsigned flags, unsigned* status, - compare_func compare) -{ - unsigned sr = 0; - int interrupted; - int done; - int rc; - - do { - interrupted = wait_event_interruptible_timeout ( - iop3xx_adap->waitq, - (done = compare( sr = get_srstat(iop3xx_adap),flags )), - iop3xx_adap->timeout - ); - if ((rc = iop3xx_adap_error(sr)) < 0) { - *status = sr; - return rc; - }else if (!interrupted) { - *status = sr; - return rc = -ETIMEDOUT; - } - } while(!done); - - *status = sr; - - return rc = 0; -} - -/* - * Concrete compare_funcs - */ -static int all_bits_clear(unsigned test, unsigned mask) -{ - return (test & mask) == 0; -} -static int any_bits_set(unsigned test, unsigned mask) -{ - return (test & mask) != 0; -} - -static int iop3xx_adap_wait_tx_done(struct i2c_algo_iop3xx_data *iop3xx_adap, int *status) -{ - return iop3xx_adap_wait_event( - iop3xx_adap, - IOP321_ISR_TXEMPTY|IOP321_ISR_ALD|IOP321_ISR_BERRD, - status, any_bits_set); -} - -static int iop3xx_adap_wait_rx_done(struct i2c_algo_iop3xx_data *iop3xx_adap, int *status) -{ - return iop3xx_adap_wait_event( - iop3xx_adap, - IOP321_ISR_RXFULL|IOP321_ISR_ALD|IOP321_ISR_BERRD, - status, any_bits_set); -} - -static int iop3xx_adap_wait_idle(struct i2c_algo_iop3xx_data *iop3xx_adap, int *status) -{ - return iop3xx_adap_wait_event( - iop3xx_adap, IOP321_ISR_UNITBUSY, status, all_bits_clear); -} - -/* - * Description: This performs the IOP3xx initialization sequence - * Valid for IOP321. Maybe valid for IOP310?. - */ -static int iop3xx_adap_init (struct i2c_algo_iop3xx_data *iop3xx_adap) -{ - *IOP321_GPOD &= ~(iop3xx_adap->channel==0 ? - IOP321_GPOD_I2C0: - IOP321_GPOD_I2C1); - - iop3xx_adap_reset(iop3xx_adap); - iop3xx_adap_set_slave_addr(iop3xx_adap); - iop3xx_adap_enable(iop3xx_adap); - - return 0; -} - -static int iop3xx_adap_send_target_slave_addr(struct i2c_algo_iop3xx_data *iop3xx_adap, - struct i2c_msg* msg) -{ - unsigned cr = *iop3xx_adap->biu->CR; - int status; - int rc; - - *iop3xx_adap->biu->DBR = iic_cook_addr(msg); - - cr &= ~(IOP321_ICR_MSTOP | IOP321_ICR_NACK); - cr |= IOP321_ICR_MSTART | IOP321_ICR_TBYTE; - - *iop3xx_adap->biu->CR = cr; - rc = iop3xx_adap_wait_tx_done(iop3xx_adap, &status); - /* this assert fires every time, contrary to IOP manual - PASSERT((status&IOP321_ISR_UNITBUSY)!=0); - */ - PASSERT((status&IOP321_ISR_RXREAD)==0); - - return rc; -} - -static int iop3xx_adap_write_byte(struct i2c_algo_iop3xx_data *iop3xx_adap, char byte, int stop) -{ - unsigned cr = *iop3xx_adap->biu->CR; - int status; - int rc; - - *iop3xx_adap->biu->DBR = byte; - cr &= ~IOP321_ICR_MSTART; - if (stop) { - cr |= IOP321_ICR_MSTOP; - } else { - cr &= ~IOP321_ICR_MSTOP; - } - *iop3xx_adap->biu->CR = cr |= IOP321_ICR_TBYTE; - rc = iop3xx_adap_wait_tx_done(iop3xx_adap, &status); - - return rc; -} - -static int iop3xx_adap_read_byte(struct i2c_algo_iop3xx_data *iop3xx_adap, - char* byte, int stop) -{ - unsigned cr = *iop3xx_adap->biu->CR; - int status; - int rc; - - cr &= ~IOP321_ICR_MSTART; - - if (stop) { - cr |= IOP321_ICR_MSTOP|IOP321_ICR_NACK; - } else { - cr &= ~(IOP321_ICR_MSTOP|IOP321_ICR_NACK); - } - *iop3xx_adap->biu->CR = cr |= IOP321_ICR_TBYTE; - - rc = iop3xx_adap_wait_rx_done(iop3xx_adap, &status); - - *byte = *iop3xx_adap->biu->DBR; - - return rc; -} - -static int iop3xx_i2c_writebytes(struct i2c_adapter *i2c_adap, - const char *buf, int count) -{ - struct i2c_algo_iop3xx_data *iop3xx_adap = i2c_adap->algo_data; - int ii; - int rc = 0; - - for (ii = 0; rc == 0 && ii != count; ++ii) { - rc = iop3xx_adap_write_byte(iop3xx_adap, buf[ii], ii==count-1); - } - return rc; -} - -static int iop3xx_i2c_readbytes(struct i2c_adapter *i2c_adap, - char *buf, int count) -{ - struct i2c_algo_iop3xx_data *iop3xx_adap = i2c_adap->algo_data; - int ii; - int rc = 0; - - for (ii = 0; rc == 0 && ii != count; ++ii) { - rc = iop3xx_adap_read_byte(iop3xx_adap, &buf[ii], ii==count-1); - } - return rc; -} - -/* - * Description: This function implements combined transactions. Combined - * transactions consist of combinations of reading and writing blocks of data. - * FROM THE SAME ADDRESS - * Each transfer (i.e. a read or a write) is separated by a repeated start - * condition. - */ -static int iop3xx_handle_msg(struct i2c_adapter *i2c_adap, struct i2c_msg* pmsg) -{ - struct i2c_algo_iop3xx_data *iop3xx_adap = i2c_adap->algo_data; - int rc; - - rc = iop3xx_adap_send_target_slave_addr(iop3xx_adap, pmsg); - if (rc < 0) { - return rc; - } - - if ((pmsg->flags&I2C_M_RD)) { - return iop3xx_i2c_readbytes(i2c_adap, pmsg->buf, pmsg->len); - } else { - return iop3xx_i2c_writebytes(i2c_adap, pmsg->buf, pmsg->len); - } -} - -/* - * master_xfer() - main read/write entry - */ -static int iop3xx_master_xfer(struct i2c_adapter *i2c_adap, struct i2c_msg msgs[], int num) -{ - struct i2c_algo_iop3xx_data *iop3xx_adap = i2c_adap->algo_data; - int im = 0; - int ret = 0; - int status; - - iop3xx_adap_wait_idle(iop3xx_adap, &status); - iop3xx_adap_reset(iop3xx_adap); - iop3xx_adap_enable(iop3xx_adap); - - for (im = 0; ret == 0 && im != num; ++im) { - ret = iop3xx_handle_msg(i2c_adap, &msgs[im]); - } - - iop3xx_adap_transaction_cleanup(iop3xx_adap); - - return ret; -} - -static int algo_control(struct i2c_adapter *adapter, unsigned int cmd, - unsigned long arg) -{ - return 0; -} - -static u32 iic_func(struct i2c_adapter *adap) -{ - return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL; -} - - -/* -----exported algorithm data: ------------------------------------- */ - -static struct i2c_algorithm iic_algo = { - .name = "IOP3xx I2C algorithm", - .id = I2C_ALGO_OCP_IOP3XX, - .master_xfer = iop3xx_master_xfer, - .algo_control = algo_control, - .functionality = iic_func, -}; - -/* - * registering functions to load algorithms at runtime - */ -static int i2c_iop3xx_add_bus(struct i2c_adapter *iic_adap) -{ - struct i2c_algo_iop3xx_data *iop3xx_adap = iic_adap->algo_data; - - if (!request_region( REGION_START(iop3xx_adap), - REGION_LENGTH(iop3xx_adap), - iic_adap->name)) { - return -ENODEV; - } - - init_waitqueue_head(&iop3xx_adap->waitq); - spin_lock_init(&iop3xx_adap->lock); - - if (request_irq( - iop3xx_adap->biu->irq, - iop3xx_i2c_handler, - /* SA_SAMPLE_RANDOM */ 0, - iic_adap->name, - iop3xx_adap)) { - return -ENODEV; - } - - /* register new iic_adapter to i2c module... */ - iic_adap->id |= iic_algo.id; - iic_adap->algo = &iic_algo; - - iic_adap->timeout = 100; /* default values, should */ - iic_adap->retries = 3; /* be replaced by defines */ - - iop3xx_adap_init(iic_adap->algo_data); - i2c_add_adapter(iic_adap); - return 0; -} - -static int i2c_iop3xx_del_bus(struct i2c_adapter *iic_adap) -{ - struct i2c_algo_iop3xx_data *iop3xx_adap = iic_adap->algo_data; - - iop3xx_adap_final_cleanup(iop3xx_adap); - free_irq(iop3xx_adap->biu->irq, iop3xx_adap); - - release_region(REGION_START(iop3xx_adap), REGION_LENGTH(iop3xx_adap)); - - return i2c_del_adapter(iic_adap); -} - -#ifdef CONFIG_ARCH_IOP321 - -static struct iop3xx_biu biu0 = { - .CR = IOP321_ICR0, - .SR = IOP321_ISR0, - .SAR = IOP321_ISAR0, - .DBR = IOP321_IDBR0, - .BMR = IOP321_IBMR0, - .irq = IRQ_IOP321_I2C_0, -}; - -static struct iop3xx_biu biu1 = { - .CR = IOP321_ICR1, - .SR = IOP321_ISR1, - .SAR = IOP321_ISAR1, - .DBR = IOP321_IDBR1, - .BMR = IOP321_IBMR1, - .irq = IRQ_IOP321_I2C_1, -}; - -#define ADAPTER_NAME_ROOT "IOP321 i2c biu adapter " -#else -#error Please define the BIU struct iop3xx_biu for your processor arch -#endif - -static struct i2c_algo_iop3xx_data algo_iop3xx_data0 = { - .channel = 0, - .biu = &biu0, - .timeout = 1*HZ, -}; -static struct i2c_algo_iop3xx_data algo_iop3xx_data1 = { - .channel = 1, - .biu = &biu1, - .timeout = 1*HZ, -}; - -static struct i2c_adapter iop3xx_ops0 = { - .owner = THIS_MODULE, - .name = ADAPTER_NAME_ROOT "0", - .id = I2C_HW_IOP321, - .algo_data = &algo_iop3xx_data0, -}; -static struct i2c_adapter iop3xx_ops1 = { - .owner = THIS_MODULE, - .name = ADAPTER_NAME_ROOT "1", - .id = I2C_HW_IOP321, - .algo_data = &algo_iop3xx_data1, -}; - -static int __init i2c_iop3xx_init (void) -{ - return i2c_iop3xx_add_bus(&iop3xx_ops0) || - i2c_iop3xx_add_bus(&iop3xx_ops1); -} - -static void __exit i2c_iop3xx_exit (void) -{ - i2c_iop3xx_del_bus(&iop3xx_ops0); - i2c_iop3xx_del_bus(&iop3xx_ops1); -} - -module_init (i2c_iop3xx_init); -module_exit (i2c_iop3xx_exit); - -MODULE_AUTHOR("D-TACQ Solutions Ltd "); -MODULE_DESCRIPTION("IOP3xx iic algorithm and driver"); -MODULE_LICENSE("GPL"); - -MODULE_PARM(i2c_debug,"i"); - -MODULE_PARM_DESC(i2c_debug, "debug level - 0 off; 1 normal; 2,3 more verbose; 9 iic-protocol"); - diff -prauN linux-2.6.0-test5/drivers/i2c/i2c-iop3xx.h wli-2.6.0-test5-bk12-25/drivers/i2c/i2c-iop3xx.h --- linux-2.6.0-test5/drivers/i2c/i2c-iop3xx.h 2003-09-08 12:49:50.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/i2c-iop3xx.h 1969-12-31 16:00:00.000000000 -0800 @@ -1,118 +0,0 @@ -/* ------------------------------------------------------------------------- */ -/* i2c-iop3xx.h algorithm driver definitions private to i2c-iop3xx.c */ -/* ------------------------------------------------------------------------- */ -/* Copyright (C) 2003 Peter Milne, D-TACQ Solutions Ltd - * - - 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. - - 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, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* ------------------------------------------------------------------------- */ - - -#ifndef I2C_IOP3XX_H -#define I2C_IOP3XX_H 1 - -/* - * iop321 hardware bit definitions - */ -#define IOP321_ICR_FAST_MODE 0x8000 /* 1=400kBps, 0=100kBps */ -#define IOP321_ICR_UNIT_RESET 0x4000 /* 1=RESET */ -#define IOP321_ICR_SADIE 0x2000 /* 1=Slave Detect Interrupt Enable */ -#define IOP321_ICR_ALDIE 0x1000 /* 1=Arb Loss Detect Interrupt Enable */ -#define IOP321_ICR_SSDIE 0x0800 /* 1=Slave STOP Detect Interrupt Enable */ -#define IOP321_ICR_BERRIE 0x0400 /* 1=Bus Error Interrupt Enable */ -#define IOP321_ICR_RXFULLIE 0x0200 /* 1=Receive Full Interrupt Enable */ -#define IOP321_ICR_TXEMPTYIE 0x0100 /* 1=Transmit Empty Interrupt Enable */ -#define IOP321_ICR_GCD 0x0080 /* 1=General Call Disable */ -/* - * IOP321_ICR_GCD: 1 disables response as slave. "This bit must be set - * when sending a master mode general call message from the I2C unit" - */ -#define IOP321_ICR_UE 0x0040 /* 1=Unit Enable */ -/* - * "NOTE: To avoid I2C bus integrity problems, - * the user needs to ensure that the GPIO Output Data Register - - * GPOD bits associated with an I2C port are cleared prior to setting - * the enable bit for that I2C serial port. - * The user prepares to enable I2C port 0 and - * I2C port 1 by clearing GPOD bits 7:6 and GPOD bits 5:4, respectively. - */ -#define IOP321_ICR_SCLEN 0x0020 /* 1=SCL enable for master mode */ -#define IOP321_ICR_MABORT 0x0010 /* 1=Send a STOP with no data - * NB TBYTE must be clear */ -#define IOP321_ICR_TBYTE 0x0008 /* 1=Send/Receive a byte. i2c clears */ -#define IOP321_ICR_NACK 0x0004 /* 1=reply with NACK */ -#define IOP321_ICR_MSTOP 0x0002 /* 1=send a STOP after next data byte */ -#define IOP321_ICR_MSTART 0x0001 /* 1=initiate a START */ - - -#define IOP321_ISR_BERRD 0x0400 /* 1=BUS ERROR Detected */ -#define IOP321_ISR_SAD 0x0200 /* 1=Slave ADdress Detected */ -#define IOP321_ISR_GCAD 0x0100 /* 1=General Call Address Detected */ -#define IOP321_ISR_RXFULL 0x0080 /* 1=Receive Full */ -#define IOP321_ISR_TXEMPTY 0x0040 /* 1=Transmit Empty */ -#define IOP321_ISR_ALD 0x0020 /* 1=Arbitration Loss Detected */ -#define IOP321_ISR_SSD 0x0010 /* 1=Slave STOP Detected */ -#define IOP321_ISR_BBUSY 0x0008 /* 1=Bus BUSY */ -#define IOP321_ISR_UNITBUSY 0x0004 /* 1=Unit Busy */ -#define IOP321_ISR_NACK 0x0002 /* 1=Unit Rx or Tx a NACK */ -#define IOP321_ISR_RXREAD 0x0001 /* 1=READ 0=WRITE (R/W bit of slave addr */ - -#define IOP321_ISR_CLEARBITS 0x07f0 - -#define IOP321_ISAR_SAMASK 0x007f - -#define IOP321_IDBR_MASK 0x00ff - -#define IOP321_IBMR_SCL 0x0002 -#define IOP321_IBMR_SDA 0x0001 - -#define IOP321_GPOD_I2C0 0x00c0 /* clear these bits to enable ch0 */ -#define IOP321_GPOD_I2C1 0x0030 /* clear these bits to enable ch1 */ - -#define MYSAR 0x02 /* SWAG a suitable slave address */ - -#define I2C_ERR 321 -#define I2C_ERR_BERR (I2C_ERR+0) -#define I2C_ERR_ALD (I2C_ERR+1) - - -struct iop3xx_biu { /* Bus Interface Unit - the hardware */ -/* physical hardware defs - regs*/ - u32 *CR; - u32 *SR; - u32 *SAR; - u32 *DBR; - u32 *BMR; -/* irq bit vector */ - u32 irq; -/* stored flags */ - u32 SR_enabled, SR_received; -}; - -struct i2c_algo_iop3xx_data { - int channel; - - wait_queue_head_t waitq; - spinlock_t lock; - int timeout; - struct iop3xx_biu* biu; -}; - -#define REGION_START(adap) ((u32)((adap)->biu->CR)) -#define REGION_END(adap) ((u32)((adap)->biu->BMR+1)) -#define REGION_LENGTH(adap) (REGION_END(adap)-REGION_START(adap)) - -#define IRQ_STATUS_MASK(adap) (1<biu->irq) - -#endif /* I2C_IOP3XX_H */ diff -prauN linux-2.6.0-test5/drivers/i2c/i2c-keywest.c wli-2.6.0-test5-bk12-25/drivers/i2c/i2c-keywest.c --- linux-2.6.0-test5/drivers/i2c/i2c-keywest.c 2003-09-08 12:50:16.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/i2c-keywest.c 1969-12-31 16:00:00.000000000 -0800 @@ -1,654 +0,0 @@ -/* - i2c Support for Apple Keywest I2C Bus Controller - - Copyright (c) 2001 Benjamin Herrenschmidt - - Original work by - - Copyright (c) 2000 Philip Edelbrock - - 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 of the License, 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, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - - Changes: - - 2001/12/13 BenH New implementation - 2001/12/15 BenH Add support for "byte" and "quick" - transfers. Add i2c_xfer routine. - - My understanding of the various modes supported by keywest are: - - - Dumb mode : not implemented, probably direct tweaking of lines - - Standard mode : simple i2c transaction of type - S Addr R/W A Data A Data ... T - - Standard sub mode : combined 8 bit subaddr write with data read - S Addr R/W A SubAddr A Data A Data ... T - - Combined mode : Subaddress and Data sequences appended with no stop - S Addr R/W A SubAddr S Addr R/W A Data A Data ... T - - Currently, this driver uses only Standard mode for i2c xfer, and - smbus byte & quick transfers ; and uses StandardSub mode for - other smbus transfers instead of combined as we need that for the - sound driver to be happy -*/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include "i2c-keywest.h" - -#define DBG(x...) do {\ - if (debug > 0) \ - printk(KERN_DEBUG "KW:" x); \ - } while(0) - - -MODULE_AUTHOR("Benjamin Herrenschmidt "); -MODULE_DESCRIPTION("I2C driver for Apple's Keywest"); -MODULE_LICENSE("GPL"); -MODULE_PARM(probe, "i"); -MODULE_PARM(debug, "i"); - -int probe = 0; -int debug = 0; - -static void -do_stop(struct keywest_iface* iface, int result) -{ - write_reg(reg_control, read_reg(reg_control) | KW_I2C_CTL_STOP); - iface->state = state_stop; - iface->result = result; -} - -/* Main state machine for standard & standard sub mode */ -static int -handle_interrupt(struct keywest_iface *iface, u8 isr) -{ - int ack; - int rearm_timer = 1; - - DBG("handle_interrupt(), got: %x, status: %x, state: %d\n", - isr, read_reg(reg_status), iface->state); - if (isr == 0 && iface->state != state_stop) { - do_stop(iface, -1); - return rearm_timer; - } - if (isr & KW_I2C_IRQ_STOP && iface->state != state_stop) { - iface->result = -1; - iface->state = state_stop; - } - switch(iface->state) { - case state_addr: - if (!(isr & KW_I2C_IRQ_ADDR)) { - do_stop(iface, -1); - break; - } - ack = read_reg(reg_status); - DBG("ack on set address: %x\n", ack); - if ((ack & KW_I2C_STAT_LAST_AAK) == 0) { - do_stop(iface, -1); - break; - } - /* Handle rw "quick" mode */ - if (iface->datalen == 0) - do_stop(iface, 0); - else if (iface->read_write == I2C_SMBUS_READ) { - iface->state = state_read; - if (iface->datalen > 1) - write_reg(reg_control, read_reg(reg_control) - | KW_I2C_CTL_AAK); - } else { - iface->state = state_write; - DBG("write byte: %x\n", *(iface->data)); - write_reg(reg_data, *(iface->data++)); - iface->datalen--; - } - - break; - case state_read: - if (!(isr & KW_I2C_IRQ_DATA)) { - do_stop(iface, -1); - break; - } - *(iface->data++) = read_reg(reg_data); - DBG("read byte: %x\n", *(iface->data-1)); - iface->datalen--; - if (iface->datalen == 0) - iface->state = state_stop; - else - write_reg(reg_control, 0); - break; - case state_write: - if (!(isr & KW_I2C_IRQ_DATA)) { - do_stop(iface, -1); - break; - } - /* Check ack status */ - ack = read_reg(reg_status); - DBG("ack on data write: %x\n", ack); - if ((ack & KW_I2C_STAT_LAST_AAK) == 0) { - do_stop(iface, -1); - break; - } - if (iface->datalen) { - DBG("write byte: %x\n", *(iface->data)); - write_reg(reg_data, *(iface->data++)); - iface->datalen--; - } else - do_stop(iface, 0); - break; - - case state_stop: - if (!(isr & KW_I2C_IRQ_STOP) && (++iface->stopretry) < 10) - do_stop(iface, -1); - else { - rearm_timer = 0; - iface->state = state_idle; - write_reg(reg_control, 0x00); - write_reg(reg_ier, 0x00); - complete(&iface->complete); - } - break; - } - - write_reg(reg_isr, isr); - - return rearm_timer; -} - -/* Interrupt handler */ -static irqreturn_t -keywest_irq(int irq, void *dev_id, struct pt_regs *regs) -{ - struct keywest_iface *iface = (struct keywest_iface *)dev_id; - - spin_lock(&iface->lock); - del_timer(&iface->timeout_timer); - if (handle_interrupt(iface, read_reg(reg_isr))) - mod_timer(&iface->timeout_timer, jiffies + POLL_TIMEOUT); - spin_unlock(&iface->lock); - return IRQ_HANDLED; -} - -static void -keywest_timeout(unsigned long data) -{ - struct keywest_iface *iface = (struct keywest_iface *)data; - - DBG("timeout !\n"); - spin_lock_irq(&iface->lock); - if (handle_interrupt(iface, read_reg(reg_isr))) - mod_timer(&iface->timeout_timer, jiffies + POLL_TIMEOUT); - spin_unlock(&iface->lock); -} - -/* - * SMBUS-type transfer entrypoint - */ -static s32 -keywest_smbus_xfer( struct i2c_adapter* adap, - u16 addr, - unsigned short flags, - char read_write, - u8 command, - int size, - union i2c_smbus_data* data) -{ - struct keywest_chan* chan = i2c_get_adapdata(adap); - struct keywest_iface* iface = chan->iface; - int len; - u8* buffer; - u16 cur_word; - int rc = 0; - - if (iface->state == state_dead) - return -1; - - /* Prepare datas & select mode */ - iface->cur_mode &= ~KW_I2C_MODE_MODE_MASK; - switch (size) { - case I2C_SMBUS_QUICK: - len = 0; - buffer = NULL; - iface->cur_mode |= KW_I2C_MODE_STANDARD; - break; - case I2C_SMBUS_BYTE: - len = 1; - buffer = &data->byte; - iface->cur_mode |= KW_I2C_MODE_STANDARD; - break; - case I2C_SMBUS_BYTE_DATA: - len = 1; - buffer = &data->byte; - iface->cur_mode |= KW_I2C_MODE_STANDARDSUB; - break; - case I2C_SMBUS_WORD_DATA: - len = 2; - cur_word = cpu_to_le16(data->word); - buffer = (u8 *)&cur_word; - iface->cur_mode |= KW_I2C_MODE_STANDARDSUB; - break; - case I2C_SMBUS_BLOCK_DATA: - len = data->block[0]; - buffer = &data->block[1]; - iface->cur_mode |= KW_I2C_MODE_STANDARDSUB; - break; - default: - return -1; - } - - /* Original driver had this limitation */ - if (len > 32) - len = 32; - - down(&iface->sem); - - DBG("chan: %d, addr: 0x%x, transfer len: %d, read: %d\n", - chan->chan_no, addr, len, read_write == I2C_SMBUS_READ); - - iface->data = buffer; - iface->datalen = len; - iface->state = state_addr; - iface->result = 0; - iface->stopretry = 0; - iface->read_write = read_write; - - /* Setup channel & clear pending irqs */ - write_reg(reg_mode, iface->cur_mode | (chan->chan_no << 4)); - write_reg(reg_isr, read_reg(reg_isr)); - write_reg(reg_status, 0); - - /* Set up address and r/w bit */ - write_reg(reg_addr, - (addr << 1) | ((read_write == I2C_SMBUS_READ) ? 0x01 : 0x00)); - - /* Set up the sub address */ - if ((iface->cur_mode & KW_I2C_MODE_MODE_MASK) == KW_I2C_MODE_STANDARDSUB - || (iface->cur_mode & KW_I2C_MODE_MODE_MASK) == KW_I2C_MODE_COMBINED) - write_reg(reg_subaddr, command); - - /* Arm timeout */ - mod_timer(&iface->timeout_timer, jiffies + POLL_TIMEOUT); - - /* Start sending address & enable interrupt*/ - write_reg(reg_control, read_reg(reg_control) | KW_I2C_CTL_XADDR); - write_reg(reg_ier, KW_I2C_IRQ_MASK); - - /* Wait interrupt operations completion */ - wait_for_completion(&iface->complete); - - rc = iface->result; - DBG("transfer done, result: %d\n", rc); - - if (rc == 0 && size == I2C_SMBUS_WORD_DATA && read_write == I2C_SMBUS_READ) - data->word = le16_to_cpu(cur_word); - - /* Release sem */ - up(&iface->sem); - - return rc; -} - -/* - * Generic i2c master transfer entrypoint - */ -static int -keywest_xfer( struct i2c_adapter *adap, - struct i2c_msg msgs[], - int num) -{ - struct keywest_chan* chan = i2c_get_adapdata(adap); - struct keywest_iface* iface = chan->iface; - struct i2c_msg *pmsg; - int i, completed; - int rc = 0; - - down(&iface->sem); - - /* Set adapter to standard mode */ - iface->cur_mode &= ~KW_I2C_MODE_MODE_MASK; - iface->cur_mode |= KW_I2C_MODE_STANDARD; - - completed = 0; - for (i = 0; rc >= 0 && i < num;) { - u8 addr; - - pmsg = &msgs[i++]; - addr = pmsg->addr; - if (pmsg->flags & I2C_M_TEN) { - printk(KERN_ERR "i2c-keywest: 10 bits addr not supported !\n"); - rc = -EINVAL; - break; - } - DBG("xfer: chan: %d, doing %s %d bytes to 0x%02x - %d of %d messages\n", - chan->chan_no, - pmsg->flags & I2C_M_RD ? "read" : "write", - pmsg->len, addr, i, num); - - /* Setup channel & clear pending irqs */ - write_reg(reg_mode, iface->cur_mode | (chan->chan_no << 4)); - write_reg(reg_isr, read_reg(reg_isr)); - write_reg(reg_status, 0); - - iface->data = pmsg->buf; - iface->datalen = pmsg->len; - iface->state = state_addr; - iface->result = 0; - iface->stopretry = 0; - if (pmsg->flags & I2C_M_RD) - iface->read_write = I2C_SMBUS_READ; - else - iface->read_write = I2C_SMBUS_WRITE; - - /* Set up address and r/w bit */ - if (pmsg->flags & I2C_M_REV_DIR_ADDR) - addr ^= 1; - write_reg(reg_addr, - (addr << 1) | - ((iface->read_write == I2C_SMBUS_READ) ? 0x01 : 0x00)); - - /* Arm timeout */ - mod_timer(&iface->timeout_timer, jiffies + POLL_TIMEOUT); - - /* Start sending address & enable interrupt*/ - write_reg(reg_control, read_reg(reg_control) | KW_I2C_CTL_XADDR); - write_reg(reg_ier, KW_I2C_IRQ_MASK); - - /* Wait interrupt operations completion */ - wait_for_completion(&iface->complete); - - rc = iface->result; - if (rc == 0) - completed++; - DBG("transfer done, result: %d\n", rc); - } - - /* Release sem */ - up(&iface->sem); - - return completed; -} - -static u32 -keywest_func(struct i2c_adapter * adapter) -{ - return I2C_FUNC_SMBUS_QUICK | I2C_FUNC_SMBUS_BYTE | - I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA | - I2C_FUNC_SMBUS_BLOCK_DATA; -} - -/* For now, we only handle combined mode (smbus) */ -static struct i2c_algorithm keywest_algorithm = { - .name = "Keywest i2c", - .id = I2C_ALGO_SMBUS, - .smbus_xfer = keywest_smbus_xfer, - .master_xfer = keywest_xfer, - .functionality = keywest_func, -}; - - -static int -create_iface(struct device_node *np, struct device *dev) -{ - unsigned long steps, *psteps, *prate; - unsigned bsteps, tsize, i, nchan, addroffset; - struct keywest_iface* iface; - int rc; - - psteps = (unsigned long *)get_property(np, "AAPL,address-step", NULL); - steps = psteps ? (*psteps) : 0x10; - - /* Hrm... maybe we can be smarter here */ - for (bsteps = 0; (steps & 0x01) == 0; bsteps++) - steps >>= 1; - - if (!strcmp(np->parent->name, "uni-n")) { - nchan = 2; - addroffset = 3; - } else { - addroffset = 0; - nchan = 1; - } - - tsize = sizeof(struct keywest_iface) + - (sizeof(struct keywest_chan) + 4) * nchan; - iface = (struct keywest_iface *) kmalloc(tsize, GFP_KERNEL); - if (iface == NULL) { - printk(KERN_ERR "i2c-keywest: can't allocate inteface !\n"); - return -ENOMEM; - } - memset(iface, 0, tsize); - init_MUTEX(&iface->sem); - spin_lock_init(&iface->lock); - init_completion(&iface->complete); - iface->bsteps = bsteps; - iface->chan_count = nchan; - iface->state = state_idle; - iface->irq = np->intrs[0].line; - iface->channels = (struct keywest_chan *) - (((unsigned long)(iface + 1) + 3UL) & ~3UL); - iface->base = (unsigned long)ioremap(np->addrs[0].address + addroffset, - np->addrs[0].size); - if (iface->base == 0) { - printk(KERN_ERR "i2c-keywest: can't map inteface !\n"); - kfree(iface); - return -ENOMEM; - } - - init_timer(&iface->timeout_timer); - iface->timeout_timer.function = keywest_timeout; - iface->timeout_timer.data = (unsigned long)iface; - - /* Select interface rate */ - iface->cur_mode = KW_I2C_MODE_100KHZ; - prate = (unsigned long *)get_property(np, "AAPL,i2c-rate", NULL); - if (prate) switch(*prate) { - case 100: - iface->cur_mode = KW_I2C_MODE_100KHZ; - break; - case 50: - iface->cur_mode = KW_I2C_MODE_50KHZ; - break; - case 25: - iface->cur_mode = KW_I2C_MODE_25KHZ; - break; - default: - printk(KERN_WARNING "i2c-keywest: unknown rate %ldKhz, using 100KHz\n", - *prate); - } - - /* Select standard sub mode */ - iface->cur_mode |= KW_I2C_MODE_STANDARDSUB; - - /* Write mode */ - write_reg(reg_mode, iface->cur_mode); - - /* Switch interrupts off & clear them*/ - write_reg(reg_ier, 0x00); - write_reg(reg_isr, KW_I2C_IRQ_MASK); - - /* Request chip interrupt */ - rc = request_irq(iface->irq, keywest_irq, 0, "keywest i2c", iface); - if (rc) { - printk(KERN_ERR "i2c-keywest: can't get IRQ %d !\n", iface->irq); - iounmap((void *)iface->base); - kfree(iface); - return -ENODEV; - } - - dev_set_drvdata(dev, iface); - - for (i=0; ichannels[i]; - u8 addr; - - sprintf(chan->adapter.name, "%s %d", np->parent->name, i); - chan->iface = iface; - chan->chan_no = i; - chan->adapter.id = I2C_ALGO_SMBUS; - chan->adapter.algo = &keywest_algorithm; - chan->adapter.algo_data = NULL; - chan->adapter.client_register = NULL; - chan->adapter.client_unregister = NULL; - i2c_set_adapdata(&chan->adapter, chan); - chan->adapter.dev.parent = dev; - - rc = i2c_add_adapter(&chan->adapter); - if (rc) { - printk("i2c-keywest.c: Adapter %s registration failed\n", - chan->adapter.name); - i2c_set_adapdata(&chan->adapter, NULL); - } - if (probe) { - printk("Probe: "); - for (addr = 0x00; addr <= 0x7f; addr++) { - if (i2c_smbus_xfer(&chan->adapter,addr, - 0,0,0,I2C_SMBUS_QUICK,NULL) >= 0) - printk("%02x ", addr); - } - printk("\n"); - } - } - - printk(KERN_INFO "Found KeyWest i2c on \"%s\", %d channel%s, stepping: %d bits\n", - np->parent->name, nchan, nchan > 1 ? "s" : "", bsteps); - - return 0; -} - -static int -dispose_iface(struct device *dev) -{ - struct keywest_iface *iface = dev_get_drvdata(dev); - int i, rc; - - /* Make sure we stop all activity */ - down(&iface->sem); - - spin_lock_irq(&iface->lock); - while (iface->state != state_idle) { - spin_unlock_irq(&iface->lock); - set_task_state(current,TASK_UNINTERRUPTIBLE); - schedule_timeout(HZ/10); - spin_lock_irq(&iface->lock); - } - iface->state = state_dead; - spin_unlock_irq(&iface->lock); - free_irq(iface->irq, iface); - up(&iface->sem); - - /* Release all channels */ - for (i=0; ichan_count; i++) { - struct keywest_chan* chan = &iface->channels[i]; - if (i2c_get_adapdata(&chan->adapter) == NULL) - continue; - rc = i2c_del_adapter(&chan->adapter); - i2c_set_adapdata(&chan->adapter, NULL); - /* We aren't that prepared to deal with this... */ - if (rc) - printk("i2c-keywest.c: i2c_del_adapter failed, that's bad !\n"); - } - iounmap((void *)iface->base); - dev_set_drvdata(dev, NULL); - kfree(iface); - - return 0; -} - -static int -create_iface_macio(struct macio_dev* dev, const struct of_match *match) -{ - return create_iface(dev->ofdev.node, &dev->ofdev.dev); -} - -static int -dispose_iface_macio(struct macio_dev* dev) -{ - return dispose_iface(&dev->ofdev.dev); -} - -static int -create_iface_of_platform(struct of_device* dev, const struct of_match *match) -{ - return create_iface(dev->node, &dev->dev); -} - -static int -dispose_iface_of_platform(struct of_device* dev) -{ - return dispose_iface(&dev->dev); -} - -static struct of_match i2c_keywest_match[] = -{ - { - .name = OF_ANY_MATCH, - .type = "i2c", - .compatible = "keywest" - }, - {}, -}; - -static struct macio_driver i2c_keywest_macio_driver = -{ - .name = "i2c-keywest", - .match_table = i2c_keywest_match, - .probe = create_iface_macio, - .remove = dispose_iface_macio -}; - -static struct of_platform_driver i2c_keywest_of_platform_driver = -{ - .name = "i2c-keywest", - .match_table = i2c_keywest_match, - .probe = create_iface_of_platform, - .remove = dispose_iface_of_platform -}; - -static int __init -i2c_keywest_init(void) -{ - macio_register_driver(&i2c_keywest_macio_driver); - of_register_driver(&i2c_keywest_of_platform_driver); - - return 0; -} - -static void __exit -i2c_keywest_cleanup(void) -{ - macio_unregister_driver(&i2c_keywest_macio_driver); - of_unregister_driver(&i2c_keywest_of_platform_driver); -} - -module_init(i2c_keywest_init); -module_exit(i2c_keywest_cleanup); diff -prauN linux-2.6.0-test5/drivers/i2c/i2c-keywest.h wli-2.6.0-test5-bk12-25/drivers/i2c/i2c-keywest.h --- linux-2.6.0-test5/drivers/i2c/i2c-keywest.h 2003-09-08 12:50:23.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/i2c-keywest.h 1969-12-31 16:00:00.000000000 -0800 @@ -1,110 +0,0 @@ -#ifndef __I2C_KEYWEST_H__ -#define __I2C_KEYWEST_H__ - -/* The Tumbler audio equalizer can be really slow sometimes */ -#define POLL_TIMEOUT (2*HZ) - -/* Register indices */ -typedef enum { - reg_mode = 0, - reg_control, - reg_status, - reg_isr, - reg_ier, - reg_addr, - reg_subaddr, - reg_data -} reg_t; - - -/* Mode register */ -#define KW_I2C_MODE_100KHZ 0x00 -#define KW_I2C_MODE_50KHZ 0x01 -#define KW_I2C_MODE_25KHZ 0x02 -#define KW_I2C_MODE_DUMB 0x00 -#define KW_I2C_MODE_STANDARD 0x04 -#define KW_I2C_MODE_STANDARDSUB 0x08 -#define KW_I2C_MODE_COMBINED 0x0C -#define KW_I2C_MODE_MODE_MASK 0x0C -#define KW_I2C_MODE_CHAN_MASK 0xF0 - -/* Control register */ -#define KW_I2C_CTL_AAK 0x01 -#define KW_I2C_CTL_XADDR 0x02 -#define KW_I2C_CTL_STOP 0x04 -#define KW_I2C_CTL_START 0x08 - -/* Status register */ -#define KW_I2C_STAT_BUSY 0x01 -#define KW_I2C_STAT_LAST_AAK 0x02 -#define KW_I2C_STAT_LAST_RW 0x04 -#define KW_I2C_STAT_SDA 0x08 -#define KW_I2C_STAT_SCL 0x10 - -/* IER & ISR registers */ -#define KW_I2C_IRQ_DATA 0x01 -#define KW_I2C_IRQ_ADDR 0x02 -#define KW_I2C_IRQ_STOP 0x04 -#define KW_I2C_IRQ_START 0x08 -#define KW_I2C_IRQ_MASK 0x0F - -/* Physical interface */ -struct keywest_iface -{ - unsigned long base; - unsigned bsteps; - int irq; - struct semaphore sem; - spinlock_t lock; - struct keywest_chan* channels; - unsigned chan_count; - u8 cur_mode; - char read_write; - u8* data; - unsigned datalen; - int state; - int result; - int stopretry; - struct timer_list timeout_timer; - struct completion complete; -}; - -enum { - state_idle, - state_addr, - state_read, - state_write, - state_stop, - state_dead -}; - -/* Channel on an interface */ -struct keywest_chan -{ - struct i2c_adapter adapter; - struct keywest_iface* iface; - unsigned chan_no; -}; - -/* Register access */ - -static inline u8 __read_reg(struct keywest_iface *iface, reg_t reg) -{ - return in_8(((volatile u8 *)iface->base) - + (((unsigned)reg) << iface->bsteps)); -} - -static inline void __write_reg(struct keywest_iface *iface, reg_t reg, u8 val) -{ - out_8(((volatile u8 *)iface->base) - + (((unsigned)reg) << iface->bsteps), val); - (void)__read_reg(iface, reg); - udelay(10); -} - -#define write_reg(reg, val) __write_reg(iface, reg, val) -#define read_reg(reg) __read_reg(iface, reg) - - - -#endif /* __I2C_KEYWEST_H__ */ diff -prauN linux-2.6.0-test5/drivers/i2c/i2c-philips-par.c wli-2.6.0-test5-bk12-25/drivers/i2c/i2c-philips-par.c --- linux-2.6.0-test5/drivers/i2c/i2c-philips-par.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/i2c-philips-par.c 1969-12-31 16:00:00.000000000 -0800 @@ -1,256 +0,0 @@ -/* ------------------------------------------------------------------------- */ -/* i2c-philips-par.c i2c-hw access for philips style parallel port adapters */ -/* ------------------------------------------------------------------------- */ -/* Copyright (C) 1995-2000 Simon G. Vogl - - 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 of the License, 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, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* ------------------------------------------------------------------------- */ - -/* With some changes from Kyösti Mälkki and even - Frodo Looijaard */ - -/* $Id: i2c-philips-par.c,v 1.29 2003/01/21 08:08:16 kmalkki Exp $ */ - -#include -#include -#include -#include -#include -#include -#include -#include - -static int type; - -struct i2c_par -{ - struct pardevice *pdev; - struct i2c_adapter adapter; - struct i2c_algo_bit_data bit_lp_data; - struct i2c_par *next; -}; - -static struct i2c_par *adapter_list; - - -/* ----- global defines ----------------------------------------------- */ -#define DEB(x) /* should be reasonable open, close &c. */ -#define DEB2(x) /* low level debugging - very slow */ -#define DEBE(x) x /* error messages */ - -/* ----- printer port defines ------------------------------------------*/ - /* Pin Port Inverted name */ -#define I2C_ON 0x20 /* 12 status N paper */ - /* ... only for phil. not used */ -#define I2C_SDA 0x80 /* 9 data N data7 */ -#define I2C_SCL 0x08 /* 17 ctrl N dsel */ - -#define I2C_SDAIN 0x80 /* 11 stat Y busy */ -#define I2C_SCLIN 0x08 /* 15 stat Y enable */ - -#define I2C_DMASK 0x7f -#define I2C_CMASK 0xf7 - -/* ----- local functions ---------------------------------------------- */ - -static void bit_lp_setscl(void *data, int state) -{ - /*be cautious about state of the control register - - touch only the one bit needed*/ - if (state) { - parport_write_control((struct parport *) data, - parport_read_control((struct parport *) data)|I2C_SCL); - } else { - parport_write_control((struct parport *) data, - parport_read_control((struct parport *) data)&I2C_CMASK); - } -} - -static void bit_lp_setsda(void *data, int state) -{ - if (state) { - parport_write_data((struct parport *) data, I2C_DMASK); - } else { - parport_write_data((struct parport *) data, I2C_SDA); - } -} - -static int bit_lp_getscl(void *data) -{ - return parport_read_status((struct parport *) data) & I2C_SCLIN; -} - -static int bit_lp_getsda(void *data) -{ - return parport_read_status((struct parport *) data) & I2C_SDAIN; -} - -static void bit_lp_setscl2(void *data, int state) -{ - if (state) { - parport_write_data((struct parport *) data, - parport_read_data((struct parport *) data)|0x1); - } else { - parport_write_data((struct parport *) data, - parport_read_data((struct parport *) data)&0xfe); - } -} - -static void bit_lp_setsda2(void *data, int state) -{ - if (state) { - parport_write_data((struct parport *) data, - parport_read_data((struct parport *) data)|0x2); - } else { - parport_write_data((struct parport *) data, - parport_read_data((struct parport *) data)&0xfd); - } -} - -static int bit_lp_getsda2(void *data) -{ - return (parport_read_status((struct parport *) data) & - PARPORT_STATUS_BUSY) ? 0 : 1; -} - -/* ------------------------------------------------------------------------ - * Encapsulate the above functions in the correct operations structure. - * This is only done when more than one hardware adapter is supported. - */ - -static struct i2c_algo_bit_data bit_lp_data = { - .setsda = bit_lp_setsda, - .setscl = bit_lp_setscl, - .getsda = bit_lp_getsda, - .getscl = bit_lp_getscl, - .udelay = 80, - .mdelay = 80, - .timeout = HZ -}; - -static struct i2c_algo_bit_data bit_lp_data2 = { - .setsda = bit_lp_setsda2, - .setscl = bit_lp_setscl2, - .getsda = bit_lp_getsda2, - .udelay = 80, - .mdelay = 80, - .timeout = HZ -}; - -static struct i2c_adapter bit_lp_ops = { - .owner = THIS_MODULE, - .id = I2C_HW_B_LP, - .name = "Philips Parallel port adapter", -}; - -static void i2c_parport_attach (struct parport *port) -{ - struct i2c_par *adapter = kmalloc(sizeof(struct i2c_par), - GFP_KERNEL); - if (!adapter) { - printk(KERN_ERR "i2c-philips-par: Unable to malloc.\n"); - return; - } - - printk(KERN_DEBUG "i2c-philips-par.o: attaching to %s\n", port->name); - - adapter->pdev = parport_register_device(port, "i2c-philips-par", - NULL, NULL, NULL, - PARPORT_FLAG_EXCL, - NULL); - if (!adapter->pdev) { - printk(KERN_ERR "i2c-philips-par: Unable to register with parport.\n"); - kfree(adapter); - return; - } - - adapter->adapter = bit_lp_ops; - adapter->adapter.algo_data = &adapter->bit_lp_data; - adapter->bit_lp_data = type ? bit_lp_data2 : bit_lp_data; - adapter->bit_lp_data.data = port; - - if (parport_claim_or_block(adapter->pdev) < 0 ) { - printk(KERN_ERR "i2c-philips-par: Could not claim parallel port.\n"); - kfree(adapter); - return; - } - /* reset hardware to sane state */ - bit_lp_setsda(port, 1); - bit_lp_setscl(port, 1); - parport_release(adapter->pdev); - - if (i2c_bit_add_bus(&adapter->adapter) < 0) - { - printk(KERN_ERR "i2c-philips-par: Unable to register with I2C.\n"); - parport_unregister_device(adapter->pdev); - kfree(adapter); - return; /* No good */ - } - - adapter->next = adapter_list; - adapter_list = adapter; -} - -static void i2c_parport_detach (struct parport *port) -{ - struct i2c_par *adapter, *prev = NULL; - - for (adapter = adapter_list; adapter; adapter = adapter->next) - { - if (adapter->pdev->port == port) - { - parport_unregister_device(adapter->pdev); - i2c_bit_del_bus(&adapter->adapter); - if (prev) - prev->next = adapter->next; - else - adapter_list = adapter->next; - kfree(adapter); - return; - } - prev = adapter; - } -} - - -static struct parport_driver i2c_driver = { - "i2c-philips-par", - i2c_parport_attach, - i2c_parport_detach, - NULL -}; - -int __init i2c_bitlp_init(void) -{ - printk(KERN_INFO "i2c-philips-par.o: i2c Philips parallel port adapter module version %s (%s)\n", I2C_VERSION, I2C_DATE); - - parport_register_driver(&i2c_driver); - - return 0; -} - -void __exit i2c_bitlp_exit(void) -{ - parport_unregister_driver(&i2c_driver); -} - -MODULE_AUTHOR("Simon G. Vogl "); -MODULE_DESCRIPTION("I2C-Bus adapter routines for Philips parallel port adapter"); -MODULE_LICENSE("GPL"); - -MODULE_PARM(type, "i"); - -module_init(i2c_bitlp_init); -module_exit(i2c_bitlp_exit); diff -prauN linux-2.6.0-test5/drivers/i2c/i2c-prosavage.c wli-2.6.0-test5-bk12-25/drivers/i2c/i2c-prosavage.c --- linux-2.6.0-test5/drivers/i2c/i2c-prosavage.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/i2c-prosavage.c 1969-12-31 16:00:00.000000000 -0800 @@ -1,357 +0,0 @@ -/* - * kernel/busses/i2c-prosavage.c - * - * i2c bus driver for S3/VIA 8365/8375 graphics processor. - * Copyright (c) 2003 Henk Vergonet - * Based on code written by: - * Frodo Looijaard , - * Philip Edelbrock , - * Ralph Metzler , and - * Mark D. Studebaker - * Simon Vogl - * and others - * - * Please read the lm_sensors documentation for details on use. - * - * 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 of the License, 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, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ -/* 18-05-2003 HVE - created - * 14-06-2003 HVE - adapted for lm_sensors2 - * 17-06-2003 HVE - linux 2.5.xx compatible - * 18-06-2003 HVE - codingstyle - * 21-06-2003 HVE - compatibility lm_sensors2 and linux 2.5.xx - * codingstyle, mmio enabled - * - * This driver interfaces to the I2C bus of the VIA north bridge embedded - * ProSavage4/8 devices. Usefull for gaining access to the TV Encoder chips. - * - * Graphics cores: - * S3/VIA KM266/VT8375 aka ProSavage8 - * S3/VIA KM133/VT8365 aka Savage4 - * - * Two serial busses are implemented: - * SERIAL1 - I2C serial communications interface - * SERIAL2 - DDC2 monitor communications interface - * - * Tested on a FX41 mainboard, see http://www.shuttle.com - * - * - * TODO: - * - integration with prosavage framebuffer device - * (Additional documentation needed :( - */ - -#include -#include -#include -#include -#include -#include - -#include - - -/* - * driver configuration - */ -#define DRIVER_ID "i2c-prosavage" -#define DRIVER_VERSION "20030621" - -#define ADAPTER_NAME(x) (x).name - -#define MAX_BUSSES 2 - -struct s_i2c_bus { - u8 *mmvga; - int i2c_reg; - int adap_ok; - struct i2c_adapter adap; - struct i2c_algo_bit_data algo; -}; - -struct s_i2c_chip { - u8 *mmio; - struct s_i2c_bus i2c_bus[MAX_BUSSES]; -}; - - -/* - * i2c configuration - */ -#ifndef I2C_HW_B_S3VIA -#define I2C_HW_B_S3VIA 0x18 /* S3VIA ProSavage adapter */ -#endif - -/* delays */ -#define CYCLE_DELAY 10 -#define TIMEOUT (HZ / 2) - - -/* - * S3/VIA 8365/8375 registers - */ -#ifndef PCI_VENDOR_ID_S3 -#define PCI_VENDOR_ID_S3 0x5333 -#endif -#ifndef PCI_DEVICE_ID_S3_SAVAGE4 -#define PCI_DEVICE_ID_S3_SAVAGE4 0x8a25 -#endif -#ifndef PCI_DEVICE_ID_S3_PROSAVAGE8 -#define PCI_DEVICE_ID_S3_PROSAVAGE8 0x8d04 -#endif - -#define VGA_CR_IX 0x3d4 -#define VGA_CR_DATA 0x3d5 - -#define CR_SERIAL1 0xa0 /* I2C serial communications interface */ -#define MM_SERIAL1 0xff20 -#define CR_SERIAL2 0xb1 /* DDC2 monitor communications interface */ - -/* based on vt8365 documentation */ -#define I2C_ENAB 0x10 -#define I2C_SCL_OUT 0x01 -#define I2C_SDA_OUT 0x02 -#define I2C_SCL_IN 0x04 -#define I2C_SDA_IN 0x08 - -#define SET_CR_IX(p, val) *((p)->mmvga + VGA_CR_IX) = (u8)(val) -#define SET_CR_DATA(p, val) *((p)->mmvga + VGA_CR_DATA) = (u8)(val) -#define GET_CR_DATA(p) *((p)->mmvga + VGA_CR_DATA) - - -/* - * Serial bus line handling - * - * serial communications register as parameter in private data - * - * TODO: locks with other code sections accessing video registers? - */ -static void bit_s3via_setscl(void *bus, int val) -{ - struct s_i2c_bus *p = (struct s_i2c_bus *)bus; - unsigned int r; - - SET_CR_IX(p, p->i2c_reg); - r = GET_CR_DATA(p); - r |= I2C_ENAB; - if (val) { - r |= I2C_SCL_OUT; - } else { - r &= ~I2C_SCL_OUT; - } - SET_CR_DATA(p, r); -} - -static void bit_s3via_setsda(void *bus, int val) -{ - struct s_i2c_bus *p = (struct s_i2c_bus *)bus; - unsigned int r; - - SET_CR_IX(p, p->i2c_reg); - r = GET_CR_DATA(p); - r |= I2C_ENAB; - if (val) { - r |= I2C_SDA_OUT; - } else { - r &= ~I2C_SDA_OUT; - } - SET_CR_DATA(p, r); -} - -static int bit_s3via_getscl(void *bus) -{ - struct s_i2c_bus *p = (struct s_i2c_bus *)bus; - - SET_CR_IX(p, p->i2c_reg); - return (0 != (GET_CR_DATA(p) & I2C_SCL_IN)); -} - -static int bit_s3via_getsda(void *bus) -{ - struct s_i2c_bus *p = (struct s_i2c_bus *)bus; - - SET_CR_IX(p, p->i2c_reg); - return (0 != (GET_CR_DATA(p) & I2C_SDA_IN)); -} - - -/* - * adapter initialisation - */ -static int i2c_register_bus(struct s_i2c_bus *p, u8 *mmvga, u32 i2c_reg) -{ - int ret; - p->adap.owner = THIS_MODULE; - p->adap.id = I2C_HW_B_S3VIA; - p->adap.algo_data = &p->algo; - p->algo.setsda = bit_s3via_setsda; - p->algo.setscl = bit_s3via_setscl; - p->algo.getsda = bit_s3via_getsda; - p->algo.getscl = bit_s3via_getscl; - p->algo.udelay = CYCLE_DELAY; - p->algo.mdelay = CYCLE_DELAY; - p->algo.timeout = TIMEOUT; - p->algo.data = p; - p->mmvga = mmvga; - p->i2c_reg = i2c_reg; - - ret = i2c_bit_add_bus(&p->adap); - if (ret) { - return ret; - } - - p->adap_ok = 1; - return 0; -} - - -/* - * Cleanup stuff - */ -static void __devexit prosavage_remove(struct pci_dev *dev) -{ - struct s_i2c_chip *chip; - int i, ret; - - chip = (struct s_i2c_chip *)pci_get_drvdata(dev); - - if (!chip) { - return; - } - for (i = MAX_BUSSES - 1; i >= 0; i--) { - if (chip->i2c_bus[i].adap_ok == 0) - continue; - - ret = i2c_bit_del_bus(&chip->i2c_bus[i].adap); - if (ret) { - printk(DRIVER_ID ": %s not removed\n", - ADAPTER_NAME(chip->i2c_bus[i].adap)); - } - } - if (chip->mmio) { - iounmap(chip->mmio); - } - kfree(chip); -} - - -/* - * Detect chip and initialize it - */ -static int __devinit prosavage_probe(struct pci_dev *dev, const struct pci_device_id *id) -{ - int ret; - unsigned long base, len; - struct s_i2c_chip *chip; - struct s_i2c_bus *bus; - - pci_set_drvdata(dev, kmalloc(sizeof(struct s_i2c_chip), GFP_KERNEL)); - chip = (struct s_i2c_chip *)pci_get_drvdata(dev); - if (chip == NULL) { - return -ENOMEM; - } - - memset(chip, 0, sizeof(struct s_i2c_chip)); - - base = dev->resource[0].start & PCI_BASE_ADDRESS_MEM_MASK; - len = dev->resource[0].end - base + 1; - chip->mmio = ioremap_nocache(base, len); - - if (chip->mmio == NULL) { - printk (DRIVER_ID ": ioremap failed\n"); - prosavage_remove(dev); - return -ENODEV; - } - - - /* - * Chip initialisation - */ - /* Unlock Extended IO Space ??? */ - - - /* - * i2c bus registration - */ - bus = &chip->i2c_bus[0]; - snprintf(ADAPTER_NAME(bus->adap), sizeof(ADAPTER_NAME(bus->adap)), - "ProSavage I2C bus at %02x:%02x.%x", - dev->bus->number, PCI_SLOT(dev->devfn), PCI_FUNC(dev->devfn)); - ret = i2c_register_bus(bus, chip->mmio + 0x8000, CR_SERIAL1); - if (ret) { - goto err_adap; - } - /* - * ddc bus registration - */ - bus = &chip->i2c_bus[1]; - snprintf(ADAPTER_NAME(bus->adap), sizeof(ADAPTER_NAME(bus->adap)), - "ProSavage DDC bus at %02x:%02x.%x", - dev->bus->number, PCI_SLOT(dev->devfn), PCI_FUNC(dev->devfn)); - ret = i2c_register_bus(bus, chip->mmio + 0x8000, CR_SERIAL2); - if (ret) { - goto err_adap; - } - return 0; -err_adap: - printk (DRIVER_ID ": %s failed\n", ADAPTER_NAME(bus->adap)); - prosavage_remove(dev); - return ret; -} - - -/* - * Data for PCI driver interface - */ -static struct pci_device_id prosavage_pci_tbl[] = { - { - .vendor = PCI_VENDOR_ID_S3, - .device = PCI_DEVICE_ID_S3_SAVAGE4, - .subvendor = PCI_ANY_ID, - .subdevice = PCI_ANY_ID, - },{ - .vendor = PCI_VENDOR_ID_S3, - .device = PCI_DEVICE_ID_S3_PROSAVAGE8, - .subvendor = PCI_ANY_ID, - .subdevice = PCI_ANY_ID, - },{ 0, } -}; - -static struct pci_driver prosavage_driver = { - .name = "prosavage-smbus", - .id_table = prosavage_pci_tbl, - .probe = prosavage_probe, - .remove = __devexit_p(prosavage_remove), -}; - -static int __init i2c_prosavage_init(void) -{ - printk(DRIVER_ID " version %s (%s)\n", I2C_VERSION, DRIVER_VERSION); - return pci_module_init(&prosavage_driver); -} - -static void __exit i2c_prosavage_exit(void) -{ - pci_unregister_driver(&prosavage_driver); -} - -MODULE_DEVICE_TABLE(pci, prosavage_pci_tbl); -MODULE_AUTHOR("Henk Vergonet"); -MODULE_DESCRIPTION("ProSavage VIA 8365/8375 smbus driver"); -MODULE_LICENSE("GPL"); - -module_init (i2c_prosavage_init); -module_exit (i2c_prosavage_exit); diff -prauN linux-2.6.0-test5/drivers/i2c/i2c-rpx.c wli-2.6.0-test5-bk12-25/drivers/i2c/i2c-rpx.c --- linux-2.6.0-test5/drivers/i2c/i2c-rpx.c 2003-09-08 12:50:33.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/i2c-rpx.c 1969-12-31 16:00:00.000000000 -0800 @@ -1,103 +0,0 @@ -/* - * Embedded Planet RPX Lite MPC8xx CPM I2C interface. - * Copyright (c) 1999 Dan Malek (dmalek@jlc.net). - * - * moved into proper i2c interface; - * Brad Parker (brad@heeltoe.com) - * - * RPX lite specific parts of the i2c interface - * Update: There actually isn't anything RPXLite-specific about this module. - * This should work for most any 8xx board. The console messages have been - * changed to eliminate RPXLite references. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -static void -rpx_iic_init(struct i2c_algo_8xx_data *data) -{ - volatile cpm8xx_t *cp; - volatile immap_t *immap; - - cp = cpmp; /* Get pointer to Communication Processor */ - immap = (immap_t *)IMAP_ADDR; /* and to internal registers */ - - data->iip = (iic_t *)&cp->cp_dparam[PROFF_IIC]; - - /* Check for and use a microcode relocation patch. - */ - if ((data->reloc = data->iip->iic_rpbase)) - data->iip = (iic_t *)&cp->cp_dpmem[data->iip->iic_rpbase]; - - data->i2c = (i2c8xx_t *)&(immap->im_i2c); - data->cp = cp; - - /* Initialize Port B IIC pins. - */ - cp->cp_pbpar |= 0x00000030; - cp->cp_pbdir |= 0x00000030; - cp->cp_pbodr |= 0x00000030; - - /* Allocate space for two transmit and two receive buffer - * descriptors in the DP ram. - */ - data->dp_addr = m8xx_cpm_dpalloc(sizeof(cbd_t) * 4); - - /* ptr to i2c area */ - data->i2c = (i2c8xx_t *)&(((immap_t *)IMAP_ADDR)->im_i2c); -} - -static int rpx_install_isr(int irq, void (*func)(void *, void *), void *data) -{ - /* install interrupt handler */ - cpm_install_handler(irq, (void (*)(void *, struct pt_regs *)) func, data); - - return 0; -} - -static struct i2c_algo_8xx_data rpx_data = { - .setisr = rpx_install_isr -}; - -static struct i2c_adapter rpx_ops = { - .owner = THIS_MODULE, - .name = "m8xx", - .id = I2C_HW_MPC8XX_EPON, - .algo_data = &rpx_data, -}; - -int __init i2c_rpx_init(void) -{ - printk("i2c-rpx.o: i2c MPC8xx module version %s (%s)\n", I2C_VERSION, I2C_DATE); - - /* reset hardware to sane state */ - rpx_iic_init(&rpx_data); - - if (i2c_8xx_add_bus(&rpx_ops) < 0) { - printk("i2c-rpx: Unable to register with I2C\n"); - return -ENODEV; - } - - return 0; -} - -void __exit i2c_rpx_exit(void) -{ - i2c_8xx_del_bus(&rpx_ops); -} - -MODULE_AUTHOR("Dan Malek "); -MODULE_DESCRIPTION("I2C-Bus adapter routines for MPC8xx boards"); - -module_init(i2c_rpx_init); -module_exit(i2c_rpx_exit); diff -prauN linux-2.6.0-test5/drivers/i2c/i2c-sensor.c wli-2.6.0-test5-bk12-25/drivers/i2c/i2c-sensor.c --- linux-2.6.0-test5/drivers/i2c/i2c-sensor.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/i2c-sensor.c 2003-09-25 19:15:56.000000000 -0700 @@ -50,8 +50,9 @@ int i2c_detect(struct i2c_adapter *adapt return -1; for (addr = 0x00; addr <= (is_isa ? 0xffff : 0x7f); addr++) { - /* XXX: WTF is going on here??? */ - if ((is_isa && check_region(addr, 1)) || + void *region_used = request_region(addr, 1, "foo"); + release_region(addr, 1); + if ((is_isa && (region_used == NULL)) || (!is_isa && i2c_check_addr(adapter, addr))) continue; diff -prauN linux-2.6.0-test5/drivers/i2c/i2c-velleman.c wli-2.6.0-test5-bk12-25/drivers/i2c/i2c-velleman.c --- linux-2.6.0-test5/drivers/i2c/i2c-velleman.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/i2c-velleman.c 1969-12-31 16:00:00.000000000 -0800 @@ -1,161 +0,0 @@ -/* ------------------------------------------------------------------------- */ -/* i2c-velleman.c i2c-hw access for Velleman K9000 adapters */ -/* ------------------------------------------------------------------------- */ -/* Copyright (C) 1995-96, 2000 Simon G. Vogl - - 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 of the License, 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, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* ------------------------------------------------------------------------- */ - -/* $Id: i2c-velleman.c,v 1.29 2003/01/21 08:08:16 kmalkki Exp $ */ - -#include -#include -#include -#include -#include -#include -#include -#include - -/* ----- global defines ----------------------------------------------- */ -#define DEB(x) /* should be reasonable open, close &c. */ -#define DEB2(x) /* low level debugging - very slow */ -#define DEBE(x) x /* error messages */ - - /* Pin Port Inverted name */ -#define I2C_SDA 0x02 /* ctrl bit 1 (inv) */ -#define I2C_SCL 0x08 /* ctrl bit 3 (inv) */ - -#define I2C_SDAIN 0x10 /* stat bit 4 */ -#define I2C_SCLIN 0x08 /* ctrl bit 3 (inv)(reads own output)*/ - -#define I2C_DMASK 0xfd -#define I2C_CMASK 0xf7 - - -/* --- Convenience defines for the parallel port: */ -#define BASE (unsigned int)(data) -#define DATA BASE /* Centronics data port */ -#define STAT (BASE+1) /* Centronics status port */ -#define CTRL (BASE+2) /* Centronics control port */ - -#define DEFAULT_BASE 0x378 -static int base=0; - -/* ----- local functions --------------------------------------------------- */ - -static void bit_velle_setscl(void *data, int state) -{ - if (state) { - outb(inb(CTRL) & I2C_CMASK, CTRL); - } else { - outb(inb(CTRL) | I2C_SCL, CTRL); - } - -} - -static void bit_velle_setsda(void *data, int state) -{ - if (state) { - outb(inb(CTRL) & I2C_DMASK , CTRL); - } else { - outb(inb(CTRL) | I2C_SDA, CTRL); - } - -} - -static int bit_velle_getscl(void *data) -{ - return ( 0 == ( (inb(CTRL)) & I2C_SCLIN ) ); -} - -static int bit_velle_getsda(void *data) -{ - return ( 0 != ( (inb(STAT)) & I2C_SDAIN ) ); -} - -static int bit_velle_init(void) -{ - if (!request_region(base, (base == 0x3bc) ? 3 : 8, - "i2c (Vellemann adapter)")) - return -ENODEV; - - bit_velle_setsda((void*)base,1); - bit_velle_setscl((void*)base,1); - return 0; -} - -/* ------------------------------------------------------------------------ - * Encapsulate the above functions in the correct operations structure. - * This is only done when more than one hardware adapter is supported. - */ - -static struct i2c_algo_bit_data bit_velle_data = { - .setsda = bit_velle_setsda, - .setscl = bit_velle_setscl, - .getsda = bit_velle_getsda, - .getscl = bit_velle_getscl, - .udelay = 10, - .mdelay = 10, - .timeout = HZ -}; - -static struct i2c_adapter bit_velle_ops = { - .owner = THIS_MODULE, - .id = I2C_HW_B_VELLE, - .algo_data = &bit_velle_data, - .name = "Velleman K8000", -}; - -static int __init i2c_bitvelle_init(void) -{ - printk(KERN_INFO "i2c-velleman.o: i2c Velleman K8000 adapter module version %s (%s)\n", I2C_VERSION, I2C_DATE); - if (base==0) { - /* probe some values */ - base=DEFAULT_BASE; - bit_velle_data.data=(void*)DEFAULT_BASE; - if (bit_velle_init()==0) { - if(i2c_bit_add_bus(&bit_velle_ops) < 0) - return -ENODEV; - } else { - return -ENODEV; - } - } else { - bit_velle_data.data=(void*)base; - if (bit_velle_init()==0) { - if(i2c_bit_add_bus(&bit_velle_ops) < 0) - return -ENODEV; - } else { - return -ENODEV; - } - } - printk(KERN_DEBUG "i2c-velleman.o: found device at %#x.\n",base); - return 0; -} - -static void __exit i2c_bitvelle_exit(void) -{ - i2c_bit_del_bus(&bit_velle_ops); - release_region(base, (base == 0x3bc) ? 3 : 8); -} - -MODULE_AUTHOR("Simon G. Vogl "); -MODULE_DESCRIPTION("I2C-Bus adapter routines for Velleman K8000 adapter"); -MODULE_LICENSE("GPL"); - -MODULE_PARM(base, "i"); - -module_init(i2c_bitvelle_init); -module_exit(i2c_bitvelle_exit); diff -prauN linux-2.6.0-test5/drivers/i2c/scx200_acb.c wli-2.6.0-test5-bk12-25/drivers/i2c/scx200_acb.c --- linux-2.6.0-test5/drivers/i2c/scx200_acb.c 2003-09-08 12:50:04.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/scx200_acb.c 1969-12-31 16:00:00.000000000 -0800 @@ -1,553 +0,0 @@ -/* linux/drivers/i2c/scx200_acb.c - - Copyright (c) 2001,2002 Christer Weinigel - - National Semiconductor SCx200 ACCESS.bus support - - Based on i2c-keywest.c which is: - Copyright (c) 2001 Benjamin Herrenschmidt - Copyright (c) 2000 Philip Edelbrock - - 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 of the - License, 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, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -*/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#define NAME "scx200_acb" - -MODULE_AUTHOR("Christer Weinigel "); -MODULE_DESCRIPTION("NatSemi SCx200 ACCESS.bus Driver"); -MODULE_LICENSE("GPL"); - -#define MAX_DEVICES 4 -static int base[MAX_DEVICES] = { 0x840 }; -MODULE_PARM(base, "1-4i"); -MODULE_PARM_DESC(base, "Base addresses for the ACCESS.bus controllers"); - -#define DEBUG 0 - -#if DEBUG -#define DBG(x...) printk(KERN_DEBUG NAME ": " x) -#else -#define DBG(x...) -#endif - -/* The hardware supports interrupt driven mode too, but I haven't - implemented that. */ -#define POLLED_MODE 1 -#define POLL_TIMEOUT (HZ) - -enum scx200_acb_state { - state_idle, - state_address, - state_command, - state_repeat_start, - state_quick, - state_read, - state_write, -}; - -static const char *scx200_acb_state_name[] = { - "idle", - "address", - "command", - "repeat_start", - "quick", - "read", - "write", -}; - -/* Physical interface */ -struct scx200_acb_iface -{ - struct scx200_acb_iface *next; - struct i2c_adapter adapter; - unsigned base; - struct semaphore sem; - - /* State machine data */ - enum scx200_acb_state state; - int result; - u8 address_byte; - u8 command; - u8 *ptr; - char needs_reset; - unsigned len; -}; - -/* Register Definitions */ -#define ACBSDA (iface->base + 0) -#define ACBST (iface->base + 1) -#define ACBST_SDAST 0x40 /* SDA Status */ -#define ACBST_BER 0x20 -#define ACBST_NEGACK 0x10 /* Negative Acknowledge */ -#define ACBST_STASTR 0x08 /* Stall After Start */ -#define ACBST_MASTER 0x02 -#define ACBCST (iface->base + 2) -#define ACBCST_BB 0x02 -#define ACBCTL1 (iface->base + 3) -#define ACBCTL1_STASTRE 0x80 -#define ACBCTL1_NMINTE 0x40 -#define ACBCTL1_ACK 0x10 -#define ACBCTL1_STOP 0x02 -#define ACBCTL1_START 0x01 -#define ACBADDR (iface->base + 4) -#define ACBCTL2 (iface->base + 5) -#define ACBCTL2_ENABLE 0x01 - -/************************************************************************/ - -static void scx200_acb_machine(struct scx200_acb_iface *iface, u8 status) -{ - const char *errmsg; - - DBG("state %s, status = 0x%02x\n", - scx200_acb_state_name[iface->state], status); - - if (status & ACBST_BER) { - errmsg = "bus error"; - goto error; - } - if (!(status & ACBST_MASTER)) { - errmsg = "not master"; - goto error; - } - if (status & ACBST_NEGACK) - goto negack; - - switch (iface->state) { - case state_idle: - dev_warn(&iface->adapter.dev, "interrupt in idle state\n"); - break; - - case state_address: - /* Do a pointer write first */ - outb(iface->address_byte & ~1, ACBSDA); - - iface->state = state_command; - break; - - case state_command: - outb(iface->command, ACBSDA); - - if (iface->address_byte & 1) - iface->state = state_repeat_start; - else - iface->state = state_write; - break; - - case state_repeat_start: - outb(inb(ACBCTL1) | ACBCTL1_START, ACBCTL1); - /* fallthrough */ - - case state_quick: - if (iface->address_byte & 1) { - if (iface->len == 1) - outb(inb(ACBCTL1) | ACBCTL1_ACK, ACBCTL1); - else - outb(inb(ACBCTL1) & ~ACBCTL1_ACK, ACBCTL1); - outb(iface->address_byte, ACBSDA); - - iface->state = state_read; - } else { - outb(iface->address_byte, ACBSDA); - - iface->state = state_write; - } - break; - - case state_read: - /* Set ACK if receiving the last byte */ - if (iface->len == 1) - outb(inb(ACBCTL1) | ACBCTL1_ACK, ACBCTL1); - else - outb(inb(ACBCTL1) & ~ACBCTL1_ACK, ACBCTL1); - - *iface->ptr++ = inb(ACBSDA); - --iface->len; - - if (iface->len == 0) { - iface->result = 0; - iface->state = state_idle; - outb(inb(ACBCTL1) | ACBCTL1_STOP, ACBCTL1); - } - - break; - - case state_write: - if (iface->len == 0) { - iface->result = 0; - iface->state = state_idle; - outb(inb(ACBCTL1) | ACBCTL1_STOP, ACBCTL1); - break; - } - - outb(*iface->ptr++, ACBSDA); - --iface->len; - - break; - } - - return; - - negack: - DBG("negative acknowledge in state %s\n", - scx200_acb_state_name[iface->state]); - - iface->state = state_idle; - iface->result = -ENXIO; - - outb(inb(ACBCTL1) | ACBCTL1_STOP, ACBCTL1); - outb(ACBST_STASTR | ACBST_NEGACK, ACBST); - return; - - error: - dev_err(&iface->adapter.dev, "%s in state %s\n", errmsg, - scx200_acb_state_name[iface->state]); - - iface->state = state_idle; - iface->result = -EIO; - iface->needs_reset = 1; -} - -static void scx200_acb_timeout(struct scx200_acb_iface *iface) -{ - dev_err(&iface->adapter.dev, "timeout in state %s\n", - scx200_acb_state_name[iface->state]); - - iface->state = state_idle; - iface->result = -EIO; - iface->needs_reset = 1; -} - -#ifdef POLLED_MODE -static void scx200_acb_poll(struct scx200_acb_iface *iface) -{ - u8 status = 0; - unsigned long timeout; - - timeout = jiffies + POLL_TIMEOUT; - while (time_before(jiffies, timeout)) { - status = inb(ACBST); - if ((status & (ACBST_SDAST|ACBST_BER|ACBST_NEGACK)) != 0) { - scx200_acb_machine(iface, status); - return; - } - schedule_timeout(HZ/100+1); - } - - scx200_acb_timeout(iface); -} -#endif /* POLLED_MODE */ - -static void scx200_acb_reset(struct scx200_acb_iface *iface) -{ - /* Disable the ACCESS.bus device and Configure the SCL - frequency: 16 clock cycles */ - outb(0x70, ACBCTL2); - /* Polling mode */ - outb(0, ACBCTL1); - /* Disable slave address */ - outb(0, ACBADDR); - /* Enable the ACCESS.bus device */ - outb(inb(ACBCTL2) | ACBCTL2_ENABLE, ACBCTL2); - /* Free STALL after START */ - outb(inb(ACBCTL1) & ~(ACBCTL1_STASTRE | ACBCTL1_NMINTE), ACBCTL1); - /* Send a STOP */ - outb(inb(ACBCTL1) | ACBCTL1_STOP, ACBCTL1); - /* Clear BER, NEGACK and STASTR bits */ - outb(ACBST_BER | ACBST_NEGACK | ACBST_STASTR, ACBST); - /* Clear BB bit */ - outb(inb(ACBCST) | ACBCST_BB, ACBCST); -} - -static s32 scx200_acb_smbus_xfer(struct i2c_adapter *adapter, - u16 address, unsigned short flags, - char rw, u8 command, int size, - union i2c_smbus_data *data) -{ - struct scx200_acb_iface *iface = i2c_get_adapdata(adapter); - int len; - u8 *buffer; - u16 cur_word; - int rc; - - switch (size) { - case I2C_SMBUS_QUICK: - len = 0; - buffer = NULL; - break; - case I2C_SMBUS_BYTE: - if (rw == I2C_SMBUS_READ) { - len = 1; - buffer = &data->byte; - } else { - len = 1; - buffer = &command; - } - break; - case I2C_SMBUS_BYTE_DATA: - len = 1; - buffer = &data->byte; - break; - case I2C_SMBUS_WORD_DATA: - len = 2; - cur_word = cpu_to_le16(data->word); - buffer = (u8 *)&cur_word; - break; - case I2C_SMBUS_BLOCK_DATA: - len = data->block[0]; - buffer = &data->block[1]; - break; - default: - return -EINVAL; - } - - DBG("size=%d, address=0x%x, command=0x%x, len=%d, read=%d\n", - size, address, command, len, rw == I2C_SMBUS_READ); - - if (!len && rw == I2C_SMBUS_READ) { - dev_warn(&adapter->dev, "zero length read\n"); - return -EINVAL; - } - - if (len && !buffer) { - dev_warn(&adapter->dev, "nonzero length but no buffer\n"); - return -EFAULT; - } - - down(&iface->sem); - - iface->address_byte = address<<1; - if (rw == I2C_SMBUS_READ) - iface->address_byte |= 1; - iface->command = command; - iface->ptr = buffer; - iface->len = len; - iface->result = -EINVAL; - iface->needs_reset = 0; - - outb(inb(ACBCTL1) | ACBCTL1_START, ACBCTL1); - - if (size == I2C_SMBUS_QUICK || size == I2C_SMBUS_BYTE) - iface->state = state_quick; - else - iface->state = state_address; - -#ifdef POLLED_MODE - while (iface->state != state_idle) - scx200_acb_poll(iface); -#else /* POLLED_MODE */ -#error Interrupt driven mode not implemented -#endif /* POLLED_MODE */ - - if (iface->needs_reset) - scx200_acb_reset(iface); - - rc = iface->result; - - up(&iface->sem); - - if (rc == 0 && size == I2C_SMBUS_WORD_DATA && rw == I2C_SMBUS_READ) - data->word = le16_to_cpu(cur_word); - -#if DEBUG - printk(KERN_DEBUG NAME ": transfer done, result: %d", rc); - if (buffer) { - int i; - printk(" data:"); - for (i = 0; i < len; ++i) - printk(" %02x", buffer[i]); - } - printk("\n"); -#endif - - return rc; -} - -static u32 scx200_acb_func(struct i2c_adapter *adapter) -{ - return I2C_FUNC_SMBUS_QUICK | I2C_FUNC_SMBUS_BYTE | - I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA | - I2C_FUNC_SMBUS_BLOCK_DATA; -} - -/* For now, we only handle combined mode (smbus) */ -static struct i2c_algorithm scx200_acb_algorithm = { - .name = "NatSemi SCx200 ACCESS.bus", - .id = I2C_ALGO_SMBUS, - .smbus_xfer = scx200_acb_smbus_xfer, - .functionality = scx200_acb_func, -}; - -struct scx200_acb_iface *scx200_acb_list; - -int scx200_acb_probe(struct scx200_acb_iface *iface) -{ - u8 val; - - /* Disable the ACCESS.bus device and Configure the SCL - frequency: 16 clock cycles */ - outb(0x70, ACBCTL2); - - if (inb(ACBCTL2) != 0x70) { - DBG("ACBCTL2 readback failed\n"); - return -ENXIO; - } - - outb(inb(ACBCTL1) | ACBCTL1_NMINTE, ACBCTL1); - - val = inb(ACBCTL1); - if (val) { - DBG("disabled, but ACBCTL1=0x%02x\n", val); - return -ENXIO; - } - - outb(inb(ACBCTL2) | ACBCTL2_ENABLE, ACBCTL2); - - outb(inb(ACBCTL1) | ACBCTL1_NMINTE, ACBCTL1); - - val = inb(ACBCTL1); - if ((val & ACBCTL1_NMINTE) != ACBCTL1_NMINTE) { - DBG("enabled, but NMINTE won't be set, ACBCTL1=0x%02x\n", val); - return -ENXIO; - } - - return 0; -} - -static int __init scx200_acb_create(int base, int index) -{ - struct scx200_acb_iface *iface; - struct i2c_adapter *adapter; - int rc = 0; - char description[64]; - - iface = kmalloc(sizeof(*iface), GFP_KERNEL); - if (!iface) { - printk(KERN_ERR NAME ": can't allocate memory\n"); - rc = -ENOMEM; - goto errout; - } - - memset(iface, 0, sizeof(*iface)); - adapter = &iface->adapter; - i2c_set_adapdata(adapter, iface); - snprintf(adapter->name, DEVICE_NAME_SIZE, "SCx200 ACB%d", index); - adapter->owner = THIS_MODULE; - adapter->id = I2C_ALGO_SMBUS; - adapter->algo = &scx200_acb_algorithm; - - init_MUTEX(&iface->sem); - - snprintf(description, sizeof(description), "NatSemi SCx200 ACCESS.bus [%s]", adapter->name); - if (request_region(base, 8, description) == 0) { - dev_err(&adapter->dev, "can't allocate io 0x%x-0x%x\n", - base, base + 8-1); - rc = -EBUSY; - goto errout; - } - iface->base = base; - - rc = scx200_acb_probe(iface); - if (rc) { - dev_warn(&adapter->dev, "probe failed\n"); - goto errout; - } - - scx200_acb_reset(iface); - - if (i2c_add_adapter(adapter) < 0) { - dev_err(&adapter->dev, "failed to register\n"); - rc = -ENODEV; - goto errout; - } - - lock_kernel(); - iface->next = scx200_acb_list; - scx200_acb_list = iface; - unlock_kernel(); - - return 0; - - errout: - if (iface) { - if (iface->base) - release_region(iface->base, 8); - kfree(iface); - } - return rc; -} - -static int __init scx200_acb_init(void) -{ - int i; - int rc; - - printk(KERN_DEBUG NAME ": NatSemi SCx200 ACCESS.bus Driver\n"); - - /* Verify that this really is a SCx200 processor */ - if (pci_find_device(PCI_VENDOR_ID_NS, - PCI_DEVICE_ID_NS_SCx200_BRIDGE, - NULL) == NULL) - return -ENODEV; - - rc = -ENXIO; - for (i = 0; i < MAX_DEVICES; ++i) { - if (base[i] > 0) - rc = scx200_acb_create(base[i], i); - } - if (scx200_acb_list) - return 0; - return rc; -} - -static void __exit scx200_acb_cleanup(void) -{ - struct scx200_acb_iface *iface; - lock_kernel(); - while ((iface = scx200_acb_list) != NULL) { - scx200_acb_list = iface->next; - unlock_kernel(); - - i2c_del_adapter(&iface->adapter); - release_region(iface->base, 8); - kfree(iface); - lock_kernel(); - } - unlock_kernel(); -} - -module_init(scx200_acb_init); -module_exit(scx200_acb_cleanup); - -/* - Local variables: - compile-command: "make -k -C ../.. SUBDIRS=drivers/i2c modules" - c-basic-offset: 8 - End: -*/ - diff -prauN linux-2.6.0-test5/drivers/i2c/scx200_i2c.c wli-2.6.0-test5-bk12-25/drivers/i2c/scx200_i2c.c --- linux-2.6.0-test5/drivers/i2c/scx200_i2c.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/i2c/scx200_i2c.c 1969-12-31 16:00:00.000000000 -0800 @@ -1,133 +0,0 @@ -/* linux/drivers/i2c/scx200_i2c.c - - Copyright (c) 2001,2002 Christer Weinigel - - National Semiconductor SCx200 I2C bus on GPIO pins - - Based on i2c-velleman.c Copyright (C) 1995-96, 2000 Simon G. Vogl - - 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 of the License, 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, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#define NAME "scx200_i2c" - -MODULE_AUTHOR("Christer Weinigel "); -MODULE_DESCRIPTION("NatSemi SCx200 I2C Driver"); -MODULE_LICENSE("GPL"); - -MODULE_PARM(scl, "i"); -MODULE_PARM_DESC(scl, "GPIO line for SCL"); -MODULE_PARM(sda, "i"); -MODULE_PARM_DESC(sda, "GPIO line for SDA"); - -static int scl = CONFIG_SCx200_I2C_SCL; -static int sda = CONFIG_SCx200_I2C_SDA; - -static void scx200_i2c_setscl(void *data, int state) -{ - scx200_gpio_set(scl, state); -} - -static void scx200_i2c_setsda(void *data, int state) -{ - scx200_gpio_set(sda, state); -} - -static int scx200_i2c_getscl(void *data) -{ - return scx200_gpio_get(scl); -} - -static int scx200_i2c_getsda(void *data) -{ - return scx200_gpio_get(sda); -} - -/* ------------------------------------------------------------------------ - * Encapsulate the above functions in the correct operations structure. - * This is only done when more than one hardware adapter is supported. - */ - -static struct i2c_algo_bit_data scx200_i2c_data = { - NULL, - scx200_i2c_setsda, - scx200_i2c_setscl, - scx200_i2c_getsda, - scx200_i2c_getscl, - 10, 10, 100, /* waits, timeout */ -}; - -static struct i2c_adapter scx200_i2c_ops = { - .owner = THIS_MODULE, - .id = I2C_HW_B_VELLE, - .algo_data = &scx200_i2c_data, - .name = "NatSemi SCx200 I2C", -}; - -int scx200_i2c_init(void) -{ - printk(KERN_DEBUG NAME ": NatSemi SCx200 I2C Driver\n"); - - if (!scx200_gpio_present()) { - printk(KERN_ERR NAME ": no SCx200 gpio pins available\n"); - return -ENODEV; - } - - printk(KERN_DEBUG NAME ": SCL=GPIO%02u, SDA=GPIO%02u\n", - scl, sda); - - if (scl == -1 || sda == -1 || scl == sda) { - printk(KERN_ERR NAME ": scl and sda must be specified\n"); - return -EINVAL; - } - - /* Configure GPIOs as open collector outputs */ - scx200_gpio_configure(scl, ~2, 5); - scx200_gpio_configure(sda, ~2, 5); - - if (i2c_bit_add_bus(&scx200_i2c_ops) < 0) { - printk(KERN_ERR NAME ": adapter %s registration failed\n", - scx200_i2c_ops.name); - return -ENODEV; - } - - return 0; -} - -void scx200_i2c_cleanup(void) -{ - i2c_bit_del_bus(&scx200_i2c_ops); -} - -module_init(scx200_i2c_init); -module_exit(scx200_i2c_cleanup); - -/* - Local variables: - compile-command: "make -k -C ../.. SUBDIRS=drivers/i2c modules" - c-basic-offset: 8 - End: -*/ diff -prauN linux-2.6.0-test5/drivers/ide/Kconfig wli-2.6.0-test5-bk12-25/drivers/ide/Kconfig --- linux-2.6.0-test5/drivers/ide/Kconfig 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/ide/Kconfig 2003-09-25 19:15:56.000000000 -0700 @@ -43,10 +43,8 @@ config IDE number of user programs such as smart that can query the status of SMART parameters from disk drives. - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module - will be called ide. + To compile this driver as a module, choose M here: the + module will be called ide. For further information, please read . @@ -83,9 +81,7 @@ config BLK_DEV_IDE performance, look for the hdparm package at . - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read and + To compile this driver as a module, choose M here and read . The module will be called ide-mod. Do not compile this driver as a module if your root file system (the one containing the directory /) is located on an IDE device. @@ -143,12 +139,12 @@ config BLK_DEV_IDEDISK the old hard disk driver instead, say Y. If you have an SCSI-only system, you can say N here. - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module - will be called ide-disk. Do not compile this driver as a module - if your root file system (the one containing the directory /) is - located on the IDE disk. If unsure, say Y. + To compile this driver as a module, choose M here: the + module will be called ide-disk. + Do not compile this driver as a module if your root file system + (the one containing the directory /) is located on the IDE disk. + + If unsure, say Y. config IDEDISK_MULTI_MODE bool "Use multi-mode by default" @@ -201,10 +197,8 @@ config BLK_DEV_IDECD with IDE/ATAPI CD-ROMs, so install LILO 16 or higher, available from . - If you want to compile the driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module - will be called ide-cd. + To compile this driver as a module, choose M here: the + module will be called ide-cd. config BLK_DEV_IDETAPE tristate "Include IDE/ATAPI TAPE support (EXPERIMENTAL)" @@ -226,10 +220,8 @@ config BLK_DEV_IDETAPE and files for usage information. - If you want to compile the driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module - will be called ide-tape.o. + To compile this driver as a module, choose M here: the + module will be called ide-tape. config BLK_DEV_IDEFLOPPY tristate "Include IDE/ATAPI FLOPPY support" @@ -250,10 +242,8 @@ config BLK_DEV_IDEFLOPPY other IDE devices, as "hdb" or "hdc", or something similar (check the boot messages with dmesg). - If you want to compile the driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module - will be called ide-floppy. + To compile this driver as a module, choose M here: the + module will be called ide-floppy. config BLK_DEV_IDESCSI tristate "SCSI emulation support" diff -prauN linux-2.6.0-test5/drivers/ide/ide-cd.c wli-2.6.0-test5-bk12-25/drivers/ide/ide-cd.c --- linux-2.6.0-test5/drivers/ide/ide-cd.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/ide/ide-cd.c 2003-09-25 19:15:56.000000000 -0700 @@ -2365,7 +2365,7 @@ static int cdrom_read_toc(ide_drive_t *d /* Now try to get the total cdrom capacity. */ stat = cdrom_get_last_written(cdi, (long *) &toc->capacity); - if (stat) + if (stat || !toc->capacity) stat = cdrom_read_capacity(drive, &toc->capacity, sense); if (stat) toc->capacity = 0x1fffff; @@ -2498,7 +2498,7 @@ static int ide_cdrom_packet(struct cdrom req.sense = cgc->sense; cgc->stat = cdrom_queue_packet_command(drive, &req); if (!cgc->stat) - cgc->buflen = req.data_len; + cgc->buflen -= req.data_len; return cgc->stat; } diff -prauN linux-2.6.0-test5/drivers/ide/ide-default.c wli-2.6.0-test5-bk12-25/drivers/ide/ide-default.c --- linux-2.6.0-test5/drivers/ide/ide-default.c 2003-09-08 12:50:41.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/ide/ide-default.c 2003-09-25 19:15:56.000000000 -0700 @@ -57,6 +57,14 @@ static int idedefault_attach (ide_drive_ "driver with ide.c\n", drive->name); return 1; } + + /* For the sake of the request layer, we must make sure we have a + * correct ready_stat value, that is 0 for ATAPI devices or we will + * fail any request like Power Management + */ + if (drive->media != ide_disk) + drive->ready_stat = 0; + return 0; } diff -prauN linux-2.6.0-test5/drivers/ide/ide-io.c wli-2.6.0-test5-bk12-25/drivers/ide/ide-io.c --- linux-2.6.0-test5/drivers/ide/ide-io.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/ide/ide-io.c 2003-09-25 19:15:56.000000000 -0700 @@ -928,13 +928,10 @@ queue_next: * * We let requests forced at head of queue with ide-preempt * though. I hope that doesn't happen too much, hopefully not - * unless the subdriver triggers such a thing in it's own PM + * unless the subdriver triggers such a thing in its own PM * state machine. */ if (drive->blocked && !blk_pm_request(rq) && !(rq->flags & REQ_PREEMPT)) { -#ifdef DEBUG_PM - printk("%s: a request made it's way while we are power managing...\n", drive->name); -#endif /* We clear busy, there should be no pending ATA command at this point. */ hwgroup->busy = 0; break; @@ -1417,8 +1414,9 @@ int ide_do_drive_cmd (ide_drive_t *drive } spin_lock_irqsave(&ide_lock, flags); - if (action == ide_preempt || action == ide_head_wait) { + if (action == ide_preempt) hwgroup->rq = NULL; + if (action == ide_preempt || action == ide_head_wait) { where = ELEVATOR_INSERT_FRONT; rq->flags |= REQ_PREEMPT; } diff -prauN linux-2.6.0-test5/drivers/ide/ide-tcq.c wli-2.6.0-test5-bk12-25/drivers/ide/ide-tcq.c --- linux-2.6.0-test5/drivers/ide/ide-tcq.c 2003-09-08 12:50:42.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/ide/ide-tcq.c 2003-09-25 19:15:56.000000000 -0700 @@ -596,7 +596,7 @@ static int ide_enable_queued(ide_drive_t * enable block tagging */ if (!blk_queue_tagged(drive->queue)) - blk_queue_init_tags(drive->queue, IDE_MAX_TAG); + blk_queue_init_tags(drive->queue, IDE_MAX_TAG, NULL); /* * check auto-poll support diff -prauN linux-2.6.0-test5/drivers/ieee1394/Kconfig wli-2.6.0-test5-bk12-25/drivers/ieee1394/Kconfig --- linux-2.6.0-test5/drivers/ieee1394/Kconfig 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/ieee1394/Kconfig 2003-09-25 19:15:56.000000000 -0700 @@ -15,10 +15,8 @@ config IEEE1394 is the core support only, you will also need to select a driver for your IEEE 1394 adapter. - 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 . The module - will be called ieee1394. + To compile this driver as a module, choose M here: the + module will be called ieee1394. comment "Subsystem Options" depends on IEEE1394 @@ -64,10 +62,8 @@ config IEEE1394_PCILYNX Instruments PCILynx chip. Note: this driver is written for revision 2 of this chip and may not work with revision 0. - 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 . The module - will be called pcilynx. + To compile this driver as a module, choose M here: the + module will be called pcilynx. # Non-maintained pcilynx options # if [ "$CONFIG_IEEE1394_PCILYNX" != "n" ]; then @@ -84,10 +80,8 @@ config IEEE1394_OHCI1394 use one of these chipsets. It should work with any OHCI-1394 compliant card, however. - 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 . The module - will be called ohci1394. + To compile this driver as a module, choose M here: the + module will be called ohci1394. comment "Protocol Drivers" depends on IEEE1394 @@ -128,10 +122,8 @@ config IEEE1394_DV1394 The user-space API for dv1394 is documented in dv1394.h. - 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 . The module - will be called dv1394. + To compile this driver as a module, choose M here: the + module will be called dv1394. config IEEE1394_RAWIO tristate "Raw IEEE1394 I/O support" @@ -142,10 +134,8 @@ config IEEE1394_RAWIO direct communication of user programs with the IEEE 1394 bus and thus with the attached peripherals. - 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 . The module - will be called raw1394. + To compile this driver as a module, choose M here: the + module will be called raw1394. config IEEE1394_CMP tristate "IEC61883-1 Plug support" @@ -154,10 +144,8 @@ config IEEE1394_CMP This option enables the Connection Management Procedures (IEC61883-1) driver, which implements input and output plugs. - 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 . The module - will be called amdtp. + To compile this driver as a module, choose M here: the + module will be called cmp. config IEEE1394_AMDTP tristate "IEC61883-6 (Audio transmission) support" @@ -169,9 +157,7 @@ config IEEE1394_AMDTP The userspace interface is documented in amdtp.h. - 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 . The module - will be called amdtp. + To compile this driver as a module, choose M here: the + module will be called amdtp. endmenu diff -prauN linux-2.6.0-test5/drivers/ieee1394/nodemgr.c wli-2.6.0-test5-bk12-25/drivers/ieee1394/nodemgr.c --- linux-2.6.0-test5/drivers/ieee1394/nodemgr.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/ieee1394/nodemgr.c 2003-09-25 19:15:56.000000000 -0700 @@ -1744,8 +1744,7 @@ static void nodemgr_add_host(struct hpsb sprintf(hi->daemon_name, "knodemgrd_%d", host->id); - hi->pid = kernel_thread(nodemgr_host_thread, hi, - CLONE_FS | CLONE_FILES | CLONE_SIGHAND); + hi->pid = kernel_thread(nodemgr_host_thread, hi, CLONE_KERNEL); if (hi->pid < 0) { HPSB_ERR ("NodeMgr: failed to start %s thread for %s", diff -prauN linux-2.6.0-test5/drivers/ieee1394/oui.db wli-2.6.0-test5-bk12-25/drivers/ieee1394/oui.db --- linux-2.6.0-test5/drivers/ieee1394/oui.db 2003-09-08 12:49:55.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/ieee1394/oui.db 2003-09-25 19:15:56.000000000 -0700 @@ -1612,7 +1612,7 @@ 000658 Helmut Fischer GmbH & Co. KG 000659 EAL (Apeldoorn) B.V. 00065A Strix Systems -00065B Dell Computer Corp. +00065B Dell Inc. 00065C Malachite Technologies, Inc. 00065D Heidelberg Web Systems 00065E Photuris, Inc. @@ -3965,7 +3965,7 @@ 00B0C2 Cisco Systems, Inc. 00B0C7 Tellabs Operations, Inc. 00B0CE TECHNOLOGY RESCUE -00B0D0 Dell Computer Corp. +00B0D0 Dell Inc. 00B0DB Nextcell, Inc. 00B0DF Reliable Data Technology, Inc. 00B0E7 British Federal Ltd. @@ -4054,7 +4054,7 @@ 00C04C DEPARTMENT OF FOREIGN AFFAIRS 00C04D MITEC, INC. 00C04E COMTROL CORPORATION -00C04F DELL COMPUTER CORPORATION +00C04F Dell Inc. 00C050 TOYO DENKI SEIZO K.K. 00C051 ADVANCED INTEGRATION RESEARCH 00C052 BURR-BROWN diff -prauN linux-2.6.0-test5/drivers/input/Kconfig wli-2.6.0-test5-bk12-25/drivers/input/Kconfig --- linux-2.6.0-test5/drivers/input/Kconfig 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/input/Kconfig 2003-09-25 19:15:56.000000000 -0700 @@ -19,10 +19,8 @@ config INPUT If unsure, say Y. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called input. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called input. comment "Userland interfaces" @@ -39,10 +37,8 @@ config INPUT_MOUSEDEV If unsure, say Y. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called mousedev. If you want to compile it as - a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called mousedev. config INPUT_MOUSEDEV_PSAUX bool "Provide legacy /dev/psaux device" if EMBEDDED @@ -80,10 +76,8 @@ config INPUT_JOYDEV More information is available: - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called joydev. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called joydev. config INPUT_TSDEV tristate "Touchscreen interface" @@ -95,10 +89,8 @@ config INPUT_TSDEV If unsure, say N. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called tsdev. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called tsdev. config INPUT_TSDEV_SCREEN_X int "Horizontal screen resolution" @@ -117,10 +109,8 @@ config INPUT_EVDEV Say Y here if you want your input device events be accessible under char device 13:64+ - /dev/input/eventX in a generic way. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called evdev. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called evdev. config INPUT_EVBUG tristate "Event debugging" @@ -134,10 +124,8 @@ config INPUT_EVBUG If unsure, say N. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called joydev. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called evbug. comment "Input I/O drivers" diff -prauN linux-2.6.0-test5/drivers/input/evdev.c wli-2.6.0-test5-bk12-25/drivers/input/evdev.c --- linux-2.6.0-test5/drivers/input/evdev.c 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/input/evdev.c 2003-09-25 19:15:56.000000000 -0700 @@ -208,7 +208,7 @@ static int evdev_ioctl(struct inode *ino struct evdev *evdev = list->evdev; struct input_dev *dev = evdev->handle.dev; struct input_absinfo abs; - int i, t, u; + int i, t, u, v; if (!evdev->exist) return -ENODEV; @@ -239,14 +239,12 @@ static int evdev_ioctl(struct inode *ino case EVIOCSKEYCODE: if (get_user(t, ((int *) arg) + 0)) return -EFAULT; if (t < 0 || t > dev->keycodemax || !dev->keycodesize) return -EINVAL; + if (get_user(v, ((int *) arg) + 1)) return -EFAULT; u = INPUT_KEYCODE(dev, t); - if (get_user(INPUT_KEYCODE(dev, t), ((int *) arg) + 1)) return -EFAULT; - - for (i = 0; i < dev->keycodemax; i++) - if(INPUT_KEYCODE(dev, t) == u) break; + INPUT_KEYCODE(dev, t) = v; + for (i = 0; i < dev->keycodemax; i++) if (v == u) break; if (i == dev->keycodemax) clear_bit(u, dev->keybit); - set_bit(INPUT_KEYCODE(dev, t), dev->keybit); - + set_bit(v, dev->keybit); return 0; case EVIOCSFF: diff -prauN linux-2.6.0-test5/drivers/input/gameport/Kconfig wli-2.6.0-test5-bk12-25/drivers/input/gameport/Kconfig --- linux-2.6.0-test5/drivers/input/gameport/Kconfig 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/input/gameport/Kconfig 2003-09-25 19:15:56.000000000 -0700 @@ -16,10 +16,8 @@ config GAMEPORT If unsure, say Y. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called gameport. If you want to compile it as - a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called gameport. config SOUND_GAMEPORT tristate @@ -34,10 +32,8 @@ config GAMEPORT_NS558 If unsure, say Y. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called ns558. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called ns558. config GAMEPORT_L4 tristate "PDPI Lightning 4 gamecard support" @@ -45,10 +41,8 @@ config GAMEPORT_L4 help Say Y here if you have a PDPI Lightning 4 gamecard. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called lightning. If you want to compile it as - a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called lightning. config GAMEPORT_EMU10K1 tristate "SB Live and Audigy gameport support" @@ -57,10 +51,8 @@ config GAMEPORT_EMU10K1 Say Y here if you have a SoundBlaster Live! or SoundBlaster Audigy card and want to use its gameport. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called emu10k1-gp. If you want to compile it as - a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called emu10k1-gp. config GAMEPORT_VORTEX tristate "Aureal Vortex, Vortex 2 gameport support" @@ -69,10 +61,8 @@ config GAMEPORT_VORTEX Say Y here if you have an Aureal Vortex 1 or 2 card and want to use its gameport. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called vortex. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called vortex. config GAMEPORT_FM801 tristate "ForteMedia FM801 gameport support" diff -prauN linux-2.6.0-test5/drivers/input/input.c wli-2.6.0-test5-bk12-25/drivers/input/input.c --- linux-2.6.0-test5/drivers/input/input.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/input/input.c 2003-09-25 19:15:56.000000000 -0700 @@ -426,8 +426,10 @@ void input_register_device(struct input_ init_timer(&dev->timer); dev->timer.data = (long) dev; dev->timer.function = input_repeat_key; - dev->rep[REP_DELAY] = HZ/4; - dev->rep[REP_PERIOD] = HZ/33; + if (!dev->rep[REP_DELAY]) + dev->rep[REP_DELAY] = HZ/4; + if (!dev->rep[REP_PERIOD]) + dev->rep[REP_PERIOD] = HZ/33; INIT_LIST_HEAD(&dev->h_list); list_add_tail(&dev->node, &input_dev_list); @@ -676,20 +678,10 @@ static int input_handlers_read(char *buf return (count > cnt) ? cnt : count; } -#endif - -struct class input_class = { - .name = "input", -}; - -static int __init input_init(void) +static int __init input_proc_init(void) { struct proc_dir_entry *entry; - int retval = -ENOMEM; - - class_register(&input_class); -#ifdef CONFIG_PROC_FS proc_bus_input_dir = proc_mkdir("input", proc_bus); if (proc_bus_input_dir == NULL) return -ENOMEM; @@ -708,7 +700,22 @@ static int __init input_init(void) return -ENOMEM; } entry->owner = THIS_MODULE; + return 0; +} +#else /* !CONFIG_PROC_FS */ +static inline int input_proc_init(void) { return 0; } #endif + +struct class input_class = { + .name = "input", +}; + +static int __init input_init(void) +{ + int retval = -ENOMEM; + + class_register(&input_class); + input_proc_init(); retval = register_chrdev(INPUT_MAJOR, "input", &input_fops); if (retval) { printk(KERN_ERR "input: unable to register char major %d", INPUT_MAJOR); @@ -730,11 +737,10 @@ static int __init input_init(void) static void __exit input_exit(void) { -#ifdef CONFIG_PROC_FS remove_proc_entry("devices", proc_bus_input_dir); remove_proc_entry("handlers", proc_bus_input_dir); remove_proc_entry("input", proc_bus); -#endif + devfs_remove("input"); unregister_chrdev(INPUT_MAJOR, "input"); class_unregister(&input_class); diff -prauN linux-2.6.0-test5/drivers/input/joystick/Kconfig wli-2.6.0-test5-bk12-25/drivers/input/joystick/Kconfig --- linux-2.6.0-test5/drivers/input/joystick/Kconfig 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/input/joystick/Kconfig 2003-09-25 19:15:56.000000000 -0700 @@ -27,10 +27,8 @@ config JOYSTICK_ANALOG Please read the file which contains more information. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called analog. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called analog. config JOYSTICK_A3D tristate "Assasin 3D and MadCatz Panther devices" @@ -39,10 +37,8 @@ config JOYSTICK_A3D Say Y here if you have an FPGaming or MadCatz controller using the A3D protocol over the PC gameport. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called a3d. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called a3d. config JOYSTICK_ADI tristate "Logitech ADI digital joysticks and gamepads" @@ -51,10 +47,8 @@ config JOYSTICK_ADI Say Y here if you have a Logitech controller using the ADI protocol over the PC gameport. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called adi. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called adi. config JOYSTICK_COBRA tristate "Creative Labs Blaster Cobra gamepad" @@ -62,10 +56,8 @@ config JOYSTICK_COBRA help Say Y here if you have a Creative Labs Blaster Cobra gamepad. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called cobra. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called cobra. config JOYSTICK_GF2K tristate "Genius Flight2000 Digital joysticks and gamepads" @@ -74,10 +66,8 @@ config JOYSTICK_GF2K Say Y here if you have a Genius Flight2000 or MaxFighter digitally communicating joystick or gamepad. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called gf2k. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called gf2k. config JOYSTICK_GRIP tristate "Gravis GrIP joysticks and gamepads" @@ -86,10 +76,8 @@ config JOYSTICK_GRIP Say Y here if you have a Gravis controller using the GrIP protocol over the PC gameport. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called grip. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called grip. config JOYSTICK_GRIP_MP tristate "Gravis GrIP MultiPort" @@ -98,10 +86,8 @@ config JOYSTICK_GRIP_MP Say Y here if you have the original Gravis GrIP MultiPort, a hub that connects to the gameport and you connect gamepads to it. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called grip_mp. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called grip_mp. config JOYSTICK_GUILLEMOT tristate "Guillemot joysticks and gamepads" @@ -110,10 +96,8 @@ config JOYSTICK_GUILLEMOT Say Y here if you have a Guillemot joystick using a digital protocol over the PC gameport. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called guillemot. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called guillemot. config JOYSTICK_INTERACT tristate "InterAct digital joysticks and gamepads" @@ -122,10 +106,8 @@ config JOYSTICK_INTERACT Say Y here if you have an InterAct gameport or joystick communicating digitally over the gameport. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called interact. If you want to compile it as - a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called interact. config JOYSTICK_SIDEWINDER tristate "Microsoft SideWinder digital joysticks and gamepads" @@ -134,10 +116,8 @@ config JOYSTICK_SIDEWINDER Say Y here if you have a Microsoft controller using the Digital Overdrive protocol over PC gameport. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called sidewinder. If you want to compile it - as a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called sidewinder. config JOYSTICK_TMDC tristate "ThrustMaster DirectConnect joysticks and gamepads" @@ -146,85 +126,77 @@ config JOYSTICK_TMDC Say Y here if you have a ThrustMaster controller using the DirectConnect (BSP) protocol over the PC gameport. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called tmdc. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called tmdc. source "drivers/input/joystick/iforce/Kconfig" config JOYSTICK_WARRIOR tristate "Logitech WingMan Warrior joystick" - depends on INPUT && INPUT_JOYSTICK && SERIO + depends on INPUT && INPUT_JOYSTICK + select SERIO help Say Y here if you have a Logitech WingMan Warrior joystick connected to your computer's serial port. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called warrior. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called warrior. config JOYSTICK_MAGELLAN tristate "LogiCad3d Magellan/SpaceMouse 6dof controllers" - depends on INPUT && INPUT_JOYSTICK && SERIO + depends on INPUT && INPUT_JOYSTICK + select SERIO help Say Y here if you have a Magellan or Space Mouse 6DOF controller connected to your computer's serial port. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called magellan. If you want to compile it as - a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called magellan. config JOYSTICK_SPACEORB tristate "SpaceTec SpaceOrb/Avenger 6dof controllers" - depends on INPUT && INPUT_JOYSTICK && SERIO + depends on INPUT && INPUT_JOYSTICK + select SERIO help Say Y here if you have a SpaceOrb 360 or SpaceBall Avenger 6DOF controller connected to your computer's serial port. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called spaceorb. If you want to compile it as - a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called spaceorb. config JOYSTICK_SPACEBALL tristate "SpaceTec SpaceBall 6dof controllers" - depends on INPUT && INPUT_JOYSTICK && SERIO + depends on INPUT && INPUT_JOYSTICK + select SERIO help Say Y here if you have a SpaceTec SpaceBall 2003/3003/4000 FLX controller connected to your computer's serial port. For the SpaceBall 4000 USB model, use the USB HID driver. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called spaceball. If you want to compile it as - a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called spaceball. config JOYSTICK_STINGER tristate "Gravis Stinger gamepad" - depends on INPUT && INPUT_JOYSTICK && SERIO + depends on INPUT && INPUT_JOYSTICK + select SERIO help Say Y here if you have a Gravis Stinger connected to one of your serial ports. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called stinger. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called stinger. config JOYSTICK_TWIDDLER tristate "Twiddler as a joystick" - depends on INPUT && INPUT_JOYSTICK && SERIO + depends on INPUT && INPUT_JOYSTICK + select SERIO help Say Y here if you have a Handykey Twiddler connected to your computer's serial port and want to use it as a joystick. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called twidjoy. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called twidjoy. config JOYSTICK_DB9 tristate "Multisystem, Sega Genesis, Saturn joysticks and gamepads" @@ -236,10 +208,8 @@ config JOYSTICK_DB9 For more information on how to use the driver please read . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called db9. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called db9. config JOYSTICK_GAMECON tristate "Multisystem, NES, SNES, N64, PSX joysticks and gamepads" @@ -252,10 +222,8 @@ config JOYSTICK_GAMECON For more information on how to use the driver please read . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called gamecon. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called gamecon. config JOYSTICK_TURBOGRAFX tristate "Multisystem joysticks via TurboGraFX device" @@ -266,10 +234,8 @@ config JOYSTICK_TURBOGRAFX Amstrad CPC joystick. For more information on how to use the driver please read . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called turbografx. If you want to compile it - as a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called turbografx. config JOYSTICK_AMIGA tristate "Amiga joysticks" @@ -278,10 +244,8 @@ config JOYSTICK_AMIGA Say Y here if you have an Amiga with a digital joystick connected to it. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called amijoy. If you want to compile it as - a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called amijoy. config INPUT_JOYDUMP tristate "Gameport data dumper" @@ -291,8 +255,6 @@ config INPUT_JOYDUMP log for debugging purposes. Say N if you are making a production configuration or aren't sure. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called joydump. If you want to compile it as - a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called joydump. diff -prauN linux-2.6.0-test5/drivers/input/joystick/db9.c wli-2.6.0-test5-bk12-25/drivers/input/joystick/db9.c --- linux-2.6.0-test5/drivers/input/joystick/db9.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/input/joystick/db9.c 2003-09-25 19:15:56.000000000 -0700 @@ -55,7 +55,9 @@ MODULE_PARM(db9_3, "2i"); #define DB9_MULTI_0802 0x08 #define DB9_MULTI_0802_2 0x09 #define DB9_CD32_PAD 0x0A -#define DB9_MAX_PAD 0x0B +#define DB9_SATURN_DPP 0x0B +#define DB9_SATURN_DPP_2 0x0C +#define DB9_MAX_PAD 0x0D #define DB9_UP 0x01 #define DB9_DOWN 0x02 @@ -69,10 +71,7 @@ MODULE_PARM(db9_3, "2i"); #define DB9_NORMAL 0x0a #define DB9_NOSELECT 0x08 -#define DB9_SATURN0 0x00 -#define DB9_SATURN1 0x02 -#define DB9_SATURN2 0x04 -#define DB9_SATURN3 0x06 +#define DB9_MAX_DEVICES 2 #define DB9_GENESIS6_DELAY 14 #define DB9_REFRESH_TIME HZ/100 @@ -82,7 +81,7 @@ static int db9_2[] __initdata = { -1, 0 static int db9_3[] __initdata = { -1, 0 }; struct db9 { - struct input_dev dev[2]; + struct input_dev dev[DB9_MAX_DEVICES]; struct timer_list timer; struct pardevice *pd; int mode; @@ -96,12 +95,247 @@ static short db9_multi_btn[] = { BTN_TRI static short db9_genesis_btn[] = { BTN_START, BTN_A, BTN_B, BTN_C, BTN_X, BTN_Y, BTN_Z, BTN_MODE }; static short db9_cd32_btn[] = { BTN_A, BTN_B, BTN_C, BTN_X, BTN_Y, BTN_Z, BTN_TL, BTN_TR, BTN_START }; -static char db9_buttons[DB9_MAX_PAD] = { 0, 1, 2, 4, 0, 6, 8, 8, 1, 1, 7 }; +static char db9_buttons[DB9_MAX_PAD] = { 0, 1, 2, 4, 0, 6, 8, 9, 1, 1, 7, 9, 9 }; static short *db9_btn[DB9_MAX_PAD] = { NULL, db9_multi_btn, db9_multi_btn, db9_genesis_btn, NULL, db9_genesis_btn, - db9_genesis_btn, db9_cd32_btn, db9_multi_btn, db9_multi_btn, db9_cd32_btn }; + db9_genesis_btn, db9_cd32_btn, db9_multi_btn, db9_multi_btn, db9_cd32_btn, + db9_cd32_btn, db9_cd32_btn }; static char *db9_name[DB9_MAX_PAD] = { NULL, "Multisystem joystick", "Multisystem joystick (2 fire)", "Genesis pad", NULL, "Genesis 5 pad", "Genesis 6 pad", "Saturn pad", "Multisystem (0.8.0.2) joystick", - "Multisystem (0.8.0.2-dual) joystick", "Amiga CD-32 pad" }; + "Multisystem (0.8.0.2-dual) joystick", "Amiga CD-32 pad", "Saturn dpp", "Saturn dpp dual" }; + +static const int db9_max_pads[DB9_MAX_PAD] = { 0, 1, 1, 1, 0, 1, 1, 6, 1, 2, 1, 6, 12 }; +static const int db9_num_axis[DB9_MAX_PAD] = { 0, 2, 2, 2, 0, 2, 2, 7, 2, 2, 2 ,7, 7 }; +static const short db9_abs[] = { ABS_X, ABS_Y, ABS_RX, ABS_RY, ABS_RZ, ABS_Z, ABS_HAT0X, ABS_HAT0Y, ABS_HAT1X, ABS_HAT1Y }; +static const int db9_bidirectional[DB9_MAX_PAD] = { 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0 }; +static const int db9_reverse[DB9_MAX_PAD] = { 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0 }; + +/* + * Saturn controllers + */ +#define DB9_SATURN_DELAY 300 +static const int db9_saturn_byte[] = { 1, 1, 1, 2, 2, 2, 2, 2, 1 }; +static const unsigned char db9_saturn_mask[] = { 0x04, 0x01, 0x02, 0x40, 0x20, 0x10, 0x08, 0x80, 0x08 }; + +/* + * db9_saturn_write_sub() writes 2 bit data. + */ +static void db9_saturn_write_sub(struct parport *port, int type, unsigned char data, int powered, int pwr_sub) +{ + unsigned char c; + + switch (type) { + case 1: /* DPP1 */ + c = 0x80 | 0x30 | (powered ? 0x08 : 0) | (pwr_sub ? 0x04 : 0) | data; + parport_write_data(port, c); + break; + case 2: /* DPP2 */ + c = 0x40 | data << 4 | (powered ? 0x08 : 0) | (pwr_sub ? 0x04 : 0) | 0x03; + parport_write_data(port, c); + break; + case 0: /* DB9 */ + c = ((((data & 2) ? 2 : 0) | ((data & 1) ? 4 : 0)) ^ 0x02) | !powered; + parport_write_control(port, c); + break; + } +} + +/* + * gc_saturn_read_sub() reads 4 bit data. + */ +static unsigned char db9_saturn_read_sub(struct parport *port, int type) +{ + unsigned char data; + + if (type) { + /* DPP */ + data = parport_read_status(port) ^ 0x80; + return (data & 0x80 ? 1 : 0) | (data & 0x40 ? 2 : 0) + | (data & 0x20 ? 4 : 0) | (data & 0x10 ? 8 : 0); + } else { + /* DB9 */ + data = parport_read_data(port) & 0x0f; + return (data & 0x8 ? 1 : 0) | (data & 0x4 ? 2 : 0) + | (data & 0x2 ? 4 : 0) | (data & 0x1 ? 8 : 0); + } +} + +/* + * db9_saturn_read_analog() sends clock and reads 8 bit data. + */ +static unsigned char db9_saturn_read_analog(struct parport *port, int type, int powered) +{ + unsigned char data; + + db9_saturn_write_sub(port, type, 0, powered, 0); + udelay(DB9_SATURN_DELAY); + data = db9_saturn_read_sub(port, type) << 4; + db9_saturn_write_sub(port, type, 2, powered, 0); + udelay(DB9_SATURN_DELAY); + data |= db9_saturn_read_sub(port, type); + return data; +} + +/* + * db9_saturn_read_packet() reads whole saturn packet at connector + * and returns device identifier code. + */ +static unsigned char db9_saturn_read_packet(struct parport *port, unsigned char *data, int type, int powered) +{ + int i, j; + unsigned char tmp; + + db9_saturn_write_sub(port, type, 3, powered, 0); + data[0] = db9_saturn_read_sub(port, type); + switch (data[0] & 0x0f) { + case 0xf: + /* 1111 no pad */ + return data[0] = 0xff; + case 0x4: case 0x4 | 0x8: + /* ?100 : digital controller */ + db9_saturn_write_sub(port, type, 0, powered, 1); + data[2] = db9_saturn_read_sub(port, type) << 4; + db9_saturn_write_sub(port, type, 2, powered, 1); + data[1] = db9_saturn_read_sub(port, type) << 4; + db9_saturn_write_sub(port, type, 1, powered, 1); + data[1] |= db9_saturn_read_sub(port, type); + db9_saturn_write_sub(port, type, 3, powered, 1); + /* data[2] |= db9_saturn_read_sub(port, type); */ + data[2] |= data[0]; + return data[0] = 0x02; + case 0x1: + /* 0001 : analog controller or multitap */ + db9_saturn_write_sub(port, type, 2, powered, 0); + udelay(DB9_SATURN_DELAY); + data[0] = db9_saturn_read_analog(port, type, powered); + if (data[0] != 0x41) { + /* read analog controller */ + for (i = 0; i < (data[0] & 0x0f); i++) + data[i + 1] = db9_saturn_read_analog(port, type, powered); + db9_saturn_write_sub(port, type, 3, powered, 0); + return data[0]; + } else { + /* read multitap */ + if (db9_saturn_read_analog(port, type, powered) != 0x60) + return data[0] = 0xff; + for (i = 0; i < 60; i += 10) { + data[i] = db9_saturn_read_analog(port, type, powered); + if (data[i] != 0xff) + /* read each pad */ + for (j = 0; j < (data[i] & 0x0f); j++) + data[i + j + 1] = db9_saturn_read_analog(port, type, powered); + } + db9_saturn_write_sub(port, type, 3, powered, 0); + return 0x41; + } + case 0x0: + /* 0000 : mouse */ + db9_saturn_write_sub(port, type, 2, powered, 0); + udelay(DB9_SATURN_DELAY); + tmp = db9_saturn_read_analog(port, type, powered); + if (tmp == 0xff) { + for (i = 0; i < 3; i++) + data[i + 1] = db9_saturn_read_analog(port, type, powered); + db9_saturn_write_sub(port, type, 3, powered, 0); + return data[0] = 0xe3; + } + default: + return data[0]; + } +} + +/* + * db9_saturn_report() analyzes packet and reports. + */ +static int db9_saturn_report(unsigned char id, unsigned char data[60], struct input_dev *dev, int n, int max_pads) +{ + int tmp, i, j; + + tmp = (id == 0x41) ? 60 : 10; + for (j = 0; (j < tmp) && (n < max_pads); j += 10, n++) { + switch (data[j]) { + case 0x16: /* multi controller (analog 4 axis) */ + input_report_abs(dev + n, db9_abs[5], data[j + 6]); + case 0x15: /* mission stick (analog 3 axis) */ + input_report_abs(dev + n, db9_abs[3], data[j + 4]); + input_report_abs(dev + n, db9_abs[4], data[j + 5]); + case 0x13: /* racing controller (analog 1 axis) */ + input_report_abs(dev + n, db9_abs[2], data[j + 3]); + case 0x34: /* saturn keyboard (udlr ZXC ASD QE Esc) */ + case 0x02: /* digital pad (digital 2 axis + buttons) */ + input_report_abs(dev + n, db9_abs[0], !(data[j + 1] & 128) - !(data[j + 1] & 64)); + input_report_abs(dev + n, db9_abs[1], !(data[j + 1] & 32) - !(data[j + 1] & 16)); + for (i = 0; i < 9; i++) + input_report_key(dev + n, db9_cd32_btn[i], ~data[j + db9_saturn_byte[i]] & db9_saturn_mask[i]); + break; + case 0x19: /* mission stick x2 (analog 6 axis + buttons) */ + input_report_abs(dev + n, db9_abs[0], !(data[j + 1] & 128) - !(data[j + 1] & 64)); + input_report_abs(dev + n, db9_abs[1], !(data[j + 1] & 32) - !(data[j + 1] & 16)); + for (i = 0; i < 9; i++) + input_report_key(dev + n, db9_cd32_btn[i], ~data[j + db9_saturn_byte[i]] & db9_saturn_mask[i]); + input_report_abs(dev + n, db9_abs[2], data[j + 3]); + input_report_abs(dev + n, db9_abs[3], data[j + 4]); + input_report_abs(dev + n, db9_abs[4], data[j + 5]); + /* + input_report_abs(dev + n, db9_abs[8], (data[j + 6] & 128 ? 0 : 1) - (data[j + 6] & 64 ? 0 : 1)); + input_report_abs(dev + n, db9_abs[9], (data[j + 6] & 32 ? 0 : 1) - (data[j + 6] & 16 ? 0 : 1)); + */ + input_report_abs(dev + n, db9_abs[6], data[j + 7]); + input_report_abs(dev + n, db9_abs[7], data[j + 8]); + input_report_abs(dev + n, db9_abs[5], data[j + 9]); + break; + case 0xd3: /* sankyo ff (analog 1 axis + stop btn) */ + input_report_key(dev + n, BTN_A, data[j + 3] & 0x80); + input_report_abs(dev + n, db9_abs[2], data[j + 3] & 0x7f); + break; + case 0xe3: /* shuttle mouse (analog 2 axis + buttons. signed value) */ + input_report_key(dev + n, BTN_START, data[j + 1] & 0x08); + input_report_key(dev + n, BTN_A, data[j + 1] & 0x04); + input_report_key(dev + n, BTN_C, data[j + 1] & 0x02); + input_report_key(dev + n, BTN_B, data[j + 1] & 0x01); + input_report_abs(dev + n, db9_abs[2], data[j + 2] ^ 0x80); + input_report_abs(dev + n, db9_abs[3], (0xff-(data[j + 3] ^ 0x80))+1); /* */ + break; + case 0xff: + default: /* no pad */ + input_report_abs(dev + n, db9_abs[0], 0); + input_report_abs(dev + n, db9_abs[1], 0); + for (i = 0; i < 9; i++) + input_report_key(dev + n, db9_cd32_btn[i], 0); + break; + } + } + return n; +} + +static int db9_saturn(int mode, struct parport *port, struct input_dev *dev) +{ + unsigned char id, data[60]; + int type, n, max_pads; + int tmp, i; + + switch (mode) { + case DB9_SATURN_PAD: + type = 0; + n = 1; + break; + case DB9_SATURN_DPP: + type = 1; + n = 1; + break; + case DB9_SATURN_DPP_2: + type = 1; + n = 2; + break; + default: + return -1; + } + max_pads = min(db9_max_pads[mode], DB9_MAX_DEVICES); + for (tmp = 0, i = 0; i < n; i++) { + id = db9_saturn_read_packet(port, data, type + i, 1); + tmp = db9_saturn_report(id, data, dev, tmp, max_pads); + } + return 0; +} static void db9_timer(unsigned long private) { @@ -222,28 +456,10 @@ static void db9_timer(unsigned long priv break; case DB9_SATURN_PAD: + case DB9_SATURN_DPP: + case DB9_SATURN_DPP_2: - parport_write_control(port, DB9_SATURN0); - data = parport_read_data(port); - - input_report_key(dev, BTN_Y, ~data & DB9_LEFT); - input_report_key(dev, BTN_Z, ~data & DB9_DOWN); - input_report_key(dev, BTN_TL, ~data & DB9_UP); - input_report_key(dev, BTN_TR, ~data & DB9_RIGHT); - - parport_write_control(port, DB9_SATURN2); - data = parport_read_data(port); - - input_report_abs(dev, ABS_X, (data & DB9_RIGHT ? 0 : 1) - (data & DB9_LEFT ? 0 : 1)); - input_report_abs(dev, ABS_Y, (data & DB9_DOWN ? 0 : 1) - (data & DB9_UP ? 0 : 1)); - - parport_write_control(port, DB9_NORMAL); - data = parport_read_data(port); - - input_report_key(dev, BTN_A, ~data & DB9_LEFT); - input_report_key(dev, BTN_B, ~data & DB9_UP); - input_report_key(dev, BTN_C, ~data & DB9_DOWN); - input_report_key(dev, BTN_X, ~data & DB9_RIGHT); + db9_saturn(db9->mode, port, dev); break; case DB9_CD32_PAD: @@ -279,8 +495,10 @@ static int db9_open(struct input_dev *de if (!db9->used++) { parport_claim(db9->pd); parport_write_data(port, 0xff); - parport_data_reverse(port); - parport_write_control(port, DB9_NORMAL); + if (db9_reverse[db9->mode]) { + parport_data_reverse(port); + parport_write_control(port, DB9_NORMAL); + } mod_timer(&db9->timer, jiffies + DB9_REFRESH_TIME); } @@ -321,11 +539,13 @@ static struct db9 __init *db9_probe(int return NULL; } - if (!(pp->modes & PARPORT_MODE_TRISTATE) && config[1] != DB9_MULTI_0802) { - printk(KERN_ERR "db9.c: specified parport is not bidirectional\n"); - return NULL; + if (db9_bidirectional[config[1]]) { + if (!(pp->modes & PARPORT_MODE_TRISTATE)) { + printk(KERN_ERR "db9.c: specified parport is not bidirectional\n"); + return NULL; + } } - + if (!(db9 = kmalloc(sizeof(struct db9), GFP_KERNEL))) return NULL; memset(db9, 0, sizeof(struct db9)); @@ -343,7 +563,7 @@ static struct db9 __init *db9_probe(int return NULL; } - for (i = 0; i < 1 + (db9->mode == DB9_MULTI_0802_2); i++) { + for (i = 0; i < (min(db9_max_pads[db9->mode], DB9_MAX_DEVICES)); i++) { sprintf(db9->phys[i], "%s/input%d", db9->pd->port->name, i); @@ -359,14 +579,19 @@ static struct db9 __init *db9_probe(int db9->dev[i].id.version = 0x0100; db9->dev[i].evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); - db9->dev[i].absbit[0] = BIT(ABS_X) | BIT(ABS_Y); - for (j = 0; j < db9_buttons[db9->mode]; j++) set_bit(db9_btn[db9->mode][j], db9->dev[i].keybit); - - db9->dev[i].absmin[ABS_X] = -1; db9->dev[i].absmax[ABS_X] = 1; - db9->dev[i].absmin[ABS_Y] = -1; db9->dev[i].absmax[ABS_Y] = 1; - + for (j = 0; j < db9_num_axis[db9->mode]; j++) { + set_bit(db9_abs[j], db9->dev[i].absbit); + if (j < 2) { + db9->dev[i].absmin[db9_abs[j]] = -1; + db9->dev[i].absmax[db9_abs[j]] = 1; + } else { + db9->dev[i].absmin[db9_abs[j]] = 1; + db9->dev[i].absmax[db9_abs[j]] = 255; + db9->dev[i].absflat[db9_abs[j]] = 0; + } + } input_register_device(db9->dev + i); printk(KERN_INFO "input: %s on %s\n", db9->dev[i].name, db9->pd->port->name); } @@ -419,7 +644,7 @@ void __exit db9_exit(void) for (i = 0; i < 3; i++) if (db9_base[i]) { - for (j = 0; j < 1 + (db9_base[i]->mode == DB9_MULTI_0802_2); j++) + for (j = 0; j < min(db9_max_pads[db9_base[i]->mode], DB9_MAX_DEVICES); j++) input_unregister_device(db9_base[i]->dev + j); parport_unregister_device(db9_base[i]->pd); } diff -prauN linux-2.6.0-test5/drivers/input/joystick/iforce/Kconfig wli-2.6.0-test5-bk12-25/drivers/input/joystick/iforce/Kconfig --- linux-2.6.0-test5/drivers/input/joystick/iforce/Kconfig 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/input/joystick/iforce/Kconfig 2003-09-25 19:15:56.000000000 -0700 @@ -9,10 +9,8 @@ config JOYSTICK_IFORCE You also must choose at least one of the two options below. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called iforce. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called iforce. config JOYSTICK_IFORCE_USB bool "I-Force USB joysticks and wheels" diff -prauN linux-2.6.0-test5/drivers/input/joystick/iforce/iforce-packets.c wli-2.6.0-test5-bk12-25/drivers/input/joystick/iforce/iforce-packets.c --- linux-2.6.0-test5/drivers/input/joystick/iforce/iforce-packets.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/input/joystick/iforce/iforce-packets.c 2003-09-25 19:15:56.000000000 -0700 @@ -166,8 +166,7 @@ void iforce_process_packet(struct iforce iforce->expect_packet = 0; iforce->ecmd = cmd; memcpy(iforce->edata, data, IFORCE_MAX_LENGTH); - if (waitqueue_active(&iforce->wait)) - wake_up(&iforce->wait); + wake_up(&iforce->wait); } #endif @@ -264,7 +263,7 @@ int iforce_get_id_packet(struct iforce * set_current_state(TASK_INTERRUPTIBLE); add_wait_queue(&iforce->wait, &wait); - if (usb_submit_urb(iforce->ctrl, GFP_KERNEL)) { + if (usb_submit_urb(iforce->ctrl, GFP_ATOMIC)) { set_current_state(TASK_RUNNING); remove_wait_queue(&iforce->wait, &wait); return -1; diff -prauN linux-2.6.0-test5/drivers/input/joystick/iforce/iforce-usb.c wli-2.6.0-test5-bk12-25/drivers/input/joystick/iforce/iforce-usb.c --- linux-2.6.0-test5/drivers/input/joystick/iforce/iforce-usb.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/input/joystick/iforce/iforce-usb.c 2003-09-25 19:15:56.000000000 -0700 @@ -116,8 +116,7 @@ static void iforce_usb_out(struct urb *u iforce_usb_xmit(iforce); - if (waitqueue_active(&iforce->wait)) - wake_up(&iforce->wait); + wake_up(&iforce->wait); } static void iforce_usb_ctrl(struct urb *urb, struct pt_regs *regs) @@ -125,8 +124,7 @@ static void iforce_usb_ctrl(struct urb * struct iforce *iforce = urb->context; if (urb->status) return; iforce->ecmd = 0xff00 | urb->actual_length; - if (waitqueue_active(&iforce->wait)) - wake_up(&iforce->wait); + wake_up(&iforce->wait); } static int iforce_usb_probe(struct usb_interface *intf, diff -prauN linux-2.6.0-test5/drivers/input/keyboard/Kconfig wli-2.6.0-test5-bk12-25/drivers/input/keyboard/Kconfig --- linux-2.6.0-test5/drivers/input/keyboard/Kconfig 2003-09-08 12:50:32.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/input/keyboard/Kconfig 2003-09-25 19:15:56.000000000 -0700 @@ -14,7 +14,8 @@ config INPUT_KEYBOARD config KEYBOARD_ATKBD tristate "AT keyboard support" if EMBEDDED || !X86 default y - depends on INPUT && INPUT_KEYBOARD && SERIO + depends on INPUT && INPUT_KEYBOARD + select SERIO_I8042 help Say Y here if you want to use a standard AT or PS/2 keyboard. Usually you'll need this, unless you have a different type keyboard (USB, ADB @@ -23,48 +24,43 @@ config KEYBOARD_ATKBD If unsure, say Y. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called atkbd. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called atkbd. config KEYBOARD_SUNKBD tristate "Sun Type 4 and Type 5 keyboard support" - depends on INPUT && INPUT_KEYBOARD && SERIO + depends on INPUT && INPUT_KEYBOARD + select SERIO help Say Y here if you want to use a Sun Type 4 or Type 5 keyboard, connected either to the Sun keyboard connector or to an serial (RS-232) port via a simple adapter. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called sunkbd. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called sunkbd. config KEYBOARD_XTKBD tristate "XT Keyboard support" - depends on INPUT && INPUT_KEYBOARD && SERIO + depends on INPUT && INPUT_KEYBOARD + select SERIO help Say Y here if you want to use the old IBM PC/XT keyboard (or compatible) on your system. This is only possible with a parallel port keyboard adapter, you cannot connect it to the keyboard port on a PC that runs Linux. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called xtkbd. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called xtkbd. config KEYBOARD_NEWTON tristate "Newton keyboard" - depends on INPUT && INPUT_KEYBOARD && SERIO + depends on INPUT && INPUT_KEYBOARD + select SERIO help Say Y here if you have a Newton keyboard on a serial port. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called maple_keyb. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called newtonkbd. config KEYBOARD_MAPLE tristate "Maple bus keyboard support" @@ -73,10 +69,8 @@ config KEYBOARD_MAPLE Say Y here if you have a DreamCast console running Linux and have a keyboard attached to its Maple bus. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called maple_keyb. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called maple_keyb. config KEYBOARD_AMIGA tristate "Amiga keyboard" @@ -85,20 +79,17 @@ config KEYBOARD_AMIGA Say Y here if you are running Linux on any AMIGA and have a keyboard attached. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called amikbd. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called amikbd. config KEYBOARD_98KBD tristate "NEC PC-9800 Keyboard support" - depends on X86_PC9800 && INPUT && INPUT_KEYBOARD && SERIO + depends on X86_PC9800 && INPUT && INPUT_KEYBOARD + select SERIO help Say Y here if you want to use the NEC PC-9801/PC-9821 keyboard (or compatible) on your system. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called xtkbd.o. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called 98kbd. diff -prauN linux-2.6.0-test5/drivers/input/keyboard/atkbd.c wli-2.6.0-test5-bk12-25/drivers/input/keyboard/atkbd.c --- linux-2.6.0-test5/drivers/input/keyboard/atkbd.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/input/keyboard/atkbd.c 2003-09-25 19:15:56.000000000 -0700 @@ -18,6 +18,7 @@ #include #include #include +#include MODULE_AUTHOR("Vojtech Pavlik "); MODULE_DESCRIPTION("AT and PS/2 keyboard driver"); @@ -40,8 +41,8 @@ static int atkbd_reset = 1; static unsigned char atkbd_set2_keycode[512] = { 0, 67, 65, 63, 61, 59, 60, 88, 0, 68, 66, 64, 62, 15, 41, 85, 0, 56, 42,182, 29, 16, 2, 89, 0, 0, 44, 31, 30, 17, 3, 90, - 0, 46, 45, 32, 18, 5, 4, 91, 0, 57, 47, 33, 20, 19, 6, 0, - 0, 49, 48, 35, 34, 21, 7, 0, 0, 0, 50, 36, 22, 8, 9, 0, + 0, 46, 45, 32, 18, 5, 4, 91, 90, 57, 47, 33, 20, 19, 6, 0, + 91, 49, 48, 35, 34, 21, 7, 0, 0, 0, 50, 36, 22, 8, 9, 0, 0, 51, 37, 23, 24, 11, 10, 0, 0, 52, 53, 38, 39, 25, 12, 0, 122, 89, 40,120, 26, 13, 0, 0, 58, 54, 28, 27, 0, 43, 0, 0, 85, 86, 90, 91, 92, 93, 14, 94, 95, 79,183, 75, 71,121, 0,123, @@ -70,7 +71,7 @@ static unsigned char atkbd_set3_keycode[ 134, 46, 45, 32, 18, 5, 4, 63,135, 57, 47, 33, 20, 19, 6, 64, 136, 49, 48, 35, 34, 21, 7, 65,137,100, 50, 36, 22, 8, 9, 66, 125, 51, 37, 23, 24, 11, 10, 67,126, 52, 53, 38, 39, 25, 12, 68, - 113,114, 40, 84, 26, 13, 87, 99,100, 54, 28, 27, 43, 84, 88, 70, + 113,114, 40, 84, 26, 13, 87, 99, 97, 54, 28, 27, 43, 84, 88, 70, 108,105,119,103,111,107, 14,110, 0, 79,106, 75, 71,109,102,104, 82, 83, 80, 76, 77, 72, 69, 98, 0, 96, 81, 0, 78, 73, 55, 85, 89, 90, 91, 92, 74,185,184,182, 0, 0, 0,125,126,127,112, 0, @@ -87,10 +88,10 @@ static unsigned char atkbd_set3_keycode[ #define ATKBD_CMD_GSCANSET 0x11f0 #define ATKBD_CMD_SSCANSET 0x10f0 #define ATKBD_CMD_GETID 0x02f2 +#define ATKBD_CMD_SETREP 0x10f3 #define ATKBD_CMD_ENABLE 0x00f4 #define ATKBD_CMD_RESET_DIS 0x00f5 #define ATKBD_CMD_RESET_BAT 0x02ff -#define ATKBD_CMD_SETALL_MB 0x00f8 #define ATKBD_CMD_RESEND 0x00fe #define ATKBD_CMD_EX_ENABLE 0x10ea #define ATKBD_CMD_EX_SETLEDS 0x20eb @@ -114,12 +115,14 @@ struct atkbd { unsigned char keycode[512]; struct input_dev dev; struct serio *serio; + struct timer_list timer; char name[64]; char phys[32]; unsigned char cmdbuf[4]; unsigned char cmdcnt; unsigned char set; unsigned char release; + int lastkey; volatile signed char ack; unsigned char emul; unsigned short id; @@ -142,6 +145,7 @@ static irqreturn_t atkbd_interrupt(struc printk(KERN_DEBUG "atkbd.c: Received %02x flags %02x\n", data, flags); #endif +#if !defined(__i386__) && !defined (__x86_64__) if ((flags & (SERIO_FRAME | SERIO_PARITY)) && (~flags & SERIO_TIMEOUT) && !atkbd->resend && atkbd->write) { printk("atkbd.c: frame/parity error: %02x\n", flags); serio_write(serio, ATKBD_CMD_RESEND); @@ -151,6 +155,7 @@ static irqreturn_t atkbd_interrupt(struc if (!flags) atkbd->resend = 0; +#endif switch (code) { case ATKBD_RET_ACK: @@ -195,6 +200,15 @@ static irqreturn_t atkbd_interrupt(struc atkbd->set, code, serio->phys, atkbd->release ? "released" : "pressed"); break; default: +#if 0 + if (!atkbd->release) { + mod_timer(&atkbd->timer, + jiffies + (test_bit(atkbd->keycode[code], + atkbd->dev.key) ? HZ/33 : HZ/4) + HZ/100); + atkbd->lastkey = atkbd->keycode[code]; + } +#endif + input_regs(&atkbd->dev, regs); input_report_key(&atkbd->dev, atkbd->keycode[code], !atkbd->release); input_sync(&atkbd->dev); @@ -205,6 +219,13 @@ out: return IRQ_HANDLED; } +static void atkbd_force_key_up(unsigned long data) +{ + struct atkbd *atkbd = (void *) data; + input_report_key(&atkbd->dev, atkbd->lastkey, 0); + input_sync(&atkbd->dev); +} + /* * atkbd_sendbyte() sends a byte to the keyboard, and waits for * acknowledge. It doesn't handle resends according to the keyboard @@ -214,7 +235,7 @@ out: static int atkbd_sendbyte(struct atkbd *atkbd, unsigned char byte) { - int timeout = 10000; /* 100 msec */ + int timeout = 20000; /* 200 msec */ atkbd->ack = 0; #ifdef ATKBD_DEBUG @@ -322,6 +343,53 @@ static int atkbd_event(struct input_dev } /* + * atkbd_probe() probes for an AT keyboard on a serio port. + */ + +static int atkbd_probe(struct atkbd *atkbd) +{ + unsigned char param[2]; + +/* + * Some systems, where the bit-twiddling when testing the io-lines of the + * controller may confuse the keyboard need a full reset of the keyboard. On + * these systems the BIOS also usually doesn't do it for us. + */ + + if (atkbd_reset) + if (atkbd_command(atkbd, NULL, ATKBD_CMD_RESET_BAT)) + printk(KERN_WARNING "atkbd.c: keyboard reset failed on %s\n", atkbd->serio->phys); + +/* + * Then we check the keyboard ID. We should get 0xab83 under normal conditions. + * Some keyboards report different values, but the first byte is always 0xab or + * 0xac. Some old AT keyboards don't report anything. If a mouse is connected, this + * should make sure we don't try to set the LEDs on it. + */ + + if (atkbd_command(atkbd, param, ATKBD_CMD_GETID)) { + +/* + * If the get ID command failed, we check if we can at least set the LEDs on + * the keyboard. This should work on every keyboard out there. It also turns + * the LEDs off, which we want anyway. + */ + param[0] = 0; + if (atkbd_command(atkbd, param, ATKBD_CMD_SETLEDS)) + return -1; + atkbd->id = 0xabba; + return 0; + } + + if (param[0] != 0xab && param[0] != 0xac) + return -1; + atkbd->id = (param[0] << 8) | param[1]; + + + return 0; +} + +/* * atkbd_set_3 checks if a keyboard has a working Set 3 support, and * sets it into that. Unfortunately there are keyboards that can be switched * to Set 3, but don't work well in that (BTC Multimedia ...) @@ -355,75 +423,26 @@ static int atkbd_set_3(struct atkbd *atk return 4; } -/* - * Try to set the set we want. - */ + if (atkbd_set != 3) + return 2; - param[0] = atkbd_set; + param[0] = 3; if (atkbd_command(atkbd, param, ATKBD_CMD_SSCANSET)) return 2; -/* - * Read set number. Beware here. Some keyboards always send '2' - * or some other number regardless into what mode they have been - * attempted to be set. Other keyboards treat the '0' command as - * 'set to set 0', and not 'report current set' as they should. - * In that case we time out, and return 2. - */ - param[0] = 0; if (atkbd_command(atkbd, param, ATKBD_CMD_GSCANSET)) return 2; -/* - * Here we return the set number the keyboard reports about - * itself. - */ + if (param[0] != 3) + return 2; - return (param[0] == 3) ? 3 : 2; + return 3; } -/* - * atkbd_probe() probes for an AT keyboard on a serio port. - */ - -static int atkbd_probe(struct atkbd *atkbd) +static int atkbd_enable(struct atkbd *atkbd) { - unsigned char param[2]; - -/* - * Some systems, where the bit-twiddling when testing the io-lines of the - * controller may confuse the keyboard need a full reset of the keyboard. On - * these systems the BIOS also usually doesn't do it for us. - */ - - if (atkbd_reset) - if (atkbd_command(atkbd, NULL, ATKBD_CMD_RESET_BAT)) - printk(KERN_WARNING "atkbd.c: keyboard reset failed on %s\n", atkbd->serio->phys); - -/* - * Then we check the keyboard ID. We should get 0xab83 under normal conditions. - * Some keyboards report different values, but the first byte is always 0xab or - * 0xac. Some old AT keyboards don't report anything. - */ - - if (atkbd_command(atkbd, param, ATKBD_CMD_GETID)) { - -/* - * If the get ID command failed, we check if we can at least set the LEDs on - * the keyboard. This should work on every keyboard out there. It also turns - * the LEDs off, which we want anyway. - */ - param[0] = 0; - if (atkbd_command(atkbd, param, ATKBD_CMD_SETLEDS)) - return -1; - atkbd->id = 0xabba; - return 0; - } - - if (param[0] != 0xab && param[0] != 0xac) - return -1; - atkbd->id = (param[0] << 8) | param[1]; + unsigned char param[1]; /* * Set the LEDs to a defined state. @@ -434,21 +453,22 @@ static int atkbd_probe(struct atkbd *atk return -1; /* - * Disable autorepeat. We don't need it, as we do it in software anyway, - * because that way can get faster repeat, and have less system load (less - * accesses to the slow ISA hardware). If this fails, we don't care, and will - * just ignore the repeated keys. + * Set autorepeat to fastest possible. */ - atkbd_command(atkbd, NULL, ATKBD_CMD_SETALL_MB); + param[0] = 0; + if (atkbd_command(atkbd, param, ATKBD_CMD_SETREP)) + return -1; /* - * Last, we enable the keyboard to make sure that we get keypresses from it. + * Enable the keyboard to receive keystrokes. */ - if (atkbd_command(atkbd, NULL, ATKBD_CMD_ENABLE)) + if (atkbd_command(atkbd, NULL, ATKBD_CMD_ENABLE)) { printk(KERN_ERR "atkbd.c: Failed to enable keyboard on %s\n", atkbd->serio->phys); + return -1; + } return 0; } @@ -505,6 +525,9 @@ static void atkbd_connect(struct serio * atkbd->dev.ledbit[0] = BIT(LED_NUML) | BIT(LED_CAPSL) | BIT(LED_SCROLLL); } else atkbd->dev.evbit[0] = BIT(EV_KEY) | BIT(EV_REP); + atkbd->dev.rep[REP_DELAY] = HZ/4 + HZ/50; + atkbd->dev.rep[REP_PERIOD] = HZ/33; + atkbd->serio = serio; init_input_dev(&atkbd->dev); @@ -517,6 +540,10 @@ static void atkbd_connect(struct serio * serio->private = atkbd; + init_timer(&atkbd->timer); + atkbd->timer.data = (long) atkbd; + atkbd->timer.function = atkbd_force_key_up; + if (serio_open(serio, dev)) { kfree(atkbd); return; @@ -531,6 +558,7 @@ static void atkbd_connect(struct serio * } atkbd->set = atkbd_set_3(atkbd); + atkbd_enable(atkbd); } else { atkbd->set = 2; diff -prauN linux-2.6.0-test5/drivers/input/misc/Kconfig wli-2.6.0-test5-bk12-25/drivers/input/misc/Kconfig --- linux-2.6.0-test5/drivers/input/misc/Kconfig 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/input/misc/Kconfig 2003-09-25 19:15:56.000000000 -0700 @@ -21,10 +21,8 @@ config INPUT_PCSPKR If unsure, say Y. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called pcspkr. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called pcspkr. config INPUT_SPARCSPKR tristate "SPARC Speaker support" @@ -35,10 +33,8 @@ config INPUT_SPARCSPKR If unsure, say Y. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called pcspkr. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called sparcspkr. config INPUT_M68K_BEEP tristate "M68k Beeper support" @@ -55,10 +51,8 @@ config INPUT_UINPUT Say Y here if you want to support user level drivers for input subsystem accessible under char device 10:223 - /dev/input/uinput. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called uinput. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called uinput. config INPUT_GSC tristate "PA-RISC GSC PS/2 keyboard/mouse support" diff -prauN linux-2.6.0-test5/drivers/input/mouse/Kconfig wli-2.6.0-test5-bk12-25/drivers/input/mouse/Kconfig --- linux-2.6.0-test5/drivers/input/mouse/Kconfig 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/input/mouse/Kconfig 2003-09-25 19:15:56.000000000 -0700 @@ -14,25 +14,39 @@ config INPUT_MOUSE config MOUSE_PS2 tristate "PS/2 mouse" default y - depends on INPUT && INPUT_MOUSE && SERIO + depends on INPUT && INPUT_MOUSE + select SERIO_I8042 ---help--- Say Y here if you have a PS/2 mouse connected to your system. This includes the standard 2 or 3-button PS/2 mouse, as well as PS/2 mice with wheels and extra buttons, Microsoft, Logitech or Genius - compatible. Support for Synaptics TouchPads is also included. - For Synaptics TouchPad support in XFree86 you'll need this XFree86 - driver: http://w1.894.telia.com/~u89404340/touchpad/index.html + compatible. If unsure, say Y. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called psmouse. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called psmouse. + +config MOUSE_PS2_SYNAPTICS + bool "Synaptics TouchPad" + default n + depends on INPUT && INPUT_MOUSE && MOUSE_PS2 + ---help--- + Say Y here if you have a Synaptics TouchPad connected to your system. + This touchpad is found on many modern laptop computers. + + Note that you also need a user space driver to interpret the data + generated by the kernel. A compatible driver for XFree86 is available + from http://w1.894.telia.com/~u89404340/touchpad/index.html + + The gpm program is not yet able to interpret the data from this + driver, so if you need to use the touchpad in the console, you have to + say N for now. config MOUSE_SERIAL tristate "Serial mouse" - depends on INPUT && INPUT_MOUSE && SERIO + depends on INPUT && INPUT_MOUSE + select SERIO ---help--- Say Y here if you have a serial (RS-232, COM port) mouse connected to your system. This includes Sun, MouseSystems, Microsoft, @@ -40,10 +54,8 @@ config MOUSE_SERIAL If unsure, say N. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called sermouse. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called sermouse. config MOUSE_INPORT tristate "InPort/MS/ATIXL busmouse" @@ -52,10 +64,8 @@ config MOUSE_INPORT Say Y here if you have an InPort, Microsoft or ATI XL busmouse. They are rather rare these days. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called inport. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called inport. config MOUSE_ATIXL bool "ATI XL variant" @@ -70,10 +80,8 @@ config MOUSE_LOGIBM Say Y here if you have a Logitech busmouse. They are rather rare these days. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called logibm. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called logibm. config MOUSE_PC110PAD tristate "IBM PC110 touchpad" @@ -82,10 +90,8 @@ config MOUSE_PC110PAD Say Y if you have the IBM PC-110 micro-notebook and want its touchpad supported. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called pc110pad. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called pc110pad. config MOUSE_MAPLE tristate "Maple bus mouse" @@ -94,10 +100,8 @@ config MOUSE_MAPLE Say Y if you have a DreamCast console and a mouse attached to its Maple bus. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called maplemouse. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called maplemouse. config MOUSE_AMIGA tristate "Amiga mouse" @@ -106,10 +110,8 @@ config MOUSE_AMIGA Say Y here if you have an Amiga and want its native mouse supported by the kernel. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called amimouse. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called amimouse. config MOUSE_RISCPC tristate "Acorn RiscPC mouse" @@ -118,10 +120,8 @@ config MOUSE_RISCPC Say Y here if you have the Acorn RiscPC computer and want its native mouse supported. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called rpcmouse. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called rpcmouse. config MOUSE_PC9800 tristate "NEC PC-9800 busmouse" @@ -130,8 +130,6 @@ config MOUSE_PC9800 Say Y here if you have NEC PC-9801/PC-9821 computer and want its native mouse supported. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called logibm.o. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called 98busmouse. diff -prauN linux-2.6.0-test5/drivers/input/mouse/psmouse-base.c wli-2.6.0-test5-bk12-25/drivers/input/mouse/psmouse-base.c --- linux-2.6.0-test5/drivers/input/mouse/psmouse-base.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/input/mouse/psmouse-base.c 2003-09-25 19:15:56.000000000 -0700 @@ -17,6 +17,7 @@ #include #include #include +#include #include "psmouse.h" #include "synaptics.h" #include "logips2pp.h" @@ -29,6 +30,8 @@ MODULE_PARM(psmouse_resolution, "i"); MODULE_PARM_DESC(psmouse_resolution, "Resolution, in dpi."); MODULE_PARM(psmouse_smartscroll, "i"); MODULE_PARM_DESC(psmouse_smartscroll, "Logitech Smartscroll autorepeat, 1 = enabled (default), 0 = disabled."); +MODULE_PARM(psmouse_resetafter, "i"); +MODULE_PARM_DESC(psmouse_resetafter, "Reset Synaptics Touchpad after so many bad packets (0 = never)."); MODULE_LICENSE("GPL"); #define PSMOUSE_LOGITECH_SMARTSCROLL 1 @@ -36,11 +39,12 @@ MODULE_LICENSE("GPL"); static int psmouse_noext; int psmouse_resolution; int psmouse_smartscroll = PSMOUSE_LOGITECH_SMARTSCROLL; +unsigned int psmouse_resetafter; -static char *psmouse_protocols[] = { "None", "PS/2", "PS2++", "PS2T++", "GenPS/2", "ImPS/2", "ImExPS/2", "Synaptics"}; +static char *psmouse_protocols[] = { "None", "PS/2", "PS2++", "PS2T++", "GenPS/2", "ImPS/2", "ImExPS/2", "SynPS/2"}; /* - * psmouse_process_packet() anlyzes the PS/2 mouse packet contents and + * psmouse_process_packet() analyzes the PS/2 mouse packet contents and * reports relevant events to the input module. */ @@ -108,6 +112,9 @@ static irqreturn_t psmouse_interrupt(str { struct psmouse *psmouse = serio->private; + if (psmouse->state == PSMOUSE_IGNORE) + goto out; + if (psmouse->acking) { switch (data) { case PSMOUSE_RET_ACK: @@ -132,20 +139,35 @@ static irqreturn_t psmouse_interrupt(str } if (psmouse->pktcnt && time_after(jiffies, psmouse->last + HZ/2)) { - printk(KERN_WARNING "psmouse.c: Lost synchronization, throwing %d bytes away.\n", psmouse->pktcnt); + printk(KERN_WARNING "psmouse.c: %s at %s lost synchronization, throwing %d bytes away.\n", + psmouse->name, psmouse->phys, psmouse->pktcnt); psmouse->pktcnt = 0; } psmouse->last = jiffies; psmouse->packet[psmouse->pktcnt++] = data; - if (psmouse->pktcnt == 3 + (psmouse->type >= PSMOUSE_GENPS)) { - psmouse_process_packet(psmouse, regs); - psmouse->pktcnt = 0; - goto out; + if (psmouse->packet[0] == PSMOUSE_RET_BAT) { + if (psmouse->pktcnt == 1) + goto out; + + if (psmouse->pktcnt == 2) { + if (psmouse->packet[1] == PSMOUSE_RET_ID) { + psmouse->state = PSMOUSE_IGNORE; + serio_rescan(serio); + goto out; + } + if (psmouse->type == PSMOUSE_SYNAPTICS) { + /* neither 0xAA nor 0x00 are valid first bytes + * for a packet in absolute mode + */ + psmouse->pktcnt = 0; + goto out; + } + } } - if (psmouse->pktcnt == 1 && psmouse->type == PSMOUSE_SYNAPTICS) { + if (psmouse->type == PSMOUSE_SYNAPTICS) { /* * The synaptics driver has its own resync logic, * so it needs to receive all bytes one at a time. @@ -155,8 +177,9 @@ static irqreturn_t psmouse_interrupt(str goto out; } - if (psmouse->pktcnt == 1 && psmouse->packet[0] == PSMOUSE_RET_BAT) { - serio_rescan(serio); + if (psmouse->pktcnt == 3 + (psmouse->type >= PSMOUSE_GENPS)) { + psmouse_process_packet(psmouse, regs); + psmouse->pktcnt = 0; goto out; } out: @@ -200,7 +223,7 @@ int psmouse_command(struct psmouse *psmo psmouse->cmdcnt = receive; if (command == PSMOUSE_CMD_RESET_BAT) - timeout = 2000000; /* 2 sec */ + timeout = 4000000; /* 4 sec */ if (command & 0xff) if (psmouse_sendbyte(psmouse, command & 0xff)) @@ -227,7 +250,7 @@ int psmouse_command(struct psmouse *psmo for (i = 0; i < receive; i++) param[i] = psmouse->cmdbuf[(receive - 1) - i]; - if (psmouse->cmdcnt) + if (psmouse->cmdcnt) return (psmouse->cmdcnt = 0) - 1; return 0; @@ -450,14 +473,18 @@ static void psmouse_initialize(struct ps */ psmouse_command(psmouse, param, PSMOUSE_CMD_SETSTREAM); +} /* - * Last, we enable the mouse so that we get reports from it. + * psmouse_activate() enables the mouse so that we get motion reports from it. */ +static void psmouse_activate(struct psmouse *psmouse) +{ if (psmouse_command(psmouse, NULL, PSMOUSE_CMD_ENABLE)) printk(KERN_WARNING "psmouse.c: Failed to enable mouse on %s\n", psmouse->serio->phys); + psmouse->state = PSMOUSE_ACTIVATED; } /* @@ -478,13 +505,39 @@ static void psmouse_cleanup(struct serio static void psmouse_disconnect(struct serio *serio) { struct psmouse *psmouse = serio->private; + + psmouse->state = PSMOUSE_IGNORE; + synaptics_disconnect(psmouse); input_unregister_device(&psmouse->dev); serio_close(serio); - synaptics_disconnect(psmouse); kfree(psmouse); } /* + * Reinitialize mouse hardware after software suspend. + */ + +static int psmouse_pm_callback(struct pm_dev *dev, pm_request_t request, void *data) +{ + struct psmouse *psmouse = dev->data; + struct serio_dev *ser_dev = psmouse->serio->dev; + + synaptics_disconnect(psmouse); + + /* We need to reopen the serio port to reinitialize the i8042 controller */ + serio_close(psmouse->serio); + serio_open(psmouse->serio, ser_dev); + + /* Probe and re-initialize the mouse */ + psmouse_probe(psmouse); + psmouse_initialize(psmouse); + synaptics_pt_init(psmouse); + psmouse_activate(psmouse); + + return 0; +} + +/* * psmouse_connect() is a callback from the serio module when * an unhandled serio port is found. */ @@ -492,8 +545,10 @@ static void psmouse_disconnect(struct se static void psmouse_connect(struct serio *serio, struct serio_dev *dev) { struct psmouse *psmouse; + struct pm_dev *pmdev; - if ((serio->type & SERIO_TYPE) != SERIO_8042) + if ((serio->type & SERIO_TYPE) != SERIO_8042 && + (serio->type & SERIO_TYPE) != SERIO_PS_PSTHRU) return; if (!(psmouse = kmalloc(sizeof(struct psmouse), GFP_KERNEL))) @@ -506,6 +561,7 @@ static void psmouse_connect(struct serio psmouse->dev.keybit[LONG(BTN_MOUSE)] = BIT(BTN_LEFT) | BIT(BTN_MIDDLE) | BIT(BTN_RIGHT); psmouse->dev.relbit[0] = BIT(REL_X) | BIT(REL_Y); + psmouse->state = PSMOUSE_NEW_DEVICE; psmouse->serio = serio; psmouse->dev.private = psmouse; @@ -522,6 +578,12 @@ static void psmouse_connect(struct serio return; } + pmdev = pm_register(PM_SYS_DEV, PM_SYS_UNKNOWN, psmouse_pm_callback); + if (pmdev) { + psmouse->dev.pm_dev = pmdev; + pmdev->data = psmouse; + } + sprintf(psmouse->devname, "%s %s %s", psmouse_protocols[psmouse->type], psmouse->vendor, psmouse->name); sprintf(psmouse->phys, "%s/input0", @@ -539,6 +601,10 @@ static void psmouse_connect(struct serio printk(KERN_INFO "input: %s on %s\n", psmouse->devname, serio->phys); psmouse_initialize(psmouse); + + synaptics_pt_init(psmouse); + + psmouse_activate(psmouse); } static struct serio_dev psmouse_dev = { @@ -567,9 +633,16 @@ static int __init psmouse_smartscroll_se return 1; } +static int __init psmouse_resetafter_setup(char *str) +{ + get_option(&str, &psmouse_resetafter); + return 1; +} + __setup("psmouse_noext", psmouse_noext_setup); __setup("psmouse_resolution=", psmouse_resolution_setup); __setup("psmouse_smartscroll=", psmouse_smartscroll_setup); +__setup("psmouse_resetafter=", psmouse_resetafter_setup); #endif diff -prauN linux-2.6.0-test5/drivers/input/mouse/psmouse.h wli-2.6.0-test5-bk12-25/drivers/input/mouse/psmouse.h --- linux-2.6.0-test5/drivers/input/mouse/psmouse.h 2003-09-08 12:50:23.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/input/mouse/psmouse.h 2003-09-25 19:15:56.000000000 -0700 @@ -13,9 +13,15 @@ #define PSMOUSE_CMD_RESET_BAT 0x02ff #define PSMOUSE_RET_BAT 0xaa +#define PSMOUSE_RET_ID 0x00 #define PSMOUSE_RET_ACK 0xfa #define PSMOUSE_RET_NAK 0xfe +/* psmouse states */ +#define PSMOUSE_NEW_DEVICE 0 +#define PSMOUSE_ACTIVATED 1 +#define PSMOUSE_IGNORE 2 + struct psmouse { void *private; struct input_dev dev; @@ -29,6 +35,7 @@ struct psmouse { unsigned char type; unsigned char model; unsigned long last; + unsigned char state; char acking; volatile char ack; char error; @@ -36,16 +43,17 @@ struct psmouse { char phys[32]; }; -#define PSMOUSE_PS2 1 -#define PSMOUSE_PS2PP 2 -#define PSMOUSE_PS2TPP 3 -#define PSMOUSE_GENPS 4 -#define PSMOUSE_IMPS 5 -#define PSMOUSE_IMEX 6 -#define PSMOUSE_SYNAPTICS 7 +#define PSMOUSE_PS2 1 +#define PSMOUSE_PS2PP 2 +#define PSMOUSE_PS2TPP 3 +#define PSMOUSE_GENPS 4 +#define PSMOUSE_IMPS 5 +#define PSMOUSE_IMEX 6 +#define PSMOUSE_SYNAPTICS 7 int psmouse_command(struct psmouse *psmouse, unsigned char *param, int command); extern int psmouse_smartscroll; +extern unsigned int psmouse_resetafter; #endif /* _PSMOUSE_H */ diff -prauN linux-2.6.0-test5/drivers/input/mouse/synaptics.c wli-2.6.0-test5-bk12-25/drivers/input/mouse/synaptics.c --- linux-2.6.0-test5/drivers/input/mouse/synaptics.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/input/mouse/synaptics.c 2003-09-25 19:15:56.000000000 -0700 @@ -1,6 +1,9 @@ /* * Synaptics TouchPad PS/2 mouse driver * + * 2003 Dmitry Torokhov + * Added support for pass-through port + * * 2003 Peter Osterlund * Ported to 2.5 input device infrastructure. * @@ -21,6 +24,7 @@ #include #include +#include #include "psmouse.h" #include "synaptics.h" @@ -71,7 +75,7 @@ static int synaptics_set_mode(struct psm if (synaptics_special_cmd(psmouse, mode)) return -1; - param[0] = 0x14; + param[0] = SYN_PS_SET_MODE2; if (psmouse_command(psmouse, param, PSMOUSE_CMD_SETRATE)) return -1; return 0; @@ -83,7 +87,7 @@ static int synaptics_reset(struct psmous if (psmouse_command(psmouse, r, PSMOUSE_CMD_RESET_BAT)) return -1; - if (r[0] == 0xAA && r[1] == 0x00) + if (r[0] == PSMOUSE_RET_BAT && r[1] == PSMOUSE_RET_ID) return 0; return -1; } @@ -106,16 +110,25 @@ static int synaptics_model_id(struct psm * Read the capability-bits from the touchpad * see also the SYN_CAP_* macros */ -static int synaptics_capability(struct psmouse *psmouse, unsigned long int *capability) +static int synaptics_capability(struct psmouse *psmouse, unsigned long int *capability, unsigned long int *ext_cap) { unsigned char cap[3]; if (synaptics_send_cmd(psmouse, SYN_QUE_CAPABILITIES, cap)) return -1; *capability = (cap[0]<<16) | (cap[1]<<8) | cap[2]; - if (SYN_CAP_VALID(*capability)) - return 0; - return -1; + *ext_cap = 0; + if (!SYN_CAP_VALID(*capability)) + return -1; + + if (SYN_EXT_CAP_REQUESTS(*capability)) { + if (synaptics_send_cmd(psmouse, SYN_QUE_EXT_CAPAB, cap)) { + printk(KERN_ERR "Synaptics claims to have extended capabilities," + " but I'm not able to read them."); + } else + *ext_cap = (cap[0]<<16) | (cap[1]<<8) | cap[2]; + } + return 0; } /* @@ -134,19 +147,11 @@ static int synaptics_identify(struct psm return -1; } -static int synaptics_enable_device(struct psmouse *psmouse) -{ - if (psmouse_command(psmouse, NULL, PSMOUSE_CMD_ENABLE)) - return -1; - return 0; -} - static void print_ident(struct synaptics_data *priv) { printk(KERN_INFO "Synaptics Touchpad, model: %ld\n", SYN_ID_MODEL(priv->identity)); - printk(KERN_INFO " Firware: %ld.%ld\n", SYN_ID_MAJOR(priv->identity), + printk(KERN_INFO " Firmware: %ld.%ld\n", SYN_ID_MAJOR(priv->identity), SYN_ID_MINOR(priv->identity)); - if (SYN_MODEL_ROT180(priv->model_id)) printk(KERN_INFO " 180 degree mounted touchpad\n"); if (SYN_MODEL_PORTRAIT(priv->model_id)) @@ -159,12 +164,17 @@ static void print_ident(struct synaptics if (SYN_CAP_EXTENDED(priv->capabilities)) { printk(KERN_INFO " Touchpad has extended capability bits\n"); - if (SYN_CAP_FOUR_BUTTON(priv->capabilities)) + if (SYN_CAP_MULTI_BUTTON_NO(priv->ext_cap)) + printk(KERN_INFO " -> %d multi-buttons, i.e. besides standard buttons\n", + (int)(SYN_CAP_MULTI_BUTTON_NO(priv->ext_cap))); + else if (SYN_CAP_FOUR_BUTTON(priv->capabilities)) printk(KERN_INFO " -> four buttons\n"); if (SYN_CAP_MULTIFINGER(priv->capabilities)) printk(KERN_INFO " -> multifinger detection\n"); if (SYN_CAP_PALMDETECT(priv->capabilities)) printk(KERN_INFO " -> palm detection\n"); + if (SYN_CAP_PASS_THROUGH(priv->capabilities)) + printk(KERN_INFO " -> pass-through port\n"); } } @@ -172,6 +182,7 @@ static int query_hardware(struct psmouse { struct synaptics_data *priv = psmouse->private; int retries = 0; + int mode; while ((retries++ < 3) && synaptics_reset(psmouse)) printk(KERN_ERR "synaptics reset failed\n"); @@ -180,17 +191,107 @@ static int query_hardware(struct psmouse return -1; if (synaptics_model_id(psmouse, &priv->model_id)) return -1; - if (synaptics_capability(psmouse, &priv->capabilities)) + if (synaptics_capability(psmouse, &priv->capabilities, &priv->ext_cap)) return -1; - if (synaptics_set_mode(psmouse, (SYN_BIT_ABSOLUTE_MODE | - SYN_BIT_HIGH_RATE | - SYN_BIT_DISABLE_GESTURE | - SYN_BIT_W_MODE))) + + mode = SYN_BIT_ABSOLUTE_MODE | SYN_BIT_HIGH_RATE; + if (SYN_ID_MAJOR(priv->identity) >= 4) + mode |= SYN_BIT_DISABLE_GESTURE; + if (SYN_CAP_EXTENDED(priv->capabilities)) + mode |= SYN_BIT_W_MODE; + if (synaptics_set_mode(psmouse, mode)) return -1; - synaptics_enable_device(psmouse); + return 0; +} - print_ident(priv); +/***************************************************************************** + * Synaptics pass-through PS/2 port support + ****************************************************************************/ +static int synaptics_pt_open(struct serio *port) +{ + return 0; +} + +static void synaptics_pt_close(struct serio *port) +{ +} + +static int synaptics_pt_write(struct serio *port, unsigned char c) +{ + struct psmouse *parent = port->driver; + char rate_param = SYN_PS_CLIENT_CMD; /* indicates that we want pass-through port */ + + if (synaptics_special_cmd(parent, c)) + return -1; + if (psmouse_command(parent, &rate_param, PSMOUSE_CMD_SETRATE)) + return -1; + return 0; +} + +static inline int synaptics_is_pt_packet(unsigned char *buf) +{ + return (buf[0] & 0xFC) == 0x84 && (buf[3] & 0xCC) == 0xC4; +} + +static void synaptics_pass_pt_packet(struct serio *ptport, unsigned char *packet) +{ + struct psmouse *child = ptport->private; + + if (child) { + if (child->state == PSMOUSE_ACTIVATED) { + serio_interrupt(ptport, packet[1], 0, NULL); + serio_interrupt(ptport, packet[4], 0, NULL); + serio_interrupt(ptport, packet[5], 0, NULL); + if (child->type >= PSMOUSE_GENPS) + serio_interrupt(ptport, packet[2], 0, NULL); + } else if (child->state != PSMOUSE_IGNORE) { + serio_interrupt(ptport, packet[1], 0, NULL); + } + } +} + +int synaptics_pt_init(struct psmouse *psmouse) +{ + struct synaptics_data *priv = psmouse->private; + struct serio *port; + struct psmouse *child; + + if (psmouse->type != PSMOUSE_SYNAPTICS) + return -1; + if (!SYN_CAP_EXTENDED(priv->capabilities)) + return -1; + if (!SYN_CAP_PASS_THROUGH(priv->capabilities)) + return -1; + + priv->ptport = port = kmalloc(sizeof(struct serio), GFP_KERNEL); + if (!port) { + printk(KERN_ERR "synaptics: not enough memory to allocate serio port\n"); + return -1; + } + + memset(port, 0, sizeof(struct serio)); + port->type = SERIO_PS_PSTHRU; + port->name = "Synaptics pass-through"; + port->phys = "synaptics-pt/serio0"; + port->write = synaptics_pt_write; + port->open = synaptics_pt_open; + port->close = synaptics_pt_close; + port->driver = psmouse; + + printk(KERN_INFO "serio: %s port at %s\n", port->name, psmouse->phys); + serio_register_slave_port(port); + + /* adjust the touchpad to child's choice of protocol */ + child = port->private; + if (child && child->type >= PSMOUSE_GENPS) { + if (synaptics_set_mode(psmouse, (SYN_BIT_ABSOLUTE_MODE | + SYN_BIT_HIGH_RATE | + SYN_BIT_DISABLE_GESTURE | + SYN_BIT_FOUR_BYTE_CLIENT | + SYN_BIT_W_MODE))) + printk(KERN_INFO "synaptics: failed to enable 4-byte guest protocol\n"); + } return 0; } @@ -213,22 +314,27 @@ int synaptics_init(struct psmouse *psmou { struct synaptics_data *priv; +#ifndef CONFIG_MOUSE_PS2_SYNAPTICS + return -1; +#endif psmouse->private = priv = kmalloc(sizeof(struct synaptics_data), GFP_KERNEL); if (!priv) return -1; memset(priv, 0, sizeof(struct synaptics_data)); - priv->inSync = 1; + priv->out_of_sync = 0; if (query_hardware(psmouse)) { printk(KERN_ERR "Unable to query/initialize Synaptics hardware.\n"); goto init_fail; } + print_ident(priv); + /* * The x/y limits are taken from the Synaptics TouchPad interfacing Guide, * which says that they should be valid regardless of the actual size of - * the senser. + * the sensor. */ set_bit(EV_ABS, psmouse->dev.evbit); set_abs_params(&psmouse->dev, ABS_X, 1472, 5472, 0, 0); @@ -243,7 +349,24 @@ int synaptics_init(struct psmouse *psmou set_bit(BTN_RIGHT, psmouse->dev.keybit); set_bit(BTN_FORWARD, psmouse->dev.keybit); set_bit(BTN_BACK, psmouse->dev.keybit); - + if (SYN_CAP_MULTI_BUTTON_NO(priv->ext_cap)) + switch (SYN_CAP_MULTI_BUTTON_NO(priv->ext_cap) & ~0x01) { + default: + printk(KERN_ERR "This touchpad reports more than 8 multi-buttons, don't know how to handle.\n"); + case 8: + set_bit(BTN_7, psmouse->dev.keybit); + set_bit(BTN_6, psmouse->dev.keybit); + case 6: + set_bit(BTN_5, psmouse->dev.keybit); + set_bit(BTN_4, psmouse->dev.keybit); + case 4: + set_bit(BTN_3, psmouse->dev.keybit); + set_bit(BTN_2, psmouse->dev.keybit); + case 2: + set_bit(BTN_1, psmouse->dev.keybit); + set_bit(BTN_0, psmouse->dev.keybit); + break; + } clear_bit(EV_REL, psmouse->dev.evbit); clear_bit(REL_X, psmouse->dev.relbit); clear_bit(REL_Y, psmouse->dev.relbit); @@ -259,42 +382,85 @@ void synaptics_disconnect(struct psmouse { struct synaptics_data *priv = psmouse->private; - kfree(priv); + if (psmouse->type == PSMOUSE_SYNAPTICS && priv) { + synaptics_set_mode(psmouse, 0); + if (priv->ptport) { + serio_unregister_slave_port(priv->ptport); + kfree(priv->ptport); + } + kfree(priv); + } } /***************************************************************************** * Functions to interpret the absolute mode packets ****************************************************************************/ -static void synaptics_parse_hw_state(struct synaptics_data *priv, struct synaptics_hw_state *hw) +static void synaptics_parse_hw_state(unsigned char buf[], struct synaptics_data *priv, struct synaptics_hw_state *hw) { - unsigned char *buf = priv->proto_buf; - - hw->x = (((buf[3] & 0x10) << 8) | - ((buf[1] & 0x0f) << 8) | - buf[4]); - hw->y = (((buf[3] & 0x20) << 7) | - ((buf[1] & 0xf0) << 4) | - buf[5]); - - hw->z = buf[2]; - hw->w = (((buf[0] & 0x30) >> 2) | - ((buf[0] & 0x04) >> 1) | - ((buf[3] & 0x04) >> 2)); - - hw->left = (buf[0] & 0x01) ? 1 : 0; - hw->right = (buf[0] & 0x2) ? 1 : 0; hw->up = 0; hw->down = 0; + hw->b0 = 0; + hw->b1 = 0; + hw->b2 = 0; + hw->b3 = 0; + hw->b4 = 0; + hw->b5 = 0; + hw->b6 = 0; + hw->b7 = 0; + + if (SYN_MODEL_NEWABS(priv->model_id)) { + hw->x = (((buf[3] & 0x10) << 8) | + ((buf[1] & 0x0f) << 8) | + buf[4]); + hw->y = (((buf[3] & 0x20) << 7) | + ((buf[1] & 0xf0) << 4) | + buf[5]); + + hw->z = buf[2]; + hw->w = (((buf[0] & 0x30) >> 2) | + ((buf[0] & 0x04) >> 1) | + ((buf[3] & 0x04) >> 2)); + + hw->left = (buf[0] & 0x01) ? 1 : 0; + hw->right = (buf[0] & 0x02) ? 1 : 0; + if (SYN_CAP_EXTENDED(priv->capabilities) && + (SYN_CAP_FOUR_BUTTON(priv->capabilities))) { + hw->up = ((buf[3] & 0x01)) ? 1 : 0; + if (hw->left) + hw->up = !hw->up; + hw->down = ((buf[3] & 0x02)) ? 1 : 0; + if (hw->right) + hw->down = !hw->down; + } + if (SYN_CAP_MULTI_BUTTON_NO(priv->ext_cap) && + ((buf[3] & 2) ? !hw->right : hw->right)) { + switch (SYN_CAP_MULTI_BUTTON_NO(priv->ext_cap) & ~0x01) { + default: + ; /* we did comment while initialising... */ + case 8: + hw->b7 = ((buf[5] & 0x08)) ? 1 : 0; + hw->b6 = ((buf[4] & 0x08)) ? 1 : 0; + case 6: + hw->b5 = ((buf[5] & 0x04)) ? 1 : 0; + hw->b4 = ((buf[4] & 0x04)) ? 1 : 0; + case 4: + hw->b3 = ((buf[5] & 0x02)) ? 1 : 0; + hw->b2 = ((buf[4] & 0x02)) ? 1 : 0; + case 2: + hw->b1 = ((buf[5] & 0x01)) ? 1 : 0; + hw->b0 = ((buf[4] & 0x01)) ? 1 : 0; + } + } + } else { + hw->x = (((buf[1] & 0x1f) << 8) | buf[2]); + hw->y = (((buf[4] & 0x1f) << 8) | buf[5]); - if (SYN_CAP_EXTENDED(priv->capabilities) && - (SYN_CAP_FOUR_BUTTON(priv->capabilities))) { - hw->up = ((buf[3] & 0x01)) ? 1 : 0; - if (hw->left) - hw->up = !hw->up; - hw->down = ((buf[3] & 0x02)) ? 1 : 0; - if (hw->right) - hw->down = !hw->down; + hw->z = (((buf[0] & 0x30) << 2) | (buf[3] & 0x3F)); + hw->w = (((buf[1] & 0x80) >> 4) | ((buf[0] & 0x04) >> 1)); + + hw->left = (buf[0] & 0x01) ? 1 : 0; + hw->right = (buf[0] & 0x02) ? 1 : 0; } } @@ -307,7 +473,7 @@ static void synaptics_process_packet(str struct synaptics_data *priv = psmouse->private; struct synaptics_hw_state hw; - synaptics_parse_hw_state(priv, &hw); + synaptics_parse_hw_state(psmouse->packet, priv, &hw); if (hw.z > 0) { int w_ok = 0; @@ -347,7 +513,24 @@ static void synaptics_process_packet(str input_report_key(dev, BTN_RIGHT, hw.right); input_report_key(dev, BTN_FORWARD, hw.up); input_report_key(dev, BTN_BACK, hw.down); - + if (SYN_CAP_MULTI_BUTTON_NO(priv->ext_cap)) + switch(SYN_CAP_MULTI_BUTTON_NO(priv->ext_cap) & ~0x01) { + default: + ; /* we did comment while initialising... */ + case 8: + input_report_key(dev, BTN_7, hw.b7); + input_report_key(dev, BTN_6, hw.b6); + case 6: + input_report_key(dev, BTN_5, hw.b5); + input_report_key(dev, BTN_4, hw.b4); + case 4: + input_report_key(dev, BTN_3, hw.b3); + input_report_key(dev, BTN_2, hw.b2); + case 2: + input_report_key(dev, BTN_1, hw.b1); + input_report_key(dev, BTN_0, hw.b0); + break; + } input_sync(dev); } @@ -355,35 +538,59 @@ void synaptics_process_byte(struct psmou { struct input_dev *dev = &psmouse->dev; struct synaptics_data *priv = psmouse->private; - unsigned char *pBuf = priv->proto_buf; - unsigned char u = psmouse->packet[0]; + unsigned char data = psmouse->packet[psmouse->pktcnt - 1]; + int newabs = SYN_MODEL_NEWABS(priv->model_id); input_regs(dev, regs); - pBuf[priv->proto_buf_tail++] = u; + switch (psmouse->pktcnt) { + case 1: + if (newabs ? ((data & 0xC8) != 0x80) : ((data & 0xC0) != 0xC0)) { + printk(KERN_WARNING "Synaptics driver lost sync at 1st byte\n"); + goto bad_sync; + } + break; + case 2: + if (!newabs && ((data & 0x60) != 0x00)) { + printk(KERN_WARNING "Synaptics driver lost sync at 2nd byte\n"); + goto bad_sync; + } + break; + case 4: + if (newabs ? ((data & 0xC8) != 0xC0) : ((data & 0xC0) != 0x80)) { + printk(KERN_WARNING "Synaptics driver lost sync at 4th byte\n"); + goto bad_sync; + } + break; + case 5: + if (!newabs && ((data & 0x60) != 0x00)) { + printk(KERN_WARNING "Synaptics driver lost sync at 5th byte\n"); + goto bad_sync; + } + break; + default: + if (psmouse->pktcnt >= 6) { /* Full packet received */ + if (priv->out_of_sync) { + priv->out_of_sync = 0; + printk(KERN_NOTICE "Synaptics driver resynced.\n"); + } + + if (priv->ptport && synaptics_is_pt_packet(psmouse->packet)) + synaptics_pass_pt_packet(priv->ptport, psmouse->packet); + else + synaptics_process_packet(psmouse); - /* check first byte */ - if ((priv->proto_buf_tail == 1) && ((u & 0xC8) != 0x80)) { - priv->inSync = 0; - priv->proto_buf_tail = 0; - printk(KERN_WARNING "Synaptics driver lost sync at 1st byte\n"); - return; - } - - /* check 4th byte */ - if ((priv->proto_buf_tail == 4) && ((u & 0xc8) != 0xc0)) { - priv->inSync = 0; - priv->proto_buf_tail = 0; - printk(KERN_WARNING "Synaptics driver lost sync at 4th byte\n"); - return; - } - - if (priv->proto_buf_tail >= 6) { /* Full packet received */ - if (!priv->inSync) { - priv->inSync = 1; - printk(KERN_NOTICE "Synaptics driver resynced.\n"); + psmouse->pktcnt = 0; } - synaptics_process_packet(psmouse); - priv->proto_buf_tail = 0; + break; + } + return; + + bad_sync: + priv->out_of_sync++; + psmouse->pktcnt = 0; + if (psmouse_resetafter > 0 && priv->out_of_sync == psmouse_resetafter) { + psmouse->state = PSMOUSE_IGNORE; + serio_rescan(psmouse->serio); } } diff -prauN linux-2.6.0-test5/drivers/input/mouse/synaptics.h wli-2.6.0-test5-bk12-25/drivers/input/mouse/synaptics.h --- linux-2.6.0-test5/drivers/input/mouse/synaptics.h 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/input/mouse/synaptics.h 2003-09-25 19:15:56.000000000 -0700 @@ -12,6 +12,7 @@ extern void synaptics_process_byte(struct psmouse *psmouse, struct pt_regs *regs); extern int synaptics_init(struct psmouse *psmouse); +extern int synaptics_pt_init(struct psmouse *psmouse); extern void synaptics_disconnect(struct psmouse *psmouse); /* synaptics queries */ @@ -22,12 +23,14 @@ extern void synaptics_disconnect(struct #define SYN_QUE_SERIAL_NUMBER_PREFIX 0x06 #define SYN_QUE_SERIAL_NUMBER_SUFFIX 0x07 #define SYN_QUE_RESOLUTION 0x08 +#define SYN_QUE_EXT_CAPAB 0x09 /* synatics modes */ #define SYN_BIT_ABSOLUTE_MODE (1 << 7) #define SYN_BIT_HIGH_RATE (1 << 6) #define SYN_BIT_SLEEP_MODE (1 << 3) #define SYN_BIT_DISABLE_GESTURE (1 << 2) +#define SYN_BIT_FOUR_BYTE_CLIENT (1 << 1) #define SYN_BIT_W_MODE (1 << 0) /* synaptics model ID bits */ @@ -42,11 +45,14 @@ extern void synaptics_disconnect(struct /* synaptics capability bits */ #define SYN_CAP_EXTENDED(c) ((c) & (1 << 23)) +#define SYN_CAP_PASS_THROUGH(c) ((c) & (1 << 7)) #define SYN_CAP_SLEEP(c) ((c) & (1 << 4)) #define SYN_CAP_FOUR_BUTTON(c) ((c) & (1 << 3)) #define SYN_CAP_MULTIFINGER(c) ((c) & (1 << 1)) #define SYN_CAP_PALMDETECT(c) ((c) & (1 << 0)) #define SYN_CAP_VALID(c) ((((c) & 0x00ff00) >> 8) == 0x47) +#define SYN_EXT_CAP_REQUESTS(c) ((((c) & 0x700000) >> 20) == 1) +#define SYN_CAP_MULTI_BUTTON_NO(ec) (((ec) & 0x00f000) >> 12) /* synaptics modes query bits */ #define SYN_MODE_ABSOLUTE(m) ((m) & (1 << 7)) @@ -62,6 +68,10 @@ extern void synaptics_disconnect(struct #define SYN_ID_MINOR(i) (((i) >> 16) & 0xff) #define SYN_ID_IS_SYNAPTICS(i) ((((i) >> 8) & 0xff) == 0x47) +/* synaptics special commands */ +#define SYN_PS_SET_MODE2 0x14 +#define SYN_PS_CLIENT_CMD 0x28 + /* * A structure to describe the state of the touchpad hardware (buttons and pad) */ @@ -75,21 +85,28 @@ struct synaptics_hw_state { int right; int up; int down; + int b0; + int b1; + int b2; + int b3; + int b4; + int b5; + int b6; + int b7; }; struct synaptics_data { /* Data read from the touchpad */ unsigned long int model_id; /* Model-ID */ unsigned long int capabilities; /* Capabilities */ + unsigned long int ext_cap; /* Extended Capabilities */ unsigned long int identity; /* Identification */ /* Data for normal processing */ - unsigned char proto_buf[6]; /* Buffer for Packet */ - unsigned char last_byte; /* last received byte */ - int inSync; /* Packets in sync */ - int proto_buf_tail; - + unsigned int out_of_sync; /* # of packets out of sync */ int old_w; /* Previous w value */ + + struct serio *ptport; /* pass-through port */ }; #endif /* _SYNAPTICS_H */ diff -prauN linux-2.6.0-test5/drivers/input/serio/Kconfig wli-2.6.0-test5-bk12-25/drivers/input/serio/Kconfig --- linux-2.6.0-test5/drivers/input/serio/Kconfig 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/input/serio/Kconfig 2003-09-25 19:15:56.000000000 -0700 @@ -2,7 +2,7 @@ # Input core configuration # config SERIO - tristate "Serial i/o support (needed for keyboard and mouse)" + tristate "Serial i/o support" if EMBEDDED || !X86 default y ---help--- Say Yes here if you have any input device that uses serial I/O to @@ -13,15 +13,13 @@ config SERIO If unsure, say Y. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called serio. If you want to compile it - as a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called serio. config SERIO_I8042 tristate "i8042 PC Keyboard controller" if EMBEDDED || !X86 default y - depends on SERIO + select SERIO ---help--- i8042 is the chip over which the standard AT keyboard and PS/2 mouse are connected to the computer. If you use these devices, @@ -29,10 +27,8 @@ config SERIO_I8042 If unsure, say Y. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called i8042. If you want to compile it - as a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called i8042. config SERIO_SERPORT tristate "Serial port line discipline" @@ -46,10 +42,8 @@ config SERIO_SERPORT If unsure, say Y. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called serport. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called serport. config SERIO_CT82C710 tristate "ct82c710 Aux port controller" @@ -61,10 +55,8 @@ config SERIO_CT82C710 If unsure, say N. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called ct82c710. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called ct82c710. config SERIO_Q40KBD tristate "Q40 keyboard controller" @@ -81,10 +73,8 @@ config SERIO_PARKBD If unsure, say N. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called parkbd. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called parkbd. config SERIO_RPCKBD tristate "Acorn RiscPC keyboard controller" @@ -94,10 +84,8 @@ config SERIO_RPCKBD Say Y here if you have the Acorn RiscPC and want to use an AT keyboard connected to its keyboard controller. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called rpckbd. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called rpckbd. config SERIO_AMBAKMI tristate "AMBA KMI keyboard controller" @@ -114,10 +102,8 @@ config SERIO_98KBD Say Y here if you have the NEC PC-9801/PC-9821 and want to use its standard keyboard connected to its keyboard controller. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called rpckbd.o. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called 98kbd-io. config SERIO_PCIPS2 tristate "PCI PS/2 keyboard and PS/2 mouse controller" @@ -126,7 +112,5 @@ config SERIO_PCIPS2 Say Y here if you have a Mobility Docking station with PS/2 keyboard and mice ports. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called rpckbd. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called pcips2. diff -prauN linux-2.6.0-test5/drivers/input/serio/ambakmi.c wli-2.6.0-test5-bk12-25/drivers/input/serio/ambakmi.c --- linux-2.6.0-test5/drivers/input/serio/ambakmi.c 2003-09-08 12:50:12.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/input/serio/ambakmi.c 2003-09-25 19:15:56.000000000 -0700 @@ -73,7 +73,7 @@ static int amba_kmi_open(struct serio *i writeb(kmi->divisor, KMICLKDIV); writeb(KMICR_EN, KMICR); - ret = request_irq(kmi->irq, amba_kmi_int, 0, kmi->io.phys, kmi); + ret = request_irq(kmi->irq, amba_kmi_int, 0, "kmi-pl050", kmi); if (ret) { printk(KERN_ERR "kmi: failed to claim IRQ%d\n", kmi->irq); writeb(0, KMICR); @@ -108,11 +108,11 @@ static int amba_kmi_probe(struct amba_de kmi->io.write = amba_kmi_write; kmi->io.open = amba_kmi_open; kmi->io.close = amba_kmi_close; - kmi->io.name = dev->dev.name; + kmi->io.name = dev->dev.bus_id; kmi->io.phys = dev->dev.bus_id; kmi->io.driver = kmi; - kmi->res = request_mem_region(dev->res.start, KMI_SIZE, kmi->io.phys); + kmi->res = request_mem_region(dev->res.start, KMI_SIZE, "kmi-pl050"); if (!kmi->res) { kfree(kmi); return -EBUSY; @@ -147,14 +147,12 @@ static int amba_kmi_remove(struct amba_d return 0; } -static int amba_kmi_resume(struct amba_device *dev, u32 level) +static int amba_kmi_resume(struct amba_device *dev) { struct amba_kmi_port *kmi = amba_get_drvdata(dev); - if (level == RESUME_ENABLE) { - /* kick the serio layer to rescan this port */ - serio_rescan(&kmi->io); - } + /* kick the serio layer to rescan this port */ + serio_rescan(&kmi->io); return 0; } diff -prauN linux-2.6.0-test5/drivers/input/serio/serio.c wli-2.6.0-test5-bk12-25/drivers/input/serio/serio.c --- linux-2.6.0-test5/drivers/input/serio/serio.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/input/serio/serio.c 2003-09-25 19:15:56.000000000 -0700 @@ -49,7 +49,9 @@ MODULE_LICENSE("GPL"); EXPORT_SYMBOL(serio_interrupt); EXPORT_SYMBOL(serio_register_port); +EXPORT_SYMBOL(serio_register_slave_port); EXPORT_SYMBOL(serio_unregister_port); +EXPORT_SYMBOL(serio_unregister_slave_port); EXPORT_SYMBOL(serio_register_device); EXPORT_SYMBOL(serio_unregister_device); EXPORT_SYMBOL(serio_open); @@ -166,6 +168,17 @@ void serio_register_port(struct serio *s up(&serio_sem); } +/* + * Same as serio_register_port but does not try to acquire serio_sem. + * Should be used when registering a serio from other input device's + * connect() function. + */ +void serio_register_slave_port(struct serio *serio) +{ + list_add_tail(&serio->node, &serio_list); + serio_find_dev(serio); +} + void serio_unregister_port(struct serio *serio) { down(&serio_sem); @@ -175,6 +188,18 @@ void serio_unregister_port(struct serio up(&serio_sem); } +/* + * Same as serio_unregister_port but does not try to acquire serio_sem. + * Should be used when unregistering a serio from other input device's + * disconnect() function. + */ +void serio_unregister_slave_port(struct serio *serio) +{ + list_del_init(&serio->node); + if (serio->dev && serio->dev->disconnect) + serio->dev->disconnect(serio); +} + void serio_register_device(struct serio_dev *dev) { struct serio *serio; @@ -204,9 +229,11 @@ void serio_unregister_device(struct seri /* called from serio_dev->connect/disconnect methods under serio_sem */ int serio_open(struct serio *serio, struct serio_dev *dev) { - if (serio->open(serio)) - return -1; serio->dev = dev; + if (serio->open(serio)) { + serio->dev = NULL; + return -1; + } return 0; } @@ -221,8 +248,7 @@ static int __init serio_init(void) { int pid; - pid = kernel_thread(serio_thread, NULL, - CLONE_FS | CLONE_FILES | CLONE_SIGHAND); + pid = kernel_thread(serio_thread, NULL, CLONE_KERNEL); if (!pid) { printk(KERN_WARNING "serio: Failed to start kseriod\n"); diff -prauN linux-2.6.0-test5/drivers/input/touchscreen/Kconfig wli-2.6.0-test5-bk12-25/drivers/input/touchscreen/Kconfig --- linux-2.6.0-test5/drivers/input/touchscreen/Kconfig 2003-09-08 12:50:04.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/input/touchscreen/Kconfig 2003-09-25 19:15:56.000000000 -0700 @@ -12,28 +12,26 @@ config INPUT_TOUCHSCREEN config TOUCHSCREEN_BITSY tristate "Compaq iPAQ H3600 (Bitsy) touchscreen input driver" - depends on SA1100_BITSY && INPUT && INPUT_TOUCHSCREEN && SERIO + depends on SA1100_BITSY && INPUT && INPUT_TOUCHSCREEN + select SERIO help Say Y here if you have the h3600 (Bitsy) touchscreen. If unsure, say N. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called gunze. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called h3600_ts_input. config TOUCHSCREEN_GUNZE tristate "Gunze AHL-51S touchscreen" - depends on INPUT && INPUT_TOUCHSCREEN && SERIO + depends on INPUT && INPUT_TOUCHSCREEN + select SERIO help Say Y here if you have the Gunze AHL-51 touchscreen connected to your system. If unsure, say N. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called gunze. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called gunze. diff -prauN linux-2.6.0-test5/drivers/isdn/hardware/avm/avm_cs.c wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/avm/avm_cs.c --- linux-2.6.0-test5/drivers/isdn/hardware/avm/avm_cs.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/avm/avm_cs.c 2003-09-25 19:15:56.000000000 -0700 @@ -431,15 +431,6 @@ found_port: static void avmcs_release(dev_link_t *link) { - /* - If the device is currently in use, we won't release until it - is actually closed. - */ - if (link->open) { - link->state |= DEV_STALE_CONFIG; - return; - } - b1pcmcia_delcard(link->io.BasePort1, link->irq.AssignedIRQ); /* Unlink the device chain */ diff -prauN linux-2.6.0-test5/drivers/isdn/hardware/eicon/Kconfig wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/Kconfig --- linux-2.6.0-test5/drivers/isdn/hardware/eicon/Kconfig 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/Kconfig 2003-09-25 19:15:56.000000000 -0700 @@ -12,7 +12,7 @@ config CAPI_EICON config ISDN_DIVAS tristate "Support Eicon DIVA Server cards" - depends on CAPI_EICON && PROC_FS && PCI && m + depends on CAPI_EICON && PROC_FS && PCI help Say Y here if you have an Eicon Networks DIVA Server PCI ISDN card. In order to use this card, additional firmware is necessary, which @@ -24,12 +24,6 @@ config ISDN_DIVAS_BRIPCI help Enable support for DIVA Server BRI-PCI. -config ISDN_DIVAS_4BRIPCI - bool "DIVA Server 4BRI/PCI support" - depends on ISDN_DIVAS - help - Enable support for DIVA Server 4BRI-PCI. - config ISDN_DIVAS_PRIPCI bool "DIVA Server PRI/PCI support" depends on ISDN_DIVAS @@ -43,17 +37,17 @@ config ISDN_DIVAS_DIVACAPI You need this to provide the CAPI interface for DIVA Server cards. -config ISDN_DIVAS_MAINT - tristate "DIVA Maint driver support" - depends on ISDN_DIVAS - help - Enable Divas Maintainance driver. - config ISDN_DIVAS_USERIDI tristate "DIVA User-IDI interface support" depends on ISDN_DIVAS help Enable support for user-mode IDI interface. +config ISDN_DIVAS_MAINT + tristate "DIVA Maint driver support" + depends on ISDN_DIVAS && m + help + Enable Divas Maintainance driver. + endmenu diff -prauN linux-2.6.0-test5/drivers/isdn/hardware/eicon/Makefile wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/Makefile --- linux-2.6.0-test5/drivers/isdn/hardware/eicon/Makefile 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/Makefile 2003-09-25 19:15:56.000000000 -0700 @@ -10,9 +10,8 @@ obj-$(CONFIG_ISDN_DIVAS_DIVACAPI) += div # Multipart objects. divas-y := divasmain.o divasfunc.o di.o io.o istream.o \ - diva.o dlist.o divasproc.o diva_dma.o -divas-$(CONFIG_ISDN_DIVAS_BRIPCI) += os_bri.o s_bri.o -divas-$(CONFIG_ISDN_DIVAS_4BRIPCI) += os_4bri.o s_4bri.o + diva.o divasproc.o diva_dma.o +divas-$(CONFIG_ISDN_DIVAS_BRIPCI) += os_bri.o s_bri.o os_4bri.o s_4bri.o divas-$(CONFIG_ISDN_DIVAS_PRIPCI) += os_pri.o s_pri.o divacapi-y := capimain.o capifunc.o message.o capidtmf.o @@ -21,4 +20,4 @@ divadidd-y := diva_didd.o diddfunc.o diva_mnt-y := divamnt.o mntfunc.o debug.o maintidi.o -diva_idi-y := divasi.o idifunc.o um_idi.o dqueue.o dlist.o +diva_idi-y := divasi.o idifunc.o um_idi.o dqueue.o diff -prauN linux-2.6.0-test5/drivers/isdn/hardware/eicon/capifunc.c wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/capifunc.c --- linux-2.6.0-test5/drivers/isdn/hardware/eicon/capifunc.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/capifunc.c 2003-09-25 19:15:56.000000000 -0700 @@ -1,10 +1,10 @@ -/* $Id: capifunc.c,v 1.1.2.2 2002/10/02 14:38:37 armin Exp $ +/* $Id: capifunc.c,v 1.47 2003/09/09 06:52:29 schindler Exp $ * * ISDN interface module for Eicon active cards DIVA. * CAPI Interface common functions * - * Copyright 2000-2002 by Armin Schindler (mac@melware.de) - * Copyright 2000-2002 Cytronics & Melware (info@melware.de) + * Copyright 2000-2003 by Armin Schindler (mac@melware.de) + * Copyright 2000-2003 Cytronics & Melware (info@melware.de) * * This software may be used and distributed according to the terms * of the GNU General Public License, incorporated herein by reference. @@ -25,10 +25,11 @@ DIVA_CAPI_ADAPTER *adapter = (DIVA_CAPI_ADAPTER *) NULL; APPL *application = (APPL *) NULL; byte max_appl = MAX_APPL; +byte max_adapter = 0; static CAPI_MSG *mapped_msg = (CAPI_MSG *) NULL; byte UnMapController(byte); -char DRIVERRELEASE[32]; +char DRIVERRELEASE_CAPI[32]; extern void AutomaticLaw(DIVA_CAPI_ADAPTER *); extern void callback(ENTITY *); @@ -45,7 +46,6 @@ static dword notify_handle; static void DIRequest(ENTITY * e); static DESCRIPTOR MAdapter; static DESCRIPTOR DAdapter; -byte max_adapter = 0; static byte ControllerMap[MAX_DESCRIPTORS + 1]; @@ -59,16 +59,14 @@ extern void diva_os_set_controller_struc extern void DIVA_DIDD_Read(DESCRIPTOR *, int); -static void no_printf(unsigned char *, ...); - -DIVA_DI_PRINTF dprintf = no_printf; - /* * debug */ +static void no_printf(unsigned char *, ...); #include "debuglib.c" void xlog(char *x, ...) { +#ifndef DIVA_NO_DEBUGLIB va_list ap; if (myDriverDebugHandle.dbgMask & DL_XLOG) { va_start(ap, x); @@ -81,6 +79,7 @@ void xlog(char *x, ...) } va_end(ap); } +#endif } /* @@ -162,13 +161,14 @@ static int find_free_id(void) p = cards; while (p) { if (p->Id == num) - goto next_id; + break; p = p->next; } + if(!p) { diva_os_leave_spin_lock(&ll_lock, &old_irql, "find free id"); return (num); - next_id: + } } diva_os_leave_spin_lock(&ll_lock, &old_irql, "find free id"); return (999); @@ -315,10 +315,11 @@ void sendf(APPL * appl, word command, dw /* if DATA_B3_IND, copy data too */ if (command == _DATA_B3_I) { - dword data = READ_DWORD(((byte *) & msg.info.data_b3_ind.Data)); + dword data = READ_DWORD(&msg.info.data_b3_ind.Data); memcpy(write + length, (void *) data, dlength); } +#ifndef DIVA_NO_DEBUGLIB if (myDriverDebugHandle.dbgMask & DL_XLOG) { switch (command) { default: @@ -332,8 +333,8 @@ void sendf(APPL * appl, word command, dw if (myDriverDebugHandle.dbgMask & DL_BLK) { xlog("\x00\x02", &msg, 0x81, length); for (i = 0; i < dlength; i += 256) { - DBG_BLK((((char *) msg.info.data_b3_ind. - Data) + i, ((dlength - i) < 256) ? (dlength - i) : 256)) + DBG_BLK((((char *) READ_DWORD(&msg.info.data_b3_ind.Data)) + i, + ((dlength - i) < 256) ? (dlength - i) : 256)) if (!(myDriverDebugHandle.dbgMask & DL_PRV0)) break; /* not more if not explicitely requested */ } @@ -341,6 +342,7 @@ void sendf(APPL * appl, word command, dw break; } } +#endif /* find the card structure for this controller */ if (!(card = find_card_by_ctrl(write[8] & 0x7f))) { @@ -719,7 +721,7 @@ static int diva_add_card(DESCRIPTOR * d) } /* profile information */ - ctrl->profile.nbchannel = card->d.channels; + WRITE_WORD(&ctrl->profile.nbchannel, card->d.channels); ctrl->profile.goptions = a->profile.Global_Options; ctrl->profile.support1 = a->profile.B1_Protocols; ctrl->profile.support2 = a->profile.B2_Protocols; @@ -745,17 +747,20 @@ static void diva_register_appl(struct ca { APPL *this; word bnum, xnum; - int i = 0, j = 0; + int i = 0; + unsigned char *p; void *DataNCCI, *DataFlags, *ReceiveBuffer, *xbuffer_used; void **xbuffer_ptr, **xbuffer_internal; diva_os_spin_lock_magic_t old_irql; + unsigned int mem_len; + if (diva_os_in_irq()) { DBG_ERR(("CAPI_REGISTER - in irq context !")) return; } - DBG_TRC(("application register")) + DBG_TRC(("application register Id=%d", appl)) if (appl > MAX_APPL) { DBG_ERR(("CAPI_REGISTER - appl.Id exceeds MAX_APPL")) @@ -775,97 +780,47 @@ static void diva_register_appl(struct ca return; /* appl already registered */ } - if (!try_module_get(ctrl->owner)) { - printk(KERN_WARNING "%s: cannot reserve module\n", __FUNCTION__); - return; - } - /* alloc memory */ bnum = rp->level3cnt * rp->datablkcnt; xnum = rp->level3cnt * MAX_DATA_B3; - if (!(DataNCCI = diva_os_malloc(0, bnum * sizeof(word)))) { - DBG_ERR(("CAPI_REGISTER - memory allocation failed")) - module_put(ctrl->owner); - return; - } - memset(DataNCCI, 0, bnum * sizeof(word)); - - if (!(DataFlags = diva_os_malloc(0, bnum * sizeof(word)))) { - DBG_ERR(("CAPI_REGISTER - memory allocation failed")) - diva_os_free(0, DataNCCI); - module_put(ctrl->owner); - return; - } - memset(DataFlags, 0, bnum * sizeof(word)); - - if (!(ReceiveBuffer = diva_os_malloc(0, bnum * rp->datablklen))) { - DBG_ERR(("CAPI_REGISTER - memory allocation failed")) - diva_os_free(0, DataNCCI); - diva_os_free(0, DataFlags); - module_put(ctrl->owner); - return; - } - memset(ReceiveBuffer, 0, bnum * rp->datablklen); - - if (!(xbuffer_used = (byte *) diva_os_malloc(0, xnum))) { - DBG_ERR(("CAPI_REGISTER - memory allocation failed")) - diva_os_free(0, DataNCCI); - diva_os_free(0, DataFlags); - diva_os_free(0, ReceiveBuffer); - module_put(ctrl->owner); - return; - } - memset(xbuffer_used, 0, xnum); + mem_len = bnum * sizeof(word); /* DataNCCI */ + mem_len += bnum * sizeof(word); /* DataFlags */ + mem_len += bnum * rp->datablklen; /* ReceiveBuffer */ + mem_len += xnum; /* xbuffer_used */ + mem_len += xnum * sizeof(void *); /* xbuffer_ptr */ + mem_len += xnum * sizeof(void *); /* xbuffer_internal */ + mem_len += xnum * rp->datablklen; /* xbuffer_ptr[xnum] */ - if (!(xbuffer_ptr = (void **) diva_os_malloc(0, xnum * sizeof(void *)))) { + if (!(p = diva_os_malloc(0, mem_len))) { DBG_ERR(("CAPI_REGISTER - memory allocation failed")) - diva_os_free(0, DataNCCI); - diva_os_free(0, DataFlags); - diva_os_free(0, ReceiveBuffer); - diva_os_free(0, xbuffer_used); - module_put(ctrl->owner); return; } - memset(xbuffer_ptr, 0, xnum * sizeof(void *)); - - if (!(xbuffer_internal = (void **) diva_os_malloc(0, xnum * sizeof(void *)))) { - DBG_ERR(("CAPI_REGISTER - memory allocation failed")) - diva_os_free(0, DataNCCI); - diva_os_free(0, DataFlags); - diva_os_free(0, ReceiveBuffer); - diva_os_free(0, xbuffer_used); - diva_os_free(0, xbuffer_ptr); - module_put(ctrl->owner); - return; - } - memset(xbuffer_internal, 0, xnum * sizeof(void *)); + memset(p, 0, mem_len); + DataNCCI = (void *)p; + p += bnum * sizeof(word); + DataFlags = (void *)p; + p += bnum * sizeof(word); + ReceiveBuffer = (void *)p; + p += bnum * rp->datablklen; + xbuffer_used = (void *)p; + p += xnum; + xbuffer_ptr = (void **)p; + p += xnum * sizeof(void *); + xbuffer_internal = (void **)p; + p += xnum * sizeof(void *); for (i = 0; i < xnum; i++) { - xbuffer_ptr[i] = diva_os_malloc(0, rp->datablklen); - if (!xbuffer_ptr[i]) { - DBG_ERR(("CAPI_REGISTER - memory allocation failed")) - if (i) { - for (j = 0; j < i; j++) - if (xbuffer_ptr[j]) - diva_os_free(0, xbuffer_ptr [j]); - } - diva_os_free(0, DataNCCI); - diva_os_free(0, DataFlags); - diva_os_free(0, ReceiveBuffer); - diva_os_free(0, xbuffer_used); - diva_os_free(0, xbuffer_ptr); - diva_os_free(0, xbuffer_internal); - module_put(ctrl->owner); - return; - } + xbuffer_ptr[i] = (void *)p; + p += rp->datablklen; } DBG_LOG(("CAPI_REGISTER - Id = %d", appl)) DBG_LOG((" MaxLogicalConnections = %d", rp->level3cnt)) DBG_LOG((" MaxBDataBuffers = %d", rp->datablkcnt)) DBG_LOG((" MaxBDataLength = %d", rp->datablklen)) + DBG_LOG((" Allocated Memory = %d", mem_len)) /* initialize application data */ diva_os_enter_spin_lock(&api_lock, &old_irql, "register_appl"); @@ -875,9 +830,6 @@ static void diva_register_appl(struct ca this->Id = appl; - /* We do not need a list */ - /* InitializeListHead(&this->s_function); */ - for (i = 0; i < max_adapter; i++) { adapter[i].CIP_Mask[appl - 1] = 0; } @@ -911,41 +863,24 @@ static void diva_release_appl(struct cap { diva_os_spin_lock_magic_t old_irql; APPL *this = &application[appl - 1]; - int i = 0; + + DBG_TRC(("application %d(%d) cleanup", this->Id, appl)) if (diva_os_in_irq()) { DBG_ERR(("CAPI_RELEASE - in irq context !")) return; } - if (this->Id) { - DBG_TRC(("application %d cleanup", this->Id)) - } diva_os_enter_spin_lock(&api_lock, &old_irql, "release_appl"); if (this->Id) { CapiRelease(this->Id); if (this->DataNCCI) diva_os_free(0, this->DataNCCI); - if (this->DataFlags) - diva_os_free(0, this->DataFlags); - if (this->ReceiveBuffer) - diva_os_free(0, this->ReceiveBuffer); - if (this->xbuffer_ptr) { - for (i = 0; i < (MAX_DATA_B3 * this->MaxNCCI); i++) { - if (this->xbuffer_ptr[i]) - diva_os_free(0, this->xbuffer_ptr[i]); - } - diva_os_free(0, this->xbuffer_ptr); - } - if (this->xbuffer_internal) - diva_os_free(0, this->xbuffer_internal); - if (this->xbuffer_used) - diva_os_free(0, this->xbuffer_used); + this->DataNCCI = NULL; this->Id = 0; } diva_os_leave_spin_lock(&api_lock, &old_irql, "release_appl"); - module_put(ctrl->owner); } /* @@ -954,7 +889,7 @@ static void diva_release_appl(struct cap static u16 diva_send_message(struct capi_ctr *ctrl, diva_os_message_buffer_s * dmb) { - int i = 0, j = 0; + int i = 0; word ret = 0; diva_os_spin_lock_magic_t old_irql; CAPI_MSG *msg = (CAPI_MSG *) DIVA_MESSAGE_BUFFER_DATA(dmb); @@ -971,6 +906,10 @@ static u16 diva_send_message(struct capi } DBG_PRV1(("Write - appl = %d, cmd = 0x%x", this->Id, command)) + if (!this->Id) { + return CAPI_ILLAPPNR; + } + /* patch controller number */ msg->header.controller = ControllerMap[card->Id] | (msg->header.controller & 0x80); /* preserve external controller bit */ @@ -983,13 +922,17 @@ static u16 diva_send_message(struct capi break; case _DATA_B3_I | RESPONSE: +#ifndef DIVA_NO_DEBUGLIB if (myDriverDebugHandle.dbgMask & DL_BLK) xlog("\x00\x02", msg, 0x80, clength); +#endif break; case _DATA_B3_R: +#ifndef DIVA_NO_DEBUGLIB if (myDriverDebugHandle.dbgMask & DL_BLK) xlog("\x00\x02", msg, 0x80, clength); +#endif if (clength == 24) clength = 22; /* workaround for PPcom bug */ @@ -1016,8 +959,10 @@ static u16 diva_send_message(struct capi memcpy(this->xbuffer_ptr[i], &((__u8 *) msg)[clength], READ_WORD(&msg->info.data_b3_req.Data_Length)); +#ifndef DIVA_NO_DEBUGLIB if ((myDriverDebugHandle.dbgMask & DL_BLK) && (myDriverDebugHandle.dbgMask & DL_XLOG)) { + int j; for (j = 0; j < READ_WORD(&msg->info.data_b3_req.Data_Length); j += 256) { @@ -1028,6 +973,7 @@ static u16 diva_send_message(struct capi break; /* not more if not explicitely requested */ } } +#endif break; } @@ -1091,7 +1037,7 @@ static void didd_callback(void *context, } else { memcpy(&MAdapter, adapter, sizeof(MAdapter)); dprintf = (DIVA_DI_PRINTF) MAdapter.request; - DbgRegister("CAPI20", DRIVERRELEASE, DBG_DEFAULT); + DbgRegister("CAPI20", DRIVERRELEASE_CAPI, DBG_DEFAULT); } } else if ((adapter->type > 0) && (adapter->type < 16)) { /* IDI Adapter */ if (removal) { @@ -1119,7 +1065,7 @@ static int divacapi_connect_didd(void) if (DIDD_Table[x].type == IDI_DIMAINT) { /* MAINT found */ memcpy(&MAdapter, &DIDD_Table[x], sizeof(DAdapter)); dprintf = (DIVA_DI_PRINTF) MAdapter.request; - DbgRegister("CAPI20", DRIVERRELEASE, DBG_DEFAULT); + DbgRegister("CAPI20", DRIVERRELEASE_CAPI, DBG_DEFAULT); break; } } @@ -1130,7 +1076,7 @@ static int divacapi_connect_didd(void) req.didd_notify.e.Req = 0; req.didd_notify.e.Rc = IDI_SYNC_REQ_DIDD_REGISTER_ADAPTER_NOTIFY; - req.didd_notify.info.callback = didd_callback; + req.didd_notify.info.callback = (void *)didd_callback; req.didd_notify.info.context = 0; DAdapter.request((ENTITY *) & req); if (req.didd_notify.e.Rc != 0xff) { @@ -1260,4 +1206,7 @@ void DIVA_EXIT_FUNCTION finit_capifunc(v divacapi_remove_cards(); remove_main_structs(); + + diva_os_destroy_spin_lock(&api_lock, "capifunc"); + diva_os_destroy_spin_lock(&ll_lock, "capifunc"); } diff -prauN linux-2.6.0-test5/drivers/isdn/hardware/eicon/capifunc.h wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/capifunc.h --- linux-2.6.0-test5/drivers/isdn/hardware/eicon/capifunc.h 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/capifunc.h 2003-09-25 19:15:56.000000000 -0700 @@ -1,10 +1,10 @@ -/* $Id: capifunc.h,v 1.1.2.2 2002/10/02 14:38:37 armin Exp $ +/* $Id: capifunc.h,v 1.10 2003/08/25 10:06:37 schindler Exp $ * * ISDN interface module for Eicon active cards DIVA. * CAPI Interface common functions * - * Copyright 2000-2002 by Armin Schindler (mac@melware.de) - * Copyright 2000-2002 Cytronics & Melware (info@melware.de) + * Copyright 2000-2003 by Armin Schindler (mac@melware.de) + * Copyright 2000-2003 Cytronics & Melware (info@melware.de) * * This software may be used and distributed according to the terms * of the GNU General Public License, incorporated herein by reference. @@ -21,7 +21,7 @@ #define M_COMPANY "Eicon Networks" -extern char DRIVERRELEASE[]; +extern char DRIVERRELEASE_CAPI[]; typedef struct _diva_card { int Id; diff -prauN linux-2.6.0-test5/drivers/isdn/hardware/eicon/capimain.c wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/capimain.c --- linux-2.6.0-test5/drivers/isdn/hardware/eicon/capimain.c 2003-09-08 12:49:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/capimain.c 2003-09-25 19:15:56.000000000 -0700 @@ -1,10 +1,10 @@ -/* $Id: capimain.c,v 1.1.2.2 2002/10/02 14:38:37 armin Exp $ +/* $Id: capimain.c,v 1.24 2003/09/09 06:51:05 schindler Exp $ * * ISDN interface module for Eicon active cards DIVA. * CAPI Interface * - * Copyright 2000-2002 by Armin Schindler (mac@melware.de) - * Copyright 2000-2002 Cytronics & Melware (info@melware.de) + * Copyright 2000-2003 by Armin Schindler (mac@melware.de) + * Copyright 2000-2003 Cytronics & Melware (info@melware.de) * * This software may be used and distributed according to the terms * of the GNU General Public License, incorporated herein by reference. @@ -15,10 +15,7 @@ #include #include #include -#include -#include #include -#include #include "os_capi.h" @@ -29,7 +26,7 @@ #include "cp_vers.h" #include "capifunc.h" -static char *main_revision = "$Revision: 1.1.2.11 $"; +static char *main_revision = "$Revision: 1.24 $"; static char *DRIVERNAME = "Eicon DIVA - CAPI Interface driver (http://www.melware.net)"; static char *DRIVERLNAME = "divacapi"; @@ -57,47 +54,6 @@ static char *getrev(const char *revision } /* - * sleep for some milliseconds - */ -void diva_os_sleep(dword mSec) -{ - unsigned long timeout = HZ * mSec / 1000 + 1; - - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(timeout); -} - -/* - * wait for some milliseconds - */ -void diva_os_wait(dword mSec) -{ - mdelay(mSec); -} - -/* - * alloc memory - */ -void *diva_os_malloc(unsigned long flags, unsigned long size) -{ - void *ret = NULL; - if (size) { - ret = (void *) vmalloc((unsigned int) size); - } - return (ret); -} - -/* - * free memory - */ -void diva_os_free(unsigned long unused, void *ptr) -{ - if (ptr) { - vfree(ptr); - } -} - -/* * alloc a message buffer */ diva_os_message_buffer_s *diva_os_alloc_message_buffer(unsigned long size, @@ -160,11 +116,11 @@ static int DIVA_INIT_FUNCTION divacapi_i char tmprev[32]; int ret = 0; - sprintf(DRIVERRELEASE, "%d.%d%s", DRRELMAJOR, DRRELMINOR, + sprintf(DRIVERRELEASE_CAPI, "%d.%d%s", DRRELMAJOR, DRRELMINOR, DRRELEXTRA); printk(KERN_INFO "%s\n", DRIVERNAME); - printk(KERN_INFO "%s: Rel:%s Rev:", DRIVERLNAME, DRIVERRELEASE); + printk(KERN_INFO "%s: Rel:%s Rev:", DRIVERLNAME, DRIVERRELEASE_CAPI); strcpy(tmprev, main_revision); printk("%s Build: %s(%s)\n", getrev(tmprev), diva_capi_common_code_build, DIVA_BUILD); diff -prauN linux-2.6.0-test5/drivers/isdn/hardware/eicon/dadapter.c wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/dadapter.c --- linux-2.6.0-test5/drivers/isdn/hardware/eicon/dadapter.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/dadapter.c 2003-09-25 19:15:56.000000000 -0700 @@ -49,8 +49,21 @@ dword Adapters = 0; /* Number of adapter Shadow IDI_DIMAINT and 'shadow' debug stuff -------------------------------------------------------------------------- */ -static void no_printf (unsigned char * format, ...) { } -DIVA_DI_PRINTF dprintf = no_printf; +static void no_printf (unsigned char * format, ...) +{ +#ifdef EBUG + va_list ap; + va_start (ap, format); + debug((format, ap)); + va_end (ap); +#endif +} + +/* ------------------------------------------------------------------------- + Portable debug Library + ------------------------------------------------------------------------- */ +#include "debuglib.c" + static DESCRIPTOR MAdapter = {IDI_DIMAINT, /* Adapter Type */ 0x00, /* Channels */ 0x0000, /* Features */ @@ -86,6 +99,7 @@ void diva_didd_load_time_init (void) { Should be called as last step, if driver does unload -------------------------------------------------------------------------- */ void diva_didd_load_time_finit (void) { + diva_os_destroy_spin_lock (&didd_spin, "didd"); } /* -------------------------------------------------------------------------- Called in order to register new adapter in adapter array @@ -349,7 +363,4 @@ void IDI_CALL_LINK_T DIVA_DIDD_Read (voi int length) { diva_didd_read_adapter_array (buffer, length); } -/* ------------------------------------------------------------------------- - Portable debug Library - ------------------------------------------------------------------------- */ -#include "debuglib.c" + diff -prauN linux-2.6.0-test5/drivers/isdn/hardware/eicon/debug.c wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/debug.c --- linux-2.6.0-test5/drivers/isdn/hardware/eicon/debug.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/debug.c 2003-09-25 19:15:56.000000000 -0700 @@ -2,7 +2,6 @@ #include "pc.h" #include "di_defs.h" #include "debug_if.h" -#include "linux/kernel.h" #include "divasync.h" #include "kst_ifc.h" #include "maintidi.h" @@ -96,9 +95,9 @@ static void queueInit (MSG_QUEUE *Q, byt static byte *queueAllocMsg (MSG_QUEUE *Q, word size) { /* Allocate 'size' bytes at tail of queue which will be filled later - * directly whith callers own message header info and/or message. + * directly with callers own message header info and/or message. * An 'alloced' message is marked incomplete by oring the 'Size' field - * whith MSG_INCOMPLETE. + * with MSG_INCOMPLETE. * This must be reset via queueCompleteMsg() after the message is filled. * As long as a message is marked incomplete queuePeekMsg() will return * a 'queue empty' condition when it reaches such a message. */ @@ -160,7 +159,7 @@ static void queueFreeMsg (MSG_QUEUE *Q) } static byte *queuePeekMsg (MSG_QUEUE *Q, word *size) { - /* Show the first valid message in queue BUT DONT free the message. + /* Show the first valid message in queue BUT DON'T free the message. * After looking on the message contents it can be freed queueFreeMsg() * or simply remain in message queue. */ @@ -195,7 +194,7 @@ static dword start_usec; length: length of the message queue do_init: perfor queue reset - return: zero on sucess, -1 on error + return: zero on success, -1 on error */ int diva_maint_init (byte* base, unsigned long length, int do_init) { if (dbg_queue || (!base) || (length < (4096*4))) { @@ -296,7 +295,7 @@ dword diva_dbg_q_length (void) { /* INTERFACE: - Lock messafe queue and return the pointer to the first + Lock message queue and return the pointer to the first entry. */ diva_dbg_entry_head_t* diva_maint_get_message (word* size, @@ -725,12 +724,12 @@ int diva_get_driver_info (dword id, byte if (clients[id].hDbg) { *p++ = 1; - *p++ = (byte)clients[id].sec; /* save secounds */ + *p++ = (byte)clients[id].sec; /* save seconds */ *p++ = (byte)(clients[id].sec >> 8); *p++ = (byte)(clients[id].sec >> 16); *p++ = (byte)(clients[id].sec >> 24); - *p++ = (byte)(clients[id].usec/1000); /* save msecounds */ + *p++ = (byte)(clients[id].usec/1000); /* save mseconds */ *p++ = (byte)((clients[id].usec/1000) >> 8); *p++ = (byte)((clients[id].usec/1000) >> 16); *p++ = (byte)((clients[id].usec/1000) >> 24); @@ -1079,7 +1078,7 @@ void diva_mnt_remove_xdi_adapter (const } /* ---------------------------------------------------------------- - Low level interface for management interace client + Low level interface for management interface client ---------------------------------------------------------------- */ /* Return handle to client structure @@ -1462,7 +1461,7 @@ static void diva_maint_state_change_noti case DIVA_SUPER_TRACE_NOTIFY_STAT_CHANGE: if (pC->hDbg->dbgMask & DIVA_MGT_DBG_IFC_STATISTICS) { /* - Incoming Statistices + Incoming Statistics */ if (channel->pInterfaceStat->inc.Calls) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, @@ -1498,7 +1497,7 @@ static void diva_maint_state_change_noti } /* - Outgoing Statistices + Outgoing Statistics */ if (channel->pInterfaceStat->outg.Calls) { diva_mnt_internal_dprintf (pC->hDbg->id, DLI_LOG, diff -prauN linux-2.6.0-test5/drivers/isdn/hardware/eicon/debuglib.c wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/debuglib.c --- linux-2.6.0-test5/drivers/isdn/hardware/eicon/debuglib.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/debuglib.c 2003-09-25 19:15:56.000000000 -0700 @@ -23,8 +23,15 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * */ + #include "debuglib.h" + +#ifdef DIVA_NO_DEBUGLIB +static DIVA_DI_PRINTF dprintf; +#else /* DIVA_NO_DEBUGLIB */ + _DbgHandle_ myDriverDebugHandle = { 0 /*!Registered*/, DBG_HANDLE_VERSION }; +DIVA_DI_PRINTF dprintf = no_printf; /*****************************************************************************/ #define DBG_FUNC(name) \ void \ @@ -146,3 +153,4 @@ void xdi_dbg_xlog (char* x, ...) { va_end(ap); } /*****************************************************************************/ +#endif /* DIVA_NO_DEBUGLIB */ diff -prauN linux-2.6.0-test5/drivers/isdn/hardware/eicon/debuglib.h wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/debuglib.h --- linux-2.6.0-test5/drivers/isdn/hardware/eicon/debuglib.h 2003-09-08 12:50:42.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/debuglib.h 2003-09-25 19:15:56.000000000 -0700 @@ -101,6 +101,34 @@ * with _KERNEL_DBG_PRINT_ */ #define DL_TO_KERNEL 0x40000000 + +#ifdef DIVA_NO_DEBUGLIB +#define myDbgPrint_LOG(x,...) do { } while(0); +#define myDbgPrint_FTL(x,...) do { } while(0); +#define myDbgPrint_ERR(x,...) do { } while(0); +#define myDbgPrint_TRC(x,...) do { } while(0); +#define myDbgPrint_MXLOG(x,...) do { } while(0); +#define myDbgPrint_EVL(x,...) do { } while(0); +#define myDbgPrint_REG(x,...) do { } while(0); +#define myDbgPrint_MEM(x,...) do { } while(0); +#define myDbgPrint_SPL(x,...) do { } while(0); +#define myDbgPrint_IRP(x,...) do { } while(0); +#define myDbgPrint_TIM(x,...) do { } while(0); +#define myDbgPrint_BLK(x,...) do { } while(0); +#define myDbgPrint_TAPI(x,...) do { } while(0); +#define myDbgPrint_NDIS(x,...) do { } while(0); +#define myDbgPrint_CONN(x,...) do { } while(0); +#define myDbgPrint_STAT(x,...) do { } while(0); +#define myDbgPrint_SEND(x,...) do { } while(0); +#define myDbgPrint_RECV(x,...) do { } while(0); +#define myDbgPrint_PRV0(x,...) do { } while(0); +#define myDbgPrint_PRV1(x,...) do { } while(0); +#define myDbgPrint_PRV2(x,...) do { } while(0); +#define myDbgPrint_PRV3(x,...) do { } while(0); +#define DBG_TEST(func,args) do { } while(0); +#define DBG_EVL_ID(args) do { } while(0); + +#else /* DIVA_NO_DEBUGLIB */ /* * define low level macros for formatted & raw debugging */ @@ -156,6 +184,9 @@ DBG_DECL(PRV3) { if ( (myDriverDebugHandle.dbgMask) & (unsigned long)DL_EVL ) \ { myDbgPrint_EVL args ; \ } } + +#endif /* DIVA_NO_DEBUGLIB */ + #define DBG_LOG(args) DBG_TEST(LOG, args) #define DBG_FTL(args) DBG_TEST(FTL, args) #define DBG_ERR(args) DBG_TEST(ERR, args) @@ -182,9 +213,16 @@ DBG_DECL(PRV3) /* * prototypes for debug register/deregister functions in "debuglib.c" */ +#ifdef DIVA_NO_DEBUGLIB +#define DbgRegister(name,tag, mask) do { } while(0) +#define DbgDeregister() do { } while(0) +#define DbgSetLevel(mask) do { } while(0) +#else +extern DIVA_DI_PRINTF dprintf; extern int DbgRegister (char *drvName, char *drvTag, unsigned long dbgMask) ; extern void DbgDeregister (void) ; extern void DbgSetLevel (unsigned long dbgMask) ; +#endif /* * driver internal structure for debug handling; * in client drivers this structure is maintained in "debuglib.c", @@ -274,9 +312,11 @@ typedef struct } CardTrace; } u1; } _DbgExtendedInfo_; +#ifndef DIVA_NO_DEBUGLIB /* ------------------------------------------------------------- Function used for xlog-style debug ------------------------------------------------------------- */ #define XDI_USE_XLOG 1 void xdi_dbg_xlog (char* x, ...); +#endif /* DIVA_NO_DEBUGLIB */ #endif /* __DEBUGLIB_H__ */ diff -prauN linux-2.6.0-test5/drivers/isdn/hardware/eicon/di.c wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/di.c --- linux-2.6.0-test5/drivers/isdn/hardware/eicon/di.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/di.c 2003-09-25 19:15:56.000000000 -0700 @@ -112,16 +112,14 @@ void pr_out(ADAPTER * a) #ifdef USE_EXTENDED_DEBUGS if ( !this ) { - ISDN_ADAPTER *io = (ISDN_ADAPTER *)a->io ; DBG_FTL(("XDI: [%02x] !A%d ==> NULL entity ptr - try to ignore", - xdi_xlog_sec++, (int)io->ANum)) + xdi_xlog_sec++, (int)((ISDN_ADAPTER *)a->io)->ANum)) e_no = look_req(a) ; ReadyCount-- ; continue ; } { - ISDN_ADAPTER *io = (ISDN_ADAPTER *)a->io ; - DBG_TRC((">A%d Id=0x%x Req=0x%x", io->ANum, this->Id, this->Req)) + DBG_TRC((">A%d Id=0x%x Req=0x%x", ((ISDN_ADAPTER *)a->io)->ANum, this->Id, this->Req)) } #else dbug(dprintf("out:Req=%x,Id=%x,Ch=%x",this->Req,this->Id,this->ReqCh)); @@ -563,8 +561,7 @@ byte isdn_rc(ADAPTER * a, int cancel_rc; #ifdef USE_EXTENDED_DEBUGS { - ISDN_ADAPTER *io = (ISDN_ADAPTER *)a->io ; - DBG_TRC(("ANum, Id, Rc)) + DBG_TRC(("io)->ANum, Id, Rc)) } #else dbug(dprintf("isdn_rc(Rc=%x,Id=%x,Ch=%x)",Rc,Id,Ch)); @@ -767,8 +764,7 @@ byte isdn_ind(ADAPTER * a, byte* cma = 0; #ifdef USE_EXTENDED_DEBUGS { - ISDN_ADAPTER *io = (ISDN_ADAPTER *)a->io ; - DBG_TRC(("ANum, Id, Ind)) + DBG_TRC(("io)->ANum, Id, Ind)) } #else dbug(dprintf("isdn_ind(Ind=%x,Id=%x,Ch=%x)",Ind,Id,Ch)); @@ -956,10 +952,10 @@ static void xdi_xlog_rc_event (byte Adap byte Id, byte Ch, byte Rc, byte cb, byte type) { #if defined(XDI_USE_XLOG) word LogInfo[4]; - LogInfo[0] = (word)Adapter | (word)(xdi_xlog_sec++ << 8); - LogInfo[1] = (word)Id | (word)(Ch << 8); - LogInfo[2] = (word)Rc | (word)(type << 8); - LogInfo[3] = cb; + WRITE_WORD(&LogInfo[0], ((word)Adapter | (word)(xdi_xlog_sec++ << 8))); + WRITE_WORD(&LogInfo[1], ((word)Id | (word)(Ch << 8))); + WRITE_WORD(&LogInfo[2], ((word)Rc | (word)(type << 8))); + WRITE_WORD(&LogInfo[3], cb); xdi_xlog ((byte*)&LogInfo[0], 221, sizeof(LogInfo)); #endif } @@ -980,9 +976,9 @@ static void xdi_xlog_request (byte Adapt byte Ch, byte Req, byte type) { #if defined(XDI_USE_XLOG) word LogInfo[3]; - LogInfo[0] = (word)Adapter | (word)(xdi_xlog_sec++ << 8); - LogInfo[1] = (word)Id | (word)(Ch << 8); - LogInfo[2] = (word)Req | (word)(type << 8); + WRITE_WORD(&LogInfo[0], ((word)Adapter | (word)(xdi_xlog_sec++ << 8))); + WRITE_WORD(&LogInfo[1], ((word)Id | (word)(Ch << 8))); + WRITE_WORD(&LogInfo[2], ((word)Req | (word)(type << 8))); xdi_xlog ((byte*)&LogInfo[0], 220, sizeof(LogInfo)); #endif } @@ -1024,10 +1020,10 @@ static void xdi_xlog_ind (byte Adapter, byte type) { #if defined(XDI_USE_XLOG) word LogInfo[4]; - LogInfo[0] = (word)Adapter | (word)(xdi_xlog_sec++ << 8); - LogInfo[1] = (word)Id | (word)(Ch << 8); - LogInfo[2] = (word)Ind | (word)(type << 8); - LogInfo[3] = (word)rnr | (word)(rnr_valid << 8); + WRITE_WORD(&LogInfo[0], ((word)Adapter | (word)(xdi_xlog_sec++ << 8))); + WRITE_WORD(&LogInfo[1], ((word)Id | (word)(Ch << 8))); + WRITE_WORD(&LogInfo[2], ((word)Ind | (word)(type << 8))); + WRITE_WORD(&LogInfo[3], ((word)rnr | (word)(rnr_valid << 8))); xdi_xlog ((byte*)&LogInfo[0], 222, sizeof(LogInfo)); #endif } diff -prauN linux-2.6.0-test5/drivers/isdn/hardware/eicon/diddfunc.c wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/diddfunc.c --- linux-2.6.0-test5/drivers/isdn/hardware/eicon/diddfunc.c 2003-09-08 12:50:42.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/diddfunc.c 2003-09-25 19:15:56.000000000 -0700 @@ -1,11 +1,11 @@ -/* $Id: diddfunc.c,v 1.1.2.2 2002/10/02 14:38:37 armin Exp $ +/* $Id: diddfunc.c,v 1.14 2003/08/25 10:06:37 schindler Exp $ * * DIDD Interface module for Eicon active cards. * * Functions are in dadapter.c * - * Copyright 2002 by Armin Schindler (mac@melware.de) - * Copyright 2002 Cytronics & Melware (info@melware.de) + * Copyright 2002-2003 by Armin Schindler (mac@melware.de) + * Copyright 2002-2003 Cytronics & Melware (info@melware.de) * * This software may be used and distributed according to the terms * of the GNU General Public License, incorporated herein by reference. @@ -23,7 +23,7 @@ extern void DIVA_DIDD_Read(void *, int); -extern char *DRIVERRELEASE; +extern char *DRIVERRELEASE_DIDD; static dword notify_handle; static DESCRIPTOR _DAdapter; @@ -40,7 +40,7 @@ static void *didd_callback(void *context if (removal) { DbgDeregister(); } else { - DbgRegister("DIDD", DRIVERRELEASE, DBG_DEFAULT); + DbgRegister("DIDD", DRIVERRELEASE_DIDD, DBG_DEFAULT); } } return (NULL); @@ -65,14 +65,14 @@ static int DIVA_INIT_FUNCTION connect_di req.didd_notify.e.Req = 0; req.didd_notify.e.Rc = IDI_SYNC_REQ_DIDD_REGISTER_ADAPTER_NOTIFY; - req.didd_notify.info.callback = didd_callback; + req.didd_notify.info.callback = (void *)didd_callback; req.didd_notify.info.context = 0; _DAdapter.request((ENTITY *) & req); if (req.didd_notify.e.Rc != 0xff) return (0); notify_handle = req.didd_notify.info.handle; } else if (DIDD_Table[x].type == IDI_DIMAINT) { /* MAINT found */ - DbgRegister("DIDD", DRIVERRELEASE, DBG_DEFAULT); + DbgRegister("DIDD", DRIVERRELEASE_DIDD, DBG_DEFAULT); } } return (dadapter); diff -prauN linux-2.6.0-test5/drivers/isdn/hardware/eicon/diva.c wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/diva.c --- linux-2.6.0-test5/drivers/isdn/hardware/eicon/diva.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/diva.c 2003-09-25 19:15:56.000000000 -0700 @@ -1,4 +1,4 @@ -/* $Id: diva.c,v 1.1.2.5 2001/02/14 21:10:19 armin Exp $ */ +/* $Id: diva.c,v 1.17 2003/09/09 06:52:01 schindler Exp $ */ #define CARDTYPE_H_WANT_DATA 1 #define CARDTYPE_H_WANT_IDI_DATA 0 @@ -7,7 +7,6 @@ #include "platform.h" #include "debuglib.h" -#include "diva_pci.h" #include "cardtype.h" #include "dlist.h" #include "pc.h" @@ -15,19 +14,17 @@ #include "di.h" #include "io.h" #include "pc_maint.h" - #include "xdi_msg.h" #include "xdi_adapter.h" +#include "diva_pci.h" #include "diva.h" #ifdef CONFIG_ISDN_DIVAS_PRIPCI #include "os_pri.h" #endif -#ifdef CONFIG_ISDN_DIVAS_4BRIPCI -#include "os_4bri.h" -#endif #ifdef CONFIG_ISDN_DIVAS_BRIPCI #include "os_bri.h" +#include "os_4bri.h" #endif PISDN_ADAPTER IoAdapters[MAX_ADAPTER]; @@ -78,6 +75,11 @@ DivaIdiReqFunc(31) struct pt_regs; /* + * include queue functions + */ +#include "dlist.c" + +/* ** LOCALS */ diva_entity_queue_t adapter_queue; @@ -109,7 +111,7 @@ static diva_supported_cards_info_t divas */ {CARDTYPE_DIVASRV_VOICE_P_30M_V2_PCI, diva_pri_init_card}, #endif -#ifdef CONFIG_ISDN_DIVAS_4BRIPCI +#ifdef CONFIG_ISDN_DIVAS_BRIPCI /* 4BRI Rev 1 Cards */ @@ -126,8 +128,6 @@ static diva_supported_cards_info_t divas {CARDTYPE_DIVASRV_B_2M_V2_PCI, diva_4bri_init_card}, {CARDTYPE_DIVASRV_B_2F_PCI, diva_4bri_init_card}, {CARDTYPE_DIVASRV_VOICE_B_2M_V2_PCI, diva_4bri_init_card}, -#endif -#ifdef CONFIG_ISDN_DIVAS_BRIPCI /* BRI */ @@ -193,6 +193,7 @@ void *diva_driver_add_card(void *pdev, u pdiva->controller = i + 1; pdiva->xdi_adapter.ANum = pdiva->controller; IoAdapters[i] = &pdiva->xdi_adapter; + diva_os_leave_spin_lock(&adapter_lock, &old_irql, "add card"); create_adapter_proc(pdiva); /* add adapter to proc file system */ DBG_LOG(("add %s:%d", @@ -200,6 +201,7 @@ void *diva_driver_add_card(void *pdev, u [CardOrdinal].Name, pdiva->controller)) + diva_os_enter_spin_lock(&adapter_lock, &old_irql, "add card"); pa = pdiva; for (j = 1; j < nr; j++) { /* slave adapters, if any */ pa = (diva_os_xdi_adapter_t *) diva_q_get_next(&pa->link); @@ -207,8 +209,11 @@ void *diva_driver_add_card(void *pdev, u pa->controller = i + 1 + j; pa->xdi_adapter.ANum = pa->controller; IoAdapters[i + j] = &pa->xdi_adapter; + diva_os_leave_spin_lock(&adapter_lock, &old_irql, "add card"); DBG_LOG(("add slave adapter (%d)", - pa->controller)) create_adapter_proc(pa); /* add adapter to proc file system */ + pa->controller)) + create_adapter_proc(pa); /* add adapter to proc file system */ + diva_os_enter_spin_lock(&adapter_lock, &old_irql, "add card"); } else { DBG_ERR(("slave adapter problem")) break; @@ -463,7 +468,8 @@ diva_xdi_write(void *adapter, void *os_h } } else { DBG_ERR(("A: A(%d) write error (%d)", a->controller, - length))} + length)) + } diva_os_free(0, data); @@ -564,7 +570,6 @@ static void diva_init_request_array(void Requests[31] = DivaIdiRequest31; } -/* card: 1-based card number */ void diva_xdi_display_adapter_features(int card) { dword features; diff -prauN linux-2.6.0-test5/drivers/isdn/hardware/eicon/diva_didd.c wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/diva_didd.c --- linux-2.6.0-test5/drivers/isdn/hardware/eicon/diva_didd.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/diva_didd.c 2003-09-25 19:15:56.000000000 -0700 @@ -1,11 +1,11 @@ -/* $Id: diva_didd.c,v 1.1.2.6 2001/05/01 15:48:05 armin Exp $ +/* $Id: diva_didd.c,v 1.13 2003/08/27 10:11:21 schindler Exp $ * * DIDD Interface module for Eicon active cards. * * Functions are in dadapter.c * - * Copyright 2002 by Armin Schindler (mac@melware.de) - * Copyright 2002 Cytronics & Melware (info@melware.de) + * Copyright 2002-2003 by Armin Schindler (mac@melware.de) + * Copyright 2002-2003 Cytronics & Melware (info@melware.de) * * This software may be used and distributed according to the terms * of the GNU General Public License, incorporated herein by reference. @@ -23,14 +23,13 @@ #include "divasync.h" #include "did_vers.h" -static char *main_revision = "$Revision: 1.1.2.6 $"; +static char *main_revision = "$Revision: 1.13 $"; static char *DRIVERNAME = "Eicon DIVA - DIDD table (http://www.melware.net)"; static char *DRIVERLNAME = "divadidd"; -char *DRIVERRELEASE = "2.0"; +char *DRIVERRELEASE_DIDD = "2.0"; -static char *dir_in_proc_net = "isdn"; static char *main_proc_dir = "eicon"; MODULE_DESCRIPTION("DIDD table driver for diva drivers"); @@ -48,12 +47,11 @@ extern void diddfunc_finit(void); extern void DIVA_DIDD_Read(void *, int); -static struct proc_dir_entry *proc_net_isdn; static struct proc_dir_entry *proc_didd; -struct proc_dir_entry *proc_net_isdn_eicon = NULL; +struct proc_dir_entry *proc_net_eicon = NULL; EXPORT_SYMBOL_NOVERS(DIVA_DIDD_Read); -EXPORT_SYMBOL_NOVERS(proc_net_isdn_eicon); +EXPORT_SYMBOL_NOVERS(proc_net_eicon); static char *getrev(const char *revision) { @@ -78,7 +76,7 @@ proc_read(char *page, char **start, off_ strcpy(tmprev, main_revision); len += sprintf(page + len, "%s\n", DRIVERNAME); len += sprintf(page + len, "name : %s\n", DRIVERLNAME); - len += sprintf(page + len, "release : %s\n", DRIVERRELEASE); + len += sprintf(page + len, "release : %s\n", DRIVERRELEASE_DIDD); len += sprintf(page + len, "build : %s(%s)\n", diva_didd_common_code_build, DIVA_BUILD); len += sprintf(page + len, "revision : %s\n", getrev(tmprev)); @@ -93,26 +91,12 @@ proc_read(char *page, char **start, off_ static int DIVA_INIT_FUNCTION create_proc(void) { - struct proc_dir_entry *pe; + proc_net_eicon = create_proc_entry(main_proc_dir, S_IFDIR, proc_net); - for (pe = proc_net->subdir; pe; pe = pe->next) { - if (!memcmp(dir_in_proc_net, pe->name, pe->namelen)) { - proc_net_isdn = pe; - break; - } - } - if (!proc_net_isdn) { - proc_net_isdn = - create_proc_entry(dir_in_proc_net, S_IFDIR, proc_net); - } - proc_net_isdn_eicon = - create_proc_entry(main_proc_dir, S_IFDIR, proc_net_isdn); - - if (proc_net_isdn_eicon) { - if ( - (proc_didd = + if (proc_net_eicon) { + if ((proc_didd = create_proc_entry(DRIVERLNAME, S_IFREG | S_IRUGO, - proc_net_isdn_eicon))) { + proc_net_eicon))) { proc_didd->read_proc = proc_read; } return (1); @@ -120,14 +104,10 @@ static int DIVA_INIT_FUNCTION create_pro return (0); } -static void remove_proc(void) +static void DIVA_EXIT_FUNCTION remove_proc(void) { - remove_proc_entry(DRIVERLNAME, proc_net_isdn_eicon); - remove_proc_entry(main_proc_dir, proc_net_isdn); - - if ((proc_net_isdn) && (!proc_net_isdn->subdir)) { - remove_proc_entry(dir_in_proc_net, proc_net); - } + remove_proc_entry(DRIVERLNAME, proc_net_eicon); + remove_proc_entry(main_proc_dir, proc_net); } static int DIVA_INIT_FUNCTION divadidd_init(void) @@ -136,7 +116,7 @@ static int DIVA_INIT_FUNCTION divadidd_i int ret = 0; printk(KERN_INFO "%s\n", DRIVERNAME); - printk(KERN_INFO "%s: Rel:%s Rev:", DRIVERLNAME, DRIVERRELEASE); + printk(KERN_INFO "%s: Rel:%s Rev:", DRIVERLNAME, DRIVERRELEASE_DIDD); strcpy(tmprev, main_revision); printk("%s Build:%s(%s)\n", getrev(tmprev), diva_didd_common_code_build, DIVA_BUILD); @@ -151,7 +131,9 @@ static int DIVA_INIT_FUNCTION divadidd_i if (!diddfunc_init()) { printk(KERN_ERR "%s: failed to connect to DIDD.\n", DRIVERLNAME); +#ifdef MODULE remove_proc(); +#endif ret = -EIO; goto out; } diff -prauN linux-2.6.0-test5/drivers/isdn/hardware/eicon/diva_pci.h wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/diva_pci.h --- linux-2.6.0-test5/drivers/isdn/hardware/eicon/diva_pci.h 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/diva_pci.h 2003-09-25 19:15:56.000000000 -0700 @@ -1,9 +1,12 @@ -/* $Id: diva_pci.h,v 1.1.2.2 2001/02/12 20:23:46 armin Exp $ */ +/* $Id: diva_pci.h,v 1.6 2003/01/04 15:29:45 schindler Exp $ */ #ifndef __DIVA_PCI_INTERFACE_H__ #define __DIVA_PCI_INTERFACE_H__ -void *divasa_remap_pci_bar(unsigned long bar, unsigned long area_length); +void *divasa_remap_pci_bar(diva_os_xdi_adapter_t *a, + int id, + unsigned long bar, + unsigned long area_length); void divasa_unmap_pci_bar(void *bar); unsigned long divasa_get_pci_irq(unsigned char bus, unsigned char func, void *pci_dev_handle); diff -prauN linux-2.6.0-test5/drivers/isdn/hardware/eicon/divacapi.h wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/divacapi.h --- linux-2.6.0-test5/drivers/isdn/hardware/eicon/divacapi.h 2003-09-08 12:50:00.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/divacapi.h 2003-09-25 19:15:56.000000000 -0700 @@ -643,7 +643,7 @@ struct async_s { unsigned parity:2; unsigned spare: 2; unsigned stp: 1; - unsigned ch_len:2; // 3th octett in CAI + unsigned ch_len:2; /* 3th octett in CAI */ }; diff -prauN linux-2.6.0-test5/drivers/isdn/hardware/eicon/divamnt.c wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/divamnt.c --- linux-2.6.0-test5/drivers/isdn/hardware/eicon/divamnt.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/divamnt.c 2003-09-25 19:15:56.000000000 -0700 @@ -1,10 +1,10 @@ -/* $Id: divamnt.c,v 1.1.2.4 2001/05/01 15:48:05 armin Exp $ +/* $Id: divamnt.c,v 1.27 2003/09/09 06:46:29 schindler Exp $ * * Driver for Eicon DIVA Server ISDN cards. * Maint module * - * Copyright 2000-2002 by Armin Schindler (mac@melware.de) - * Copyright 2000-2002 Cytronics & Melware (info@melware.de) + * Copyright 2000-2003 by Armin Schindler (mac@melware.de) + * Copyright 2000-2003 Cytronics & Melware (info@melware.de) * * This software may be used and distributed according to the terms * of the GNU General Public License, incorporated herein by reference. @@ -19,7 +19,6 @@ #include #include #include -#include #include #include "platform.h" @@ -28,16 +27,14 @@ #include "di_defs.h" #include "debug_if.h" -static char *main_revision = "$Revision: 1.1.2.4 $"; +static char *main_revision = "$Revision: 1.27 $"; -static int major = 241; +static int major; MODULE_DESCRIPTION("Maint driver for Eicon DIVA Server cards"); MODULE_AUTHOR("Cytronics & Melware, Eicon Networks"); MODULE_SUPPORTED_DEVICE("DIVA card driver"); MODULE_LICENSE("GPL"); -MODULE_PARM(major, "i"); -MODULE_PARM_DESC(major, "Major number for /dev/DivasMAINT"); int buffer_length = 128; MODULE_PARM(buffer_length, "i"); @@ -47,7 +44,8 @@ MODULE_PARM(diva_dbg_mem, "l"); static char *DRIVERNAME = "Eicon DIVA - MAINT module (http://www.melware.net)"; static char *DRIVERLNAME = "diva_mnt"; -char *DRIVERRELEASE = "2.0"; +static char *DEVNAME = "DivasMAINT"; +char *DRIVERRELEASE_MNT = "2.0"; static wait_queue_head_t msgwaitq; static DECLARE_MUTEX(opened_sem); @@ -77,18 +75,8 @@ static char *getrev(const char *revision } /* - * memory alloc + * buffer alloc */ -void *diva_os_malloc(unsigned long flags, unsigned long size) -{ - return (vmalloc(size)); -} -void diva_os_free(unsigned long flags, void *ptr) -{ - if (ptr) { - vfree(ptr); - } -} void *diva_os_malloc_tbuffer(unsigned long flags, unsigned long size) { return (kmalloc(size, GFP_KERNEL)); @@ -101,17 +89,6 @@ void diva_os_free_tbuffer(unsigned long } /* - * sleep msec - */ -void diva_os_sleep(dword mSec) -{ - unsigned long timeout = HZ * mSec / 1000 + 1; - - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(timeout); -} - -/* * kernel/user space copy functions */ int diva_os_copy_to_user(void *os_handle, void *dst, const void *src, @@ -158,7 +135,7 @@ void diva_os_get_time(dword * sec, dword * /proc entries */ -extern struct proc_dir_entry *proc_net_isdn_eicon; +extern struct proc_dir_entry *proc_net_eicon; static struct proc_dir_entry *maint_proc_entry = NULL; /* @@ -363,7 +340,7 @@ static int DIVA_INIT_FUNCTION create_mai { maint_proc_entry = create_proc_entry("maint", S_IFREG | S_IRUGO | S_IWUSR, - proc_net_isdn_eicon); + proc_net_eicon); if (!maint_proc_entry) return (0); @@ -376,7 +353,7 @@ static int DIVA_INIT_FUNCTION create_mai static void remove_maint_proc(void) { if (maint_proc_entry) { - remove_proc_entry("maint", proc_net_isdn_eicon); + remove_proc_entry("maint", proc_net_eicon); maint_proc_entry = NULL; } } @@ -408,20 +385,20 @@ static struct file_operations divas_main static void divas_maint_unregister_chrdev(void) { - devfs_remove("DivasMAINT"); - unregister_chrdev(major, "DivasMAINT"); + devfs_remove(DEVNAME); + unregister_chrdev(major, DEVNAME); } static int DIVA_INIT_FUNCTION divas_maint_register_chrdev(void) { - if (register_chrdev(major, "DivasMAINT", &divas_maint_fops)) + if ((major = register_chrdev(0, DEVNAME, &divas_maint_fops)) < 0) { printk(KERN_ERR "%s: failed to create /dev entry.\n", DRIVERLNAME); return (0); } + devfs_mk_cdev(MKDEV(major, 0), S_IFCHR|S_IRUSR|S_IWUSR, DEVNAME); - devfs_mk_cdev(MKDEV(major, 0), S_IFCHR|S_IRUSR|S_IWUSR, "DivasMAINT"); return (1); } @@ -446,10 +423,9 @@ static int DIVA_INIT_FUNCTION maint_init init_waitqueue_head(&msgwaitq); printk(KERN_INFO "%s\n", DRIVERNAME); - printk(KERN_INFO "%s: Rel:%s Rev:", DRIVERLNAME, DRIVERRELEASE); + printk(KERN_INFO "%s: Rel:%s Rev:", DRIVERLNAME, DRIVERRELEASE_MNT); strcpy(tmprev, main_revision); - printk("%s Build: %s Major: %d\n", getrev(tmprev), DIVA_BUILD, - major); + printk("%s Build: %s \n", getrev(tmprev), DIVA_BUILD); if (!divas_maint_register_chrdev()) { ret = -EIO; @@ -472,9 +448,9 @@ static int DIVA_INIT_FUNCTION maint_init goto out; } - printk(KERN_INFO "%s: trace buffer = %p - %d kBytes, %s \n", - DRIVERLNAME, buffer, buffer_length, - (diva_dbg_mem == 0) ? "internal" : "external"); + printk(KERN_INFO "%s: trace buffer = %p - %d kBytes, %s (Major: %d)\n", + DRIVERLNAME, buffer, (buffer_length / 1024), + (diva_dbg_mem == 0) ? "internal" : "external", major); out: return (ret); diff -prauN linux-2.6.0-test5/drivers/isdn/hardware/eicon/divasfunc.c wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/divasfunc.c --- linux-2.6.0-test5/drivers/isdn/hardware/eicon/divasfunc.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/divasfunc.c 2003-09-25 19:15:56.000000000 -0700 @@ -1,9 +1,9 @@ -/* $Id: divasfunc.c,v 1.1.2.2 2002/10/02 14:38:37 armin Exp $ +/* $Id: divasfunc.c,v 1.22 2003/09/09 06:46:29 schindler Exp $ * * Low level driver for Eicon DIVA Server ISDN cards. * - * Copyright 2000-2002 by Armin Schindler (mac@melware.de) - * Copyright 2000-2002 Cytronics & Melware (info@melware.de) + * Copyright 2000-2003 by Armin Schindler (mac@melware.de) + * Copyright 2000-2003 Cytronics & Melware (info@melware.de) * * This software may be used and distributed according to the terms * of the GNU General Public License, incorporated herein by reference. @@ -21,6 +21,8 @@ #define DBG_MINIMUM (DL_LOG + DL_FTL + DL_ERR) #define DBG_DEFAULT (DBG_MINIMUM + DL_XLOG + DL_REG) +static int debugmask; + extern void DIVA_DIDD_Read(void *, int); extern PISDN_ADAPTER IoAdapters[MAX_ADAPTER]; @@ -28,7 +30,7 @@ extern PISDN_ADAPTER IoAdapters[MAX_ADAP #define MAX_DESCRIPTORS 32 extern void diva_run_trap_script(PISDN_ADAPTER IoAdapter, dword ANum); -extern char *DRIVERRELEASE; +extern char *DRIVERRELEASE_DIVAS; static dword notify_handle; static DESCRIPTOR DAdapter; @@ -42,8 +44,6 @@ static void no_printf(unsigned char *x, /* dummy debug function */ } -DIVA_DI_PRINTF dprintf = no_printf; - #include "debuglib.c" /* @@ -117,10 +117,11 @@ void diva_xdi_didd_remove_adapter(int ca */ static void start_dbg(void) { - DbgRegister("DIVAS", DRIVERRELEASE, DBG_DEFAULT); + DbgRegister("DIVAS", DRIVERRELEASE_DIVAS, (debugmask) ? debugmask : DBG_DEFAULT); DBG_LOG(("DIVA ISDNXDI BUILD (%s[%s]-%s-%s)", DIVA_BUILD, diva_xdi_common_code_build, __DATE__, - __TIME__))} + __TIME__)) +} /* * stop debug @@ -174,7 +175,7 @@ static int DIVA_INIT_FUNCTION connect_di req.didd_notify.e.Req = 0; req.didd_notify.e.Rc = IDI_SYNC_REQ_DIDD_REGISTER_ADAPTER_NOTIFY; - req.didd_notify.info.callback = didd_callback; + req.didd_notify.info.callback = (void *)didd_callback; req.didd_notify.info.context = 0; DAdapter.request((ENTITY *) & req); if (req.didd_notify.e.Rc != 0xff) { @@ -214,13 +215,19 @@ static void DIVA_EXIT_FUNCTION disconnec /* * init */ -int DIVA_INIT_FUNCTION divasfunc_init(void) +int DIVA_INIT_FUNCTION divasfunc_init(int dbgmask) { + char *version; + + debugmask = dbgmask; + if (!connect_didd()) { DBG_ERR(("divasfunc: failed to connect to DIDD.")) return (0); } + version = diva_xdi_common_code_build; + divasa_xdi_driver_entry(); return (1); diff -prauN linux-2.6.0-test5/drivers/isdn/hardware/eicon/divasi.c wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/divasi.c --- linux-2.6.0-test5/drivers/isdn/hardware/eicon/divasi.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/divasi.c 2003-09-25 19:15:56.000000000 -0700 @@ -1,10 +1,10 @@ -/* $Id: divasi.c,v 1.1.2.7 2001/05/01 15:48:05 armin Exp $ +/* $Id: divasi.c,v 1.25 2003/09/09 06:46:29 schindler Exp $ * * Driver for Eicon DIVA Server ISDN cards. * User Mode IDI Interface * - * Copyright 2000-2002 by Armin Schindler (mac@melware.de) - * Copyright 2000-2002 Cytronics & Melware (info@melware.de) + * Copyright 2000-2003 by Armin Schindler (mac@melware.de) + * Copyright 2000-2003 Cytronics & Melware (info@melware.de) * * This software may be used and distributed according to the terms * of the GNU General Public License, incorporated herein by reference. @@ -19,7 +19,6 @@ #include #include #include -#include #include #include "platform.h" @@ -28,27 +27,27 @@ #include "um_xdi.h" #include "um_idi.h" -static char *main_revision = "$Revision: 1.1.2.7 $"; +static char *main_revision = "$Revision: 1.25 $"; -static int major = 242; +static int major; MODULE_DESCRIPTION("User IDI Interface for Eicon ISDN cards"); MODULE_AUTHOR("Cytronics & Melware, Eicon Networks"); MODULE_SUPPORTED_DEVICE("DIVA card driver"); MODULE_LICENSE("GPL"); -MODULE_PARM(major, "i"); -MODULE_PARM_DESC(major, "Major number for /dev/DivasIDI"); typedef struct _diva_um_idi_os_context { wait_queue_head_t read_wait; wait_queue_head_t close_wait; struct timer_list diva_timer_id; int aborted; + int adapter_nr; } diva_um_idi_os_context_t; static char *DRIVERNAME = "Eicon DIVA - User IDI (http://www.melware.net)"; static char *DRIVERLNAME = "diva_idi"; -char *DRIVERRELEASE = "2.0"; +static char *DEVNAME = "DivasIDI"; +char *DRIVERRELEASE_IDI = "2.0"; extern int idifunc_init(void); extern void idifunc_finit(void); @@ -83,32 +82,9 @@ static int remove_entity(void *entity); static void diva_um_timer_function(unsigned long data); /* - * malloc - */ -void *diva_os_malloc(unsigned long flags, unsigned long size) -{ - void *ret = NULL; - - if (size) { - ret = (void *) vmalloc((unsigned int) size); - } - return (ret); -} - -/* - * free - */ -void diva_os_free(unsigned long unused, void *ptr) -{ - if (ptr) { - vfree(ptr); - } -} - -/* * proc entry */ -extern struct proc_dir_entry *proc_net_isdn_eicon; +extern struct proc_dir_entry *proc_net_eicon; static struct proc_dir_entry *um_idi_proc_entry = NULL; static int @@ -120,10 +96,11 @@ um_idi_proc_read(char *page, char **star len += sprintf(page + len, "%s\n", DRIVERNAME); len += sprintf(page + len, "name : %s\n", DRIVERLNAME); - len += sprintf(page + len, "release : %s\n", DRIVERRELEASE); + len += sprintf(page + len, "release : %s\n", DRIVERRELEASE_IDI); strcpy(tmprev, main_revision); len += sprintf(page + len, "revision : %s\n", getrev(tmprev)); len += sprintf(page + len, "build : %s\n", DIVA_BUILD); + len += sprintf(page + len, "major : %d\n", major); if (off + count >= len) *eof = 1; @@ -137,7 +114,7 @@ static int DIVA_INIT_FUNCTION create_um_ { um_idi_proc_entry = create_proc_entry(DRIVERLNAME, S_IFREG | S_IRUGO | S_IWUSR, - proc_net_isdn_eicon); + proc_net_eicon); if (!um_idi_proc_entry) return (0); @@ -150,7 +127,7 @@ static int DIVA_INIT_FUNCTION create_um_ static void remove_um_idi_proc(void) { if (um_idi_proc_entry) { - remove_proc_entry(DRIVERLNAME, proc_net_isdn_eicon); + remove_proc_entry(DRIVERLNAME, proc_net_eicon); um_idi_proc_entry = NULL; } } @@ -167,20 +144,20 @@ static struct file_operations divas_idi_ static void divas_idi_unregister_chrdev(void) { - devfs_remove("DivasIDI"); - unregister_chrdev(major, "DivasIDI"); + devfs_remove(DEVNAME); + unregister_chrdev(major, DEVNAME); } static int DIVA_INIT_FUNCTION divas_idi_register_chrdev(void) { - if (register_chrdev(major, "DivasIDI", &divas_idi_fops)) + if ((major = register_chrdev(0, DEVNAME, &divas_idi_fops)) < 0) { printk(KERN_ERR "%s: failed to create /dev entry.\n", DRIVERLNAME); return (0); } + devfs_mk_cdev(MKDEV(major, 0), S_IFCHR|S_IRUSR|S_IWUSR, DEVNAME); - devfs_mk_cdev(MKDEV(major, 0), S_IFCHR|S_IRUSR|S_IWUSR, "DivasIDI"); return (1); } @@ -193,10 +170,9 @@ static int DIVA_INIT_FUNCTION divasi_ini int ret = 0; printk(KERN_INFO "%s\n", DRIVERNAME); - printk(KERN_INFO "%s: Rel:%s Rev:", DRIVERLNAME, DRIVERRELEASE); + printk(KERN_INFO "%s: Rel:%s Rev:", DRIVERLNAME, DRIVERRELEASE_IDI); strcpy(tmprev, main_revision); - printk("%s Build: %s Major: %d\n", getrev(tmprev), DIVA_BUILD, - major); + printk("%s Build: %s\n", getrev(tmprev), DIVA_BUILD); if (!divas_idi_register_chrdev()) { ret = -EIO; @@ -219,6 +195,7 @@ static int DIVA_INIT_FUNCTION divasi_ini ret = -EIO; goto out; } + printk(KERN_INFO "%s: started with major %d\n", DRIVERLNAME, major); out: return (ret); @@ -330,6 +307,7 @@ static int um_idi_open_adapter(struct fi p_os->diva_timer_id.function = (void *) diva_um_timer_function; p_os->diva_timer_id.data = (unsigned long) p_os; p_os->aborted = 0; + p_os->adapter_nr = adapter_nr; return (1); } @@ -432,7 +410,8 @@ static int um_idi_open(struct inode *ino static int um_idi_release(struct inode *inode, struct file *file) { - unsigned int adapter_nr = iminor(inode); + diva_um_idi_os_context_t *p_os; + unsigned int adapter_nr; int ret = 0; if (!(file->private_data)) { @@ -440,6 +419,14 @@ static int um_idi_release(struct inode * goto out; } + if (!(p_os = + (diva_um_idi_os_context_t *) diva_um_id_get_os_context(file->private_data))) { + ret = -ENODEV; + goto out; + } + + adapter_nr = p_os->adapter_nr; + if ((ret = remove_entity(file->private_data))) { goto out; } diff -prauN linux-2.6.0-test5/drivers/isdn/hardware/eicon/divasmain.c wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/divasmain.c --- linux-2.6.0-test5/drivers/isdn/hardware/eicon/divasmain.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/divasmain.c 2003-09-25 19:15:56.000000000 -0700 @@ -1,9 +1,9 @@ -/* $Id: divasmain.c,v 1.1.2.8 2001/05/01 15:48:05 armin Exp $ +/* $Id: divasmain.c,v 1.40 2003/09/10 08:02:33 schindler Exp $ * * Low level driver for Eicon DIVA Server ISDN cards. * - * Copyright 2000-2002 by Armin Schindler (mac@melware.de) - * Copyright 2000-2002 Cytronics & Melware (info@melware.de) + * Copyright 2000-2003 by Armin Schindler (mac@melware.de) + * Copyright 2000-2003 Cytronics & Melware (info@melware.de) * * This software may be used and distributed according to the terms * of the GNU General Public License, incorporated herein by reference. @@ -16,14 +16,12 @@ #include #include #include -#include #include #include #include #include #include #include -#include #include #include #include @@ -37,36 +35,39 @@ #include "di_defs.h" #include "divasync.h" #include "diva.h" -#include "diva_pci.h" #include "di.h" #include "io.h" #include "xdi_msg.h" #include "xdi_adapter.h" #include "xdi_vers.h" #include "diva_dma.h" +#include "diva_pci.h" -static char *main_revision = "$Revision: 1.1.2.8 $"; +static char *main_revision = "$Revision: 1.40 $"; -int errno = 0; -static int major = 240; +static int major; + +static int dbgmask; MODULE_DESCRIPTION("Kernel driver for Eicon DIVA Server cards"); MODULE_AUTHOR("Cytronics & Melware, Eicon Networks"); MODULE_LICENSE("GPL"); -MODULE_PARM(major, "i"); -MODULE_PARM_DESC(major, "Major number for /dev/Divas"); + +MODULE_PARM(dbgmask, "i"); +MODULE_PARM_DESC(dbgmask, "initial debug mask"); static char *DRIVERNAME = "Eicon DIVA Server driver (http://www.melware.net)"; static char *DRIVERLNAME = "divas"; -char *DRIVERRELEASE = "2.0"; +static char *DEVNAME = "Divas"; +char *DRIVERRELEASE_DIVAS = "2.0"; extern irqreturn_t diva_os_irq_wrapper(int irq, void *context, struct pt_regs *regs); extern int create_divas_proc(void); extern void remove_divas_proc(void); extern void diva_get_vserial_number(PISDN_ADAPTER IoAdapter, char *buf); -extern int divasfunc_init(void); +extern int divasfunc_init(int dbgmask); extern void divasfunc_exit(void); typedef struct _diva_os_thread_dpc { @@ -185,19 +186,6 @@ static char *getrev(const char *revision return rev; } -void diva_os_sleep(dword mSec) -{ - unsigned long timeout = HZ * mSec / 1000 + 1; - - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(timeout); -} - -void diva_os_wait(dword mSec) -{ - mdelay(mSec); -} - void diva_log_info(unsigned char *format, ...) { va_list args; @@ -215,29 +203,8 @@ void divas_get_version(char *p) char tmprev[32]; strcpy(tmprev, main_revision); - sprintf(p, "%s: %s(%s) %s(%s)\n", DRIVERLNAME, DRIVERRELEASE, - getrev(tmprev), diva_xdi_common_code_build, DIVA_BUILD); -} - -/********************************************************* - ** malloc / free - *********************************************************/ - -void *diva_os_malloc(unsigned long flags, unsigned long size) -{ - void *ret = NULL; - - if (size) { - ret = (void *) vmalloc((unsigned int) size); - } - return (ret); -} - -void diva_os_free(unsigned long unused, void *ptr) -{ - if (ptr) { - vfree(ptr); - } + sprintf(p, "%s: %s(%s) %s(%s) major=%d\n", DRIVERLNAME, DRIVERRELEASE_DIVAS, + getrev(tmprev), diva_xdi_common_code_build, DIVA_BUILD, major); } /* -------------------------------------------------------------------------- @@ -282,6 +249,7 @@ void diva_run_trap_script(PISDN_ADAPTER (diva_os_thread_dpc_t *) psoft_isr->object; if (context && !context->card_failed) { + printk(KERN_ERR "%s: adapter %d trapped !\n", DRIVERLNAME, ANum + 1); context->card_failed = ANum + 1; schedule_work(&context->trap_script_task); } @@ -505,8 +473,8 @@ void diva_free_dma_map(void *hdev, struc *********************************************************/ int -diva_os_register_io_port(int on, unsigned long port, unsigned long length, - const char *name) +diva_os_register_io_port(void *adapter, int on, unsigned long port, + unsigned long length, const char *name, int id) { if (on) { if (!request_region(port, length, name)) { @@ -519,7 +487,7 @@ diva_os_register_io_port(int on, unsigne return (0); } -void *divasa_remap_pci_bar(unsigned long bar, unsigned long area_length) +void *divasa_remap_pci_bar(diva_os_xdi_adapter_t *a, int id, unsigned long bar, unsigned long area_length) { void *ret; @@ -772,20 +740,20 @@ static struct file_operations divas_fops static void divas_unregister_chrdev(void) { - devfs_remove("Divas"); - unregister_chrdev(major, "Divas"); + devfs_remove(DEVNAME); + unregister_chrdev(major, DEVNAME); } static int DIVA_INIT_FUNCTION divas_register_chrdev(void) { - if (register_chrdev(major, "Divas", &divas_fops)) + if ((major = register_chrdev(0, DEVNAME, &divas_fops)) < 0) { printk(KERN_ERR "%s: failed to create /dev entry.\n", DRIVERLNAME); return (0); } + devfs_mk_cdev(MKDEV(major, 0), S_IFCHR|S_IRUSR|S_IWUSR, DEVNAME); - devfs_mk_cdev(MKDEV(major, 0), S_IFCHR|S_IRUSR|S_IWUSR, "Divas"); return (1); } @@ -877,23 +845,20 @@ static int DIVA_INIT_FUNCTION divas_init int ret = 0; printk(KERN_INFO "%s\n", DRIVERNAME); - printk(KERN_INFO "%s: Rel:%s Rev:", DRIVERLNAME, DRIVERRELEASE); + printk(KERN_INFO "%s: Rel:%s Rev:", DRIVERLNAME, DRIVERRELEASE_DIVAS); strcpy(tmprev, main_revision); - printk("%s Build: %s(%s) Major: %d\n", getrev(tmprev), - diva_xdi_common_code_build, DIVA_BUILD, major); + printk("%s Build: %s(%s)\n", getrev(tmprev), + diva_xdi_common_code_build, DIVA_BUILD); printk(KERN_INFO "%s: support for: ", DRIVERLNAME); #ifdef CONFIG_ISDN_DIVAS_BRIPCI printk("BRI/PCI "); #endif -#ifdef CONFIG_ISDN_DIVAS_4BRIPCI - printk("4BRI/PCI "); -#endif #ifdef CONFIG_ISDN_DIVAS_PRIPCI printk("PRI/PCI "); #endif - printk("\n"); + printk("adapters\n"); - if (!divasfunc_init()) { + if (!divasfunc_init(dbgmask)) { printk(KERN_ERR "%s: failed to connect to DIDD.\n", DRIVERLNAME); ret = -EIO; @@ -901,15 +866,19 @@ static int DIVA_INIT_FUNCTION divas_init } if (!divas_register_chrdev()) { +#ifdef MODULE divasfunc_exit(); +#endif ret = -EIO; goto out; } if (!create_divas_proc()) { +#ifdef MODULE remove_divas_proc(); divas_unregister_chrdev(); divasfunc_exit(); +#endif printk(KERN_ERR "%s: failed to create proc entry.\n", DRIVERLNAME); ret = -EIO; @@ -917,13 +886,16 @@ static int DIVA_INIT_FUNCTION divas_init } if ((ret = pci_module_init(&diva_pci_driver))) { +#ifdef MODULE remove_divas_proc(); divas_unregister_chrdev(); divasfunc_exit(); +#endif printk(KERN_ERR "%s: failed to init pci driver.\n", DRIVERLNAME); goto out; } + printk(KERN_INFO "%s: started with major %d\n", DRIVERLNAME, major); out: return (ret); diff -prauN linux-2.6.0-test5/drivers/isdn/hardware/eicon/divasproc.c wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/divasproc.c --- linux-2.6.0-test5/drivers/isdn/hardware/eicon/divasproc.c 2003-09-08 12:50:19.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/divasproc.c 2003-09-25 19:15:56.000000000 -0700 @@ -1,10 +1,10 @@ -/* $Id: divasproc.c,v 1.1.2.4 2001/02/16 08:40:36 armin Exp $ +/* $Id: divasproc.c,v 1.18 2003/09/09 06:46:29 schindler Exp $ * * Low level driver for Eicon DIVA Server ISDN cards. * /proc functions * - * Copyright 2000-2002 by Armin Schindler (mac@melware.de) - * Copyright 2000-2002 Cytronics & Melware (info@melware.de) + * Copyright 2000-2003 by Armin Schindler (mac@melware.de) + * Copyright 2000-2003 Cytronics & Melware (info@melware.de) * * This software may be used and distributed according to the terms * of the GNU General Public License, incorporated herein by reference. @@ -15,7 +15,6 @@ #include #include #include -#include #include "platform.h" #include "debuglib.h" @@ -23,7 +22,6 @@ #undef ID_MASK #undef N_DATA #include "pc.h" -#include "diva_pci.h" #include "di_defs.h" #include "divasync.h" #include "di.h" @@ -31,6 +29,7 @@ #include "xdi_msg.h" #include "xdi_adapter.h" #include "diva.h" +#include "diva_pci.h" extern PISDN_ADAPTER IoAdapters[MAX_ADAPTER]; @@ -52,7 +51,7 @@ static char *d_l1_down_proc_name = "dyna ** "divas" entry */ -extern struct proc_dir_entry *proc_net_isdn_eicon; +extern struct proc_dir_entry *proc_net_eicon; static struct proc_dir_entry *divas_proc_entry = NULL; static ssize_t @@ -131,7 +130,7 @@ int create_divas_proc(void) { divas_proc_entry = create_proc_entry(divas_proc_name, S_IFREG | S_IRUGO, - proc_net_isdn_eicon); + proc_net_eicon); if (!divas_proc_entry) return (0); @@ -144,7 +143,7 @@ int create_divas_proc(void) void remove_divas_proc(void) { if (divas_proc_entry) { - remove_proc_entry(divas_proc_name, proc_net_isdn_eicon); + remove_proc_entry(divas_proc_name, proc_net_eicon); divas_proc_entry = NULL; } } @@ -333,7 +332,8 @@ info_read(char *page, char **start, off_ } } if ((!a->xdi_adapter.port) && - ((!a->xdi_adapter.ram) || (!a->xdi_adapter.reset) + ((!a->xdi_adapter.ram) || + (!a->xdi_adapter.reset) || (!a->xdi_adapter.cfg))) { if (!IoAdapter->irq_info.irq_nr) { p = "slave"; @@ -369,20 +369,14 @@ int create_adapter_proc(diva_os_xdi_adap struct proc_dir_entry *de, *pe; char tmp[16]; - if (in_interrupt()) { - printk(KERN_ERR - "divasproc: create_proc in_interrupt, not creating\n"); - return (1); - } - sprintf(tmp, "%s%d", adapter_dir_name, a->controller); - if (!(de = create_proc_entry(tmp, S_IFDIR, proc_net_isdn_eicon))) + if (!(de = create_proc_entry(tmp, S_IFDIR, proc_net_eicon))) return (0); a->proc_adapter_dir = (void *) de; if (!(pe = - create_proc_entry(info_proc_name, S_IFREG | S_IRUGO | S_IWUSR, - de))) return (0); + create_proc_entry(info_proc_name, S_IFREG | S_IRUGO | S_IWUSR, de))) + return (0); a->proc_info = (void *) pe; pe->write_proc = info_write; pe->read_proc = info_read; @@ -429,7 +423,7 @@ void remove_adapter_proc(diva_os_xdi_ada (struct proc_dir_entry *) a->proc_adapter_dir); } sprintf(tmp, "%s%d", adapter_dir_name, a->controller); - remove_proc_entry(tmp, proc_net_isdn_eicon); + remove_proc_entry(tmp, proc_net_eicon); DBG_TRC(("proc entry %s%d removed", adapter_dir_name, a->controller)); } diff -prauN linux-2.6.0-test5/drivers/isdn/hardware/eicon/dlist.c wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/dlist.c --- linux-2.6.0-test5/drivers/isdn/hardware/eicon/dlist.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/dlist.c 2003-09-25 19:15:56.000000000 -0700 @@ -1,4 +1,4 @@ -/* $Id: dlist.c,v 1.1.2.2 2001/02/11 14:40:41 armin Exp $ */ +/* $Id: dlist.c,v 1.6 2003/08/25 16:03:35 schindler Exp $ */ #include "platform.h" #include "dlist.h" @@ -7,7 +7,7 @@ ** Initialize linked list */ -void diva_q_init(diva_entity_queue_t * q) +static void diva_q_init(diva_entity_queue_t * q) { memset(q, 0x00, sizeof(*q)); } @@ -15,7 +15,7 @@ void diva_q_init(diva_entity_queue_t * q /* ** Remove element from linked list */ -void diva_q_remove(diva_entity_queue_t * q, diva_entity_link_t * what) +static void diva_q_remove(diva_entity_queue_t * q, diva_entity_link_t * what) { if (!what->prev) { if ((q->head = what->next)) { @@ -36,7 +36,7 @@ void diva_q_remove(diva_entity_queue_t * /* ** Add element to the tail of linked list */ -void diva_q_add_tail(diva_entity_queue_t * q, diva_entity_link_t * what) +static void diva_q_add_tail(diva_entity_queue_t * q, diva_entity_link_t * what) { what->next = 0; if (!q->head) { @@ -49,7 +49,7 @@ void diva_q_add_tail(diva_entity_queue_t } } -diva_entity_link_t *diva_q_find(const diva_entity_queue_t * q, +static diva_entity_link_t *diva_q_find(const diva_entity_queue_t * q, const void *what, diva_q_cmp_fn_t cmp_fn) { diva_entity_link_t *diva_current = q->head; @@ -64,35 +64,13 @@ diva_entity_link_t *diva_q_find(const di return (diva_current); } -diva_entity_link_t *diva_q_get_head(diva_entity_queue_t * q) +static diva_entity_link_t *diva_q_get_head(diva_entity_queue_t * q) { return (q->head); } -diva_entity_link_t *diva_q_get_tail(diva_entity_queue_t * q) -{ - return (q->tail); -} - -diva_entity_link_t *diva_q_get_next(diva_entity_link_t * what) +static diva_entity_link_t *diva_q_get_next(diva_entity_link_t * what) { return ((what) ? what->next : 0); } -diva_entity_link_t *diva_q_get_prev(diva_entity_link_t * what) -{ - return ((what) ? what->prev : 0); -} - -int diva_q_get_nr_of_entries(const diva_entity_queue_t * q) -{ - int i = 0; - const diva_entity_link_t *diva_current = q->head; - - while (diva_current) { - i++; - diva_current = diva_current->next; - } - - return (i); -} diff -prauN linux-2.6.0-test5/drivers/isdn/hardware/eicon/dlist.h wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/dlist.h --- linux-2.6.0-test5/drivers/isdn/hardware/eicon/dlist.h 2003-09-08 12:50:32.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/dlist.h 2003-09-25 19:15:56.000000000 -0700 @@ -1,4 +1,4 @@ -/* $Id: dlist.h,v 1.1.2.2 2001/02/08 12:25:43 armin Exp $ */ +/* $Id: dlist.h,v 1.5 2003/08/25 16:03:35 schindler Exp $ */ #ifndef __DIVA_LINK_H__ #define __DIVA_LINK_H__ @@ -17,16 +17,4 @@ typedef struct _diva_entity_queue { typedef int (*diva_q_cmp_fn_t) (const void *what, const diva_entity_link_t *); -void diva_q_remove(diva_entity_queue_t * q, diva_entity_link_t * what); -void diva_q_add_tail(diva_entity_queue_t * q, diva_entity_link_t * what); -diva_entity_link_t *diva_q_find(const diva_entity_queue_t * q, - const void *what, diva_q_cmp_fn_t cmp_fn); - -diva_entity_link_t *diva_q_get_head(diva_entity_queue_t * q); -diva_entity_link_t *diva_q_get_tail(diva_entity_queue_t * q); -diva_entity_link_t *diva_q_get_next(diva_entity_link_t * what); -diva_entity_link_t *diva_q_get_prev(diva_entity_link_t * what); -int diva_q_get_nr_of_entries(const diva_entity_queue_t * q); -void diva_q_init(diva_entity_queue_t * q); - #endif diff -prauN linux-2.6.0-test5/drivers/isdn/hardware/eicon/i4lididrv.c wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/i4lididrv.c --- linux-2.6.0-test5/drivers/isdn/hardware/eicon/i4lididrv.c 2003-09-08 12:50:33.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/i4lididrv.c 2003-09-25 19:15:56.000000000 -0700 @@ -293,7 +293,7 @@ diva_init_thread(void) { int pid = 0; - pid = kernel_thread(divad_thread, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND); + pid = kernel_thread(divad_thread, NULL, CLONE_KERNEL); if (pid >= 0) { divad_pid = pid; } diff -prauN linux-2.6.0-test5/drivers/isdn/hardware/eicon/idifunc.c wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/idifunc.c --- linux-2.6.0-test5/drivers/isdn/hardware/eicon/idifunc.c 2003-09-08 12:50:32.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/idifunc.c 2003-09-25 19:15:57.000000000 -0700 @@ -1,10 +1,10 @@ -/* $Id: idifunc.c,v 1.1.2.2 2002/10/02 14:38:37 armin Exp $ +/* $Id: idifunc.c,v 1.13 2003/08/25 14:49:53 schindler Exp $ * * Driver for Eicon DIVA Server ISDN cards. * User Mode IDI Interface * - * Copyright 2000-2002 by Armin Schindler (mac@melware.de) - * Copyright 2000-2002 Cytronics & Melware (info@melware.de) + * Copyright 2000-2003 by Armin Schindler (mac@melware.de) + * Copyright 2000-2003 Cytronics & Melware (info@melware.de) * * This software may be used and distributed according to the terms * of the GNU General Public License, incorporated herein by reference. @@ -19,7 +19,7 @@ #define DBG_MINIMUM (DL_LOG + DL_FTL + DL_ERR) #define DBG_DEFAULT (DBG_MINIMUM + DL_XLOG + DL_REG) -extern char *DRIVERRELEASE; +extern char *DRIVERRELEASE_IDI; extern void DIVA_DIDD_Read(void *, int); extern int diva_user_mode_idi_create_adapter(const DESCRIPTOR *, int); @@ -36,8 +36,6 @@ static void no_printf(unsigned char *x, /* dummy debug function */ } -DIVA_DI_PRINTF dprintf = no_printf; - #include "debuglib.c" /* @@ -202,7 +200,7 @@ static void *didd_callback(void *context } else { memcpy(&MAdapter, adapter, sizeof(MAdapter)); dprintf = (DIVA_DI_PRINTF) MAdapter.request; - DbgRegister("User IDI", DRIVERRELEASE, DBG_DEFAULT); + DbgRegister("User IDI", DRIVERRELEASE_IDI, DBG_DEFAULT); } } else if ((adapter->type > 0) && (adapter->type < 16)) { /* IDI Adapter */ if (removal) { @@ -233,7 +231,7 @@ static int DIVA_INIT_FUNCTION connect_di req.didd_notify.e.Req = 0; req.didd_notify.e.Rc = IDI_SYNC_REQ_DIDD_REGISTER_ADAPTER_NOTIFY; - req.didd_notify.info.callback = didd_callback; + req.didd_notify.info.callback = (void *)didd_callback; req.didd_notify.info.context = 0; DAdapter.request((ENTITY *) & req); if (req.didd_notify.e.Rc != 0xff) { @@ -244,7 +242,7 @@ static int DIVA_INIT_FUNCTION connect_di } else if (DIDD_Table[x].type == IDI_DIMAINT) { /* MAINT found */ memcpy(&MAdapter, &DIDD_Table[x], sizeof(DAdapter)); dprintf = (DIVA_DI_PRINTF) MAdapter.request; - DbgRegister("User IDI", DRIVERRELEASE, DBG_DEFAULT); + DbgRegister("User IDI", DRIVERRELEASE_IDI, DBG_DEFAULT); } else if ((DIDD_Table[x].type > 0) && (DIDD_Table[x].type < 16)) { /* IDI Adapter found */ um_new_card(&DIDD_Table[x]); diff -prauN linux-2.6.0-test5/drivers/isdn/hardware/eicon/io.c wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/io.c --- linux-2.6.0-test5/drivers/isdn/hardware/eicon/io.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/io.c 2003-09-25 19:15:57.000000000 -0700 @@ -72,10 +72,10 @@ IDI_CALL Requests[MAX_ADAPTER] = */ static byte extended_xdi_features[DIVA_XDI_EXTENDED_FEATURES_MAX_SZ+1] = { (DIVA_XDI_EXTENDED_FEATURES_VALID | - DIVA_XDI_EXTENDED_FEATURE_CMA | DIVA_XDI_EXTENDED_FEATURE_SDRAM_BAR | DIVA_XDI_EXTENDED_FEATURE_CAPI_PRMS | #if defined(DIVA_IDI_RX_DMA) + DIVA_XDI_EXTENDED_FEATURE_CMA | DIVA_XDI_EXTENDED_FEATURE_RX_DMA | #endif DIVA_XDI_EXTENDED_FEATURE_NO_CANCEL_RC), @@ -156,7 +156,8 @@ void dump_trap_frame (PISDN_ADAPTER IoAdapter, byte *exceptionFrame) { MP_XCPTC *xcept = (MP_XCPTC *)exceptionFrame ; - dword *regs = &xcept->regs[0] ; + dword *regs; + regs = &xcept->regs[0] ; DBG_FTL(("%s: ***************** CPU TRAPPED *****************", &IoAdapter->Name[0])) DBG_FTL(("Microcode: %s", &IoAdapter->ProtocolIdString[0])) @@ -567,26 +568,38 @@ Trapped: /*------------------------------------------------------------------*/ byte mem_in (ADAPTER *a, void *addr) { - byte* Base = (byte*)&((PISDN_ADAPTER)a->io)->ram[(unsigned long)addr] ; - return (*Base) ; + byte val; + volatile byte* Base; + + Base = (volatile byte *)DIVA_OS_MEM_ATTACH_RAM((PISDN_ADAPTER)a->io); + val = *(Base + (unsigned long)addr); + DIVA_OS_MEM_DETACH_RAM((PISDN_ADAPTER)a->io, Base); + return (val); } word mem_inw (ADAPTER *a, void *addr) { - word* Base = (word*)&((PISDN_ADAPTER)a->io)->ram[(unsigned long)addr] ; - return (READ_WORD(Base)) ; + word val; + volatile byte* Base; + + Base = (volatile byte*)DIVA_OS_MEM_ATTACH_RAM((PISDN_ADAPTER)a->io); + val = READ_WORD((Base + (unsigned long)addr)); + DIVA_OS_MEM_DETACH_RAM((PISDN_ADAPTER)a->io, Base); + return (val); } void mem_in_dw (ADAPTER *a, void *addr, dword* data, int dwords) { - volatile dword* Base = (dword*)&((PISDN_ADAPTER)a->io)->ram[(unsigned long)addr] ; + volatile byte* Base = (volatile byte*)DIVA_OS_MEM_ATTACH_RAM((PISDN_ADAPTER)a->io); while (dwords--) { - *data++ = READ_DWORD(Base); - Base++; + *data++ = READ_DWORD((Base + (unsigned long)addr)); + addr+=4; } + DIVA_OS_MEM_DETACH_RAM((PISDN_ADAPTER)a->io, Base); } void mem_in_buffer (ADAPTER *a, void *addr, void *buffer, word length) { - byte* Base = (byte*)&((PISDN_ADAPTER)a->io)->ram[(unsigned long)addr] ; - memcpy (buffer, Base, length) ; + volatile byte* Base = (volatile byte*)DIVA_OS_MEM_ATTACH_RAM((PISDN_ADAPTER)a->io); + memcpy (buffer, (void *)(Base + (unsigned long)addr), length); + DIVA_OS_MEM_DETACH_RAM((PISDN_ADAPTER)a->io, Base); } void mem_look_ahead (ADAPTER *a, PBUFFER *RBuffer, ENTITY *e) { @@ -598,99 +611,130 @@ void mem_look_ahead (ADAPTER *a, PBUFFER } void mem_out (ADAPTER *a, void *addr, byte data) { - byte* Base = (byte*)&((PISDN_ADAPTER)a->io)->ram[(unsigned long)addr] ; - *Base = data ; + volatile byte* Base = (volatile byte*)DIVA_OS_MEM_ATTACH_RAM((PISDN_ADAPTER)a->io); + *(Base + (unsigned long)addr) = data ; + DIVA_OS_MEM_DETACH_RAM((PISDN_ADAPTER)a->io, Base); } void mem_outw (ADAPTER *a, void *addr, word data) { - word* Base = (word*)&((PISDN_ADAPTER)a->io)->ram[(unsigned long)addr] ; - WRITE_WORD(Base, data); + volatile byte* Base = (volatile byte*)DIVA_OS_MEM_ATTACH_RAM((PISDN_ADAPTER)a->io); + WRITE_WORD((Base + (unsigned long)addr), data); + DIVA_OS_MEM_DETACH_RAM((PISDN_ADAPTER)a->io, Base); } void mem_out_dw (ADAPTER *a, void *addr, const dword* data, int dwords) { - volatile dword* Base = (dword*)&((PISDN_ADAPTER)a->io)->ram[(unsigned long)addr] ; + volatile byte* Base = (volatile byte*)DIVA_OS_MEM_ATTACH_RAM((PISDN_ADAPTER)a->io); while (dwords--) { - WRITE_DWORD(Base, *data); - Base++; + WRITE_DWORD((Base + (unsigned long)addr), *data); + addr+=4; data++; } + DIVA_OS_MEM_DETACH_RAM((PISDN_ADAPTER)a->io, Base); } void mem_out_buffer (ADAPTER *a, void *addr, void *buffer, word length) { - byte* Base = (byte*)&((PISDN_ADAPTER)a->io)->ram[(unsigned long)addr] ; - memcpy (Base, buffer, length) ; + volatile byte* Base = (volatile byte*)DIVA_OS_MEM_ATTACH_RAM((PISDN_ADAPTER)a->io); + memcpy ((void *)(Base + (unsigned long)addr), buffer, length) ; + DIVA_OS_MEM_DETACH_RAM((PISDN_ADAPTER)a->io, Base); } void mem_inc (ADAPTER *a, void *addr) { - byte* Base = (byte*)&((PISDN_ADAPTER)a->io)->ram[(unsigned long)addr] ; - byte x = *Base ; - *Base = x + 1 ; + volatile byte* Base = (volatile byte*)DIVA_OS_MEM_ATTACH_RAM((PISDN_ADAPTER)a->io); + byte x = *(Base + (unsigned long)addr); + *(Base + (unsigned long)addr) = x + 1 ; + DIVA_OS_MEM_DETACH_RAM((PISDN_ADAPTER)a->io, Base); } /*------------------------------------------------------------------*/ /* ram access functions for io-mapped cards */ /*------------------------------------------------------------------*/ byte io_in(ADAPTER * a, void * adr) { - outppw(((PISDN_ADAPTER)a->io)->port+4, (word)(unsigned long)adr); - return inpp(((PISDN_ADAPTER)a->io)->port); + byte val; + byte *Port = (byte*)DIVA_OS_MEM_ATTACH_PORT((PISDN_ADAPTER)a->io); + outppw(Port + 4, (word)(unsigned long)adr); + val = inpp(Port); + DIVA_OS_MEM_DETACH_PORT((PISDN_ADAPTER)a->io, Port); + return(val); } word io_inw(ADAPTER * a, void * adr) { - outppw(((PISDN_ADAPTER)a->io)->port+4, (word)(unsigned long)adr); - return inppw(((PISDN_ADAPTER)a->io)->port); + word val; + byte *Port = (byte*)DIVA_OS_MEM_ATTACH_PORT((PISDN_ADAPTER)a->io); + outppw(Port + 4, (word)(unsigned long)adr); + val = inppw(Port); + DIVA_OS_MEM_DETACH_PORT((PISDN_ADAPTER)a->io, Port); + return(val); } void io_in_buffer(ADAPTER * a, void * adr, void * buffer, word len) { + byte *Port = (byte*)DIVA_OS_MEM_ATTACH_PORT((PISDN_ADAPTER)a->io); byte* P = (byte*)buffer; if ((long)adr & 1) { - outppw(((PISDN_ADAPTER)a->io)->port+4, (word)(unsigned long)adr); - *P = inpp(((PISDN_ADAPTER)a->io)->port); + outppw(Port+4, (word)(unsigned long)adr); + *P = inpp(Port); P++; adr = ((byte *) adr) + 1; len--; - if (!len) return; + if (!len) { + DIVA_OS_MEM_DETACH_PORT((PISDN_ADAPTER)a->io, Port); + return; } - outppw(((PISDN_ADAPTER)a->io)->port+4, (word)(unsigned long)adr); - inppw_buffer (((PISDN_ADAPTER)a->io)->port, P, len+1); + } + outppw(Port+4, (word)(unsigned long)adr); + inppw_buffer (Port, P, len+1); + DIVA_OS_MEM_DETACH_PORT((PISDN_ADAPTER)a->io, Port); } void io_look_ahead(ADAPTER * a, PBUFFER * RBuffer, ENTITY * e) { - outppw(((PISDN_ADAPTER)a->io)->port+4, (word)(unsigned long)RBuffer); - ((PISDN_ADAPTER)a->io)->RBuffer.length = inppw(((PISDN_ADAPTER)a->io)->port); - inppw_buffer (((PISDN_ADAPTER)a->io)->port, ((PISDN_ADAPTER)a->io)->RBuffer.P, ((PISDN_ADAPTER)a->io)->RBuffer.length + 1); + byte *Port = (byte*)DIVA_OS_MEM_ATTACH_PORT((PISDN_ADAPTER)a->io); + outppw(Port+4, (word)(unsigned long)RBuffer); + ((PISDN_ADAPTER)a->io)->RBuffer.length = inppw(Port); + inppw_buffer (Port, ((PISDN_ADAPTER)a->io)->RBuffer.P, ((PISDN_ADAPTER)a->io)->RBuffer.length + 1); e->RBuffer = (DBUFFER *) &(((PISDN_ADAPTER)a->io)->RBuffer); + DIVA_OS_MEM_DETACH_PORT((PISDN_ADAPTER)a->io, Port); } void io_out(ADAPTER * a, void * adr, byte data) { - outppw(((PISDN_ADAPTER)a->io)->port+4, (word)(unsigned long)adr); - outpp(((PISDN_ADAPTER)a->io)->port, data); + byte *Port = (byte*)DIVA_OS_MEM_ATTACH_PORT((PISDN_ADAPTER)a->io); + outppw(Port+4, (word)(unsigned long)adr); + outpp(Port, data); + DIVA_OS_MEM_DETACH_PORT((PISDN_ADAPTER)a->io, Port); } void io_outw(ADAPTER * a, void * adr, word data) { - outppw(((PISDN_ADAPTER)a->io)->port+4, (word)(unsigned long)adr); - outppw(((PISDN_ADAPTER)a->io)->port, data); + byte *Port = (byte*)DIVA_OS_MEM_ATTACH_PORT((PISDN_ADAPTER)a->io); + outppw(Port+4, (word)(unsigned long)adr); + outppw(Port, data); + DIVA_OS_MEM_DETACH_PORT((PISDN_ADAPTER)a->io, Port); } void io_out_buffer(ADAPTER * a, void * adr, void * buffer, word len) { + byte *Port = (byte*)DIVA_OS_MEM_ATTACH_PORT((PISDN_ADAPTER)a->io); byte* P = (byte*)buffer; if ((long)adr & 1) { - outppw(((PISDN_ADAPTER)a->io)->port+4, (word)(unsigned long)adr); - outpp(((PISDN_ADAPTER)a->io)->port, *P); + outppw(Port+4, (word)(unsigned long)adr); + outpp(Port, *P); P++; adr = ((byte *) adr) + 1; len--; - if (!len) return; + if (!len) { + DIVA_OS_MEM_DETACH_PORT((PISDN_ADAPTER)a->io, Port); + return; + } } - outppw(((PISDN_ADAPTER)a->io)->port+4, (word)(unsigned long)adr); - outppw_buffer (((PISDN_ADAPTER)a->io)->port, P, len+1); + outppw(Port+4, (word)(unsigned long)adr); + outppw_buffer (Port, P, len+1); + DIVA_OS_MEM_DETACH_PORT((PISDN_ADAPTER)a->io, Port); } void io_inc(ADAPTER * a, void * adr) { byte x; - outppw(((PISDN_ADAPTER)a->io)->port+4, (word)(unsigned long)adr); - x = inpp(((PISDN_ADAPTER)a->io)->port); - outppw(((PISDN_ADAPTER)a->io)->port+4, (word)(unsigned long)adr); - outpp(((PISDN_ADAPTER)a->io)->port, x+1); + byte *Port = (byte*)DIVA_OS_MEM_ATTACH_PORT((PISDN_ADAPTER)a->io); + outppw(Port+4, (word)(unsigned long)adr); + x = inpp(Port); + outppw(Port+4, (word)(unsigned long)adr); + outpp(Port, x+1); + DIVA_OS_MEM_DETACH_PORT((PISDN_ADAPTER)a->io, Port); } /*------------------------------------------------------------------*/ /* OS specific functions related to queuing of entities */ diff -prauN linux-2.6.0-test5/drivers/isdn/hardware/eicon/io.h wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/io.h --- linux-2.6.0-test5/drivers/isdn/hardware/eicon/io.h 2003-09-08 12:50:43.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/io.h 2003-09-25 19:15:57.000000000 -0700 @@ -40,14 +40,6 @@ typedef struct { PISDN_ADAPTER QuadroAdapter[4] ; } ADAPTER_LIST_ENTRY, *PADAPTER_LIST_ENTRY ; /* -------------------------------------------------------------------------- - Special OS memory support structures - -------------------------------------------------------------------------- */ -#define MAX_MAPPED_ENTRIES 8 -typedef struct { - void * Address; - dword Length; -} ADAPTER_MEMORY ; -/* -------------------------------------------------------------------------- Configuration of XDI clients carried by XDI -------------------------------------------------------------------------- */ #define DIVA_XDI_CAPI_CFG_1_DYNAMIC_L1_ON 0x01 @@ -71,7 +63,6 @@ struct _ISDN_ADAPTER { /* remember mapped memory areas */ - ADAPTER_MEMORY MappedMemory[MAX_MAPPED_ENTRIES] ; CARD_PROPERTIES Properties ; dword cardType ; dword protocol_id ; /* configured protocol identifier */ @@ -97,6 +88,8 @@ struct _ISDN_ADAPTER { dword MemoryBase ; dword MemorySize ; byte *Address ; + byte *Config ; + byte *Control ; byte *reset ; byte *port ; byte *ram ; diff -prauN linux-2.6.0-test5/drivers/isdn/hardware/eicon/message.c wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/message.c --- linux-2.6.0-test5/drivers/isdn/hardware/eicon/message.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/message.c 2003-09-25 19:15:57.000000000 -0700 @@ -3590,7 +3590,7 @@ byte manufacturer_req(dword Id, word Num { if (plci->channels) { - for (ncci = 1; ncci < MAX_NCCI+1; i++) + for (ncci = 1; ncci < MAX_NCCI+1; ncci++) { if ((a->ncci_plci[ncci] == plci->Id) && (a->ncci_state[ncci] == CONNECTED)) { @@ -6612,7 +6612,7 @@ void nl_ind(PLCI * plci) ||(*data == DSP_UDATA_INDICATION_CTS_ON)) ) { word conn_opt, ncpi_opt = 0x00; -// HexDump ("MDM N_UDATA:", plci->NL.RBuffer->length, data); +/* HexDump ("MDM N_UDATA:", plci->NL.RBuffer->length, data); */ if (*data == DSP_UDATA_INDICATION_DCD_ON) plci->ncpi_state |= NCPI_MDM_DCD_ON_RECEIVED; @@ -7813,15 +7813,15 @@ word add_b1(PLCI * plci, API_PARSE * b } } - if(READ_WORD(bp_parms[0].info)==2 || // V.110 async - READ_WORD(bp_parms[0].info)==3 ) // V.110 sync + if(READ_WORD(bp_parms[0].info)==2 || /* V.110 async */ + READ_WORD(bp_parms[0].info)==3 ) /* V.110 sync */ { if(bp_parms[3].length){ dbug(1,dprintf("V.110,%d",READ_WORD(&bp_parms[3].info[1]))); - switch(READ_WORD(&bp_parms[3].info[1])){ // Rate + switch(READ_WORD(&bp_parms[3].info[1])){ /* Rate */ case 0: case 56000: - if(READ_WORD(bp_parms[0].info)==3){ //V.110 sync 56k + if(READ_WORD(bp_parms[0].info)==3){ /* V.110 sync 56k */ dbug(1,dprintf("56k sync HSCX")); cai[1] = 8; cai[2] = 0; @@ -7859,7 +7859,7 @@ word add_b1(PLCI * plci, API_PARSE * b return _B1_PARM_NOT_SUPPORTED; } cai[3] = 0; - if (cai[1] == 13) // v.110 async + if (cai[1] == 13) /* v.110 async */ { if (bp_parms[3].length >= 8) { @@ -7906,7 +7906,7 @@ word add_b1(PLCI * plci, API_PARSE * b } WRITE_WORD(&cai[5],plci->appl->MaxDataLength); dbug(1,dprintf("CAI[%d]=%x,%x,%x,%x,%x,%x", cai[0], cai[1], cai[2], cai[3], cai[4], cai[5], cai[6])); -//HexDump ("CAI", sizeof(cai), &cai[0]); +/* HexDump ("CAI", sizeof(cai), &cai[0]); */ add_p(plci, CAI, cai); return 0; @@ -8681,7 +8681,7 @@ static word add_modem_b23 (PLCI * plci, DLC_MODEMPROT_DISABLE_COMPRESSION; } dlc[0] = (byte)(i - 1); -//HexDump ("DLC", sizeof(dlc), &dlc[0]); +/* HexDump ("DLC", sizeof(dlc), &dlc[0]); */ add_p(plci, DLC, dlc); return (0); } @@ -8739,7 +8739,7 @@ void send_req(PLCI * plci) { ENTITY * e; word l; -// word i; +/* word i; */ if(!plci) return; if(plci->adapter->adapter_disabled) return; @@ -8856,7 +8856,7 @@ void send_data(PLCI * plci) } else if (plci->send_disc == ncci) { - //dprintf("N_DISC"); + /* dprintf("N_DISC"); */ plci->NData[0].PLength = 0; plci->NL.ReqCh = a->ncci_ch[ncci]; plci->NL.Req = plci->nl_req = N_DISC; @@ -9059,15 +9059,15 @@ static byte AddInfo(byte **add_i, for(k=0;k<=flen;k++,j++) { facility[j]=fty_i[i][k]; -// dbug(1,dprintf("%x ",facility[j])); +/* dbug(1,dprintf("%x ",facility[j])); */ } } facility[0] = len; add_i[3] = facility; } -// dbug(1,dprintf("FacArrLen=%d ",len)); +/* dbug(1,dprintf("FacArrLen=%d ",len)); */ len = add_i[0][0]+add_i[1][0]+add_i[2][0]+add_i[3][0]; - len += 4; // calculate length of all + len += 4; /* calculate length of all */ return(len); } @@ -9083,8 +9083,8 @@ void SetVoiceChannel(PLCI *plci, byte channel = chi[chi[0]]&0x3; dbug(1,dprintf("ExtDevON(Ch=0x%x)",channel)); voice_chi[2] = (channel) ? channel : 1; - add_p(plci,FTY,"\x02\x01\x07"); // B On, default on 1 - add_p(plci,ESC,voice_chi); // Channel + add_p(plci,FTY,"\x02\x01\x07"); /* B On, default on 1 */ + add_p(plci,ESC,voice_chi); /* Channel */ sig_req(plci,TEL_CTRL,0); send_req(plci); if(a->AdvSignalPLCI) @@ -9096,7 +9096,7 @@ void SetVoiceChannel(PLCI *plci, byte void VoiceChannelOff(PLCI *plci) { dbug(1,dprintf("ExtDevOFF")); - add_p(plci,FTY,"\x02\x01\x08"); // B Off + add_p(plci,FTY,"\x02\x01\x08"); /* B Off */ sig_req(plci,TEL_CTRL,0); send_req(plci); if(plci->adapter->AdvSignalPLCI) diff -prauN linux-2.6.0-test5/drivers/isdn/hardware/eicon/mntfunc.c wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/mntfunc.c --- linux-2.6.0-test5/drivers/isdn/hardware/eicon/mntfunc.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/mntfunc.c 2003-09-25 19:15:57.000000000 -0700 @@ -1,10 +1,10 @@ -/* $Id: mntfunc.c,v 1.1.2.2 2002/10/02 14:38:37 armin Exp $ +/* $Id: mntfunc.c,v 1.15 2003/08/25 14:49:53 schindler Exp $ * * Driver for Eicon DIVA Server ISDN cards. * Maint module * - * Copyright 2000,2001 by Armin Schindler (mac@melware.de) - * Copyright 2000,2001 Cytronics & Melware (info@melware.de) + * Copyright 2000-2003 by Armin Schindler (mac@melware.de) + * Copyright 2000-2003 Cytronics & Melware (info@melware.de) * * This software may be used and distributed according to the terms * of the GNU General Public License, incorporated herein by reference. @@ -17,7 +17,7 @@ #include "di_defs.h" #include "debug_if.h" -extern char *DRIVERRELEASE; +extern char *DRIVERRELEASE_MNT; #define DBG_MINIMUM (DL_LOG + DL_FTL + DL_ERR) #define DBG_DEFAULT (DBG_MINIMUM + DL_XLOG + DL_REG) @@ -45,8 +45,6 @@ static void no_printf(unsigned char *x, /* dummy debug function */ } -DIVA_DI_PRINTF dprintf = no_printf; - #include "debuglib.c" /* @@ -73,7 +71,7 @@ static void *didd_callback(void *context } else { memcpy(&MAdapter, adapter, sizeof(MAdapter)); dprintf = (DIVA_DI_PRINTF) MAdapter.request; - DbgRegister("MAINT", DRIVERRELEASE, DBG_DEFAULT); + DbgRegister("MAINT", DRIVERRELEASE_MNT, DBG_DEFAULT); } } else if ((adapter->type > 0) && (adapter->type < 16)) { if (removal) { @@ -104,7 +102,7 @@ static int DIVA_INIT_FUNCTION connect_di req.didd_notify.e.Req = 0; req.didd_notify.e.Rc = IDI_SYNC_REQ_DIDD_REGISTER_ADAPTER_NOTIFY; - req.didd_notify.info.callback = didd_callback; + req.didd_notify.info.callback = (void *)didd_callback; req.didd_notify.info.context = 0; DAdapter.request((ENTITY *) & req); if (req.didd_notify.e.Rc != 0xff) diff -prauN linux-2.6.0-test5/drivers/isdn/hardware/eicon/os_4bri.c wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/os_4bri.c --- linux-2.6.0-test5/drivers/isdn/hardware/eicon/os_4bri.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/os_4bri.c 2003-09-25 19:15:57.000000000 -0700 @@ -1,4 +1,4 @@ -/* $Id: os_4bri.c,v 1.1.2.3 2001/02/14 21:10:19 armin Exp $ */ +/* $Id: os_4bri.c,v 1.25 2003/06/21 17:08:44 schindler Exp $ */ #include "platform.h" #include "debuglib.h" @@ -99,6 +99,40 @@ static int _4bri_is_rev_2_bri_card(int c return (0); } +static void diva_4bri_set_addresses(diva_os_xdi_adapter_t *a) +{ + dword offset = a->resources.pci.qoffset; + dword c_offset = offset * a->xdi_adapter.ControllerNumber; + + a->resources.pci.mem_type_id[MEM_TYPE_RAM] = 2; + a->resources.pci.mem_type_id[MEM_TYPE_ADDRESS] = 2; + a->resources.pci.mem_type_id[MEM_TYPE_CONTROL] = 2; + a->resources.pci.mem_type_id[MEM_TYPE_RESET] = 0; + a->resources.pci.mem_type_id[MEM_TYPE_CTLREG] = 3; + a->resources.pci.mem_type_id[MEM_TYPE_PROM] = 0; + + /* + Set up hardware related pointers + */ + a->xdi_adapter.Address = a->resources.pci.addr[2]; /* BAR2 SDRAM */ + a->xdi_adapter.Address += c_offset; + + a->xdi_adapter.Control = a->resources.pci.addr[2]; /* BAR2 SDRAM */ + + a->xdi_adapter.ram = a->resources.pci.addr[2]; /* BAR2 SDRAM */ + a->xdi_adapter.ram += c_offset + (offset - MQ_SHARED_RAM_SIZE); + + a->xdi_adapter.reset = a->resources.pci.addr[0]; /* BAR0 CONFIG */ + /* + ctlReg contains the register address for the MIPS CPU reset control + */ + a->xdi_adapter.ctlReg = a->resources.pci.addr[3]; /* BAR3 CNTRL */ + /* + prom contains the register address for FPGA and EEPROM programming + */ + a->xdi_adapter.prom = &a->xdi_adapter.reset[0x6E]; +} + /* ** BAR0 - MEM - 0x100 - CONFIG MEM ** BAR1 - I/O - 0x100 - UNUSED @@ -110,11 +144,11 @@ static int _4bri_is_rev_2_bri_card(int c int diva_4bri_init_card(diva_os_xdi_adapter_t * a) { int bar, i; + byte *p; PADAPTER_LIST_ENTRY quadro_list; diva_os_xdi_adapter_t *diva_current; diva_os_xdi_adapter_t *adapter_list[4]; PISDN_ADAPTER Slave; - dword offset; unsigned long bar_length[sizeof(_4bri_bar_length) / sizeof(_4bri_bar_length[0])]; int v2 = _4bri_is_rev_2_card(a->CardOrdinal); @@ -142,7 +176,7 @@ int diva_4bri_init_card(diva_os_xdi_adap have to map any BAR before we can access it */ if (!_4bri_get_serial_number(a)) { - DBG_ERR(("A: 4BRI can't ger Serial Number")) + DBG_ERR(("A: 4BRI can't get Serial Number")) diva_4bri_cleanup_adapter(a); return (-1); } @@ -190,7 +224,7 @@ int diva_4bri_init_card(diva_os_xdi_adap for (bar = 0; bar < 4; bar++) { if (bar != 1) { /* ignore I/O */ a->resources.pci.addr[bar] = - divasa_remap_pci_bar(a->resources.pci.bar[bar], + divasa_remap_pci_bar(a, bar, a->resources.pci.bar[bar], bar_length[bar]); if (!a->resources.pci.addr[bar]) { DBG_ERR(("A: 4BRI: can't map bar[%d]", bar)) @@ -205,14 +239,15 @@ int diva_4bri_init_card(diva_os_xdi_adap */ sprintf(&a->port_name[0], "DIVA 4BRI %ld", (long) a->xdi_adapter.serialNo); - if (diva_os_register_io_port(1, a->resources.pci.bar[1], - bar_length[1], &a->port_name[0])) { + if (diva_os_register_io_port(a, 1, a->resources.pci.bar[1], + bar_length[1], &a->port_name[0], 1)) { DBG_ERR(("A: 4BRI: can't register bar[1]")) diva_4bri_cleanup_adapter(a); return (-1); } - a->resources.pci.addr[1] = (void *) (unsigned long) a->resources.pci.bar[1]; + a->resources.pci.addr[1] = + (void *) (unsigned long) a->resources.pci.bar[1]; /* Set cleanup pointer for base adapter only, so slave adapter @@ -265,8 +300,8 @@ int diva_4bri_init_card(diva_os_xdi_adap (PADAPTER_LIST_ENTRY) diva_os_malloc(0, sizeof(*quadro_list)); if (!(a->slave_list = quadro_list)) { for (i = 0; i < (tasks - 1); i++) { - diva_os_free(0, a->slave_adapters[bar]); - a->slave_adapters[bar] = 0; + diva_os_free(0, a->slave_adapters[i]); + a->slave_adapters[i] = 0; } diva_4bri_cleanup_adapter(a); return (-1); @@ -359,60 +394,39 @@ int diva_4bri_init_card(diva_os_xdi_adap prepare_qBri_functions(&a->xdi_adapter); } + for (i = 0; i < tasks; i++) { + diva_current = adapter_list[i]; + if (i) + memcpy(&diva_current->resources, &a->resources, sizeof(divas_card_resources_t)); + diva_current->resources.pci.qoffset = (a->xdi_adapter.MemorySize >> factor); + } + /* Set up hardware related pointers */ a->xdi_adapter.cfg = (void *) (unsigned long) a->resources.pci.bar[0]; /* BAR0 CONFIG */ a->xdi_adapter.port = (void *) (unsigned long) a->resources.pci.bar[1]; /* BAR1 */ - a->xdi_adapter.Address = a->resources.pci.addr[2]; /* BAR2 SDRAM */ - a->xdi_adapter.ctlReg = - (void *) (unsigned long) a->resources.pci.bar[3]; /* BAR3 CNTRL */ - - a->xdi_adapter.reset = a->resources.pci.addr[0]; /* BAR0 CONFIG */ - a->xdi_adapter.ram = a->resources.pci.addr[2]; /* BAR2 SDRAM */ - /* - ctlReg contains the register address for the MIPS CPU reset control - */ - a->xdi_adapter.ctlReg = a->resources.pci.addr[3]; /* BAR3 CNTRL */ - /* - prom contains the register address for FPGA and EEPROM programming - */ - a->xdi_adapter.prom = &a->xdi_adapter.reset[0x6E]; - /* - reset contains the base address for the PLX 9054 register set - */ - a->xdi_adapter.reset[PLX9054_INTCSR] = 0x00; /* disable PCI interrupts */ + a->xdi_adapter.ctlReg = (void *) (unsigned long) a->resources.pci.bar[3]; /* BAR3 CNTRL */ - /* - Replicate addresses to all instances, set shared memory - address for all instances - */ for (i = 0; i < tasks; i++) { + diva_current = adapter_list[i]; + diva_4bri_set_addresses(diva_current); Slave = a->xdi_adapter.QuadroList->QuadroAdapter[i]; - offset = - Slave->ControllerNumber * - (a->xdi_adapter.MemorySize >> factor); - Slave->Address = &a->xdi_adapter.Address[offset]; - Slave->ram = &a->xdi_adapter.ram[offset]; - Slave->reset = a->xdi_adapter.reset; - Slave->ctlReg = a->xdi_adapter.ctlReg; - Slave->prom = a->xdi_adapter.prom; - Slave->reset = a->xdi_adapter.reset; + Slave->MultiMaster = &a->xdi_adapter; Slave->sdram_bar = a->xdi_adapter.sdram_bar; - } - for (i = 0; i < tasks; i++) { - Slave = a->xdi_adapter.QuadroList->QuadroAdapter[i]; - Slave->ram += - ((a->xdi_adapter.MemorySize >> factor) - - MQ_SHARED_RAM_SIZE); - } - for (i = 1; i < tasks; i++) { - Slave = a->xdi_adapter.QuadroList->QuadroAdapter[i]; - Slave->serialNo = - ((dword) (Slave->ControllerNumber << 24)) | a-> - xdi_adapter.serialNo; + if (i) { + Slave->serialNo = ((dword) (Slave->ControllerNumber << 24)) | + a->xdi_adapter.serialNo; Slave->cardType = a->xdi_adapter.cardType; } + } + + /* + reset contains the base address for the PLX 9054 register set + */ + p = DIVA_OS_MEM_ATTACH_RESET(&a->xdi_adapter); + p[PLX9054_INTCSR] = 0x00; /* disable PCI interrupts */ + DIVA_OS_MEM_DETACH_RESET(&a->xdi_adapter, p); /* Set IRQ handler @@ -484,8 +498,7 @@ static int diva_4bri_cleanup_adapter(div if (bar != 1) { if (a->resources.pci.bar[bar] && a->resources.pci.addr[bar]) { - divasa_unmap_pci_bar(a->resources.pci. - addr[bar]); + divasa_unmap_pci_bar(a->resources.pci.addr[bar]); a->resources.pci.bar[bar] = 0; a->resources.pci.addr[bar] = 0; } @@ -496,12 +509,12 @@ static int diva_4bri_cleanup_adapter(div Unregister I/O */ if (a->resources.pci.bar[1] && a->resources.pci.addr[1]) { - diva_os_register_io_port(0, a->resources.pci.bar[1], + diva_os_register_io_port(a, 0, a->resources.pci.bar[1], _4bri_is_rev_2_card(a-> CardOrdinal) ? _4bri_v2_bar_length[1] : _4bri_bar_length[1], - &a->port_name[0]); + &a->port_name[0], 1); a->resources.pci.bar[1] = 0; a->resources.pci.addr[1] = 0; } @@ -776,23 +789,18 @@ diva_4bri_cmd_card_proc(struct _diva_os_ a->xdi_mbox. data_length); if (a->xdi_mbox.data) { - byte *src = - a->xdi_adapter.Address; - byte *dst = - a->xdi_mbox.data; - dword len = - a->xdi_mbox. - data_length; - - src += - cmd->command_data. - read_sdram.offset; + byte *p = DIVA_OS_MEM_ATTACH_ADDRESS(&a->xdi_adapter); + byte *src = p; + byte *dst = a->xdi_mbox.data; + dword len = a->xdi_mbox.data_length; + + src += cmd->command_data.read_sdram.offset; while (len--) { *dst++ = *src++; } - a->xdi_mbox.status = - DIVA_XDI_MBOX_BUSY; + DIVA_OS_MEM_DETACH_ADDRESS(&a->xdi_adapter, p); + a->xdi_mbox.status = DIVA_XDI_MBOX_BUSY; ret = 0; } } @@ -903,10 +911,12 @@ diva_4bri_write_sdram_block(PISDN_ADAPTE dword address, const byte * data, dword length, dword limit) { - byte *mem = IoAdapter->Address; + byte *p = DIVA_OS_MEM_ATTACH_ADDRESS(IoAdapter); + byte *mem = p; if (((address + length) >= limit) || !mem) { - DBG_ERR(("A: A(%d) write PRI address=0x%08lx", + DIVA_OS_MEM_DETACH_ADDRESS(IoAdapter, p); + DBG_ERR(("A: A(%d) write 4BRI address=0x%08lx", IoAdapter->ANum, address + length)) return (-1); } @@ -916,6 +926,7 @@ diva_4bri_write_sdram_block(PISDN_ADAPTE *mem++ = *data++; } + DIVA_OS_MEM_DETACH_ADDRESS(IoAdapter, p); return (0); } @@ -926,16 +937,18 @@ diva_4bri_start_adapter(PISDN_ADAPTER Io volatile word *signature; int started = 0; int i; + byte *p; /* start adapter */ start_qBri_hardware(IoAdapter); + p = DIVA_OS_MEM_ATTACH_RAM(IoAdapter); /* wait for signature in shared memory (max. 3 seconds) */ - signature = (volatile word *) (&IoAdapter->ram[0x1E]); + signature = (volatile word *) (&p[0x1E]); for (i = 0; i < 300; ++i) { diva_os_wait(10); @@ -958,10 +971,12 @@ diva_4bri_start_adapter(PISDN_ADAPTER Io DBG_FTL(("%s: Adapter selftest failed, signature=%04x", IoAdapter->Properties.Name, READ_WORD(&signature[0]))) + DIVA_OS_MEM_DETACH_RAM(IoAdapter, p); (*(IoAdapter->trapFnc)) (IoAdapter); IoAdapter->stop(IoAdapter); return (-1); } + DIVA_OS_MEM_DETACH_RAM(IoAdapter, p); for (i = 0; i < IoAdapter->tasks; i++) { IoAdapter->QuadroList->QuadroAdapter[i]->Initialized = 1; @@ -997,13 +1012,16 @@ static int check_qBri_interrupt(PISDN_AD #ifdef SUPPORT_INTERRUPT_TEST_ON_4BRI int i; ADAPTER *a = &IoAdapter->a; + byte *p; IoAdapter->IrqCount = 0; if (IoAdapter->ControllerNumber > 0) return (-1); - IoAdapter->reset[PLX9054_INTCSR] = PLX9054_INT_ENABLE; + p = DIVA_OS_MEM_ATTACH_RESET(IoAdapter); + p[PLX9054_INTCSR] = PLX9054_INT_ENABLE; + DIVA_OS_MEM_DETACH_RESET(IoAdapter, p); /* interrupt test */ @@ -1015,20 +1033,23 @@ static int check_qBri_interrupt(PISDN_AD return ((IoAdapter->IrqCount > 0) ? 0 : -1); #else dword volatile *qBriIrq; + byte *p; /* Reset on-board interrupt register */ IoAdapter->IrqCount = 0; - qBriIrq = - (dword volatile *) (&IoAdapter-> - ctlReg[_4bri_is_rev_2_card + p = DIVA_OS_MEM_ATTACH_CTLREG(IoAdapter); + qBriIrq = (dword volatile *) (&p[_4bri_is_rev_2_card (IoAdapter-> cardType) ? (MQ2_BREG_IRQ_TEST) : (MQ_BREG_IRQ_TEST)]); WRITE_DWORD(qBriIrq, MQ_IRQ_REQ_OFF); + DIVA_OS_MEM_DETACH_CTLREG(IoAdapter, p); - IoAdapter->reset[PLX9054_INTCSR] = PLX9054_INT_ENABLE; + p = DIVA_OS_MEM_ATTACH_RESET(IoAdapter); + p[PLX9054_INTCSR] = PLX9054_INT_ENABLE; + DIVA_OS_MEM_DETACH_RESET(IoAdapter, p); diva_os_wait(100); diff -prauN linux-2.6.0-test5/drivers/isdn/hardware/eicon/os_bri.c wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/os_bri.c --- linux-2.6.0-test5/drivers/isdn/hardware/eicon/os_bri.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/os_bri.c 2003-09-25 19:15:57.000000000 -0700 @@ -1,4 +1,4 @@ -/* $Id: os_bri.c,v 1.1.2.2 2001/02/12 20:23:46 armin Exp $ */ +/* $Id: os_bri.c,v 1.18 2003/06/21 17:10:29 schindler Exp $ */ #include "platform.h" #include "debuglib.h" @@ -46,6 +46,27 @@ static int diva_bri_start_adapter(PISDN_ dword start_address, dword features); static int diva_bri_stop_adapter(diva_os_xdi_adapter_t * a); +static void diva_bri_set_addresses(diva_os_xdi_adapter_t * a) +{ + a->resources.pci.mem_type_id[MEM_TYPE_RAM] = 0; + a->resources.pci.mem_type_id[MEM_TYPE_CFG] = 1; + a->resources.pci.mem_type_id[MEM_TYPE_ADDRESS] = 2; + a->resources.pci.mem_type_id[MEM_TYPE_RESET] = 1; + a->resources.pci.mem_type_id[MEM_TYPE_PORT] = 2; + a->resources.pci.mem_type_id[MEM_TYPE_CTLREG] = 2; + + a->xdi_adapter.ram = a->resources.pci.addr[0]; + a->xdi_adapter.cfg = a->resources.pci.addr[1]; + a->xdi_adapter.Address = a->resources.pci.addr[2]; + + a->xdi_adapter.reset = a->xdi_adapter.cfg; + a->xdi_adapter.port = a->xdi_adapter.Address; + + a->xdi_adapter.ctlReg = a->xdi_adapter.port + M_PCI_RESET; + + a->xdi_adapter.reset += 0x4C; /* PLX 9050 !! */ +} + /* ** BAR0 - MEM Addr - 0x80 - NOT USED ** BAR1 - I/O Addr - 0x80 @@ -58,6 +79,7 @@ int diva_bri_init_card(diva_os_xdi_adapt word cmd = 0, cmd_org; byte Bus, Slot; void *hdev; + byte *p; /* Set properties @@ -123,7 +145,7 @@ int diva_bri_init_card(diva_os_xdi_adapt Map and register resources */ if (!(a->resources.pci.addr[0] = - divasa_remap_pci_bar(a->resources.pci.bar[0], + divasa_remap_pci_bar(a, 0, a->resources.pci.bar[0], bri_bar_length[0]))) { DBG_ERR(("A: BRI, can't map BAR[0]")) diva_bri_cleanup_adapter(a); @@ -133,8 +155,8 @@ int diva_bri_init_card(diva_os_xdi_adapt sprintf(&a->port_name[0], "BRI %02x:%02x", a->resources.pci.bus, a->resources.pci.func); - if (diva_os_register_io_port(1, a->resources.pci.bar[1], - bri_bar_length[1], &a->port_name[0])) { + if (diva_os_register_io_port(a, 1, a->resources.pci.bar[1], + bri_bar_length[1], &a->port_name[0], 1)) { DBG_ERR(("A: BRI, can't register BAR[1]")) diva_bri_cleanup_adapter(a); return (-1); @@ -142,8 +164,8 @@ int diva_bri_init_card(diva_os_xdi_adapt a->resources.pci.addr[1] = (void *) (unsigned long) a->resources.pci.bar[1]; a->resources.pci.length[1] = bri_bar_length[1]; - if (diva_os_register_io_port(1, a->resources.pci.bar[2], - bar2_length, &a->port_name[0])) { + if (diva_os_register_io_port(a, 1, a->resources.pci.bar[2], + bar2_length, &a->port_name[0], 2)) { DBG_ERR(("A: BRI, can't register BAR[2]")) diva_bri_cleanup_adapter(a); return (-1); @@ -152,6 +174,11 @@ int diva_bri_init_card(diva_os_xdi_adapt a->resources.pci.length[2] = bar2_length; /* + Set all memory areas + */ + diva_bri_set_addresses(a); + + /* Get Serial Number */ a->xdi_adapter.serialNo = diva_bri_get_serial_number(a); @@ -210,15 +237,9 @@ int diva_bri_init_card(diva_os_xdi_adapt a->interface.cleanup_adapter_proc = diva_bri_cleanup_adapter; a->interface.cmd_proc = diva_bri_cmd_card_proc; - a->xdi_adapter.cfg = a->resources.pci.addr[1]; - a->xdi_adapter.Address = a->resources.pci.addr[2]; - - a->xdi_adapter.reset = a->xdi_adapter.cfg; - a->xdi_adapter.port = a->xdi_adapter.Address; - - a->xdi_adapter.ctlReg = a->xdi_adapter.port + M_PCI_RESET; - a->xdi_adapter.reset += 0x4C; /* PLX 9050 !! */ - outpp(a->xdi_adapter.reset, 0x41); + p = DIVA_OS_MEM_ATTACH_RESET(&a->xdi_adapter); + outpp(p, 0x41); + DIVA_OS_MEM_DETACH_RESET(&a->xdi_adapter, p); prepare_maestra_functions(&a->xdi_adapter); @@ -268,11 +289,11 @@ static int diva_bri_cleanup_adapter(diva for (i = 1; i < 3; i++) { if (a->resources.pci.addr[i] && a->resources.pci.bar[i]) { - diva_os_register_io_port(0, + diva_os_register_io_port(a, 0, a->resources.pci.bar[i], a->resources.pci. length[i], - &a->port_name[0]); + &a->port_name[0], i); a->resources.pci.addr[i] = 0; a->resources.pci.bar[i] = 0; } @@ -314,18 +335,20 @@ static dword diva_bri_get_serial_number( byte *confIO; word serHi, serLo, *confMem; - confIO = (byte *) a->resources.pci.addr[1]; + confIO = (byte *) DIVA_OS_MEM_ATTACH_CFG(&a->xdi_adapter); serHi = (word) (inppw(&confIO[0x22]) & 0x0FFF); serLo = (word) (inppw(&confIO[0x26]) & 0x0FFF); serNo = ((dword) serHi << 16) | (dword) serLo; + DIVA_OS_MEM_DETACH_CFG(&a->xdi_adapter, confIO); if ((serNo == 0) || (serNo == 0xFFFFFFFF)) { DBG_FTL(("W: BRI use BAR[0] to get card serial number")) - confMem = (word *) a->resources.pci.addr[0]; + confMem = (word *) DIVA_OS_MEM_ATTACH_RAM(&a->xdi_adapter); serHi = (word) (READ_WORD(&confMem[0x11]) & 0x0FFF); serLo = (word) (READ_WORD(&confMem[0x13]) & 0x0FFF); serNo = (((dword) serHi) << 16) | ((dword) serLo); + DIVA_OS_MEM_DETACH_RAM(&a->xdi_adapter, confMem); } DBG_LOG(("Serial Number=%ld", serNo)) @@ -342,9 +365,9 @@ static int diva_bri_reregister_io(diva_o int i; for (i = 1; i < 3; i++) { - diva_os_register_io_port(0, a->resources.pci.bar[i], + diva_os_register_io_port(a, 0, a->resources.pci.bar[i], a->resources.pci.length[i], - &a->port_name[0]); + &a->port_name[0], i); a->resources.pci.addr[i] = 0; } @@ -352,9 +375,9 @@ static int diva_bri_reregister_io(diva_o (long) a->xdi_adapter.serialNo); for (i = 1; i < 3; i++) { - if (diva_os_register_io_port(1, a->resources.pci.bar[i], + if (diva_os_register_io_port(a, 1, a->resources.pci.bar[i], a->resources.pci.length[i], - &a->port_name[0])) { + &a->port_name[0], i)) { DBG_ERR(("A: failed to reregister BAR[%d]", i)) return (-1); } @@ -493,6 +516,7 @@ static int diva_bri_reset_adapter(PISDN_ { byte *addrHi, *addrLo, *ioaddr; dword i; + byte *Port; if (!IoAdapter->port) { return (-1); @@ -501,13 +525,13 @@ static int diva_bri_reset_adapter(PISDN_ DBG_ERR(("A: A(%d) can't reset BRI adapter - please stop first", IoAdapter->ANum)) return (-1); } - addrHi = - IoAdapter->port + - ((IoAdapter->Properties.Bus == BUS_PCI) ? M_PCI_ADDRH : ADDRH); - addrLo = IoAdapter->port + ADDR; - ioaddr = IoAdapter->port + DATA; (*(IoAdapter->rstFnc)) (IoAdapter); diva_os_wait(100); + Port = DIVA_OS_MEM_ATTACH_PORT(IoAdapter); + addrHi = Port + + ((IoAdapter->Properties.Bus == BUS_PCI) ? M_PCI_ADDRH : ADDRH); + addrLo = Port + ADDR; + ioaddr = Port + DATA; /* recover */ @@ -540,6 +564,8 @@ static int diva_bri_reset_adapter(PISDN_ outppw(addrLo, (word) 0); outppw(ioaddr, (word) 0); + DIVA_OS_MEM_DETACH_PORT(IoAdapter, Port); + /* Forget all outstanding entities */ @@ -578,16 +604,17 @@ diva_bri_write_sdram_block(PISDN_ADAPTER dword address, const byte * data, dword length) { byte *addrHi, *addrLo, *ioaddr; + byte *Port; if (!IoAdapter->port) { return (-1); } - addrHi = - IoAdapter->port + + Port = DIVA_OS_MEM_ATTACH_PORT(IoAdapter); + addrHi = Port + ((IoAdapter->Properties.Bus == BUS_PCI) ? M_PCI_ADDRH : ADDRH); - addrLo = IoAdapter->port + ADDR; - ioaddr = IoAdapter->port + DATA; + addrLo = Port + ADDR; + ioaddr = Port + DATA; while (length--) { outpp(addrHi, (word) (address >> 16)); @@ -596,6 +623,7 @@ diva_bri_write_sdram_block(PISDN_ADAPTER address++; } + DIVA_OS_MEM_DETACH_PORT(IoAdapter, Port); return (0); } @@ -603,6 +631,7 @@ static int diva_bri_start_adapter(PISDN_ADAPTER IoAdapter, dword start_address, dword features) { + byte *Port; dword i, test; byte *addrHi, *addrLo, *ioaddr; int started = 0; @@ -621,11 +650,11 @@ diva_bri_start_adapter(PISDN_ADAPTER IoA sprintf(IoAdapter->Name, "A(%d)", (int) IoAdapter->ANum); DBG_LOG(("A(%d) start BRI", IoAdapter->ANum)) - addrHi = - IoAdapter->port + + Port = DIVA_OS_MEM_ATTACH_PORT(IoAdapter); + addrHi = Port + ((IoAdapter->Properties.Bus == BUS_PCI) ? M_PCI_ADDRH : ADDRH); - addrLo = IoAdapter->port + ADDR; - ioaddr = IoAdapter->port + DATA; + addrLo = Port + ADDR; + ioaddr = Port + DATA; outpp(addrHi, (byte) ( @@ -633,12 +662,20 @@ diva_bri_start_adapter(PISDN_ADAPTER IoA BRI_SHARED_RAM_SIZE) >> 16)); outppw(addrLo, 0x1e); outppw(ioaddr, 0x00); + DIVA_OS_MEM_DETACH_PORT(IoAdapter, Port); /* start the protocol code */ - outpp(IoAdapter->ctlReg, 0x08); + Port = DIVA_OS_MEM_ATTACH_CTLREG(IoAdapter); + outpp(Port, 0x08); + DIVA_OS_MEM_DETACH_CTLREG(IoAdapter, Port); + Port = DIVA_OS_MEM_ATTACH_PORT(IoAdapter); + addrHi = Port + + ((IoAdapter->Properties.Bus == BUS_PCI) ? M_PCI_ADDRH : ADDRH); + addrLo = Port + ADDR; + ioaddr = Port + DATA; /* wait for signature (max. 3 seconds) */ @@ -659,6 +696,7 @@ diva_bri_start_adapter(PISDN_ADAPTER IoA break; } } + DIVA_OS_MEM_DETACH_PORT(IoAdapter, Port); if (!started) { DBG_FTL(("A: A(%d) %s: Adapter selftest failed 0x%04X", @@ -677,7 +715,9 @@ diva_bri_start_adapter(PISDN_ADAPTER IoA a->ReadyInt = 1; if (IoAdapter->reset) { - outpp(IoAdapter->reset, 0x41); + Port = DIVA_OS_MEM_ATTACH_RESET(IoAdapter); + outpp(Port, 0x41); + DIVA_OS_MEM_DETACH_RESET(IoAdapter, Port); } a->ram_out(a, &PR_RAM->ReadyInt, 1); diff -prauN linux-2.6.0-test5/drivers/isdn/hardware/eicon/os_pri.c wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/os_pri.c --- linux-2.6.0-test5/drivers/isdn/hardware/eicon/os_pri.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/os_pri.c 2003-09-25 19:15:57.000000000 -0700 @@ -1,4 +1,4 @@ -/* $Id: os_pri.c,v 1.1.2.3 2001/02/14 21:10:19 armin Exp $ */ +/* $Id: os_pri.c,v 1.29 2003/08/25 13:41:27 schindler Exp $ */ #include "platform.h" #include "debuglib.h" @@ -57,6 +57,34 @@ static int pri_is_rev_2_card(int card_or return (0); } +static void diva_pri_set_addresses(diva_os_xdi_adapter_t * a) +{ + a->resources.pci.mem_type_id[MEM_TYPE_ADDRESS] = 0; + a->resources.pci.mem_type_id[MEM_TYPE_CONTROL] = 2; + a->resources.pci.mem_type_id[MEM_TYPE_CONFIG] = 4; + a->resources.pci.mem_type_id[MEM_TYPE_RAM] = 0; + a->resources.pci.mem_type_id[MEM_TYPE_RESET] = 2; + a->resources.pci.mem_type_id[MEM_TYPE_CFG] = 4; + a->resources.pci.mem_type_id[MEM_TYPE_PROM] = 3; + + a->xdi_adapter.Address = a->resources.pci.addr[0]; + a->xdi_adapter.Control = a->resources.pci.addr[2]; + a->xdi_adapter.Config = a->resources.pci.addr[4]; + + a->xdi_adapter.ram = a->resources.pci.addr[0]; + a->xdi_adapter.ram += MP_SHARED_RAM_OFFSET; + + a->xdi_adapter.reset = a->resources.pci.addr[2]; + a->xdi_adapter.reset += MP_RESET; + + a->xdi_adapter.cfg = a->resources.pci.addr[4]; + a->xdi_adapter.cfg += MP_IRQ_RESET; + + a->xdi_adapter.sdram_bar = a->resources.pci.bar[0]; + + a->xdi_adapter.prom = a->resources.pci.addr[3]; +} + /* ** BAR0 - SDRAM, MP_MEMORY_SIZE, MP2_MEMORY_SIZE by Rev.2 ** BAR1 - DEVICES, 0x1000 @@ -117,7 +145,7 @@ int diva_pri_init_card(diva_os_xdi_adapt */ for (bar = 0; bar < 5; bar++) { a->resources.pci.addr[bar] = - divasa_remap_pci_bar(a->resources.pci.bar[bar], + divasa_remap_pci_bar(a, bar, a->resources.pci.bar[bar], bar_length[bar]); if (!a->resources.pci.addr[bar]) { DBG_ERR(("A: A(%d), can't map bar[%d]", @@ -128,6 +156,11 @@ int diva_pri_init_card(diva_os_xdi_adapt } /* + Set all memory areas + */ + diva_pri_set_addresses(a); + + /* Get Serial Number of this adapter */ if (pri_get_serial_number(a)) { @@ -194,23 +227,6 @@ int diva_pri_init_card(diva_os_xdi_adapt prepare_pri_functions(&a->xdi_adapter); } - /* - Set all memory areas - */ - a->xdi_adapter.Address = a->resources.pci.addr[0]; - a->xdi_adapter.sdram_bar = a->resources.pci.bar[0]; - a->xdi_adapter.ram = a->resources.pci.addr[0]; - a->xdi_adapter.ram += MP_SHARED_RAM_OFFSET; - - a->xdi_adapter.reset = a->resources.pci.addr[2]; - a->xdi_adapter.reset += MP_RESET; - - a->xdi_adapter.prom = - (byte *) (unsigned long) a->resources.pci.bar[3]; - - a->xdi_adapter.cfg = a->resources.pci.addr[4]; - a->xdi_adapter.cfg += MP_IRQ_RESET; - a->dsp_mask = diva_pri_detect_dsps(a); /* @@ -317,7 +333,7 @@ static int diva_pri_cleanup_adapter(diva static int diva_pri_reset_adapter(PISDN_ADAPTER IoAdapter) { dword i; - struct mp_load *boot = (struct mp_load *) IoAdapter->Address; + struct mp_load *boot; if (!IoAdapter->Address || !IoAdapter->reset) { return (-1); @@ -328,12 +344,20 @@ static int diva_pri_reset_adapter(PISDN_ return (-1); } + boot = (struct mp_load *) DIVA_OS_MEM_ATTACH_ADDRESS(IoAdapter); WRITE_DWORD(&boot->err, 0); + DIVA_OS_MEM_DETACH_ADDRESS(IoAdapter, boot); + IoAdapter->rstFnc(IoAdapter); + diva_os_wait(10); + + boot = (struct mp_load *) DIVA_OS_MEM_ATTACH_ADDRESS(IoAdapter); i = READ_DWORD(&boot->live); + diva_os_wait(10); if (i == READ_DWORD(&boot->live)) { + DIVA_OS_MEM_DETACH_ADDRESS(IoAdapter, boot); DBG_ERR(("A: A(%d) CPU on PRI %ld is not alive!", IoAdapter->ANum, IoAdapter->serialNo)) return (-1); @@ -342,8 +366,10 @@ static int diva_pri_reset_adapter(PISDN_ DBG_ERR(("A: A(%d) PRI %ld Board Selftest failed, error=%08lx", IoAdapter->ANum, IoAdapter->serialNo, READ_DWORD(&boot->err))) + DIVA_OS_MEM_DETACH_ADDRESS(IoAdapter, boot); return (-1); } + DIVA_OS_MEM_DETACH_ADDRESS(IoAdapter, boot); /* Forget all outstanding entities @@ -383,9 +409,11 @@ diva_pri_write_sdram_block(PISDN_ADAPTER dword address, const byte * data, dword length, dword limit) { - byte *mem = IoAdapter->Address; + byte *p = DIVA_OS_MEM_ATTACH_ADDRESS(IoAdapter); + byte *mem = p; if (((address + length) >= limit) || !mem) { + DIVA_OS_MEM_DETACH_ADDRESS(IoAdapter, p); DBG_ERR(("A: A(%d) write PRI address=0x%08lx", IoAdapter->ANum, address + length)) return (-1); @@ -396,6 +424,7 @@ diva_pri_write_sdram_block(PISDN_ADAPTER *mem++ = *data++; } + DIVA_OS_MEM_DETACH_ADDRESS(IoAdapter, p); return (0); } @@ -405,15 +434,18 @@ diva_pri_start_adapter(PISDN_ADAPTER IoA { dword i; int started = 0; - struct mp_load *boot = (struct mp_load *) IoAdapter->Address; + byte *p; + struct mp_load *boot = (struct mp_load *) DIVA_OS_MEM_ATTACH_ADDRESS(IoAdapter); ADAPTER *a = &IoAdapter->a; if (IoAdapter->Initialized) { + DIVA_OS_MEM_DETACH_ADDRESS(IoAdapter, boot); DBG_ERR(("A: A(%d) pri_start_adapter, adapter already running", IoAdapter->ANum)) return (-1); } if (!boot) { + DIVA_OS_MEM_DETACH_ADDRESS(IoAdapter, boot); DBG_ERR(("A: PRI %ld can't start, adapter not mapped", IoAdapter->serialNo)) return (-1); @@ -437,17 +469,22 @@ diva_pri_start_adapter(PISDN_ADAPTER IoA } if (!started) { - dword TrapId = READ_DWORD(&IoAdapter->Address[0x80]); - dword debug = READ_DWORD(&IoAdapter->Address[0x1c]); + byte *p = (byte *)boot; + dword TrapId; + dword debug; + TrapId = READ_DWORD(&p[0x80]); + debug = READ_DWORD(&p[0x1c]); DBG_ERR(("A(%d) Adapter start failed 0x%08lx, TrapId=%08lx, debug=%08lx", IoAdapter->ANum, READ_DWORD(&boot->signature), TrapId, debug)) + DIVA_OS_MEM_DETACH_ADDRESS(IoAdapter, boot); if (IoAdapter->trapFnc) { (*(IoAdapter->trapFnc)) (IoAdapter); } IoAdapter->stop(IoAdapter); return (-1); } + DIVA_OS_MEM_DETACH_ADDRESS(IoAdapter, boot); IoAdapter->Initialized = TRUE; @@ -455,8 +492,9 @@ diva_pri_start_adapter(PISDN_ADAPTER IoA Check Interrupt */ IoAdapter->IrqCount = 0; - WRITE_DWORD(((dword volatile *) IoAdapter->cfg), - (dword) ~ 0x03E00000); + p = DIVA_OS_MEM_ATTACH_CFG(IoAdapter); + WRITE_DWORD(((dword volatile *) p), (dword) ~ 0x03E00000); + DIVA_OS_MEM_DETACH_CFG(IoAdapter, p); a->ReadyInt = 1; a->ram_out(a, &PR_RAM->ReadyInt, 1); @@ -658,7 +696,8 @@ diva_pri_cmd_card_proc(struct _diva_os_x diva_os_malloc(0, a->xdi_mbox.data_length); if (a->xdi_mbox.data) { dword *data = (dword *) a->xdi_mbox.data; - if (!a->xdi_adapter.ram || !a->xdi_adapter.reset || + if (!a->xdi_adapter.ram || + !a->xdi_adapter.reset || !a->xdi_adapter.cfg) { *data = 3; } else if (a->xdi_adapter.trapped) { @@ -691,23 +730,18 @@ diva_pri_cmd_card_proc(struct _diva_os_x a->xdi_mbox. data_length); if (a->xdi_mbox.data) { - byte *src = - a->xdi_adapter.Address; - byte *dst = - a->xdi_mbox.data; - dword len = - a->xdi_mbox. - data_length; - - src += - cmd->command_data. - read_sdram.offset; + byte *p = DIVA_OS_MEM_ATTACH_ADDRESS(&a->xdi_adapter); + byte *src = p; + byte *dst = a->xdi_mbox.data; + dword len = a->xdi_mbox.data_length; + + src += cmd->command_data.read_sdram.offset; while (len--) { *dst++ = *src++; } - a->xdi_mbox.status = - DIVA_XDI_MBOX_BUSY; + a->xdi_mbox.status = DIVA_XDI_MBOX_BUSY; + DIVA_OS_MEM_DETACH_ADDRESS(&a->xdi_adapter, p); ret = 0; } } @@ -731,27 +765,33 @@ static int pri_get_serial_number(diva_os byte data[64]; int i; dword len = sizeof(data); - volatile byte *config = (byte *) a->resources.pci.addr[4]; - volatile byte *flash = (byte *) a->resources.pci.addr[3]; + volatile byte *config; + volatile byte *flash; /* * First set some GT6401x config registers before accessing the BOOT-ROM */ + config = DIVA_OS_MEM_ATTACH_CONFIG(&a->xdi_adapter); if (!(config[0xc3c] & 0x08)) { config[0xc3c] |= 0x08; /* Base Address enable register */ } config[LOW_BOOTCS_DREG] = 0x00; config[HI_BOOTCS_DREG] = 0xFF; + DIVA_OS_MEM_DETACH_CONFIG(&a->xdi_adapter, config); /* * Read only the last 64 bytes of manufacturing data */ memset(data, '\0', len); + flash = DIVA_OS_MEM_ATTACH_PROM(&a->xdi_adapter); for (i = 0; i < len; i++) { data[i] = flash[0x8000 - len + i]; } + DIVA_OS_MEM_DETACH_PROM(&a->xdi_adapter, flash); + config = DIVA_OS_MEM_ATTACH_CONFIG(&a->xdi_adapter); config[LOW_BOOTCS_DREG] = 0xFC; /* Disable FLASH EPROM access */ config[HI_BOOTCS_DREG] = 0xFF; + DIVA_OS_MEM_DETACH_CONFIG(&a->xdi_adapter, config); if (memcmp(&data[48], "DIVAserverPR", 12)) { #if !defined(DIVA_PRI_NO_PCI_BIOS_WORKAROUND) /* { */ @@ -791,22 +831,26 @@ static int pri_get_serial_number(diva_os /* Try to read Flash again */ - config = (byte *) a->resources.pci.addr[4]; - flash = (byte *) a->resources.pci.addr[3]; len = sizeof(data); + config = DIVA_OS_MEM_ATTACH_CONFIG(&a->xdi_adapter); if (!(config[0xc3c] & 0x08)) { config[0xc3c] |= 0x08; /* Base Address enable register */ } config[LOW_BOOTCS_DREG] = 0x00; config[HI_BOOTCS_DREG] = 0xFF; + DIVA_OS_MEM_DETACH_CONFIG(&a->xdi_adapter, config); memset(data, '\0', len); + flash = DIVA_OS_MEM_ATTACH_PROM(&a->xdi_adapter); for (i = 0; i < len; i++) { data[i] = flash[0x8000 - len + i]; } + DIVA_OS_MEM_ATTACH_PROM(&a->xdi_adapter, flash); + config = DIVA_OS_MEM_ATTACH_CONFIG(&a->xdi_adapter); config[LOW_BOOTCS_DREG] = 0xFC; config[HI_BOOTCS_DREG] = 0xFF; + DIVA_OS_MEM_DETACH_CONFIG(&a->xdi_adapter, config); if (memcmp(&data[48], "DIVAserverPR", 12)) { DBG_ERR(("A: failed to read serial number")) @@ -907,7 +951,8 @@ dsp_check_presence(volatile byte * addr, */ static dword diva_pri_detect_dsps(diva_os_xdi_adapter_t * a) { - byte *base = a->resources.pci.addr[2]; + byte *base; + byte *p; dword ret = 0; dword row_offset[7] = { 0x00000000, @@ -921,14 +966,17 @@ static dword diva_pri_detect_dsps(diva_o byte *dsp_addr_port, *dsp_data_port, row_state; int dsp_row = 0, dsp_index, dsp_num; - if (!base || !a->xdi_adapter.reset) { + if (!a->xdi_adapter.Control || !a->xdi_adapter.reset) { return (0); } - *(volatile byte *) (a->xdi_adapter.reset) = - _MP_RISC_RESET | _MP_DSP_RESET; + p = DIVA_OS_MEM_ATTACH_RESET(&a->xdi_adapter); + *(volatile byte *) p = _MP_RISC_RESET | _MP_DSP_RESET; + DIVA_OS_MEM_DETACH_RESET(&a->xdi_adapter, p); diva_os_wait(5); + base = DIVA_OS_MEM_ATTACH_CONTROL(&a->xdi_adapter); + for (dsp_num = 0; dsp_num < 30; dsp_num++) { dsp_row = dsp_num / 7 + 1; dsp_index = dsp_num % 7; @@ -947,9 +995,11 @@ static dword diva_pri_detect_dsps(diva_o ret |= (1 << dsp_num); } } + DIVA_OS_MEM_DETACH_CONTROL(&a->xdi_adapter, base); - *(volatile byte *) (a->xdi_adapter.reset) = - _MP_RISC_RESET | _MP_LED1 | _MP_LED2; + p = DIVA_OS_MEM_ATTACH_RESET(&a->xdi_adapter); + *(volatile byte *) p = _MP_RISC_RESET | _MP_LED1 | _MP_LED2; + DIVA_OS_MEM_DETACH_RESET(&a->xdi_adapter, p); diva_os_wait(5); /* diff -prauN linux-2.6.0-test5/drivers/isdn/hardware/eicon/platform.h wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/platform.h --- linux-2.6.0-test5/drivers/isdn/hardware/eicon/platform.h 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/platform.h 2003-09-25 19:15:57.000000000 -0700 @@ -1,9 +1,9 @@ -/* $Id: platform.h,v 1.1.2.6 2001/05/01 15:48:05 armin Exp $ +/* $Id: platform.h,v 1.31 2003/09/08 15:15:22 schindler Exp $ * * platform.h * * - * Copyright 2000-2002 by Armin Schindler (mac@melware.de) + * Copyright 2000-2003 by Armin Schindler (mac@melware.de) * Copyright 2000 Eicon Networks * * This software may be used and distributed according to the terms @@ -23,20 +23,27 @@ #include #include #include +#include #include +#include #include #include #include +#include #include #include #include "cardtype.h" +/* activate debuglib for modules only */ +#ifndef MODULE +#define DIVA_NO_DEBUGLIB +#endif + #define DIVA_INIT_FUNCTION __init #define DIVA_EXIT_FUNCTION __exit #define DIVA_USER_MODE_CARD_CONFIG 1 -#define XDI_USE_XLOG 1 #define USE_EXTENDED_DEBUGS 1 #define MAX_ADAPTER 32 @@ -46,11 +53,6 @@ #define MEMORY_SPACE_TYPE 0 #define PORT_SPACE_TYPE 1 -#include "debuglib.h" - -#define dtrc(p) DBG_PRV0(p) -#define dbug(a,p) DBG_PRV1(p) - #include @@ -106,6 +108,36 @@ #define _cdecl #endif +#define MEM_TYPE_RAM 0 +#define MEM_TYPE_PORT 1 +#define MEM_TYPE_PROM 2 +#define MEM_TYPE_CTLREG 3 +#define MEM_TYPE_RESET 4 +#define MEM_TYPE_CFG 5 +#define MEM_TYPE_ADDRESS 6 +#define MEM_TYPE_CONFIG 7 +#define MEM_TYPE_CONTROL 8 + +#define DIVA_OS_MEM_ATTACH_RAM(a) ((a)->ram) +#define DIVA_OS_MEM_ATTACH_PORT(a) ((a)->port) +#define DIVA_OS_MEM_ATTACH_PROM(a) ((a)->prom) +#define DIVA_OS_MEM_ATTACH_CTLREG(a) ((a)->ctlReg) +#define DIVA_OS_MEM_ATTACH_RESET(a) ((a)->reset) +#define DIVA_OS_MEM_ATTACH_CFG(a) ((a)->cfg) +#define DIVA_OS_MEM_ATTACH_ADDRESS(a) ((a)->Address) +#define DIVA_OS_MEM_ATTACH_CONFIG(a) ((a)->Config) +#define DIVA_OS_MEM_ATTACH_CONTROL(a) ((a)->Control) + +#define DIVA_OS_MEM_DETACH_RAM(a, x) do { } while(0) +#define DIVA_OS_MEM_DETACH_PORT(a, x) do { } while(0) +#define DIVA_OS_MEM_DETACH_PROM(a, x) do { } while(0) +#define DIVA_OS_MEM_DETACH_CTLREG(a, x) do { } while(0) +#define DIVA_OS_MEM_DETACH_RESET(a, x) do { } while(0) +#define DIVA_OS_MEM_DETACH_CFG(a, x) do { } while(0) +#define DIVA_OS_MEM_DETACH_ADDRESS(a, x) do { } while(0) +#define DIVA_OS_MEM_DETACH_CONFIG(a, x) do { } while(0) +#define DIVA_OS_MEM_DETACH_CONTROL(a, x) do { } while(0) + #if !defined(DIM) #define DIM(array) (sizeof (array)/sizeof ((array)[0])) #endif @@ -124,7 +156,11 @@ typedef struct _ISDN_ADAPTER ISDN_ADAP typedef struct _ISDN_ADAPTER* PISDN_ADAPTER; typedef void (* DIVA_DI_PRINTF) (unsigned char *, ...); -extern DIVA_DI_PRINTF dprintf; +#include "debuglib.h" + +#define dtrc(p) DBG_PRV0(p) +#define dbug(a,p) DBG_PRV1(p) + typedef struct e_info_s E_INFO ; @@ -146,8 +182,21 @@ void diva_xdi_didd_remove_adapter (int c /* ** memory allocation */ -void* diva_os_malloc (unsigned long flags, unsigned long size); -void diva_os_free (unsigned long flags, void* ptr); +static __inline__ void* diva_os_malloc (unsigned long flags, unsigned long size) +{ + void *ret = NULL; + + if (size) { + ret = (void *) vmalloc((unsigned int) size); + } + return (ret); +} +static __inline__ void diva_os_free (unsigned long flags, void* ptr) +{ + if (ptr) { + vfree(ptr); + } +} /* ** use skbuffs for message buffer @@ -161,8 +210,17 @@ void diva_os_free_message_buffer(diva_os /* ** mSeconds waiting */ -void diva_os_sleep(dword mSec); -void diva_os_wait(dword mSec); +static __inline__ void diva_os_sleep(dword mSec) +{ + unsigned long timeout = HZ * mSec / 1000 + 1; + + set_current_state(TASK_UNINTERRUPTIBLE); + schedule_timeout(timeout); +} +static __inline__ void diva_os_wait(dword mSec) +{ + mdelay(mSec); +} /* ** PCI Configuration space access @@ -173,8 +231,8 @@ void PCIread (byte bus, byte func, int o /* ** I/O Port utilities */ -int diva_os_register_io_port (int register, unsigned long port, unsigned long length, const char* name); - +int diva_os_register_io_port (void *adapter, int register, unsigned long port, + unsigned long length, const char* name, int id); /* ** I/O port access abstraction */ @@ -199,14 +257,6 @@ void diva_os_remove_irq (void* context, #define diva_os_in_irq() in_irq() /* -** module locking -*/ -/* -#define DIVA_LOCK_MODULE MOD_INC_USE_COUNT -#define DIVA_UNLOCK_MODULE MOD_DEC_USE_COUNT -*/ - -/* ** Spin Lock framework */ typedef long diva_os_spin_lock_magic_t; diff -prauN linux-2.6.0-test5/drivers/isdn/hardware/eicon/s_4bri.c wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/s_4bri.c --- linux-2.6.0-test5/drivers/isdn/hardware/eicon/s_4bri.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/s_4bri.c 2003-09-25 19:15:57.000000000 -0700 @@ -55,8 +55,8 @@ static void qBri_cpu_trapped (PISDN_ADAP * check for trapped MIPS 46xx CPU, dump exception frame */ + base = DIVA_OS_MEM_ATTACH_CONTROL(IoAdapter); offset = IoAdapter->ControllerNumber * (IoAdapter->MemorySize >> factor) ; - base = IoAdapter->ram - offset - ((IoAdapter->MemorySize >> factor) - MQ_SHARED_RAM_SIZE) ; TrapID = READ_DWORD(&base[0x80]) ; @@ -75,8 +75,10 @@ static void qBri_cpu_trapped (PISDN_ADAP if ( (regs[0] >= offset) && (regs[0] < offset + (IoAdapter->MemorySize >> factor) - 1) ) { - if ( !(Xlog = (word *)diva_os_malloc (0, MAX_XLOG_SIZE)) ) + if ( !(Xlog = (word *)diva_os_malloc (0, MAX_XLOG_SIZE)) ) { + DIVA_OS_MEM_DETACH_CONTROL(IoAdapter, base); return ; + } size = offset + (IoAdapter->MemorySize >> factor) - regs[0] ; if ( size > MAX_XLOG_SIZE ) @@ -89,7 +91,7 @@ static void qBri_cpu_trapped (PISDN_ADAP diva_os_free (0, Xlog) ; IoAdapter->trapped = 2 ; } - + DIVA_OS_MEM_DETACH_CONTROL(IoAdapter, base); } /* -------------------------------------------------------------------------- @@ -97,10 +99,10 @@ static void qBri_cpu_trapped (PISDN_ADAP -------------------------------------------------------------------------- */ static void reset_qBri_hardware (PISDN_ADAPTER IoAdapter) { word volatile *qBriReset ; - dword volatile *qBriCntrl ; + byte volatile *qBriCntrl ; + byte volatile *p ; - qBriReset = (word volatile *)IoAdapter->prom ; - qBriCntrl = (dword volatile *)(&IoAdapter->ctlReg[DIVA_4BRI_REVISION(IoAdapter) ? (MQ2_BREG_RISC) : (MQ_BREG_RISC)]); + qBriReset = (word volatile *)DIVA_OS_MEM_ATTACH_PROM(IoAdapter); WRITE_WORD(qBriReset, READ_WORD(qBriReset) | PLX9054_SOFT_RESET) ; diva_os_wait (1) ; WRITE_WORD(qBriReset, READ_WORD(qBriReset) & ~PLX9054_SOFT_RESET) ; @@ -109,34 +111,40 @@ static void reset_qBri_hardware (PISDN_A diva_os_wait (1) ; WRITE_WORD(qBriReset, READ_WORD(qBriReset) & ~PLX9054_RELOAD_EEPROM) ; diva_os_wait (1); + DIVA_OS_MEM_DETACH_PROM(IoAdapter, qBriReset); - WRITE_DWORD(qBriCntrl, 0) ; + qBriCntrl = DIVA_OS_MEM_ATTACH_CTLREG(IoAdapter); + p = &qBriCntrl[DIVA_4BRI_REVISION(IoAdapter) ? (MQ2_BREG_RISC) : (MQ_BREG_RISC)]; + WRITE_DWORD(p, 0) ; + DIVA_OS_MEM_DETACH_CTLREG(IoAdapter, qBriCntrl); DBG_TRC(("resetted board @ reset addr 0x%08lx", qBriReset)) - DBG_TRC(("resetted board @ cntrl addr 0x%08lx", qBriCntrl)) - + DBG_TRC(("resetted board @ cntrl addr 0x%08lx", p)) } /* -------------------------------------------------------------------------- Start Card CPU -------------------------------------------------------------------------- */ void start_qBri_hardware (PISDN_ADAPTER IoAdapter) { - dword volatile *qBriReset ; + byte volatile *qBriReset ; + byte volatile *p ; - qBriReset = (dword volatile *)(&IoAdapter->ctlReg[DIVA_4BRI_REVISION(IoAdapter) ? (MQ2_BREG_RISC) : (MQ_BREG_RISC)]); + p = (byte volatile *)DIVA_OS_MEM_ATTACH_CTLREG(IoAdapter); + qBriReset = &p[(DIVA_4BRI_REVISION(IoAdapter)) ? (MQ2_BREG_RISC) : (MQ_BREG_RISC)]; WRITE_DWORD(qBriReset, MQ_RISC_COLD_RESET_MASK) ; diva_os_wait (2) ; WRITE_DWORD(qBriReset, MQ_RISC_WARM_RESET_MASK | MQ_RISC_COLD_RESET_MASK) ; diva_os_wait (10) ; + DIVA_OS_MEM_DETACH_CTLREG(IoAdapter, p); DBG_TRC(("started processor @ addr 0x%08lx", qBriReset)) - } /* -------------------------------------------------------------------------- Stop Card CPU -------------------------------------------------------------------------- */ static void stop_qBri_hardware (PISDN_ADAPTER IoAdapter) { + byte volatile *p ; dword volatile *qBriReset ; dword volatile *qBriIrq ; dword volatile *qBriIsacDspReset ; @@ -147,16 +155,24 @@ static void stop_qBri_hardware (PISDN_AD if ( IoAdapter->ControllerNumber > 0 ) return ; - qBriReset = (dword volatile *)(&IoAdapter->ctlReg[reset_offset]) ; - qBriIrq = (dword volatile *)(&IoAdapter->ctlReg[irq_offset]) ; - qBriIsacDspReset = (dword volatile *)(&IoAdapter->ctlReg[hw_offset]); + p = (byte volatile *)DIVA_OS_MEM_ATTACH_CTLREG(IoAdapter); + qBriReset = (dword volatile *)&p[reset_offset]; + qBriIsacDspReset = (dword volatile *)&p[hw_offset]; /* * clear interrupt line (reset Local Interrupt Test Register) */ WRITE_DWORD(qBriReset, 0) ; WRITE_DWORD(qBriIsacDspReset, 0) ; - IoAdapter->reset[PLX9054_INTCSR] = 0x00 ; /* disable PCI interrupts */ + DIVA_OS_MEM_DETACH_CTLREG(IoAdapter, p); + + p = (byte volatile *)DIVA_OS_MEM_ATTACH_RESET(IoAdapter); + p[PLX9054_INTCSR] = 0x00 ; /* disable PCI interrupts */ + DIVA_OS_MEM_DETACH_RESET(IoAdapter, p); + + p = (byte volatile *)DIVA_OS_MEM_ATTACH_CTLREG(IoAdapter); + qBriIrq = (dword volatile *)&p[irq_offset]; WRITE_DWORD(qBriIrq, MQ_IRQ_REQ_OFF) ; + DIVA_OS_MEM_DETACH_CTLREG(IoAdapter, p); DBG_TRC(("stopped processor @ addr 0x%08lx", qBriReset)) @@ -260,7 +276,7 @@ int qBri_FPGA_download (PISDN_ADAPTER Io int bit ; byte *File ; dword code, FileLength ; - word volatile *addr = (word volatile *)IoAdapter->prom ; + word volatile *addr = (word volatile *)DIVA_OS_MEM_ATTACH_PROM(IoAdapter); word val, baseval = FPGA_CS | FPGA_PROG ; @@ -291,8 +307,10 @@ int qBri_FPGA_download (PISDN_ADAPTER Io File = qBri_check_FPGAsrc (IoAdapter, "ds4bri.bit", &FileLength, &code) ; } - if ( !File ) + if ( !File ) { + DIVA_OS_MEM_DETACH_PROM(IoAdapter, addr); return (0) ; + } /* * prepare download, pulse PROGRAM pin down. */ @@ -306,6 +324,7 @@ int qBri_FPGA_download (PISDN_ADAPTER Io { DBG_FTL(("FPGA download: acknowledge for FPGA memory clear missing")) xdiFreeFile (File) ; + DIVA_OS_MEM_DETACH_PROM(IoAdapter, addr); return (0) ; } /* @@ -329,6 +348,8 @@ int qBri_FPGA_download (PISDN_ADAPTER Io diva_os_wait (100) ; val = READ_WORD(addr) ; + DIVA_OS_MEM_DETACH_PROM(IoAdapter, addr); + if ( !(val & FPGA_BUSY) ) { DBG_FTL(("FPGA download: chip remains in busy state (0x%04x)", val)) @@ -343,12 +364,10 @@ int qBri_FPGA_download (PISDN_ADAPTER Io Download protocol code to the adapter -------------------------------------------------------------------------- */ -#define DOWNLOAD_ADDR(IoAdapter) (&IoAdapter->ram[IoAdapter->downloadAddr & (IoAdapter->MemorySize - 1)]) - - static int qBri_protocol_load (PISDN_ADAPTER BaseIoAdapter, PISDN_ADAPTER IoAdapter) { PISDN_ADAPTER HighIoAdapter; + byte *p; dword FileLength ; dword *sharedRam, *File; dword Addr, ProtOffset, SharedRamOffset, i; @@ -436,7 +455,8 @@ static int qBri_protocol_load (PISDN_ADA return (0) ; } IoAdapter->downloadAddr = 0 ; - sharedRam = (dword *)DOWNLOAD_ADDR(IoAdapter) ; + p = DIVA_OS_MEM_ATTACH_RAM(IoAdapter); + sharedRam = (dword *)&p[IoAdapter->downloadAddr & (IoAdapter->MemorySize - 1)]; memcpy (sharedRam, File, FileLength) ; DBG_TRC(("Download addr 0x%08x len %ld - virtual 0x%08x", @@ -449,10 +469,12 @@ static int qBri_protocol_load (PISDN_ADA DBG_FTL(("File=0x%x, sharedRam=0x%x", File, sharedRam)) DBG_BLK(( (char *)File, 256)) DBG_BLK(( (char *)sharedRam, 256)) + DIVA_OS_MEM_DETACH_RAM(IoAdapter, p); xdiFreeFile (File) ; return (0) ; } + DIVA_OS_MEM_DETACH_RAM(IoAdapter, p); xdiFreeFile (File) ; return (1) ; @@ -466,6 +488,7 @@ static long qBri_download_buffer (OsFile PISDN_ADAPTER IoAdapter; word i ; dword *sharedRam ; + byte *p; i = 0 ; @@ -485,12 +508,14 @@ static long qBri_download_buffer (OsFile IoAdapter->downloadAddr + length)) return (-1) ; } - sharedRam = (dword*)(&BaseIoAdapter->ram[IoAdapter->downloadAddr & - (IoAdapter->MemorySize - 1)]) ; - + p = DIVA_OS_MEM_ATTACH_RAM(BaseIoAdapter); + sharedRam = (dword*)&p[IoAdapter->downloadAddr & (IoAdapter->MemorySize - 1)]; - if ( fp->sysFileRead (fp, sharedRam, length) != length ) + if ( fp->sysFileRead (fp, sharedRam, length) != length ) { + DIVA_OS_MEM_DETACH_RAM(BaseIoAdapter, p); return (-1) ; + } + DIVA_OS_MEM_DETACH_RAM(BaseIoAdapter, p); IoAdapter->downloadAddr += length ; IoAdapter->downloadAddr = (IoAdapter->downloadAddr + 3) & (~3) ; @@ -509,6 +534,7 @@ static dword qBri_telindus_load (PISDN_A word download_count, i ; dword *sharedRam ; dword FileLength ; + byte *p; if ( !(fp = OsOpenFile (DSP_TELINDUS_FILE)) ) { DBG_FTL(("qBri_telindus_load: %s not found!", DSP_TELINDUS_FILE)) @@ -553,8 +579,8 @@ static dword qBri_telindus_load (PISDN_A * store # of download files extracted from the archive and download table */ HighIoAdapter->downloadAddr = HighIoAdapter->DspCodeBaseAddr ; - sharedRam = (dword *)(&BaseIoAdapter->ram[HighIoAdapter->downloadAddr & - (IoAdapter->MemorySize - 1)]) ; + p = DIVA_OS_MEM_ATTACH_RAM(BaseIoAdapter); + sharedRam = (dword *)&p[HighIoAdapter->downloadAddr & (IoAdapter->MemorySize - 1)]; WRITE_DWORD(&(sharedRam[0]), (dword)download_count); memcpy (&sharedRam[1], &download_table[0], sizeof(download_table)) ; @@ -563,6 +589,7 @@ static dword qBri_telindus_load (PISDN_A if ( memcmp (&sharedRam[1], &download_table, download_count) ) { DBG_FTL(("%s: Dsp Memory test failed!", IoAdapter->Properties.Name)) } + DIVA_OS_MEM_DETACH_RAM(BaseIoAdapter, p); return (FileLength) ; } @@ -588,6 +615,7 @@ static byte* qBri_sdp_load (PISDN_ADAPTE dword phys_start_addr; dword end_addr; byte* sharedRam = 0; + byte *p; if (task) { if (!(fp = OsOpenFile (task))) { @@ -657,18 +685,22 @@ static byte* qBri_sdp_load (PISDN_ADAPTE } fp->sysFileSeek (fp, 0, OS_SEEK_SET); - sharedRam = &BaseIoAdapter->ram[phys_start_addr]; + p = DIVA_OS_MEM_ATTACH_RAM(BaseIoAdapter); + sharedRam = &p[phys_start_addr]; if ((dword)fp->sysFileRead (fp, sharedRam, FileLength) != FileLength) { + DIVA_OS_MEM_DETACH_RAM(BaseIoAdapter, p); OsCloseFile (fp) ; DBG_ERR(("Can't read image [%s]", task)) return (0); } + DIVA_OS_MEM_DETACH_RAM(BaseIoAdapter, p); OsCloseFile (fp) ; } + p = DIVA_OS_MEM_ATTACH_RAM(BaseIoAdapter); if (!link_addr) { - link_addr = &BaseIoAdapter->ram[OFFS_DSP_CODE_BASE_ADDR]; + link_addr = &p[OFFS_DSP_CODE_BASE_ADDR]; } DBG_TRC(("Write task [%s] link %08lx at %08lx", @@ -681,6 +713,8 @@ static byte* qBri_sdp_load (PISDN_ADAPTE link_addr[2] = (byte)((start_addr >> 16) & 0xff); link_addr[3] = (byte)((start_addr >> 24) & 0xff); + DIVA_OS_MEM_DETACH_RAM(BaseIoAdapter, p); + return (task ? &sharedRam[DIVA_MIPS_TASK_IMAGE_LINK_OFFS] : 0); } @@ -691,6 +725,7 @@ static int load_qBri_hardware (PISDN_ADA dword i, offset, controller ; word *signature ; int factor = (IoAdapter->tasks == 1) ? 1 : 2; + byte *p; PISDN_ADAPTER Slave ; @@ -751,7 +786,8 @@ static int load_qBri_hardware (PISDN_ADA Slave->reset = IoAdapter->reset ; Slave->ctlReg = IoAdapter->ctlReg ; Slave->prom = IoAdapter->prom ; - Slave->reset = IoAdapter->reset ; + Slave->Config = IoAdapter->Config ; + Slave->Control = IoAdapter->Control ; if ( !qBri_protocol_load (IoAdapter, Slave) ) return (0) ; @@ -782,9 +818,11 @@ static int load_qBri_hardware (PISDN_ADA { Slave = IoAdapter->QuadroList->QuadroAdapter[i] ; Slave->ram += (IoAdapter->MemorySize >> factor) - MQ_SHARED_RAM_SIZE ; + p = DIVA_OS_MEM_ATTACH_RAM(Slave); DBG_TRC(("Configure instance %d shared memory @ 0x%08lx", - Slave->ControllerNumber, Slave->ram)) - memset (Slave->ram, '\0', 256) ; + Slave->ControllerNumber, p)) + memset (p, '\0', 256) ; + DIVA_OS_MEM_DETACH_RAM(Slave, p); diva_configure_protocol (Slave); } @@ -792,7 +830,8 @@ static int load_qBri_hardware (PISDN_ADA * start adapter */ start_qBri_hardware (IoAdapter) ; - signature = (word *)(&IoAdapter->ram[0x1E]) ; + p = DIVA_OS_MEM_ATTACH_RAM(IoAdapter); + signature = (word *)(&p[0x1E]) ; /* * wait for signature in shared memory (max. 3 seconds) */ @@ -802,12 +841,14 @@ static int load_qBri_hardware (PISDN_ADA if ( signature[0] == 0x4447 ) { + DIVA_OS_MEM_DETACH_RAM(IoAdapter, p); DBG_TRC(("Protocol startup time %d.%02d seconds", (i / 100), (i % 100) )) return (1) ; } } + DIVA_OS_MEM_DETACH_RAM(IoAdapter, p); DBG_FTL(("%s: Adapter selftest failed (0x%04X)!", IoAdapter->Properties.Name, signature[0] >> 16)) qBri_cpu_trapped (IoAdapter) ; @@ -829,16 +870,23 @@ static int qBri_ISR (struct _ISDN_ADAPTE word i ; int serviced = 0 ; + byte *p; + p = DIVA_OS_MEM_ATTACH_RESET(IoAdapter); - if ( !(IoAdapter->reset[PLX9054_INTCSR] & 0x80) ) + if ( !(p[PLX9054_INTCSR] & 0x80) ) { + DIVA_OS_MEM_DETACH_RESET(IoAdapter, p); return (0) ; + } + DIVA_OS_MEM_DETACH_RESET(IoAdapter, p); /* * clear interrupt line (reset Local Interrupt Test Register) */ - qBriIrq = (dword volatile *)(&IoAdapter->ctlReg[DIVA_4BRI_REVISION(IoAdapter) ? (MQ2_BREG_IRQ_TEST) : (MQ_BREG_IRQ_TEST)]); + p = DIVA_OS_MEM_ATTACH_CTLREG(IoAdapter); + qBriIrq = (dword volatile *)(&p[DIVA_4BRI_REVISION(IoAdapter) ? (MQ2_BREG_IRQ_TEST) : (MQ_BREG_IRQ_TEST)]); WRITE_DWORD(qBriIrq, MQ_IRQ_REQ_OFF) ; + DIVA_OS_MEM_DETACH_CTLREG(IoAdapter, p); for ( i = 0 ; i < IoAdapter->tasks; ++i ) { @@ -861,15 +909,21 @@ static int qBri_ISR (struct _ISDN_ADAPTE -------------------------------------------------------------------------- */ static void disable_qBri_interrupt (PISDN_ADAPTER IoAdapter) { dword volatile *qBriIrq ; + byte *p; if ( IoAdapter->ControllerNumber > 0 ) return ; - qBriIrq = (dword volatile *)(&IoAdapter->ctlReg[DIVA_4BRI_REVISION(IoAdapter) ? (MQ2_BREG_IRQ_TEST) : (MQ_BREG_IRQ_TEST)]); /* * clear interrupt line (reset Local Interrupt Test Register) */ - IoAdapter->reset[PLX9054_INTCSR] = 0x00 ; /* disable PCI interrupts */ + p = DIVA_OS_MEM_ATTACH_RESET(IoAdapter); + p[PLX9054_INTCSR] = 0x00 ; /* disable PCI interrupts */ + DIVA_OS_MEM_DETACH_RESET(IoAdapter, p); + + p = DIVA_OS_MEM_ATTACH_CTLREG(IoAdapter); + qBriIrq = (dword volatile *)(&p[DIVA_4BRI_REVISION(IoAdapter) ? (MQ2_BREG_IRQ_TEST) : (MQ_BREG_IRQ_TEST)]); WRITE_DWORD(qBriIrq, MQ_IRQ_REQ_OFF) ; + DIVA_OS_MEM_DETACH_CTLREG(IoAdapter, p); } /* -------------------------------------------------------------------------- diff -prauN linux-2.6.0-test5/drivers/isdn/hardware/eicon/s_bri.c wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/s_bri.c --- linux-2.6.0-test5/drivers/isdn/hardware/eicon/s_bri.c 2003-09-08 12:50:23.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/s_bri.c 2003-09-25 19:15:57.000000000 -0700 @@ -45,15 +45,16 @@ static void bri_cpu_trapped (PISDN_ADAPT word *Xlog ; dword regs[4], i, size ; Xdesc xlogDesc ; + byte *Port; /* * first read pointers and trap frame */ if ( !(Xlog = (word *)diva_os_malloc (0, MAX_XLOG_SIZE)) ) return ; - addrHi = IoAdapter->port - + ((IoAdapter->Properties.Bus == BUS_PCI) ? M_PCI_ADDRH : ADDRH) ; - addrLo = IoAdapter->port + ADDR ; - ioaddr = IoAdapter->port + DATA ; + Port = DIVA_OS_MEM_ATTACH_PORT(IoAdapter); + addrHi = Port + ((IoAdapter->Properties.Bus == BUS_PCI) ? M_PCI_ADDRH : ADDRH) ; + addrLo = Port + ADDR ; + ioaddr = Port + DATA ; outpp (addrHi, 0) ; outppw (addrLo, 0) ; for ( i = 0 ; i < 0x100 ; Xlog[i++] = inppw(ioaddr) ) ; @@ -95,21 +96,28 @@ static void bri_cpu_trapped (PISDN_ADAPT outpp (addrHi, (byte)((BRI_UNCACHED_ADDR (IoAdapter->MemoryBase + IoAdapter->MemorySize - BRI_SHARED_RAM_SIZE)) >> 16)) ; outppw (addrLo, 0x00) ; + DIVA_OS_MEM_DETACH_PORT(IoAdapter, Port); } /* --------------------------------------------------------------------- Reset hardware --------------------------------------------------------------------- */ static void reset_bri_hardware (PISDN_ADAPTER IoAdapter) { - outpp (IoAdapter->ctlReg, 0x00) ; + byte *p = DIVA_OS_MEM_ATTACH_CTLREG(IoAdapter); + outpp (p, 0x00) ; + DIVA_OS_MEM_DETACH_CTLREG(IoAdapter, p); } /* --------------------------------------------------------------------- Halt system --------------------------------------------------------------------- */ static void stop_bri_hardware (PISDN_ADAPTER IoAdapter) { - if (IoAdapter->reset) { - outpp (IoAdapter->reset, 0x00) ; /* disable interrupts ! */ - } - outpp (IoAdapter->ctlReg, 0x00) ; /* clear int, halt cpu */ + byte *p = DIVA_OS_MEM_ATTACH_RESET(IoAdapter); + if (p) { + outpp (p, 0x00) ; /* disable interrupts ! */ + } + DIVA_OS_MEM_DETACH_RESET(IoAdapter, p); + p = DIVA_OS_MEM_ATTACH_CTLREG(IoAdapter); + outpp (p, 0x00) ; /* clear int, halt cpu */ + DIVA_OS_MEM_DETACH_CTLREG(IoAdapter, p); } #if !defined(DIVA_USER_MODE_CARD_CONFIG) /* { */ /* --------------------------------------------------------------------- @@ -121,6 +129,7 @@ static dword bri_protocol_load (PISDN_AD byte* addrHi, *addrLo, *ioaddr ; char *FileName = &IoAdapter->Protocol[0] ; dword Addr, i ; + byte *Port; /* ------------------------------------------------------------------- Try to load protocol code. 'File' points to memory location that does contain entire protocol code @@ -173,10 +182,10 @@ static dword bri_protocol_load (PISDN_AD DBG_FTL(("Protocol code '%s' too big (%ld)", FileName, FileLength)) return (0) ; } - addrHi = IoAdapter->port - + ((IoAdapter->Properties.Bus == BUS_PCI) ? M_PCI_ADDRH : ADDRH) ; - addrLo = IoAdapter->port + ADDR ; - ioaddr = IoAdapter->port + DATA ; + Port = DIVA_OS_MEM_ATTACH_PORT(IoAdapter); + addrHi = Port + ((IoAdapter->Properties.Bus == BUS_PCI) ? M_PCI_ADDRH : ADDRH) ; + addrLo = Port + ADDR ; + ioaddr = Port + DATA ; /* * set start address for download (use autoincrement mode !) */ @@ -204,12 +213,14 @@ static dword bri_protocol_load (PISDN_AD test = inppw (ioaddr) ; if ( test != File[i/2] ) { + DIVA_OS_MEM_DETACH_PORT(IoAdapter, Port); DBG_FTL(("%s: Memory test failed! (%d - 0x%04X/0x%04X)", IoAdapter->Properties.Name, i, test, File[i/2])) xdiFreeFile (File); return (0) ; } } + DIVA_OS_MEM_DETACH_PORT(IoAdapter, Port); xdiFreeFile (File); return (FileLength) ; } @@ -290,6 +301,7 @@ static dword bri_telindus_load (PISDN_AD t_dsp_portable_desc download_table[DSP_MAX_DOWNLOAD_COUNT] ; word download_count ; dword FileLength ; + byte *Port; if (!pinfo) { DBG_ERR (("A: out of memory s_bri at %d", __LINE__)) return (0); @@ -299,11 +311,11 @@ static dword bri_telindus_load (PISDN_AD return (0) ; } FileLength = fp->sysFileSize ; + Port = DIVA_OS_MEM_ATTACH_PORT(IoAdapter); pinfo->IoAdapter = IoAdapter ; - pinfo->AddrLo = IoAdapter->port + ADDR ; - pinfo->AddrHi = IoAdapter->port +\ - (IoAdapter->Properties.Bus == BUS_PCI ? M_PCI_ADDRH : ADDRH); - pinfo->Data = (word*)(IoAdapter->port + DATA) ; + pinfo->AddrLo = Port + ADDR ; + pinfo->AddrHi = Port + (IoAdapter->Properties.Bus == BUS_PCI ? M_PCI_ADDRH : ADDRH); + pinfo->Data = (word*)(Port + DATA) ; pinfo->DownloadPos = (IoAdapter->DspCodeBaseAddr +\ sizeof(dword) + sizeof(download_table) + 3) & (~3) ; fp->sysLoadDesc = (void *)pinfo; @@ -317,6 +329,7 @@ static dword bri_telindus_load (PISDN_AD &download_count, NULL, &download_table[0]) ; if ( error ) { + DIVA_OS_MEM_DETACH_PORT(IoAdapter, Port); DBG_FTL(("download file error: %s", error)) OsCloseFile (fp) ; diva_os_free (0, pinfo); @@ -335,23 +348,25 @@ static dword bri_telindus_load (PISDN_AD * copy download table to board */ outppw_buffer (pinfo->Data, &download_table[0], sizeof(download_table)) ; + DIVA_OS_MEM_DETACH_PORT(IoAdapter, Port); diva_os_free (0, pinfo); return (FileLength) ; } /******************************************************************************/ static int load_bri_hardware (PISDN_ADAPTER IoAdapter) { dword i ; - byte* addrHi, *addrLo, *ioaddr ; + byte* addrHi, *addrLo, *ioaddr, *p ; dword test ; + byte *Port; if ( IoAdapter->Properties.Card != CARD_MAE ) { return (FALSE) ; } - addrHi = IoAdapter->port \ - + ((IoAdapter->Properties.Bus==BUS_PCI) ? M_PCI_ADDRH : ADDRH); - addrLo = IoAdapter->port + ADDR ; - ioaddr = IoAdapter->port + DATA ; reset_bri_hardware (IoAdapter) ; + Port = DIVA_OS_MEM_ATTACH_PORT(IoAdapter); + addrHi = Port + ((IoAdapter->Properties.Bus==BUS_PCI) ? M_PCI_ADDRH : ADDRH); + addrLo = Port + ADDR ; + ioaddr = Port + DATA ; diva_os_wait (100); /* * recover @@ -366,6 +381,7 @@ static int load_bri_hardware (PISDN_ADAP IoAdapter->MemorySize - BRI_SHARED_RAM_SIZE)) >> 16)) ; outppw (addrLo, 0) ; for ( i = 0 ; i < 0x8000 ; outppw (ioaddr, 0), ++i ) ; + DIVA_OS_MEM_DETACH_PORT(IoAdapter, Port); diva_os_wait (100) ; /* * download protocol and dsp files @@ -396,6 +412,11 @@ static int load_bri_hardware (PISDN_ADAP return (FALSE) ; break ; } + + Port = DIVA_OS_MEM_ATTACH_PORT(IoAdapter); + addrHi = Port + ((IoAdapter->Properties.Bus==BUS_PCI) ? M_PCI_ADDRH : ADDRH); + addrLo = Port + ADDR ; + ioaddr = Port + DATA ; /* * clear signature */ @@ -408,13 +429,20 @@ static int load_bri_hardware (PISDN_ADAP * copy parameters */ diva_configure_protocol (IoAdapter); + DIVA_OS_MEM_DETACH_PORT(IoAdapter, Port); /* * start the protocol code */ - outpp (IoAdapter->ctlReg, 0x08) ; + p = DIVA_OS_MEM_ATTACH_CTLREG(IoAdapter); + outpp (p, 0x08) ; + DIVA_OS_MEM_DETACH_CTLREG(IoAdapter, p); /* * wait for signature (max. 3 seconds) */ + Port = DIVA_OS_MEM_ATTACH_PORT(IoAdapter); + addrHi = Port + ((IoAdapter->Properties.Bus==BUS_PCI) ? M_PCI_ADDRH : ADDRH); + addrLo = Port + ADDR ; + ioaddr = Port + DATA ; for ( i = 0 ; i < 300 ; ++i ) { diva_os_wait (10) ; @@ -424,11 +452,13 @@ static int load_bri_hardware (PISDN_ADAP test = (dword)inppw (ioaddr) ; if ( test == 0x4447 ) { + DIVA_OS_MEM_DETACH_PORT(IoAdapter, Port); DBG_TRC(("Protocol startup time %d.%02d seconds", (i / 100), (i % 100) )) return (TRUE) ; } } + DIVA_OS_MEM_DETACH_PORT(IoAdapter, Port); DBG_FTL(("%s: Adapter selftest failed (0x%04X)!", IoAdapter->Properties.Name, test)) bri_cpu_trapped (IoAdapter) ; @@ -441,12 +471,18 @@ static int load_bri_hardware (PISDN_ADAP #endif /* } */ /******************************************************************************/ static int bri_ISR (struct _ISDN_ADAPTER* IoAdapter) { - if ( !(inpp (IoAdapter->ctlReg) & 0x01) ) + byte *p; + + p = DIVA_OS_MEM_ATTACH_CTLREG(IoAdapter); + if ( !(inpp (p) & 0x01) ) { + DIVA_OS_MEM_DETACH_CTLREG(IoAdapter, p); return (0) ; + } /* clear interrupt line */ - outpp (IoAdapter->ctlReg, 0x08) ; + outpp (p, 0x08) ; + DIVA_OS_MEM_DETACH_CTLREG(IoAdapter, p); IoAdapter->IrqCount++ ; if ( IoAdapter->Initialized ) { diva_os_schedule_soft_isr (&IoAdapter->isr_soft_isr); @@ -457,11 +493,16 @@ static int bri_ISR (struct _ISDN_ADAPTER Disable IRQ in the card hardware -------------------------------------------------------------------------- */ static void disable_bri_interrupt (PISDN_ADAPTER IoAdapter) { - if ( IoAdapter->reset ) - { - outpp (IoAdapter->reset, 0x00) ; /* disable interrupts ! */ - } - outpp (IoAdapter->ctlReg, 0x00) ; /* clear int, halt cpu */ + byte *p; + p = DIVA_OS_MEM_ATTACH_RESET(IoAdapter); + if ( p ) + { + outpp (p, 0x00) ; /* disable interrupts ! */ + } + DIVA_OS_MEM_DETACH_RESET(IoAdapter, p); + p = DIVA_OS_MEM_ATTACH_CTLREG(IoAdapter); + outpp (p, 0x00) ; /* clear int, halt cpu */ + DIVA_OS_MEM_DETACH_CTLREG(IoAdapter, p); } /* ------------------------------------------------------------------------- Fill card entry points diff -prauN linux-2.6.0-test5/drivers/isdn/hardware/eicon/s_pri.c wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/s_pri.c --- linux-2.6.0-test5/drivers/isdn/hardware/eicon/s_pri.c 2003-09-08 12:50:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/s_pri.c 2003-09-25 19:15:57.000000000 -0700 @@ -54,7 +54,7 @@ static void pri_cpu_trapped (PISDN_ADAPT /* * check for trapped MIPS 46xx CPU, dump exception frame */ - base = IoAdapter->ram - MP_SHARED_RAM_OFFSET ; + base = DIVA_OS_MEM_ATTACH_ADDRESS(IoAdapter); TrapID = READ_DWORD(&base[0x80]) ; if ( (TrapID == 0x99999999) || (TrapID == 0x99999901) ) { @@ -68,8 +68,10 @@ static void pri_cpu_trapped (PISDN_ADAPT regs[0] &= IoAdapter->MemorySize - 1 ; if ( (regs[0] < IoAdapter->MemorySize - 1) ) { - if ( !(Xlog = (word *)diva_os_malloc (0, MAX_XLOG_SIZE)) ) + if ( !(Xlog = (word *)diva_os_malloc (0, MAX_XLOG_SIZE)) ) { + DIVA_OS_MEM_DETACH_ADDRESS(IoAdapter, base); return ; + } size = IoAdapter->MemorySize - regs[0] ; if ( size > MAX_XLOG_SIZE ) size = MAX_XLOG_SIZE ; @@ -81,24 +83,29 @@ static void pri_cpu_trapped (PISDN_ADAPT diva_os_free (0, Xlog) ; IoAdapter->trapped = 2 ; } + DIVA_OS_MEM_DETACH_ADDRESS(IoAdapter, base); } /* ------------------------------------------------------------------------- Hardware reset of PRI card ------------------------------------------------------------------------- */ static void reset_pri_hardware (PISDN_ADAPTER IoAdapter) { - *IoAdapter->reset = _MP_RISC_RESET | _MP_LED1 | _MP_LED2 ; + byte *p = DIVA_OS_MEM_ATTACH_RESET(IoAdapter); + *p = _MP_RISC_RESET | _MP_LED1 | _MP_LED2 ; diva_os_wait (50) ; - *IoAdapter->reset = 0x00 ; + *p = 0x00 ; diva_os_wait (50) ; + DIVA_OS_MEM_DETACH_RESET(IoAdapter, p); } /* ------------------------------------------------------------------------- Stop Card Hardware ------------------------------------------------------------------------- */ static void stop_pri_hardware (PISDN_ADAPTER IoAdapter) { dword i; - dword volatile *cfgReg = (dword volatile *)IoAdapter->cfg ; + byte *p; + dword volatile *cfgReg = (dword volatile *)DIVA_OS_MEM_ATTACH_CFG(IoAdapter); cfgReg[3] = 0x00000000 ; cfgReg[1] = 0x00000000 ; + DIVA_OS_MEM_DETACH_CFG(IoAdapter, cfgReg); IoAdapter->a.ram_out (&IoAdapter->a, &RAM->SWReg, SWREG_HALT_CPU) ; i = 0 ; while ( (i < 100) && (IoAdapter->a.ram_in (&IoAdapter->a, &RAM->SWReg) != 0) ) @@ -107,21 +114,25 @@ static void stop_pri_hardware (PISDN_ADA i++ ; } DBG_TRC(("%s: PRI stopped (%d)", IoAdapter->Name, i)) + cfgReg = (dword volatile *)DIVA_OS_MEM_ATTACH_CFG(IoAdapter); WRITE_DWORD(&cfgReg[0],((dword)(~0x03E00000))); + DIVA_OS_MEM_DETACH_CFG(IoAdapter, cfgReg); diva_os_wait (1) ; - *IoAdapter->reset = _MP_RISC_RESET | _MP_LED1 | _MP_LED2 ; + p = DIVA_OS_MEM_ATTACH_RESET(IoAdapter); + *p = _MP_RISC_RESET | _MP_LED1 | _MP_LED2 ; + DIVA_OS_MEM_DETACH_RESET(IoAdapter, p); } #if !defined(DIVA_USER_MODE_CARD_CONFIG) /* { */ /* ------------------------------------------------------------------------- Load protocol code to the PRI Card ------------------------------------------------------------------------- */ -#define DOWNLOAD_ADDR(IoAdapter) \ - (&IoAdapter->ram[IoAdapter->downloadAddr & (IoAdapter->MemorySize - 1)]) +#define DOWNLOAD_ADDR(IoAdapter) (IoAdapter->downloadAddr & (IoAdapter->MemorySize - 1)) static int pri_protocol_load (PISDN_ADAPTER IoAdapter) { dword FileLength ; dword *File ; dword *sharedRam ; dword Addr ; + byte *p; if (!(File = (dword *)xdiLoadArchive (IoAdapter, &FileLength, 0))) { return (0) ; } @@ -172,14 +183,17 @@ static int pri_protocol_load (PISDN_ADAP return (0) ; } IoAdapter->downloadAddr = MP_UNCACHED_ADDR (MP_PROTOCOL_OFFSET) ; - sharedRam = (dword *)DOWNLOAD_ADDR(IoAdapter) ; + p = DIVA_OS_MEM_ATTACH_RAM(IoAdapter); + sharedRam = (dword *)(&p[DOWNLOAD_ADDR(IoAdapter)]); memcpy (sharedRam, File, FileLength) ; if ( memcmp (sharedRam, File, FileLength) ) { + DIVA_OS_MEM_DETACH_RAM(IoAdapter, p); DBG_FTL(("%s: Memory test failed!", IoAdapter->Properties.Name)) xdiFreeFile (File); return (0) ; } + DIVA_OS_MEM_DETACH_RAM(IoAdapter, p); xdiFreeFile (File); return (1) ; } @@ -228,8 +242,8 @@ dsp_check_presence (volatile byte* addr, static dword diva_pri_detect_dsps (PISDN_ADAPTER IoAdapter) { - /* byte* base = a->resources.pci.addr[2]; */ - byte* base = IoAdapter->reset - MP_RESET ; + byte* base; + byte* p; dword ret = 0, DspCount = 0 ; dword row_offset[] = { 0x00000000, @@ -242,14 +256,18 @@ diva_pri_detect_dsps (PISDN_ADAPTER IoAd byte *dsp_addr_port, *dsp_data_port, row_state; int dsp_row = 0, dsp_index, dsp_num; IoAdapter->InitialDspInfo &= 0xffff ; - /* if (!base || !a->xdi_adapter.reset) */ - if (!base || !IoAdapter->reset) + p = DIVA_OS_MEM_ATTACH_RESET(IoAdapter); + if (!p) { + DIVA_OS_MEM_DETACH_RESET(IoAdapter, p); return (0); } - /* *(volatile byte*)(a->xdi_adapter.reset) = _MP_RISC_RESET | _MP_DSP_RESET; */ - *(volatile byte*)(IoAdapter->reset) = _MP_RISC_RESET | _MP_DSP_RESET; + *(volatile byte*)(p) = _MP_RISC_RESET | _MP_DSP_RESET; + DIVA_OS_MEM_DETACH_RESET(IoAdapter, p); diva_os_wait (5) ; + + base = DIVA_OS_MEM_ATTACH_CONTROL(IoAdapter); + for (dsp_num = 0; dsp_num < 30; dsp_num++) { dsp_row = dsp_num / 7 + 1; dsp_index = dsp_num % 7; @@ -264,8 +282,10 @@ diva_pri_detect_dsps (PISDN_ADAPTER IoAd DspCount++ ; } } - /* *(volatile byte*)(a->xdi_adapter.reset) = _MP_RISC_RESET | _MP_LED1 | _MP_LED2; */ - *(volatile byte*)(IoAdapter->reset) = _MP_RISC_RESET | _MP_LED1 | _MP_LED2; + DIVA_OS_MEM_DETACH_CONTROL(IoAdapter, base); + + p = DIVA_OS_MEM_ATTACH_RESET(IoAdapter); + *(volatile byte*)(p) = _MP_RISC_RESET | _MP_LED1 | _MP_LED2; diva_os_wait (50) ; /* Verify modules @@ -301,7 +321,8 @@ diva_pri_detect_dsps (PISDN_ADAPTER IoAd ((ret >> (3*7)) & 0x7F) ? "Y" : "N")) DBG_LOG(("+-----------------------+")) DBG_LOG(("DSP's(present-absent):%08x-%08x", ret, ~ret & 0x3fffffff)) - *(volatile byte*)(IoAdapter->reset) = 0 ; + *(volatile byte*)(p) = 0 ; + DIVA_OS_MEM_DETACH_RESET(IoAdapter, p); diva_os_wait (50) ; IoAdapter->InitialDspInfo |= DspCount << 16 ; return (ret); @@ -312,6 +333,7 @@ diva_pri_detect_dsps (PISDN_ADAPTER IoAd static long pri_download_buffer (OsFileHandle *fp, long length, void **addr) { PISDN_ADAPTER IoAdapter = (PISDN_ADAPTER)fp->sysLoadDesc ; dword *sharedRam ; + byte *p; *addr = (void *)IoAdapter->downloadAddr ; if ( ((dword) length) > IoAdapter->DspCodeBaseAddr + IoAdapter->MaxDspCodeSize - IoAdapter->downloadAddr ) @@ -321,11 +343,15 @@ static long pri_download_buffer (OsFileH IoAdapter->downloadAddr + length)) return (-1) ; } - sharedRam = (dword *)DOWNLOAD_ADDR(IoAdapter) ; - if ( fp->sysFileRead (fp, sharedRam, length) != length ) + p = DIVA_OS_MEM_ATTACH_RAM(IoAdapter); + sharedRam = (dword *)(&p[DOWNLOAD_ADDR(IoAdapter)]); + if ( fp->sysFileRead (fp, sharedRam, length) != length ) { + DIVA_OS_MEM_DETACH_RAM(IoAdapter, p); return (-1) ; + } IoAdapter->downloadAddr += length ; IoAdapter->downloadAddr = (IoAdapter->downloadAddr + 3) & (~3) ; + DIVA_OS_MEM_DETACH_RAM(IoAdapter, p); return (0) ; } /* ------------------------------------------------------------------------- @@ -338,6 +364,7 @@ static dword pri_telindus_load (PISDN_AD word download_count ; dword *sharedRam ; dword FileLength ; + byte *p; if ( !(fp = OsOpenFile (DSP_TELINDUS_FILE)) ) return (0) ; IoAdapter->downloadAddr = (IoAdapter->DspCodeBaseAddr @@ -363,9 +390,11 @@ static dword pri_telindus_load (PISDN_AD * store # of separate download files extracted from archive */ IoAdapter->downloadAddr = IoAdapter->DspCodeBaseAddr ; - sharedRam = (dword *)DOWNLOAD_ADDR(IoAdapter) ; + p = DIVA_OS_MEM_ATTACH_RAM(IoAdapter); + sharedRam = (dword *)(&p[DOWNLOAD_ADDR(IoAdapter)]); WRITE_DWORD(&(sharedRam[0]), (dword)download_count); memcpy (&sharedRam[1], &download_table[0], sizeof(download_table)) ; + DIVA_OS_MEM_DETACH_RAM(IoAdapter, p); return (FileLength) ; } /* ------------------------------------------------------------------------- @@ -374,14 +403,17 @@ static dword pri_telindus_load (PISDN_AD #define MIN_DSPS 0x30000000 static int load_pri_hardware (PISDN_ADAPTER IoAdapter) { dword i ; - struct mp_load *boot = (struct mp_load *)IoAdapter->ram ; - if ( IoAdapter->Properties.Card != CARD_MAEP ) + struct mp_load *boot = (struct mp_load *)DIVA_OS_MEM_ATTACH_RAM(IoAdapter); + if ( IoAdapter->Properties.Card != CARD_MAEP ) { + DIVA_OS_MEM_DETACH_RAM(IoAdapter, boot); return (0) ; + } boot->err = 0 ; #if 0 IoAdapter->rstFnc (IoAdapter) ; #else if ( MIN_DSPS != (MIN_DSPS & diva_pri_detect_dsps(IoAdapter)) ) { /* makes reset */ + DIVA_OS_MEM_DETACH_RAM(IoAdapter, boot); DBG_FTL(("%s: DSP error!", IoAdapter->Properties.Name)) return (0) ; } @@ -394,28 +426,36 @@ static int load_pri_hardware (PISDN_ADAP diva_os_wait (10) ; if ( i == boot->live ) { + DIVA_OS_MEM_DETACH_RAM(IoAdapter, boot); DBG_FTL(("%s: CPU is not alive!", IoAdapter->Properties.Name)) return (0) ; } if ( boot->err ) { + DIVA_OS_MEM_DETACH_RAM(IoAdapter, boot); DBG_FTL(("%s: Board Selftest failed!", IoAdapter->Properties.Name)) return (0) ; } /* * download protocol and dsp files */ - if ( !xdiSetProtocol (IoAdapter, IoAdapter->ProtocolSuffix) ) + if ( !xdiSetProtocol (IoAdapter, IoAdapter->ProtocolSuffix) ) { + DIVA_OS_MEM_DETACH_RAM(IoAdapter, boot); return (0) ; - if ( !pri_protocol_load (IoAdapter) ) + } + if ( !pri_protocol_load (IoAdapter) ) { + DIVA_OS_MEM_DETACH_RAM(IoAdapter, boot); return (0) ; - if ( !pri_telindus_load (IoAdapter) ) + } + if ( !pri_telindus_load (IoAdapter) ) { + DIVA_OS_MEM_DETACH_RAM(IoAdapter, boot); return (0) ; + } /* * copy configuration parameters */ IoAdapter->ram += MP_SHARED_RAM_OFFSET ; - memset (IoAdapter->ram, '\0', 256) ; + memset (boot + MP_SHARED_RAM_OFFSET, '\0', 256) ; diva_configure_protocol (IoAdapter); /* * start adapter @@ -430,11 +470,13 @@ static int load_pri_hardware (PISDN_ADAP diva_os_wait (10) ; if ( (boot->signature >> 16) == 0x4447 ) { + DIVA_OS_MEM_DETACH_RAM(IoAdapter, boot); DBG_TRC(("Protocol startup time %d.%02d seconds", (i / 100), (i % 100) )) return (1) ; } } + DIVA_OS_MEM_DETACH_RAM(IoAdapter, boot); DBG_FTL(("%s: Adapter selftest failed (0x%04X)!", IoAdapter->Properties.Name, boot->signature >> 16)) pri_cpu_trapped (IoAdapter) ; @@ -449,12 +491,16 @@ static int load_pri_hardware (PISDN_ADAP PRI Adapter interrupt Service Routine -------------------------------------------------------------------------- */ static int pri_ISR (struct _ISDN_ADAPTER* IoAdapter) { - if ( !((READ_DWORD((dword *)IoAdapter->cfg)) & 0x80000000) ) + byte *cfg = DIVA_OS_MEM_ATTACH_CFG(IoAdapter); + if ( !((READ_DWORD((dword *)cfg)) & 0x80000000) ) { + DIVA_OS_MEM_DETACH_CFG(IoAdapter, cfg); return (0) ; + } /* clear interrupt line */ - WRITE_DWORD(((dword *)IoAdapter->cfg), (dword)~0x03E00000) ; + WRITE_DWORD(((dword *)cfg), (dword)~0x03E00000) ; + DIVA_OS_MEM_DETACH_CFG(IoAdapter, cfg); IoAdapter->IrqCount++ ; if ( IoAdapter->Initialized ) { @@ -466,10 +512,11 @@ static int pri_ISR (struct _ISDN_ADAPTER Disable interrupt in the card hardware ------------------------------------------------------------------------- */ static void disable_pri_interrupt (PISDN_ADAPTER IoAdapter) { - dword volatile *cfgReg = (dword volatile *)IoAdapter->cfg ; + dword volatile *cfgReg = (dword volatile *)DIVA_OS_MEM_ATTACH_CFG(IoAdapter) ; cfgReg[3] = 0x00000000 ; cfgReg[1] = 0x00000000 ; WRITE_DWORD(&cfgReg[0], (dword)(~0x03E00000)) ; + DIVA_OS_MEM_DETACH_CFG(IoAdapter, cfgReg); } /* ------------------------------------------------------------------------- Install entry points for PRI Adapter diff -prauN linux-2.6.0-test5/drivers/isdn/hardware/eicon/um_idi.c wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/um_idi.c --- linux-2.6.0-test5/drivers/isdn/hardware/eicon/um_idi.c 2003-09-08 12:50:14.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/um_idi.c 2003-09-25 19:15:57.000000000 -0700 @@ -1,4 +1,4 @@ -/* $Id: um_idi.c,v 1.1.2.2 2001/02/11 14:40:41 armin Exp $ */ +/* $Id: um_idi.c,v 1.9 2003/09/09 06:00:47 schindler Exp $ */ #include "platform.h" #include "di_defs.h" @@ -37,6 +37,11 @@ static int process_idi_rc(divas_um_idi_e static int process_idi_ind(divas_um_idi_entity_t * e, byte ind); static int write_return_code(divas_um_idi_entity_t * e, byte rc); +/* + * include queue functions + */ +#include "dlist.c" + /* -------------------------------------------------------------------------- MAIN -------------------------------------------------------------------------- */ @@ -171,7 +176,15 @@ static diva_um_idi_adapter_t *diva_um_id ------------------------------------------------------------------------ */ int diva_um_idi_nr_of_adapters(void) { - return (diva_q_get_nr_of_entries(&adapter_q)); + int i = 0; + const diva_entity_queue_t * q = &adapter_q; + const diva_entity_link_t *diva_current = q->head; + + while (diva_current) { + i++; + diva_current = diva_current->next; + } + return(i); } /* ------------------------------------------------------------------------ diff -prauN linux-2.6.0-test5/drivers/isdn/hardware/eicon/xdi_adapter.h wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/xdi_adapter.h --- linux-2.6.0-test5/drivers/isdn/hardware/eicon/xdi_adapter.h 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/hardware/eicon/xdi_adapter.h 2003-09-25 19:15:57.000000000 -0700 @@ -1,4 +1,4 @@ -/* $Id: xdi_adapter.h,v 1.1.2.3 2001/02/16 08:40:36 armin Exp $ */ +/* $Id: xdi_adapter.h,v 1.5 2003/06/21 17:06:08 schindler Exp $ */ #ifndef __DIVA_OS_XDI_ADAPTER_H__ #define __DIVA_OS_XDI_ADAPTER_H__ @@ -14,7 +14,8 @@ typedef struct _divas_pci_card_resources dword bar[8]; /* contains context of appropriate BAR Register */ void *addr[8]; /* same bar, but mapped into memory */ dword length[8]; /* bar length */ - + int mem_type_id[10]; + unsigned int qoffset; byte irq; } divas_pci_card_resources_t; diff -prauN linux-2.6.0-test5/drivers/isdn/hisax/avma1_cs.c wli-2.6.0-test5-bk12-25/drivers/isdn/hisax/avma1_cs.c --- linux-2.6.0-test5/drivers/isdn/hisax/avma1_cs.c 2003-09-08 12:50:12.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/hisax/avma1_cs.c 2003-09-25 19:15:57.000000000 -0700 @@ -438,17 +438,6 @@ static void avma1cs_release(dev_link_t * DEBUG(0, "avma1cs_release(0x%p)\n", link); - /* - If the device is currently in use, we won't release until it - is actually closed. - */ - if (link->open) { - DEBUG(1, "avma1_cs: release postponed, '%s' still open\n", - link->dev->dev_name); - link->state |= DEV_STALE_CONFIG; - return; - } - /* no unregister function with hisax */ HiSax_closecard(local->node.minor); @@ -463,7 +452,6 @@ static void avma1cs_release(dev_link_t * if (link->state & DEV_STALE_LINK) avma1cs_detach(link); - } /* avma1cs_release */ /*====================================================================== diff -prauN linux-2.6.0-test5/drivers/isdn/hisax/config.c wli-2.6.0-test5-bk12-25/drivers/isdn/hisax/config.c --- linux-2.6.0-test5/drivers/isdn/hisax/config.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/hisax/config.c 2003-09-25 19:15:57.000000000 -0700 @@ -2113,7 +2113,7 @@ hisax_release_resources(struct IsdnCardS #include -static struct pci_device_id hisax_pci_tbl[] __initdata = { +static struct pci_device_id hisax_pci_tbl[] = { #ifdef CONFIG_HISAX_FRITZPCI {PCI_VENDOR_ID_AVM, PCI_DEVICE_ID_AVM_A1, PCI_ANY_ID, PCI_ANY_ID}, #endif diff -prauN linux-2.6.0-test5/drivers/isdn/hisax/elsa_cs.c wli-2.6.0-test5-bk12-25/drivers/isdn/hisax/elsa_cs.c --- linux-2.6.0-test5/drivers/isdn/hisax/elsa_cs.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/hisax/elsa_cs.c 2003-09-25 19:15:57.000000000 -0700 @@ -442,18 +442,6 @@ static void elsa_cs_release(dev_link_t * DEBUG(0, "elsa_cs_release(0x%p)\n", link); - /* - If the device is currently in use, we won't release until it - is actually closed, because until then, we can't be sure that - no one will try to access the device or its data structures. - */ - if (link->open) { - DEBUG(1, "elsa_cs: release postponed, '%s' " - "still open\n", link->dev->dev_name); - link->state |= DEV_STALE_CONFIG; - return; - } - /* Unlink the device chain */ link->dev = NULL; diff -prauN linux-2.6.0-test5/drivers/isdn/hisax/sedlbauer_cs.c wli-2.6.0-test5-bk12-25/drivers/isdn/hisax/sedlbauer_cs.c --- linux-2.6.0-test5/drivers/isdn/hisax/sedlbauer_cs.c 2003-09-08 12:50:00.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/hisax/sedlbauer_cs.c 2003-09-25 19:15:57.000000000 -0700 @@ -535,18 +535,6 @@ static void sedlbauer_release(dev_link_t { DEBUG(0, "sedlbauer_release(0x%p)\n", link); - /* - If the device is currently in use, we won't release until it - is actually closed, because until then, we can't be sure that - no one will try to access the device or its data structures. - */ - if (link->open) { - DEBUG(1, "sedlbauer_cs: release postponed, '%s' still open\n", - link->dev->dev_name); - link->state |= DEV_STALE_CONFIG; - return; - } - /* Unlink the device chain */ link->dev = NULL; diff -prauN linux-2.6.0-test5/drivers/isdn/hysdn/hysdn_init.c wli-2.6.0-test5-bk12-25/drivers/isdn/hysdn/hysdn_init.c --- linux-2.6.0-test5/drivers/isdn/hysdn/hysdn_init.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/hysdn/hysdn_init.c 2003-09-25 19:15:57.000000000 -0700 @@ -21,7 +21,7 @@ #include "hysdn_defs.h" -static struct pci_device_id hysdn_pci_tbl[] __initdata = { +static struct pci_device_id hysdn_pci_tbl[] = { {PCI_VENDOR_ID_HYPERCOPE, PCI_DEVICE_ID_HYPERCOPE_PLX, PCI_ANY_ID, PCI_SUBDEVICE_ID_HYPERCOPE_METRO}, {PCI_VENDOR_ID_HYPERCOPE, PCI_DEVICE_ID_HYPERCOPE_PLX, PCI_ANY_ID, PCI_SUBDEVICE_ID_HYPERCOPE_CHAMP2}, {PCI_VENDOR_ID_HYPERCOPE, PCI_DEVICE_ID_HYPERCOPE_PLX, PCI_ANY_ID, PCI_SUBDEVICE_ID_HYPERCOPE_ERGO}, diff -prauN linux-2.6.0-test5/drivers/isdn/i4l/isdn_tty.c wli-2.6.0-test5-bk12-25/drivers/isdn/i4l/isdn_tty.c --- linux-2.6.0-test5/drivers/isdn/i4l/isdn_tty.c 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/i4l/isdn_tty.c 2003-09-25 19:15:57.000000000 -0700 @@ -1989,7 +1989,8 @@ modem_write_profile(atemu * m) memcpy(m->pmsn, m->msn, ISDN_MSNLEN); memcpy(m->plmsn, m->lmsn, ISDN_LMSNLEN); if ((get_isdn_dev())->profd) - kill_pg_info(SIGIO, SEND_SIG_PRIV, (get_isdn_dev())->profd->pgrp); + kill_pg_info(SIGIO, SEND_SIG_PRIV, + process_group((get_isdn_dev())->profd)); } static struct tty_operations modem_ops = { diff -prauN linux-2.6.0-test5/drivers/isdn/sc/Kconfig wli-2.6.0-test5-bk12-25/drivers/isdn/sc/Kconfig --- linux-2.6.0-test5/drivers/isdn/sc/Kconfig 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/isdn/sc/Kconfig 2003-09-25 19:15:57.000000000 -0700 @@ -6,9 +6,8 @@ config ISDN_DRV_SC depends on ISDN && ISA help This enables support for the Spellcaster BRI ISDN boards. This - driver currently builds only in a modularized version ( = code which - can be inserted in and removed from the running kernel whenever you - want, details in ); the module will - be called sc. See and + driver currently builds only in a modularized version. + To build it, choose M here: the module will be called sc. + See and for more information. diff -prauN linux-2.6.0-test5/drivers/macintosh/adb.c wli-2.6.0-test5-bk12-25/drivers/macintosh/adb.c --- linux-2.6.0-test5/drivers/macintosh/adb.c 2003-09-08 12:50:56.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/macintosh/adb.c 2003-09-25 19:15:57.000000000 -0700 @@ -266,8 +266,7 @@ adb_probe_task(void *x) static void __adb_probe_task(void *data) { - adb_probe_task_pid = kernel_thread(adb_probe_task, NULL, - SIGCHLD | CLONE_FS | CLONE_FILES | CLONE_SIGHAND); + adb_probe_task_pid = kernel_thread(adb_probe_task, NULL, SIGCHLD | CLONE_KERNEL); } static DECLARE_WORK(adb_reset_work, __adb_probe_task, NULL); diff -prauN linux-2.6.0-test5/drivers/macintosh/macserial.c wli-2.6.0-test5-bk12-25/drivers/macintosh/macserial.c --- linux-2.6.0-test5/drivers/macintosh/macserial.c 2003-09-08 12:50:33.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/macintosh/macserial.c 2003-09-25 19:15:57.000000000 -0700 @@ -2490,8 +2490,7 @@ static struct tty_operations serial_ops .read_proc = macserial_read_proc, }; -/* rs_init inits the driver */ -int macserial_init(void) +static int macserial_init(void) { int channel, i; struct mac_serial *info; diff -prauN linux-2.6.0-test5/drivers/macintosh/mediabay.c wli-2.6.0-test5-bk12-25/drivers/macintosh/mediabay.c --- linux-2.6.0-test5/drivers/macintosh/mediabay.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/macintosh/mediabay.c 2003-09-25 19:15:57.000000000 -0700 @@ -694,8 +694,7 @@ static int __devinit media_bay_attach(st /* Startup kernel thread */ if (i == 0) - kernel_thread(media_bay_task, NULL, - CLONE_FS | CLONE_FILES | CLONE_SIGHAND); + kernel_thread(media_bay_task, NULL, CLONE_KERNEL); return 0; diff -prauN linux-2.6.0-test5/drivers/md/dm-ioctl-v1.c wli-2.6.0-test5-bk12-25/drivers/md/dm-ioctl-v1.c --- linux-2.6.0-test5/drivers/md/dm-ioctl-v1.c 2003-09-08 12:50:39.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/md/dm-ioctl-v1.c 2003-09-25 19:15:57.000000000 -0700 @@ -459,7 +459,7 @@ static int __info(struct mapped_device * if (!bdev) return -ENXIO; - param->dev = bdev->bd_dev; + param->dev = old_encode_dev(bdev->bd_dev); param->open_count = bdev->bd_openers; bdput(bdev); @@ -577,7 +577,7 @@ static int create(struct dm_ioctl *param } if (param->flags & DM_PERSISTENT_DEV_FLAG) - r = dm_create_with_minor(MINOR(param->dev), &md); + r = dm_create_with_minor(MINOR(old_decode_dev(param->dev)), &md); else r = dm_create(&md); @@ -816,7 +816,7 @@ static int dep(struct dm_ioctl *param, s count = 0; list_for_each(tmp, dm_table_get_devices(table)) { struct dm_dev *dd = list_entry(tmp, struct dm_dev, list); - deps->dev[count++] = dd->bdev->bd_dev; + deps->dev[count++] = old_encode_dev(dd->bdev->bd_dev); } dm_table_put(table); dm_put(md); diff -prauN linux-2.6.0-test5/drivers/md/dm-ioctl-v4.c wli-2.6.0-test5-bk12-25/drivers/md/dm-ioctl-v4.c --- linux-2.6.0-test5/drivers/md/dm-ioctl-v4.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/md/dm-ioctl-v4.c 2003-09-25 19:15:57.000000000 -0700 @@ -401,7 +401,7 @@ static int list_devices(struct dm_ioctl old_nl->next = (uint32_t) ((void *) nl - (void *) old_nl); disk = dm_disk(hc->md); - nl->dev = MKDEV(disk->major, disk->first_minor); + nl->dev = huge_encode_dev(MKDEV(disk->major, disk->first_minor)); nl->next = 0; strcpy(nl->name, hc->name); @@ -445,7 +445,7 @@ static int __dev_status(struct mapped_de if (!bdev) return -ENXIO; - param->dev = MKDEV(disk->major, disk->first_minor); + param->dev = huge_encode_dev(MKDEV(disk->major, disk->first_minor)); /* * Yes, this will be out of date by the time it gets back @@ -481,7 +481,7 @@ static int dev_create(struct dm_ioctl *p return r; if (param->flags & DM_PERSISTENT_DEV_FLAG) - r = dm_create_with_minor(MINOR(param->dev), &md); + r = dm_create_with_minor(MINOR(huge_decode_dev(param->dev)), &md); else r = dm_create(&md); @@ -700,12 +700,76 @@ static int dev_status(struct dm_ioctl *p } /* + * Build up the status struct for each target + */ +static void retrieve_status(struct dm_table *table, + struct dm_ioctl *param, size_t param_size) +{ + unsigned int i, num_targets; + struct dm_target_spec *spec; + char *outbuf, *outptr; + status_type_t type; + size_t remaining, len, used = 0; + + outptr = outbuf = get_result_buffer(param, param_size, &len); + + if (param->flags & DM_STATUS_TABLE_FLAG) + type = STATUSTYPE_TABLE; + else + type = STATUSTYPE_INFO; + + /* Get all the target info */ + num_targets = dm_table_get_num_targets(table); + for (i = 0; i < num_targets; i++) { + struct dm_target *ti = dm_table_get_target(table, i); + + remaining = len - (outptr - outbuf); + if (remaining < sizeof(struct dm_target_spec)) { + param->flags |= DM_BUFFER_FULL_FLAG; + break; + } + + spec = (struct dm_target_spec *) outptr; + + spec->status = 0; + spec->sector_start = ti->begin; + spec->length = ti->len; + strncpy(spec->target_type, ti->type->name, + sizeof(spec->target_type)); + + outptr += sizeof(struct dm_target_spec); + remaining = len - (outptr - outbuf); + + /* Get the status/table string from the target driver */ + if (ti->type->status) { + if (ti->type->status(ti, type, outptr, remaining)) { + param->flags |= DM_BUFFER_FULL_FLAG; + break; + } + } else + outptr[0] = '\0'; + + outptr += strlen(outptr) + 1; + used = param->data_start + (outptr - outbuf); + + align_ptr(outptr); + spec->next = outptr - outbuf; + } + + if (used) + param->data_size = used; + + param->target_count = num_targets; +} + +/* * Wait for a device to report an event */ static int dev_wait(struct dm_ioctl *param, size_t param_size) { int r; struct mapped_device *md; + struct dm_table *table; DECLARE_WAITQUEUE(wq, current); md = find_device(param); @@ -728,7 +792,16 @@ static int dev_wait(struct dm_ioctl *par * him and save an ioctl. */ r = __dev_status(md, param); + if (r) + goto out; + table = dm_get_table(md); + if (table) { + retrieve_status(table, param, param_size); + dm_table_put(table); + } + + out: dm_put(md); return r; } @@ -817,6 +890,8 @@ static int table_load(struct dm_ioctl *p return -ENXIO; } + if (hc->new_map) + dm_table_put(hc->new_map); hc->new_map = t; param->flags |= DM_INACTIVE_PRESENT_FLAG; @@ -886,7 +961,7 @@ static void retrieve_deps(struct dm_tabl count = 0; list_for_each(tmp, dm_table_get_devices(table)) { struct dm_dev *dd = list_entry(tmp, struct dm_dev, list); - deps->dev[count++] = dd->bdev->bd_dev; + deps->dev[count++] = huge_encode_dev(dd->bdev->bd_dev); } param->data_size = param->data_start + needed; @@ -918,69 +993,6 @@ static int table_deps(struct dm_ioctl *p } /* - * Build up the status struct for each target - */ -static void retrieve_status(struct dm_table *table, - struct dm_ioctl *param, size_t param_size) -{ - unsigned int i, num_targets; - struct dm_target_spec *spec; - char *outbuf, *outptr; - status_type_t type; - size_t remaining, len, used = 0; - - outptr = outbuf = get_result_buffer(param, param_size, &len); - - if (param->flags & DM_STATUS_TABLE_FLAG) - type = STATUSTYPE_TABLE; - else - type = STATUSTYPE_INFO; - - /* Get all the target info */ - num_targets = dm_table_get_num_targets(table); - for (i = 0; i < num_targets; i++) { - struct dm_target *ti = dm_table_get_target(table, i); - - remaining = len - (outptr - outbuf); - if (remaining < sizeof(struct dm_target_spec)) { - param->flags |= DM_BUFFER_FULL_FLAG; - break; - } - - spec = (struct dm_target_spec *) outptr; - - spec->status = 0; - spec->sector_start = ti->begin; - spec->length = ti->len; - strncpy(spec->target_type, ti->type->name, - sizeof(spec->target_type)); - - outptr += sizeof(struct dm_target_spec); - remaining = len - (outptr - outbuf); - - /* Get the status/table string from the target driver */ - if (ti->type->status) { - if (ti->type->status(ti, type, outptr, remaining)) { - param->flags |= DM_BUFFER_FULL_FLAG; - break; - } - } else - outptr[0] = '\0'; - - outptr += strlen(outptr) + 1; - used = param->data_start + (outptr - outbuf); - - align_ptr(outptr); - spec->next = outptr - outbuf; - } - - if (used) - param->data_size = used; - - param->target_count = num_targets; -} - -/* * Return the status of a device as a text string for each * target. */ diff -prauN linux-2.6.0-test5/drivers/md/dm-linear.c wli-2.6.0-test5-bk12-25/drivers/md/dm-linear.c --- linux-2.6.0-test5/drivers/md/dm-linear.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/md/dm-linear.c 2003-09-25 19:15:57.000000000 -0700 @@ -28,7 +28,7 @@ static int linear_ctr(struct dm_target * struct linear_c *lc; if (argc != 2) { - ti->error = "dm-linear: Not enough arguments"; + ti->error = "dm-linear: Invalid argument count"; return -EINVAL; } @@ -79,7 +79,7 @@ static int linear_status(struct dm_targe char *result, unsigned int maxlen) { struct linear_c *lc = (struct linear_c *) ti->private; - char b[BDEVNAME_SIZE]; + char buffer[32]; switch (type) { case STATUSTYPE_INFO: @@ -87,8 +87,8 @@ static int linear_status(struct dm_targe break; case STATUSTYPE_TABLE: - snprintf(result, maxlen, "%s " SECTOR_FORMAT, - bdevname(lc->dev->bdev, b), lc->start); + format_dev_t(buffer, lc->dev->bdev->bd_dev); + snprintf(result, maxlen, "%s " SECTOR_FORMAT, buffer, lc->start); break; } return 0; diff -prauN linux-2.6.0-test5/drivers/md/dm-stripe.c wli-2.6.0-test5-bk12-25/drivers/md/dm-stripe.c --- linux-2.6.0-test5/drivers/md/dm-stripe.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/md/dm-stripe.c 2003-09-25 19:15:57.000000000 -0700 @@ -187,7 +187,7 @@ static int stripe_status(struct dm_targe struct stripe_c *sc = (struct stripe_c *) ti->private; int offset; unsigned int i; - char b[BDEVNAME_SIZE]; + char buffer[32]; switch (type) { case STATUSTYPE_INFO: @@ -198,10 +198,10 @@ static int stripe_status(struct dm_targe offset = snprintf(result, maxlen, "%d " SECTOR_FORMAT, sc->stripes, sc->chunk_mask + 1); for (i = 0; i < sc->stripes; i++) { + format_dev_t(buffer, sc->stripe[i].dev->bdev->bd_dev); offset += snprintf(result + offset, maxlen - offset, - " %s " SECTOR_FORMAT, - bdevname(sc->stripe[i].dev->bdev, b), + " %s " SECTOR_FORMAT, buffer, sc->stripe[i].physical_start); } break; diff -prauN linux-2.6.0-test5/drivers/md/dm-table.c wli-2.6.0-test5-bk12-25/drivers/md/dm-table.c --- linux-2.6.0-test5/drivers/md/dm-table.c 2003-09-08 12:50:39.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/md/dm-table.c 2003-09-25 19:15:57.000000000 -0700 @@ -426,6 +426,8 @@ static int __table_get_device(struct dm_ if (sscanf(path, "%u:%u", &major, &minor) == 2) { /* Extract the major/minor numbers */ dev = MKDEV(major, minor); + if (MAJOR(dev) != major || MINOR(dev) != minor) + return -EOVERFLOW; } else { /* convert the path to a device */ if ((r = lookup_device(path, &dev))) @@ -534,12 +536,36 @@ static int adjoin(struct dm_table *table } /* + * Used to dynamically allocate the arg array. + */ +static char **realloc_argv(unsigned *array_size, char **old_argv) +{ + char **argv; + unsigned new_size; + + new_size = *array_size ? *array_size * 2 : 64; + argv = kmalloc(new_size * sizeof(*argv), GFP_KERNEL); + if (argv) { + memcpy(argv, old_argv, *array_size * sizeof(*argv)); + *array_size = new_size; + } + + kfree(old_argv); + return argv; +} + +/* * Destructively splits up the argument list to pass to ctr. */ -static int split_args(int max, int *argc, char **argv, char *input) +static int split_args(int *argc, char ***argvp, char *input) { - char *start, *end = input, *out; + char *start, *end = input, *out, **argv = NULL; + unsigned array_size = 0; + *argc = 0; + argv = realloc_argv(&array_size, argv); + if (!argv) + return -ENOMEM; while (1) { start = end; @@ -568,8 +594,11 @@ static int split_args(int max, int *argc } /* have we already filled the array ? */ - if ((*argc + 1) > max) - return -EINVAL; + if ((*argc + 1) > array_size) { + argv = realloc_argv(&array_size, argv); + if (!argv) + return -ENOMEM; + } /* we know this is whitespace */ if (*end) @@ -581,6 +610,7 @@ static int split_args(int max, int *argc (*argc)++; } + *argvp = argv; return 0; } @@ -588,7 +618,7 @@ int dm_table_add_target(struct dm_table sector_t start, sector_t len, char *params) { int r = -EINVAL, argc; - char *argv[32]; + char **argv; struct dm_target *tgt; if ((r = check_space(t))) @@ -617,13 +647,14 @@ int dm_table_add_target(struct dm_table goto bad; } - r = split_args(ARRAY_SIZE(argv), &argc, argv, params); + r = split_args(&argc, &argv, params); if (r) { - tgt->error = "couldn't split parameters"; + tgt->error = "couldn't split parameters (insufficient memory)"; goto bad; } r = tgt->type->ctr(tgt, argc, argv); + kfree(argv); if (r) goto bad; diff -prauN linux-2.6.0-test5/drivers/md/dm.c wli-2.6.0-test5-bk12-25/drivers/md/dm.c --- linux-2.6.0-test5/drivers/md/dm.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/md/dm.c 2003-09-25 19:15:57.000000000 -0700 @@ -79,7 +79,7 @@ static __init int local_init(void) int r; /* allocate a slab for the dm_ios */ - _io_cache = kmem_cache_create("dm io", + _io_cache = kmem_cache_create("dm_io", sizeof(struct dm_io), 0, 0, NULL, NULL); if (!_io_cache) return -ENOMEM; diff -prauN linux-2.6.0-test5/drivers/md/linear.c wli-2.6.0-test5-bk12-25/drivers/md/linear.c --- linux-2.6.0-test5/drivers/md/linear.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/md/linear.c 2003-09-25 19:15:57.000000000 -0700 @@ -295,3 +295,4 @@ static void linear_exit (void) module_init(linear_init); module_exit(linear_exit); MODULE_LICENSE("GPL"); +MODULE_ALIAS("md-personality-1"); /* LINEAR */ diff -prauN linux-2.6.0-test5/drivers/md/md.c wli-2.6.0-test5-bk12-25/drivers/md/md.c --- linux-2.6.0-test5/drivers/md/md.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/md/md.c 2003-09-25 19:15:57.000000000 -0700 @@ -1450,7 +1450,7 @@ abort: static struct kobject *md_probe(dev_t dev, int *part, void *data) { static DECLARE_MUTEX(disks_sem); - int unit = MINOR(dev); + int unit = *part; mddev_t *mddev = mddev_find(unit); struct gendisk *disk; @@ -1500,6 +1500,7 @@ static int do_md_run(mddev_t * mddev) mdk_rdev_t *rdev; struct gendisk *disk; char b[BDEVNAME_SIZE]; + int unit; if (list_empty(&mddev->disks)) { MD_BUG(); @@ -1591,8 +1592,9 @@ static int do_md_run(mddev_t * mddev) invalidate_bdev(rdev->bdev, 0); } - md_probe(mdidx(mddev), NULL, NULL); - disk = disks[mdidx(mddev)]; + unit = mdidx(mddev); + md_probe(0, &unit, NULL); + disk = disks[unit]; if (!disk) return -ENOMEM; @@ -1607,9 +1609,6 @@ static int do_md_run(mddev_t * mddev) mddev->pers = pers[pnum]; spin_unlock(&pers_lock); - blk_queue_make_request(mddev->queue, mddev->pers->make_request); - mddev->queue->queuedata = mddev; - err = mddev->pers->run(mddev); if (err) { printk(KERN_ERR "md: pers->run() failed ...\n"); @@ -1627,6 +1626,10 @@ static int do_md_run(mddev_t * mddev) set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); md_wakeup_thread(mddev->thread); set_capacity(disk, mddev->array_size<<1); + + blk_queue_make_request(mddev->queue, mddev->pers->make_request); + mddev->queue->queuedata = mddev; + return 0; } @@ -1698,12 +1701,8 @@ static int do_md_stop(mddev_t * mddev, i } else { if (mddev->ro) set_disk_ro(disk, 0); - if (mddev->pers->stop(mddev)) { - err = -EBUSY; - if (mddev->ro) - set_disk_ro(disk, 1); - goto out; - } + blk_queue_make_request(mddev->queue, md_fail_request); + mddev->pers->stop(mddev); module_put(mddev->pers->owner); mddev->pers = NULL; if (mddev->ro) @@ -1877,16 +1876,15 @@ static int autostart_array(dev_t startde list_add(&start_rdev->same_set, &pending_raid_disks); for (i = 0; i < MD_SB_DISKS; i++) { - mdp_disk_t *desc; - dev_t dev; - - desc = sb->disks + i; - dev = MKDEV(desc->major, desc->minor); + mdp_disk_t *desc = sb->disks + i; + dev_t dev = MKDEV(desc->major, desc->minor); if (!dev) continue; if (dev == startdev) continue; + if (MAJOR(dev) != desc->major || MINOR(dev) != desc->minor) + continue; rdev = md_import_device(dev, 0, 0); if (IS_ERR(rdev)) { printk(KERN_WARNING "md: could not import %s," @@ -2009,8 +2007,11 @@ static int add_new_disk(mddev_t * mddev, { char b[BDEVNAME_SIZE], b2[BDEVNAME_SIZE]; mdk_rdev_t *rdev; - dev_t dev; - dev = MKDEV(info->major,info->minor); + dev_t dev = MKDEV(info->major,info->minor); + + if (info->major != MAJOR(dev) || info->minor != MINOR(dev)) + return -EOVERFLOW; + if (!mddev->raid_disks) { int err; /* expecting a device which has a superblock */ @@ -2136,7 +2137,7 @@ static int hot_generate_error(mddev_t * rdev = find_rdev(mddev, dev); if (!rdev) { - MD_BUG(); + /* MD_BUG(); */ /* like hell - it's not a driver bug */ return -ENXIO; } @@ -2409,7 +2410,7 @@ static int md_ioctl(struct inode *inode, /* START_ARRAY doesn't need to lock the array as autostart_array * does the locking, and it could even be a different array */ - err = autostart_array(arg); + err = autostart_array(new_decode_dev(arg)); if (err) { printk(KERN_WARNING "md: autostart %s failed!\n", __bdevname(arg, b)); @@ -2546,18 +2547,18 @@ static int md_ioctl(struct inode *inode, goto done_unlock; } case HOT_GENERATE_ERROR: - err = hot_generate_error(mddev, arg); + err = hot_generate_error(mddev, new_decode_dev(arg)); goto done_unlock; case HOT_REMOVE_DISK: - err = hot_remove_disk(mddev, arg); + err = hot_remove_disk(mddev, new_decode_dev(arg)); goto done_unlock; case HOT_ADD_DISK: - err = hot_add_disk(mddev, arg); + err = hot_add_disk(mddev, new_decode_dev(arg)); goto done_unlock; case SET_DISK_FAULTY: - err = set_disk_faulty(mddev, arg); + err = set_disk_faulty(mddev, new_decode_dev(arg)); goto done_unlock; case RUN_ARRAY: diff -prauN linux-2.6.0-test5/drivers/md/multipath.c wli-2.6.0-test5-bk12-25/drivers/md/multipath.c --- linux-2.6.0-test5/drivers/md/multipath.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/md/multipath.c 2003-09-25 19:15:57.000000000 -0700 @@ -508,3 +508,4 @@ static void __exit multipath_exit (void) module_init(multipath_init); module_exit(multipath_exit); MODULE_LICENSE("GPL"); +MODULE_ALIAS("md-personality-7"); /* MULTIPATH */ diff -prauN linux-2.6.0-test5/drivers/md/raid0.c wli-2.6.0-test5-bk12-25/drivers/md/raid0.c --- linux-2.6.0-test5/drivers/md/raid0.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/md/raid0.c 2003-09-25 19:15:57.000000000 -0700 @@ -460,3 +460,4 @@ static void raid0_exit (void) module_init(raid0_init); module_exit(raid0_exit); MODULE_LICENSE("GPL"); +MODULE_ALIAS("md-personality-2"); /* RAID0 */ diff -prauN linux-2.6.0-test5/drivers/md/raid1.c wli-2.6.0-test5-bk12-25/drivers/md/raid1.c --- linux-2.6.0-test5/drivers/md/raid1.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/md/raid1.c 2003-09-25 19:15:57.000000000 -0700 @@ -830,7 +830,7 @@ static void sync_request_write(mddev_t * mbio = bio_clone(bio, GFP_NOIO); r1_bio->write_bios[i] = mbio; mbio->bi_bdev = conf->mirrors[i].rdev->bdev; - mbio->bi_sector = r1_bio->sector | conf->mirrors[i].rdev->data_offset; + mbio->bi_sector = r1_bio->sector + conf->mirrors[i].rdev->data_offset; mbio->bi_end_io = end_sync_write; mbio->bi_rw = WRITE; mbio->bi_private = r1_bio; @@ -1196,3 +1196,4 @@ static void raid_exit(void) module_init(raid_init); module_exit(raid_exit); MODULE_LICENSE("GPL"); +MODULE_ALIAS("md-personality-3"); /* RAID1 */ diff -prauN linux-2.6.0-test5/drivers/md/raid5.c wli-2.6.0-test5-bk12-25/drivers/md/raid5.c --- linux-2.6.0-test5/drivers/md/raid5.c 2003-09-08 12:49:56.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/md/raid5.c 2003-09-25 19:15:57.000000000 -0700 @@ -1780,3 +1780,4 @@ static void raid5_exit (void) module_init(raid5_init); module_exit(raid5_exit); MODULE_LICENSE("GPL"); +MODULE_ALIAS("md-personality-4"); /* RAID5 */ diff -prauN linux-2.6.0-test5/drivers/media/Kconfig wli-2.6.0-test5-bk12-25/drivers/media/Kconfig --- linux-2.6.0-test5/drivers/media/Kconfig 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/media/Kconfig 2003-09-25 19:15:57.000000000 -0700 @@ -21,10 +21,8 @@ config VIDEO_DEV Documentation/video4linux/API.html. Documentation for V4L2 is available on the web at http://bytesex.org/v4l/ - This driver is also available as a module called videodev ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this driver as a module, choose M here: the + module will be called videodev. source "drivers/media/video/Kconfig" diff -prauN linux-2.6.0-test5/drivers/media/dvb/ttpci/Kconfig wli-2.6.0-test5-bk12-25/drivers/media/dvb/ttpci/Kconfig --- linux-2.6.0-test5/drivers/media/dvb/ttpci/Kconfig 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/media/dvb/ttpci/Kconfig 2003-09-25 19:15:57.000000000 -0700 @@ -33,11 +33,8 @@ config DVB_BUDGET Say Y if you own such a card and want to use it. - This driver is available as a module called - dvb-ttpci-budget.o ( = code which can be inserted in - and removed from the running kernel whenever you want). - If you want to compile it as a module, say M - here and read . + To compile this driver as a module, choose M here: the + module will be called budget. config DVB_BUDGET_CI tristate "Budget cards with onboard CI connector" @@ -49,11 +46,8 @@ config DVB_BUDGET_CI Say Y if you own such a card and want to use it. - This driver is available as a module called - dvb-ttpci-budget-av.o ( = code which can be inserted in - and removed from the running kernel whenever you want). - If you want to compile it as a module, say M - here and read . + To compile this driver as a module, choose M here: the + module will be called budget-ci. config DVB_BUDGET_AV tristate "Budget cards with analog video inputs" @@ -65,10 +59,8 @@ config DVB_BUDGET_AV Say Y if you own such a card and want to use it. - This driver is available as a module called - dvb-ttpci-budget-av.o ( = code which can be inserted in - and removed from the running kernel whenever you want). - here and read . + To compile this driver as a module, choose M here: the + module will be called budget-av. config DVB_BUDGET_PATCH tristate "AV7110 cards with Budget Patch" @@ -85,8 +77,5 @@ config DVB_BUDGET_PATCH Say Y if you own such a card and want to use it. - This driver is available as a module called - dvb-ttpci-budget-patch.o ( = code which can be inserted in - and removed from the running kernel whenever you want). - If you want to compile it as a module, say M - here and read . + To compile this driver as a module, choose M here: the + module will be called budget-patch. diff -prauN linux-2.6.0-test5/drivers/media/radio/Kconfig wli-2.6.0-test5-bk12-25/drivers/media/radio/Kconfig --- linux-2.6.0-test5/drivers/media/radio/Kconfig 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/media/radio/Kconfig 2003-09-25 19:15:57.000000000 -0700 @@ -20,10 +20,8 @@ config RADIO_CADET Further documentation on this driver can be found on the WWW at . - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module - will be called radio-cadet. + To compile this driver as a module, choose M here: the + module will be called radio-cadet. config RADIO_RTRACK tristate "AIMSlab RadioTrack (aka RadioReveal) support" @@ -48,10 +46,8 @@ config RADIO_RTRACK information is contained in the file . - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module - will be called radio-aimslab. + To compile this driver as a module, choose M here: the + module will be called radio-aimslab. config RADIO_RTRACK_PORT hex "RadioTrack i/o port (0x20f or 0x30f)" @@ -73,10 +69,8 @@ config RADIO_RTRACK2 this API and pointers to "v4l" programs may be found on the WWW at . - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module - will be called radio-rtrack2. + To compile this driver as a module, choose M here: the + module will be called radio-rtrack2. config RADIO_RTRACK2_PORT hex "RadioTrack II i/o port (0x20c or 0x30c)" @@ -98,10 +92,8 @@ config RADIO_AZTECH this API and pointers to "v4l" programs may be found on the WWW at . - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module - will be called radio-aztech. + To compile this driver as a module, choose M here: the + module will be called radio-aztech. config RADIO_AZTECH_PORT hex "Aztech/Packard Bell I/O port (0x350 or 0x358)" @@ -124,10 +116,8 @@ config RADIO_GEMTEK this API and pointers to "v4l" programs may be found on the WWW at . - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module - will be called radio-gemtek. + To compile this driver as a module, choose M here: the + module will be called radio-gemtek. config RADIO_GEMTEK_PORT hex "GemTek i/o port (0x20c, 0x30c, 0x24c or 0x34c)" @@ -150,10 +140,8 @@ config RADIO_GEMTEK_PCI this API and pointers to "v4l" programs may be found on the WWW at . - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module - will be called radio-gemtek-pci. + To compile this driver as a module, choose M here: the + module will be called radio-gemtek-pci. config RADIO_MAXIRADIO tristate "Guillemot MAXI Radio FM 2000 radio" @@ -167,10 +155,8 @@ config RADIO_MAXIRADIO this API and pointers to "v4l" programs may be found on the WWW at . - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module - will be called radio-maxiradio. + To compile this driver as a module, choose M here: the + module will be called radio-maxiradio. config RADIO_MAESTRO tristate "Maestro on board radio" @@ -184,10 +170,8 @@ config RADIO_MAESTRO this API and pointers to "v4l" programs may be found on the WWW at . - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module - will be called radio-maestro. + To compile this driver as a module, choose M here: the + module will be called radio-maestro. config RADIO_MIROPCM20 tristate "miroSOUND PCM20 radio" @@ -202,10 +186,8 @@ config RADIO_MIROPCM20 this API and pointers to "v4l" programs may be found on the WWW at . - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module - will be called miropcm20. + To compile this driver as a module, choose M here: the + module will be called miropcm20. config RADIO_MIROPCM20_RDS tristate "miroSOUND PCM20 radio RDS user interface (EXPERIMENTAL)" @@ -221,7 +203,8 @@ config RADIO_MIROPCM20_RDS availability of RDS is reported over V4L by the basic driver already. Here RDS can be read from files in /dev/v4l/rds. - As module the driver will be called miropcm20-rds. + To compile this driver as a module, choose M here: the + module will be called miropcm20-rds. config RADIO_SF16FMI tristate "SF16FMI Radio" @@ -237,10 +220,8 @@ config RADIO_SF16FMI this API and pointers to "v4l" programs may be found on the WWW at . - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module - will be called radio-sf16fmi. + To compile this driver as a module, choose M here: the + module will be called radio-sf16fmi. config RADIO_TERRATEC tristate "TerraTec ActiveRadio ISA Standalone" @@ -260,10 +241,8 @@ config RADIO_TERRATEC this API and pointers to "v4l" programs may be found on the WWW at . - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module - will be called radio-terratec. + To compile this driver as a module, choose M here: the + module will be called radio-terratec. config RADIO_TERRATEC_PORT hex "Terratec i/o port (normally 0x590)" @@ -280,10 +259,8 @@ config RADIO_TRUST This is a driver for the Trust FM radio cards. Say Y if you have such a card and want to use it under Linux. - This driver is also available as a module called radio-trust ( = - code which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this driver as a module, choose M here: the + module will be called radio-trust. config RADIO_TRUST_PORT hex "Trust i/o port (usually 0x350 or 0x358)" @@ -305,10 +282,8 @@ config RADIO_TYPHOON this API and pointers to "v4l" programs may be found on the WWW at . - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module - will be called radio-typhoon. + To compile this driver as a module, choose M here: the + module will be called radio-typhoon. config RADIO_TYPHOON_PROC_FS bool "Support for /proc/radio-typhoon" @@ -351,10 +326,8 @@ config RADIO_ZOLTRIX this API and pointers to "v4l" programs may be found on the WWW at . - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module - will be called radio-zoltrix. + To compile this driver as a module, choose M here: the + module will be called radio-zoltrix. config RADIO_ZOLTRIX_PORT hex "ZOLTRIX I/O port (0x20c or 0x30c)" diff -prauN linux-2.6.0-test5/drivers/media/video/Kconfig wli-2.6.0-test5-bk12-25/drivers/media/video/Kconfig --- linux-2.6.0-test5/drivers/media/video/Kconfig 2003-09-08 12:50:28.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/media/video/Kconfig 2003-09-25 19:15:57.000000000 -0700 @@ -18,20 +18,17 @@ config VIDEO_BT848 If you say Y or M here, you need to say Y or M to "I2C support" and "I2C bit-banging interfaces" in the character device section. - This driver is available as a module called bttv ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this driver as a module, choose M here: the + module will be called bttv. config VIDEO_PMS tristate "Mediavision Pro Movie Studio Video For Linux" depends on VIDEO_DEV && ISA help - Say Y if you have such a thing. This driver is also available as a - module called pms ( = code which can be inserted in and removed - from the running kernel whenever you want). If you want to compile - it as a module, say M here and read - . + Say Y if you have such a thing. + + To compile this driver as a module, choose M here: the + module will be called pms. config VIDEO_PLANB tristate "PlanB Video-In on PowerMac" @@ -51,10 +48,8 @@ config VIDEO_BWQCAM Say Y have if you the black and white version of the QuickCam camera. See the next option for the color version. - This driver is also available as a module called bw-qcam ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this driver as a module, choose M here: the + module will be called bw-qcam. config VIDEO_CQCAM tristate "QuickCam Colour Video For Linux (EXPERIMENTAL)" @@ -122,10 +117,8 @@ config VIDEO_SAA5249 Support for I2C bus based teletext using the SAA5249 chip. At the moment this is only useful on some European WinTV cards. - This driver is also available as a module called saa5249 ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this driver as a module, choose M here: the + module will be called saa5249. config TUNER_3036 tristate "SAB3036 tuner" @@ -159,10 +152,8 @@ config VIDEO_ZORAN a driver homepage at . For more information, check . - This driver is available as a module called zr36067 ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this driver as a module, choose M here: the + module will be called zr36067. config VIDEO_ZORAN_BUZ tristate "Iomega Buz support" @@ -208,10 +199,8 @@ config VIDEO_ZR36120 and Buster boards. Please read the material in for more information. - This driver is also available as a module called zr36120 ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this driver as a module, choose M here: the + module will be called zr36120. config VIDEO_MEYE tristate "Sony Vaio Picturebook Motion Eye Video For Linux (EXPERIMENTAL)" @@ -224,10 +213,8 @@ config VIDEO_MEYE If you say Y or M here, you need to say Y or M to "Sony Programmable I/O Control Device" in the character device section. - This driver is available as a module called meye ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this driver as a module, choose M here: the + module will be called meye. config VIDEO_SAA7134 tristate "Philips SAA7134 support" @@ -236,10 +223,8 @@ config VIDEO_SAA7134 This is a video4linux driver for Philips SAA7130/7134 based TV cards. - This driver is available as a module called saa7134 ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this driver as a module, choose M here: the + module will be called saa7134. config VIDEO_MXB tristate "Siemens-Nixdorf 'Multimedia eXtension Board'" @@ -248,10 +233,8 @@ config VIDEO_MXB This is a video4linux driver for the 'Multimedia eXtension Board' TV card by Siemens-Nixdorf. - This driver is available as a module called mxb ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this driver as a module, choose M here: the + module will be called mxb. config VIDEO_DPC tristate "Philips-Semiconductors 'dpc7146 demonstration board'" @@ -263,10 +246,8 @@ config VIDEO_DPC saa7146 based, analog video card, chances are good that it will work with this skeleton driver. - This driver is available as a module called dpc7146 ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this driver as a module, choose M here: the + module will be called dpc7146. config VIDEO_HEXIUM_ORION tristate "Hexium HV-PCI6 and Orion frame grabber" @@ -275,10 +256,8 @@ config VIDEO_HEXIUM_ORION This is a video4linux driver for the Hexium HV-PCI6 and Orion frame grabber cards by Hexium. - This driver is available as a module called hexium_orion - ( = code which can be inserted in and removed from the - running kernel whenever you want). If you want to compile - it as a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called hexium_orion. config VIDEO_HEXIUM_GEMINI tristate "Hexium Gemini frame grabber" @@ -288,10 +267,8 @@ config VIDEO_HEXIUM_GEMINI grabber card by Hexium. Please note that the Gemini Dual card is *not* fully supported. - This driver is available as a module called hexium_gemini - ( = code which can be inserted in and removed from the - running kernel whenever you want). If you want to compile - it as a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called hexium_gemini. endmenu diff -prauN linux-2.6.0-test5/drivers/media/video/msp3400.c wli-2.6.0-test5-bk12-25/drivers/media/video/msp3400.c --- linux-2.6.0-test5/drivers/media/video/msp3400.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/media/video/msp3400.c 2003-09-25 19:15:57.000000000 -0700 @@ -1316,7 +1316,7 @@ static int msp_attach(struct i2c_adapter #endif msp3400c_setvolume(c,msp->muted,msp->left,msp->right); - snprintf(c->name, DEVICE_NAME_SIZE, "MSP34%02d%c-%c%d", + snprintf(c->name, I2C_NAME_SIZE, "MSP34%02d%c-%c%d", (msp->rev2>>8)&0xff, (msp->rev1&0xff)+'@', ((msp->rev1>>8)&0xff)+'@', msp->rev2&0x1f); diff -prauN linux-2.6.0-test5/drivers/media/video/saa5249.c wli-2.6.0-test5-bk12-25/drivers/media/video/saa5249.c --- linux-2.6.0-test5/drivers/media/video/saa5249.c 2003-09-08 12:50:19.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/media/video/saa5249.c 2003-09-25 19:15:57.000000000 -0700 @@ -171,7 +171,7 @@ static int saa5249_attach(struct i2c_ada return -ENOMEM; } memset(t, 0, sizeof(*t)); - strlcpy(client->name, IF_NAME, DEVICE_NAME_SIZE); + strlcpy(client->name, IF_NAME, I2C_NAME_SIZE); init_MUTEX(&t->lock); /* diff -prauN linux-2.6.0-test5/drivers/media/video/tuner.c wli-2.6.0-test5-bk12-25/drivers/media/video/tuner.c --- linux-2.6.0-test5/drivers/media/video/tuner.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/media/video/tuner.c 2003-09-25 19:15:57.000000000 -0700 @@ -824,7 +824,7 @@ static int tuner_attach(struct i2c_adapt if (type < TUNERS) { t->type = type; printk("tuner(bttv): type forced to %d (%s) [insmod]\n",t->type,tuners[t->type].name); - strlcpy(client->name, tuners[t->type].name, DEVICE_NAME_SIZE); + strlcpy(client->name, tuners[t->type].name, I2C_NAME_SIZE); } i2c_attach_client(client); if (t->type == TUNER_MT2032) @@ -875,7 +875,7 @@ tuner_command(struct i2c_client *client, t->type = *iarg; printk("tuner: type set to %d (%s)\n", t->type,tuners[t->type].name); - strlcpy(client->name, tuners[t->type].name, DEVICE_NAME_SIZE); + strlcpy(client->name, tuners[t->type].name, I2C_NAME_SIZE); if (t->type == TUNER_MT2032) mt2032_init(client); break; diff -prauN linux-2.6.0-test5/drivers/message/fusion/Kconfig wli-2.6.0-test5-bk12-25/drivers/message/fusion/Kconfig --- linux-2.6.0-test5/drivers/message/fusion/Kconfig 2003-09-08 12:50:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/message/fusion/Kconfig 2003-09-25 19:15:58.000000000 -0700 @@ -29,11 +29,7 @@ config FUSION [2] In order enable capability to boot the linux kernel natively from a Fusion MPT target device, you MUST answer Y here! (currently requires CONFIG_BLK_DEV_SD) - [3] This support is also available as a module ( = code - which can be inserted in and removed from the running - kernel whenever you want). If you want to compile as - modules, say M here and read - . + [3] To compile this support as modules, choose M here. If unsure, say N. diff -prauN linux-2.6.0-test5/drivers/message/i2o/Kconfig wli-2.6.0-test5-bk12-25/drivers/message/i2o/Kconfig --- linux-2.6.0-test5/drivers/message/i2o/Kconfig 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/message/i2o/Kconfig 2003-09-25 19:15:58.000000000 -0700 @@ -19,11 +19,8 @@ config I2O If you say Y here, you will get a choice of interface adapter drivers and OSM's with the following questions. - This support is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - If you want to compile it as a module, say M here and read - . You will get modules called - i2o_core and i2o_config. + To compile this support as a module, choose M here: the + modules will be called i2o_core and i2o_config. If unsure, say N. @@ -34,10 +31,8 @@ config I2O_PCI Say Y for support of PCI bus I2O interface adapters. Currently this is the only variety supported, so you should say Y. - This support is also available as a module called i2o_pci ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this support as a module, choose M here: the + module will be called i2o_pci. config I2O_BLOCK tristate "I2O Block OSM" @@ -46,10 +41,8 @@ config I2O_BLOCK Include support for the I2O Block OSM. The Block OSM presents disk and other structured block devices to the operating system. - This support is also available as a module called i2o_block ( = - code which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this support as a module, choose M here: the + module will be called i2o_block. config I2O_SCSI tristate "I2O SCSI OSM" @@ -59,10 +52,8 @@ config I2O_SCSI I2O controller. You can use both the SCSI and Block OSM together if you wish. - This support is also available as a module called i2o_scsi ( = - code which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this support as a module, choose M here: the + module will be called i2o_scsi. config I2O_PROC tristate "I2O /proc support" @@ -72,10 +63,8 @@ config I2O_PROC able to read I2O related information from the virtual directory /proc/i2o. - This support is also available as a module called i2o_proc ( = - code which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this support as a module, choose M here: the + module will be called i2o_proc. endmenu diff -prauN linux-2.6.0-test5/drivers/mtd/maps/sa1100-flash.c wli-2.6.0-test5-bk12-25/drivers/mtd/maps/sa1100-flash.c --- linux-2.6.0-test5/drivers/mtd/maps/sa1100-flash.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/mtd/maps/sa1100-flash.c 2003-09-25 19:15:58.000000000 -0700 @@ -654,28 +654,21 @@ static struct mtd_partition simpad_parti }, { .name = "SIMpad kernel", .size = 0x00100000, - .offset = 0x00080000, - }, { -#ifdef CONFIG_JFFS2_FS - .name = "SIMpad root jffs2", - .size = MTDPART_SIZ_FULL, - .offset = 0x00180000, -#else - .name = "SIMpad initrd", - .size = 0x00300000, - .offset = 0x00180000, + .offset = MTDPART_OFS_APPEND, }, { +#ifdef CONFIG_ROOT_CRAMFS .name = "SIMpad root cramfs", - .size = 0x00300000, - .offset = 0x00480000, - }, { - .name = "SIMpad usr cramfs", - .size = 0x005c0000, - .offset = 0x00780000, + .size =0x00D80000, + .offset = MTDPART_OFS_APPEND + }, { - .name = "SIMpad usr local", + .name = "SIMpad local jffs2", + .size = MTDPART_SIZ_FULL, + .offset = MTDPART_OFS_APPEND +#else + .name = "SIMpad root jffs2", .size = MTDPART_SIZ_FULL, - .offset = 0x00d40000, + .offset = MTDPART_OFS_APPEND #endif } }; @@ -1244,8 +1237,10 @@ static int __init sa1100_locate_flash(vo } if (machine_is_simpad()) { info[0].base = SA1100_CS0_PHYS; - info[0].size = SZ_32M; - nr = 1; + info[0].size = SZ_16M; + info[1].base = SA1100_CS1_PHYS; + info[1].size = SZ_16M; + nr = 2; } if (machine_is_stork()) { info[0].base = SA1100_CS0_PHYS; diff -prauN linux-2.6.0-test5/drivers/mtd/mtd_blkdevs.c wli-2.6.0-test5-bk12-25/drivers/mtd/mtd_blkdevs.c --- linux-2.6.0-test5/drivers/mtd/mtd_blkdevs.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/mtd/mtd_blkdevs.c 2003-09-25 19:15:58.000000000 -0700 @@ -397,8 +397,7 @@ int register_mtd_blktrans(struct mtd_blk tr->blkcore_priv->rq->queuedata = tr; - ret = kernel_thread(mtd_blktrans_thread, tr, - CLONE_FS|CLONE_FILES|CLONE_SIGHAND); + ret = kernel_thread(mtd_blktrans_thread, tr, CLONE_KERNEL); if (ret < 0) { blk_cleanup_queue(tr->blkcore_priv->rq); unregister_blkdev(tr->major, tr->name); diff -prauN linux-2.6.0-test5/drivers/net/3c501.c wli-2.6.0-test5-bk12-25/drivers/net/3c501.c --- linux-2.6.0-test5/drivers/net/3c501.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/3c501.c 2003-09-25 19:15:58.000000000 -0700 @@ -123,6 +123,7 @@ static const char version[] = #include /* for CONFIG_IP_MULTICAST */ #include #include +#include #include #include @@ -241,7 +242,7 @@ static int __init el1_probe1(struct net_ if (dev->irq < 2) { - unsigned long irq_mask, delay; + unsigned long irq_mask; irq_mask = probe_irq_on(); inb(RX_STATUS); /* Clear pending interrupts. */ @@ -250,8 +251,7 @@ static int __init el1_probe1(struct net_ outb(0x00, AX_CMD); - delay = jiffies + HZ/50; - while (time_before(jiffies, delay)) ; + mdelay(20); autoirq = probe_irq_off(irq_mask); if (autoirq == 0) diff -prauN linux-2.6.0-test5/drivers/net/3c505.c wli-2.6.0-test5-bk12-25/drivers/net/3c505.c --- linux-2.6.0-test5/drivers/net/3c505.c 2003-09-08 12:50:48.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/3c505.c 2003-09-25 19:15:58.000000000 -0700 @@ -298,17 +298,13 @@ inline static void adapter_reset(struct set_hsf(dev, HSF_PCB_NAK); } outb_control(adapter->hcr_val | ATTN | DIR, dev); - timeout = jiffies + 1*HZ/100; - while (time_before_eq(jiffies, timeout)); + mdelay(10); outb_control(adapter->hcr_val & ~ATTN, dev); - timeout = jiffies + 1*HZ/100; - while (time_before_eq(jiffies, timeout)); + mdelay(10); outb_control(adapter->hcr_val | FLSH, dev); - timeout = jiffies + 1*HZ/100; - while (time_before_eq(jiffies, timeout)); + mdelay(10); outb_control(adapter->hcr_val & ~FLSH, dev); - timeout = jiffies + 1*HZ/100; - while (time_before_eq(jiffies, timeout)); + mdelay(10); outb_control(orig_hcr, dev); if (!start_receive(dev, &adapter->tx_pcb)) diff -prauN linux-2.6.0-test5/drivers/net/3c515.c wli-2.6.0-test5-bk12-25/drivers/net/3c515.c --- linux-2.6.0-test5/drivers/net/3c515.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/3c515.c 2003-09-25 19:15:58.000000000 -0700 @@ -59,7 +59,6 @@ static int max_interrupt_work = 20; #include #include -#include #include #include #include diff -prauN linux-2.6.0-test5/drivers/net/Kconfig wli-2.6.0-test5-bk12-25/drivers/net/Kconfig --- linux-2.6.0-test5/drivers/net/Kconfig 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/Kconfig 2003-09-25 19:15:58.000000000 -0700 @@ -53,9 +53,7 @@ config DUMMY Administrator's Guide, available from . - 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 . The module + To compile this driver as a module, choose M here: the module will be called dummy. If you want to use more than one dummy device at a time, you need to compile this driver as a module. Instead of 'dummy', the devices will then be called 'dummy0', @@ -78,9 +76,7 @@ config BONDING This is similar to the EQL driver, but it merges Ethernet segments instead of serial lines. - 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 . The module + To compile this driver as a module, choose M here: the module will be called bonding. config EQUALIZER @@ -100,11 +96,8 @@ config EQUALIZER section 6.2 of the NET-3-HOWTO, available from . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called eql. If you want to compile it as a - module, say M here and read . If - unsure, say N. + To compile this driver as a module, choose M here: the module + will be called eql. If unsure, say N. config TUN tristate "Universal TUN/TAP device driver support" @@ -124,10 +117,8 @@ config TUN Please read for more information. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called tun. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the module + will be called tun. If you don't know what to use this for, you don't need it. @@ -149,10 +140,8 @@ config ETHERTAP Ethernet device. Please read the file for more information. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called ethertap. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the module + will be called ethertap. If you don't know what to use this for, you don't need it. @@ -231,10 +220,8 @@ config MACE motherboard will usually use a MACE (Medium Access Control for Ethernet) interface. Say Y to include support for the MACE chip. - This driver is also available as a module called mace ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this driver as a module, choose M here: the module + will be called mace. config MACE_AAUI_PORT bool "Use AAUI port instead of TP by default" @@ -254,10 +241,8 @@ config BMAC Say Y for support of BMAC Ethernet interfaces. These are used on G3 computers. - This driver is also available as a module called bmac ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this driver as a module, choose M here: the module + will be called bmac. config OAKNET tristate "National DP83902AV (Oak ethernet) support" @@ -265,10 +250,8 @@ config OAKNET help Say Y if your machine has this type of Ethernet network card. - This driver is also available as a module called oaknet ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this driver as a module, choose M here: the module + will be called oaknet. config ARIADNE tristate "Ariadne support" @@ -277,10 +260,8 @@ config ARIADNE If you have a Village Tronic Ariadne Ethernet adapter, say Y. Otherwise, say N. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you - want). The module is called ariadne. If you want to compile it as - a module, say M here and read . + To compile this driver as a module, choose M here: the module + will be called ariadne. config A2065 tristate "A2065 support" @@ -289,10 +270,8 @@ config A2065 If you have a Commodore A2065 Ethernet adapter, say Y. Otherwise, say N. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you - want). The module is called a2065. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the module + will be called a2065. config HYDRA tristate "Hydra support" @@ -300,10 +279,8 @@ config HYDRA help If you have a Hydra Ethernet adapter, say Y. Otherwise, say N. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you - want). The module is called hydra. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the module + will be called hydra. config ZORRO8390 tristate "Zorro NS8390-based Ethernet support" @@ -314,10 +291,8 @@ config ZORRO8390 Computers X-Surf Ethernet cards. If you have such a card, say Y. Otherwise, say N. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module is called zorro8390. If you want to compile it as - a module, say M here and read . + To compile this driver as a module, choose M here: the module + will be called zorro8390. config APNE tristate "PCMCIA NE2000 support" @@ -326,10 +301,8 @@ config APNE If you have a PCMCIA NE2000 compatible adapter, say Y. Otherwise, say N. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you - want). The module is called apne. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the module + will be called apne. config APOLLO_ELPLUS tristate "Apollo 3c505 support" @@ -358,9 +331,7 @@ config MAC89x0 read the Ethernet-HOWTO, available from . - 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 as well as + To compile this driver as a module, choose M here and read . This module will be called mac89x0. @@ -374,9 +345,7 @@ config MACSONIC one of these say Y and read the Ethernet-HOWTO, available from . - 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 as well as + To compile this driver as a module, choose M here and read . This module will be called macsonic. @@ -395,8 +364,8 @@ config MVME147_NET help Support for the on-board Ethernet interface on the Motorola MVME147 single-board computer. Say Y here to include the - driver for this chip in your kernel. If you want to compile it as - a module, say M here and read . + driver for this chip in your kernel. + To compile this driver as a module, choose M here. config MVME16x_NET tristate "MVME16x Ethernet support" @@ -404,8 +373,8 @@ config MVME16x_NET help This is the driver for the Ethernet interface on the Motorola MVME162, 166, 167, 172 and 177 boards. Say Y here to include the - driver for this chip in your kernel. If you want to compile it as - a module, say M here and read . + driver for this chip in your kernel. + To compile this driver as a module, choose M here. config BVME6000_NET tristate "BVME6000 Ethernet support" @@ -413,8 +382,8 @@ config BVME6000_NET help This is the driver for the Ethernet interface on BVME4000 and BVME6000 VME boards. Say Y here to include the driver for this chip - in your kernel. If you want to compile it as a module, say M here - and read . + in your kernel. + To compile this driver as a module, choose M here. config ATARILANCE tristate "Atari Lance support" @@ -532,10 +501,8 @@ config SUNLANCE cards are based on the AMD Lance chipset, which is better known via the NE2100 cards. - This support is also available as a module called sunlance ( = - code which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this driver as a module, choose M here: the module + will be called sunlance. config HAPPYMEAL tristate "Sun Happy Meal 10/100baseT support" @@ -546,10 +513,8 @@ config HAPPYMEAL both PCI and Sbus devices. This driver also supports the "qfe" quad 100baseT device available in both PCI and Sbus configurations. - This support is also available as a module called sunhme ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this driver as a module, choose M here: the module + will be called sunhme. config SUNBMAC tristate "Sun BigMAC 10/100baseT support (EXPERIMENTAL)" @@ -558,10 +523,8 @@ config SUNBMAC This driver supports the "be" interface available as an Sbus option. This is Sun's older 100baseT Ethernet device. - This support is also available as a module called sunbmac ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this driver as a module, choose M here: the module + will be called sunbmac. config SUNQE tristate "Sun QuadEthernet support" @@ -571,10 +534,8 @@ config SUNQE an Sbus option. Note that this is not the same as Quad FastEthernet "qfe" which is supported by the Happy Meal driver instead. - This support is also available as a module called sunqe ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this driver as a module, choose M here: the module + will be called sunqe. config SUNGEM tristate "Sun GEM support" @@ -607,11 +568,9 @@ config EL1 have problems. Some people suggest to ping ("man ping") a nearby machine every minute ("man cron") when using this card. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called 3c501. If you want to compile it as a - module, say M here and read as well - as . + To compile this driver as a module, choose M here and read + . The module + will be called 3c501. config EL2 tristate "3c503 \"EtherLink II\" support" @@ -621,11 +580,9 @@ config EL2 the Ethernet-HOWTO, available from . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called 3c503. If you want to compile it as a - module, say M here and read as well - as . + To compile this driver as a module, choose M here and read + . The module + will be called 3c503. config ELPLUS tristate "3c505 \"EtherLink Plus\" support" @@ -636,11 +593,9 @@ config ELPLUS this type, say Y and read the Ethernet-HOWTO, available from . - 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 as well as - . The module will be - called 3c505. + To compile this driver as a module, choose M here and read + . The module + will be called 3c505. config EL16 tristate "3c507 \"EtherLink 16\" support (EXPERIMENTAL)" @@ -650,11 +605,9 @@ config EL16 the Ethernet-HOWTO, available from . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called 3c507. If you want to compile it as a - module, say M here and read as well - as . + To compile this driver as a module, choose M here and read + . The module + will be called 3c507. config EL3 tristate "3c509/3c529 (MCA)/3c569B (98)/3c579 \"EtherLink III\" support" @@ -668,11 +621,9 @@ config EL3 setup disk to disable Plug & Play mode, and to select the default media type. - 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 as well as - . The module will be - called 3c509. + To compile this driver as a module, choose M here and read + . The module + will be called 3c509. config 3C515 tristate "3c515 ISA \"Fast EtherLink\"" @@ -682,11 +633,9 @@ config 3C515 network card, say Y and read the Ethernet-HOWTO, available from . - 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 as well as - . The module will be - called 3c515. + To compile this driver as a module, choose M here and read + . The module + will be called 3c515. config ELMC tristate "3c523 \"EtherLink/MC\" support" @@ -696,11 +645,9 @@ config ELMC the Ethernet-HOWTO, available from . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called 3c523. If you want to compile it as a - module, say M here and read as well - as . + To compile this driver as a module, choose M here and read + . The module + will be called 3c523. config ELMC_II tristate "3c527 \"EtherLink/MC 32\" support (EXPERIMENTAL)" @@ -710,11 +657,9 @@ config ELMC_II the Ethernet-HOWTO, available from . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called 3c527. If you want to compile it as a - module, say M here and read as well - as . + To compile this driver as a module, choose M here and read + . The module + will be called 3c527. config VORTEX tristate "3c590/3c900 series (592/595/597) \"Vortex/Boomerang\" support" @@ -735,9 +680,7 @@ config VORTEX and in the comments at the beginning of . - 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 as well as + To compile this support as a module, choose M here and read . config TYPHOON @@ -754,11 +697,9 @@ config TYPHOON the Ethernet-HOWTO, available from . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called typhoon.o. If you want to compile it as a - module, say M here and read as well - as . + To compile this driver as a module, choose M here and read + . The module + will be called typhoon. config LANCE tristate "AMD LANCE and PCnet (AT1500 and NE2100) support" @@ -769,10 +710,8 @@ config LANCE . Some LinkSys cards are of this type. - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . This is - recommended. The module will be called lance. + To compile this driver as a module, choose M here: the module + will be called lance. This is recommended. config NET_VENDOR_SMC bool "Western Digital/SMC cards" @@ -795,11 +734,9 @@ config WD80x3 the Ethernet-HOWTO, available from . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called wd. If you want to compile it as a - module, say M here and read as well - as . + To compile this driver as a module, choose M here and read + . The module + will be called wd. config ULTRAMCA tristate "SMC Ultra MCA support" @@ -809,11 +746,9 @@ config ULTRAMCA an MCA based system (PS/2), say Y and read the Ethernet-HOWTO, available from . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called smc-mca. If you want to compile it as a - module, say M here and read as well - as . + To compile this driver as a module, choose M here and read + . The module + will be called smc-mca. config ULTRA tristate "SMC Ultra support" @@ -830,11 +765,9 @@ config ULTRA this but keep it in mind if you have such a SCSI card and have problems. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called smc-ultra. If you want to compile it as - a module, say M here and read as - well as . + To compile this driver as a module, choose M here and read + . The module + will be called smc-ultra. config ULTRA32 tristate "SMC Ultra32 EISA support" @@ -844,11 +777,9 @@ config ULTRA32 the Ethernet-HOWTO, available from . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called smc-ultra32. If you want to compile it - as a module, say M here and read as - well as . + To compile this driver as a module, choose M here and read + . The module + will be called smc-ultra32. config SMC9194 tristate "SMC 9194 support" @@ -861,11 +792,9 @@ config SMC9194 and the Ethernet-HOWTO, available from . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called smc9194. If you want to compile it as a - module, say M here and read as well - as . + To compile this driver as a module, choose M here and read + . The module + will be called smc9194. config NET_VENDOR_RACAL bool "Racal-Interlan (Micom) NI cards" @@ -889,11 +818,9 @@ config NI5010 . Note that this is still experimental code. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called ni5010. If you want to compile it as a - module, say M here and read as well - as . + To compile this driver as a module, choose M here and read + . The module + will be called ni5010. config NI52 tristate "NI5210 support" @@ -903,11 +830,9 @@ config NI52 the Ethernet-HOWTO, available from . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called ni52. If you want to compile it as a - module, say M here and read as well - as . + To compile this driver as a module, choose M here and read + . The module + will be called ni52. config NI65 tristate "NI6510 support" @@ -917,11 +842,9 @@ config NI65 the Ethernet-HOWTO, available from . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called ni65. If you want to compile it as a - module, say M here and read as well - as . + To compile this driver as a module, choose M here and read + . The module + will be called ni65. source "drivers/net/tulip/Kconfig" @@ -933,12 +856,9 @@ config AT1700 the Ethernet-HOWTO, available from . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - If you want to compile it as a module, say M here and read - as well as - . The module will be - called at1700. + To compile this driver as a module, choose M here and read + . The module + will be called at1700. config DEPCA tristate "DEPCA, DE10x, DE200, DE201, DE202, DE422 support" @@ -949,12 +869,9 @@ config DEPCA as well as . - 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 as well as - . The module will be - called - depca. + To compile this driver as a module, choose M here and read + . The module + will be called depca. config HP100 tristate "HP 10/100VG PCLAN (ISA, EISA, PCI) support" @@ -964,11 +881,9 @@ config HP100 the Ethernet-HOWTO, available from . - 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 as well as - . The module will be - called hp100. + To compile this driver as a module, choose M here and read + . The module + will be called hp100. config NET_ISA bool "Other ISA cards" @@ -995,11 +910,9 @@ config E2100 the Ethernet-HOWTO, available from . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called e2100. If you want to compile it as a - module, say M here and read as well - as . + To compile this driver as a module, choose M here and read + . The module + will be called e2100. config EWRK3 tristate "EtherWORKS 3 (DE203, DE204, DE205) support" @@ -1011,11 +924,9 @@ config EWRK3 well as the Ethernet-HOWTO, available from . - 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 as well as - . The module will be - called ewrk3. + To compile this driver as a module, choose M here and read + . The module + will be called ewrk3. config EEXPRESS tristate "EtherExpress 16 support" @@ -1028,11 +939,9 @@ config EEXPRESS because the driver was very unreliable. We now have a new driver that should do better. - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read as well as - . The module will be - called eexpress. + To compile this driver as a module, choose M here and read + . The module + will be called eexpress. config EEXPRESS_PRO tristate "EtherExpressPro support/EtherExpress 10 (i82595) support" @@ -1044,11 +953,9 @@ config EEXPRESS_PRO driver. Please read the Ethernet-HOWTO, available from . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called eepro. If you want to compile it as a - module, say M here and read as well - as . + To compile this driver as a module, choose M here and read + . The module + will be called eepro. config FMV18X tristate "FMV-181/182/183/184 support (OBSOLETE)" @@ -1061,11 +968,9 @@ config FMV18X If you use an FMV-183 or FMV-184 and it is not working, you may need to disable Plug & Play mode of the card. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called fmv18x. If you want to compile it as a - module, say M here and read as well - as . + To compile this driver as a module, choose M here and read + . The module + will be called fmv18x. config HPLAN_PLUS tristate "HP PCLAN+ (27247B and 27252A) support" @@ -1075,11 +980,9 @@ config HPLAN_PLUS the Ethernet-HOWTO, available from . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called hp-plus. If you want to compile it as a - module, say M here and read as well - as . + To compile this driver as a module, choose M here and read + . The module + will be called hp-plus. config HPLAN tristate "HP PCLAN (27245 and other 27xxx series) support" @@ -1089,11 +992,9 @@ config HPLAN the Ethernet-HOWTO, available from . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called hp. If you want to compile it as a - module, say M here and read as well - as . + To compile this driver as a module, choose M here and read + . The module + will be called hp. config LP486E tristate "LP486E on board Ethernet" @@ -1111,11 +1012,9 @@ config ETH16I the Ethernet-HOWTO, available from . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called eth16i. If you want to compile it as a - module, say M here and read as well - as . + To compile this driver as a module, choose M here and read + . The module + will be called eth16i. config NE2000 tristate "NE2000/NE1000 support" @@ -1132,11 +1031,9 @@ config NE2000 laptops), say N here and Y to "NE/2 (ne2000 MCA version) support", below. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called ne. If you want to compile it as a - module, say M here and read as well - as . + To compile this driver as a module, choose M here and read + . The module + will be called ne. config ZNET tristate "Zenith Z-Note support (EXPERIMENTAL)" @@ -1156,11 +1053,9 @@ config SEEQ8005 is for you, read the Ethernet-HOWTO, available from . - 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 as well as - . The module will be - called seeq8005. + To compile this driver as a module, choose M here and read + . The module + will be called seeq8005. config SK_G16 tristate "SK_G16 support (OBSOLETE)" @@ -1230,11 +1125,9 @@ config SKMC of different type hasn't been tested with this driver. Say Y if you have one of these Ethernet adapters. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module is called sk_mca. If you want to compile it as a - module, say M here and read as well - as . + To compile this driver as a module, choose M here and read + . The module + will be called sk_mca. config NE2_MCA tristate "NE/2 (ne2000 MCA version) support" @@ -1244,11 +1137,9 @@ config NE2_MCA the Ethernet-HOWTO, available from . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called ne2. If you want to compile it as a - module, say M here and read as well - as . + To compile this driver as a module, choose M here and read + . The module + will be called ne2. config IBMLANA tristate "IBM LAN Adapter/A support" @@ -1256,10 +1147,10 @@ config IBMLANA ---help--- This is a Micro Channel Ethernet adapter. You need to set CONFIG_MCA to use this driver. It is both available as an in-kernel - driver and as a module ( = code which can be inserted in and removed - from the running kernel whenever you want). If you want to compile - it as a module, say M here and read - as well as . The only + driver and as a module. + + To compile this driver as a module, choose M here and read + . The only currently supported card is the IBM LAN Adapter/A for Ethernet. It will both support 16K and 32K memory windows, however a 32K window gives a better security against packet losses. Usage of multiple @@ -1288,11 +1179,9 @@ config PCNET32 answer Y here and read the Ethernet-HOWTO, available from . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called pcnet32. If you want to compile it as a - module, say M here and read as well - as . + To compile this driver as a module, choose M here and read + . The module + will be called pcnet32. config AMD8111_ETH tristate "AMD 8111 (new PCI lance) support" @@ -1302,11 +1191,9 @@ config AMD8111_ETH answer Y here and read the Ethernet-HOWTO, available from . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called amd8111e. If you want to compile it as a - module, say M here and read as well - as . + To compile this driver as a module, choose M here and read + . The module + will be called amd8111e. config ADAPTEC_STARFIRE tristate "Adaptec Starfire/DuraLAN support" @@ -1317,10 +1204,8 @@ config ADAPTEC_STARFIRE Adaptec e.g. the ANA-6922A. The older 32 bit boards use the tulip driver. - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . This is - recommended. The module will be called starfire. + To compile this driver as a module, choose M here: the module + will be called starfire. This is recommended. config ADAPTEC_STARFIRE_NAPI bool "Use Rx Polling (NAPI) (EXPERIMENTAL)" @@ -1342,11 +1227,9 @@ config AC3200 the Ethernet-HOWTO, available from . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called ac3200. If you want to compile it as a - module, say M here and read as well - as . + To compile this driver as a module, choose M here and read + . The module + will be called ac3200. config APRICOT tristate "Apricot Xen-II on board Ethernet" @@ -1356,9 +1239,7 @@ config APRICOT read the Ethernet-HOWTO, available from . - 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 as well as + To compile this driver as a module, choose M here and read . The module will be called apricot. @@ -1370,9 +1251,7 @@ config B44 read the Ethernet-HOWTO, available from . - 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 as well as + To compile this driver as a module, choose M here and read . The module will be called b44. @@ -1386,9 +1265,7 @@ config CS89x0 as well as . - 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 as well as + To compile this driver as a module, choose M here and read . The module will be called cs89x. @@ -1407,11 +1284,9 @@ config DGRS . More specific information is contained in . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called dgrs. If you want to compile it as a - module, say M here and read as well - as . + To compile this driver as a module, choose M here and read + . The module + will be called dgrs. config EEPRO100 tristate "EtherExpressPro/100 support (eepro100, original Becker driver)" @@ -1421,11 +1296,9 @@ config EEPRO100 card, say Y and read the Ethernet-HOWTO, available from . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called eepro100. If you want to compile it as - a module, say M here and read as - well as . + To compile this driver as a module, choose M here and read + . The module + will be called eepro100. config EEPRO100_PIO @@ -1509,11 +1382,9 @@ config E100 More specific information on configuring the driver is in . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called e100. If you want to compile it as a - module, say M here and read as well - as . + To compile this driver as a module, choose M here and read + . The module + will be called e100. config LNE390 tristate "Mylex EISA LNE390A/B support (EXPERIMENTAL)" @@ -1523,11 +1394,9 @@ config LNE390 the Ethernet-HOWTO, available from . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called lne390. If you want to compile it as a - module, say M here and read as well - as . + To compile this driver as a module, choose M here and read + . The module + will be called lne390. config FEALNX tristate "Myson MTD-8xx PCI Ethernet support" @@ -1562,11 +1431,9 @@ config NE2K_PCI NetVin NV5000SC Via 86C926 SureCom NE34 Winbond Holtek HT80232 Holtek HT80229 - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called ne2k-pci. If you want to compile it as - a module, say M here and read as - well as . + To compile this driver as a module, choose M here and read + . The module + will be called ne2k-pci. config NE3210 tristate "Novell/Eagle/Microdyne NE3210 EISA support (EXPERIMENTAL)" @@ -1577,11 +1444,9 @@ config NE3210 . Note that this driver will NOT WORK for NE3200 cards as they are completely different. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called ne3210. If you want to compile it as a - module, say M here and read as well - as . + To compile this driver as a module, choose M here and read + . The module + will be called ne3210. config ES3210 tristate "Racal-Interlan EISA ES3210 support (EXPERIMENTAL)" @@ -1591,11 +1456,9 @@ config ES3210 the Ethernet-HOWTO, available from . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called es3210. If you want to compile it as a - module, say M here and read as well - as . + To compile this driver as a module, choose M here and read + . The module + will be called es3210. config 8139CP tristate "RealTek RTL-8139 C+ PCI Fast Ethernet Adapter support (EXPERIMENTAL)" @@ -1606,10 +1469,8 @@ config 8139CP the Ethernet-HOWTO, available from . - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read Documentation/modules.txt. This is recommended. - The module will be called 8139cp. + To compile this driver as a module, choose M here: the module + will be called 8139cp. This is recommended. config 8139TOO tristate "RealTek RTL-8139 PCI Fast Ethernet Adapter support" @@ -1621,10 +1482,8 @@ config 8139TOO Ethernet-HOWTO, available from . - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . This is - recommended. The module will be called 8139too. + To compile this driver as a module, choose M here: the module + will be called 8139too. This is recommended. config 8139TOO_PIO bool "Use PIO instead of MMIO" @@ -1680,10 +1539,8 @@ config SIS900 This driver also supports AMD 79C901 HomePNA so that you can use your phone line as a network cable. - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . This is - recommended. The module will be called sis900. + To compile this driver as a module, choose M here: the module + will be called sis900. This is recommended. config EPIC100 tristate "SMC EtherPower II" @@ -1725,11 +1582,9 @@ config TLAN Compaq NetFlex and Olicom cards. Please read the file for more details. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called tlan. If you want to compile it as a - module, say M here and read as well - as . + To compile this driver as a module, choose M here and read + . The module + will be called tlan. Please email feedback to torben.mathiasen@compaq.com. @@ -1740,11 +1595,9 @@ config VIA_RHINE If you have a VIA "rhine" based network card (Rhine-I (3043) or Rhine-2 (VT86c100A)), say Y here. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called via-rhine. If you want to compile it as - a module, say M here and read as - well as . + To compile this driver as a module, choose M here and read + . The module + will be called via-rhine. config VIA_RHINE_MMIO bool "Use MMIO instead of PIO (EXPERIMENTAL)" @@ -1802,10 +1655,8 @@ config ATP said N to the "Parallel printer support", because the two drivers don't like each other. - If you want to compile this driver as a module however ( = code - which can be inserted in and removed from the running kernel - whenever you want), say M here and read - . The module will be called atp. + To compile this driver as a module, choose M here: the module + will be called atp. config DE600 tristate "D-Link DE600 pocket adapter support" @@ -1819,11 +1670,8 @@ config DE600 port and it is safe to compile the corresponding drivers into the kernel. - If you want to compile this driver as a module however ( = code - which can be inserted in and removed from the running kernel - whenever you want), say M here and read - . - The module will be called de600. + To compile this driver as a module, choose M here: the module + will be called de600. config DE620 tristate "D-Link DE620 pocket adapter support" @@ -1837,11 +1685,8 @@ config DE620 port and it is safe to compile the corresponding drivers into the kernel. - If you want to compile this driver as a module however ( = code - which can be inserted in and removed from the running kernel - whenever you want), say M here and read - . - The module will be called de620. + To compile this driver as a module, choose M here: the module + will be called de620. config SGISEEQ tristate "SGI Seeq ethernet controller support" @@ -1900,10 +1745,8 @@ config ACENIC as well. To enable Jumbo Frames, add `mtu 9000' to your ifconfig line. - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . This is - recommended. The module will be called acenic. + To compile this driver as a module, choose M here: the + module will be called acenic. config ACENIC_OMIT_TIGON_I bool "Omit support for old Tigon I based AceNICs" @@ -1927,10 +1770,8 @@ config DL2K D-Link DGE-550T Gigabit Ethernet Adapter. D-Link DL2000-based Gigabit Ethernet Adapter. - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . This is - recommended. The module will be called dl2k. + To compile this driver as a module, choose M here: the + module will be called dl2k. config E1000 tristate "Intel(R) PRO/1000 Gigabit Ethernet support" @@ -1971,11 +1812,9 @@ config E1000 More specific information on configuring the driver is in . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called e1000. If you want to compile it as a - module, say M here and read as well - as . + To compile this driver as a module, choose M here and read + . The module + will be called e1000. config E1000_NAPI bool "Use Rx Polling (NAPI)" @@ -1987,10 +1826,8 @@ config MYRI_SBUS help This driver supports MyriCOM Sbus gigabit Ethernet cards. - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . This is - recommended. The module will be called myri_sbus. + To compile this driver as a module, choose M here: the module + will be called myri_sbus. This is recommended. config NS83820 tristate "National Semiconduct DP83820 support" @@ -2010,9 +1847,7 @@ config HAMACHI the Ethernet-HOWTO, available from . - 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 as well as + To compile this driver as a module, choose M here and read . The module will be called hamachi. @@ -2026,10 +1861,8 @@ config YELLOWFIN for more information about this driver in particular and Beowulf in general. - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . This is - recommended. The module will be called yellowfin. + To compile this driver as a module, choose M here: the module + will be called yellowfin. This is recommended. config R8169 tristate "Realtek 8169 gigabit ethernet support" @@ -2037,10 +1870,8 @@ config R8169 ---help--- Say Y here if you have a Realtek 8169 PCI Gigabit Ethernet adapter. - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . This is - recommended. The module will be called r8169. + To compile this driver as a module, choose M here: the module + will be called r8169. This is recommended. config SIS190 tristate "SiS190 gigabit ethernet support (EXPERIMENTAL)" @@ -2048,10 +1879,8 @@ config SIS190 ---help--- Say Y here if you have a SiS 190 PCI Gigabit Ethernet adapter. - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . This is - recommended. The module will be called sis190. + To compile this driver as a module, choose M here: the module + will be called sis190. This is recommended. config SK98LIN tristate "Marvell Yukon Chipset / SysKonnect SK-98xx Support" @@ -2112,12 +1941,10 @@ config SK98LIN optional driver parameters. Questions concerning this driver may be addressed to: linux@syskonnect.de - - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read Documentation/modules.txt. This is recommended. - The module will be called sk98lin.o. - + + To compile this driver as a module, choose M here: the module + will be called sk98lin. This is recommended. + config CONFIG_SK98LIN_T1 bool "3Com 3C940/3C941 Gigabit Ethernet Adapter" depends on SK98LIN @@ -2259,10 +2086,8 @@ config TIGON3 help This driver supports Broadcom Tigon3 based gigabit Ethernet cards. - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . This is - recommended. The module will be called tg3. + To compile this driver as a module, choose M here: the module + will be called tg3. This is recommended. endmenu @@ -2297,11 +2122,9 @@ config IXGB More specific information on configuring the driver is in . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called ixgb. If you want to compile it as a - module, say M here and read as well - as . + To compile this driver as a module, choose M here and read + . The module + will be called ixgb. config IXGB_NAPI bool "Use Rx Polling (NAPI) (EXPERIMENTAL)" @@ -2360,10 +2183,8 @@ config SKFP Questions concerning this driver can be addressed to: linux@syskonnect.de - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . This is - recommended. The module will be called skfp. + To compile this driver as a module, choose M here: the module + will be called skfp. This is recommended. config HIPPI bool "HIPPI driver support (EXPERIMENTAL)" @@ -2384,11 +2205,8 @@ config ROADRUNNER help Say Y here if this is your PCI HIPPI network card. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called rrunner. If you want to compile it as a - module, say M here and read . If - unsure, say N. + To compile this driver as a module, choose M here: the module + will be called rrunner. If unsure, say N. config ROADRUNNER_LARGE_RINGS bool "Use large TX/RX rings (EXPERIMENTAL)" @@ -2431,9 +2249,7 @@ config PLIP with the PLIP support in Linux versions 1.0.x. This option enlarges your kernel by about 8 KB. - 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 as well as + To compile this driver as a module, choose M here and read . The module will be called plip. If unsure, say Y or M, in case you buy a laptop later. @@ -2463,14 +2279,11 @@ config PPP synchronous lines, you should say Y (or M) here and to "Support synchronous PPP", below. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). If you said Y to "Version information on all symbols" above, then you cannot compile the PPP driver into the kernel; you can then only - compile it as a module. The module will be called ppp_generic. - If you want to compile it as a module, say M here and read - as well as - . + compile it as a module. To compile this driver as a module, choose M + here and read . + The module will be called ppp_generic. config PPP_MULTILINK bool "PPP multilink support (EXPERIMENTAL)" @@ -2507,9 +2320,7 @@ config PPP_ASYNC a modem (not a synchronous or ISDN modem) to contact your ISP, you need this option. - This code is also available as a module (code which can be inserted - into and removed from the running kernel). If you want to compile - it as a module, say M here and read . + To compile this driver as a module, choose M here. If unsure, say Y. @@ -2521,10 +2332,7 @@ config PPP_SYNC_TTY (HDLC) tty devices, such as the SyncLink adapter. These devices are often used for high-speed leased lines like T1/E1. - This code is also available as a module (code which can be inserted - into and removed from the running kernel). If you want to compile - it as a module, say M here and read - . + To compile this driver as a module, choose M here. config PPP_DEFLATE tristate "PPP Deflate compression" @@ -2537,10 +2345,7 @@ config PPP_DEFLATE Deflate compression method as well for this to be useful. Even if they don't support it, it is safe to say Y here. - This code is also available as a module (code which can be inserted - into and removed from the running kernel). If you want to compile - it as a module, say M here and read - . + To compile this driver as a module, choose M here. config PPP_BSDCOMP tristate "PPP BSD-Compress compression" @@ -2610,9 +2415,7 @@ config SLIP ). SLIP support will enlarge your kernel by about 4 KB. If unsure, say N. - 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 as well as + To compile this driver as a module, choose M here and read . The module will be called slip. @@ -2674,10 +2477,8 @@ config IPHASE5526 help Say Y here if you have a Fibre Channel adaptor of this kind. - The driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called iph5526. For general information about - modules read . + To compile this driver as a module, choose M here: the module + will be called iph5526. config RCPCI tristate "Red Creek Hardware VPN (EXPERIMENTAL)" @@ -2686,10 +2487,8 @@ config RCPCI This is a driver for hardware which provides a Virtual Private Network (VPN). Say Y if you have it. - This code is also available as a module called rcpci ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this driver as a module, choose M here: the module + will be called rcpci. config SHAPER tristate "Traffic Shaper (EXPERIMENTAL)" @@ -2709,11 +2508,8 @@ config SHAPER program, available from in the shaper package. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called shaper. If you want to compile it as a - module, say M here and read . If - unsure, say N. + To compile this driver as a module, choose M here: the module + will be called shaper. If unsure, say N. source "drivers/net/wan/Kconfig" diff -prauN linux-2.6.0-test5/drivers/net/Space.c wli-2.6.0-test5-bk12-25/drivers/net/Space.c --- linux-2.6.0-test5/drivers/net/Space.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/Space.c 2003-09-25 19:15:58.000000000 -0700 @@ -12,19 +12,16 @@ * Donald J. Becker, * * Changelog: + * Stephen Hemminger (09/2003) + * - get rid of pre-linked dev list, dynamic device allocation * Paul Gortmaker (03/2002) - - struct init cleanup, enable multiple ISA autoprobes. + * - struct init cleanup, enable multiple ISA autoprobes. * Arnaldo Carvalho de Melo - 09/1999 * - fix sbni: s/device/net_device/ * Paul Gortmaker (06/98): * - sort probes in a sane way, make sure all (safe) probes * get run once & failed autoprobes don't autoprobe again. * - * FIXME: - * Phase out placeholder dev entries put in the linked list - * here in favour of drivers using init_etherdev(NULL, ...) - * combined with a single find_all_devs() function (for 2.3) - * * 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 @@ -58,7 +55,6 @@ extern int at1500_probe(struct net_devic extern int at1700_probe(struct net_device *); extern int fmv18x_probe(struct net_device *); extern int eth16i_probe(struct net_device *); -extern int depca_probe(struct net_device *); extern int i82596_probe(struct net_device *); extern int ewrk3_probe(struct net_device *); extern int el1_probe(struct net_device *); @@ -97,7 +93,6 @@ extern int macsonic_probe(struct net_dev extern int mac8390_probe(struct net_device *dev); extern int mac89x0_probe(struct net_device *dev); extern int mc32_probe(struct net_device *dev); -extern struct net_device *sdla_init(void); extern struct net_device *cops_probe(int unit); extern struct net_device *ltpc_probe(void); @@ -108,7 +103,7 @@ extern int de620_probe(struct net_device extern int iph5526_probe(struct net_device *dev); /* SBNI adapters */ -extern int sbni_probe(void); +extern int sbni_probe(int unit); struct devprobe { @@ -127,22 +122,14 @@ static int __init probe_list(struct net_ { struct devprobe *p = plist; unsigned long base_addr = dev->base_addr; - int ret; while (p->probe != NULL) { - if (base_addr && p->probe(dev) == 0) { /* probe given addr */ - ret = alloc_divert_blk(dev); - if (ret) - return ret; + if (base_addr && p->probe(dev) == 0) /* probe given addr */ return 0; - } else if (p->status == 0) { /* has autoprobe failed yet? */ + else if (p->status == 0) { /* has autoprobe failed yet? */ p->status = p->probe(dev); /* no, try autoprobe */ - if (p->status == 0) { - ret = alloc_divert_blk(dev); - if (ret) - return ret; + if (p->status == 0) return 0; - } } p++; } @@ -253,9 +240,6 @@ static struct devprobe isa_probes[] __in #ifdef CONFIG_EEXPRESS_PRO /* Intel EtherExpress Pro/10 */ {eepro_probe, 0}, #endif -#ifdef CONFIG_DEPCA /* DEC DEPCA */ - {depca_probe, 0}, -#endif #ifdef CONFIG_EWRK3 /* DEC EtherWORKS 3 */ {ewrk3_probe, 0}, #endif @@ -354,7 +338,7 @@ static struct devprobe mips_probes[] __i * per bus interface. This drives the legacy devices only for now. */ -static int __init ethif_probe(void) +static int __init ethif_probe(int unit) { struct net_device *dev; int err = -ENODEV; @@ -363,6 +347,7 @@ static int __init ethif_probe(void) if (!dev) return -ENOMEM; + sprintf(dev->name, "eth%d", unit); netdev_boot_setup_check(dev); /* @@ -399,7 +384,7 @@ extern int sk_isa_probe(struct net_devic extern int proteon_probe(struct net_device *); extern int smctr_probe(struct net_device *); -static __init int trif_probe(void) +static __init int trif_probe(int unit) { struct net_device *dev; int err = -ENODEV; @@ -408,6 +393,7 @@ static __init int trif_probe(void) if (!dev) return -ENOMEM; + sprintf(dev->name, "tr%d", unit); netdev_boot_setup_check(dev); if ( #ifdef CONFIG_IBMTR @@ -451,16 +437,16 @@ void __init probe_old_netdevs(void) #ifdef CONFIG_SBNI for (num = 0; num < 8; ++num) - if (sbni_probe()) + if (sbni_probe(num)) break; #endif #ifdef CONFIG_TR for (num = 0; num < 8; ++num) - if (trif_probe()) + if (trif_probe(num)) break; #endif for (num = 0; num < 8; ++num) - if (ethif_probe()) + if (ethif_probe(num)) break; #ifdef CONFIG_COPS cops_probe(0); @@ -470,10 +456,6 @@ void __init probe_old_netdevs(void) #ifdef CONFIG_LTPC ltpc_probe(); #endif -#ifdef CONFIG_SDLA - sdla_init(); -#endif - } /* diff -prauN linux-2.6.0-test5/drivers/net/ac3200.c wli-2.6.0-test5-bk12-25/drivers/net/ac3200.c --- linux-2.6.0-test5/drivers/net/ac3200.c 2003-09-08 12:50:12.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/ac3200.c 2003-09-25 19:15:58.000000000 -0700 @@ -25,6 +25,7 @@ static const char version[] = "ac3200.c:v1.01 7/1/94 Donald Becker (becker@cesdis.gsfc.nasa.gov)\n"; #include +#include #include #include #include diff -prauN linux-2.6.0-test5/drivers/net/acenic.c wli-2.6.0-test5-bk12-25/drivers/net/acenic.c --- linux-2.6.0-test5/drivers/net/acenic.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/acenic.c 2003-09-25 19:15:58.000000000 -0700 @@ -1757,7 +1757,8 @@ static int __init ace_init(struct net_de * Wait for the firmware to spin up - max 3 seconds. */ myjif = jiffies + 3 * HZ; - while (time_before(jiffies, myjif) && !ap->fw_running); + while (time_before(jiffies, myjif) && !ap->fw_running) + cpu_relax(); if (!ap->fw_running) { printk(KERN_ERR "%s: Firmware NOT running!\n", dev->name); diff -prauN linux-2.6.0-test5/drivers/net/appletalk/Kconfig wli-2.6.0-test5-bk12-25/drivers/net/appletalk/Kconfig --- linux-2.6.0-test5/drivers/net/appletalk/Kconfig 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/appletalk/Kconfig 2003-09-25 19:15:58.000000000 -0700 @@ -65,10 +65,8 @@ config IPDDP decapsulation, but not both. With the following two questions, you decide which one you want. - If you say M here, the AppleTalk-IP support will be compiled as a - module ( = code which can be inserted in and removed from the - running kernel whenever you want, read - ). The module is called ipddp. + To compile the AppleTalk-IP support as a module, choose M here: the + module will be called ipddp. In this case, you will be able to use both encapsulation and decapsulation simultaneously, by loading two copies of the module and specifying different values for the module option ipddp_mode. diff -prauN linux-2.6.0-test5/drivers/net/arm/ether00.c wli-2.6.0-test5-bk12-25/drivers/net/arm/ether00.c --- linux-2.6.0-test5/drivers/net/arm/ether00.c 2003-09-08 12:50:47.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/arm/ether00.c 2003-09-25 19:15:58.000000000 -0700 @@ -19,7 +19,7 @@ */ /* includes */ - +#include #include #include #include diff -prauN linux-2.6.0-test5/drivers/net/bonding/bond_3ad.c wli-2.6.0-test5-bk12-25/drivers/net/bonding/bond_3ad.c --- linux-2.6.0-test5/drivers/net/bonding/bond_3ad.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/bonding/bond_3ad.c 2003-09-25 19:15:58.000000000 -0700 @@ -37,6 +37,16 @@ * 2003/05/01 - Shmulik Hen * - Renamed bond_3ad_link_status_changed() to * bond_3ad_handle_link_change() for compatibility with TLB. + * + * 2003/05/20 - Amir Noam + * - Fix long fail over time when releasing last slave of an active + * aggregator - send LACPDU on unbind of slave to tell partner this + * port is no longer aggregatable. + * + * 2003/06/25 - Tsippy Mendelson + * - Send LACPDU as highest priority packet to further fix the above + * problem on very high Tx traffic load where packets may get dropped + * by the slave. */ #include @@ -45,6 +55,7 @@ #include #include #include +#include #include "bonding.h" #include "bond_3ad.h" @@ -905,6 +916,7 @@ static int ad_lacpdu_send(struct port *p skb->mac.raw = skb->data; skb->nh.raw = skb->data + ETH_HLEN; skb->protocol = PKT_TYPE_LACPDU; + skb->priority = TC_PRIO_CONTROL; lacpdu_header = (struct lacpdu_header *)skb_put(skb, length); diff -prauN linux-2.6.0-test5/drivers/net/bonding/bond_3ad.h wli-2.6.0-test5-bk12-25/drivers/net/bonding/bond_3ad.h --- linux-2.6.0-test5/drivers/net/bonding/bond_3ad.h 2003-09-08 12:50:41.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/bonding/bond_3ad.h 2003-09-25 19:15:58.000000000 -0700 @@ -165,7 +165,7 @@ typedef struct marker { // = 0x02 (marker response information) u8 marker_length; // = 0x16 u16 requester_port; // The number assigned to the port by the requester - struct mac_addr requester_system; // The requester’s system id + struct mac_addr requester_system; // The requester's system id u32 requester_transaction_id; // The transaction id allocated by the requester, u16 pad; // = 0 u8 tlv_type_terminator; // = 0x00 diff -prauN linux-2.6.0-test5/drivers/net/bonding/bond_alb.c wli-2.6.0-test5-bk12-25/drivers/net/bonding/bond_alb.c --- linux-2.6.0-test5/drivers/net/bonding/bond_alb.c 2003-09-08 12:50:12.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/bonding/bond_alb.c 2003-09-25 19:15:59.000000000 -0700 @@ -17,10 +17,22 @@ * * The full GNU General Public License is included in this distribution in the * file called LICENSE. + * + * + * Changes: + * + * 2003/06/25 - Shmulik Hen + * - Fixed signed/unsigned calculation errors that caused load sharing + * to collapse to one slave under very heavy UDP Tx stress. + * + * 2003/08/06 - Amir Noam + * - Add support for setting bond's MAC address with special + * handling required for ALB/TLB. */ #include #include +#include #include #include #include @@ -246,7 +258,7 @@ tlb_get_least_loaded_slave(struct bondin { struct slave *slave; struct slave *least_loaded; - u32 curr_gap, max_gap; + s64 curr_gap, max_gap; /* Find the first enabled slave */ slave = bond_get_first_slave(bond); @@ -262,15 +274,15 @@ tlb_get_least_loaded_slave(struct bondin } least_loaded = slave; - max_gap = (slave->speed * 1000000) - - (SLAVE_TLB_INFO(slave).load * 8); + max_gap = (s64)(slave->speed * 1000000) - + (s64)(SLAVE_TLB_INFO(slave).load * 8); /* Find the slave with the largest gap */ slave = bond_get_next_slave(bond, slave); while (slave) { if (SLAVE_IS_OK(slave)) { - curr_gap = (slave->speed * 1000000) - - (SLAVE_TLB_INFO(slave).load * 8); + curr_gap = (s64)(slave->speed * 1000000) - + (s64)(SLAVE_TLB_INFO(slave).load * 8); if (max_gap < curr_gap) { least_loaded = slave; max_gap = curr_gap; @@ -936,10 +948,11 @@ alb_send_learning_packets(struct slave * } /* hw is a boolean parameter that determines whether we should try and - * set the hw address of the hw as well as the hw address of the net_device + * set the hw address of the device as well as the hw address of the + * net_device */ static int -alb_set_mac_addr(struct slave *slave, u8 addr[], int hw) +alb_set_slave_mac_addr(struct slave *slave, u8 addr[], int hw) { struct net_device *dev = NULL; struct sockaddr s_addr; @@ -947,16 +960,16 @@ alb_set_mac_addr(struct slave *slave, u8 dev = slave->dev; if (!hw) { - memcpy(dev->dev_addr, addr, ETH_ALEN); + memcpy(dev->dev_addr, addr, dev->addr_len); return 0; } /* for rlb each slave must have a unique hw mac addresses so that */ /* each slave will receive packets destined to a different mac */ - memcpy(s_addr.sa_data, addr, ETH_ALEN); + memcpy(s_addr.sa_data, addr, dev->addr_len); s_addr.sa_family = dev->type; if (dev->set_mac_address(dev, &s_addr)) { - printk(KERN_DEBUG "bonding: Error: alb_set_mac_addr:" + printk(KERN_DEBUG "bonding: Error: alb_set_slave_mac_addr:" " dev->set_mac_address of dev %s failed!" " ALB mode requires that the base driver" " support setting the hw address also when" @@ -980,8 +993,8 @@ alb_swap_mac_addr(struct bonding *bond, slaves_state_differ = (SLAVE_IS_OK(slave1) != SLAVE_IS_OK(slave2)); memcpy(tmp_mac_addr, slave1->dev->dev_addr, ETH_ALEN); - alb_set_mac_addr(slave1, slave2->dev->dev_addr, bond->alb_info.rlb_enabled); - alb_set_mac_addr(slave2, tmp_mac_addr, bond->alb_info.rlb_enabled); + alb_set_slave_mac_addr(slave1, slave2->dev->dev_addr, bond->alb_info.rlb_enabled); + alb_set_slave_mac_addr(slave2, tmp_mac_addr, bond->alb_info.rlb_enabled); /* fasten the change in the switch */ if (SLAVE_IS_OK(slave1)) { @@ -1146,8 +1159,8 @@ alb_handle_addr_collision_on_attach(stru } if (tmp_slave1) { - alb_set_mac_addr(slave, tmp_slave1->perm_hwaddr, - bond->alb_info.rlb_enabled); + alb_set_slave_mac_addr(slave, tmp_slave1->perm_hwaddr, + bond->alb_info.rlb_enabled); printk(KERN_WARNING "bonding: Warning: the hw address " "of slave %s is in use by the bond; " @@ -1165,6 +1178,67 @@ alb_handle_addr_collision_on_attach(stru return 0; } +/** + * alb_set_mac_address + * @bond: + * @addr: + * + * In TLB mode all slaves are configured to the bond's hw address, but set + * their dev_addr field to different addresses (based on their permanent hw + * addresses). + * + * For each slave, this function sets the interface to the new address and then + * changes its dev_addr field to its previous value. + * + * Unwinding assumes bond's mac address has not yet changed. + */ +static inline int +alb_set_mac_address(struct bonding *bond, void *addr) +{ + struct sockaddr sa; + struct slave *slave; + char tmp_addr[ETH_ALEN]; + int error; + + if (bond->alb_info.rlb_enabled) { + return 0; + } + + slave = bond_get_first_slave(bond); + for (; slave; slave = bond_get_next_slave(bond, slave)) { + if (slave->dev->set_mac_address == NULL) { + error = -EOPNOTSUPP; + goto unwind; + } + + /* save net_device's current hw address */ + memcpy(tmp_addr, slave->dev->dev_addr, ETH_ALEN); + + error = slave->dev->set_mac_address(slave->dev, addr); + + /* restore net_device's hw address */ + memcpy(slave->dev->dev_addr, tmp_addr, ETH_ALEN); + + if (error) { + goto unwind; + } + } + + return 0; + +unwind: + memcpy(sa.sa_data, bond->device->dev_addr, bond->device->addr_len); + sa.sa_family = bond->device->type; + slave = bond_get_first_slave(bond); + for (; slave; slave = bond_get_next_slave(bond, slave)) { + memcpy(tmp_addr, slave->dev->dev_addr, ETH_ALEN); + slave->dev->set_mac_address(slave->dev, &sa); + memcpy(slave->dev->dev_addr, tmp_addr, ETH_ALEN); + } + + return error; +} + /************************ exported alb funcions ************************/ int @@ -1255,16 +1329,15 @@ bond_alb_xmit(struct sk_buff *skb, struc hash_size = 16; break; -#ifdef FIXME case ETH_P_IPX: - if (skb->nh.ipxh->ipx_checksum != + if (ipx_hdr(skb)->ipx_checksum != __constant_htons(IPX_NO_CHECKSUM)) { /* something is wrong with this packet */ do_tx_balance = 0; break; } - if (skb->nh.ipxh->ipx_type != + if (ipx_hdr(skb)->ipx_type != __constant_htons(IPX_TYPE_NCP)) { /* The only protocol worth balancing in * this family since it has an "ARP" like @@ -1277,7 +1350,6 @@ bond_alb_xmit(struct sk_buff *skb, struc hash_start = (char*)eth_data->h_dest; hash_size = ETH_ALEN; break; -#endif case ETH_P_ARP: do_tx_balance = 0; @@ -1437,8 +1509,8 @@ bond_alb_init_slave(struct bonding *bond { int err = 0; - err = alb_set_mac_addr(slave, slave->perm_hwaddr, - bond->alb_info.rlb_enabled); + err = alb_set_slave_mac_addr(slave, slave->perm_hwaddr, + bond->alb_info.rlb_enabled); if (err) { return err; } @@ -1562,10 +1634,61 @@ bond_alb_assign_current_slave(struct bon alb_swap_mac_addr(bond, swap_slave, new_slave); } else { /* set the new_slave to the bond mac address */ - alb_set_mac_addr(new_slave, bond->device->dev_addr, - bond->alb_info.rlb_enabled); + alb_set_slave_mac_addr(new_slave, bond->device->dev_addr, + bond->alb_info.rlb_enabled); /* fasten bond mac on new current slave */ alb_send_learning_packets(new_slave, bond->device->dev_addr); } } +int +bond_alb_set_mac_address(struct net_device *dev, void *addr) +{ + struct bonding *bond = dev->priv; + struct sockaddr *sa = addr; + struct slave *swap_slave = NULL; + int error = 0; + + if (!is_valid_ether_addr(sa->sa_data)) { + return -EADDRNOTAVAIL; + } + + error = alb_set_mac_address(bond, addr); + if (error) { + return error; + } + + memcpy(dev->dev_addr, sa->sa_data, dev->addr_len); + + /* If there is no current_slave there is nothing else to do. + * Otherwise we'll need to pass the new address to it and handle + * duplications. + */ + if (bond->current_slave == NULL) { + return 0; + } + + swap_slave = bond_get_first_slave(bond); + while (swap_slave) { + if (!memcmp(swap_slave->dev->dev_addr, dev->dev_addr, ETH_ALEN)) { + break; + } + swap_slave = bond_get_next_slave(bond, swap_slave); + } + + if (swap_slave) { + alb_swap_mac_addr(bond, swap_slave, bond->current_slave); + } else { + alb_set_slave_mac_addr(bond->current_slave, dev->dev_addr, + bond->alb_info.rlb_enabled); + + alb_send_learning_packets(bond->current_slave, dev->dev_addr); + if (bond->alb_info.rlb_enabled) { + /* inform clients mac address has changed */ + rlb_req_update_slave_clients(bond, bond->current_slave); + } + } + + return 0; +} + diff -prauN linux-2.6.0-test5/drivers/net/bonding/bond_alb.h wli-2.6.0-test5-bk12-25/drivers/net/bonding/bond_alb.h --- linux-2.6.0-test5/drivers/net/bonding/bond_alb.h 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/bonding/bond_alb.h 2003-09-25 19:15:59.000000000 -0700 @@ -17,6 +17,13 @@ * * The full GNU General Public License is included in this distribution in the * file called LICENSE. + * + * + * Changes: + * + * 2003/08/06 - Amir Noam + * - Add support for setting bond's MAC address with special + * handling required for ALB/TLB. */ #ifndef __BOND_ALB_H__ @@ -122,6 +129,7 @@ void bond_alb_handle_link_change(struct void bond_alb_assign_current_slave(struct bonding *bond, struct slave *new_slave); int bond_alb_xmit(struct sk_buff *skb, struct net_device *dev); void bond_alb_monitor(struct bonding *bond); +int bond_alb_set_mac_address(struct net_device *dev, void *addr); #endif /* __BOND_ALB_H__ */ diff -prauN linux-2.6.0-test5/drivers/net/bonding/bond_main.c wli-2.6.0-test5-bk12-25/drivers/net/bonding/bond_main.c --- linux-2.6.0-test5/drivers/net/bonding/bond_main.c 2003-09-08 12:50:28.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/bonding/bond_main.c 2003-09-25 19:15:59.000000000 -0700 @@ -278,7 +278,7 @@ * bonding round-robin mode ignoring links after failover/recovery * * 2003/03/17 - Jay Vosburgh - * - kmalloc fix (GPF_KERNEL to GPF_ATOMIC) reported by + * - kmalloc fix (GFP_KERNEL to GFP_ATOMIC) reported by * Shmulik dot Hen at intel.com. * - Based on discussion on mailing list, changed use of * update_slave_cnt(), created wrapper functions for adding/removing @@ -323,22 +323,22 @@ * 2003/03/18 - Amir Noam , * Tsippy Mendelson and * Shmulik Hen - * - Added support for IEEE 802.3ad Dynamic link aggregation mode. + * - Added support for IEEE 802.3ad Dynamic link aggregation mode. * * 2003/05/01 - Amir Noam - * - Added ABI version control to restore compatibility between - * new/old ifenslave and new/old bonding. + * - Added ABI version control to restore compatibility between + * new/old ifenslave and new/old bonding. * * 2003/05/01 - Shmulik Hen - * - Fixed bug in bond_release_all(): save old value of current_slave - * before setting it to NULL. - * - Changed driver versioning scheme to include version number instead - * of release date (that is already in another field). There are 3 - * fields X.Y.Z where: - * X - Major version - big behavior changes - * Y - Minor version - addition of features - * Z - Extra version - minor changes and bug fixes - * The current version is 1.0.0 as a base line. + * - Fixed bug in bond_release_all(): save old value of current_slave + * before setting it to NULL. + * - Changed driver versioning scheme to include version number instead + * of release date (that is already in another field). There are 3 + * fields X.Y.Z where: + * X - Major version - big behavior changes + * Y - Minor version - addition of features + * Z - Extra version - minor changes and bug fixes + * The current version is 1.0.0 as a base line. * * 2003/05/01 - Tsippy Mendelson and * Amir Noam @@ -371,6 +371,61 @@ * - Added support for Adaptive load balancing mode which is * equivalent to Transmit load balancing + Receive load balancing. * new version - 2.2.0 + * + * 2003/05/15 - Jay Vosburgh + * - Applied fix to activebackup_arp_monitor posted to bonding-devel + * by Tony Cureington . Fixes ARP + * monitor endless failover bug. Version to 2.2.10 + * + * 2003/05/20 - Amir Noam + * - Fixed bug in ABI version control - Don't commit to a specific + * ABI version if receiving unsupported ioctl commands. + * + * 2003/05/22 - Jay Vosburgh + * - Fix ifenslave -c causing bond to loose existing routes; + * added bond_set_mac_address() that doesn't require the + * bond to be down. + * - In conjunction with fix for ifenslave -c, in + * bond_change_active(), changing to the already active slave + * is no longer an error (it successfully does nothing). + * + * 2003/06/30 - Amir Noam + * - Fixed bond_change_active() for ALB/TLB modes. + * Version to 2.2.14. + * + * 2003/07/29 - Amir Noam + * - Fixed ARP monitoring bug. + * Version to 2.2.15. + * + * 2003/07/31 - Willy Tarreau + * - Fixed kernel panic when using ARP monitoring without + * setting bond's IP address. + * Version to 2.2.16. + * + * 2003/08/06 - Amir Noam + * - Back port from 2.6: use alloc_netdev(); fix /proc handling; + * made stats a part of bond struct so no need to allocate + * and free it separately; use standard list operations instead + * of pre-allocated array of bonds. + * Version to 2.3.0. + * + * 2003/08/07 - Jay Vosburgh , + * Amir Noam and + * Shmulik Hen + * - Propagating master's settings: Distinguish between modes that + * use a primary slave from those that don't, and propagate settings + * accordingly; Consolidate change_active opeartions and add + * reselect_active and find_best opeartions; Decouple promiscuous + * handling from the multicast mode setting; Add support for changing + * HW address and MTU with proper unwind; Consolidate procfs code, + * add CHANGENAME handler; Enhance netdev notification handling. + * Version to 2.4.0. + * + * 2003/09/15 - Stephen Hemminger , + * Amir Noam + * - Convert /proc to seq_file interface. + * Change /proc/net/bondX/info to /proc/net/bonding/bondX. + * Set version to 2.4.1. */ #include @@ -404,6 +459,8 @@ #include #include #include +#include +#include #include #include @@ -415,10 +472,10 @@ #include "bond_3ad.h" #include "bond_alb.h" -#define DRV_VERSION "2.2.0" -#define DRV_RELDATE "April 15, 2003" -#define DRV_NAME "bonding" -#define DRV_DESCRIPTION "Ethernet Channel Bonding Driver" +#define DRV_VERSION "2.4.1" +#define DRV_RELDATE "September 15, 2003" +#define DRV_NAME "bonding" +#define DRV_DESCRIPTION "Ethernet Channel Bonding Driver" static const char *version = DRV_NAME ".c:v" DRV_VERSION " (" DRV_RELDATE ")\n"; @@ -436,6 +493,11 @@ DRV_NAME ".c:v" DRV_VERSION " (" DRV_REL #define MAX_ARP_IP_TARGETS 16 #endif +#define USES_PRIMARY(mode) \ + (((mode) == BOND_MODE_ACTIVEBACKUP) || \ + ((mode) == BOND_MODE_TLB) || \ + ((mode) == BOND_MODE_ALB)) + struct bond_parm_tbl { char *modename; int mode; @@ -443,7 +505,7 @@ struct bond_parm_tbl { static int arp_interval = BOND_LINK_ARP_INTERV; static char *arp_ip_target[MAX_ARP_IP_TARGETS] = { NULL, }; -static unsigned long arp_target[MAX_ARP_IP_TARGETS] = { 0, } ; +static u32 arp_target[MAX_ARP_IP_TARGETS] = { 0, } ; static int arp_ip_count = 0; static u32 my_ip = 0; char *arp_target_hw_addr = NULL; @@ -474,8 +536,8 @@ static struct bond_parm_tbl bond_mode_tb { "balance-xor", BOND_MODE_XOR}, { "broadcast", BOND_MODE_BROADCAST}, { "802.3ad", BOND_MODE_8023AD}, -{ "tlb", BOND_MODE_TLB}, -{ "alb", BOND_MODE_ALB}, +{ "balance-tlb", BOND_MODE_TLB}, +{ "balance-alb", BOND_MODE_ALB}, { NULL, -1}, }; @@ -499,13 +561,16 @@ static struct bond_parm_tbl bond_lacp_tb }; static LIST_HEAD(bond_dev_list); +#ifdef CONFIG_PROC_FS +static struct proc_dir_entry *bond_proc_dir = NULL; +#endif MODULE_PARM(max_bonds, "i"); MODULE_PARM_DESC(max_bonds, "Max number of bonded devices"); MODULE_PARM(miimon, "i"); MODULE_PARM_DESC(miimon, "Link check interval in milliseconds"); MODULE_PARM(use_carrier, "i"); -MODULE_PARM_DESC(use_carrier, "Use netif_carrier_ok (vs MII ioctls) in miimon; 09 for off, 1 for on (default)"); +MODULE_PARM_DESC(use_carrier, "Use netif_carrier_ok (vs MII ioctls) in miimon; 0 for off, 1 for on (default)"); MODULE_PARM(mode, "s"); MODULE_PARM_DESC(mode, "Mode of operation : 0 for round robin, 1 for active-backup, 2 for xor"); MODULE_PARM(arp_interval, "i"); @@ -530,7 +595,6 @@ static struct net_device_stats *bond_get static void bond_mii_monitor(struct net_device *dev); static void loadbalance_arp_monitor(struct net_device *dev); static void activebackup_arp_monitor(struct net_device *dev); -static int bond_event(struct notifier_block *this, unsigned long event, void *ptr); static void bond_mc_list_destroy(struct bonding *bond); static void bond_mc_add(bonding_t *bond, void *addr, int alen); static void bond_mc_delete(bonding_t *bond, void *addr, int alen); @@ -544,30 +608,17 @@ static int bond_enslave(struct net_devic static int bond_release(struct net_device *master, struct net_device *slave); static int bond_release_all(struct net_device *master); static int bond_sethwaddr(struct net_device *master, struct net_device *slave); +static void change_active_interface(struct bonding *bond, struct slave *new); +static void reselect_active_interface(struct bonding *bond); +static struct slave *find_best_interface(struct bonding *bond); -/* - * bond_get_info is the interface into the /proc filesystem. This is - * a different interface than the BOND_INFO_QUERY ioctl. That is done - * through the generic networking ioctl interface, and bond_info_query - * is the internal function which provides that information. - */ -static int bond_get_info(char *buf, char **start, off_t offset, int length); - -/* Caller must hold bond->ptrlock for write */ -static inline struct slave* -bond_assign_current_slave(struct bonding *bond,struct slave *newslave) -{ - if ((bond_mode == BOND_MODE_TLB) || - (bond_mode == BOND_MODE_ALB)) { - bond_alb_assign_current_slave(bond, newslave); - } else { - bond->current_slave = newslave; - } - - return bond->current_slave; -} /* #define BONDING_DEBUG 1 */ +#ifdef BONDING_DEBUG +#define dprintk(x...) printk(x...) +#else /* BONDING_DEBUG */ +#define dprintk(x...) do {} while (0) +#endif /* BONDING_DEBUG */ /* several macros */ @@ -662,7 +713,7 @@ update_slave_cnt(bonding_t *bond, int in * belongs to . It returns in case it's needed. * Nothing is freed on return, structures are just unchained. * If the bond->current_slave pointer was pointing to , - * it's replaced with bond->next, or NULL if not applicable. + * it should be changed by the calling function. * * bond->lock held for writing by caller. */ @@ -696,17 +747,6 @@ bond_detach_slave(bonding_t *bond, slave update_slave_cnt(bond, -1); - /* no need to hold ptrlock since bond lock is - * already held for writing - */ - if (slave == bond->current_slave) { - if ( bond->next != (slave_t *)bond) { /* found one slave */ - bond_assign_current_slave(bond, bond->next); - } else { - bond_assign_current_slave(bond, NULL); - } - } - return slave; } @@ -1138,23 +1178,22 @@ static inline int dmi_same(struct dev_mc } /* - * Push the promiscuity flag down to all slaves + * Push the promiscuity flag down to appropriate slaves */ static void bond_set_promiscuity(bonding_t *bond, int inc) { slave_t *slave; - switch (multicast_mode) { - case BOND_MULTICAST_ACTIVE : - /* write lock already acquired */ - if (bond->current_slave != NULL) + + if (USES_PRIMARY(bond_mode)) { + if (bond->current_slave) { dev_set_promiscuity(bond->current_slave->dev, inc); - break; - case BOND_MULTICAST_ALL : - for (slave = bond->prev; slave != (slave_t*)bond; slave = slave->prev) + } + + } else { + for (slave = bond->prev; slave != (slave_t*)bond; + slave = slave->prev) { dev_set_promiscuity(slave->dev, inc); - break; - case BOND_MULTICAST_DISABLED : - break; + } } } @@ -1200,20 +1239,23 @@ static void set_multicast_list(struct ne bonding_t *bond = master->priv; struct dev_mc_list *dmi; - if (multicast_mode == BOND_MULTICAST_DISABLED) - return; - /* - * Lock the private data for the master - */ write_lock_bh(&bond->lock); - /* set promiscuity flag to slaves */ + /* + * Do promisc before checking multicast_mode + */ if ( (master->flags & IFF_PROMISC) && !(bond->flags & IFF_PROMISC) ) bond_set_promiscuity(bond, 1); if ( !(master->flags & IFF_PROMISC) && (bond->flags & IFF_PROMISC) ) bond_set_promiscuity(bond, -1); + if (multicast_mode == BOND_MULTICAST_DISABLED) { + bond->flags = master->flags; + write_unlock_bh(&bond->lock); + return; + } + /* set allmulti flag to slaves */ if ( (master->flags & IFF_ALLMULTI) && !(bond->flags & IFF_ALLMULTI) ) bond_set_allmulti(bond, 1); @@ -1245,32 +1287,40 @@ static void set_multicast_list(struct ne /* * Update the mc list and multicast-related flags for the new and - * old active slaves (if any) according to the multicast mode + * old active slaves (if any) according to the multicast mode, and + * promiscuous flags unconditionally. */ static void bond_mc_update(bonding_t *bond, slave_t *new, slave_t *old) { struct dev_mc_list *dmi; - switch(multicast_mode) { - case BOND_MULTICAST_ACTIVE : + if (USES_PRIMARY(bond_mode)) { if (bond->device->flags & IFF_PROMISC) { - if (old != NULL && new != old) + if (old) dev_set_promiscuity(old->dev, -1); - dev_set_promiscuity(new->dev, 1); + if (new) + dev_set_promiscuity(new->dev, 1); } + } + + switch(multicast_mode) { + case BOND_MULTICAST_ACTIVE : if (bond->device->flags & IFF_ALLMULTI) { - if (old != NULL && new != old) + if (old) dev_set_allmulti(old->dev, -1); - dev_set_allmulti(new->dev, 1); + if (new) + dev_set_allmulti(new->dev, 1); } /* first remove all mc addresses from old slave if any, and _then_ add them to new active slave */ - if (old != NULL && new != old) { + if (old) { for (dmi = bond->device->mc_list; dmi != NULL; dmi = dmi->next) dev_mc_delete(old->dev, dmi->dmi_addr, dmi->dmi_addrlen, 0); } - for (dmi = bond->device->mc_list; dmi != NULL; dmi = dmi->next) - dev_mc_add(new->dev, dmi->dmi_addr, dmi->dmi_addrlen, 0); + if (new) { + for (dmi = bond->device->mc_list; dmi != NULL; dmi = dmi->next) + dev_mc_add(new->dev, dmi->dmi_addr, dmi->dmi_addrlen, 0); + } break; case BOND_MULTICAST_ALL : /* nothing to do: mc list is already up-to-date on all slaves */ @@ -1386,7 +1436,7 @@ static int bond_enslave(struct net_devic * The application already set the master's * mac address to that of the first slave */ - memcpy(addr.sa_data, master_dev->dev_addr, ETH_ALEN); + memcpy(addr.sa_data, master_dev->dev_addr, master_dev->addr_len); addr.sa_family = slave_dev->type; err = slave_dev->set_mac_address(slave_dev, &addr); if (err) { @@ -1432,11 +1482,19 @@ static int bond_enslave(struct net_devic } } - if (multicast_mode == BOND_MULTICAST_ALL) { - /* set promiscuity level to new slave */ - if (master_dev->flags & IFF_PROMISC) + /* set promiscuity level to new slave */ + if (master_dev->flags & IFF_PROMISC) { + /* If the mode USES_PRIMARY, then the new slave gets the + * master's promisc (and mc) settings only if it becomes the + * current_slave, and that is taken care of later when calling + * bond_change_active() + */ + if (!USES_PRIMARY(bond_mode)) { dev_set_promiscuity(slave_dev, 1); + } + } + if (multicast_mode == BOND_MULTICAST_ALL) { /* set allmulti level to new slave */ if (master_dev->flags & IFF_ALLMULTI) dev_set_allmulti(slave_dev, 1); @@ -1549,9 +1607,7 @@ static int bond_enslave(struct net_devic #endif /* first slave or no active slave yet, and this link is OK, so make this interface the active one */ - bond_assign_current_slave(bond, new_slave); - bond_set_slave_active_flags(new_slave); - bond_mc_update(bond, new_slave, NULL); + change_active_interface(bond, new_slave); } else { #ifdef BONDING_DEBUG @@ -1559,11 +1615,14 @@ static int bond_enslave(struct net_devic #endif bond_set_slave_inactive_flags(new_slave); } - read_lock_irqsave(&(((struct in_device *)slave_dev->ip_ptr)->lock), rflags); - ifap= &(((struct in_device *)slave_dev->ip_ptr)->ifa_list); - ifa = *ifap; - my_ip = ifa->ifa_address; - read_unlock_irqrestore(&(((struct in_device *)slave_dev->ip_ptr)->lock), rflags); + if (((struct in_device *)slave_dev->ip_ptr) != NULL) { + read_lock_irqsave(&(((struct in_device *)slave_dev->ip_ptr)->lock), rflags); + ifap= &(((struct in_device *)slave_dev->ip_ptr)->ifa_list); + ifa = *ifap; + if (ifa != NULL) + my_ip = ifa->ifa_address; + read_unlock_irqrestore(&(((struct in_device *)slave_dev->ip_ptr)->lock), rflags); + } /* if there is a primary slave, remember it */ if (primary != NULL) { @@ -1598,7 +1657,7 @@ static int bond_enslave(struct net_devic /* first slave or no active slave yet, and this link * is OK, so make this interface the active one */ - bond_assign_current_slave(bond, new_slave); + change_active_interface(bond, new_slave); } /* if there is a primary slave, remember it */ @@ -1613,8 +1672,13 @@ static int bond_enslave(struct net_devic #endif /* always active in trunk mode */ new_slave->state = BOND_STATE_ACTIVE; + + /* In trunking mode there is little meaning to current_slave + * anyway (it holds no special properties of the bond device), + * so we can change it without calling change_active_interface() + */ if (bond->current_slave == NULL) - bond_assign_current_slave(bond, new_slave); + bond->current_slave = new_slave; } write_unlock_bh(&bond->lock); @@ -1705,6 +1769,13 @@ static int bond_change_active(struct net return -ENODEV; } + /* Verify that master_dev is indeed the master of slave_dev */ + if (!(slave_dev->flags & IFF_SLAVE) || + (slave_dev->master != master_dev)) { + + return -EINVAL; + } + bond = (struct bonding *) master_dev->priv; write_lock_bh(&bond->lock); slave = (slave_t *)bond; @@ -1717,67 +1788,46 @@ static int bond_change_active(struct net } } + /* + * Changing to the current active: do nothing; return success. + */ + if (newactive && (newactive == oldactive)) { + write_unlock_bh(&bond->lock); + return 0; + } + if ((newactive != NULL)&& (oldactive != NULL)&& - (newactive != oldactive)&& (newactive->link == BOND_LINK_UP)&& IS_UP(newactive->dev)) { - bond_set_slave_inactive_flags(oldactive); - bond_set_slave_active_flags(newactive); - bond_mc_update(bond, newactive, oldactive); - bond_assign_current_slave(bond, newactive); - printk("%s : activate %s(old : %s)\n", - master_dev->name, newactive->dev->name, - oldactive->dev->name); - } - else { + change_active_interface(bond, newactive); + } else { ret = -EINVAL; } write_unlock_bh(&bond->lock); return ret; } -/* Choose a new valid interface from the pool, set it active - * and make it the current slave. If no valid interface is - * found, the oldest slave in BACK state is choosen and - * activated. If none is found, it's considered as no - * interfaces left so the current slave is set to NULL. - * The result is a pointer to the current slave. - * - * Since this function sends messages tails through printk, the caller - * must have started something like `printk(KERN_INFO "xxxx ");'. +/** + * find_best_interface - select the best available slave to be the active one + * @bond: our bonding struct * * Warning: Caller must hold ptrlock for writing. */ -slave_t *change_active_interface(bonding_t *bond) +static struct slave *find_best_interface(struct bonding *bond) { - slave_t *newslave, *oldslave; - slave_t *bestslave = NULL; + struct slave *newslave, *oldslave; + struct slave *bestslave = NULL; int mintime; newslave = oldslave = bond->current_slave; if (newslave == NULL) { /* there were no active slaves left */ if (bond->next != (slave_t *)bond) { /* found one slave */ - newslave = bond_assign_current_slave(bond, bond->next); + newslave = bond->next; } else { - - printk (" but could not find any %s interface.\n", - (bond_mode == BOND_MODE_ACTIVEBACKUP) ? "backup":"other"); - bond_assign_current_slave(bond, NULL); return NULL; /* still no slave, return NULL */ } - } else if (bond_mode == BOND_MODE_ACTIVEBACKUP) { - /* make sure oldslave doesn't send arps - this could - * cause a ping-pong effect between interfaces since they - * would be able to tx arps - in active backup only one - * slave should be able to tx arps, and that should be - * the current_slave; the only exception is when all - * slaves have gone down, then only one non-current slave can - * send arps at a time; clearing oldslaves' mc list is handled - * later in this function. - */ - bond_set_slave_inactive_flags(oldslave); } mintime = updelay; @@ -1792,22 +1842,12 @@ slave_t *change_active_interface(bonding newslave = bond->primary_slave; } + /* remember where to stop iterating over the slaves */ + oldslave = newslave; + do { if (IS_UP(newslave->dev)) { if (newslave->link == BOND_LINK_UP) { - /* this one is immediately usable */ - if (bond_mode == BOND_MODE_ACTIVEBACKUP) { - bond_set_slave_active_flags(newslave); - bond_mc_update(bond, newslave, oldslave); - printk (" and making interface %s the active one.\n", - newslave->dev->name); - } - else { - printk (" and setting pointer to interface %s.\n", - newslave->dev->name); - } - - bond_assign_current_slave(bond, newslave); return newslave; } else if (newslave->link == BOND_LINK_BACK) { @@ -1820,46 +1860,105 @@ slave_t *change_active_interface(bonding } } while ((newslave = newslave->next) != oldslave); - /* no usable backup found, we'll see if we at least got a link that was - coming back for a long time, and could possibly already be usable. - */ - - if (bestslave != NULL) { - /* early take-over. */ - printk (" and making interface %s the active one %d ms earlier.\n", - bestslave->dev->name, - (updelay - bestslave->delay)*miimon); - - bestslave->delay = 0; - bestslave->link = BOND_LINK_UP; - bestslave->jiffies = jiffies; - bond_set_slave_active_flags(bestslave); - bond_mc_update(bond, bestslave, oldslave); - bond_assign_current_slave(bond, bestslave); - return bestslave; - } - - if ((bond_mode == BOND_MODE_ACTIVEBACKUP) && - (multicast_mode == BOND_MULTICAST_ACTIVE) && - (oldslave != NULL)) { - /* flush bonds (master's) mc_list from oldslave since it wasn't - * updated (and deleted) above - */ - bond_mc_list_flush(oldslave->dev, bond->device); - if (bond->device->flags & IFF_PROMISC) { - dev_set_promiscuity(oldslave->dev, -1); + return bestslave; +} + +/** + * change_active_interface - change the active slave into the specified one + * @bond: our bonding struct + * @new: the new slave to make the active one + * + * Set the new slave to the bond's settings and unset them on the old + * current_slave. + * Setting include flags, mc-list, promiscuity, allmulti, etc. + * + * If @new's link state is %BOND_LINK_BACK we'll set it to %BOND_LINK_UP, + * because it is apparently the best available slave we have, even though its + * updelay hasn't timed out yet. + * + * Warning: Caller must hold ptrlock for writing. + */ +static void change_active_interface(struct bonding *bond, struct slave *new) +{ + struct slave *old = bond->current_slave; + + if (old == new) { + return; + } + + if (new) { + if (new->link == BOND_LINK_BACK) { + if (USES_PRIMARY(bond_mode)) { + printk (KERN_INFO + "%s: making interface %s the new " + "active one %d ms earlier.\n", + bond->device->name, new->dev->name, + (updelay - new->delay) * miimon); + } + + new->delay = 0; + new->link = BOND_LINK_UP; + new->jiffies = jiffies; + + if (bond_mode == BOND_MODE_8023AD) { + bond_3ad_handle_link_change(new, BOND_LINK_UP); + } + + if ((bond_mode == BOND_MODE_TLB) || + (bond_mode == BOND_MODE_ALB)) { + bond_alb_handle_link_change(bond, new, BOND_LINK_UP); + } + } else { + if (USES_PRIMARY(bond_mode)) { + printk (KERN_INFO + "%s: making interface %s the new active one.\n", + bond->device->name, new->dev->name); + } } - if (bond->device->flags & IFF_ALLMULTI) { - dev_set_allmulti(oldslave->dev, -1); + } + + if (bond_mode == BOND_MODE_ACTIVEBACKUP) { + if (old) { + bond_set_slave_inactive_flags(old); + } + + if (new) { + bond_set_slave_active_flags(new); } } - printk (" but could not find any %s interface.\n", - (bond_mode == BOND_MODE_ACTIVEBACKUP) ? "backup":"other"); - - /* absolutely nothing found. let's return NULL */ - bond_assign_current_slave(bond, NULL); - return NULL; + if (USES_PRIMARY(bond_mode)) { + bond_mc_update(bond, new, old); + } + + if ((bond_mode == BOND_MODE_TLB) || + (bond_mode == BOND_MODE_ALB)) { + bond_alb_assign_current_slave(bond, new); + } else { + bond->current_slave = new; + } +} + +/** + * reselect_active_interface - select a new active slave, if needed + * @bond: our bonding struct + * + * This functions shoud be called when one of the following occurs: + * - The old current_slave has been released or lost its link. + * - The primary_slave has got its link back. + * - A slave has got its link back and there's no old current_slave. + * + * Warning: Caller must hold ptrlock for writing. + */ +static void reselect_active_interface(struct bonding *bond) +{ + struct slave *best_slave; + + best_slave = find_best_interface(bond); + + if (best_slave != bond->current_slave) { + change_active_interface(bond, best_slave); + } } /* @@ -1908,12 +2007,12 @@ static int bond_release(struct net_devic "of %s to a different address " "to avoid conflicts.\n", slave->name, - slave->dev_addr[0], - slave->dev_addr[1], - slave->dev_addr[2], - slave->dev_addr[3], - slave->dev_addr[4], - slave->dev_addr[5], + our_slave->perm_hwaddr[0], + our_slave->perm_hwaddr[1], + our_slave->perm_hwaddr[2], + our_slave->perm_hwaddr[3], + our_slave->perm_hwaddr[4], + our_slave->perm_hwaddr[5], bond->device->name, slave->name); } @@ -1926,31 +2025,29 @@ static int bond_release(struct net_devic bond_3ad_unbind_slave(our_slave); } - /* release the slave from its bond */ - bond_detach_slave(bond, our_slave); - - printk (KERN_INFO "%s: releasing %s interface %s", + printk (KERN_INFO "%s: releasing %s interface %s\n", master->name, (our_slave->state == BOND_STATE_ACTIVE) ? "active" : "backup", slave->name); - if (our_slave == old_current) { - /* find a new interface and be verbose */ - change_active_interface(bond); - } else { - printk(".\n"); + /* release the slave from its bond */ + bond_detach_slave(bond, our_slave); + + if (bond->primary_slave == our_slave) { + bond->primary_slave = NULL; } - + + if (bond->current_slave == our_slave) { + change_active_interface(bond, NULL); + reselect_active_interface(bond); + } + if (bond->current_slave == NULL) { printk(KERN_INFO "%s: now running without any active interface !\n", master->name); } - if (bond->primary_slave == our_slave) { - bond->primary_slave = NULL; - } - if ((bond_mode == BOND_MODE_TLB) || (bond_mode == BOND_MODE_ALB)) { /* must be called only after the slave has been @@ -1972,16 +2069,22 @@ static int bond_release(struct net_devic return -EINVAL; } + /* unset promiscuity level from slave */ + if (master->flags & IFF_PROMISC) { + /* If the mode USES_PRIMARY, then we should only remove its + * promisc settings if it was the current_slave, but that was + * already taken care of above when we detached the slave + */ + if (!USES_PRIMARY(bond_mode)) { + dev_set_promiscuity(slave, -1); + } + } + /* undo settings and restore original values */ - if (multicast_mode == BOND_MULTICAST_ALL) { /* flush master's mc_list from slave */ bond_mc_list_flush (slave, master); - /* unset promiscuity level from slave */ - if (master->flags & IFF_PROMISC) - dev_set_promiscuity(slave, -1); - /* unset allmulti level from slave */ if (master->flags & IFF_ALLMULTI) dev_set_allmulti(slave, -1); @@ -2048,7 +2151,7 @@ static int bond_release_all(struct net_d } old_current = bond->current_slave; - bond_assign_current_slave(bond, NULL); + change_active_interface(bond, NULL); bond->current_arp_slave = NULL; bond->primary_slave = NULL; @@ -2077,17 +2180,17 @@ static int bond_release_all(struct net_d */ write_unlock_bh(&bond->lock); - if (multicast_mode == BOND_MULTICAST_ALL - || (multicast_mode == BOND_MULTICAST_ACTIVE - && old_current == our_slave)) { + /* unset promiscuity level from slave */ + if (master->flags & IFF_PROMISC) { + if (!USES_PRIMARY(bond_mode)) { + dev_set_promiscuity(slave_dev, -1); + } + } + if (multicast_mode == BOND_MULTICAST_ALL) { /* flush master's mc_list from slave */ bond_mc_list_flush (slave_dev, master); - /* unset promiscuity level from slave */ - if (master->flags & IFF_PROMISC) - dev_set_promiscuity(slave_dev, -1); - /* unset allmulti level from slave */ if (master->flags & IFF_ALLMULTI) dev_set_allmulti(slave_dev, -1); @@ -2233,9 +2336,7 @@ static void bond_mii_monitor(struct net_ write_lock(&bond->ptrlock); if (slave == bond->current_slave) { /* find a new interface and be verbose */ - change_active_interface(bond); - } else { - printk(".\n"); + reselect_active_interface(bond); } write_unlock(&bond->ptrlock); slave_died = 1; @@ -2331,7 +2432,7 @@ static void bond_mii_monitor(struct net_ write_lock(&bond->ptrlock); if ( (bond->primary_slave != NULL) && (slave == bond->primary_slave) ) - change_active_interface(bond); + reselect_active_interface(bond); write_unlock(&bond->ptrlock); } else @@ -2377,40 +2478,8 @@ static void bond_mii_monitor(struct net_ /* no active interface at the moment or need to bring up the primary */ if (oldcurrent == NULL) { /* no active interface at the moment */ if (bestslave != NULL) { /* last chance to find one ? */ - if (bestslave->link == BOND_LINK_UP) { - printk (KERN_INFO - "%s: making interface %s the new active one.\n", - master->name, bestslave->dev->name); - } else { - printk (KERN_INFO - "%s: making interface %s the new " - "active one %d ms earlier.\n", - master->name, bestslave->dev->name, - (updelay - bestslave->delay) * miimon); - - bestslave->delay = 0; - bestslave->link = BOND_LINK_UP; - bestslave->jiffies = jiffies; - - /* notify ad that the link status has changed */ - if (bond_mode == BOND_MODE_8023AD) { - bond_3ad_handle_link_change(bestslave, BOND_LINK_UP); - } - - if ((bond_mode == BOND_MODE_TLB) || - (bond_mode == BOND_MODE_ALB)) { - bond_alb_handle_link_change(bond, bestslave, BOND_LINK_UP); - } - } - - if (bond_mode == BOND_MODE_ACTIVEBACKUP) { - bond_set_slave_active_flags(bestslave); - bond_mc_update(bond, bestslave, NULL); - } else if (bond_mode != BOND_MODE_8023AD) { - bestslave->state = BOND_STATE_ACTIVE; - } write_lock(&bond->ptrlock); - bond_assign_current_slave(bond, bestslave); + change_active_interface(bond, bestslave); write_unlock(&bond->ptrlock); } else if (slave_died) { /* print this message only once a slave has just died */ @@ -2494,7 +2563,7 @@ static void loadbalance_arp_monitor(stru "for interface %s, ", master->name, slave->dev->name); - change_active_interface(bond); + reselect_active_interface(bond); } else { printk(KERN_INFO "%s: interface %s is now up\n", @@ -2526,7 +2595,7 @@ static void loadbalance_arp_monitor(stru write_lock(&bond->ptrlock); if (slave == bond->current_slave) { - change_active_interface(bond); + reselect_active_interface(bond); } write_unlock(&bond->ptrlock); } @@ -2604,9 +2673,7 @@ static void activebackup_arp_monitor(str if ((bond->current_slave == NULL) && ((jiffies - slave->dev->trans_start) <= the_delta_in_ticks)) { - bond_assign_current_slave(bond, slave); - bond_set_slave_active_flags(slave); - bond_mc_update(bond, slave, NULL); + change_active_interface(bond, slave); bond->current_arp_slave = NULL; } else if (bond->current_slave != slave) { /* this slave has just come up but we @@ -2696,7 +2763,8 @@ static void activebackup_arp_monitor(str master->name, slave->dev->name); write_lock(&bond->ptrlock); - slave = change_active_interface(bond); + reselect_active_interface(bond); + slave = bond->current_slave; write_unlock(&bond->ptrlock); bond->current_arp_slave = slave; if (slave != NULL) { @@ -2715,13 +2783,10 @@ static void activebackup_arp_monitor(str bond->primary_slave->dev->name); /* primary is up so switch to it */ - bond_set_slave_inactive_flags(slave); - bond_mc_update(bond, bond->primary_slave, slave); write_lock(&bond->ptrlock); - bond_assign_current_slave(bond, bond->primary_slave); + change_active_interface(bond, bond->primary_slave); write_unlock(&bond->ptrlock); slave = bond->primary_slave; - bond_set_slave_active_flags(slave); slave->jiffies = jiffies; } else { bond->current_arp_slave = NULL; @@ -2730,10 +2795,8 @@ static void activebackup_arp_monitor(str /* the current slave must tx an arp to ensure backup slaves * rx traffic */ - if ((slave != NULL) && - (((jiffies - slave->dev->last_rx) >= the_delta_in_ticks) && - (my_ip != 0))) { - arp_send_all(slave); + if ((slave != NULL) && (my_ip != 0)) { + arp_send_all(slave); } } @@ -2766,7 +2829,7 @@ static void activebackup_arp_monitor(str /* if the link state is up at this point, we * mark it down - this can happen if we have * simultaneous link failures and - * change_active_interface doesn't make this + * reselect_active_interface doesn't make this * one the current slave so it is still marked * up when it is actually down */ @@ -2986,7 +3049,7 @@ static int bond_ioctl(struct net_device } else if (orig_app_abi_ver != app_abi_ver) { printk(KERN_ERR "bonding: Error: already using ifenslave ABI " - "version %d; to upgrade ifenslave to version %d," + "version %d; to upgrade ifenslave to version %d, " "you must first reload bonding.\n", orig_app_abi_ver, app_abi_ver); return -EINVAL; @@ -3011,15 +3074,9 @@ static int bond_ioctl(struct net_device case SIOCBONDRELEASE: ret = bond_release(master_dev, slave_dev); break; - case BOND_SETHWADDR_OLD: - case SIOCBONDSETHWADDR: - ret = bond_sethwaddr(master_dev, slave_dev); - break; case BOND_CHANGE_ACTIVE_OLD: case SIOCBONDCHANGEACTIVE: - if ((bond_mode == BOND_MODE_ACTIVEBACKUP) || - (bond_mode == BOND_MODE_TLB) || - (bond_mode == BOND_MODE_ALB)) { + if (USES_PRIMARY(bond_mode)) { ret = bond_change_active(master_dev, slave_dev); } else { @@ -3141,7 +3198,7 @@ static int bond_xmit_roundrobin(struct s dev_queue_xmit(skb); write_lock(&bond->ptrlock); - bond_assign_current_slave(bond, slave->next); + bond->current_slave = slave->next; write_unlock(&bond->ptrlock); read_unlock(&bond->lock); @@ -3285,10 +3342,10 @@ static int bond_xmit_activebackup(struct static struct net_device_stats *bond_get_stats(struct net_device *dev) { bonding_t *bond = dev->priv; - struct net_device_stats *stats = bond->stats, *sstats; + struct net_device_stats *stats = &(bond->stats), *sstats; slave_t *slave; - memset(bond->stats, 0, sizeof(struct net_device_stats)); + memset(stats, 0, sizeof(struct net_device_stats)); read_lock_bh(&bond->lock); @@ -3327,152 +3384,511 @@ static struct net_device_stats *bond_get return stats; } -static int bond_get_info(char *buf, char **start, off_t offset, int length) -{ - bonding_t *bond; - int len = 0; - off_t begin = 0; - u16 link; - slave_t *slave = NULL; +#ifdef CONFIG_PROC_FS + +#define SEQ_START_TOKEN ((void *)1) - len += sprintf(buf + len, "%s\n", version); +static void *bond_info_seq_start(struct seq_file *seq, loff_t *pos) +{ + struct bonding *bond = seq->private; + loff_t off = 0; + struct slave *slave; + /* make sure the bond won't be taken away */ read_lock(&dev_base_lock); - list_for_each_entry(bond, &bond_dev_list, bond_list) { - /* - * This function locks the mutex, so we can't lock it until - * afterwards - */ - link = bond_check_mii_link(bond); + read_lock_bh(&bond->lock); - len += sprintf(buf + len, "Bonding Mode: %s\n", - bond_mode_name()); + if (*pos == 0) { + return SEQ_START_TOKEN; + } - if ((bond_mode == BOND_MODE_ACTIVEBACKUP) || - (bond_mode == BOND_MODE_TLB) || - (bond_mode == BOND_MODE_ALB)) { - read_lock_bh(&bond->lock); - read_lock(&bond->ptrlock); - if (bond->current_slave != NULL) { - len += sprintf(buf + len, - "Currently Active Slave: %s\n", - bond->current_slave->dev->name); - } - read_unlock(&bond->ptrlock); - read_unlock_bh(&bond->lock); - } - - len += sprintf(buf + len, "MII Status: "); - len += sprintf(buf + len, - link == BMSR_LSTATUS ? "up\n" : "down\n"); - len += sprintf(buf + len, "MII Polling Interval (ms): %d\n", - miimon); - len += sprintf(buf + len, "Up Delay (ms): %d\n", - updelay * miimon); - len += sprintf(buf + len, "Down Delay (ms): %d\n", - downdelay * miimon); - len += sprintf(buf + len, "Multicast Mode: %s\n", - multicast_mode_name()); + for (slave = bond->prev; slave != (slave_t *)bond; + slave = slave->prev) { - read_lock_bh(&bond->lock); + if (++off == *pos) { + return slave; + } + } - if (bond_mode == BOND_MODE_8023AD) { - struct ad_info ad_info; + return NULL; +} - len += sprintf(buf + len, "\n802.3ad info\n"); +static void *bond_info_seq_next(struct seq_file *seq, void *v, loff_t *pos) +{ + struct bonding *bond = seq->private; + struct slave *slave = v; - if (bond_3ad_get_active_agg_info(bond, &ad_info)) { - len += sprintf(buf + len, "bond %s has no active aggregator\n", bond->device->name); - } else { - len += sprintf(buf + len, "Active Aggregator Info:\n"); + ++*pos; + if (v == SEQ_START_TOKEN) { + slave = bond->prev; + } else { + slave = slave->prev; + } - len += sprintf(buf + len, "\tAggregator ID: %d\n", ad_info.aggregator_id); - len += sprintf(buf + len, "\tNumber of ports: %d\n", ad_info.ports); - len += sprintf(buf + len, "\tActor Key: %d\n", ad_info.actor_key); - len += sprintf(buf + len, "\tPartner Key: %d\n", ad_info.partner_key); - len += sprintf(buf + len, "\tPartner Mac Address: %02x:%02x:%02x:%02x:%02x:%02x\n", - ad_info.partner_system[0], - ad_info.partner_system[1], - ad_info.partner_system[2], - ad_info.partner_system[3], - ad_info.partner_system[4], - ad_info.partner_system[5]); - } + return (slave == (struct slave *) bond) ? NULL : slave; +} + +static void bond_info_seq_stop(struct seq_file *seq, void *v) +{ + struct bonding *bond = seq->private; + + read_unlock_bh(&bond->lock); + read_unlock(&dev_base_lock); +} + +static void bond_info_show_master(struct seq_file *seq, struct bonding *bond) +{ + struct slave *curr; + + read_lock(&bond->ptrlock); + curr = bond->current_slave; + read_unlock(&bond->ptrlock); + + seq_printf(seq, "Bonding Mode: %s\n", bond_mode_name()); + + if (USES_PRIMARY(bond_mode)) { + if (curr) { + seq_printf(seq, + "Currently Active Slave: %s\n", + curr->dev->name); } + } - for (slave = bond->prev; slave != (slave_t *)bond; - slave = slave->prev) { - len += sprintf(buf + len, "\nSlave Interface: %s\n", slave->dev->name); + seq_printf(seq, "MII Status: %s\n", (curr) ? "up" : "down"); + seq_printf(seq, "MII Polling Interval (ms): %d\n", miimon); + seq_printf(seq, "Up Delay (ms): %d\n", updelay * miimon); + seq_printf(seq, "Down Delay (ms): %d\n", downdelay * miimon); + seq_printf(seq, "Multicast Mode: %s\n", multicast_mode_name()); - len += sprintf(buf + len, "MII Status: "); + if (bond_mode == BOND_MODE_8023AD) { + struct ad_info ad_info; - len += sprintf(buf + len, - slave->link == BOND_LINK_UP ? - "up\n" : "down\n"); - len += sprintf(buf + len, "Link Failure Count: %d\n", - slave->link_failure_count); - - if (app_abi_ver >= 1) { - len += sprintf(buf + len, - "Permanent HW addr: %02x:%02x:%02x:%02x:%02x:%02x\n", - slave->perm_hwaddr[0], - slave->perm_hwaddr[1], - slave->perm_hwaddr[2], - slave->perm_hwaddr[3], - slave->perm_hwaddr[4], - slave->perm_hwaddr[5]); - } + seq_puts(seq, "\n802.3ad info\n"); - if (bond_mode == BOND_MODE_8023AD) { - struct aggregator *agg = SLAVE_AD_INFO(slave).port.aggregator; + if (bond_3ad_get_active_agg_info(bond, &ad_info)) { + seq_printf(seq, "bond %s has no active aggregator\n", + bond->device->name); + } else { + seq_printf(seq, "Active Aggregator Info:\n"); - if (agg) { - len += sprintf(buf + len, "Aggregator ID: %d\n", - agg->aggregator_identifier); - } else { - len += sprintf(buf + len, "Aggregator ID: N/A\n"); - } - } + seq_printf(seq, "\tAggregator ID: %d\n", + ad_info.aggregator_id); + seq_printf(seq, "\tNumber of ports: %d\n", + ad_info.ports); + seq_printf(seq, "\tActor Key: %d\n", + ad_info.actor_key); + seq_printf(seq, "\tPartner Key: %d\n", + ad_info.partner_key); + seq_printf(seq, "\tPartner Mac Address: %02x:%02x:%02x:%02x:%02x:%02x\n", + ad_info.partner_system[0], + ad_info.partner_system[1], + ad_info.partner_system[2], + ad_info.partner_system[3], + ad_info.partner_system[4], + ad_info.partner_system[5]); } - read_unlock_bh(&bond->lock); + } +} - /* - * Figure out the calcs for the /proc/net interface - */ - *start = buf + (offset - begin); - len -= (offset - begin); - if (len > length) { - len = length; +static void bond_info_show_slave(struct seq_file *seq, const struct slave *slave) +{ + seq_printf(seq, "\nSlave Interface: %s\n", slave->dev->name); + seq_printf(seq, "MII Status: %s\n", + (slave->link == BOND_LINK_UP) ? "up" : "down"); + seq_printf(seq, "Link Failure Count: %d\n", + slave->link_failure_count); + + if (app_abi_ver >= 1) { + seq_printf(seq, + "Permanent HW addr: %02x:%02x:%02x:%02x:%02x:%02x\n", + slave->perm_hwaddr[0], + slave->perm_hwaddr[1], + slave->perm_hwaddr[2], + slave->perm_hwaddr[3], + slave->perm_hwaddr[4], + slave->perm_hwaddr[5]); + } + + if (bond_mode == BOND_MODE_8023AD) { + const struct aggregator *agg + = SLAVE_AD_INFO(slave).port.aggregator; + + if (agg) { + seq_printf(seq, "Aggregator ID: %d\n", + agg->aggregator_identifier); + } else { + seq_puts(seq, "Aggregator ID: N/A\n"); } - if (len < 0) { - len = 0; + } +} + +static int bond_info_seq_show(struct seq_file *seq, void *v) +{ + if (v == SEQ_START_TOKEN) { + seq_printf(seq, "%s\n", version); + bond_info_show_master(seq, seq->private); + } else { + bond_info_show_slave(seq, v); + } + + return 0; +} + +static struct seq_operations bond_info_seq_ops = { + .start = bond_info_seq_start, + .next = bond_info_seq_next, + .stop = bond_info_seq_stop, + .show = bond_info_seq_show, +}; + +static int bond_info_open(struct inode *inode, struct file *file) +{ + struct seq_file *seq; + struct proc_dir_entry *proc; + int rc; + + rc = seq_open(file, &bond_info_seq_ops); + if (!rc) { + /* recover the pointer buried in proc_dir_entry data */ + seq = file->private_data; + proc = PDE(inode); + seq->private = proc->data; + } + return rc; +} + +static struct file_operations bond_info_fops = { + .owner = THIS_MODULE, + .open = bond_info_open, + .read = seq_read, + .llseek = seq_lseek, + .release = seq_release, +}; + +static int bond_create_proc_info(struct bonding *bond) +{ + struct net_device *dev = bond->device; + + if (bond_proc_dir) { + bond->bond_proc_file = create_proc_entry(dev->name, + S_IRUGO, + bond_proc_dir); + if (bond->bond_proc_file == NULL) { + printk(KERN_WARNING + "%s: Cannot create /proc/net/bonding/%s\n", + dev->name, dev->name); + } else { + bond->bond_proc_file->data = bond; + bond->bond_proc_file->proc_fops = &bond_info_fops; + bond->bond_proc_file->owner = THIS_MODULE; + memcpy(bond->procdir_name, dev->name, IFNAMSIZ); } + } + + return 0; +} +static void bond_destroy_proc_info(struct bonding *bond) +{ + if (bond_proc_dir && bond->bond_proc_file) { + remove_proc_entry(bond->procdir_name, bond_proc_dir); + memset(bond->procdir_name, 0, IFNAMSIZ); + bond->bond_proc_file = NULL; } - read_unlock(&dev_base_lock); +} +#endif /* CONFIG_PROC_FS */ + +/* + * Change HW address + * + * Note that many devices must be down to change the HW address, and + * downing the master releases all slaves. We can make bonds full of + * bonding devices to test this, however. + */ +static inline int +bond_set_mac_address(struct net_device *dev, void *addr) +{ + struct bonding *bond = dev->priv; + struct sockaddr *sa = addr, tmp_sa; + struct slave *slave; + int error; + + dprintk(KERN_INFO "bond_set_mac_address %p %s\n", dev, + dev->name); - return len; + if (!is_valid_ether_addr(sa->sa_data)) { + return -EADDRNOTAVAIL; + } + + for (slave = bond->prev; slave != (struct slave *)bond; + slave = slave->prev) { + dprintk(KERN_INFO "bond_set_mac: slave %p %s\n", slave, + slave->dev->name); + if (slave->dev->set_mac_address == NULL) { + error = -EOPNOTSUPP; + dprintk(KERN_INFO "bond_set_mac EOPNOTSUPP %s\n", + slave->dev->name); + goto unwind; + } + + error = slave->dev->set_mac_address(slave->dev, addr); + if (error) { + /* TODO: consider downing the slave + * and retry ? + * User should expect communications + * breakage anyway until ARP finish + * updating, so... + */ + dprintk(KERN_INFO "bond_set_mac err %d %s\n", + error, slave->dev->name); + goto unwind; + } + } + + /* success */ + memcpy(dev->dev_addr, sa->sa_data, dev->addr_len); + return 0; + +unwind: + memcpy(tmp_sa.sa_data, dev->dev_addr, dev->addr_len); + tmp_sa.sa_family = dev->type; + + for (slave = slave->next; slave != bond->next; + slave = slave->next) { + int tmp_error; + + tmp_error = slave->dev->set_mac_address(slave->dev, &tmp_sa); + if (tmp_error) { + dprintk(KERN_INFO "bond_set_mac_address: " + "unwind err %d dev %s\n", + tmp_error, slave->dev->name); + } + } + + return error; } -static int bond_event(struct notifier_block *this, unsigned long event, - void *ptr) +/* + * Change the MTU of all of a master's slaves to match the master + */ +static inline int +bond_change_mtu(struct net_device *dev, int newmtu) +{ + bonding_t *bond = dev->priv; + slave_t *slave; + int error; + + dprintk(KERN_INFO "CM: b %p nm %d\n", bond, newmtu); + for (slave = bond->prev; slave != (slave_t *)bond; + slave = slave->prev) { + dprintk(KERN_INFO "CM: s %p s->p %p c_m %p\n", slave, + slave->prev, slave->dev->change_mtu); + if (slave->dev->change_mtu) { + error = slave->dev->change_mtu(slave->dev, newmtu); + } else { + slave->dev->mtu = newmtu; + error = 0; + } + + if (error) { + /* If we failed to set the slave's mtu to the new value + * we must abort the operation even in ACTIVE_BACKUP + * mode, because if we allow the backup slaves to have + * different mtu values than the active slave we'll + * need to change their mtu when doing a failover. That + * means changing their mtu from timer context, which + * is probably not a good idea. + */ + dprintk(KERN_INFO "bond_change_mtu err %d %s\n", + error, slave->dev->name); + goto unwind; + } + } + + dev->mtu = newmtu; + return 0; + + +unwind: + for (slave = slave->next; slave != bond->next; + slave = slave->next) { + + if (slave->dev->change_mtu) { + slave->dev->change_mtu(slave->dev, dev->mtu); + } else { + slave->dev->mtu = dev->mtu; + } + } + + return error; +} + +/* + * Change device name + */ +static inline int bond_event_changename(struct bonding *bond) +{ +#ifdef CONFIG_PROC_FS + bond_destroy_proc_info(bond); + bond_create_proc_info(bond); +#endif + + return NOTIFY_DONE; +} + +static int bond_master_netdev_event(unsigned long event, struct net_device *event_dev) +{ + struct bonding *bond, *event_bond = NULL; + + list_for_each_entry(bond, &bond_dev_list, bond_list) { + if (bond == event_dev->priv) { + event_bond = bond; + break; + } + } + + if (event_bond == NULL) { + return NOTIFY_DONE; + } + + switch (event) { + case NETDEV_CHANGENAME: + return bond_event_changename(event_bond); + case NETDEV_UNREGISTER: + /* + * TODO: remove a bond from the list? + */ + break; + default: + break; + } + + return NOTIFY_DONE; +} + +static int bond_slave_netdev_event(unsigned long event, struct net_device *event_dev) { - struct net_device *event_dev = (struct net_device *)ptr; struct net_device *master = event_dev->master; - if (event == NETDEV_UNREGISTER && master != NULL) - bond_release(master, event_dev); + switch (event) { + case NETDEV_UNREGISTER: + if (master != NULL) { + bond_release(master, event_dev); + } + break; + case NETDEV_CHANGE: + /* + * TODO: is this what we get if somebody + * sets up a hierarchical bond, then rmmod's + * one of the slave bonding devices? + */ + break; + case NETDEV_DOWN: + /* + * ... Or is it this? + */ + break; + case NETDEV_CHANGEMTU: + /* + * TODO: Should slaves be allowed to + * independently alter their MTU? For + * an active-backup bond, slaves need + * not be the same type of device, so + * MTUs may vary. For other modes, + * slaves arguably should have the + * same MTUs. To do this, we'd need to + * take over the slave's change_mtu + * function for the duration of their + * servitude. + */ + break; + case NETDEV_CHANGENAME: + /* + * TODO: handle changing the primary's name + */ + break; + default: + break; + } return NOTIFY_DONE; } +/* + * bond_netdev_event: handle netdev notifier chain events. + * + * This function receives events for the netdev chain. The caller (an + * ioctl handler calling notifier_call_chain) holds the necessary + * locks for us to safely manipulate the slave devices (RTNL lock, + * dev_probe_lock). + */ +static int bond_netdev_event(struct notifier_block *this, unsigned long event, void *ptr) +{ + struct net_device *event_dev = (struct net_device *)ptr; + unsigned short flags; + int res = NOTIFY_DONE; + + dprintk(KERN_INFO "bond_netdev_event n_b %p ev %lx ptr %p\n", + this, event, ptr); + + flags = event_dev->flags & (IFF_MASTER | IFF_SLAVE); + switch (flags) { + case IFF_MASTER: + res = bond_master_netdev_event(event, event_dev); + break; + case IFF_SLAVE: + res = bond_slave_netdev_event(event, event_dev); + break; + default: + /* A master that is also a slave ? */ + break; + } + + return res; +} + static struct notifier_block bond_netdev_notifier = { - .notifier_call = bond_event, + .notifier_call = bond_netdev_event, }; +static inline void bond_deinit(struct net_device *dev) +{ + struct bonding *bond = dev->priv; + + list_del(&bond->bond_list); + +#ifdef CONFIG_PROC_FS + bond_destroy_proc_info(bond); +#endif +} + +static void bond_free_all(void) +{ + struct bonding *bond, *nxt; + + list_for_each_entry_safe(bond, nxt, &bond_dev_list, bond_list) { + struct net_device *dev = bond->device; + + unregister_netdev(dev); + bond_deinit(dev); + free_netdev(dev); + } + +#ifdef CONFIG_PROC_FS + if (bond_proc_dir) { + remove_proc_entry(DRV_NAME, proc_net); + bond_proc_dir = NULL; + } +#endif +} + +/* + * Does not allocate but creates a /proc entry. + * Allowed to fail. + */ static int __init bond_init(struct net_device *dev) { - bonding_t *bond; + struct bonding *bond; int count; #ifdef BONDING_DEBUG @@ -3483,15 +3899,16 @@ static int __init bond_init(struct net_d /* initialize rwlocks */ rwlock_init(&bond->lock); rwlock_init(&bond->ptrlock); - - /* space is reserved for stats in alloc_netdev call. */ - bond->stats = (struct net_device_stats *)(bond + 1); + + /* Initialize pointers */ bond->next = bond->prev = (slave_t *)bond; bond->current_slave = NULL; bond->current_arp_slave = NULL; bond->device = dev; /* Initialize the device structure. */ + dev->set_mac_address = bond_set_mac_address; + switch (bond_mode) { case BOND_MODE_ACTIVEBACKUP: dev->hard_start_xmit = bond_xmit_activebackup; @@ -3511,6 +3928,7 @@ static int __init bond_init(struct net_d case BOND_MODE_TLB: case BOND_MODE_ALB: dev->hard_start_xmit = bond_alb_xmit; + dev->set_mac_address = bond_alb_set_mac_address; break; default: printk(KERN_ERR "Unknown bonding mode %d\n", bond_mode); @@ -3522,7 +3940,7 @@ static int __init bond_init(struct net_d dev->stop = bond_close; dev->set_multicast_list = set_multicast_list; dev->do_ioctl = bond_ioctl; - + dev->change_mtu = bond_change_mtu; dev->tx_queue_len = 0; dev->flags |= IFF_MASTER|IFF_MULTICAST; #ifdef CONFIG_NET_FASTROUTE @@ -3549,30 +3967,13 @@ static int __init bond_init(struct net_d } else { printk("out ARP monitoring\n"); } - + #ifdef CONFIG_PROC_FS - bond->bond_proc_dir = proc_mkdir(dev->name, proc_net); - if (bond->bond_proc_dir == NULL) { - printk(KERN_ERR "%s: Cannot init /proc/net/%s/\n", - dev->name, dev->name); - return -ENOMEM; - } - bond->bond_proc_dir->owner = THIS_MODULE; - - bond->bond_proc_info_file = - create_proc_info_entry("info", 0, bond->bond_proc_dir, - bond_get_info); - if (bond->bond_proc_info_file == NULL) { - printk(KERN_ERR "%s: Cannot init /proc/net/%s/info\n", - dev->name, dev->name); - remove_proc_entry(dev->name, proc_net); - return -ENOMEM; - } - bond->bond_proc_info_file->owner = THIS_MODULE; -#endif /* CONFIG_PROC_FS */ - + bond_create_proc_info(bond); +#endif list_add_tail(&bond->bond_list, &bond_dev_list); + return 0; } @@ -3605,6 +4006,7 @@ bond_parse_parm(char *mode_arg, struct b return -1; } + static int __init bonding_init(void) { int no; @@ -3625,6 +4027,12 @@ static int __init bonding_init(void) } } + if (USES_PRIMARY(bond_mode)) { + multicast_mode = BOND_MULTICAST_ACTIVE; + } else { + multicast_mode = BOND_MULTICAST_ALL; + } + if (multicast) { multicast_mode = bond_parse_parm(multicast, bond_mc_tbl); if (multicast_mode == -1) { @@ -3811,7 +4219,7 @@ static int __init bonding_init(void) arp_interval = 0; } else { u32 ip = in_aton(arp_ip_target[arp_ip_count]); - *(u32 *)(arp_ip_target[arp_ip_count]) = ip; + arp_target[arp_ip_count] = ip; } } @@ -3837,9 +4245,7 @@ static int __init bonding_init(void) "link failures! see bonding.txt for details.\n"); } - if ((primary != NULL) && (bond_mode != BOND_MODE_ACTIVEBACKUP) && - (bond_mode != BOND_MODE_TLB) && - (bond_mode != BOND_MODE_ALB)){ + if ((primary != NULL) && !USES_PRIMARY(bond_mode)) { /* currently, using a primary only makes sense * in active backup, TLB or ALB modes */ @@ -3850,50 +4256,72 @@ static int __init bonding_init(void) primary = NULL; } - register_netdevice_notifier(&bond_netdev_notifier); +#ifdef CONFIG_PROC_FS + bond_proc_dir = proc_mkdir(DRV_NAME, proc_net); + if (bond_proc_dir == NULL) { + printk(KERN_WARNING + "bonding_init(): can not create /proc/net/" DRV_NAME); + } else { + bond_proc_dir->owner = THIS_MODULE; + } +#endif + + rtnl_lock(); + err = 0; for (no = 0; no < max_bonds; no++) { struct net_device *dev; - char name[IFNAMSIZ]; - snprintf(name, IFNAMSIZ, "bond%d", no); - - dev = alloc_netdev(sizeof(bonding_t) - + sizeof(struct net_device_stats), - name, ether_setup); - if (!dev) - return -ENOMEM; + dev = alloc_netdev(sizeof(struct bonding), "", ether_setup); + if (!dev) { + err = -ENOMEM; + goto out_err; + } + + err = dev_alloc_name(dev, "bond%d"); + if (err < 0) { + free_netdev(dev); + goto out_err; + } + + /* bond_init() must be called after dev_alloc_name() (for the + * /proc files), but before register_netdevice(), because we + * need to set function pointers. + */ + err = bond_init(dev); + if (err < 0) { + free_netdev(dev); + goto out_err; + } - dev->init = bond_init; SET_MODULE_OWNER(dev); - if ( (err = register_netdev(dev)) ) { -#ifdef BONDING_DEBUG - printk(KERN_INFO "%s: register_netdev failed %d\n", - dev->name, err); -#endif - kfree(dev); - return err; - } + err = register_netdevice(dev); + if (err < 0) { + bond_deinit(dev); + free_netdev(dev); + goto out_err; + } } + + rtnl_unlock(); + register_netdevice_notifier(&bond_netdev_notifier); + return 0; + +out_err: + rtnl_unlock(); + + /* free and unregister all bonds that were successfully added */ + bond_free_all(); + + return err; } static void __exit bonding_exit(void) { - struct bonding *bond, *nxt; - unregister_netdevice_notifier(&bond_netdev_notifier); - - list_for_each_entry_safe(bond, nxt, &bond_dev_list, bond_list) { - struct net_device *dev = bond->device; -#ifdef CONFIG_PROC_FS - remove_proc_entry("info", bond->bond_proc_dir); - remove_proc_entry(dev->name, proc_net); -#endif - unregister_netdev(dev); - free_netdev(dev); - } + bond_free_all(); } module_init(bonding_init); diff -prauN linux-2.6.0-test5/drivers/net/bonding/bonding.h wli-2.6.0-test5-bk12-25/drivers/net/bonding/bonding.h --- linux-2.6.0-test5/drivers/net/bonding/bonding.h 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/bonding/bonding.h 2003-09-25 19:15:59.000000000 -0700 @@ -99,10 +99,10 @@ typedef struct bonding { rwlock_t ptrlock; struct timer_list mii_timer; struct timer_list arp_timer; - struct net_device_stats *stats; + struct net_device_stats stats; #ifdef CONFIG_PROC_FS - struct proc_dir_entry *bond_proc_dir; - struct proc_dir_entry *bond_proc_info_file; + struct proc_dir_entry *bond_proc_file; + char procdir_name[IFNAMSIZ]; #endif /* CONFIG_PROC_FS */ struct list_head bond_list; struct net_device *device; diff -prauN linux-2.6.0-test5/drivers/net/cs89x0.c wli-2.6.0-test5-bk12-25/drivers/net/cs89x0.c --- linux-2.6.0-test5/drivers/net/cs89x0.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/cs89x0.c 2003-09-25 19:15:59.000000000 -0700 @@ -90,7 +90,6 @@ or override something. */ #include #include -#include /* * Set this to zero to disable DMA code diff -prauN linux-2.6.0-test5/drivers/net/depca.c wli-2.6.0-test5-bk12-25/drivers/net/depca.c --- linux-2.6.0-test5/drivers/net/depca.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/depca.c 2003-09-25 19:15:59.000000000 -0700 @@ -1,4 +1,4 @@ -/* depca.c: A DIGITAL DEPCA & EtherWORKS ethernet driver for linux. +/* depca.c: A DIGITAL DEPCA & EtherWORKS ethernet driver for linux. Written 1994, 1995 by David C. Davies. @@ -253,7 +253,8 @@ #include #include #include -#include +#include +#include #include #include @@ -265,7 +266,6 @@ #endif #ifdef CONFIG_EISA -#include #include #endif @@ -305,21 +305,21 @@ static int depca_debug = 1; ** EISA bus defines */ #define DEPCA_EISA_IO_PORTS 0x0c00 /* I/O port base address, slot 0 */ -#define MAX_EISA_SLOTS 16 -#define EISA_SLOT_INC 0x1000 /* ** ISA Bus defines */ #define DEPCA_RAM_BASE_ADDRESSES {0xc0000,0xd0000,0xe0000,0x00000} -#define DEPCA_IO_PORTS {0x300, 0x200, 0} #define DEPCA_TOTAL_SIZE 0x10 -static short mem_chkd; -/* -** Adapter ID for the MCA EtherWORKS DE210/212 adapter -*/ -#define DE212_ID 0x6def +static struct { + u_long iobase; + struct platform_device *device; +} depca_io_ports[] = { + { 0x300, NULL }, + { 0x200, NULL }, + { 0 , NULL }, +}; /* ** Name <-> Adapter mapping @@ -330,34 +330,86 @@ static short mem_chkd; "DE210","DE212",\ "DE422",\ ""} -static enum { + +static char* __initdata depca_signature[] = DEPCA_SIGNATURE; + +enum depca_type { DEPCA, de100, de101, de200, de201, de202, de210, de212, de422, unknown -} adapter; +}; + +static char depca_string[] = "depca"; + +static int depca_device_remove (struct device *device); #ifdef CONFIG_EISA struct eisa_device_id depca_eisa_ids[] = { - { "DEC4220" }, + { "DEC4220", de422 }, { "" } }; static int depca_eisa_probe (struct device *device); -static int depca_eisa_remove (struct device *device); struct eisa_driver depca_eisa_driver = { .id_table = depca_eisa_ids, .driver = { - .name = "depca", + .name = depca_string, .probe = depca_eisa_probe, - .remove = __devexit_p (depca_eisa_remove) + .remove = __devexit_p (depca_device_remove) } }; #endif +#ifdef CONFIG_MCA +/* +** Adapter ID for the MCA EtherWORKS DE210/212 adapter +*/ +#define DE210_ID 0x628d +#define DE212_ID 0x6def + +static short depca_mca_adapter_ids[] = { + DE210_ID, + DE212_ID, + 0x0000 +}; + +static char *depca_mca_adapter_name[] = { + "DEC EtherWORKS MC Adapter (DE210)", + "DEC EtherWORKS MC Adapter (DE212)", + NULL +}; + +static enum depca_type depca_mca_adapter_type[] = { + de210, + de212, + 0 +}; + +static int depca_mca_probe (struct device *); + +static struct mca_driver depca_mca_driver = { + .id_table = depca_mca_adapter_ids, + .driver = { + .name = depca_string, + .bus = &mca_bus_type, + .probe = depca_mca_probe, + .remove = __devexit_p(depca_device_remove), + }, +}; +#endif + +static int depca_isa_probe (struct device *); + +static struct device_driver depca_isa_driver = { + .name = depca_string, + .bus = &platform_bus_type, + .probe = depca_isa_probe, + .remove = __devexit_p(depca_device_remove), +}; + /* ** Miscellaneous info... */ #define DEPCA_STRLEN 16 -#define MAX_NUM_DEPCAS 2 /* ** Memory Alignment. Each descriptor is 4 longwords long. To force a @@ -402,10 +454,13 @@ struct depca_init { #define DEPCA_PKT_BIN_SZ 128 /* Should be >=100 unless you increase DEPCA_PKT_STAT_SZ */ struct depca_private { - char devname[DEPCA_STRLEN]; /* Device Product String */ char adapter_name[DEPCA_STRLEN]; /* /proc/ioports string */ - char adapter; /* Adapter type */ - char mca_slot; /* MCA slot, if MCA else -1 */ + enum depca_type adapter; /* Adapter type */ + enum { + DEPCA_BUS_MCA = 1, + DEPCA_BUS_ISA, + DEPCA_BUS_EISA, + } depca_bus; /* type of bus */ struct depca_init init_block; /* Shadow Initialization block */ /* CPU address space fields */ struct depca_rx_desc *rx_ring; /* Pointer to start of RX descriptor ring */ @@ -467,45 +522,39 @@ static void set_multicast_list(struct ne /* ** Private functions */ -static int depca_hw_init(struct net_device *dev, u_long ioaddr, int mca_slot); static void depca_init_ring(struct net_device *dev); static int depca_rx(struct net_device *dev); static int depca_tx(struct net_device *dev); static void LoadCSRs(struct net_device *dev); static int InitRestartDepca(struct net_device *dev); -static void DepcaSignature(char *name, u_long paddr); +static int DepcaSignature(char *name, u_long paddr); static int DevicePresent(u_long ioaddr); static int get_hw_addr(struct net_device *dev); static void SetMulticastFilter(struct net_device *dev); -static void isa_probe(struct net_device *dev, u_long iobase); -#ifdef CONFIG_MCA -static void mca_probe(struct net_device *dev, u_long iobase); -#endif -static struct net_device *alloc_device(struct net_device *dev, u_long iobase); -static int depca_dev_index(char *s); -static struct net_device *insert_device(struct net_device *dev, u_long iobase, int (*init) (struct net_device *)); static int load_packet(struct net_device *dev, struct sk_buff *skb); static void depca_dbg_open(struct net_device *dev); -#ifdef MODULE -static int autoprobed = 1, loading_module = 1; -# else static u_char de1xx_irq[] __initdata = { 2, 3, 4, 5, 7, 9, 0 }; static u_char de2xx_irq[] __initdata = { 5, 9, 10, 11, 15, 0 }; static u_char de422_irq[] __initdata = { 5, 9, 10, 11, 0 }; static u_char *depca_irq; -static int autoprobed, loading_module; -#endif /* MODULE */ -static char name[DEPCA_STRLEN]; -static int num_depcas, num_eth; +static int irq; +static int io; +static char *adapter_name; static int mem; /* For loadable module assignment use insmod mem=0x????? .... */ -static char *adapter_name; /* = '\0'; If no PROM when loadable module - use insmod adapter_name=DE??? ... - bss initializes this to zero - */ +module_param (irq, int, 0); +module_param (io, int, 0); +module_param (adapter_name, charp, 0); +module_param (mem, int, 0); +MODULE_PARM_DESC(irq, "DEPCA IRQ number"); +MODULE_PARM_DESC(io, "DEPCA I/O base address"); +MODULE_PARM_DESC(adapter_name, "DEPCA adapter name"); +MODULE_PARM_DESC(mem, "DEPCA shared memory address"); +MODULE_LICENSE("GPL"); + /* ** Miscellaneous defines... */ @@ -513,52 +562,30 @@ static char *adapter_name; /* = '\0'; outw(CSR0, DEPCA_ADDR);\ outw(STOP, DEPCA_DATA) -int __init depca_probe(struct net_device *dev) -{ - int tmp = num_depcas, status = -ENODEV; - u_long iobase = dev->base_addr; - - SET_MODULE_OWNER(dev); - - if ((iobase == 0) && loading_module) { - printk("Autoprobing is not supported when loading a module based driver.\n"); - status = -EIO; - } else { -#ifdef CONFIG_MCA - mca_probe(dev, iobase); -#endif - isa_probe(dev, iobase); -#ifdef CONFIG_EISA - eisa_driver_register (&depca_eisa_driver); -#endif - - if ((tmp == num_depcas) && (iobase != 0) && loading_module) { - printk("%s: depca_probe() cannot find device at 0x%04lx.\n", dev->name, iobase); - } - - /* - ** Walk the device list to check that at least one device - ** initialised OK - */ - for (; (dev->priv == NULL) && (dev->next != NULL); dev = dev->next); - - if (dev->priv) - status = 0; - if (iobase == 0) - autoprobed = 1; - } - - return status; -} - -static int __init depca_hw_init(struct net_device *dev, u_long ioaddr, int mca_slot) +static int __init depca_hw_init (struct net_device *dev, struct device *device) { struct depca_private *lp; int i, j, offset, netRAM, mem_len, status = 0; s16 nicsr; - u_long mem_start = 0, mem_base[] = DEPCA_RAM_BASE_ADDRESSES; - int is_eisa = ((ioaddr & 0x0fff) == DEPCA_EISA_IO_PORTS); + u_long ioaddr; + u_long mem_start; + + /* + * We are now supposed to enter this function with the + * following fields filled with proper values : + * + * dev->base_addr + * lp->mem_start + * lp->depca_bus + * lp->adapter + * + * dev->irq can be set if known from device configuration (on + * MCA or EISA) or module option. Otherwise, it will be auto + * detected. + */ + ioaddr = dev->base_addr; + STOP_DEPCA; nicsr = inb(DEPCA_NICSR); @@ -569,24 +596,34 @@ static int __init depca_hw_init(struct n return -ENXIO; } - do { - strcpy(name, (adapter_name ? adapter_name : "")); - mem_start = (mem ? mem & 0xf0000 : mem_base[mem_chkd++]); - DepcaSignature(name, mem_start); - } while (!mem && mem_base[mem_chkd] && (adapter == unknown)); + lp = (struct depca_private *) dev->priv; + mem_start = lp->mem_start; - if ((adapter == unknown) || !mem_start) { /* DEPCA device not found */ + if (!mem_start || lp->adapter < DEPCA || lp->adapter >=unknown) return -ENXIO; - } - dev->base_addr = ioaddr; + printk ("%s: %s at 0x%04lx", + device->bus_id, depca_signature[lp->adapter], ioaddr); + + switch (lp->depca_bus) { +#ifdef CONFIG_MCA + case DEPCA_BUS_MCA: + printk(" (MCA slot %d)", to_mca_device(device)->slot + 1); + break; +#endif + +#ifdef CONFIG_EISA + case DEPCA_BUS_EISA: + printk(" (EISA slot %d)", to_eisa_device(device)->slot); + break; +#endif - if (mca_slot != -1) { - printk("%s: %s at 0x%04lx (MCA slot %d)", dev->name, name, ioaddr, mca_slot); - } else if (is_eisa) { /* EISA slot address */ - printk("%s: %s at 0x%04lx (EISA slot %d)", dev->name, name, ioaddr, (int) ((ioaddr >> 12) & 0x0f)); - } else { /* ISA port address */ - printk("%s: %s at 0x%04lx", dev->name, name, ioaddr); + case DEPCA_BUS_ISA: + break; + + default: + printk("Unknown DEPCA bus %d\n", lp->depca_bus); + return -ENXIO; } printk(", h/w address "); @@ -601,18 +638,20 @@ static int __init depca_hw_init(struct n printk("%2.2x", dev->dev_addr[i]); /* Set up the maximum amount of network RAM(kB) */ - netRAM = ((adapter != DEPCA) ? 64 : 48); - if ((nicsr & _128KB) && (adapter == de422)) + netRAM = ((lp->adapter != DEPCA) ? 64 : 48); + if ((nicsr & _128KB) && (lp->adapter == de422)) netRAM = 128; - offset = 0x0000; /* Shared Memory Base Address */ if (nicsr & BUF) { - offset = 0x8000; /* 32kbyte RAM offset */ nicsr &= ~BS; /* DEPCA RAM in top 32k */ netRAM -= 32; + + /* Only EISA/ISA needs start address to be re-computed */ + if (lp->depca_bus != DEPCA_BUS_MCA) + mem_start += 0x8000; } - mem_start += offset; /* (E)ISA start address */ + if ((mem_len = (NUM_RX_DESC * (sizeof(struct depca_rx_desc) + RX_BUFF_SZ) + NUM_TX_DESC * (sizeof(struct depca_tx_desc) + TX_BUFF_SZ) + sizeof(struct depca_init))) > (netRAM << 10)) { printk(",\n requests %dkB RAM: only %dkB is available!\n", (mem_len >> 10), netRAM); @@ -622,23 +661,14 @@ static int __init depca_hw_init(struct n printk(",\n has %dkB RAM at 0x%.5lx", netRAM, mem_start); /* Enable the shadow RAM. */ - if (adapter != DEPCA) { + if (lp->adapter != DEPCA) { nicsr |= SHE; outb(nicsr, DEPCA_NICSR); } - /* Define the device private memory */ - if (!is_eisa) { - dev->priv = (void *) kmalloc(sizeof(struct depca_private), GFP_KERNEL); - if (dev->priv == NULL) - return -ENOMEM; - } - lp = (struct depca_private *) dev->priv; - memset((char *) dev->priv, 0, sizeof(struct depca_private)); - lp->adapter = adapter; - lp->mca_slot = mca_slot; lp->lock = SPIN_LOCK_UNLOCKED; - sprintf(lp->adapter_name, "%s (%s)", name, dev->name); + sprintf(lp->adapter_name, "%s (%s)", + depca_signature[lp->adapter], device->bus_id); status = -EBUSY; /* Initialisation Block */ @@ -702,7 +732,6 @@ static int __init depca_hw_init(struct n /* To auto-IRQ we enable the initialization-done and DMA err, interrupts. For now we will always get a DMA error. */ if (dev->irq < 2) { -#ifndef MODULE unsigned char irqnum; unsigned long irq_mask, delay; @@ -725,6 +754,9 @@ static int __init depca_hw_init(struct n case de422: depca_irq = de422_irq; break; + + default: + break; /* Not reached */ } /* Trigger an initialization just for the interrupt. */ @@ -733,6 +765,7 @@ static int __init depca_hw_init(struct n delay = jiffies + HZ/50; while (time_before(jiffies, delay)) yield(); + irqnum = probe_irq_off(irq_mask); status = -ENXIO; @@ -746,13 +779,11 @@ static int __init depca_hw_init(struct n printk(" and uses IRQ%d.\n", dev->irq); } - status = -ENXIO; if (!dev->irq) { printk(" but incorrect IRQ line detected.\n"); - goto out_priv; + return -ENXIO; } } -#endif /* MODULE */ } else { printk(" and assigned IRQ%d.\n", dev->irq); } @@ -773,17 +804,14 @@ static int __init depca_hw_init(struct n dev->mem_start = 0; - /* Fill in the generic field of the device structure. */ - if (!is_eisa) - ether_setup(dev); + device->driver_data = dev; + SET_NETDEV_DEV (dev, device); + + register_netdev (dev); return 0; - out_priv: - if (!is_eisa) { - kfree(dev->priv); - dev->priv = NULL; - } else { - unregister_netdev (dev); - } + + out_priv: + return status; } @@ -1284,215 +1312,265 @@ static void SetMulticastFilter(struct ne return; } +static int __init depca_common_init (u_long ioaddr, struct net_device **devp) +{ + int status = 0; + + if (!request_region (ioaddr, DEPCA_TOTAL_SIZE, depca_string)) { + status = -EBUSY; + goto out; + } + + if (DevicePresent(ioaddr)) { + status = -ENODEV; + goto out_release; + } + + if (!(*devp = alloc_etherdev (sizeof (struct depca_private)))) { + status = -ENOMEM; + goto out_release; + } + + return 0; + + out_release: + release_region (ioaddr, DEPCA_TOTAL_SIZE); + out: + return status; +} + #ifdef CONFIG_MCA /* ** Microchannel bus I/O device probe */ -static void __init mca_probe(struct net_device *dev, u_long ioaddr) +static int __init depca_mca_probe(struct device *device) { unsigned char pos[2]; unsigned char where; - unsigned long iobase; - int irq; - int slot = 0; + unsigned long iobase, mem_start; + int irq, err; + struct mca_device *mdev = to_mca_device (device); + struct net_device *dev; + struct depca_private *lp; /* - ** See if we've been here before. - */ - if ((!ioaddr && autoprobed) || (ioaddr && !loading_module)) - return; - - if (MCA_bus) { - /* - ** Search for the adapter. If an address has been given, search - ** specifically for the card at that address. Otherwise find the - ** first card in the system. - */ - while ((dev != NULL) && ((slot = mca_find_adapter(DE212_ID, slot)) != MCA_NOTFOUND)) { - pos[0] = mca_read_stored_pos(slot, 2); - pos[1] = mca_read_stored_pos(slot, 3); - - /* - ** IO of card is handled by bits 1 and 2 of pos0. - ** - ** bit2 bit1 IO - ** 0 0 0x2c00 - ** 0 1 0x2c10 - ** 1 0 0x2c20 - ** 1 1 0x2c30 - */ - where = (pos[0] & 6) >> 1; - iobase = 0x2c00 + (0x10 * where); - - if ((ioaddr) && (ioaddr != iobase)) { - /* - ** Card was found, but not at the right IO location. Continue - ** scanning from the next MCA slot up for another card. - */ - slot++; - continue; - } - - /* - ** Found the adapter we were looking for. Now start setting it up. - ** - ** First work on decoding the IRQ. It's stored in the lower 4 bits - ** of pos1. Bits are as follows (from the ADF file): - ** - ** Bits - ** 3 2 1 0 IRQ - ** -------------------- - ** 0 0 1 0 5 - ** 0 0 0 1 9 - ** 0 1 0 0 10 - ** 1 0 0 0 11 - * */ - where = pos[1] & 0x0f; - switch (where) { - case 1: - irq = 9; - break; - case 2: - irq = 5; - break; - case 4: - irq = 10; - break; - case 8: - irq = 11; - break; - default: - printk("%s: mca_probe IRQ error. You should never get here (%d).\n", dev->name, where); - return; - } - - /* - ** Shared memory address of adapter is stored in bits 3-5 of pos0. - ** They are mapped as follows: - ** - ** Bit - ** 5 4 3 Memory Addresses - ** 0 0 0 C0000-CFFFF (64K) - ** 1 0 0 C8000-CFFFF (32K) - ** 0 0 1 D0000-DFFFF (64K) - ** 1 0 1 D8000-DFFFF (32K) - ** 0 1 0 E0000-EFFFF (64K) - ** 1 1 0 E8000-EFFFF (32K) - */ - where = (pos[0] & 0x18) >> 3; - mem = 0xc0000 + (where * 0x10000); - if (pos[0] & 0x20) { - mem += 0x8000; - } + ** Search for the adapter. If an address has been given, search + ** specifically for the card at that address. Otherwise find the + ** first card in the system. + */ + + pos[0] = mca_device_read_stored_pos(mdev, 2); + pos[1] = mca_device_read_stored_pos(mdev, 3); - /* - ** Get everything allocated and initialized... (almost just - ** like the ISA and EISA probes) - */ - if (!request_region (iobase, DEPCA_TOTAL_SIZE, "depca")) { - if (autoprobed) - printk(KERN_WARNING "%s: region already allocated at 0x%04lx.\n", dev->name, iobase); - goto next; - } - if (DevicePresent(iobase) != 0) { - /* - ** If the MCA configuration says the card should be here, - ** it really should be here. - */ - printk(KERN_ERR "%s: MCA reports card at 0x%lx but it is not responding.\n", dev->name, iobase); - goto release_next; - } + /* + ** IO of card is handled by bits 1 and 2 of pos0. + ** + ** bit2 bit1 IO + ** 0 0 0x2c00 + ** 0 1 0x2c10 + ** 1 0 0x2c20 + ** 1 1 0x2c30 + */ + where = (pos[0] & 6) >> 1; + iobase = 0x2c00 + (0x10 * where); - if (!(dev = alloc_device(dev, iobase))) - goto release_next; + /* + ** Found the adapter we were looking for. Now start setting it up. + ** + ** First work on decoding the IRQ. It's stored in the lower 4 bits + ** of pos1. Bits are as follows (from the ADF file): + ** + ** Bits + ** 3 2 1 0 IRQ + ** -------------------- + ** 0 0 1 0 5 + ** 0 0 0 1 9 + ** 0 1 0 0 10 + ** 1 0 0 0 11 + */ + where = pos[1] & 0x0f; + switch (where) { + case 1: + irq = 9; + break; + case 2: + irq = 5; + break; + case 4: + irq = 10; + break; + case 8: + irq = 11; + break; + default: + printk("%s: mca_probe IRQ error. You should never get here (%d).\n", dev->name, where); + return -EINVAL; + } - num_eth++; - dev->irq = irq; - if (depca_hw_init(dev, iobase, slot)) - goto release_next; + /* + ** Shared memory address of adapter is stored in bits 3-5 of pos0. + ** They are mapped as follows: + ** + ** Bit + ** 5 4 3 Memory Addresses + ** 0 0 0 C0000-CFFFF (64K) + ** 1 0 0 C8000-CFFFF (32K) + ** 0 0 1 D0000-DFFFF (64K) + ** 1 0 1 D8000-DFFFF (32K) + ** 0 1 0 E0000-EFFFF (64K) + ** 1 1 0 E8000-EFFFF (32K) + */ + where = (pos[0] & 0x18) >> 3; + mem_start = 0xc0000 + (where * 0x10000); + if (pos[0] & 0x20) { + mem_start += 0x8000; + } + + /* claim the slot */ + strncpy(mdev->name, depca_mca_adapter_name[mdev->index], + sizeof(mdev->name)); + mca_device_set_claim(mdev, 1); + + /* + ** Get everything allocated and initialized... (almost just + ** like the ISA and EISA probes) + */ + irq = mca_device_transform_irq(mdev, irq); + iobase = mca_device_transform_ioport(mdev, iobase); + + if ((err = depca_common_init (iobase, &dev))) + goto out_unclaim; + + dev->irq = irq; + dev->base_addr = iobase; + lp = dev->priv; + lp->depca_bus = DEPCA_BUS_MCA; + lp->adapter = depca_mca_adapter_type[mdev->index]; + lp->mem_start = mem_start; + + if ((err = depca_hw_init(dev, device))) + goto out_free; - /* - ** Adapter initialized correctly: Name it in - ** /proc/mca. - */ - mca_set_adapter_name(slot, "DE210/212 Ethernet Adapter"); - mca_mark_as_used(slot); - num_depcas++; - - /* - ** If this is a probe by a module, return after setting up the - ** given card. - */ - if (ioaddr) - return; - - /* - ** Set up to check the next slot and loop. - */ - slot++; - continue; + return 0; - release_next: - release_region (iobase, DEPCA_TOTAL_SIZE); - next: - slot++; - } - } + out_free: + free_netdev (dev); + release_region (iobase, DEPCA_TOTAL_SIZE); + out_unclaim: + mca_device_set_claim(mdev, 0); - return; + return err;; } #endif /* ** ISA bus I/O device probe */ -static void __init isa_probe(struct net_device *dev, u_long ioaddr) + +static void depca_platform_release (struct device *device) { - int i = num_depcas, maxSlots; - s32 ports[] = DEPCA_IO_PORTS; + struct platform_device *pldev; - if (!ioaddr && autoprobed) - return; /* Been here before ! */ - if (ioaddr > 0x400) - return; /* EISA Address */ - if (i >= MAX_NUM_DEPCAS) - return; /* Too many ISA adapters */ - - if (ioaddr == 0) { /* Autoprobing */ - maxSlots = MAX_NUM_DEPCAS; - } else { /* Probe a specific location */ - ports[i] = ioaddr; - maxSlots = i + 1; - } - - for (; (i < maxSlots) && (dev != NULL) && ports[i]; i++) { - if (!request_region (ports[i], DEPCA_TOTAL_SIZE, "depca")) { - if (autoprobed) - printk("%s: region already allocated at 0x%04x.\n", dev->name, ports[i]); + /* free device */ + pldev = to_platform_device (device); + kfree (pldev); +} + +static void __init depca_platform_probe (void) +{ + int i; + struct platform_device *pldev; + + for (i = 0; depca_io_ports[i].iobase; i++) { + depca_io_ports[i].device = NULL; + + /* if an address has been specified on the command + * line, use it (if valid) */ + if (io && io != depca_io_ports[i].iobase) + continue; + + if (!(pldev = kmalloc (sizeof (*pldev), GFP_KERNEL))) continue; - } - if (DevicePresent(ports[i])) { - release_region (ports[i], DEPCA_TOTAL_SIZE); + memset (pldev, 0, sizeof (*pldev)); + pldev->name = depca_string; + pldev->id = i; + pldev->dev.platform_data = (void *) depca_io_ports[i].iobase; + pldev->dev.release = depca_platform_release; + depca_io_ports[i].device = pldev; + + if (platform_device_register (pldev)) { + kfree (pldev); + depca_io_ports[i].device = NULL; continue; } - if (!(dev = alloc_device(dev, ports[i]))) { - release_region (ports[i], DEPCA_TOTAL_SIZE); - continue; + if (!pldev->dev.driver) { + /* The driver was not bound to this device, there was + * no hardware at this address. Unregister it, as the + * release fuction will take care of freeing the + * allocated structure */ + + depca_io_ports[i].device = NULL; + platform_device_unregister (pldev); } + } +} - num_eth++; +static enum depca_type __init depca_shmem_probe (ulong *mem_start) +{ + u_long mem_base[] = DEPCA_RAM_BASE_ADDRESSES; + enum depca_type adapter = unknown; + int i; - if (depca_hw_init(dev, ports[i], -1)) { - release_region (ports[i], DEPCA_TOTAL_SIZE); - continue; - } + for (i = 0; mem_base[i]; i++) { + *mem_start = mem ? mem : mem_base[i]; + adapter = DepcaSignature (adapter_name, *mem_start); + if (adapter != unknown) + break; + } + + return adapter; +} - num_depcas++; +static int __init depca_isa_probe (struct device *device) +{ + struct net_device *dev; + struct depca_private *lp; + u_long ioaddr, mem_start = 0; + enum depca_type adapter = unknown; + int status = 0; + + ioaddr = (u_long) device->platform_data; + + if ((status = depca_common_init (ioaddr, &dev))) + goto out; + + adapter = depca_shmem_probe (&mem_start); + + if (adapter == unknown) { + status = -ENODEV; + goto out_free; } - return; + dev->base_addr = ioaddr; + dev->irq = irq; /* Use whatever value the user gave + * us, and 0 if he didn't. */ + lp = dev->priv; + lp->depca_bus = DEPCA_BUS_ISA; + lp->adapter = adapter; + lp->mem_start = mem_start; + + if ((status = depca_hw_init(dev, device))) + goto out_free; + + return 0; + + out_free: + free_netdev (dev); + release_region (ioaddr, DEPCA_TOTAL_SIZE); + out: + return status; } /* @@ -1504,202 +1582,120 @@ static int __init depca_eisa_probe (stru { struct eisa_device *edev; struct net_device *dev; - u_long iobase; + struct depca_private *lp; + u_long ioaddr, mem_start; int status = 0; edev = to_eisa_device (device); - iobase = edev->base_addr + DEPCA_EISA_IO_PORTS; + ioaddr = edev->base_addr + DEPCA_EISA_IO_PORTS; - if (!request_region (iobase, DEPCA_TOTAL_SIZE, "depca")) { - status = -EBUSY; + if ((status = depca_common_init (ioaddr, &dev))) goto out; - } - - if (DevicePresent(iobase)) { - status = -ENODEV; - goto out_release; - } - if (!(dev = init_etherdev (NULL, sizeof (struct depca_private)))) { - status = -ENOMEM; - goto out_release; - } - - eisa_set_drvdata (edev, dev); + /* It would have been nice to get card configuration from the + * card. Unfortunately, this register is write-only (shares + * it's address with the ethernet prom)... As we don't parse + * the EISA configuration structures (yet... :-), just rely on + * the ISA probing to sort it out... */ + + depca_shmem_probe (&mem_start); - if ((status = depca_hw_init(dev, iobase, -1))) + dev->base_addr = ioaddr; + dev->irq = irq; + lp = dev->priv; + lp->depca_bus = DEPCA_BUS_EISA; + lp->adapter = edev->id.driver_data; + lp->mem_start = mem_start; + + if ((status = depca_hw_init(dev, device))) goto out_free; - - num_depcas++; + return 0; out_free: - kfree (dev); - out_release: - release_region (iobase, DEPCA_TOTAL_SIZE); + free_netdev (dev); + release_region (ioaddr, DEPCA_TOTAL_SIZE); out: return status; } +#endif -static int __devexit depca_eisa_remove (struct device *device) +static int __devexit depca_device_remove (struct device *device) { struct net_device *dev; - struct eisa_device *edev; struct depca_private *lp; + int bus; - edev = to_eisa_device (device); - dev = eisa_get_drvdata (edev); + dev = device->driver_data; lp = dev->priv; unregister_netdev (dev); iounmap (lp->sh_mem); release_mem_region (lp->mem_start, lp->mem_len); release_region (dev->base_addr, DEPCA_TOTAL_SIZE); - kfree (dev); + bus = lp->depca_bus; + free_netdev (dev); return 0; } -#endif - -/* -** Search the entire 'eth' device list for a fixed probe. If a match isn't -** found then check for an autoprobe or unused device location. If they -** are not available then insert a new device structure at the end of -** the current list. -*/ -static struct net_device *__init alloc_device(struct net_device *dev, u_long iobase) -{ - struct net_device *adev = NULL; - int fixed = 0, new_dev = 0; - - num_eth = depca_dev_index(dev->name); - if (loading_module) - return dev; - - while (1) { - if (((dev->base_addr == DEPCA_NDA) || (dev->base_addr == 0)) && !adev) { - adev = dev; - } else if ((dev->priv == NULL) && (dev->base_addr == iobase)) { - fixed = 1; - } else { - if (dev->next == NULL) { - new_dev = 1; - } else if (strncmp(dev->next->name, "eth", 3) != 0) { - new_dev = 1; - } - } - if ((dev->next == NULL) || new_dev || fixed) - break; - dev = dev->next; - num_eth++; - } - if (adev && !fixed) { - dev = adev; - num_eth = depca_dev_index(dev->name); - new_dev = 0; - } - - if (((dev->next == NULL) && ((dev->base_addr != DEPCA_NDA) && (dev->base_addr != 0)) && !fixed) || new_dev) { - num_eth++; /* New device */ - dev = insert_device(dev, iobase, depca_probe); - } - - return dev; -} - -/* -** If at end of eth device list and can't use current entry, malloc -** one up. If memory could not be allocated, print an error message. -*/ -static struct net_device *__init insert_device(struct net_device *dev, u_long iobase, int (*init) (struct net_device *)) -{ - struct net_device *new; - - new = (struct net_device *) kmalloc(sizeof(struct net_device), GFP_KERNEL); - if (new == NULL) { - printk("eth%d: Device not initialised, insufficient memory\n", num_eth); - return NULL; - } else { - new->next = dev->next; - dev->next = new; - dev = dev->next; /* point to the new device */ - if (num_eth > 9999) { - sprintf(dev->name, "eth????"); /* New device name */ - } else { - sprintf(dev->name, "eth%d", num_eth); /* New device name */ - } - dev->base_addr = iobase; /* assign the io address */ - dev->init = init; /* initialisation routine */ - } - - return dev; -} - -static int __init depca_dev_index(char *s) -{ - int i = 0, j = 0; - - for (; *s; s++) { - if (isdigit(*s)) { - j = 1; - i = (i * 10) + (*s - '0'); - } else if (j) - break; - } - - return i; -} /* ** Look for a particular board name in the on-board Remote Diagnostics ** and Boot (readb) ROM. This will also give us a clue to the network RAM ** base address. */ -static void __init DepcaSignature(char *name, u_long paddr) +static int __init DepcaSignature(char *name, u_long base_addr) { u_int i, j, k; - const char *signatures[] = DEPCA_SIGNATURE; void *ptr; char tmpstr[16]; + u_long prom_addr = base_addr + 0xc000; + u_long mem_addr = base_addr + 0x8000; /* 32KB */ + + /* Can't reserve the prom region, it is already marked as + * used, at least on x86. Instead, reserve a memory region a + * board would certainly use. If it works, go ahead. If not, + * run like hell... */ + + if (!request_mem_region (mem_addr, 16, depca_string)) + return unknown; /* Copy the first 16 bytes of ROM */ - ptr = ioremap(paddr + 0xc000, 16); + + ptr = ioremap(prom_addr, 16); if (ptr == NULL) { - printk(KERN_ERR "depca: I/O remap failed at %lx\n", paddr + 0xc000); - adapter = unknown; - return; + printk(KERN_ERR "depca: I/O remap failed at %lx\n", prom_addr); + return unknown; } for (i = 0; i < 16; i++) { tmpstr[i] = readb(ptr + i); } iounmap(ptr); + release_mem_region (mem_addr, 16); + /* Check if PROM contains a valid string */ - for (i = 0; *signatures[i] != '\0'; i++) { - for (j = 0, k = 0; j < 16 && k < strlen(signatures[i]); j++) { - if (signatures[i][k] == tmpstr[j]) { /* track signature */ + for (i = 0; *depca_signature[i] != '\0'; i++) { + for (j = 0, k = 0; j < 16 && k < strlen(depca_signature[i]); j++) { + if (depca_signature[i][k] == tmpstr[j]) { /* track signature */ k++; } else { /* lost signature; begin search again */ k = 0; } } - if (k == strlen(signatures[i])) + if (k == strlen(depca_signature[i])) break; } /* Check if name string is valid, provided there's no PROM */ - if (*name && (i == unknown)) { - for (i = 0; *signatures[i] != '\0'; i++) { - if (strcmp(name, signatures[i]) == 0) + if (name && *name && (i == unknown)) { + for (i = 0; *depca_signature[i] != '\0'; i++) { + if (strcmp(name, depca_signature[i]) == 0) break; } } - /* Update search results */ - strcpy(name, signatures[i]); - adapter = i; - - return; + return i; } /* @@ -1773,10 +1769,11 @@ static int __init DevicePresent(u_long i static int __init get_hw_addr(struct net_device *dev) { u_long ioaddr = dev->base_addr; + struct depca_private *lp = dev->priv; int i, k, tmp, status = 0; u_short j, x, chksum; - x = (((adapter == de100) || (adapter == de101)) ? 1 : 0); + x = (((lp->adapter == de100) || (lp->adapter == de101)) ? 1 : 0); for (i = 0, k = 0, j = 0; j < 3; j++) { k <<= 1; @@ -2083,55 +2080,40 @@ static int depca_ioctl(struct net_device return status; } -#ifdef MODULE -static struct net_device thisDepca; -static int irq = 7; /* EDIT THESE LINE FOR YOUR CONFIGURATION */ -static int io = 0x200; /* Or use the irq= io= options to insmod */ -MODULE_PARM(irq, "i"); -MODULE_PARM(io, "i"); -MODULE_PARM_DESC(irq, "DEPCA IRQ number"); -MODULE_PARM_DESC(io, "DEPCA I/O base address"); - -/* See depca_probe() for autoprobe messages when a module */ -int init_module(void) +static int __init depca_module_init (void) { - thisDepca.irq = irq; - thisDepca.base_addr = io; - thisDepca.init = depca_probe; + int err = 0; - if (register_netdev(&thisDepca) != 0) - return -EIO; - - return 0; +#if CONFIG_MCA + err = mca_register_driver (&depca_mca_driver); +#endif +#ifdef CONFIG_EISA + err |= eisa_driver_register (&depca_eisa_driver); +#endif + err |= driver_register (&depca_isa_driver); + depca_platform_probe (); + + return err; } -void cleanup_module(void) +static void __exit depca_module_exit (void) { - struct depca_private *lp = thisDepca.priv; - - unregister_netdev(&thisDepca); - if (lp) { - iounmap(lp->sh_mem); - release_mem_region (lp->mem_start, lp->mem_len); -#ifdef CONFIG_MCA - if (lp->mca_slot != -1) - mca_mark_as_unused(lp->mca_slot); + int i; +#if CONFIG_MCA + mca_unregister_driver (&depca_mca_driver); #endif - kfree(lp); - thisDepca.priv = NULL; - } - thisDepca.irq = 0; +#ifdef CONFIG_EISA + eisa_driver_unregister (&depca_eisa_driver); +#endif + driver_unregister (&depca_isa_driver); - release_region(thisDepca.base_addr, DEPCA_TOTAL_SIZE); + for (i = 0; depca_io_ports[i].iobase; i++) { + if (depca_io_ports[i].device) { + platform_device_unregister (depca_io_ports[i].device); + depca_io_ports[i].device = NULL; + } + } } -#endif /* MODULE */ -MODULE_LICENSE("GPL"); - -/* - * Local variables: - * compile-command: "gcc -D__KERNEL__ -I/linux/include -Wall -Wstrict-prototypes -fomit-frame-pointer -fno-strength-reduce -malign-loops=2 -malign-jumps=2 -malign-functions=2 -O2 -m486 -c depca.c" - * - * compile-command: "gcc -D__KERNEL__ -DMODULE -I/linux/include -Wall -Wstrict-prototypes -fomit-frame-pointer -fno-strength-reduce -malign-loops=2 -malign-jumps=2 -malign-functions=2 -O2 -m486 -c depca.c" - * End: - */ +module_init (depca_module_init); +module_exit (depca_module_exit); diff -prauN linux-2.6.0-test5/drivers/net/dgrs.c wli-2.6.0-test5-bk12-25/drivers/net/dgrs.c --- linux-2.6.0-test5/drivers/net/dgrs.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/dgrs.c 2003-09-25 19:15:59.000000000 -0700 @@ -84,6 +84,7 @@ */ #include +#include #include #include #include @@ -120,7 +121,7 @@ typedef unsigned int bool; #include "dgrs_asstruct.h" #include "dgrs_bcomm.h" -static struct pci_device_id dgrs_pci_tbl[] __initdata = { +static struct pci_device_id dgrs_pci_tbl[] = { { SE6_PCI_VENDOR_ID, SE6_PCI_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID, }, { } /* Terminating entry */ }; diff -prauN linux-2.6.0-test5/drivers/net/e1000/e1000.h wli-2.6.0-test5-bk12-25/drivers/net/e1000/e1000.h --- linux-2.6.0-test5/drivers/net/e1000/e1000.h 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/e1000/e1000.h 2003-09-25 19:15:59.000000000 -0700 @@ -122,7 +122,12 @@ struct e1000_adapter; #define E1000_RX_BUFFER_WRITE 16 /* Must be power of 2 */ #define AUTO_ALL_MODES 0 -#define E1000_EEPROM_APME 4 +#define E1000_EEPROM_APME 0x0400 + +#ifndef E1000_MASTER_SLAVE +/* Switch to override PHY master/slave setting */ +#define E1000_MASTER_SLAVE e1000_ms_hw_default +#endif /* only works for sizes that are powers of 2 */ #define E1000_ROUNDUP(i, size) ((i) = (((i) + (size) - 1) & ~((size) - 1))) @@ -180,6 +185,7 @@ struct e1000_adapter { spinlock_t stats_lock; atomic_t irq_sem; struct work_struct tx_timeout_task; + uint8_t fc_autoneg; struct timer_list blink_timer; unsigned long led_status; @@ -194,6 +200,7 @@ struct e1000_adapter { uint32_t tx_head_addr; uint32_t tx_fifo_size; atomic_t tx_fifo_stall; + boolean_t pcix_82544; /* RX */ struct e1000_desc_ring rx_ring; diff -prauN linux-2.6.0-test5/drivers/net/e1000/e1000_ethtool.c wli-2.6.0-test5-bk12-25/drivers/net/e1000/e1000_ethtool.c --- linux-2.6.0-test5/drivers/net/e1000/e1000_ethtool.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/e1000/e1000_ethtool.c 2003-09-25 19:15:59.000000000 -0700 @@ -190,6 +190,55 @@ e1000_ethtool_sset(struct e1000_adapter return 0; } +static int +e1000_ethtool_gpause(struct e1000_adapter *adapter, + struct ethtool_pauseparam *epause) +{ + struct e1000_hw *hw = &adapter->hw; + + epause->autoneg = + (adapter->fc_autoneg ? AUTONEG_ENABLE : AUTONEG_DISABLE); + + if(hw->fc == e1000_fc_rx_pause) + epause->rx_pause = 1; + else if(hw->fc == e1000_fc_tx_pause) + epause->tx_pause = 1; + else if(hw->fc == e1000_fc_full) { + epause->rx_pause = 1; + epause->tx_pause = 1; + } + + return 0; +} + +static int +e1000_ethtool_spause(struct e1000_adapter *adapter, + struct ethtool_pauseparam *epause) +{ + struct e1000_hw *hw = &adapter->hw; + + adapter->fc_autoneg = epause->autoneg; + + if(epause->rx_pause && epause->tx_pause) + hw->fc = e1000_fc_full; + else if(epause->rx_pause && !epause->tx_pause) + hw->fc = e1000_fc_rx_pause; + else if(!epause->rx_pause && epause->tx_pause) + hw->fc = e1000_fc_tx_pause; + else if(!epause->rx_pause && !epause->tx_pause) + hw->fc = e1000_fc_none; + + hw->original_fc = hw->fc; + + if(netif_running(adapter->netdev)) { + e1000_down(adapter); + e1000_up(adapter); + } else + e1000_reset(adapter); + + return 0; +} + static void e1000_ethtool_gdrvinfo(struct e1000_adapter *adapter, struct ethtool_drvinfo *drvinfo) @@ -958,9 +1007,13 @@ e1000_set_phy_loopback(struct e1000_adap case e1000_82544: case e1000_82540: case e1000_82545: + case e1000_82545_rev_3: case e1000_82546: + case e1000_82546_rev_3: case e1000_82541: + case e1000_82541_rev_2: case e1000_82547: + case e1000_82547_rev_2: return e1000_integrated_phy_loopback(adapter); break; @@ -983,9 +1036,12 @@ e1000_setup_loopback_test(struct e1000_a { uint32_t rctl; - if(adapter->hw.media_type == e1000_media_type_fiber) { + if(adapter->hw.media_type == e1000_media_type_fiber || + adapter->hw.media_type == e1000_media_type_internal_serdes) { if(adapter->hw.mac_type == e1000_82545 || - adapter->hw.mac_type == e1000_82546) + adapter->hw.mac_type == e1000_82546 || + adapter->hw.mac_type == e1000_82545_rev_3 || + adapter->hw.mac_type == e1000_82546_rev_3) return e1000_set_phy_loopback(adapter); else { rctl = E1000_READ_REG(&adapter->hw, RCTL); @@ -1010,9 +1066,12 @@ e1000_loopback_cleanup(struct e1000_adap E1000_WRITE_REG(&adapter->hw, RCTL, rctl); if(adapter->hw.media_type == e1000_media_type_copper || - (adapter->hw.media_type == e1000_media_type_fiber && + ((adapter->hw.media_type == e1000_media_type_fiber || + adapter->hw.media_type == e1000_media_type_internal_serdes) && (adapter->hw.mac_type == e1000_82545 || - adapter->hw.mac_type == e1000_82546))) { + adapter->hw.mac_type == e1000_82546 || + adapter->hw.mac_type == e1000_82545_rev_3 || + adapter->hw.mac_type == e1000_82546_rev_3))) { adapter->hw.autoneg = TRUE; e1000_read_phy_reg(&adapter->hw, PHY_CTRL, &phy_reg); if(phy_reg & MII_CR_LOOPBACK) { @@ -1114,7 +1173,7 @@ e1000_ethtool_test(struct e1000_adapter e1000_down(adapter); else e1000_reset(adapter); - + if(e1000_reg_test(adapter, &data[0])) eth_test->flags |= ETH_TEST_FL_FAILED; @@ -1162,6 +1221,7 @@ e1000_ethtool_gwol(struct e1000_adapter return; case E1000_DEV_ID_82546EB_FIBER: + case E1000_DEV_ID_82546GB_FIBER: /* Wake events only supported on port A for dual fiber */ if(E1000_READ_REG(hw, STATUS) & E1000_STATUS_FUNC_1) { wol->supported = 0; @@ -1200,6 +1260,7 @@ e1000_ethtool_swol(struct e1000_adapter return wol->wolopts ? -EOPNOTSUPP : 0; case E1000_DEV_ID_82546EB_FIBER: + case E1000_DEV_ID_82546GB_FIBER: /* Wake events only supported on port A for dual fiber */ if(E1000_READ_REG(hw, STATUS) & E1000_STATUS_FUNC_1) return wol->wolopts ? -EOPNOTSUPP : 0; @@ -1437,6 +1498,19 @@ err_geeprom_ioctl: addr += offsetof(struct ethtool_eeprom, data); return e1000_ethtool_seeprom(adapter, &eeprom, addr); } + case ETHTOOL_GPAUSEPARAM: { + struct ethtool_pauseparam epause = {ETHTOOL_GPAUSEPARAM}; + e1000_ethtool_gpause(adapter, &epause); + if(copy_to_user(addr, &epause, sizeof(epause))) + return -EFAULT; + return 0; + } + case ETHTOOL_SPAUSEPARAM: { + struct ethtool_pauseparam epause; + if(copy_from_user(&epause, addr, sizeof(epause))) + return -EFAULT; + return e1000_ethtool_spause(adapter, &epause); + } case ETHTOOL_GSTATS: { struct { struct ethtool_stats eth_stats; diff -prauN linux-2.6.0-test5/drivers/net/e1000/e1000_hw.c wli-2.6.0-test5-bk12-25/drivers/net/e1000/e1000_hw.c --- linux-2.6.0-test5/drivers/net/e1000/e1000_hw.c 2003-09-08 12:50:33.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/e1000/e1000_hw.c 2003-09-25 19:15:59.000000000 -0700 @@ -34,14 +34,15 @@ static int32_t e1000_set_phy_type(struct e1000_hw *hw); static void e1000_phy_init_script(struct e1000_hw *hw); -static int32_t e1000_setup_fiber_link(struct e1000_hw *hw); static int32_t e1000_setup_copper_link(struct e1000_hw *hw); +static int32_t e1000_setup_fiber_serdes_link(struct e1000_hw *hw); +static int32_t e1000_adjust_serdes_amplitude(struct e1000_hw *hw); static int32_t e1000_phy_force_speed_duplex(struct e1000_hw *hw); static int32_t e1000_config_mac_to_phy(struct e1000_hw *hw); -static int32_t e1000_force_mac_fc(struct e1000_hw *hw); static void e1000_raise_mdi_clk(struct e1000_hw *hw, uint32_t *ctrl); static void e1000_lower_mdi_clk(struct e1000_hw *hw, uint32_t *ctrl); -static void e1000_shift_out_mdi_bits(struct e1000_hw *hw, uint32_t data, uint16_t count); +static void e1000_shift_out_mdi_bits(struct e1000_hw *hw, uint32_t data, + uint16_t count); static uint16_t e1000_shift_in_mdi_bits(struct e1000_hw *hw); static int32_t e1000_phy_reset_dsp(struct e1000_hw *hw); static int32_t e1000_write_eeprom_spi(struct e1000_hw *hw, uint16_t offset, @@ -52,13 +53,30 @@ static int32_t e1000_write_eeprom_microw static int32_t e1000_spi_eeprom_ready(struct e1000_hw *hw); static void e1000_raise_ee_clk(struct e1000_hw *hw, uint32_t *eecd); static void e1000_lower_ee_clk(struct e1000_hw *hw, uint32_t *eecd); -static void e1000_shift_out_ee_bits(struct e1000_hw *hw, uint16_t data, uint16_t count); +static void e1000_shift_out_ee_bits(struct e1000_hw *hw, uint16_t data, + uint16_t count); +static int32_t e1000_write_phy_reg_ex(struct e1000_hw *hw, uint32_t reg_addr, + uint16_t phy_data); +static int32_t e1000_read_phy_reg_ex(struct e1000_hw *hw,uint32_t reg_addr, + uint16_t *phy_data); static uint16_t e1000_shift_in_ee_bits(struct e1000_hw *hw, uint16_t count); static int32_t e1000_acquire_eeprom(struct e1000_hw *hw); static void e1000_release_eeprom(struct e1000_hw *hw); static void e1000_standby_eeprom(struct e1000_hw *hw); static int32_t e1000_id_led_init(struct e1000_hw * hw); +static int32_t e1000_set_vco_speed(struct e1000_hw *hw); +/* IGP cable length table */ +static const +uint16_t e1000_igp_cable_length_table[IGP01E1000_AGC_LENGTH_TABLE_SIZE] = + { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 10, 10, 10, 10, 10, 10, 10, 20, 20, 20, 20, 20, 25, 25, 25, + 25, 25, 25, 25, 30, 30, 30, 30, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 50, 50, 50, 50, 50, 50, 50, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 70, 70, 70, 70, 70, 70, 80, 80, 80, 80, 80, 80, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120}; /****************************************************************************** @@ -100,50 +118,41 @@ e1000_phy_init_script(struct e1000_hw *h DEBUGFUNC("e1000_phy_init_script"); if(hw->phy_init_script) { - msec_delay(10); + msec_delay(20); - e1000_write_phy_reg(hw,IGP01E1000_PHY_PAGE_SELECT,0x0000); e1000_write_phy_reg(hw,0x0000,0x0140); msec_delay(5); - e1000_write_phy_reg(hw,IGP01E1000_PHY_PAGE_SELECT,0x1F95); - e1000_write_phy_reg(hw,0x0015,0x0001); - e1000_write_phy_reg(hw,IGP01E1000_PHY_PAGE_SELECT,0x1F71); - e1000_write_phy_reg(hw,0x0011,0xBD21); + if(hw->mac_type == e1000_82541 || hw->mac_type == e1000_82547) { + e1000_write_phy_reg(hw, 0x1F95, 0x0001); + + e1000_write_phy_reg(hw, 0x1F71, 0xBD21); - e1000_write_phy_reg(hw,IGP01E1000_PHY_PAGE_SELECT,0x1F79); - e1000_write_phy_reg(hw,0x0019,0x0018); + e1000_write_phy_reg(hw, 0x1F79, 0x0018); - e1000_write_phy_reg(hw,IGP01E1000_PHY_PAGE_SELECT,0x1F30); - e1000_write_phy_reg(hw,0x0010,0x1600); + e1000_write_phy_reg(hw, 0x1F30, 0x1600); - e1000_write_phy_reg(hw,IGP01E1000_PHY_PAGE_SELECT,0x1F31); - e1000_write_phy_reg(hw,0x0011,0x0014); + e1000_write_phy_reg(hw, 0x1F31, 0x0014); - e1000_write_phy_reg(hw,IGP01E1000_PHY_PAGE_SELECT,0x1F32); - e1000_write_phy_reg(hw,0x0012,0x161C); + e1000_write_phy_reg(hw, 0x1F32, 0x161C); - e1000_write_phy_reg(hw,IGP01E1000_PHY_PAGE_SELECT,0x1F94); - e1000_write_phy_reg(hw,0x0014,0x0003); + e1000_write_phy_reg(hw, 0x1F94, 0x0003); - e1000_write_phy_reg(hw,IGP01E1000_PHY_PAGE_SELECT,0x1F96); - e1000_write_phy_reg(hw,0x0016,0x003F); + e1000_write_phy_reg(hw, 0x1F96, 0x003F); - e1000_write_phy_reg(hw,IGP01E1000_PHY_PAGE_SELECT,0x2010); - e1000_write_phy_reg(hw,0x0010,0x0008); + e1000_write_phy_reg(hw, 0x2010, 0x0008); + } else { + e1000_write_phy_reg(hw, 0x1F73, 0x0099); + } - e1000_write_phy_reg(hw,IGP01E1000_PHY_PAGE_SELECT,0x0000); - e1000_write_phy_reg(hw,0x0000,0x3300); + e1000_write_phy_reg(hw, 0x0000, 0x3300); if(hw->mac_type == e1000_82547) { uint16_t fused, fine, coarse; /* Move to analog registers page */ - e1000_write_phy_reg(hw, IGP01E1000_PHY_PAGE_SELECT, - IGP01E1000_ANALOG_REGS_PAGE); - e1000_read_phy_reg(hw, IGP01E1000_ANALOG_SPARE_FUSE_STATUS, &fused); if(!(fused & IGP01E1000_ANALOG_SPARE_FUSE_ENABLED)) { @@ -158,17 +167,14 @@ e1000_phy_init_script(struct e1000_hw *h } else if(coarse == IGP01E1000_ANALOG_FUSE_COARSE_THRESH) fine -= IGP01E1000_ANALOG_FUSE_FINE_10; - fused = (fused & IGP01E1000_ANALOG_FUSE_POLY_MASK) | - (fine & IGP01E1000_ANALOG_FUSE_FINE_MASK) | + fused = (fused & IGP01E1000_ANALOG_FUSE_POLY_MASK) | + (fine & IGP01E1000_ANALOG_FUSE_FINE_MASK) | (coarse & IGP01E1000_ANALOG_FUSE_COARSE_MASK); e1000_write_phy_reg(hw, IGP01E1000_ANALOG_FUSE_CONTROL, fused); - e1000_write_phy_reg(hw, IGP01E1000_ANALOG_FUSE_BYPASS, + e1000_write_phy_reg(hw, IGP01E1000_ANALOG_FUSE_BYPASS, IGP01E1000_ANALOG_FUSE_ENABLE_SW_CONTROL); } - /* Return to first page of registers */ - e1000_write_phy_reg(hw, IGP01E1000_PHY_PAGE_SELECT, - IGP01E1000_IEEE_REGS_PAGE); } } } @@ -218,32 +224,89 @@ e1000_set_mac_type(struct e1000_hw *hw) case E1000_DEV_ID_82545EM_FIBER: hw->mac_type = e1000_82545; break; + case E1000_DEV_ID_82545GM_COPPER: + case E1000_DEV_ID_82545GM_FIBER: + case E1000_DEV_ID_82545GM_SERDES: + hw->mac_type = e1000_82545_rev_3; + break; case E1000_DEV_ID_82546EB_COPPER: case E1000_DEV_ID_82546EB_FIBER: case E1000_DEV_ID_82546EB_QUAD_COPPER: hw->mac_type = e1000_82546; break; + case E1000_DEV_ID_82546GB_COPPER: + case E1000_DEV_ID_82546GB_FIBER: + case E1000_DEV_ID_82546GB_SERDES: + hw->mac_type = e1000_82546_rev_3; + break; case E1000_DEV_ID_82541EI: - case E1000_DEV_ID_82541EP: + case E1000_DEV_ID_82541EI_MOBILE: hw->mac_type = e1000_82541; break; + case E1000_DEV_ID_82541ER: + case E1000_DEV_ID_82541GI: + case E1000_DEV_ID_82541GI_MOBILE: + hw->mac_type = e1000_82541_rev_2; + break; case E1000_DEV_ID_82547EI: hw->mac_type = e1000_82547; break; + case E1000_DEV_ID_82547GI: + hw->mac_type = e1000_82547_rev_2; + break; default: /* Should never have loaded on this device */ return -E1000_ERR_MAC_TYPE; } - return E1000_SUCCESS; } + +/***************************************************************************** + * Set media type and TBI compatibility. + * + * hw - Struct containing variables accessed by shared code + * **************************************************************************/ +void +e1000_set_media_type(struct e1000_hw *hw) +{ + uint32_t status; + + DEBUGFUNC("e1000_set_media_type"); + + if(hw->mac_type != e1000_82543) { + /* tbi_compatibility is only valid on 82543 */ + hw->tbi_compatibility_en = FALSE; + } + + switch (hw->device_id) { + case E1000_DEV_ID_82545GM_SERDES: + case E1000_DEV_ID_82546GB_SERDES: + hw->media_type = e1000_media_type_internal_serdes; + break; + default: + if(hw->mac_type >= e1000_82543) { + status = E1000_READ_REG(hw, STATUS); + if(status & E1000_STATUS_TBIMODE) { + hw->media_type = e1000_media_type_fiber; + /* tbi_compatibility not valid on fiber */ + hw->tbi_compatibility_en = FALSE; + } else { + hw->media_type = e1000_media_type_copper; + } + } else { + /* This is an 82542 (fiber only) */ + hw->media_type = e1000_media_type_fiber; + } + } +} + /****************************************************************************** * Reset the transmit and receive units; mask and clear all interrupts. * * hw - Struct containing variables accessed by shared code *****************************************************************************/ -void +int32_t e1000_reset_hw(struct e1000_hw *hw) { uint32_t ctrl; @@ -280,49 +343,75 @@ e1000_reset_hw(struct e1000_hw *hw) */ msec_delay(10); - /* Issue a global reset to the MAC. This will reset the chip's - * transmit, receive, DMA, and link units. It will not effect - * the current PCI configuration. The global reset bit is self- - * clearing, and should clear within a microsecond. - */ - DEBUGOUT("Issuing a global reset to MAC\n"); ctrl = E1000_READ_REG(hw, CTRL); /* Must reset the PHY before resetting the MAC */ if((hw->mac_type == e1000_82541) || (hw->mac_type == e1000_82547)) { E1000_WRITE_REG_IO(hw, CTRL, (ctrl | E1000_CTRL_PHY_RST)); - msec_delay(5); + msec_delay(5); } + /* Issue a global reset to the MAC. This will reset the chip's + * transmit, receive, DMA, and link units. It will not effect + * the current PCI configuration. The global reset bit is self- + * clearing, and should clear within a microsecond. + */ + DEBUGOUT("Issuing a global reset to MAC\n"); + switch(hw->mac_type) { case e1000_82544: case e1000_82540: case e1000_82545: case e1000_82546: case e1000_82541: + case e1000_82541_rev_2: /* These controllers can't ack the 64-bit write when issuing the * reset, so use IO-mapping as a workaround to issue the reset */ E1000_WRITE_REG_IO(hw, CTRL, (ctrl | E1000_CTRL_RST)); break; + case e1000_82545_rev_3: + case e1000_82546_rev_3: + /* Reset is performed on a shadow of the control register */ + E1000_WRITE_REG(hw, CTRL_DUP, (ctrl | E1000_CTRL_RST)); + break; default: E1000_WRITE_REG(hw, CTRL, (ctrl | E1000_CTRL_RST)); break; } - /* Force a reload from the EEPROM if necessary */ - if(hw->mac_type < e1000_82540) { - /* Wait for reset to complete */ - udelay(10); - ctrl_ext = E1000_READ_REG(hw, CTRL_EXT); - ctrl_ext |= E1000_CTRL_EXT_EE_RST; - E1000_WRITE_REG(hw, CTRL_EXT, ctrl_ext); - E1000_WRITE_FLUSH(hw); - /* Wait for EEPROM reload */ - msec_delay(2); - } else { - /* Wait for EEPROM reload (it happens automatically) */ - msec_delay(5); - /* Dissable HW ARPs on ASF enabled adapters */ + /* After MAC reset, force reload of EEPROM to restore power-on settings to + * device. Later controllers reload the EEPROM automatically, so just wait + * for reload to complete. + */ + switch(hw->mac_type) { + case e1000_82542_rev2_0: + case e1000_82542_rev2_1: + case e1000_82543: + case e1000_82544: + /* Wait for reset to complete */ + udelay(10); + ctrl_ext = E1000_READ_REG(hw, CTRL_EXT); + ctrl_ext |= E1000_CTRL_EXT_EE_RST; + E1000_WRITE_REG(hw, CTRL_EXT, ctrl_ext); + E1000_WRITE_FLUSH(hw); + /* Wait for EEPROM reload */ + msec_delay(2); + break; + case e1000_82541: + case e1000_82541_rev_2: + case e1000_82547: + case e1000_82547_rev_2: + /* Wait for EEPROM reload */ + msec_delay(20); + break; + default: + /* Wait for EEPROM reload (it happens automatically) */ + msec_delay(5); + break; + } + + /* Disable HW ARPs on ASF enabled adapters */ + if(hw->mac_type >= e1000_82540) { manc = E1000_READ_REG(hw, MANC); manc &= ~(E1000_MANC_ARP_EN); E1000_WRITE_REG(hw, MANC, manc); @@ -350,6 +439,8 @@ e1000_reset_hw(struct e1000_hw *hw) if(hw->pci_cmd_word & CMD_MEM_WRT_INVALIDATE) e1000_pci_set_mwi(hw); } + + return E1000_SUCCESS; } /****************************************************************************** @@ -366,7 +457,7 @@ e1000_reset_hw(struct e1000_hw *hw) int32_t e1000_init_hw(struct e1000_hw *hw) { - uint32_t ctrl, status; + uint32_t ctrl; uint32_t i; int32_t ret_val; uint16_t pcix_cmd_word; @@ -377,31 +468,13 @@ e1000_init_hw(struct e1000_hw *hw) DEBUGFUNC("e1000_init_hw"); /* Initialize Identification LED */ - ret_val = e1000_id_led_init(hw); - if(ret_val < 0) { + if((ret_val = e1000_id_led_init(hw))) { DEBUGOUT("Error Initializing Identification LED\n"); return ret_val; } - /* Set the Media Type and exit with error if it is not valid. */ - if(hw->mac_type != e1000_82543) { - /* tbi_compatibility is only valid on 82543 */ - hw->tbi_compatibility_en = FALSE; - } - - if(hw->mac_type >= e1000_82543) { - status = E1000_READ_REG(hw, STATUS); - if(status & E1000_STATUS_TBIMODE) { - hw->media_type = e1000_media_type_fiber; - /* tbi_compatibility not valid on fiber */ - hw->tbi_compatibility_en = FALSE; - } else { - hw->media_type = e1000_media_type_copper; - } - } else { - /* This is an 82542 (fiber only) */ - hw->media_type = e1000_media_type_fiber; - } + /* Set the media type and TBI compatibility */ + e1000_set_media_type(hw); /* Disabling VLAN filtering. */ DEBUGOUT("Initializing the IEEE VLAN\n"); @@ -446,21 +519,30 @@ e1000_init_hw(struct e1000_hw *hw) E1000_WRITE_REG(hw, CTRL, ctrl | E1000_CTRL_PRIOR); } - /* Workaround for PCI-X problem when BIOS sets MMRBC incorrectly. */ - if(hw->bus_type == e1000_bus_type_pcix) { - e1000_read_pci_cfg(hw, PCIX_COMMAND_REGISTER, &pcix_cmd_word); - e1000_read_pci_cfg(hw, PCIX_STATUS_REGISTER_HI, &pcix_stat_hi_word); - cmd_mmrbc = (pcix_cmd_word & PCIX_COMMAND_MMRBC_MASK) >> - PCIX_COMMAND_MMRBC_SHIFT; - stat_mmrbc = (pcix_stat_hi_word & PCIX_STATUS_HI_MMRBC_MASK) >> - PCIX_STATUS_HI_MMRBC_SHIFT; - if(stat_mmrbc == PCIX_STATUS_HI_MMRBC_4K) - stat_mmrbc = PCIX_STATUS_HI_MMRBC_2K; - if(cmd_mmrbc > stat_mmrbc) { - pcix_cmd_word &= ~PCIX_COMMAND_MMRBC_MASK; - pcix_cmd_word |= stat_mmrbc << PCIX_COMMAND_MMRBC_SHIFT; - e1000_write_pci_cfg(hw, PCIX_COMMAND_REGISTER, &pcix_cmd_word); + switch(hw->mac_type) { + case e1000_82545_rev_3: + case e1000_82546_rev_3: + break; + default: + /* Workaround for PCI-X problem when BIOS sets MMRBC incorrectly. */ + if(hw->bus_type == e1000_bus_type_pcix) { + e1000_read_pci_cfg(hw, PCIX_COMMAND_REGISTER, &pcix_cmd_word); + e1000_read_pci_cfg(hw, PCIX_STATUS_REGISTER_HI, + &pcix_stat_hi_word); + cmd_mmrbc = (pcix_cmd_word & PCIX_COMMAND_MMRBC_MASK) >> + PCIX_COMMAND_MMRBC_SHIFT; + stat_mmrbc = (pcix_stat_hi_word & PCIX_STATUS_HI_MMRBC_MASK) >> + PCIX_STATUS_HI_MMRBC_SHIFT; + if(stat_mmrbc == PCIX_STATUS_HI_MMRBC_4K) + stat_mmrbc = PCIX_STATUS_HI_MMRBC_2K; + if(cmd_mmrbc > stat_mmrbc) { + pcix_cmd_word &= ~PCIX_COMMAND_MMRBC_MASK; + pcix_cmd_word |= stat_mmrbc << PCIX_COMMAND_MMRBC_SHIFT; + e1000_write_pci_cfg(hw, PCIX_COMMAND_REGISTER, + &pcix_cmd_word); + } } + break; } /* Call a subroutine to configure the link and setup flow control. */ @@ -484,6 +566,46 @@ e1000_init_hw(struct e1000_hw *hw) } /****************************************************************************** + * Adjust SERDES output amplitude based on EEPROM setting. + * + * hw - Struct containing variables accessed by shared code. + *****************************************************************************/ +static int32_t +e1000_adjust_serdes_amplitude(struct e1000_hw *hw) +{ + uint16_t eeprom_data; + int32_t ret_val; + + DEBUGFUNC("e1000_adjust_serdes_amplitude"); + + if(hw->media_type != e1000_media_type_internal_serdes) + return E1000_SUCCESS; + + switch(hw->mac_type) { + case e1000_82545_rev_3: + case e1000_82546_rev_3: + break; + default: + return E1000_SUCCESS; + } + + if ((ret_val = e1000_read_eeprom(hw, EEPROM_SERDES_AMPLITUDE, 1, + &eeprom_data))) { + return ret_val; + } + + if(eeprom_data != EEPROM_RESERVED_WORD) { + /* Adjust SERDES output amplitude only. */ + eeprom_data &= EEPROM_SERDES_AMPLITUDE_MASK; + if((ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_EXT_CTRL, + eeprom_data))) + return ret_val; + } + + return E1000_SUCCESS; +} + +/****************************************************************************** * Configures flow control and link settings. * * hw - Struct containing variables accessed by shared code @@ -554,9 +676,9 @@ e1000_setup_link(struct e1000_hw *hw) } /* Call the necessary subroutine to configure the link. */ - ret_val = (hw->media_type == e1000_media_type_fiber) ? - e1000_setup_fiber_link(hw) : - e1000_setup_copper_link(hw); + ret_val = (hw->media_type == e1000_media_type_copper) ? + e1000_setup_copper_link(hw) : + e1000_setup_fiber_serdes_link(hw); /* Initialize the flow control address, type, and PAUSE timer * registers to their default values. This is done even if flow @@ -595,7 +717,7 @@ e1000_setup_link(struct e1000_hw *hw) } /****************************************************************************** - * Sets up link for a fiber based adapter + * Sets up link for a fiber based or serdes based adapter * * hw - Struct containing variables accessed by shared code * @@ -604,28 +726,37 @@ e1000_setup_link(struct e1000_hw *hw) * and receiver are not enabled. *****************************************************************************/ static int32_t -e1000_setup_fiber_link(struct e1000_hw *hw) +e1000_setup_fiber_serdes_link(struct e1000_hw *hw) { uint32_t ctrl; uint32_t status; uint32_t txcw = 0; uint32_t i; - uint32_t signal; + uint32_t signal = 0; int32_t ret_val; - DEBUGFUNC("e1000_setup_fiber_link"); + DEBUGFUNC("e1000_setup_fiber_serdes_link"); - /* On adapters with a MAC newer that 82544, SW Defineable pin 1 will be + /* On adapters with a MAC newer than 82544, SW Defineable pin 1 will be * set when the optics detect a signal. On older adapters, it will be - * cleared when there is a signal + * cleared when there is a signal. This applies to fiber media only. + * If we're on serdes media, adjust the output amplitude to value set in + * the EEPROM. */ ctrl = E1000_READ_REG(hw, CTRL); - if(hw->mac_type > e1000_82544) signal = E1000_CTRL_SWDPIN1; - else signal = 0; + if(hw->media_type == e1000_media_type_fiber) + signal = (hw->mac_type > e1000_82544) ? E1000_CTRL_SWDPIN1 : 0; + + if((ret_val = e1000_adjust_serdes_amplitude(hw))) + return ret_val; /* Take the link out of reset */ ctrl &= ~(E1000_CTRL_LRST); + /* Adjust VCO speed to improve BER performance */ + if((ret_val = e1000_set_vco_speed(hw))) + return ret_val; + e1000_config_collision_dist(hw); /* Check for a software override of the flow control settings, and setup @@ -692,8 +823,10 @@ e1000_setup_fiber_link(struct e1000_hw * * indication in the Device Status Register. Time-out if a link isn't * seen in 500 milliseconds seconds (Auto-negotiation should complete in * less than 500 milliseconds even if the other end is doing it in SW). + * For internal serdes, we just assume a signal is present, then poll. */ - if((E1000_READ_REG(hw, CTRL) & E1000_CTRL_SWDPIN1) == signal) { + if(hw->media_type == e1000_media_type_internal_serdes || + (E1000_READ_REG(hw, CTRL) & E1000_CTRL_SWDPIN1) == signal) { DEBUGOUT("Looking for Link\n"); for(i = 0; i < (LINK_UP_TIMEOUT / 10); i++) { msec_delay(10); @@ -701,19 +834,20 @@ e1000_setup_fiber_link(struct e1000_hw * if(status & E1000_STATUS_LU) break; } if(i == (LINK_UP_TIMEOUT / 10)) { - /* AutoNeg failed to achieve a link, so we'll call - * e1000_check_for_link. This routine will force the link up if we - * detect a signal. This will allow us to communicate with - * non-autonegotiating link partners. - */ DEBUGOUT("Never got a valid link from auto-neg!!!\n"); hw->autoneg_failed = 1; - ret_val = e1000_check_for_link(hw); - if(ret_val < 0) { - DEBUGOUT("Error while checking for link\n"); - return ret_val; + if(hw->media_type == e1000_media_type_fiber) { + /* AutoNeg failed to achieve a link, so we'll call + * e1000_check_for_link. This routine will force the link up if + * we detect a signal. This will allow us to communicate with + * non-autonegotiating link partners. + */ + if((ret_val = e1000_check_for_link(hw))) { + DEBUGOUT("Error while checking for link\n"); + return ret_val; + } + hw->autoneg_failed = 0; } - hw->autoneg_failed = 0; } else { hw->autoneg_failed = 0; DEBUGOUT("Valid Link Found\n"); @@ -721,7 +855,7 @@ e1000_setup_fiber_link(struct e1000_hw * } else { DEBUGOUT("No Signal Detected\n"); } - return 0; + return E1000_SUCCESS; } /****************************************************************************** @@ -756,233 +890,281 @@ e1000_setup_copper_link(struct e1000_hw } /* Make sure we have a valid PHY */ - ret_val = e1000_detect_gig_phy(hw); - if(ret_val < 0) { + if((ret_val = e1000_detect_gig_phy(hw))) { DEBUGOUT("Error, did not detect valid phy.\n"); return ret_val; } DEBUGOUT1("Phy ID = %x \n", hw->phy_id); - if (hw->phy_type == e1000_phy_igp) { - - ret_val = e1000_phy_reset(hw); - if(ret_val < 0) { - DEBUGOUT("Error Resetting the PHY\n"); - return ret_val; - } + if(hw->mac_type <= e1000_82543 || + hw->mac_type == e1000_82541 || hw->mac_type == e1000_82547 || + hw->mac_type == e1000_82541_rev_2 || hw->mac_type == e1000_82547_rev_2) + hw->phy_reset_disable = FALSE; - /* Wait 10ms for MAC to configure PHY from eeprom settings */ - msec_delay(15); + if(!hw->phy_reset_disable) { + if (hw->phy_type == e1000_phy_igp) { - if(e1000_write_phy_reg(hw, IGP01E1000_PHY_PAGE_SELECT, 0x0000) < 0) { - DEBUGOUT("PHY Write Error\n"); - return -E1000_ERR_PHY; - } + if((ret_val = e1000_phy_reset(hw))) { + DEBUGOUT("Error Resetting the PHY\n"); + return ret_val; + } - /* Configure activity LED after PHY reset */ - led_ctrl = E1000_READ_REG(hw, LEDCTL); - led_ctrl &= IGP_ACTIVITY_LED_MASK; - led_ctrl |= (IGP_ACTIVITY_LED_ENABLE | IGP_LED3_MODE); - E1000_WRITE_REG(hw, LEDCTL, led_ctrl); + /* Wait 10ms for MAC to configure PHY from eeprom settings */ + msec_delay(15); - if(hw->autoneg_advertised == ADVERTISE_1000_FULL) { - /* Disable SmartSpeed */ - if(e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG, - &phy_data) < 0) { - DEBUGOUT("PHY Read Error\n"); - return -E1000_ERR_PHY; - } - phy_data &= ~IGP01E1000_PSCFR_SMART_SPEED; - if(e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG, - phy_data) < 0) { - DEBUGOUT("PHY Write Error\n"); - return -E1000_ERR_PHY; - } - /* Set auto Master/Slave resolution process */ - if(e1000_read_phy_reg(hw, PHY_1000T_CTRL, &phy_data) < 0) { - DEBUGOUT("PHY Read Error\n"); - return -E1000_ERR_PHY; + /* Configure activity LED after PHY reset */ + led_ctrl = E1000_READ_REG(hw, LEDCTL); + led_ctrl &= IGP_ACTIVITY_LED_MASK; + led_ctrl |= (IGP_ACTIVITY_LED_ENABLE | IGP_LED3_MODE); + E1000_WRITE_REG(hw, LEDCTL, led_ctrl); + + /* disable lplu d3 during driver init */ + if((ret_val = e1000_set_d3_lplu_state(hw, FALSE))) { + DEBUGOUT("Error Disabling LPLU D3\n"); + return ret_val; } - phy_data &= ~CR_1000T_MS_ENABLE; - if(e1000_write_phy_reg(hw, PHY_1000T_CTRL, phy_data) < 0) { - DEBUGOUT("PHY Write Error\n"); - return -E1000_ERR_PHY; + + /* Configure mdi-mdix settings */ + if((ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CTRL, + &phy_data))) + return ret_val; + + if((hw->mac_type == e1000_82541) || (hw->mac_type == e1000_82547)) { + hw->dsp_config_state = e1000_dsp_config_disabled; + /* Force MDI for IGP B-0 PHY */ + phy_data &= ~(IGP01E1000_PSCR_AUTO_MDIX | + IGP01E1000_PSCR_FORCE_MDI_MDIX); + hw->mdix = 1; + + } else { + hw->dsp_config_state = e1000_dsp_config_enabled; + phy_data &= ~IGP01E1000_PSCR_AUTO_MDIX; + + switch (hw->mdix) { + case 1: + phy_data &= ~IGP01E1000_PSCR_FORCE_MDI_MDIX; + break; + case 2: + phy_data |= IGP01E1000_PSCR_FORCE_MDI_MDIX; + break; + case 0: + default: + phy_data |= IGP01E1000_PSCR_AUTO_MDIX; + break; + } } - } + if((ret_val = e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CTRL, + phy_data))) + return ret_val; - if(e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CTRL, &phy_data) < 0) { - DEBUGOUT("PHY Read Error\n"); - return -E1000_ERR_PHY; - } + /* set auto-master slave resolution settings */ + if(hw->autoneg) { + e1000_ms_type phy_ms_setting = hw->master_slave; + + if(hw->ffe_config_state == e1000_ffe_config_active) + hw->ffe_config_state = e1000_ffe_config_enabled; + + if(hw->dsp_config_state == e1000_dsp_config_activated) + hw->dsp_config_state = e1000_dsp_config_enabled; + + /* when autonegotiation advertisment is only 1000Mbps then we + * should disable SmartSpeed and enable Auto MasterSlave + * resolution as hardware default. */ + if(hw->autoneg_advertised == ADVERTISE_1000_FULL) { + /* Disable SmartSpeed */ + if((ret_val = e1000_read_phy_reg(hw, + IGP01E1000_PHY_PORT_CONFIG, + &phy_data))) + return ret_val; + phy_data &= ~IGP01E1000_PSCFR_SMART_SPEED; + if((ret_val = e1000_write_phy_reg(hw, + IGP01E1000_PHY_PORT_CONFIG, + phy_data))) + return ret_val; + /* Set auto Master/Slave resolution process */ + if((ret_val = e1000_read_phy_reg(hw, PHY_1000T_CTRL, + &phy_data))) + return ret_val; + phy_data &= ~CR_1000T_MS_ENABLE; + if((ret_val = e1000_write_phy_reg(hw, PHY_1000T_CTRL, + phy_data))) + return ret_val; + } - /* Force MDI for IGP PHY */ - phy_data &= ~(IGP01E1000_PSCR_AUTO_MDIX | - IGP01E1000_PSCR_FORCE_MDI_MDIX); + if((ret_val = e1000_read_phy_reg(hw, PHY_1000T_CTRL, + &phy_data))) + return ret_val; - hw->mdix = 1; + /* load defaults for future use */ + hw->original_master_slave = (phy_data & CR_1000T_MS_ENABLE) ? + ((phy_data & CR_1000T_MS_VALUE) ? + e1000_ms_force_master : + e1000_ms_force_slave) : + e1000_ms_auto; + + switch (phy_ms_setting) { + case e1000_ms_force_master: + phy_data |= (CR_1000T_MS_ENABLE | CR_1000T_MS_VALUE); + break; + case e1000_ms_force_slave: + phy_data |= CR_1000T_MS_ENABLE; + phy_data &= ~(CR_1000T_MS_VALUE); + break; + case e1000_ms_auto: + phy_data &= ~CR_1000T_MS_ENABLE; + default: + break; + } + if((ret_val = e1000_write_phy_reg(hw, PHY_1000T_CTRL, + phy_data))) + return ret_val; + } + } else { + /* Enable CRS on TX. This must be set for half-duplex operation. */ + if((ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, + &phy_data))) + return ret_val; - if(e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CTRL, phy_data) < 0) { - DEBUGOUT("PHY Write Error\n"); - return -E1000_ERR_PHY; - } + phy_data |= M88E1000_PSCR_ASSERT_CRS_ON_TX; - } else { - /* Enable CRS on TX. This must be set for half-duplex operation. */ - if(e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data) < 0) { - DEBUGOUT("PHY Read Error\n"); - return -E1000_ERR_PHY; - } - phy_data |= M88E1000_PSCR_ASSERT_CRS_ON_TX; + /* Options: + * MDI/MDI-X = 0 (default) + * 0 - Auto for all speeds + * 1 - MDI mode + * 2 - MDI-X mode + * 3 - Auto for 1000Base-T only (MDI-X for 10/100Base-T modes) + */ + phy_data &= ~M88E1000_PSCR_AUTO_X_MODE; - /* Options: - * MDI/MDI-X = 0 (default) - * 0 - Auto for all speeds - * 1 - MDI mode - * 2 - MDI-X mode - * 3 - Auto for 1000Base-T only (MDI-X for 10/100Base-T modes) - */ - phy_data &= ~M88E1000_PSCR_AUTO_X_MODE; + switch (hw->mdix) { + case 1: + phy_data |= M88E1000_PSCR_MDI_MANUAL_MODE; + break; + case 2: + phy_data |= M88E1000_PSCR_MDIX_MANUAL_MODE; + break; + case 3: + phy_data |= M88E1000_PSCR_AUTO_X_1000T; + break; + case 0: + default: + phy_data |= M88E1000_PSCR_AUTO_X_MODE; + break; + } - switch (hw->mdix) { - case 1: - phy_data |= M88E1000_PSCR_MDI_MANUAL_MODE; - break; - case 2: - phy_data |= M88E1000_PSCR_MDIX_MANUAL_MODE; - break; - case 3: - phy_data |= M88E1000_PSCR_AUTO_X_1000T; - break; - case 0: - default: - phy_data |= M88E1000_PSCR_AUTO_X_MODE; - break; - } + /* Options: + * disable_polarity_correction = 0 (default) + * Automatic Correction for Reversed Cable Polarity + * 0 - Disabled + * 1 - Enabled + */ + phy_data &= ~M88E1000_PSCR_POLARITY_REVERSAL; + if(hw->disable_polarity_correction == 1) + phy_data |= M88E1000_PSCR_POLARITY_REVERSAL; + if((ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, + phy_data))) + return ret_val; - /* Options: - * disable_polarity_correction = 0 (default) - * Automatic Correction for Reversed Cable Polarity - * 0 - Disabled - * 1 - Enabled - */ - phy_data &= ~M88E1000_PSCR_POLARITY_REVERSAL; - if(hw->disable_polarity_correction == 1) - phy_data |= M88E1000_PSCR_POLARITY_REVERSAL; - if(e1000_write_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data) < 0) { - DEBUGOUT("PHY Write Error\n"); - return -E1000_ERR_PHY; - } + /* Force TX_CLK in the Extended PHY Specific Control Register + * to 25MHz clock. + */ + if((ret_val = e1000_read_phy_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, + &phy_data))) + return ret_val; - /* Force TX_CLK in the Extended PHY Specific Control Register - * to 25MHz clock. - */ - if(e1000_read_phy_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, &phy_data) < 0) { - DEBUGOUT("PHY Read Error\n"); - return -E1000_ERR_PHY; - } - phy_data |= M88E1000_EPSCR_TX_CLK_25; + phy_data |= M88E1000_EPSCR_TX_CLK_25; - if (hw->phy_revision < M88E1011_I_REV_4) { - /* Configure Master and Slave downshift values */ - phy_data &= ~(M88E1000_EPSCR_MASTER_DOWNSHIFT_MASK | - M88E1000_EPSCR_SLAVE_DOWNSHIFT_MASK); - phy_data |= (M88E1000_EPSCR_MASTER_DOWNSHIFT_1X | - M88E1000_EPSCR_SLAVE_DOWNSHIFT_1X); - if(e1000_write_phy_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, - phy_data) < 0) { - DEBUGOUT("PHY Write Error\n"); - return -E1000_ERR_PHY; + if (hw->phy_revision < M88E1011_I_REV_4) { + /* Configure Master and Slave downshift values */ + phy_data &= ~(M88E1000_EPSCR_MASTER_DOWNSHIFT_MASK | + M88E1000_EPSCR_SLAVE_DOWNSHIFT_MASK); + phy_data |= (M88E1000_EPSCR_MASTER_DOWNSHIFT_1X | + M88E1000_EPSCR_SLAVE_DOWNSHIFT_1X); + if((ret_val = e1000_write_phy_reg(hw, + M88E1000_EXT_PHY_SPEC_CTRL, + phy_data))) + return ret_val; } - } - /* SW Reset the PHY so all changes take effect */ - ret_val = e1000_phy_reset(hw); - if(ret_val < 0) { - DEBUGOUT("Error Resetting the PHY\n"); - return ret_val; + /* SW Reset the PHY so all changes take effect */ + if((ret_val = e1000_phy_reset(hw))) { + DEBUGOUT("Error Resetting the PHY\n"); + return ret_val; + } } - } - /* Options: - * autoneg = 1 (default) - * PHY will advertise value(s) parsed from - * autoneg_advertised and fc - * autoneg = 0 - * PHY will be set to 10H, 10F, 100H, or 100F - * depending on value parsed from forced_speed_duplex. - */ + /* Options: + * autoneg = 1 (default) + * PHY will advertise value(s) parsed from + * autoneg_advertised and fc + * autoneg = 0 + * PHY will be set to 10H, 10F, 100H, or 100F + * depending on value parsed from forced_speed_duplex. + */ + + /* Is autoneg enabled? This is enabled by default or by software + * override. If so, call e1000_phy_setup_autoneg routine to parse the + * autoneg_advertised and fc options. If autoneg is NOT enabled, then + * the user should have provided a speed/duplex override. If so, then + * call e1000_phy_force_speed_duplex to parse and set this up. + */ + if(hw->autoneg) { + /* Perform some bounds checking on the hw->autoneg_advertised + * parameter. If this variable is zero, then set it to the default. + */ + hw->autoneg_advertised &= AUTONEG_ADVERTISE_SPEED_DEFAULT; - /* Is autoneg enabled? This is enabled by default or by software override. - * If so, call e1000_phy_setup_autoneg routine to parse the - * autoneg_advertised and fc options. If autoneg is NOT enabled, then the - * user should have provided a speed/duplex override. If so, then call - * e1000_phy_force_speed_duplex to parse and set this up. - */ - if(hw->autoneg) { - /* Perform some bounds checking on the hw->autoneg_advertised - * parameter. If this variable is zero, then set it to the default. - */ - hw->autoneg_advertised &= AUTONEG_ADVERTISE_SPEED_DEFAULT; + /* If autoneg_advertised is zero, we assume it was not defaulted + * by the calling code so we set to advertise full capability. + */ + if(hw->autoneg_advertised == 0) + hw->autoneg_advertised = AUTONEG_ADVERTISE_SPEED_DEFAULT; - /* If autoneg_advertised is zero, we assume it was not defaulted - * by the calling code so we set to advertise full capability. - */ - if(hw->autoneg_advertised == 0) - hw->autoneg_advertised = AUTONEG_ADVERTISE_SPEED_DEFAULT; + DEBUGOUT("Reconfiguring auto-neg advertisement params\n"); + if((ret_val = e1000_phy_setup_autoneg(hw))) { + DEBUGOUT("Error Setting up Auto-Negotiation\n"); + return ret_val; + } + DEBUGOUT("Restarting Auto-Neg\n"); - DEBUGOUT("Reconfiguring auto-neg advertisement params\n"); - ret_val = e1000_phy_setup_autoneg(hw); - if(ret_val < 0) { - DEBUGOUT("Error Setting up Auto-Negotiation\n"); - return ret_val; - } - DEBUGOUT("Restarting Auto-Neg\n"); + /* Restart auto-negotiation by setting the Auto Neg Enable bit and + * the Auto Neg Restart bit in the PHY control register. + */ + if((ret_val = e1000_read_phy_reg(hw, PHY_CTRL, &phy_data))) + return ret_val; - /* Restart auto-negotiation by setting the Auto Neg Enable bit and - * the Auto Neg Restart bit in the PHY control register. - */ - if(e1000_read_phy_reg(hw, PHY_CTRL, &phy_data) < 0) { - DEBUGOUT("PHY Read Error\n"); - return -E1000_ERR_PHY; - } - phy_data |= (MII_CR_AUTO_NEG_EN | MII_CR_RESTART_AUTO_NEG); - if(e1000_write_phy_reg(hw, PHY_CTRL, phy_data) < 0) { - DEBUGOUT("PHY Write Error\n"); - return -E1000_ERR_PHY; - } + phy_data |= (MII_CR_AUTO_NEG_EN | MII_CR_RESTART_AUTO_NEG); + if((ret_val = e1000_write_phy_reg(hw, PHY_CTRL, phy_data))) + return ret_val; - /* Does the user want to wait for Auto-Neg to complete here, or - * check at a later time (for example, callback routine). - */ - if(hw->wait_autoneg_complete) { - ret_val = e1000_wait_autoneg(hw); - if(ret_val < 0) { - DEBUGOUT("Error while waiting for autoneg to complete\n"); + /* Does the user want to wait for Auto-Neg to complete here, or + * check at a later time (for example, callback routine). + */ + if(hw->wait_autoneg_complete) { + if((ret_val = e1000_wait_autoneg(hw))) { + DEBUGOUT("Error while waiting for autoneg to complete\n"); + return ret_val; + } + } + hw->get_link_status = TRUE; + } else { + DEBUGOUT("Forcing speed and duplex\n"); + if((ret_val = e1000_phy_force_speed_duplex(hw))) { + DEBUGOUT("Error Forcing Speed and Duplex\n"); return ret_val; } } - hw->get_link_status = TRUE; - } else { - DEBUGOUT("Forcing speed and duplex\n"); - ret_val = e1000_phy_force_speed_duplex(hw); - if(ret_val < 0) { - DEBUGOUT("Error Forcing Speed and Duplex\n"); - return ret_val; - } - } + } /* !hw->phy_reset_disable */ /* Check link status. Wait up to 100 microseconds for link to become * valid. */ for(i = 0; i < 10; i++) { - if(e1000_read_phy_reg(hw, PHY_STATUS, &phy_data) < 0) { - DEBUGOUT("PHY Read Error\n"); - return -E1000_ERR_PHY; - } - if(e1000_read_phy_reg(hw, PHY_STATUS, &phy_data) < 0) { - DEBUGOUT("PHY Read Error\n"); - return -E1000_ERR_PHY; - } + if((ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data))) + return ret_val; + if((ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data))) + return ret_val; + if(phy_data & MII_SR_LINK_STATUS) { /* We have link, so we need to finish the config process: * 1) Set up the MAC to the current PHY speed/duplex @@ -995,25 +1177,31 @@ e1000_setup_copper_link(struct e1000_hw if(hw->mac_type >= e1000_82544) { e1000_config_collision_dist(hw); } else { - ret_val = e1000_config_mac_to_phy(hw); - if(ret_val < 0) { + if((ret_val = e1000_config_mac_to_phy(hw))) { DEBUGOUT("Error configuring MAC to PHY settings\n"); return ret_val; - } + } } - ret_val = e1000_config_fc_after_link_up(hw); - if(ret_val < 0) { + if((ret_val = e1000_config_fc_after_link_up(hw))) { DEBUGOUT("Error Configuring Flow Control\n"); return ret_val; } DEBUGOUT("Valid link established!!!\n"); - return 0; + + if(hw->phy_type == e1000_phy_igp) { + if((ret_val = e1000_config_dsp_after_link_change(hw, TRUE))) { + DEBUGOUT("Error Configuring DSP after link up\n"); + return ret_val; + } + } + DEBUGOUT("Valid link established!!!\n"); + return E1000_SUCCESS; } udelay(10); } DEBUGOUT("Unable to establish link!!!\n"); - return 0; + return E1000_SUCCESS; } /****************************************************************************** @@ -1024,22 +1212,20 @@ e1000_setup_copper_link(struct e1000_hw int32_t e1000_phy_setup_autoneg(struct e1000_hw *hw) { + int32_t ret_val; uint16_t mii_autoneg_adv_reg; uint16_t mii_1000t_ctrl_reg; DEBUGFUNC("e1000_phy_setup_autoneg"); /* Read the MII Auto-Neg Advertisement Register (Address 4). */ - if(e1000_read_phy_reg(hw, PHY_AUTONEG_ADV, &mii_autoneg_adv_reg) < 0) { - DEBUGOUT("PHY Read Error\n"); - return -E1000_ERR_PHY; - } + if((ret_val = e1000_read_phy_reg(hw, PHY_AUTONEG_ADV, + &mii_autoneg_adv_reg))) + return ret_val; /* Read the MII 1000Base-T Control Register (Address 9). */ - if(e1000_read_phy_reg(hw, PHY_1000T_CTRL, &mii_1000t_ctrl_reg) < 0) { - DEBUGOUT("PHY Read Error\n"); - return -E1000_ERR_PHY; - } + if((ret_val = e1000_read_phy_reg(hw, PHY_1000T_CTRL, &mii_1000t_ctrl_reg))) + return ret_val; /* Need to parse both autoneg_advertised and fc and set up * the appropriate PHY registers. First we will parse for @@ -1145,18 +1331,16 @@ e1000_phy_setup_autoneg(struct e1000_hw return -E1000_ERR_CONFIG; } - if(e1000_write_phy_reg(hw, PHY_AUTONEG_ADV, mii_autoneg_adv_reg) < 0) { - DEBUGOUT("PHY Write Error\n"); - return -E1000_ERR_PHY; - } + if((ret_val = e1000_write_phy_reg(hw, PHY_AUTONEG_ADV, + mii_autoneg_adv_reg))) + return ret_val; DEBUGOUT1("Auto-Neg Advertising %x\n", mii_autoneg_adv_reg); - if(e1000_write_phy_reg(hw, PHY_1000T_CTRL, mii_1000t_ctrl_reg) < 0) { - DEBUGOUT("PHY Write Error\n"); - return -E1000_ERR_PHY; - } - return 0; + if((ret_val = e1000_write_phy_reg(hw, PHY_1000T_CTRL, mii_1000t_ctrl_reg))) + return ret_val; + + return E1000_SUCCESS; } /****************************************************************************** @@ -1192,10 +1376,8 @@ e1000_phy_force_speed_duplex(struct e100 ctrl &= ~E1000_CTRL_ASDE; /* Read the MII Control Register. */ - if(e1000_read_phy_reg(hw, PHY_CTRL, &mii_ctrl_reg) < 0) { - DEBUGOUT("PHY Read Error\n"); - return -E1000_ERR_PHY; - } + if((ret_val = e1000_read_phy_reg(hw, PHY_CTRL, &mii_ctrl_reg))) + return ret_val; /* We need to disable autoneg in order to force link and duplex. */ @@ -1241,19 +1423,18 @@ e1000_phy_force_speed_duplex(struct e100 E1000_WRITE_REG(hw, CTRL, ctrl); if (hw->phy_type == e1000_phy_m88) { - if(e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data) < 0) { - DEBUGOUT("PHY Read Error\n"); - return -E1000_ERR_PHY; - } + if((ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, + &phy_data))) + return ret_val; /* Clear Auto-Crossover to force MDI manually. M88E1000 requires MDI * forced whenever speed are duplex are forced. */ phy_data &= ~M88E1000_PSCR_AUTO_X_MODE; - if(e1000_write_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data) < 0) { - DEBUGOUT("PHY Write Error\n"); - return -E1000_ERR_PHY; - } + if((ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, + phy_data))) + return ret_val; + DEBUGOUT1("M88E1000 PSCR: %x \n", phy_data); /* Need to reset the PHY or these changes will be ignored */ @@ -1262,26 +1443,23 @@ e1000_phy_force_speed_duplex(struct e100 /* Clear Auto-Crossover to force MDI manually. IGP requires MDI * forced whenever speed or duplex are forced. */ - if(e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CTRL, &phy_data) < 0) { - DEBUGOUT("PHY Read Error\n"); - return -E1000_ERR_PHY; - } + if((ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CTRL, + &phy_data))) + return ret_val; phy_data &= ~IGP01E1000_PSCR_AUTO_MDIX; phy_data &= ~IGP01E1000_PSCR_FORCE_MDI_MDIX; - if(e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CTRL, phy_data) < 0) { - DEBUGOUT("PHY Write Error\n"); - return -E1000_ERR_PHY; - } + if((ret_val = e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CTRL, + phy_data))) + return ret_val; } /* Write back the modified PHY MII control register. */ - if(e1000_write_phy_reg(hw, PHY_CTRL, mii_ctrl_reg) < 0) { - DEBUGOUT("PHY Write Error\n"); - return -E1000_ERR_PHY; - } udelay(1); + if((ret_val = e1000_write_phy_reg(hw, PHY_CTRL, mii_ctrl_reg))) + return ret_val; + /* The wait_autoneg_complete flag may be a little misleading here. * Since we are forcing speed and duplex, Auto-Neg is not enabled. @@ -1300,22 +1478,18 @@ e1000_phy_force_speed_duplex(struct e100 /* Read the MII Status Register and wait for Auto-Neg Complete bit * to be set. */ - if(e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg) < 0) { - DEBUGOUT("PHY Read Error\n"); - return -E1000_ERR_PHY; - } - if(e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg) < 0) { - DEBUGOUT("PHY Read Error\n"); - return -E1000_ERR_PHY; - } + if((ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg))) + return ret_val; + + if((ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg))) + return ret_val; + if(mii_status_reg & MII_SR_LINK_STATUS) break; msec_delay(100); } if(i == 0) { /* We didn't get link */ /* Reset the DSP and wait again for link. */ - - ret_val = e1000_phy_reset_dsp(hw); - if(ret_val < 0) { + if((ret_val = e1000_phy_reset_dsp(hw))) { DEBUGOUT("Error Resetting PHY DSP\n"); return ret_val; } @@ -1327,14 +1501,11 @@ e1000_phy_force_speed_duplex(struct e100 /* Read the MII Status Register and wait for Auto-Neg Complete bit * to be set. */ - if(e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg) < 0) { - DEBUGOUT("PHY Read Error\n"); - return -E1000_ERR_PHY; - } - if(e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg) < 0) { - DEBUGOUT("PHY Read Error\n"); - return -E1000_ERR_PHY; - } + if((ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg))) + return ret_val; + + if((ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg))) + return ret_val; } } @@ -1343,30 +1514,29 @@ e1000_phy_force_speed_duplex(struct e100 * Extended PHY Specific Control Register to 25MHz clock. This value * defaults back to a 2.5MHz clock when the PHY is reset. */ - if(e1000_read_phy_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, &phy_data) < 0) { - DEBUGOUT("PHY Read Error\n"); - return -E1000_ERR_PHY; - } + if((ret_val = e1000_read_phy_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, + &phy_data))) + return ret_val; + phy_data |= M88E1000_EPSCR_TX_CLK_25; - if(e1000_write_phy_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, phy_data) < 0) { - DEBUGOUT("PHY Write Error\n"); - return -E1000_ERR_PHY; - } + if((ret_val = e1000_write_phy_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, + phy_data))) + return ret_val; /* In addition, because of the s/w reset above, we need to enable CRS on * TX. This must be set for both full and half duplex operation. */ - if(e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data) < 0) { - DEBUGOUT("PHY Read Error\n"); - return -E1000_ERR_PHY; - } + if((ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, + &phy_data))) + return ret_val; + phy_data |= M88E1000_PSCR_ASSERT_CRS_ON_TX; - if(e1000_write_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data) < 0) { - DEBUGOUT("PHY Write Error\n"); - return -E1000_ERR_PHY; - } + if((ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, + phy_data))) + return ret_val; + } - return 0; + return E1000_SUCCESS; } /****************************************************************************** @@ -1406,6 +1576,7 @@ static int32_t e1000_config_mac_to_phy(struct e1000_hw *hw) { uint32_t ctrl; + int32_t ret_val; uint16_t phy_data; DEBUGFUNC("e1000_config_mac_to_phy"); @@ -1421,10 +1592,10 @@ e1000_config_mac_to_phy(struct e1000_hw * registers depending on negotiated values. */ if (hw->phy_type == e1000_phy_igp) { - if(e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_STATUS, &phy_data) < 0) { - DEBUGOUT("PHY Read Error\n"); - return -E1000_ERR_PHY; - } + if((ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_STATUS, + &phy_data))) + return ret_val; + if(phy_data & IGP01E1000_PSSR_FULL_DUPLEX) ctrl |= E1000_CTRL_FD; else ctrl &= ~E1000_CTRL_FD; @@ -1440,10 +1611,10 @@ e1000_config_mac_to_phy(struct e1000_hw IGP01E1000_PSSR_SPEED_100MBPS) ctrl |= E1000_CTRL_SPD_100; } else { - if(e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_STATUS, &phy_data) < 0) { - DEBUGOUT("PHY Read Error\n"); - return -E1000_ERR_PHY; - } + if((ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_STATUS, + &phy_data))) + return ret_val; + if(phy_data & M88E1000_PSSR_DPLX) ctrl |= E1000_CTRL_FD; else ctrl &= ~E1000_CTRL_FD; @@ -1459,7 +1630,7 @@ e1000_config_mac_to_phy(struct e1000_hw } /* Write the configured values back to the Device Control Reg. */ E1000_WRITE_REG(hw, CTRL, ctrl); - return 0; + return E1000_SUCCESS; } /****************************************************************************** @@ -1473,7 +1644,7 @@ e1000_config_mac_to_phy(struct e1000_hw * by the PHY rather than the MAC. Software must also configure these * bits when link is forced on a fiber connection. *****************************************************************************/ -static int32_t +int32_t e1000_force_mac_fc(struct e1000_hw *hw) { uint32_t ctrl; @@ -1526,7 +1697,7 @@ e1000_force_mac_fc(struct e1000_hw *hw) ctrl &= (~E1000_CTRL_TFCE); E1000_WRITE_REG(hw, CTRL, ctrl); - return 0; + return E1000_SUCCESS; } /****************************************************************************** @@ -1557,9 +1728,9 @@ e1000_config_fc_after_link_up(struct e10 * configuration of the MAC to match the "fc" parameter. */ if(((hw->media_type == e1000_media_type_fiber) && (hw->autoneg_failed)) || + ((hw->media_type == e1000_media_type_internal_serdes) && (hw->autoneg_failed)) || ((hw->media_type == e1000_media_type_copper) && (!hw->autoneg))) { - ret_val = e1000_force_mac_fc(hw); - if(ret_val < 0) { + if((ret_val = e1000_force_mac_fc(hw))) { DEBUGOUT("Error forcing flow control settings\n"); return ret_val; } @@ -1575,14 +1746,10 @@ e1000_config_fc_after_link_up(struct e10 * has completed. We read this twice because this reg has * some "sticky" (latched) bits. */ - if(e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg) < 0) { - DEBUGOUT("PHY Read Error \n"); - return -E1000_ERR_PHY; - } - if(e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg) < 0) { - DEBUGOUT("PHY Read Error \n"); - return -E1000_ERR_PHY; - } + if((ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg))) + return ret_val; + if((ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg))) + return ret_val; if(mii_status_reg & MII_SR_AUTONEG_COMPLETE) { /* The AutoNeg process has completed, so we now need to @@ -1591,14 +1758,12 @@ e1000_config_fc_after_link_up(struct e10 * Register (Address 5) to determine how flow control was * negotiated. */ - if(e1000_read_phy_reg(hw, PHY_AUTONEG_ADV, &mii_nway_adv_reg) < 0) { - DEBUGOUT("PHY Read Error\n"); - return -E1000_ERR_PHY; - } - if(e1000_read_phy_reg(hw, PHY_LP_ABILITY, &mii_nway_lp_ability_reg) < 0) { - DEBUGOUT("PHY Read Error\n"); - return -E1000_ERR_PHY; - } + if((ret_val = e1000_read_phy_reg(hw, PHY_AUTONEG_ADV, + &mii_nway_adv_reg))) + return ret_val; + if((ret_val = e1000_read_phy_reg(hw, PHY_LP_ABILITY, + &mii_nway_lp_ability_reg))) + return ret_val; /* Two bits in the Auto Negotiation Advertisement Register * (Address 4) and two bits in the Auto Negotiation Base @@ -1704,7 +1869,7 @@ e1000_config_fc_after_link_up(struct e10 hw->original_fc == e1000_fc_tx_pause) { hw->fc = e1000_fc_none; DEBUGOUT("Flow Control = NONE.\r\n"); - } else { + } else if(!hw->fc_strict_ieee) { hw->fc = e1000_fc_rx_pause; DEBUGOUT("Flow Control = RX PAUSE frames only.\r\n"); } @@ -1713,7 +1878,10 @@ e1000_config_fc_after_link_up(struct e10 * negotiated to HALF DUPLEX, flow control should not be * enabled per IEEE 802.3 spec. */ - e1000_get_speed_and_duplex(hw, &speed, &duplex); + if((ret_val = e1000_get_speed_and_duplex(hw, &speed, &duplex))) { + DEBUGOUT("Error getting link speed and duplex\n"); + return ret_val; + } if(duplex == HALF_DUPLEX) hw->fc = e1000_fc_none; @@ -1721,16 +1889,15 @@ e1000_config_fc_after_link_up(struct e10 /* Now we call a subroutine to actually force the MAC * controller to use the correct flow control settings. */ - ret_val = e1000_force_mac_fc(hw); - if(ret_val < 0) { + if((ret_val = e1000_force_mac_fc(hw))) { DEBUGOUT("Error forcing flow control settings\n"); return ret_val; - } + } } else { DEBUGOUT("Copper PHY and Auto Neg has not completed.\r\n"); } } - return 0; + return E1000_SUCCESS; } /****************************************************************************** @@ -1747,19 +1914,19 @@ e1000_check_for_link(struct e1000_hw *hw uint32_t ctrl; uint32_t status; uint32_t rctl; - uint32_t signal; + uint32_t signal = 0; int32_t ret_val; uint16_t phy_data; uint16_t lp_capability; DEBUGFUNC("e1000_check_for_link"); - /* On adapters with a MAC newer that 82544, SW Defineable pin 1 will be + /* On adapters with a MAC newer than 82544, SW Defineable pin 1 will be * set when the optics detect a signal. On older adapters, it will be - * cleared when there is a signal + * cleared when there is a signal. This applies to fiber media only. */ - if(hw->mac_type > e1000_82544) signal = E1000_CTRL_SWDPIN1; - else signal = 0; + if(hw->media_type == e1000_media_type_fiber) + signal = (hw->mac_type > e1000_82544) ? E1000_CTRL_SWDPIN1 : 0; ctrl = E1000_READ_REG(hw, CTRL); status = E1000_READ_REG(hw, STATUS); @@ -1777,14 +1944,10 @@ e1000_check_for_link(struct e1000_hw *hw * of the PHY. * Read the register twice since the link bit is sticky. */ - if(e1000_read_phy_reg(hw, PHY_STATUS, &phy_data) < 0) { - DEBUGOUT("PHY Read Error\n"); - return -E1000_ERR_PHY; - } - if(e1000_read_phy_reg(hw, PHY_STATUS, &phy_data) < 0) { - DEBUGOUT("PHY Read Error\n"); - return -E1000_ERR_PHY; - } + if((ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data))) + return ret_val; + if((ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data))) + return ret_val; if(phy_data & MII_SR_LINK_STATUS) { hw->get_link_status = FALSE; @@ -1794,6 +1957,7 @@ e1000_check_for_link(struct e1000_hw *hw } else { /* No link detected */ + e1000_config_dsp_after_link_change(hw, FALSE); return 0; } @@ -1802,6 +1966,9 @@ e1000_check_for_link(struct e1000_hw *hw */ if(!hw->autoneg) return -E1000_ERR_CONFIG; + /* optimize the dsp settings for the igp phy */ + e1000_config_dsp_after_link_change(hw, TRUE); + /* We have a M88E1000 PHY and Auto-Neg is enabled. If we * have Si on board that is 82544 or newer, Auto * Speed Detection takes care of MAC speed/duplex @@ -1813,8 +1980,7 @@ e1000_check_for_link(struct e1000_hw *hw if(hw->mac_type >= e1000_82544) e1000_config_collision_dist(hw); else { - ret_val = e1000_config_mac_to_phy(hw); - if(ret_val < 0) { + if((ret_val = e1000_config_mac_to_phy(hw))) { DEBUGOUT("Error configuring MAC to PHY settings\n"); return ret_val; } @@ -1824,8 +1990,7 @@ e1000_check_for_link(struct e1000_hw *hw * need to restore the desired flow control settings because we may * have had to re-autoneg with a different link partner. */ - ret_val = e1000_config_fc_after_link_up(hw); - if(ret_val < 0) { + if((ret_val = e1000_config_fc_after_link_up(hw))) { DEBUGOUT("Error configuring flow control\n"); return ret_val; } @@ -1840,10 +2005,9 @@ e1000_check_for_link(struct e1000_hw *hw * partner is TBI-based, and we turn on TBI Compatibility. */ if(hw->tbi_compatibility_en) { - if(e1000_read_phy_reg(hw, PHY_LP_ABILITY, &lp_capability) < 0) { - DEBUGOUT("PHY Read Error\n"); - return -E1000_ERR_PHY; - } + if((ret_val = e1000_read_phy_reg(hw, PHY_LP_ABILITY, + &lp_capability))) + return ret_val; if(lp_capability & (NWAY_LPAR_10T_HD_CAPS | NWAY_LPAR_10T_FD_CAPS | NWAY_LPAR_100TX_HD_CAPS | @@ -1900,8 +2064,7 @@ e1000_check_for_link(struct e1000_hw *hw E1000_WRITE_REG(hw, CTRL, ctrl); /* Configure Flow Control after forcing link up. */ - ret_val = e1000_config_fc_after_link_up(hw); - if(ret_val < 0) { + if((ret_val = e1000_config_fc_after_link_up(hw))) { DEBUGOUT("Error configuring flow control\n"); return ret_val; } @@ -1918,7 +2081,7 @@ e1000_check_for_link(struct e1000_hw *hw E1000_WRITE_REG(hw, TXCW, hw->txcw); E1000_WRITE_REG(hw, CTRL, (ctrl & ~E1000_CTRL_SLU)); } - return 0; + return E1000_SUCCESS; } /****************************************************************************** @@ -1928,12 +2091,14 @@ e1000_check_for_link(struct e1000_hw *hw * speed - Speed of the connection * duplex - Duplex setting of the connection *****************************************************************************/ -void +int32_t e1000_get_speed_and_duplex(struct e1000_hw *hw, uint16_t *speed, uint16_t *duplex) { uint32_t status; + int32_t ret_val; + uint16_t phy_data; DEBUGFUNC("e1000_get_speed_and_duplex"); @@ -1962,6 +2127,27 @@ e1000_get_speed_and_duplex(struct e1000_ *speed = SPEED_1000; *duplex = FULL_DUPLEX; } + + /* IGP01 PHY may advertise full duplex operation after speed downgrade even + * if it is operating at half duplex. Here we set the duplex settings to + * match the duplex in the link partner's capabilities. + */ + if(hw->phy_type == e1000_phy_igp && hw->speed_downgraded) { + if((ret_val = e1000_read_phy_reg(hw, PHY_AUTONEG_EXP, &phy_data))) + return ret_val; + + if(!(phy_data & NWAY_ER_LP_NWAY_CAPS)) + *duplex = HALF_DUPLEX; + else { + if((ret_val == e1000_read_phy_reg(hw, PHY_LP_ABILITY, &phy_data))) + return ret_val; + if((*speed == SPEED_100 && !(phy_data & NWAY_LPAR_100TX_FD_CAPS)) || + (*speed == SPEED_10 && !(phy_data & NWAY_LPAR_10T_FD_CAPS))) + *duplex = HALF_DUPLEX; + } + } + + return E1000_SUCCESS; } /****************************************************************************** @@ -1972,6 +2158,7 @@ e1000_get_speed_and_duplex(struct e1000_ int32_t e1000_wait_autoneg(struct e1000_hw *hw) { + int32_t ret_val; uint16_t i; uint16_t phy_data; @@ -1983,20 +2170,16 @@ e1000_wait_autoneg(struct e1000_hw *hw) /* Read the MII Status Register and wait for Auto-Neg * Complete bit to be set. */ - if(e1000_read_phy_reg(hw, PHY_STATUS, &phy_data) < 0) { - DEBUGOUT("PHY Read Error\n"); - return -E1000_ERR_PHY; - } - if(e1000_read_phy_reg(hw, PHY_STATUS, &phy_data) < 0) { - DEBUGOUT("PHY Read Error\n"); - return -E1000_ERR_PHY; - } + if((ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data))) + return ret_val; + if((ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data))) + return ret_val; if(phy_data & MII_SR_AUTONEG_COMPLETE) { - return 0; + return E1000_SUCCESS; } msec_delay(100); } - return 0; + return E1000_SUCCESS; } /****************************************************************************** @@ -2010,11 +2193,11 @@ e1000_raise_mdi_clk(struct e1000_hw *hw, uint32_t *ctrl) { /* Raise the clock input to the Management Data Clock (by setting the MDC - * bit), and then delay 2 microseconds. + * bit), and then delay 10 microseconds. */ E1000_WRITE_REG(hw, CTRL, (*ctrl | E1000_CTRL_MDC)); E1000_WRITE_FLUSH(hw); - udelay(2); + udelay(10); } /****************************************************************************** @@ -2028,11 +2211,11 @@ e1000_lower_mdi_clk(struct e1000_hw *hw, uint32_t *ctrl) { /* Lower the clock input to the Management Data Clock (by clearing the MDC - * bit), and then delay 2 microseconds. + * bit), and then delay 10 microseconds. */ E1000_WRITE_REG(hw, CTRL, (*ctrl & ~E1000_CTRL_MDC)); E1000_WRITE_FLUSH(hw); - udelay(2); + udelay(10); } /****************************************************************************** @@ -2076,7 +2259,7 @@ e1000_shift_out_mdi_bits(struct e1000_hw E1000_WRITE_REG(hw, CTRL, ctrl); E1000_WRITE_FLUSH(hw); - udelay(2); + udelay(10); e1000_raise_mdi_clk(hw, &ctrl); e1000_lower_mdi_clk(hw, &ctrl); @@ -2138,8 +2321,8 @@ e1000_shift_in_mdi_bits(struct e1000_hw } /***************************************************************************** -* Reads the value from a PHY register -* +* Reads the value from a PHY register, if the value is on a specific non zero +* page, sets the page first. * hw - Struct containing variables accessed by shared code * reg_addr - address of the PHY register to read ******************************************************************************/ @@ -2148,11 +2331,33 @@ e1000_read_phy_reg(struct e1000_hw *hw, uint32_t reg_addr, uint16_t *phy_data) { + uint32_t ret_val; + + DEBUGFUNC("e1000_read_phy_reg"); + + if(hw->phy_type == e1000_phy_igp && + (reg_addr > MAX_PHY_MULTI_PAGE_REG)) { + if((ret_val = e1000_write_phy_reg_ex(hw, IGP01E1000_PHY_PAGE_SELECT, + (uint16_t)reg_addr))) + return ret_val; + } + + ret_val = e1000_read_phy_reg_ex(hw, IGP01E1000_PHY_PAGE_SELECT & reg_addr, + phy_data); + + return ret_val; +} + +int32_t +e1000_read_phy_reg_ex(struct e1000_hw *hw, + uint32_t reg_addr, + uint16_t *phy_data) +{ uint32_t i; uint32_t mdic = 0; const uint32_t phy_addr = 1; - DEBUGFUNC("e1000_read_phy_reg"); + DEBUGFUNC("e1000_read_phy_reg_ex"); if(reg_addr > MAX_PHY_REG_ADDRESS) { DEBUGOUT1("PHY Address %d is out of range\n", reg_addr); @@ -2172,7 +2377,7 @@ e1000_read_phy_reg(struct e1000_hw *hw, /* Poll the ready bit to see if the MDI read completed */ for(i = 0; i < 64; i++) { - udelay(10); + udelay(50); mdic = E1000_READ_REG(hw, MDIC); if(mdic & E1000_MDIC_READY) break; } @@ -2214,7 +2419,7 @@ e1000_read_phy_reg(struct e1000_hw *hw, */ *phy_data = e1000_shift_in_mdi_bits(hw); } - return 0; + return E1000_SUCCESS; } /****************************************************************************** @@ -2229,11 +2434,33 @@ e1000_write_phy_reg(struct e1000_hw *hw, uint32_t reg_addr, uint16_t phy_data) { + uint32_t ret_val; + + DEBUGFUNC("e1000_write_phy_reg"); + + if(hw->phy_type == e1000_phy_igp && + (reg_addr > MAX_PHY_MULTI_PAGE_REG)) { + if((ret_val = e1000_write_phy_reg_ex(hw, IGP01E1000_PHY_PAGE_SELECT, + (uint16_t)reg_addr))) + return ret_val; + } + + ret_val = e1000_write_phy_reg_ex(hw, IGP01E1000_PHY_PAGE_SELECT & reg_addr, + phy_data); + + return ret_val; +} + +int32_t +e1000_write_phy_reg_ex(struct e1000_hw *hw, + uint32_t reg_addr, + uint16_t phy_data) +{ uint32_t i; uint32_t mdic = 0; const uint32_t phy_addr = 1; - DEBUGFUNC("e1000_write_phy_reg"); + DEBUGFUNC("e1000_write_phy_reg_ex"); if(reg_addr > MAX_PHY_REG_ADDRESS) { DEBUGOUT1("PHY Address %d is out of range\n", reg_addr); @@ -2254,7 +2481,7 @@ e1000_write_phy_reg(struct e1000_hw *hw, /* Poll the ready bit to see if the MDI read completed */ for(i = 0; i < 64; i++) { - udelay(10); + udelay(50); mdic = E1000_READ_REG(hw, MDIC); if(mdic & E1000_MDIC_READY) break; } @@ -2284,7 +2511,7 @@ e1000_write_phy_reg(struct e1000_hw *hw, e1000_shift_out_mdi_bits(hw, mdic, 32); } - return 0; + return E1000_SUCCESS; } /****************************************************************************** @@ -2329,11 +2556,6 @@ e1000_phy_hw_reset(struct e1000_hw *hw) udelay(150); if((hw->mac_type == e1000_82541) || (hw->mac_type == e1000_82547)) { - if(e1000_write_phy_reg(hw, IGP01E1000_PHY_PAGE_SELECT, 0x0000) < 0) { - DEBUGOUT("PHY Write Error\n"); - return; - } - /* Configure activity LED after PHY reset */ led_ctrl = E1000_READ_REG(hw, LEDCTL); led_ctrl &= IGP_ACTIVITY_LED_MASK; @@ -2352,24 +2574,26 @@ e1000_phy_hw_reset(struct e1000_hw *hw) int32_t e1000_phy_reset(struct e1000_hw *hw) { + int32_t ret_val; uint16_t phy_data; DEBUGFUNC("e1000_phy_reset"); - if(e1000_read_phy_reg(hw, PHY_CTRL, &phy_data) < 0) { - DEBUGOUT("PHY Read Error\n"); - return -E1000_ERR_PHY; - } - phy_data |= MII_CR_RESET; - if(e1000_write_phy_reg(hw, PHY_CTRL, phy_data) < 0) { - DEBUGOUT("PHY Write Error\n"); - return -E1000_ERR_PHY; - } - udelay(1); - if (hw->phy_type == e1000_phy_igp) { + if(hw->mac_type != e1000_82541_rev_2) { + if((ret_val = e1000_read_phy_reg(hw, PHY_CTRL, &phy_data))) + return ret_val; + + phy_data |= MII_CR_RESET; + if((ret_val = e1000_write_phy_reg(hw, PHY_CTRL, phy_data))) + return ret_val; + + udelay(1); + } else e1000_phy_hw_reset(hw); + + if(hw->phy_type == e1000_phy_igp) e1000_phy_init_script(hw); - } - return 0; + + return E1000_SUCCESS; } /****************************************************************************** @@ -2380,23 +2604,21 @@ e1000_phy_reset(struct e1000_hw *hw) int32_t e1000_detect_gig_phy(struct e1000_hw *hw) { + int32_t phy_init_status, ret_val; uint16_t phy_id_high, phy_id_low; boolean_t match = FALSE; - int32_t phy_init_status; DEBUGFUNC("e1000_detect_gig_phy"); /* Read the PHY ID Registers to identify which PHY is onboard. */ - if(e1000_read_phy_reg(hw, PHY_ID1, &phy_id_high) < 0) { - DEBUGOUT("PHY Read Error\n"); - return -E1000_ERR_PHY; - } + if((ret_val = e1000_read_phy_reg(hw, PHY_ID1, &phy_id_high))) + return ret_val; + hw->phy_id = (uint32_t) (phy_id_high << 16); udelay(20); - if(e1000_read_phy_reg(hw, PHY_ID2, &phy_id_low) < 0) { - DEBUGOUT("PHY Read Error\n"); - return -E1000_ERR_PHY; - } + if((ret_val = e1000_read_phy_reg(hw, PHY_ID2, &phy_id_low))) + return ret_val; + hw->phy_id |= (uint32_t) (phy_id_low & PHY_REVISION_MASK); hw->phy_revision = (uint32_t) phy_id_low & ~PHY_REVISION_MASK; @@ -2409,11 +2631,15 @@ e1000_detect_gig_phy(struct e1000_hw *hw break; case e1000_82540: case e1000_82545: + case e1000_82545_rev_3: case e1000_82546: + case e1000_82546_rev_3: if(hw->phy_id == M88E1011_I_PHY_ID) match = TRUE; break; case e1000_82541: + case e1000_82541_rev_2: case e1000_82547: + case e1000_82547_rev_2: if(hw->phy_id == IGP01E1000_I_PHY_ID) match = TRUE; break; default: @@ -2424,7 +2650,7 @@ e1000_detect_gig_phy(struct e1000_hw *hw if ((match) && (phy_init_status == E1000_SUCCESS)) { DEBUGOUT1("PHY ID 0x%X detected\n", hw->phy_id); - return 0; + return E1000_SUCCESS; } DEBUGOUT1("Invalid PHY ID 0x%X\n", hw->phy_id); return -E1000_ERR_PHY; @@ -2438,17 +2664,16 @@ e1000_detect_gig_phy(struct e1000_hw *hw static int32_t e1000_phy_reset_dsp(struct e1000_hw *hw) { - int32_t ret_val = -E1000_ERR_PHY; + int32_t ret_val; DEBUGFUNC("e1000_phy_reset_dsp"); do { - if(e1000_write_phy_reg(hw, 29, 0x001d) < 0) break; - if(e1000_write_phy_reg(hw, 30, 0x00c1) < 0) break; - if(e1000_write_phy_reg(hw, 30, 0x0000) < 0) break; - ret_val = 0; + if((ret_val = e1000_write_phy_reg(hw, 29, 0x001d))) break; + if((ret_val = e1000_write_phy_reg(hw, 30, 0x00c1))) break; + if((ret_val = e1000_write_phy_reg(hw, 30, 0x0000))) break; + ret_val = E1000_SUCCESS; } while(0); - if(ret_val < 0) DEBUGOUT("PHY Write Error\n"); return ret_val; } @@ -2459,8 +2684,10 @@ e1000_phy_reset_dsp(struct e1000_hw *hw) * phy_info - PHY information structure ******************************************************************************/ int32_t -e1000_phy_igp_get_info(struct e1000_hw *hw, struct e1000_phy_info *phy_info) +e1000_phy_igp_get_info(struct e1000_hw *hw, + struct e1000_phy_info *phy_info) { + int32_t ret_val; uint16_t phy_data, polarity, min_length, max_length, average; DEBUGFUNC("e1000_phy_igp_get_info"); @@ -2476,13 +2703,14 @@ e1000_phy_igp_get_info(struct e1000_hw * phy_info->polarity_correction = e1000_polarity_reversal_enabled; /* Check polarity status */ - if(e1000_check_polarity(hw, &polarity) < 0) - return -E1000_ERR_PHY; + if((ret_val = e1000_check_polarity(hw, &polarity))) + return ret_val; phy_info->cable_polarity = polarity; - if(e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_STATUS, &phy_data) < 0) - return -E1000_ERR_PHY; + if((ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_STATUS, + &phy_data))) + return ret_val; phy_info->mdix_mode = (phy_data & IGP01E1000_PSSR_MDIX) >> IGP01E1000_PSSR_MDIX_SHIFT; @@ -2490,8 +2718,8 @@ e1000_phy_igp_get_info(struct e1000_hw * if((phy_data & IGP01E1000_PSSR_SPEED_MASK) == IGP01E1000_PSSR_SPEED_1000MBPS) { /* Local/Remote Receiver Information are only valid at 1000 Mbps */ - if(e1000_read_phy_reg(hw, PHY_1000T_STATUS, &phy_data) < 0) - return -E1000_ERR_PHY; + if((ret_val = e1000_read_phy_reg(hw, PHY_1000T_STATUS, &phy_data))) + return ret_val; phy_info->local_rx = (phy_data & SR_1000T_LOCAL_RX_STATUS) >> SR_1000T_LOCAL_RX_STATUS_SHIFT; @@ -2499,8 +2727,8 @@ e1000_phy_igp_get_info(struct e1000_hw * SR_1000T_REMOTE_RX_STATUS_SHIFT; /* Get cable length */ - if(e1000_get_cable_length(hw, &min_length, &max_length) < 0) - return -E1000_ERR_PHY; + if((ret_val = e1000_get_cable_length(hw, &min_length, &max_length))) + return ret_val; /* transalte to old method */ average = (max_length + min_length) / 2; @@ -2527,8 +2755,10 @@ e1000_phy_igp_get_info(struct e1000_hw * * phy_info - PHY information structure ******************************************************************************/ int32_t -e1000_phy_m88_get_info(struct e1000_hw *hw, struct e1000_phy_info *phy_info) +e1000_phy_m88_get_info(struct e1000_hw *hw, + struct e1000_phy_info *phy_info) { + int32_t ret_val; uint16_t phy_data, polarity; DEBUGFUNC("e1000_phy_m88_get_info"); @@ -2537,8 +2767,8 @@ e1000_phy_m88_get_info(struct e1000_hw * * and it stored in the hw->speed_downgraded parameter. */ phy_info->downshift = hw->speed_downgraded; - if(e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data) < 0) - return -E1000_ERR_PHY; + if((ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data))) + return ret_val; phy_info->extended_10bt_distance = (phy_data & M88E1000_PSCR_10BT_EXT_DIST_ENABLE) >> @@ -2548,13 +2778,13 @@ e1000_phy_m88_get_info(struct e1000_hw * M88E1000_PSCR_POLARITY_REVERSAL_SHIFT; /* Check polarity status */ - if(e1000_check_polarity(hw, &polarity) < 0) - return -E1000_ERR_PHY; + if((ret_val = e1000_check_polarity(hw, &polarity))) + return ret_val; phy_info->cable_polarity = polarity; - if(e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_STATUS, &phy_data) < 0) - return -E1000_ERR_PHY; + if((ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_STATUS, &phy_data))) + return ret_val; phy_info->mdix_mode = (phy_data & M88E1000_PSSR_MDIX) >> M88E1000_PSSR_MDIX_SHIFT; @@ -2566,8 +2796,8 @@ e1000_phy_m88_get_info(struct e1000_hw * phy_info->cable_length = ((phy_data & M88E1000_PSSR_CABLE_LENGTH) >> M88E1000_PSSR_CABLE_LENGTH_SHIFT); - if(e1000_read_phy_reg(hw, PHY_1000T_STATUS, &phy_data) < 0) - return -E1000_ERR_PHY; + if((ret_val = e1000_read_phy_reg(hw, PHY_1000T_STATUS, &phy_data))) + return ret_val; phy_info->local_rx = (phy_data & SR_1000T_LOCAL_RX_STATUS) >> SR_1000T_LOCAL_RX_STATUS_SHIFT; @@ -2589,6 +2819,7 @@ int32_t e1000_phy_get_info(struct e1000_hw *hw, struct e1000_phy_info *phy_info) { + int32_t ret_val; uint16_t phy_data; DEBUGFUNC("e1000_phy_get_info"); @@ -2607,20 +2838,18 @@ e1000_phy_get_info(struct e1000_hw *hw, return -E1000_ERR_CONFIG; } - if(e1000_read_phy_reg(hw, PHY_STATUS, &phy_data) < 0) { - DEBUGOUT("PHY Read Error\n"); - return -E1000_ERR_PHY; - } - if(e1000_read_phy_reg(hw, PHY_STATUS, &phy_data) < 0) { - DEBUGOUT("PHY Read Error\n"); - return -E1000_ERR_PHY; - } + if((ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data))) + return ret_val; + + if((ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data))) + return ret_val; + if((phy_data & MII_SR_LINK_STATUS) != MII_SR_LINK_STATUS) { DEBUGOUT("PHY info is only valid if link is up\n"); return -E1000_ERR_CONFIG; } - if (hw->phy_type == e1000_phy_igp) + if(hw->phy_type == e1000_phy_igp) return e1000_phy_igp_get_info(hw, phy_info); else return e1000_phy_m88_get_info(hw, phy_info); @@ -2636,7 +2865,7 @@ e1000_validate_mdi_setting(struct e1000_ hw->mdix = 1; return -E1000_ERR_CONFIG; } - return 0; + return E1000_SUCCESS; } @@ -2668,7 +2897,9 @@ e1000_init_eeprom_params(struct e1000_hw break; case e1000_82540: case e1000_82545: + case e1000_82545_rev_3: case e1000_82546: + case e1000_82546_rev_3: eeprom->type = e1000_eeprom_microwire; eeprom->opcode_bits = 3; eeprom->delay_usec = 50; @@ -2681,8 +2912,9 @@ e1000_init_eeprom_params(struct e1000_hw } break; case e1000_82541: + case e1000_82541_rev_2: case e1000_82547: - default: + case e1000_82547_rev_2: if (eecd & E1000_EECD_TYPE) { eeprom->type = e1000_eeprom_spi; eeprom->opcode_bits = 8; @@ -2707,6 +2939,18 @@ e1000_init_eeprom_params(struct e1000_hw } } break; + default: + eeprom->type = e1000_eeprom_spi; + eeprom->opcode_bits = 8; + eeprom->delay_usec = 1; + if (eecd & E1000_EECD_ADDR_BITS) { + eeprom->page_size = 32; + eeprom->address_bits = 16; + } else { + eeprom->page_size = 8; + eeprom->address_bits = 8; + } + break; } if (eeprom->type == e1000_eeprom_spi) { @@ -2715,28 +2959,28 @@ e1000_init_eeprom_params(struct e1000_hw eeprom_size &= EEPROM_SIZE_MASK; switch (eeprom_size) { - case EEPROM_SIZE_16KB: - eeprom->word_size = 8192; - break; - case EEPROM_SIZE_8KB: - eeprom->word_size = 4096; - break; - case EEPROM_SIZE_4KB: - eeprom->word_size = 2048; - break; - case EEPROM_SIZE_2KB: - eeprom->word_size = 1024; - break; - case EEPROM_SIZE_1KB: - eeprom->word_size = 512; - break; - case EEPROM_SIZE_512B: - eeprom->word_size = 256; - break; - case EEPROM_SIZE_128B: - default: - eeprom->word_size = 64; - break; + case EEPROM_SIZE_16KB: + eeprom->word_size = 8192; + break; + case EEPROM_SIZE_8KB: + eeprom->word_size = 4096; + break; + case EEPROM_SIZE_4KB: + eeprom->word_size = 2048; + break; + case EEPROM_SIZE_2KB: + eeprom->word_size = 1024; + break; + case EEPROM_SIZE_1KB: + eeprom->word_size = 512; + break; + case EEPROM_SIZE_512B: + eeprom->word_size = 256; + break; + case EEPROM_SIZE_128B: + default: + eeprom->word_size = 64; + break; } } } @@ -2841,7 +3085,8 @@ e1000_shift_out_ee_bits(struct e1000_hw * hw - Struct containing variables accessed by shared code *****************************************************************************/ static uint16_t -e1000_shift_in_ee_bits(struct e1000_hw *hw, uint16_t count) +e1000_shift_in_ee_bits(struct e1000_hw *hw, + uint16_t count) { uint32_t eecd; uint32_t i; @@ -3101,13 +3346,17 @@ e1000_read_eeprom(struct e1000_hw *hw, } /* Prepare the EEPROM for reading */ - if (e1000_acquire_eeprom(hw) != E1000_SUCCESS) + if(e1000_acquire_eeprom(hw) != E1000_SUCCESS) return -E1000_ERR_EEPROM; if(eeprom->type == e1000_eeprom_spi) { + uint16_t word_in; uint8_t read_opcode = EEPROM_READ_OPCODE_SPI; - if(e1000_spi_eeprom_ready(hw)) return -E1000_ERR_EEPROM; + if(e1000_spi_eeprom_ready(hw)) { + e1000_release_eeprom(hw); + return -E1000_ERR_EEPROM; + } e1000_standby_eeprom(hw); @@ -3118,30 +3367,35 @@ e1000_read_eeprom(struct e1000_hw *hw, /* Send the READ command (opcode + addr) */ e1000_shift_out_ee_bits(hw, read_opcode, eeprom->opcode_bits); e1000_shift_out_ee_bits(hw, (uint16_t)(offset*2), eeprom->address_bits); - } - else if(eeprom->type == e1000_eeprom_microwire) { - /* Send the READ command (opcode + addr) */ - e1000_shift_out_ee_bits(hw, EEPROM_READ_OPCODE_MICROWIRE, - eeprom->opcode_bits); - e1000_shift_out_ee_bits(hw, offset, eeprom->address_bits); - } - /* Read the data. The address of the eeprom internally increments with - * each word (microwire) or byte (spi) being read, saving on the overhead - * of eeprom setup and tear-down. The address counter will roll over if - * reading beyond the size of the eeprom, thus allowing the entire memory - * to be read starting from any offset. */ - for (i = 0; i < words; i++) { - uint16_t word_in = e1000_shift_in_ee_bits(hw, 16); - if (eeprom->type == e1000_eeprom_spi) - word_in = (word_in >> 8) | (word_in << 8); - data[i] = word_in; + /* Read the data. The address of the eeprom internally increments with + * each byte (spi) being read, saving on the overhead of eeprom setup + * and tear-down. The address counter will roll over if reading beyond + * the size of the eeprom, thus allowing the entire memory to be read + * starting from any offset. */ + for (i = 0; i < words; i++) { + word_in = e1000_shift_in_ee_bits(hw, 16); + data[i] = (word_in >> 8) | (word_in << 8); + } + } else if(eeprom->type == e1000_eeprom_microwire) { + for (i = 0; i < words; i++) { + /* Send the READ command (opcode + addr) */ + e1000_shift_out_ee_bits(hw, EEPROM_READ_OPCODE_MICROWIRE, + eeprom->opcode_bits); + e1000_shift_out_ee_bits(hw, (uint16_t)(offset + i), + eeprom->address_bits); + + /* Read the data. For microwire, each word requires the overhead + * of eeprom setup and tear-down. */ + data[i] = e1000_shift_in_ee_bits(hw, 16); + e1000_standby_eeprom(hw); + } } /* End this read operation */ e1000_release_eeprom(hw); - return 0; + return E1000_SUCCESS; } /****************************************************************************** @@ -3169,9 +3423,9 @@ e1000_validate_eeprom_checksum(struct e1 checksum += eeprom_data; } - if(checksum == (uint16_t) EEPROM_SUM) { - return 0; - } else { + if(checksum == (uint16_t) EEPROM_SUM) + return E1000_SUCCESS; + else { DEBUGOUT("EEPROM Checksum Invalid\n"); return -E1000_ERR_EEPROM; } @@ -3205,7 +3459,7 @@ e1000_update_eeprom_checksum(struct e100 DEBUGOUT("EEPROM Write Error\n"); return -E1000_ERR_EEPROM; } - return 0; + return E1000_SUCCESS; } /****************************************************************************** @@ -3403,7 +3657,7 @@ e1000_write_eeprom_microwire(struct e100 e1000_shift_out_ee_bits(hw, 0, (uint16_t)(eeprom->address_bits - 2)); - return 0; + return E1000_SUCCESS; } /****************************************************************************** @@ -3437,7 +3691,7 @@ e1000_read_part_num(struct e1000_hw *hw, /* Save word 1 in lower half of part_num */ *part_num |= eeprom_data; - return 0; + return E1000_SUCCESS; } /****************************************************************************** @@ -3463,7 +3717,7 @@ e1000_read_mac_addr(struct e1000_hw * hw hw->perm_mac_addr[i] = (uint8_t) (eeprom_data & 0x00FF); hw->perm_mac_addr[i+1] = (uint8_t) (eeprom_data >> 8); } - if((hw->mac_type == e1000_82546) && + if(((hw->mac_type == e1000_82546) || (hw->mac_type == e1000_82546_rev_3)) && (E1000_READ_REG(hw, STATUS) & E1000_STATUS_FUNC_1)) { if(hw->perm_mac_addr[5] & 0x01) hw->perm_mac_addr[5] &= ~(0x01); @@ -3472,7 +3726,7 @@ e1000_read_mac_addr(struct e1000_hw * hw } for(i = 0; i < NODE_ADDRESS_SIZE; i++) hw->mac_addr[i] = hw->perm_mac_addr[i]; - return 0; + return E1000_SUCCESS; } /****************************************************************************** @@ -3748,7 +4002,7 @@ e1000_id_led_init(struct e1000_hw * hw) if(hw->mac_type < e1000_82540) { /* Nothing to do */ - return 0; + return E1000_SUCCESS; } ledctl = E1000_READ_REG(hw, LEDCTL); @@ -3799,7 +4053,7 @@ e1000_id_led_init(struct e1000_hw * hw) break; } } - return 0; + return E1000_SUCCESS; } /****************************************************************************** @@ -3811,49 +4065,48 @@ int32_t e1000_setup_led(struct e1000_hw *hw) { uint32_t ledctl; + int32_t ret_val = E1000_SUCCESS; DEBUGFUNC("e1000_setup_led"); - switch(hw->device_id) { - case E1000_DEV_ID_82542: - case E1000_DEV_ID_82543GC_FIBER: - case E1000_DEV_ID_82543GC_COPPER: - case E1000_DEV_ID_82544EI_COPPER: - case E1000_DEV_ID_82544EI_FIBER: - case E1000_DEV_ID_82544GC_COPPER: - case E1000_DEV_ID_82544GC_LOM: + switch(hw->mac_type) { + case e1000_82542_rev2_0: + case e1000_82542_rev2_1: + case e1000_82543: + case e1000_82544: /* No setup necessary */ break; - case E1000_DEV_ID_82545EM_FIBER: - case E1000_DEV_ID_82546EB_FIBER: - ledctl = E1000_READ_REG(hw, LEDCTL); - /* Save current LEDCTL settings */ - hw->ledctl_default = ledctl; - /* Turn off LED0 */ - ledctl &= ~(E1000_LEDCTL_LED0_IVRT | - E1000_LEDCTL_LED0_BLINK | - E1000_LEDCTL_LED0_MODE_MASK); - ledctl |= (E1000_LEDCTL_MODE_LED_OFF << E1000_LEDCTL_LED0_MODE_SHIFT); - E1000_WRITE_REG(hw, LEDCTL, ledctl); - break; - case E1000_DEV_ID_82540EP: - case E1000_DEV_ID_82540EP_LOM: - case E1000_DEV_ID_82540EP_LP: - case E1000_DEV_ID_82540EM: - case E1000_DEV_ID_82540EM_LOM: - case E1000_DEV_ID_82545EM_COPPER: - case E1000_DEV_ID_82546EB_COPPER: - case E1000_DEV_ID_82546EB_QUAD_COPPER: - case E1000_DEV_ID_82541EI: - case E1000_DEV_ID_82541EP: - case E1000_DEV_ID_82547EI: - E1000_WRITE_REG(hw, LEDCTL, hw->ledctl_mode1); - break; + case e1000_82541: + case e1000_82547: + case e1000_82541_rev_2: + case e1000_82547_rev_2: + /* Turn off PHY Smart Power Down (if enabled) */ + if((ret_val = e1000_read_phy_reg(hw, IGP01E1000_GMII_FIFO, + &hw->phy_spd_default))) + return ret_val; + if((ret_val = e1000_write_phy_reg(hw, IGP01E1000_GMII_FIFO, + (uint16_t)(hw->phy_spd_default & + ~IGP01E1000_GMII_SPD)))) + return ret_val; + /* Fall Through */ default: - DEBUGOUT("Invalid device ID\n"); - return -E1000_ERR_CONFIG; + if(hw->media_type == e1000_media_type_fiber) { + ledctl = E1000_READ_REG(hw, LEDCTL); + /* Save current LEDCTL settings */ + hw->ledctl_default = ledctl; + /* Turn off LED0 */ + ledctl &= ~(E1000_LEDCTL_LED0_IVRT | + E1000_LEDCTL_LED0_BLINK | + E1000_LEDCTL_LED0_MODE_MASK); + ledctl |= (E1000_LEDCTL_MODE_LED_OFF << + E1000_LEDCTL_LED0_MODE_SHIFT); + E1000_WRITE_REG(hw, LEDCTL, ledctl); + } else if(hw->media_type == e1000_media_type_copper) + E1000_WRITE_REG(hw, LEDCTL, hw->ledctl_mode1); + break; } - return 0; + + return E1000_SUCCESS; } /****************************************************************************** @@ -3864,39 +4117,33 @@ e1000_setup_led(struct e1000_hw *hw) int32_t e1000_cleanup_led(struct e1000_hw *hw) { + int32_t ret_val = E1000_SUCCESS; + DEBUGFUNC("e1000_cleanup_led"); - switch(hw->device_id) { - case E1000_DEV_ID_82542: - case E1000_DEV_ID_82543GC_FIBER: - case E1000_DEV_ID_82543GC_COPPER: - case E1000_DEV_ID_82544EI_COPPER: - case E1000_DEV_ID_82544EI_FIBER: - case E1000_DEV_ID_82544GC_COPPER: - case E1000_DEV_ID_82544GC_LOM: + switch(hw->mac_type) { + case e1000_82542_rev2_0: + case e1000_82542_rev2_1: + case e1000_82543: + case e1000_82544: /* No cleanup necessary */ break; - case E1000_DEV_ID_82540EP: - case E1000_DEV_ID_82540EP_LOM: - case E1000_DEV_ID_82540EP_LP: - case E1000_DEV_ID_82540EM: - case E1000_DEV_ID_82540EM_LOM: - case E1000_DEV_ID_82545EM_COPPER: - case E1000_DEV_ID_82545EM_FIBER: - case E1000_DEV_ID_82546EB_COPPER: - case E1000_DEV_ID_82546EB_FIBER: - case E1000_DEV_ID_82546EB_QUAD_COPPER: - case E1000_DEV_ID_82541EI: - case E1000_DEV_ID_82541EP: - case E1000_DEV_ID_82547EI: + case e1000_82541: + case e1000_82547: + case e1000_82541_rev_2: + case e1000_82547_rev_2: + /* Turn on PHY Smart Power Down (if previously enabled) */ + if((ret_val = e1000_write_phy_reg(hw, IGP01E1000_GMII_FIFO, + hw->phy_spd_default))) + return ret_val; + /* Fall Through */ + default: /* Restore LEDCTL settings */ E1000_WRITE_REG(hw, LEDCTL, hw->ledctl_default); break; - default: - DEBUGOUT("Invalid device ID\n"); - return -E1000_ERR_CONFIG; } - return 0; + + return E1000_SUCCESS; } /****************************************************************************** @@ -3907,50 +4154,44 @@ e1000_cleanup_led(struct e1000_hw *hw) int32_t e1000_led_on(struct e1000_hw *hw) { - uint32_t ctrl; + uint32_t ctrl = E1000_READ_REG(hw, CTRL); DEBUGFUNC("e1000_led_on"); - switch(hw->device_id) { - case E1000_DEV_ID_82542: - case E1000_DEV_ID_82543GC_FIBER: - case E1000_DEV_ID_82543GC_COPPER: - case E1000_DEV_ID_82544EI_FIBER: - ctrl = E1000_READ_REG(hw, CTRL); + switch(hw->mac_type) { + case e1000_82542_rev2_0: + case e1000_82542_rev2_1: + case e1000_82543: /* Set SW Defineable Pin 0 to turn on the LED */ ctrl |= E1000_CTRL_SWDPIN0; ctrl |= E1000_CTRL_SWDPIO0; - E1000_WRITE_REG(hw, CTRL, ctrl); break; - case E1000_DEV_ID_82544EI_COPPER: - case E1000_DEV_ID_82544GC_COPPER: - case E1000_DEV_ID_82544GC_LOM: - case E1000_DEV_ID_82545EM_FIBER: - case E1000_DEV_ID_82546EB_FIBER: - ctrl = E1000_READ_REG(hw, CTRL); - /* Clear SW Defineable Pin 0 to turn on the LED */ - ctrl &= ~E1000_CTRL_SWDPIN0; - ctrl |= E1000_CTRL_SWDPIO0; - E1000_WRITE_REG(hw, CTRL, ctrl); - break; - case E1000_DEV_ID_82540EP: - case E1000_DEV_ID_82540EP_LOM: - case E1000_DEV_ID_82540EP_LP: - case E1000_DEV_ID_82540EM: - case E1000_DEV_ID_82540EM_LOM: - case E1000_DEV_ID_82545EM_COPPER: - case E1000_DEV_ID_82546EB_COPPER: - case E1000_DEV_ID_82546EB_QUAD_COPPER: - case E1000_DEV_ID_82541EI: - case E1000_DEV_ID_82541EP: - case E1000_DEV_ID_82547EI: - E1000_WRITE_REG(hw, LEDCTL, hw->ledctl_mode2); + case e1000_82544: + if(hw->media_type == e1000_media_type_fiber) { + /* Set SW Defineable Pin 0 to turn on the LED */ + ctrl |= E1000_CTRL_SWDPIN0; + ctrl |= E1000_CTRL_SWDPIO0; + } else { + /* Clear SW Defineable Pin 0 to turn on the LED */ + ctrl &= ~E1000_CTRL_SWDPIN0; + ctrl |= E1000_CTRL_SWDPIO0; + } break; default: - DEBUGOUT("Invalid device ID\n"); - return -E1000_ERR_CONFIG; + if(hw->media_type == e1000_media_type_fiber) { + /* Clear SW Defineable Pin 0 to turn on the LED */ + ctrl &= ~E1000_CTRL_SWDPIN0; + ctrl |= E1000_CTRL_SWDPIO0; + } else if(hw->media_type == e1000_media_type_copper) { + E1000_WRITE_REG(hw, LEDCTL, hw->ledctl_mode2); + return E1000_SUCCESS; + } + break; } - return 0; + + E1000_WRITE_REG(hw, CTRL, ctrl); + + return E1000_SUCCESS; } /****************************************************************************** @@ -3961,50 +4202,44 @@ e1000_led_on(struct e1000_hw *hw) int32_t e1000_led_off(struct e1000_hw *hw) { - uint32_t ctrl; + uint32_t ctrl = E1000_READ_REG(hw, CTRL); DEBUGFUNC("e1000_led_off"); - switch(hw->device_id) { - case E1000_DEV_ID_82542: - case E1000_DEV_ID_82543GC_FIBER: - case E1000_DEV_ID_82543GC_COPPER: - case E1000_DEV_ID_82544EI_FIBER: - ctrl = E1000_READ_REG(hw, CTRL); + switch(hw->mac_type) { + case e1000_82542_rev2_0: + case e1000_82542_rev2_1: + case e1000_82543: /* Clear SW Defineable Pin 0 to turn off the LED */ ctrl &= ~E1000_CTRL_SWDPIN0; ctrl |= E1000_CTRL_SWDPIO0; - E1000_WRITE_REG(hw, CTRL, ctrl); break; - case E1000_DEV_ID_82544EI_COPPER: - case E1000_DEV_ID_82544GC_COPPER: - case E1000_DEV_ID_82544GC_LOM: - case E1000_DEV_ID_82545EM_FIBER: - case E1000_DEV_ID_82546EB_FIBER: - ctrl = E1000_READ_REG(hw, CTRL); - /* Set SW Defineable Pin 0 to turn off the LED */ - ctrl |= E1000_CTRL_SWDPIN0; - ctrl |= E1000_CTRL_SWDPIO0; - E1000_WRITE_REG(hw, CTRL, ctrl); - break; - case E1000_DEV_ID_82540EP: - case E1000_DEV_ID_82540EP_LOM: - case E1000_DEV_ID_82540EP_LP: - case E1000_DEV_ID_82540EM: - case E1000_DEV_ID_82540EM_LOM: - case E1000_DEV_ID_82545EM_COPPER: - case E1000_DEV_ID_82546EB_COPPER: - case E1000_DEV_ID_82546EB_QUAD_COPPER: - case E1000_DEV_ID_82541EI: - case E1000_DEV_ID_82541EP: - case E1000_DEV_ID_82547EI: - E1000_WRITE_REG(hw, LEDCTL, hw->ledctl_mode1); + case e1000_82544: + if(hw->media_type == e1000_media_type_fiber) { + /* Clear SW Defineable Pin 0 to turn off the LED */ + ctrl &= ~E1000_CTRL_SWDPIN0; + ctrl |= E1000_CTRL_SWDPIO0; + } else { + /* Set SW Defineable Pin 0 to turn off the LED */ + ctrl |= E1000_CTRL_SWDPIN0; + ctrl |= E1000_CTRL_SWDPIO0; + } break; default: - DEBUGOUT("Invalid device ID\n"); - return -E1000_ERR_CONFIG; + if(hw->media_type == e1000_media_type_fiber) { + /* Set SW Defineable Pin 0 to turn off the LED */ + ctrl |= E1000_CTRL_SWDPIN0; + ctrl |= E1000_CTRL_SWDPIO0; + } else if(hw->media_type == e1000_media_type_copper) { + E1000_WRITE_REG(hw, LEDCTL, hw->ledctl_mode1); + return E1000_SUCCESS; + } + break; } - return 0; + + E1000_WRITE_REG(hw, CTRL, ctrl); + + return E1000_SUCCESS; } /****************************************************************************** @@ -4127,8 +4362,7 @@ e1000_update_adaptive(struct e1000_hw *h DEBUGFUNC("e1000_update_adaptive"); if(hw->adaptive_ifs) { - if((hw->collision_delta * hw->ifs_ratio) > - hw->tx_packet_delta) { + if((hw->collision_delta * hw->ifs_ratio) > hw->tx_packet_delta) { if(hw->tx_packet_delta > MIN_NUM_XMITS) { hw->in_ifs_mode = TRUE; if(hw->current_ifs_val < hw->ifs_max_val) { @@ -4140,8 +4374,7 @@ e1000_update_adaptive(struct e1000_hw *h } } } else { - if((hw->in_ifs_mode == TRUE) && - (hw->tx_packet_delta <= MIN_NUM_XMITS)) { + if(hw->in_ifs_mode && (hw->tx_packet_delta <= MIN_NUM_XMITS)) { hw->current_ifs_val = 0; hw->in_ifs_mode = FALSE; E1000_WRITE_REG(hw, AIT, 0); @@ -4324,7 +4557,8 @@ e1000_write_reg_io(struct e1000_hw *hw, * min_length - The estimated minimum length * max_length - The estimated maximum length * - * returns: E1000_SUCCESS / -E1000_ERR_XXX + * returns: - E1000_ERR_XXX + * E1000_SUCCESS * * This function always returns a ranged length (minimum & maximum). * So for M88 phy's, this function interprets the one value returned from the @@ -4332,9 +4566,11 @@ e1000_write_reg_io(struct e1000_hw *hw, * For IGP phy's, the function calculates the range by the AGC registers. *****************************************************************************/ int32_t -e1000_get_cable_length(struct e1000_hw *hw, uint16_t *min_length, +e1000_get_cable_length(struct e1000_hw *hw, + uint16_t *min_length, uint16_t *max_length) { + int32_t ret_val; uint16_t agc_value = 0; uint16_t cur_agc, min_agc = IGP01E1000_AGC_LENGTH_TABLE_SIZE; uint16_t i, phy_data; @@ -4345,8 +4581,9 @@ e1000_get_cable_length(struct e1000_hw * /* Use old method for Phy older than IGP */ if(hw->phy_type == e1000_phy_m88) { - if(e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_STATUS, &phy_data) < 0) - return -E1000_ERR_PHY; + if((ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_STATUS, + &phy_data))) + return ret_val; /* Convert the enum value to ranged values */ switch((phy_data & M88E1000_PSSR_CABLE_LENGTH) >> @@ -4376,19 +4613,16 @@ e1000_get_cable_length(struct e1000_hw * break; } } else if(hw->phy_type == e1000_phy_igp) { /* For IGP PHY */ - uint16_t agc_reg_array[IGP01E1000_PHY_AGC_NUM] = {IGP01E1000_PHY_AGC_A, + uint16_t agc_reg_array[IGP01E1000_PHY_CHANNEL_NUM] = + {IGP01E1000_PHY_AGC_A, IGP01E1000_PHY_AGC_B, IGP01E1000_PHY_AGC_C, IGP01E1000_PHY_AGC_D}; /* Read the AGC registers for all channels */ - for(i = 0; i < IGP01E1000_PHY_AGC_NUM; i++) { - if(e1000_write_phy_reg(hw, IGP01E1000_PHY_PAGE_SELECT, - agc_reg_array[i]) != E1000_SUCCESS) - return -E1000_ERR_PHY; - if(e1000_read_phy_reg(hw, agc_reg_array[i] & - IGP01E1000_PHY_PAGE_SELECT, &phy_data) != - E1000_SUCCESS) - return -E1000_ERR_PHY; + for(i = 0; i < IGP01E1000_PHY_CHANNEL_NUM; i++) { + + if((ret_val = e1000_read_phy_reg(hw, agc_reg_array[i], &phy_data))) + return ret_val; cur_agc = phy_data >> IGP01E1000_AGC_LENGTH_SHIFT; @@ -4404,20 +4638,15 @@ e1000_get_cable_length(struct e1000_hw * min_agc = cur_agc; } - /* Return to page 0 */ - if(e1000_write_phy_reg(hw, IGP01E1000_PHY_PAGE_SELECT, 0x0) != - E1000_SUCCESS) - return -E1000_ERR_PHY; - /* Remove the minimal AGC result for length < 50m */ - if(agc_value < IGP01E1000_PHY_AGC_NUM * e1000_igp_cable_length_50) { + if(agc_value < IGP01E1000_PHY_CHANNEL_NUM * e1000_igp_cable_length_50) { agc_value -= min_agc; /* Get the average length of the remaining 3 channels */ - agc_value /= (IGP01E1000_PHY_AGC_NUM - 1); + agc_value /= (IGP01E1000_PHY_CHANNEL_NUM - 1); } else { /* Get the average length of all the 4 channels. */ - agc_value /= IGP01E1000_PHY_AGC_NUM; + agc_value /= IGP01E1000_PHY_CHANNEL_NUM; } /* Set the range of the calculated length. */ @@ -4439,7 +4668,8 @@ e1000_get_cable_length(struct e1000_hw * * polarity - output parameter : 0 - Polarity is not reversed * 1 - Polarity is reversed. * - * returns: E1000_SUCCESS / -E1000_ERR_XXX + * returns: - E1000_ERR_XXX + * E1000_SUCCESS * * For phy's older then IGP, this function simply reads the polarity bit in the * Phy Status register. For IGP phy's, this bit is valid only if link speed is @@ -4448,22 +4678,26 @@ e1000_get_cable_length(struct e1000_hw * * IGP01E1000_PHY_PCS_INIT_REG. *****************************************************************************/ int32_t -e1000_check_polarity(struct e1000_hw *hw, uint16_t *polarity) +e1000_check_polarity(struct e1000_hw *hw, + uint16_t *polarity) { + int32_t ret_val; uint16_t phy_data; DEBUGFUNC("e1000_check_polarity"); if(hw->phy_type == e1000_phy_m88) { /* return the Polarity bit in the Status register. */ - if(e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_STATUS, &phy_data) < 0) - return -E1000_ERR_PHY; + if((ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_STATUS, + &phy_data))) + return ret_val; *polarity = (phy_data & M88E1000_PSSR_REV_POLARITY) >> M88E1000_PSSR_REV_POLARITY_SHIFT; } else if(hw->phy_type == e1000_phy_igp) { /* Read the Status register to check the speed */ - if(e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_STATUS, &phy_data) < 0) - return -E1000_ERR_PHY; + if((ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_STATUS, + &phy_data))) + return ret_val; /* If speed is 1000 Mbps, must read the IGP01E1000_PHY_PCS_INIT_REG to * find the polarity status */ @@ -4471,18 +4705,9 @@ e1000_check_polarity(struct e1000_hw *hw IGP01E1000_PSSR_SPEED_1000MBPS) { /* Read the GIG initialization PCS register (0x00B4) */ - if(e1000_write_phy_reg(hw, IGP01E1000_PHY_PAGE_SELECT, - IGP01E1000_PHY_PCS_INIT_REG) < 0) - return -E1000_ERR_PHY; - - if(e1000_read_phy_reg(hw, IGP01E1000_PHY_PCS_INIT_REG & - IGP01E1000_PHY_PAGE_SELECT, &phy_data) < 0) - return -E1000_ERR_PHY; - - /* Return to page 0 */ - if(e1000_write_phy_reg(hw, IGP01E1000_PHY_PAGE_SELECT, 0x0) != - E1000_SUCCESS) - return -E1000_ERR_PHY; + if((ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PCS_INIT_REG, + &phy_data))) + return ret_val; /* Check the polarity bits */ *polarity = (phy_data & IGP01E1000_PHY_POLARITY_MASK) ? 1 : 0; @@ -4502,7 +4727,8 @@ e1000_check_polarity(struct e1000_hw *hw * downshift - output parameter : 0 - No Downshift ocured. * 1 - Downshift ocured. * - * returns: E1000_SUCCESS / -E1000_ERR_XXX + * returns: - E1000_ERR_XXX + * E1000_SUCCESS * * For phy's older then IGP, this function reads the Downshift bit in the Phy * Specific Status register. For IGP phy's, it reads the Downgrade bit in the @@ -4512,25 +4738,287 @@ e1000_check_polarity(struct e1000_hw *hw int32_t e1000_check_downshift(struct e1000_hw *hw) { + int32_t ret_val; uint16_t phy_data; DEBUGFUNC("e1000_check_downshift"); if(hw->phy_type == e1000_phy_igp) { - if(e1000_read_phy_reg(hw, IGP01E1000_PHY_LINK_HEALTH, &phy_data) < 0) { - DEBUGOUT("PHY Read Error\n"); - return -E1000_ERR_PHY; - } + if((ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_LINK_HEALTH, + &phy_data))) + return ret_val; + hw->speed_downgraded = (phy_data & IGP01E1000_PLHR_SS_DOWNGRADE) ? 1 : 0; } else if(hw->phy_type == e1000_phy_m88) { - if(e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_STATUS, &phy_data) < 0) { - DEBUGOUT("PHY Read Error\n"); - return -E1000_ERR_PHY; - } + if((ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_STATUS, + &phy_data))) + return ret_val; + hw->speed_downgraded = (phy_data & M88E1000_PSSR_DOWNSHIFT) >> - M88E1000_PSSR_DOWNSHIFT_SHIFT; + M88E1000_PSSR_DOWNSHIFT_SHIFT; } return E1000_SUCCESS; } +/***************************************************************************** + * + * 82541_rev_2 & 82547_rev_2 have the capability to configure the DSP when a + * gigabit link is achieved to improve link quality. + * + * hw: Struct containing variables accessed by shared code + * + * returns: - E1000_ERR_PHY if fail to read/write the PHY + * E1000_SUCCESS at any other case. + * + ****************************************************************************/ + +int32_t +e1000_config_dsp_after_link_change(struct e1000_hw *hw, + boolean_t link_up) +{ + int32_t ret_val; + uint16_t phy_data, speed, duplex, i; + uint16_t dsp_reg_array[IGP01E1000_PHY_CHANNEL_NUM] = + {IGP01E1000_PHY_AGC_PARAM_A, + IGP01E1000_PHY_AGC_PARAM_B, + IGP01E1000_PHY_AGC_PARAM_C, + IGP01E1000_PHY_AGC_PARAM_D}; + uint16_t min_length, max_length; + + DEBUGFUNC("e1000_config_dsp_after_link_change"); + + if(hw->phy_type != e1000_phy_igp) + return E1000_SUCCESS; + + if(link_up) { + if((ret_val = e1000_get_speed_and_duplex(hw, &speed, &duplex))) { + DEBUGOUT("Error getting link speed and duplex\n"); + return ret_val; + } + + if(speed == SPEED_1000) { + + e1000_get_cable_length(hw, &min_length, &max_length); + + if((hw->dsp_config_state == e1000_dsp_config_enabled) && + min_length >= e1000_igp_cable_length_50) { + + for(i = 0; i < IGP01E1000_PHY_CHANNEL_NUM; i++) { + if((ret_val = e1000_read_phy_reg(hw, dsp_reg_array[i], + &phy_data))) + return ret_val; + + phy_data &= ~IGP01E1000_PHY_EDAC_MU_INDEX; + + if((ret_val = e1000_write_phy_reg(hw, dsp_reg_array[i], + phy_data))) + return ret_val; + } + hw->dsp_config_state = e1000_dsp_config_activated; + } + + if((hw->ffe_config_state == e1000_ffe_config_enabled) && + (min_length < e1000_igp_cable_length_50)) { + + uint16_t ffe_idle_err_timeout = FFE_IDLE_ERR_COUNT_TIMEOUT_20; + uint32_t idle_errs = 0; + + /* clear previous idle error counts */ + if((ret_val = e1000_read_phy_reg(hw, PHY_1000T_STATUS, + &phy_data))) + return ret_val; + + for(i = 0; i < ffe_idle_err_timeout; i++) { + udelay(1000); + if((ret_val = e1000_read_phy_reg(hw, PHY_1000T_STATUS, + &phy_data))) + return ret_val; + + idle_errs += (phy_data & SR_1000T_IDLE_ERROR_CNT); + if(idle_errs > SR_1000T_PHY_EXCESSIVE_IDLE_ERR_COUNT) { + hw->ffe_config_state = e1000_ffe_config_active; + + if((ret_val = e1000_write_phy_reg(hw, + IGP01E1000_PHY_DSP_FFE, + IGP01E1000_PHY_DSP_FFE_CM_CP))) + return ret_val; + break; + } + + if(idle_errs) + ffe_idle_err_timeout = FFE_IDLE_ERR_COUNT_TIMEOUT_100; + } + } + } + } else { + if(hw->dsp_config_state == e1000_dsp_config_activated) { + if((ret_val = e1000_write_phy_reg(hw, 0x0000, + IGP01E1000_IEEE_FORCE_GIGA))) + return ret_val; + for(i = 0; i < IGP01E1000_PHY_CHANNEL_NUM; i++) { + if((ret_val = e1000_read_phy_reg(hw, dsp_reg_array[i], + &phy_data))) + return ret_val; + + phy_data &= ~IGP01E1000_PHY_EDAC_MU_INDEX; + phy_data |= IGP01E1000_PHY_EDAC_SIGN_EXT_9_BITS; + + if((ret_val = e1000_write_phy_reg(hw,dsp_reg_array[i], + phy_data))) + return ret_val; + } + + if((ret_val = e1000_write_phy_reg(hw, 0x0000, + IGP01E1000_IEEE_RESTART_AUTONEG))) + return ret_val; + + hw->dsp_config_state = e1000_dsp_config_enabled; + } + + if(hw->ffe_config_state == e1000_ffe_config_active) { + if((ret_val = e1000_write_phy_reg(hw, 0x0000, + IGP01E1000_IEEE_FORCE_GIGA))) + return ret_val; + if((ret_val = e1000_write_phy_reg(hw, IGP01E1000_PHY_DSP_FFE, + IGP01E1000_PHY_DSP_FFE_DEFAULT))) + return ret_val; + + if((ret_val = e1000_write_phy_reg(hw, 0x0000, + IGP01E1000_IEEE_RESTART_AUTONEG))) + return ret_val; + hw->ffe_config_state = e1000_ffe_config_enabled; + } + } + return E1000_SUCCESS; +} + +/***************************************************************************** + * + * This function sets the lplu state according to the active flag. When + * activating lplu this function also disables smart speed and vise versa. + * lplu will not be activated unless the device autonegotiation advertisment + * meets standards of either 10 or 10/100 or 10/100/1000 at all duplexes. + * hw: Struct containing variables accessed by shared code + * active - true to enable lplu false to disable lplu. + * + * returns: - E1000_ERR_PHY if fail to read/write the PHY + * E1000_SUCCESS at any other case. + * + ****************************************************************************/ + +int32_t +e1000_set_d3_lplu_state(struct e1000_hw *hw, + boolean_t active) +{ + int32_t ret_val; + uint16_t phy_data; + DEBUGFUNC("e1000_set_d3_lplu_state"); + + if(!((hw->mac_type == e1000_82541_rev_2) || + (hw->mac_type == e1000_82547_rev_2))) + return E1000_SUCCESS; + + /* During driver activity LPLU should not be used or it will attain link + * from the lowest speeds starting from 10Mbps. The capability is used for + * Dx transitions and states */ + if((ret_val = e1000_read_phy_reg(hw, IGP01E1000_GMII_FIFO, &phy_data))) + return ret_val; + + if(!active) { + phy_data &= ~IGP01E1000_GMII_FLEX_SPD; + if((ret_val = e1000_write_phy_reg(hw, IGP01E1000_GMII_FIFO, phy_data))) + return ret_val; + + /* LPLU and SmartSpeed are mutually exclusive. LPLU is used during + * Dx states where the power conservation is most important. During + * driver activity we should enable SmartSpeed, so performance is + * maintained. */ + if((ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG, + &phy_data))) + return ret_val; + + phy_data |= IGP01E1000_PSCFR_SMART_SPEED; + if((ret_val = e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG, + phy_data))) + return ret_val; + + } else if((hw->autoneg_advertised == AUTONEG_ADVERTISE_SPEED_DEFAULT) || + (hw->autoneg_advertised == AUTONEG_ADVERTISE_10_ALL ) || + (hw->autoneg_advertised == AUTONEG_ADVERTISE_10_100_ALL)) { + + phy_data |= IGP01E1000_GMII_FLEX_SPD; + if((ret_val = e1000_write_phy_reg(hw, IGP01E1000_GMII_FIFO, phy_data))) + return ret_val; + + /* When LPLU is enabled we should disable SmartSpeed */ + if((ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG, + &phy_data))) + return ret_val; + + phy_data &= ~IGP01E1000_PSCFR_SMART_SPEED; + if((ret_val = e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG, + phy_data))) + return ret_val; + + } + return E1000_SUCCESS; +} + +/****************************************************************************** + * Change VCO speed register to improve Bit Error Rate performance of SERDES. + * + * hw - Struct containing variables accessed by shared code + *****************************************************************************/ +static int32_t +e1000_set_vco_speed(struct e1000_hw *hw) +{ + int32_t ret_val; + uint16_t default_page = 0; + uint16_t phy_data; + + DEBUGFUNC("e1000_set_vco_speed"); + + switch(hw->mac_type) { + case e1000_82545_rev_3: + case e1000_82546_rev_3: + break; + default: + return E1000_SUCCESS; + } + + /* Set PHY register 30, page 5, bit 8 to 0 */ + + if((ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, + &default_page))) + return ret_val; + + if((ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, 0x0005))) + return ret_val; + + if((ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, &phy_data))) + return ret_val; + + phy_data &= ~M88E1000_PHY_VCO_REG_BIT8; + if((ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, phy_data))) + return ret_val; + + /* Set PHY register 30, page 4, bit 11 to 1 */ + + if((ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, 0x0004))) + return ret_val; + + if((ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, &phy_data))) + return ret_val; + + phy_data |= M88E1000_PHY_VCO_REG_BIT11; + if((ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, phy_data))) + return ret_val; + + if((ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, + default_page))) + return ret_val; + + return E1000_SUCCESS; +} + diff -prauN linux-2.6.0-test5/drivers/net/e1000/e1000_hw.h wli-2.6.0-test5-bk12-25/drivers/net/e1000/e1000_hw.h --- linux-2.6.0-test5/drivers/net/e1000/e1000_hw.h 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/e1000/e1000_hw.h 2003-09-25 19:15:59.000000000 -0700 @@ -33,9 +33,9 @@ #ifndef _E1000_HW_H_ #define _E1000_HW_H_ - #include "e1000_osdep.h" + /* Forward declarations of structures used by the shared code */ struct e1000_hw; struct e1000_hw_stats; @@ -50,9 +50,13 @@ typedef enum { e1000_82544, e1000_82540, e1000_82545, + e1000_82545_rev_3, e1000_82546, + e1000_82546_rev_3, e1000_82541, + e1000_82541_rev_2, e1000_82547, + e1000_82547_rev_2, e1000_num_macs } e1000_mac_type; @@ -67,6 +71,7 @@ typedef enum { typedef enum { e1000_media_type_copper = 0, e1000_media_type_fiber = 1, + e1000_media_type_internal_serdes = 2, e1000_num_media_types } e1000_media_type; @@ -90,7 +95,8 @@ typedef enum { typedef enum { e1000_bus_type_unknown = 0, e1000_bus_type_pci, - e1000_bus_type_pcix + e1000_bus_type_pcix, + e1000_bus_type_reserved } e1000_bus_type; /* PCI bus speeds */ @@ -108,7 +114,8 @@ typedef enum { typedef enum { e1000_bus_width_unknown = 0, e1000_bus_width_32, - e1000_bus_width_64 + e1000_bus_width_64, + e1000_bus_width_reserved } e1000_bus_width; /* PHY status info structure and supporting enums */ @@ -186,6 +193,26 @@ typedef enum { e1000_phy_undefined = 0xFF } e1000_phy_type; +typedef enum { + e1000_ms_hw_default = 0, + e1000_ms_force_master, + e1000_ms_force_slave, + e1000_ms_auto +} e1000_ms_type; + +typedef enum { + e1000_ffe_config_enabled = 0, + e1000_ffe_config_active, + e1000_ffe_config_blocked +} e1000_ffe_config; + +typedef enum { + e1000_dsp_config_disabled = 0, + e1000_dsp_config_enabled, + e1000_dsp_config_activated, + e1000_dsp_config_undefined = 0xFF +} e1000_dsp_config; + struct e1000_phy_info { e1000_cable_length cable_length; e1000_10bt_ext_dist_enable extended_10bt_distance; @@ -224,9 +251,10 @@ struct e1000_eeprom_info { /* Function prototypes */ /* Initialization */ -void e1000_reset_hw(struct e1000_hw *hw); +int32_t e1000_reset_hw(struct e1000_hw *hw); int32_t e1000_init_hw(struct e1000_hw *hw); int32_t e1000_set_mac_type(struct e1000_hw *hw); +void e1000_set_media_type(struct e1000_hw *hw); /* Link Configuration */ int32_t e1000_setup_link(struct e1000_hw *hw); @@ -234,8 +262,9 @@ int32_t e1000_phy_setup_autoneg(struct e void e1000_config_collision_dist(struct e1000_hw *hw); int32_t e1000_config_fc_after_link_up(struct e1000_hw *hw); int32_t e1000_check_for_link(struct e1000_hw *hw); -void e1000_get_speed_and_duplex(struct e1000_hw *hw, uint16_t * speed, uint16_t * duplex); +int32_t e1000_get_speed_and_duplex(struct e1000_hw *hw, uint16_t * speed, uint16_t * duplex); int32_t e1000_wait_autoneg(struct e1000_hw *hw); +int32_t e1000_force_mac_fc(struct e1000_hw *hw); /* PHY */ int32_t e1000_read_phy_reg(struct e1000_hw *hw, uint32_t reg_addr, uint16_t *phy_data); @@ -292,6 +321,8 @@ uint32_t e1000_io_read(struct e1000_hw * uint32_t e1000_read_reg_io(struct e1000_hw *hw, uint32_t offset); void e1000_io_write(struct e1000_hw *hw, uint32_t port, uint32_t value); void e1000_write_reg_io(struct e1000_hw *hw, uint32_t offset, uint32_t value); +int32_t e1000_config_dsp_after_link_change(struct e1000_hw *hw, boolean_t link_up); +int32_t e1000_set_d3_lplu_state(struct e1000_hw *hw, boolean_t active); #define E1000_READ_REG_IO(a, reg) \ e1000_read_reg_io((a), E1000_##reg) @@ -313,13 +344,22 @@ void e1000_write_reg_io(struct e1000_hw #define E1000_DEV_ID_82540EP_LP 0x101E #define E1000_DEV_ID_82545EM_COPPER 0x100F #define E1000_DEV_ID_82545EM_FIBER 0x1011 +#define E1000_DEV_ID_82545GM_COPPER 0x1026 +#define E1000_DEV_ID_82545GM_FIBER 0x1027 +#define E1000_DEV_ID_82545GM_SERDES 0x1028 #define E1000_DEV_ID_82546EB_COPPER 0x1010 #define E1000_DEV_ID_82546EB_FIBER 0x1012 #define E1000_DEV_ID_82546EB_QUAD_COPPER 0x101D #define E1000_DEV_ID_82541EI 0x1013 -#define E1000_DEV_ID_82541EP 0x1018 +#define E1000_DEV_ID_82541EI_MOBILE 0x1018 +#define E1000_DEV_ID_82541ER 0x1078 +#define E1000_DEV_ID_82547GI 0x1075 +#define E1000_DEV_ID_82541GI 0x1076 +#define E1000_DEV_ID_82541GI_MOBILE 0x1077 +#define E1000_DEV_ID_82546GB_COPPER 0x1079 +#define E1000_DEV_ID_82546GB_FIBER 0x107A +#define E1000_DEV_ID_82546GB_SERDES 0x107B #define E1000_DEV_ID_82547EI 0x1019 -#define NUM_DEV_IDS 20 #define NODE_ADDRESS_SIZE 6 #define ETH_LENGTH_OF_ADDRESS 6 @@ -385,7 +425,7 @@ void e1000_write_reg_io(struct e1000_hw E1000_IMS_RXSEQ | \ E1000_IMS_LSC) -/* The number of high/low register pairs in the RAR. The RAR (Receive Address +/* Number of high/low register pairs in the RAR. The RAR (Receive Address * Registers) holds the directed and multicast addresses that we monitor. We * reserve one of these spots for our directed address, allowing us room for * E1000_RAR_ENTRIES - 1 multicast addresses. @@ -539,7 +579,7 @@ struct e1000_rar { volatile uint32_t high; /* receive address high */ }; -/* The number of entries in the Multicast Table Array (MTA). */ +/* Number of entries in the Multicast Table Array (MTA). */ #define E1000_NUM_MTA_REGISTERS 128 /* IPv4 Address Table Entry */ @@ -599,6 +639,7 @@ struct e1000_ffvt_entry { * A - register array */ #define E1000_CTRL 0x00000 /* Device Control - RW */ +#define E1000_CTRL_DUP 0x00004 /* Device Control Duplicate (Shadow) - RW */ #define E1000_STATUS 0x00008 /* Device Status - RO */ #define E1000_EECD 0x00010 /* EEPROM/Flash Control - RW */ #define E1000_EERD 0x00014 /* EEPROM Read - RW */ @@ -934,6 +975,9 @@ struct e1000_hw { e1000_bus_width bus_width; e1000_bus_type bus_type; struct e1000_eeprom_info eeprom; + e1000_ms_type master_slave; + e1000_ms_type original_master_slave; + e1000_ffe_config ffe_config_state; uint32_t io_base; uint32_t phy_id; uint32_t phy_revision; @@ -950,6 +994,8 @@ struct e1000_hw { uint32_t ledctl_default; uint32_t ledctl_mode1; uint32_t ledctl_mode2; + uint16_t phy_spd_default; + uint16_t dsp_reset_counter; uint16_t autoneg_advertised; uint16_t pci_cmd_word; uint16_t fc_high_water; @@ -974,10 +1020,13 @@ struct e1000_hw { uint8_t perm_mac_addr[NODE_ADDRESS_SIZE]; boolean_t disable_polarity_correction; boolean_t speed_downgraded; + e1000_dsp_config dsp_config_state; boolean_t get_link_status; boolean_t tbi_compatibility_en; boolean_t tbi_compatibility_on; + boolean_t phy_reset_disable; boolean_t fc_send_xon; + boolean_t fc_strict_ieee; boolean_t report_tx_early; boolean_t adaptive_ifs; boolean_t ifs_params_forced; @@ -1059,7 +1108,7 @@ struct e1000_hw { #define E1000_EECD_PRES 0x00000100 /* EEPROM Present */ #define E1000_EECD_SIZE 0x00000200 /* EEPROM Size (0=64 word 1=256 word) */ #define E1000_EECD_ADDR_BITS 0x00000400 /* EEPROM Addressing bits based on type - * (0-small, 1-large) */ + * (0-small, 1-large) */ #define E1000_EECD_TYPE 0x00002000 /* EEPROM Type (1-SPI, 0-Microwire) */ #ifndef E1000_EEPROM_GRANT_ATTEMPTS #define E1000_EEPROM_GRANT_ATTEMPTS 1000 /* EEPROM # attempts to gain grant */ @@ -1121,22 +1170,22 @@ struct e1000_hw { #define E1000_MDIC_ERROR 0x40000000 /* LED Control */ -#define E1000_LEDCTL_LED0_MODE_MASK 0x0000000F -#define E1000_LEDCTL_LED0_MODE_SHIFT 0 -#define E1000_LEDCTL_LED0_IVRT 0x00000040 -#define E1000_LEDCTL_LED0_BLINK 0x00000080 -#define E1000_LEDCTL_LED1_MODE_MASK 0x00000F00 -#define E1000_LEDCTL_LED1_MODE_SHIFT 8 -#define E1000_LEDCTL_LED1_IVRT 0x00004000 -#define E1000_LEDCTL_LED1_BLINK 0x00008000 -#define E1000_LEDCTL_LED2_MODE_MASK 0x000F0000 -#define E1000_LEDCTL_LED2_MODE_SHIFT 16 -#define E1000_LEDCTL_LED2_IVRT 0x00400000 -#define E1000_LEDCTL_LED2_BLINK 0x00800000 -#define E1000_LEDCTL_LED3_MODE_MASK 0x0F000000 -#define E1000_LEDCTL_LED3_MODE_SHIFT 24 -#define E1000_LEDCTL_LED3_IVRT 0x40000000 -#define E1000_LEDCTL_LED3_BLINK 0x80000000 +#define E1000_LEDCTL_LED0_MODE_MASK 0x0000000F +#define E1000_LEDCTL_LED0_MODE_SHIFT 0 +#define E1000_LEDCTL_LED0_IVRT 0x00000040 +#define E1000_LEDCTL_LED0_BLINK 0x00000080 +#define E1000_LEDCTL_LED1_MODE_MASK 0x00000F00 +#define E1000_LEDCTL_LED1_MODE_SHIFT 8 +#define E1000_LEDCTL_LED1_IVRT 0x00004000 +#define E1000_LEDCTL_LED1_BLINK 0x00008000 +#define E1000_LEDCTL_LED2_MODE_MASK 0x000F0000 +#define E1000_LEDCTL_LED2_MODE_SHIFT 16 +#define E1000_LEDCTL_LED2_IVRT 0x00400000 +#define E1000_LEDCTL_LED2_BLINK 0x00800000 +#define E1000_LEDCTL_LED3_MODE_MASK 0x0F000000 +#define E1000_LEDCTL_LED3_MODE_SHIFT 24 +#define E1000_LEDCTL_LED3_IVRT 0x40000000 +#define E1000_LEDCTL_LED3_BLINK 0x80000000 #define E1000_LEDCTL_MODE_LINK_10_1000 0x0 #define E1000_LEDCTL_MODE_LINK_100_1000 0x1 @@ -1159,109 +1208,109 @@ struct e1000_hw { #define E1000_RAH_AV 0x80000000 /* Receive descriptor valid */ /* Interrupt Cause Read */ -#define E1000_ICR_TXDW 0x00000001 /* Transmit desc written back */ -#define E1000_ICR_TXQE 0x00000002 /* Transmit Queue empty */ -#define E1000_ICR_LSC 0x00000004 /* Link Status Change */ -#define E1000_ICR_RXSEQ 0x00000008 /* rx sequence error */ -#define E1000_ICR_RXDMT0 0x00000010 /* rx desc min. threshold (0) */ -#define E1000_ICR_RXO 0x00000040 /* rx overrun */ -#define E1000_ICR_RXT0 0x00000080 /* rx timer intr (ring 0) */ -#define E1000_ICR_MDAC 0x00000200 /* MDIO access complete */ -#define E1000_ICR_RXCFG 0x00000400 /* RX /c/ ordered set */ -#define E1000_ICR_GPI_EN0 0x00000800 /* GP Int 0 */ -#define E1000_ICR_GPI_EN1 0x00001000 /* GP Int 1 */ -#define E1000_ICR_GPI_EN2 0x00002000 /* GP Int 2 */ -#define E1000_ICR_GPI_EN3 0x00004000 /* GP Int 3 */ -#define E1000_ICR_TXD_LOW 0x00008000 -#define E1000_ICR_SRPD 0x00010000 +#define E1000_ICR_TXDW 0x00000001 /* Transmit desc written back */ +#define E1000_ICR_TXQE 0x00000002 /* Transmit Queue empty */ +#define E1000_ICR_LSC 0x00000004 /* Link Status Change */ +#define E1000_ICR_RXSEQ 0x00000008 /* rx sequence error */ +#define E1000_ICR_RXDMT0 0x00000010 /* rx desc min. threshold (0) */ +#define E1000_ICR_RXO 0x00000040 /* rx overrun */ +#define E1000_ICR_RXT0 0x00000080 /* rx timer intr (ring 0) */ +#define E1000_ICR_MDAC 0x00000200 /* MDIO access complete */ +#define E1000_ICR_RXCFG 0x00000400 /* RX /c/ ordered set */ +#define E1000_ICR_GPI_EN0 0x00000800 /* GP Int 0 */ +#define E1000_ICR_GPI_EN1 0x00001000 /* GP Int 1 */ +#define E1000_ICR_GPI_EN2 0x00002000 /* GP Int 2 */ +#define E1000_ICR_GPI_EN3 0x00004000 /* GP Int 3 */ +#define E1000_ICR_TXD_LOW 0x00008000 +#define E1000_ICR_SRPD 0x00010000 /* Interrupt Cause Set */ -#define E1000_ICS_TXDW E1000_ICR_TXDW /* Transmit desc written back */ -#define E1000_ICS_TXQE E1000_ICR_TXQE /* Transmit Queue empty */ -#define E1000_ICS_LSC E1000_ICR_LSC /* Link Status Change */ -#define E1000_ICS_RXSEQ E1000_ICR_RXSEQ /* rx sequence error */ -#define E1000_ICS_RXDMT0 E1000_ICR_RXDMT0 /* rx desc min. threshold */ -#define E1000_ICS_RXO E1000_ICR_RXO /* rx overrun */ -#define E1000_ICS_RXT0 E1000_ICR_RXT0 /* rx timer intr */ -#define E1000_ICS_MDAC E1000_ICR_MDAC /* MDIO access complete */ -#define E1000_ICS_RXCFG E1000_ICR_RXCFG /* RX /c/ ordered set */ -#define E1000_ICS_GPI_EN0 E1000_ICR_GPI_EN0 /* GP Int 0 */ -#define E1000_ICS_GPI_EN1 E1000_ICR_GPI_EN1 /* GP Int 1 */ -#define E1000_ICS_GPI_EN2 E1000_ICR_GPI_EN2 /* GP Int 2 */ -#define E1000_ICS_GPI_EN3 E1000_ICR_GPI_EN3 /* GP Int 3 */ -#define E1000_ICS_TXD_LOW E1000_ICR_TXD_LOW -#define E1000_ICS_SRPD E1000_ICR_SRPD +#define E1000_ICS_TXDW E1000_ICR_TXDW /* Transmit desc written back */ +#define E1000_ICS_TXQE E1000_ICR_TXQE /* Transmit Queue empty */ +#define E1000_ICS_LSC E1000_ICR_LSC /* Link Status Change */ +#define E1000_ICS_RXSEQ E1000_ICR_RXSEQ /* rx sequence error */ +#define E1000_ICS_RXDMT0 E1000_ICR_RXDMT0 /* rx desc min. threshold */ +#define E1000_ICS_RXO E1000_ICR_RXO /* rx overrun */ +#define E1000_ICS_RXT0 E1000_ICR_RXT0 /* rx timer intr */ +#define E1000_ICS_MDAC E1000_ICR_MDAC /* MDIO access complete */ +#define E1000_ICS_RXCFG E1000_ICR_RXCFG /* RX /c/ ordered set */ +#define E1000_ICS_GPI_EN0 E1000_ICR_GPI_EN0 /* GP Int 0 */ +#define E1000_ICS_GPI_EN1 E1000_ICR_GPI_EN1 /* GP Int 1 */ +#define E1000_ICS_GPI_EN2 E1000_ICR_GPI_EN2 /* GP Int 2 */ +#define E1000_ICS_GPI_EN3 E1000_ICR_GPI_EN3 /* GP Int 3 */ +#define E1000_ICS_TXD_LOW E1000_ICR_TXD_LOW +#define E1000_ICS_SRPD E1000_ICR_SRPD /* Interrupt Mask Set */ -#define E1000_IMS_TXDW E1000_ICR_TXDW /* Transmit desc written back */ -#define E1000_IMS_TXQE E1000_ICR_TXQE /* Transmit Queue empty */ -#define E1000_IMS_LSC E1000_ICR_LSC /* Link Status Change */ -#define E1000_IMS_RXSEQ E1000_ICR_RXSEQ /* rx sequence error */ -#define E1000_IMS_RXDMT0 E1000_ICR_RXDMT0 /* rx desc min. threshold */ -#define E1000_IMS_RXO E1000_ICR_RXO /* rx overrun */ -#define E1000_IMS_RXT0 E1000_ICR_RXT0 /* rx timer intr */ -#define E1000_IMS_MDAC E1000_ICR_MDAC /* MDIO access complete */ -#define E1000_IMS_RXCFG E1000_ICR_RXCFG /* RX /c/ ordered set */ -#define E1000_IMS_GPI_EN0 E1000_ICR_GPI_EN0 /* GP Int 0 */ -#define E1000_IMS_GPI_EN1 E1000_ICR_GPI_EN1 /* GP Int 1 */ -#define E1000_IMS_GPI_EN2 E1000_ICR_GPI_EN2 /* GP Int 2 */ -#define E1000_IMS_GPI_EN3 E1000_ICR_GPI_EN3 /* GP Int 3 */ -#define E1000_IMS_TXD_LOW E1000_ICR_TXD_LOW -#define E1000_IMS_SRPD E1000_ICR_SRPD +#define E1000_IMS_TXDW E1000_ICR_TXDW /* Transmit desc written back */ +#define E1000_IMS_TXQE E1000_ICR_TXQE /* Transmit Queue empty */ +#define E1000_IMS_LSC E1000_ICR_LSC /* Link Status Change */ +#define E1000_IMS_RXSEQ E1000_ICR_RXSEQ /* rx sequence error */ +#define E1000_IMS_RXDMT0 E1000_ICR_RXDMT0 /* rx desc min. threshold */ +#define E1000_IMS_RXO E1000_ICR_RXO /* rx overrun */ +#define E1000_IMS_RXT0 E1000_ICR_RXT0 /* rx timer intr */ +#define E1000_IMS_MDAC E1000_ICR_MDAC /* MDIO access complete */ +#define E1000_IMS_RXCFG E1000_ICR_RXCFG /* RX /c/ ordered set */ +#define E1000_IMS_GPI_EN0 E1000_ICR_GPI_EN0 /* GP Int 0 */ +#define E1000_IMS_GPI_EN1 E1000_ICR_GPI_EN1 /* GP Int 1 */ +#define E1000_IMS_GPI_EN2 E1000_ICR_GPI_EN2 /* GP Int 2 */ +#define E1000_IMS_GPI_EN3 E1000_ICR_GPI_EN3 /* GP Int 3 */ +#define E1000_IMS_TXD_LOW E1000_ICR_TXD_LOW +#define E1000_IMS_SRPD E1000_ICR_SRPD /* Interrupt Mask Clear */ -#define E1000_IMC_TXDW E1000_ICR_TXDW /* Transmit desc written back */ -#define E1000_IMC_TXQE E1000_ICR_TXQE /* Transmit Queue empty */ -#define E1000_IMC_LSC E1000_ICR_LSC /* Link Status Change */ -#define E1000_IMC_RXSEQ E1000_ICR_RXSEQ /* rx sequence error */ -#define E1000_IMC_RXDMT0 E1000_ICR_RXDMT0 /* rx desc min. threshold */ -#define E1000_IMC_RXO E1000_ICR_RXO /* rx overrun */ -#define E1000_IMC_RXT0 E1000_ICR_RXT0 /* rx timer intr */ -#define E1000_IMC_MDAC E1000_ICR_MDAC /* MDIO access complete */ -#define E1000_IMC_RXCFG E1000_ICR_RXCFG /* RX /c/ ordered set */ -#define E1000_IMC_GPI_EN0 E1000_ICR_GPI_EN0 /* GP Int 0 */ -#define E1000_IMC_GPI_EN1 E1000_ICR_GPI_EN1 /* GP Int 1 */ -#define E1000_IMC_GPI_EN2 E1000_ICR_GPI_EN2 /* GP Int 2 */ -#define E1000_IMC_GPI_EN3 E1000_ICR_GPI_EN3 /* GP Int 3 */ -#define E1000_IMC_TXD_LOW E1000_ICR_TXD_LOW -#define E1000_IMC_SRPD E1000_ICR_SRPD +#define E1000_IMC_TXDW E1000_ICR_TXDW /* Transmit desc written back */ +#define E1000_IMC_TXQE E1000_ICR_TXQE /* Transmit Queue empty */ +#define E1000_IMC_LSC E1000_ICR_LSC /* Link Status Change */ +#define E1000_IMC_RXSEQ E1000_ICR_RXSEQ /* rx sequence error */ +#define E1000_IMC_RXDMT0 E1000_ICR_RXDMT0 /* rx desc min. threshold */ +#define E1000_IMC_RXO E1000_ICR_RXO /* rx overrun */ +#define E1000_IMC_RXT0 E1000_ICR_RXT0 /* rx timer intr */ +#define E1000_IMC_MDAC E1000_ICR_MDAC /* MDIO access complete */ +#define E1000_IMC_RXCFG E1000_ICR_RXCFG /* RX /c/ ordered set */ +#define E1000_IMC_GPI_EN0 E1000_ICR_GPI_EN0 /* GP Int 0 */ +#define E1000_IMC_GPI_EN1 E1000_ICR_GPI_EN1 /* GP Int 1 */ +#define E1000_IMC_GPI_EN2 E1000_ICR_GPI_EN2 /* GP Int 2 */ +#define E1000_IMC_GPI_EN3 E1000_ICR_GPI_EN3 /* GP Int 3 */ +#define E1000_IMC_TXD_LOW E1000_ICR_TXD_LOW +#define E1000_IMC_SRPD E1000_ICR_SRPD /* Receive Control */ -#define E1000_RCTL_RST 0x00000001 /* Software reset */ -#define E1000_RCTL_EN 0x00000002 /* enable */ -#define E1000_RCTL_SBP 0x00000004 /* store bad packet */ -#define E1000_RCTL_UPE 0x00000008 /* unicast promiscuous enable */ -#define E1000_RCTL_MPE 0x00000010 /* multicast promiscuous enab */ -#define E1000_RCTL_LPE 0x00000020 /* long packet enable */ -#define E1000_RCTL_LBM_NO 0x00000000 /* no loopback mode */ -#define E1000_RCTL_LBM_MAC 0x00000040 /* MAC loopback mode */ -#define E1000_RCTL_LBM_SLP 0x00000080 /* serial link loopback mode */ -#define E1000_RCTL_LBM_TCVR 0x000000C0 /* tcvr loopback mode */ -#define E1000_RCTL_RDMTS_HALF 0x00000000 /* rx desc min threshold size */ -#define E1000_RCTL_RDMTS_QUAT 0x00000100 /* rx desc min threshold size */ -#define E1000_RCTL_RDMTS_EIGTH 0x00000200 /* rx desc min threshold size */ -#define E1000_RCTL_MO_SHIFT 12 /* multicast offset shift */ -#define E1000_RCTL_MO_0 0x00000000 /* multicast offset 11:0 */ -#define E1000_RCTL_MO_1 0x00001000 /* multicast offset 12:1 */ -#define E1000_RCTL_MO_2 0x00002000 /* multicast offset 13:2 */ -#define E1000_RCTL_MO_3 0x00003000 /* multicast offset 15:4 */ -#define E1000_RCTL_MDR 0x00004000 /* multicast desc ring 0 */ -#define E1000_RCTL_BAM 0x00008000 /* broadcast enable */ +#define E1000_RCTL_RST 0x00000001 /* Software reset */ +#define E1000_RCTL_EN 0x00000002 /* enable */ +#define E1000_RCTL_SBP 0x00000004 /* store bad packet */ +#define E1000_RCTL_UPE 0x00000008 /* unicast promiscuous enable */ +#define E1000_RCTL_MPE 0x00000010 /* multicast promiscuous enab */ +#define E1000_RCTL_LPE 0x00000020 /* long packet enable */ +#define E1000_RCTL_LBM_NO 0x00000000 /* no loopback mode */ +#define E1000_RCTL_LBM_MAC 0x00000040 /* MAC loopback mode */ +#define E1000_RCTL_LBM_SLP 0x00000080 /* serial link loopback mode */ +#define E1000_RCTL_LBM_TCVR 0x000000C0 /* tcvr loopback mode */ +#define E1000_RCTL_RDMTS_HALF 0x00000000 /* rx desc min threshold size */ +#define E1000_RCTL_RDMTS_QUAT 0x00000100 /* rx desc min threshold size */ +#define E1000_RCTL_RDMTS_EIGTH 0x00000200 /* rx desc min threshold size */ +#define E1000_RCTL_MO_SHIFT 12 /* multicast offset shift */ +#define E1000_RCTL_MO_0 0x00000000 /* multicast offset 11:0 */ +#define E1000_RCTL_MO_1 0x00001000 /* multicast offset 12:1 */ +#define E1000_RCTL_MO_2 0x00002000 /* multicast offset 13:2 */ +#define E1000_RCTL_MO_3 0x00003000 /* multicast offset 15:4 */ +#define E1000_RCTL_MDR 0x00004000 /* multicast desc ring 0 */ +#define E1000_RCTL_BAM 0x00008000 /* broadcast enable */ /* these buffer sizes are valid if E1000_RCTL_BSEX is 0 */ -#define E1000_RCTL_SZ_2048 0x00000000 /* rx buffer size 2048 */ -#define E1000_RCTL_SZ_1024 0x00010000 /* rx buffer size 1024 */ -#define E1000_RCTL_SZ_512 0x00020000 /* rx buffer size 512 */ -#define E1000_RCTL_SZ_256 0x00030000 /* rx buffer size 256 */ +#define E1000_RCTL_SZ_2048 0x00000000 /* rx buffer size 2048 */ +#define E1000_RCTL_SZ_1024 0x00010000 /* rx buffer size 1024 */ +#define E1000_RCTL_SZ_512 0x00020000 /* rx buffer size 512 */ +#define E1000_RCTL_SZ_256 0x00030000 /* rx buffer size 256 */ /* these buffer sizes are valid if E1000_RCTL_BSEX is 1 */ -#define E1000_RCTL_SZ_16384 0x00010000 /* rx buffer size 16384 */ -#define E1000_RCTL_SZ_8192 0x00020000 /* rx buffer size 8192 */ -#define E1000_RCTL_SZ_4096 0x00030000 /* rx buffer size 4096 */ -#define E1000_RCTL_VFE 0x00040000 /* vlan filter enable */ -#define E1000_RCTL_CFIEN 0x00080000 /* canonical form enable */ -#define E1000_RCTL_CFI 0x00100000 /* canonical form indicator */ -#define E1000_RCTL_DPF 0x00400000 /* discard pause frames */ -#define E1000_RCTL_PMCF 0x00800000 /* pass MAC control frames */ -#define E1000_RCTL_BSEX 0x02000000 /* Buffer size extension */ +#define E1000_RCTL_SZ_16384 0x00010000 /* rx buffer size 16384 */ +#define E1000_RCTL_SZ_8192 0x00020000 /* rx buffer size 8192 */ +#define E1000_RCTL_SZ_4096 0x00030000 /* rx buffer size 4096 */ +#define E1000_RCTL_VFE 0x00040000 /* vlan filter enable */ +#define E1000_RCTL_CFIEN 0x00080000 /* canonical form enable */ +#define E1000_RCTL_CFI 0x00100000 /* canonical form indicator */ +#define E1000_RCTL_DPF 0x00400000 /* discard pause frames */ +#define E1000_RCTL_PMCF 0x00800000 /* pass MAC control frames */ +#define E1000_RCTL_BSEX 0x02000000 /* Buffer size extension */ /* Receive Descriptor */ #define E1000_RDT_DELAY 0x0000ffff /* Delay timer (1=1024us) */ @@ -1426,15 +1475,17 @@ struct e1000_hw { #define EEPROM_SIZE_128B 0x0000 #define EEPROM_SIZE_MASK 0x1C00 - /* EEPROM Word Offsets */ -#define EEPROM_COMPAT 0x0003 -#define EEPROM_ID_LED_SETTINGS 0x0004 -#define EEPROM_INIT_CONTROL1_REG 0x000A -#define EEPROM_INIT_CONTROL2_REG 0x000F -#define EEPROM_CFG 0x0012 -#define EEPROM_FLASH_VERSION 0x0032 -#define EEPROM_CHECKSUM_REG 0x003F +#define EEPROM_COMPAT 0x0003 +#define EEPROM_ID_LED_SETTINGS 0x0004 +#define EEPROM_SERDES_AMPLITUDE 0x0006 /* For SERDES output amplitude adjustment. */ +#define EEPROM_INIT_CONTROL1_REG 0x000A +#define EEPROM_INIT_CONTROL2_REG 0x000F +#define EEPROM_INIT_CONTROL3_PORT_B 0x0014 +#define EEPROM_INIT_CONTROL3_PORT_A 0x0024 +#define EEPROM_CFG 0x0012 +#define EEPROM_FLASH_VERSION 0x0032 +#define EEPROM_CHECKSUM_REG 0x003F /* Word definitions for ID LED Settings */ #define ID_LED_RESERVED_0000 0x0000 @@ -1458,6 +1509,9 @@ struct e1000_hw { #define IGP_LED3_MODE 0x07000000 +/* Mask bits for SERDES amplitude adjustment in Word 6 of the EEPROM */ +#define EEPROM_SERDES_AMPLITUDE_MASK 0x000F + /* Mask bits for fields in Word 0x0a of the EEPROM */ #define EEPROM_WORD0A_ILOS 0x0010 #define EEPROM_WORD0A_SWDPIO 0x01E0 @@ -1479,6 +1533,8 @@ struct e1000_hw { #define EEPROM_NODE_ADDRESS_BYTE_0 0 #define EEPROM_PBA_BYTE_1 8 +#define EEPROM_RESERVED_WORD 0xFFFF + /* EEPROM Map Sizes (Byte Counts) */ #define PBA_SIZE 4 @@ -1490,7 +1546,7 @@ struct e1000_hw { #define E1000_HDX_COLLISION_DISTANCE E1000_COLLISION_DISTANCE #define E1000_COLD_SHIFT 12 -/* The number of Transmit and Receive Descriptors must be a multiple of 8 */ +/* Number of Transmit and Receive Descriptors must be a multiple of 8 */ #define REQ_TX_DESCRIPTOR_MULTIPLE 8 #define REQ_RX_DESCRIPTOR_MULTIPLE 8 @@ -1557,35 +1613,30 @@ struct e1000_hw { #define PCIX_STATUS_HI_MMRBC_2K 0x2 -/* The number of bits that we need to shift right to move the "pause" - * bits from the EEPROM (bits 13:12) to the "pause" (bits 8:7) field - * in the TXCW register +/* Number of bits required to shift right the "pause" bits from the + * EEPROM (bits 13:12) to the "pause" (bits 8:7) field in the TXCW register. */ #define PAUSE_SHIFT 5 -/* The number of bits that we need to shift left to move the "SWDPIO" - * bits from the EEPROM (bits 8:5) to the "SWDPIO" (bits 25:22) field - * in the CTRL register +/* Number of bits required to shift left the "SWDPIO" bits from the + * EEPROM (bits 8:5) to the "SWDPIO" (bits 25:22) field in the CTRL register. */ #define SWDPIO_SHIFT 17 -/* The number of bits that we need to shift left to move the "SWDPIO_EXT" - * bits from the EEPROM word F (bits 7:4) to the bits 11:8 of The - * Extended CTRL register. - * in the CTRL register +/* Number of bits required to shift left the "SWDPIO_EXT" bits from the + * EEPROM word F (bits 7:4) to the bits 11:8 of The Extended CTRL register. */ #define SWDPIO__EXT_SHIFT 4 -/* The number of bits that we need to shift left to move the "ILOS" - * bit from the EEPROM (bit 4) to the "ILOS" (bit 7) field - * in the CTRL register +/* Number of bits required to shift left the "ILOS" bit from the EEPROM + * (bit 4) to the "ILOS" (bit 7) field in the CTRL register. */ #define ILOS_SHIFT 3 #define RECEIVE_BUFFER_ALIGN_SIZE (256) -/* The number of milliseconds we wait for auto-negotiation to complete */ +/* Number of milliseconds we wait for auto-negotiation to complete */ #define LINK_UP_TIMEOUT 500 #define E1000_TX_BUFFER_SIZE ((uint32_t)1514) @@ -1668,7 +1719,16 @@ struct e1000_hw { #define M88E1000_EXT_PHY_SPEC_CTRL 0x14 /* Extended PHY Specific Control */ #define M88E1000_RX_ERR_CNTR 0x15 /* Receive Error Counter */ +#define M88E1000_PHY_EXT_CTRL 0x1A /* PHY extend control register */ +#define M88E1000_PHY_PAGE_SELECT 0x1D /* Reg 29 for page number setting */ +#define M88E1000_PHY_GEN_CONTROL 0x1E /* Its meaning depends on reg 29 */ +#define M88E1000_PHY_VCO_REG_BIT8 0x100 /* Bits 8 & 11 are adjusted for */ +#define M88E1000_PHY_VCO_REG_BIT11 0x800 /* improved BER performance */ + #define IGP01E1000_IEEE_REGS_PAGE 0x0000 +#define IGP01E1000_IEEE_RESTART_AUTONEG 0x3300 +#define IGP01E1000_IEEE_FORCE_GIGA 0x0140 + /* IGP01E1000 Specific Registers */ #define IGP01E1000_PHY_PORT_CONFIG 0x10 /* PHY Specific Port Config Register */ #define IGP01E1000_PHY_PORT_STATUS 0x11 /* PHY Specific Status Register */ @@ -1684,17 +1744,35 @@ struct e1000_hw { #define IGP01E1000_PHY_AGC_C 0x1472 #define IGP01E1000_PHY_AGC_D 0x1872 -/* Number of AGC registers */ -#define IGP01E1000_PHY_AGC_NUM 4 +/* IGP01E1000 DSP Reset Register */ +#define IGP01E1000_PHY_DSP_RESET 0x1F33 +#define IGP01E1000_PHY_DSP_SET 0x1F71 +#define IGP01E1000_PHY_DSP_FFE 0x1F35 + +#define IGP01E1000_PHY_CHANNEL_NUM 4 +#define IGP01E1000_PHY_AGC_PARAM_A 0x1171 +#define IGP01E1000_PHY_AGC_PARAM_B 0x1271 +#define IGP01E1000_PHY_AGC_PARAM_C 0x1471 +#define IGP01E1000_PHY_AGC_PARAM_D 0x1871 + +#define IGP01E1000_PHY_EDAC_MU_INDEX 0xC000 +#define IGP01E1000_PHY_EDAC_SIGN_EXT_9_BITS 0x8000 + +#define IGP01E1000_PHY_ANALOG_TX_STATE 0x2890 +#define IGP01E1000_PHY_ANALOG_CLASS_A 0x2000 +#define IGP01E1000_PHY_FORCE_ANALOG_ENABLE 0x0004 +#define IGP01E1000_PHY_DSP_FFE_CM_CP 0x0069 +#define IGP01E1000_PHY_DSP_FFE_DEFAULT 0x002A /* IGP01E1000 PCS Initialization register - stores the polarity status when * speed = 1000 Mbps. */ #define IGP01E1000_PHY_PCS_INIT_REG 0x00B4 +#define IGP01E1000_PHY_PCS_CTRL_REG 0x00B5 #define IGP01E1000_ANALOG_REGS_PAGE 0x20C0 #define MAX_PHY_REG_ADDRESS 0x1F /* 5 bit address bus (0-0x1F) */ - +#define MAX_PHY_MULTI_PAGE_REG 0xF /*Registers that are equal on all pages*/ /* PHY Control Register */ #define MII_CR_SPEED_SELECT_MSB 0x0040 /* bits 6,13: 10=1000, 01=100, 00=10 */ #define MII_CR_COLL_TEST_ENABLE 0x0080 /* Collision test enable */ @@ -1808,8 +1886,11 @@ struct e1000_hw { #define SR_1000T_LOCAL_RX_STATUS 0x2000 /* Local receiver OK */ #define SR_1000T_MS_CONFIG_RES 0x4000 /* 1=Local TX is Master, 0=Slave */ #define SR_1000T_MS_CONFIG_FAULT 0x8000 /* Master/Slave config fault */ -#define SR_1000T_REMOTE_RX_STATUS_SHIFT 12 -#define SR_1000T_LOCAL_RX_STATUS_SHIFT 13 +#define SR_1000T_REMOTE_RX_STATUS_SHIFT 12 +#define SR_1000T_LOCAL_RX_STATUS_SHIFT 13 +#define SR_1000T_PHY_EXCESSIVE_IDLE_ERR_COUNT 5 +#define FFE_IDLE_ERR_COUNT_TIMEOUT_20 20 +#define FFE_IDLE_ERR_COUNT_TIMEOUT_100 100 /* Extended Status Register */ #define IEEE_ESR_1000T_HD_CAPS 0x1000 /* 1000T HD capable */ @@ -1901,7 +1982,6 @@ struct e1000_hw { #define M88E1000_EPSCR_TX_CLK_25 0x0070 /* 25 MHz TX_CLK */ #define M88E1000_EPSCR_TX_CLK_0 0x0000 /* NO TX_CLK */ - /* IGP01E1000 Specific Port Config Register - R/W */ #define IGP01E1000_PSCFR_AUTO_MDIX_PAR_DETECT 0x0010 #define IGP01E1000_PSCFR_PRE_EN 0x0020 @@ -1952,6 +2032,11 @@ struct e1000_hw { #define IGP01E1000_MSE_CHANNEL_B 0x0F00 #define IGP01E1000_MSE_CHANNEL_A 0xF000 +/* IGP01E1000 DSP reset macros */ +#define DSP_RESET_ENABLE 0x0 +#define DSP_RESET_DISABLE 0x2 +#define E1000_MAX_DSP_RESETS 10 + /* IGP01E1000 AGC Registers */ #define IGP01E1000_AGC_LENGTH_SHIFT 7 /* Coarse - 13:11, Fine - 10:7 */ @@ -1962,18 +2047,6 @@ struct e1000_hw { /* The precision of the length is +/- 10 meters */ #define IGP01E1000_AGC_RANGE 10 -/* IGP cable length table */ -static const -uint16_t e1000_igp_cable_length_table[IGP01E1000_AGC_LENGTH_TABLE_SIZE] = - { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 10, 10, 10, 10, 10, 10, 10, 20, 20, 20, 20, 20, 25, 25, 25, - 25, 25, 25, 25, 30, 30, 30, 30, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 50, 50, 50, 50, 50, 50, 50, 60, 60, 60, 60, 60, 60, 60, 60, - 60, 70, 70, 70, 70, 70, 70, 80, 80, 80, 80, 80, 80, 90, 90, 90, - 90, 90, 90, 90, 90, 90, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120}; - /* IGP01E1000 PCS Initialization register */ /* bits 3:6 in the PCS registers stores the channels polarity */ #define IGP01E1000_PHY_POLARITY_MASK 0x0078 @@ -1982,11 +2055,12 @@ uint16_t e1000_igp_cable_length_table[IG #define IGP01E1000_GMII_FLEX_SPD 0x10 /* Enable flexible speed * on Link-Up */ #define IGP01E1000_GMII_SPD 0x20 /* Enable SPD */ + /* IGP01E1000 Analog Register */ -#define IGP01E1000_ANALOG_SPARE_FUSE_STATUS 0x0011 -#define IGP01E1000_ANALOG_FUSE_STATUS 0x0010 -#define IGP01E1000_ANALOG_FUSE_CONTROL 0x001C -#define IGP01E1000_ANALOG_FUSE_BYPASS 0x001E +#define IGP01E1000_ANALOG_SPARE_FUSE_STATUS 0x20D1 +#define IGP01E1000_ANALOG_FUSE_STATUS 0x20D0 +#define IGP01E1000_ANALOG_FUSE_CONTROL 0x20DC +#define IGP01E1000_ANALOG_FUSE_BYPASS 0x20DE #define IGP01E1000_ANALOG_FUSE_POLY_MASK 0xF000 #define IGP01E1000_ANALOG_FUSE_FINE_MASK 0x0F80 @@ -2032,5 +2106,8 @@ uint16_t e1000_igp_cable_length_table[IG #define ADVERTISE_1000_HALF 0x0010 #define ADVERTISE_1000_FULL 0x0020 #define AUTONEG_ADVERTISE_SPEED_DEFAULT 0x002F /* Everything but 1000-Half */ +#define AUTONEG_ADVERTISE_10_100_ALL 0x000F /* All 10/100 speeds*/ +#define AUTONEG_ADVERTISE_10_ALL 0x0003 /* 10Mbps Full & Half speeds*/ + #endif /* _E1000_HW_H_ */ diff -prauN linux-2.6.0-test5/drivers/net/e1000/e1000_main.c wli-2.6.0-test5-bk12-25/drivers/net/e1000/e1000_main.c --- linux-2.6.0-test5/drivers/net/e1000/e1000_main.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/e1000/e1000_main.c 2003-09-25 19:15:59.000000000 -0700 @@ -30,6 +30,22 @@ /* Change Log * + * 5.2.16 8/8/03 + * o Added support for new controllers: 82545GM, 82546GB, 82541/7_B1 + * o Bug fix: reset h/w before first EEPROM read because we don't know + * who may have been messing with the device before we got there. + * [Dave Johnson (ddj -a-t- cascv.brown.edu)] + * o Bug fix: read the correct work from EEPROM to detect programmed + * WoL settings. + * o Bug fix: TSO would hang if space left in FIFO was being miscalculated + * when mss dropped without a correspoding drop in the DMA buffer size. + * o ASF for Fiber nics isn't supported. + * o Bug fix: Workaround added for potential hang with 82544 running in + * PCI-X if send buffer terminates within an evenly-aligned dword. + * o Feature: Add support for ethtool flow control setting. + * o Feature: Add support for ethtool TSO setting. + * o Feature: Increase default Tx Descriptor count to 1024 for >= 82544. + * * 5.1.13 5/28/03 * o Bug fix: request_irq() failure resulted in freeing resources twice! * [Don Fry (brazilnut@us.ibm.com)] @@ -39,18 +55,11 @@ * o Cleanup: s/int/unsigned int/ for descriptor ring indexes. * * 5.1.11 5/6/03 - * o Feature: Added support for 82546EB (Quad-port) hardware. - * o Feature: Added support for Diagnostics through Ethtool. - * o Cleanup: Removed /proc support. - * o Cleanup: Removed proprietary IDIAG interface. - * o Bug fix: TSO bug fixes. - * - * 5.0.42 3/5/03 */ char e1000_driver_name[] = "e1000"; char e1000_driver_string[] = "Intel(R) PRO/1000 Network Driver"; -char e1000_driver_version[] = "5.1.13-k2"; +char e1000_driver_version[] = "5.2.16-k1"; char e1000_copyright[] = "Copyright (c) 1999-2003 Intel Corporation."; /* e1000_pci_tbl - PCI Device ID Table @@ -71,15 +80,28 @@ static struct pci_device_id e1000_pci_tb {0x8086, 0x100D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, {0x8086, 0x100E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, {0x8086, 0x100F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, - {0x8086, 0x1011, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, {0x8086, 0x1010, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, + {0x8086, 0x1011, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, {0x8086, 0x1012, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, + {0x8086, 0x1013, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, + {0x8086, 0x1014, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, + {0x8086, 0x1015, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, {0x8086, 0x1016, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, {0x8086, 0x1017, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, - {0x8086, 0x101E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, - {0x8086, 0x101D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, - {0x8086, 0x1013, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, + {0x8086, 0x1018, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, {0x8086, 0x1019, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, + {0x8086, 0x101D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, + {0x8086, 0x101E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, + {0x8086, 0x1026, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, + {0x8086, 0x1027, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, + {0x8086, 0x1028, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, + {0x8086, 0x1075, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, + {0x8086, 0x1076, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, + {0x8086, 0x1077, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, + {0x8086, 0x1078, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, + {0x8086, 0x1079, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, + {0x8086, 0x107A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, + {0x8086, 0x107B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, /* required last entry */ {0,} }; @@ -426,6 +448,11 @@ e1000_probe(struct pci_dev *pdev, if(pci_using_dac) netdev->features |= NETIF_F_HIGHDMA; + /* before reading the EEPROM, reset the controller to + * put the device in a known good starting state */ + + e1000_reset_hw(&adapter->hw); + /* make sure the EEPROM is good */ if(e1000_validate_eeprom_checksum(&adapter->hw) < 0) { @@ -457,7 +484,7 @@ e1000_probe(struct pci_dev *pdev, adapter->phy_info_timer.function = &e1000_update_phy_info; adapter->phy_info_timer.data = (unsigned long) adapter; - INIT_WORK(&adapter->tx_timeout_task, + INIT_WORK(&adapter->tx_timeout_task, (void (*)(void *))e1000_tx_timeout_task, netdev); register_netdev(netdev); @@ -476,12 +503,28 @@ e1000_probe(struct pci_dev *pdev, * enable the ACPI Magic Packet filter */ - e1000_read_eeprom(&adapter->hw, EEPROM_INIT_CONTROL2_REG,1, &eeprom_data); - if((adapter->hw.mac_type >= e1000_82544) && - (eeprom_data & E1000_EEPROM_APME)) + switch(adapter->hw.mac_type) { + case e1000_82542_rev2_0: + case e1000_82542_rev2_1: + case e1000_82543: + break; + case e1000_82546: + case e1000_82546_rev_3: + if((E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_FUNC_1) + && (adapter->hw.media_type == e1000_media_type_copper)) { + e1000_read_eeprom(&adapter->hw, + EEPROM_INIT_CONTROL3_PORT_B, 1, &eeprom_data); + break; + } + /* Fall Through */ + default: + e1000_read_eeprom(&adapter->hw, + EEPROM_INIT_CONTROL3_PORT_A, 1, &eeprom_data); + break; + } + if(eeprom_data & E1000_EEPROM_APME) adapter->wol |= E1000_WUFC_MAG; - /* reset the hardware with the new settings */ e1000_reset(adapter); @@ -516,7 +559,8 @@ e1000_remove(struct pci_dev *pdev) struct e1000_adapter *adapter = netdev->priv; uint32_t manc; - if(adapter->hw.mac_type >= e1000_82540) { + if(adapter->hw.mac_type >= e1000_82540 && + adapter->hw.media_type == e1000_media_type_copper) { manc = E1000_READ_REG(&adapter->hw, MANC); if(manc & E1000_MANC_SMBUS_EN) { manc |= E1000_MANC_ARP_EN; @@ -584,21 +628,13 @@ e1000_sw_init(struct e1000_adapter *adap hw->fc_pause_time = E1000_FC_PAUSE_TIME; hw->fc_send_xon = 1; - if((hw->mac_type == e1000_82541) || (hw->mac_type == e1000_82547)) + if((hw->mac_type == e1000_82541) || + (hw->mac_type == e1000_82547) || + (hw->mac_type == e1000_82541_rev_2) || + (hw->mac_type == e1000_82547_rev_2)) hw->phy_init_script = 1; - /* Media type - copper or fiber */ - - if(hw->mac_type >= e1000_82543) { - uint32_t status = E1000_READ_REG(hw, STATUS); - - if(status & E1000_STATUS_TBIMODE) - hw->media_type = e1000_media_type_fiber; - else - hw->media_type = e1000_media_type_copper; - } else { - hw->media_type = e1000_media_type_fiber; - } + e1000_set_media_type(hw); if(hw->mac_type < e1000_82543) hw->report_tx_early = 0; @@ -614,6 +650,7 @@ e1000_sw_init(struct e1000_adapter *adap if(hw->media_type == e1000_media_type_copper) { hw->mdix = AUTO_ALL_MODES; hw->disable_polarity_correction = FALSE; + hw->master_slave = E1000_MASTER_SLAVE; } atomic_set(&adapter->irq_sem, 1); @@ -763,7 +800,8 @@ e1000_configure_tx(struct e1000_adapter tipg |= DEFAULT_82542_TIPG_IPGR2 << E1000_TIPG_IPGR2_SHIFT; break; default: - if(adapter->hw.media_type == e1000_media_type_fiber) + if(adapter->hw.media_type == e1000_media_type_fiber || + adapter->hw.media_type == e1000_media_type_internal_serdes) tipg = DEFAULT_82543_TIPG_IPGT_FIBER; else tipg = DEFAULT_82543_TIPG_IPGT_COPPER; @@ -798,6 +836,12 @@ e1000_configure_tx(struct e1000_adapter adapter->txd_cmd |= E1000_TXD_CMD_RS; else adapter->txd_cmd |= E1000_TXD_CMD_RPS; + + /* Cache if we're 82544 running in PCI-X because we'll + * need this to apply a workaround later in the send path. */ + if(adapter->hw.mac_type == e1000_82544 && + adapter->hw.bus_type == e1000_bus_type_pcix) + adapter->pcix_82544 = 1; } /** @@ -1490,27 +1534,46 @@ e1000_tx_map(struct e1000_adapter *adapt { struct e1000_desc_ring *tx_ring = &adapter->tx_ring; struct e1000_buffer *buffer_info; - int len = skb->len; + unsigned int len = skb->len, max_per_txd = E1000_MAX_DATA_PER_TXD; unsigned int offset = 0, size, count = 0, i; - #ifdef NETIF_F_TSO - unsigned int tso = skb_shinfo(skb)->tso_size; + unsigned int mss; #endif - unsigned int nr_frags = skb_shinfo(skb)->nr_frags; + unsigned int nr_frags; unsigned int f; + +#ifdef NETIF_F_TSO + mss = skb_shinfo(skb)->tso_size; + /* The controller does a simple calculation to + * make sure there is enough room in the FIFO before + * initiating the DMA for each buffer. The calc is: + * 4 = ceil(buffer len/mss). To make sure we don't + * overrun the FIFO, adjust the max buffer len if mss + * drops. */ + if (mss) + max_per_txd = min(mss << 2, max_per_txd); +#endif + nr_frags = skb_shinfo(skb)->nr_frags; len -= skb->data_len; i = tx_ring->next_to_use; while(len) { buffer_info = &tx_ring->buffer_info[i]; - size = min(len, E1000_MAX_DATA_PER_TXD); + size = min(len, max_per_txd); #ifdef NETIF_F_TSO /* Workaround for premature desc write-backs * in TSO mode. Append 4-byte sentinel desc */ - if(tso && !nr_frags && size == len && size > 4) + if(mss && !nr_frags && size == len && size > 8) size -= 4; #endif + /* Workaround for potential 82544 hang in PCI-X. Avoid + * terminating buffers within evenly-aligned dwords. */ + if(adapter->pcix_82544 && + !((unsigned long)(skb->data + offset + size - 1) & 4) && + size > 4) + size -= 4; + buffer_info->length = size; buffer_info->dma = pci_map_single(adapter->pdev, @@ -1530,22 +1593,30 @@ e1000_tx_map(struct e1000_adapter *adapt frag = &skb_shinfo(skb)->frags[f]; len = frag->size; - offset = 0; + offset = frag->page_offset; while(len) { buffer_info = &tx_ring->buffer_info[i]; - size = min(len, E1000_MAX_DATA_PER_TXD); + size = min(len, max_per_txd); #ifdef NETIF_F_TSO /* Workaround for premature desc write-backs * in TSO mode. Append 4-byte sentinel desc */ - if(tso && f == (nr_frags-1) && size == len && size > 4) + if(mss && f == (nr_frags-1) && size == len && size > 8) size -= 4; #endif + /* Workaround for potential 82544 hang in PCI-X. + * Avoid terminating buffers within evenly-aligned + * dwords. */ + if(adapter->pcix_82544 && + !((unsigned long)(frag->page+offset+size-1) & 4) && + size > 4) + size -= 4; + buffer_info->length = size; buffer_info->dma = pci_map_page(adapter->pdev, frag->page, - frag->page_offset + offset, + offset, size, PCI_DMA_TODEVICE); buffer_info->time_stamp = jiffies; @@ -1556,6 +1627,31 @@ e1000_tx_map(struct e1000_adapter *adapt if(++i == tx_ring->count) i = 0; } } + + if(E1000_DESC_UNUSED(&adapter->tx_ring) < count) { + + /* There aren't enough descriptors available to queue up + * this send, so undo the mapping and abort the send. + * We could have done the check before we mapped the skb, + * but because of all the workarounds (above), it's too + * difficult to predict how many we're going to need.*/ + i = first; + + while(count--) { + buffer_info = &tx_ring->buffer_info[i]; + if(buffer_info->dma) { + pci_unmap_page(adapter->pdev, + buffer_info->dma, + buffer_info->length, + PCI_DMA_TODEVICE); + buffer_info->dma = 0; + } + if(++i == tx_ring->count) i = 0; + } + + return 0; + } + i = (i == 0) ? tx_ring->count - 1 : i - 1; tx_ring->buffer_info[i].skb = skb; tx_ring->buffer_info[first].next_to_watch = i; @@ -1650,29 +1746,19 @@ no_fifo_stall_required: return 0; } -/* Tx Descriptors needed, worst case */ -#define TXD_USE_COUNT(S) (((S) >> E1000_MAX_TXD_PWR) + \ - (((S) & (E1000_MAX_DATA_PER_TXD - 1)) ? 1 : 0)) -#define DESC_NEEDED TXD_USE_COUNT(MAX_JUMBO_FRAME_SIZE) + \ - MAX_SKB_FRAGS * TXD_USE_COUNT(PAGE_SIZE) + 1 - static int e1000_xmit_frame(struct sk_buff *skb, struct net_device *netdev) { struct e1000_adapter *adapter = netdev->priv; unsigned int first; unsigned int tx_flags = 0; + int count; if(skb->len <= 0) { dev_kfree_skb_any(skb); return 0; } - if(E1000_DESC_UNUSED(&adapter->tx_ring) < DESC_NEEDED) { - netif_stop_queue(netdev); - return 1; - } - if(adapter->hw.mac_type == e1000_82547) { if(e1000_82547_fifo_workaround(adapter, skb)) { netif_stop_queue(netdev); @@ -1693,7 +1779,12 @@ e1000_xmit_frame(struct sk_buff *skb, st else if(e1000_tx_csum(adapter, skb)) tx_flags |= E1000_TX_FLAGS_CSUM; - e1000_tx_queue(adapter, e1000_tx_map(adapter, skb, first), tx_flags); + if((count = e1000_tx_map(adapter, skb, first))) + e1000_tx_queue(adapter, count, tx_flags); + else { + netif_stop_queue(netdev); + return 1; + } netdev->trans_start = jiffies; @@ -2001,6 +2092,7 @@ e1000_intr(int irq, void *data, struct p !e1000_clean_tx_irq(adapter)) break; #endif + return IRQ_HANDLED; } @@ -2387,7 +2479,7 @@ e1000_mii_ioctl(struct net_device *netde uint16_t mii_reg; uint16_t spddplx; - if(adapter->hw.media_type == e1000_media_type_fiber) + if(adapter->hw.media_type != e1000_media_type_copper) return -EOPNOTSUPP; switch (cmd) { @@ -2659,7 +2751,7 @@ e1000_notify_reboot(struct notifier_bloc case SYS_DOWN: case SYS_HALT: case SYS_POWER_OFF: - while ((pdev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, pdev)) != NULL) { + while((pdev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, pdev))) { if(pci_dev_driver(pdev) == &e1000_driver) e1000_suspend(pdev, 3); } @@ -2706,7 +2798,8 @@ e1000_suspend(struct pci_dev *pdev, uint E1000_WRITE_REG(&adapter->hw, CTRL, ctrl); } - if(adapter->hw.media_type == e1000_media_type_fiber) { + if(adapter->hw.media_type == e1000_media_type_fiber || + adapter->hw.media_type == e1000_media_type_internal_serdes) { /* keep the laser running in D3 */ ctrl_ext = E1000_READ_REG(&adapter->hw, CTRL_EXT); ctrl_ext |= E1000_CTRL_EXT_SDP7_DATA; @@ -2726,7 +2819,8 @@ e1000_suspend(struct pci_dev *pdev, uint pci_save_state(pdev, adapter->pci_state); - if(adapter->hw.mac_type >= e1000_82540) { + if(adapter->hw.mac_type >= e1000_82540 && + adapter->hw.media_type == e1000_media_type_copper) { manc = E1000_READ_REG(&adapter->hw, MANC); if(manc & E1000_MANC_SMBUS_EN) { manc |= E1000_MANC_ARP_EN; @@ -2764,7 +2858,8 @@ e1000_resume(struct pci_dev *pdev) netif_device_attach(netdev); - if(adapter->hw.mac_type >= e1000_82540) { + if(adapter->hw.mac_type >= e1000_82540 && + adapter->hw.media_type == e1000_media_type_copper) { manc = E1000_READ_REG(&adapter->hw, MANC); manc &= ~(E1000_MANC_ARP_EN); E1000_WRITE_REG(&adapter->hw, MANC, manc); diff -prauN linux-2.6.0-test5/drivers/net/e1000/e1000_osdep.h wli-2.6.0-test5-bk12-25/drivers/net/e1000/e1000_osdep.h --- linux-2.6.0-test5/drivers/net/e1000/e1000_osdep.h 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/e1000/e1000_osdep.h 2003-09-25 19:15:59.000000000 -0700 @@ -55,10 +55,13 @@ #define CMD_MEM_WRT_INVALIDATE PCI_COMMAND_INVALIDATE typedef enum { +#undef FALSE FALSE = 0, +#undef TRUE TRUE = 1 } boolean_t; +#undef ASSERT #define ASSERT(x) if(!(x)) BUG() #define MSGOUT(S, A, B) printk(KERN_DEBUG S "\n", A, B) diff -prauN linux-2.6.0-test5/drivers/net/e1000/e1000_param.c wli-2.6.0-test5-bk12-25/drivers/net/e1000/e1000_param.c --- linux-2.6.0-test5/drivers/net/e1000/e1000_param.c 2003-09-08 12:50:17.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/e1000/e1000_param.c 2003-09-25 19:15:59.000000000 -0700 @@ -140,7 +140,7 @@ E1000_PARAM(FlowControl, "Flow Control s * Valid Range: 0, 1 * - 0 - disables all checksum offload * - 1 - enables receive IP/TCP/UDP checksum offload - * on 82543 based NICs + * on 82543 and newer -based NICs * * Default Value: 1 */ @@ -458,6 +458,7 @@ e1000_check_options(struct e1000_adapter switch(adapter->hw.media_type) { case e1000_media_type_fiber: + case e1000_media_type_internal_serdes: e1000_check_fiber_options(adapter); break; case e1000_media_type_copper: @@ -601,7 +602,7 @@ e1000_check_copper_options(struct e1000_ switch (speed + dplx) { case 0: - adapter->hw.autoneg = 1; + adapter->hw.autoneg = adapter->fc_autoneg = 1; if(Speed[bd] != OPTION_UNSET || Duplex[bd] != OPTION_UNSET) printk(KERN_INFO "Speed and duplex autonegotiation enabled\n"); @@ -609,14 +610,14 @@ e1000_check_copper_options(struct e1000_ case HALF_DUPLEX: printk(KERN_INFO "Half Duplex specified without Speed\n"); printk(KERN_INFO "Using Autonegotiation at Half Duplex only\n"); - adapter->hw.autoneg = 1; + adapter->hw.autoneg = adapter->fc_autoneg = 1; adapter->hw.autoneg_advertised = ADVERTISE_10_HALF | ADVERTISE_100_HALF; break; case FULL_DUPLEX: printk(KERN_INFO "Full Duplex specified without Speed\n"); printk(KERN_INFO "Using Autonegotiation at Full Duplex only\n"); - adapter->hw.autoneg = 1; + adapter->hw.autoneg = adapter->fc_autoneg = 1; adapter->hw.autoneg_advertised = ADVERTISE_10_FULL | ADVERTISE_100_FULL | ADVERTISE_1000_FULL; @@ -624,38 +625,38 @@ e1000_check_copper_options(struct e1000_ case SPEED_10: printk(KERN_INFO "10 Mbps Speed specified without Duplex\n"); printk(KERN_INFO "Using Autonegotiation at 10 Mbps only\n"); - adapter->hw.autoneg = 1; + adapter->hw.autoneg = adapter->fc_autoneg = 1; adapter->hw.autoneg_advertised = ADVERTISE_10_HALF | ADVERTISE_10_FULL; break; case SPEED_10 + HALF_DUPLEX: printk(KERN_INFO "Forcing to 10 Mbps Half Duplex\n"); - adapter->hw.autoneg = 0; + adapter->hw.autoneg = adapter->fc_autoneg = 0; adapter->hw.forced_speed_duplex = e1000_10_half; adapter->hw.autoneg_advertised = 0; break; case SPEED_10 + FULL_DUPLEX: printk(KERN_INFO "Forcing to 10 Mbps Full Duplex\n"); - adapter->hw.autoneg = 0; + adapter->hw.autoneg = adapter->fc_autoneg = 0; adapter->hw.forced_speed_duplex = e1000_10_full; adapter->hw.autoneg_advertised = 0; break; case SPEED_100: printk(KERN_INFO "100 Mbps Speed specified without Duplex\n"); printk(KERN_INFO "Using Autonegotiation at 100 Mbps only\n"); - adapter->hw.autoneg = 1; + adapter->hw.autoneg = adapter->fc_autoneg = 1; adapter->hw.autoneg_advertised = ADVERTISE_100_HALF | ADVERTISE_100_FULL; break; case SPEED_100 + HALF_DUPLEX: printk(KERN_INFO "Forcing to 100 Mbps Half Duplex\n"); - adapter->hw.autoneg = 0; + adapter->hw.autoneg = adapter->fc_autoneg = 0; adapter->hw.forced_speed_duplex = e1000_100_half; adapter->hw.autoneg_advertised = 0; break; case SPEED_100 + FULL_DUPLEX: printk(KERN_INFO "Forcing to 100 Mbps Full Duplex\n"); - adapter->hw.autoneg = 0; + adapter->hw.autoneg = adapter->fc_autoneg = 0; adapter->hw.forced_speed_duplex = e1000_100_full; adapter->hw.autoneg_advertised = 0; break; @@ -663,20 +664,20 @@ e1000_check_copper_options(struct e1000_ printk(KERN_INFO "1000 Mbps Speed specified without Duplex\n"); printk(KERN_INFO "Using Autonegotiation at 1000 Mbps Full Duplex only\n"); - adapter->hw.autoneg = 1; + adapter->hw.autoneg = adapter->fc_autoneg = 1; adapter->hw.autoneg_advertised = ADVERTISE_1000_FULL; break; case SPEED_1000 + HALF_DUPLEX: printk(KERN_INFO "Half Duplex is not supported at 1000 Mbps\n"); printk(KERN_INFO "Using Autonegotiation at 1000 Mbps Full Duplex only\n"); - adapter->hw.autoneg = 1; + adapter->hw.autoneg = adapter->fc_autoneg = 1; adapter->hw.autoneg_advertised = ADVERTISE_1000_FULL; break; case SPEED_1000 + FULL_DUPLEX: printk(KERN_INFO "Using Autonegotiation at 1000 Mbps Full Duplex only\n"); - adapter->hw.autoneg = 1; + adapter->hw.autoneg = adapter->fc_autoneg = 1; adapter->hw.autoneg_advertised = ADVERTISE_1000_FULL; break; default: diff -prauN linux-2.6.0-test5/drivers/net/eepro.c wli-2.6.0-test5-bk12-25/drivers/net/eepro.c --- linux-2.6.0-test5/drivers/net/eepro.c 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/eepro.c 2003-09-25 19:15:59.000000000 -0700 @@ -897,14 +897,12 @@ static int eepro_grab_irq(struct net_dev eepro_sw2bank0(ioaddr); /* Switch back to Bank 0 */ if (request_irq (*irqp, NULL, SA_SHIRQ, "bogus", dev) != EBUSY) { - unsigned long irq_mask, delay; + unsigned long irq_mask; /* Twinkle the interrupt, and check if it's seen */ irq_mask = probe_irq_on(); eepro_diag(ioaddr); /* RESET the 82595 */ - - delay = jiffies + HZ/50; - while (time_before(jiffies, delay)) ; + mdelay(20); if (*irqp == probe_irq_off(irq_mask)) /* It's a good IRQ line */ break; diff -prauN linux-2.6.0-test5/drivers/net/es3210.c wli-2.6.0-test5-bk12-25/drivers/net/es3210.c --- linux-2.6.0-test5/drivers/net/es3210.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/es3210.c 2003-09-25 19:15:59.000000000 -0700 @@ -49,6 +49,7 @@ static const char version[] = "es3210.c: Driver revision v0.03, 14/09/96\n"; #include +#include #include #include #include diff -prauN linux-2.6.0-test5/drivers/net/ewrk3.c wli-2.6.0-test5-bk12-25/drivers/net/ewrk3.c --- linux-2.6.0-test5/drivers/net/ewrk3.c 2003-09-08 12:50:37.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/ewrk3.c 2003-09-25 19:15:59.000000000 -0700 @@ -564,7 +564,7 @@ ewrk3_hw_init(struct net_device *dev, u_ if (dev->irq < 2) { #ifndef MODULE u_char irqnum; - unsigned long irq_mask, delay; + unsigned long irq_mask; irq_mask = probe_irq_on(); @@ -578,8 +578,7 @@ ewrk3_hw_init(struct net_device *dev, u_ irqnum = irq[((icr & IRQ_SEL) >> 4)]; - delay = jiffies + HZ/50; - while (time_before(jiffies, delay)) ; + mdelay(20); dev->irq = probe_irq_off(irq_mask); if ((dev->irq) && (irqnum == dev->irq)) { printk(" and uses IRQ%d.\n", dev->irq); diff -prauN linux-2.6.0-test5/drivers/net/fc/iph5526.c wli-2.6.0-test5-bk12-25/drivers/net/fc/iph5526.c --- linux-2.6.0-test5/drivers/net/fc/iph5526.c 2003-09-08 12:49:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/fc/iph5526.c 2003-09-25 19:15:59.000000000 -0700 @@ -110,7 +110,7 @@ static const char *version = #define ALIGNED_ADDR(addr, len) ((((unsigned long)(addr) + (len - 1)) & ~(len - 1)) - (unsigned long)(addr)) -static struct pci_device_id iph5526_pci_tbl[] __initdata = { +static struct pci_device_id iph5526_pci_tbl[] = { { PCI_VENDOR_ID_INTERPHASE, PCI_DEVICE_ID_INTERPHASE_5526, PCI_ANY_ID, PCI_ANY_ID, }, { PCI_VENDOR_ID_INTERPHASE, PCI_DEVICE_ID_INTERPHASE_55x6, PCI_ANY_ID, PCI_ANY_ID, }, { } /* Terminating entry */ diff -prauN linux-2.6.0-test5/drivers/net/hamachi.c wli-2.6.0-test5-bk12-25/drivers/net/hamachi.c --- linux-2.6.0-test5/drivers/net/hamachi.c 2003-09-08 12:50:43.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/hamachi.c 2003-09-25 19:15:59.000000000 -0700 @@ -178,7 +178,7 @@ static int tx_params[MAX_UNITS] = {-1, - #include #include -static char version[] __initdata = +static char version[] __devinitdata = KERN_INFO DRV_NAME ".c:v" DRV_VERSION " " DRV_RELDATE " Written by Donald Becker\n" KERN_INFO " Some modifications by Eric kasten \n" KERN_INFO " Further modifications by Keith Underwood \n"; @@ -569,7 +569,7 @@ static struct net_device_stats *hamachi_ static void set_rx_mode(struct net_device *dev); -static int __init hamachi_init_one (struct pci_dev *pdev, +static int __devinit hamachi_init_one (struct pci_dev *pdev, const struct pci_device_id *ent) { struct hamachi_private *hmp; @@ -794,7 +794,7 @@ err_out: return ret; } -static int __init read_eeprom(long ioaddr, int location) +static int __devinit read_eeprom(long ioaddr, int location) { int bogus_cnt = 1000; diff -prauN linux-2.6.0-test5/drivers/net/hamradio/Kconfig wli-2.6.0-test5-bk12-25/drivers/net/hamradio/Kconfig --- linux-2.6.0-test5/drivers/net/hamradio/Kconfig 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/hamradio/Kconfig 2003-09-25 19:15:59.000000000 -0700 @@ -12,9 +12,7 @@ config MKISS the advantage that it is already supported by most modern TNCs without the need for a firmware upgrade. - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module + To compile this driver as a module, choose M here: the module will be called mkiss. config 6PACK @@ -32,9 +30,7 @@ config 6PACK problems. For details about the features and the usage of the driver, read . - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module + To compile this driver as a module, choose M here: the module will be called 6pack. config BPQETHER @@ -91,9 +87,7 @@ config SCC . Also make sure to say Y to "Amateur Radio AX.25 Level 2" support. - 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 . The module + To compile this driver as a module, choose M here: the module will be called scc. config SCC_DELAY @@ -129,10 +123,8 @@ config BAYCOM_SER_FDX information on the modems, see and . - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . This is - recommended. The module will be called baycom_ser_fdx. + To compile this driver as a module, choose M here: the module + will be called baycom_ser_fdx. This is recommended. config BAYCOM_SER_HDX tristate "BAYCOM ser12 halfduplex driver for AX.25" @@ -148,10 +140,8 @@ config BAYCOM_SER_HDX and . - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . This is - recommended. The module will be called baycom_ser_hdx. + To compile this driver as a module, choose M here: the module + will be called baycom_ser_hdx. This is recommended. config BAYCOM_PAR tristate "BAYCOM picpar and par96 driver for AX.25" @@ -164,10 +154,8 @@ config BAYCOM_PAR the modems, see and the file . - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . This is - recommended. The module will be called baycom_par. + To compile this driver as a module, choose M here: the module + will be called baycom_par. This is recommended. config BAYCOM_EPP tristate "BAYCOM epp driver for AX.25" @@ -180,10 +168,8 @@ config BAYCOM_EPP modems, see and the file . - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . This is - recommended. The module will be called baycom_par. + To compile this driver as a module, choose M here: the module + will be called baycom_epp. This is recommended. config YAM tristate "YAM driver for AX.25" @@ -193,7 +179,6 @@ config YAM port and includes some of the functions of a Terminal Node Controller. If you have one of those, say Y here. - 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 . + To compile this driver as a module, choose M here: the module + will be called yam. diff -prauN linux-2.6.0-test5/drivers/net/hamradio/baycom_par.c wli-2.6.0-test5-bk12-25/drivers/net/hamradio/baycom_par.c --- linux-2.6.0-test5/drivers/net/hamradio/baycom_par.c 2003-09-08 12:50:32.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/hamradio/baycom_par.c 2003-09-25 19:15:59.000000000 -0700 @@ -68,7 +68,6 @@ /*****************************************************************************/ -#include #include #include #include diff -prauN linux-2.6.0-test5/drivers/net/hamradio/baycom_ser_fdx.c wli-2.6.0-test5-bk12-25/drivers/net/hamradio/baycom_ser_fdx.c --- linux-2.6.0-test5/drivers/net/hamradio/baycom_ser_fdx.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/hamradio/baycom_ser_fdx.c 2003-09-25 19:15:59.000000000 -0700 @@ -71,7 +71,6 @@ /*****************************************************************************/ -#include #include #include #include diff -prauN linux-2.6.0-test5/drivers/net/hamradio/baycom_ser_hdx.c wli-2.6.0-test5-bk12-25/drivers/net/hamradio/baycom_ser_hdx.c --- linux-2.6.0-test5/drivers/net/hamradio/baycom_ser_hdx.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/hamradio/baycom_ser_hdx.c 2003-09-25 19:15:59.000000000 -0700 @@ -61,7 +61,6 @@ /*****************************************************************************/ -#include #include #include #include diff -prauN linux-2.6.0-test5/drivers/net/hamradio/bpqether.c wli-2.6.0-test5-bk12-25/drivers/net/hamradio/bpqether.c --- linux-2.6.0-test5/drivers/net/hamradio/bpqether.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/hamradio/bpqether.c 2003-09-25 19:15:59.000000000 -0700 @@ -389,8 +389,6 @@ static const char * bpq_print_ethaddr(co return buf; } -#define BPQ_PROC_START ((void *)1) - static void *bpq_seq_start(struct seq_file *seq, loff_t *pos) { int i = 1; @@ -399,7 +397,7 @@ static void *bpq_seq_start(struct seq_fi rcu_read_lock(); if (*pos == 0) - return BPQ_PROC_START; + return SEQ_START_TOKEN; list_for_each_entry(bpqdev, &bpq_devices, bpq_list) { if (i == *pos) @@ -414,7 +412,7 @@ static void *bpq_seq_next(struct seq_fil ++*pos; - if (v == BPQ_PROC_START) + if (v == SEQ_START_TOKEN) p = bpq_devices.next; else p = ((struct bpqdev *)v)->bpq_list.next; @@ -431,7 +429,7 @@ static void bpq_seq_stop(struct seq_file static int bpq_seq_show(struct seq_file *seq, void *v) { - if (v == BPQ_PROC_START) + if (v == SEQ_START_TOKEN) seq_puts(seq, "dev ether destination accept from\n"); else { diff -prauN linux-2.6.0-test5/drivers/net/hamradio/hdlcdrv.c wli-2.6.0-test5-bk12-25/drivers/net/hamradio/hdlcdrv.c --- linux-2.6.0-test5/drivers/net/hamradio/hdlcdrv.c 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/hamradio/hdlcdrv.c 2003-09-25 19:15:59.000000000 -0700 @@ -43,7 +43,6 @@ /*****************************************************************************/ #include -#include #include #include #include diff -prauN linux-2.6.0-test5/drivers/net/hamradio/scc.c wli-2.6.0-test5-bk12-25/drivers/net/hamradio/scc.c --- linux-2.6.0-test5/drivers/net/hamradio/scc.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/hamradio/scc.c 2003-09-25 19:15:59.000000000 -0700 @@ -171,6 +171,7 @@ #include #include #include +#include #include @@ -202,8 +203,8 @@ static void scc_key_trx (struct scc_chan static irqreturn_t scc_isr(int irq, void *dev_id, struct pt_regs *regs); static void scc_init_timer(struct scc_channel *scc); -static int scc_net_setup(struct scc_channel *scc, unsigned char *name, int addev); -static int scc_net_init(struct net_device *dev); +static int scc_net_alloc(const char *name, struct scc_channel *scc); +static void scc_net_setup(struct net_device *dev); static int scc_net_open(struct net_device *dev); static int scc_net_close(struct net_device *dev); static void scc_net_rx(struct scc_channel *scc, struct sk_buff *skb); @@ -235,7 +236,7 @@ static io_port Vector_Latch; /* These provide interrupt save 2-step access to the Z8530 registers */ -static spinlock_t iolock; /* Guards paired accesses */ +static spinlock_t iolock = SPIN_LOCK_UNLOCKED; /* Guards paired accesses */ static inline unsigned char InReg(io_port port, unsigned char reg) { @@ -1512,34 +1513,28 @@ static void z8530_init(void) * Allocate device structure, err, instance, and register driver */ -static int scc_net_setup(struct scc_channel *scc, unsigned char *name, int addev) +static int scc_net_alloc(const char *name, struct scc_channel *scc) { + int err; struct net_device *dev; - if (dev_get(name)) - { - printk(KERN_INFO "Z8530drv: device %s already exists.\n", name); - return -EEXIST; - } - - if ((scc->dev = (struct net_device *) kmalloc(sizeof(struct net_device), GFP_KERNEL)) == NULL) + dev = alloc_netdev(0, name, scc_net_setup); + if (!dev) return -ENOMEM; - dev = scc->dev; - memset(dev, 0, sizeof(struct net_device)); - - strcpy(dev->name, name); - dev->priv = (void *) scc; - dev->init = scc_net_init; - + dev->priv = scc; + scc->dev = dev; spin_lock_init(&scc->lock); - - if ((addev? register_netdevice(dev) : register_netdev(dev)) != 0) { - kfree(dev); - return -EIO; - } - SET_MODULE_OWNER(dev); + err = register_netdev(dev); + if (err) { + printk(KERN_ERR "%s: can't register network device (%d)\n", + name, err); + free_netdev(dev); + scc->dev = NULL; + return err; + } + return 0; } @@ -1556,8 +1551,9 @@ static unsigned char ax25_nocall[AX25_AD /* ----> Initialize device <----- */ -static int scc_net_init(struct net_device *dev) +static void scc_net_setup(struct net_device *dev) { + SET_MODULE_OWNER(dev); dev->tx_queue_len = 16; /* should be enough... */ dev->open = scc_net_open; @@ -1581,7 +1577,6 @@ static int scc_net_init(struct net_devic dev->mtu = AX25_DEF_PACLEN; dev->addr_len = AX25_ADDR_LEN; - return 0; } /* ----> open network device <---- */ @@ -1719,10 +1714,10 @@ static int scc_net_ioctl(struct net_devi struct scc_mem_config memcfg; struct scc_hw_config hwcfg; struct scc_calibrate cal; + struct scc_channel *scc; int chan; - unsigned char device_name[10]; + unsigned char device_name[IFNAMSIZ]; void *arg; - struct scc_channel *scc; scc = (struct scc_channel *) dev->priv; arg = (void *) ifr->ifr_data; @@ -1828,8 +1823,10 @@ static int scc_net_ioctl(struct net_devi { request_region(SCC_Info[2*Nchips+chan].ctrl, 1, "scc ctrl"); request_region(SCC_Info[2*Nchips+chan].data, 1, "scc data"); - if (Nchips+chan != 0) - scc_net_setup(&SCC_Info[2*Nchips+chan], device_name, 1); + if (Nchips+chan != 0 && + scc_net_alloc(device_name, + &SCC_Info[2*Nchips+chan])) + return -EINVAL; } } @@ -1978,39 +1975,58 @@ static struct net_device_stats *scc_net_ /* * dump statistics to /proc/net/z8530drv * */ /* ******************************************************************** */ +#ifdef CONFIG_PROC_FS -static int scc_net_get_info(char *buffer, char **start, off_t offset, int length) +static inline struct scc_channel *scc_net_seq_idx(loff_t pos) { - struct scc_channel *scc; - struct scc_kiss *kiss; - struct scc_stat *stat; - int len = 0; - off_t pos = 0; - off_t begin = 0; int k; - len += sprintf(buffer, "z8530drv-"VERSION"\n"); - - if (!Driver_Initialized) - { - len += sprintf(buffer+len, "not initialized\n"); - goto done; + for (k = 0; k < Nchips*2; ++k) { + if (!SCC_Info[k].init) + continue; + if (pos-- == 0) + return &SCC_Info[k]; } + return NULL; +} - if (!Nchips) - { - len += sprintf(buffer+len, "chips missing\n"); - goto done; +static void *scc_net_seq_start(struct seq_file *seq, loff_t *pos) +{ + return *pos ? scc_net_seq_idx(*pos - 1) : SEQ_START_TOKEN; + +} + +static void *scc_net_seq_next(struct seq_file *seq, void *v, loff_t *pos) +{ + unsigned k; + struct scc_channel *scc = v; + ++*pos; + + for (k = (v == SEQ_START_TOKEN) ? 0 : (scc - SCC_Info)+1; + k < Nchips*2; ++k) { + if (SCC_Info[k].init) + return &SCC_Info[k]; } + return NULL; +} - for (k = 0; k < Nchips*2; k++) - { - scc = &SCC_Info[k]; - stat = &scc->stat; - kiss = &scc->kiss; +static void scc_net_seq_stop(struct seq_file *seq, void *v) +{ +} + +static int scc_net_seq_show(struct seq_file *seq, void *v) +{ + if (v == SEQ_START_TOKEN) { + seq_puts(seq, "z8530drv-"VERSION"\n"); + } else if (!Driver_Initialized) { + seq_puts(seq, "not initialized\n"); + } else if (!Nchips) { + seq_puts(seq, "chips missing\n"); + } else { + const struct scc_channel *scc = v; + const struct scc_stat *stat = &scc->stat; + const struct scc_kiss *kiss = &scc->kiss; - if (!scc->init) - continue; /* dev data ctrl irq clock brand enh vector special option * baud nrz clocksrc softdcd bufsize @@ -2021,24 +2037,24 @@ static int scc_net_get_info(char *buffer * R ## ## XX ## ## ## ## ## XX ## ## ## ## ## ## ## */ - len += sprintf(buffer+len, "%s\t%3.3lx %3.3lx %d %lu %2.2x %d %3.3lx %3.3lx %d\n", + seq_printf(seq, "%s\t%3.3lx %3.3lx %d %lu %2.2x %d %3.3lx %3.3lx %d\n", scc->dev->name, scc->data, scc->ctrl, scc->irq, scc->clock, scc->brand, scc->enhanced, Vector_Latch, scc->special, scc->option); - len += sprintf(buffer+len, "\t%lu %d %d %d %d\n", + seq_printf(seq, "\t%lu %d %d %d %d\n", scc->modem.speed, scc->modem.nrz, scc->modem.clocksrc, kiss->softdcd, stat->bufsize); - len += sprintf(buffer+len, "\t%lu %lu %lu %lu\n", + seq_printf(seq, "\t%lu %lu %lu %lu\n", stat->rxints, stat->txints, stat->exints, stat->spints); - len += sprintf(buffer+len, "\t%lu %lu %d / %lu %lu %d / %d %d\n", + seq_printf(seq, "\t%lu %lu %d / %lu %lu %d / %d %d\n", stat->rxframes, stat->rxerrs, stat->rx_over, stat->txframes, stat->txerrs, stat->tx_under, stat->nospace, stat->tx_state); #define K(x) kiss->x - len += sprintf(buffer+len, "\t%d %d %d %d %d %d %d %d %d %d %d %d\n", + seq_printf(seq, "\t%d %d %d %d %d %d %d %d %d %d %d %d\n", K(txdelay), K(persist), K(slottime), K(tailtime), K(fulldup), K(waittime), K(mintime), K(maxkeyup), K(idletime), K(maxdefer), K(tx_inhibit), K(group)); @@ -2047,43 +2063,49 @@ static int scc_net_get_info(char *buffer { int reg; - len += sprintf(buffer+len, "\tW "); + seq_printf(seq, "\tW "); for (reg = 0; reg < 16; reg++) - len += sprintf(buffer+len, "%2.2x ", scc->wreg[reg]); - len += sprintf(buffer+len, "\n"); + seq_printf(seq, "%2.2x ", scc->wreg[reg]); + seq_printf(seq, "\n"); - len += sprintf(buffer+len, "\tR %2.2x %2.2x XX ", InReg(scc->ctrl,R0), InReg(scc->ctrl,R1)); + seq_printf(seq, "\tR %2.2x %2.2x XX ", InReg(scc->ctrl,R0), InReg(scc->ctrl,R1)); for (reg = 3; reg < 8; reg++) - len += sprintf(buffer+len, "%2.2x ", InReg(scc->ctrl, reg)); - len += sprintf(buffer+len, "XX "); + seq_printf(seq, "%2.2x ", InReg(scc->ctrl, reg)); + seq_printf(seq, "XX "); for (reg = 9; reg < 16; reg++) - len += sprintf(buffer+len, "%2.2x ", InReg(scc->ctrl, reg)); - len += sprintf(buffer+len, "\n"); + seq_printf(seq, "%2.2x ", InReg(scc->ctrl, reg)); + seq_printf(seq, "\n"); } #endif - len += sprintf(buffer+len, "\n"); - - pos = begin + len; - - if (pos < offset) { - len = 0; - begin = pos; - } - - if (pos > offset + length) - break; + seq_putc(seq, '\n'); } -done: + return 0; +} - *start = buffer + (offset - begin); - len -= (offset - begin); +static struct seq_operations scc_net_seq_ops = { + .start = scc_net_seq_start, + .next = scc_net_seq_next, + .stop = scc_net_seq_stop, + .show = scc_net_seq_show, +}; - if (len > length) len = length; - return len; +static int scc_net_seq_open(struct inode *inode, struct file *file) +{ + return seq_open(file, &scc_net_seq_ops); } +static struct file_operations scc_net_seq_fops = { + .owner = THIS_MODULE, + .open = scc_net_seq_open, + .read = seq_read, + .llseek = seq_lseek, + .release = seq_release_private, +}; + +#endif /* CONFIG_PROC_FS */ + /* ******************************************************************** */ /* * Init SCC driver * */ @@ -2091,23 +2113,18 @@ done: static int __init scc_init_driver (void) { - int result; - char devname[10]; + char devname[IFNAMSIZ]; printk(banner); - spin_lock_init(&iolock); - sprintf(devname,"%s0", SCC_DriverName); - result = scc_net_setup(SCC_Info, devname, 0); - if (result) - { + if (scc_net_alloc(devname, SCC_Info)) { printk(KERN_ERR "z8530drv: cannot initialize module\n"); - return result; + return -EIO; } - proc_net_create("z8530drv", 0, scc_net_get_info); + proc_net_fops_create("z8530drv", 0, &scc_net_seq_fops); return 0; } @@ -2117,11 +2134,12 @@ static void __exit scc_cleanup_driver(vo io_port ctrl; int k; struct scc_channel *scc; + struct net_device *dev; - if (Nchips == 0) + if (Nchips == 0 && (dev = SCC_Info[0].dev)) { - unregister_netdev(SCC_Info[0].dev); - free_netdev(SCC_Info[0].dev); + unregister_netdev(dev); + free_netdev(dev); } /* Guard against chip prattle */ diff -prauN linux-2.6.0-test5/drivers/net/hamradio/yam.c wli-2.6.0-test5-bk12-25/drivers/net/hamradio/yam.c --- linux-2.6.0-test5/drivers/net/hamradio/yam.c 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/hamradio/yam.c 2003-09-25 19:15:59.000000000 -0700 @@ -74,7 +74,6 @@ #include #include -#include #include #include diff -prauN linux-2.6.0-test5/drivers/net/hp100.c wli-2.6.0-test5-bk12-25/drivers/net/hp100.c --- linux-2.6.0-test5/drivers/net/hp100.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/hp100.c 2003-09-25 19:15:59.000000000 -0700 @@ -104,6 +104,7 @@ #include #include #include +#include #include #include #include @@ -284,7 +285,7 @@ static struct hp100_pci_id hp100_pci_ids #define HP100_PCI_IDS_SIZE (sizeof(hp100_pci_ids)/sizeof(struct hp100_pci_id)) -static struct pci_device_id hp100_pci_tbl[] __initdata = { +static struct pci_device_id hp100_pci_tbl[] = { {PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_J2585A, PCI_ANY_ID, PCI_ANY_ID,}, {PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_J2585B, PCI_ANY_ID, PCI_ANY_ID,}, {PCI_VENDOR_ID_COMPEX, PCI_DEVICE_ID_COMPEX_ENET100VG4, PCI_ANY_ID, PCI_ANY_ID,}, diff -prauN linux-2.6.0-test5/drivers/net/ibmlana.c wli-2.6.0-test5-bk12-25/drivers/net/ibmlana.c --- linux-2.6.0-test5/drivers/net/ibmlana.c 2003-09-08 12:49:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/ibmlana.c 2003-09-25 19:15:59.000000000 -0700 @@ -74,7 +74,6 @@ History: *************************************************************************/ -#include #include #include #include diff -prauN linux-2.6.0-test5/drivers/net/irda/Kconfig wli-2.6.0-test5-bk12-25/drivers/net/irda/Kconfig --- linux-2.6.0-test5/drivers/net/irda/Kconfig 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/irda/Kconfig 2003-09-25 19:15:59.000000000 -0700 @@ -9,12 +9,12 @@ config IRTTY_SIR depends on IRDA help Say Y here if you want to build support for the IrTTY line - discipline. If you want to compile it as a module (irtty-sir), say M - here and read . IrTTY makes it - possible to use Linux's own serial driver for all IrDA ports that - are 16550 compatible. Most IrDA chips are 16550 compatible so you - should probably say Y to this option. Using IrTTY will however - limit the speed of the connection to 115200 bps (IrDA SIR mode). + discipline. To compile it as a module, choose M here: the module + will be called irtty-sir. IrTTY makes it possible to use Linux's + own serial driver for all IrDA ports that are 16550 compatible. + Most IrDA chips are 16550 compatible so you should probably say Y + to this option. Using IrTTY will however limit the speed of the + connection to 115200 bps (IrDA SIR mode). If unsure, say Y. @@ -37,22 +37,21 @@ config ESI_DONGLE depends on DONGLE && IRDA help Say Y here if you want to build support for the Extended Systems - JetEye PC dongle. If you want to compile it as a module, say M here - and read . The ESI dongle attaches - to the normal 9-pin serial port connector, and can currently only be - used by IrTTY. To activate support for ESI dongles you will have to - start irattach like this: "irattach -d esi". + JetEye PC dongle. To compile it as a module, choose M here. The ESI + dongle attaches to the normal 9-pin serial port connector, and can + currently only be used by IrTTY. To activate support for ESI + dongles you will have to start irattach like this: + "irattach -d esi". config ACTISYS_DONGLE tristate "ACTiSYS IR-220L and IR220L+ dongle" depends on DONGLE && IRDA help Say Y here if you want to build support for the ACTiSYS IR-220L and - IR220L+ dongles. If you want to compile it as a module, say M here - and read . The ACTiSYS dongles - attaches to the normal 9-pin serial port connector, and can - currently only be used by IrTTY. To activate support for ACTiSYS - dongles you will have to start irattach like this: + IR220L+ dongles. To compile it as a module, choose M here. The + ACTiSYS dongles attaches to the normal 9-pin serial port connector, + and can currently only be used by IrTTY. To activate support for + ACTiSYS dongles you will have to start irattach like this: "irattach -d actisys" or "irattach -d actisys+". config TEKRAM_DONGLE @@ -60,11 +59,11 @@ config TEKRAM_DONGLE depends on DONGLE && IRDA help Say Y here if you want to build support for the Tekram IrMate 210B - dongle. If you want to compile it as a module, say M here and read - . The Tekram dongle attaches to the - normal 9-pin serial port connector, and can currently only be used - by IrTTY. To activate support for Tekram dongles you will have to - start irattach like this: "irattach -d tekram". + dongle. To compile it as a module, choose M here. The Tekram dongle + attaches to the normal 9-pin serial port connector, and can + currently only be used by IrTTY. To activate support for Tekram + dongles you will have to start irattach like this: + "irattach -d tekram". comment "Old SIR device drivers" @@ -73,15 +72,14 @@ config IRPORT_SIR depends on IRDA ---help--- Say Y here if you want to build support for the IrPORT IrDA device - driver. If you want to compile it as a module (irport), say M here - and read . IrPORT can be used - instead of IrTTY and sometimes this can be better. One example is - if your IrDA port does not have echo-canceling, which will work OK - with IrPORT since this driver is working in half-duplex mode only. - You don't need to use irattach with IrPORT, but you just insert it - the same way as FIR drivers (insmod irport io=0x3e8 irq=11). Notice - that IrPORT is a SIR device driver which means that speed is limited - to 115200 bps. + driver. To compile it as a module, choose M here: the module will be + called irport. IrPORT can be used instead of IrTTY and sometimes + this can be better. One example is if your IrDA port does not + have echo-canceling, which will work OK with IrPORT since this + driver is working in half-duplex mode only. You don't need to use + irattach with IrPORT, but you just insert it the same way as FIR + drivers (insmod irport io=0x3e8 irq=11). Notice that IrPORT is a + SIR device driver which means that speed is limited to 115200 bps. If unsure, say Y. @@ -104,22 +102,21 @@ config ESI_DONGLE_OLD depends on DONGLE_OLD && IRDA help Say Y here if you want to build support for the Extended Systems - JetEye PC dongle. If you want to compile it as a module, say M here - and read . The ESI dongle attaches - to the normal 9-pin serial port connector, and can currently only be - used by IrTTY. To activate support for ESI dongles you will have to - start irattach like this: "irattach -d esi". + JetEye PC dongle. To compile it as a module, choose M here. The ESI + dongle attaches to the normal 9-pin serial port connector, and can + currently only be used by IrTTY. To activate support for ESI + dongles you will have to start irattach like this: + "irattach -d esi". config ACTISYS_DONGLE_OLD tristate "ACTiSYS IR-220L and IR220L+ dongle" depends on DONGLE_OLD && IRDA help Say Y here if you want to build support for the ACTiSYS IR-220L and - IR220L+ dongles. If you want to compile it as a module, say M here - and read . The ACTiSYS dongles - attaches to the normal 9-pin serial port connector, and can - currently only be used by IrTTY. To activate support for ACTiSYS - dongles you will have to start irattach like this: + IR220L+ dongles. To compile it as a module, choose M here. The + ACTiSYS dongles attaches to the normal 9-pin serial port connector, + and can currently only be used by IrTTY. To activate support for + ACTiSYS dongles you will have to start irattach like this: "irattach -d actisys" or "irattach -d actisys+". config TEKRAM_DONGLE_OLD @@ -127,44 +124,44 @@ config TEKRAM_DONGLE_OLD depends on DONGLE_OLD && IRDA help Say Y here if you want to build support for the Tekram IrMate 210B - dongle. If you want to compile it as a module, say M here and read - . The Tekram dongle attaches to the - normal 9-pin serial port connector, and can currently only be used - by IrTTY. To activate support for Tekram dongles you will have to - start irattach like this: "irattach -d tekram". + dongle. To compile it as a module, choose M here. The Tekram dongle + attaches to the normal 9-pin serial port connector, and can + currently only be used by IrTTY. To activate support for Tekram + dongles you will have to start irattach like this: + "irattach -d tekram". config GIRBIL_DONGLE tristate "Greenwich GIrBIL dongle" depends on DONGLE_OLD && IRDA help Say Y here if you want to build support for the Greenwich GIrBIL - dongle. If you want to compile it as a module, say M here and read - . The Greenwich dongle attaches to - the normal 9-pin serial port connector, and can currently only be - used by IrTTY. To activate support for Greenwich dongles you will - have to insert "irattach -d girbil" in the /etc/irda/drivers script. + dongle. To compile it as a module, choose M here. The Greenwich + dongle attaches to the normal 9-pin serial port connector, and can + currently only be used by IrTTY. To activate support for Greenwich + dongles you will have to insert "irattach -d girbil" in the + /etc/irda/drivers script. config LITELINK_DONGLE tristate "Parallax LiteLink dongle" depends on DONGLE_OLD && IRDA help Say Y here if you want to build support for the Parallax Litelink - dongle. If you want to compile it as a module, say M here and read - . The Parallax dongle attaches to - the normal 9-pin serial port connector, and can currently only be - used by IrTTY. To activate support for Parallax dongles you will - have to start irattach like this "irattach -d litelink". + dongle. To compile it as a module, choose M here. The Parallax + dongle attaches to the normal 9-pin serial port connector, and can + currently only be used by IrTTY. To activate support for Parallax + dongles you will have to start irattach like this: + "irattach -d litelink". config MCP2120_DONGLE tristate "Microchip MCP2120" depends on DONGLE_OLD && IRDA help Say Y here if you want to build support for the Microchip MCP2120 - dongle. If you want to compile it as a module, say M here and read - . The MCP2120 dongle attaches to - the normal 9-pin serial port connector, and can currently only be - used by IrTTY. To activate support for MCP2120 dongles you will - have to insert "irattach -d mcp2120" in the /etc/irda/drivers script. + dongle. To compile it as a module, choose M here. The MCP2120 dongle + attaches to the normal 9-pin serial port connector, and can + currently only be used by IrTTY. To activate support for MCP2120 + dongles you will have to insert "irattach -d mcp2120" in the + /etc/irda/drivers script. You must build this dongle yourself. For more information see: @@ -174,10 +171,9 @@ config OLD_BELKIN_DONGLE depends on DONGLE_OLD && IRDA help Say Y here if you want to build support for the Adaptec Airport 1000 - and 2000 dongles. If you want to compile it as a module, say M here - and read . The module will be - called old_belkin. Some information is contained in the comments - at the top of . + and 2000 dongles. To compile it as a module, choose M here: the module + will be called old_belkin. Some information is contained in the + comments at the top of . config EP7211_IR tristate "EP7211 I/R support" @@ -188,25 +184,24 @@ config ACT200L_DONGLE depends on DONGLE_OLD && EXPERIMENTAL && IRDA help Say Y here if you want to build support for the ACTiSYS IR-200L - dongle. If you want to compile it as a module, say M here and read - Documentation/modules.txt. The ACTiSYS IR-200L dongle attaches to - the normal 9-pin serial port connector, and can currently only be - used by IrTTY. To activate support for ACTiSYS IR-200L dongles - you will have to start irattach like this: "irattach -d act200l". + dongle. To compile it as a module, choose M here. The ACTiSYS + IR-200L dongle attaches to the normal 9-pin serial port connector, + and can currently only be used by IrTTY. To activate support for + ACTiSYS IR-200L dongles you will have to start irattach like this: + "irattach -d act200l". config MA600_DONGLE tristate "Mobile Action MA600 dongle (EXPERIMENTAL)" depends on DONGLE_OLD && EXPERIMENTAL && IRDA ---help--- Say Y here if you want to build support for the Mobile Action MA600 - dongle. If you want to compile it as a module, say M here and read - . The MA600 dongle attaches to - the normal 9-pin serial port connector, and can currently only be - tested on IrCOMM. To activate support for MA600 dongles you will - have to insert "irattach -d ma600" in the /etc/irda/drivers script. - Note: irutils 0.9.15 requires no modification. irutils 0.9.9 needs - modification. For more information, download the following tar gzip - file. + dongle. To compile it as a module, choose M here. The MA600 dongle + attaches to the normal 9-pin serial port connector, and can + currently only be tested on IrCOMM. To activate support for MA600 + dongles you will have to insert "irattach -d ma600" in the + /etc/irda/drivers script. Note: irutils 0.9.15 requires no + modification. irutils 0.9.9 needs modification. For more + information, download the following tar gzip file. There is a pre-compiled module on @@ -218,13 +213,12 @@ config USB_IRDA depends on IRDA && USB ---help--- Say Y here if you want to build support for the USB IrDA FIR Dongle - device driver. If you want to compile it as a module (irda-usb), - say M here and read . IrDA-USB - support the various IrDA USB dongles available and most of their - pecularities. Those dongles plug in the USB port of your computer, - are plug and play, and support SIR and FIR (4Mbps) speeds. On the - other hand, those dongles tend to be less efficient than a FIR - chipset. + device driver. To compile it as a module, choose M here: the module + will be called irda-usb. IrDA-USB support the various IrDA USB + dongles available and most of their pecularities. Those dongles + plug in the USB port of your computer, are plug and play, and + support SIR and FIR (4Mbps) speeds. On the other hand, those + dongles tend to be less efficient than a FIR chipset. Please note that the driver is still experimental. And of course, you will need both USB and IrDA support in your kernel... @@ -237,8 +231,7 @@ config NSC_FIR PC87338 IrDA chipsets. This driver supports SIR, MIR and FIR (4Mbps) speeds. - If you want to compile it as a module, say M here and read - . The module will be called + To compile it as a module, choose M here: the module will be called nsc-ircc. config WINBOND_FIR @@ -250,22 +243,9 @@ config WINBOND_FIR chipset in the Corel NetWinder. The driver supports SIR, MIR and FIR (4Mbps) speeds. - If you want to compile it as a module, say M here and read - . The module will be called + To compile it as a module, choose M here: the module will be called w83977af_ir. -config TOSHIBA_OLD - tristate "Toshiba Type-O IR Port (old driver)" - depends on IRDA && BROKEN_ON_SMP - help - Say Y here if you want to build support for the Toshiba Type-O IR - chipset. This chipset is used by the Toshiba Libretto 100CT, and - many more laptops. This driver is obsolete, will no more be - maintained and will be removed in favor of the new driver. - If you want to compile it as a module, say M here and read - . - The module will be called toshoboe. - config TOSHIBA_FIR tristate "Toshiba Type-O IR Port" depends on IRDA @@ -273,26 +253,13 @@ config TOSHIBA_FIR Say Y here if you want to build support for the Toshiba Type-O IR and Donau oboe chipsets. These chipsets are used by the Toshiba Libretto 100/110CT, Tecra 8100, Portege 7020 and many more laptops. - If you want to compile it as a module, say M here and read - . - The module will be called donauboe. + To compile it as a module, choose M here: the module will be called + donauboe. config AU1000_FIR tristate "Alchemy Au1000 SIR/FIR" depends on MIPS_AU1000 && IRDA -config SMC_IRCC_OLD - tristate "SMC IrCC (old driver) (EXPERIMENTAL)" - depends on EXPERIMENTAL && IRDA && ISA - help - Say Y here if you want to build support for the SMC Infrared - Communications Controller. It is used in the Fujitsu Lifebook 635t - and Sony PCG-505TX. This driver is obsolete, will no more be - maintained and will be removed in favor of the new driver. - If you want to compile it as a module, say M here and read - . The module will be - called smc-ircc. - config SMC_IRCC_FIR tristate "SMSC IrCC (EXPERIMENTAL)" depends on EXPERIMENTAL && IRDA && ISA @@ -300,9 +267,8 @@ config SMC_IRCC_FIR Say Y here if you want to build support for the SMC Infrared Communications Controller. It is used in a wide variety of laptops (Fujitsu, Sony, Compaq and some Toshiba). - If you want to compile it as a module, say M here and read - . The module will be - called smsc-ircc2.o. + To compile it as a module, choose M here: the module will be called + smsc-ircc2.o. config ALI_FIR tristate "ALi M5123 FIR (EXPERIMENTAL)" @@ -313,8 +279,7 @@ config ALI_FIR M1535, M1535D, M1535+, M1535D Sourth Bridge. This driver supports SIR, MIR and FIR (4Mbps) speeds. - If you want to compile it as a module, say M here and read - . The module will be called + To compile it as a module, choose M here: the module will be called ali-ircc. config VLSI_FIR @@ -326,8 +291,7 @@ config VLSI_FIR and 5500 notebooks. The driver provides support for SIR, MIR and FIR (4Mbps) speeds. - If you want to compile it as a module, say M here and read - . The module will be called + To compile it as a module, choose M here: the module will be called vlsi_ir. config SA1100_FIR @@ -348,8 +312,7 @@ config VIA_FIR You will need to specify the 'dongle_id' module parameter to indicate the FIR dongle attached to the controller. - If you want to compile it as a module, say M here and read - . The module will be called + To compile it as a module, choose M here: the module will be called via-ircc. endmenu diff -prauN linux-2.6.0-test5/drivers/net/irda/Makefile wli-2.6.0-test5-bk12-25/drivers/net/irda/Makefile --- linux-2.6.0-test5/drivers/net/irda/Makefile 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/irda/Makefile 2003-09-25 19:15:59.000000000 -0700 @@ -12,9 +12,7 @@ obj-$(CONFIG_USB_IRDA) += irda-usb.o obj-$(CONFIG_NSC_FIR) += nsc-ircc.o obj-$(CONFIG_WINBOND_FIR) += w83977af_ir.o obj-$(CONFIG_SA1100_FIR) += sa1100_ir.o -obj-$(CONFIG_TOSHIBA_OLD) += toshoboe.o obj-$(CONFIG_TOSHIBA_FIR) += donauboe.o -obj-$(CONFIG_SMC_IRCC_OLD) += smc-ircc.o irport.o obj-$(CONFIG_SMC_IRCC_FIR) += smsc-ircc2.o obj-$(CONFIG_ALI_FIR) += ali-ircc.o obj-$(CONFIG_VLSI_FIR) += vlsi_ir.o diff -prauN linux-2.6.0-test5/drivers/net/irda/ali-ircc.c wli-2.6.0-test5-bk12-25/drivers/net/irda/ali-ircc.c --- linux-2.6.0-test5/drivers/net/irda/ali-ircc.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/irda/ali-ircc.c 2003-09-25 19:15:59.000000000 -0700 @@ -89,7 +89,6 @@ static int ali_ircc_close(struct ali_ir static int ali_ircc_setup(chipio_t *info); static int ali_ircc_is_receiving(struct ali_ircc_cb *self); -static int ali_ircc_net_init(struct net_device *dev); static int ali_ircc_net_open(struct net_device *dev); static int ali_ircc_net_close(struct net_device *dev); static int ali_ircc_net_ioctl(struct net_device *dev, struct ifreq *rq, int cmd); @@ -255,14 +254,14 @@ static int ali_ircc_open(int i, chipio_t if ((ali_ircc_setup(info)) == -1) return -1; - /* Allocate new instance of the driver */ - self = kmalloc(sizeof(struct ali_ircc_cb), GFP_KERNEL); - if (self == NULL) - { + dev = alloc_netdev(sizeof(*self), "irda%d", irda_device_setup); + if (dev == NULL) { ERROR("%s(), can't allocate memory for control block!\n", __FUNCTION__); return -ENOMEM; } - memset(self, 0, sizeof(struct ali_ircc_cb)); + + self = dev->priv; + self->netdev = dev; spin_lock_init(&self->lock); /* Need to store self somewhere */ @@ -282,9 +281,8 @@ static int ali_ircc_open(int i, chipio_t if (!request_region(self->io.fir_base, self->io.fir_ext, driver_name)) { WARNING("%s(), can't get iobase of 0x%03x\n", __FUNCTION__, self->io.fir_base); - dev_self[i] = NULL; - kfree(self); - return -ENODEV; + err = -ENODEV; + goto err_out1; } /* Initialize QoS for this device */ @@ -307,19 +305,17 @@ static int ali_ircc_open(int i, chipio_t /* Allocate memory if needed */ self->rx_buff.head = (__u8 *) kmalloc(self->rx_buff.truesize, GFP_KERNEL |GFP_DMA); - if (self->rx_buff.head == NULL) - { - kfree(self); - return -ENOMEM; + if (self->rx_buff.head == NULL) { + err = -ENOMEM; + goto err_out2; } memset(self->rx_buff.head, 0, self->rx_buff.truesize); self->tx_buff.head = (__u8 *) kmalloc(self->tx_buff.truesize, GFP_KERNEL|GFP_DMA); if (self->tx_buff.head == NULL) { - kfree(self->rx_buff.head); - kfree(self); - return -ENOMEM; + err = -ENOMEM; + goto err_out3; } memset(self->tx_buff.head, 0, self->tx_buff.truesize); @@ -332,28 +328,21 @@ static int ali_ircc_open(int i, chipio_t self->tx_fifo.len = self->tx_fifo.ptr = self->tx_fifo.free = 0; self->tx_fifo.tail = self->tx_buff.head; - if (!(dev = dev_alloc("irda%d", &err))) { - ERROR("%s(), dev_alloc() failed!\n", __FUNCTION__); - return -ENOMEM; - } - - dev->priv = (void *) self; - self->netdev = dev; + /* Keep track of module usage */ + SET_MODULE_OWNER(dev); + /* Override the network functions we need to use */ - dev->init = ali_ircc_net_init; dev->hard_start_xmit = ali_ircc_sir_hard_xmit; dev->open = ali_ircc_net_open; dev->stop = ali_ircc_net_close; dev->do_ioctl = ali_ircc_net_ioctl; dev->get_stats = ali_ircc_net_get_stats; - rtnl_lock(); - err = register_netdevice(dev); - rtnl_unlock(); + err = register_netdev(dev); if (err) { ERROR("%s(), register_netdev() failed!\n", __FUNCTION__); - return -1; + goto err_out4; } MESSAGE("IrDA: Registered device %s\n", dev->name); @@ -370,6 +359,17 @@ static int ali_ircc_open(int i, chipio_t IRDA_DEBUG(2, "%s(), ----------------- End -----------------\n", __FUNCTION__); return 0; + + err_out4: + kfree(self->tx_buff.head); + err_out3: + kfree(self->rx_buff.head); + err_out2: + release_region(self->io.fir_base, self->io.fir_ext); + err_out1: + dev_self[i] = NULL; + free_netdev(dev); + return err; } @@ -390,8 +390,7 @@ static int __exit ali_ircc_close(struct iobase = self->io.fir_base; /* Remove netdevice */ - if (self->netdev) - unregister_netdev(self->netdev); + unregister_netdev(self->netdev); /* Release the PORT that this driver is using */ IRDA_DEBUG(4, "%s(), Releasing Region %03x\n", __FUNCTION__, self->io.fir_base); @@ -404,7 +403,7 @@ static int __exit ali_ircc_close(struct kfree(self->rx_buff.head); dev_self[self->index] = NULL; - kfree(self); + free_netdev(self->netdev); IRDA_DEBUG(2, "%s(), ----------------- End -----------------\n", __FUNCTION__); @@ -1291,29 +1290,6 @@ static int ali_ircc_sir_write(int iobase } /* - * Function ali_ircc_net_init (dev) - * - * Initialize network device - * - */ -static int ali_ircc_net_init(struct net_device *dev) -{ - IRDA_DEBUG(2, "%s(), ---------------- Start ----------------\n", __FUNCTION__ ); - - /* Keep track of module usage */ - SET_MODULE_OWNER(dev); - - /* Setup to be a normal IrDA network device driver */ - irda_device_setup(dev); - - /* Insert overrides below this line! */ - - IRDA_DEBUG(2, "%s(), ----------------- End ------------------\n", __FUNCTION__ ); - - return 0; -} - -/* * Function ali_ircc_net_open (dev) * * Start the device diff -prauN linux-2.6.0-test5/drivers/net/irda/donauboe.c wli-2.6.0-test5-bk12-25/drivers/net/irda/donauboe.c --- linux-2.6.0-test5/drivers/net/irda/donauboe.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/irda/donauboe.c 2003-09-25 19:15:59.000000000 -0700 @@ -1396,20 +1396,6 @@ dumpbufs(self->rx_bufs[self->rxs],len,'< return IRQ_HANDLED; } -static int -toshoboe_net_init (struct net_device *dev) -{ - IRDA_DEBUG (4, "%s()\n", __FUNCTION__); - - /* Keep track of module usage */ - SET_MODULE_OWNER(dev); - - /* Setup to be a normal IrDA network device driver */ - irda_device_setup (dev); - - /* Insert overrides below this line! */ - return 0; -} static int toshoboe_net_open (struct net_device *dev) @@ -1589,14 +1575,13 @@ toshoboe_close (struct pci_dev *pci_dev) self->rx_bufs[i] = NULL; } - if (self->netdev) - unregister_netdev(self->netdev); + unregister_netdev(self->netdev); kfree (self->ringbuf); self->ringbuf = NULL; self->ring = NULL; - return; + free_netdev(self->netdev); } static int @@ -1613,17 +1598,17 @@ toshoboe_open (struct pci_dev *pci_dev, if ((err=pci_enable_device(pci_dev))) return err; - self = kmalloc (sizeof (struct toshoboe_cb), GFP_KERNEL); - - if (self == NULL) + dev = alloc_netdev(sizeof (struct toshoboe_cb), "irda%d", + irda_device_setup); + if (dev == NULL) { printk (KERN_ERR DRIVER_NAME ": can't allocate memory for " "IrDA control block\n"); return -ENOMEM; } - memset (self, 0, sizeof (struct toshoboe_cb)); - + self = dev->priv; + self->netdev = dev; self->pdev = pci_dev; self->base = pci_resource_start(pci_dev,0); @@ -1732,33 +1717,20 @@ toshoboe_open (struct pci_dev *pci_dev, } #endif - if (!(dev = dev_alloc ("irda%d", &err))) - { - printk (KERN_ERR DRIVER_NAME ": dev_alloc() failed\n"); - err = -ENOMEM; - goto freebufs; - } - - dev->priv = (void *) self; - self->netdev = dev; - - printk (KERN_INFO "IrDA: Registered device %s\n", dev->name); - - dev->init = toshoboe_net_init; + SET_MODULE_OWNER(dev); dev->hard_start_xmit = toshoboe_hard_xmit; dev->open = toshoboe_net_open; dev->stop = toshoboe_net_close; dev->do_ioctl = toshoboe_net_ioctl; - rtnl_lock (); - err = register_netdevice (dev); - rtnl_unlock (); + err = register_netdev(dev); if (err) { printk (KERN_ERR DRIVER_NAME ": register_netdev() failed\n"); err = -ENOMEM; goto freebufs; } + printk (KERN_INFO "IrDA: Registered device %s\n", dev->name); pci_set_drvdata(pci_dev,self); @@ -1779,7 +1751,7 @@ freeregion: release_region (self->io.fir_base, self->io.fir_ext); freeself: - kfree (self); + free_netdev(dev); return err; } diff -prauN linux-2.6.0-test5/drivers/net/irda/irda-usb.c wli-2.6.0-test5-bk12-25/drivers/net/irda/irda-usb.c --- linux-2.6.0-test5/drivers/net/irda/irda-usb.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/irda/irda-usb.c 2003-09-25 19:15:59.000000000 -0700 @@ -112,7 +112,6 @@ static int irda_usb_close(struct irda_us static void speed_bulk_callback(struct urb *urb, struct pt_regs *regs); static void write_bulk_callback(struct urb *urb, struct pt_regs *regs); static void irda_usb_receive(struct urb *urb, struct pt_regs *regs); -static int irda_usb_net_init(struct net_device *dev); static int irda_usb_net_open(struct net_device *dev); static int irda_usb_net_close(struct net_device *dev); static int irda_usb_net_ioctl(struct net_device *dev, struct ifreq *rq, int cmd); @@ -901,24 +900,6 @@ static int irda_usb_is_receiving(struct * be dealt with below... */ -/*------------------------------------------------------------------*/ -/* - * Callback when a new IrDA device is created. - */ -static int irda_usb_net_init(struct net_device *dev) -{ - IRDA_DEBUG(1, "%s()\n", __FUNCTION__); - - /* Keep track of module usage */ - SET_MODULE_OWNER(dev); - - /* Set up to be a normal IrDA network device driver */ - irda_device_setup(dev); - - /* Insert overrides below this line! */ - - return 0; -} /*------------------------------------------------------------------*/ /* @@ -1195,15 +1176,18 @@ static inline int irda_usb_open(struct i memset(self->speed_buff, 0, IRDA_USB_SPEED_MTU); /* Create a network device for us */ - if (!(netdev = dev_alloc("irda%d", &err))) { - ERROR("%s(), dev_alloc() failed!\n", __FUNCTION__); - return -1; + netdev = alloc_netdev(0, "irda%d", irda_device_setup); + if (!netdev) { + ERROR("%s(), alloc_net_dev() failed!\n", __FUNCTION__); + return -ENOMEM; } + + SET_MODULE_OWNER(dev); + self->netdev = netdev; netdev->priv = (void *) self; /* Override the network functions we need to use */ - netdev->init = irda_usb_net_init; netdev->hard_start_xmit = irda_usb_hard_xmit; netdev->tx_timeout = irda_usb_net_timeout; netdev->watchdog_timeo = 250*HZ/1000; /* 250 ms > USB timeout */ @@ -1212,12 +1196,12 @@ static inline int irda_usb_open(struct i netdev->get_stats = irda_usb_net_get_stats; netdev->do_ioctl = irda_usb_net_ioctl; - rtnl_lock(); - err = register_netdevice(netdev); - rtnl_unlock(); + err = register_netdev(netdev); if (err) { ERROR("%s(), register_netdev() failed!\n", __FUNCTION__); - return -1; + self->netdev = NULL; + free_netdev(netdev); + return err; } MESSAGE("IrDA: Registered device %s\n", netdev->name); @@ -1236,9 +1220,11 @@ static inline int irda_usb_close(struct ASSERT(self != NULL, return -1;); /* Remove netdevice */ - if (self->netdev) + if (self->netdev) { unregister_netdev(self->netdev); - self->netdev = NULL; + free_netdev(self->netdev); + self->netdev = NULL; + } /* Remove the speed buffer */ if (self->speed_buff != NULL) { diff -prauN linux-2.6.0-test5/drivers/net/irda/nsc-ircc.c wli-2.6.0-test5-bk12-25/drivers/net/irda/nsc-ircc.c --- linux-2.6.0-test5/drivers/net/irda/nsc-ircc.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/irda/nsc-ircc.c 2003-09-25 19:15:59.000000000 -0700 @@ -143,7 +143,6 @@ static int nsc_ircc_is_receiving(struct static int nsc_ircc_read_dongle_id (int iobase); static void nsc_ircc_init_dongle_interface (int iobase, int dongle_id); -static int nsc_ircc_net_init(struct net_device *dev); static int nsc_ircc_net_open(struct net_device *dev); static int nsc_ircc_net_close(struct net_device *dev); static int nsc_ircc_net_ioctl(struct net_device *dev, struct ifreq *rq, int cmd); @@ -261,14 +260,16 @@ static int __init nsc_ircc_open(int i, c MESSAGE("%s, driver loaded (Dag Brattli)\n", driver_name); - /* Allocate new instance of the driver */ - self = kmalloc(sizeof(struct nsc_ircc_cb), GFP_KERNEL); - if (self == NULL) { + dev = alloc_netdev(sizeof(struct nsc_ircc_cb), "irda%d", + irda_device_setup); + if (dev == NULL) { ERROR("%s(), can't allocate memory for " "control block!\n", __FUNCTION__); return -ENOMEM; } - memset(self, 0, sizeof(struct nsc_ircc_cb)); + + self = dev->priv; + self->netdev = dev; spin_lock_init(&self->lock); /* Need to store self somewhere */ @@ -288,9 +289,8 @@ static int __init nsc_ircc_open(int i, c if (!ret) { WARNING("%s(), can't get iobase of 0x%03x\n", __FUNCTION__, self->io.fir_base); - dev_self[i] = NULL; - kfree(self); - return -ENODEV; + err = -ENODEV; + goto out1; } /* Initialize QoS for this device */ @@ -313,17 +313,17 @@ static int __init nsc_ircc_open(int i, c self->rx_buff.head = (__u8 *) kmalloc(self->rx_buff.truesize, GFP_KERNEL|GFP_DMA); if (self->rx_buff.head == NULL) { - kfree(self); - return -ENOMEM; + err = -ENOMEM; + goto out2; + } memset(self->rx_buff.head, 0, self->rx_buff.truesize); self->tx_buff.head = (__u8 *) kmalloc(self->tx_buff.truesize, GFP_KERNEL|GFP_DMA); if (self->tx_buff.head == NULL) { - kfree(self->rx_buff.head); - kfree(self); - return -ENOMEM; + err = -ENOMEM; + goto out3; } memset(self->tx_buff.head, 0, self->tx_buff.truesize); @@ -336,28 +336,18 @@ static int __init nsc_ircc_open(int i, c self->tx_fifo.len = self->tx_fifo.ptr = self->tx_fifo.free = 0; self->tx_fifo.tail = self->tx_buff.head; - if (!(dev = dev_alloc("irda%d", &err))) { - ERROR("%s(), dev_alloc() failed!\n", __FUNCTION__); - return -ENOMEM; - } - - dev->priv = (void *) self; - self->netdev = dev; - /* Override the network functions we need to use */ - dev->init = nsc_ircc_net_init; + SET_MODULE_OWNER(dev); dev->hard_start_xmit = nsc_ircc_hard_xmit_sir; dev->open = nsc_ircc_net_open; dev->stop = nsc_ircc_net_close; dev->do_ioctl = nsc_ircc_net_ioctl; dev->get_stats = nsc_ircc_net_get_stats; - rtnl_lock(); - err = register_netdevice(dev); - rtnl_unlock(); + err = register_netdev(dev); if (err) { ERROR("%s(), register_netdev() failed!\n", __FUNCTION__); - return -1; + goto out4; } MESSAGE("IrDA: Registered device %s\n", dev->name); @@ -380,6 +370,16 @@ static int __init nsc_ircc_open(int i, c pmdev->data = self; return 0; + out4: + kfree(self->tx_buff.head); + out3: + kfree(self->rx_buff.head); + out2: + release_region(self->io.fir_base, self->io.fir_ext); + out1: + free_netdev(dev); + dev_self[i] = NULL; + return err; } /* @@ -399,8 +399,7 @@ static int __exit nsc_ircc_close(struct iobase = self->io.fir_base; /* Remove netdevice */ - if (self->netdev) - unregister_netdev(self->netdev); + unregister_netdev(self->netdev); /* Release the PORT that this driver is using */ IRDA_DEBUG(4, "%s(), Releasing Region %03x\n", @@ -414,7 +413,7 @@ static int __exit nsc_ircc_close(struct kfree(self->rx_buff.head); dev_self[self->index] = NULL; - kfree(self); + free_netdev(self->netdev); return 0; } @@ -1991,27 +1990,6 @@ static int nsc_ircc_is_receiving(struct } /* - * Function nsc_ircc_net_init (dev) - * - * Initialize network device - * - */ -static int nsc_ircc_net_init(struct net_device *dev) -{ - IRDA_DEBUG(4, "%s()\n", __FUNCTION__); - - /* Keep track of module usage */ - SET_MODULE_OWNER(dev); - - /* Setup to be a normal IrDA network device driver */ - irda_device_setup(dev); - - /* Insert overrides below this line! */ - - return 0; -} - -/* * Function nsc_ircc_net_open (dev) * * Start the device diff -prauN linux-2.6.0-test5/drivers/net/irda/sir_kthread.c wli-2.6.0-test5-bk12-25/drivers/net/irda/sir_kthread.c --- linux-2.6.0-test5/drivers/net/irda/sir_kthread.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/irda/sir_kthread.c 2003-09-25 19:15:59.000000000 -0700 @@ -132,7 +132,7 @@ static int irda_thread(void *startup) if (list_empty(&irda_rq_queue.request_list)) schedule(); else - set_task_state(current, TASK_RUNNING); + __set_task_state(current, TASK_RUNNING); remove_wait_queue(&irda_rq_queue.kick, &wait); /* make swsusp happy with our thread */ @@ -165,7 +165,7 @@ static void flush_irda_queue(void) if (atomic_read(&irda_rq_queue.num_pending)) schedule(); else - set_task_state(current, TASK_RUNNING); + __set_task_state(current, TASK_RUNNING); remove_wait_queue(&irda_rq_queue.done, &wait); } } diff -prauN linux-2.6.0-test5/drivers/net/irda/smc-ircc.c wli-2.6.0-test5-bk12-25/drivers/net/irda/smc-ircc.c --- linux-2.6.0-test5/drivers/net/irda/smc-ircc.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/irda/smc-ircc.c 1969-12-31 16:00:00.000000000 -0800 @@ -1,1258 +0,0 @@ -/********************************************************************* - * - * Filename: smc-ircc.c - * Version: 0.4 - * Description: Driver for the SMC Infrared Communications Controller - * Status: Experimental. - * Author: Thomas Davis (tadavis@jps.net) - * Created at: - * Modified at: Tue Feb 22 10:05:06 2000 - * Modified by: Dag Brattli - * Modified at: Tue Jun 26 2001 - * Modified by: Stefani Seibold - * Modified at: Thur Apr 18 2002 - * Modified by: Jeff Snyder - * - * Copyright (c) 2001 Stefani Seibold - * Copyright (c) 1999-2001 Dag Brattli - * Copyright (c) 1998-1999 Thomas Davis, - * All Rights Reserved. - * - * 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 of - * the License, 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, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - * - * SIO's: all SIO documentet by SMC (June, 2001) - * Applicable Models : Fujitsu Lifebook 635t, Sony PCG-505TX, - * Dell Inspiron 8000 - * - ********************************************************************/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include - -#include -#include -#include -#include -#include - -struct smc_chip { - char *name; - u16 flags; - u8 devid; - u8 rev; -}; -typedef struct smc_chip smc_chip_t; - -static const char *driver_name = "smc-ircc"; - -#define DIM(x) (sizeof(x)/(sizeof(*(x)))) - -#define CHIP_IO_EXTENT 8 - -static struct ircc_cb *dev_self[] = { NULL, NULL}; - -/* Some prototypes */ -static int ircc_open(unsigned int iobase, unsigned int board_addr); -static int ircc_dma_receive(struct ircc_cb *self, int iobase); -static void ircc_dma_receive_complete(struct ircc_cb *self, int iobase); -static int ircc_hard_xmit(struct sk_buff *skb, struct net_device *dev); -static void ircc_dma_xmit(struct ircc_cb *self, int iobase, int bofs); -static void ircc_change_speed(void *priv, u32 speed); -static irqreturn_t ircc_interrupt(int irq, void *dev_id, struct pt_regs *regs); -static int ircc_net_open(struct net_device *dev); -static int ircc_net_close(struct net_device *dev); -static int ircc_pmproc(struct pm_dev *dev, pm_request_t rqst, void *data); - -#define KEY55_1 0 /* SuperIO Configuration mode with Key <0x55> */ -#define KEY55_2 1 /* SuperIO Configuration mode with Key <0x55,0x55> */ -#define NoIRDA 2 /* SuperIO Chip has no IRDA Port */ -#define SIR 0 /* SuperIO Chip has only slow IRDA */ -#define FIR 4 /* SuperIO Chip has fast IRDA */ -#define SERx4 8 /* SuperIO Chip supports 115,2 KBaud * 4=460,8 KBaud */ - -/* These are the currently known SMC SuperIO chipsets */ -static smc_chip_t __initdata fdc_chips_flat[]= -{ - /* Base address 0x3f0 or 0x370 */ - { "37C44", KEY55_1|NoIRDA, 0x00, 0x00 }, /* This chip can not detected */ - { "37C665GT", KEY55_2|NoIRDA, 0x65, 0x01 }, - { "37C665GT", KEY55_2|NoIRDA, 0x66, 0x01 }, - { "37C669", KEY55_2|SIR|SERx4, 0x03, 0x02 }, - { "37C669", KEY55_2|SIR|SERx4, 0x04, 0x02 }, /* ID? */ - { "37C78", KEY55_2|NoIRDA, 0x78, 0x00 }, - { "37N769", KEY55_1|FIR|SERx4, 0x28, 0x00 }, - { "37N869", KEY55_1|FIR|SERx4, 0x29, 0x00 }, - { NULL } -}; - -static smc_chip_t __initdata fdc_chips_paged[]= -{ - /* Base address 0x3f0 or 0x370 */ - { "37B72X", KEY55_1|SIR|SERx4, 0x4c, 0x00 }, - { "37B77X", KEY55_1|SIR|SERx4, 0x43, 0x00 }, - { "37B78X", KEY55_1|SIR|SERx4, 0x44, 0x00 }, - { "37B80X", KEY55_1|SIR|SERx4, 0x42, 0x00 }, - { "37C67X", KEY55_1|FIR|SERx4, 0x40, 0x00 }, - { "37C93X", KEY55_2|SIR|SERx4, 0x02, 0x01 }, - { "37C93XAPM", KEY55_1|SIR|SERx4, 0x30, 0x01 }, - { "37C93XFR", KEY55_2|FIR|SERx4, 0x03, 0x01 }, - { "37M707", KEY55_1|SIR|SERx4, 0x42, 0x00 }, - { "37M81X", KEY55_1|SIR|SERx4, 0x4d, 0x00 }, - { "37N958FR", KEY55_1|FIR|SERx4, 0x09, 0x04 }, - { "37N971", KEY55_1|FIR|SERx4, 0x0a, 0x00 }, - { "37N972", KEY55_1|FIR|SERx4, 0x0b, 0x00 }, - { NULL } -}; - -static smc_chip_t __initdata lpc_chips_flat[]= -{ - /* Base address 0x2E or 0x4E */ - { "47N227", KEY55_1|FIR|SERx4, 0x5a, 0x00 }, - { "47N267", KEY55_1|FIR|SERx4, 0x5e, 0x00 }, - { NULL } -}; - -static smc_chip_t __initdata lpc_chips_paged[]= -{ - /* Base address 0x2E or 0x4E */ - { "47B27X", KEY55_1|SIR|SERx4, 0x51, 0x00 }, - { "47B37X", KEY55_1|SIR|SERx4, 0x52, 0x00 }, - { "47M10X", KEY55_1|SIR|SERx4, 0x59, 0x00 }, - { "47M120", KEY55_1|NoIRDA|SERx4, 0x5c, 0x00 }, - { "47M13X", KEY55_1|SIR|SERx4, 0x59, 0x00 }, - { "47M14X", KEY55_1|SIR|SERx4, 0x5f, 0x00 }, - { "47N252", KEY55_1|FIR|SERx4, 0x0e, 0x00 }, - { "47S42X", KEY55_1|SIR|SERx4, 0x57, 0x00 }, - { NULL } -}; - -static int ircc_irq=255; -static int ircc_dma=255; -static int ircc_fir=0; -static int ircc_sir=0; -static int ircc_cfg=0; - -static unsigned short dev_count=0; - -static inline void register_bank(int iobase, int bank) -{ - outb(((inb(iobase+IRCC_MASTER) & 0xf0) | (bank & 0x07)), - iobase+IRCC_MASTER); -} - -static int __init smc_access(unsigned short cfg_base,unsigned char reg) -{ - IRDA_DEBUG(0, "%s()\n", __FUNCTION__ ); - - outb(reg, cfg_base); - - if (inb(cfg_base)!=reg) - return -1; - - return 0; -} - -static const smc_chip_t * __init smc_probe(unsigned short cfg_base,u8 reg,const smc_chip_t *chip,char *type) -{ - u8 devid,xdevid,rev; - - IRDA_DEBUG(0, "%s()\n", __FUNCTION__ ); - - /* Leave configuration */ - - outb(0xaa, cfg_base); - - if (inb(cfg_base)==0xaa) /* not a smc superio chip */ - return NULL; - - outb(reg, cfg_base); - - xdevid=inb(cfg_base+1); - - /* Enter configuration */ - - outb(0x55, cfg_base); - - if (smc_access(cfg_base,0x55)) /* send second key and check */ - return NULL; - - /* probe device ID */ - - if (smc_access(cfg_base,reg)) - return NULL; - - devid=inb(cfg_base+1); - - if (devid==0) /* typical value for unused port */ - return NULL; - - if (devid==0xff) /* typical value for unused port */ - return NULL; - - /* probe revision ID */ - - if (smc_access(cfg_base,reg+1)) - return NULL; - - rev=inb(cfg_base+1); - - if (rev>=128) /* i think this will make no sense */ - return NULL; - - if (devid==xdevid) /* protection against false positives */ - return NULL; - - /* Check for expected device ID; are there others? */ - - while(chip->devid!=devid) { - - chip++; - - if (chip->name==NULL) - return NULL; - } - if (chip->rev>rev) - return NULL; - - MESSAGE("found SMC SuperIO Chip (devid=0x%02x rev=%02X base=0x%04x): %s%s\n",devid,rev,cfg_base,type,chip->name); - - if (chip->flags&NoIRDA) - MESSAGE("chipset does not support IRDA\n"); - - return chip; -} - -/* - * Function smc_superio_flat (chip, base, type) - * - * Try get configuration of a smc SuperIO chip with flat register model - * - */ -static int __init smc_superio_flat(const smc_chip_t *chips, unsigned short cfg_base, char *type) -{ - unsigned short fir_io; - unsigned short sir_io; - u8 mode; - int ret = -ENODEV; - - IRDA_DEBUG(0, "%s()\n", __FUNCTION__ ); - - if (smc_probe(cfg_base,0xD,chips,type)==NULL) - return ret; - - outb(0x0c, cfg_base); - - mode = inb(cfg_base+1); - mode = (mode & 0x38) >> 3; - - /* Value for IR port */ - if (mode && mode < 4) { - /* SIR iobase */ - outb(0x25, cfg_base); - sir_io = inb(cfg_base+1) << 2; - - /* FIR iobase */ - outb(0x2b, cfg_base); - fir_io = inb(cfg_base+1) << 3; - - if (fir_io) { - if (ircc_open(fir_io, sir_io) == 0) - ret=0; - } - } - - /* Exit configuration */ - outb(0xaa, cfg_base); - - return ret; -} - -/* - * Function smc_superio_paged (chip, base, type) - * - * Try get configuration of a smc SuperIO chip with paged register model - * - */ -static int __init smc_superio_paged(const smc_chip_t *chips, unsigned short cfg_base, char *type) -{ - unsigned short fir_io; - unsigned short sir_io; - int ret = -ENODEV; - - IRDA_DEBUG(0, "%s()\n", __FUNCTION__ ); - - if (smc_probe(cfg_base,0x20,chips,type)==NULL) - return ret; - - /* Select logical device (UART2) */ - outb(0x07, cfg_base); - outb(0x05, cfg_base + 1); - - /* SIR iobase */ - outb(0x60, cfg_base); - sir_io = inb(cfg_base + 1) << 8; - outb(0x61, cfg_base); - sir_io |= inb(cfg_base + 1); - - /* Read FIR base */ - outb(0x62, cfg_base); - fir_io = inb(cfg_base + 1) << 8; - outb(0x63, cfg_base); - fir_io |= inb(cfg_base + 1); - outb(0x2b, cfg_base); /* ??? */ - - if (fir_io) { - if (ircc_open(fir_io, sir_io) == 0) - ret=0; - } - - /* Exit configuration */ - outb(0xaa, cfg_base); - - return ret; -} - -static int __init smc_superio_fdc(unsigned short cfg_base) -{ - if (check_region(cfg_base, 2) < 0) { - IRDA_DEBUG(0, "%s: can't get cfg_base of 0x%03x\n", __FUNCTION__ , - cfg_base); - return -1; - } - - if (!smc_superio_flat(fdc_chips_flat,cfg_base,"FDC")||!smc_superio_paged(fdc_chips_paged,cfg_base,"FDC")) - return 0; - - return -1; -} - -static int __init smc_superio_lpc(unsigned short cfg_base) -{ -#if 0 - if (check_region(cfg_base, 2) < 0) { - IRDA_DEBUG(0, "%s: can't get cfg_base of 0x%03x\n", __FUNCTION__ , - cfg_base); - return -1; - } -#endif - - if (!smc_superio_flat(lpc_chips_flat,cfg_base,"LPC")||!smc_superio_paged(lpc_chips_paged,cfg_base,"LPC")) - return 0; - - return -1; -} - -/* - * Function ircc_init () - * - * Initialize chip. Just try to find out how many chips we are dealing with - * and where they are - */ -int __init ircc_init(void) -{ - int ret=-ENODEV; - - IRDA_DEBUG(0, "%s\n", __FUNCTION__ ); - - dev_count=0; - - if ((ircc_fir>0)&&(ircc_sir>0)) { - MESSAGE(" Overriding FIR address 0x%04x\n", ircc_fir); - MESSAGE(" Overriding SIR address 0x%04x\n", ircc_sir); - - if (ircc_open(ircc_fir, ircc_sir) == 0) - return 0; - - return -ENODEV; - } - - /* try user provided configuration register base address */ - if (ircc_cfg>0) { - MESSAGE(" Overriding configuration address 0x%04x\n", ircc_cfg); - if (!smc_superio_fdc(ircc_cfg)) - ret=0; - } - - /* Trys to open for all the SMC chipsets we know about */ - - IRDA_DEBUG(0, - "%s Try to open all known SMC chipsets\n", __FUNCTION__ ); - - if (!smc_superio_fdc(0x3f0)) - ret=0; - if (!smc_superio_fdc(0x370)) - ret=0; - if (!smc_superio_fdc(0xe0)) - ret=0; - if (!smc_superio_lpc(0x2e)) - ret=0; - if (!smc_superio_lpc(0x4e)) - ret=0; - - return ret; -} - -/* - * Function ircc_open (iobase, irq) - * - * Try to open driver instance - * - */ -static int __init ircc_open(unsigned int fir_base, unsigned int sir_base) -{ - struct ircc_cb *self; - struct irport_cb *irport; - unsigned char low, high, chip, config, dma, irq, version; - unsigned long flags; - - - IRDA_DEBUG(0, "%s\n", __FUNCTION__ ); - - if (check_region(fir_base, CHIP_IO_EXTENT) < 0) { - IRDA_DEBUG(0, "%s: can't get fir_base of 0x%03x\n", __FUNCTION__ , - fir_base); - return -ENODEV; - } -#if POSSIBLE_USED_BY_SERIAL_DRIVER - if (check_region(sir_base, CHIP_IO_EXTENT) < 0) { - IRDA_DEBUG(0, "%s: can't get sir_base of 0x%03x\n", __FUNCTION__ , - sir_base); - return -ENODEV; - } -#endif - - register_bank(fir_base, 3); - - high = inb(fir_base+IRCC_ID_HIGH); - low = inb(fir_base+IRCC_ID_LOW); - chip = inb(fir_base+IRCC_CHIP_ID); - version = inb(fir_base+IRCC_VERSION); - config = inb(fir_base+IRCC_INTERFACE); - - irq = config >> 4 & 0x0f; - dma = config & 0x0f; - - if (high != 0x10 || low != 0xb8 || (chip != 0xf1 && chip != 0xf2)) { - IRDA_DEBUG(0, - "%s(), addr 0x%04x - no device found!\n", __FUNCTION__ , fir_base); - return -ENODEV; - } - MESSAGE("SMC IrDA Controller found\n IrCC version %d.%d, " - "firport 0x%03x, sirport 0x%03x dma=%d, irq=%d\n", - chip & 0x0f, version, fir_base, sir_base, dma, irq); - - if (dev_count >= DIM(dev_self)) { - IRDA_DEBUG(0, - "%s(), to many devices!\n", __FUNCTION__ ); - return -ENOMEM; - } - - /* - * Allocate new instance of the driver - */ - self = kmalloc(sizeof(struct ircc_cb), GFP_KERNEL); - if (self == NULL) { - ERROR("%s, Can't allocate memory for control block!\n", - driver_name); - return -ENOMEM; - } - memset(self, 0, sizeof(struct ircc_cb)); - - /* Max DMA buffer size needed = (data_size + 6) * (window_size) + 6; */ - self->rx_buff.truesize = 4000; - self->tx_buff.truesize = 4000; - - self->rx_buff.head = (u8 *) kmalloc(self->rx_buff.truesize, - GFP_KERNEL|GFP_DMA); - if (self->rx_buff.head == NULL) { - ERROR("%s, Can't allocate memory for receive buffer!\n", - driver_name); - kfree(self); - return -ENOMEM; - } - - self->tx_buff.head = (u8 *) kmalloc(self->tx_buff.truesize, - GFP_KERNEL|GFP_DMA); - if (self->tx_buff.head == NULL) { - ERROR("%s, Can't allocate memory for transmit buffer!\n", - driver_name); - kfree(self->rx_buff.head); - kfree(self); - return -ENOMEM; - } - - irport = irport_open(dev_count, sir_base, irq); - if (!irport) { - kfree(self->tx_buff.head); - kfree(self->rx_buff.head); - kfree(self); - return -ENODEV; - } - - memset(self->rx_buff.head, 0, self->rx_buff.truesize); - memset(self->tx_buff.head, 0, self->tx_buff.truesize); - - /* Need to store self somewhere */ - dev_self[dev_count++] = self; - - /* Steal the network device from irport */ - self->netdev = irport->netdev; - self->irport = irport; - - irport->priv = self; - - /* Keep track of module usage */ - SET_MODULE_OWNER(self->netdev); - - /* Initialize IO */ - self->io = &irport->io; - self->io->fir_base = fir_base; - self->io->sir_base = sir_base; /* Used by irport */ - self->io->fir_ext = CHIP_IO_EXTENT; - self->io->sir_ext = 8; /* Used by irport */ - - if (ircc_irq < 255) { - if (ircc_irq!=irq) - MESSAGE("%s, Overriding IRQ - chip says %d, using %d\n", - driver_name, irq, ircc_irq); - self->io->irq = ircc_irq; - } - else - self->io->irq = irq; - if (ircc_dma < 255) { - if (ircc_dma!=dma) - MESSAGE("%s, Overriding DMA - chip says %d, using %d\n", - driver_name, dma, ircc_dma); - self->io->dma = ircc_dma; - } - else - self->io->dma = dma; - - request_region(self->io->fir_base, CHIP_IO_EXTENT, driver_name); - - /* Don't allow irport to change under us - Jean II */ - spin_lock_irqsave(&self->irport->lock, flags); - - /* Initialize QoS for this device */ - irda_init_max_qos_capabilies(&irport->qos); - - /* The only value we must override it the baudrate */ - irport->qos.baud_rate.bits = IR_9600|IR_19200|IR_38400|IR_57600| - IR_115200|IR_576000|IR_1152000|(IR_4000000 << 8); - - irport->qos.min_turn_time.bits = 0x07; - irport->qos.window_size.bits = 0x01; - irda_qos_bits_to_value(&irport->qos); - - irport->flags = IFF_FIR|IFF_MIR|IFF_SIR|IFF_DMA|IFF_PIO; - - - self->rx_buff.in_frame = FALSE; - self->rx_buff.state = OUTSIDE_FRAME; - self->tx_buff.data = self->tx_buff.head; - self->rx_buff.data = self->rx_buff.head; - - /* Override the speed change function, since we must control it now */ - irport->change_speed = &ircc_change_speed; - irport->interrupt = &ircc_interrupt; - self->netdev->open = &ircc_net_open; - self->netdev->stop = &ircc_net_close; - - irport_start(self->irport); - spin_unlock_irqrestore(&self->irport->lock, flags); - - self->pmdev = pm_register(PM_SYS_DEV, PM_SYS_IRDA, ircc_pmproc); - if (self->pmdev) - self->pmdev->data = self; - - /* Power on device */ - - outb(0x00, fir_base+IRCC_MASTER); - - return 0; -} - -/* - * Function ircc_change_speed (self, baud) - * - * Change the speed of the device - * - * This function should be called with irq off and spin-lock. - */ -static void ircc_change_speed(void *priv, u32 speed) -{ - int iobase, ir_mode, ctrl, fast; - struct ircc_cb *self = (struct ircc_cb *) priv; - struct net_device *dev; - - IRDA_DEBUG(0, "%s\n", __FUNCTION__ ); - - ASSERT(self != NULL, return;); - - dev = self->netdev; - iobase = self->io->fir_base; - - /* Update accounting for new speed */ - self->io->speed = speed; - - outb(IRCC_MASTER_RESET, iobase+IRCC_MASTER); - outb(0x00, iobase+IRCC_MASTER); - - switch (speed) { - default: - IRDA_DEBUG(0, "%s(), unknown baud rate of %d\n", __FUNCTION__ , - speed); - /* FALLTHROUGH */ - case 9600: - case 19200: - case 38400: - case 57600: - case 115200: - ir_mode = IRCC_CFGA_IRDA_SIR_A; - ctrl = 0; - fast = 0; - break; - case 576000: - ir_mode = IRCC_CFGA_IRDA_HDLC; - ctrl = IRCC_CRC; - fast = 0; - IRDA_DEBUG(0, "%s(), handling baud of 576000\n", __FUNCTION__ ); - break; - case 1152000: - ir_mode = IRCC_CFGA_IRDA_HDLC; - ctrl = IRCC_1152 | IRCC_CRC; - fast = 0; - IRDA_DEBUG(0, "%s(), handling baud of 1152000\n", __FUNCTION__ ); - break; - case 4000000: - ir_mode = IRCC_CFGA_IRDA_4PPM; - ctrl = IRCC_CRC; - fast = IRCC_LCR_A_FAST; - IRDA_DEBUG(0, "%s(), handling baud of 4000000\n", __FUNCTION__ ); - break; - } - - register_bank(iobase, 0); - outb(0, iobase+IRCC_IER); - outb(IRCC_MASTER_INT_EN, iobase+IRCC_MASTER); - - /* Make special FIR init if necessary */ - if (speed > 115200) { - /* No need to lock, already locked - Jean II */ - irport_stop(self->irport); - - /* Install FIR transmit handler */ - dev->hard_start_xmit = &ircc_hard_xmit; - - /* - * Don't know why we have to do this, but FIR interrupts - * stops working if we remove it. - */ - /* outb(UART_MCR_OUT2, self->io->sir_base + UART_MCR); */ - - /* Be ready for incoming frames */ - ircc_dma_receive(self, iobase); - } else { - /* Install SIR transmit handler */ - dev->hard_start_xmit = &irport_hard_xmit; - /* No need to lock, already locked - Jean II */ - irport_start(self->irport); - - IRDA_DEBUG(0, - "%s(), using irport to change speed to %d\n", __FUNCTION__ , speed); - irport_change_speed(self->irport, speed); - } - - register_bank(iobase, 1); - outb(((inb(iobase+IRCC_SCE_CFGA) & 0x87) | ir_mode), - iobase+IRCC_SCE_CFGA); - -#ifdef SMC_669 /* Uses pin 88/89 for Rx/Tx */ - outb(((inb(iobase+IRCC_SCE_CFGB) & 0x3f) | IRCC_CFGB_MUX_COM), - iobase+IRCC_SCE_CFGB); -#else - outb(((inb(iobase+IRCC_SCE_CFGB) & 0x3f) | IRCC_CFGB_MUX_IR), - iobase+IRCC_SCE_CFGB); -#endif - (void) inb(iobase+IRCC_FIFO_THRESHOLD); - outb(64, iobase+IRCC_FIFO_THRESHOLD); - - register_bank(iobase, 4); - outb((inb(iobase+IRCC_CONTROL) & 0x30) | ctrl, iobase+IRCC_CONTROL); - - register_bank(iobase, 0); - outb(fast, iobase+IRCC_LCR_A); - - netif_start_queue(dev); -} - -/* - * Function ircc_hard_xmit (skb, dev) - * - * Transmit the frame! - * - */ -static int ircc_hard_xmit(struct sk_buff *skb, struct net_device *dev) -{ - struct irport_cb *irport; - struct ircc_cb *self; - unsigned long flags; - s32 speed; - int iobase; - int mtt; - - irport = (struct irport_cb *) dev->priv; - self = (struct ircc_cb *) irport->priv; - ASSERT(self != NULL, return 0;); - - iobase = self->io->fir_base; - - netif_stop_queue(dev); - - /* Make sure tests *& speed change are atomic */ - spin_lock_irqsave(&self->irport->lock, flags); - - /* Note : you should make sure that speed changes are not going - * to corrupt any outgoing frame. Look at nsc-ircc for the gory - * details - Jean II */ - - /* Check if we need to change the speed after this frame */ - speed = irda_get_next_speed(skb); - if ((speed != self->io->speed) && (speed != -1)) { - /* Check for empty frame */ - if (!skb->len) { - ircc_change_speed(self, speed); - dev->trans_start = jiffies; - spin_unlock_irqrestore(&self->irport->lock, flags); - dev_kfree_skb(skb); - return 0; - } else - self->new_speed = speed; - } - - memcpy(self->tx_buff.head, skb->data, skb->len); - - self->tx_buff.len = skb->len; - self->tx_buff.data = self->tx_buff.head; - - mtt = irda_get_mtt(skb); - if (mtt) { - int bofs; - - /* - * Compute how many BOFs (STA or PA's) we need to waste the - * min turn time given the speed of the link. - */ - bofs = mtt * (self->io->speed / 1000) / 8000; - if (bofs > 4095) - bofs = 4095; - - ircc_dma_xmit(self, iobase, bofs); - } else { - /* Transmit frame */ - ircc_dma_xmit(self, iobase, 0); - } - dev->trans_start = jiffies; - spin_unlock_irqrestore(&self->irport->lock, flags); - dev_kfree_skb(skb); - - return 0; -} - -/* - * Function ircc_dma_xmit (self, iobase) - * - * Transmit data using DMA - * - */ -static void ircc_dma_xmit(struct ircc_cb *self, int iobase, int bofs) -{ - u8 ctrl; - - IRDA_DEBUG(2, "%s\n", __FUNCTION__ ); -#if 0 - /* Disable Rx */ - register_bank(iobase, 0); - outb(0x00, iobase+IRCC_LCR_B); -#endif - register_bank(iobase, 1); - outb(inb(iobase+IRCC_SCE_CFGB) & ~IRCC_CFGB_DMA_ENABLE, - iobase+IRCC_SCE_CFGB); - - self->io->direction = IO_XMIT; - - /* Set BOF additional count for generating the min turn time */ - register_bank(iobase, 4); - outb(bofs & 0xff, iobase+IRCC_BOF_COUNT_LO); - ctrl = inb(iobase+IRCC_CONTROL) & 0xf0; - outb(ctrl | ((bofs >> 8) & 0x0f), iobase+IRCC_BOF_COUNT_HI); - - /* Set max Tx frame size */ - outb(self->tx_buff.len >> 8, iobase+IRCC_TX_SIZE_HI); - outb(self->tx_buff.len & 0xff, iobase+IRCC_TX_SIZE_LO); - - /* Setup DMA controller (must be done after enabling chip DMA) */ - setup_dma(self->io->dma, self->tx_buff.data, self->tx_buff.len, - DMA_TX_MODE); - - outb(UART_MCR_OUT2, self->io->sir_base + UART_MCR); - /* Enable burst mode chip Tx DMA */ - register_bank(iobase, 1); - outb(inb(iobase+IRCC_SCE_CFGB) | IRCC_CFGB_DMA_ENABLE | - IRCC_CFGB_DMA_BURST, iobase+IRCC_SCE_CFGB); - - /* Enable interrupt */ - outb(IRCC_MASTER_INT_EN, iobase+IRCC_MASTER); - register_bank(iobase, 0); - outb(IRCC_IER_ACTIVE_FRAME | IRCC_IER_EOM, iobase+IRCC_IER); - - /* Enable transmit */ - outb(IRCC_LCR_B_SCE_TRANSMIT|IRCC_LCR_B_SIP_ENABLE, iobase+IRCC_LCR_B); -} - -/* - * Function ircc_dma_xmit_complete (self) - * - * The transfer of a frame in finished. This function will only be called - * by the interrupt handler - * - */ -static void ircc_dma_xmit_complete(struct ircc_cb *self, int iobase) -{ - IRDA_DEBUG(2, "%s\n", __FUNCTION__ ); -#if 0 - /* Disable Tx */ - register_bank(iobase, 0); - outb(0x00, iobase+IRCC_LCR_B); -#endif - register_bank(self->io->fir_base, 1); - outb(inb(self->io->fir_base+IRCC_SCE_CFGB) & ~IRCC_CFGB_DMA_ENABLE, - self->io->fir_base+IRCC_SCE_CFGB); - - /* Check for underrrun! */ - register_bank(iobase, 0); - if (inb(iobase+IRCC_LSR) & IRCC_LSR_UNDERRUN) { - self->irport->stats.tx_errors++; - self->irport->stats.tx_fifo_errors++; - - /* Reset error condition */ - register_bank(iobase, 0); - outb(IRCC_MASTER_ERROR_RESET, iobase+IRCC_MASTER); - outb(0x00, iobase+IRCC_MASTER); - } else { - self->irport->stats.tx_packets++; - self->irport->stats.tx_bytes += self->tx_buff.len; - } - - /* Check if it's time to change the speed */ - if (self->new_speed) { - ircc_change_speed(self, self->new_speed); - self->new_speed = 0; - } - - netif_wake_queue(self->netdev); -} - -/* - * Function ircc_dma_receive (self) - * - * Get ready for receiving a frame. The device will initiate a DMA - * if it starts to receive a frame. - * - */ -static int ircc_dma_receive(struct ircc_cb *self, int iobase) -{ -#if 0 - /* Turn off chip DMA */ - register_bank(iobase, 1); - outb(inb(iobase+IRCC_SCE_CFGB) & ~IRCC_CFGB_DMA_ENABLE, - iobase+IRCC_SCE_CFGB); -#endif - setup_dma(self->io->dma, self->rx_buff.data, self->rx_buff.truesize, - DMA_RX_MODE); - - /* Set max Rx frame size */ - register_bank(iobase, 4); - outb((2050 >> 8) & 0x0f, iobase+IRCC_RX_SIZE_HI); - outb(2050 & 0xff, iobase+IRCC_RX_SIZE_LO); - - self->io->direction = IO_RECV; - self->rx_buff.data = self->rx_buff.head; - - /* Setup DMA controller */ - - /* Enable receiver */ - register_bank(iobase, 0); - outb(IRCC_LCR_B_SCE_RECEIVE | IRCC_LCR_B_SIP_ENABLE, - iobase+IRCC_LCR_B); - - /* Enable burst mode chip Rx DMA */ - register_bank(iobase, 1); - outb(inb(iobase+IRCC_SCE_CFGB) | IRCC_CFGB_DMA_ENABLE | - IRCC_CFGB_DMA_BURST, iobase+IRCC_SCE_CFGB); - - return 0; -} - -/* - * Function ircc_dma_receive_complete (self) - * - * Finished with receiving frames - * - */ -static void ircc_dma_receive_complete(struct ircc_cb *self, int iobase) -{ - struct sk_buff *skb; - int len, msgcnt; - - IRDA_DEBUG(2, "%s\n", __FUNCTION__ ); -#if 0 - /* Disable Rx */ - register_bank(iobase, 0); - outb(0x00, iobase+IRCC_LCR_B); -#endif - register_bank(iobase, 0); - msgcnt = inb(iobase+IRCC_LCR_B) & 0x08; - - IRDA_DEBUG(2, "%s: dma count = %d\n", __FUNCTION__ , - get_dma_residue(self->io->dma)); - - len = self->rx_buff.truesize - get_dma_residue(self->io->dma); - - /* Remove CRC */ - if (self->io->speed < 4000000) - len -= 2; - else - len -= 4; - - if ((len < 2) || (len > 2050)) { - WARNING("%s(), bogus len=%d\n", __FUNCTION__, len); - return; - } - IRDA_DEBUG(2, "%s: msgcnt = %d, len=%d\n", __FUNCTION__ , msgcnt, len); - - skb = dev_alloc_skb(len+1); - if (!skb) { - WARNING("%s(), memory squeeze, dropping frame.\n", __FUNCTION__); - return; - } - /* Make sure IP header gets aligned */ - skb_reserve(skb, 1); - - memcpy(skb_put(skb, len), self->rx_buff.data, len); - self->irport->stats.rx_packets++; - self->irport->stats.rx_bytes += len; - - skb->dev = self->netdev; - skb->mac.raw = skb->data; - skb->protocol = htons(ETH_P_IRDA); - netif_rx(skb); - self->netdev->last_rx = jiffies; -} - -/* - * Function ircc_interrupt (irq, dev_id, regs) - * - * An interrupt from the chip has arrived. Time to do some work - * - */ -static irqreturn_t ircc_interrupt(int irq, void *dev_id, struct pt_regs *regs) -{ - struct net_device *dev = (struct net_device *) dev_id; - struct irport_cb *irport; - struct ircc_cb *self; - int iobase, iir; - - if (dev == NULL) { - printk(KERN_WARNING "%s: irq %d for unknown device.\n", - driver_name, irq); - return IRQ_NONE; - } - irport = (struct irport_cb *) dev->priv; - ASSERT(irport != NULL, return IRQ_NONE;); - self = (struct ircc_cb *) irport->priv; - ASSERT(self != NULL, return IRQ_NONE;); - - /* Check if we should use the SIR interrupt handler */ - if (self->io->speed < 576000) { - /* Will spinlock itself - Jean II */ - irport_interrupt(irq, dev_id, regs); - return IRQ_HANDLED; - } - iobase = self->io->fir_base; - - spin_lock(&self->irport->lock); - - register_bank(iobase, 0); - iir = inb(iobase+IRCC_IIR); - - /* Disable interrupts */ - outb(0, iobase+IRCC_IER); - - IRDA_DEBUG(2, "%s(), iir = 0x%02x\n", __FUNCTION__ , iir); - - if (iir & IRCC_IIR_EOM) { - if (self->io->direction == IO_RECV) - ircc_dma_receive_complete(self, iobase); - else - ircc_dma_xmit_complete(self, iobase); - - ircc_dma_receive(self, iobase); - } - - /* Enable interrupts again */ - register_bank(iobase, 0); - outb(IRCC_IER_ACTIVE_FRAME|IRCC_IER_EOM, iobase+IRCC_IER); - - spin_unlock(&self->irport->lock); - return IRQ_HANDLED; -} - -#if 0 /* unused */ -/* - * Function ircc_is_receiving (self) - * - * Return TRUE is we are currently receiving a frame - * - */ -static int ircc_is_receiving(struct ircc_cb *self) -{ - int status = FALSE; - /* int iobase; */ - - IRDA_DEBUG(0, "%s\n", __FUNCTION__ ); - - ASSERT(self != NULL, return FALSE;); - - IRDA_DEBUG(0, "%s: dma count = %d\n", __FUNCTION__ , - get_dma_residue(self->io->dma)); - - status = (self->rx_buff.state != OUTSIDE_FRAME); - - return status; -} -#endif /* unused */ - -/* - * Function ircc_net_open (dev) - * - * Start the device - * - */ -static int ircc_net_open(struct net_device *dev) -{ - struct irport_cb *irport; - struct ircc_cb *self; - int iobase; - - IRDA_DEBUG(0, "%s\n", __FUNCTION__ ); - - ASSERT(dev != NULL, return -1;); - irport = (struct irport_cb *) dev->priv; - self = (struct ircc_cb *) irport->priv; - - ASSERT(self != NULL, return 0;); - - iobase = self->io->fir_base; - - irport_net_open(dev); /* irport allocates the irq */ - - /* - * Always allocate the DMA channel after the IRQ, - * and clean up on failure. - */ - if (request_dma(self->io->dma, dev->name)) { - irport_net_close(dev); - - WARNING("%s(), unable to allocate DMA=%d\n", __FUNCTION__, self->io->dma); - return -EAGAIN; - } - - return 0; -} - -/* - * Function ircc_net_close (dev) - * - * Stop the device - * - */ -static int ircc_net_close(struct net_device *dev) -{ - struct irport_cb *irport; - struct ircc_cb *self; - int iobase; - - IRDA_DEBUG(0, "%s()\n", __FUNCTION__); - - ASSERT(dev != NULL, return -1;); - irport = (struct irport_cb *) dev->priv; - self = (struct ircc_cb *) irport->priv; - - ASSERT(self != NULL, return 0;); - - iobase = self->io->fir_base; - - irport_net_close(dev); - - disable_dma(self->io->dma); - - free_dma(self->io->dma); - - return 0; -} - -static void ircc_suspend(struct ircc_cb *self) -{ - MESSAGE("%s, Suspending\n", driver_name); - - if (self->io->suspended) - return; - - ircc_net_close(self->netdev); - - self->io->suspended = 1; -} - -static void ircc_wakeup(struct ircc_cb *self) -{ - if (!self->io->suspended) - return; - - /* The code was doing a "cli()" here, but this can't be right. - * If you need protection, do it in net_open with a spinlock - * or give a good reason. - Jean II */ - - ircc_net_open(self->netdev); - - MESSAGE("%s, Waking up\n", driver_name); -} - -static int ircc_pmproc(struct pm_dev *dev, pm_request_t rqst, void *data) -{ - struct ircc_cb *self = (struct ircc_cb*) dev->data; - if (self) { - switch (rqst) { - case PM_SUSPEND: - ircc_suspend(self); - break; - case PM_RESUME: - ircc_wakeup(self); - break; - } - } - return 0; -} - -/* - * Function ircc_close (self) - * - * Close driver instance - * - */ -static int __exit ircc_close(struct ircc_cb *self) -{ - int iobase; - - IRDA_DEBUG(0, "%s\n", __FUNCTION__ ); - - ASSERT(self != NULL, return -1;); - - iobase = self->irport->io.fir_base; - - if (self->pmdev) - pm_unregister(self->pmdev); - - /* This will destroy irport */ - irport_close(self->irport); - - /* Stop interrupts */ - register_bank(iobase, 0); - outb(0, iobase+IRCC_IER); - outb(IRCC_MASTER_RESET, iobase+IRCC_MASTER); - outb(0x00, iobase+IRCC_MASTER); -#if 0 - /* Reset to SIR mode */ - register_bank(iobase, 1); - outb(IRCC_CFGA_IRDA_SIR_A|IRCC_CFGA_TX_POLARITY, iobase+IRCC_SCE_CFGA); - outb(IRCC_CFGB_IR, iobase+IRCC_SCE_CFGB); -#endif - - /* Release the PORT that this driver is using */ - IRDA_DEBUG(0, "%s(), releasing 0x%03x\n", __FUNCTION__ , iobase); - - release_region(iobase, CHIP_IO_EXTENT); - - if (self->tx_buff.head) - kfree(self->tx_buff.head); - - if (self->rx_buff.head) - kfree(self->rx_buff.head); - - kfree(self); - - return 0; -} - -static int __init smc_init(void) -{ - return ircc_init(); -} - -void __exit smc_cleanup(void) -{ - int i; - - IRDA_DEBUG(0, "%s\n", __FUNCTION__ ); - - for (i=0; i < 2; i++) { - if (dev_self[i]) - ircc_close(dev_self[i]); - } -} - -module_init(smc_init); -module_exit(smc_cleanup); - -MODULE_AUTHOR("Thomas Davis "); -MODULE_DESCRIPTION("SMC IrCC controller driver"); -MODULE_LICENSE("GPL"); - -MODULE_PARM(ircc_dma, "1i"); -MODULE_PARM_DESC(ircc_dma, "DMA channel"); -MODULE_PARM(ircc_irq, "1i"); -MODULE_PARM_DESC(ircc_irq, "IRQ line"); -MODULE_PARM(ircc_fir, "1-4i"); -MODULE_PARM_DESC(ircc_fir, "FIR Base Address"); -MODULE_PARM(ircc_sir, "1-4i"); -MODULE_PARM_DESC(ircc_sir, "SIR Base Address"); -MODULE_PARM(ircc_cfg, "1-4i"); -MODULE_PARM_DESC(ircc_cfg, "Configuration register base address"); diff -prauN linux-2.6.0-test5/drivers/net/irda/toshoboe.c wli-2.6.0-test5-bk12-25/drivers/net/irda/toshoboe.c --- linux-2.6.0-test5/drivers/net/irda/toshoboe.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/irda/toshoboe.c 1969-12-31 16:00:00.000000000 -0800 @@ -1,957 +0,0 @@ -/********************************************************************* - * - * Filename: toshoboe.c - * Version: 0.1 - * Description: Driver for the Toshiba OBOE (or type-O or 700 or 701) - * FIR Chipset. - * Status: Experimental. - * Author: James McKenzie - * Created at: Sat May 8 12:35:27 1999 - * Modified: Paul Bristow - * Modified: Mon Nov 11 19:10:05 1999 - * - * Copyright (c) 1999-2000 James McKenzie, All Rights Reserved. - * - * 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 of - * the License, or (at your option) any later version. - * - * Neither James McKenzie nor Cambridge University admit liability nor - * provide warranty for any of this software. This material is - * provided "AS-IS" and at no charge. - * - * Applicable Models : Libretto 100CT. and many more - * Toshiba refers to this chip as the type-O IR port. - * - ********************************************************************/ - -/* This driver is experimental, I have only three ir devices */ -/* an olivetti notebook which doesn't have FIR, a toshiba libretto, and */ -/* an hp printer, this works fine at 4MBPS with my HP printer */ - -static char *rcsid = "$Id: toshoboe.c,v 1.91 1999/06/29 14:21:06 root Exp $"; - -/* Define this to have only one frame in the XMIT or RECV queue */ -/* Toshiba's drivers do this, but it disables back to back tansfers */ -/* I think that the chip may have some problems certainly, I have */ -/* seen it jump over tasks in the taskfile->xmit with this turned on */ -#define ONETASK - -/* To adjust the number of tasks in use edit toshoboe.h */ - -/* Define this to enable FIR and MIR support */ -#define ENABLE_FAST - -/* Size of IO window */ -#define CHIP_IO_EXTENT 0x1f - -/* Transmit and receive buffer sizes, adjust at your peril */ -#define RX_BUF_SZ 4196 -#define TX_BUF_SZ 4196 - -/* No user servicable parts below here */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include -#include -#include - -#include - -#include - -#define PCI_DEVICE_ID_FIR701b 0x0d01 - -static struct pci_device_id toshoboe_pci_tbl[] = { - { PCI_VENDOR_ID_TOSHIBA, PCI_DEVICE_ID_FIR701, PCI_ANY_ID, PCI_ANY_ID, }, - { PCI_VENDOR_ID_TOSHIBA, PCI_DEVICE_ID_FIR701b, PCI_ANY_ID, PCI_ANY_ID, }, - { } /* Terminating entry */ -}; -MODULE_DEVICE_TABLE(pci, toshoboe_pci_tbl); - -static const char *driver_name = "toshoboe"; - -static int max_baud = 4000000; - -/* Shutdown the chip and point the taskfile reg somewhere else */ -static void -toshoboe_stopchip (struct toshoboe_cb *self) -{ - IRDA_DEBUG (4, "%s()\n", __FUNCTION__ ); - - outb_p (0x0e, OBOE_REG_11); - - outb_p (0x00, OBOE_RST); - outb_p (0x3f, OBOE_TFP2); /*Write the taskfile address */ - outb_p (0xff, OBOE_TFP1); - outb_p (0xff, OBOE_TFP0); - outb_p (0x0f, OBOE_REG_1B); - outb_p (0xff, OBOE_REG_1A); - outb_p (0x00, OBOE_ISR); /*FIXME: should i do this to disbale ints */ - outb_p (0x80, OBOE_RST); - outb_p (0xe, OBOE_LOCK); - -} - -/*Set the baud rate */ -static void -toshoboe_setbaud (struct toshoboe_cb *self, int baud) -{ - unsigned long flags; - IRDA_DEBUG (4, "%s()\n", __FUNCTION__ ); - - printk (KERN_WARNING "ToshOboe: setting baud to %d\n", baud); - - save_flags (flags); - cli (); - switch (baud) - { - case 2400: - outb_p (OBOE_PMDL_SIR, OBOE_PMDL); - outb_p (OBOE_SMDL_SIR, OBOE_SMDL); - outb_p (0xbf, OBOE_UDIV); - break; - case 4800: - outb_p (OBOE_PMDL_SIR, OBOE_PMDL); - outb_p (OBOE_SMDL_SIR, OBOE_SMDL); - outb_p (0x5f, OBOE_UDIV); - break; - case 9600: - outb_p (OBOE_PMDL_SIR, OBOE_PMDL); - outb_p (OBOE_SMDL_SIR, OBOE_SMDL); - outb_p (0x2f, OBOE_UDIV); - break; - case 19200: - outb_p (OBOE_PMDL_SIR, OBOE_PMDL); - outb_p (OBOE_SMDL_SIR, OBOE_SMDL); - outb_p (0x17, OBOE_UDIV); - break; - case 38400: - outb_p (OBOE_PMDL_SIR, OBOE_PMDL); - outb_p (OBOE_SMDL_SIR, OBOE_SMDL); - outb_p (0xb, OBOE_UDIV); - break; - case 57600: - outb_p (OBOE_PMDL_SIR, OBOE_PMDL); - outb_p (OBOE_SMDL_SIR, OBOE_SMDL); - outb_p (0x7, OBOE_UDIV); - break; - case 115200: - outb_p (OBOE_PMDL_SIR, OBOE_PMDL); - outb_p (OBOE_SMDL_SIR, OBOE_SMDL); - outb_p (0x3, OBOE_UDIV); - break; - case 1152000: - outb_p (OBOE_PMDL_MIR, OBOE_PMDL); - outb_p (OBOE_SMDL_MIR, OBOE_SMDL); - outb_p (0x1, OBOE_UDIV); - break; - case 4000000: - outb_p (OBOE_PMDL_FIR, OBOE_PMDL); - outb_p (OBOE_SMDL_FIR, OBOE_SMDL); - outb_p (0x0, OBOE_UDIV); - break; - } - - restore_flags (flags); - - outb_p (0x00, OBOE_RST); - outb_p (0x80, OBOE_RST); - outb_p (0x01, OBOE_REG_9); - - self->io.speed = baud; -} - -/* Wake the chip up and get it looking at the taskfile */ -static void -toshoboe_startchip (struct toshoboe_cb *self) -{ - __u32 physaddr; - - IRDA_DEBUG (4, "%s()\n", __FUNCTION__ ); - - - outb_p (0, OBOE_LOCK); - outb_p (0, OBOE_RST); - outb_p (OBOE_NTR_VAL, OBOE_NTR); - outb_p (0xf0, OBOE_REG_D); - outb_p (0xff, OBOE_ISR); - outb_p (0x0f, OBOE_REG_1B); - outb_p (0xff, OBOE_REG_1A); - - - physaddr = virt_to_bus (self->taskfile); - - outb_p ((physaddr >> 0x0a) & 0xff, OBOE_TFP0); - outb_p ((physaddr >> 0x12) & 0xff, OBOE_TFP1); - outb_p ((physaddr >> 0x1a) & 0x3f, OBOE_TFP2); - - outb_p (0x0e, OBOE_REG_11); - outb_p (0x80, OBOE_RST); - - toshoboe_setbaud (self, 9600); - -} - -/*Let the chip look at memory */ -static void -toshoboe_enablebm (struct toshoboe_cb *self) -{ - IRDA_DEBUG (4, "%s()\n", __FUNCTION__ ); - pci_set_master (self->pdev); -} - -/*Don't let the chip look at memory */ -static void -toshoboe_disablebm (struct toshoboe_cb *self) -{ - __u8 command; - IRDA_DEBUG (4, "%s()\n", __FUNCTION__ ); - - pci_read_config_byte (self->pdev, PCI_COMMAND, &command); - command &= ~PCI_COMMAND_MASTER; - pci_write_config_byte (self->pdev, PCI_COMMAND, command); - -} - -/*setup the taskfile */ -static void -toshoboe_initbuffs (struct toshoboe_cb *self) -{ - int i; - unsigned long flags; - - IRDA_DEBUG (4, "%s()\n", __FUNCTION__ ); - - save_flags (flags); - cli (); - - for (i = 0; i < TX_SLOTS; ++i) - { - self->taskfile->xmit[i].len = 0; - self->taskfile->xmit[i].control = 0x00; - self->taskfile->xmit[i].buffer = virt_to_bus (self->xmit_bufs[i]); - } - - for (i = 0; i < RX_SLOTS; ++i) - { - self->taskfile->recv[i].len = 0; - self->taskfile->recv[i].control = 0x83; - self->taskfile->recv[i].buffer = virt_to_bus (self->recv_bufs[i]); - } - - restore_flags (flags); -} - -/*Transmit something */ -static int -toshoboe_hard_xmit (struct sk_buff *skb, struct net_device *dev) -{ - struct toshoboe_cb *self; - __s32 speed; - int mtt, len; - - self = (struct toshoboe_cb *) dev->priv; - - ASSERT (self != NULL, return 0; - ); - - /* Check if we need to change the speed */ - speed = irda_get_next_speed(skb); - if ((speed != self->io.speed) && (speed != -1)) { - /* Check for empty frame */ - if (!skb->len) { - toshoboe_setbaud(self, speed); - dev_kfree_skb(skb); - return 0; - } else - self->new_speed = speed; - } - - netif_stop_queue(dev); - - if (self->stopped) { - dev_kfree_skb(skb); - return 0; - } - -#ifdef ONETASK - if (self->txpending) - return -EBUSY; - - self->txs = inb_p (OBOE_XMTT) - OBOE_XMTT_OFFSET; - - self->txs &= 0x3f; - -#endif - - if (self->taskfile->xmit[self->txs].control) - return -EBUSY; - - - if (inb_p (OBOE_RST) & OBOE_RST_WRAP) - { - len = async_wrap_skb (skb, self->xmit_bufs[self->txs], TX_BUF_SZ); - } - else - { - len = skb->len; - memcpy (self->xmit_bufs[self->txs], skb->data, len); - } - self->taskfile->xmit[self->txs].len = len & 0x0fff; - - - - outb_p (0, OBOE_RST); - outb_p (0x1e, OBOE_REG_11); - - self->taskfile->xmit[self->txs].control = 0x84; - - mtt = irda_get_mtt (skb); - if (mtt) - udelay (mtt); - - self->txpending++; - - /*FIXME: ask about busy,media_busy stuff, for the moment */ - /*busy means can't queue any more */ -#ifndef ONETASK - if (self->txpending != TX_SLOTS) - { - netif_wake_queue(dev); - } -#endif - - outb_p (0x80, OBOE_RST); - outb_p (1, OBOE_REG_9); - - self->txs++; - self->txs %= TX_SLOTS; - - dev_kfree_skb (skb); - - return 0; -} - -/*interrupt handler */ -static irqreturn_t -toshoboe_interrupt (int irq, void *dev_id, struct pt_regs *regs) -{ - struct toshoboe_cb *self = (struct toshoboe_cb *) dev_id; - __u8 irqstat; - struct sk_buff *skb; - - if (self == NULL) - { - printk (KERN_WARNING "%s: irq %d for unknown device.\n", - driver_name, irq); - return IRQ_NONE; - } - - IRDA_DEBUG (4, "%s()\n", __FUNCTION__ ); - - irqstat = inb_p (OBOE_ISR); - -/* woz it us */ - if (!(irqstat & 0xf8)) - return IRQ_NONE; - - outb_p (irqstat, OBOE_ISR); /*Acknologede it */ - - -/* Txdone */ - if (irqstat & OBOE_ISR_TXDONE) - { - self->txpending--; - - self->stats.tx_packets++; - - if (self->new_speed) { - toshoboe_setbaud(self, self->new_speed); - - self->new_speed = 0; - } - /* Tell network layer that we want more frames */ - netif_wake_queue(self->netdev); - } - - if (irqstat & OBOE_ISR_RXDONE) - { - -#ifdef ONETASK - self->rxs = inb_p (OBOE_RCVT); - self->rxs += (RX_SLOTS - 1); - self->rxs %= RX_SLOTS; -#else - while (self->taskfile->recv[self->rxs].control == 0) -#endif - { - int len = self->taskfile->recv[self->rxs].len; - - if (len > 2) - len -= 2; - - skb = dev_alloc_skb (len + 1); - if (skb) - { - skb_reserve (skb, 1); - - skb_put (skb, len); - memcpy (skb->data, self->recv_bufs[self->rxs], len); - - self->stats.rx_packets++; - skb->dev = self->netdev; - skb->mac.raw = skb->data; - skb->protocol = htons (ETH_P_IRDA); - } - else - { - printk (KERN_INFO - "%s(), memory squeeze, dropping frame.\n", __FUNCTION__); - } - - self->taskfile->recv[self->rxs].control = 0x83; - self->taskfile->recv[self->rxs].len = 0x0; - - self->rxs++; - self->rxs %= RX_SLOTS; - - if (skb) { - netif_rx (skb); - self->netdev->last_rx = jiffies; - } - - } - - } - - if (irqstat & OBOE_ISR_20) - { - printk (KERN_WARNING "Oboe_irq: 20\n"); - } - if (irqstat & OBOE_ISR_10) - { - printk (KERN_WARNING "Oboe_irq: 10\n"); - } - if (irqstat & 0x8) - { - /*FIXME: I think this is a TX or RX error of some sort */ - - self->stats.tx_errors++; - self->stats.rx_errors++; - - } - return IRQ_HANDLED; -} - -static int -toshoboe_net_init (struct net_device *dev) -{ - IRDA_DEBUG (4, "%s()\n", __FUNCTION__ ); - - /* Setup to be a normal IrDA network device driver */ - irda_device_setup (dev); - - /* Insert overrides below this line! */ - return 0; -} - - -static void -toshoboe_initptrs (struct toshoboe_cb *self) -{ - - unsigned long flags; - save_flags (flags); - cli (); - - /*FIXME: need to test this carefully to check which one */ - /*of the two possible startup logics the chip uses */ - /*although it won't make any difference if no-one xmits durining init */ - /*and none what soever if using ONETASK */ - - self->rxs = inb_p (OBOE_RCVT); - self->txs = inb_p (OBOE_XMTT) - OBOE_XMTT_OFFSET; - -#if 0 - self->rxs = 0; - self->txs = 0; -#endif -#if 0 - self->rxs = RX_SLOTS - 1; - self->txs = 0; -#endif - - - self->txpending = 0; - - restore_flags (flags); - -} - - -static int -toshoboe_net_open (struct net_device *dev) -{ - struct toshoboe_cb *self; - char hwname[32]; - - IRDA_DEBUG (4, "%s()\n", __FUNCTION__ ); - - ASSERT (dev != NULL, return -1; - ); - self = (struct toshoboe_cb *) dev->priv; - - ASSERT (self != NULL, return 0; - ); - - if (self->stopped) - return 0; - - if (request_irq (self->io.irq, toshoboe_interrupt, - SA_SHIRQ | SA_INTERRUPT, dev->name, (void *) self)) - { - - return -EAGAIN; - } - - toshoboe_initbuffs (self); - toshoboe_enablebm (self); - toshoboe_startchip (self); - toshoboe_initptrs (self); - - /* Ready to play! */ - netif_start_queue(dev); - /* Give self a hardware name */ - sprintf(hwname, "Toshiba-FIR @ 0x%03x", self->base); - /* - * Open new IrLAP layer instance, now that everything should be - * initialized properly - */ - self->irlap = irlap_open(dev, &self->qos, hwname); - - self->open = 1; - - MOD_INC_USE_COUNT; - - return 0; - -} - -static int -toshoboe_net_close (struct net_device *dev) -{ - struct toshoboe_cb *self; - - IRDA_DEBUG (4, "%s()\n", __FUNCTION__ ); - - ASSERT (dev != NULL, return -1; - ); - self = (struct toshoboe_cb *) dev->priv; - - /* Stop device */ - netif_stop_queue(dev); - - /* Stop and remove instance of IrLAP */ - if (self->irlap) - irlap_close(self->irlap); - self->irlap = NULL; - - self->open = 0; - - free_irq (self->io.irq, (void *) self); - - if (!self->stopped) - { - toshoboe_stopchip (self); - toshoboe_disablebm (self); - } - - MOD_DEC_USE_COUNT; - - return 0; - -} - -/* - * Function toshoboe_net_ioctl (dev, rq, cmd) - * - * Process IOCTL commands for this device - * - */ -static int toshoboe_net_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) -{ - struct if_irda_req *irq = (struct if_irda_req *) rq; - struct toshoboe_cb *self; - unsigned long flags; - int ret = 0; - - ASSERT(dev != NULL, return -1;); - - self = dev->priv; - - ASSERT(self != NULL, return -1;); - - IRDA_DEBUG(2, "%s(), %s, (cmd=0x%X)\n", __FUNCTION__ , dev->name, cmd); - - /* Disable interrupts & save flags */ - save_flags(flags); - cli(); - switch (cmd) { - case SIOCSBANDWIDTH: /* Set bandwidth */ - if (!capable(CAP_NET_ADMIN)) { - ret = -EPERM; - goto out; - } - /* toshoboe_setbaud(self, irq->ifr_baudrate); */ - /* Just change speed once - inserted by Paul Bristow */ - self->new_speed = irq->ifr_baudrate; - break; - case SIOCSMEDIABUSY: /* Set media busy */ - if (!capable(CAP_NET_ADMIN)) { - ret = -EPERM; - goto out; - } - irda_device_set_media_busy(self->netdev, TRUE); - break; - case SIOCGRECEIVING: /* Check if we are receiving right now */ - irq->ifr_receiving = 0; /* Can't tell */ - break; - default: - ret = -EOPNOTSUPP; - } -out: - restore_flags(flags); - return ret; -} - -MODULE_DESCRIPTION("Toshiba OBOE IrDA Device Driver"); -MODULE_AUTHOR("James McKenzie "); -MODULE_LICENSE("GPL"); - -MODULE_PARM (max_baud, "i"); -MODULE_PARM_DESC(max_baus, "Maximum baud rate"); - -static void -toshoboe_remove (struct pci_dev *pci_dev) -{ - int i; - struct toshoboe_cb *self = (struct toshoboe_cb*)pci_get_drvdata(pci_dev); - - IRDA_DEBUG (4, "%s()\n", __FUNCTION__ ); - - ASSERT (self != NULL, return; - ); - - if (!self->stopped) - { - toshoboe_stopchip (self); - toshoboe_disablebm (self); - } - - release_region (self->io.sir_base, self->io.sir_ext); - - - for (i = 0; i < TX_SLOTS; ++i) - { - kfree (self->xmit_bufs[i]); - self->xmit_bufs[i] = NULL; - } - - for (i = 0; i < RX_SLOTS; ++i) - { - kfree (self->recv_bufs[i]); - self->recv_bufs[i] = NULL; - } - - if (self->netdev) - unregister_netdev(self->netdev); - - kfree (self->taskfilebuf); - self->taskfilebuf = NULL; - self->taskfile = NULL; - - return; - -} - -static int -toshoboe_probe (struct pci_dev *pci_dev, const struct pci_device_id *pdid) -{ - struct toshoboe_cb *self; - struct net_device *dev; - int i = 0; - int ok = 0; - int err; - - IRDA_DEBUG (4, "%s()\n", __FUNCTION__ ); - - if ((err=pci_enable_device(pci_dev))) - return err; - - self = kmalloc (sizeof (struct toshoboe_cb), GFP_KERNEL); - - if (self == NULL) - { - printk (KERN_ERR "IrDA: Can't allocate memory for " - "IrDA control block!\n"); - return -ENOMEM; - } - - memset (self, 0, sizeof (struct toshoboe_cb)); - - self->open = 0; - self->stopped = 0; - self->pdev = pci_dev; - self->base = pci_resource_start(pci_dev,0); - - self->io.sir_base = self->base; - self->io.irq = pci_dev->irq; - self->io.sir_ext = CHIP_IO_EXTENT; - self->io.speed = 9600; - - /* Lock the port that we need */ - if (NULL==request_region (self->io.sir_base, self->io.sir_ext, driver_name)) - { - IRDA_DEBUG (0, "%s(), can't get iobase of 0x%03x\n", __FUNCTION__ , - self->io.sir_base); - - err = -EBUSY; - goto freeself; - } - - irda_init_max_qos_capabilies (&self->qos); - self->qos.baud_rate.bits = 0; - - if (max_baud >= 2400) - self->qos.baud_rate.bits |= IR_2400; - /*if (max_baud>=4800) idev->qos.baud_rate.bits|=IR_4800; */ - if (max_baud >= 9600) - self->qos.baud_rate.bits |= IR_9600; - if (max_baud >= 19200) - self->qos.baud_rate.bits |= IR_19200; - if (max_baud >= 115200) - self->qos.baud_rate.bits |= IR_115200; -#ifdef ENABLE_FAST - if (max_baud >= 576000) - self->qos.baud_rate.bits |= IR_576000; - if (max_baud >= 1152000) - self->qos.baud_rate.bits |= IR_1152000; - if (max_baud >= 4000000) - self->qos.baud_rate.bits |= (IR_4000000 << 8); -#endif - - - self->qos.min_turn_time.bits = 0xff; /*FIXME: what does this do? */ - - irda_qos_bits_to_value (&self->qos); - - self->flags = IFF_SIR | IFF_DMA | IFF_PIO; - -#ifdef ENABLE_FAST - if (max_baud >= 576000) - self->flags |= IFF_FIR; -#endif - - /* Now setup the endless buffers we need */ - - self->txs = 0; - self->rxs = 0; - - self->taskfilebuf = kmalloc (OBOE_TASK_BUF_LEN, GFP_KERNEL); - if (!self->taskfilebuf) - { - printk (KERN_ERR "toshoboe: kmalloc for DMA failed()\n"); - err = -ENOMEM; - goto freeregion; - } - - - memset (self->taskfilebuf, 0, OBOE_TASK_BUF_LEN); - - /*We need to align the taskfile on a taskfile size boundary */ - { - __u32 addr; - - addr = (__u32) self->taskfilebuf; - addr &= ~(sizeof (struct OboeTaskFile) - 1); - addr += sizeof (struct OboeTaskFile); - - self->taskfile = (struct OboeTaskFile *) addr; - } - - for (i = 0; i < TX_SLOTS; ++i) - { - self->xmit_bufs[i] = kmalloc (TX_BUF_SZ, GFP_KERNEL | GFP_DMA); - if (self->xmit_bufs[i]) - ok++; - } - - for (i = 0; i < RX_SLOTS; ++i) - { - self->recv_bufs[i] = kmalloc (TX_BUF_SZ, GFP_KERNEL | GFP_DMA); - if (self->recv_bufs[i]) - ok++; - } - - if (ok != RX_SLOTS + TX_SLOTS) - { - printk (KERN_ERR "toshoboe: kmalloc for buffers failed()\n"); - err = -ENOMEM; - goto freebufs; - - } - - - if (!(dev = dev_alloc("irda%d", &err))) { - ERROR("%s(), dev_alloc() failed!\n", __FUNCTION__); - err = -ENOMEM; - goto freebufs; - } - dev->priv = (void *) self; - self->netdev = dev; - - MESSAGE("IrDA: Registered device %s\n", dev->name); - - dev->init = toshoboe_net_init; - dev->hard_start_xmit = toshoboe_hard_xmit; - dev->open = toshoboe_net_open; - dev->stop = toshoboe_net_close; - dev->do_ioctl = toshoboe_net_ioctl; - - rtnl_lock(); - err = register_netdevice(dev); - rtnl_unlock(); - if (err) { - ERROR("%s(), register_netdev() failed!\n", __FUNCTION__); - /* XXX there is not freeing for dev? */ - goto freebufs; - } - pci_set_drvdata(pci_dev,self); - - printk (KERN_WARNING "ToshOboe: Using "); -#ifdef ONETASK - printk ("single"); -#else - printk ("multiple"); -#endif - printk (" tasks, version %s\n", rcsid); - - return (0); -freebufs: - for (i = 0; i < TX_SLOTS; ++i) - if (self->xmit_bufs[i]) - kfree (self->xmit_bufs[i]); - for (i = 0; i < RX_SLOTS; ++i) - if (self->recv_bufs[i]) - kfree (self->recv_bufs[i]); - kfree(self->taskfilebuf); -freeregion: - release_region (self->io.sir_base, self->io.sir_ext); -freeself: - kfree (self); - return err; -} - -static int -toshoboe_suspend (struct pci_dev *pci_dev, u32 crap) -{ - int i = 10; - struct toshoboe_cb *self = (struct toshoboe_cb*)pci_get_drvdata(pci_dev); - - printk (KERN_WARNING "ToshOboe: suspending\n"); - - if (!self || self->stopped) - return 0; - - self->stopped = 1; - - if (!self->open) - return 0; - -/*FIXME: can't sleep here wait one second */ - - while ((i--) && (self->txpending)) - udelay (100); - - toshoboe_stopchip (self); - toshoboe_disablebm (self); - - self->txpending = 0; - return 0; -} - - -static int -toshoboe_resume (struct pci_dev *pci_dev) -{ - struct toshoboe_cb *self = (struct toshoboe_cb*)pci_get_drvdata(pci_dev); - unsigned long flags; - - if (!self) - return 0; - - if (!self->stopped) - return 0; - - if (!self->open) - { - self->stopped = 0; - return 0; - } - - save_flags (flags); - cli (); - - toshoboe_initbuffs (self); - toshoboe_enablebm (self); - toshoboe_startchip (self); - - toshoboe_setbaud (self, self->io.speed); - - toshoboe_initptrs (self); - - netif_wake_queue(self->netdev); - restore_flags (flags); - printk (KERN_WARNING "ToshOboe: waking up\n"); - return 0; -} - -static struct pci_driver toshoboe_pci_driver = { - .name = "toshoboe", - .id_table = toshoboe_pci_tbl, - .probe = toshoboe_probe, - .remove = toshoboe_remove, - .suspend = toshoboe_suspend, - .resume = toshoboe_resume -}; - -int __init -toshoboe_init (void) -{ - return pci_module_init(&toshoboe_pci_driver); -} - -void -toshoboe_cleanup (void) -{ - pci_unregister_driver(&toshoboe_pci_driver); -} - -module_init(toshoboe_init); -module_exit(toshoboe_cleanup); diff -prauN linux-2.6.0-test5/drivers/net/irda/via-ircc.c wli-2.6.0-test5-bk12-25/drivers/net/irda/via-ircc.c --- linux-2.6.0-test5/drivers/net/irda/via-ircc.c 2003-09-08 12:49:50.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/irda/via-ircc.c 2003-09-25 19:15:59.000000000 -0700 @@ -94,7 +94,6 @@ static irqreturn_t via_ircc_interrupt(in static int via_ircc_is_receiving(struct via_ircc_cb *self); static int via_ircc_read_dongle_id(int iobase); -static int via_ircc_net_init(struct net_device *dev); static int via_ircc_net_open(struct net_device *dev); static int via_ircc_net_close(struct net_device *dev); static int via_ircc_net_ioctl(struct net_device *dev, struct ifreq *rq, @@ -107,7 +106,7 @@ static int RxTimerHandler(struct via_irc void hwreset(struct via_ircc_cb *self); static int via_ircc_dma_xmit(struct via_ircc_cb *self, u16 iobase); static int upload_rxdata(struct via_ircc_cb *self, int iobase); -static int __init via_init_one (struct pci_dev *pcidev, const struct pci_device_id *id); +static int __devinit via_init_one (struct pci_dev *pcidev, const struct pci_device_id *id); static void __exit via_remove_one (struct pci_dev *pdev); /* Should use udelay() instead, even if we are x86 only - Jean II */ @@ -121,7 +120,7 @@ void iodelay(int udelay) } } -static struct pci_device_id via_pci_tbl[] __initdata = { +static struct pci_device_id via_pci_tbl[] = { { PCI_VENDOR_ID_VIA, DeviceID1, PCI_ANY_ID, PCI_ANY_ID,0,0,0 }, { PCI_VENDOR_ID_VIA, DeviceID2, PCI_ANY_ID, PCI_ANY_ID,0,0,1 }, { PCI_VENDOR_ID_VIA, DeviceID3, PCI_ANY_ID, PCI_ANY_ID,0,0,2 }, @@ -168,7 +167,7 @@ int __init via_ircc_init(void) } -static int __init via_init_one (struct pci_dev *pcidev, const struct pci_device_id *id) +static int __devinit via_init_one (struct pci_dev *pcidev, const struct pci_device_id *id) { int rc; u8 temp,oldPCI_40,oldPCI_44,bTmp,bTmp1; @@ -326,22 +325,23 @@ static void __exit via_ircc_cleanup(void * Open driver instance * */ -static __init int via_ircc_open(int i, chipio_t * info, unsigned int id) +static __devinit int via_ircc_open(int i, chipio_t * info, unsigned int id) { struct net_device *dev; struct via_ircc_cb *self; - int ret; int err; if ((via_ircc_setup(info, id)) == -1) return -1; /* Allocate new instance of the driver */ - self = kmalloc(sizeof(struct via_ircc_cb), GFP_KERNEL); - if (self == NULL) { + dev = alloc_netdev(sizeof(struct via_ircc_cb), "irda%d", + irda_device_setup); + if (dev == NULL) return -ENOMEM; - } - memset(self, 0, sizeof(struct via_ircc_cb)); + + self = dev->priv; + self->netdev = dev; spin_lock_init(&self->lock); /* Need to store self somewhere */ @@ -360,14 +360,12 @@ static __init int via_ircc_open(int i, c self->RxDataReady = 0; /* Reserve the ioports that we need */ - ret = check_region(self->io.fir_base, self->io.fir_ext); - if (ret < 0) { + if (!request_region(self->io.fir_base, self->io.fir_ext, driver_name)) { // WARNING(__FUNCTION__ "(), can't get iobase of 0x%03x\n",self->io.fir_base); - dev_self[i] = NULL; - kfree(self); - return -ENODEV; + err = -ENODEV; + goto err_out1; } - request_region(self->io.fir_base, self->io.fir_ext, driver_name); + /* Initialize QoS for this device */ irda_init_max_qos_capabilies(&self->qos); /* The only value we must override it the baudrate */ @@ -391,17 +389,16 @@ static __init int via_ircc_open(int i, c self->rx_buff.head = (__u8 *) kmalloc(self->rx_buff.truesize, GFP_KERNEL | GFP_DMA); if (self->rx_buff.head == NULL) { - kfree(self); - return -ENOMEM; + err = -ENOMEM; + goto err_out2; } memset(self->rx_buff.head, 0, self->rx_buff.truesize); self->tx_buff.head = (__u8 *) kmalloc(self->tx_buff.truesize, GFP_KERNEL | GFP_DMA); if (self->tx_buff.head == NULL) { - kfree(self->rx_buff.head); - kfree(self); - return -ENOMEM; + err = -ENOMEM; + goto err_out3; } memset(self->tx_buff.head, 0, self->tx_buff.truesize); @@ -414,30 +411,20 @@ static __init int via_ircc_open(int i, c self->tx_fifo.len = self->tx_fifo.ptr = self->tx_fifo.free = 0; self->tx_fifo.tail = self->tx_buff.head; - if (!(dev = dev_alloc("irda%d", &err))) { - kfree(self->tx_buff.head); - kfree(self->rx_buff.head); - kfree(self); - return -ENOMEM; - } - - dev->priv = (void *) self; - self->netdev = dev; + /* Keep track of module usage */ + SET_MODULE_OWNER(dev); /* Override the network functions we need to use */ - dev->init = via_ircc_net_init; dev->hard_start_xmit = via_ircc_hard_xmit_sir; dev->open = via_ircc_net_open; dev->stop = via_ircc_net_close; dev->do_ioctl = via_ircc_net_ioctl; dev->get_stats = via_ircc_net_get_stats; - rtnl_lock(); - err = register_netdevice(dev); - rtnl_unlock(); - if (err) { - return -1; - } + err = register_netdev(dev); + if (err) + goto err_out4; + MESSAGE("IrDA: Registered device %s\n", dev->name); /* Check if user has supplied the dongle id or not */ @@ -448,6 +435,16 @@ static __init int via_ircc_open(int i, c self->io.dongle_id); return 0; + err_out4: + kfree(self->tx_buff.head); + err_out3: + kfree(self->rx_buff.head); + err_out2: + release_region(self->io.fir_base, self->io.fir_ext); + err_out1: + free_netdev(dev); + dev_self[i] = NULL; + return err; } /* @@ -468,11 +465,7 @@ static int __exit via_ircc_close(struct ResetChip(iobase, 5); //hardware reset. /* Remove netdevice */ - if (self->netdev) { - rtnl_lock(); - unregister_netdevice(self->netdev); - rtnl_unlock(); - } + unregister_netdev(self->netdev); /* Release the PORT that this driver is using */ IRDA_DEBUG(4, "%s(), Releasing Region %03x\n", @@ -483,7 +476,8 @@ static int __exit via_ircc_close(struct if (self->rx_buff.head) kfree(self->rx_buff.head); dev_self[self->index] = NULL; - kfree(self); + + free_netdev(self->netdev); return 0; } @@ -1456,26 +1450,6 @@ static int via_ircc_is_receiving(struct return status; } -/* - * Function via_ircc_net_init (dev) - * - * Initialize network device - * - */ -static int via_ircc_net_init(struct net_device *dev) -{ - IRDA_DEBUG(4, "%s()\n", __FUNCTION__); - - /* Keep track of module usage */ - SET_MODULE_OWNER(dev); - - /* Setup to be a normal IrDA network device driver */ - irda_device_setup(dev); - - /* Insert overrides below this line! */ - - return 0; -} /* * Function via_ircc_net_open (dev) diff -prauN linux-2.6.0-test5/drivers/net/irda/w83977af_ir.c wli-2.6.0-test5-bk12-25/drivers/net/irda/w83977af_ir.c --- linux-2.6.0-test5/drivers/net/irda/w83977af_ir.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/irda/w83977af_ir.c 2003-09-25 19:15:59.000000000 -0700 @@ -99,7 +99,6 @@ static void w83977af_dma_write(struct w8 static void w83977af_change_speed(struct w83977af_ir *self, __u32 speed); static int w83977af_is_receiving(struct w83977af_ir *self); -static int w83977af_net_init(struct net_device *dev); static int w83977af_net_open(struct net_device *dev); static int w83977af_net_close(struct net_device *dev); static int w83977af_net_ioctl(struct net_device *dev, struct ifreq *rq, int cmd); @@ -171,14 +170,16 @@ int w83977af_open(int i, unsigned int io /* * Allocate new instance of the driver */ - self = kmalloc(sizeof(struct w83977af_ir), GFP_KERNEL); - if (self == NULL) { + dev = alloc_netdev(sizeof(struct w83977af_ir), "irda%d", + irda_device_setup); + if (dev == NULL) { printk( KERN_ERR "IrDA: Can't allocate memory for " "IrDA control block!\n"); err = -ENOMEM; goto err_out; } - memset(self, 0, sizeof(struct w83977af_ir)); + + self = dev->priv; spin_lock_init(&self->lock); @@ -230,29 +231,21 @@ int w83977af_open(int i, unsigned int io self->rx_buff.state = OUTSIDE_FRAME; self->tx_buff.data = self->tx_buff.head; self->rx_buff.data = self->rx_buff.head; - - if (!(dev = dev_alloc("irda%d", &err))) { - ERROR("%s(), dev_alloc() failed!\n", __FUNCTION__); - err = -ENOMEM; - goto err_out3; - } - dev->priv = (void *) self; self->netdev = dev; + /* Keep track of module usage */ + SET_MODULE_OWNER(dev); + /* Override the network functions we need to use */ - dev->init = w83977af_net_init; dev->hard_start_xmit = w83977af_hard_xmit; dev->open = w83977af_net_open; dev->stop = w83977af_net_close; dev->do_ioctl = w83977af_net_ioctl; dev->get_stats = w83977af_net_get_stats; - rtnl_lock(); - err = register_netdevice(dev); - rtnl_unlock(); + err = register_netdev(dev); if (err) { ERROR("%s(), register_netdevice() failed!\n", __FUNCTION__); - err = -1; goto err_out3; } MESSAGE("IrDA: Registered device %s\n", dev->name); @@ -266,7 +259,7 @@ err_out3: err_out2: kfree(self->rx_buff.head); err_out1: - kfree(self); + free_netdev(dev); err_out: release_region(iobase, CHIP_IO_EXTENT); return err; @@ -299,8 +292,7 @@ static int w83977af_close(struct w83977a #endif /* CONFIG_USE_W977_PNP */ /* Remove netdevice */ - if (self->netdev) - unregister_netdev(self->netdev); + unregister_netdev(self->netdev); /* Release the PORT that this driver is using */ IRDA_DEBUG(0 , "%s(), Releasing Region %03x\n", @@ -313,7 +305,7 @@ static int w83977af_close(struct w83977a if (self->rx_buff.head) kfree(self->rx_buff.head); - kfree(self); + free_netdev(self->netdev); return 0; } @@ -1187,28 +1179,6 @@ static int w83977af_is_receiving(struct } /* - * Function w83977af_net_init (dev) - * - * - * - */ -static int w83977af_net_init(struct net_device *dev) -{ - IRDA_DEBUG(0, "%s()\n", __FUNCTION__ ); - - /* Keep track of module usage */ - SET_MODULE_OWNER(dev); - - /* Set up to be a normal IrDA network device driver */ - irda_device_setup(dev); - - /* Insert overrides below this line! */ - - return 0; -} - - -/* * Function w83977af_net_open (dev) * * Start the device diff -prauN linux-2.6.0-test5/drivers/net/lance.c wli-2.6.0-test5-bk12-25/drivers/net/lance.c --- linux-2.6.0-test5/drivers/net/lance.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/lance.c 2003-09-25 19:15:59.000000000 -0700 @@ -543,7 +543,7 @@ static int __init lance_probe1(struct ne if (dev->irq >= 2) printk(" assigned IRQ %d", dev->irq); else if (lance_version != 0) { /* 7990 boards need DMA detection first. */ - unsigned long irq_mask, delay; + unsigned long irq_mask; /* To auto-IRQ we enable the initialization-done and DMA error interrupts. For ISA boards we get a DMA error, but VLB and PCI @@ -553,8 +553,7 @@ static int __init lance_probe1(struct ne /* Trigger an initialization just for the interrupt. */ outw(0x0041, ioaddr+LANCE_DATA); - delay = jiffies + HZ/50; - while (time_before(jiffies, delay)) ; + mdelay(20); dev->irq = probe_irq_off(irq_mask); if (dev->irq) printk(", probed IRQ %d", dev->irq); @@ -621,13 +620,12 @@ static int __init lance_probe1(struct ne if (lance_version == 0 && dev->irq == 0) { /* We may auto-IRQ now that we have a DMA channel. */ /* Trigger an initialization just for the interrupt. */ - unsigned long irq_mask, delay; + unsigned long irq_mask; irq_mask = probe_irq_on(); outw(0x0041, ioaddr+LANCE_DATA); - delay = jiffies + HZ/25; - while (time_before(jiffies, delay)) ; + mdelay(40); dev->irq = probe_irq_off(irq_mask); if (dev->irq == 0) { printk(" Failed to detect the 7990 IRQ line.\n"); diff -prauN linux-2.6.0-test5/drivers/net/lne390.c wli-2.6.0-test5-bk12-25/drivers/net/lne390.c --- linux-2.6.0-test5/drivers/net/lne390.c 2003-09-08 12:50:28.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/lne390.c 2003-09-25 19:15:59.000000000 -0700 @@ -35,6 +35,7 @@ static const char *version = "lne390.c: Driver revision v0.99.1, 01/09/2000\n"; #include +#include #include #include #include diff -prauN linux-2.6.0-test5/drivers/net/mace.c wli-2.6.0-test5-bk12-25/drivers/net/mace.c --- linux-2.6.0-test5/drivers/net/mace.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/mace.c 2003-09-25 19:15:59.000000000 -0700 @@ -7,7 +7,6 @@ #include #include -#include #include #include #include diff -prauN linux-2.6.0-test5/drivers/net/ne2.c wli-2.6.0-test5-bk12-25/drivers/net/ne2.c --- linux-2.6.0-test5/drivers/net/ne2.c 2003-09-08 12:50:43.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/ne2.c 2003-09-25 19:15:59.000000000 -0700 @@ -60,7 +60,6 @@ static const char *version = "ne2.c:v0.91 Nov 16 1998 Wim Dumon \n"; #include -#include #include #include #include diff -prauN linux-2.6.0-test5/drivers/net/ne3210.c wli-2.6.0-test5-bk12-25/drivers/net/ne3210.c --- linux-2.6.0-test5/drivers/net/ne3210.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/ne3210.c 2003-09-25 19:15:59.000000000 -0700 @@ -29,6 +29,7 @@ static const char *version = "ne3210.c: Driver revision v0.03, 30/09/98\n"; #include +#include #include #include #include diff -prauN linux-2.6.0-test5/drivers/net/net_init.c wli-2.6.0-test5-bk12-25/drivers/net/net_init.c --- linux-2.6.0-test5/drivers/net/net_init.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/net_init.c 2003-09-25 19:15:59.000000000 -0700 @@ -381,7 +381,7 @@ void ether_setup(struct net_device *dev) dev->hard_header_len = ETH_HLEN; dev->mtu = 1500; /* eth_mtu */ dev->addr_len = ETH_ALEN; - dev->tx_queue_len = 100; /* Ethernet wants good queues */ + dev->tx_queue_len = 1000; /* Ethernet wants good queues */ memset(dev->broadcast,0xFF, ETH_ALEN); diff -prauN linux-2.6.0-test5/drivers/net/ni5010.c wli-2.6.0-test5-bk12-25/drivers/net/ni5010.c --- linux-2.6.0-test5/drivers/net/ni5010.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/ni5010.c 2003-09-25 19:15:59.000000000 -0700 @@ -255,14 +255,13 @@ static int __init ni5010_probe1(struct n if (dev->irq == 0xff) ; else if (dev->irq < 2) { - unsigned long irq_mask, delay; + unsigned long irq_mask; PRINTK2((KERN_DEBUG "%s: I/O #5 passed!\n", dev->name)); irq_mask = probe_irq_on(); trigger_irq(ioaddr); - delay = jiffies + HZ/50; - while (time_before(jiffies, delay)) ; + mdelay(20); dev->irq = probe_irq_off(irq_mask); PRINTK2((KERN_DEBUG "%s: I/O #6 passed!\n", dev->name)); diff -prauN linux-2.6.0-test5/drivers/net/ni52.c wli-2.6.0-test5-bk12-25/drivers/net/ni52.c --- linux-2.6.0-test5/drivers/net/ni52.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/ni52.c 2003-09-25 19:15:59.000000000 -0700 @@ -492,14 +492,13 @@ static int __init ni52_probe1(struct net if(dev->irq < 2) { - unsigned long irq_mask, delay; + unsigned long irq_mask; irq_mask = probe_irq_on(); ni_reset586(); ni_attn586(); - delay = jiffies + HZ/50; - while (time_before(jiffies, delay)) ; + mdelay(20); dev->irq = probe_irq_off(irq_mask); if(!dev->irq) { diff -prauN linux-2.6.0-test5/drivers/net/ni65.c wli-2.6.0-test5-bk12-25/drivers/net/ni65.c --- linux-2.6.0-test5/drivers/net/ni65.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/ni65.c 2003-09-25 19:15:59.000000000 -0700 @@ -72,7 +72,6 @@ #include #include #include -#include #include #include diff -prauN linux-2.6.0-test5/drivers/net/ns83820.c wli-2.6.0-test5-bk12-25/drivers/net/ns83820.c --- linux-2.6.0-test5/drivers/net/ns83820.c 2003-09-08 12:50:32.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/ns83820.c 2003-09-25 19:16:00.000000000 -0700 @@ -1833,13 +1833,13 @@ static int __devinit ns83820_init_one(st if (err) { printk(KERN_INFO "ns83820: unable to register irq %d\n", pci_dev->irq); - goto out_unmap; + goto out_disable; } err = register_netdev(&dev->net_dev); if (err) { printk(KERN_INFO "ns83820: unable to register netdev: %d\n", err); - goto out_unmap; + goto out_free_irq; } printk("%s: ns83820.c: 0x22c: %08x, subsystem: %04x:%04x\n", @@ -2025,9 +2025,11 @@ static int __devinit ns83820_init_one(st return 0; -out_unmap: - iounmap(dev->base); +out_free_irq: + free_irq(pci_dev->irq, dev); out_disable: + if (dev->base) + iounmap(dev->base); pci_free_consistent(pci_dev, 4 * DESC_SIZE * NR_TX_DESC, dev->tx_descs, dev->tx_phy_descs); pci_free_consistent(pci_dev, 4 * DESC_SIZE * NR_RX_DESC, dev->rx_info.descs, dev->rx_info.phy_descs); pci_disable_device(pci_dev); diff -prauN linux-2.6.0-test5/drivers/net/pcmcia/3c574_cs.c wli-2.6.0-test5-bk12-25/drivers/net/pcmcia/3c574_cs.c --- linux-2.6.0-test5/drivers/net/pcmcia/3c574_cs.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/pcmcia/3c574_cs.c 2003-09-25 19:16:00.000000000 -0700 @@ -263,16 +263,6 @@ static void tc574_detach(dev_link_t *); static dev_link_t *dev_list; -static void flush_stale_links(void) -{ - dev_link_t *link, *next; - for (link = dev_list; link; link = next) { - next = link->next; - if (link->state & DEV_STALE_LINK) - tc574_detach(link); - } -} - /* tc574_attach() creates an "instance" of the driver, allocating local data structures for one device. The device is registered @@ -288,7 +278,6 @@ static dev_link_t *tc574_attach(void) int i, ret; DEBUG(0, "3c574_attach()\n"); - flush_stale_links(); /* Create the PC card device object. */ dev = alloc_etherdev(sizeof(struct el3_private)); @@ -375,10 +364,8 @@ static void tc574_detach(dev_link_t *lin if (link->state & DEV_CONFIG) { tc574_release(link); - if (link->state & DEV_STALE_CONFIG) { - link->state |= DEV_STALE_LINK; + if (link->state & DEV_STALE_CONFIG) return; - } } if (link->handle) @@ -583,7 +570,9 @@ static void tc574_release(dev_link_t *li link->state &= ~DEV_CONFIG; -} /* tc574_release */ + if (link->state & DEV_STALE_CONFIG) + tc574_detach(link); +} /* The card status event handler. Mostly, this schedules other diff -prauN linux-2.6.0-test5/drivers/net/pcmcia/3c589_cs.c wli-2.6.0-test5-bk12-25/drivers/net/pcmcia/3c589_cs.c --- linux-2.6.0-test5/drivers/net/pcmcia/3c589_cs.c 2003-09-08 12:50:32.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/pcmcia/3c589_cs.c 2003-09-25 19:16:00.000000000 -0700 @@ -176,24 +176,6 @@ static dev_link_t *dev_list; /*====================================================================== - This bit of code is used to avoid unregistering network devices - at inappropriate times. 2.2 and later kernels are fairly picky - about when this can happen. - -======================================================================*/ - -static void flush_stale_links(void) -{ - dev_link_t *link, *next; - for (link = dev_list; link; link = next) { - next = link->next; - if (link->state & DEV_STALE_LINK) - tc589_detach(link); - } -} - -/*====================================================================== - tc589_attach() creates an "instance" of the driver, allocating local data structures for one device. The device is registered with Card Services. @@ -209,7 +191,6 @@ static dev_link_t *tc589_attach(void) int i, ret; DEBUG(0, "3c589_attach()\n"); - flush_stale_links(); /* Create new ethernet device */ dev = alloc_etherdev(sizeof(struct el3_private)); @@ -297,10 +278,8 @@ static void tc589_detach(dev_link_t *lin if (link->state & DEV_CONFIG) { tc589_release(link); - if (link->state & DEV_STALE_CONFIG) { - link->state |= DEV_STALE_LINK; + if (link->state & DEV_STALE_CONFIG) return; - } } if (link->handle) @@ -466,8 +445,10 @@ static void tc589_release(dev_link_t *li CardServices(ReleaseIRQ, link->handle, &link->irq); link->state &= ~DEV_CONFIG; - -} /* tc589_release */ + + if (link->state & DEV_STALE_CONFIG) + tc589_detach(link); +} /*====================================================================== diff -prauN linux-2.6.0-test5/drivers/net/pcmcia/Kconfig wli-2.6.0-test5-bk12-25/drivers/net/pcmcia/Kconfig --- linux-2.6.0-test5/drivers/net/pcmcia/Kconfig 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/pcmcia/Kconfig 2003-09-25 19:16:00.000000000 -0700 @@ -28,11 +28,8 @@ config PCMCIA_3C589 Say Y here if you intend to attach a 3Com 3c589 or compatible PCMCIA (PC-card) Ethernet card to your computer. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called 3c589_cs. If you want to compile it as - a module, say M here and read . If - unsure, say N. + To compile this driver as a module, choose M here: the module will be + called 3c589_cs. If unsure, say N. config PCMCIA_3C574 tristate "3Com 3c574 PCMCIA support" @@ -41,11 +38,8 @@ config PCMCIA_3C574 Say Y here if you intend to attach a 3Com 3c574 or compatible PCMCIA (PC-card) Fast Ethernet card to your computer. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called 3c574_cs. If you want to compile it as - a module, say M here and read . If - unsure, say N. + To compile this driver as a module, choose M here: the module will be + called 3c574_cs. If unsure, say N. config PCMCIA_FMVJ18X tristate "Fujitsu FMV-J18x PCMCIA support" @@ -54,11 +48,8 @@ config PCMCIA_FMVJ18X Say Y here if you intend to attach a Fujitsu FMV-J18x or compatible PCMCIA (PC-card) Ethernet card to your computer. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called fmvj18x_cs. If you want to compile it - as a module, say M here and read . - If unsure, say N. + To compile this driver as a module, choose M here: the module will be + called fmvj18x_cs. If unsure, say N. config PCMCIA_PCNET tristate "NE2000 compatible PCMCIA support" @@ -67,11 +58,8 @@ config PCMCIA_PCNET Say Y here if you intend to attach an NE2000 compatible PCMCIA (PC-card) Ethernet or Fast Ethernet card to your computer. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called pcnet_cs. If you want to compile it as - a module, say M here and read . If - unsure, say N. + To compile this driver as a module, choose M here: the module will be + called pcnet_cs. If unsure, say N. config PCMCIA_NMCLAN tristate "New Media PCMCIA support" @@ -80,11 +68,8 @@ config PCMCIA_NMCLAN Say Y here if you intend to attach a New Media Ethernet or LiveWire PCMCIA (PC-card) Ethernet card to your computer. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called nmclan_cs. If you want to compile it as - a module, say M here and read . If - unsure, say N. + To compile this driver as a module, choose M here: the module will be + called nmclan_cs. If unsure, say N. config PCMCIA_SMC91C92 tristate "SMC 91Cxx PCMCIA support" @@ -93,11 +78,8 @@ config PCMCIA_SMC91C92 Say Y here if you intend to attach an SMC 91Cxx compatible PCMCIA (PC-card) Ethernet or Fast Ethernet card to your computer. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called smc91c92_cs. If you want to compile it - as a module, say M here and read . - If unsure, say N. + To compile this driver as a module, choose M here: the module will be + called smc91c92_cs. If unsure, say N. config PCMCIA_XIRC2PS tristate "Xircom 16-bit PCMCIA support" @@ -106,11 +88,8 @@ config PCMCIA_XIRC2PS Say Y here if you intend to attach a Xircom 16-bit PCMCIA (PC-card) Ethernet or Fast Ethernet card to your computer. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called xirc2ps_cs. If you want to compile it - as a module, say M here and read . - If unsure, say N. + To compile this driver as a module, choose M here: the module will be + called xirc2ps_cs. If unsure, say N. config PCMCIA_AXNET tristate "Asix AX88190 PCMCIA support" @@ -121,11 +100,8 @@ config PCMCIA_AXNET nearly NE2000 compatible but need a separate driver due to a few misfeatures. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called axnet_cs. If you want to compile it as - a module, say M here and read . If - unsure, say N. + To compile this driver as a module, choose M here: the module will be + called axnet_cs. If unsure, say N. config ARCNET_COM20020_CS tristate "COM20020 ARCnet PCMCIA support" @@ -134,11 +110,8 @@ config ARCNET_COM20020_CS Say Y here if you intend to attach this type of ARCnet PCMCIA card to your computer. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called com20020_cs. If you want to compile it - as a module, say M here and read . - If unsure, say N. + To compile this driver as a module, choose M here: the module will be + called com20020_cs. If unsure, say N. config PCMCIA_IBMTR tristate "IBM PCMCIA tokenring adapter support" @@ -148,10 +121,8 @@ config PCMCIA_IBMTR card to your computer. You then also need to say Y to "Token Ring driver support". - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called ibmtr_cs. If you want to compile it as - a module, say M here and read . + To compile this driver as a module, choose M here: the module will be + called ibmtr_cs. endmenu diff -prauN linux-2.6.0-test5/drivers/net/pcmcia/axnet_cs.c wli-2.6.0-test5-bk12-25/drivers/net/pcmcia/axnet_cs.c --- linux-2.6.0-test5/drivers/net/pcmcia/axnet_cs.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/pcmcia/axnet_cs.c 2003-09-25 19:16:00.000000000 -0700 @@ -142,24 +142,6 @@ typedef struct axnet_dev_t { /*====================================================================== - This bit of code is used to avoid unregistering network devices - at inappropriate times. 2.2 and later kernels are fairly picky - about when this can happen. - -======================================================================*/ - -static void flush_stale_links(void) -{ - dev_link_t *link, *next; - for (link = dev_list; link; link = next) { - next = link->next; - if (link->state & DEV_STALE_LINK) - axnet_detach(link); - } -} - -/*====================================================================== - We never need to do anything when a axnet device is "initialized" by the net software, because we only register already-found cards. @@ -187,7 +169,6 @@ static dev_link_t *axnet_attach(void) int i, ret; DEBUG(0, "axnet_attach()\n"); - flush_stale_links(); /* Create new ethernet device */ info = kmalloc(sizeof(*info), GFP_KERNEL); @@ -258,10 +239,8 @@ static void axnet_detach(dev_link_t *lin if (link->state & DEV_CONFIG) { axnet_release(link); - if (link->state & DEV_STALE_CONFIG) { - link->state |= DEV_STALE_LINK; + if (link->state & DEV_STALE_CONFIG) return; - } } if (link->handle) @@ -547,7 +526,9 @@ static void axnet_release(dev_link_t *li link->state &= ~DEV_CONFIG; -} /* axnet_release */ + if (link->state & DEV_STALE_CONFIG) + axnet_detach(link); +} /*====================================================================== diff -prauN linux-2.6.0-test5/drivers/net/pcmcia/com20020_cs.c wli-2.6.0-test5-bk12-25/drivers/net/pcmcia/com20020_cs.c --- linux-2.6.0-test5/drivers/net/pcmcia/com20020_cs.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/pcmcia/com20020_cs.c 2003-09-25 19:16:00.000000000 -0700 @@ -145,22 +145,18 @@ typedef struct com20020_dev_t { dev_node_t node; } com20020_dev_t; -/*====================================================================== +static void com20020_setup(struct net_device *dev) +{ + struct arcnet_local *lp = dev->priv; - This bit of code is used to avoid unregistering network devices - at inappropriate times. 2.2 and later kernels are fairly picky - about when this can happen. - -======================================================================*/ + lp->timeout = timeout; + lp->backplane = backplane; + lp->clockp = clockp; + lp->clockm = clockm & 3; + lp->hw.owner = THIS_MODULE; -static void flush_stale_links(void) -{ - dev_link_t *link, *next; - for (link = dev_list; link; link = next) { - next = link->next; - if (link->state & DEV_STALE_LINK) - com20020_detach(link); - } + /* fill in our module parameters as defaults */ + dev->dev_addr[0] = node; } /*====================================================================== @@ -181,7 +177,6 @@ static dev_link_t *com20020_attach(void) struct arcnet_local *lp; DEBUG(0, "com20020_attach()\n"); - flush_stale_links(); /* Create new network device */ link = kmalloc(sizeof(struct dev_link_t), GFP_KERNEL); @@ -192,18 +187,14 @@ static dev_link_t *com20020_attach(void) if (!info) goto fail_alloc_info; - lp = kmalloc(sizeof(struct arcnet_local), GFP_KERNEL); - if (!lp) - goto fail_alloc_lp; - - dev = dev_alloc("arc%d", &ret); + dev = alloc_netdev(sizeof(struct arcnet_local), "arc%d", + com20020_setup); if (!dev) goto fail_alloc_dev; memset(info, 0, sizeof(struct com20020_dev_t)); - memset(lp, 0, sizeof(struct arcnet_local)); memset(link, 0, sizeof(struct dev_link_t)); - dev->priv = lp; + lp = dev->priv; link->io.Attributes1 = IO_DATA_PATH_WIDTH_8; link->io.NumPorts1 = 16; @@ -220,13 +211,6 @@ static dev_link_t *com20020_attach(void) link->conf.IntType = INT_MEMORY_AND_IO; link->conf.Present = PRESENT_OPTION; - /* fill in our module parameters as defaults */ - dev->dev_addr[0] = node; - lp->timeout = timeout; - lp->backplane = backplane; - lp->clockp = clockp; - lp->clockm = clockm & 3; - lp->hw.owner = THIS_MODULE; link->irq.Instance = info->dev = dev; link->priv = info; @@ -253,8 +237,6 @@ static dev_link_t *com20020_attach(void) return link; fail_alloc_dev: - kfree(lp); -fail_alloc_lp: kfree(info); fail_alloc_info: kfree(link); @@ -290,10 +272,8 @@ static void com20020_detach(dev_link_t * if (link->state & DEV_CONFIG) { com20020_release(link); - if (link->state & DEV_STALE_CONFIG) { - link->state |= DEV_STALE_LINK; + if (link->state & DEV_STALE_CONFIG) return; - } } if (link->handle) @@ -324,11 +304,9 @@ static void com20020_detach(dev_link_t * /* ...but I/O ports are done automatically by card services */ unregister_netdev(dev); - MOD_DEC_USE_COUNT; } DEBUG(1,"kfree...\n"); - kfree(dev->priv); free_netdev(dev); } DEBUG(1,"kfree2...\n"); @@ -382,7 +360,6 @@ static void com20020_config(dev_link_t * /* Configure card */ link->state |= DEV_CONFIG; - strcpy(info->node.dev_name, dev->name); DEBUG(1,"arcnet: baseport1 is %Xh\n", link->io.BasePort1); i = !CS_SUCCESS; @@ -428,13 +405,11 @@ static void com20020_config(dev_link_t * goto failed; } - MOD_INC_USE_COUNT; - lp = dev->priv; lp->card_name = "PCMCIA COM20020"; lp->card_flags = ARC_CAN_10MBIT; /* pretend all of them can 10Mbit */ - i = com20020_found(dev, 0); + i = com20020_found(dev, 0); /* calls register_netdev */ if (i != 0) { DEBUG(1,KERN_NOTICE "com20020_cs: com20020_found() failed\n"); @@ -442,6 +417,7 @@ static void com20020_config(dev_link_t * } info->dev_configured = 1; + strcpy(info->node.dev_name, dev->name); link->dev = &info->node; link->state &= ~DEV_CONFIG_PENDING; @@ -484,7 +460,9 @@ static void com20020_release(dev_link_t link->state &= ~(DEV_CONFIG | DEV_RELEASE_PENDING); -} /* com20020_release */ + if (link->state & DEV_STALE_CONFIG) + com20020_detach(link); +} /*====================================================================== diff -prauN linux-2.6.0-test5/drivers/net/pcmcia/fmvj18x_cs.c wli-2.6.0-test5-bk12-25/drivers/net/pcmcia/fmvj18x_cs.c --- linux-2.6.0-test5/drivers/net/pcmcia/fmvj18x_cs.c 2003-09-08 12:50:13.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/pcmcia/fmvj18x_cs.c 2003-09-25 19:16:00.000000000 -0700 @@ -242,24 +242,6 @@ typedef struct local_info_t { #define BANK_1U 0x24 /* bank 1 (CONFIG_1) */ #define BANK_2U 0x28 /* bank 2 (CONFIG_1) */ -/*====================================================================== - - This bit of code is used to avoid unregistering network devices - at inappropriate times. 2.2 and later kernels are fairly picky - about when this can happen. - -======================================================================*/ - -static void flush_stale_links(void) -{ - dev_link_t *link, *next; - for (link = dev_list; link; link = next) { - next = link->next; - if (link->state & DEV_STALE_LINK) - fmvj18x_detach(link); - } -} - static dev_link_t *fmvj18x_attach(void) { local_info_t *lp; @@ -269,7 +251,6 @@ static dev_link_t *fmvj18x_attach(void) int i, ret; DEBUG(0, "fmvj18x_attach()\n"); - flush_stale_links(); /* Make up a FMVJ18x specific data structure */ dev = alloc_etherdev(sizeof(local_info_t)); @@ -353,10 +334,8 @@ static void fmvj18x_detach(dev_link_t *l if (link->state & DEV_CONFIG) { fmvj18x_release(link); - if (link->state & DEV_STALE_CONFIG) { - link->state |= DEV_STALE_LINK; + if (link->state & DEV_STALE_CONFIG) return; - } } /* Break the link with Card Services */ @@ -762,8 +741,10 @@ static void fmvj18x_release(dev_link_t * CardServices(ReleaseIRQ, link->handle, &link->irq); link->state &= ~DEV_CONFIG; - -} /* fmvj18x_release */ + + if (link->state & DEV_STALE_CONFIG) + fmvj18x_detach(link); +} /*====================================================================*/ diff -prauN linux-2.6.0-test5/drivers/net/pcmcia/ibmtr_cs.c wli-2.6.0-test5-bk12-25/drivers/net/pcmcia/ibmtr_cs.c --- linux-2.6.0-test5/drivers/net/pcmcia/ibmtr_cs.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/pcmcia/ibmtr_cs.c 2003-09-25 19:16:00.000000000 -0700 @@ -139,24 +139,6 @@ typedef struct ibmtr_dev_t { struct tok_info ti; } ibmtr_dev_t; -/*====================================================================== - - This bit of code is used to avoid unregistering network devices - at inappropriate times. 2.2 and later kernels are fairly picky - about when this can happen. - -======================================================================*/ - -static void flush_stale_links(void) -{ - dev_link_t *link, *next; - for (link = dev_list; link; link = next) { - next = link->next; - if (link->state & DEV_STALE_LINK) - ibmtr_detach(link); - } -} - static void netdev_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info) { @@ -184,7 +166,6 @@ static dev_link_t *ibmtr_attach(void) int i, ret; DEBUG(0, "ibmtr_attach()\n"); - flush_stale_links(); /* Create new token-ring device */ dev = alloc_trdev(sizeof(*info)); @@ -273,10 +254,8 @@ static void ibmtr_detach(dev_link_t *lin } if (link->state & DEV_CONFIG) { ibmtr_release(link); - if (link->state & DEV_STALE_CONFIG) { - link->state |= DEV_STALE_LINK; + if (link->state & DEV_STALE_CONFIG) return; - } } if (link->handle) @@ -446,7 +425,9 @@ static void ibmtr_release(dev_link_t *li link->state &= ~DEV_CONFIG; -} /* ibmtr_release */ + if (link->state & DEV_STALE_CONFIG) + ibmtr_detach(link); +} /*====================================================================== diff -prauN linux-2.6.0-test5/drivers/net/pcmcia/nmclan_cs.c wli-2.6.0-test5-bk12-25/drivers/net/pcmcia/nmclan_cs.c --- linux-2.6.0-test5/drivers/net/pcmcia/nmclan_cs.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/pcmcia/nmclan_cs.c 2003-09-25 19:16:00.000000000 -0700 @@ -449,21 +449,6 @@ static dev_link_t *nmclan_attach(void); static void nmclan_detach(dev_link_t *); /* ---------------------------------------------------------------------------- -flush_stale_links - Clean up stale device structures ----------------------------------------------------------------------------- */ - -static void flush_stale_links(void) -{ - dev_link_t *link, *next; - for (link = dev_list; link; link = next) { - next = link->next; - if (link->state & DEV_STALE_LINK) - nmclan_detach(link); - } -} - -/* ---------------------------------------------------------------------------- nmclan_attach Creates an "instance" of the driver, allocating local data structures for one device. The device is registered with Card @@ -480,7 +465,6 @@ static dev_link_t *nmclan_attach(void) DEBUG(0, "nmclan_attach()\n"); DEBUG(1, "%s\n", rcsid); - flush_stale_links(); /* Create new ethernet device */ dev = alloc_etherdev(sizeof(mace_private)); @@ -569,10 +553,8 @@ static void nmclan_detach(dev_link_t *li if (link->state & DEV_CONFIG) { nmclan_release(link); - if (link->state & DEV_STALE_CONFIG) { - link->state |= DEV_STALE_LINK; + if (link->state & DEV_STALE_CONFIG) return; - } } if (link->handle) @@ -843,7 +825,9 @@ static void nmclan_release(dev_link_t *l link->state &= ~DEV_CONFIG; -} /* nmclan_release */ + if (link->state & DEV_STALE_CONFIG) + nmclan_detach(link); +} /* ---------------------------------------------------------------------------- nmclan_event diff -prauN linux-2.6.0-test5/drivers/net/pcmcia/pcnet_cs.c wli-2.6.0-test5-bk12-25/drivers/net/pcmcia/pcnet_cs.c --- linux-2.6.0-test5/drivers/net/pcmcia/pcnet_cs.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/pcmcia/pcnet_cs.c 2003-09-25 19:16:00.000000000 -0700 @@ -239,24 +239,6 @@ typedef struct pcnet_dev_t { /*====================================================================== - This bit of code is used to avoid unregistering network devices - at inappropriate times. 2.2 and later kernels are fairly picky - about when this can happen. - -======================================================================*/ - -static void flush_stale_links(void) -{ - dev_link_t *link, *next; - for (link = dev_list; link; link = next) { - next = link->next; - if (link->state & DEV_STALE_LINK) - pcnet_detach(link); - } -} - -/*====================================================================== - We never need to do anything when a pcnet device is "initialized" by the net software, because we only register already-found cards. @@ -284,7 +266,6 @@ static dev_link_t *pcnet_attach(void) int i, ret; DEBUG(0, "pcnet_attach()\n"); - flush_stale_links(); /* Create new ethernet device */ info = kmalloc(sizeof(*info), GFP_KERNEL); @@ -356,10 +337,8 @@ static void pcnet_detach(dev_link_t *lin if (link->state & DEV_CONFIG) { pcnet_release(link); - if (link->state & DEV_STALE_CONFIG) { - link->state |= DEV_STALE_LINK; + if (link->state & DEV_STALE_CONFIG) return; - } } if (link->handle) @@ -821,7 +800,9 @@ static void pcnet_release(dev_link_t *li link->state &= ~DEV_CONFIG; -} /* pcnet_release */ + if (link->state & DEV_STALE_CONFIG) + pcnet_detach(link); +} /*====================================================================== diff -prauN linux-2.6.0-test5/drivers/net/pcmcia/smc91c92_cs.c wli-2.6.0-test5-bk12-25/drivers/net/pcmcia/smc91c92_cs.c --- linux-2.6.0-test5/drivers/net/pcmcia/smc91c92_cs.c 2003-09-08 12:50:16.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/pcmcia/smc91c92_cs.c 2003-09-25 19:16:00.000000000 -0700 @@ -307,24 +307,6 @@ static int smc_link_ok(struct net_device /*====================================================================== - This bit of code is used to avoid unregistering network devices - at inappropriate times. 2.2 and later kernels are fairly picky - about when this can happen. - -======================================================================*/ - -static void flush_stale_links(void) -{ - dev_link_t *link, *next; - for (link = dev_list; link; link = next) { - next = link->next; - if (link->state & DEV_STALE_LINK) - smc91c92_detach(link); - } -} - -/*====================================================================== - smc91c92_attach() creates an "instance" of the driver, allocating local data structures for one device. The device is registered with Card Services. @@ -340,7 +322,6 @@ static dev_link_t *smc91c92_attach(void) int i, ret; DEBUG(0, "smc91c92_attach()\n"); - flush_stale_links(); /* Create new ethernet device */ dev = alloc_etherdev(sizeof(struct smc_private)); @@ -432,10 +413,8 @@ static void smc91c92_detach(dev_link_t * if (link->state & DEV_CONFIG) { smc91c92_release(link); - if (link->state & DEV_STALE_CONFIG) { - link->state |= DEV_STALE_LINK; + if (link->state & DEV_STALE_CONFIG) return; - } } if (link->handle) @@ -1103,7 +1082,9 @@ static void smc91c92_release(dev_link_t link->state &= ~DEV_CONFIG; -} /* smc91c92_release */ + if (link->state & DEV_STALE_CONFIG) + smc91c92_detach(link); +} /*====================================================================== diff -prauN linux-2.6.0-test5/drivers/net/pcmcia/xirc2ps_cs.c wli-2.6.0-test5-bk12-25/drivers/net/pcmcia/xirc2ps_cs.c --- linux-2.6.0-test5/drivers/net/pcmcia/xirc2ps_cs.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/pcmcia/xirc2ps_cs.c 2003-09-25 19:16:00.000000000 -0700 @@ -390,17 +390,6 @@ static void do_powerdown(struct net_devi static int do_stop(struct net_device *dev); /*=============== Helper functions =========================*/ -static void -flush_stale_links(void) -{ - dev_link_t *link, *next; - for (link = dev_list; link; link = next) { - next = link->next; - if (link->state & DEV_STALE_LINK) - xirc2ps_detach(link); - } -} - static int get_tuple_data(int fn, client_handle_t handle, tuple_t *tuple) { @@ -602,7 +591,6 @@ xirc2ps_attach(void) int err; DEBUG(0, "attach()\n"); - flush_stale_links(); /* Allocate the device structure */ dev = alloc_etherdev(sizeof(local_info_t)); @@ -687,13 +675,8 @@ xirc2ps_detach(dev_link_t * link) * the release() function is called, that will trigger a proper * detach(). */ - if (link->state & DEV_CONFIG) { + if (link->state & DEV_CONFIG) xirc2ps_release(link); - if (link->state & DEV_STALE_CONFIG) { - link->state |= DEV_STALE_LINK; - return; - } - } /* Break the link with Card Services */ if (link->handle) @@ -1183,19 +1166,6 @@ xirc2ps_release(dev_link_t *link) DEBUG(0, "release(0x%p)\n", link); -#if 0 - /* - * If the device is currently in use, we won't release until it - * is actually closed. - */ - if (link->open) { - DEBUG(0, "release postponed, '%s' " - "still open\n", link->dev->dev_name); - link->state |= DEV_STALE_CONFIG; - return; - } -#endif - if (link->win) { struct net_device *dev = link->priv; local_info_t *local = dev->priv; @@ -2030,9 +2000,6 @@ do_stop(struct net_device *dev) SelectPage(0); link->open--; - if (link->state & DEV_STALE_CONFIG) - xirc2ps_release(link); - return 0; } diff -prauN linux-2.6.0-test5/drivers/net/ppp_generic.c wli-2.6.0-test5-bk12-25/drivers/net/ppp_generic.c --- linux-2.6.0-test5/drivers/net/ppp_generic.c 2003-09-08 12:50:29.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/ppp_generic.c 2003-09-25 19:16:00.000000000 -0700 @@ -792,7 +792,7 @@ static struct file_operations ppp_device /* Called at boot time if ppp is compiled into the kernel, or at module load time (from init_module) if compiled as a module. */ -int __init ppp_init(void) +static int __init ppp_init(void) { int err; @@ -801,6 +801,8 @@ int __init ppp_init(void) if (!err) { err = devfs_mk_cdev(MKDEV(PPP_MAJOR, 0), S_IFCHR|S_IRUSR|S_IWUSR, "ppp"); + if (err) + unregister_chrdev(PPP_MAJOR, "ppp"); } if (err) diff -prauN linux-2.6.0-test5/drivers/net/pppoe.c wli-2.6.0-test5-bk12-25/drivers/net/pppoe.c --- linux-2.6.0-test5/drivers/net/pppoe.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/pppoe.c 2003-09-25 19:16:00.000000000 -0700 @@ -986,7 +986,7 @@ static int pppoe_seq_show(struct seq_fil struct pppox_opt *po; char *dev_name; - if (v == (void *)1) { + if (v == SEQ_START_TOKEN) { seq_puts(seq, "Id Address Device\n"); goto out; } @@ -1025,7 +1025,7 @@ static void *pppoe_seq_start(struct seq_ loff_t l = *pos; read_lock_bh(&pppoe_hash_lock); - return l ? pppoe_get_idx(--l) : (void *)1; + return l ? pppoe_get_idx(--l) : SEQ_START_TOKEN; } static void *pppoe_seq_next(struct seq_file *seq, void *v, loff_t *pos) @@ -1033,7 +1033,7 @@ static void *pppoe_seq_next(struct seq_f struct pppox_opt *po; ++*pos; - if (v == (void *)1) { + if (v == SEQ_START_TOKEN) { po = pppoe_get_idx(0); goto out; } diff -prauN linux-2.6.0-test5/drivers/net/rcpci45.c wli-2.6.0-test5-bk12-25/drivers/net/rcpci45.c --- linux-2.6.0-test5/drivers/net/rcpci45.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/rcpci45.c 2003-09-25 19:16:00.000000000 -0700 @@ -259,10 +259,12 @@ rcpci45_init_one (struct pci_dev *pdev, dev->set_config = &RCconfig; if ((error = register_netdev(dev))) - goto err_out_free_region; + goto err_out_iounmap; return 0; /* success */ +err_out_iounmap: + iounmap((void *) dev->base_addr); err_out_free_region: pci_release_regions (pdev); err_out_free_msgbuf: diff -prauN linux-2.6.0-test5/drivers/net/rrunner.c wli-2.6.0-test5-bk12-25/drivers/net/rrunner.c --- linux-2.6.0-test5/drivers/net/rrunner.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/rrunner.c 2003-09-25 19:16:00.000000000 -0700 @@ -30,7 +30,6 @@ #include #include -#include #include #include #include @@ -124,7 +123,6 @@ static int __devinit rr_init_one(struct rrpriv->pci_dev = pdev; spin_lock_init(&rrpriv->lock); - sprintf(rrpriv->name, "RoadRunner serial HIPPI"); dev->irq = pdev->irq; dev->open = &rr_open; @@ -228,7 +226,7 @@ static int __devinit rr_init_one(struct pci_set_drvdata(pdev, NULL); } out2: - kfree(dev); + free_netdev(dev); out3: return ret; } @@ -236,9 +234,10 @@ static int __devinit rr_init_one(struct static void __devexit rr_remove_one (struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); - struct rr_private *rr = (struct rr_private *)dev->priv; if (dev) { + struct rr_private *rr = dev->priv; + if (!(readl(&rr->regs->HostCtrl) & NIC_HALTED)){ printk(KERN_ERR "%s: trying to unload running NIC\n", dev->name); @@ -721,7 +720,8 @@ static int rr_init1(struct net_device *d * Give the FirmWare time to chew on the `get running' command. */ myjif = jiffies + 5 * HZ; - while (time_before(jiffies, myjif) && !rrpriv->fw_running); + while (time_before(jiffies, myjif) && !rrpriv->fw_running) + cpu_relax(); netif_start_queue(dev); @@ -1201,8 +1201,7 @@ static int rr_open(struct net_device *de readl(®s->HostCtrl); spin_unlock_irqrestore(&rrpriv->lock, flags); - if (request_irq(dev->irq, rr_interrupt, SA_SHIRQ, rrpriv->name, dev)) - { + if (request_irq(dev->irq, rr_interrupt, SA_SHIRQ, dev->name, dev)) { printk(KERN_WARNING "%s: Requested IRQ %d is busy\n", dev->name, dev->irq); ecode = -EAGAIN; @@ -1222,7 +1221,6 @@ static int rr_open(struct net_device *de netif_start_queue(dev); - MOD_INC_USE_COUNT; return ecode; error: @@ -1414,7 +1412,6 @@ static int rr_close(struct net_device *d free_irq(dev->irq, dev); spin_unlock_irqrestore(&rrpriv->lock, flags); - MOD_DEC_USE_COUNT; return 0; } @@ -1727,7 +1724,7 @@ static struct pci_driver rr_driver = { .name = "rrunner", .id_table = rr_pci_tbl, .probe = rr_init_one, - .remove = rr_remove_one, + .remove = __devexit_p(rr_remove_one), }; static int __init rr_init_module(void) diff -prauN linux-2.6.0-test5/drivers/net/rrunner.h wli-2.6.0-test5-bk12-25/drivers/net/rrunner.h --- linux-2.6.0-test5/drivers/net/rrunner.h 2003-09-08 12:50:09.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/rrunner.h 2003-09-25 19:16:00.000000000 -0700 @@ -820,7 +820,6 @@ struct rr_private u32 tx_full; u32 fw_rev; volatile short fw_running; - char name[24]; /* The assigned name */ struct net_device_stats stats; struct pci_dev *pci_dev; }; diff -prauN linux-2.6.0-test5/drivers/net/sb1000.c wli-2.6.0-test5-bk12-25/drivers/net/sb1000.c --- linux-2.6.0-test5/drivers/net/sb1000.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/sb1000.c 2003-09-25 19:16:00.000000000 -0700 @@ -35,7 +35,6 @@ static char version[] = "sb1000.c:v1.1.2 6/01/98 (fventuri@mediaone.net)\n"; #include -#include #include #include #include diff -prauN linux-2.6.0-test5/drivers/net/sis900.c wli-2.6.0-test5-bk12-25/drivers/net/sis900.c --- linux-2.6.0-test5/drivers/net/sis900.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/sis900.c 2003-09-25 19:16:00.000000000 -0700 @@ -47,7 +47,6 @@ */ #include -#include #include #include #include diff -prauN linux-2.6.0-test5/drivers/net/sk98lin/h/skdrv1st.h wli-2.6.0-test5-bk12-25/drivers/net/sk98lin/h/skdrv1st.h --- linux-2.6.0-test5/drivers/net/sk98lin/h/skdrv1st.h 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/sk98lin/h/skdrv1st.h 2003-09-25 19:16:00.000000000 -0700 @@ -107,9 +107,6 @@ #ifndef __INC_SKDRV1ST_H #define __INC_SKDRV1ST_H -/* Check kernel version */ -#include - typedef struct s_AC SK_AC; /* Set card versions */ @@ -135,7 +132,6 @@ typedef struct s_AC SK_AC; #error You must compile this driver with "-O". #endif -#include #include #include #include diff -prauN linux-2.6.0-test5/drivers/net/sk98lin/skge.c wli-2.6.0-test5-bk12-25/drivers/net/sk98lin/skge.c --- linux-2.6.0-test5/drivers/net/sk98lin/skge.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/sk98lin/skge.c 2003-09-25 19:16:00.000000000 -0700 @@ -361,7 +361,6 @@ * * * "h/skdrv1st.h" - * * * * diff -prauN linux-2.6.0-test5/drivers/net/sk_mca.h wli-2.6.0-test5-bk12-25/drivers/net/sk_mca.h --- linux-2.6.0-test5/drivers/net/sk_mca.h 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/sk_mca.h 2003-09-25 19:16:00.000000000 -0700 @@ -1,3 +1,5 @@ +#include + #ifndef _SK_MCA_INCLUDE_ #define _SK_MCA_INCLUDE_ diff -prauN linux-2.6.0-test5/drivers/net/skfp/h/targetos.h wli-2.6.0-test5-bk12-25/drivers/net/skfp/h/targetos.h --- linux-2.6.0-test5/drivers/net/skfp/h/targetos.h 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/skfp/h/targetos.h 2003-09-25 19:16:00.000000000 -0700 @@ -43,7 +43,6 @@ #undef ADDR -#include #include #include #include diff -prauN linux-2.6.0-test5/drivers/net/skfp/skfddi.c wli-2.6.0-test5-bk12-25/drivers/net/skfp/skfddi.c --- linux-2.6.0-test5/drivers/net/skfp/skfddi.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/skfp/skfddi.c 2003-09-25 19:16:00.000000000 -0700 @@ -182,7 +182,7 @@ extern void mac_clear_multicast(struct s extern void enable_tx_irq(struct s_smc *smc, u_short queue); extern void mac_drv_clear_txd(struct s_smc *smc); -static struct pci_device_id skfddi_pci_tbl[] __initdata = { +static struct pci_device_id skfddi_pci_tbl[] = { { PCI_VENDOR_ID_SK, PCI_DEVICE_ID_SK_FP, PCI_ANY_ID, PCI_ANY_ID, }, { } /* Terminating entry */ }; diff -prauN linux-2.6.0-test5/drivers/net/slip.c wli-2.6.0-test5-bk12-25/drivers/net/slip.c --- linux-2.6.0-test5/drivers/net/slip.c 2003-09-08 12:50:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/slip.c 2003-09-25 19:16:00.000000000 -0700 @@ -869,12 +869,12 @@ slip_open(struct tty_struct *tty) /* OK. Find a free SLIP channel to use. */ err = -ENFILE; - if ((sl = sl_alloc(tty->device)) == NULL) + if ((sl = sl_alloc(tty_devnum(tty))) == NULL) goto err_exit; sl->tty = tty; tty->disc_data = sl; - sl->line = tty->device; + sl->line = tty_devnum(tty); sl->pid = current->pid; if (tty->driver->flush_buffer) tty->driver->flush_buffer(tty); @@ -1389,9 +1389,8 @@ static void __exit slip_exit(void) */ do { if (busy) { - current->state = TASK_INTERRUPTIBLE; + set_current_state(TASK_INTERRUPTIBLE); schedule_timeout(HZ / 10); - current->state = TASK_RUNNING; } busy = 0; diff -prauN linux-2.6.0-test5/drivers/net/smc-ultra32.c wli-2.6.0-test5-bk12-25/drivers/net/smc-ultra32.c --- linux-2.6.0-test5/drivers/net/smc-ultra32.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/smc-ultra32.c 2003-09-25 19:16:00.000000000 -0700 @@ -47,6 +47,7 @@ static const char *version = "smc-ultra3 #include +#include #include #include #include diff -prauN linux-2.6.0-test5/drivers/net/smc9194.c wli-2.6.0-test5-bk12-25/drivers/net/smc9194.c --- linux-2.6.0-test5/drivers/net/smc9194.c 2003-09-08 12:50:20.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/smc9194.c 2003-09-25 19:16:00.000000000 -0700 @@ -58,7 +58,6 @@ static const char version[] = "smc9194.c:v0.14 12/15/00 by Erik Stahlman (erik@vt.edu)\n"; #include -#include #include #include #include diff -prauN linux-2.6.0-test5/drivers/net/sunhme.c wli-2.6.0-test5-bk12-25/drivers/net/sunhme.c --- linux-2.6.0-test5/drivers/net/sunhme.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/sunhme.c 2003-09-25 19:16:00.000000000 -0700 @@ -179,7 +179,7 @@ static __inline__ void tx_dump_ring(stru where it could be referenced at any time due to hot plugging, the __initdata reference should be removed. */ -struct pci_device_id happymeal_pci_ids[] __initdata = { +struct pci_device_id happymeal_pci_ids[] = { { .vendor = PCI_VENDOR_ID_SUN, .device = PCI_DEVICE_ID_SUN_HAPPYMEAL, diff -prauN linux-2.6.0-test5/drivers/net/tc35815.c wli-2.6.0-test5-bk12-25/drivers/net/tc35815.c --- linux-2.6.0-test5/drivers/net/tc35815.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/tc35815.c 2003-09-25 19:16:00.000000000 -0700 @@ -448,7 +448,7 @@ struct tc35815_local { /* Index to functions, as function prototypes. */ -static int __init tc35815_probe1(struct pci_dev *pdev, unsigned int base_addr, unsigned int irq); +static int __devinit tc35815_probe1(struct pci_dev *pdev, unsigned int base_addr, unsigned int irq); static int tc35815_open(struct net_device *dev); static int tc35815_send_packet(struct sk_buff *skb, struct net_device *dev); @@ -526,7 +526,7 @@ tc35815_probe(struct pci_dev *pdev, return -ENODEV; } -static int __init tc35815_probe1(struct pci_dev *pdev, unsigned int base_addr, unsigned int irq) +static int __devinit tc35815_probe1(struct pci_dev *pdev, unsigned int base_addr, unsigned int irq) { static unsigned version_printed = 0; int i; diff -prauN linux-2.6.0-test5/drivers/net/tlan.c wli-2.6.0-test5-bk12-25/drivers/net/tlan.c --- linux-2.6.0-test5/drivers/net/tlan.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/tlan.c 2003-09-25 19:16:00.000000000 -0700 @@ -169,6 +169,7 @@ #include #include #include +#include #include #include #include diff -prauN linux-2.6.0-test5/drivers/net/tokenring/Kconfig wli-2.6.0-test5-bk12-25/drivers/net/tokenring/Kconfig --- linux-2.6.0-test5/drivers/net/tokenring/Kconfig 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/tokenring/Kconfig 2003-09-25 19:16:00.000000000 -0700 @@ -2,13 +2,14 @@ # Token Ring driver configuration # -menu "Token Ring devices (depends on LLC=y)" +menu "Token Ring devices" depends on NETDEVICES # So far, we only have PCI, ISA, and MCA token ring devices config TR bool "Token Ring driver support" - depends on (PCI || ISA || MCA || CCW) && LLC=y + depends on (PCI || ISA || MCA || CCW) + select LLC help Token Ring is IBM's way of communication on a local network; the rest of the world uses Ethernet. To participate on a Token Ring @@ -30,10 +31,8 @@ config IBMTR Warning: this driver will almost definitely fail if more than one active Token Ring card is present. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called ibmtr. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the module will be + called ibmtr. config IBMOL tristate "IBM Olympic chipset PCI adapter support" @@ -46,10 +45,8 @@ config IBMOL If you have such an adapter, say Y and read the Token-Ring mini-HOWTO, available from . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called olympic. If you want to compile it - as a module, say M here and read . + To compile this driver as a module, choose M here: the module will be + called olympic. Also read or check the Linux Token Ring Project site for the latest information at @@ -64,10 +61,8 @@ config IBMLS If you have such an adapter, say Y and read the Token-Ring mini-HOWTO, available from . - This driver is also available as a modules ( = code which can be - inserted in and removed from the running kernel whenever you want). - The modules will be called lanstreamer. If you want to compile it - as a module, say M here and read . + To compile this driver as a module, choose M here: the module will be + called lanstreamer. config 3C359 tristate "3Com 3C359 Token Link Velocity XL adapter support" @@ -80,10 +75,8 @@ config 3C359 If you have such an adapter, say Y and read the Token-Ring mini-HOWTO, available from . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will will be called 3c359. If you want to compile it - as a module, say M here and read Documentation/modules.txt. + To compile this driver as a module, choose M here: the module will be + called 3c359. Also read the file or check the Linux Token Ring Project site for the latest information at @@ -109,10 +102,8 @@ config TMS380TR Also read the file or check . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called tms380tr. If you want to compile it - as a module, say M here and read . + To compile this driver as a module, choose M here: the module will be + called tms380tr. config TMSPCI tristate "Generic TMS380 PCI support" @@ -126,10 +117,8 @@ config TMSPCI - Thomas-Conrad TC4048 PCI 4/16 - 3Com Token Link Velocity - This driver is available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called tmspci. If you want to compile it - as a module, say M here and read . + To compile this driver as a module, choose M here: the module will be + called tmspci. config SKISA tristate "SysKonnect TR4/16 ISA support" @@ -140,10 +129,8 @@ config SKISA These cards are known to work: - SysKonnect TR4/16 ISA (SK-4190) - This driver is available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called skisa. If you want to compile it - as a module, say M here and read . + To compile this driver as a module, choose M here: the module will be + called skisa. config PROTEON tristate "Proteon ISA support" @@ -155,10 +142,8 @@ config PROTEON - Proteon 1392 - Proteon 1392 plus - This driver is available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called proteon. If you want to compile it - as a module, say M here and read . + To compile this driver as a module, choose M here: the module will be + called proteon. config ABYSS tristate "Madge Smart 16/4 PCI Mk2 support" @@ -167,10 +152,8 @@ config ABYSS This tms380 module supports the Madge Smart 16/4 PCI Mk2 cards (51-02). - This driver is available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called abyss. If you want to compile it - as a module, say M here and read . + To compile this driver as a module, choose M here: the module will be + called abyss. config MADGEMC tristate "Madge Smart 16/4 Ringnode MicroChannel" @@ -179,10 +162,8 @@ config MADGEMC This tms380 module supports the Madge Smart 16/4 MC16 and MC32 MicroChannel adapters. - This driver is available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called madgemc. If you want to compile it - as a module, say M here and read . + To compile this driver as a module, choose M here: the module will be + called madgemc. config SMCTR tristate "SMC ISA/MCA adapter support" @@ -197,10 +178,8 @@ config SMCTR and the file . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called smctr. If you want to compile it - as a module, say M here and read . + To compile this driver as a module, choose M here: the module will be + called smctr. endmenu diff -prauN linux-2.6.0-test5/drivers/net/tokenring/abyss.c wli-2.6.0-test5-bk12-25/drivers/net/tokenring/abyss.c --- linux-2.6.0-test5/drivers/net/tokenring/abyss.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/tokenring/abyss.c 2003-09-25 19:16:00.000000000 -0700 @@ -40,7 +40,7 @@ #include "tms380tr.h" #include "abyss.h" /* Madge-specific constants */ -static char version[] __initdata = +static char version[] __devinitdata = "abyss.c: v1.02 23/11/2000 by Adam Fritzler\n"; #define ABYSS_IO_EXTENT 64 @@ -92,7 +92,7 @@ static void abyss_sifwritew(struct net_d outw(val, dev->base_addr + reg); } -static int __init abyss_attach(struct pci_dev *pdev, const struct pci_device_id *ent) +static int __devinit abyss_attach(struct pci_dev *pdev, const struct pci_device_id *ent) { static int versionprinted; struct net_device *dev; diff -prauN linux-2.6.0-test5/drivers/net/tokenring/lanstreamer.h wli-2.6.0-test5-bk12-25/drivers/net/tokenring/lanstreamer.h --- linux-2.6.0-test5/drivers/net/tokenring/lanstreamer.h 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/tokenring/lanstreamer.h 2003-09-25 19:16:00.000000000 -0700 @@ -60,6 +60,8 @@ * */ +#include + #if STREAMER_IOCTL && (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)) #include #define IOCTL_PRINT_RX_BUFS SIOCDEVPRIVATE diff -prauN linux-2.6.0-test5/drivers/net/tokenring/olympic.c wli-2.6.0-test5-bk12-25/drivers/net/tokenring/olympic.c --- linux-2.6.0-test5/drivers/net/tokenring/olympic.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/tokenring/olympic.c 2003-09-25 19:16:00.000000000 -0700 @@ -210,14 +210,13 @@ static int __devinit olympic_probe(struc pci_set_master(pdev); if ((i = pci_request_regions(pdev,"olympic"))) { - return i ; - } ; + goto op_disable_dev; + } dev = alloc_trdev(sizeof(struct olympic_private)) ; - if (!dev) { - pci_release_regions(pdev) ; - return -ENOMEM ; + i = -ENOMEM; + goto op_free_dev; } olympic_priv = dev->priv ; @@ -231,10 +230,12 @@ static int __devinit olympic_probe(struc dev->base_addr=pci_resource_start(pdev, 0); dev->init=NULL; /* Must be NULL otherwise we get called twice */ olympic_priv->olympic_card_name = pci_name(pdev); + olympic_priv->pdev = pdev; olympic_priv->olympic_mmio = ioremap(pci_resource_start(pdev,1),256); olympic_priv->olympic_lap = ioremap(pci_resource_start(pdev,2),2048); -#warning check ioremap return value - olympic_priv->pdev = pdev ; + if (!olympic_priv->olympic_mmio || !olympic_priv->olympic_lap) { + goto op_free_iomap; + } if ((pkt_buf_sz[card_no] < 100) || (pkt_buf_sz[card_no] > 18000) ) olympic_priv->pkt_buf_sz = PKT_BUF_SZ ; @@ -246,12 +247,8 @@ static int __devinit olympic_probe(struc olympic_priv->olympic_message_level = message_level[card_no] ; olympic_priv->olympic_network_monitor = network_monitor[card_no]; - if((i = olympic_init(dev))) { - iounmap(olympic_priv->olympic_mmio) ; - iounmap(olympic_priv->olympic_lap) ; - kfree(dev) ; - pci_release_regions(pdev) ; - return i ; + if ((i = olympic_init(dev))) { + goto op_free_iomap; } dev->open=&olympic_open; @@ -275,6 +272,20 @@ static int __devinit olympic_probe(struc printk("Olympic: Network Monitor information: /proc/%s\n",proc_name); } return 0 ; + +op_free_iomap: + if (olympic_priv->olympic_mmio) + iounmap(olympic_priv->olympic_mmio); + if (olympic_priv->olympic_lap) + iounmap(olympic_priv->olympic_lap); + +op_free_dev: + free_netdev(dev); + pci_release_regions(pdev); + +op_disable_dev: + pci_disable_device(pdev); + return i; } static int __devinit olympic_init(struct net_device *dev) diff -prauN linux-2.6.0-test5/drivers/net/tokenring/proteon.c wli-2.6.0-test5-bk12-25/drivers/net/tokenring/proteon.c --- linux-2.6.0-test5/drivers/net/tokenring/proteon.c 2003-09-08 12:50:32.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/tokenring/proteon.c 2003-09-25 19:16:00.000000000 -0700 @@ -410,7 +410,7 @@ int init_module(void) } } else { for(i = 0; num < ISATR_MAX_ADAPTERS && portlist[i]; i++) { - if (setup_card(portlist[i], irq[i], dma[i])) + if (setup_card(portlist[i], irq[num], dma[num]) == 0) num++; } } diff -prauN linux-2.6.0-test5/drivers/net/tokenring/skisa.c wli-2.6.0-test5-bk12-25/drivers/net/tokenring/skisa.c --- linux-2.6.0-test5/drivers/net/tokenring/skisa.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/tokenring/skisa.c 2003-09-25 19:16:00.000000000 -0700 @@ -423,7 +423,7 @@ int init_module(void) } } else { for(i = 0; num < ISATR_MAX_ADAPTERS && portlist[i]; i++) { - if (setup_card(portlist[i], irq[i], dma[i])) + if (setup_card(portlist[i], irq[num], dma[num]) == 0) num++; } } diff -prauN linux-2.6.0-test5/drivers/net/tokenring/smctr.c wli-2.6.0-test5-bk12-25/drivers/net/tokenring/smctr.c --- linux-2.6.0-test5/drivers/net/tokenring/smctr.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/tokenring/smctr.c 2003-09-25 19:16:00.000000000 -0700 @@ -29,7 +29,6 @@ */ #include -#include #include #include #include diff -prauN linux-2.6.0-test5/drivers/net/tokenring/tms380tr.c wli-2.6.0-test5-bk12-25/drivers/net/tokenring/tms380tr.c --- linux-2.6.0-test5/drivers/net/tokenring/tms380tr.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/tokenring/tms380tr.c 2003-09-25 19:16:00.000000000 -0700 @@ -77,7 +77,6 @@ static const char version[] = "tms380tr. #endif #include -#include #include #include #include diff -prauN linux-2.6.0-test5/drivers/net/tokenring/tmspci.c wli-2.6.0-test5-bk12-25/drivers/net/tokenring/tmspci.c --- linux-2.6.0-test5/drivers/net/tokenring/tmspci.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/tokenring/tmspci.c 2003-09-25 19:16:01.000000000 -0700 @@ -40,7 +40,7 @@ #include "tms380tr.h" -static char version[] __initdata = +static char version[] __devinitdata = "tmspci.c: v1.02 23/11/2000 by Adam Fritzler\n"; #define TMS_PCI_IO_EXTENT 32 @@ -91,7 +91,7 @@ static void tms_pci_sifwritew(struct net outw(val, dev->base_addr + reg); } -static int __init tms_pci_attach(struct pci_dev *pdev, const struct pci_device_id *ent) +static int __devinit tms_pci_attach(struct pci_dev *pdev, const struct pci_device_id *ent) { static int versionprinted; struct net_device *dev; diff -prauN linux-2.6.0-test5/drivers/net/tulip/de2104x.c wli-2.6.0-test5-bk12-25/drivers/net/tulip/de2104x.c --- linux-2.6.0-test5/drivers/net/tulip/de2104x.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/tulip/de2104x.c 2003-09-25 19:16:01.000000000 -0700 @@ -50,7 +50,7 @@ #include /* These identify the driver base version and may not be removed. */ -static char version[] __initdata = +static char version[] = KERN_INFO DRV_NAME " PCI Ethernet driver v" DRV_VERSION " (" DRV_RELDATE ")\n"; MODULE_AUTHOR("Jeff Garzik "); @@ -1932,7 +1932,7 @@ bad_srom: goto fill_defaults; } -static int __init de_init_one (struct pci_dev *pdev, +static int __devinit de_init_one (struct pci_dev *pdev, const struct pci_device_id *ent) { struct net_device *dev; diff -prauN linux-2.6.0-test5/drivers/net/tulip/de4x5.c wli-2.6.0-test5-bk12-25/drivers/net/tulip/de4x5.c --- linux-2.6.0-test5/drivers/net/tulip/de4x5.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/tulip/de4x5.c 2003-09-25 19:16:01.000000000 -0700 @@ -480,7 +480,7 @@ #include "de4x5.h" -static char version[] __initdata = "de4x5.c:V0.546 2001/02/22 davies@maniac.ultranet.com\n"; +static char version[] __devinitdata = "de4x5.c:V0.546 2001/02/22 davies@maniac.ultranet.com\n"; #define c_char const char #define TWIDDLE(a) (u_short)le16_to_cpu(get_unaligned((u_short *)(a))) @@ -1082,7 +1082,7 @@ static int (*dc_infoblock[])(struct net_ } -static int __init +static int __devinit de4x5_hw_init(struct net_device *dev, u_long iobase, struct device *gendev) { char name[DE4X5_NAME_LENGTH + 1]; @@ -2132,7 +2132,7 @@ static struct eisa_driver de4x5_eisa_dri ** DECchips, we can find the base SROM irrespective of the BIOS scan direction. ** For single port cards this is a time waster... */ -static void __init +static void __devinit srom_search(struct net_device *dev, struct pci_dev *pdev) { u_char pb; @@ -2213,7 +2213,7 @@ srom_search(struct net_device *dev, stru ** kernels use the V0.535[n] drivers. */ -static int __init de4x5_pci_probe (struct pci_dev *pdev, +static int __devinit de4x5_pci_probe (struct pci_dev *pdev, const struct pci_device_id *ent) { u_char pb, pbus = 0, dev_num, dnum = 0, timer; diff -prauN linux-2.6.0-test5/drivers/net/wan/Kconfig wli-2.6.0-test5-bk12-25/drivers/net/wan/Kconfig --- linux-2.6.0-test5/drivers/net/wan/Kconfig 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wan/Kconfig 2003-09-25 19:16:01.000000000 -0700 @@ -52,10 +52,7 @@ config COSA for details about the cards and the driver itself. - The driver will be compiled as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called cosa. For general information about - modules read . + The driver will be compiled as a module: the module will be called cosa. # # COMX drivers @@ -76,8 +73,8 @@ config COMX You must say Y to "/proc file system support" (CONFIG_PROC_FS) to use this driver. - If you want to compile this as a module, say M and read - . The module will be called comx. + To compile this driver as a module, choose M here: the + module will be called comx. config COMX_HW_COMX tristate "Support for COMX/CMX/HiCOMX boards" @@ -89,9 +86,8 @@ config COMX_HW_COMX You will need additional firmware to use these cards, which are downloadable from . - If you want to compile this as a module, say M and read - . The module will be called - comx-hw-comx. + To compile this driver as a module, choose M here: the + module will be called comx-hw-comx. config COMX_HW_LOCOMX tristate "Support for LoCOMX board" @@ -100,9 +96,8 @@ config COMX_HW_LOCOMX Hardware driver for the 'LoCOMX' board from the MultiGate family. Say Y if you have a board like this. - If you want to compile this as a module, say M and read - . The module will be called - comx-hw-locomx. + To compile this driver as a module, choose M here: the + module will be called comx-hw-locomx. config COMX_HW_MIXCOM tristate "Support for MixCOM board" @@ -118,9 +113,8 @@ config COMX_HW_MIXCOM driver for the flash ROM of this card is available separately on . - If you want to compile this as a module, say M and read - . The module will be called - comx-hw-mixcom. + To compile this driver as a module, choose M here: the + module will be called comx-hw-mixcom. config COMX_HW_MUNICH tristate "Support for MUNICH based boards: SliceCOM, PCICOM (WelCOM)" @@ -129,10 +123,8 @@ config COMX_HW_MUNICH Hardware driver for the 'SliceCOM' (channelized E1) and 'PciCOM' boards (X21) from the MultiGate family. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called comx-hw-munich. If you want to compile it - as a module, say M here and read Documentation/modules.txt. + To compile this driver as a module, choose M here: the + module will be called comx-hw-munich. Read linux/Documentation/networking/slicecom.txt for help on configuring and using SliceCOM interfaces. Further info on these cards @@ -146,8 +138,7 @@ config COMX_PROTO_PPP boards. Say Y if you want to use either protocol on your MultiGate boards. - If you want to compile this as a module, say M and read - . The module will be called + To compile this as a module, choose M here: the module will be called comx-proto-ppp. config COMX_PROTO_LAPB @@ -157,8 +148,7 @@ config COMX_PROTO_LAPB LAPB protocol driver for all MultiGate boards. Say Y if you want to use this protocol on your MultiGate boards. - If you want to compile this as a module, say M and read - . The module will be called + To compile this as a module, choose M here: the module will be called comx-proto-lapb. config COMX_PROTO_FR @@ -168,8 +158,7 @@ config COMX_PROTO_FR Frame Relay protocol driver for all MultiGate boards. Say Y if you want to use this protocol on your MultiGate boards. - If you want to compile this as a module, say M and read - . The module will be called + To compile this as a module, choose M here: the module will be called comx-proto-fr. config DSCC4 @@ -181,10 +170,8 @@ config DSCC4 ports card. Take a look at for further informations about the driver and his configuration. - The driver will be compiled as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called dscc4. For general information about - modules read . + To compile this driver as a module, choose M here: the module + will be called dscc4. config DSCC4_PCISYNC bool "Etinc PCISYNC features" @@ -237,10 +224,8 @@ config LANMEDIA To change setting such as syncPPP vs cisco HDLC or clock source you will need lmcctl. It is available at . - This code is also available as a module called lmc ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this driver as a module, choose M here: the module + will be called lmc. # There is no way to detect a Sealevel board. Force it modular config SEALEVEL_4021 @@ -276,9 +261,7 @@ config HDLC Generic HDLC driver currently supports raw HDLC, Cisco HDLC, Frame Relay, synchronous Point-to-Point Protocol (PPP) and X.25. - If you want to compile the driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module + To compile this driver as a module, choose M here: the module will be called hdlc. If unsure, say N here. @@ -342,6 +325,30 @@ config HDLC_X25 comment "X.25/LAPB support is disabled" depends on WAN && HDLC && (LAPB!=m || HDLC!=m) && LAPB!=y +config WANXL + tristate "SBE Inc. wanXL support" + depends on HDLC && PCI + help + This driver is for wanXL PCI cards made by SBE Inc. If you have + such a card, say Y here and see . + + If you want to compile the driver as a module ( = code which can be + inserted in and removed from the running kernel whenever you want), + say M here and read . The module + will be called wanxl. + + If unsure, say N here. + +config WANXL_BUILD_FIRMWARE + bool "rebuild wanXL firmware" + depends on WANXL + help + This option allows you to rebuild firmware run by the QUICC + processor. It requires as68k, ld68k and hexdump programs. + You should never need this option. + + If unsure, say N here. + config PC300 tristate "Cyclades-PC300 support (RS-232/V.35, X.21, T1/E1 boards)" depends on HDLC && PCI @@ -353,9 +360,7 @@ config PC300 option below this one and read the file README.mlppp provided by PC300 package. - 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 Documentation/modules.txt. The module will be + To compile this as a module, choose M here: the module will be called pc300. If you haven't heard about it, it's safe to say N. @@ -383,9 +388,7 @@ config N2 Note that N2csu and N2dds cards are not supported by this driver. - If you want to compile the driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module + To compile this driver as a module, choose M here: the module will be called n2. If unsure, say N here. @@ -398,9 +401,7 @@ config C101 Technologies Co., Ltd. If you have such a card, say Y here and see - If you want to compile the driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module + To compile this driver as a module, choose M here: the module will be called c101. If unsure, say N here. @@ -415,13 +416,11 @@ config FARSYNC 8Mb/s (128K on V.24) using synchronous PPP, Cisco HDLC, raw HDLC, Frame Relay or X.25/LAPB. - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want) - say M here and read . - The module will be called farsync and if you want the module to be - automatically loaded when the interface is referenced then you - should add "alias hdlcX farsync" to /etc/modules.conf for each - interface, where X is 0, 1, 2, ... + To compile this driver as a module, choose M here: the module will be + called farsync. If you want the module to be automatically loaded + when the interface is referenced then you should add + "alias hdlcX farsync" to /etc/modules.conf for each interface, where + X is 0, 1, 2, ... config DLCI tristate "Frame relay DLCI support" @@ -439,10 +438,8 @@ config DLCI net-tools package as explained in . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called dlci. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the module will be + called dlci. config DLCI_COUNT int "Max open DLCI" @@ -472,10 +469,8 @@ config SDLA only frame relay is supported by the driver at this time. Please read . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called sdla. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the module will be + called sdla. # Wan router core. config WAN_ROUTER_DRIVERS @@ -522,10 +517,8 @@ config VENDOR_SANGOMA . The next questions will ask you about the protocols you want the driver to support. - The driver will be compiled as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called wanpipe. For general information about - modules read . + To compile this driver as a module, choose M here: the module will + be called wanpipe. config WANPIPE_CHDLC bool "WANPIPE Cisco HDLC support" @@ -614,10 +607,8 @@ config CYCLADES_SYNC additional details, I hope to have documentation available as soon as possible. (Cyclades Brazil is writing the Documentation). - The driver will be compiled as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called cyclomx. For general information about - modules read . + To compile this driver as a module, choose M here: the module will be + called cyclomx. config CYCLOMX_X25 bool "Cyclom 2X X.25 support (EXPERIMENTAL)" @@ -640,9 +631,7 @@ config LAPBETHER need to say Y or M to the driver for your Ethernet card as well as to "LAPB Data Link Driver". - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module + To compile this driver as a module, choose M here: the module will be called lapbether. If unsure, say N. config X25_ASY @@ -655,9 +644,7 @@ config X25_ASY currently comply with the asynchronous HDLS framing protocols in CCITT recommendation X.25. - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module + To compile this driver as a module, choose M here: the module will be called x25_asy. If unsure, say N. config SBNI diff -prauN linux-2.6.0-test5/drivers/net/wan/Makefile wli-2.6.0-test5-bk12-25/drivers/net/wan/Makefile --- linux-2.6.0-test5/drivers/net/wan/Makefile 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wan/Makefile 2003-09-25 19:16:01.000000000 -0700 @@ -66,3 +66,25 @@ ifeq ($(CONFIG_HDLC_PPP),y) endif obj-$(CONFIG_N2) += n2.o obj-$(CONFIG_C101) += c101.o +obj-$(CONFIG_WANXL) += wanxl.o + +ifeq ($(CONFIG_WANXL_BUILD_FIRMWARE),y) +ifeq ($(ARCH),m68k) + AS68K = $(AS) + LD68K = $(LD) +else + AS68K = as68k + LD68K = ld68k +endif + +quiet_cmd_build_wanxlfw = BLD FW $@ + cmd_build_wanxlfw = \ + $(CPP) -Wp,-MD,$(depfile) -Iinclude $(obj)/wanxlfw.S | $(AS68K) -m68360 -o $(obj)/wanxlfw.o; \ + $(LD68K) --oformat binary -Ttext 0x1000 $(obj)/wanxlfw.o -o $(obj)/wanxlfw.bin; \ + hexdump -ve '"\n" 16/1 "0x%02X,"' $(obj)/wanxlfw.bin | sed 's/0x ,//g;1s/^/static u8 firmware[]={/;$$s/,$$/\n};\n/' >$(obj)/wanxlfw.inc; \ + rm -f $(obj)/wanxlfw.bin $(obj)/wanxlfw.o + +$(obj)/wanxlfw.inc: $(obj)/wanxlfw.S + $(call if_changed_dep,build_wanxlfw) +targets += wanxlfw.inc +endif diff -prauN linux-2.6.0-test5/drivers/net/wan/comx-hw-comx.c wli-2.6.0-test5-bk12-25/drivers/net/wan/comx-hw-comx.c --- linux-2.6.0-test5/drivers/net/wan/comx-hw-comx.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wan/comx-hw-comx.c 2003-09-25 19:16:01.000000000 -0700 @@ -51,7 +51,6 @@ #define VERSION "0.87" #include -#include #include #include #include diff -prauN linux-2.6.0-test5/drivers/net/wan/comx-hw-locomx.c wli-2.6.0-test5-bk12-25/drivers/net/wan/comx-hw-locomx.c --- linux-2.6.0-test5/drivers/net/wan/comx-hw-locomx.c 2003-09-08 12:50:09.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wan/comx-hw-locomx.c 2003-09-25 19:16:01.000000000 -0700 @@ -38,7 +38,6 @@ #include #include -#include #include #include #include diff -prauN linux-2.6.0-test5/drivers/net/wan/comx-hw-mixcom.c wli-2.6.0-test5-bk12-25/drivers/net/wan/comx-hw-mixcom.c --- linux-2.6.0-test5/drivers/net/wan/comx-hw-mixcom.c 2003-09-08 12:50:33.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wan/comx-hw-mixcom.c 2003-09-25 19:16:01.000000000 -0700 @@ -41,7 +41,6 @@ #include #include -#include #include #include #include diff -prauN linux-2.6.0-test5/drivers/net/wan/comx-hw-munich.c wli-2.6.0-test5-bk12-25/drivers/net/wan/comx-hw-munich.c --- linux-2.6.0-test5/drivers/net/wan/comx-hw-munich.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wan/comx-hw-munich.c 2003-09-25 19:16:01.000000000 -0700 @@ -30,7 +30,6 @@ #include #include #include -#include #include #include #include diff -prauN linux-2.6.0-test5/drivers/net/wan/comx-proto-fr.c wli-2.6.0-test5-bk12-25/drivers/net/wan/comx-proto-fr.c --- linux-2.6.0-test5/drivers/net/wan/comx-proto-fr.c 2003-09-08 12:49:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wan/comx-proto-fr.c 2003-09-25 19:16:01.000000000 -0700 @@ -37,7 +37,6 @@ #define VERSION "0.73" #include -#include #include #include #include diff -prauN linux-2.6.0-test5/drivers/net/wan/comx-proto-lapb.c wli-2.6.0-test5-bk12-25/drivers/net/wan/comx-proto-lapb.c --- linux-2.6.0-test5/drivers/net/wan/comx-proto-lapb.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wan/comx-proto-lapb.c 2003-09-25 19:16:01.000000000 -0700 @@ -24,7 +24,6 @@ #define VERSION "0.80" #include -#include #include #include #include diff -prauN linux-2.6.0-test5/drivers/net/wan/comx-proto-ppp.c wli-2.6.0-test5-bk12-25/drivers/net/wan/comx-proto-ppp.c --- linux-2.6.0-test5/drivers/net/wan/comx-proto-ppp.c 2003-09-08 12:50:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wan/comx-proto-ppp.c 2003-09-25 19:16:01.000000000 -0700 @@ -34,7 +34,6 @@ #define VERSION "0.23" #include -#include #include #include #include diff -prauN linux-2.6.0-test5/drivers/net/wan/comx.c wli-2.6.0-test5-bk12-25/drivers/net/wan/comx.c --- linux-2.6.0-test5/drivers/net/wan/comx.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wan/comx.c 2003-09-25 19:16:01.000000000 -0700 @@ -55,7 +55,6 @@ #include #include -#include #include #include diff -prauN linux-2.6.0-test5/drivers/net/wan/cosa.c wli-2.6.0-test5-bk12-25/drivers/net/wan/cosa.c --- linux-2.6.0-test5/drivers/net/wan/cosa.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wan/cosa.c 2003-09-25 19:16:01.000000000 -0700 @@ -326,11 +326,11 @@ static struct file_operations cosa_fops /* Ioctls */ static int cosa_start(struct cosa_data *cosa, int address); static int cosa_reset(struct cosa_data *cosa); -static int cosa_download(struct cosa_data *cosa, struct cosa_download *d); -static int cosa_readmem(struct cosa_data *cosa, struct cosa_download *d); +static int cosa_download(struct cosa_data *cosa, unsigned long a); +static int cosa_readmem(struct cosa_data *cosa, unsigned long a); /* COSA/SRP ROM monitor */ -static int download(struct cosa_data *cosa, char *data, int addr, int len); +static int download(struct cosa_data *cosa, const char *data, int addr, int len); static int startmicrocode(struct cosa_data *cosa, int address); static int readmem(struct cosa_data *cosa, char *data, int addr, int len); static int cosa_reset_and_read_id(struct cosa_data *cosa, char *id); @@ -1033,11 +1033,10 @@ static inline int cosa_reset(struct cosa } /* High-level function to download data into COSA memory. Calls download() */ -static inline int cosa_download(struct cosa_data *cosa, struct cosa_download *d) +static inline int cosa_download(struct cosa_data *cosa, unsigned long arg) { + struct cosa_download d; int i; - int addr, len; - char *code; if (cosa->usage > 1) printk(KERN_INFO "%s: WARNING: download of microcode requested with cosa->usage > 1 (%d). Odd things may happen.\n", @@ -1047,38 +1046,36 @@ static inline int cosa_download(struct c cosa->name, cosa->firmware_status); return -EPERM; } - - if (verify_area(VERIFY_READ, d, sizeof(*d)) || - __get_user(addr, &(d->addr)) || - __get_user(len, &(d->len)) || - __get_user(code, &(d->code))) + + if (copy_from_user(&d, (void __user *) arg, sizeof(d))) return -EFAULT; - if (addr < 0 || addr > COSA_MAX_FIRMWARE_SIZE) + if (d.addr < 0 || d.addr > COSA_MAX_FIRMWARE_SIZE) return -EINVAL; - if (len < 0 || len > COSA_MAX_FIRMWARE_SIZE) + if (d.len < 0 || d.len > COSA_MAX_FIRMWARE_SIZE) return -EINVAL; + /* If something fails, force the user to reset the card */ cosa->firmware_status &= ~(COSA_FW_RESET|COSA_FW_DOWNLOAD); - if ((i=download(cosa, code, len, addr)) < 0) { + i = download(cosa, d.code, d.len, d.addr); + if (i < 0) { printk(KERN_NOTICE "cosa%d: microcode download failed: %d\n", cosa->num, i); return -EIO; } printk(KERN_INFO "cosa%d: downloading microcode - 0x%04x bytes at 0x%04x\n", - cosa->num, len, addr); + cosa->num, d.len, d.addr); cosa->firmware_status |= COSA_FW_RESET|COSA_FW_DOWNLOAD; return 0; } /* High-level function to read COSA memory. Calls readmem() */ -static inline int cosa_readmem(struct cosa_data *cosa, struct cosa_download *d) +static inline int cosa_readmem(struct cosa_data *cosa, unsigned long arg) { + struct cosa_download d; int i; - int addr, len; - char *code; if (cosa->usage > 1) printk(KERN_INFO "cosa%d: WARNING: readmem requested with " @@ -1090,22 +1087,20 @@ static inline int cosa_readmem(struct co return -EPERM; } - if (verify_area(VERIFY_READ, d, sizeof(*d)) || - __get_user(addr, &(d->addr)) || - __get_user(len, &(d->len)) || - __get_user(code, &(d->code))) + if (copy_from_user(&d, (void __user *) arg, sizeof(d))) return -EFAULT; /* If something fails, force the user to reset the card */ cosa->firmware_status &= ~COSA_FW_RESET; - if ((i=readmem(cosa, code, len, addr)) < 0) { + i = readmem(cosa, d.code, d.len, d.addr); + if (i < 0) { printk(KERN_NOTICE "cosa%d: reading memory failed: %d\n", cosa->num, i); return -EIO; } printk(KERN_INFO "cosa%d: reading card memory - 0x%04x bytes at 0x%04x\n", - cosa->num, len, addr); + cosa->num, d.len, d.addr); cosa->firmware_status |= COSA_FW_RESET; return 0; } @@ -1171,11 +1166,12 @@ static int cosa_ioctl_common(struct cosa case COSAIODOWNLD: /* Download the firmware */ if (!capable(CAP_SYS_RAWIO)) return -EACCES; - return cosa_download(cosa, (struct cosa_download *)arg); + + return cosa_download(cosa, arg); case COSAIORMEM: if (!capable(CAP_SYS_RAWIO)) return -EACCES; - return cosa_readmem(cosa, (struct cosa_download *)arg); + return cosa_readmem(cosa, arg); case COSAIORTYPE: return cosa_gettype(cosa, (char *)arg); case COSAIORIDSTR: @@ -1405,7 +1401,7 @@ static int cosa_dma_able(struct channel_ * by a single space. Monitor has to reply with a space. Now the download * begins. After the download monitor replies with "\r\n." (CR LF dot). */ -static int download(struct cosa_data *cosa, char *microcode, int length, int address) +static int download(struct cosa_data *cosa, const char *microcode, int length, int address) { int i; diff -prauN linux-2.6.0-test5/drivers/net/wan/cosa.h wli-2.6.0-test5-bk12-25/drivers/net/wan/cosa.h --- linux-2.6.0-test5/drivers/net/wan/cosa.h 2003-09-08 12:50:04.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wan/cosa.h 2003-09-25 19:16:01.000000000 -0700 @@ -73,19 +73,19 @@ struct cosa_download { #define COSAIORSET _IO('C',0xf0) /* Start microcode at given address */ -#define COSAIOSTRT _IOW('C',0xf1,sizeof(int)) +#define COSAIOSTRT _IOW('C',0xf1, int) /* Read the block from the device memory */ -#define COSAIORMEM _IOR('C',0xf2,sizeof(struct cosa_download *)) +#define COSAIORMEM _IOWR('C',0xf2, struct cosa_download) /* Write the block to the device memory (i.e. download the microcode) */ -#define COSAIODOWNLD _IOW('C',0xf2,sizeof(struct cosa_download *)) +#define COSAIODOWNLD _IOW('C',0xf2, struct cosa_download) /* Read the device type (one of "srp", "cosa", and "cosa8" for now) */ -#define COSAIORTYPE _IOR('C',0xf3,sizeof(char *)) +#define COSAIORTYPE _IOR('C',0xf3, char *) /* Read the device identification string */ -#define COSAIORIDSTR _IOR('C',0xf4,sizeof(char *)) +#define COSAIORIDSTR _IOR('C',0xf4, char *) /* Maximum length of the identification string. */ #define COSA_MAX_ID_STRING 128 @@ -100,7 +100,7 @@ struct cosa_download { #define COSAIONRCHANS _IO('C',0xf8) /* Set the driver for the bus-master operations */ -#define COSAIOBMSET _IOW('C', 0xf9, sizeof(unsigned short)) +#define COSAIOBMSET _IOW('C', 0xf9, unsigned short) #define COSA_BM_OFF 0 /* Bus-mastering off - use ISA DMA (default) */ #define COSA_BM_ON 1 /* Bus-mastering on - faster but untested */ diff -prauN linux-2.6.0-test5/drivers/net/wan/cycx_x25.c wli-2.6.0-test5-bk12-25/drivers/net/wan/cycx_x25.c --- linux-2.6.0-test5/drivers/net/wan/cycx_x25.c 2003-09-08 12:49:54.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wan/cycx_x25.c 2003-09-25 19:16:01.000000000 -0700 @@ -78,7 +78,6 @@ #define CYCLOMX_X25_DEBUG 1 -#include #include /* return codes */ #include /* ARPHRD_HWX25 */ #include /* printk(), and other useful stuff */ diff -prauN linux-2.6.0-test5/drivers/net/wan/dlci.c wli-2.6.0-test5-bk12-25/drivers/net/wan/dlci.c --- linux-2.6.0-test5/drivers/net/wan/dlci.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wan/dlci.c 2003-09-25 19:16:01.000000000 -0700 @@ -40,7 +40,6 @@ #include #include #include -#include #include #include #include @@ -58,64 +57,9 @@ static const char version[] = "DLCI driver v0.35, 4 Jan 1997, mike.mclagan@linux.org"; static LIST_HEAD(dlci_devs); -static spinlock_t dlci_dev_lock = SPIN_LOCK_UNLOCKED; -static char *basename[16]; static void dlci_setup(struct net_device *); -/* allow FRAD's to register their name as a valid FRAD */ -int register_frad(const char *name) -{ - int i; - - if (!name) - return(-EINVAL); - - for (i=0;idevname); if (!slave) - return(-ENODEV); - - if (slave->type != ARPHRD_FRAD) { - dev_put(slave); - return(-EINVAL); - } + return -ENODEV; - /* check for registration */ - for (i=0;idevname, basename[i], strlen(basename[i])) == 0) && - (strlen(dlci->devname) > strlen(basename[i]))) - break; - - if (i == sizeof(basename) / sizeof(char *)) { - dev_put(slave); - return(-EINVAL); - } + if (slave->type != ARPHRD_FRAD || slave->priv == NULL) + goto err1; /* create device name */ master = alloc_netdev( sizeof(struct dlci_local), "dlci%d", dlci_setup); if (!master) { - dev_put(slave); - return(-ENOMEM); + err = -ENOMEM; + goto err1; } - err = register_netdev(master); - if (err < 0) { - dev_put(slave); - kfree(master); - return(err); + /* make sure same slave not already registered */ + rtnl_lock(); + list_for_each_entry(dlp, &dlci_devs, list) { + if (dlp->slave == slave) { + err = -EBUSY; + goto err2; + } } + err = dev_alloc_name(master, master->name); + if (err < 0) + goto err2; + *(short *)(master->dev_addr) = dlci->dlci; dlp = (struct dlci_local *) master->priv; @@ -461,22 +397,27 @@ static int dlci_add(struct dlci_add *dlc dlp->master = master; flp = slave->priv; - err = flp ? (*flp->assoc)(slave, master) : -EINVAL; + err = (*flp->assoc)(slave, master); if (err < 0) - { - unregister_netdev(master); - dev_put(slave); - free_netdev(master); - return(err); - } + goto err2; + + err = register_netdevice(master); + if (err < 0) + goto err2; strcpy(dlci->devname, master->name); - spin_lock_bh(&dlci_dev_lock); list_add(&dlp->list, &dlci_devs); - spin_unlock_bh(&dlci_dev_lock); + rtnl_unlock(); return(0); + + err2: + rtnl_unlock(); + kfree(master); + err1: + dev_put(slave); + return(err); } static int dlci_del(struct dlci_add *dlci) @@ -499,21 +440,18 @@ static int dlci_del(struct dlci_add *dlc slave = dlp->slave; flp = slave->priv; + rtnl_lock(); err = (*flp->deassoc)(slave, master); - if (err) - return(err); - + if (!err) { + list_del(&dlp->list); - spin_lock_bh(&dlci_dev_lock); - list_del(&dlp->list); - spin_unlock_bh(&dlci_dev_lock); + unregister_netdevice(master); - unregister_netdev(master); - - dev_put(slave); - free_netdev(master); + dev_put(slave); + } + rtnl_unlock(); - return(0); + return(err); } static int dlci_ioctl(unsigned int cmd, void *arg) @@ -560,6 +498,7 @@ static void dlci_setup(struct net_device dev->hard_header = dlci_header; dev->get_stats = dlci_get_stats; dev->change_mtu = dlci_change_mtu; + dev->destructor = free_netdev; dlp->receive = dlci_receive; @@ -569,31 +508,54 @@ static void dlci_setup(struct net_device } -int __init init_dlci(void) +/* if slave is unregistering, then cleanup master */ +static int dlci_dev_event(struct notifier_block *unused, + unsigned long event, void *ptr) +{ + struct net_device *dev = (struct net_device *) ptr; + + if (event == NETDEV_UNREGISTER) { + struct dlci_local *dlp; + + list_for_each_entry(dlp, &dlci_devs, list) { + if (dlp->slave == dev) { + list_del(&dlp->list); + unregister_netdevice(dlp->master); + dev_put(dlp->slave); + break; + } + } + } + return NOTIFY_DONE; +} + +static struct notifier_block dlci_notifier = { + .notifier_call = dlci_dev_event, +}; + +static int __init init_dlci(void) { - int i; dlci_ioctl_set(dlci_ioctl); + register_netdevice_notifier(&dlci_notifier); printk("%s.\n", version); - for(i=0;imaster); + unregister_netdevice(dlp->master); dev_put(dlp->slave); - free_netdev(dlp->master); } - + rtnl_unlock(); } module_init(init_dlci); diff -prauN linux-2.6.0-test5/drivers/net/wan/dscc4.c wli-2.6.0-test5-bk12-25/drivers/net/wan/dscc4.c --- linux-2.6.0-test5/drivers/net/wan/dscc4.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wan/dscc4.c 2003-09-25 19:16:01.000000000 -0700 @@ -80,7 +80,6 @@ * - misc crapectomy. */ -#include #include #include #include @@ -693,7 +692,7 @@ static void dscc4_free1(struct pci_dev * kfree(ppriv); } -static int __init dscc4_init_one(struct pci_dev *pdev, +static int __devinit dscc4_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) { struct dscc4_pci_priv *priv; diff -prauN linux-2.6.0-test5/drivers/net/wan/lmc/lmc_ver.h wli-2.6.0-test5-bk12-25/drivers/net/wan/lmc/lmc_ver.h --- linux-2.6.0-test5/drivers/net/wan/lmc/lmc_ver.h 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wan/lmc/lmc_ver.h 2003-09-25 19:16:01.000000000 -0700 @@ -1,3 +1,5 @@ +#include + #ifndef _IF_LMC_LINUXVER_ #define _IF_LMC_LINUXVER_ diff -prauN linux-2.6.0-test5/drivers/net/wan/pc300_drv.c wli-2.6.0-test5-bk12-25/drivers/net/wan/pc300_drv.c --- linux-2.6.0-test5/drivers/net/wan/pc300_drv.c 2003-09-08 12:50:32.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wan/pc300_drv.c 2003-09-25 19:16:01.000000000 -0700 @@ -227,7 +227,6 @@ static char rcsid[] = #include #include #include -#include #include #include diff -prauN linux-2.6.0-test5/drivers/net/wan/pc300_tty.c wli-2.6.0-test5-bk12-25/drivers/net/wan/pc300_tty.c --- linux-2.6.0-test5/drivers/net/wan/pc300_tty.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wan/pc300_tty.c 2003-09-25 19:16:01.000000000 -0700 @@ -37,7 +37,6 @@ */ #include -#include #include #include #include diff -prauN linux-2.6.0-test5/drivers/net/wan/sbni.c wli-2.6.0-test5-bk12-25/drivers/net/wan/sbni.c --- linux-2.6.0-test5/drivers/net/wan/sbni.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wan/sbni.c 2003-09-25 19:16:01.000000000 -0700 @@ -53,6 +53,7 @@ #include #include #include +#include #include @@ -220,24 +221,26 @@ static void __init sbni_devsetup(struct SET_MODULE_OWNER( dev ); } -int __init sbni_probe(void) +int __init sbni_probe(int unit) { struct net_device *dev; static unsigned version_printed __initdata = 0; + int err; - if( version_printed++ == 0 ) - printk( KERN_INFO "%s", version ); - - dev = alloc_netdev(sizeof(struct net_local), "sbni%d", sbni_devsetup); + dev = alloc_netdev(sizeof(struct net_local), "sbni", sbni_devsetup); if (!dev) return -ENOMEM; + sprintf(dev->name, "sbni%d", unit); netdev_boot_setup_check(dev); - if (register_netdev(dev)) { - kfree(dev); - return -ENODEV; + err = register_netdev(dev); + if (err) { + free_netdev(dev); + return err; } + if( version_printed++ == 0 ) + printk( KERN_INFO "%s", version ); return 0; } @@ -337,13 +340,12 @@ sbni_probe1( struct net_device *dev, u outb( 0, ioaddr + CSR0 ); if( irq < 2 ) { - unsigned long irq_mask, delay; + unsigned long irq_mask; irq_mask = probe_irq_on(); outb( EN_INT | TR_REQ, ioaddr + CSR0 ); outb( PR_RES, ioaddr + CSR1 ); - delay = jiffies + HZ/20; - while (time_before(jiffies, delay)) ; + mdelay(50); irq = probe_irq_off(irq_mask); outb( 0, ioaddr + CSR0 ); @@ -1562,13 +1564,13 @@ __setup( "sbni=", sbni_setup ); static u32 calc_crc32( u32 crc, u8 *p, u32 len ) { - register u32 _crc __asm ( "ax" ); + register u32 _crc; _crc = crc; __asm __volatile ( "xorl %%ebx, %%ebx\n" - "movl %1, %%esi\n" - "movl %2, %%ecx\n" + "movl %2, %%esi\n" + "movl %3, %%ecx\n" "movl $crc32tab, %%edi\n" "shrl $2, %%ecx\n" "jz 1f\n" @@ -1604,7 +1606,7 @@ calc_crc32( u32 crc, u8 *p, u32 len "jnz 0b\n" "1:\n" - "movl %2, %%ecx\n" + "movl %3, %%ecx\n" "andl $3, %%ecx\n" "jz 2f\n" @@ -1629,9 +1631,9 @@ calc_crc32( u32 crc, u8 *p, u32 len "xorb 2(%%esi), %%bl\n" "xorl (%%edi,%%ebx,4), %%eax\n" "2:\n" - : - : "a" (_crc), "g" (p), "g" (len) - : "ax", "bx", "cx", "dx", "si", "di" + : "=a" (_crc) + : "0" (_crc), "g" (p), "g" (len) + : "bx", "cx", "dx", "si", "di" ); return _crc; diff -prauN linux-2.6.0-test5/drivers/net/wan/sdla.c wli-2.6.0-test5-bk12-25/drivers/net/wan/sdla.c --- linux-2.6.0-test5/drivers/net/wan/sdla.c 2003-09-08 12:50:54.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wan/sdla.c 2003-09-25 19:16:01.000000000 -0700 @@ -60,8 +60,6 @@ static const char* version = "SDLA driver v0.30, 12 Sep 1996, mike.mclagan@linux.org"; -static const char* devname = "sdla"; - static unsigned int valid_port[] __initdata = { 0x250, 0x270, 0x280, 0x300, 0x350, 0x360, 0x380, 0x390}; static unsigned int valid_mem[] __initdata = { @@ -1626,41 +1624,16 @@ static struct net_device_stats *sdla_sta static void setup_sdla(struct net_device *dev) { + struct frad_local *flp = dev->priv; + + netdev_boot_setup_check(dev); + + SET_MODULE_OWNER(dev); dev->flags = 0; dev->type = 0xFFFF; dev->hard_header_len = 0; dev->addr_len = 0; dev->mtu = SDLA_MAX_MTU; -} - -static int frad_registered; - -struct net_device * __init sdla_init(void) -{ - struct net_device *dev; - struct frad_local *flp; - int err = -ENOMEM; - - if (!frad_registered) { - err = register_frad(devname); - if (err) { - printk(KERN_ERR "%s: frad registration failed %d\n", - devname, err); - return ERR_PTR(err); - } - frad_registered = 1; - printk("%s.\n", version); - } - - - dev = alloc_netdev(sizeof(struct frad_local), "sdla0", setup_sdla); - if (!dev) - goto out; - - SET_MODULE_OWNER(dev); - netdev_boot_setup_check(dev); - - flp = dev->priv; dev->open = sdla_open; dev->stop = sdla_close; @@ -1680,48 +1653,41 @@ struct net_device * __init sdla_init(voi flp->timer.expires = 1; flp->timer.data = (unsigned long) dev; flp->timer.function = sdla_poll; - - err = register_netdev(dev); - if (err) - goto out1; - return dev; -out1: - kfree(dev); -out: - return ERR_PTR(err); } -#ifdef MODULE -static struct net_device *sdla0; +static struct net_device *sdla; static int __init init_sdla(void) { - int result = 0; + int err; - sdla0 = sdla_init(); - if (IS_ERR(sdla0)) - result = PTR_ERR(sdla0); + printk("%s.\n", version); - return result; + sdla = alloc_netdev(sizeof(struct frad_local), "sdla0", setup_sdla); + if (!sdla) + return -ENOMEM; + + err = register_netdev(sdla); + if (err) + free_netdev(sdla); + + return err; } static void __exit exit_sdla(void) { struct frad_local *flp; - unregister_netdev(sdla0); - if (sdla0->irq) - free_irq(sdla0->irq, sdla0); + unregister_netdev(sdla); + if (sdla->irq) + free_irq(sdla->irq, sdla); - flp = sdla0->priv; + flp = sdla->priv; del_timer_sync(&flp->timer); - free_netdev(sdla0); - - unregister_frad(devname); + free_netdev(sdla); } MODULE_LICENSE("GPL"); module_init(init_sdla); module_exit(exit_sdla); -#endif diff -prauN linux-2.6.0-test5/drivers/net/wan/sdla_chdlc.c wli-2.6.0-test5-bk12-25/drivers/net/wan/sdla_chdlc.c --- linux-2.6.0-test5/drivers/net/wan/sdla_chdlc.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wan/sdla_chdlc.c 2003-09-25 19:16:01.000000000 -0700 @@ -49,7 +49,6 @@ *****************************************************************************/ #include -#include #include /* printk(), and other useful stuff */ #include /* offsetof(), etc. */ #include /* return codes */ @@ -560,8 +559,8 @@ int wpc_init (sdla_t* card, wandev_conf_ if (chdlc_set_intr_mode(card, APP_INT_ON_TIMER)){ - printk (KERN_INFO "%s: - Failed to set interrupt triggers!\n", + printk (KERN_INFO "%s: " + "Failed to set interrupt triggers!\n", card->devname); return -EIO; } diff -prauN linux-2.6.0-test5/drivers/net/wan/sdla_fr.c wli-2.6.0-test5-bk12-25/drivers/net/wan/sdla_fr.c --- linux-2.6.0-test5/drivers/net/wan/sdla_fr.c 2003-09-08 12:50:41.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wan/sdla_fr.c 2003-09-25 19:16:01.000000000 -0700 @@ -139,7 +139,6 @@ *****************************************************************************/ #include -#include #include /* printk(), and other useful stuff */ #include /* offsetof(), etc. */ #include /* return codes */ @@ -147,6 +146,7 @@ #include /* kmalloc(), kfree() */ #include /* WAN router definitions */ #include /* WANPIPE common user API definitions */ +#include #include /* ARPHRD_* defines */ #include /* htons(), etc. */ #include /* for inb(), outb(), etc. */ @@ -247,7 +247,7 @@ typedef struct fr_channel /* Polling task queue. Each interface * has its own task queue, which is used * to defer events from the interrupt */ - struct tq_struct fr_poll_task; + struct work_struct fr_poll_work; struct timer_list fr_arp_timer; u32 ip_local; @@ -987,9 +987,7 @@ static int new_if(struct wan_device* wan * We need a poll routine for each network * interface. */ - chan->fr_poll_task.sync = 0; - chan->fr_poll_task.routine = (void *)(void *)fr_poll; - chan->fr_poll_task.data = dev; + INIT_WORK(&chan->fr_poll_work, (void *)fr_poll, dev); init_timer(&chan->fr_arp_timer); chan->fr_arp_timer.data=(unsigned long)dev; @@ -1212,9 +1210,7 @@ static int if_open(struct net_device* de /* Initialize the task queue */ chan->tq_working=0; - chan->common.wanpipe_task.sync = 0; - chan->common.wanpipe_task.routine = (void *)(void *)fr_bh; - chan->common.wanpipe_task.data = dev; + INIT_WORK(&chan->common.wanpipe_work, (void *)fr_bh, dev); /* Allocate and initialize BH circular buffer */ chan->bh_head = kmalloc((sizeof(bh_data_t)*MAX_BH_BUFF),GFP_ATOMIC); @@ -2178,7 +2174,7 @@ static void rx_intr (sdla_t* card) } - /* Send a packed up the IP stack */ + /* Send a packet up the IP stack */ skb->dev->last_rx = jiffies; netif_rx(skb); ++chan->drvstats_rx_intr.rx_intr_bfr_passed_to_stack; @@ -2216,8 +2212,8 @@ rx_done: * dlci number. * 2. Check that network interface is up and * properly setup. - * 3. Check for a buffered packed. - * 4. Transmit the packed. + * 3. Check for a buffered packet. + * 4. Transmit the packet. * 5. If we are in WANPIPE mode, mark the * NET_BH handler. * 6. If we are in API mode, kick @@ -4359,8 +4355,8 @@ void s508_s514_unlock(sdla_t *card, unsi * bh_enqueue * * Description: - * Insert a received packed into a circular - * rx queue. This packed will be picked up + * Insert a received packet into a circular + * rx queue. This packet will be picked up * by fr_bh() and sent up the stack to the * user. * @@ -4411,8 +4407,7 @@ static int bh_enqueue(struct net_device static void trigger_fr_bh (fr_channel_t *chan) { if (!test_and_set_bit(0,&chan->tq_working)){ - wanpipe_queue_tq(&chan->common.wanpipe_task); - wanpipe_mark_bh(); + wanpipe_queue_work(&chan->common.wanpipe_work); } } @@ -4435,10 +4430,10 @@ static void trigger_fr_bh (fr_channel_t * card into an skb buffer, the skb buffer * is appended to a circular BH buffer. * Then the interrupt kicks fr_bh() to finish the - * job at a later time (no within the interrupt). + * job at a later time (not within the interrupt). * * Usage: - * Interrupts use this to defer a taks to + * Interrupts use this to defer a task to * a polling routine. * */ @@ -4527,7 +4522,7 @@ static int fr_bh_cleanup(struct net_devi static void trigger_fr_poll(struct net_device *dev) { fr_channel_t* chan = dev->priv; - schedule_task(&chan->fr_poll_task); + schedule_work(&chan->fr_poll_work); return; } diff -prauN linux-2.6.0-test5/drivers/net/wan/sdla_ft1.c wli-2.6.0-test5-bk12-25/drivers/net/wan/sdla_ft1.c --- linux-2.6.0-test5/drivers/net/wan/sdla_ft1.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wan/sdla_ft1.c 2003-09-25 19:16:01.000000000 -0700 @@ -21,7 +21,6 @@ *****************************************************************************/ #include -#include #include /* printk(), and other useful stuff */ #include /* offsetof(), etc. */ #include /* return codes */ diff -prauN linux-2.6.0-test5/drivers/net/wan/sdla_ppp.c wli-2.6.0-test5-bk12-25/drivers/net/wan/sdla_ppp.c --- linux-2.6.0-test5/drivers/net/wan/sdla_ppp.c 2003-09-08 12:49:56.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wan/sdla_ppp.c 2003-09-25 19:16:01.000000000 -0700 @@ -91,7 +91,6 @@ *****************************************************************************/ #include -#include #include /* printk(), and other useful stuff */ #include /* offsetof(), etc. */ #include /* return codes */ diff -prauN linux-2.6.0-test5/drivers/net/wan/sdla_x25.c wli-2.6.0-test5-bk12-25/drivers/net/wan/sdla_x25.c --- linux-2.6.0-test5/drivers/net/wan/sdla_x25.c 2003-09-08 12:50:16.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wan/sdla_x25.c 2003-09-25 19:16:01.000000000 -0700 @@ -82,7 +82,6 @@ *=====================================================*/ #include -#include #include /* printk(), and other useful stuff */ #include /* offsetof(), etc. */ #include /* return codes */ @@ -91,6 +90,7 @@ #include /* kmalloc(), kfree() */ #include /* WAN router definitions */ #include /* WANPIPE common user API definitions */ +#include #include /* htons(), etc. */ #include #include /* Experimental delay */ @@ -790,9 +790,7 @@ int wpx_init (sdla_t* card, wandev_conf_ init_global_statistics(card); - card->u.x.x25_poll_task.sync=0; - card->u.x.x25_poll_task.routine = (void*)(void*)wpx_poll; - card->u.x.x25_poll_task.data = card; + INIT_WORK(&card->u.x.x25_poll_work, (void *)wpx_poll, card); init_timer(&card->u.x.x25_timer); card->u.x.x25_timer.data = (unsigned long)card; @@ -1175,7 +1173,7 @@ static int if_init(struct net_device* de * Warnings: None * * Return: 0 Ok - * <0 Failur: Interface will not come up. + * <0 Failure: Interface will not come up. */ static int if_open(struct net_device* dev) @@ -1190,10 +1188,8 @@ static int if_open(struct net_device* de chan->tq_working = 0; - /* Initialize the task queue */ - chan->common.wanpipe_task.sync = 0; - chan->common.wanpipe_task.routine = (void *)(void *)x25api_bh; - chan->common.wanpipe_task.data = dev; + /* Initialize the workqueue */ + INIT_WORK(&chan->common.wanpipe_work, (void *)x25api_bh, dev); /* Allocate and initialize BH circular buffer */ /* Add 1 to MAX_BH_BUFF so we don't have test with (MAX_BH_BUFF-1) */ @@ -1732,8 +1728,7 @@ static void rx_intr (sdla_t* card) chan->rx_skb = NULL; if (!test_and_set_bit(0, &chan->tq_working)){ - wanpipe_queue_tq(&chan->common.wanpipe_task); - wanpipe_mark_bh(); + wanpipe_queue_work(&chan->common.wanpipe_work); } return; } @@ -2227,7 +2222,7 @@ static void spur_intr (sdla_t* card) /*==================================================================== * Main polling routine. - * This routine is repeatedly called by the WANPIPE 'thead' to allow for + * This routine is repeatedly called by the WANPIPE 'thread' to allow for * time-dependent housekeeping work. * * Notes: @@ -2274,7 +2269,7 @@ wpx_poll_exit: static void trigger_x25_poll(sdla_t *card) { - schedule_task(&card->u.x.x25_poll_task); + schedule_work(&card->u.x.x25_poll_work); } /*==================================================================== diff -prauN linux-2.6.0-test5/drivers/net/wan/sdladrv.c wli-2.6.0-test5-bk12-25/drivers/net/wan/sdladrv.c --- linux-2.6.0-test5/drivers/net/wan/sdladrv.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wan/sdladrv.c 2003-09-25 19:16:01.000000000 -0700 @@ -91,7 +91,6 @@ #if defined(_LINUX_) /****** Linux *******************************/ #include -#include #include /* printk(), and other useful stuff */ #include /* offsetof(), etc. */ #include /* return codes */ @@ -201,7 +200,7 @@ static int pci_probe(sdlahw_t *hw); * Note: All data must be explicitly initialized!!! */ -static struct pci_device_id sdladrv_pci_tbl[] __initdata = { +static struct pci_device_id sdladrv_pci_tbl[] = { { V3_VENDOR_ID, V3_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID, }, { } /* Terminating entry */ }; @@ -351,7 +350,7 @@ static void sdladrv_cleanup(void) } module_init(sdladrv_init); -module_cleanup(sdladrv_cleanup); +module_exit(sdladrv_cleanup); #endif /******* Kernel APIs ********************************************************/ diff -prauN linux-2.6.0-test5/drivers/net/wan/sdlamain.c wli-2.6.0-test5-bk12-25/drivers/net/wan/sdlamain.c --- linux-2.6.0-test5/drivers/net/wan/sdlamain.c 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wan/sdlamain.c 2003-09-25 19:16:01.000000000 -0700 @@ -46,7 +46,6 @@ * Jan 02, 1997 Gene Kozin Initial version. *****************************************************************************/ -#include #include /* OS configuration options */ #include /* offsetof(), etc. */ #include /* return codes */ @@ -189,7 +188,6 @@ static int ioctl_exec (sdla_t* card, sdl /* Miscellaneous functions */ STATIC irqreturn_t sdla_isr (int irq, void* dev_id, struct pt_regs *regs); static void release_hw (sdla_t *card); -static void run_wanpipe_tq (unsigned long); static int check_s508_conflicts (sdla_t* card,wandev_conf_t* conf, int*); static int check_s514_conflicts (sdla_t* card,wandev_conf_t* conf, int*); @@ -203,29 +201,21 @@ static int check_s514_conflicts (sdla_t* static char drvname[] = "wanpipe"; static char fullname[] = "WANPIPE(tm) Multiprotocol Driver"; static char copyright[] = "(c) 1995-2000 Sangoma Technologies Inc."; -static int ncards = 0; -static sdla_t* card_array = NULL; /* adapter data space */ +static int ncards; +static sdla_t* card_array; /* adapter data space */ -/* Wanpipe's own task queue, used for all API's. - * All protocol specific tasks will be instered - * into "wanpipe_tq_custom" task_queue. - - * On each rx_interrupt, the whole task queue - * (wanpipe_tq_custom) will be queued into - * IMMEDIATE_BH via wanpipe_mark_bh() call. - - * The IMMEDIATE_BH will execute run_wanpipe_tq() - * function, which will execute all pending, - * tasks in wanpipe_tq_custom queue */ - -DECLARE_TASK_QUEUE(wanpipe_tq_custom); -static struct tq_struct wanpipe_tq_task = -{ - .routine = (void (*)(void *)) run_wanpipe_tq, - .data = &wanpipe_tq_custom -}; +/* Wanpipe's own workqueue, used for all API's. + * All protocol specific tasks will be inserted + * into the "wanpipe_wq" workqueue. + + * The kernel workqueue mechanism will execute + * all pending tasks in the "wanpipe_wq" workqueue. + */ -static int wanpipe_bh_critical=0; +struct workqueue_struct *wanpipe_wq; +DECLARE_WORK(wanpipe_work, NULL, NULL); + +static int wanpipe_bh_critical; /******* Kernel Loadable Module Entry Points ********************************/ @@ -249,6 +239,10 @@ int wanpipe_init(void) printk(KERN_INFO "%s v%u.%u %s\n", fullname, DRV_VERSION, DRV_RELEASE, copyright); + wanpipe_wq = create_workqueue("wanpipe_wq"); + if (!wanpipe_wq) + return -ENOMEM; + /* Probe for wanpipe cards and return the number found */ printk(KERN_INFO "wanpipe: Probing for WANPIPE hardware.\n"); ncards = wanpipe_hw_probe(); @@ -256,13 +250,16 @@ int wanpipe_init(void) printk(KERN_INFO "wanpipe: Allocating maximum %i devices: wanpipe%i - wanpipe%i.\n",ncards,1,ncards); }else{ printk(KERN_INFO "wanpipe: No S514/S508 cards found, unloading modules!\n"); + destroy_workqueue(wanpipe_wq); return -ENODEV; } /* Verify number of cards and allocate adapter data space */ card_array = kmalloc(sizeof(sdla_t) * ncards, GFP_KERNEL); - if (card_array == NULL) + if (card_array == NULL) { + destroy_workqueue(wanpipe_wq); return -ENOMEM; + } memset(card_array, 0, sizeof(sdla_t) * ncards); @@ -292,6 +289,7 @@ int wanpipe_init(void) ncards = cnt; /* adjust actual number of cards */ }else { kfree(card_array); + destroy_workqueue(wanpipe_wq); printk(KERN_INFO "IN Init Module: NO Cards registered\n"); err = -ENODEV; } @@ -316,6 +314,7 @@ static void wanpipe_cleanup(void) sdla_t* card = &card_array[i]; unregister_wan_device(card->devname); } + destroy_workqueue(wanpipe_wq); kfree(card_array); printk(KERN_INFO "\nwanpipe: WANPIPE Modules Unloaded.\n"); @@ -673,15 +672,20 @@ static int check_s508_conflicts (sdla_t* /* Make sure I/O port region is available only if we are the - * master device. If we are running in piggibacking mode, - * we will use the resources of the master card */ - if (check_region(conf->ioport, SDLA_MAXIORANGE) && - !card->wandev.piggyback) { - printk(KERN_INFO - "%s: I/O region 0x%X - 0x%X is in use!\n", - card->wandev.name, conf->ioport, - conf->ioport + SDLA_MAXIORANGE); - return -EINVAL; + * master device. If we are running in piggybacking mode, + * we will use the resources of the master card. */ + if (!card->wandev.piggyback) { + struct resource *rr = + request_region(conf->ioport, SDLA_MAXIORANGE, "sdlamain"); + release_region(conf->ioport, SDLA_MAXIORANGE); + + if (!rr) { + printk(KERN_INFO + "%s: I/O region 0x%X - 0x%X is in use!\n", + card->wandev.name, conf->ioport, + conf->ioport + SDLA_MAXIORANGE - 1); + return -EINVAL; + } } return 0; @@ -1029,7 +1033,6 @@ static int ioctl_exec (sdla_t* card, sdl STATIC irqreturn_t sdla_isr (int irq, void* dev_id, struct pt_regs *regs) { #define card ((sdla_t*)dev_id) - int handled = 0; if(card->hw.type == SDLA_S514) { /* handle interrrupt on S514 */ u32 int_status; @@ -1210,6 +1213,7 @@ sdla_t * wanpipe_find_card (char *name) } return NULL; } + sdla_t * wanpipe_find_card_num (int num) { if (num < 1 || num > ncards) @@ -1218,35 +1222,20 @@ sdla_t * wanpipe_find_card_num (int num) return &card_array[num]; } - -static void run_wanpipe_tq (unsigned long data) -{ - task_queue *tq_queue = (task_queue *)data; - if (test_and_set_bit(2,(void*)&wanpipe_bh_critical)) - printk(KERN_INFO "CRITICAL IN RUNNING TASK QUEUE\n"); - run_task_queue (tq_queue); - clear_bit(2,(void*)&wanpipe_bh_critical); - -} - -void wanpipe_queue_tq (struct tq_struct *bh_pointer) +/* + * @work_pointer: work_struct to be done; + * should already have PREPARE_WORK() or + * INIT_WORK() done on it by caller; + */ +void wanpipe_queue_work (struct work_struct *work_pointer) { - if (test_and_set_bit(1,(void*)&wanpipe_bh_critical)) - printk(KERN_INFO "CRITICAL IN QUEUING TASK\n"); + if (test_and_set_bit(1, (void*)&wanpipe_bh_critical)) + printk(KERN_INFO "CRITICAL IN QUEUING WORK\n"); - queue_task(bh_pointer,&wanpipe_tq_custom); + queue_work(wanpipe_wq, work_pointer); clear_bit(1,(void*)&wanpipe_bh_critical); } -void wanpipe_mark_bh (void) -{ - if (!test_and_set_bit(0,(void*)&wanpipe_bh_critical)){ - queue_task(&wanpipe_tq_task,&tq_immediate); - mark_bh(IMMEDIATE_BH); - clear_bit(0,(void*)&wanpipe_bh_critical); - } -} - void wakeup_sk_bh(struct net_device *dev) { wanpipe_common_t *chan = dev->priv; diff -prauN linux-2.6.0-test5/drivers/net/wan/sealevel.c wli-2.6.0-test5-bk12-25/drivers/net/wan/sealevel.c --- linux-2.6.0-test5/drivers/net/wan/sealevel.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wan/sealevel.c 2003-09-25 19:16:01.000000000 -0700 @@ -31,7 +31,6 @@ struct slvl_device { - void *if_ptr; /* General purpose pointer (used by SPPP) */ struct z8530_channel *chan; struct ppp_device netdev; int channel; @@ -40,7 +39,7 @@ struct slvl_device struct slvl_board { - struct slvl_device dev[2]; + struct slvl_device *dev[2]; struct z8530_dev board; int iobase; }; @@ -119,7 +118,6 @@ static int sealevel_open(struct net_devi * Go go go */ netif_start_queue(d); - MOD_INC_USE_COUNT; return 0; } @@ -153,7 +151,6 @@ static int sealevel_close(struct net_dev z8530_sync_close(d, slvl->chan); break; } - MOD_DEC_USE_COUNT; return 0; } @@ -202,48 +199,79 @@ static int sealevel_neigh_setup_dev(stru return 0; } + +static void slvl_setup(struct net_device *d) +{ + d->open = sealevel_open; + d->stop = sealevel_close; + d->hard_start_xmit = sealevel_queue_xmit; + d->get_stats = sealevel_get_stats; + d->set_multicast_list = NULL; + d->do_ioctl = sealevel_ioctl; + d->neigh_setup = sealevel_neigh_setup_dev; + d->set_mac_address = NULL; + +} + +static inline struct slvl_device *slvl_alloc(int iobase, int irq) +{ + struct net_device *d; + struct slvl_device *sv; + + d = alloc_netdev(sizeof(struct slvl_device), "hdlc%d", + slvl_setup); + + if (!d) + return NULL; + + sv = d->priv; + sv->netdev.dev = d; + d->base_addr = iobase; + d->irq = irq; + + sppp_attach(&sv->netdev); + return sv; +} + + /* - * Description block for a Comtrol Hostess SV11 card + * Allocate and setup Sealevel board. */ -static struct slvl_board *slvl_init(int iobase, int irq, int txdma, int rxdma, int slow) +static __init struct slvl_board *slvl_init(int iobase, int irq, + int txdma, int rxdma, int slow) { struct z8530_dev *dev; - struct slvl_device *sv; struct slvl_board *b; - int u; /* * Get the needed I/O space */ - + if(!request_region(iobase, 8, "Sealevel 4021")) { printk(KERN_WARNING "sealevel: I/O 0x%X already in use.\n", iobase); return NULL; } - b=(struct slvl_board *)kmalloc(sizeof(struct slvl_board), GFP_KERNEL); + b = kmalloc(sizeof(struct slvl_board), GFP_KERNEL); if(!b) goto fail3; - - memset(b, 0, sizeof(*sv)); - b->dev[0].chan = &b->board.chanA; - b->dev[0].if_ptr = &b->dev[0].netdev; - b->dev[0].netdev.dev=(struct net_device *) - kmalloc(sizeof(struct net_device), GFP_KERNEL); - if(!b->dev[0].netdev.dev) + memset(b, 0, sizeof(*b)); + if (!(b->dev[0]= slvl_alloc(iobase, irq))) goto fail2; - b->dev[1].chan = &b->board.chanB; - b->dev[1].if_ptr = &b->dev[1].netdev; - b->dev[1].netdev.dev=(struct net_device *) - kmalloc(sizeof(struct net_device), GFP_KERNEL); - if(!b->dev[1].netdev.dev) + b->dev[0]->chan = &b->board.chanA; + b->dev[0]->channel = 0; + + if (!(b->dev[1] = slvl_alloc(iobase, irq))) goto fail1_0; - dev=&b->board; + b->dev[1]->chan = &b->board.chanB; + b->dev[1]->channel = 1; + + dev = &b->board; /* * Stuff in the I/O addressing @@ -287,8 +315,8 @@ static struct slvl_board *slvl_init(int dev->irq=irq; dev->chanA.private=&b->dev[0]; dev->chanB.private=&b->dev[1]; - dev->chanA.netdevice=b->dev[0].netdev.dev; - dev->chanB.netdevice=b->dev[1].netdev.dev; + dev->chanA.netdevice=b->dev[0]->netdev.dev; + dev->chanB.netdevice=b->dev[1]->netdev.dev; dev->chanA.dev=dev; dev->chanB.dev=dev; @@ -329,55 +357,18 @@ static struct slvl_board *slvl_init(int enable_irq(irq); - for(u=0; u<2; u++) - { - sv=&b->dev[u]; - sv->channel = u; - - if(dev_alloc_name(sv->chan->netdevice,"hdlc%d")>=0) - { - struct net_device *d=sv->chan->netdevice; - - /* - * Initialise the PPP components - */ - sppp_attach(&sv->netdev); - - /* - * Local fields - */ - - d->base_addr = iobase; - d->irq = irq; - d->priv = sv; - d->init = NULL; - - d->open = sealevel_open; - d->stop = sealevel_close; - d->hard_start_xmit = sealevel_queue_xmit; - d->get_stats = sealevel_get_stats; - d->set_multicast_list = NULL; - d->do_ioctl = sealevel_ioctl; - d->neigh_setup = sealevel_neigh_setup_dev; - d->set_mac_address = NULL; + if (register_netdev(b->dev[0]->netdev.dev)) + goto dmafail2; - if(register_netdev(d)==-1) - { - printk(KERN_ERR "%s: unable to register device.\n", - d->name); - goto fail_unit; - } + if (register_netdev(b->dev[1]->netdev.dev)) + goto fail_unit; - break; - } - } z8530_describe(dev, "I/O", iobase); dev->active=1; return b; fail_unit: - if(u==1) - unregister_netdev(b->dev[0].chan->netdevice); + unregister_netdev(b->dev[0]->netdev.dev); dmafail2: free_dma(dev->chanA.rxdma); @@ -386,9 +377,9 @@ dmafail: fail: free_irq(irq, dev); fail1_1: - kfree(b->dev[1].netdev.dev); + free_netdev(b->dev[1]->netdev.dev); fail1_0: - kfree(b->dev[0].netdev.dev); + free_netdev(b->dev[0]->netdev.dev); fail2: kfree(b); fail3: @@ -396,7 +387,7 @@ fail3: return NULL; } -static void slvl_shutdown(struct slvl_board *b) +static void __exit slvl_shutdown(struct slvl_board *b) { int u; @@ -404,8 +395,11 @@ static void slvl_shutdown(struct slvl_bo for(u=0; u<2; u++) { - sppp_detach(b->dev[u].netdev.dev); - unregister_netdev(b->dev[u].netdev.dev); + struct net_device *d = b->dev[u]->netdev.dev; + sppp_detach(d); + + unregister_netdev(d); + free_netdev(d); } free_irq(b->board.irq, &b->board); @@ -416,7 +410,6 @@ static void slvl_shutdown(struct slvl_bo release_region(b->iobase, 8); } -#ifdef MODULE static int io=0x238; static int txdma=1; @@ -441,20 +434,22 @@ MODULE_DESCRIPTION("Modular driver for t static struct slvl_board *slvl_unit; -int init_module(void) +static int __init slvl_init_module(void) { +#ifdef MODULE printk(KERN_INFO "SeaLevel Z85230 Synchronous Driver v 0.02.\n"); - printk(KERN_INFO "(c) Copyright 1998, Building Number Three Ltd.\n"); - if((slvl_unit=slvl_init(io,irq, txdma, rxdma, slow))==NULL) - return -ENODEV; - return 0; + printk(KERN_INFO "(c) Copyright 1998, Building Number Three Ltd.\n"); +#endif + slvl_unit = slvl_init(io, irq, txdma, rxdma, slow); + + return slvl_unit ? 0 : -ENODEV; } -void cleanup_module(void) +static void __exit slvl_cleanup_module(void) { if(slvl_unit) slvl_shutdown(slvl_unit); } -#endif - +module_init(slvl_init_module); +module_exit(slvl_cleanup_module); diff -prauN linux-2.6.0-test5/drivers/net/wan/wanpipe_multppp.c wli-2.6.0-test5-bk12-25/drivers/net/wan/wanpipe_multppp.c --- linux-2.6.0-test5/drivers/net/wan/wanpipe_multppp.c 2003-09-08 12:50:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wan/wanpipe_multppp.c 2003-09-25 19:16:02.000000000 -0700 @@ -18,7 +18,6 @@ *****************************************************************************/ #include -#include #include /* printk(), and other useful stuff */ #include /* offsetof(), etc. */ #include /* return codes */ diff -prauN linux-2.6.0-test5/drivers/net/wan/wanxl.c wli-2.6.0-test5-bk12-25/drivers/net/wan/wanxl.c --- linux-2.6.0-test5/drivers/net/wan/wanxl.c 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/drivers/net/wan/wanxl.c 2003-09-25 19:16:02.000000000 -0700 @@ -0,0 +1,846 @@ +/* + * wanXL serial card driver for Linux + * host part + * + * Copyright (C) 2003 Krzysztof Halasa + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of version 2 of the GNU General Public License + * as published by the Free Software Foundation. + * + * Status: + * - Only DTE (external clock) support with NRZ and NRZI encodings + * - wanXL100 will require minor driver modifications, no access to hw + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "wanxl.h" + +static const char* version = "wanXL serial card driver version: 0.47"; + +#define PLX_CTL_RESET 0x40000000 /* adapter reset */ + +#undef DEBUG_PKT +#undef DEBUG_PCI + +/* MAILBOX #1 - PUTS COMMANDS */ +#define MBX1_CMD_ABORTJ 0x85000000 /* Abort and Jump */ +#ifdef __LITTLE_ENDIAN +#define MBX1_CMD_BSWAP 0x8C000001 /* little-endian Byte Swap Mode */ +#else +#define MBX1_CMD_BSWAP 0x8C000000 /* big-endian Byte Swap Mode */ +#endif + +/* MAILBOX #2 - DRAM SIZE */ +#define MBX2_MEMSZ_MASK 0xFFFF0000 /* PUTS Memory Size Register mask */ + + +typedef struct { + hdlc_device hdlc; /* HDLC device struct - must be first */ + struct card_t *card; + spinlock_t lock; /* for wanxl_xmit */ + int node; /* physical port #0 - 3 */ + unsigned int clock_type; + int tx_in, tx_out; + struct sk_buff *tx_skbs[TX_BUFFERS]; +}port_t; + + +typedef struct { + desc_t rx_descs[RX_QUEUE_LENGTH]; + port_status_t port_status[4]; +}card_status_t; + + +typedef struct card_t { + int n_ports; /* 1, 2 or 4 ports */ + u8 irq; + + u8 *plx; /* PLX PCI9060 virtual base address */ + struct pci_dev *pdev; /* for pdev->slot_name */ + port_t *ports[4]; + int rx_in; + struct sk_buff *rx_skbs[RX_QUEUE_LENGTH]; + card_status_t *status; /* shared between host and card */ + dma_addr_t status_address; +}card_t; + + + +static inline port_t* hdlc_to_port(hdlc_device *hdlc) +{ + return (port_t*)hdlc; +} + + +static inline port_t* dev_to_port(struct net_device *dev) +{ + return hdlc_to_port(dev_to_hdlc(dev)); +} + + +static inline struct net_device *port_to_dev(port_t* port) +{ + return hdlc_to_dev(&port->hdlc); +} + + +static inline const char* port_name(port_t *port) +{ + return hdlc_to_name((hdlc_device*)port); +} + + +static inline const char* card_name(struct pci_dev *pdev) +{ + return pdev->slot_name; +} + + +static inline port_status_t* get_status(port_t *port) +{ + return &port->card->status->port_status[port->node]; +} + + +#ifdef DEBUG_PCI +static inline dma_addr_t pci_map_single_debug(struct pci_dev *pdev, void *ptr, + size_t size, int direction) +{ + dma_addr_t addr = pci_map_single(pdev, ptr, size, direction); + if (addr + size > 0x100000000LL) + printk(KERN_CRIT "wanXL %s: pci_map_single() returned memory" + " at 0x%LX!\n", card_name(pdev), + (unsigned long long)addr); + return addr; +} + +#undef pci_map_single +#define pci_map_single pci_map_single_debug +#endif + + +/* Cable and/or personality module change interrupt service */ +static inline void wanxl_cable_intr(port_t *port) +{ + u32 value = get_status(port)->cable; + int valid = 1; + const char *cable, *pm, *dte = "", *dsr = "", *dcd = ""; + + switch(value & 0x7) { + case STATUS_CABLE_V35: cable = "V.35"; break; + case STATUS_CABLE_X21: cable = "X.21"; break; + case STATUS_CABLE_V24: cable = "V.24"; break; + case STATUS_CABLE_EIA530: cable = "EIA530"; break; + case STATUS_CABLE_NONE: cable = "no"; break; + default: cable = "invalid"; + } + + switch((value >> STATUS_CABLE_PM_SHIFT) & 0x7) { + case STATUS_CABLE_V35: pm = "V.35"; break; + case STATUS_CABLE_X21: pm = "X.21"; break; + case STATUS_CABLE_V24: pm = "V.24"; break; + case STATUS_CABLE_EIA530: pm = "EIA530"; break; + case STATUS_CABLE_NONE: pm = "no personality"; valid = 0; break; + default: pm = "invalid personality"; valid = 0; + } + + if (valid) { + if ((value & 7) == ((value >> STATUS_CABLE_PM_SHIFT) & 7)) { + dsr = (value & STATUS_CABLE_DSR) ? ", DSR ON" : + ", DSR off"; + dcd = (value & STATUS_CABLE_DCD) ? ", carrier ON" : + ", carrier off"; + } + dte = (value & STATUS_CABLE_DCE) ? " DCE" : " DTE"; + } + printk(KERN_INFO "%s: %s%s module, %s cable%s%s\n", + port_name(port), pm, dte, cable, dsr, dcd); + + hdlc_set_carrier(value & STATUS_CABLE_DCD, &port->hdlc); +} + + + +/* Transmit complete interrupt service */ +static inline void wanxl_tx_intr(port_t *port) +{ + while (1) { + desc_t *desc = &get_status(port)->tx_descs[port->tx_in]; + struct sk_buff *skb = port->tx_skbs[port->tx_in]; + + switch (desc->stat) { + case PACKET_FULL: + case PACKET_EMPTY: + netif_wake_queue(port_to_dev(port)); + return; + + case PACKET_UNDERRUN: + port->hdlc.stats.tx_errors++; + port->hdlc.stats.tx_fifo_errors++; + break; + + default: + port->hdlc.stats.tx_packets++; + port->hdlc.stats.tx_bytes += skb->len; + } + desc->stat = PACKET_EMPTY; /* Free descriptor */ + pci_unmap_single(port->card->pdev, desc->address, skb->len, + PCI_DMA_TODEVICE); + dev_kfree_skb_irq(skb); + port->tx_in = (port->tx_in + 1) % TX_BUFFERS; + } +} + + + +/* Receive complete interrupt service */ +static inline void wanxl_rx_intr(card_t *card) +{ + desc_t *desc; + while(desc = &card->status->rx_descs[card->rx_in], + desc->stat != PACKET_EMPTY) { + struct sk_buff *skb = card->rx_skbs[card->rx_in]; + port_t *port = card->ports[desc->stat & PACKET_PORT_MASK]; + struct net_device *dev = port_to_dev(port); + + if ((desc->stat & PACKET_PORT_MASK) > card->n_ports) + printk(KERN_CRIT "wanXL %s: received packet for" + " nonexistent port\n", card_name(card->pdev)); + + else if (!skb) + port->hdlc.stats.rx_dropped++; + + else { + pci_unmap_single(card->pdev, desc->address, + BUFFER_LENGTH, PCI_DMA_FROMDEVICE); + skb_put(skb, desc->length); + +#ifdef DEBUG_PKT + printk(KERN_DEBUG "%s RX(%i):", port_name(port), + skb->len); + debug_frame(skb); +#endif + port->hdlc.stats.rx_packets++; + port->hdlc.stats.rx_bytes += skb->len; + skb->mac.raw = skb->data; + skb->dev = dev; + dev->last_rx = jiffies; + skb->protocol = hdlc_type_trans(skb, dev); + netif_rx(skb); + skb = NULL; + } + + if (!skb) { + skb = dev_alloc_skb(BUFFER_LENGTH); + desc->address = skb ? + pci_map_single(card->pdev, skb->data, + BUFFER_LENGTH, + PCI_DMA_FROMDEVICE) : 0; + card->rx_skbs[card->rx_in] = skb; + } + desc->stat = PACKET_EMPTY; /* Free descriptor */ + card->rx_in = (card->rx_in + 1) % RX_QUEUE_LENGTH; + } +} + + + +static irqreturn_t wanxl_intr(int irq, void* dev_id, struct pt_regs *regs) +{ + card_t *card = dev_id; + int i; + u32 stat; + int handled = 0; + + + while((stat = readl(card->plx + PLX_DOORBELL_FROM_CARD)) != 0) { + handled = 1; + writel(stat, card->plx + PLX_DOORBELL_FROM_CARD); + + for (i = 0; i < card->n_ports; i++) { + if (stat & (1 << (DOORBELL_FROM_CARD_TX_0 + i))) + wanxl_tx_intr(card->ports[i]); + if (stat & (1 << (DOORBELL_FROM_CARD_CABLE_0 + i))) + wanxl_cable_intr(card->ports[i]); + } + if (stat & (1 << DOORBELL_FROM_CARD_RX)) + wanxl_rx_intr(card); + } + + return IRQ_RETVAL(handled); +} + + + +static int wanxl_xmit(struct sk_buff *skb, struct net_device *dev) +{ + hdlc_device *hdlc = dev_to_hdlc(dev); + port_t *port = hdlc_to_port(hdlc); + desc_t *desc; + + spin_lock(&port->lock); + + desc = &get_status(port)->tx_descs[port->tx_out]; + if (desc->stat != PACKET_EMPTY) { + /* should never happen - previous xmit should stop queue */ +#ifdef DEBUG_PKT + printk(KERN_DEBUG "%s: transmitter buffer full\n", + port_name(port)); +#endif + netif_stop_queue(dev); + spin_unlock_irq(&port->lock); + return 1; /* request packet to be queued */ + } + +#ifdef DEBUG_PKT + printk(KERN_DEBUG "%s TX(%i):", port_name(port), skb->len); + debug_frame(skb); +#endif + + port->tx_skbs[port->tx_out] = skb; + desc->address = pci_map_single(port->card->pdev, skb->data, skb->len, + PCI_DMA_TODEVICE); + desc->length = skb->len; + desc->stat = PACKET_FULL; + writel(1 << (DOORBELL_TO_CARD_TX_0 + port->node), + port->card->plx + PLX_DOORBELL_TO_CARD); + dev->trans_start = jiffies; + + port->tx_out = (port->tx_out + 1) % TX_BUFFERS; + + if (get_status(port)->tx_descs[port->tx_out].stat != PACKET_EMPTY) { + netif_stop_queue(dev); +#ifdef DEBUG_PKT + printk(KERN_DEBUG "%s: transmitter buffer full\n", + port_name(port)); +#endif + } + + spin_unlock(&port->lock); + return 0; +} + + + +static int wanxl_attach(hdlc_device *hdlc, unsigned short encoding, + unsigned short parity) +{ + port_t *port = hdlc_to_port(hdlc); + + if (encoding != ENCODING_NRZ && + encoding != ENCODING_NRZI) + return -EINVAL; + + if (parity != PARITY_NONE && + parity != PARITY_CRC32_PR1_CCITT && + parity != PARITY_CRC16_PR1_CCITT && + parity != PARITY_CRC32_PR0_CCITT && + parity != PARITY_CRC16_PR0_CCITT) + return -EINVAL; + + get_status(port)->encoding = encoding; + get_status(port)->parity = parity; + return 0; +} + + + +static int wanxl_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) +{ + const size_t size = sizeof(sync_serial_settings); + sync_serial_settings line; + hdlc_device *hdlc = dev_to_hdlc(dev); + port_t *port = hdlc_to_port(hdlc); + + if (cmd != SIOCWANDEV) + return hdlc_ioctl(dev, ifr, cmd); + + switch (ifr->ifr_settings.type) { + case IF_GET_IFACE: + ifr->ifr_settings.type = IF_IFACE_SYNC_SERIAL; + if (ifr->ifr_settings.size < size) { + ifr->ifr_settings.size = size; /* data size wanted */ + return -ENOBUFS; + } + line.clock_type = get_status(port)->clocking; + line.clock_rate = 0; + line.loopback = 0; + + if (copy_to_user(ifr->ifr_settings.ifs_ifsu.sync, &line, size)) + return -EFAULT; + return 0; + + case IF_IFACE_SYNC_SERIAL: + if (!capable(CAP_NET_ADMIN)) + return -EPERM; + if (dev->flags & IFF_UP) + return -EBUSY; + + if (copy_from_user(&line, ifr->ifr_settings.ifs_ifsu.sync, + size)) + return -EFAULT; + + if (line.clock_type != CLOCK_EXT && + line.clock_type != CLOCK_TXFROMRX) + return -EINVAL; /* No such clock setting */ + + if (line.loopback != 0) + return -EINVAL; + + get_status(port)->clocking = line.clock_type; + return 0; + + default: + return hdlc_ioctl(dev, ifr, cmd); + } +} + + + +static int wanxl_open(struct net_device *dev) +{ + hdlc_device *hdlc = dev_to_hdlc(dev); + port_t *port = hdlc_to_port(hdlc); + u8 *dbr = port->card->plx + PLX_DOORBELL_TO_CARD; + unsigned long timeout; + int i; + + if (get_status(port)->open) { + printk(KERN_ERR "%s: port already open\n", port_name(port)); + return -EIO; + } + if ((i = hdlc_open(hdlc)) != 0) + return i; + + port->tx_in = port->tx_out = 0; + for (i = 0; i < TX_BUFFERS; i++) + get_status(port)->tx_descs[i].stat = PACKET_EMPTY; + /* signal the card */ + writel(1 << (DOORBELL_TO_CARD_OPEN_0 + port->node), dbr); + + timeout = jiffies + HZ; + do + if (get_status(port)->open) + return 0; + while (time_after(timeout, jiffies)); + + printk(KERN_ERR "%s: unable to open port\n", port_name(port)); + /* ask the card to close the port, should it be still alive */ + writel(1 << (DOORBELL_TO_CARD_CLOSE_0 + port->node), dbr); + return -EFAULT; +} + + + +static int wanxl_close(struct net_device *dev) +{ + hdlc_device *hdlc = dev_to_hdlc(dev); + port_t *port = hdlc_to_port(hdlc); + unsigned long timeout; + int i; + + hdlc_close(hdlc); + /* signal the card */ + writel(1 << (DOORBELL_TO_CARD_CLOSE_0 + port->node), + port->card->plx + PLX_DOORBELL_TO_CARD); + + timeout = jiffies + HZ; + do + if (!get_status(port)->open) + break; + while (time_after(timeout, jiffies)); + + if (get_status(port)->open) + printk(KERN_ERR "%s: unable to close port\n", port_name(port)); + + for (i = 0; i < TX_BUFFERS; i++) { + desc_t *desc = &get_status(port)->tx_descs[i]; + + if (desc->stat != PACKET_EMPTY) { + desc->stat = PACKET_EMPTY; + pci_unmap_single(port->card->pdev, desc->address, + port->tx_skbs[i]->len, + PCI_DMA_TODEVICE); + dev_kfree_skb(port->tx_skbs[i]); + } + } + return 0; +} + + + +static struct net_device_stats *wanxl_get_stats(struct net_device *dev) +{ + hdlc_device *hdlc = dev_to_hdlc(dev); + port_t *port = hdlc_to_port(hdlc); + + hdlc->stats.rx_over_errors = get_status(port)->rx_overruns; + hdlc->stats.rx_frame_errors = get_status(port)->rx_frame_errors; + hdlc->stats.rx_errors = hdlc->stats.rx_over_errors + + hdlc->stats.rx_frame_errors; + return &hdlc->stats; +} + + + +static int wanxl_puts_command(card_t *card, u32 cmd) +{ + unsigned long timeout = jiffies + 5 * HZ; + + writel(cmd, card->plx + PLX_MAILBOX_1); + do { + if (readl(card->plx + PLX_MAILBOX_1) == 0) + return 0; + + schedule(); + }while (time_after(timeout, jiffies)); + + return -1; +} + + + +static void wanxl_reset(card_t *card) +{ + u32 old_value = readl(card->plx + PLX_CONTROL) & ~PLX_CTL_RESET; + + writel(0x80, card->plx + PLX_MAILBOX_0); + writel(old_value | PLX_CTL_RESET, card->plx + PLX_CONTROL); + readl(card->plx + PLX_CONTROL); /* wait for posted write */ + udelay(1); + writel(old_value, card->plx + PLX_CONTROL); + readl(card->plx + PLX_CONTROL); /* wait for posted write */ +} + + + +static void wanxl_pci_remove_one(struct pci_dev *pdev) +{ + card_t *card = pci_get_drvdata(pdev); + int i; + + /* unregister and free all host resources */ + if (card->irq) + free_irq(card->irq, card); + + for (i = 0; i < 4; i++) + if (card->ports[i]) + unregister_hdlc_device(&card->ports[i]->hdlc); + + wanxl_reset(card); + + for (i = 0; i < RX_QUEUE_LENGTH; i++) + if (card->rx_skbs[i]) { + pci_unmap_single(card->pdev, + card->status->rx_descs[i].address, + BUFFER_LENGTH, PCI_DMA_FROMDEVICE); + dev_kfree_skb(card->rx_skbs[i]); + } + + if (card->plx) + iounmap(card->plx); + + if (card->status) + pci_free_consistent(pdev, sizeof(card_status_t), + card->status, card->status_address); + + pci_set_drvdata(pdev, NULL); + kfree(card); + pci_release_regions(pdev); +} + + +#include "wanxlfw.inc" + +static int __devinit wanxl_pci_init_one(struct pci_dev *pdev, + const struct pci_device_id *ent) +{ + card_t *card; + u32 ramsize, stat; + unsigned long timeout; + u32 plx_phy; /* PLX PCI base address */ + u32 mem_phy; /* memory PCI base addr */ + u8 *mem; /* memory virtual base addr */ + int i, ports, alloc_size; + +#ifndef MODULE + static int printed_version; + if (!printed_version) { + printed_version++; + printk(KERN_INFO "%s\n", version); + } +#endif + + i = pci_enable_device(pdev); + if (i) + return i; + + /* QUICC can only access first 256 MB of host RAM directly, + but PLX9060 DMA does 32-bits for actual packet data transfers */ + + /* FIXME when PCI/DMA subsystems are fixed. + We set both dma_mask and consistent_dma_mask to 28 bits + and pray pci_alloc_consistent() will use this info. It should + work on most platforms */ + if (pci_set_consistent_dma_mask(pdev, 0x0FFFFFFF) || + pci_set_dma_mask(pdev, 0x0FFFFFFF)) { + printk(KERN_ERR "No usable DMA configuration\n"); + return -EIO; + } + + i = pci_request_regions(pdev, "wanXL"); + if (i) + return i; + + switch (pdev->device) { + case PCI_DEVICE_ID_SBE_WANXL100: ports = 1; break; + case PCI_DEVICE_ID_SBE_WANXL200: ports = 2; break; + default: ports = 4; + } + + alloc_size = sizeof(card_t) + ports * sizeof(port_t); + card = kmalloc(alloc_size, GFP_KERNEL); + if (card == NULL) { + printk(KERN_ERR "wanXL %s: unable to allocate memory\n", + card_name(pdev)); + pci_release_regions(pdev); + return -ENOBUFS; + } + memset(card, 0, alloc_size); + + pci_set_drvdata(pdev, card); + card->pdev = pdev; + card->n_ports = ports; + + card->status = pci_alloc_consistent(pdev, sizeof(card_status_t), + &card->status_address); + if (card->status == NULL) { + wanxl_pci_remove_one(pdev); + return -ENOBUFS; + } + +#ifdef DEBUG_PCI + printk(KERN_DEBUG "wanXL %s: pci_alloc_consistent() returned memory" + " at 0x%LX\n", card_name(pdev), + (unsigned long long)card->status_address); +#endif + + /* FIXME when PCI/DMA subsystems are fixed. + We set both dma_mask and consistent_dma_mask back to 32 bits + to indicate the card can do 32-bit DMA addressing */ + if (pci_set_consistent_dma_mask(pdev, 0xFFFFFFFF) || + pci_set_dma_mask(pdev, 0xFFFFFFFF)) { + printk(KERN_ERR "No usable DMA configuration\n"); + wanxl_pci_remove_one(pdev); + return -EIO; + } + + /* set up PLX mapping */ + plx_phy = pci_resource_start(pdev, 0); + card->plx = ioremap_nocache(plx_phy, 0x70); + +#if RESET_WHILE_LOADING + wanxl_reset(card); +#endif + + timeout = jiffies + 20 * HZ; + while ((stat = readl(card->plx + PLX_MAILBOX_0)) != 0) { + if (time_before(timeout, jiffies)) { + printk(KERN_WARNING "wanXL %s: timeout waiting for" + " PUTS to complete\n", card_name(pdev)); + wanxl_pci_remove_one(pdev); + return -ENODEV; + } + + switch(stat & 0xC0) { + case 0x00: /* hmm - PUTS completed with non-zero code? */ + case 0x80: /* PUTS still testing the hardware */ + break; + + default: + printk(KERN_WARNING "wanXL %s: PUTS test 0x%X" + " failed\n", card_name(pdev), stat & 0x30); + wanxl_pci_remove_one(pdev); + return -ENODEV; + } + + schedule(); + } + + /* get on-board memory size (PUTS detects no more than 4 MB) */ + ramsize = readl(card->plx + PLX_MAILBOX_2) & MBX2_MEMSZ_MASK; + + /* set up on-board RAM mapping */ + mem_phy = pci_resource_start(pdev, 2); + + + /* sanity check the board's reported memory size */ + if (ramsize < BUFFERS_ADDR + + (TX_BUFFERS + RX_BUFFERS) * BUFFER_LENGTH * ports) { + printk(KERN_WARNING "wanXL %s: no enough on-board RAM" + " (%u bytes detected, %u bytes required)\n", + card_name(pdev), ramsize, BUFFERS_ADDR + + (TX_BUFFERS + RX_BUFFERS) * BUFFER_LENGTH * ports); + wanxl_pci_remove_one(pdev); + return -ENODEV; + } + + if (wanxl_puts_command(card, MBX1_CMD_BSWAP)) { + printk(KERN_WARNING "wanXL %s: unable to Set Byte Swap" + " Mode\n", card_name(pdev)); + wanxl_pci_remove_one(pdev); + return -ENODEV; + } + + for (i = 0; i < ports; i++) { + port_t *port = (void *)card + sizeof(card_t) + + i * sizeof(port_t); + struct net_device *dev = hdlc_to_dev(&port->hdlc); + spin_lock_init(&port->lock); + SET_MODULE_OWNER(dev); + dev->tx_queue_len = 50; + dev->do_ioctl = wanxl_ioctl; + dev->open = wanxl_open; + dev->stop = wanxl_close; + port->hdlc.attach = wanxl_attach; + port->hdlc.xmit = wanxl_xmit; + if(register_hdlc_device(&port->hdlc)) { + printk(KERN_ERR "wanXL %s: unable to register hdlc" + " device\n", card_name(pdev)); + wanxl_pci_remove_one(pdev); + return -ENOBUFS; + } + card->ports[i] = port; + dev->get_stats = wanxl_get_stats; + port->card = card; + port->node = i; + get_status(port)->clocking = CLOCK_EXT; + } + + for (i = 0; i < RX_QUEUE_LENGTH; i++) { + struct sk_buff *skb = dev_alloc_skb(BUFFER_LENGTH); + card->rx_skbs[i] = skb; + if (skb) + card->status->rx_descs[i].address = + pci_map_single(card->pdev, skb->data, + BUFFER_LENGTH, + PCI_DMA_FROMDEVICE); + } + + mem = ioremap_nocache(mem_phy, PDM_OFFSET + sizeof(firmware)); + for (i = 0; i < sizeof(firmware); i += 4) + writel(htonl(*(u32*)(firmware + i)), mem + PDM_OFFSET + i); + + for (i = 0; i < ports; i++) + writel(card->status_address + + (void *)&card->status->port_status[i] - + (void *)card->status, mem + PDM_OFFSET + 4 + i * 4); + writel(card->status_address, mem + PDM_OFFSET + 20); + writel(PDM_OFFSET, mem); + iounmap(mem); + + writel(0, card->plx + PLX_MAILBOX_5); + + if (wanxl_puts_command(card, MBX1_CMD_ABORTJ)) { + printk(KERN_WARNING "wanXL %s: unable to Abort and Jump\n", + card_name(pdev)); + wanxl_pci_remove_one(pdev); + return -ENODEV; + } + + stat = 0; + timeout = jiffies + 5 * HZ; + do { + if ((stat = readl(card->plx + PLX_MAILBOX_5)) != 0) + break; + schedule(); + }while (time_after(timeout, jiffies)); + + if (!stat) { + printk(KERN_WARNING "wanXL %s: timeout while initializing card" + "firmware\n", card_name(pdev)); + wanxl_pci_remove_one(pdev); + return -ENODEV; + } + +#if DETECT_RAM + ramsize = stat; +#endif + + printk(KERN_INFO "wanXL %s: at 0x%X, %u KB of RAM at 0x%X, irq" + " %u\n" KERN_INFO "wanXL %s: port", card_name(pdev), + plx_phy, ramsize / 1024, mem_phy, pdev->irq, card_name(pdev)); + + for (i = 0; i < ports; i++) + printk("%s #%i: %s", i ? "," : "", i, + port_name(card->ports[i])); + printk("\n"); + + /* Allocate IRQ */ + if(request_irq(pdev->irq, wanxl_intr, SA_SHIRQ, "wanXL", card)) { + printk(KERN_WARNING "wanXL %s: could not allocate IRQ%i.\n", + card_name(pdev), pdev->irq); + wanxl_pci_remove_one(pdev); + return -EBUSY; + } + card->irq = pdev->irq; + + return 0; +} + +static struct pci_device_id wanxl_pci_tbl[] __devinitdata = { + { PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_SBE_WANXL100, PCI_ANY_ID, + PCI_ANY_ID, 0, 0, 0 }, + { PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_SBE_WANXL200, PCI_ANY_ID, + PCI_ANY_ID, 0, 0, 0 }, + { PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_SBE_WANXL400, PCI_ANY_ID, + PCI_ANY_ID, 0, 0, 0 }, + { 0, } +}; + + +static struct pci_driver wanxl_pci_driver = { + name: "wanXL", + id_table: wanxl_pci_tbl, + probe: wanxl_pci_init_one, + remove: wanxl_pci_remove_one, +}; + + +static int __init wanxl_init_module(void) +{ +#ifdef MODULE + printk(KERN_INFO "%s\n", version); +#endif + return pci_module_init(&wanxl_pci_driver); +} + +static void __exit wanxl_cleanup_module(void) +{ + pci_unregister_driver(&wanxl_pci_driver); +} + + +MODULE_AUTHOR("Krzysztof Halasa "); +MODULE_DESCRIPTION("SBE Inc. wanXL serial port driver"); +MODULE_LICENSE("GPL v2"); +MODULE_DEVICE_TABLE(pci, wanxl_pci_tbl); + +module_init(wanxl_init_module); +module_exit(wanxl_cleanup_module); diff -prauN linux-2.6.0-test5/drivers/net/wan/wanxl.h wli-2.6.0-test5-bk12-25/drivers/net/wan/wanxl.h --- linux-2.6.0-test5/drivers/net/wan/wanxl.h 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/drivers/net/wan/wanxl.h 2003-09-25 19:16:02.000000000 -0700 @@ -0,0 +1,152 @@ +/* + * wanXL serial card driver for Linux + * definitions common to host driver and card firmware + * + * Copyright (C) 2003 Krzysztof Halasa + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of version 2 of the GNU General Public License + * as published by the Free Software Foundation. + */ + +#define RESET_WHILE_LOADING 0 + +/* you must rebuild the firmware if any of the following is changed */ +#define DETECT_RAM 0 /* needed for > 4MB RAM, 16 MB maximum */ +#define QUICC_MEMCPY_USES_PLX 1 /* must be used if the host has > 256 MB RAM */ + + +#define STATUS_CABLE_V35 2 +#define STATUS_CABLE_X21 3 +#define STATUS_CABLE_V24 4 +#define STATUS_CABLE_EIA530 5 +#define STATUS_CABLE_INVALID 6 +#define STATUS_CABLE_NONE 7 + +#define STATUS_CABLE_DCE 0x8000 +#define STATUS_CABLE_DSR 0x0010 +#define STATUS_CABLE_DCD 0x0008 +#define STATUS_CABLE_PM_SHIFT 5 + +#define PDM_OFFSET 0x1000 + +#define TX_BUFFERS 10 /* per port */ +#define RX_BUFFERS 30 +#define RX_QUEUE_LENGTH 40 /* card->host queue length - per card */ + +#define PACKET_EMPTY 0x00 +#define PACKET_FULL 0x10 +#define PACKET_SENT 0x20 /* TX only */ +#define PACKET_UNDERRUN 0x30 /* TX only */ +#define PACKET_PORT_MASK 0x03 /* RX only */ + +/* bit numbers in PLX9060 doorbell registers */ +#define DOORBELL_FROM_CARD_TX_0 0 /* packet sent by the card */ +#define DOORBELL_FROM_CARD_TX_1 1 +#define DOORBELL_FROM_CARD_TX_2 2 +#define DOORBELL_FROM_CARD_TX_3 3 +#define DOORBELL_FROM_CARD_RX 4 +#define DOORBELL_FROM_CARD_CABLE_0 5 /* cable/PM/etc. changed */ +#define DOORBELL_FROM_CARD_CABLE_1 6 +#define DOORBELL_FROM_CARD_CABLE_2 7 +#define DOORBELL_FROM_CARD_CABLE_3 8 + +#define DOORBELL_TO_CARD_OPEN_0 0 +#define DOORBELL_TO_CARD_OPEN_1 1 +#define DOORBELL_TO_CARD_OPEN_2 2 +#define DOORBELL_TO_CARD_OPEN_3 3 +#define DOORBELL_TO_CARD_CLOSE_0 4 +#define DOORBELL_TO_CARD_CLOSE_1 5 +#define DOORBELL_TO_CARD_CLOSE_2 6 +#define DOORBELL_TO_CARD_CLOSE_3 7 +#define DOORBELL_TO_CARD_TX_0 8 /* outbound packet queued */ +#define DOORBELL_TO_CARD_TX_1 9 +#define DOORBELL_TO_CARD_TX_2 10 +#define DOORBELL_TO_CARD_TX_3 11 + +/* firmware-only status bits, starting from last DOORBELL_TO_CARD + 1 */ +#define TASK_SCC_0 12 +#define TASK_SCC_1 13 +#define TASK_SCC_2 14 +#define TASK_SCC_3 15 + +#define ALIGN32(x) (((x) + 3) & 0xFFFFFFFC) +#define BUFFER_LENGTH ALIGN32(HDLC_MAX_MRU + 4) /* 4 bytes for 32-bit CRC */ + +/* Address of TX and RX buffers in 68360 address space */ +#define BUFFERS_ADDR 0x4000 /* 16 KB */ + +#ifndef __ASSEMBLER__ +#define PLX_OFFSET 0 +#else +#define PLX_OFFSET PLX + 0x80 +#endif + +#define PLX_MAILBOX_0 (PLX_OFFSET + 0x40) +#define PLX_MAILBOX_1 (PLX_OFFSET + 0x44) +#define PLX_MAILBOX_2 (PLX_OFFSET + 0x48) +#define PLX_MAILBOX_3 (PLX_OFFSET + 0x4C) +#define PLX_MAILBOX_4 (PLX_OFFSET + 0x50) +#define PLX_MAILBOX_5 (PLX_OFFSET + 0x54) +#define PLX_MAILBOX_6 (PLX_OFFSET + 0x58) +#define PLX_MAILBOX_7 (PLX_OFFSET + 0x5C) +#define PLX_DOORBELL_TO_CARD (PLX_OFFSET + 0x60) +#define PLX_DOORBELL_FROM_CARD (PLX_OFFSET + 0x64) +#define PLX_INTERRUPT_CS (PLX_OFFSET + 0x68) +#define PLX_CONTROL (PLX_OFFSET + 0x6C) + +#ifdef __ASSEMBLER__ +#define PLX_DMA_0_MODE (PLX + 0x100) +#define PLX_DMA_0_PCI (PLX + 0x104) +#define PLX_DMA_0_LOCAL (PLX + 0x108) +#define PLX_DMA_0_LENGTH (PLX + 0x10C) +#define PLX_DMA_0_DESC (PLX + 0x110) +#define PLX_DMA_1_MODE (PLX + 0x114) +#define PLX_DMA_1_PCI (PLX + 0x118) +#define PLX_DMA_1_LOCAL (PLX + 0x11C) +#define PLX_DMA_1_LENGTH (PLX + 0x120) +#define PLX_DMA_1_DESC (PLX + 0x124) +#define PLX_DMA_CMD_STS (PLX + 0x128) +#define PLX_DMA_ARBITR_0 (PLX + 0x12C) +#define PLX_DMA_ARBITR_1 (PLX + 0x130) +#endif + +#define DESC_LENGTH 12 + +/* offsets from start of status_t */ +/* card to host */ +#define STATUS_OPEN 0 +#define STATUS_CABLE (STATUS_OPEN + 4) +#define STATUS_RX_OVERRUNS (STATUS_CABLE + 4) +#define STATUS_RX_FRAME_ERRORS (STATUS_RX_OVERRUNS + 4) + +/* host to card */ +#define STATUS_PARITY (STATUS_RX_FRAME_ERRORS + 4) +#define STATUS_ENCODING (STATUS_PARITY + 4) +#define STATUS_CLOCKING (STATUS_ENCODING + 4) +#define STATUS_TX_DESCS (STATUS_CLOCKING + 4) + +#ifndef __ASSEMBLER__ + +typedef struct { + volatile u32 stat; + u32 address; /* PCI address */ + volatile u32 length; +}desc_t; + + +typedef struct { +// Card to host + volatile u32 open; + volatile u32 cable; + volatile u32 rx_overruns; + volatile u32 rx_frame_errors; + +// Host to card + u32 parity; + u32 encoding; + u32 clocking; + desc_t tx_descs[TX_BUFFERS]; +}port_status_t; + +#endif /* __ASSEMBLER__ */ diff -prauN linux-2.6.0-test5/drivers/net/wan/wanxlfw.S wli-2.6.0-test5-bk12-25/drivers/net/wan/wanxlfw.S --- linux-2.6.0-test5/drivers/net/wan/wanxlfw.S 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/drivers/net/wan/wanxlfw.S 2003-09-25 19:16:02.000000000 -0700 @@ -0,0 +1,895 @@ +.psize 0 +/* + wanXL serial card driver for Linux + card firmware part + + Copyright (C) 2003 Krzysztof Halasa + + This program is free software; you can redistribute it and/or modify it + under the terms of version 2 of the GNU General Public License + as published by the Free Software Foundation. + + + + + DPRAM BDs: + 0x000 - 0x050 TX#0 0x050 - 0x140 RX#0 + 0x140 - 0x190 TX#1 0x190 - 0x280 RX#1 + 0x280 - 0x2D0 TX#2 0x2D0 - 0x3C0 RX#2 + 0x3C0 - 0x410 TX#3 0x410 - 0x500 RX#3 + + + 000 5FF 1536 Bytes Dual-Port RAM User Data / BDs + 600 6FF 256 Bytes Dual-Port RAM User Data / BDs + 700 7FF 256 Bytes Dual-Port RAM User Data / BDs + C00 CBF 192 Bytes Dual-Port RAM Parameter RAM Page 1 + D00 DBF 192 Bytes Dual-Port RAM Parameter RAM Page 2 + E00 EBF 192 Bytes Dual-Port RAM Parameter RAM Page 3 + F00 FBF 192 Bytes Dual-Port RAM Parameter RAM Page 4 + + local interrupts level + NMI 7 + PIT timer, CPM (RX/TX complete) 4 + PCI9060 DMA and PCI doorbells 3 + Cable - not used 1 +*/ + +#include +#include "wanxl.h" + +/* memory addresses and offsets */ + +MAX_RAM_SIZE = 16 * 1024 * 1024 // max RAM supported by hardware + +PCI9060_VECTOR = 0x0000006C +CPM_IRQ_BASE = 0x40 +ERROR_VECTOR = CPM_IRQ_BASE * 4 +SCC1_VECTOR = (CPM_IRQ_BASE + 0x1E) * 4 +SCC2_VECTOR = (CPM_IRQ_BASE + 0x1D) * 4 +SCC3_VECTOR = (CPM_IRQ_BASE + 0x1C) * 4 +SCC4_VECTOR = (CPM_IRQ_BASE + 0x1B) * 4 +CPM_IRQ_LEVEL = 4 +TIMER_IRQ = 128 +TIMER_IRQ_LEVEL = 4 +PITR_CONST = 0x100 + 16 // 1 Hz timer + +MBAR = 0x0003FF00 + +VALUE_WINDOW = 0x40000000 +ORDER_WINDOW = 0xC0000000 + +PLX = 0xFFF90000 + +CSRA = 0xFFFB0000 +CSRB = 0xFFFB0002 +CSRC = 0xFFFB0004 +CSRD = 0xFFFB0006 +STATUS_CABLE_LL = 0x2000 +STATUS_CABLE_DTR = 0x1000 + +DPRBASE = 0xFFFC0000 + +SCC1_BASE = DPRBASE + 0xC00 +MISC_BASE = DPRBASE + 0xCB0 +SCC2_BASE = DPRBASE + 0xD00 +SCC3_BASE = DPRBASE + 0xE00 +SCC4_BASE = DPRBASE + 0xF00 + +// offset from SCCx_BASE +// SCC_xBASE contain offsets from DPRBASE and must be divisible by 8 +SCC_RBASE = 0 // 16-bit RxBD base address +SCC_TBASE = 2 // 16-bit TxBD base address +SCC_RFCR = 4 // 8-bit Rx function code +SCC_TFCR = 5 // 8-bit Tx function code +SCC_MRBLR = 6 // 16-bit maximum Rx buffer length +SCC_C_MASK = 0x34 // 32-bit CRC constant +SCC_C_PRES = 0x38 // 32-bit CRC preset +SCC_MFLR = 0x46 // 16-bit max Rx frame length (without flags) + +REGBASE = DPRBASE + 0x1000 +PICR = REGBASE + 0x026 // 16-bit periodic irq control +PITR = REGBASE + 0x02A // 16-bit periodic irq timing +OR1 = REGBASE + 0x064 // 32-bit RAM bank #1 options +CICR = REGBASE + 0x540 // 32(24)-bit CP interrupt config +CIMR = REGBASE + 0x548 // 32-bit CP interrupt mask +CISR = REGBASE + 0x54C // 32-bit CP interrupts in-service +PADIR = REGBASE + 0x550 // 16-bit PortA data direction bitmap +PAPAR = REGBASE + 0x552 // 16-bit PortA pin assignment bitmap +PAODR = REGBASE + 0x554 // 16-bit PortA open drain bitmap +PADAT = REGBASE + 0x556 // 16-bit PortA data register + +PCDIR = REGBASE + 0x560 // 16-bit PortC data direction bitmap +PCPAR = REGBASE + 0x562 // 16-bit PortC pin assignment bitmap +PCSO = REGBASE + 0x564 // 16-bit PortC special options +PCDAT = REGBASE + 0x566 // 16-bit PortC data register +PCINT = REGBASE + 0x568 // 16-bit PortC interrupt control +CR = REGBASE + 0x5C0 // 16-bit Command register + +SCC1_REGS = REGBASE + 0x600 +SCC2_REGS = REGBASE + 0x620 +SCC3_REGS = REGBASE + 0x640 +SCC4_REGS = REGBASE + 0x660 +SICR = REGBASE + 0x6EC // 32-bit SI clock route + +// offset from SCCx_REGS +SCC_GSMR_L = 0x00 // 32 bits +SCC_GSMR_H = 0x04 // 32 bits +SCC_PSMR = 0x08 // 16 bits +SCC_TODR = 0x0C // 16 bits +SCC_DSR = 0x0E // 16 bits +SCC_SCCE = 0x10 // 16 bits +SCC_SCCM = 0x14 // 16 bits +SCC_SCCS = 0x17 // 8 bits + +#if QUICC_MEMCPY_USES_PLX + .macro memcpy_from_pci src, dest, len // len must be < 8 MB + addl #3, \len + andl #0xFFFFFFFC, \len // always copy n * 4 bytes + movel \src, PLX_DMA_0_PCI + movel \dest, PLX_DMA_0_LOCAL + movel \len, PLX_DMA_0_LENGTH + movel #0x0103, PLX_DMA_CMD_STS // start channel 0 transfer + bsr memcpy_from_pci_run + .endm + + .macro memcpy_to_pci src, dest, len + addl #3, \len + andl #0xFFFFFFFC, \len // always copy n * 4 bytes + movel \src, PLX_DMA_1_LOCAL + movel \dest, PLX_DMA_1_PCI + movel \len, PLX_DMA_1_LENGTH + movel #0x0301, PLX_DMA_CMD_STS // start channel 1 transfer + bsr memcpy_to_pci_run + .endm + +#else + + .macro memcpy src, dest, len // len must be < 65536 bytes + movel %d7, -(%sp) // src and dest must be < 256 MB + movel \len, %d7 // bits 0 and 1 + lsrl #2, \len + andl \len, \len + beq 99f // only 0 - 3 bytes + subl #1, \len // for dbf +98: movel (\src)+, (\dest)+ + dbfw \len, 98b +99: movel %d7, \len + btstl #1, \len + beq 99f + movew (\src)+, (\dest)+ +99: btstl #0, \len + beq 99f + moveb (\src)+, (\dest)+ +99: + movel (%sp)+, %d7 + .endm + + .macro memcpy_from_pci src, dest, len + addl #VALUE_WINDOW, \src + memcpy \src, \dest, \len + .endm + + .macro memcpy_to_pci src, dest, len + addl #VALUE_WINDOW, \dest + memcpy \src, \dest, \len + .endm +#endif + + + .macro wait_for_command +99: btstl #0, CR + bne 99b + .endm + + + + +/****************************** card initialization *******************/ + .text + .global _start +_start: bra init + + .org _start + 4 +ch_status_addr: .long 0, 0, 0, 0 +rx_descs_addr: .long 0 + +init: +#if DETECT_RAM + movel OR1, %d0 + andl #0xF00007FF, %d0 // mask AMxx bits + orl #0xFFFF800 & ~(MAX_RAM_SIZE - 1), %d0 // update RAM bank size + movel %d0, OR1 +#endif + + addl #VALUE_WINDOW, rx_descs_addr // PCI addresses of shared data + clrl %d0 // D0 = 4 * port +init_1: tstl ch_status_addr(%d0) + beq init_2 + addl #VALUE_WINDOW, ch_status_addr(%d0) +init_2: addl #4, %d0 + cmpl #4 * 4, %d0 + bne init_1 + + movel #pci9060_interrupt, PCI9060_VECTOR + movel #error_interrupt, ERROR_VECTOR + movel #port_interrupt_1, SCC1_VECTOR + movel #port_interrupt_2, SCC2_VECTOR + movel #port_interrupt_3, SCC3_VECTOR + movel #port_interrupt_4, SCC4_VECTOR + movel #timer_interrupt, TIMER_IRQ * 4 + + movel #0x78000000, CIMR // only SCCx IRQs from CPM + movew #(TIMER_IRQ_LEVEL << 8) + TIMER_IRQ, PICR // interrupt from PIT + movew #PITR_CONST, PITR + + // SCC1=SCCa SCC2=SCCb SCC3=SCCc SCC4=SCCd prio=4 HP=-1 IRQ=64-79 + movel #0xD41F40 + (CPM_IRQ_LEVEL << 13), CICR + movel #0x543, PLX_DMA_0_MODE // 32-bit, Ready, Burst, IRQ + movel #0x543, PLX_DMA_1_MODE + movel #0x0, PLX_DMA_0_DESC // from PCI to local + movel #0x8, PLX_DMA_1_DESC // from local to PCI + movel #0x101, PLX_DMA_CMD_STS // enable both DMA channels + // enable local IRQ, DMA, doorbells and PCI IRQ + orl #0x000F0300, PLX_INTERRUPT_CS + +#if DETECT_RAM + bsr ram_test +#else + movel #1, PLX_MAILBOX_5 // non-zero value = init complete +#endif + bsr check_csr + + movew #0xFFFF, PAPAR // all pins are clocks/data + clrw PADIR // first function + clrw PCSO // CD and CTS always active + + +/****************************** main loop *****************************/ + +main: movel channel_stats, %d7 // D7 = doorbell + irq status + clrl channel_stats + + tstl %d7 + bne main_1 + // nothing to do - wait for next event + stop #0x2200 // supervisor + IRQ level 2 + movew #0x2700, %sr // disable IRQs again + bra main + +main_1: clrl %d0 // D0 = 4 * port + clrl %d6 // D6 = doorbell to host value + +main_l: btstl #DOORBELL_TO_CARD_CLOSE_0, %d7 + beq main_op + bclrl #DOORBELL_TO_CARD_OPEN_0, %d7 // in case both bits are set + bsr close_port +main_op: + btstl #DOORBELL_TO_CARD_OPEN_0, %d7 + beq main_cl + bsr open_port +main_cl: + btstl #DOORBELL_TO_CARD_TX_0, %d7 + beq main_txend + bsr tx +main_txend: + btstl #TASK_SCC_0, %d7 + beq main_next + bsr tx_end + bsr rx + +main_next: + lsrl #1, %d7 // port status for next port + addl #4, %d0 // D0 = 4 * next port + cmpl #4 * 4, %d0 + bne main_l + movel %d6, PLX_DOORBELL_FROM_CARD // signal the host + bra main + + +/****************************** open port *****************************/ + +open_port: // D0 = 4 * port, D6 = doorbell to host + movel ch_status_addr(%d0), %a0 // A0 = port status address + tstl STATUS_OPEN(%a0) + bne open_port_ret // port already open + movel #1, STATUS_OPEN(%a0) // confirm the port is open +// setup BDs + clrl tx_in(%d0) + clrl tx_out(%d0) + clrl tx_count(%d0) + clrl rx_in(%d0) + + movel SICR, %d1 // D1 = clock settings in SICR + andl clocking_mask(%d0), %d1 + cmpl #CLOCK_TXFROMRX, STATUS_CLOCKING(%a0) + bne open_port_clock_ext + orl clocking_txfromrx(%d0), %d1 + bra open_port_set_clock + +open_port_clock_ext: + orl clocking_ext(%d0), %d1 +open_port_set_clock: + movel %d1, SICR // update clock settings in SICR + + orw #STATUS_CABLE_DTR, csr_output(%d0) // DTR on + bsr check_csr // call with disabled timer interrupt + +// Setup TX descriptors + movel first_buffer(%d0), %d1 // D1 = starting buffer address + movel tx_first_bd(%d0), %a1 // A1 = starting TX BD address + movel #TX_BUFFERS - 2, %d2 // D2 = TX_BUFFERS - 1 counter + movel #0x18000000, %d3 // D3 = initial TX BD flags: Int + Last + cmpl #PARITY_NONE, STATUS_PARITY(%a0) + beq open_port_tx_loop + bsetl #26, %d3 // TX BD flag: Transmit CRC +open_port_tx_loop: + movel %d3, (%a1)+ // TX flags + length + movel %d1, (%a1)+ // buffer address + addl #BUFFER_LENGTH, %d1 + dbfw %d2, open_port_tx_loop + + bsetl #29, %d3 // TX BD flag: Wrap (last BD) + movel %d3, (%a1)+ // Final TX flags + length + movel %d1, (%a1)+ // buffer address + +// Setup RX descriptors // A1 = starting RX BD address + movel #RX_BUFFERS - 2, %d2 // D2 = RX_BUFFERS - 1 counter +open_port_rx_loop: + movel #0x90000000, (%a1)+ // RX flags + length + movel %d1, (%a1)+ // buffer address + addl #BUFFER_LENGTH, %d1 + dbfw %d2, open_port_rx_loop + + movel #0xB0000000, (%a1)+ // Final RX flags + length + movel %d1, (%a1)+ // buffer address + +// Setup port parameters + movel scc_base_addr(%d0), %a1 // A1 = SCC_BASE address + movel scc_reg_addr(%d0), %a2 // A2 = SCC_REGS address + + movel #0xFFFF, SCC_SCCE(%a2) // clear status bits + movel #0x0000, SCC_SCCM(%a2) // interrupt mask + + movel tx_first_bd(%d0), %d1 + movew %d1, SCC_TBASE(%a1) // D1 = offset of first TxBD + addl #TX_BUFFERS * 8, %d1 + movew %d1, SCC_RBASE(%a1) // D1 = offset of first RxBD + moveb #0x8, SCC_RFCR(%a1) // Intel mode, 1000 + moveb #0x8, SCC_TFCR(%a1) + +// Parity settings + cmpl #PARITY_CRC16_PR1_CCITT, STATUS_PARITY(%a0) + bne open_port_parity_1 + clrw SCC_PSMR(%a2) // CRC16-CCITT + movel #0xF0B8, SCC_C_MASK(%a1) + movel #0xFFFF, SCC_C_PRES(%a1) + movew #HDLC_MAX_MRU + 2, SCC_MFLR(%a1) // 2 bytes for CRC + movew #2, parity_bytes(%d0) + bra open_port_2 + +open_port_parity_1: + cmpl #PARITY_CRC32_PR1_CCITT, STATUS_PARITY(%a0) + bne open_port_parity_2 + movew #0x0800, SCC_PSMR(%a2) // CRC32-CCITT + movel #0xDEBB20E3, SCC_C_MASK(%a1) + movel #0xFFFFFFFF, SCC_C_PRES(%a1) + movew #HDLC_MAX_MRU + 4, SCC_MFLR(%a1) // 4 bytes for CRC + movew #4, parity_bytes(%d0) + bra open_port_2 + +open_port_parity_2: + cmpl #PARITY_CRC16_PR0_CCITT, STATUS_PARITY(%a0) + bne open_port_parity_3 + clrw SCC_PSMR(%a2) // CRC16-CCITT preset 0 + movel #0xF0B8, SCC_C_MASK(%a1) + clrl SCC_C_PRES(%a1) + movew #HDLC_MAX_MRU + 2, SCC_MFLR(%a1) // 2 bytes for CRC + movew #2, parity_bytes(%d0) + bra open_port_2 + +open_port_parity_3: + cmpl #PARITY_CRC32_PR0_CCITT, STATUS_PARITY(%a0) + bne open_port_parity_4 + movew #0x0800, SCC_PSMR(%a2) // CRC32-CCITT preset 0 + movel #0xDEBB20E3, SCC_C_MASK(%a1) + clrl SCC_C_PRES(%a1) + movew #HDLC_MAX_MRU + 4, SCC_MFLR(%a1) // 4 bytes for CRC + movew #4, parity_bytes(%d0) + bra open_port_2 + +open_port_parity_4: + clrw SCC_PSMR(%a2) // no parity + movel #0xF0B8, SCC_C_MASK(%a1) + movel #0xFFFF, SCC_C_PRES(%a1) + movew #HDLC_MAX_MRU, SCC_MFLR(%a1) // 0 bytes for CRC + clrw parity_bytes(%d0) + +open_port_2: + movel #0x00000003, SCC_GSMR_H(%a2) // RTSM + cmpl #ENCODING_NRZI, STATUS_ENCODING(%a0) + bne open_port_nrz + movel #0x10040900, SCC_GSMR_L(%a2) // NRZI: TCI Tend RECN+TENC=1 + bra open_port_3 + +open_port_nrz: + movel #0x10040000, SCC_GSMR_L(%a2) // NRZ: TCI Tend RECN+TENC=0 +open_port_3: + movew #BUFFER_LENGTH, SCC_MRBLR(%a1) + movel %d0, %d1 + lsll #4, %d1 // D1 bits 7 and 6 = port + orl #1, %d1 + movew %d1, CR // Init SCC RX and TX params + wait_for_command + + // TCI Tend ENR ENT + movew #0x001F, SCC_SCCM(%a2) // TXE RXF BSY TXB RXB interrupts + orl #0x00000030, SCC_GSMR_L(%a2) // enable SCC +open_port_ret: + rts + + +/****************************** close port ****************************/ + +close_port: // D0 = 4 * port, D6 = doorbell to host + movel scc_reg_addr(%d0), %a0 // A0 = SCC_REGS address + clrw SCC_SCCM(%a0) // no SCC interrupts + andl #0xFFFFFFCF, SCC_GSMR_L(%a0) // Disable ENT and ENR + + andw #~STATUS_CABLE_DTR, csr_output(%d0) // DTR off + bsr check_csr // call with disabled timer interrupt + + movel ch_status_addr(%d0), %d1 + clrl STATUS_OPEN(%d1) // confirm the port is closed + rts + + +/****************************** transmit packet ***********************/ +// queue packets for transmission +tx: // D0 = 4 * port, D6 = doorbell to host + cmpl #TX_BUFFERS, tx_count(%d0) + beq tx_ret // all DB's = descs in use + + movel tx_out(%d0), %d1 + movel %d1, %d2 // D1 = D2 = tx_out BD# = desc# + mulul #DESC_LENGTH, %d2 // D2 = TX desc offset + addl ch_status_addr(%d0), %d2 + addl #STATUS_TX_DESCS, %d2 // D2 = TX desc address + cmpl #PACKET_FULL, (%d2) // desc status + bne tx_ret + +// queue it + movel 4(%d2), %a0 // PCI address + lsll #3, %d1 // BD is 8-bytes long + addl tx_first_bd(%d0), %d1 // D1 = current tx_out BD addr + + movel 4(%d1), %a1 // A1 = dest address + movel 8(%d2), %d2 // D2 = length + movew %d2, 2(%d1) // length into BD + memcpy_from_pci %a0, %a1, %d2 + bsetl #31, (%d1) // CP go ahead + +// update tx_out and tx_count + movel tx_out(%d0), %d1 + addl #1, %d1 + cmpl #TX_BUFFERS, %d1 + bne tx_1 + clrl %d1 +tx_1: movel %d1, tx_out(%d0) + + addl #1, tx_count(%d0) + bra tx + +tx_ret: rts + + +/****************************** packet received ***********************/ + +// Service receive buffers // D0 = 4 * port, D6 = doorbell to host +rx: movel rx_in(%d0), %d1 // D1 = rx_in BD# + lsll #3, %d1 // BD is 8-bytes long + addl rx_first_bd(%d0), %d1 // D1 = current rx_in BD address + movew (%d1), %d2 // D2 = RX BD flags + btstl #15, %d2 + bne rx_ret // BD still empty + + btstl #1, %d2 + bne rx_overrun + + tstw parity_bytes(%d0) + bne rx_parity + bclrl #2, %d2 // do not test for CRC errors +rx_parity: + andw #0x0CBC, %d2 // mask status bits + cmpw #0x0C00, %d2 // correct frame + bne rx_bad_frame + clrl %d3 + movew 2(%d1), %d3 + subw parity_bytes(%d0), %d3 // D3 = packet length + cmpw #HDLC_MAX_MRU, %d3 + bgt rx_bad_frame + +rx_good_frame: + movel rx_out, %d2 + mulul #DESC_LENGTH, %d2 + addl rx_descs_addr, %d2 // D2 = RX desc address + cmpl #PACKET_EMPTY, (%d2) // desc stat + bne rx_overrun + + movel %d3, 8(%d2) + movel 4(%d1), %a0 // A0 = source address + movel 4(%d2), %a1 + tstl %a1 + beq rx_ignore_data + memcpy_to_pci %a0, %a1, %d3 +rx_ignore_data: + movel packet_full(%d0), (%d2) // update desc stat + +// update D6 and rx_out + bsetl #DOORBELL_FROM_CARD_RX, %d6 // signal host that RX completed + movel rx_out, %d2 + addl #1, %d2 + cmpl #RX_QUEUE_LENGTH, %d2 + bne rx_1 + clrl %d2 +rx_1: movel %d2, rx_out + +rx_free_bd: + andw #0xF000, (%d1) // clear CM and error bits + bsetl #31, (%d1) // free BD +// update rx_in + movel rx_in(%d0), %d1 + addl #1, %d1 + cmpl #RX_BUFFERS, %d1 + bne rx_2 + clrl %d1 +rx_2: movel %d1, rx_in(%d0) + bra rx + +rx_overrun: + movel ch_status_addr(%d0), %d2 + addl #1, STATUS_RX_OVERRUNS(%d2) + bra rx_free_bd + +rx_bad_frame: + movel ch_status_addr(%d0), %d2 + addl #1, STATUS_RX_FRAME_ERRORS(%d2) + bra rx_free_bd + +rx_ret: rts + + +/****************************** packet transmitted ********************/ + +// Service transmit buffers // D0 = 4 * port, D6 = doorbell to host +tx_end: tstl tx_count(%d0) + beq tx_end_ret // TX buffers already empty + + movel tx_in(%d0), %d1 + movel %d1, %d2 // D1 = D2 = tx_in BD# = desc# + lsll #3, %d1 // BD is 8-bytes long + addl tx_first_bd(%d0), %d1 // D1 = current tx_in BD address + movew (%d1), %d3 // D3 = TX BD flags + btstl #15, %d3 + bne tx_end_ret // BD still being transmitted + +// update D6, tx_in and tx_count + orl bell_tx(%d0), %d6 // signal host that TX desc freed + subl #1, tx_count(%d0) + movel tx_in(%d0), %d1 + addl #1, %d1 + cmpl #TX_BUFFERS, %d1 + bne tx_end_1 + clrl %d1 +tx_end_1: + movel %d1, tx_in(%d0) + +// free host's descriptor + mulul #DESC_LENGTH, %d2 // D2 = TX desc offset + addl ch_status_addr(%d0), %d2 + addl #STATUS_TX_DESCS, %d2 // D2 = TX desc address + btstl #1, %d3 + bne tx_end_underrun + movel #PACKET_SENT, (%d2) + bra tx_end + +tx_end_underrun: + movel #PACKET_UNDERRUN, (%d2) + bra tx_end + +tx_end_ret: rts + + +/****************************** PLX PCI9060 DMA memcpy ****************/ + +#if QUICC_MEMCPY_USES_PLX +// called with interrupts disabled +memcpy_from_pci_run: + movel %d0, -(%sp) + movew %sr, -(%sp) +memcpy_1: + movel PLX_DMA_CMD_STS, %d0 // do not btst PLX register directly + btstl #4, %d0 // transfer done? + bne memcpy_end + stop #0x2200 // enable PCI9060 interrupts + movew #0x2700, %sr // disable interrupts again + bra memcpy_1 + +memcpy_to_pci_run: + movel %d0, -(%sp) + movew %sr, -(%sp) +memcpy_2: + movel PLX_DMA_CMD_STS, %d0 // do not btst PLX register directly + btstl #12, %d0 // transfer done? + bne memcpy_end + stop #0x2200 // enable PCI9060 interrupts + movew #0x2700, %sr // disable interrupts again + bra memcpy_2 + +memcpy_end: + movew (%sp)+, %sr + movel (%sp)+, %d0 + rts +#endif + + + + + + +/****************************** PLX PCI9060 interrupt *****************/ + +pci9060_interrupt: + movel %d0, -(%sp) + + movel PLX_DOORBELL_TO_CARD, %d0 + movel %d0, PLX_DOORBELL_TO_CARD // confirm all requests + orl %d0, channel_stats + + movel #0x0909, PLX_DMA_CMD_STS // clear DMA ch #0 and #1 interrupts + + movel (%sp)+, %d0 + rte + +/****************************** SCC interrupts ************************/ + +port_interrupt_1: + orl #0, SCC1_REGS + SCC_SCCE; // confirm SCC events + orl #1 << TASK_SCC_0, channel_stats + movel #0x40000000, CISR + rte + +port_interrupt_2: + orl #0, SCC2_REGS + SCC_SCCE; // confirm SCC events + orl #1 << TASK_SCC_1, channel_stats + movel #0x20000000, CISR + rte + +port_interrupt_3: + orl #0, SCC3_REGS + SCC_SCCE; // confirm SCC events + orl #1 << TASK_SCC_2, channel_stats + movel #0x10000000, CISR + rte + +port_interrupt_4: + orl #0, SCC4_REGS + SCC_SCCE; // confirm SCC events + orl #1 << TASK_SCC_3, channel_stats + movel #0x08000000, CISR + rte + +error_interrupt: + rte + + +/****************************** cable and PM routine ******************/ +// modified registers: none +check_csr: + movel %d0, -(%sp) + movel %d1, -(%sp) + movel %d2, -(%sp) + movel %a0, -(%sp) + movel %a1, -(%sp) + + clrl %d0 // D0 = 4 * port + movel #CSRA, %a0 // A0 = CSR address + +check_csr_loop: + movew (%a0), %d1 // D1 = CSR input bits + andl #0xE7, %d1 // PM and cable sense bits (no DCE bit) + cmpw #STATUS_CABLE_V35 * (1 + 1 << STATUS_CABLE_PM_SHIFT), %d1 + bne check_csr_1 + movew #0x0E08, %d1 + bra check_csr_valid + +check_csr_1: + cmpw #STATUS_CABLE_X21 * (1 + 1 << STATUS_CABLE_PM_SHIFT), %d1 + bne check_csr_2 + movew #0x0408, %d1 + bra check_csr_valid + +check_csr_2: + cmpw #STATUS_CABLE_V24 * (1 + 1 << STATUS_CABLE_PM_SHIFT), %d1 + bne check_csr_3 + movew #0x0208, %d1 + bra check_csr_valid + +check_csr_3: + cmpw #STATUS_CABLE_EIA530 * (1 + 1 << STATUS_CABLE_PM_SHIFT), %d1 + bne check_csr_disable + movew #0x0D08, %d1 + bra check_csr_valid + +check_csr_disable: + movew #0x0008, %d1 // D1 = disable everything + movew #0x80E7, %d2 // D2 = input mask: ignore DSR + bra check_csr_write + +check_csr_valid: // D1 = mode and IRQ bits + movew csr_output(%d0), %d2 + andw #0x3000, %d2 // D2 = requested LL and DTR bits + orw %d2, %d1 // D1 = all requested output bits + movew #0x80FF, %d2 // D2 = input mask: include DSR + +check_csr_write: + cmpw old_csr_output(%d0), %d1 + beq check_csr_input + movew %d1, old_csr_output(%d0) + movew %d1, (%a0) // Write CSR output bits + +check_csr_input: + movew (PCDAT), %d1 + andw dcd_mask(%d0), %d1 + beq check_csr_dcd_on // DCD and CTS signals are negated + movew (%a0), %d1 // D1 = CSR input bits + andw #~STATUS_CABLE_DCD, %d1 // DCD off + bra check_csr_previous + +check_csr_dcd_on: + movew (%a0), %d1 // D1 = CSR input bits + orw #STATUS_CABLE_DCD, %d1 // DCD on +check_csr_previous: + andw %d2, %d1 // input mask + movel ch_status_addr(%d0), %a1 + cmpl STATUS_CABLE(%a1), %d1 // check for change + beq check_csr_next + movel %d1, STATUS_CABLE(%a1) // update status + movel bell_cable(%d0), PLX_DOORBELL_FROM_CARD // signal the host + +check_csr_next: + addl #2, %a0 // next CSR register + addl #4, %d0 // D0 = 4 * next port + cmpl #4 * 4, %d0 + bne check_csr_loop + + movel (%sp)+, %a1 + movel (%sp)+, %a0 + movel (%sp)+, %d2 + movel (%sp)+, %d1 + movel (%sp)+, %d0 + rts + + +/****************************** timer interrupt ***********************/ + +timer_interrupt: + bsr check_csr + rte + + +/****************************** RAM sizing and test *******************/ +#if DETECT_RAM +ram_test: + movel #0x12345678, %d1 // D1 = test value + movel %d1, (128 * 1024 - 4) + movel #128 * 1024, %d0 // D0 = RAM size tested +ram_test_size: + cmpl #MAX_RAM_SIZE, %d0 + beq ram_test_size_found + movel %d0, %a0 + addl #128 * 1024 - 4, %a0 + cmpl (%a0), %d1 + beq ram_test_size_check +ram_test_next_size: + lsll #1, %d0 + bra ram_test_size + +ram_test_size_check: + eorl #0xFFFFFFFF, %d1 + movel %d1, (128 * 1024 - 4) + cmpl (%a0), %d1 + bne ram_test_next_size + +ram_test_size_found: // D0 = RAM size + movel %d0, %a0 // A0 = fill ptr + subl #firmware_end + 4, %d0 + lsrl #2, %d0 + movel %d0, %d1 // D1 = DBf counter +ram_test_fill: + movel %a0, -(%a0) + dbfw %d1, ram_test_fill + subl #0x10000, %d1 + cmpl #0xFFFFFFFF, %d1 + bne ram_test_fill + +ram_test_loop: // D0 = DBf counter + cmpl (%a0)+, %a0 + dbnew %d0, ram_test_loop + bne ram_test_found_bad + subl #0x10000, %d0 + cmpl #0xFFFFFFFF, %d0 + bne ram_test_loop + bra ram_test_all_ok + +ram_test_found_bad: + subl #4, %a0 +ram_test_all_ok: + movel %a0, PLX_MAILBOX_5 + rts +#endif + + +/****************************** constants *****************************/ + +scc_reg_addr: + .long SCC1_REGS, SCC2_REGS, SCC3_REGS, SCC4_REGS +scc_base_addr: + .long SCC1_BASE, SCC2_BASE, SCC3_BASE, SCC4_BASE + +tx_first_bd: + .long DPRBASE + .long DPRBASE + (TX_BUFFERS + RX_BUFFERS) * 8 + .long DPRBASE + (TX_BUFFERS + RX_BUFFERS) * 8 * 2 + .long DPRBASE + (TX_BUFFERS + RX_BUFFERS) * 8 * 3 + +rx_first_bd: + .long DPRBASE + TX_BUFFERS * 8 + .long DPRBASE + TX_BUFFERS * 8 + (TX_BUFFERS + RX_BUFFERS) * 8 + .long DPRBASE + TX_BUFFERS * 8 + (TX_BUFFERS + RX_BUFFERS) * 8 * 2 + .long DPRBASE + TX_BUFFERS * 8 + (TX_BUFFERS + RX_BUFFERS) * 8 * 3 + +first_buffer: + .long BUFFERS_ADDR + .long BUFFERS_ADDR + (TX_BUFFERS + RX_BUFFERS) * BUFFER_LENGTH + .long BUFFERS_ADDR + (TX_BUFFERS + RX_BUFFERS) * BUFFER_LENGTH * 2 + .long BUFFERS_ADDR + (TX_BUFFERS + RX_BUFFERS) * BUFFER_LENGTH * 3 + +bell_tx: + .long 1 << DOORBELL_FROM_CARD_TX_0, 1 << DOORBELL_FROM_CARD_TX_1 + .long 1 << DOORBELL_FROM_CARD_TX_2, 1 << DOORBELL_FROM_CARD_TX_3 + +bell_cable: + .long 1 << DOORBELL_FROM_CARD_CABLE_0, 1 << DOORBELL_FROM_CARD_CABLE_1 + .long 1 << DOORBELL_FROM_CARD_CABLE_2, 1 << DOORBELL_FROM_CARD_CABLE_3 + +packet_full: + .long PACKET_FULL, PACKET_FULL + 1, PACKET_FULL + 2, PACKET_FULL + 3 + +clocking_ext: + .long 0x0000002C, 0x00003E00, 0x002C0000, 0x3E000000 +clocking_txfromrx: + .long 0x0000002D, 0x00003F00, 0x002D0000, 0x3F000000 +clocking_mask: + .long 0x000000FF, 0x0000FF00, 0x00FF0000, 0xFF000000 +dcd_mask: + .word 0x020, 0, 0x080, 0, 0x200, 0, 0x800 + + .ascii "wanXL firmware\n" + .asciz "Copyright (C) 2003 Krzysztof Halasa \n" + + +/****************************** variables *****************************/ + + .align 4 +channel_stats: .long 0 + +tx_in: .long 0, 0, 0, 0 // transmitted +tx_out: .long 0, 0, 0, 0 // received from host for transmission +tx_count: .long 0, 0, 0, 0 // currently in transmit queue + +rx_in: .long 0, 0, 0, 0 // received from port +rx_out: .long 0 // transmitted to host +parity_bytes: .word 0, 0, 0, 0, 0, 0, 0 // only 4 words are used + +csr_output: .word 0 +old_csr_output: .word 0, 0, 0, 0, 0, 0, 0 + .align 4 +firmware_end: // must be dword-aligned diff -prauN linux-2.6.0-test5/drivers/net/wan/wanxlfw.inc wli-2.6.0-test5-bk12-25/drivers/net/wan/wanxlfw.inc --- linux-2.6.0-test5/drivers/net/wan/wanxlfw.inc 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/drivers/net/wan/wanxlfw.inc 2003-09-25 19:16:02.000000000 -0700 @@ -0,0 +1,158 @@ +static u8 firmware[]={ +0x60,0x00,0x00,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0xB9,0x40,0x00,0x00,0x00,0x00,0x00, +0x10,0x14,0x42,0x80,0x4A,0xB0,0x09,0xB0,0x00,0x00,0x10,0x04,0x67,0x00,0x00,0x0E, +0x06,0xB0,0x40,0x00,0x00,0x00,0x09,0xB0,0x00,0x00,0x10,0x04,0x58,0x80,0x0C,0x80, +0x00,0x00,0x00,0x10,0x66,0x00,0xFF,0xDE,0x21,0xFC,0x00,0x00,0x16,0xBC,0x00,0x6C, +0x21,0xFC,0x00,0x00,0x17,0x5E,0x01,0x00,0x21,0xFC,0x00,0x00,0x16,0xDE,0x01,0x78, +0x21,0xFC,0x00,0x00,0x16,0xFE,0x01,0x74,0x21,0xFC,0x00,0x00,0x17,0x1E,0x01,0x70, +0x21,0xFC,0x00,0x00,0x17,0x3E,0x01,0x6C,0x21,0xFC,0x00,0x00,0x18,0x4C,0x02,0x00, +0x23,0xFC,0x78,0x00,0x00,0x00,0xFF,0xFC,0x15,0x48,0x33,0xFC,0x04,0x80,0xFF,0xFC, +0x10,0x26,0x33,0xFC,0x01,0x10,0xFF,0xFC,0x10,0x2A,0x23,0xFC,0x00,0xD4,0x9F,0x40, +0xFF,0xFC,0x15,0x40,0x23,0xFC,0x00,0x00,0x05,0x43,0xFF,0xF9,0x01,0x00,0x23,0xFC, +0x00,0x00,0x05,0x43,0xFF,0xF9,0x01,0x14,0x23,0xFC,0x00,0x00,0x00,0x00,0xFF,0xF9, +0x01,0x10,0x23,0xFC,0x00,0x00,0x00,0x08,0xFF,0xF9,0x01,0x24,0x23,0xFC,0x00,0x00, +0x01,0x01,0xFF,0xF9,0x01,0x28,0x00,0xB9,0x00,0x0F,0x03,0x00,0xFF,0xF9,0x00,0xE8, +0x23,0xFC,0x00,0x00,0x00,0x01,0xFF,0xF9,0x00,0xD4,0x61,0x00,0x06,0x74,0x33,0xFC, +0xFF,0xFF,0xFF,0xFC,0x15,0x52,0x42,0x79,0xFF,0xFC,0x15,0x50,0x42,0x79,0xFF,0xFC, +0x15,0x64,0x2E,0x3A,0x08,0x50,0x42,0xB9,0x00,0x00,0x19,0x54,0x4A,0x87,0x66,0x00, +0x00,0x0E,0x4E,0x72,0x22,0x00,0x46,0xFC,0x27,0x00,0x60,0x00,0xFF,0xE6,0x42,0x80, +0x42,0x86,0x08,0x07,0x00,0x04,0x67,0x00,0x00,0x0A,0x08,0x87,0x00,0x00,0x61,0x00, +0x02,0xA0,0x08,0x07,0x00,0x00,0x67,0x00,0x00,0x06,0x61,0x00,0x00,0x36,0x08,0x07, +0x00,0x08,0x67,0x00,0x00,0x06,0x61,0x00,0x02,0xB8,0x08,0x07,0x00,0x0C,0x67,0x00, +0x00,0x0A,0x61,0x00,0x04,0x94,0x61,0x00,0x03,0x60,0xE2,0x8F,0x58,0x80,0x0C,0x80, +0x00,0x00,0x00,0x10,0x66,0x00,0xFF,0xBC,0x23,0xC6,0xFF,0xF9,0x00,0xE4,0x60,0x00, +0xFF,0x92,0x20,0x70,0x09,0xB0,0x00,0x00,0x10,0x04,0x4A,0xA8,0x00,0x00,0x66,0x00, +0x02,0x4E,0x21,0x7C,0x00,0x00,0x00,0x01,0x00,0x00,0x42,0xB0,0x09,0xB0,0x00,0x00, +0x19,0x58,0x42,0xB0,0x09,0xB0,0x00,0x00,0x19,0x68,0x42,0xB0,0x09,0xB0,0x00,0x00, +0x19,0x78,0x42,0xB0,0x09,0xB0,0x00,0x00,0x19,0x88,0x22,0x39,0xFF,0xFC,0x16,0xEC, +0xC2,0xB0,0x09,0xB0,0x00,0x00,0x18,0xF2,0x0C,0xA8,0x00,0x00,0x00,0x04,0x00,0x18, +0x66,0x00,0x00,0x0E,0x82,0xB0,0x09,0xB0,0x00,0x00,0x18,0xE2,0x60,0x00,0x00,0x0A, +0x82,0xB0,0x09,0xB0,0x00,0x00,0x18,0xD2,0x23,0xC1,0xFF,0xFC,0x16,0xEC,0x00,0x70, +0x10,0x00,0x09,0xB0,0x00,0x00,0x19,0xAA,0x61,0x00,0x05,0x76,0x22,0x30,0x09,0xB0, +0x00,0x00,0x18,0x92,0x22,0x70,0x09,0xB0,0x00,0x00,0x18,0x72,0x74,0x08,0x26,0x3C, +0x18,0x00,0x00,0x00,0x0C,0xA8,0x00,0x00,0x00,0x01,0x00,0x10,0x67,0x00,0x00,0x06, +0x08,0xC3,0x00,0x1A,0x22,0xC3,0x22,0xC1,0x06,0x81,0x00,0x00,0x05,0xFC,0x51,0xCA, +0xFF,0xF4,0x08,0xC3,0x00,0x1D,0x22,0xC3,0x22,0xC1,0x74,0x1C,0x22,0xFC,0x90,0x00, +0x00,0x00,0x22,0xC1,0x06,0x81,0x00,0x00,0x05,0xFC,0x51,0xCA,0xFF,0xF0,0x22,0xFC, +0xB0,0x00,0x00,0x00,0x22,0xC1,0x22,0x70,0x09,0xB0,0x00,0x00,0x18,0x62,0x24,0x70, +0x09,0xB0,0x00,0x00,0x18,0x52,0x25,0x7C,0x00,0x00,0xFF,0xFF,0x00,0x10,0x25,0x7C, +0x00,0x00,0x00,0x00,0x00,0x14,0x22,0x30,0x09,0xB0,0x00,0x00,0x18,0x72,0x33,0x41, +0x00,0x02,0x06,0x81,0x00,0x00,0x00,0x50,0x33,0x41,0x00,0x00,0x13,0x7C,0x00,0x08, +0x00,0x04,0x13,0x7C,0x00,0x08,0x00,0x05,0x0C,0xA8,0x00,0x00,0x00,0x05,0x00,0x10, +0x66,0x00,0x00,0x2A,0x42,0x6A,0x00,0x08,0x23,0x7C,0x00,0x00,0xF0,0xB8,0x00,0x34, +0x23,0x7C,0x00,0x00,0xFF,0xFF,0x00,0x38,0x33,0x7C,0x05,0xFA,0x00,0x46,0x31,0xBC, +0x00,0x02,0x09,0xB0,0x00,0x00,0x19,0x9C,0x60,0x00,0x00,0xBC,0x0C,0xA8,0x00,0x00, +0x00,0x07,0x00,0x10,0x66,0x00,0x00,0x2C,0x35,0x7C,0x08,0x00,0x00,0x08,0x23,0x7C, +0xDE,0xBB,0x20,0xE3,0x00,0x34,0x23,0x7C,0xFF,0xFF,0xFF,0xFF,0x00,0x38,0x33,0x7C, +0x05,0xFC,0x00,0x46,0x31,0xBC,0x00,0x04,0x09,0xB0,0x00,0x00,0x19,0x9C,0x60,0x00, +0x00,0x86,0x0C,0xA8,0x00,0x00,0x00,0x04,0x00,0x10,0x66,0x00,0x00,0x26,0x42,0x6A, +0x00,0x08,0x23,0x7C,0x00,0x00,0xF0,0xB8,0x00,0x34,0x42,0xA9,0x00,0x38,0x33,0x7C, +0x05,0xFA,0x00,0x46,0x31,0xBC,0x00,0x02,0x09,0xB0,0x00,0x00,0x19,0x9C,0x60,0x00, +0x00,0x56,0x0C,0xA8,0x00,0x00,0x00,0x06,0x00,0x10,0x66,0x00,0x00,0x28,0x35,0x7C, +0x08,0x00,0x00,0x08,0x23,0x7C,0xDE,0xBB,0x20,0xE3,0x00,0x34,0x42,0xA9,0x00,0x38, +0x33,0x7C,0x05,0xFC,0x00,0x46,0x31,0xBC,0x00,0x04,0x09,0xB0,0x00,0x00,0x19,0x9C, +0x60,0x00,0x00,0x24,0x42,0x6A,0x00,0x08,0x23,0x7C,0x00,0x00,0xF0,0xB8,0x00,0x34, +0x23,0x7C,0x00,0x00,0xFF,0xFF,0x00,0x38,0x33,0x7C,0x05,0xF8,0x00,0x46,0x42,0x70, +0x09,0xB0,0x00,0x00,0x19,0x9C,0x25,0x7C,0x00,0x00,0x00,0x03,0x00,0x04,0x0C,0xA8, +0x00,0x00,0x00,0x02,0x00,0x14,0x66,0x00,0x00,0x0E,0x25,0x7C,0x10,0x04,0x09,0x00, +0x00,0x00,0x60,0x00,0x00,0x0A,0x25,0x7C,0x10,0x04,0x00,0x00,0x00,0x00,0x33,0x7C, +0x05,0xFC,0x00,0x06,0x22,0x00,0xE9,0x89,0x00,0x81,0x00,0x00,0x00,0x01,0x33,0xC1, +0xFF,0xFC,0x15,0xC0,0x08,0x39,0x00,0x00,0xFF,0xFC,0x15,0xC0,0x66,0x00,0xFF,0xF6, +0x35,0x7C,0x00,0x1F,0x00,0x14,0x00,0xAA,0x00,0x00,0x00,0x30,0x00,0x00,0x4E,0x75, +0x20,0x70,0x09,0xB0,0x00,0x00,0x18,0x52,0x42,0x68,0x00,0x14,0x02,0xA8,0xFF,0xFF, +0xFF,0xCF,0x00,0x00,0x02,0x70,0xEF,0xFF,0x09,0xB0,0x00,0x00,0x19,0xAA,0x61,0x00, +0x03,0x70,0x22,0x30,0x09,0xB0,0x00,0x00,0x10,0x04,0x42,0xB0,0x19,0x90,0x4E,0x75, +0x0C,0xB0,0x00,0x00,0x00,0x0A,0x09,0xB0,0x00,0x00,0x19,0x78,0x67,0x00,0x00,0xA8, +0x22,0x30,0x09,0xB0,0x00,0x00,0x19,0x68,0x24,0x01,0x4C,0x3C,0x20,0x00,0x00,0x00, +0x00,0x0C,0xD4,0xB0,0x09,0xB0,0x00,0x00,0x10,0x04,0x06,0x82,0x00,0x00,0x00,0x1C, +0x0C,0xB0,0x00,0x00,0x00,0x10,0x29,0x90,0x66,0x00,0x00,0x7C,0x20,0x70,0x29,0xA0, +0x00,0x04,0xE7,0x89,0xD2,0xB0,0x09,0xB0,0x00,0x00,0x18,0x72,0x22,0x70,0x19,0xA0, +0x00,0x04,0x24,0x30,0x29,0xA0,0x00,0x08,0x31,0x82,0x19,0xA0,0x00,0x02,0x56,0x82, +0x02,0x82,0xFF,0xFF,0xFF,0xFC,0x23,0xC8,0xFF,0xF9,0x01,0x04,0x23,0xC9,0xFF,0xF9, +0x01,0x08,0x23,0xC2,0xFF,0xF9,0x01,0x0C,0x23,0xFC,0x00,0x00,0x01,0x03,0xFF,0xF9, +0x01,0x28,0x61,0x00,0x01,0xF6,0x08,0xF0,0x00,0x1F,0x19,0x90,0x22,0x30,0x09,0xB0, +0x00,0x00,0x19,0x68,0x52,0x81,0x0C,0x81,0x00,0x00,0x00,0x0A,0x66,0x00,0x00,0x04, +0x42,0x81,0x21,0x81,0x09,0xB0,0x00,0x00,0x19,0x68,0x52,0xB0,0x09,0xB0,0x00,0x00, +0x19,0x78,0x60,0x00,0xFF,0x4C,0x4E,0x75,0x22,0x30,0x09,0xB0,0x00,0x00,0x19,0x88, +0xE7,0x89,0xD2,0xB0,0x09,0xB0,0x00,0x00,0x18,0x82,0x34,0x30,0x19,0x90,0x08,0x02, +0x00,0x0F,0x66,0x00,0x01,0x12,0x08,0x02,0x00,0x01,0x66,0x00,0x00,0xE6,0x4A,0x70, +0x09,0xB0,0x00,0x00,0x19,0x9C,0x66,0x00,0x00,0x06,0x08,0x82,0x00,0x02,0x02,0x42, +0x0C,0xBC,0x0C,0x42,0x0C,0x00,0x66,0x00,0x00,0xDC,0x42,0x83,0x36,0x30,0x19,0xA0, +0x00,0x02,0x96,0x70,0x09,0xB0,0x00,0x00,0x19,0x9C,0x0C,0x43,0x05,0xF8,0x6E,0x00, +0x00,0xC4,0x24,0x3A,0x04,0x84,0x4C,0x3C,0x20,0x00,0x00,0x00,0x00,0x0C,0xD4,0xBA, +0xFA,0xF4,0x0C,0xB0,0x00,0x00,0x00,0x00,0x29,0x90,0x66,0x00,0x00,0x96,0x21,0x83, +0x29,0xA0,0x00,0x08,0x20,0x70,0x19,0xA0,0x00,0x04,0x22,0x70,0x29,0xA0,0x00,0x04, +0x4A,0x89,0x67,0x00,0x00,0x2A,0x56,0x83,0x02,0x83,0xFF,0xFF,0xFF,0xFC,0x23,0xC8, +0xFF,0xF9,0x01,0x1C,0x23,0xC9,0xFF,0xF9,0x01,0x18,0x23,0xC3,0xFF,0xF9,0x01,0x20, +0x23,0xFC,0x00,0x00,0x03,0x01,0xFF,0xF9,0x01,0x28,0x61,0x00,0x01,0x2C,0x21,0xB0, +0x09,0xB0,0x00,0x00,0x18,0xC2,0x29,0x90,0x08,0xC6,0x00,0x04,0x24,0x3A,0x04,0x1A, +0x52,0x82,0x0C,0x82,0x00,0x00,0x00,0x28,0x66,0x00,0x00,0x04,0x42,0x82,0x23,0xC2, +0x00,0x00,0x19,0x98,0x02,0x70,0xF0,0x00,0x19,0x90,0x08,0xF0,0x00,0x1F,0x19,0x90, +0x22,0x30,0x09,0xB0,0x00,0x00,0x19,0x88,0x52,0x81,0x0C,0x81,0x00,0x00,0x00,0x1E, +0x66,0x00,0x00,0x04,0x42,0x81,0x21,0x81,0x09,0xB0,0x00,0x00,0x19,0x88,0x60,0x00, +0xFE,0xF8,0x24,0x30,0x09,0xB0,0x00,0x00,0x10,0x04,0x52,0xB0,0x29,0xA0,0x00,0x08, +0x60,0x00,0xFF,0xC2,0x24,0x30,0x09,0xB0,0x00,0x00,0x10,0x04,0x52,0xB0,0x29,0xA0, +0x00,0x0C,0x60,0x00,0xFF,0xB0,0x4E,0x75,0x4A,0xB0,0x09,0xB0,0x00,0x00,0x19,0x78, +0x67,0x00,0x00,0x86,0x22,0x30,0x09,0xB0,0x00,0x00,0x19,0x58,0x24,0x01,0xE7,0x89, +0xD2,0xB0,0x09,0xB0,0x00,0x00,0x18,0x72,0x36,0x30,0x19,0x90,0x08,0x03,0x00,0x0F, +0x66,0x00,0x00,0x66,0x8C,0xB0,0x09,0xB0,0x00,0x00,0x18,0xA2,0x53,0xB0,0x09,0xB0, +0x00,0x00,0x19,0x78,0x22,0x30,0x09,0xB0,0x00,0x00,0x19,0x58,0x52,0x81,0x0C,0x81, +0x00,0x00,0x00,0x0A,0x66,0x00,0x00,0x04,0x42,0x81,0x21,0x81,0x09,0xB0,0x00,0x00, +0x19,0x58,0x4C,0x3C,0x20,0x00,0x00,0x00,0x00,0x0C,0xD4,0xB0,0x09,0xB0,0x00,0x00, +0x10,0x04,0x06,0x82,0x00,0x00,0x00,0x1C,0x08,0x03,0x00,0x01,0x66,0x00,0x00,0x0E, +0x21,0xBC,0x00,0x00,0x00,0x20,0x29,0x90,0x60,0x00,0xFF,0x7E,0x21,0xBC,0x00,0x00, +0x00,0x30,0x29,0x90,0x60,0x00,0xFF,0x72,0x4E,0x75,0x2F,0x00,0x40,0xE7,0x20,0x39, +0xFF,0xF9,0x01,0x28,0x08,0x00,0x00,0x04,0x66,0x00,0x00,0x2C,0x4E,0x72,0x22,0x00, +0x46,0xFC,0x27,0x00,0x60,0x00,0xFF,0xE8,0x2F,0x00,0x40,0xE7,0x20,0x39,0xFF,0xF9, +0x01,0x28,0x08,0x00,0x00,0x0C,0x66,0x00,0x00,0x0E,0x4E,0x72,0x22,0x00,0x46,0xFC, +0x27,0x00,0x60,0x00,0xFF,0xE8,0x46,0xDF,0x20,0x1F,0x4E,0x75,0x2F,0x00,0x20,0x39, +0xFF,0xF9,0x00,0xE0,0x23,0xC0,0xFF,0xF9,0x00,0xE0,0x81,0xB9,0x00,0x00,0x19,0x54, +0x23,0xFC,0x00,0x00,0x09,0x09,0xFF,0xF9,0x01,0x28,0x20,0x1F,0x4E,0x73,0x00,0xB9, +0x00,0x00,0x00,0x00,0xFF,0xFC,0x16,0x10,0x00,0xB9,0x00,0x00,0x10,0x00,0x00,0x00, +0x19,0x54,0x23,0xFC,0x40,0x00,0x00,0x00,0xFF,0xFC,0x15,0x4C,0x4E,0x73,0x00,0xB9, +0x00,0x00,0x00,0x00,0xFF,0xFC,0x16,0x30,0x00,0xB9,0x00,0x00,0x20,0x00,0x00,0x00, +0x19,0x54,0x23,0xFC,0x20,0x00,0x00,0x00,0xFF,0xFC,0x15,0x4C,0x4E,0x73,0x00,0xB9, +0x00,0x00,0x00,0x00,0xFF,0xFC,0x16,0x50,0x00,0xB9,0x00,0x00,0x40,0x00,0x00,0x00, +0x19,0x54,0x23,0xFC,0x10,0x00,0x00,0x00,0xFF,0xFC,0x15,0x4C,0x4E,0x73,0x00,0xB9, +0x00,0x00,0x00,0x00,0xFF,0xFC,0x16,0x70,0x00,0xB9,0x00,0x00,0x80,0x00,0x00,0x00, +0x19,0x54,0x23,0xFC,0x08,0x00,0x00,0x00,0xFF,0xFC,0x15,0x4C,0x4E,0x73,0x4E,0x73, +0x2F,0x00,0x2F,0x01,0x2F,0x02,0x2F,0x08,0x2F,0x09,0x42,0x80,0x20,0x7C,0xFF,0xFB, +0x00,0x00,0x32,0x10,0x02,0x81,0x00,0x00,0x00,0xE7,0x0C,0x41,0x00,0x42,0x66,0x00, +0x00,0x0A,0x32,0x3C,0x0E,0x08,0x60,0x00,0x00,0x3E,0x0C,0x41,0x00,0x63,0x66,0x00, +0x00,0x0A,0x32,0x3C,0x04,0x08,0x60,0x00,0x00,0x2E,0x0C,0x41,0x00,0x84,0x66,0x00, +0x00,0x0A,0x32,0x3C,0x02,0x08,0x60,0x00,0x00,0x1E,0x0C,0x41,0x00,0xA5,0x66,0x00, +0x00,0x0A,0x32,0x3C,0x0D,0x08,0x60,0x00,0x00,0x0E,0x32,0x3C,0x00,0x08,0x34,0x3C, +0x80,0xE7,0x60,0x00,0x00,0x14,0x34,0x30,0x09,0xB0,0x00,0x00,0x19,0xAA,0x02,0x42, +0x30,0x00,0x82,0x42,0x34,0x3C,0x80,0xFF,0xB2,0x70,0x09,0xB0,0x00,0x00,0x19,0xAC, +0x67,0x00,0x00,0x0C,0x31,0x81,0x09,0xB0,0x00,0x00,0x19,0xAC,0x30,0x81,0x32,0x39, +0xFF,0xFC,0x15,0x66,0xC2,0x70,0x09,0xB0,0x00,0x00,0x19,0x02,0x67,0x00,0x00,0x0C, +0x32,0x10,0x02,0x41,0xFF,0xF7,0x60,0x00,0x00,0x08,0x32,0x10,0x00,0x41,0x00,0x08, +0xC2,0x42,0x22,0x70,0x09,0xB0,0x00,0x00,0x10,0x04,0xB2,0xA9,0x00,0x04,0x67,0x00, +0x00,0x12,0x23,0x41,0x00,0x04,0x23,0xF0,0x09,0xB0,0x00,0x00,0x18,0xB2,0xFF,0xF9, +0x00,0xE4,0x54,0x88,0x58,0x80,0x0C,0x80,0x00,0x00,0x00,0x10,0x66,0x00,0xFF,0x34, +0x22,0x5F,0x20,0x5F,0x24,0x1F,0x22,0x1F,0x20,0x1F,0x4E,0x75,0x61,0x00,0xFF,0x12, +0x4E,0x73,0xFF,0xFC,0x16,0x00,0xFF,0xFC,0x16,0x20,0xFF,0xFC,0x16,0x40,0xFF,0xFC, +0x16,0x60,0xFF,0xFC,0x0C,0x00,0xFF,0xFC,0x0D,0x00,0xFF,0xFC,0x0E,0x00,0xFF,0xFC, +0x0F,0x00,0xFF,0xFC,0x00,0x00,0xFF,0xFC,0x01,0x40,0xFF,0xFC,0x02,0x80,0xFF,0xFC, +0x03,0xC0,0xFF,0xFC,0x00,0x50,0xFF,0xFC,0x01,0x90,0xFF,0xFC,0x02,0xD0,0xFF,0xFC, +0x04,0x10,0x00,0x00,0x40,0x00,0x00,0x01,0x2F,0x60,0x00,0x02,0x1E,0xC0,0x00,0x03, +0x0E,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00, +0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x80,0x00,0x00, +0x01,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x12,0x00,0x00, +0x00,0x13,0x00,0x00,0x00,0x2C,0x00,0x00,0x3E,0x00,0x00,0x2C,0x00,0x00,0x3E,0x00, +0x00,0x00,0x00,0x00,0x00,0x2D,0x00,0x00,0x3F,0x00,0x00,0x2D,0x00,0x00,0x3F,0x00, +0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0xFF,0x00,0x00,0xFF,0x00,0x00,0xFF,0x00, +0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x80,0x00,0x00,0x02,0x00,0x00,0x00,0x08,0x00, +0x77,0x61,0x6E,0x58,0x4C,0x20,0x66,0x69,0x72,0x6D,0x77,0x61,0x72,0x65,0x0A,0x43, +0x6F,0x70,0x79,0x72,0x69,0x67,0x68,0x74,0x20,0x28,0x43,0x29,0x20,0x32,0x30,0x30, +0x33,0x20,0x4B,0x72,0x7A,0x79,0x73,0x7A,0x74,0x6F,0x66,0x20,0x48,0x61,0x6C,0x61, +0x73,0x61,0x20,0x3C,0x6B,0x68,0x63,0x40,0x70,0x6D,0x2E,0x77,0x61,0x77,0x2E,0x70, +0x6C,0x3E,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}; diff -prauN linux-2.6.0-test5/drivers/net/wd.c wli-2.6.0-test5-bk12-25/drivers/net/wd.c --- linux-2.6.0-test5/drivers/net/wd.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wd.c 2003-09-25 19:16:02.000000000 -0700 @@ -235,7 +235,7 @@ static int __init wd_probe1(struct net_d int reg4 = inb(ioaddr+4); if (ancient || reg1 == 0xff) { /* Ack!! No way to read the IRQ! */ short nic_addr = ioaddr+WD_NIC_OFFSET; - unsigned long irq_mask, delay; + unsigned long irq_mask; /* We have an old-style ethercard that doesn't report its IRQ line. Do autoirq to find the IRQ line. Note that this IS NOT @@ -248,8 +248,7 @@ static int __init wd_probe1(struct net_d outb_p(0x00, nic_addr + EN0_RCNTLO); outb_p(0x00, nic_addr + EN0_RCNTHI); outb(E8390_RREAD+E8390_START, nic_addr); /* Trigger it... */ - delay = jiffies + HZ/50; - while (time_before(jiffies, delay)) ; + mdelay(20); dev->irq = probe_irq_off(irq_mask); outb_p(0x00, nic_addr+EN0_IMR); /* Mask all intrs. again. */ diff -prauN linux-2.6.0-test5/drivers/net/wireless/Kconfig wli-2.6.0-test5-bk12-25/drivers/net/wireless/Kconfig --- linux-2.6.0-test5/drivers/net/wireless/Kconfig 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wireless/Kconfig 2003-09-25 19:16:02.000000000 -0700 @@ -53,9 +53,7 @@ config STRIP in saying Y to STRIP now, except that it makes the kernel a bit bigger. - You can also 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 . The module will be + To compile this as a module, choose M here: the module will be called strip. config ARLAN @@ -97,11 +95,8 @@ config WAVELAN . Please read the man pages contained therein. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called wavelan. If you want to compile it as a - module, say M here and read as well - as . + To compile this driver as a module, choose M here: the module will be + called wavelan. config PCMCIA_WAVELAN tristate "AT&T/Lucent old WaveLAN Pcmcia wireless support" @@ -111,11 +106,8 @@ config PCMCIA_WAVELAN (PC-card) wireless Ethernet networking card to your computer. This driver is for the non-IEEE-802.11 Wavelan cards. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called wavelan_cs. If you want to compile it - as a module, say M here and read . - If unsure, say N. + To compile this driver as a module, choose M here: the module will be + called wavelan_cs. If unsure, say N. config PCMCIA_NETWAVE tristate "Xircom Netwave AirSurfer Pcmcia wireless support" @@ -124,11 +116,8 @@ config PCMCIA_NETWAVE Say Y here if you intend to attach this type of PCMCIA (PC-card) wireless Ethernet networking card to your computer. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called netwave_cs. If you want to compile it - as a module, say M here and read . - If unsure, say N. + To compile this driver as a module, choose M here: the module will be + called netwave_cs. If unsure, say N. comment "Wireless 802.11 Frequency Hopping cards support" depends on NET_RADIO && PCMCIA @@ -142,11 +131,8 @@ config PCMCIA_RAYCS Please read the file for details. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called ray_cs. If you want to compile it as a - module, say M here and read . If - unsure, say N. + To compile this driver as a module, choose M here: the module will be + called ray_cs. If unsure, say N. comment "Wireless 802.11b ISA/PCI cards support" depends on NET_RADIO && (ISA || PCI || PPC_PMAC || PCMCIA) diff -prauN linux-2.6.0-test5/drivers/net/wireless/airo.c wli-2.6.0-test5-bk12-25/drivers/net/wireless/airo.c --- linux-2.6.0-test5/drivers/net/wireless/airo.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wireless/airo.c 2003-09-25 19:16:02.000000000 -0700 @@ -18,7 +18,6 @@ ======================================================================*/ #include -#include #include #include @@ -42,7 +41,6 @@ #include #include #include -#include #include #include @@ -1435,7 +1433,7 @@ void emmh32_setseed(emmh32_context *cont int i,j; u32 counter; - u8 *cipher; + u8 *cipher, plain[16]; struct scatterlist sg[1]; crypto_cipher_setkey(tfm, pkey, 16); @@ -1446,8 +1444,9 @@ void emmh32_setseed(emmh32_context *cont aes_counter[13] = (u8)(counter >> 16); aes_counter[12] = (u8)(counter >> 24); counter++; - sg[0].page = virt_to_page(aes_counter); - sg[0].offset = ((long) aes_counter & ~PAGE_MASK); + memcpy (plain, aes_counter, 16); + sg[0].page = virt_to_page(plain); + sg[0].offset = ((long) plain & ~PAGE_MASK); sg[0].length = 16; crypto_cipher_encrypt(tfm, sg, sg, 16); cipher = kmap(sg[0].page) + sg[0].offset; @@ -4624,7 +4623,7 @@ static int __devinit airo_pci_probe(stru return -ENODEV; pci_set_drvdata(pdev, dev); - clear_bit (FLAG_PCI, &((struct airo_info *)dev->priv)->flags); + set_bit (FLAG_PCI, &((struct airo_info *)dev->priv)->flags); return 0; } diff -prauN linux-2.6.0-test5/drivers/net/wireless/airo_cs.c wli-2.6.0-test5-bk12-25/drivers/net/wireless/airo_cs.c --- linux-2.6.0-test5/drivers/net/wireless/airo_cs.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wireless/airo_cs.c 2003-09-25 19:16:02.000000000 -0700 @@ -163,24 +163,6 @@ typedef struct local_info_t { /*====================================================================== - This bit of code is used to avoid unregistering network devices - at inappropriate times. 2.2 and later kernels are fairly picky - about when this can happen. - - ======================================================================*/ - -static void flush_stale_links(void) -{ - dev_link_t *link, *next; - for (link = dev_list; link; link = next) { - next = link->next; - if (link->state & DEV_STALE_LINK) - airo_detach(link); - } -} - -/*====================================================================== - airo_attach() creates an "instance" of the driver, allocating local data structures for one device. The device is registered with Card Services. @@ -199,8 +181,7 @@ static dev_link_t *airo_attach(void) int ret, i; DEBUG(0, "airo_attach()\n"); - flush_stale_links(); - + /* Initialize the dev_link_t structure */ link = kmalloc(sizeof(struct dev_link_t), GFP_KERNEL); if (!link) { @@ -285,10 +266,8 @@ static void airo_detach(dev_link_t *link if (link->state & DEV_CONFIG) { airo_release(link); - if (link->state & DEV_STALE_CONFIG) { - link->state |= DEV_STALE_LINK; + if (link->state & DEV_STALE_CONFIG) return; - } } if ( ((local_info_t*)link->priv)->eth_dev ) { @@ -554,8 +533,10 @@ static void airo_release(dev_link_t *lin if (link->irq.AssignedIRQ) CardServices(ReleaseIRQ, link->handle, &link->irq); link->state &= ~DEV_CONFIG; - -} /* airo_release */ + + if (link->state & DEV_STALE_CONFIG) + airo_detach(link); +} /*====================================================================== diff -prauN linux-2.6.0-test5/drivers/net/wireless/arlan-proc.c wli-2.6.0-test5-bk12-25/drivers/net/wireless/arlan-proc.c --- linux-2.6.0-test5/drivers/net/wireless/arlan-proc.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wireless/arlan-proc.c 2003-09-25 19:16:02.000000000 -0700 @@ -5,9 +5,6 @@ #ifdef CONFIG_PROC_FS - -#include - /* void enableReceive(struct net_device* dev); */ diff -prauN linux-2.6.0-test5/drivers/net/wireless/arlan.c wli-2.6.0-test5-bk12-25/drivers/net/wireless/arlan.c --- linux-2.6.0-test5/drivers/net/wireless/arlan.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wireless/arlan.c 2003-09-25 19:16:02.000000000 -0700 @@ -5,6 +5,7 @@ * This module provides support for the Arlan 655 card made by Aironet */ +#include #include #include "arlan.h" diff -prauN linux-2.6.0-test5/drivers/net/wireless/arlan.h wli-2.6.0-test5-bk12-25/drivers/net/wireless/arlan.h --- linux-2.6.0-test5/drivers/net/wireless/arlan.h 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wireless/arlan.h 2003-09-25 19:16:02.000000000 -0700 @@ -3,7 +3,6 @@ * Copyright (C) 1998 Elmer.Joandi@ut.ee, +37-255-13500 * GNU General Public License applies */ -#include #include #include diff -prauN linux-2.6.0-test5/drivers/net/wireless/atmel_cs.c wli-2.6.0-test5-bk12-25/drivers/net/wireless/atmel_cs.c --- linux-2.6.0-test5/drivers/net/wireless/atmel_cs.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wireless/atmel_cs.c 2003-09-25 19:16:02.000000000 -0700 @@ -176,24 +176,6 @@ typedef struct local_info_t { /*====================================================================== - This bit of code is used to avoid unregistering network devices - at inappropriate times. 2.2 and later kernels are fairly picky - about when this can happen. - - ======================================================================*/ - -static void flush_stale_links(void) -{ - dev_link_t *link, *next; - for (link = dev_list; link; link = next) { - next = link->next; - if (link->state & DEV_STALE_LINK) - atmel_detach(link); - } -} - -/*====================================================================== - atmel_attach() creates an "instance" of the driver, allocating local data structures for one device. The device is registered with Card Services. @@ -212,8 +194,7 @@ static dev_link_t *atmel_attach(void) int ret, i; DEBUG(0, "atmel_attach()\n"); - flush_stale_links(); - + /* Initialize the dev_link_t structure */ link = kmalloc(sizeof(struct dev_link_t), GFP_KERNEL); if (!link) { @@ -296,29 +277,19 @@ static void atmel_detach(dev_link_t *lin if (*linkp == NULL) return; - if ( link->state & DEV_CONFIG ) { + if (link->state & DEV_CONFIG) atmel_release(link); - if ( link->state & DEV_STALE_CONFIG ) { - link->state |= DEV_STALE_LINK; - return; - } - } - /* Break the link with Card Services */ if (link->handle) CardServices(DeregisterClient, link->handle); - - - + /* Unlink device structure, free pieces */ *linkp = link->next; - if (link->priv) { + if (link->priv) kfree(link->priv); - } kfree(link); - -} /* atmel_detach */ +} /*====================================================================== diff -prauN linux-2.6.0-test5/drivers/net/wireless/netwave_cs.c wli-2.6.0-test5-bk12-25/drivers/net/wireless/netwave_cs.c --- linux-2.6.0-test5/drivers/net/wireless/netwave_cs.c 2003-09-08 12:50:33.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wireless/netwave_cs.c 2003-09-25 19:16:02.000000000 -0700 @@ -211,7 +211,6 @@ static void netwave_pcmcia_config(dev_li insertion */ static dev_link_t *netwave_attach(void); /* Create instance */ static void netwave_detach(dev_link_t *); /* Destroy instance */ -static void netwave_flush_stale_links(void); /* Destroy all staled instances */ /* Hardware configuration */ static void netwave_doreset(ioaddr_t iobase, u_char* ramBase); @@ -444,9 +443,6 @@ static dev_link_t *netwave_attach(void) DEBUG(0, "netwave_attach()\n"); - /* Perform some cleanup */ - netwave_flush_stale_links(); - /* Initialize the dev_link_t structure */ dev = alloc_etherdev(sizeof(netwave_private)); if (!dev) @@ -553,7 +549,6 @@ static void netwave_detach(dev_link_t *l if (link->state & DEV_STALE_CONFIG) { DEBUG(1, "netwave_cs: detach postponed, '%s' still " "locked\n", link->dev->dev_name); - link->state |= DEV_STALE_LINK; return; } } @@ -581,31 +576,6 @@ static void netwave_detach(dev_link_t *l } /* netwave_detach */ /* - * Function netwave_flush_stale_links (void) - * - * This deletes all driver "instances" that need to be deleted. - * Sometimes, netwave_detach can't be performed following a call from - * cardmgr (device still open) and the device is put in a STALE_LINK - * state. - * This function is in charge of making the cleanup... - */ -static void netwave_flush_stale_links(void) -{ - dev_link_t * link; /* Current node in linked list */ - dev_link_t * next; /* Next node in linked list */ - - DEBUG(1, "netwave_flush_stale_links(0x%p)\n", dev_list); - - /* Go through the list */ - for (link = dev_list; link; link = next) { - next = link->next; - /* Check if in need of being removed */ - if(link->state & DEV_STALE_LINK) - netwave_detach(link); - } -} /* netwave_flush_stale_links */ - -/* * Wireless Handler : get protocol name */ static int netwave_get_name(struct net_device *dev, @@ -1181,9 +1151,11 @@ static void netwave_release(dev_link_t * CardServices(ReleaseIO, link->handle, &link->io); CardServices(ReleaseIRQ, link->handle, &link->irq); - link->state &= ~(DEV_CONFIG | DEV_STALE_CONFIG); + link->state &= ~DEV_CONFIG; -} /* netwave_release */ + if (link->state & DEV_STALE_CONFIG) + netwave_detach(link); +} /* * Function netwave_event (event, priority, args) @@ -1755,8 +1727,6 @@ static void __exit exit_netwave_cs(void) { pcmcia_unregister_driver(&netwave_driver); - /* Do some cleanup of the device list */ - netwave_flush_stale_links(); if (dev_list != NULL) /* Critical situation */ printk("netwave_cs: devices remaining when removing module\n"); } diff -prauN linux-2.6.0-test5/drivers/net/wireless/orinoco_cs.c wli-2.6.0-test5-bk12-25/drivers/net/wireless/orinoco_cs.c --- linux-2.6.0-test5/drivers/net/wireless/orinoco_cs.c 2003-09-08 12:50:27.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wireless/orinoco_cs.c 2003-09-25 19:16:02.000000000 -0700 @@ -153,24 +153,6 @@ orinoco_cs_error(client_handle_t handle, CardServices(ReportError, handle, &err); } - -/* Remove zombie instances (card removed, detach pending) */ -static void -flush_stale_links(void) -{ - dev_link_t *link, *next; - - TRACE_ENTER(""); - - for (link = dev_list; link; link = next) { - next = link->next; - if (link->state & DEV_STALE_LINK) { - orinoco_cs_detach(link); - } - } - TRACE_EXIT(""); -} - /* * This creates an "instance" of the driver, allocating local data * structures for one device. The device is registered with Card @@ -189,9 +171,6 @@ orinoco_cs_attach(void) client_reg_t client_reg; int ret, i; - /* A bit of cleanup */ - flush_stale_links(); - dev = alloc_orinocodev(sizeof(*card), orinoco_cs_hard_reset); if (! dev) return NULL; @@ -266,13 +245,8 @@ orinoco_cs_detach(dev_link_t * link) return; } - if (link->state & DEV_CONFIG) { + if (link->state & DEV_CONFIG) orinoco_cs_release(link); - if (link->state & DEV_CONFIG) { - link->state |= DEV_STALE_LINK; - return; - } - } /* Break the link with Card Services */ if (link->handle) diff -prauN linux-2.6.0-test5/drivers/net/wireless/ray_cs.c wli-2.6.0-test5-bk12-25/drivers/net/wireless/ray_cs.c --- linux-2.6.0-test5/drivers/net/wireless/ray_cs.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wireless/ray_cs.c 2003-09-25 19:16:02.000000000 -0700 @@ -138,7 +138,7 @@ static void ray_update_parm(struct net_d static void verify_dl_startup(u_long); /* Prototypes for interrpt time functions **********************************/ -static void ray_interrupt (int reg, void *dev_id, struct pt_regs *regs); +static irqreturn_t ray_interrupt (int reg, void *dev_id, struct pt_regs *regs); static void clear_interrupt(ray_dev_t *local); static void rx_deauthenticate(ray_dev_t *local, struct rcs *prcs, unsigned int pkt_addr, int rx_len); @@ -319,24 +319,6 @@ static char hop_pattern_length[] = { 1, static char rcsid[] = "Raylink/WebGear wireless LAN - Corey "; -/*====================================================================== - - This bit of code is used to avoid unregistering network devices - at inappropriate times. 2.2 and later kernels are fairly picky - about when this can happen. - -======================================================================*/ - -static void flush_stale_links(void) -{ - dev_link_t *link, *next; - for (link = dev_list; link; link = next) { - next = link->next; - if (link->state & DEV_STALE_LINK) - ray_detach(link); - } -} - /*============================================================================= ray_attach() creates an "instance" of the driver, allocating local data structures for one device. The device is registered @@ -354,7 +336,6 @@ static dev_link_t *ray_attach(void) struct net_device *dev; DEBUG(1, "ray_attach()\n"); - flush_stale_links(); /* Initialize the dev_link_t structure */ link = kmalloc(sizeof(struct dev_link_t), GFP_KERNEL); @@ -484,10 +465,8 @@ static void ray_detach(dev_link_t *link) */ if (link->state & DEV_CONFIG) { ray_release(link); - if(link->state & DEV_STALE_CONFIG) { - link->state |= DEV_STALE_LINK; + if(link->state & DEV_STALE_CONFIG) return; - } } /* Break the link with Card Services */ @@ -932,7 +911,11 @@ static void ray_release(dev_link_t *link if ( i != CS_SUCCESS ) DEBUG(0,"ReleaseIRQ ret = %x\n",i); DEBUG(2,"ray_release ending\n"); -} /* ray_release */ + + if (link->state & DEV_STALE_CONFIG) + ray_detach(link); +} + /*============================================================================= The card status event handler. Mostly, this schedules other stuff to run after an event is received. A CARD_REMOVAL event @@ -2050,7 +2033,7 @@ static void set_multicast_list(struct ne /*============================================================================= * All routines below here are run at interrupt time. =============================================================================*/ -static void ray_interrupt(int irq, void *dev_id, struct pt_regs * regs) +static irqreturn_t ray_interrupt(int irq, void *dev_id, struct pt_regs * regs) { struct net_device *dev = (struct net_device *)dev_id; dev_link_t *link; @@ -2063,7 +2046,7 @@ static void ray_interrupt(int irq, void UCHAR status; if (dev == NULL) /* Note that we want interrupts with dev->start == 0 */ - return; + return IRQ_NONE; DEBUG(4,"ray_cs: interrupt for *dev=%p\n",dev); @@ -2071,7 +2054,7 @@ static void ray_interrupt(int irq, void link = (dev_link_t *)local->finder; if ( ! (link->state & DEV_PRESENT) || link->state & DEV_SUSPEND ) { DEBUG(2,"ray_cs interrupt from device not present or suspended.\n"); - return; + return IRQ_NONE; } rcsindex = readb(&((struct scb *)(local->sram))->rcs_index); @@ -2079,7 +2062,7 @@ static void ray_interrupt(int irq, void { DEBUG(1,"ray_cs interrupt bad rcsindex = 0x%x\n",rcsindex); clear_interrupt(local); - return; + return IRQ_HANDLED; } if (rcsindex < NUMBER_OF_CCS) /* If it's a returned CCS */ { @@ -2235,6 +2218,7 @@ static void ray_interrupt(int irq, void writeb(CCS_BUFFER_FREE, &prcs->buffer_status); } clear_interrupt(local); + return IRQ_HANDLED; } /* ray_interrupt */ /*===========================================================================*/ static void ray_rx(struct net_device *dev, ray_dev_t *local, struct rcs *prcs) diff -prauN linux-2.6.0-test5/drivers/net/wireless/strip.c wli-2.6.0-test5-bk12-25/drivers/net/wireless/strip.c --- linux-2.6.0-test5/drivers/net/wireless/strip.c 2003-09-08 12:50:17.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wireless/strip.c 2003-09-25 19:16:02.000000000 -0700 @@ -83,7 +83,6 @@ static const char StripVersion[] = "1.3A #include #include -#include #include #include #include @@ -965,8 +964,6 @@ static char *time_delta(char buffer[], l return (buffer); } -#define STRIP_PROC_HEADER ((void *)1) - /* get Nth element of the linked list */ static struct strip *strip_get_idx(loff_t pos) { @@ -984,7 +981,7 @@ static struct strip *strip_get_idx(loff_ static void *strip_seq_start(struct seq_file *seq, loff_t *pos) { rcu_read_lock(); - return *pos ? strip_get_idx(*pos - 1) : STRIP_PROC_HEADER; + return *pos ? strip_get_idx(*pos - 1) : SEQ_START_TOKEN; } static void *strip_seq_next(struct seq_file *seq, void *v, loff_t *pos) @@ -993,7 +990,7 @@ static void *strip_seq_next(struct seq_f struct strip *s; ++*pos; - if (v == STRIP_PROC_HEADER) + if (v == SEQ_START_TOKEN) return strip_get_idx(1); s = v; @@ -1149,7 +1146,7 @@ static void strip_seq_status_info(struct */ static int strip_seq_show(struct seq_file *seq, void *v) { - if (v == STRIP_PROC_HEADER) + if (v == SEQ_START_TOKEN) seq_printf(seq, "strip_version: %s\n", StripVersion); else strip_seq_status_info(seq, (const struct strip *)v); diff -prauN linux-2.6.0-test5/drivers/net/wireless/wavelan_cs.c wli-2.6.0-test5-bk12-25/drivers/net/wireless/wavelan_cs.c --- linux-2.6.0-test5/drivers/net/wireless/wavelan_cs.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wireless/wavelan_cs.c 2003-09-25 19:16:02.000000000 -0700 @@ -4175,50 +4175,14 @@ wv_pcmcia_release(dev_link_t *link) CardServices(ReleaseIO, link->handle, &link->io); CardServices(ReleaseIRQ, link->handle, &link->irq); - link->state &= ~(DEV_CONFIG | DEV_STALE_CONFIG); + link->state &= ~DEV_CONFIG; #ifdef DEBUG_CONFIG_TRACE printk(KERN_DEBUG "%s: <- wv_pcmcia_release()\n", dev->name); #endif -} /* wv_pcmcia_release */ -/*------------------------------------------------------------------*/ -/* - * Sometimes, wavelan_detach can't be performed following a call from - * cardmgr (device still open, pcmcia_release not done) and the device - * is put in a STALE_LINK state and remains in memory. - * - * This function run through our current list of device and attempt - * another time to remove them. We hope that since last time the - * device has properly been closed. - * - * (called by wavelan_attach() & cleanup_module()) - */ -static void -wv_flush_stale_links(void) -{ - dev_link_t * link; /* Current node in linked list */ - dev_link_t * next; /* Next node in linked list */ - -#ifdef DEBUG_CONFIG_TRACE - printk(KERN_DEBUG "-> wv_flush_stale_links(0x%p)\n", dev_list); -#endif - - /* Go through the list */ - for (link = dev_list; link; link = next) - { - next = link->next; - - /* Check if in need of being removed */ - if((link->state & DEV_STALE_LINK) || - (! (link->state & DEV_PRESENT))) - wavelan_detach(link); - - } - -#ifdef DEBUG_CONFIG_TRACE - printk(KERN_DEBUG "<- wv_flush_stale_links()\n"); -#endif + if (link->state & DEV_STALE_CONFIG) + wavelan_detach(link); } /************************ INTERRUPT HANDLING ************************/ @@ -4705,9 +4669,6 @@ wavelan_attach(void) printk(KERN_DEBUG "-> wavelan_attach()\n"); #endif - /* Perform some cleanup */ - wv_flush_stale_links(); - /* Initialize the dev_link_t structure */ link = kmalloc(sizeof(struct dev_link_t), GFP_KERNEL); if (!link) return NULL; @@ -4859,7 +4820,6 @@ wavelan_detach(dev_link_t * link) printk(KERN_DEBUG "wavelan_detach: detach postponed," " '%s' still locked\n", link->dev->dev_name); #endif - link->state |= DEV_STALE_LINK; return; } } @@ -5039,9 +4999,6 @@ init_wavelan_cs(void) static void __exit exit_wavelan_cs(void) { - /* Do some cleanup of the device list */ - wv_flush_stale_links(); - pcmcia_unregister_driver(&wavelan_driver); } diff -prauN linux-2.6.0-test5/drivers/net/wireless/wavelan_cs.p.h wli-2.6.0-test5-bk12-25/drivers/net/wireless/wavelan_cs.p.h --- linux-2.6.0-test5/drivers/net/wireless/wavelan_cs.p.h 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wireless/wavelan_cs.p.h 2003-09-25 19:16:02.000000000 -0700 @@ -761,8 +761,7 @@ static inline void static inline int wv_pcmcia_config(dev_link_t *); /* Configure the pcmcia interface */ static void - wv_pcmcia_release(dev_link_t *),/* Remove a device */ - wv_flush_stale_links(void); /* "detach" all possible devices */ + wv_pcmcia_release(dev_link_t *);/* Remove a device */ /* ---------------------- INTERRUPT HANDLING ---------------------- */ static irqreturn_t wavelan_interrupt(int, /* Interrupt handler */ diff -prauN linux-2.6.0-test5/drivers/net/wireless/wl3501_cs.c wli-2.6.0-test5-bk12-25/drivers/net/wireless/wl3501_cs.c --- linux-2.6.0-test5/drivers/net/wireless/wl3501_cs.c 2003-09-08 12:49:50.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/net/wireless/wl3501_cs.c 2003-09-25 19:16:02.000000000 -0700 @@ -82,7 +82,7 @@ static int pc_debug = PCMCIA_DEBUG; MODULE_PARM(pc_debug, "i"); #define dprintk(n, format, args...) \ { if (pc_debug > (n)) \ - printk(KERN_INFO "%s: " format "\n", __FUNCTION__, ##args); } + printk(KERN_INFO "%s: " format "\n", __FUNCTION__ , ##args); } #else #define dprintk(n, format, args...) #endif @@ -638,8 +638,10 @@ static int wl3501_mgmt_join(struct wl350 .sig_id = WL3501_SIG_JOIN_REQ, .timeout = 10, .ds_pset = { - .el.id = IW_MGMT_INFO_ELEMENT_DS_PARAMETER_SET, - .el.len = 1, + .el = { + .id = IW_MGMT_INFO_ELEMENT_DS_PARAMETER_SET, + .len = 1, + }, .chan = this->chan, }, }; @@ -655,13 +657,17 @@ static int wl3501_mgmt_start(struct wl35 .beacon_period = 400, .dtim_period = 1, .ds_pset = { - .el.id = IW_MGMT_INFO_ELEMENT_DS_PARAMETER_SET, - .el.len = 1, + .el = { + .id = IW_MGMT_INFO_ELEMENT_DS_PARAMETER_SET, + .len = 1, + }, .chan = this->chan, }, .bss_basic_rset = { - .el.id = IW_MGMT_INFO_ELEMENT_SUPPORTED_RATES, - .el.len = 2, + .el = { + .id = IW_MGMT_INFO_ELEMENT_SUPPORTED_RATES, + .len = 2, + }, .data_rate_labels = { [0] = IW_MGMT_RATE_LABEL_MANDATORY | IW_MGMT_RATE_LABEL_1MBIT, @@ -670,8 +676,10 @@ static int wl3501_mgmt_start(struct wl35 }, }, .operational_rset = { - .el.id = IW_MGMT_INFO_ELEMENT_SUPPORTED_RATES, - .el.len = 2, + .el = { + .id = IW_MGMT_INFO_ELEMENT_SUPPORTED_RATES, + .len = 2, + }, .data_rate_labels = { [0] = IW_MGMT_RATE_LABEL_MANDATORY | IW_MGMT_RATE_LABEL_1MBIT, @@ -680,8 +688,10 @@ static int wl3501_mgmt_start(struct wl35 }, }, .ibss_pset = { - .el.id = IW_MGMT_INFO_ELEMENT_IBSS_PARAMETER_SET, - .el.len = 2, + .el = { + .id = IW_MGMT_INFO_ELEMENT_IBSS_PARAMETER_SET, + .len = 2, + }, .atim_window = 10, }, .bss_type = wl3501_fw_bss_type(this), @@ -1571,7 +1581,6 @@ static void wl3501_detach(dev_link_t *li printk(KERN_DEBUG "wl3501_cs: detach postponed, '%s' " "still locked\n", link->dev->dev_name); #endif - link->state |= DEV_STALE_LINK; goto out; } @@ -1589,22 +1598,6 @@ out: return; } -/** - * wl3501_flush_stale_links - Remove zombie instances - * - * Remove zombie instances (card removed, detach pending) - */ -static void wl3501_flush_stale_links(void) -{ - dev_link_t *link, *next; - - for (link = wl3501_dev_list; link; link = next) { - next = link->next; - if (link->state & DEV_STALE_LINK) - wl3501_detach(link); - } -} - static int wl3501_get_name(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra) { @@ -2033,8 +2026,6 @@ static dev_link_t *wl3501_attach(void) struct net_device *dev; int ret, i; - wl3501_flush_stale_links(); - /* Initialize the dev_link_t structure */ link = kmalloc(sizeof(*link), GFP_KERNEL); if (!link) @@ -2263,7 +2254,7 @@ static void wl3501_release(dev_link_t *l CardServices(ReleaseIRQ, link->handle, &link->irq); link->state &= ~DEV_CONFIG; - if (link->state & DEV_STALE_LINK) + if (link->state & DEV_STALE_CONFIG) wl3501_detach(link); out: return; diff -prauN linux-2.6.0-test5/drivers/parisc/asp.c wli-2.6.0-test5-bk12-25/drivers/parisc/asp.c --- linux-2.6.0-test5/drivers/parisc/asp.c 2003-09-08 12:50:32.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/parisc/asp.c 2003-09-25 19:16:02.000000000 -0700 @@ -76,8 +76,6 @@ asp_init_chip(struct parisc_device *dev) printk(KERN_INFO "%s version %d at 0x%lx found.\n", asp->name, asp->version, dev->hpa); - snprintf(dev->dev.name, sizeof(dev->dev.name), "%s version %d", - asp->name, asp->version); /* the IRQ ASP should use */ ret = -EBUSY; diff -prauN linux-2.6.0-test5/drivers/parisc/ccio-dma.c wli-2.6.0-test5-bk12-25/drivers/parisc/ccio-dma.c --- linux-2.6.0-test5/drivers/parisc/ccio-dma.c 2003-09-08 12:49:54.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/parisc/ccio-dma.c 2003-09-25 19:16:02.000000000 -0700 @@ -129,6 +129,92 @@ struct ioa_registers { volatile uint32_t io_io_high; /* Offset 15 */ }; +/* +** IOA Registers +** ------------- +** +** Runway IO_CONTROL Register (+0x38) +** +** The Runway IO_CONTROL register controls the forwarding of transactions. +** +** | 0 ... 13 | 14 15 | 16 ... 21 | 22 | 23 24 | 25 ... 31 | +** | HV | TLB | reserved | HV | mode | reserved | +** +** o mode field indicates the address translation of transactions +** forwarded from Runway to GSC+: +** Mode Name Value Definition +** Off (default) 0 Opaque to matching addresses. +** Include 1 Transparent for matching addresses. +** Peek 3 Map matching addresses. +** +** + "Off" mode: Runway transactions which match the I/O range +** specified by the IO_IO_LOW/IO_IO_HIGH registers will be ignored. +** + "Include" mode: all addresses within the I/O range specified +** by the IO_IO_LOW and IO_IO_HIGH registers are transparently +** forwarded. This is the I/O Adapter's normal operating mode. +** + "Peek" mode: used during system configuration to initialize the +** GSC+ bus. Runway Write_Shorts in the address range specified by +** IO_IO_LOW and IO_IO_HIGH are forwarded through the I/O Adapter +** *AND* the GSC+ address is remapped to the Broadcast Physical +** Address space by setting the 14 high order address bits of the +** 32 bit GSC+ address to ones. +** +** o TLB field affects transactions which are forwarded from GSC+ to Runway. +** "Real" mode is the poweron default. +** +** TLB Mode Value Description +** Real 0 No TLB translation. Address is directly mapped and the +** virtual address is composed of selected physical bits. +** Error 1 Software fills the TLB manually. +** Normal 2 IOA fetches IO TLB misses from IO PDIR (in host memory). +** +** +** IO_IO_LOW_HV +0x60 (HV dependent) +** IO_IO_HIGH_HV +0x64 (HV dependent) +** IO_IO_LOW +0x78 (Architected register) +** IO_IO_HIGH +0x7c (Architected register) +** +** IO_IO_LOW and IO_IO_HIGH set the lower and upper bounds of the +** I/O Adapter address space, respectively. +** +** 0 ... 7 | 8 ... 15 | 16 ... 31 | +** 11111111 | 11111111 | address | +** +** Each LOW/HIGH pair describes a disjoint address space region. +** (2 per GSC+ port). Each incoming Runway transaction address is compared +** with both sets of LOW/HIGH registers. If the address is in the range +** greater than or equal to IO_IO_LOW and less than IO_IO_HIGH the transaction +** for forwarded to the respective GSC+ bus. +** Specify IO_IO_LOW equal to or greater than IO_IO_HIGH to avoid specifying +** an address space region. +** +** In order for a Runway address to reside within GSC+ extended address space: +** Runway Address [0:7] must identically compare to 8'b11111111 +** Runway Address [8:11] must be equal to IO_IO_LOW(_HV)[16:19] +** Runway Address [12:23] must be greater than or equal to +** IO_IO_LOW(_HV)[20:31] and less than IO_IO_HIGH(_HV)[20:31]. +** Runway Address [24:39] is not used in the comparison. +** +** When the Runway transaction is forwarded to GSC+, the GSC+ address is +** as follows: +** GSC+ Address[0:3] 4'b1111 +** GSC+ Address[4:29] Runway Address[12:37] +** GSC+ Address[30:31] 2'b00 +** +** All 4 Low/High registers must be initialized (by PDC) once the lower bus +** is interrogated and address space is defined. The operating system will +** modify the architectural IO_IO_LOW and IO_IO_HIGH registers following +** the PDC initialization. However, the hardware version dependent IO_IO_LOW +** and IO_IO_HIGH registers should not be subsequently altered by the OS. +** +** Writes to both sets of registers will take effect immediately, bypassing +** the queues, which ensures that subsequent Runway transactions are checked +** against the updated bounds values. However reads are queued, introducing +** the possibility of a read being bypassed by a subsequent write to the same +** register. This sequence can be avoided by having software wait for read +** returns before issuing subsequent writes. +*/ + struct ioc { struct ioa_registers *ioc_hpa; /* I/O MMU base address */ u8 *res_map; /* resource map, bit == pdir entry */ @@ -1448,13 +1534,74 @@ static void __init ccio_init_resources(s (unsigned long)&ioc->ioc_hpa->io_io_low_hv); } -static void expand_ioc_area(struct ioc *ioc, unsigned long size, - unsigned long min, unsigned long max, unsigned long align) +static int expand_resource(struct resource *res, unsigned long size, + unsigned long align) { -#ifdef NASTY_HACK_FOR_K_CLASS - __raw_writel(0xfffff600, (unsigned long)&(ioc->ioc_hpa->io_io_high)); - ioc->mmio_region[0].end = 0xf5ffffff; -#endif + struct resource *temp_res; + unsigned long start = res->start; + unsigned long end ; + + /* see if we can expand above */ + end = (res->end + size + align - 1) & ~(align - 1);; + + temp_res = __request_region(res->parent, res->end, end - res->end, + "expansion"); + if(!temp_res) { + /* now try below */ + start = ((res->start - size + align) & ~(align - 1)) - align; + end = res->end; + temp_res = __request_region(res->parent, start, size, + "expansion"); + if(!temp_res) { + return -ENOMEM; + } + } + release_resource(temp_res); + temp_res = res->parent; + release_resource(res); + res->start = start; + res->end = end; + + /* This could be caused by some sort of race. Basically, if + * this tripped something stole the region we just reserved + * and then released to check for expansion */ + BUG_ON(request_resource(temp_res, res) != 0); + + return 0; +} + +static void expand_ioc_area(struct resource *parent, struct ioc *ioc, + unsigned long size, unsigned long min, + unsigned long max, unsigned long align) +{ + if(ioc == NULL) + /* no IOC, so nothing to expand */ + return; + + if (expand_resource(parent, size, align) != 0) { + printk(KERN_ERR "Unable to expand %s window by 0x%lx\n", + parent->name, size); + return; + } + + /* OK, we have the memory, now expand the window */ + if (parent == &ioc->mmio_region[0]) { + __raw_writel(((parent->start)>>16) | 0xffff0000, + (unsigned long)&(ioc->ioc_hpa->io_io_low)); + __raw_writel(((parent->end)>>16) | 0xffff0000, + (unsigned long)&(ioc->ioc_hpa->io_io_high)); + } else if (parent == &ioc->mmio_region[1]) { + __raw_writel(((parent->start)>>16) | 0xffff0000, + (unsigned long)&(ioc->ioc_hpa->io_io_low_hv)); + __raw_writel(((parent->end)>>16) | 0xffff0000, + (unsigned long)&(ioc->ioc_hpa->io_io_high_hv)); + } else { + /* This should be impossible. It means + * expand_ioc_area got called with a resource that + * didn't belong to the ioc + */ + BUG(); + } } static struct resource *ccio_get_resource(struct ioc* ioc, @@ -1488,7 +1635,7 @@ int ccio_allocate_resource(const struct alignf_data)) return 0; - expand_ioc_area(ioc, size, min, max, align); + expand_ioc_area(parent, ioc, size, min, max, align); return allocate_resource(parent, res, size, min, max, align, alignf, alignf_data); } @@ -1522,7 +1669,6 @@ static int ccio_probe(struct parisc_devi memset(ioc, 0, sizeof(struct ioc)); ioc->name = dev->id.hversion == U2_IOA_RUNWAY ? "U2" : "UTurn"; - strlcpy(dev->dev.name, ioc->name, sizeof(dev->dev.name)); printk(KERN_INFO "Found %s at 0x%lx\n", ioc->name, dev->hpa); diff -prauN linux-2.6.0-test5/drivers/parisc/dino.c wli-2.6.0-test5-bk12-25/drivers/parisc/dino.c --- linux-2.6.0-test5/drivers/parisc/dino.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/parisc/dino.c 2003-09-25 19:16:02.000000000 -0700 @@ -401,23 +401,7 @@ ilr_again: { int irq; - /* - * Perform a binary search on set bits. - * `Less than Fatal' and PS2 interrupts aren't supported. - */ - if (mask & 0xf) { - if (mask & 0x3) { - irq = (mask & 0x1) ? 0 : 1; /* PCI INT A, B */ - } else { - irq = (mask & 0x4) ? 2 : 3; /* PCI INT C, D */ - } - } else { - if (mask & 0x30) { - irq = (mask & 0x10) ? 4 : 5; /* PCI INT E, F */ - } else { - irq = (mask & 0x40) ? 6 : 10; /* GSC, RS232 */ - } - } + irq = __ffs(mask); mask &= ~(1< 0) goto ilr_again; - printk("Dino %lx: stuck interrupt %d\n", dino_dev->hba.base_addr, mask); + printk(KERN_ERR "Dino %lx: stuck interrupt %d\n", dino_dev->hba.base_addr, mask); return IRQ_NONE; } return IRQ_HANDLED; @@ -479,15 +463,35 @@ dino_card_setup(struct pci_bus *bus, uns int i; struct dino_device *dino_dev = DINO_DEV(parisc_walk_tree(bus->dev)); struct resource *res; + char name[128]; + int size; res = &dino_dev->hba.lmmio_space; res->flags = IORESOURCE_MEM; + size = snprintf(name, sizeof(name), "Dino LMMIO (%s)", bus->dev->bus_id); + res->name = kmalloc(size+1, GFP_KERNEL); + if(res->name) + strcpy((char *)res->name, name); + else + res->name = dino_dev->hba.lmmio_space.name; + if (ccio_allocate_resource(dino_dev->hba.dev, res, _8MB, - (unsigned long) 0xfffffffff0000000UL | _8MB, - 0xffffffffffffffffUL &~ _8MB, _8MB, + F_EXTEND(0xf0000000UL) | _8MB, + F_EXTEND(0xffffffffUL) &~ _8MB, _8MB, NULL, NULL) < 0) { - printk(KERN_WARNING "Dino: Failed to allocate memory region\n"); + struct list_head *ln, *tmp_ln; + + printk(KERN_ERR "Dino: cannot attach bus %s\n", + bus->dev->bus_id); + /* kill the bus, we can't do anything with it */ + list_for_each_safe(ln, tmp_ln, &bus->devices) { + struct pci_dev *dev = pci_dev_b(ln); + + list_del(&dev->global_list); + list_del(&dev->bus_list); + } + return; } bus->resource[1] = res; @@ -495,9 +499,11 @@ dino_card_setup(struct pci_bus *bus, uns /* Now tell dino what range it has */ for (i = 1; i < 31; i++) { - if (res->start == (0xfffffffff0000000UL | i * _8MB)) + if (res->start == F_EXTEND(0xf0000000UL | (i * _8MB))) break; } + DBG("DINO GSC WRITE i=%d, start=%lx, dino addr = %lx\n", + i, res->start, base_addr + DINO_IO_ADDR_EN); gsc_writel(1 << i, base_addr + DINO_IO_ADDR_EN); pci_bus_assign_resources(bus); @@ -521,7 +527,7 @@ dino_card_fixup(struct pci_dev *dev) ** Set Latency Timer to 0xff (not a shared bus) ** Set CACHELINE_SIZE. */ - dino_cfg_write(dev->bus, dev->devfn, PCI_CACHE_LINE_SIZE, 16, 0xff00 | L1_CACHE_BYTES/4); + dino_cfg_write(dev->bus, dev->devfn, PCI_CACHE_LINE_SIZE, 2, 0xff00 | L1_CACHE_BYTES/4); /* ** Program INT_LINE for card-mode devices. @@ -532,13 +538,13 @@ dino_card_fixup(struct pci_dev *dev) ** "-1" converts INTA-D (1-4) to PCIINTA-D (0-3) range. ** The additional "-1" adjusts for skewing the IRQ<->slot. */ - dino_cfg_read(dev->bus, dev->devfn, PCI_INTERRUPT_PIN, 8, &irq_pin); + dino_cfg_read(dev->bus, dev->devfn, PCI_INTERRUPT_PIN, 1, &irq_pin); dev->irq = (irq_pin + PCI_SLOT(dev->devfn) - 1) % 4 ; /* Shouldn't really need to do this but it's in case someone tries ** to bypass PCI services and look at the card themselves. */ - dino_cfg_write(dev->bus, dev->devfn, PCI_INTERRUPT_LINE, 8, dev->irq); + dino_cfg_write(dev->bus, dev->devfn, PCI_INTERRUPT_LINE, 1, dev->irq); } @@ -585,8 +591,8 @@ dino_fixup_bus(struct pci_bus *bus) #ifdef __LP64__ /* Sign Extend MMIO addresses */ else if (res->flags & IORESOURCE_MEM) { - res->start |= 0xffffffff00000000UL; - res->end |= 0xffffffff00000000UL; + res->start |= F_EXTEND(0UL); + res->end |= F_EXTEND(0UL); } #endif } @@ -789,8 +795,8 @@ static int __init dino_common_init(struc return 0; } -#define CUJO_RAVEN_ADDR 0xfffffffff1000000UL -#define CUJO_FIREHAWK_ADDR 0xfffffffff1604000UL +#define CUJO_RAVEN_ADDR F_EXTEND(0xf1000000UL) +#define CUJO_FIREHAWK_ADDR F_EXTEND(0xf1604000UL) #define CUJO_RAVEN_BADPAGE 0x01003000UL #define CUJO_FIREHAWK_BADPAGE 0x01607000UL @@ -818,9 +824,16 @@ dino_driver_callback(struct parisc_devic { struct dino_device *dino_dev; // Dino specific control struct const char *version = "unknown"; - const char *name = "Dino"; + const int name_len = 32; + char *name; int is_cujo = 0; + name = kmalloc(name_len, GFP_KERNEL); + if(name) + snprintf(name, name_len, "Dino %s", dev->dev.bus_id); + else + name = "Dino"; + if (is_card_dino(&dev->id)) { version = "3.x (card mode)"; } else { @@ -838,8 +851,6 @@ dino_driver_callback(struct parisc_devic } printk("%s version %s found at 0x%lx\n", name, version, dev->hpa); - snprintf(dev->dev.name, sizeof(dev->dev.name), - "%s version %s", name, version); if (!request_mem_region(dev->hpa, PAGE_SIZE, name)) { printk(KERN_ERR "DINO: Hey! Someone took my MMIO space (0x%ld)!\n", diff -prauN linux-2.6.0-test5/drivers/parisc/eisa.c wli-2.6.0-test5-bk12-25/drivers/parisc/eisa.c --- linux-2.6.0-test5/drivers/parisc/eisa.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/parisc/eisa.c 2003-09-25 19:16:02.000000000 -0700 @@ -327,14 +327,13 @@ static int __devinit eisa_probe(struct p printk(KERN_INFO "%s EISA Adapter found at 0x%08lx\n", name, dev->hpa); - snprintf(dev->dev.name, sizeof(dev->dev.name), "%s EISA", name); eisa_dev.hba.dev = dev; eisa_dev.hba.iommu = ccio_get_iommu(dev); eisa_dev.hba.lmmio_space.name = "EISA"; - eisa_dev.hba.lmmio_space.start = (unsigned long) 0xfffffffffc000000; - eisa_dev.hba.lmmio_space.end = (unsigned long) 0xffffffffffbfffff; + eisa_dev.hba.lmmio_space.start = F_EXTEND(0xfc000000); + eisa_dev.hba.lmmio_space.end = F_EXTEND(0xffbfffff); eisa_dev.hba.lmmio_space.flags = IORESOURCE_MEM; result = ccio_request_resource(dev, &eisa_dev.hba.lmmio_space); if (result < 0) { diff -prauN linux-2.6.0-test5/drivers/parisc/hppb.c wli-2.6.0-test5-bk12-25/drivers/parisc/hppb.c --- linux-2.6.0-test5/drivers/parisc/hppb.c 2003-09-08 12:50:04.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/parisc/hppb.c 2003-09-25 19:16:02.000000000 -0700 @@ -70,7 +70,6 @@ static int hppb_probe(struct parisc_devi card = card->next; } printk(KERN_INFO "Found GeckoBoa at 0x%lx\n", dev->hpa); - snprintf(dev->dev.name, sizeof(dev->dev.name), "GeckoBoa"); card->hpa = dev->hpa; card->mmio_region.name = "HP-PB Bus"; diff -prauN linux-2.6.0-test5/drivers/parisc/iosapic.c wli-2.6.0-test5-bk12-25/drivers/parisc/iosapic.c --- linux-2.6.0-test5/drivers/parisc/iosapic.c 2003-09-08 12:49:56.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/parisc/iosapic.c 2003-09-25 19:16:02.000000000 -0700 @@ -643,7 +643,7 @@ iosapic_fixup_irq(void *isi_obj, struct if (NULL == isi) { printk(KERN_WARNING MODULE_NAME ": hpa not registered for %s\n", - pcidev->dev.name); + pci_name(pcidev)); return(-1); } diff -prauN linux-2.6.0-test5/drivers/parisc/lasi.c wli-2.6.0-test5-bk12-25/drivers/parisc/lasi.c --- linux-2.6.0-test5/drivers/parisc/lasi.c 2003-09-08 12:50:16.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/parisc/lasi.c 2003-09-25 19:16:02.000000000 -0700 @@ -185,8 +185,6 @@ lasi_init_chip(struct parisc_device *dev lasi->version = gsc_readl(lasi->hpa + LASI_VER) & 0xf; printk(KERN_INFO "%s version %d at 0x%lx found.\n", lasi->name, lasi->version, lasi->hpa); - snprintf(dev->dev.name, sizeof(dev->dev.name), "%s version %d", - lasi->name, lasi->version); /* initialize the chassis LEDs really early */ lasi_led_init(lasi->hpa); diff -prauN linux-2.6.0-test5/drivers/parisc/lba_pci.c wli-2.6.0-test5-bk12-25/drivers/parisc/lba_pci.c --- linux-2.6.0-test5/drivers/parisc/lba_pci.c 2003-09-08 12:50:17.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/parisc/lba_pci.c 2003-09-25 19:16:02.000000000 -0700 @@ -782,7 +782,7 @@ lba_fixup_bus(struct pci_bus *bus) int i; struct pci_dev *dev = pci_dev_b(ln); - DBG("lba_fixup_bus() %s\n", dev->name); + DBG("lba_fixup_bus() %s\n", pci_name(dev)); /* Virtualize Device/Bridge Resources. */ for (i = 0; i < PCI_NUM_RESOURCES; i++) { @@ -1358,8 +1358,6 @@ lba_driver_callback(struct parisc_device printk(KERN_INFO "%s version %s (0x%x) found at 0x%lx\n", MODULE_NAME, version, func_class & 0xf, dev->hpa); - snprintf(dev->dev.name, sizeof(dev->dev.name), "%s version %s", - MODULE_NAME, version); /* Just in case we find some prototypes... */ if (func_class < 2) { diff -prauN linux-2.6.0-test5/drivers/parisc/led.c wli-2.6.0-test5-bk12-25/drivers/parisc/led.c --- linux-2.6.0-test5/drivers/parisc/led.c 2003-09-08 12:49:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/parisc/led.c 2003-09-25 19:16:02.000000000 -0700 @@ -91,7 +91,7 @@ struct pdc_chassis_lcd_info_ret_block { /* LCD_CMD and LCD_DATA for KittyHawk machines */ -#define KITTYHAWK_LCD_CMD (0xfffffffff0190000UL) /* 64bit-ready */ +#define KITTYHAWK_LCD_CMD F_EXTEND(0xf0190000UL) /* 64bit-ready */ #define KITTYHAWK_LCD_DATA (KITTYHAWK_LCD_CMD+1) /* lcd_info is pre-initialized to the values needed to program KittyHawk LCD's diff -prauN linux-2.6.0-test5/drivers/parisc/sba_iommu.c wli-2.6.0-test5-bk12-25/drivers/parisc/sba_iommu.c --- linux-2.6.0-test5/drivers/parisc/sba_iommu.c 2003-09-08 12:50:20.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/parisc/sba_iommu.c 2003-09-25 19:16:02.000000000 -0700 @@ -1978,8 +1978,6 @@ sba_driver_callback(struct parisc_device printk(KERN_INFO "%s found %s at 0x%lx\n", MODULE_NAME, version, dev->hpa); - snprintf(dev->dev.name, sizeof(dev->dev.name), "%s version %s", - MODULE_NAME, version); #ifdef DEBUG_SBA_INIT sba_dump_tlb(dev->hpa); diff -prauN linux-2.6.0-test5/drivers/parisc/wax.c wli-2.6.0-test5-bk12-25/drivers/parisc/wax.c --- linux-2.6.0-test5/drivers/parisc/wax.c 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/parisc/wax.c 2003-09-25 19:16:02.000000000 -0700 @@ -83,8 +83,6 @@ wax_init_chip(struct parisc_device *dev) wax->version = 0; /* gsc_readb(wax->hpa+WAX_VER); */ printk(KERN_INFO "%s at 0x%lx found.\n", wax->name, wax->hpa); - snprintf(dev->dev.name, sizeof(dev->dev.name), "%s version %d", - wax->name, wax->version); /* Stop wax hissing for a bit */ wax_init_irq(wax); diff -prauN linux-2.6.0-test5/drivers/parport/Kconfig wli-2.6.0-test5-bk12-25/drivers/parport/Kconfig --- linux-2.6.0-test5/drivers/parport/Kconfig 2003-09-08 12:50:33.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/parport/Kconfig 2003-09-25 19:16:02.000000000 -0700 @@ -24,13 +24,11 @@ config PARPORT It is possible to share a single parallel port among several devices and it is safe to compile all the corresponding drivers into the - kernel. If you want to compile parallel port support as a module - ( = code which can be inserted in and removed from the running - kernel whenever you want), say M here and read - . The module will be called - parport. If you have more than one parallel port and want to - specify which port and IRQ to be used by this driver at module load - time, take a look at . + kernel. To compile parallel port support as a module, choose M here: + the module will be called parport. + If you have more than one parallel port and want to specify which + port and IRQ to be used by this driver at module load time, take a + look at . If unsure, say Y. @@ -43,11 +41,8 @@ config PARPORT_PC parallel ports. PA-RISC owners should only say Y here if they have a SuperIO parallel port. - This code is also available as a module. If you want to compile it - as a module ( = code which can be inserted in and removed from the - running kernel whenever you want), say M here and read - . The module will be called - parport_pc. + To compile this driver as a module, choose M here: the + module will be called parport_pc. If unsure, say Y. diff -prauN linux-2.6.0-test5/drivers/pci/hotplug/Kconfig wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/Kconfig --- linux-2.6.0-test5/drivers/pci/hotplug/Kconfig 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/Kconfig 2003-09-25 19:16:02.000000000 -0700 @@ -14,10 +14,8 @@ config HOTPLUG_PCI powered up and running. The file system pcihpfs must be mounted in order to interact with any PCI Hotplug controllers. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called pci_hotplug. If you want to compile it - as a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called pci_hotplug. When in doubt, say N. @@ -39,10 +37,8 @@ config HOTPLUG_PCI_FAKE Use this module at your own risk. You have been warned! - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called fakephp. If you want to compile it - as a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called fakephp. When in doubt, say N. @@ -53,10 +49,8 @@ config HOTPLUG_PCI_COMPAQ Say Y here if you have a motherboard with a Compaq PCI Hotplug controller. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called cpqphp. If you want to compile it - as a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called cpqphp. When in doubt, say N. @@ -77,10 +71,8 @@ config HOTPLUG_PCI_IBM Say Y here if you have a motherboard with a IBM PCI Hotplug controller. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called cpqphp. If you want to compile it - as a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called ibmphp. When in doubt, say N. @@ -91,10 +83,8 @@ config HOTPLUG_PCI_ACPI Say Y here if you have a system that supports PCI Hotplug using ACPI. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called acpiphp. If you want to compile it - as a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called acpiphp. When in doubt, say N. @@ -114,10 +104,8 @@ config HOTPLUG_PCI_CPCI_ZT5550 Say Y here if you have an Performance Technologies (formerly Intel, formerly just Ziatech) Ziatech ZT5550 CompactPCI system card. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called cpcihp_zt5550. If you want to compile it - as a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called cpcihp_zt5550. When in doubt, say N. @@ -129,10 +117,8 @@ config HOTPLUG_PCI_CPCI_GENERIC hotswap signal as a bit in a system register that can be read through standard port I/O. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called cpcihp_generic. If you want to compile it - as a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called cpcihp_generic. When in doubt, say N. diff -prauN linux-2.6.0-test5/drivers/pci/hotplug/acpiphp.h wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/acpiphp.h --- linux-2.6.0-test5/drivers/pci/hotplug/acpiphp.h 2003-09-08 12:50:41.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/acpiphp.h 2003-09-25 19:16:02.000000000 -0700 @@ -1,12 +1,12 @@ /* * ACPI PCI Hot Plug Controller Driver * - * Copyright (c) 1995,2001 Compaq Computer Corporation - * Copyright (c) 2001 Greg Kroah-Hartman (greg@kroah.com) - * Copyright (c) 2001 IBM Corp. - * Copyright (c) 2002 Hiroshi Aono (h-aono@ap.jp.nec.com) - * Copyright (c) 2002,2003 Takayoshi Kochi (t-kochi@bq.jp.nec.com) - * Copyright (c) 2002,2003 NEC Corporation + * Copyright (C) 1995,2001 Compaq Computer Corporation + * Copyright (C) 2001 Greg Kroah-Hartman (greg@kroah.com) + * Copyright (C) 2001 IBM Corp. + * Copyright (C) 2002 Hiroshi Aono (h-aono@ap.jp.nec.com) + * Copyright (C) 2002,2003 Takayoshi Kochi (t-kochi@bq.jp.nec.com) + * Copyright (C) 2002,2003 NEC Corporation * * All rights reserved. * diff -prauN linux-2.6.0-test5/drivers/pci/hotplug/acpiphp_core.c wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/acpiphp_core.c --- linux-2.6.0-test5/drivers/pci/hotplug/acpiphp_core.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/acpiphp_core.c 2003-09-25 19:16:02.000000000 -0700 @@ -1,12 +1,12 @@ /* * ACPI PCI Hot Plug Controller Driver * - * Copyright (c) 1995,2001 Compaq Computer Corporation - * Copyright (c) 2001 Greg Kroah-Hartman (greg@kroah.com) - * Copyright (c) 2001 IBM Corp. - * Copyright (c) 2002 Hiroshi Aono (h-aono@ap.jp.nec.com) - * Copyright (c) 2002,2003 Takayoshi Kochi (t-kochi@bq.jp.nec.com) - * Copyright (c) 2002,2003 NEC Corporation + * Copyright (C) 1995,2001 Compaq Computer Corporation + * Copyright (C) 2001 Greg Kroah-Hartman (greg@kroah.com) + * Copyright (C) 2001 IBM Corp. + * Copyright (C) 2002 Hiroshi Aono (h-aono@ap.jp.nec.com) + * Copyright (C) 2002,2003 Takayoshi Kochi (t-kochi@bq.jp.nec.com) + * Copyright (C) 2002,2003 NEC Corporation * * All rights reserved. * diff -prauN linux-2.6.0-test5/drivers/pci/hotplug/acpiphp_glue.c wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/acpiphp_glue.c --- linux-2.6.0-test5/drivers/pci/hotplug/acpiphp_glue.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/acpiphp_glue.c 2003-09-25 19:16:02.000000000 -0700 @@ -1,9 +1,9 @@ /* * ACPI PCI HotPlug glue functions to ACPI CA subsystem * - * Copyright (c) 2002,2003 Takayoshi Kochi (t-kochi@bq.jp.nec.com) - * Copyright (c) 2002 Hiroshi Aono (h-aono@ap.jp.nec.com) - * Copyright (c) 2002,2003 NEC Corporation + * Copyright (C) 2002,2003 Takayoshi Kochi (t-kochi@bq.jp.nec.com) + * Copyright (C) 2002 Hiroshi Aono (h-aono@ap.jp.nec.com) + * Copyright (C) 2002,2003 NEC Corporation * * All rights reserved. * diff -prauN linux-2.6.0-test5/drivers/pci/hotplug/acpiphp_pci.c wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/acpiphp_pci.c --- linux-2.6.0-test5/drivers/pci/hotplug/acpiphp_pci.c 2003-09-08 12:49:50.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/acpiphp_pci.c 2003-09-25 19:16:02.000000000 -0700 @@ -1,12 +1,12 @@ /* * ACPI PCI HotPlug PCI configuration space management * - * Copyright (c) 1995,2001 Compaq Computer Corporation - * Copyright (c) 2001 Greg Kroah-Hartman (greg@kroah.com) - * Copyright (c) 2001,2002 IBM Corp. - * Copyright (c) 2002 Takayoshi Kochi (t-kochi@bq.jp.nec.com) - * Copyright (c) 2002 Hiroshi Aono (h-aono@ap.jp.nec.com) - * Copyright (c) 2002 NEC Corporation + * Copyright (C) 1995,2001 Compaq Computer Corporation + * Copyright (C) 2001 Greg Kroah-Hartman (greg@kroah.com) + * Copyright (C) 2001,2002 IBM Corp. + * Copyright (C) 2002 Takayoshi Kochi (t-kochi@bq.jp.nec.com) + * Copyright (C) 2002 Hiroshi Aono (h-aono@ap.jp.nec.com) + * Copyright (C) 2002 NEC Corporation * * All rights reserved. * diff -prauN linux-2.6.0-test5/drivers/pci/hotplug/acpiphp_res.c wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/acpiphp_res.c --- linux-2.6.0-test5/drivers/pci/hotplug/acpiphp_res.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/acpiphp_res.c 2003-09-25 19:16:02.000000000 -0700 @@ -1,12 +1,12 @@ /* * ACPI PCI HotPlug Utility functions * - * Copyright (c) 1995,2001 Compaq Computer Corporation - * Copyright (c) 2001 Greg Kroah-Hartman (greg@kroah.com) - * Copyright (c) 2001 IBM Corp. - * Copyright (c) 2002 Hiroshi Aono (h-aono@ap.jp.nec.com) - * Copyright (c) 2002 Takayoshi Kochi (t-kochi@bq.jp.nec.com) - * Copyright (c) 2002 NEC Corporation + * Copyright (C) 1995,2001 Compaq Computer Corporation + * Copyright (C) 2001 Greg Kroah-Hartman (greg@kroah.com) + * Copyright (C) 2001 IBM Corp. + * Copyright (C) 2002 Hiroshi Aono (h-aono@ap.jp.nec.com) + * Copyright (C) 2002 Takayoshi Kochi (t-kochi@bq.jp.nec.com) + * Copyright (C) 2002 NEC Corporation * * All rights reserved. * diff -prauN linux-2.6.0-test5/drivers/pci/hotplug/cpci_hotplug.h wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/cpci_hotplug.h --- linux-2.6.0-test5/drivers/pci/hotplug/cpci_hotplug.h 2003-09-08 12:49:54.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/cpci_hotplug.h 2003-09-25 19:16:02.000000000 -0700 @@ -1,9 +1,9 @@ /* * CompactPCI Hot Plug Core Functions * - * Copyright (c) 2002 SOMA Networks, Inc. - * Copyright (c) 2001 Greg Kroah-Hartman (greg@kroah.com) - * Copyright (c) 2001 IBM Corp. + * Copyright (C) 2002 SOMA Networks, Inc. + * Copyright (C) 2001 Greg Kroah-Hartman (greg@kroah.com) + * Copyright (C) 2001 IBM Corp. * * All rights reserved. * diff -prauN linux-2.6.0-test5/drivers/pci/hotplug/cpci_hotplug_core.c wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/cpci_hotplug_core.c --- linux-2.6.0-test5/drivers/pci/hotplug/cpci_hotplug_core.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/cpci_hotplug_core.c 2003-09-25 19:16:02.000000000 -0700 @@ -1,9 +1,9 @@ /* * CompactPCI Hot Plug Driver * - * Copyright (c) 2002 SOMA Networks, Inc. - * Copyright (c) 2001 Greg Kroah-Hartman (greg@kroah.com) - * Copyright (c) 2001 IBM Corp. + * Copyright (C) 2002 SOMA Networks, Inc. + * Copyright (C) 2001 Greg Kroah-Hartman (greg@kroah.com) + * Copyright (C) 2001 IBM Corp. * * All rights reserved. * diff -prauN linux-2.6.0-test5/drivers/pci/hotplug/cpci_hotplug_pci.c wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/cpci_hotplug_pci.c --- linux-2.6.0-test5/drivers/pci/hotplug/cpci_hotplug_pci.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/cpci_hotplug_pci.c 2003-09-25 19:16:02.000000000 -0700 @@ -1,7 +1,7 @@ /* * CompactPCI Hot Plug Driver PCI functions * - * Copyright (c) 2002 by SOMA Networks, Inc. + * Copyright (C) 2002 by SOMA Networks, Inc. * * All rights reserved. * diff -prauN linux-2.6.0-test5/drivers/pci/hotplug/cpqphp.h wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/cpqphp.h --- linux-2.6.0-test5/drivers/pci/hotplug/cpqphp.h 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/cpqphp.h 2003-09-25 19:16:02.000000000 -0700 @@ -1,9 +1,9 @@ /* * Compaq Hot Plug Controller Driver * - * Copyright (c) 1995,2001 Compaq Computer Corporation - * Copyright (c) 2001 Greg Kroah-Hartman (greg@kroah.com) - * Copyright (c) 2001 IBM + * Copyright (C) 1995,2001 Compaq Computer Corporation + * Copyright (C) 2001 Greg Kroah-Hartman (greg@kroah.com) + * Copyright (C) 2001 IBM * * All rights reserved. * diff -prauN linux-2.6.0-test5/drivers/pci/hotplug/cpqphp_core.c wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/cpqphp_core.c --- linux-2.6.0-test5/drivers/pci/hotplug/cpqphp_core.c 2003-09-08 12:49:50.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/cpqphp_core.c 2003-09-25 19:16:02.000000000 -0700 @@ -1,9 +1,9 @@ /* * Compaq Hot Plug Controller Driver * - * Copyright (c) 1995,2001 Compaq Computer Corporation - * Copyright (c) 2001 Greg Kroah-Hartman (greg@kroah.com) - * Copyright (c) 2001 IBM Corp. + * Copyright (C) 1995,2001 Compaq Computer Corporation + * Copyright (C) 2001 Greg Kroah-Hartman (greg@kroah.com) + * Copyright (C) 2001 IBM Corp. * * All rights reserved. * diff -prauN linux-2.6.0-test5/drivers/pci/hotplug/cpqphp_ctrl.c wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/cpqphp_ctrl.c --- linux-2.6.0-test5/drivers/pci/hotplug/cpqphp_ctrl.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/cpqphp_ctrl.c 2003-09-25 19:16:03.000000000 -0700 @@ -1,9 +1,9 @@ /* * Compaq Hot Plug Controller Driver * - * Copyright (c) 1995,2001 Compaq Computer Corporation - * Copyright (c) 2001 Greg Kroah-Hartman (greg@kroah.com) - * Copyright (c) 2001 IBM Corp. + * Copyright (C) 1995,2001 Compaq Computer Corporation + * Copyright (C) 2001 Greg Kroah-Hartman (greg@kroah.com) + * Copyright (C) 2001 IBM Corp. * * All rights reserved. * diff -prauN linux-2.6.0-test5/drivers/pci/hotplug/cpqphp_nvram.c wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/cpqphp_nvram.c --- linux-2.6.0-test5/drivers/pci/hotplug/cpqphp_nvram.c 2003-09-08 12:50:23.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/cpqphp_nvram.c 2003-09-25 19:16:03.000000000 -0700 @@ -1,9 +1,9 @@ /* * Compaq Hot Plug Controller Driver * - * Copyright (c) 1995,2001 Compaq Computer Corporation - * Copyright (c) 2001 Greg Kroah-Hartman (greg@kroah.com) - * Copyright (c) 2001 IBM Corp. + * Copyright (C) 1995,2001 Compaq Computer Corporation + * Copyright (C) 2001 Greg Kroah-Hartman (greg@kroah.com) + * Copyright (C) 2001 IBM Corp. * * All rights reserved. * diff -prauN linux-2.6.0-test5/drivers/pci/hotplug/cpqphp_nvram.h wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/cpqphp_nvram.h --- linux-2.6.0-test5/drivers/pci/hotplug/cpqphp_nvram.h 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/cpqphp_nvram.h 2003-09-25 19:16:03.000000000 -0700 @@ -1,8 +1,8 @@ /* * Compaq Hot Plug Controller Driver * - * Copyright (c) 1995,2001 Compaq Computer Corporation - * Copyright (c) 2001 Greg Kroah-Hartman (greg@kroah.com) + * Copyright (C) 1995,2001 Compaq Computer Corporation + * Copyright (C) 2001 Greg Kroah-Hartman (greg@kroah.com) * * All rights reserved. * diff -prauN linux-2.6.0-test5/drivers/pci/hotplug/cpqphp_pci.c wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/cpqphp_pci.c --- linux-2.6.0-test5/drivers/pci/hotplug/cpqphp_pci.c 2003-09-08 12:50:29.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/cpqphp_pci.c 2003-09-25 19:16:03.000000000 -0700 @@ -1,9 +1,9 @@ /* * Compaq Hot Plug Controller Driver * - * Copyright (c) 1995,2001 Compaq Computer Corporation - * Copyright (c) 2001 Greg Kroah-Hartman (greg@kroah.com) - * Copyright (c) 2001 IBM Corp. + * Copyright (C) 1995,2001 Compaq Computer Corporation + * Copyright (C) 2001 Greg Kroah-Hartman (greg@kroah.com) + * Copyright (C) 2001 IBM Corp. * * All rights reserved. * diff -prauN linux-2.6.0-test5/drivers/pci/hotplug/cpqphp_sysfs.c wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/cpqphp_sysfs.c --- linux-2.6.0-test5/drivers/pci/hotplug/cpqphp_sysfs.c 2003-09-08 12:50:32.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/cpqphp_sysfs.c 2003-09-25 19:16:03.000000000 -0700 @@ -1,9 +1,9 @@ /* * Compaq Hot Plug Controller Driver * - * Copyright (c) 1995,2001 Compaq Computer Corporation - * Copyright (c) 2001,2003 Greg Kroah-Hartman (greg@kroah.com) - * Copyright (c) 2001 IBM Corp. + * Copyright (C) 1995,2001 Compaq Computer Corporation + * Copyright (C) 2001,2003 Greg Kroah-Hartman (greg@kroah.com) + * Copyright (C) 2001 IBM Corp. * * All rights reserved. * diff -prauN linux-2.6.0-test5/drivers/pci/hotplug/fakephp.c wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/fakephp.c --- linux-2.6.0-test5/drivers/pci/hotplug/fakephp.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/fakephp.c 2003-09-25 19:16:03.000000000 -0700 @@ -1,9 +1,9 @@ /* * Fake PCI Hot Plug Controller Driver * - * Copyright (c) 2003 Greg Kroah-Hartman - * Copyright (c) 2003 IBM Corp. - * Copyright (c) 2003 Rolf Eike Beer + * Copyright (C) 2003 Greg Kroah-Hartman + * Copyright (C) 2003 IBM Corp. + * Copyright (C) 2003 Rolf Eike Beer * * Based on ideas and code from: * Vladimir Kondratiev diff -prauN linux-2.6.0-test5/drivers/pci/hotplug/ibmphp.h wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/ibmphp.h --- linux-2.6.0-test5/drivers/pci/hotplug/ibmphp.h 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/ibmphp.h 2003-09-25 19:16:03.000000000 -0700 @@ -6,8 +6,8 @@ * * Written By: Jyoti Shah, Tong Yu, Irene Zubarev, IBM Corporation * - * Copyright (c) 2001 Greg Kroah-Hartman (greg@kroah.com) - * Copyright (c) 2001-2003 IBM Corp. + * Copyright (C) 2001 Greg Kroah-Hartman (greg@kroah.com) + * Copyright (C) 2001-2003 IBM Corp. * * All rights reserved. * diff -prauN linux-2.6.0-test5/drivers/pci/hotplug/ibmphp_core.c wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/ibmphp_core.c --- linux-2.6.0-test5/drivers/pci/hotplug/ibmphp_core.c 2003-09-08 12:50:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/ibmphp_core.c 2003-09-25 19:16:03.000000000 -0700 @@ -3,8 +3,8 @@ * * Written By: Chuck Cole, Jyoti Shah, Tong Yu, Irene Zubarev, IBM Corporation * - * Copyright (c) 2001,2003 Greg Kroah-Hartman (greg@kroah.com) - * Copyright (c) 2001-2003 IBM Corp. + * Copyright (C) 2001,2003 Greg Kroah-Hartman (greg@kroah.com) + * Copyright (C) 2001-2003 IBM Corp. * * All rights reserved. * diff -prauN linux-2.6.0-test5/drivers/pci/hotplug/ibmphp_ebda.c wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/ibmphp_ebda.c --- linux-2.6.0-test5/drivers/pci/hotplug/ibmphp_ebda.c 2003-09-08 12:49:54.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/ibmphp_ebda.c 2003-09-25 19:16:03.000000000 -0700 @@ -3,8 +3,8 @@ * * Written By: Tong Yu, IBM Corporation * - * Copyright (c) 2001,2003 Greg Kroah-Hartman (greg@kroah.com) - * Copyright (c) 2001-2003 IBM Corp. + * Copyright (C) 2001,2003 Greg Kroah-Hartman (greg@kroah.com) + * Copyright (C) 2001-2003 IBM Corp. * * All rights reserved. * diff -prauN linux-2.6.0-test5/drivers/pci/hotplug/ibmphp_hpc.c wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/ibmphp_hpc.c --- linux-2.6.0-test5/drivers/pci/hotplug/ibmphp_hpc.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/ibmphp_hpc.c 2003-09-25 19:16:03.000000000 -0700 @@ -3,7 +3,7 @@ * * Written By: Jyoti Shah, IBM Corporation * - * Copyright (c) 2001-2003 IBM Corp. + * Copyright (C) 2001-2003 IBM Corp. * * All rights reserved. * diff -prauN linux-2.6.0-test5/drivers/pci/hotplug/ibmphp_pci.c wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/ibmphp_pci.c --- linux-2.6.0-test5/drivers/pci/hotplug/ibmphp_pci.c 2003-09-08 12:49:50.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/ibmphp_pci.c 2003-09-25 19:16:03.000000000 -0700 @@ -3,8 +3,8 @@ * * Written By: Irene Zubarev, IBM Corporation * - * Copyright (c) 2001 Greg Kroah-Hartman (greg@kroah.com) - * Copyright (c) 2001,2002 IBM Corp. + * Copyright (C) 2001 Greg Kroah-Hartman (greg@kroah.com) + * Copyright (C) 2001,2002 IBM Corp. * * All rights reserved. * diff -prauN linux-2.6.0-test5/drivers/pci/hotplug/ibmphp_res.c wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/ibmphp_res.c --- linux-2.6.0-test5/drivers/pci/hotplug/ibmphp_res.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/ibmphp_res.c 2003-09-25 19:16:03.000000000 -0700 @@ -3,8 +3,8 @@ * * Written By: Irene Zubarev, IBM Corporation * - * Copyright (c) 2001 Greg Kroah-Hartman (greg@kroah.com) - * Copyright (c) 2001,2002 IBM Corp. + * Copyright (C) 2001 Greg Kroah-Hartman (greg@kroah.com) + * Copyright (C) 2001,2002 IBM Corp. * * All rights reserved. * diff -prauN linux-2.6.0-test5/drivers/pci/hotplug/pci_hotplug.h wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/pci_hotplug.h --- linux-2.6.0-test5/drivers/pci/hotplug/pci_hotplug.h 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/pci_hotplug.h 2003-09-25 19:16:03.000000000 -0700 @@ -1,9 +1,9 @@ /* * PCI HotPlug Core Functions * - * Copyright (c) 1995,2001 Compaq Computer Corporation - * Copyright (c) 2001 Greg Kroah-Hartman (greg@kroah.com) - * Copyright (c) 2001 IBM Corp. + * Copyright (C) 1995,2001 Compaq Computer Corporation + * Copyright (C) 2001 Greg Kroah-Hartman (greg@kroah.com) + * Copyright (C) 2001 IBM Corp. * * All rights reserved. * diff -prauN linux-2.6.0-test5/drivers/pci/hotplug/pci_hotplug_core.c wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/pci_hotplug_core.c --- linux-2.6.0-test5/drivers/pci/hotplug/pci_hotplug_core.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/pci_hotplug_core.c 2003-09-25 19:16:03.000000000 -0700 @@ -1,8 +1,8 @@ /* * PCI HotPlug Controller Core * - * Copyright (c) 2001-2002 Greg Kroah-Hartman (greg@kroah.com) - * Copyright (c) 2001-2002 IBM Corp. + * Copyright (C) 2001-2002 Greg Kroah-Hartman (greg@kroah.com) + * Copyright (C) 2001-2002 IBM Corp. * * All rights reserved. * diff -prauN linux-2.6.0-test5/drivers/pci/hotplug/pcihp_skeleton.c wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/pcihp_skeleton.c --- linux-2.6.0-test5/drivers/pci/hotplug/pcihp_skeleton.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pci/hotplug/pcihp_skeleton.c 2003-09-25 19:16:03.000000000 -0700 @@ -1,8 +1,8 @@ /* * PCI Hot Plug Controller Skeleton Driver - 0.2 * - * Copyright (c) 2001,2003 Greg Kroah-Hartman (greg@kroah.com) - * Copyright (c) 2001,2003 IBM Corp. + * Copyright (C) 2001,2003 Greg Kroah-Hartman (greg@kroah.com) + * Copyright (C) 2001,2003 IBM Corp. * * All rights reserved. * diff -prauN linux-2.6.0-test5/drivers/pci/pci-driver.c wli-2.6.0-test5-bk12-25/drivers/pci/pci-driver.c --- linux-2.6.0-test5/drivers/pci/pci-driver.c 2003-09-08 12:50:17.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pci/pci-driver.c 2003-09-25 19:16:03.000000000 -0700 @@ -35,6 +35,173 @@ pci_match_one_device(const struct pci_de return NULL; } +/* + * Dynamic device IDs are disabled for !CONFIG_HOTPLUG + */ + +#ifdef CONFIG_HOTPLUG +/** + * pci_device_probe_dynamic() + * + * Walk the dynamic ID list looking for a match. + * returns 0 and sets pci_dev->driver when drv claims pci_dev, else error. + */ +static int +pci_device_probe_dynamic(struct pci_driver *drv, struct pci_dev *pci_dev) +{ + int error = -ENODEV; + struct list_head *pos; + struct dynid *dynid; + + spin_lock(&drv->dynids.lock); + list_for_each(pos, &drv->dynids.list) { + dynid = list_entry(pos, struct dynid, node); + if (pci_match_one_device(&dynid->id, pci_dev)) { + spin_unlock(&drv->dynids.lock); + error = drv->probe(pci_dev, &dynid->id); + if (error >= 0) { + pci_dev->driver = drv; + return 0; + } + return error; + } + } + spin_unlock(&drv->dynids.lock); + return error; +} + +static inline void +dynid_init(struct dynid *dynid) +{ + memset(dynid, 0, sizeof(*dynid)); + INIT_LIST_HEAD(&dynid->node); +} + +/** + * store_new_id + * + * Adds a new dynamic pci device ID to this driver, + * and causes the driver to probe for all devices again. + */ +static inline ssize_t +store_new_id(struct device_driver *driver, const char *buf, size_t count) +{ + struct dynid *dynid; + struct bus_type * bus; + struct pci_driver *pdrv = to_pci_driver(driver); + __u32 vendor=PCI_ANY_ID, device=PCI_ANY_ID, subvendor=PCI_ANY_ID, + subdevice=PCI_ANY_ID, class=0, class_mask=0; + unsigned long driver_data=0; + int fields=0; + + fields = sscanf(buf, "%x %x %x %x %x %x %lux", + &vendor, &device, &subvendor, &subdevice, + &class, &class_mask, &driver_data); + if (fields < 0) + return -EINVAL; + + dynid = kmalloc(sizeof(*dynid), GFP_KERNEL); + if (!dynid) + return -ENOMEM; + dynid_init(dynid); + + dynid->id.vendor = vendor; + dynid->id.device = device; + dynid->id.subvendor = subvendor; + dynid->id.subdevice = subdevice; + dynid->id.class = class; + dynid->id.class_mask = class_mask; + dynid->id.driver_data = pdrv->dynids.use_driver_data ? + driver_data : 0UL; + + spin_lock(&pdrv->dynids.lock); + list_add_tail(&pdrv->dynids.list, &dynid->node); + spin_unlock(&pdrv->dynids.lock); + + bus = get_bus(pdrv->driver.bus); + if (bus) { + if (get_driver(&pdrv->driver)) { + down_write(&bus->subsys.rwsem); + driver_attach(&pdrv->driver); + up_write(&bus->subsys.rwsem); + put_driver(&pdrv->driver); + } + put_bus(bus); + } + + return count; +} + +static DRIVER_ATTR(new_id, S_IWUSR, NULL, store_new_id); +static inline void +pci_init_dynids(struct pci_dynids *dynids) +{ + memset(dynids, 0, sizeof(*dynids)); + spin_lock_init(&dynids->lock); + INIT_LIST_HEAD(&dynids->list); +} + +static void +pci_free_dynids(struct pci_driver *drv) +{ + struct list_head *pos, *n; + struct dynid *dynid; + + spin_lock(&drv->dynids.lock); + list_for_each_safe(pos, n, &drv->dynids.list) { + dynid = list_entry(pos, struct dynid, node); + list_del(&dynid->node); + kfree(dynid); + } + spin_unlock(&drv->dynids.lock); +} + +static int +pci_create_newid_file(struct pci_driver *drv) +{ + int error = 0; + if (drv->probe != NULL) + error = sysfs_create_file(&drv->driver.kobj, + &driver_attr_new_id.attr); + return error; +} + +static int +pci_bus_match_dynids(const struct pci_dev *pci_dev, struct pci_driver *pci_drv) +{ + struct list_head *pos; + struct dynid *dynid; + + spin_lock(&pci_drv->dynids.lock); + list_for_each(pos, &pci_drv->dynids.list) { + dynid = list_entry(pos, struct dynid, node); + if (pci_match_one_device(&dynid->id, pci_dev)) { + spin_unlock(&pci_drv->dynids.lock); + return 1; + } + } + spin_unlock(&pci_drv->dynids.lock); + return 0; +} + +#else /* !CONFIG_HOTPLUG */ +static inline int pci_device_probe_dynamic(struct pci_driver *drv, struct pci_dev *pci_dev) +{ + return -ENODEV; +} +static inline void dynid_init(struct dynid *dynid) {} +static inline void pci_init_dynids(struct pci_dynids *dynids) {} +static inline void pci_free_dynids(struct pci_driver *drv) {} +static inline int pci_create_newid_file(struct pci_driver *drv) +{ + return 0; +} +static inline int pci_bus_match_dynids(const struct pci_dev *pci_dev, struct pci_driver *pci_drv) +{ + return 0; +} +#endif + /** * pci_match_device - Tell if a PCI device structure has a matching * PCI device id structure @@ -80,36 +247,6 @@ pci_device_probe_static(struct pci_drive } /** - * pci_device_probe_dynamic() - * - * Walk the dynamic ID list looking for a match. - * returns 0 and sets pci_dev->driver when drv claims pci_dev, else error. - */ -static int -pci_device_probe_dynamic(struct pci_driver *drv, struct pci_dev *pci_dev) -{ - int error = -ENODEV; - struct list_head *pos; - struct dynid *dynid; - - spin_lock(&drv->dynids.lock); - list_for_each(pos, &drv->dynids.list) { - dynid = list_entry(pos, struct dynid, node); - if (pci_match_one_device(&dynid->id, pci_dev)) { - spin_unlock(&drv->dynids.lock); - error = drv->probe(pci_dev, &dynid->id); - if (error >= 0) { - pci_dev->driver = drv; - return 0; - } - return error; - } - } - spin_unlock(&drv->dynids.lock); - return error; -} - -/** * __pci_device_probe() * * returns 0 on success, else error. @@ -178,72 +315,6 @@ static int pci_device_resume(struct devi return 0; } -static inline void -dynid_init(struct dynid *dynid) -{ - memset(dynid, 0, sizeof(*dynid)); - INIT_LIST_HEAD(&dynid->node); -} - -/** - * store_new_id - * @ pdrv - * @ buf - * @ count - * - * Adds a new dynamic pci device ID to this driver, - * and causes the driver to probe for all devices again. - */ -static inline ssize_t -store_new_id(struct device_driver * driver, const char * buf, size_t count) -{ - struct dynid *dynid; - struct bus_type * bus; - struct pci_driver *pdrv = to_pci_driver(driver); - __u32 vendor=PCI_ANY_ID, device=PCI_ANY_ID, subvendor=PCI_ANY_ID, - subdevice=PCI_ANY_ID, class=0, class_mask=0; - unsigned long driver_data=0; - int fields=0; - - fields = sscanf(buf, "%x %x %x %x %x %x %lux", - &vendor, &device, &subvendor, &subdevice, - &class, &class_mask, &driver_data); - if (fields < 0) - return -EINVAL; - - dynid = kmalloc(sizeof(*dynid), GFP_KERNEL); - if (!dynid) - return -ENOMEM; - dynid_init(dynid); - - dynid->id.vendor = vendor; - dynid->id.device = device; - dynid->id.subvendor = subvendor; - dynid->id.subdevice = subdevice; - dynid->id.class = class; - dynid->id.class_mask = class_mask; - dynid->id.driver_data = pdrv->dynids.use_driver_data ? - driver_data : 0UL; - - spin_lock(&pdrv->dynids.lock); - list_add_tail(&pdrv->dynids.list, &dynid->node); - spin_unlock(&pdrv->dynids.lock); - - bus = get_bus(pdrv->driver.bus); - if (bus) { - if (get_driver(&pdrv->driver)) { - down_write(&bus->subsys.rwsem); - driver_attach(&pdrv->driver); - up_write(&bus->subsys.rwsem); - put_driver(&pdrv->driver); - } - put_bus(bus); - } - - return count; -} - -static DRIVER_ATTR(new_id, S_IWUSR, NULL, store_new_id); #define kobj_to_pci_driver(obj) container_of(obj, struct device_driver, kobj) #define attr_to_driver_attribute(obj) container_of(obj, struct driver_attribute, attr) @@ -288,40 +359,11 @@ static struct kobj_type pci_driver_kobj_ }; static int -pci_populate_driver_dir(struct pci_driver * drv) -{ - int error = 0; - - if (drv->probe != NULL) - error = sysfs_create_file(&drv->driver.kobj, - &driver_attr_new_id.attr); - return error; -} - -static inline void -pci_init_dynids(struct pci_dynids *dynids) -{ - memset(dynids, 0, sizeof(*dynids)); - spin_lock_init(&dynids->lock); - INIT_LIST_HEAD(&dynids->list); -} - -static void -pci_free_dynids(struct pci_driver *drv) +pci_populate_driver_dir(struct pci_driver *drv) { - struct list_head *pos, *n; - struct dynid *dynid; - - spin_lock(&drv->dynids.lock); - list_for_each_safe(pos, n, &drv->dynids.list) { - dynid = list_entry(pos, struct dynid, node); - list_del(&dynid->node); - kfree(dynid); - } - spin_unlock(&drv->dynids.lock); + return pci_create_newid_file(drv); } - /** * pci_register_driver - register a new pci driver * @drv: the driver structure to register @@ -411,8 +453,6 @@ static int pci_bus_match(struct device * struct pci_driver * pci_drv = to_pci_driver(drv); const struct pci_device_id * ids = pci_drv->id_table; const struct pci_device_id *found_id; - struct list_head *pos; - struct dynid *dynid; if (!ids) return 0; @@ -421,17 +461,7 @@ static int pci_bus_match(struct device * if (found_id) return 1; - spin_lock(&pci_drv->dynids.lock); - list_for_each(pos, &pci_drv->dynids.list) { - dynid = list_entry(pos, struct dynid, node); - if (pci_match_one_device(&dynid->id, pci_dev)) { - spin_unlock(&pci_drv->dynids.lock); - return 1; - } - } - spin_unlock(&pci_drv->dynids.lock); - - return 0; + return pci_bus_match_dynids(pci_dev, pci_drv); } /** diff -prauN linux-2.6.0-test5/drivers/pcmcia/Kconfig wli-2.6.0-test5-bk12-25/drivers/pcmcia/Kconfig --- linux-2.6.0-test5/drivers/pcmcia/Kconfig 2003-09-08 12:50:19.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pcmcia/Kconfig 2003-09-25 19:16:03.000000000 -0700 @@ -23,11 +23,8 @@ config PCMCIA for location). Please also read the PCMCIA-HOWTO, available from . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - When compiled this way, there will be modules called pcmcia_core - and ds. If you want to compile it as a module, say M here and - read . + To compile this driver as modules, choose M here: the + modules will be called pcmcia_core and ds. config YENTA tristate "CardBus yenta-compatible bridge support" diff -prauN linux-2.6.0-test5/drivers/pcmcia/cardbus.c wli-2.6.0-test5-bk12-25/drivers/pcmcia/cardbus.c --- linux-2.6.0-test5/drivers/pcmcia/cardbus.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pcmcia/cardbus.c 2003-09-25 19:16:03.000000000 -0700 @@ -29,18 +29,11 @@ the provisions above, a recipient may use your version of this file under either the MPL or the GPL. - These routines handle allocating resources for Cardbus cards, as - well as setting up and shutting down Cardbus sockets. They are - called from cs.c in response to Request/ReleaseConfiguration and - Request/ReleaseIO calls. - ======================================================================*/ /* - * This file is going away. Cardbus handling has been re-written to be - * more of a PCI bridge thing, and the PCI code basically does all the - * resource handling. This has wrappers to make the rest of the PCMCIA - * subsystem not notice that it's not here any more. + * Cardbus handling has been re-written to be more of a PCI bridge thing, + * and the PCI code basically does all the resource handling. * * Linus, Jan 2000 */ diff -prauN linux-2.6.0-test5/drivers/pcmcia/cs.c wli-2.6.0-test5-bk12-25/drivers/pcmcia/cs.c --- linux-2.6.0-test5/drivers/pcmcia/cs.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pcmcia/cs.c 2003-09-25 19:16:03.000000000 -0700 @@ -244,13 +244,10 @@ static const lookup_t service_table[] = static int socket_resume(struct pcmcia_socket *skt); static int socket_suspend(struct pcmcia_socket *skt); -int pcmcia_socket_dev_suspend(struct device *dev, u32 state, u32 level) +int pcmcia_socket_dev_suspend(struct device *dev, u32 state) { struct pcmcia_socket *socket; - if (level != SUSPEND_SAVE_STATE) - return 0; - down_read(&pcmcia_socket_list_rwsem); list_for_each_entry(socket, &pcmcia_socket_list, socket_list) { if (socket->dev.dev != dev) @@ -265,13 +262,10 @@ int pcmcia_socket_dev_suspend(struct dev } EXPORT_SYMBOL(pcmcia_socket_dev_suspend); -int pcmcia_socket_dev_resume(struct device *dev, u32 level) +int pcmcia_socket_dev_resume(struct device *dev) { struct pcmcia_socket *socket; - if (level != RESUME_RESTORE_STATE) - return 0; - down_read(&pcmcia_socket_list_rwsem); list_for_each_entry(socket, &pcmcia_socket_list, socket_list) { if (socket->dev.dev != dev) @@ -287,72 +281,29 @@ int pcmcia_socket_dev_resume(struct devi EXPORT_SYMBOL(pcmcia_socket_dev_resume); -static int pccardd(void *__skt); -#define to_class_data(dev) dev->class_data - -static int pcmcia_add_socket(struct class_device *class_dev) -{ - struct pcmcia_socket *socket = class_get_devdata(class_dev); - int ret = 0; - - /* base address = 0, map = 0 */ - socket->cis_mem.flags = 0; - socket->cis_mem.speed = cis_speed; - socket->erase_busy.next = socket->erase_busy.prev = &socket->erase_busy; - INIT_LIST_HEAD(&socket->cis_cache); - spin_lock_init(&socket->lock); - - init_completion(&socket->thread_done); - init_waitqueue_head(&socket->thread_wait); - init_MUTEX(&socket->skt_sem); - spin_lock_init(&socket->thread_lock); - - socket->socket = dead_socket; - socket->ops->init(socket); - - ret = kernel_thread(pccardd, socket, CLONE_KERNEL); - if (ret < 0) - return ret; - - wait_for_completion(&socket->thread_done); - BUG_ON(!socket->thread); - pcmcia_parse_events(socket, SS_DETECT); - - return 0; -} - -static void pcmcia_remove_socket(struct class_device *class_dev) +static void pcmcia_release_socket(struct class_device *class_dev) { struct pcmcia_socket *socket = class_get_devdata(class_dev); client_t *client; - if (socket->thread) { - init_completion(&socket->thread_done); - socket->thread = NULL; - wake_up(&socket->thread_wait); - wait_for_completion(&socket->thread_done); - } - release_cis_mem(socket); while (socket->clients) { client = socket->clients; socket->clients = socket->clients->next; kfree(client); } - socket->ops = NULL; -} -static void pcmcia_release_socket(struct class_device *class_dev) -{ - struct pcmcia_socket *socket = class_get_devdata(class_dev); complete(&socket->socket_released); } +static int pccardd(void *__skt); /** * pcmcia_register_socket - add a new pcmcia socket device */ int pcmcia_register_socket(struct pcmcia_socket *socket) { + int ret; + if (!socket || !socket->ops || !socket->dev.dev) return -EINVAL; @@ -387,15 +338,34 @@ int pcmcia_register_socket(struct pcmcia socket->dev.class = &pcmcia_socket_class; snprintf(socket->dev.class_id, BUS_ID_SIZE, "pcmcia_socket%u", socket->sock); - /* register with the device core */ - if (class_device_register(&socket->dev)) { - down_write(&pcmcia_socket_list_rwsem); - list_del(&socket->socket_list); - up_write(&pcmcia_socket_list_rwsem); - return -EINVAL; - } + /* base address = 0, map = 0 */ + socket->cis_mem.flags = 0; + socket->cis_mem.speed = cis_speed; + socket->erase_busy.next = socket->erase_busy.prev = &socket->erase_busy; + INIT_LIST_HEAD(&socket->cis_cache); + spin_lock_init(&socket->lock); + + init_completion(&socket->socket_released); + init_completion(&socket->thread_done); + init_waitqueue_head(&socket->thread_wait); + init_MUTEX(&socket->skt_sem); + spin_lock_init(&socket->thread_lock); + + ret = kernel_thread(pccardd, socket, CLONE_KERNEL); + if (ret < 0) + goto err; + + wait_for_completion(&socket->thread_done); + BUG_ON(!socket->thread); + pcmcia_parse_events(socket, SS_DETECT); return 0; + + err: + down_write(&pcmcia_socket_list_rwsem); + list_del(&socket->socket_list); + up_write(&pcmcia_socket_list_rwsem); + return ret; } /* pcmcia_register_socket */ EXPORT_SYMBOL(pcmcia_register_socket); @@ -410,10 +380,13 @@ void pcmcia_unregister_socket(struct pcm DEBUG(0, "cs: pcmcia_unregister_socket(0x%p)\n", socket->ops); - init_completion(&socket->socket_released); - - /* remove from the device core */ - class_device_unregister(&socket->dev); + if (socket->thread) { + init_completion(&socket->thread_done); + socket->thread = NULL; + wake_up(&socket->thread_wait); + wait_for_completion(&socket->thread_done); + } + release_cis_mem(socket); /* remove from our own list */ down_write(&pcmcia_socket_list_rwsem); @@ -657,7 +630,7 @@ static int socket_setup(struct pcmcia_so pcmcia_error(skt, "unsupported voltage key.\n"); return CS_BAD_TYPE; } - skt->socket.flags = SS_DEBOUNCED; + skt->socket.flags = 0; skt->ops->set_socket(skt, &skt->socket); /* @@ -690,7 +663,6 @@ static int socket_insert(struct pcmcia_s } #endif send_event(skt, CS_EVENT_CARD_INSERTION, CS_EVENT_PRI_LOW); - skt->socket.flags &= ~SS_DEBOUNCED; } else { socket_shutdown(skt); cs_socket_put(skt); @@ -739,7 +711,6 @@ static int socket_resume(struct pcmcia_s } else { send_event(skt, CS_EVENT_PM_RESUME, CS_EVENT_PRI_LOW); } - skt->socket.flags &= ~SS_DEBOUNCED; } else { socket_shutdown(skt); cs_socket_put(skt); @@ -791,11 +762,22 @@ static int pccardd(void *__skt) { struct pcmcia_socket *skt = __skt; DECLARE_WAITQUEUE(wait, current); + int ret; daemonize("pccardd"); skt->thread = current; complete(&skt->thread_done); + skt->socket = dead_socket; + skt->ops->init(skt); + + /* register with the device core */ + ret = class_device_register(&skt->dev); + if (ret) { + printk(KERN_WARNING "PCMCIA: unable to register socket 0x%p\n", + skt); + } + add_wait_queue(&skt->thread_wait, &wait); for (;;) { unsigned long flags; @@ -831,6 +813,9 @@ static int pccardd(void *__skt) } remove_wait_queue(&skt->thread_wait, &wait); + /* remove from the device core */ + class_device_unregister(&skt->dev); + complete_and_exit(&skt->thread_done, 0); } @@ -2509,12 +2494,6 @@ struct class pcmcia_socket_class = { }; EXPORT_SYMBOL(pcmcia_socket_class); -static struct class_interface pcmcia_socket = { - .class = &pcmcia_socket_class, - .add = &pcmcia_add_socket, - .remove = &pcmcia_remove_socket, -}; - static int __init init_pcmcia_cs(void) { @@ -2522,7 +2501,6 @@ static int __init init_pcmcia_cs(void) printk(KERN_INFO " %s\n", options); DEBUG(0, "%s\n", version); class_register(&pcmcia_socket_class); - class_interface_register(&pcmcia_socket); return 0; } @@ -2531,7 +2509,6 @@ static void __exit exit_pcmcia_cs(void) { printk(KERN_INFO "unloading Kernel Card Services\n"); release_resource_db(); - class_interface_unregister(&pcmcia_socket); class_unregister(&pcmcia_socket_class); } diff -prauN linux-2.6.0-test5/drivers/pcmcia/cs_internal.h wli-2.6.0-test5-bk12-25/drivers/pcmcia/cs_internal.h --- linux-2.6.0-test5/drivers/pcmcia/cs_internal.h 2003-09-08 12:49:50.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pcmcia/cs_internal.h 2003-09-25 19:16:03.000000000 -0700 @@ -100,11 +100,8 @@ struct cis_cache_entry { /* Flags in socket state */ #define SOCKET_PRESENT 0x0008 #define SOCKET_INUSE 0x0010 -#define SOCKET_SHUTDOWN_PENDING 0x0020 -#define SOCKET_RESET_PENDING 0x0040 #define SOCKET_SUSPEND 0x0080 #define SOCKET_WIN_REQ(i) (0x0100<<(i)) -#define SOCKET_IO_REQ(i) (0x1000<<(i)) #define SOCKET_REGION_INFO 0x4000 #define SOCKET_CARDBUS 0x8000 #define SOCKET_CARDBUS_CONFIG 0x10000 diff -prauN linux-2.6.0-test5/drivers/pcmcia/hd64465_ss.c wli-2.6.0-test5-bk12-25/drivers/pcmcia/hd64465_ss.c --- linux-2.6.0-test5/drivers/pcmcia/hd64465_ss.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pcmcia/hd64465_ss.c 2003-09-25 19:16:03.000000000 -0700 @@ -867,19 +867,32 @@ static void hs_exit_socket(hs_socket_t * local_irq_restore(flags); } +static int hd64465_suspend(struct device *dev, u32 state, u32 level) +{ + int ret = 0; + if (level == SUSPEND_SAVE_STATE) + ret = pcmcia_socket_dev_suspend(dev, state); + return ret; +} + +static int hd64465_resume(struct device *dev, u32 level) +{ + int ret = 0; + if (level == RESUME_RESTORE_STATE) + ret = pcmcia_socket_dev_resume(dev); + return ret; +} + static struct device_driver hd64465_driver = { .name = "hd64465-pcmcia", .bus = &platform_bus_type, - .suspend = pcmcia_socket_dev_suspend, - .resume = pcmcia_socket_dev_resume, + .suspend = hd64465_suspend, + .resume = hd64465_resume, }; static struct platform_device hd64465_device = { .name = "hd64465-pcmcia", .id = 0, - .dev = { - .name = "hd64465-pcmcia", - }, }; static int __init init_hs(void) diff -prauN linux-2.6.0-test5/drivers/pcmcia/i82092.c wli-2.6.0-test5-bk12-25/drivers/pcmcia/i82092.c --- linux-2.6.0-test5/drivers/pcmcia/i82092.c 2003-09-08 12:50:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pcmcia/i82092.c 2003-09-25 19:16:03.000000000 -0700 @@ -44,12 +44,12 @@ MODULE_DEVICE_TABLE(pci, i82092aa_pci_id static int i82092aa_socket_suspend (struct pci_dev *dev, u32 state) { - return pcmcia_socket_dev_suspend(&dev->dev, state, SUSPEND_SAVE_STATE); + return pcmcia_socket_dev_suspend(&dev->dev, state); } static int i82092aa_socket_resume (struct pci_dev *dev) { - return pcmcia_socket_dev_resume(&dev->dev, RESUME_RESTORE_STATE); + return pcmcia_socket_dev_resume(&dev->dev); } static struct pci_driver i82092aa_pci_drv = { @@ -92,7 +92,7 @@ static struct socket_info sockets[MAX_SO static int socket_count; /* shortcut */ -static int __init i82092aa_pci_probe(struct pci_dev *dev, const struct pci_device_id *id) +static int __devinit i82092aa_pci_probe(struct pci_dev *dev, const struct pci_device_id *id) { unsigned char configbyte; int i, ret; diff -prauN linux-2.6.0-test5/drivers/pcmcia/i82365.c wli-2.6.0-test5-bk12-25/drivers/pcmcia/i82365.c --- linux-2.6.0-test5/drivers/pcmcia/i82365.c 2003-09-08 12:50:23.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pcmcia/i82365.c 2003-09-25 19:16:03.000000000 -0700 @@ -1351,11 +1351,27 @@ static struct pccard_operations pcic_ope /*====================================================================*/ +static int i82365_suspend(struct device *dev, u32 state, u32 level) +{ + int ret = 0; + if (level == SUSPEND_SAVE_STATE) + ret = pcmcia_socket_dev_suspend(dev, state); + return ret; +} + +static int i82365_resume(struct device *dev, u32 level) +{ + int ret = 0; + if (level == RESUME_RESTORE_STATE) + ret = pcmcia_socket_dev_resume(dev); + return ret; +} + static struct device_driver i82365_driver = { .name = "i82365", .bus = &platform_bus_type, - .suspend = pcmcia_socket_dev_suspend, - .resume = pcmcia_socket_dev_resume, + .suspend = i82365_suspend, + .resume = i82365_resume, }; static struct platform_device i82365_device = { diff -prauN linux-2.6.0-test5/drivers/pcmcia/ricoh.h wli-2.6.0-test5-bk12-25/drivers/pcmcia/ricoh.h --- linux-2.6.0-test5/drivers/pcmcia/ricoh.h 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pcmcia/ricoh.h 2003-09-25 19:16:03.000000000 -0700 @@ -109,7 +109,7 @@ /* 16-bit IO and memory timing registers */ #define RL5C4XX_16BIT_IO_0 0x0088 /* 16 bit */ -#define RL5C4XX_16BIT_MEM_0 0x0088 /* 16 bit */ +#define RL5C4XX_16BIT_MEM_0 0x008a /* 16 bit */ #define RL5C4XX_SETUP_MASK 0x0007 #define RL5C4XX_SETUP_SHIFT 0 #define RL5C4XX_CMD_MASK 0x01f0 diff -prauN linux-2.6.0-test5/drivers/pcmcia/rsrc_mgr.c wli-2.6.0-test5-bk12-25/drivers/pcmcia/rsrc_mgr.c --- linux-2.6.0-test5/drivers/pcmcia/rsrc_mgr.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pcmcia/rsrc_mgr.c 2003-09-25 19:16:03.000000000 -0700 @@ -491,7 +491,7 @@ static u_long inv_probe(resource_map_t * void validate_mem(struct pcmcia_socket *s) { - resource_map_t *m, *n; + resource_map_t *m, mm; static u_char order[] = { 0xd0, 0xe0, 0xc0, 0xf0 }; static int hi = 0, lo = 0; u_long b, i, ok = 0; @@ -510,18 +510,18 @@ void validate_mem(struct pcmcia_socket * } if (lo++) goto out; - for (m = mem_db.next; m != &mem_db; m = n) { - n = m->next; + for (m = mem_db.next; m != &mem_db; m = mm.next) { + mm = *m; /* Only probe < 1 MB */ - if (m->base >= 0x100000) continue; - if ((m->base | m->num) & 0xffff) { - ok += do_mem_probe(m->base, m->num, s); + if (mm.base >= 0x100000) continue; + if ((mm.base | mm.num) & 0xffff) { + ok += do_mem_probe(mm.base, mm.num, s); continue; } /* Special probe for 64K-aligned block */ for (i = 0; i < 4; i++) { b = order[i] << 12; - if ((b >= m->base) && (b+0x10000 <= m->base+m->num)) { + if ((b >= mm.base) && (b+0x10000 <= mm.base+mm.num)) { if (ok >= mem_limit) sub_interval(&mem_db, b, 0x10000); else @@ -537,14 +537,14 @@ void validate_mem(struct pcmcia_socket * void validate_mem(struct pcmcia_socket *s) { - resource_map_t *m, *n; + resource_map_t *m, mm; static int done = 0; if (probe_mem && done++ == 0) { down(&rsrc_sem); - for (m = mem_db.next; m != &mem_db; m = n) { - n = m->next; - if (do_mem_probe(m->base, m->num, s)) + for (m = mem_db.next; m != &mem_db; m = mm.next) { + mm = *m; + if (do_mem_probe(mm.base, mm.num, s)) break; } up(&rsrc_sem); diff -prauN linux-2.6.0-test5/drivers/pcmcia/sa1100_assabet.c wli-2.6.0-test5-bk12-25/drivers/pcmcia/sa1100_assabet.c --- linux-2.6.0-test5/drivers/pcmcia/sa1100_assabet.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pcmcia/sa1100_assabet.c 2003-09-25 19:16:03.000000000 -0700 @@ -4,7 +4,6 @@ * PCMCIA implementation routines for Assabet * */ -#include #include #include #include diff -prauN linux-2.6.0-test5/drivers/pcmcia/sa1100_generic.c wli-2.6.0-test5-bk12-25/drivers/pcmcia/sa1100_generic.c --- linux-2.6.0-test5/drivers/pcmcia/sa1100_generic.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pcmcia/sa1100_generic.c 2003-09-25 19:16:03.000000000 -0700 @@ -100,13 +100,29 @@ static int sa11x0_drv_pcmcia_probe(struc return ret; } +static int sa11x0_drv_pcmcia_suspend(struct device *dev, u32 state, u32 level) +{ + int ret = 0; + if (level == SUSPEND_SAVE_STATE) + ret = pcmcia_socket_dev_suspend(dev, state); + return ret; +} + +static int sa11x0_drv_pcmcia_resume(struct device *dev, u32 level) +{ + int ret = 0; + if (level == RESUME_RESTORE_STATE) + ret = pcmcia_socket_dev_resume(dev); + return ret; +} + static struct device_driver sa11x0_pcmcia_driver = { .probe = sa11x0_drv_pcmcia_probe, .remove = sa11xx_drv_pcmcia_remove, .name = "sa11x0-pcmcia", .bus = &platform_bus_type, - .suspend = pcmcia_socket_dev_suspend, - .resume = pcmcia_socket_dev_resume, + .suspend = sa11x0_drv_pcmcia_suspend, + .resume = sa11x0_drv_pcmcia_resume, }; /* sa11x0_pcmcia_init() diff -prauN linux-2.6.0-test5/drivers/pcmcia/sa1100_simpad.c wli-2.6.0-test5-bk12-25/drivers/pcmcia/sa1100_simpad.c --- linux-2.6.0-test5/drivers/pcmcia/sa1100_simpad.c 2003-09-08 12:50:39.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pcmcia/sa1100_simpad.c 2003-09-25 19:16:03.000000000 -0700 @@ -13,6 +13,7 @@ #include #include #include +#include #include "sa1100_generic.h" extern long get_cs3_shadow(void); @@ -25,9 +26,6 @@ static struct pcmcia_irqs irqs[] = { static int simpad_pcmcia_hw_init(struct sa1100_pcmcia_socket *skt) { - set_cs3_bit(PCMCIA_RESET); - clear_cs3_bit(PCMCIA_BUFF_DIS); - clear_cs3_bit(PCMCIA_RESET); clear_cs3_bit(VCC_3V_EN|VCC_5V_EN|EN0|EN1); @@ -71,7 +69,7 @@ static int simpad_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt, const socket_state_t *state) { - unsigned long value, flags; + unsigned long flags; local_irq_save(flags); @@ -82,8 +80,8 @@ simpad_pcmcia_configure_socket(struct sa break; case 33: - clear_cs3_bit(VCC_3V_EN|EN0); - set_cs3_bit(VCC_5V_EN|EN1); + clear_cs3_bit(VCC_3V_EN|EN1); + set_cs3_bit(VCC_5V_EN|EN0); break; case 50: @@ -99,7 +97,7 @@ simpad_pcmcia_configure_socket(struct sa return -1; } - /* Silently ignore Vpp, output enable, speaker enable. */ + local_irq_restore(flags); return 0; @@ -113,6 +111,7 @@ static void simpad_pcmcia_socket_init(st static void simpad_pcmcia_socket_suspend(struct sa1100_pcmcia_socket *skt) { sa11xx_disable_irqs(skt, irqs, ARRAY_SIZE(irqs)); + set_cs3_bit(PCMCIA_RESET); } static struct pcmcia_low_level simpad_pcmcia_ops = { diff -prauN linux-2.6.0-test5/drivers/pcmcia/sa1111_generic.c wli-2.6.0-test5-bk12-25/drivers/pcmcia/sa1111_generic.c --- linux-2.6.0-test5/drivers/pcmcia/sa1111_generic.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pcmcia/sa1111_generic.c 2003-09-25 19:16:03.000000000 -0700 @@ -5,6 +5,7 @@ * basically means we handle everything except controlling the * power. Power is machine specific... */ +#include #include #include #include @@ -171,12 +172,12 @@ static int __devexit pcmcia_remove(struc static int pcmcia_suspend(struct sa1111_dev *dev, u32 state) { - return pcmcia_socket_dev_suspend(&dev->dev, state, SUSPEND_SAVE_STATE); + return pcmcia_socket_dev_suspend(&dev->dev, state); } static int pcmcia_resume(struct sa1111_dev *dev) { - return pcmcia_socket_dev_resume(&dev->dev, RESUME_RESTORE_STATE); + return pcmcia_socket_dev_resume(&dev->dev); } static struct sa1111_driver pcmcia_driver = { diff -prauN linux-2.6.0-test5/drivers/pcmcia/sa11xx_core.c wli-2.6.0-test5-bk12-25/drivers/pcmcia/sa11xx_core.c --- linux-2.6.0-test5/drivers/pcmcia/sa11xx_core.c 2003-09-08 12:49:55.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pcmcia/sa11xx_core.c 2003-09-25 19:16:03.000000000 -0700 @@ -556,7 +556,6 @@ static struct bittbl conf_bits[] = { { SS_DMA_MODE, "SS_DMA_MODE" }, { SS_SPKR_ENA, "SS_SPKR_ENA" }, { SS_OUTPUT_ENA, "SS_OUTPUT_ENA" }, - { SS_DEBOUNCED, "SS_DEBOUNCED" }, }; static void diff -prauN linux-2.6.0-test5/drivers/pcmcia/tcic.c wli-2.6.0-test5-bk12-25/drivers/pcmcia/tcic.c --- linux-2.6.0-test5/drivers/pcmcia/tcic.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pcmcia/tcic.c 2003-09-25 19:16:03.000000000 -0700 @@ -362,11 +362,27 @@ static int __init get_tcic_id(void) /*====================================================================*/ +static int tcic_drv_suspend(struct device *dev, u32 state, u32 level) +{ + int ret = 0; + if (level == SUSPEND_SAVE_STATE) + ret = pcmcia_socket_dev_suspend(dev, state); + return ret; +} + +static int tcic_drv_resume(struct device *dev, u32 level) +{ + int ret = 0; + if (level == RESUME_RESTORE_STATE) + ret = pcmcia_socket_dev_resume(dev); + return ret; +} + static struct device_driver tcic_driver = { .name = "tcic-pcmcia", .bus = &platform_bus_type, - .suspend = pcmcia_socket_dev_suspend, - .resume = pcmcia_socket_dev_resume, + .suspend = tcic_drv_suspend, + .resume = tcic_drv_resume, }; static struct platform_device tcic_device = { diff -prauN linux-2.6.0-test5/drivers/pcmcia/yenta_socket.c wli-2.6.0-test5-bk12-25/drivers/pcmcia/yenta_socket.c --- linux-2.6.0-test5/drivers/pcmcia/yenta_socket.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pcmcia/yenta_socket.c 2003-09-25 19:16:03.000000000 -0700 @@ -248,10 +248,6 @@ static int yenta_set_socket(struct pcmci struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket); u16 bridge; - if (state->flags & SS_DEBOUNCED) { - /* The insertion debounce period has ended. Clear any pending insertion events */ - state->flags &= ~SS_DEBOUNCED; /* SS_DEBOUNCED is oneshot */ - } yenta_set_power(socket, state); socket->io_irq = state->io_irq; bridge = config_readw(socket, CB_BRIDGE_CONTROL) & ~(CB_BRIDGE_CRST | CB_BRIDGE_INTR); @@ -937,7 +933,7 @@ static int yenta_dev_suspend (struct pci struct yenta_socket *socket = pci_get_drvdata(dev); int ret; - ret = pcmcia_socket_dev_suspend(&dev->dev, state, SUSPEND_SAVE_STATE); + ret = pcmcia_socket_dev_suspend(&dev->dev, state); if (socket) { if (socket->type && socket->type->save_state) @@ -969,7 +965,7 @@ static int yenta_dev_resume (struct pci_ socket->type->restore_state(socket); } - return pcmcia_socket_dev_resume(&dev->dev, RESUME_RESTORE_STATE); + return pcmcia_socket_dev_resume(&dev->dev); } diff -prauN linux-2.6.0-test5/drivers/pnp/card.c wli-2.6.0-test5-bk12-25/drivers/pnp/card.c --- linux-2.6.0-test5/drivers/pnp/card.c 2003-09-08 12:50:31.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pnp/card.c 2003-09-25 19:16:03.000000000 -0700 @@ -62,8 +62,14 @@ static int card_probe(struct pnp_card * if (drv->probe) { if (drv->probe(clink, id)>=0) return 1; - else + else { + struct pnp_dev * dev; + card_for_each_dev(card, dev) { + if (dev->card_link == clink) + pnp_release_card_device(dev); + } kfree(clink); + } } else return 1; } diff -prauN linux-2.6.0-test5/drivers/pnp/isapnp/compat.c wli-2.6.0-test5-bk12-25/drivers/pnp/isapnp/compat.c --- linux-2.6.0-test5/drivers/pnp/isapnp/compat.c 2003-09-08 12:50:23.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pnp/isapnp/compat.c 2003-09-25 19:16:03.000000000 -0700 @@ -9,7 +9,6 @@ /* TODO: see if more isapnp functions are needed here */ #include -#include #include #include #include diff -prauN linux-2.6.0-test5/drivers/pnp/isapnp/core.c wli-2.6.0-test5-bk12-25/drivers/pnp/isapnp/core.c --- linux-2.6.0-test5/drivers/pnp/isapnp/core.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pnp/isapnp/core.c 2003-09-25 19:16:03.000000000 -0700 @@ -35,7 +35,6 @@ */ #include -#include #include #include #include @@ -65,7 +64,6 @@ MODULE_PARM(isapnp_rdp, "i"); MODULE_PARM_DESC(isapnp_rdp, "ISA Plug & Play read data port"); MODULE_PARM(isapnp_reset, "i"); MODULE_PARM_DESC(isapnp_reset, "ISA Plug & Play reset all cards"); -MODULE_PARM(isapnp_allow_dma0, "i"); MODULE_PARM(isapnp_verbose, "i"); MODULE_PARM_DESC(isapnp_verbose, "ISA Plug & Play verbose mode"); MODULE_LICENSE("GPL"); diff -prauN linux-2.6.0-test5/drivers/pnp/isapnp/proc.c wli-2.6.0-test5-bk12-25/drivers/pnp/isapnp/proc.c --- linux-2.6.0-test5/drivers/pnp/isapnp/proc.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pnp/isapnp/proc.c 2003-09-25 19:16:03.000000000 -0700 @@ -20,7 +20,6 @@ */ #include -#include #include #include #include diff -prauN linux-2.6.0-test5/drivers/pnp/pnpbios/bioscalls.c wli-2.6.0-test5-bk12-25/drivers/pnp/pnpbios/bioscalls.c --- linux-2.6.0-test5/drivers/pnp/pnpbios/bioscalls.c 2003-09-08 12:50:16.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pnp/pnpbios/bioscalls.c 2003-09-25 19:16:03.000000000 -0700 @@ -23,41 +23,7 @@ #include #include - -/* PnP BIOS signature: "$PnP" */ -#define PNP_SIGNATURE (('$' << 0) + ('P' << 8) + ('n' << 16) + ('P' << 24)) - -#pragma pack(1) -union pnp_bios_expansion_header { - struct { - u32 signature; /* "$PnP" */ - u8 version; /* in BCD */ - u8 length; /* length in bytes, currently 21h */ - u16 control; /* system capabilities */ - u8 checksum; /* all bytes must add up to 0 */ - - u32 eventflag; /* phys. address of the event flag */ - u16 rmoffset; /* real mode entry point */ - u16 rmcseg; - u16 pm16offset; /* 16 bit protected mode entry */ - u32 pm16cseg; - u32 deviceID; /* EISA encoded system ID or 0 */ - u16 rmdseg; /* real mode data segment */ - u32 pm16dseg; /* 16 bit pm data segment base */ - } fields; - char chars[0x21]; /* To calculate the checksum */ -}; -#pragma pack() - -static union pnp_bios_expansion_header * pnp_bios_hdr = NULL; - -/* - * Call this only after init time - */ -static int pnp_bios_present(void) -{ - return (pnp_bios_hdr != NULL); -} +#include "pnpbios.h" static struct { u16 offset; @@ -557,10 +523,10 @@ static int pnp_bios_write_escd(char *dat /* - * Probing and Initialization + * Initialization */ -static void pnpbios_prepare_bios_calls(union pnp_bios_expansion_header *header) +void pnpbios_calls_init(union pnp_bios_install_struct *header) { int i; spin_lock_init(&pnp_bios_lock); @@ -576,52 +542,3 @@ static void pnpbios_prepare_bios_calls(u Q_SET_SEL(i, PNP_DS, header->fields.pm16dseg, 64 * 1024); } } - -int pnpbios_probe_installation(void) -{ - union pnp_bios_expansion_header *check; - u8 sum; - int length, i; - - printk(KERN_INFO "PnPBIOS: Scanning system for PnP BIOS support...\n"); - - /* - * Search the defined area (0xf0000-0xffff0) for a valid PnP BIOS - * structure and, if one is found, sets up the selectors and - * entry points - */ - for (check = (union pnp_bios_expansion_header *) __va(0xf0000); - check < (union pnp_bios_expansion_header *) __va(0xffff0); - ((void *) (check)) += 16) { - if (check->fields.signature != PNP_SIGNATURE) - continue; - printk(KERN_INFO "PnPBIOS: Found PnP BIOS installation structure at 0x%p\n", check); - length = check->fields.length; - if (!length) { - printk(KERN_ERR "PnPBIOS: installation structure is invalid, skipping\n"); - continue; - } - for (sum = 0, i = 0; i < length; i++) - sum += check->chars[i]; - if (sum) { - printk(KERN_ERR "PnPBIOS: installation structure is corrupted, skipping\n"); - continue; - } - if (check->fields.version < 0x10) { - printk(KERN_WARNING "PnPBIOS: PnP BIOS version %d.%d is not supported\n", - check->fields.version >> 4, - check->fields.version & 15); - continue; - } - printk(KERN_INFO "PnPBIOS: PnP BIOS version %d.%d, entry 0x%x:0x%x, dseg 0x%x\n", - check->fields.version >> 4, check->fields.version & 15, - check->fields.pm16cseg, check->fields.pm16offset, - check->fields.pm16dseg); - pnp_bios_hdr = check; - pnpbios_prepare_bios_calls(check); - return 1; - } - - printk(KERN_INFO "PnPBIOS: PnP BIOS support was not detected.\n"); - return 0; -} diff -prauN linux-2.6.0-test5/drivers/pnp/pnpbios/core.c wli-2.6.0-test5-bk12-25/drivers/pnp/pnpbios/core.c --- linux-2.6.0-test5/drivers/pnp/pnpbios/core.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pnp/pnpbios/core.c 2003-09-25 19:16:03.000000000 -0700 @@ -74,6 +74,13 @@ * */ +static union pnp_bios_install_struct * pnp_bios_install = NULL; + +int pnp_bios_present(void) +{ + return (pnp_bios_install != NULL); +} + struct pnp_dev_node_info node_info; void *pnpbios_kmalloc(size_t size, int f) @@ -410,7 +417,56 @@ static int __init pnpbios_setup(char *st __setup("pnpbios=", pnpbios_setup); #endif -subsys_initcall(pnpbios_init); +/* PnP BIOS signature: "$PnP" */ +#define PNP_SIGNATURE (('$' << 0) + ('P' << 8) + ('n' << 16) + ('P' << 24)) + +int __init pnpbios_probe_system(void) +{ + union pnp_bios_install_struct *check; + u8 sum; + int length, i; + + printk(KERN_INFO "PnPBIOS: Scanning system for PnP BIOS support...\n"); + + /* + * Search the defined area (0xf0000-0xffff0) for a valid PnP BIOS + * structure and, if one is found, sets up the selectors and + * entry points + */ + for (check = (union pnp_bios_install_struct *) __va(0xf0000); + check < (union pnp_bios_install_struct *) __va(0xffff0); + ((void *) (check)) += 16) { + if (check->fields.signature != PNP_SIGNATURE) + continue; + printk(KERN_INFO "PnPBIOS: Found PnP BIOS installation structure at 0x%p\n", check); + length = check->fields.length; + if (!length) { + printk(KERN_ERR "PnPBIOS: installation structure is invalid, skipping\n"); + continue; + } + for (sum = 0, i = 0; i < length; i++) + sum += check->chars[i]; + if (sum) { + printk(KERN_ERR "PnPBIOS: installation structure is corrupted, skipping\n"); + continue; + } + if (check->fields.version < 0x10) { + printk(KERN_WARNING "PnPBIOS: PnP BIOS version %d.%d is not supported\n", + check->fields.version >> 4, + check->fields.version & 15); + continue; + } + printk(KERN_INFO "PnPBIOS: PnP BIOS version %d.%d, entry 0x%x:0x%x, dseg 0x%x\n", + check->fields.version >> 4, check->fields.version & 15, + check->fields.pm16cseg, check->fields.pm16offset, + check->fields.pm16dseg); + pnp_bios_install = check; + return 1; + } + + printk(KERN_INFO "PnPBIOS: PnP BIOS support was not detected.\n"); + return 0; +} int __init pnpbios_init(void) { @@ -421,24 +477,30 @@ int __init pnpbios_init(void) } /* scan the system for pnpbios support */ - if (!pnpbios_probe_installation()) + if (!pnpbios_probe_system()) return -ENODEV; + /* make preparations for bios calls */ + pnpbios_calls_init(pnp_bios_install); + /* read the node info */ - if (pnp_bios_dev_node_info(&node_info)) { + ret = pnp_bios_dev_node_info(&node_info); + if (ret) { printk(KERN_ERR "PnPBIOS: Unable to get node info. Aborting.\n"); - return -EIO; + return ret; } /* register with the pnp layer */ - pnp_register_protocol(&pnpbios_protocol); + ret = pnp_register_protocol(&pnpbios_protocol); + if (ret) { + printk(KERN_ERR "PnPBIOS: Unable to register driver. Aborting.\n"); + return ret; + } -#ifdef CONFIG_PROC_FS /* start the proc interface */ ret = pnpbios_proc_init(); if (ret) - return ret; -#endif + printk(KERN_ERR "PnPBIOS: Failed to create proc interface.\n"); /* scan for pnpbios devices */ build_devlist(); @@ -446,6 +508,8 @@ int __init pnpbios_init(void) return 0; } +subsys_initcall(pnpbios_init); + static int __init pnpbios_thread_init(void) { #ifdef CONFIG_HOTPLUG diff -prauN linux-2.6.0-test5/drivers/pnp/pnpbios/pnpbios.h wli-2.6.0-test5-bk12-25/drivers/pnp/pnpbios/pnpbios.h --- linux-2.6.0-test5/drivers/pnp/pnpbios/pnpbios.h 2003-09-08 12:49:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pnp/pnpbios/pnpbios.h 2003-09-25 19:16:03.000000000 -0700 @@ -1,11 +1,47 @@ /* - * pnpbios.h - contains definitions for functions used only locally. + * pnpbios.h - contains local definitions */ +#pragma pack(1) +union pnp_bios_install_struct { + struct { + u32 signature; /* "$PnP" */ + u8 version; /* in BCD */ + u8 length; /* length in bytes, currently 21h */ + u16 control; /* system capabilities */ + u8 checksum; /* all bytes must add up to 0 */ + + u32 eventflag; /* phys. address of the event flag */ + u16 rmoffset; /* real mode entry point */ + u16 rmcseg; + u16 pm16offset; /* 16 bit protected mode entry */ + u32 pm16cseg; + u32 deviceID; /* EISA encoded system ID or 0 */ + u16 rmdseg; /* real mode data segment */ + u32 pm16dseg; /* 16 bit pm data segment base */ + } fields; + char chars[0x21]; /* To calculate the checksum */ +}; +#pragma pack() + +extern int pnp_bios_present(void); +extern int pnpbios_dont_use_current_config; +extern void *pnpbios_kmalloc(size_t size, int f); + extern int pnpbios_parse_data_stream(struct pnp_dev *dev, struct pnp_bios_node * node); extern int pnpbios_read_resources_from_node(struct pnp_resource_table *res, struct pnp_bios_node * node); extern int pnpbios_write_resources_to_node(struct pnp_resource_table *res, struct pnp_bios_node * node); extern void pnpid32_to_pnpid(u32 id, char *str); extern void pnpbios_print_status(const char * module, u16 status); -extern int pnpbios_probe_installation(void); +extern void pnpbios_calls_init(union pnp_bios_install_struct * header); + +#ifdef CONFIG_PROC_FS +extern int pnpbios_interface_attach_device(struct pnp_bios_node * node); +extern int pnpbios_proc_init (void); +extern void pnpbios_proc_exit (void); +#else +static inline int pnpbios_interface_attach_device(struct pnp_bios_node * node) { return 0; } +static inline int pnpbios_proc_init (void) { return 0; } +static inline void pnpbios_proc_exit (void) { ; } +#endif /* CONFIG_PROC */ diff -prauN linux-2.6.0-test5/drivers/pnp/pnpbios/proc.c wli-2.6.0-test5-bk12-25/drivers/pnp/pnpbios/proc.c --- linux-2.6.0-test5/drivers/pnp/pnpbios/proc.c 2003-09-08 12:50:32.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pnp/pnpbios/proc.c 2003-09-25 19:16:03.000000000 -0700 @@ -31,6 +31,8 @@ #include +#include "pnpbios.h" + static struct proc_dir_entry *proc_pnp = NULL; static struct proc_dir_entry *proc_pnp_boot = NULL; @@ -213,6 +215,9 @@ int pnpbios_interface_attach_device(stru struct proc_dir_entry *ent; sprintf(name, "%02x", node->handle); + + if (!proc_pnp) + return -EIO; if ( !pnpbios_dont_use_current_config ) { ent = create_proc_entry(name, 0, proc_pnp); if (ent) { @@ -221,6 +226,9 @@ int pnpbios_interface_attach_device(stru ent->data = (void *)(long)(node->handle); } } + + if (!proc_pnp_boot) + return -EIO; ent = create_proc_entry(name, 0, proc_pnp_boot); if (ent) { ent->read_proc = proc_read_node; @@ -228,6 +236,7 @@ int pnpbios_interface_attach_device(stru ent->data = (void *)(long)(node->handle+0x100); return 0; } + return -EIO; } @@ -257,8 +266,9 @@ void __exit pnpbios_proc_exit(void) { int i; char name[3]; - - if (!proc_pnp) return; + + if (!proc_pnp) + return; for (i=0; i<0xff; i++) { sprintf(name, "%02x", i); diff -prauN linux-2.6.0-test5/drivers/pnp/quirks.c wli-2.6.0-test5-bk12-25/drivers/pnp/quirks.c --- linux-2.6.0-test5/drivers/pnp/quirks.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pnp/quirks.c 2003-09-25 19:16:03.000000000 -0700 @@ -111,28 +111,6 @@ static void quirk_sb16audio_resources(st return; } -extern int pnp_allow_dma0; -static void quirk_opl3sax_resources(struct pnp_dev *dev) -{ - /* This really isn't a device quirk but isapnp core code - * doesn't allow a DMA channel of 0, afflicted card is an - * OPL3Sax where x=4. - */ - struct pnp_option *res; - int max; - res = dev->dependent; - max = 0; - for (; res; res = res->next) { - if (res->dma->map > max) - max = res->dma->map; - } - if (max == 1 && pnp_allow_dma0 == -1) { - printk(KERN_INFO "pnp: opl3sa4 quirk: Allowing dma 0.\n"); - pnp_allow_dma0 = 1; - } - return; -} - /* * PnP Quirks * Cards or devices that need some tweaking due to incomplete resource info @@ -153,7 +131,6 @@ static struct pnp_fixup pnp_fixups[] = { { "CTL0043", quirk_sb16audio_resources }, { "CTL0044", quirk_sb16audio_resources }, { "CTL0045", quirk_sb16audio_resources }, - { "YMH0021", quirk_opl3sax_resources }, { "" } }; @@ -170,4 +147,3 @@ void pnp_fixup_device(struct pnp_dev *de i++; } } - diff -prauN linux-2.6.0-test5/drivers/pnp/resource.c wli-2.6.0-test5-bk12-25/drivers/pnp/resource.c --- linux-2.6.0-test5/drivers/pnp/resource.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/pnp/resource.c 2003-09-25 19:16:03.000000000 -0700 @@ -21,8 +21,6 @@ #include #include "base.h" -int pnp_allow_dma0 = -1; /* allow dma 0 during auto activation: - * -1=off (:default), 0=off (set by user), 1=on */ int pnp_skip_pci_scan; /* skip PCI resource scanning */ int pnp_reserve_irq[16] = { [0 ... 15] = -1 }; /* reserve (don't use) some IRQ */ int pnp_reserve_dma[8] = { [0 ... 7] = -1 }; /* reserve (don't use) some DMA */ @@ -426,7 +424,7 @@ int pnp_check_irq(struct pnp_dev * dev, int pnp_check_dma(struct pnp_dev * dev, int idx) { - int tmp, mindma = 1; + int tmp; struct pnp_dev *tdev; unsigned long * dma = &dev->res.dma_resource[idx].start; @@ -435,9 +433,7 @@ int pnp_check_dma(struct pnp_dev * dev, return 1; /* check if the resource is valid */ - if (pnp_allow_dma0 == 1) - mindma = 0; - if (*dma < mindma || *dma == 4 || *dma > 7) + if (*dma < 0 || *dma == 4 || *dma > 7) return 0; /* check if the resource is reserved */ @@ -488,16 +484,6 @@ EXPORT_SYMBOL(pnp_register_port_resource EXPORT_SYMBOL(pnp_register_mem_resource); -/* format is: allowdma0 */ - -static int __init pnp_allowdma0(char *str) -{ - pnp_allow_dma0 = 1; - return 1; -} - -__setup("allowdma0", pnp_allowdma0); - /* format is: pnp_reserve_irq=irq1[,irq2] .... */ static int __init pnp_setup_reserve_irq(char *str) diff -prauN linux-2.6.0-test5/drivers/s390/Kconfig wli-2.6.0-test5-bk12-25/drivers/s390/Kconfig --- linux-2.6.0-test5/drivers/s390/Kconfig 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/s390/Kconfig 2003-09-25 19:16:03.000000000 -0700 @@ -49,10 +49,8 @@ config BLK_DEV_LOOP Note that this loop device has nothing to do with the loopback device used for network connections from the machine to itself. - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module - will be called loop. + To compile this driver as a module, choose M here: the + module will be called loop. Most users will answer N here. @@ -78,10 +76,8 @@ config BLK_DEV_NBD Note that this has nothing to do with the network file systems NFS or Coda; you can say N here even if you intend to use NFS or Coda. - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module - will be called nbd. + To compile this driver as a module, choose M here: the + module will be called nbd. If unsure, say N. @@ -98,10 +94,8 @@ config BLK_DEV_RAM Note that the kernel command line option "ramdisk=XX" is now obsolete. For details, read . - 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 and read . The module will be - called rd. + To compile this driver as a module, choose M here: the + module will be called rd. Most normal users won't need the RAM disk functionality, and can thus say N here. diff -prauN linux-2.6.0-test5/drivers/s390/block/dasd_int.h wli-2.6.0-test5-bk12-25/drivers/s390/block/dasd_int.h --- linux-2.6.0-test5/drivers/s390/block/dasd_int.h 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/s390/block/dasd_int.h 2003-09-25 19:16:03.000000000 -0700 @@ -14,7 +14,8 @@ #ifdef __KERNEL__ -#define DASD_PER_MAJOR ( 1U<<(MINORBITS-DASD_PARTN_BITS)) +/* we keep old device allocation scheme; IOW, minors are still in 0..255 */ +#define DASD_PER_MAJOR ( 1U<<(8-DASD_PARTN_BITS)) #define DASD_PARTN_MASK ((1 << DASD_PARTN_BITS) - 1) /* diff -prauN linux-2.6.0-test5/drivers/s390/char/tuball.c wli-2.6.0-test5-bk12-25/drivers/s390/char/tuball.c --- linux-2.6.0-test5/drivers/s390/char/tuball.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/s390/char/tuball.c 2003-09-25 19:16:03.000000000 -0700 @@ -74,8 +74,6 @@ unsigned char tub_ebcgraf[64] = 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f }; -int tub3270_init(void); - #ifndef MODULE /* @@ -193,31 +191,18 @@ int tub3270_con_copy(tub_t *tubp) return rc; } #endif /* CONFIG_TN3270_CONSOLE */ -#else /* If generated as a MODULE */ -/* - * module init: find tubes; get a major nbr - */ -int -init_module(void) -{ - if (tubnummins != 0) { - printk(KERN_ERR "EEEK!! Tube driver cobbigling!!\n"); - return -1; - } - return tub3270_init(); -} +#endif /* * remove driver: unregister the major number */ -void -cleanup_module(void) +static void __exit +tub3270_exit(void) { fs3270_fini(); tty3270_fini(); tubfiniminors(); } -#endif /* Not a MODULE or a MODULE */ static int tub3270_is_ours(s390_dev_info_t *dp) @@ -232,12 +217,19 @@ tub3270_is_ours(s390_dev_info_t *dp) /* * tub3270_init() called by kernel or module initialization */ -int +static int __init tub3270_init(void) { s390_dev_info_t d; int i, rc; +#ifdef MODULE + if (tubnummins != 0) { + printk(KERN_ERR "EEEK!! Tube driver cobbigling!!\n"); + return -1; + } +#endif + /* * Copy and correct ebcdic - ascii translate tables */ @@ -624,3 +616,6 @@ tubfiniirqs(void) tubirqs = NULL; } } + +module_init(tub3270_init); +module_exit(tub3270_exit); diff -prauN linux-2.6.0-test5/drivers/s390/net/Kconfig wli-2.6.0-test5-bk12-25/drivers/s390/net/Kconfig --- linux-2.6.0-test5/drivers/s390/net/Kconfig 2003-09-08 12:50:23.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/s390/net/Kconfig 2003-09-25 19:16:03.000000000 -0700 @@ -42,10 +42,8 @@ config QETH For details please refer to the documentation provided by IBM at - This driver is also available as a module (code which can be - inserted in and removed from the running kernel whenever you - want). If you want to compile it as a module, say 'M' here and - read file Documentation/modules.txt. + To compile this driver as a module, choose M here: the + module will be called qeth. comment "Gigabit Ethernet default settings" diff -prauN linux-2.6.0-test5/drivers/sbus/char/Kconfig wli-2.6.0-test5-bk12-25/drivers/sbus/char/Kconfig --- linux-2.6.0-test5/drivers/sbus/char/Kconfig 2003-09-08 12:50:28.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/sbus/char/Kconfig 2003-09-25 19:16:03.000000000 -0700 @@ -8,9 +8,10 @@ config SUN_OPENPROMIO PROM device tree. The driver implements a SunOS-compatible interface and a NetBSD-compatible interface. - 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 and read . If unsure, say Y. + To compile this driver as a module, choose M here: the + module will be called openprom. + + If unsure, say Y. config SUN_MOSTEK_RTC tristate "Mostek real time clock support" diff -prauN linux-2.6.0-test5/drivers/sbus/char/bpp.c wli-2.6.0-test5-bk12-25/drivers/sbus/char/bpp.c --- linux-2.6.0-test5/drivers/sbus/char/bpp.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/sbus/char/bpp.c 2003-09-25 19:16:03.000000000 -0700 @@ -12,7 +12,6 @@ #include #include -#include #include #include #include diff -prauN linux-2.6.0-test5/drivers/sbus/char/cpwatchdog.c wli-2.6.0-test5-bk12-25/drivers/sbus/char/cpwatchdog.c --- linux-2.6.0-test5/drivers/sbus/char/cpwatchdog.c 2003-09-08 12:50:28.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/sbus/char/cpwatchdog.c 2003-09-25 19:16:03.000000000 -0700 @@ -17,7 +17,6 @@ #include #include -#include #include #include #include diff -prauN linux-2.6.0-test5/drivers/sbus/char/display7seg.c wli-2.6.0-test5-bk12-25/drivers/sbus/char/display7seg.c --- linux-2.6.0-test5/drivers/sbus/char/display7seg.c 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/sbus/char/display7seg.c 2003-09-25 19:16:03.000000000 -0700 @@ -9,7 +9,6 @@ #include #include -#include #include #include #include diff -prauN linux-2.6.0-test5/drivers/scsi/3w-xxxx.c wli-2.6.0-test5-bk12-25/drivers/scsi/3w-xxxx.c --- linux-2.6.0-test5/drivers/scsi/3w-xxxx.c 2003-09-08 12:50:29.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/scsi/3w-xxxx.c 2003-09-25 19:16:03.000000000 -0700 @@ -169,6 +169,16 @@ Add support for "twe" character device for ioctls. Clean up request_id queueing code. Fix tw_scsi_queue() spinlocks. + 1.02.00.033 - Fix tw_aen_complete() to not queue 'queue empty' AEN's. + Initialize queues correctly when loading with no valid units. + 1.02.00.034 - Fix tw_decode_bits() to handle multiple errors. + Add support for user configurable cmd_per_lun. + Add support for sht->slave_configure(). + 1.02.00.035 - Improve tw_allocate_memory() memory allocation. + Fix tw_chrdev_ioctl() to sleep correctly. + 1.02.00.036 - Increase character ioctl timeout to 60 seconds. + 1.02.00.037 - Fix tw_ioctl() to handle all non-data ATA passthru cmds + for 'smartmontools' support. */ #include @@ -232,7 +242,7 @@ static struct file_operations tw_fops = }; /* Globals */ -char *tw_driver_version="1.02.00.032"; +char *tw_driver_version="1.02.00.037"; TW_Device_Extension *tw_device_extension_list[TW_MAX_SLOT]; int tw_device_extension_count = 0; static int twe_major = -1; @@ -271,25 +281,24 @@ int tw_aen_complete(TW_Device_Extension printk(KERN_WARNING "3w-xxxx: scsi%d: Received AEN %d.\n", tw_dev->host->host_no, aen); } } - if (aen != 0x0) + if (aen != TW_AEN_QUEUE_EMPTY) { tw_dev->aen_count++; - /* Now queue the code */ - tw_dev->aen_queue[tw_dev->aen_tail] = aen; - if (tw_dev->aen_tail == TW_Q_LENGTH - 1) { - tw_dev->aen_tail = TW_Q_START; - } else { - tw_dev->aen_tail = tw_dev->aen_tail + 1; - } - if (tw_dev->aen_head == tw_dev->aen_tail) { - if (tw_dev->aen_head == TW_Q_LENGTH - 1) { - tw_dev->aen_head = TW_Q_START; + /* Now queue the code */ + tw_dev->aen_queue[tw_dev->aen_tail] = aen; + if (tw_dev->aen_tail == TW_Q_LENGTH - 1) { + tw_dev->aen_tail = TW_Q_START; } else { - tw_dev->aen_head = tw_dev->aen_head + 1; + tw_dev->aen_tail = tw_dev->aen_tail + 1; + } + if (tw_dev->aen_head == tw_dev->aen_tail) { + if (tw_dev->aen_head == TW_Q_LENGTH - 1) { + tw_dev->aen_head = TW_Q_START; + } else { + tw_dev->aen_head = tw_dev->aen_head + 1; + } } - } - if (aen != TW_AEN_QUEUE_EMPTY) { error = tw_aen_read_queue(tw_dev, request_id); if (error) { printk(KERN_WARNING "3w-xxxx: scsi%d: Error completing AEN.\n", tw_dev->host->host_no); @@ -551,29 +560,29 @@ int tw_allocate_memory(TW_Device_Extensi dprintk(KERN_NOTICE "3w-xxxx: tw_allocate_memory()\n"); - for (i=0;itw_pci_dev, size, &dma_handle); - if (cpu_addr == NULL) { - printk(KERN_WARNING "3w-xxxx: pci_alloc_consistent() failed.\n"); - return 1; - } + cpu_addr = pci_alloc_consistent(tw_dev->tw_pci_dev, size*TW_Q_LENGTH, &dma_handle); + if (cpu_addr == NULL) { + printk(KERN_WARNING "3w-xxxx: pci_alloc_consistent() failed.\n"); + return 1; + } - if ((unsigned long)cpu_addr % (tw_dev->tw_pci_dev->device == TW_DEVICE_ID ? TW_ALIGNMENT_6000 : TW_ALIGNMENT_7000)) { - printk(KERN_WARNING "3w-xxxx: Couldn't allocate correctly aligned memory.\n"); - pci_free_consistent(tw_dev->tw_pci_dev, size, cpu_addr, dma_handle); - return 1; - } + if ((unsigned long)cpu_addr % (tw_dev->tw_pci_dev->device == TW_DEVICE_ID ? TW_ALIGNMENT_6000 : TW_ALIGNMENT_7000)) { + printk(KERN_WARNING "3w-xxxx: Couldn't allocate correctly aligned memory.\n"); + pci_free_consistent(tw_dev->tw_pci_dev, size*TW_Q_LENGTH, cpu_addr, dma_handle); + return 1; + } + memset(cpu_addr, 0, size*TW_Q_LENGTH); + + for (i=0;icommand_packet_virtual_address[i] = cpu_addr; - tw_dev->command_packet_physical_address[i] = dma_handle; - memset(tw_dev->command_packet_virtual_address[i], 0, size); + tw_dev->command_packet_physical_address[i] = dma_handle+(i*size); + tw_dev->command_packet_virtual_address[i] = (unsigned long *)((unsigned char *)cpu_addr + (i*size)); break; case 1: - tw_dev->alignment_virtual_address[i] = cpu_addr; - tw_dev->alignment_physical_address[i] = dma_handle; - memset(tw_dev->alignment_virtual_address[i], 0, size); + tw_dev->alignment_physical_address[i] = dma_handle+(i*size); + tw_dev->alignment_virtual_address[i] = (unsigned long *)((unsigned char *)cpu_addr + (i*size)); break; default: printk(KERN_WARNING "3w-xxxx: tw_allocate_memory(): case slip in tw_allocate_memory()\n"); @@ -621,11 +630,11 @@ static int tw_chrdev_ioctl(struct inode int error, request_id; dma_addr_t dma_handle; unsigned short tw_aen_code; - unsigned long before; unsigned long flags; unsigned int data_buffer_length = 0; unsigned long data_buffer_length_adjusted = 0; unsigned long *cpu_addr; + long timeout; TW_New_Ioctl *tw_ioctl; TW_Passthru *passthru; TW_Device_Extension *tw_dev = tw_device_extension_list[iminor(inode)]; @@ -726,30 +735,30 @@ static int tw_chrdev_ioctl(struct inode tw_post_command_packet(tw_dev, request_id); spin_unlock_irqrestore(&tw_dev->tw_lock, flags); + timeout = TW_IOCTL_CHRDEV_TIMEOUT*HZ; + /* Now wait for the command to complete */ - before = jiffies; + wait_event_interruptible_timeout(tw_dev->ioctl_wqueue, tw_dev->chrdev_request_id == TW_IOCTL_CHRDEV_FREE, timeout); - while (tw_dev->chrdev_request_id != TW_IOCTL_CHRDEV_FREE) - { - /* FIXME: race condition on the wait*/ - interruptible_sleep_on_timeout(&tw_dev->ioctl_wqueue, 1); - if (time_after(jiffies, before + HZ *TW_IOCTL_CHRDEV_TIMEOUT)) { - /* Now we need to reset the board */ + /* Check if we timed out, got a signal, or didn't get + an interrupt */ + if ((timeout <= 0) && (tw_dev->chrdev_request_id != TW_IOCTL_CHRDEV_FREE)) { + /* Now we need to reset the board */ + if (timeout == -ERESTARTSYS) { + retval = timeout; + } else { printk(KERN_WARNING "3w-xxxx: scsi%d: Character ioctl (0x%x) timed out, resetting card.\n", tw_dev->host->host_no, cmd); - spin_lock_irqsave(&tw_dev->tw_lock, flags); - tw_dev->state[request_id] = TW_S_COMPLETED; - tw_state_request_finish(tw_dev, request_id); - tw_dev->posted_request_count--; - if (tw_reset_device_extension(tw_dev)) { - printk(KERN_WARNING "3w-xxxx: tw_chrdev_ioctl(): Reset failed for card %d.\n", tw_dev->host->host_no); - } - spin_unlock_irqrestore(&tw_dev->tw_lock, flags); - if (signal_pending(current)) - retval = -EINTR; - else - retval = -EIO; - goto out2; + retval = -EIO; + } + spin_lock_irqsave(&tw_dev->tw_lock, flags); + tw_dev->state[request_id] = TW_S_COMPLETED; + tw_state_request_finish(tw_dev, request_id); + tw_dev->posted_request_count--; + if (tw_reset_device_extension(tw_dev)) { + printk(KERN_WARNING "3w-xxxx: tw_chrdev_ioctl(): Reset failed for card %d.\n", tw_dev->host->host_no); } + spin_unlock_irqrestore(&tw_dev->tw_lock, flags); + goto out2; } /* Now copy in the command packet response */ @@ -877,30 +886,33 @@ int tw_decode_bits(TW_Device_Extension * else host[0] = '\0'; - switch (status_reg_value & TW_STATUS_UNEXPECTED_BITS) { - case TW_STATUS_PCI_PARITY_ERROR: + if (status_reg_value & TW_STATUS_PCI_PARITY_ERROR) { printk(KERN_WARNING "3w-xxxx:%s PCI Parity Error: clearing.\n", host); outl(TW_CONTROL_CLEAR_PARITY_ERROR, tw_dev->registers.control_reg_addr); - break; - case TW_STATUS_MICROCONTROLLER_ERROR: - if (tw_dev->reset_print == 0) { - printk(KERN_WARNING "3w-xxxx:%s Microcontroller Error: clearing.\n", host); - tw_dev->reset_print = 1; - } - return 1; - case TW_STATUS_PCI_ABORT: + } + + if (status_reg_value & TW_STATUS_PCI_ABORT) { printk(KERN_WARNING "3w-xxxx:%s PCI Abort: clearing.\n", host); outl(TW_CONTROL_CLEAR_PCI_ABORT, tw_dev->registers.control_reg_addr); pci_write_config_word(tw_dev->tw_pci_dev, PCI_STATUS, TW_PCI_CLEAR_PCI_ABORT); - break; - case TW_STATUS_QUEUE_ERROR: + } + + if (status_reg_value & TW_STATUS_QUEUE_ERROR) { printk(KERN_WARNING "3w-xxxx:%s Controller Queue Error: clearing.\n", host); outl(TW_CONTROL_CLEAR_QUEUE_ERROR, tw_dev->registers.control_reg_addr); - break; - case TW_STATUS_SBUF_WRITE_ERROR: + } + + if (status_reg_value & TW_STATUS_SBUF_WRITE_ERROR) { printk(KERN_WARNING "3w-xxxx:%s SBUF Write Error: clearing.\n", host); outl(TW_CONTROL_CLEAR_SBUF_WRITE_ERROR, tw_dev->registers.control_reg_addr); - break; + } + + if (status_reg_value & TW_STATUS_MICROCONTROLLER_ERROR) { + if (tw_dev->reset_print == 0) { + printk(KERN_WARNING "3w-xxxx:%s Microcontroller Error: clearing.\n", host); + tw_dev->reset_print = 1; + } + return 1; } return 0; @@ -1036,8 +1048,6 @@ int tw_findcards(Scsi_Host_Template *tw_ } memset(tw_dev, 0, sizeof(TW_Device_Extension)); - init_MUTEX(&tw_dev->ioctl_sem); - /* Save pci_dev struct to device extension */ tw_dev->tw_pci_dev = tw_pci_dev; @@ -1131,13 +1141,17 @@ int tw_findcards(Scsi_Host_Template *tw_ /* Set card status as online */ tw_dev->online = 1; - /* Calculate max cmds per lun, and setup queues */ - if (tw_dev->num_units > 0) { - /* Use SHT cmd_per_lun here */ - tw_dev->free_head = TW_Q_START; - tw_dev->free_tail = TW_Q_START; - tw_dev->free_wrap = TW_Q_LENGTH - 1; - } +#ifdef CONFIG_3W_XXXX_CMD_PER_LUN + tw_host->cmd_per_lun = CONFIG_3W_XXXX_CMD_PER_LUN; + if (tw_host->cmd_per_lun > TW_MAX_CMDS_PER_LUN) + tw_host->cmd_per_lun = TW_MAX_CMDS_PER_LUN; +#else + /* Use SHT cmd_per_lun here */ + tw_host->cmd_per_lun = TW_MAX_CMDS_PER_LUN; +#endif + tw_dev->free_head = TW_Q_START; + tw_dev->free_tail = TW_Q_START; + tw_dev->free_wrap = TW_Q_LENGTH - 1; /* Register the card with the kernel SCSI layer */ host = scsi_register(tw_host, sizeof(TW_Device_Extension)); @@ -1176,6 +1190,10 @@ int tw_findcards(Scsi_Host_Template *tw_ if (host->hostdata) { tw_dev2 = (TW_Device_Extension *)host->hostdata; memcpy(tw_dev2, tw_dev, sizeof(TW_Device_Extension)); + /* Need to init the sem/wqueue after the copy */ + init_MUTEX(&tw_dev2->ioctl_sem); + init_waitqueue_head(&tw_dev2->ioctl_wqueue); + tw_device_extension_list[tw_device_extension_count] = tw_dev2; numcards++; tw_device_extension_count = numcards; @@ -1232,17 +1250,14 @@ int tw_findcards(Scsi_Host_Template *tw_ /* This function will free up device extension resources */ void tw_free_device_extension(TW_Device_Extension *tw_dev) { - int i; - dprintk(KERN_NOTICE "3w-xxxx: tw_free_device_extension()\n"); + /* Free command packet and generic buffer memory */ - for (i=0;icommand_packet_virtual_address[i]) - pci_free_consistent(tw_dev->tw_pci_dev, sizeof(TW_Sector), tw_dev->command_packet_virtual_address[i], tw_dev->command_packet_physical_address[i]); + if (tw_dev->command_packet_virtual_address[0]) + pci_free_consistent(tw_dev->tw_pci_dev, sizeof(TW_Command)*TW_Q_LENGTH, tw_dev->command_packet_virtual_address[0], tw_dev->command_packet_physical_address[0]); - if (tw_dev->alignment_virtual_address[i]) - pci_free_consistent(tw_dev->tw_pci_dev, sizeof(TW_Sector), tw_dev->alignment_virtual_address[i], tw_dev->alignment_physical_address[i]); - } + if (tw_dev->alignment_virtual_address[0]) + pci_free_consistent(tw_dev->tw_pci_dev, sizeof(TW_Sector)*TW_Q_LENGTH, tw_dev->alignment_virtual_address[0], tw_dev->alignment_physical_address[0]); } /* End tw_free_device_extension() */ /* Clean shutdown routine */ @@ -1352,7 +1367,6 @@ int tw_initialize_device_extension(TW_De tw_dev->pending_tail = TW_Q_START; spin_lock_init(&tw_dev->tw_lock); tw_dev->chrdev_request_id = TW_IOCTL_CHRDEV_FREE; - init_waitqueue_head(&tw_dev->ioctl_wqueue); return 0; } /* End tw_initialize_device_extension() */ @@ -1606,6 +1620,7 @@ static irqreturn_t tw_interrupt(int irq, } } else { tw_dev->chrdev_request_id = TW_IOCTL_CHRDEV_FREE; + wake_up(&tw_dev->ioctl_wqueue); } } else { switch (tw_dev->srb[request_id]->cmnd[0]) { @@ -1804,12 +1819,15 @@ int tw_ioctl(TW_Device_Extension *tw_dev } passthru = (TW_Passthru *)tw_dev->command_packet_virtual_address[request_id]; - passthru->sg_list[0].length = passthru->sector_count*512; - if (passthru->sg_list[0].length > TW_MAX_PASSTHRU_BYTES) { - printk(KERN_WARNING "3w-xxxx: tw_ioctl(): Passthru size (%d) too big.\n", passthru->sg_list[0].length); - return 1; + /* Don't load sg_list for non-data ATA cmds */ + if ((passthru->param != 0) && (passthru->param != 0x8)) { + passthru->sg_list[0].length = passthru->sector_count*512; + if (passthru->sg_list[0].length > TW_MAX_PASSTHRU_BYTES) { + printk(KERN_WARNING "3w-xxxx: tw_ioctl(): Passthru size (%d) too big.\n", passthru->sg_list[0].length); + return 1; + } + passthru->sg_list[0].address = tw_dev->alignment_physical_address[request_id]; } - passthru->sg_list[0].address = tw_dev->alignment_physical_address[request_id]; tw_post_command_packet(tw_dev, request_id); return 0; case TW_CMD_PACKET: @@ -2060,7 +2078,14 @@ int tw_ioctl_complete(TW_Device_Extensio switch (ioctl->opcode) { case TW_ATA_PASSTHRU: passthru = (TW_Passthru *)ioctl->data; - memcpy(buff, tw_dev->alignment_virtual_address[request_id], passthru->sector_count * 512); + /* Don't return data for non-data ATA cmds */ + if ((passthru->param != 0) && (passthru->param != 0x8)) + memcpy(buff, tw_dev->alignment_virtual_address[request_id], passthru->sector_count * 512); + else { + /* For non-data cmds, return cmd pkt */ + if (tw_dev->srb[request_id]->request_bufflen >= sizeof(TW_Command)) + memcpy(buff, tw_dev->command_packet_virtual_address[request_id], sizeof(TW_Command)); + } break; case TW_CMD_PACKET_WITH_DATA: dprintk(KERN_WARNING "3w-xxxx: tw_ioctl_complete(): caught TW_CMD_PACKET_WITH_DATA.\n"); @@ -3354,6 +3379,25 @@ int tw_shutdown_device(TW_Device_Extensi return 0; } /* End tw_shutdown_device() */ +/* This function will configure individual target parameters */ +int tw_slave_configure(Scsi_Device *SDptr) +{ + int max_cmds; + + dprintk(KERN_WARNING "3w-xxxx: tw_slave_configure()\n"); + +#ifdef CONFIG_3W_XXXX_CMD_PER_LUN + max_cmds = CONFIG_3W_XXXX_CMD_PER_LUN; + if (max_cmds > TW_MAX_CMDS_PER_LUN) + max_cmds = TW_MAX_CMDS_PER_LUN; +#else + max_cmds = TW_MAX_CMDS_PER_LUN; +#endif + scsi_adjust_queue_depth(SDptr, MSG_ORDERED_TAG, max_cmds); + + return 0; +} /* End tw_slave_configure() */ + /* This function will soft reset the controller */ void tw_soft_reset(TW_Device_Extension *tw_dev) { @@ -3450,7 +3494,7 @@ static Scsi_Host_Template driver_templat .max_sectors = TW_MAX_SECTORS, .cmd_per_lun = TW_MAX_CMDS_PER_LUN, .use_clustering = ENABLE_CLUSTERING, - .emulated = 1, + .emulated = 1 }; #include "scsi_module.c" diff -prauN linux-2.6.0-test5/drivers/scsi/3w-xxxx.h wli-2.6.0-test5-bk12-25/drivers/scsi/3w-xxxx.h --- linux-2.6.0-test5/drivers/scsi/3w-xxxx.h 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/scsi/3w-xxxx.h 2003-09-25 19:16:03.000000000 -0700 @@ -89,7 +89,7 @@ static char *tw_aen_string[] = { [0x02D] = "ERROR: Encountered bad sector during rebuild: Port #", [0x02E] = "ERROR: Replacement drive is too small: Port #", [0x02F] = "WARNING: Verify error: Unit not previously initialized: Unit #", - [0x030] = "ERROR: Drive not supported: Port #", + [0x030] = "ERROR: Drive not supported: Port #" }; /* @@ -109,10 +109,10 @@ static unsigned char tw_sense_table[][4] {0xd0, 0x0b, 0x00, 0x00}, // Device busy Aborted command {0xd1, 0x0b, 0x00, 0x00}, // Device busy Aborted command {0x37, 0x02, 0x04, 0x00}, // Unit offline Not ready + {0x09, 0x02, 0x04, 0x00}, // Unrecovered disk error Not ready /* Codes for older firmware */ // 3ware Error SCSI Error - {0x09, 0x0b, 0x00, 0x00}, // Unrecovered disk error Aborted command {0x51, 0x0b, 0x00, 0x00} // Unspecified Aborted command }; @@ -229,7 +229,7 @@ static unsigned char tw_sense_table[][4] #define TW_ISR_DONT_COMPLETE 2 #define TW_ISR_DONT_RESULT 3 #define TW_IOCTL_TIMEOUT 25 /* 25 seconds */ -#define TW_IOCTL_CHRDEV_TIMEOUT 25 /* 25 seconds */ +#define TW_IOCTL_CHRDEV_TIMEOUT 60 /* 60 seconds */ #define TW_IOCTL_CHRDEV_FREE -1 /* Macros */ @@ -486,6 +486,7 @@ int tw_setfeature(TW_Device_Extension *t unsigned char *val); int tw_setup_irq(TW_Device_Extension *tw_dev); int tw_shutdown_device(TW_Device_Extension *tw_dev); +int tw_slave_configure(Scsi_Device *SDptr); void tw_soft_reset(TW_Device_Extension *tw_dev); int tw_state_request_finish(TW_Device_Extension *tw_dev,int request_id); int tw_state_request_start(TW_Device_Extension *tw_dev, int *request_id); diff -prauN linux-2.6.0-test5/drivers/scsi/Kconfig wli-2.6.0-test5-bk12-25/drivers/scsi/Kconfig --- linux-2.6.0-test5/drivers/scsi/Kconfig 2003-09-08 12:50:27.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/scsi/Kconfig 2003-09-25 19:16:03.000000000 -0700 @@ -14,13 +14,12 @@ config SCSI version of the IOMEGA ZIP drive, USB storage devices, Fibre Channel, FireWire storage and the IDE-SCSI emulation driver. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called scsi_mod. If you want to compile it as - a module, say M here and read and - . However, do not compile this as a - module if your root file system (the one containing the directory /) - is located on a SCSI device. + To compile this driver as a module, choose M here and read + . + The module will be called scsi_mod. + + However, do not compile this as a module if your root file system + (the one containing the directory /) is located on a SCSI device. config SCSI_PROC_FS bool "legacy /proc/scsi/ support" @@ -47,14 +46,14 @@ config BLK_DEV_SD . This is NOT for SCSI CD-ROMs. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called sd_mod. If you want to compile it as a - module, say M here and read and - . Do not compile this driver as a - module if your root file system (the one containing the directory /) - is located on a SCSI disk. In this case, do not compile the driver - for your SCSI host adapter (below) as a module either. + To compile this driver as a module, choose M here and read + . + The module will be called sd_mod. + + Do not compile this driver as a module if your root file system + (the one containing the directory /) is located on a SCSI disk. + In this case, do not compile the driver for your SCSI host adapter + (below) as a module either. config CHR_DEV_ST tristate "SCSI tape support" @@ -66,11 +65,8 @@ config CHR_DEV_ST in the kernel source. This is NOT for SCSI CD-ROMs. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called st. If you want to compile it as a - module, say M here and read and - . + To compile this driver as a module, choose M here and read + . The module will be called st. config CHR_DEV_OSST tristate "SCSI OnStream SC-x0 tape support" @@ -91,11 +87,8 @@ config CHR_DEV_OSST Please also have a look at the standard st docu, as most of it applies to osst as well. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called osst. If you want to compile it as a - module, say M here and read and - . + To compile this driver as a module, choose M here and read + . The module will be called osst. config BLK_DEV_SR tristate "SCSI CDROM support" @@ -106,11 +99,9 @@ config BLK_DEV_SR . Also make sure to say Y or M to "ISO 9660 CD-ROM file system support" later. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called sr_mod. If you want to compile it as a - module, say M here and read and + To compile this driver as a module, choose M here and read . + The module will be called sr_mod. config BLK_DEV_SR_VENDOR bool "Enable vendor-specific extensions (for SCSI CDROM)" @@ -141,10 +132,9 @@ config CHR_DEV_SG driver software yourself. Please read the file for more information. - 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 and + To compile this driver as a module, choose M here and read . The module will be called sg. + If unsure, say N. comment "Some SCSI devices (e.g. CD jukebox) support multiple LUNs" @@ -249,10 +239,8 @@ config SCSI_7000FASST family. Some information is in the source: . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called wd7000. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called wd7000. config SCSI_ACARD tristate "ACARD SCSI support" @@ -260,10 +248,8 @@ config SCSI_ACARD help This driver supports the ACARD 870U/W SCSI host adapter. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called atp870u. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called atp870u. config SCSI_AHA152X tristate "Adaptec AHA152X/2825 support" @@ -277,10 +263,8 @@ config SCSI_AHA152X . You might also want to read the file . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called aha152x. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called aha152x. config SCSI_AHA1542 tristate "Adaptec AHA1542 support" @@ -293,10 +277,8 @@ config SCSI_AHA1542 sold under the Adaptec name. If it doesn't work out of the box, you may have to change some settings in . - 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 . The module - will be called aha1542. + To compile this driver as a module, choose M here: the + module will be called aha1542. config SCSI_AHA1740 tristate "Adaptec AHA1740 support" @@ -308,10 +290,8 @@ config SCSI_AHA1740 of the box, you may have to change some settings in . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called aha1740. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called aha1740. config SCSI_AACRAID tristate "Adaptec AACRAID support (EXPERIMENTAL)" @@ -356,10 +336,8 @@ config SCSI_AIC7XXX_OLD available from , can also be of great help. - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module - will be called aic7xxx_old. + To compile this driver as a module, choose M here: the + module will be called aic7xxx_old. source "drivers/scsi/aic7xxx/Kconfig.aic79xx" @@ -372,11 +350,8 @@ config SCSI_DPT_I2O well as the DPT SmartRaid V cards. This is an Adaptec maintained driver by Deanna Bonds. See . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - If you want to compile it as a module, say M here and read - . The module will be called - dpt_i2o. + To compile this driver as a module, choose M here: the + module will be called dpt_i2o. config SCSI_ADVANSYS tristate "AdvanSys SCSI support" @@ -386,11 +361,8 @@ config SCSI_ADVANSYS AdvanSys. It is documented in the kernel source in . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - If you want to compile it as a module, say M here and read - . The module will be called - advansys. + To compile this driver as a module, choose M here: the + module will be called advansys. config SCSI_IN2000 tristate "Always IN2000 SCSI support" @@ -401,10 +373,8 @@ config SCSI_IN2000 out of the box, you may have to change the jumpers for IRQ or address selection. - 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 . The module - will be called in2000. + To compile this driver as a module, choose M here: the + module will be called in2000. # does not use pci dma and seems to be onboard only for old machines config SCSI_AM53C974 @@ -420,10 +390,8 @@ config SCSI_AM53C974 "Tekram DC390(T) and Am53/79C974 (PCscsi) SCSI support", above. You can pick either one. - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module - will be called AM53C974. + To compile this driver as a module, choose M here: the + module will be called AM53C974. config SCSI_MEGARAID tristate "AMI MegaRAID support" @@ -432,10 +400,8 @@ config SCSI_MEGARAID This driver supports the AMI MegaRAID 418, 428, 438, 466, 762, 490 and 467 SCSI host adapters. - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module - will be called megaraid. + To compile this driver as a module, choose M here: the + module will be called megaraid. config SCSI_BUSLOGIC tristate "BusLogic SCSI support" @@ -449,11 +415,8 @@ config SCSI_BUSLOGIC driver does not work correctly without modification, please contact the author, Leonard N. Zubkoff, by email to lnz@dandelion.com. - You can also build this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - but only a single instance may be loaded. If you want to compile it - as a module, say M here and read . - The module will be called BusLogic. + To compile this driver as a module, choose M here: the + module will be called BusLogic. config SCSI_OMIT_FLASHPOINT bool "Omit FlashPoint support" @@ -477,10 +440,8 @@ config SCSI_DMX3191D help This is support for Domex DMX3191D SCSI Host Adapters. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called dmx3191d. If you want to compile it as - a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called dmx3191d. config SCSI_DTC3280 tristate "DTC3180/3280 SCSI support" @@ -491,10 +452,8 @@ config SCSI_DTC3280 , and the file . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called dtc. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called dtc. config SCSI_EATA tristate "EATA ISA/EISA/PCI (DPT and generic EATA/DMA-compliant boards) support" @@ -509,10 +468,8 @@ config SCSI_EATA SCSI-HOWTO, available from . - 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 . The module - will be called eata. + To compile this driver as a module, choose M here: the + module will be called eata. config SCSI_EATA_TAGGED_QUEUE bool "enable tagged command queueing" @@ -557,10 +514,8 @@ config SCSI_EATA_PIO numerous features. You might want to have a look at the SCSI-HOWTO, available from . - 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 . The module - will be called eata_pio. + To compile this driver as a module, choose M here: the + module will be called eata_pio. config SCSI_FUTURE_DOMAIN tristate "Future Domain 16xx SCSI/AHA-2920A support" @@ -578,10 +533,8 @@ config SCSI_FUTURE_DOMAIN controller support"). This Future Domain driver works with the older Adaptec AHA-2920A boards with a Future Domain chip on them. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called fdomain. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called fdomain. config SCSI_FD_MCS tristate "Future Domain MCS-600/700 SCSI support" @@ -593,10 +546,8 @@ config SCSI_FD_MCS This driver also supports the Reply SB16/SCSI card (the SCSI part). It supports multiple adapters in the same system. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called fd_mcs. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called fd_mcs. config SCSI_GDTH tristate "Intel/ICP (former GDT SCSI Disk Array) RAID Controller support" @@ -609,10 +560,8 @@ config SCSI_GDTH in the kernel source in and - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - If you want to compile it as a module, say M here and read - . + To compile this driver as a module, choose M here: the + module will be called gdth. config SCSI_GENERIC_NCR5380 tristate "Generic NCR5380/53c400 SCSI PIO support" @@ -630,10 +579,8 @@ config SCSI_GENERIC_NCR5380 of the box, you may have to change some settings in . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called g_NCR5380. If you want to compile it as - a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called g_NCR5380. config SCSI_GENERIC_NCR5380_MMIO tristate "Generic NCR5380/53c400 SCSI MMIO support" @@ -646,11 +593,8 @@ config SCSI_GENERIC_NCR5380_MMIO of the box, you may have to change some settings in . - This driver is also available as a module ( = code which can - be inserted in and removed from the running kernel whenever - you want). The module will be called g_NCR5380_mmio. - If you want to compile it as a module, say M here and read - . + To compile this driver as a module, choose M here: the + module will be called g_NCR5380_mmio. config SCSI_GENERIC_NCR53C400 bool "Enable NCR53c400 extensions" @@ -682,10 +626,8 @@ config SCSI_IBMMCA bootparam" or see the documentation of your boot loader about how to pass options to the kernel. - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module - will be called ibmmca. + To compile this driver as a module, choose M here: the + module will be called ibmmca. config IBMMCA_SCSI_ORDER_STANDARD bool "Standard SCSI-order" @@ -745,11 +687,8 @@ config SCSI_IPS without modification please contact the author by email at ipslinux@adaptec.com. - You can build this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - but only a single instance may be loaded. If you want to compile it - as a module, say M here and read . - The module will be called ips. + To compile this driver as a module, choose M here: the + module will be called ips. config SCSI_INITIO tristate "Initio 9100U(W) support" @@ -759,10 +698,8 @@ config SCSI_INITIO read the SCSI-HOWTO, available from . - 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 . The module - will be called initio. + To compile this driver as a module, choose M here: the + module will be called initio. config SCSI_INIA100 tristate "Initio INI-A100U2W support" @@ -772,10 +709,8 @@ config SCSI_INIA100 Please read the SCSI-HOWTO, available from . - 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 . The module - will be called a100u2w. + To compile this driver as a module, choose M here: the + module will be called a100u2w. config SCSI_PPA tristate "IOMEGA parallel port (ppa - older drives)" @@ -801,10 +736,8 @@ config SCSI_PPA such as a printer; it is safe to compile both drivers into the kernel. - This driver is also available as a module which can be inserted in - and removed from the running kernel whenever you want. To compile - this driver as a module, say M here and read - . The module will be called ppa. + To compile this driver as a module, choose M here: the + module will be called ppa. config SCSI_IMM tristate "IOMEGA parallel port (imm - newer drives)" @@ -830,10 +763,8 @@ config SCSI_IMM such as a printer; it is safe to compile both drivers into the kernel. - This driver is also available as a module which can be inserted in - and removed from the running kernel whenever you want. To compile - this driver as a module, say M here and read - . The module will be called imm. + To compile this driver as a module, choose M here: the + module will be called imm. config SCSI_IZIP_EPP16 bool "ppa/imm option - Use slow (but safe) EPP-16" @@ -873,10 +804,8 @@ config SCSI_NCR53C406A in the kernel source. Also read the SCSI-HOWTO, available from . - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module - will be called NCR53c406. + To compile this driver as a module, choose M here: the + module will be called NCR53c406. config SCSI_NCR_D700 tristate "NCR Dual 700 MCA SCSI support" @@ -1106,10 +1035,8 @@ config SCSI_MCA_53C9X controller based on the NCR 53C94. This driver will allow use of the controller on the 3550, and very possibly others. - If you want to compile this as a module (= code which can be - inserted and removed from the running kernel whenever you want), say - M here and read . The module will - be called mca_53c9x. + To compile this driver as a module, choose M here: the + module will be called mca_53c9x. config SCSI_PAS16 tristate "PAS16 SCSI support" @@ -1121,10 +1048,8 @@ config SCSI_PAS16 of the box, you may have to change some settings in . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called pas16. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called pas16. config SCSI_PCI2000 tristate "PCI2000 support" @@ -1134,10 +1059,8 @@ config SCSI_PCI2000 SCSI host adapter. Please read the SCSI-HOWTO, available from . - This driver is also available as a module called pci2000 ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this driver as a module, choose M here: the + module will be called pci2000. config SCSI_PCI2220I tristate "PCI2220i support" @@ -1147,10 +1070,8 @@ config SCSI_PCI2220I SCSI host adapter. Please read the SCSI-HOWTO, available from . - This driver is also available as a module called pci2220i ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this driver as a module, choose M here: the + module will be called pci2220i. config SCSI_PSI240I tristate "PSI240i support" @@ -1160,10 +1081,8 @@ config SCSI_PSI240I SCSI host adapter. Please read the SCSI-HOWTO, available from . - This driver is also available as a module called psi240i ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this driver as a module, choose M here: the + module will be called psi240i. config SCSI_QLOGIC_FAS tristate "Qlogic FAS SCSI support" @@ -1182,10 +1101,8 @@ config SCSI_QLOGIC_FAS SCSI-HOWTO, available from . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called qlogicfas. If you want to compile it as - a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called qlogicfas. config SCSI_QLOGIC_ISP tristate "Qlogic ISP SCSI support" @@ -1202,10 +1119,8 @@ config SCSI_QLOGIC_ISP should also read the SCSI-HOWTO, available from . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called qlogicisp. If you want to compile it as - a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called qlogicisp. config SCSI_QLOGIC_FC tristate "Qlogic ISP FC SCSI support" @@ -1213,10 +1128,8 @@ config SCSI_QLOGIC_FC help This is a driver for the QLogic ISP2100 SCSI-FCP host adapter. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called qlogicfc. If you want to compile it as - a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called qlogicfc. config SCSI_QLOGIC_FC_FIRMWARE bool "Include loadable firmware in driver" @@ -1232,10 +1145,8 @@ config SCSI_QLOGIC_1280 help Say Y if you have a QLogic ISP1x80/1x160 SCSI host adapter. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called qla1280. If you want to compile it as - a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called qla1280. config SCSI_QLOGIC_1280_PIO bool "Use PIO instead of MMIO" if !X86_VISWS @@ -1256,10 +1167,8 @@ config SCSI_QLOGICPTI PTI,ptisp or QLGC,isp. Note that PCI QLogic SCSI controllers are driven by a different driver. - This support is also available as a module called qlogicpti ( = - code which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this driver as a module, choose M here: the + module will be called qlogicpti. config SCSI_SEAGATE tristate "Seagate ST-02 and Future Domain TMC-8xx SCSI support" @@ -1271,10 +1180,8 @@ config SCSI_SEAGATE doesn't work out of the box, you may have to change some settings in . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called seagate. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called seagate. # definitely looks not 64bit safe: config SCSI_SIM710 @@ -1305,11 +1212,8 @@ config SCSI_SYM53C416 insmod sym53c416 sym53c416=, [sym53c416_1=,] - There is support for up to four adapters. If you want to compile - this driver as a module ( = code which can be inserted in and - removed from the running kernel whenever you want), say M here and - read . The module will be called - sym53c416. + To compile this driver as a module, choose M here: the + module will be called sym53c416. config SCSI_DC395x tristate "Tekram DC395(U/UW/F) and DC315(U) SCSI support (EXPERIMENTAL)" @@ -1323,10 +1227,8 @@ config SCSI_DC395x Documentation can be found in . - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module - will be called dc395x. + To compile this driver as a module, choose M here: the + module will be called dc395x. config SCSI_DC390T tristate "Tekram DC390(T) and Am53/79C974 SCSI support" @@ -1343,10 +1245,8 @@ config SCSI_DC390T Also note that there is another generic Am53C974 driver, "AM53/79C974 PCI SCSI support" below. You can pick either one. - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module - will be called tmscsim. + To compile this driver as a module, choose M here: the + module will be called tmscsim. config SCSI_DC390T_NOGENSUPP bool "_omit_ support for non-DC390 adapters" @@ -1377,10 +1277,8 @@ config SCSI_T128 Adaptec, and some former Trantor products are being sold under the Adaptec name. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called t128. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called t128. config SCSI_U14_34F tristate "UltraStor 14F/34F support" @@ -1396,10 +1294,8 @@ config SCSI_U14_34F below. You should say Y to both only if you want 24F support as well. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called u14-34f. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called u14-34f. config SCSI_U14_34F_TAGGED_QUEUE bool "enable tagged command queueing" @@ -1447,10 +1343,8 @@ config SCSI_ULTRASTOR Note that there is also another driver for the same hardware: "UltraStor 14F/34F support", above. - 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 . The module - will be called ultrastor. + To compile this driver as a module, choose M here: the + module will be called ultrastor. config SCSI_NSP32 tristate "Workbit NinjaSCSI-32Bi/UDE support" @@ -1460,10 +1354,8 @@ config SCSI_NSP32 SCSI host adapter. Please read the SCSI-HOWTO, available from . - 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 . The module - will be called nsp32. + To compile this driver as a module, choose M here: the + module will be called nsp32. config SCSI_DEBUG tristate "SCSI debugging host simulator" @@ -1485,10 +1377,10 @@ config SCSI_MESH Many Power Macintoshes and clones have a MESH (Macintosh Enhanced SCSI Hardware) SCSI bus adaptor (the 7200 doesn't, but all of the other Power Macintoshes do). Say Y to include support for this SCSI - adaptor. This driver is also available as a module called mesh - ( = code which can be inserted in and removed from the running - kernel whenever you want). If you want to compile it as a module, - say M here and read . + adaptor. + + To compile this driver as a module, choose M here: the + module will be called mesh. config SCSI_MESH_SYNC_RATE int "maximum synchronous transfer rate (MB/s) (0 = async)" @@ -1518,10 +1410,8 @@ config SCSI_MAC53C94 machines which only have one SCSI bus, such as the 7200, also use the 53C94. Say Y to include support for the 53C94. - This driver is also available as a module called mac53c94 ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this driver as a module, choose M here: the + module will be called mac53c94. source "drivers/scsi/arm/Kconfig" @@ -1538,11 +1428,10 @@ config A3000_SCSI depends on AMIGA && SCSI help If you have an Amiga 3000 and have SCSI devices connected to the - built-in SCSI controller, say Y. Otherwise, say N. This driver is - also available as a module ( = code which can be inserted in and - removed from the running kernel whenever you want). The module is - called wd33c93. If you want to compile it as a module, say M here - and read . + built-in SCSI controller, say Y. Otherwise, say N. + + To compile this driver as a module, choose M here: the + module will be called wd33c93. config A4000T_SCSI bool "A4000T SCSI support (EXPERIMENTAL)" @@ -1555,10 +1444,10 @@ config A2091_SCSI depends on ZORRO && SCSI help If you have a Commodore A2091 SCSI controller, say Y. Otherwise, - say N. This driver is also available as a module ( = code which can - be inserted in and removed from the running kernel whenever you - want). The module is called wd33c93. If you want to compile it as - a module, say M here and read . + say N. + + To compile this driver as a module, choose M here: the + module will be called wd33c93. config GVP11_SCSI tristate "GVP Series II WD33C93A support" @@ -1570,10 +1459,8 @@ config GVP11_SCSI answer N. This driver does NOT work for the T-Rex series of accelerators from TekMagic and GVP-M. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you - want). The module will be called gvp11. If you want to compile it - as a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called gvp11. config CYBERSTORM_SCSI tristate "CyberStorm SCSI support" @@ -1652,14 +1539,15 @@ config ATARI_SCSI ---help--- If you have an Atari with built-in NCR5380 SCSI controller (TT, Falcon, ...) say Y to get it supported. Of course also, if you have - a compatible SCSI controller (e.g. for Medusa). This driver is also - available as a module ( = code which can be inserted in and removed - from the running kernel whenever you want). The module is called - atari_scsi. If you want to compile it as a module, say M here and - read . This driver supports both - styles of NCR integration into the system: the TT style (separate - DMA), and the Falcon style (via ST-DMA, replacing ACSI). It does - NOT support other schemes, like in the Hades (without DMA). + a compatible SCSI controller (e.g. for Medusa). + + To compile this driver as a module, choose M here: the + module will be called atari_scsi. + + This driver supports both styles of NCR integration into the + system: the TT style (separate DMA), and the Falcon style (via + ST-DMA, replacing ACSI). It does NOT support other schemes, like + in the Hades (without DMA). config ATARI_SCSI_TOSHIBA_DELAY bool "Long delays for Toshiba CD-ROMs" @@ -1704,10 +1592,8 @@ config SCSI_MAC_ESP SCSI-HOWTO, available from . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called mac_esp. If you want to compile it as - a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called mac_esp. config MVME147_SCSI bool "WD33C93 SCSI driver for MVME147" @@ -1764,10 +1650,8 @@ config SCSI_SUNESP This is the driver for the Sun ESP SCSI host adapter. The ESP chipset is present in most SPARC SBUS-based computers. - This support is also available as a module called esp ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this driver as a module, choose M here: the + module will be called esp. config SCSI_PC980155 tristate "NEC PC-9801-55 SCSI support" diff -prauN linux-2.6.0-test5/drivers/scsi/NCR5380.c wli-2.6.0-test5-bk12-25/drivers/scsi/NCR5380.c --- linux-2.6.0-test5/drivers/scsi/NCR5380.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/scsi/NCR5380.c 2003-09-25 19:16:03.000000000 -0700 @@ -372,7 +372,7 @@ static int NCR5380_poll_politely(struct { r = NCR5380_read(reg); if((r & bit) == val) - return r; + return 0; cpu_relax(); } @@ -381,7 +381,7 @@ static int NCR5380_poll_politely(struct { r = NCR5380_read(reg); if((r & bit) == val) - return r; + return 0; if(!in_interrupt()) yield(); else diff -prauN linux-2.6.0-test5/drivers/scsi/aacraid/README wli-2.6.0-test5-bk12-25/drivers/scsi/aacraid/README --- linux-2.6.0-test5/drivers/scsi/aacraid/README 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/scsi/aacraid/README 2003-09-25 19:16:03.000000000 -0700 @@ -10,10 +10,10 @@ the original). Supported Cards/Chipsets ------------------------- - Dell Computer Corporation PERC 2 Quad Channel - Dell Computer Corporation PERC 2/Si - Dell Computer Corporation PERC 3/Si - Dell Computer Corporation PERC 3/Di + Dell PERC 2 Quad Channel + Dell PERC 2/Si + Dell PERC 3/Si + Dell PERC 3/Di HP NetRAID-4M ADAPTEC 2120S ADAPTEC 2200S diff -prauN linux-2.6.0-test5/drivers/scsi/aic7xxx/Kconfig.aic7xxx wli-2.6.0-test5-bk12-25/drivers/scsi/aic7xxx/Kconfig.aic7xxx --- linux-2.6.0-test5/drivers/scsi/aic7xxx/Kconfig.aic7xxx 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/scsi/aic7xxx/Kconfig.aic7xxx 2003-09-25 19:16:04.000000000 -0700 @@ -10,10 +10,8 @@ config SCSI_AIC7XXX SCSI controllers (the 274x and 284x series). For AAA and ARO based configurations, only SCSI functionality is provided. - If you want to compile the driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module - will be called aic7xxx. + To compile this driver as a module, choose M here: the + module will be called aic7xxx. config AIC7XXX_CMDS_PER_DEVICE int "Maximum number of TCQ commands per device" diff -prauN linux-2.6.0-test5/drivers/scsi/gdth.c wli-2.6.0-test5-bk12-25/drivers/scsi/gdth.c --- linux-2.6.0-test5/drivers/scsi/gdth.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/scsi/gdth.c 2003-09-25 19:16:04.000000000 -0700 @@ -2048,7 +2048,7 @@ GDTH_INITFUNC(static int, gdth_search_dr for (j = 0; j < 12; ++j) rtc[j] = CMOS_READ(j); } while (rtc[0] != CMOS_READ(0)); - spin_lock_irqrestore(&rtc_lock, flags); + spin_unlock_irqrestore(&rtc_lock, flags); TRACE2(("gdth_search_drives(): RTC: %x/%x/%x\n",*(ulong32 *)&rtc[0], *(ulong32 *)&rtc[4], *(ulong32 *)&rtc[8])); /* 3. send to controller firmware */ diff -prauN linux-2.6.0-test5/drivers/scsi/imm.h wli-2.6.0-test5-bk12-25/drivers/scsi/imm.h --- linux-2.6.0-test5/drivers/scsi/imm.h 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/scsi/imm.h 2003-09-25 19:16:04.000000000 -0700 @@ -100,8 +100,9 @@ static char *IMM_MODE_STRING[] = [IMM_NIBBLE] = "SPP", [IMM_PS2] = "PS/2", [IMM_EPP_8] = "EPP 8 bit", -#ifdef CONFIG_SCSI_IZIP_EPP16 [IMM_EPP_16] = "EPP 16 bit", +#ifdef CONFIG_SCSI_IZIP_EPP16 + [IMM_EPP_32] = "EPP 16 bit", #else [IMM_EPP_32] = "EPP 32 bit", #endif diff -prauN linux-2.6.0-test5/drivers/scsi/pcmcia/Kconfig wli-2.6.0-test5-bk12-25/drivers/scsi/pcmcia/Kconfig --- linux-2.6.0-test5/drivers/scsi/pcmcia/Kconfig 2003-09-08 12:50:09.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/scsi/pcmcia/Kconfig 2003-09-25 19:16:04.000000000 -0700 @@ -12,10 +12,8 @@ config PCMCIA_AHA152X Say Y here if you intend to attach this type of PCMCIA SCSI host adapter to your computer. - This driver is also available as a module called aha152x_cs ( = - code which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this driver as a module, choose M here: the + module will be called aha152x_cs. config PCMCIA_FDOMAIN tristate "Future Domain PCMCIA support" @@ -24,10 +22,8 @@ config PCMCIA_FDOMAIN Say Y here if you intend to attach this type of PCMCIA SCSI host adapter to your computer. - This driver is also available as a module called fdomain_cs ( = - code which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this driver as a module, choose M here: the + module will be called fdomain_cs. config PCMCIA_NINJA_SCSI tristate "NinjaSCSI-3 / NinjaSCSI-32Bi (16bit) PCMCIA support" @@ -60,10 +56,8 @@ config PCMCIA_NINJA_SCSI HP M820e CDRW's card etc. - This driver is also available as a module called nsp_cs ( = - code which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this driver as a module, choose M here: the + module will be called nsp_cs. config PCMCIA_QLOGIC tristate "Qlogic PCMCIA support" @@ -72,9 +66,7 @@ config PCMCIA_QLOGIC Say Y here if you intend to attach this type of PCMCIA SCSI host adapter to your computer. - This driver is also available as a module called qlogic_cs ( = - code which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this driver as a module, choose M here: the + module will be called qlogic_cs. endmenu diff -prauN linux-2.6.0-test5/drivers/scsi/sd.c wli-2.6.0-test5-bk12-25/drivers/scsi/sd.c --- linux-2.6.0-test5/drivers/scsi/sd.c 2003-09-08 12:50:19.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/scsi/sd.c 2003-09-25 19:16:04.000000000 -0700 @@ -1108,14 +1108,26 @@ sd_read_cache_type(struct scsi_disk *sdk /* cautiously ask */ res = sd_do_mode_sense(SRpnt, dbd, modepage, buffer, 4, &data); - if (scsi_status_is_good(res)) { - /* that went OK, now ask for the proper length */ - len = data.length; - if (len > 128) - len = 128; - res = sd_do_mode_sense(SRpnt, dbd, modepage, buffer, - len, &data); - } + if (!scsi_status_is_good(res)) + goto bad_sense; + + /* that went OK, now ask for the proper length */ + len = data.length; + + /* + * We're only interested in the first three bytes, actually. + * But the data cache page is defined for the first 20. + */ + if (len < 3) + goto bad_sense; + if (len > 20) + len = 20; + + /* Take headers and block descriptors into account */ + len += data.header_length + data.block_descriptor_length; + + /* Get the data */ + res = sd_do_mode_sense(SRpnt, dbd, modepage, buffer, len, &data); if (scsi_status_is_good(res)) { const char *types[] = { @@ -1133,23 +1145,26 @@ sd_read_cache_type(struct scsi_disk *sdk printk(KERN_NOTICE "SCSI device %s: drive cache: %s\n", diskname, types[ct]); + + return; + } + +bad_sense: + if ((SRpnt->sr_sense_buffer[0] & 0x70) == 0x70 + && (SRpnt->sr_sense_buffer[2] & 0x0f) == ILLEGAL_REQUEST + /* ASC 0x24 ASCQ 0x00: Invalid field in CDB */ + && SRpnt->sr_sense_buffer[12] == 0x24 + && SRpnt->sr_sense_buffer[13] == 0x00) { + printk(KERN_NOTICE "%s: cache data unavailable\n", + diskname); } else { - if ((SRpnt->sr_sense_buffer[0] & 0x70) == 0x70 - && (SRpnt->sr_sense_buffer[2] & 0x0f) == ILLEGAL_REQUEST - /* ASC 0x24 ASCQ 0x00: Invalid field in CDB */ - && SRpnt->sr_sense_buffer[12] == 0x24 - && SRpnt->sr_sense_buffer[13] == 0x00) { - printk(KERN_NOTICE "%s: cache data unavailable\n", - diskname); - } else { - printk(KERN_ERR "%s: asking for cache data failed\n", - diskname); - } - printk(KERN_ERR "%s: assuming drive cache: write through\n", + printk(KERN_ERR "%s: asking for cache data failed\n", diskname); - sdkp->WCE = 0; - sdkp->RCD = 0; } + printk(KERN_ERR "%s: assuming drive cache: write through\n", + diskname); + sdkp->WCE = 0; + sdkp->RCD = 0; } /** diff -prauN linux-2.6.0-test5/drivers/serial/21285.c wli-2.6.0-test5-bk12-25/drivers/serial/21285.c --- linux-2.6.0-test5/drivers/serial/21285.c 2003-09-08 12:50:19.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/serial/21285.c 2003-09-25 19:16:04.000000000 -0700 @@ -481,18 +481,6 @@ static int __init serial21285_console_se } extern struct uart_driver serial21285_reg; -#ifdef CONFIG_SERIAL_21285_OLD -static struct console serial21285_old_cons = -{ - .name = SERIAL_21285_OLD_NAME, - .write = serial21285_console_write, - .device = uart_console_device, - .setup = serial21285_console_setup, - .flags = CON_PRINTBUFFER, - .index = -1, - .data = &serial21285_reg, -}; -#endif static struct console serial21285_console = { diff -prauN linux-2.6.0-test5/drivers/serial/8250.c wli-2.6.0-test5-bk12-25/drivers/serial/8250.c --- linux-2.6.0-test5/drivers/serial/8250.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/serial/8250.c 2003-09-25 19:16:04.000000000 -0700 @@ -122,6 +122,7 @@ struct uart_8250_port { struct uart_port port; struct timer_list timer; /* "no irq" timer */ struct list_head list; /* ports on this IRQ */ + unsigned int capabilities; /* port capabilities */ unsigned short rev; unsigned char acr; unsigned char ier; @@ -683,6 +684,7 @@ static void autoconfig(struct uart_8250_ serial_outp(up, UART_LCR, save_lcr); up->port.fifosize = uart_config[up->port.type].dfl_xmit_fifo_size; + up->capabilities = uart_config[up->port.type].flags; if (up->port.type == PORT_UNKNOWN) goto out; @@ -1190,6 +1192,8 @@ static int serial8250_startup(struct uar unsigned long flags; int retval; + up->capabilities = uart_config[up->port.type].flags; + if (up->port.type == PORT_16C950) { /* Wake up and initialize UART */ up->acr = 0; @@ -1215,7 +1219,7 @@ static int serial8250_startup(struct uar * Clear the FIFO buffers and disable them. * (they will be reeanbled in set_termios()) */ - if (uart_config[up->port.type].flags & UART_CLEAR_FIFO) { + if (up->capabilities & UART_CLEAR_FIFO) { serial_outp(up, UART_FCR, UART_FCR_ENABLE_FIFO); serial_outp(up, UART_FCR, UART_FCR_ENABLE_FIFO | UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT); @@ -1428,7 +1432,7 @@ serial8250_set_termios(struct uart_port up->rev == 0x5201) quot ++; - if (uart_config[up->port.type].flags & UART_USE_FIFO) { + if (up->capabilities & UART_USE_FIFO) { if (baud < 2400) fcr = UART_FCR_ENABLE_FIFO | UART_FCR_TRIGGER_1; #ifdef CONFIG_SERIAL_8250_RSA @@ -1489,13 +1493,13 @@ serial8250_set_termios(struct uart_port serial_out(up, UART_IER, up->ier); - if (uart_config[up->port.type].flags & UART_STARTECH) { + if (up->capabilities & UART_STARTECH) { serial_outp(up, UART_LCR, 0xBF); serial_outp(up, UART_EFR, termios->c_cflag & CRTSCTS ? UART_EFR_CTS :0); } - if (uart_config[up->port.type].flags & UART_NATSEMI) { + if (up->capabilities & UART_NATSEMI) { /* Switch to bank 2 not bank 1, to avoid resetting EXCR2 */ serial_outp(up, UART_LCR, 0xe0); } else { @@ -1524,7 +1528,7 @@ serial8250_pm(struct uart_port *port, un struct uart_8250_port *up = (struct uart_8250_port *)port; if (state) { /* sleep */ - if (uart_config[up->port.type].flags & UART_STARTECH) { + if (up->capabilities & UART_STARTECH) { /* Arrange to enter sleep mode */ serial_outp(up, UART_LCR, 0xBF); serial_outp(up, UART_EFR, UART_EFR_ECB); @@ -1543,7 +1547,7 @@ serial8250_pm(struct uart_port *port, un up->pm(port, state, oldstate); } else { /* wake */ - if (uart_config[up->port.type].flags & UART_STARTECH) { + if (up->capabilities & UART_STARTECH) { /* Wake up UART */ serial_outp(up, UART_LCR, 0xBF); serial_outp(up, UART_EFR, UART_EFR_ECB); @@ -2101,9 +2105,9 @@ void serial8250_get_irq_map(unsigned int * * Suspend one serial port. */ -void serial8250_suspend_port(int line, u32 level) +void serial8250_suspend_port(int line) { - uart_suspend_port(&serial8250_reg, &serial8250_ports[line].port, level); + uart_suspend_port(&serial8250_reg, &serial8250_ports[line].port); } /** @@ -2112,9 +2116,9 @@ void serial8250_suspend_port(int line, u * * Resume one serial port. */ -void serial8250_resume_port(int line, u32 level) +void serial8250_resume_port(int line) { - uart_resume_port(&serial8250_reg, &serial8250_ports[line].port, level); + uart_resume_port(&serial8250_reg, &serial8250_ports[line].port); } static int __init serial8250_init(void) diff -prauN linux-2.6.0-test5/drivers/serial/8250.h wli-2.6.0-test5-bk12-25/drivers/serial/8250.h --- linux-2.6.0-test5/drivers/serial/8250.h 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/serial/8250.h 2003-09-25 19:16:04.000000000 -0700 @@ -27,8 +27,8 @@ struct serial8250_probe { int serial8250_register_probe(struct serial8250_probe *probe); void serial8250_unregister_probe(struct serial8250_probe *probe); void serial8250_get_irq_map(unsigned int *map); -void serial8250_suspend_port(int line, u32 level); -void serial8250_resume_port(int line, u32 level); +void serial8250_suspend_port(int line); +void serial8250_resume_port(int line); struct old_serial_port { unsigned int uart; diff -prauN linux-2.6.0-test5/drivers/serial/8250_cs.c wli-2.6.0-test5-bk12-25/drivers/serial/8250_cs.c --- linux-2.6.0-test5/drivers/serial/8250_cs.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/serial/8250_cs.c 1969-12-31 16:00:00.000000000 -0800 @@ -1,712 +0,0 @@ -/*====================================================================== - - A driver for PCMCIA serial devices - - serial_cs.c 1.134 2002/05/04 05:48:53 - - The contents of this file are subject to the Mozilla Public - License Version 1.1 (the "License"); you may not use this file - except in compliance with the License. You may obtain a copy of - the License at http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS - IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or - implied. See the License for the specific language governing - rights and limitations under the License. - - The initial developer of the original code is David A. Hinds - . Portions created by David A. Hinds - are Copyright (C) 1999 David A. Hinds. All Rights Reserved. - - Alternatively, the contents of this file may be used under the - terms of the GNU General Public License version 2 (the "GPL"), in which - case the provisions of the GPL are applicable instead of the - above. If you wish to allow the use of your version of this file - only under the terms of the GPL and not to allow others to use - your version of this file under the MPL, indicate your decision - by deleting the provisions above and replace them with the notice - and other provisions required by the GPL. If you do not delete - the provisions above, a recipient may use your version of this - file under either the MPL or the GPL. - -======================================================================*/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#ifdef PCMCIA_DEBUG -static int pc_debug = PCMCIA_DEBUG; -MODULE_PARM(pc_debug, "i"); -#define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args) -static char *version = "serial_cs.c 1.134 2002/05/04 05:48:53 (David Hinds)"; -#else -#define DEBUG(n, args...) -#endif - -/*====================================================================*/ - -/* Parameters that can be set with 'insmod' */ - -/* Bit map of interrupts to choose from */ -static u_int irq_mask = 0xdeb8; -static int irq_list[4] = { -1 }; - -/* Enable the speaker? */ -static int do_sound = 1; -/* Skip strict UART tests? */ -static int buggy_uart; - -MODULE_PARM(irq_mask, "i"); -MODULE_PARM(irq_list, "1-4i"); -MODULE_PARM(do_sound, "i"); -MODULE_PARM(buggy_uart, "i"); - -/*====================================================================*/ - -/* Table of multi-port card ID's */ - -struct multi_id { - u_short manfid; - u_short prodid; - int multi; /* 1 = multifunction, > 1 = # ports */ -}; - -static struct multi_id multi_id[] = { - { MANFID_OMEGA, PRODID_OMEGA_QSP_100, 4 }, - { MANFID_QUATECH, PRODID_QUATECH_DUAL_RS232, 2 }, - { MANFID_QUATECH, PRODID_QUATECH_DUAL_RS232_D1, 2 }, - { MANFID_QUATECH, PRODID_QUATECH_QUAD_RS232, 4 }, - { MANFID_SOCKET, PRODID_SOCKET_DUAL_RS232, 2 }, - { MANFID_INTEL, PRODID_INTEL_DUAL_RS232, 2 }, - { MANFID_NATINST, PRODID_NATINST_QUAD_RS232, 4 } -}; -#define MULTI_COUNT (sizeof(multi_id)/sizeof(struct multi_id)) - -struct serial_info { - dev_link_t link; - int ndev; - int multi; - int slave; - int manfid; - dev_node_t node[4]; - int line[4]; -}; - -static void serial_config(dev_link_t * link); -static int serial_event(event_t event, int priority, - event_callback_args_t * args); - -static dev_info_t dev_info = "serial_cs"; - -static dev_link_t *serial_attach(void); -static void serial_detach(dev_link_t *); - -static dev_link_t *dev_list = NULL; - -/*====================================================================== - - After a card is removed, serial_remove() will unregister - the serial device(s), and release the PCMCIA configuration. - -======================================================================*/ - -static void serial_remove(dev_link_t *link) -{ - struct serial_info *info = link->priv; - int i; - - link->state &= ~DEV_PRESENT; - - DEBUG(0, "serial_release(0x%p)\n", link); - - /* - * Recheck to see if the device is still configured. - */ - if (info->link.state & DEV_CONFIG) { - for (i = 0; i < info->ndev; i++) - unregister_serial(info->line[i]); - - info->link.dev = NULL; - - if (!info->slave) { - CardServices(ReleaseConfiguration, info->link.handle); - CardServices(ReleaseIO, info->link.handle, &info->link.io); - CardServices(ReleaseIRQ, info->link.handle, &info->link.irq); - } - - info->link.state &= ~DEV_CONFIG; - } -} - -/*====================================================================== - - serial_attach() creates an "instance" of the driver, allocating - local data structures for one device. The device is registered - with Card Services. - -======================================================================*/ - -static dev_link_t *serial_attach(void) -{ - struct serial_info *info; - client_reg_t client_reg; - dev_link_t *link; - int i, ret; - - DEBUG(0, "serial_attach()\n"); - - /* Create new serial device */ - info = kmalloc(sizeof (*info), GFP_KERNEL); - if (!info) - return NULL; - memset(info, 0, sizeof (*info)); - link = &info->link; - link->priv = info; - - link->io.Attributes1 = IO_DATA_PATH_WIDTH_8; - link->io.NumPorts1 = 8; - link->irq.Attributes = IRQ_TYPE_EXCLUSIVE; - link->irq.IRQInfo1 = IRQ_INFO2_VALID | IRQ_LEVEL_ID; - if (irq_list[0] == -1) - link->irq.IRQInfo2 = irq_mask; - else - for (i = 0; i < 4; i++) - link->irq.IRQInfo2 |= 1 << irq_list[i]; - link->conf.Attributes = CONF_ENABLE_IRQ; - if (do_sound) { - link->conf.Attributes |= CONF_ENABLE_SPKR; - link->conf.Status = CCSR_AUDIO_ENA; - } - link->conf.IntType = INT_MEMORY_AND_IO; - - /* Register with Card Services */ - link->next = dev_list; - dev_list = link; - client_reg.dev_info = &dev_info; - client_reg.Attributes = INFO_IO_CLIENT | INFO_CARD_SHARE; - client_reg.EventMask = - CS_EVENT_CARD_INSERTION | CS_EVENT_CARD_REMOVAL | - CS_EVENT_RESET_PHYSICAL | CS_EVENT_CARD_RESET | - CS_EVENT_PM_SUSPEND | CS_EVENT_PM_RESUME; - client_reg.event_handler = &serial_event; - client_reg.Version = 0x0210; - client_reg.event_callback_args.client_data = link; - ret = CardServices(RegisterClient, &link->handle, &client_reg); - if (ret != CS_SUCCESS) { - cs_error(link->handle, RegisterClient, ret); - serial_detach(link); - return NULL; - } - - return link; -} - -/*====================================================================== - - This deletes a driver "instance". The device is de-registered - with Card Services. If it has been released, all local data - structures are freed. Otherwise, the structures will be freed - when the device is released. - -======================================================================*/ - -static void serial_detach(dev_link_t * link) -{ - struct serial_info *info = link->priv; - dev_link_t **linkp; - int ret; - - DEBUG(0, "serial_detach(0x%p)\n", link); - - /* Locate device structure */ - for (linkp = &dev_list; *linkp; linkp = &(*linkp)->next) - if (*linkp == link) - break; - if (*linkp == NULL) - return; - - /* - * Ensure any outstanding scheduled tasks are completed. - */ - flush_scheduled_work(); - - /* - * Ensure that the ports have been released. - */ - serial_remove(link); - - if (link->handle) { - ret = CardServices(DeregisterClient, link->handle); - if (ret != CS_SUCCESS) - cs_error(link->handle, DeregisterClient, ret); - } - - /* Unlink device structure, free bits */ - *linkp = link->next; - kfree(info); -} - -/*====================================================================*/ - -static int setup_serial(struct serial_info * info, ioaddr_t port, int irq) -{ - struct serial_struct serial; - int line; - - memset(&serial, 0, sizeof (serial)); - serial.port = port; - serial.irq = irq; - serial.flags = UPF_SKIP_TEST | UPF_SHARE_IRQ; - if (buggy_uart) - serial.flags |= UPF_BUGGY_UART; - line = register_serial(&serial); - if (line < 0) { - printk(KERN_NOTICE "serial_cs: register_serial() at 0x%04lx," - " irq %d failed\n", (u_long) serial.port, serial.irq); - return -EINVAL; - } - - info->line[info->ndev] = line; - sprintf(info->node[info->ndev].dev_name, "ttyS%d", line); - info->node[info->ndev].major = TTY_MAJOR; - info->node[info->ndev].minor = 0x40 + line; - if (info->ndev > 0) - info->node[info->ndev - 1].next = &info->node[info->ndev]; - info->ndev++; - - return 0; -} - -/*====================================================================*/ - -static int -get_tuple(int fn, client_handle_t handle, tuple_t * tuple, cisparse_t * parse) -{ - int i; - i = CardServices(fn, handle, tuple); - if (i != CS_SUCCESS) - return CS_NO_MORE_ITEMS; - i = CardServices(GetTupleData, handle, tuple); - if (i != CS_SUCCESS) - return i; - return CardServices(ParseTuple, handle, tuple, parse); -} - -#define first_tuple(a, b, c) get_tuple(GetFirstTuple, a, b, c) -#define next_tuple(a, b, c) get_tuple(GetNextTuple, a, b, c) - -/*====================================================================*/ - -static int simple_config(dev_link_t * link) -{ - static ioaddr_t base[5] = { 0x3f8, 0x2f8, 0x3e8, 0x2e8, 0x0 }; - client_handle_t handle = link->handle; - struct serial_info *info = link->priv; - tuple_t tuple; - u_char buf[256]; - cisparse_t parse; - cistpl_cftable_entry_t *cf = &parse.cftable_entry; - config_info_t config; - int i, j, try; - - /* If the card is already configured, look up the port and irq */ - i = CardServices(GetConfigurationInfo, handle, &config); - if ((i == CS_SUCCESS) && (config.Attributes & CONF_VALID_CLIENT)) { - ioaddr_t port = 0; - if ((config.BasePort2 != 0) && (config.NumPorts2 == 8)) { - port = config.BasePort2; - info->slave = 1; - } else if ((info->manfid == MANFID_OSITECH) && - (config.NumPorts1 == 0x40)) { - port = config.BasePort1 + 0x28; - info->slave = 1; - } - if (info->slave) - return setup_serial(info, port, config.AssignedIRQ); - } - link->conf.Vcc = config.Vcc; - - /* First pass: look for a config entry that looks normal. */ - tuple.TupleData = (cisdata_t *) buf; - tuple.TupleOffset = 0; - tuple.TupleDataMax = 255; - tuple.Attributes = 0; - tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; - /* Two tries: without IO aliases, then with aliases */ - for (try = 0; try < 2; try++) { - i = first_tuple(handle, &tuple, &parse); - while (i != CS_NO_MORE_ITEMS) { - if (i != CS_SUCCESS) - goto next_entry; - if (cf->vpp1.present & (1 << CISTPL_POWER_VNOM)) - link->conf.Vpp1 = link->conf.Vpp2 = - cf->vpp1.param[CISTPL_POWER_VNOM] / 10000; - if ((cf->io.nwin > 0) && (cf->io.win[0].len == 8) && - (cf->io.win[0].base != 0)) { - link->conf.ConfigIndex = cf->index; - link->io.BasePort1 = cf->io.win[0].base; - link->io.IOAddrLines = (try == 0) ? - 16 : cf->io.flags & CISTPL_IO_LINES_MASK; - i = - CardServices(RequestIO, link->handle, - &link->io); - if (i == CS_SUCCESS) - goto found_port; - } - next_entry: - i = next_tuple(handle, &tuple, &parse); - } - } - - /* Second pass: try to find an entry that isn't picky about - its base address, then try to grab any standard serial port - address, and finally try to get any free port. */ - i = first_tuple(handle, &tuple, &parse); - while (i != CS_NO_MORE_ITEMS) { - if ((i == CS_SUCCESS) && (cf->io.nwin > 0) && - ((cf->io.flags & CISTPL_IO_LINES_MASK) <= 3)) { - link->conf.ConfigIndex = cf->index; - for (j = 0; j < 5; j++) { - link->io.BasePort1 = base[j]; - link->io.IOAddrLines = base[j] ? 16 : 3; - i = CardServices(RequestIO, link->handle, - &link->io); - if (i == CS_SUCCESS) - goto found_port; - } - } - i = next_tuple(handle, &tuple, &parse); - } - - found_port: - if (i != CS_SUCCESS) { - printk(KERN_NOTICE - "serial_cs: no usable port range found, giving up\n"); - cs_error(link->handle, RequestIO, i); - return -1; - } - - i = CardServices(RequestIRQ, link->handle, &link->irq); - if (i != CS_SUCCESS) { - cs_error(link->handle, RequestIRQ, i); - link->irq.AssignedIRQ = 0; - } - if (info->multi && (info->manfid == MANFID_3COM)) - link->conf.ConfigIndex &= ~(0x08); - i = CardServices(RequestConfiguration, link->handle, &link->conf); - if (i != CS_SUCCESS) { - cs_error(link->handle, RequestConfiguration, i); - return -1; - } - - return setup_serial(info, link->io.BasePort1, link->irq.AssignedIRQ); -} - -static int multi_config(dev_link_t * link) -{ - client_handle_t handle = link->handle; - struct serial_info *info = link->priv; - tuple_t tuple; - u_char buf[256]; - cisparse_t parse; - cistpl_cftable_entry_t *cf = &parse.cftable_entry; - config_info_t config; - int i, base2 = 0; - - i = CardServices(GetConfigurationInfo, handle, &config); - if (i != CS_SUCCESS) { - cs_error(handle, GetConfigurationInfo, i); - return -1; - } - link->conf.Vcc = config.Vcc; - - tuple.TupleData = (cisdata_t *) buf; - tuple.TupleOffset = 0; - tuple.TupleDataMax = 255; - tuple.Attributes = 0; - tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; - - /* First, look for a generic full-sized window */ - link->io.NumPorts1 = info->multi * 8; - i = first_tuple(handle, &tuple, &parse); - while (i != CS_NO_MORE_ITEMS) { - /* The quad port cards have bad CIS's, so just look for a - window larger than 8 ports and assume it will be right */ - if ((i == CS_SUCCESS) && (cf->io.nwin == 1) && - (cf->io.win[0].len > 8)) { - link->conf.ConfigIndex = cf->index; - link->io.BasePort1 = cf->io.win[0].base; - link->io.IOAddrLines = - cf->io.flags & CISTPL_IO_LINES_MASK; - i = CardServices(RequestIO, link->handle, &link->io); - base2 = link->io.BasePort1 + 8; - if (i == CS_SUCCESS) - break; - } - i = next_tuple(handle, &tuple, &parse); - } - - /* If that didn't work, look for two windows */ - if (i != CS_SUCCESS) { - link->io.NumPorts1 = link->io.NumPorts2 = 8; - info->multi = 2; - i = first_tuple(handle, &tuple, &parse); - while (i != CS_NO_MORE_ITEMS) { - if ((i == CS_SUCCESS) && (cf->io.nwin == 2)) { - link->conf.ConfigIndex = cf->index; - link->io.BasePort1 = cf->io.win[0].base; - link->io.BasePort2 = cf->io.win[1].base; - link->io.IOAddrLines = - cf->io.flags & CISTPL_IO_LINES_MASK; - i = - CardServices(RequestIO, link->handle, - &link->io); - base2 = link->io.BasePort2; - if (i == CS_SUCCESS) - break; - } - i = next_tuple(handle, &tuple, &parse); - } - } - - if (i != CS_SUCCESS) { - cs_error(link->handle, RequestIO, i); - return -1; - } - - i = CardServices(RequestIRQ, link->handle, &link->irq); - if (i != CS_SUCCESS) { - printk(KERN_NOTICE - "serial_cs: no usable port range found, giving up\n"); - cs_error(link->handle, RequestIRQ, i); - link->irq.AssignedIRQ = 0; - } - /* Socket Dual IO: this enables irq's for second port */ - if (info->multi && (info->manfid == MANFID_SOCKET)) { - link->conf.Present |= PRESENT_EXT_STATUS; - link->conf.ExtStatus = ESR_REQ_ATTN_ENA; - } - i = CardServices(RequestConfiguration, link->handle, &link->conf); - if (i != CS_SUCCESS) { - cs_error(link->handle, RequestConfiguration, i); - return -1; - } - - /* The Oxford Semiconductor OXCF950 cards are in fact single-port: - 8 registers are for the UART, the others are extra registers */ - if (info->manfid == MANFID_OXSEMI) { - if (cf->index == 1 || cf->index == 3) { - setup_serial(info, base2, link->irq.AssignedIRQ); - outb(12, link->io.BasePort1 + 1); - } else { - setup_serial(info, link->io.BasePort1, link->irq.AssignedIRQ); - outb(12, base2 + 1); - } - return 0; - } - - setup_serial(info, link->io.BasePort1, link->irq.AssignedIRQ); - /* The Nokia cards are not really multiport cards */ - if (info->manfid == MANFID_NOKIA) - return 0; - for (i = 0; i < info->multi - 1; i++) - setup_serial(info, base2 + (8 * i), link->irq.AssignedIRQ); - - return 0; -} - -/*====================================================================== - - serial_config() is scheduled to run after a CARD_INSERTION event - is received, to configure the PCMCIA socket, and to make the - serial device available to the system. - -======================================================================*/ - -#define CS_CHECK(fn, args...) \ -while ((last_ret=CardServices(last_fn=(fn), args))!=0) goto cs_failed - -void serial_config(dev_link_t * link) -{ - client_handle_t handle = link->handle; - struct serial_info *info = link->priv; - tuple_t tuple; - u_short buf[128]; - cisparse_t parse; - cistpl_cftable_entry_t *cf = &parse.cftable_entry; - int i, last_ret, last_fn; - - DEBUG(0, "serial_config(0x%p)\n", link); - - tuple.TupleData = (cisdata_t *) buf; - tuple.TupleOffset = 0; - tuple.TupleDataMax = 255; - tuple.Attributes = 0; - /* Get configuration register information */ - tuple.DesiredTuple = CISTPL_CONFIG; - last_ret = first_tuple(handle, &tuple, &parse); - if (last_ret != CS_SUCCESS) { - last_fn = ParseTuple; - goto cs_failed; - } - link->conf.ConfigBase = parse.config.base; - link->conf.Present = parse.config.rmask[0]; - - /* Configure card */ - link->state |= DEV_CONFIG; - - /* Is this a compliant multifunction card? */ - tuple.DesiredTuple = CISTPL_LONGLINK_MFC; - tuple.Attributes = TUPLE_RETURN_COMMON | TUPLE_RETURN_LINK; - info->multi = (first_tuple(handle, &tuple, &parse) == CS_SUCCESS); - - /* Is this a multiport card? */ - tuple.DesiredTuple = CISTPL_MANFID; - if (first_tuple(handle, &tuple, &parse) == CS_SUCCESS) { - info->manfid = le16_to_cpu(buf[0]); - for (i = 0; i < MULTI_COUNT; i++) - if ((info->manfid == multi_id[i].manfid) && - (le16_to_cpu(buf[1]) == multi_id[i].prodid)) - break; - if (i < MULTI_COUNT) - info->multi = multi_id[i].multi; - } - - /* Another check for dual-serial cards: look for either serial or - multifunction cards that ask for appropriate IO port ranges */ - tuple.DesiredTuple = CISTPL_FUNCID; - if ((info->multi == 0) && - ((first_tuple(handle, &tuple, &parse) != CS_SUCCESS) || - (parse.funcid.func == CISTPL_FUNCID_MULTI) || - (parse.funcid.func == CISTPL_FUNCID_SERIAL))) { - tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; - if (first_tuple(handle, &tuple, &parse) == CS_SUCCESS) { - if ((cf->io.nwin == 1) && (cf->io.win[0].len % 8 == 0)) - info->multi = cf->io.win[0].len >> 3; - if ((cf->io.nwin == 2) && (cf->io.win[0].len == 8) && - (cf->io.win[1].len == 8)) - info->multi = 2; - } - } - - if (info->multi > 1) - multi_config(link); - else - simple_config(link); - - if (info->ndev == 0) - goto failed; - - if (info->manfid == MANFID_IBM) { - conf_reg_t reg = { 0, CS_READ, 0x800, 0 }; - CS_CHECK(AccessConfigurationRegister, link->handle, ®); - reg.Action = CS_WRITE; - reg.Value = reg.Value | 1; - CS_CHECK(AccessConfigurationRegister, link->handle, ®); - } - - link->dev = &info->node[0]; - link->state &= ~DEV_CONFIG_PENDING; - return; - - cs_failed: - cs_error(link->handle, last_fn, last_ret); - failed: - serial_remove(link); - link->state &= ~DEV_CONFIG_PENDING; -} - -/*====================================================================== - - The card status event handler. Mostly, this schedules other - stuff to run after an event is received. A CARD_REMOVAL event - also sets some flags to discourage the serial drivers from - talking to the ports. - -======================================================================*/ - -static int -serial_event(event_t event, int priority, event_callback_args_t * args) -{ - dev_link_t *link = args->client_data; - struct serial_info *info = link->priv; - - DEBUG(1, "serial_event(0x%06x)\n", event); - - switch (event) { - case CS_EVENT_CARD_REMOVAL: - serial_remove(link); - break; - - case CS_EVENT_CARD_INSERTION: - link->state |= DEV_PRESENT | DEV_CONFIG_PENDING; - serial_config(link); - break; - - case CS_EVENT_PM_SUSPEND: - link->state |= DEV_SUSPEND; - /* Fall through... */ - case CS_EVENT_RESET_PHYSICAL: - if ((link->state & DEV_CONFIG) && !info->slave) - CardServices(ReleaseConfiguration, link->handle); - break; - - case CS_EVENT_PM_RESUME: - link->state &= ~DEV_SUSPEND; - /* Fall through... */ - case CS_EVENT_CARD_RESET: - if (DEV_OK(link) && !info->slave) - CardServices(RequestConfiguration, link->handle, - &link->conf); - break; - } - return 0; -} - -static struct pcmcia_driver serial_cs_driver = { - .owner = THIS_MODULE, - .drv = { - .name = "serial_cs", - }, - .attach = serial_attach, - .detach = serial_detach, -}; - -static int __init init_serial_cs(void) -{ - return pcmcia_register_driver(&serial_cs_driver); -} - -static void __exit exit_serial_cs(void) -{ - pcmcia_unregister_driver(&serial_cs_driver); - - /* XXX: this really needs to move into generic code.. */ - while (dev_list != NULL) - serial_detach(dev_list); -} - -module_init(init_serial_cs); -module_exit(exit_serial_cs); - -MODULE_LICENSE("GPL"); diff -prauN linux-2.6.0-test5/drivers/serial/8250_pci.c wli-2.6.0-test5-bk12-25/drivers/serial/8250_pci.c --- linux-2.6.0-test5/drivers/serial/8250_pci.c 2003-09-08 12:50:20.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/serial/8250_pci.c 2003-09-25 19:16:04.000000000 -0700 @@ -1600,19 +1600,6 @@ static void __devexit pciserial_remove_o } } -static int pciserial_save_state_one(struct pci_dev *dev, u32 state) -{ - struct serial_private *priv = pci_get_drvdata(dev); - - if (priv) { - int i; - - for (i = 0; i < priv->nr; i++) - serial8250_suspend_port(priv->line[i], SUSPEND_SAVE_STATE); - } - return 0; -} - static int pciserial_suspend_one(struct pci_dev *dev, u32 state) { struct serial_private *priv = pci_get_drvdata(dev); @@ -1621,7 +1608,7 @@ static int pciserial_suspend_one(struct int i; for (i = 0; i < priv->nr; i++) - serial8250_suspend_port(priv->line[i], SUSPEND_POWER_DOWN); + serial8250_suspend_port(priv->line[i]); } return 0; } @@ -1639,10 +1626,8 @@ static int pciserial_resume_one(struct p if (priv->quirk->init) priv->quirk->init(dev); - for (i = 0; i < priv->nr; i++) { - serial8250_resume_port(priv->line[i], RESUME_POWER_ON); - serial8250_resume_port(priv->line[i], RESUME_RESTORE_STATE); - } + for (i = 0; i < priv->nr; i++) + serial8250_resume_port(priv->line[i]); } return 0; } @@ -2040,7 +2025,6 @@ static struct pci_driver serial_pci_driv .name = "serial", .probe = pciserial_init_one, .remove = __devexit_p(pciserial_remove_one), - .save_state = pciserial_save_state_one, .suspend = pciserial_suspend_one, .resume = pciserial_resume_one, .id_table = serial_pci_tbl, diff -prauN linux-2.6.0-test5/drivers/serial/Kconfig wli-2.6.0-test5-bk12-25/drivers/serial/Kconfig --- linux-2.6.0-test5/drivers/serial/Kconfig 2003-09-08 12:50:28.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/serial/Kconfig 2003-09-25 19:16:04.000000000 -0700 @@ -10,6 +10,7 @@ menu "Serial drivers" # The new 8250/16550 serial drivers config SERIAL_8250 tristate "8250/16550 and compatible serial support" + select SERIAL_CORE ---help--- This selects whether you want to include the driver for the standard serial ports. The standard answer is Y. People who might say N @@ -20,9 +21,8 @@ config SERIAL_8250 serial port drivers do not need this driver built in for them to work.) - If you want to compile this driver as a module, say M here and read - . The module will be called - serial. + To compile this driver as a module, choose M here: the + module will be called serial. [WARNING: Do not compile this driver as a module if you are using non-standard serial ports, since the configuration information will be lost when the driver is unloaded. This limitation may be lifted @@ -41,6 +41,7 @@ config SERIAL_8250 config SERIAL_8250_CONSOLE bool "Console on 8250/16550 and compatible serial port" depends on SERIAL_8250=y + select SERIAL_CORE_CONSOLE ---help--- If you say Y here, it will be possible to use a serial port as the system console (the system console is the device which receives all @@ -70,10 +71,9 @@ config SERIAL_8250_CS multi-function Ethernet/modem cards. (PCMCIA- or PC-cards are credit-card size devices often used with laptops.) - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called serial_cs. If you want to compile it as - a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called serial_cs. + If unsure, say N. config SERIAL_8250_ACPI @@ -167,12 +167,14 @@ config SERIAL_8250_ACORN config SERIAL_ANAKIN bool "Anakin serial port support" depends on ARM && ARCH_ANAKIN + select SERIAL_CORE help ::: To be written ::: config SERIAL_ANAKIN_CONSOLE bool "Console on Anakin serial port" depends on SERIAL_ANAKIN + select SERIAL_CORE_CONSOLE help Even if you say Y here, the currently visible virtual console (/dev/tty0) will still be used as the system console by default, but @@ -190,7 +192,8 @@ config ANAKIN_DEFAULT_BAUDRATE config SERIAL_AMBA tristate "ARM AMBA serial port support" - depends on ARM && ARCH_INTEGRATOR + depends on ARM_AMBA + select SERIAL_CORE help This selects the ARM(R) AMBA(R) PrimeCell UART. If you have an Integrator platform, say Y or M here. @@ -200,6 +203,7 @@ config SERIAL_AMBA config SERIAL_AMBA_CONSOLE bool "Support for console on AMBA serial port" depends on SERIAL_AMBA=y + select SERIAL_CORE_CONSOLE ---help--- Say Y here if you wish to use an AMBA PrimeCell UART as the system console (the system console is the device which receives all kernel @@ -214,18 +218,20 @@ config SERIAL_AMBA_CONSOLE config SERIAL_INTEGRATOR bool - depends on SERIAL_AMBA=y + depends on SERIAL_AMBA && ARCH_INTEGRATOR default y config SERIAL_CLPS711X tristate "CLPS711X serial port support" depends on ARM && ARCH_CLPS711X + select SERIAL_CORE help ::: To be written ::: config SERIAL_CLPS711X_CONSOLE bool "Support for console on CLPS711X serial port" depends on SERIAL_CLPS711X=y + select SERIAL_CORE_CONSOLE help Even if you say Y here, the currently visible virtual console (/dev/tty0) will still be used as the system console by default, but @@ -243,21 +249,16 @@ config SERIAL_CLPS711X_OLD_NAME config SERIAL_21285 tristate "DC21285 serial port support" depends on ARM && FOOTBRIDGE + select SERIAL_CORE help If you have a machine based on a 21285 (Footbridge) StrongARM(R)/ PCI bridge you can enable its onboard serial port by enabling this option. -config SERIAL_21285_OLD - bool "Use /dev/ttyS0 device (OBSOLETE)" - depends on SERIAL_21285=y && OBSOLETE - help - Use the old /dev/ttyS name, major 4 minor 64. This is obsolete - and will be removed during later 2.5 development. - config SERIAL_21285_CONSOLE bool "Console on DC21285 serial port" depends on SERIAL_21285=y + select SERIAL_CORE_CONSOLE help If you have enabled the serial port on the 21285 footbridge you can make it the console by answering Y to this option. @@ -272,6 +273,7 @@ config SERIAL_21285_CONSOLE config SERIAL_UART00 bool "Excalibur serial port (uart00) support" depends on ARM && ARCH_CAMELOT + select SERIAL_CORE help Say Y here if you want to use the hard logic uart on Excalibur. This driver also supports soft logic implentations of this uart core. @@ -279,6 +281,7 @@ config SERIAL_UART00 config SERIAL_UART00_CONSOLE bool "Support for console on Excalibur serial port" depends on SERIAL_UART00 + select SERIAL_CORE_CONSOLE help Say Y here if you want to support a serial console on an Excalibur hard logic uart or uart00 IP core. @@ -293,6 +296,7 @@ config SERIAL_UART00_CONSOLE config SERIAL_SA1100 bool "SA1100 serial port support" depends on ARM && ARCH_SA1100 + select SERIAL_CORE help If you have a machine based on a SA1100/SA1110 StrongARM(R) CPU you can enable its onboard serial port by enabling this option. @@ -302,6 +306,7 @@ config SERIAL_SA1100 config SERIAL_SA1100_CONSOLE bool "Console on SA1100 serial port" depends on SERIAL_SA1100 + select SERIAL_CORE_CONSOLE help If you have enabled the serial port on the SA1100/SA1110 StrongARM CPU you can make it the console by answering Y to this option. @@ -316,6 +321,8 @@ config SERIAL_SA1100_CONSOLE config SERIAL_SUNCORE bool depends on SPARC32 || SPARC64 + select SERIAL_CORE + select SERIAL_CORE_CONSOLE default y config SERIAL_SUNZILOG @@ -352,6 +359,7 @@ config SERIAL_SUNSU_CONSOLE config SERIAL_MUX tristate "Serial MUX support" depends on PARISC + select SERIAL_CORE default y ---help--- Saying Y here will enable the hardware MUX serial driver for @@ -369,6 +377,7 @@ config SERIAL_MUX config SERIAL_MUX_CONSOLE bool "Support for console on serial MUX" depends on SERIAL_MUX + select SERIAL_CORE_CONSOLE default y config PDC_CONSOLE @@ -406,6 +415,7 @@ config SERIAL_SUNSAB_CONSOLE config V850E_UART bool "NEC V850E on-chip UART support" depends on V850E_MA1 || V850E_ME2 || V850E_TEG || V850E2_ANNA || V850E_AS85EP1 + select SERIAL_CORE default y config V850E_UARTB @@ -416,10 +426,12 @@ config V850E_UARTB config V850E_UART_CONSOLE bool "Use NEC V850E on-chip UART for console" depends on V850E_UART + select SERIAL_CORE_CONSOLE config SERIAL98 tristate "PC-9800 8251-based primary serial port support" depends on X86_PC9800 + select SERIAL_CORE help If you want to use standard primary serial ports on PC-9800, say Y. Otherwise, say N. @@ -427,16 +439,13 @@ config SERIAL98 config SERIAL98_CONSOLE bool "Support for console on PC-9800 standard serial port" depends on SERIAL98=y + select SERIAL_CORE_CONSOLE config SERIAL_CORE tristate - default m if SERIAL_AMBA!=y && SERIAL_CLPS711X!=y && SERIAL_21285!=y && !SERIAL_SA1100 && !SERIAL_ANAKIN && !SERIAL_UART00 && SERIAL_8250!=y && SERIAL_MUX!=y && !SERIAL_ROCKETPORT && !SERIAL_SUNCORE && !V850E_UART && SERIAL_PMACZILOG!=y && (SERIAL_AMBA=m || SERIAL_CLPS711X=m || SERIAL_21285=m || SERIAL_8250=m || SERIAL_MUX=m || SERIAL98=m || SERIAL_PMACZILOG=m) - default y if SERIAL_AMBA=y || SERIAL_CLPS711X=y || SERIAL_21285=y || SERIAL_SA1100 || SERIAL_ANAKIN || SERIAL_UART00 || SERIAL_8250=y || SERIAL_MUX=y || SERIAL_ROCKETPORT || SERIAL_SUNCORE || V850E_UART || SERIAL98=y || SERIAL_PMACZILOG=y config SERIAL_CORE_CONSOLE bool - depends on SERIAL_AMBA_CONSOLE || SERIAL_CLPS711X_CONSOLE || SERIAL_21285_CONSOLE || SERIAL_SA1100_CONSOLE || SERIAL_ANAKIN_CONSOLE || SERIAL_UART00_CONSOLE || SERIAL_8250_CONSOLE || SERIAL_MUX_CONSOLE || SERIAL_SUNZILOG_CONSOLE || SERIAL_SUNSU_CONSOLE || SERIAL_SUNSAB_CONSOLE || V850E_UART_CONSOLE || SERIAL98_CONSOLE || SERIAL_PMACZILOG_CONSOLE - default y config SERIAL_68328 bool "68328 serial support" @@ -476,6 +485,7 @@ config SERIAL_68360 config SERIAL_PMACZILOG tristate "PowerMac z85c30 ESCC support" depends on PPC_OF + select SERIAL_CORE help This driver supports the Zilog z85C30 serial ports found on PowerMac machines. @@ -484,6 +494,7 @@ config SERIAL_PMACZILOG config SERIAL_PMACZILOG_CONSOLE bool "Console on PowerMac z85c30 serial port" depends on SERIAL_PMACZILOG=y + select SERIAL_CORE_CONSOLE help If you would like to be able to use the z85c30 serial port on your PowerMac as the console, you can do so by answering diff -prauN linux-2.6.0-test5/drivers/serial/Makefile wli-2.6.0-test5-bk12-25/drivers/serial/Makefile --- linux-2.6.0-test5/drivers/serial/Makefile 2003-09-08 12:50:04.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/serial/Makefile 2003-09-25 19:16:04.000000000 -0700 @@ -11,10 +11,10 @@ serial-8250-$(CONFIG_PNP) += 8250_pnp.o serial-8250-$(CONFIG_SERIAL_8250_HCDP) += 8250_hcdp.o serial-8250-$(CONFIG_SERIAL_8250_ACPI) += 8250_acpi.o -obj-$(CONFIG_SERIAL_CORE) += core.o +obj-$(CONFIG_SERIAL_CORE) += serial_core.o obj-$(CONFIG_SERIAL_21285) += 21285.o obj-$(CONFIG_SERIAL_8250) += 8250.o $(serial-8250-y) -obj-$(CONFIG_SERIAL_8250_CS) += 8250_cs.o +obj-$(CONFIG_SERIAL_8250_CS) += serial_cs.o obj-$(CONFIG_SERIAL_8250_ACORN) += 8250_acorn.o obj-$(CONFIG_SERIAL_ANAKIN) += anakin.o obj-$(CONFIG_SERIAL_AMBA) += amba.o diff -prauN linux-2.6.0-test5/drivers/serial/clps711x.c wli-2.6.0-test5-bk12-25/drivers/serial/clps711x.c --- linux-2.6.0-test5/drivers/serial/clps711x.c 2003-09-08 12:49:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/serial/clps711x.c 2003-09-25 19:16:04.000000000 -0700 @@ -104,7 +104,7 @@ static void clps711xuart_enable_ms(struc { } -static void clps711xuart_int_rx(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t clps711xuart_int_rx(int irq, void *dev_id, struct pt_regs *regs) { struct uart_port *port = dev_id; struct tty_struct *tty = port->info->tty; @@ -139,7 +139,7 @@ static void clps711xuart_int_rx(int irq, } out: tty_flip_buffer_push(tty); - return; + return IRQ_HANDLED; handle_error: if (ch & UARTDR_PARERR) @@ -180,7 +180,7 @@ static void clps711xuart_int_rx(int irq, goto error_return; } -static void clps711xuart_int_tx(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t clps711xuart_int_tx(int irq, void *dev_id, struct pt_regs *regs) { struct uart_port *port = dev_id; struct circ_buf *xmit = &port->info->xmit; @@ -190,11 +190,11 @@ static void clps711xuart_int_tx(int irq, clps_writel(port->x_char, UARTDR(port)); port->icount.tx++; port->x_char = 0; - return; + return IRQ_HANDLED; } if (uart_circ_empty(xmit) || uart_tx_stopped(port)) { clps711xuart_stop_tx(port, 0); - return; + return IRQ_HANDLED; } count = port->fifosize >> 1; @@ -211,6 +211,8 @@ static void clps711xuart_int_tx(int irq, if (uart_circ_empty(xmit)) clps711xuart_stop_tx(port, 0); + + return IRQ_HANDLED; } static unsigned int clps711xuart_tx_empty(struct uart_port *port) diff -prauN linux-2.6.0-test5/drivers/serial/core.c wli-2.6.0-test5-bk12-25/drivers/serial/core.c --- linux-2.6.0-test5/drivers/serial/core.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/serial/core.c 1969-12-31 16:00:00.000000000 -0800 @@ -1,2432 +0,0 @@ -/* - * linux/drivers/char/core.c - * - * Driver core for serial ports - * - * Based on drivers/char/serial.c, by Linus Torvalds, Theodore Ts'o. - * - * Copyright 1999 ARM Limited - * Copyright (C) 2000-2001 Deep Blue Solutions Ltd. - * - * 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 of the License, 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include /* for serial_state and serial_icounter_struct */ - -#include -#include - -#undef DEBUG -#ifdef DEBUG -#define DPRINTK(x...) printk(x) -#else -#define DPRINTK(x...) do { } while (0) -#endif - -/* - * This is used to lock changes in serial line configuration. - */ -static DECLARE_MUTEX(port_sem); - -#define HIGH_BITS_OFFSET ((sizeof(long)-sizeof(int))*8) - -#define uart_users(state) ((state)->count + ((state)->info ? (state)->info->blocked_open : 0)) - -#ifdef CONFIG_SERIAL_CORE_CONSOLE -#define uart_console(port) ((port)->cons && (port)->cons->index == (port)->line) -#else -#define uart_console(port) (0) -#endif - -static void uart_change_speed(struct uart_state *state, struct termios *old_termios); -static void uart_wait_until_sent(struct tty_struct *tty, int timeout); -static void uart_change_pm(struct uart_state *state, int pm_state); - -/* - * This routine is used by the interrupt handler to schedule processing in - * the software interrupt portion of the driver. - */ -void uart_write_wakeup(struct uart_port *port) -{ - struct uart_info *info = port->info; - tasklet_schedule(&info->tlet); -} - -static void uart_stop(struct tty_struct *tty) -{ - struct uart_state *state = tty->driver_data; - struct uart_port *port = state->port; - unsigned long flags; - - spin_lock_irqsave(&port->lock, flags); - port->ops->stop_tx(port, 1); - spin_unlock_irqrestore(&port->lock, flags); -} - -static void __uart_start(struct tty_struct *tty) -{ - struct uart_state *state = tty->driver_data; - struct uart_port *port = state->port; - - if (!uart_circ_empty(&state->info->xmit) && state->info->xmit.buf && - !tty->stopped && !tty->hw_stopped) - port->ops->start_tx(port, 1); -} - -static void uart_start(struct tty_struct *tty) -{ - struct uart_state *state = tty->driver_data; - struct uart_port *port = state->port; - unsigned long flags; - - spin_lock_irqsave(&port->lock, flags); - __uart_start(tty); - spin_unlock_irqrestore(&port->lock, flags); -} - -static void uart_tasklet_action(unsigned long data) -{ - struct uart_state *state = (struct uart_state *)data; - struct tty_struct *tty; - - tty = state->info->tty; - if (tty) { - if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) && - tty->ldisc.write_wakeup) - tty->ldisc.write_wakeup(tty); - wake_up_interruptible(&tty->write_wait); - } -} - -static inline void -uart_update_mctrl(struct uart_port *port, unsigned int set, unsigned int clear) -{ - unsigned long flags; - unsigned int old; - - spin_lock_irqsave(&port->lock, flags); - old = port->mctrl; - port->mctrl = (old & ~clear) | set; - if (old != port->mctrl) - port->ops->set_mctrl(port, port->mctrl); - spin_unlock_irqrestore(&port->lock, flags); -} - -#define uart_set_mctrl(port,set) uart_update_mctrl(port,set,0) -#define uart_clear_mctrl(port,clear) uart_update_mctrl(port,0,clear) - -/* - * Startup the port. This will be called once per open. All calls - * will be serialised by the per-port semaphore. - */ -static int uart_startup(struct uart_state *state, int init_hw) -{ - struct uart_info *info = state->info; - struct uart_port *port = state->port; - unsigned long page; - int retval = 0; - - if (info->flags & UIF_INITIALIZED) - return 0; - - /* - * Set the TTY IO error marker - we will only clear this - * once we have successfully opened the port. Also set - * up the tty->alt_speed kludge - */ - if (info->tty) - set_bit(TTY_IO_ERROR, &info->tty->flags); - - if (port->type == PORT_UNKNOWN) - return 0; - - /* - * Initialise and allocate the transmit and temporary - * buffer. - */ - if (!info->xmit.buf) { - page = get_zeroed_page(GFP_KERNEL); - if (!page) - return -ENOMEM; - - info->xmit.buf = (unsigned char *) page; - info->tmpbuf = info->xmit.buf + UART_XMIT_SIZE; - init_MUTEX(&info->tmpbuf_sem); - uart_circ_clear(&info->xmit); - } - - port->mctrl = 0; - - retval = port->ops->startup(port); - if (retval == 0) { - if (init_hw) { - /* - * Initialise the hardware port settings. - */ - uart_change_speed(state, NULL); - - /* - * Setup the RTS and DTR signals once the - * port is open and ready to respond. - */ - if (info->tty->termios->c_cflag & CBAUD) - uart_set_mctrl(port, TIOCM_RTS | TIOCM_DTR); - } - - info->flags |= UIF_INITIALIZED; - - clear_bit(TTY_IO_ERROR, &info->tty->flags); - } - - if (retval && capable(CAP_SYS_ADMIN)) - retval = 0; - - return retval; -} - -/* - * This routine will shutdown a serial port; interrupts are disabled, and - * DTR is dropped if the hangup on close termio flag is on. Calls to - * uart_shutdown are serialised by the per-port semaphore. - */ -static void uart_shutdown(struct uart_state *state) -{ - struct uart_info *info = state->info; - struct uart_port *port = state->port; - - if (!(info->flags & UIF_INITIALIZED)) - return; - - /* - * Turn off DTR and RTS early. - */ - if (!info->tty || (info->tty->termios->c_cflag & HUPCL)) - uart_clear_mctrl(port, TIOCM_DTR | TIOCM_RTS); - - /* - * clear delta_msr_wait queue to avoid mem leaks: we may free - * the irq here so the queue might never be woken up. Note - * that we won't end up waiting on delta_msr_wait again since - * any outstanding file descriptors should be pointing at - * hung_up_tty_fops now. - */ - wake_up_interruptible(&info->delta_msr_wait); - - /* - * Free the IRQ and disable the port. - */ - port->ops->shutdown(port); - - /* - * Ensure that the IRQ handler isn't running on another CPU. - */ - synchronize_irq(port->irq); - - /* - * Free the transmit buffer page. - */ - if (info->xmit.buf) { - free_page((unsigned long)info->xmit.buf); - info->xmit.buf = NULL; - info->tmpbuf = NULL; - } - - /* - * kill off our tasklet - */ - tasklet_kill(&info->tlet); - if (info->tty) - set_bit(TTY_IO_ERROR, &info->tty->flags); - - info->flags &= ~UIF_INITIALIZED; -} - -/** - * uart_update_timeout - update per-port FIFO timeout. - * @port: uart_port structure describing the port. - * @cflag: termios cflag value - * @quot: uart clock divisor quotient - * - * Set the port FIFO timeout value. The @cflag value should - * reflect the actual hardware settings. - */ -void -uart_update_timeout(struct uart_port *port, unsigned int cflag, - unsigned int baud) -{ - unsigned int bits; - - /* byte size and parity */ - switch (cflag & CSIZE) { - case CS5: - bits = 7; - break; - case CS6: - bits = 8; - break; - case CS7: - bits = 9; - break; - default: - bits = 10; - break; // CS8 - } - - if (cflag & CSTOPB) - bits++; - if (cflag & PARENB) - bits++; - - /* - * The total number of bits to be transmitted in the fifo. - */ - bits = bits * port->fifosize; - - /* - * Figure the timeout to send the above number of bits. - * Add .02 seconds of slop - */ - port->timeout = (HZ * bits) / baud + HZ/50; -} - -EXPORT_SYMBOL(uart_update_timeout); - -/** - * uart_get_baud_rate - return baud rate for a particular port - * @port: uart_port structure describing the port in question. - * @termios: desired termios settings. - * @old: old termios (or NULL) - * @min: minimum acceptable baud rate - * @max: maximum acceptable baud rate - * - * Decode the termios structure into a numeric baud rate, - * taking account of the magic 38400 baud rate (with spd_* - * flags), and mapping the %B0 rate to 9600 baud. - * - * If the new baud rate is invalid, try the old termios setting. - * If it's still invalid, we try 9600 baud. - * - * Update the @termios structure to reflect the baud rate - * we're actually going to be using. - */ -unsigned int -uart_get_baud_rate(struct uart_port *port, struct termios *termios, - struct termios *old, unsigned int min, unsigned int max) -{ - unsigned int try, baud, altbaud = 38400; - unsigned int flags = port->flags & UPF_SPD_MASK; - - if (flags == UPF_SPD_HI) - altbaud = 57600; - if (flags == UPF_SPD_VHI) - altbaud = 115200; - if (flags == UPF_SPD_SHI) - altbaud = 230400; - if (flags == UPF_SPD_WARP) - altbaud = 460800; - - for (try = 0; try < 2; try++) { - baud = tty_termios_baud_rate(termios); - - /* - * The spd_hi, spd_vhi, spd_shi, spd_warp kludge... - * Die! Die! Die! - */ - if (baud == 38400) - baud = altbaud; - - /* - * Special case: B0 rate. - */ - if (baud == 0) - baud = 9600; - - if (baud >= min && baud <= max) - return baud; - - /* - * Oops, the quotient was zero. Try again with - * the old baud rate if possible. - */ - termios->c_cflag &= ~CBAUD; - if (old) { - termios->c_cflag |= old->c_cflag & CBAUD; - old = NULL; - continue; - } - - /* - * As a last resort, if the quotient is zero, - * default to 9600 bps - */ - termios->c_cflag |= B9600; - } - - return 0; -} - -EXPORT_SYMBOL(uart_get_baud_rate); - -/** - * uart_get_divisor - return uart clock divisor - * @port: uart_port structure describing the port. - * @baud: desired baud rate - * - * Calculate the uart clock divisor for the port. - */ -unsigned int -uart_get_divisor(struct uart_port *port, unsigned int baud) -{ - unsigned int quot; - - /* - * Old custom speed handling. - */ - if (baud == 38400 && (port->flags & UPF_SPD_MASK) == UPF_SPD_CUST) - quot = port->custom_divisor; - else - quot = port->uartclk / (16 * baud); - - return quot; -} - -EXPORT_SYMBOL(uart_get_divisor); - -static void -uart_change_speed(struct uart_state *state, struct termios *old_termios) -{ - struct tty_struct *tty = state->info->tty; - struct uart_port *port = state->port; - struct termios *termios; - - /* - * If we have no tty, termios, or the port does not exist, - * then we can't set the parameters for this port. - */ - if (!tty || !tty->termios || port->type == PORT_UNKNOWN) - return; - - termios = tty->termios; - - /* - * Set flags based on termios cflag - */ - if (termios->c_cflag & CRTSCTS) - state->info->flags |= UIF_CTS_FLOW; - else - state->info->flags &= ~UIF_CTS_FLOW; - - if (termios->c_cflag & CLOCAL) - state->info->flags &= ~UIF_CHECK_CD; - else - state->info->flags |= UIF_CHECK_CD; - - port->ops->set_termios(port, termios, old_termios); -} - -static inline void -__uart_put_char(struct uart_port *port, struct circ_buf *circ, unsigned char c) -{ - unsigned long flags; - - if (!circ->buf) - return; - - spin_lock_irqsave(&port->lock, flags); - if (uart_circ_chars_free(circ) != 0) { - circ->buf[circ->head] = c; - circ->head = (circ->head + 1) & (UART_XMIT_SIZE - 1); - } - spin_unlock_irqrestore(&port->lock, flags); -} - -static inline int -__uart_user_write(struct uart_port *port, struct circ_buf *circ, - const unsigned char *buf, int count) -{ - unsigned long flags; - int c, ret = 0; - - if (down_interruptible(&port->info->tmpbuf_sem)) - return -EINTR; - - while (1) { - int c1; - c = CIRC_SPACE_TO_END(circ->head, circ->tail, UART_XMIT_SIZE); - if (count < c) - c = count; - if (c <= 0) - break; - - c -= copy_from_user(port->info->tmpbuf, buf, c); - if (!c) { - if (!ret) - ret = -EFAULT; - break; - } - spin_lock_irqsave(&port->lock, flags); - c1 = CIRC_SPACE_TO_END(circ->head, circ->tail, UART_XMIT_SIZE); - if (c1 < c) - c = c1; - memcpy(circ->buf + circ->head, port->info->tmpbuf, c); - circ->head = (circ->head + c) & (UART_XMIT_SIZE - 1); - spin_unlock_irqrestore(&port->lock, flags); - buf += c; - count -= c; - ret += c; - } - up(&port->info->tmpbuf_sem); - - return ret; -} - -static inline int -__uart_kern_write(struct uart_port *port, struct circ_buf *circ, - const unsigned char *buf, int count) -{ - unsigned long flags; - int c, ret = 0; - - spin_lock_irqsave(&port->lock, flags); - while (1) { - c = CIRC_SPACE_TO_END(circ->head, circ->tail, UART_XMIT_SIZE); - if (count < c) - c = count; - if (c <= 0) - break; - memcpy(circ->buf + circ->head, buf, c); - circ->head = (circ->head + c) & (UART_XMIT_SIZE - 1); - buf += c; - count -= c; - ret += c; - } - spin_unlock_irqrestore(&port->lock, flags); - - return ret; -} - -static void uart_put_char(struct tty_struct *tty, unsigned char ch) -{ - struct uart_state *state = tty->driver_data; - - if (tty) - __uart_put_char(state->port, &state->info->xmit, ch); -} - -static void uart_flush_chars(struct tty_struct *tty) -{ - uart_start(tty); -} - -static int -uart_write(struct tty_struct *tty, int from_user, const unsigned char * buf, - int count) -{ - struct uart_state *state = tty->driver_data; - int ret; - - if (!tty || !state->info->xmit.buf) - return 0; - - if (from_user) - ret = __uart_user_write(state->port, &state->info->xmit, buf, count); - else - ret = __uart_kern_write(state->port, &state->info->xmit, buf, count); - - uart_start(tty); - return ret; -} - -static int uart_write_room(struct tty_struct *tty) -{ - struct uart_state *state = tty->driver_data; - - return uart_circ_chars_free(&state->info->xmit); -} - -static int uart_chars_in_buffer(struct tty_struct *tty) -{ - struct uart_state *state = tty->driver_data; - - return uart_circ_chars_pending(&state->info->xmit); -} - -static void uart_flush_buffer(struct tty_struct *tty) -{ - struct uart_state *state = tty->driver_data; - struct uart_port *port = state->port; - unsigned long flags; - - DPRINTK("uart_flush_buffer(%d) called\n", tty->index); - - spin_lock_irqsave(&port->lock, flags); - uart_circ_clear(&state->info->xmit); - spin_unlock_irqrestore(&port->lock, flags); - wake_up_interruptible(&tty->write_wait); - if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) && - tty->ldisc.write_wakeup) - (tty->ldisc.write_wakeup)(tty); -} - -/* - * This function is used to send a high-priority XON/XOFF character to - * the device - */ -static void uart_send_xchar(struct tty_struct *tty, char ch) -{ - struct uart_state *state = tty->driver_data; - struct uart_port *port = state->port; - unsigned long flags; - - if (port->ops->send_xchar) - port->ops->send_xchar(port, ch); - else { - port->x_char = ch; - if (ch) { - spin_lock_irqsave(&port->lock, flags); - port->ops->start_tx(port, 0); - spin_unlock_irqrestore(&port->lock, flags); - } - } -} - -static void uart_throttle(struct tty_struct *tty) -{ - struct uart_state *state = tty->driver_data; - - if (I_IXOFF(tty)) - uart_send_xchar(tty, STOP_CHAR(tty)); - - if (tty->termios->c_cflag & CRTSCTS) - uart_clear_mctrl(state->port, TIOCM_RTS); -} - -static void uart_unthrottle(struct tty_struct *tty) -{ - struct uart_state *state = tty->driver_data; - struct uart_port *port = state->port; - - if (I_IXOFF(tty)) { - if (port->x_char) - port->x_char = 0; - else - uart_send_xchar(tty, START_CHAR(tty)); - } - - if (tty->termios->c_cflag & CRTSCTS) - uart_set_mctrl(port, TIOCM_RTS); -} - -static int uart_get_info(struct uart_state *state, struct serial_struct *retinfo) -{ - struct uart_port *port = state->port; - struct serial_struct tmp; - - memset(&tmp, 0, sizeof(tmp)); - tmp.type = port->type; - tmp.line = port->line; - tmp.port = port->iobase; - if (HIGH_BITS_OFFSET) - tmp.port_high = (long) port->iobase >> HIGH_BITS_OFFSET; - tmp.irq = port->irq; - tmp.flags = port->flags; - tmp.xmit_fifo_size = port->fifosize; - tmp.baud_base = port->uartclk / 16; - tmp.close_delay = state->close_delay; - tmp.closing_wait = state->closing_wait; - tmp.custom_divisor = port->custom_divisor; - tmp.hub6 = port->hub6; - tmp.io_type = port->iotype; - tmp.iomem_reg_shift = port->regshift; - tmp.iomem_base = (void *)port->mapbase; - - if (copy_to_user(retinfo, &tmp, sizeof(*retinfo))) - return -EFAULT; - return 0; -} - -static int -uart_set_info(struct uart_state *state, struct serial_struct *newinfo) -{ - struct serial_struct new_serial; - struct uart_port *port = state->port; - unsigned long new_port; - unsigned int change_irq, change_port, old_flags; - unsigned int old_custom_divisor; - int retval = 0; - - if (copy_from_user(&new_serial, newinfo, sizeof(new_serial))) - return -EFAULT; - - new_port = new_serial.port; - if (HIGH_BITS_OFFSET) - new_port += (unsigned long) new_serial.port_high << HIGH_BITS_OFFSET; - - new_serial.irq = irq_canonicalize(new_serial.irq); - - /* - * This semaphore protects state->count. It is also - * very useful to prevent opens. Also, take the - * port configuration semaphore to make sure that a - * module insertion/removal doesn't change anything - * under us. - */ - down(&state->sem); - - change_irq = new_serial.irq != port->irq; - - /* - * Since changing the 'type' of the port changes its resource - * allocations, we should treat type changes the same as - * IO port changes. - */ - change_port = new_port != port->iobase || - (unsigned long)new_serial.iomem_base != port->mapbase || - new_serial.hub6 != port->hub6 || - new_serial.io_type != port->iotype || - new_serial.iomem_reg_shift != port->regshift || - new_serial.type != port->type; - - old_flags = port->flags; - old_custom_divisor = port->custom_divisor; - - if (!capable(CAP_SYS_ADMIN)) { - retval = -EPERM; - if (change_irq || change_port || - (new_serial.baud_base != port->uartclk / 16) || - (new_serial.close_delay != state->close_delay) || - (new_serial.closing_wait != state->closing_wait) || - (new_serial.xmit_fifo_size != port->fifosize) || - (((new_serial.flags ^ old_flags) & ~UPF_USR_MASK) != 0)) - goto exit; - port->flags = ((port->flags & ~UPF_USR_MASK) | - (new_serial.flags & UPF_USR_MASK)); - port->custom_divisor = new_serial.custom_divisor; - goto check_and_exit; - } - - /* - * Ask the low level driver to verify the settings. - */ - if (port->ops->verify_port) - retval = port->ops->verify_port(port, &new_serial); - - if ((new_serial.irq >= NR_IRQS) || (new_serial.irq < 0) || - (new_serial.baud_base < 9600)) - retval = -EINVAL; - - if (retval) - goto exit; - - if (change_port || change_irq) { - retval = -EBUSY; - - /* - * Make sure that we are the sole user of this port. - */ - if (uart_users(state) > 1) - goto exit; - - /* - * We need to shutdown the serial port at the old - * port/type/irq combination. - */ - uart_shutdown(state); - } - - if (change_port) { - unsigned long old_iobase, old_mapbase; - unsigned int old_type, old_iotype, old_hub6, old_shift; - - old_iobase = port->iobase; - old_mapbase = port->mapbase; - old_type = port->type; - old_hub6 = port->hub6; - old_iotype = port->iotype; - old_shift = port->regshift; - - /* - * Free and release old regions - */ - if (old_type != PORT_UNKNOWN) - port->ops->release_port(port); - - port->iobase = new_port; - port->type = new_serial.type; - port->hub6 = new_serial.hub6; - port->iotype = new_serial.io_type; - port->regshift = new_serial.iomem_reg_shift; - port->mapbase = (unsigned long)new_serial.iomem_base; - - /* - * Claim and map the new regions - */ - if (port->type != PORT_UNKNOWN) { - retval = port->ops->request_port(port); - } else { - /* Always success - Jean II */ - retval = 0; - } - - /* - * If we fail to request resources for the - * new port, try to restore the old settings. - */ - if (retval && old_type != PORT_UNKNOWN) { - port->iobase = old_iobase; - port->type = old_type; - port->hub6 = old_hub6; - port->iotype = old_iotype; - port->regshift = old_shift; - port->mapbase = old_mapbase; - retval = port->ops->request_port(port); - /* - * If we failed to restore the old settings, - * we fail like this. - */ - if (retval) - port->type = PORT_UNKNOWN; - - /* - * We failed anyway. - */ - retval = -EBUSY; - } - } - - port->irq = new_serial.irq; - port->uartclk = new_serial.baud_base * 16; - port->flags = (port->flags & ~UPF_CHANGE_MASK) | - (new_serial.flags & UPF_CHANGE_MASK); - port->custom_divisor = new_serial.custom_divisor; - state->close_delay = new_serial.close_delay * HZ / 100; - state->closing_wait = new_serial.closing_wait * HZ / 100; - port->fifosize = new_serial.xmit_fifo_size; - if (state->info->tty) - state->info->tty->low_latency = - (port->flags & UPF_LOW_LATENCY) ? 1 : 0; - - check_and_exit: - retval = 0; - if (port->type == PORT_UNKNOWN) - goto exit; - if (state->info->flags & UIF_INITIALIZED) { - if (((old_flags ^ port->flags) & UPF_SPD_MASK) || - old_custom_divisor != port->custom_divisor) { - /* If they're setting up a custom divisor or speed, - * instead of clearing it, then bitch about it. No - * need to rate-limit; it's CAP_SYS_ADMIN only. */ - if (port->flags & UPF_SPD_MASK) { - printk(KERN_NOTICE "%s sets custom speed on %s%d. This is deprecated.\n", - current->comm, state->info->tty->driver->name, - state->port->line); - } - uart_change_speed(state, NULL); - } - } else - retval = uart_startup(state, 1); - exit: - up(&state->sem); - return retval; -} - - -/* - * uart_get_lsr_info - get line status register info. - * Note: uart_ioctl protects us against hangups. - */ -static int uart_get_lsr_info(struct uart_state *state, unsigned int *value) -{ - struct uart_port *port = state->port; - unsigned int result; - - result = port->ops->tx_empty(port); - - /* - * If we're about to load something into the transmit - * register, we'll pretend the transmitter isn't empty to - * avoid a race condition (depending on when the transmit - * interrupt happens). - */ - if (port->x_char || - ((uart_circ_chars_pending(&state->info->xmit) > 0) && - !state->info->tty->stopped && !state->info->tty->hw_stopped)) - result &= ~TIOCSER_TEMT; - - return put_user(result, value); -} - -static int uart_tiocmget(struct tty_struct *tty, struct file *file) -{ - struct uart_state *state = tty->driver_data; - struct uart_port *port = state->port; - int result = -EIO; - - down(&state->sem); - if ((!file || !tty_hung_up_p(file)) && - !(tty->flags & (1 << TTY_IO_ERROR))) { - result = port->mctrl; - result |= port->ops->get_mctrl(port); - } - up(&state->sem); - - return result; -} - -static int -uart_tiocmset(struct tty_struct *tty, struct file *file, - unsigned int set, unsigned int clear) -{ - struct uart_state *state = tty->driver_data; - struct uart_port *port = state->port; - int ret = -EIO; - - down(&state->sem); - if ((!file || !tty_hung_up_p(file)) && - !(tty->flags & (1 << TTY_IO_ERROR))) { - uart_update_mctrl(port, set, clear); - ret = 0; - } - up(&state->sem); - return ret; -} - -static void uart_break_ctl(struct tty_struct *tty, int break_state) -{ - struct uart_state *state = tty->driver_data; - struct uart_port *port = state->port; - - BUG_ON(!kernel_locked()); - - down(&state->sem); - - if (port->type != PORT_UNKNOWN) - port->ops->break_ctl(port, break_state); - - up(&state->sem); -} - -static int uart_do_autoconfig(struct uart_state *state) -{ - struct uart_port *port = state->port; - int flags, ret; - - if (!capable(CAP_SYS_ADMIN)) - return -EPERM; - - /* - * Take the per-port semaphore. This prevents count from - * changing, and hence any extra opens of the port while - * we're auto-configuring. - */ - if (down_interruptible(&state->sem)) - return -ERESTARTSYS; - - ret = -EBUSY; - if (uart_users(state) == 1) { - uart_shutdown(state); - - /* - * If we already have a port type configured, - * we must release its resources. - */ - if (port->type != PORT_UNKNOWN) - port->ops->release_port(port); - - flags = UART_CONFIG_TYPE; - if (port->flags & UPF_AUTO_IRQ) - flags |= UART_CONFIG_IRQ; - - /* - * This will claim the ports resources if - * a port is found. - */ - port->ops->config_port(port, flags); - - ret = uart_startup(state, 1); - } - up(&state->sem); - return ret; -} - -/* - * Wait for any of the 4 modem inputs (DCD,RI,DSR,CTS) to change - * - mask passed in arg for lines of interest - * (use |'ed TIOCM_RNG/DSR/CD/CTS for masking) - * Caller should use TIOCGICOUNT to see which one it was - */ -static int -uart_wait_modem_status(struct uart_state *state, unsigned long arg) -{ - struct uart_port *port = state->port; - DECLARE_WAITQUEUE(wait, current); - struct uart_icount cprev, cnow; - int ret; - - /* - * note the counters on entry - */ - spin_lock_irq(&port->lock); - memcpy(&cprev, &port->icount, sizeof(struct uart_icount)); - - /* - * Force modem status interrupts on - */ - port->ops->enable_ms(port); - spin_unlock_irq(&port->lock); - - add_wait_queue(&state->info->delta_msr_wait, &wait); - for (;;) { - spin_lock_irq(&port->lock); - memcpy(&cnow, &port->icount, sizeof(struct uart_icount)); - spin_unlock_irq(&port->lock); - - set_current_state(TASK_INTERRUPTIBLE); - - if (((arg & TIOCM_RNG) && (cnow.rng != cprev.rng)) || - ((arg & TIOCM_DSR) && (cnow.dsr != cprev.dsr)) || - ((arg & TIOCM_CD) && (cnow.dcd != cprev.dcd)) || - ((arg & TIOCM_CTS) && (cnow.cts != cprev.cts))) { - ret = 0; - break; - } - - schedule(); - - /* see if a signal did it */ - if (signal_pending(current)) { - ret = -ERESTARTSYS; - break; - } - - cprev = cnow; - } - - current->state = TASK_RUNNING; - remove_wait_queue(&state->info->delta_msr_wait, &wait); - - return ret; -} - -/* - * Get counter of input serial line interrupts (DCD,RI,DSR,CTS) - * Return: write counters to the user passed counter struct - * NB: both 1->0 and 0->1 transitions are counted except for - * RI where only 0->1 is counted. - */ -static int -uart_get_count(struct uart_state *state, struct serial_icounter_struct *icnt) -{ - struct serial_icounter_struct icount; - struct uart_icount cnow; - struct uart_port *port = state->port; - - spin_lock_irq(&port->lock); - memcpy(&cnow, &port->icount, sizeof(struct uart_icount)); - spin_unlock_irq(&port->lock); - - icount.cts = cnow.cts; - icount.dsr = cnow.dsr; - icount.rng = cnow.rng; - icount.dcd = cnow.dcd; - icount.rx = cnow.rx; - icount.tx = cnow.tx; - icount.frame = cnow.frame; - icount.overrun = cnow.overrun; - icount.parity = cnow.parity; - icount.brk = cnow.brk; - icount.buf_overrun = cnow.buf_overrun; - - return copy_to_user(icnt, &icount, sizeof(icount)) ? -EFAULT : 0; -} - -/* - * Called via sys_ioctl under the BKL. We can use spin_lock_irq() here. - */ -static int -uart_ioctl(struct tty_struct *tty, struct file *filp, unsigned int cmd, - unsigned long arg) -{ - struct uart_state *state = tty->driver_data; - int ret = -ENOIOCTLCMD; - - BUG_ON(!kernel_locked()); - - /* - * These ioctls don't rely on the hardware to be present. - */ - switch (cmd) { - case TIOCGSERIAL: - ret = uart_get_info(state, (struct serial_struct *)arg); - break; - - case TIOCSSERIAL: - ret = uart_set_info(state, (struct serial_struct *)arg); - break; - - case TIOCSERCONFIG: - ret = uart_do_autoconfig(state); - break; - - case TIOCSERGWILD: /* obsolete */ - case TIOCSERSWILD: /* obsolete */ - ret = 0; - break; - } - - if (ret != -ENOIOCTLCMD) - goto out; - - if (tty->flags & (1 << TTY_IO_ERROR)) { - ret = -EIO; - goto out; - } - - /* - * The following should only be used when hardware is present. - */ - switch (cmd) { - case TIOCMIWAIT: - ret = uart_wait_modem_status(state, arg); - break; - - case TIOCGICOUNT: - ret = uart_get_count(state, (struct serial_icounter_struct *)arg); - break; - } - - if (ret != -ENOIOCTLCMD) - goto out; - - down(&state->sem); - - if (tty_hung_up_p(filp)) { - ret = -EIO; - goto out_up; - } - - /* - * All these rely on hardware being present and need to be - * protected against the tty being hung up. - */ - switch (cmd) { - case TIOCSERGETLSR: /* Get line status register */ - ret = uart_get_lsr_info(state, (unsigned int *)arg); - break; - - default: { - struct uart_port *port = state->port; - if (port->ops->ioctl) - ret = port->ops->ioctl(port, cmd, arg); - break; - } - } - out_up: - up(&state->sem); - out: - return ret; -} - -static void uart_set_termios(struct tty_struct *tty, struct termios *old_termios) -{ - struct uart_state *state = tty->driver_data; - unsigned long flags; - unsigned int cflag = tty->termios->c_cflag; - - BUG_ON(!kernel_locked()); - - /* - * These are the bits that are used to setup various - * flags in the low level driver. - */ -#define RELEVANT_IFLAG(iflag) ((iflag) & (IGNBRK|BRKINT|IGNPAR|PARMRK|INPCK)) - - if ((cflag ^ old_termios->c_cflag) == 0 && - RELEVANT_IFLAG(tty->termios->c_iflag ^ old_termios->c_iflag) == 0) - return; - - uart_change_speed(state, old_termios); - - /* Handle transition to B0 status */ - if ((old_termios->c_cflag & CBAUD) && !(cflag & CBAUD)) - uart_clear_mctrl(state->port, TIOCM_RTS | TIOCM_DTR); - - /* Handle transition away from B0 status */ - if (!(old_termios->c_cflag & CBAUD) && (cflag & CBAUD)) { - unsigned int mask = TIOCM_DTR; - if (!(cflag & CRTSCTS) || - !test_bit(TTY_THROTTLED, &tty->flags)) - mask |= TIOCM_RTS; - uart_set_mctrl(state->port, mask); - } - - /* Handle turning off CRTSCTS */ - if ((old_termios->c_cflag & CRTSCTS) && !(cflag & CRTSCTS)) { - spin_lock_irqsave(&state->port->lock, flags); - tty->hw_stopped = 0; - __uart_start(tty); - spin_unlock_irqrestore(&state->port->lock, flags); - } - -#if 0 - /* - * No need to wake up processes in open wait, since they - * sample the CLOCAL flag once, and don't recheck it. - * XXX It's not clear whether the current behavior is correct - * or not. Hence, this may change..... - */ - if (!(old_termios->c_cflag & CLOCAL) && - (tty->termios->c_cflag & CLOCAL)) - wake_up_interruptible(&state->info->open_wait); -#endif -} - -/* - * In 2.4.5, calls to this will be serialized via the BKL in - * linux/drivers/char/tty_io.c:tty_release() - * linux/drivers/char/tty_io.c:do_tty_handup() - */ -static void uart_close(struct tty_struct *tty, struct file *filp) -{ - struct uart_state *state = tty->driver_data; - struct uart_port *port = state->port; - - BUG_ON(!kernel_locked()); - DPRINTK("uart_close(%d) called\n", port->line); - - down(&state->sem); - - if (tty_hung_up_p(filp)) - goto done; - - if ((tty->count == 1) && (state->count != 1)) { - /* - * Uh, oh. tty->count is 1, which means that the tty - * structure will be freed. state->count should always - * be one in these conditions. If it's greater than - * one, we've got real problems, since it means the - * serial port won't be shutdown. - */ - printk("uart_close: bad serial port count; tty->count is 1, " - "state->count is %d\n", state->count); - state->count = 1; - } - if (--state->count < 0) { - printk("rs_close: bad serial port count for %s: %d\n", - tty->name, state->count); - state->count = 0; - } - if (state->count) - goto done; - - /* - * Now we wait for the transmit buffer to clear; and we notify - * the line discipline to only process XON/XOFF characters by - * setting tty->closing. - */ - tty->closing = 1; - - if (state->closing_wait != USF_CLOSING_WAIT_NONE) - tty_wait_until_sent(tty, state->closing_wait); - - /* - * At this point, we stop accepting input. To do this, we - * disable the receive line status interrupts. - */ - if (state->info->flags & UIF_INITIALIZED) { - unsigned long flags; - spin_lock_irqsave(&port->lock, flags); - port->ops->stop_rx(port); - spin_unlock_irqrestore(&port->lock, flags); - /* - * Before we drop DTR, make sure the UART transmitter - * has completely drained; this is especially - * important if there is a transmit FIFO! - */ - uart_wait_until_sent(tty, port->timeout); - } - - uart_shutdown(state); - uart_flush_buffer(tty); - if (tty->ldisc.flush_buffer) - tty->ldisc.flush_buffer(tty); - tty->closing = 0; - state->info->tty = NULL; - - if (state->info->blocked_open) { - if (state->close_delay) { - set_current_state(TASK_INTERRUPTIBLE); - schedule_timeout(state->close_delay); - set_current_state(TASK_RUNNING); - } - } else if (!uart_console(port)) { - uart_change_pm(state, 3); - } - - /* - * Wake up anyone trying to open this port. - */ - state->info->flags &= ~UIF_NORMAL_ACTIVE; - wake_up_interruptible(&state->info->open_wait); - - done: - up(&state->sem); -} - -static void uart_wait_until_sent(struct tty_struct *tty, int timeout) -{ - struct uart_state *state = tty->driver_data; - struct uart_port *port = state->port; - unsigned long char_time, expire; - - BUG_ON(!kernel_locked()); - - if (port->type == PORT_UNKNOWN || port->fifosize == 0) - return; - - /* - * Set the check interval to be 1/5 of the estimated time to - * send a single character, and make it at least 1. The check - * interval should also be less than the timeout. - * - * Note: we have to use pretty tight timings here to satisfy - * the NIST-PCTS. - */ - char_time = (port->timeout - HZ/50) / port->fifosize; - char_time = char_time / 5; - if (char_time == 0) - char_time = 1; - if (timeout && timeout < char_time) - char_time = timeout; - - /* - * If the transmitter hasn't cleared in twice the approximate - * amount of time to send the entire FIFO, it probably won't - * ever clear. This assumes the UART isn't doing flow - * control, which is currently the case. Hence, if it ever - * takes longer than port->timeout, this is probably due to a - * UART bug of some kind. So, we clamp the timeout parameter at - * 2*port->timeout. - */ - if (timeout == 0 || timeout > 2 * port->timeout) - timeout = 2 * port->timeout; - - expire = jiffies + timeout; - - DPRINTK("uart_wait_until_sent(%d), jiffies=%lu, expire=%lu...\n", - port->line, jiffies, expire); - - /* - * Check whether the transmitter is empty every 'char_time'. - * 'timeout' / 'expire' give us the maximum amount of time - * we wait. - */ - while (!port->ops->tx_empty(port)) { - set_current_state(TASK_INTERRUPTIBLE); - schedule_timeout(char_time); - if (signal_pending(current)) - break; - if (time_after(jiffies, expire)) - break; - } - set_current_state(TASK_RUNNING); /* might not be needed */ -} - -/* - * This is called with the BKL held in - * linux/drivers/char/tty_io.c:do_tty_hangup() - * We're called from the eventd thread, so we can sleep for - * a _short_ time only. - */ -static void uart_hangup(struct tty_struct *tty) -{ - struct uart_state *state = tty->driver_data; - - BUG_ON(!kernel_locked()); - DPRINTK("uart_hangup(%d)\n", state->port->line); - - down(&state->sem); - if (state->info && state->info->flags & UIF_NORMAL_ACTIVE) { - uart_flush_buffer(tty); - uart_shutdown(state); - state->count = 0; - state->info->flags &= ~UIF_NORMAL_ACTIVE; - state->info->tty = NULL; - wake_up_interruptible(&state->info->open_wait); - wake_up_interruptible(&state->info->delta_msr_wait); - } - up(&state->sem); -} - -/* - * Copy across the serial console cflag setting into the termios settings - * for the initial open of the port. This allows continuity between the - * kernel settings, and the settings init adopts when it opens the port - * for the first time. - */ -static void uart_update_termios(struct uart_state *state) -{ - struct tty_struct *tty = state->info->tty; - struct uart_port *port = state->port; - - if (uart_console(port) && port->cons->cflag) { - tty->termios->c_cflag = port->cons->cflag; - port->cons->cflag = 0; - } - - /* - * If the device failed to grab its irq resources, - * or some other error occurred, don't try to talk - * to the port hardware. - */ - if (!(tty->flags & (1 << TTY_IO_ERROR))) { - /* - * Make termios settings take effect. - */ - uart_change_speed(state, NULL); - - /* - * And finally enable the RTS and DTR signals. - */ - if (tty->termios->c_cflag & CBAUD) - uart_set_mctrl(port, TIOCM_DTR | TIOCM_RTS); - } -} - -/* - * Block the open until the port is ready. We must be called with - * the per-port semaphore held. - */ -static int -uart_block_til_ready(struct file *filp, struct uart_state *state) -{ - DECLARE_WAITQUEUE(wait, current); - struct uart_info *info = state->info; - struct uart_port *port = state->port; - - info->blocked_open++; - state->count--; - - add_wait_queue(&info->open_wait, &wait); - while (1) { - set_current_state(TASK_INTERRUPTIBLE); - - /* - * If we have been hung up, tell userspace/restart open. - */ - if (tty_hung_up_p(filp) || info->tty == NULL) - break; - - /* - * If the port has been closed, tell userspace/restart open. - */ - if (!(info->flags & UIF_INITIALIZED)) - break; - - /* - * If non-blocking mode is set, or CLOCAL mode is set, - * we don't want to wait for the modem status lines to - * indicate that the port is ready. - * - * Also, if the port is not enabled/configured, we want - * to allow the open to succeed here. Note that we will - * have set TTY_IO_ERROR for a non-existant port. - */ - if ((filp->f_flags & O_NONBLOCK) || - (info->tty->termios->c_cflag & CLOCAL) || - (info->tty->flags & (1 << TTY_IO_ERROR))) { - break; - } - - /* - * Set DTR to allow modem to know we're waiting. Do - * not set RTS here - we want to make sure we catch - * the data from the modem. - */ - if (info->tty->termios->c_cflag & CBAUD) - uart_set_mctrl(port, TIOCM_DTR); - - /* - * and wait for the carrier to indicate that the - * modem is ready for us. - */ - if (port->ops->get_mctrl(port) & TIOCM_CAR) - break; - - up(&state->sem); - schedule(); - down(&state->sem); - - if (signal_pending(current)) - break; - } - set_current_state(TASK_RUNNING); - remove_wait_queue(&info->open_wait, &wait); - - state->count++; - info->blocked_open--; - - if (signal_pending(current)) - return -ERESTARTSYS; - - if (!info->tty || tty_hung_up_p(filp)) - return -EAGAIN; - - return 0; -} - -static struct uart_state *uart_get(struct uart_driver *drv, int line) -{ - struct uart_state *state; - - down(&port_sem); - state = drv->state + line; - if (down_interruptible(&state->sem)) { - state = ERR_PTR(-ERESTARTSYS); - goto out; - } - - state->count++; - if (!state->port) { - state->count--; - up(&state->sem); - state = ERR_PTR(-ENXIO); - goto out; - } - - if (!state->info) { - state->info = kmalloc(sizeof(struct uart_info), GFP_KERNEL); - if (state->info) { - memset(state->info, 0, sizeof(struct uart_info)); - init_waitqueue_head(&state->info->open_wait); - init_waitqueue_head(&state->info->delta_msr_wait); - - /* - * Link the info into the other structures. - */ - state->port->info = state->info; - - tasklet_init(&state->info->tlet, uart_tasklet_action, - (unsigned long)state); - } else { - state->count--; - up(&state->sem); - state = ERR_PTR(-ENOMEM); - } - } - - out: - up(&port_sem); - return state; -} - -/* - * In 2.4.5, calls to uart_open are serialised by the BKL in - * linux/fs/devices.c:chrdev_open() - * Note that if this fails, then uart_close() _will_ be called. - * - * In time, we want to scrap the "opening nonpresent ports" - * behaviour and implement an alternative way for setserial - * to set base addresses/ports/types. This will allow us to - * get rid of a certain amount of extra tests. - */ -static int uart_open(struct tty_struct *tty, struct file *filp) -{ - struct uart_driver *drv = (struct uart_driver *)tty->driver->driver_state; - struct uart_state *state; - int retval, line = tty->index; - - BUG_ON(!kernel_locked()); - DPRINTK("uart_open(%d) called\n", line); - - /* - * tty->driver->num won't change, so we won't fail here with - * tty->driver_data set to something non-NULL (and therefore - * we won't get caught by uart_close()). - */ - retval = -ENODEV; - if (line >= tty->driver->num) - goto fail; - - /* - * We take the semaphore inside uart_get to guarantee that we won't - * be re-entered while allocating the info structure, or while we - * request any IRQs that the driver may need. This also has the nice - * side-effect that it delays the action of uart_hangup, so we can - * guarantee that info->tty will always contain something reasonable. - */ - state = uart_get(drv, line); - if (IS_ERR(state)) { - retval = PTR_ERR(state); - goto fail; - } - - /* - * Once we set tty->driver_data here, we are guaranteed that - * uart_close() will decrement the driver module use count. - * Any failures from here onwards should not touch the count. - */ - tty->driver_data = state; - tty->low_latency = (state->port->flags & UPF_LOW_LATENCY) ? 1 : 0; - tty->alt_speed = 0; - state->info->tty = tty; - - /* - * If the port is in the middle of closing, bail out now. - */ - if (tty_hung_up_p(filp)) { - retval = -EAGAIN; - state->count--; - up(&state->sem); - goto fail; - } - - /* - * Make sure the device is in D0 state. - */ - if (state->count == 1) - uart_change_pm(state, 0); - - /* - * Start up the serial port. - */ - retval = uart_startup(state, 0); - - /* - * If we succeeded, wait until the port is ready. - */ - if (retval == 0) - retval = uart_block_til_ready(filp, state); - up(&state->sem); - - /* - * If this is the first open to succeed, adjust things to suit. - */ - if (retval == 0 && !(state->info->flags & UIF_NORMAL_ACTIVE)) { - state->info->flags |= UIF_NORMAL_ACTIVE; - - uart_update_termios(state); - } - - fail: - return retval; -} - -static const char *uart_type(struct uart_port *port) -{ - const char *str = NULL; - - if (port->ops->type) - str = port->ops->type(port); - - if (!str) - str = "unknown"; - - return str; -} - -#ifdef CONFIG_PROC_FS - -static int uart_line_info(char *buf, struct uart_driver *drv, int i) -{ - struct uart_state *state = drv->state + i; - struct uart_port *port = state->port; - char stat_buf[32]; - unsigned int status; - int ret; - - if (!port) - return 0; - - ret = sprintf(buf, "%d: uart:%s port:%08X irq:%d", - port->line, uart_type(port), - port->iobase, port->irq); - - if (port->type == PORT_UNKNOWN) { - strcat(buf, "\n"); - return ret + 1; - } - - if(capable(CAP_SYS_ADMIN)) - { - status = port->ops->get_mctrl(port); - - ret += sprintf(buf + ret, " tx:%d rx:%d", - port->icount.tx, port->icount.rx); - if (port->icount.frame) - ret += sprintf(buf + ret, " fe:%d", - port->icount.frame); - if (port->icount.parity) - ret += sprintf(buf + ret, " pe:%d", - port->icount.parity); - if (port->icount.brk) - ret += sprintf(buf + ret, " brk:%d", - port->icount.brk); - if (port->icount.overrun) - ret += sprintf(buf + ret, " oe:%d", - port->icount.overrun); - -#define INFOBIT(bit,str) \ - if (port->mctrl & (bit)) \ - strncat(stat_buf, (str), sizeof(stat_buf) - \ - strlen(stat_buf) - 2) -#define STATBIT(bit,str) \ - if (status & (bit)) \ - strncat(stat_buf, (str), sizeof(stat_buf) - \ - strlen(stat_buf) - 2) - - stat_buf[0] = '\0'; - stat_buf[1] = '\0'; - INFOBIT(TIOCM_RTS, "|RTS"); - STATBIT(TIOCM_CTS, "|CTS"); - INFOBIT(TIOCM_DTR, "|DTR"); - STATBIT(TIOCM_DSR, "|DSR"); - STATBIT(TIOCM_CAR, "|CD"); - STATBIT(TIOCM_RNG, "|RI"); - if (stat_buf[0]) - stat_buf[0] = ' '; - strcat(stat_buf, "\n"); - - ret += sprintf(buf + ret, stat_buf); - } -#undef STATBIT -#undef INFOBIT - return ret; -} - -static int uart_read_proc(char *page, char **start, off_t off, - int count, int *eof, void *data) -{ - struct tty_driver *ttydrv = data; - struct uart_driver *drv = ttydrv->driver_state; - int i, len = 0, l; - off_t begin = 0; - - len += sprintf(page, "serinfo:1.0 driver%s%s revision:%s\n", - "", "", ""); - for (i = 0; i < drv->nr && len < PAGE_SIZE - 96; i++) { - l = uart_line_info(page + len, drv, i); - len += l; - if (len + begin > off + count) - goto done; - if (len + begin < off) { - begin += len; - len = 0; - } - } - *eof = 1; - done: - if (off >= len + begin) - return 0; - *start = page + (off - begin); - return (count < begin + len - off) ? count : (begin + len - off); -} -#endif - -#ifdef CONFIG_SERIAL_CORE_CONSOLE -/* - * Check whether an invalid uart number has been specified, and - * if so, search for the first available port that does have - * console support. - */ -struct uart_port * __init -uart_get_console(struct uart_port *ports, int nr, struct console *co) -{ - int idx = co->index; - - if (idx < 0 || idx >= nr || (ports[idx].iobase == 0 && - ports[idx].membase == NULL)) - for (idx = 0; idx < nr; idx++) - if (ports[idx].iobase != 0 || - ports[idx].membase != NULL) - break; - - co->index = idx; - - return ports + idx; -} - -/** - * uart_parse_options - Parse serial port baud/parity/bits/flow contro. - * @options: pointer to option string - * @baud: pointer to an 'int' variable for the baud rate. - * @parity: pointer to an 'int' variable for the parity. - * @bits: pointer to an 'int' variable for the number of data bits. - * @flow: pointer to an 'int' variable for the flow control character. - * - * uart_parse_options decodes a string containing the serial console - * options. The format of the string is , - * eg: 115200n8r - */ -void __init -uart_parse_options(char *options, int *baud, int *parity, int *bits, int *flow) -{ - char *s = options; - - *baud = simple_strtoul(s, NULL, 10); - while (*s >= '0' && *s <= '9') - s++; - if (*s) - *parity = *s++; - if (*s) - *bits = *s++ - '0'; - if (*s) - *flow = *s; -} - -struct baud_rates { - unsigned int rate; - unsigned int cflag; -}; - -static struct baud_rates baud_rates[] = { - { 921600, B921600 }, - { 460800, B460800 }, - { 230400, B230400 }, - { 115200, B115200 }, - { 57600, B57600 }, - { 38400, B38400 }, - { 19200, B19200 }, - { 9600, B9600 }, - { 4800, B4800 }, - { 2400, B2400 }, - { 1200, B1200 }, - { 0, B38400 } -}; - -/** - * uart_set_options - setup the serial console parameters - * @port: pointer to the serial ports uart_port structure - * @co: console pointer - * @baud: baud rate - * @parity: parity character - 'n' (none), 'o' (odd), 'e' (even) - * @bits: number of data bits - * @flow: flow control character - 'r' (rts) - */ -int __init -uart_set_options(struct uart_port *port, struct console *co, - int baud, int parity, int bits, int flow) -{ - struct termios termios; - int i; - - memset(&termios, 0, sizeof(struct termios)); - - termios.c_cflag = CREAD | HUPCL | CLOCAL; - - /* - * Construct a cflag setting. - */ - for (i = 0; baud_rates[i].rate; i++) - if (baud_rates[i].rate <= baud) - break; - - termios.c_cflag |= baud_rates[i].cflag; - - if (bits == 7) - termios.c_cflag |= CS7; - else - termios.c_cflag |= CS8; - - switch (parity) { - case 'o': case 'O': - termios.c_cflag |= PARODD; - /*fall through*/ - case 'e': case 'E': - termios.c_cflag |= PARENB; - break; - } - - if (flow == 'r') - termios.c_cflag |= CRTSCTS; - - port->ops->set_termios(port, &termios, NULL); - co->cflag = termios.c_cflag; - - return 0; -} -#endif /* CONFIG_SERIAL_CORE_CONSOLE */ - -static void uart_change_pm(struct uart_state *state, int pm_state) -{ - struct uart_port *port = state->port; - if (port->ops->pm) - port->ops->pm(port, pm_state, state->pm_state); - state->pm_state = pm_state; -} - -int uart_suspend_port(struct uart_driver *drv, struct uart_port *port, u32 level) -{ - struct uart_state *state = drv->state + port->line; - - down(&state->sem); - - switch (level) { - case SUSPEND_SAVE_STATE: - if (state->info && state->info->flags & UIF_INITIALIZED) { - struct uart_ops *ops = port->ops; - - spin_lock_irq(&port->lock); - ops->stop_tx(port, 0); - ops->set_mctrl(port, 0); - ops->stop_rx(port); - spin_unlock_irq(&port->lock); - - /* - * Wait for the transmitter to empty. - */ - while (!ops->tx_empty(port)) { - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(10*HZ/1000); - } - set_current_state(TASK_RUNNING); - - ops->shutdown(port); - } - break; - - case SUSPEND_POWER_DOWN: - /* - * Disable the console device before suspending. - */ - if (uart_console(port)) - port->cons->flags &= ~CON_ENABLED; - - uart_change_pm(state, 3); - break; - } - - up(&state->sem); - - return 0; -} - -int uart_resume_port(struct uart_driver *drv, struct uart_port *port, u32 level) -{ - struct uart_state *state = drv->state + port->line; - - down(&state->sem); - - switch (level) { - case RESUME_POWER_ON: - uart_change_pm(state, 0); - - /* - * Re-enable the console device after suspending. - */ - if (uart_console(port)) { - uart_change_speed(state, NULL); - port->cons->flags |= CON_ENABLED; - } - break; - - case RESUME_RESTORE_STATE: - if (state->info && state->info->flags & UIF_INITIALIZED) { - struct uart_ops *ops = port->ops; - - ops->set_mctrl(port, 0); - ops->startup(port); - uart_change_speed(state, NULL); - spin_lock_irq(&port->lock); - ops->set_mctrl(port, port->mctrl); - ops->start_tx(port, 0); - spin_unlock_irq(&port->lock); - } - break; - } - - up(&state->sem); - - return 0; -} - -static inline void -uart_report_port(struct uart_driver *drv, struct uart_port *port) -{ - printk("%s%d", drv->dev_name, port->line); - printk(" at "); - switch (port->iotype) { - case UPIO_PORT: - printk("I/O 0x%x", port->iobase); - break; - case UPIO_HUB6: - printk("I/O 0x%x offset 0x%x", port->iobase, port->hub6); - break; - case UPIO_MEM: - printk("MMIO 0x%lx", port->mapbase); - break; - } - printk(" (irq = %d) is a %s\n", port->irq, uart_type(port)); -} - -static void -uart_configure_port(struct uart_driver *drv, struct uart_state *state, - struct uart_port *port) -{ - unsigned int flags; - - /* - * If there isn't a port here, don't do anything further. - */ - if (!port->iobase && !port->mapbase && !port->membase) - return; - - /* - * Now do the auto configuration stuff. Note that config_port - * is expected to claim the resources and map the port for us. - */ - flags = UART_CONFIG_TYPE; - if (port->flags & UPF_AUTO_IRQ) - flags |= UART_CONFIG_IRQ; - if (port->flags & UPF_BOOT_AUTOCONF) { - port->type = PORT_UNKNOWN; - port->ops->config_port(port, flags); - } - - if (port->type != PORT_UNKNOWN) { - unsigned long flags; - - uart_report_port(drv, port); - - /* - * Ensure that the modem control lines are de-activated. - * We probably don't need a spinlock around this, but - */ - spin_lock_irqsave(&port->lock, flags); - port->ops->set_mctrl(port, 0); - spin_unlock_irqrestore(&port->lock, flags); - - /* - * Power down all ports by default, except the - * console if we have one. - */ - if (!uart_console(port)) - uart_change_pm(state, 3); - } -} - -/* - * This reverses the effects of uart_configure_port, hanging up the - * port before removal. - */ -static void -uart_unconfigure_port(struct uart_driver *drv, struct uart_state *state) -{ - struct uart_port *port = state->port; - struct uart_info *info = state->info; - - if (info && info->tty) - tty_vhangup(info->tty); - - down(&state->sem); - - state->info = NULL; - - /* - * Free the port IO and memory resources, if any. - */ - if (port->type != PORT_UNKNOWN) - port->ops->release_port(port); - - /* - * Indicate that there isn't a port here anymore. - */ - port->type = PORT_UNKNOWN; - - /* - * Kill the tasklet, and free resources. - */ - if (info) { - tasklet_kill(&info->tlet); - kfree(info); - } - - up(&state->sem); -} - -static struct tty_operations uart_ops = { - .open = uart_open, - .close = uart_close, - .write = uart_write, - .put_char = uart_put_char, - .flush_chars = uart_flush_chars, - .write_room = uart_write_room, - .chars_in_buffer= uart_chars_in_buffer, - .flush_buffer = uart_flush_buffer, - .ioctl = uart_ioctl, - .throttle = uart_throttle, - .unthrottle = uart_unthrottle, - .send_xchar = uart_send_xchar, - .set_termios = uart_set_termios, - .stop = uart_stop, - .start = uart_start, - .hangup = uart_hangup, - .break_ctl = uart_break_ctl, - .wait_until_sent= uart_wait_until_sent, -#ifdef CONFIG_PROC_FS - .read_proc = uart_read_proc, -#endif - .tiocmget = uart_tiocmget, - .tiocmset = uart_tiocmset, -}; - -/** - * uart_register_driver - register a driver with the uart core layer - * @drv: low level driver structure - * - * Register a uart driver with the core driver. We in turn register - * with the tty layer, and initialise the core driver per-port state. - * - * We have a proc file in /proc/tty/driver which is named after the - * normal driver. - * - * drv->port should be NULL, and the per-port structures should be - * registered using uart_add_one_port after this call has succeeded. - */ -int uart_register_driver(struct uart_driver *drv) -{ - struct tty_driver *normal = NULL; - int i, retval; - - BUG_ON(drv->state); - - /* - * Maybe we should be using a slab cache for this, especially if - * we have a large number of ports to handle. - */ - drv->state = kmalloc(sizeof(struct uart_state) * drv->nr, GFP_KERNEL); - retval = -ENOMEM; - if (!drv->state) - goto out; - - memset(drv->state, 0, sizeof(struct uart_state) * drv->nr); - - normal = alloc_tty_driver(drv->nr); - if (!normal) - goto out; - - drv->tty_driver = normal; - - normal->owner = drv->owner; - normal->driver_name = drv->driver_name; - normal->devfs_name = drv->devfs_name; - normal->name = drv->dev_name; - normal->major = drv->major; - normal->minor_start = drv->minor; - normal->type = TTY_DRIVER_TYPE_SERIAL; - normal->subtype = SERIAL_TYPE_NORMAL; - normal->init_termios = tty_std_termios; - normal->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL; - normal->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_NO_DEVFS; - normal->driver_state = drv; - tty_set_operations(normal, &uart_ops); - - /* - * Initialise the UART state(s). - */ - for (i = 0; i < drv->nr; i++) { - struct uart_state *state = drv->state + i; - - state->close_delay = 5 * HZ / 10; - state->closing_wait = 30 * HZ; - - init_MUTEX(&state->sem); - } - - retval = tty_register_driver(normal); - out: - if (retval < 0) { - put_tty_driver(normal); - kfree(drv->state); - } - return retval; -} - -/** - * uart_unregister_driver - remove a driver from the uart core layer - * @drv: low level driver structure - * - * Remove all references to a driver from the core driver. The low - * level driver must have removed all its ports via the - * uart_remove_one_port() if it registered them with uart_add_one_port(). - * (ie, drv->port == NULL) - */ -void uart_unregister_driver(struct uart_driver *drv) -{ - struct tty_driver *p = drv->tty_driver; - tty_unregister_driver(p); - put_tty_driver(p); - kfree(drv->state); - drv->tty_driver = NULL; -} - -struct tty_driver *uart_console_device(struct console *co, int *index) -{ - struct uart_driver *p = co->data; - *index = co->index; - return p->tty_driver; -} - -/** - * uart_add_one_port - attach a driver-defined port structure - * @drv: pointer to the uart low level driver structure for this port - * @port: uart port structure to use for this port. - * - * This allows the driver to register its own uart_port structure - * with the core driver. The main purpose is to allow the low - * level uart drivers to expand uart_port, rather than having yet - * more levels of structures. - */ -int uart_add_one_port(struct uart_driver *drv, struct uart_port *port) -{ - struct uart_state *state; - int ret = 0; - - BUG_ON(in_interrupt()); - - if (port->line >= drv->nr) - return -EINVAL; - - state = drv->state + port->line; - - down(&port_sem); - if (state->port) { - ret = -EINVAL; - goto out; - } - - state->port = port; - - spin_lock_init(&port->lock); - port->cons = drv->cons; - port->info = state->info; - - uart_configure_port(drv, state, port); - - /* - * Register the port whether it's detected or not. This allows - * setserial to be used to alter this ports parameters. - */ - tty_register_device(drv->tty_driver, port->line, NULL); - - out: - up(&port_sem); - - return ret; -} - -/** - * uart_remove_one_port - detach a driver defined port structure - * @drv: pointer to the uart low level driver structure for this port - * @port: uart port structure for this port - * - * This unhooks (and hangs up) the specified port structure from the - * core driver. No further calls will be made to the low-level code - * for this port. - */ -int uart_remove_one_port(struct uart_driver *drv, struct uart_port *port) -{ - struct uart_state *state = drv->state + port->line; - - BUG_ON(in_interrupt()); - - if (state->port != port) - printk(KERN_ALERT "Removing wrong port: %p != %p\n", - state->port, port); - - down(&port_sem); - - /* - * Remove the devices from devfs - */ - tty_unregister_device(drv->tty_driver, port->line); - - uart_unconfigure_port(drv, state); - state->port = NULL; - up(&port_sem); - - return 0; -} - -/* - * Are the two ports equivalent? - */ -static int uart_match_port(struct uart_port *port1, struct uart_port *port2) -{ - if (port1->iotype != port2->iotype) - return 0; - - switch (port1->iotype) { - case UPIO_PORT: - return (port1->iobase == port2->iobase); - case UPIO_HUB6: - return (port1->iobase == port2->iobase) && - (port1->hub6 == port2->hub6); - case UPIO_MEM: - return (port1->membase == port2->membase); - } - return 0; -} - -/* - * Try to find an unused uart_state slot for a port. - */ -static struct uart_state * -uart_find_match_or_unused(struct uart_driver *drv, struct uart_port *port) -{ - int i; - - /* - * First, find a port entry which matches. Note: if we do - * find a matching entry, and it has a non-zero use count, - * then we can't register the port. - */ - for (i = 0; i < drv->nr; i++) - if (uart_match_port(drv->state[i].port, port)) - return &drv->state[i]; - - /* - * We didn't find a matching entry, so look for the first - * free entry. We look for one which hasn't been previously - * used (indicated by zero iobase). - */ - for (i = 0; i < drv->nr; i++) - if (drv->state[i].port->type == PORT_UNKNOWN && - drv->state[i].port->iobase == 0 && - drv->state[i].count == 0) - return &drv->state[i]; - - /* - * That also failed. Last resort is to find any currently - * entry which doesn't have a real port associated with it. - */ - for (i = 0; i < drv->nr; i++) - if (drv->state[i].port->type == PORT_UNKNOWN && - drv->state[i].count == 0) - return &drv->state[i]; - - return NULL; -} - -/** - * uart_register_port: register uart settings with a port - * @drv: pointer to the uart low level driver structure for this port - * @port: uart port structure describing the port - * - * Register UART settings with the specified low level driver. Detect - * the type of the port if UPF_BOOT_AUTOCONF is set, and detect the - * IRQ if UPF_AUTO_IRQ is set. - * - * We try to pick the same port for the same IO base address, so that - * when a modem is plugged in, unplugged and plugged back in, it gets - * allocated the same port. - * - * Returns negative error, or positive line number. - */ -int uart_register_port(struct uart_driver *drv, struct uart_port *port) -{ - struct uart_state *state; - int ret; - - down(&port_sem); - - state = uart_find_match_or_unused(drv, port); - - if (state) { - /* - * Ok, we've found a line that we can use. - * - * If we find a port that matches this one, and it appears - * to be in-use (even if it doesn't have a type) we shouldn't - * alter it underneath itself - the port may be open and - * trying to do useful work. - */ - if (uart_users(state) != 0) { - ret = -EBUSY; - goto out; - } - - /* - * If the port is already initialised, don't touch it. - */ - if (state->port->type == PORT_UNKNOWN) { - state->port->iobase = port->iobase; - state->port->membase = port->membase; - state->port->irq = port->irq; - state->port->uartclk = port->uartclk; - state->port->fifosize = port->fifosize; - state->port->regshift = port->regshift; - state->port->iotype = port->iotype; - state->port->flags = port->flags; - state->port->line = state - drv->state; - state->port->mapbase = port->mapbase; - - uart_configure_port(drv, state, state->port); - } - - ret = state->port->line; - } else - ret = -ENOSPC; - out: - up(&port_sem); - return ret; -} - -/** - * uart_unregister_port - de-allocate a port - * @drv: pointer to the uart low level driver structure for this port - * @line: line index previously returned from uart_register_port() - * - * Hang up the specified line associated with the low level driver, - * and mark the port as unused. - */ -void uart_unregister_port(struct uart_driver *drv, int line) -{ - struct uart_state *state; - - if (line < 0 || line >= drv->nr) { - printk(KERN_ERR "Attempt to unregister "); - printk("%s%d", drv->dev_name, line); - printk("\n"); - return; - } - - state = drv->state + line; - - down(&port_sem); - uart_unconfigure_port(drv, state); - up(&port_sem); -} - -EXPORT_SYMBOL(uart_write_wakeup); -EXPORT_SYMBOL(uart_register_driver); -EXPORT_SYMBOL(uart_unregister_driver); -EXPORT_SYMBOL(uart_suspend_port); -EXPORT_SYMBOL(uart_resume_port); -EXPORT_SYMBOL(uart_register_port); -EXPORT_SYMBOL(uart_unregister_port); -EXPORT_SYMBOL(uart_add_one_port); -EXPORT_SYMBOL(uart_remove_one_port); - -MODULE_DESCRIPTION("Serial driver core"); -MODULE_LICENSE("GPL"); diff -prauN linux-2.6.0-test5/drivers/serial/sa1100.c wli-2.6.0-test5-bk12-25/drivers/serial/sa1100.c --- linux-2.6.0-test5/drivers/serial/sa1100.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/serial/sa1100.c 2003-09-25 19:16:04.000000000 -0700 @@ -862,8 +862,8 @@ static int sa1100_serial_suspend(struct { struct sa1100_port *sport = dev_get_drvdata(_dev); - if (sport) - uart_suspend_port(&sa1100_reg, &sport->port, level); + if (sport && level == SUSPEND_DISABLE) + uart_suspend_port(&sa1100_reg, &sport->port); return 0; } @@ -872,8 +872,8 @@ static int sa1100_serial_resume(struct d { struct sa1100_port *sport = dev_get_drvdata(_dev); - if (sport) - uart_resume_port(&sa1100_reg, &sport->port, level); + if (sport && level == RESUME_ENABLE) + uart_resume_port(&sa1100_reg, &sport->port); return 0; } diff -prauN linux-2.6.0-test5/drivers/serial/serial_core.c wli-2.6.0-test5-bk12-25/drivers/serial/serial_core.c --- linux-2.6.0-test5/drivers/serial/serial_core.c 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/drivers/serial/serial_core.c 2003-09-25 19:16:04.000000000 -0700 @@ -0,0 +1,2420 @@ +/* + * linux/drivers/char/core.c + * + * Driver core for serial ports + * + * Based on drivers/char/serial.c, by Linus Torvalds, Theodore Ts'o. + * + * Copyright 1999 ARM Limited + * Copyright (C) 2000-2001 Deep Blue Solutions Ltd. + * + * 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 of the License, 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include /* for serial_state and serial_icounter_struct */ + +#include +#include + +#undef DEBUG +#ifdef DEBUG +#define DPRINTK(x...) printk(x) +#else +#define DPRINTK(x...) do { } while (0) +#endif + +/* + * This is used to lock changes in serial line configuration. + */ +static DECLARE_MUTEX(port_sem); + +#define HIGH_BITS_OFFSET ((sizeof(long)-sizeof(int))*8) + +#define uart_users(state) ((state)->count + ((state)->info ? (state)->info->blocked_open : 0)) + +#ifdef CONFIG_SERIAL_CORE_CONSOLE +#define uart_console(port) ((port)->cons && (port)->cons->index == (port)->line) +#else +#define uart_console(port) (0) +#endif + +static void uart_change_speed(struct uart_state *state, struct termios *old_termios); +static void uart_wait_until_sent(struct tty_struct *tty, int timeout); +static void uart_change_pm(struct uart_state *state, int pm_state); + +/* + * This routine is used by the interrupt handler to schedule processing in + * the software interrupt portion of the driver. + */ +void uart_write_wakeup(struct uart_port *port) +{ + struct uart_info *info = port->info; + tasklet_schedule(&info->tlet); +} + +static void uart_stop(struct tty_struct *tty) +{ + struct uart_state *state = tty->driver_data; + struct uart_port *port = state->port; + unsigned long flags; + + spin_lock_irqsave(&port->lock, flags); + port->ops->stop_tx(port, 1); + spin_unlock_irqrestore(&port->lock, flags); +} + +static void __uart_start(struct tty_struct *tty) +{ + struct uart_state *state = tty->driver_data; + struct uart_port *port = state->port; + + if (!uart_circ_empty(&state->info->xmit) && state->info->xmit.buf && + !tty->stopped && !tty->hw_stopped) + port->ops->start_tx(port, 1); +} + +static void uart_start(struct tty_struct *tty) +{ + struct uart_state *state = tty->driver_data; + struct uart_port *port = state->port; + unsigned long flags; + + spin_lock_irqsave(&port->lock, flags); + __uart_start(tty); + spin_unlock_irqrestore(&port->lock, flags); +} + +static void uart_tasklet_action(unsigned long data) +{ + struct uart_state *state = (struct uart_state *)data; + struct tty_struct *tty; + + tty = state->info->tty; + if (tty) { + if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) && + tty->ldisc.write_wakeup) + tty->ldisc.write_wakeup(tty); + wake_up_interruptible(&tty->write_wait); + } +} + +static inline void +uart_update_mctrl(struct uart_port *port, unsigned int set, unsigned int clear) +{ + unsigned long flags; + unsigned int old; + + spin_lock_irqsave(&port->lock, flags); + old = port->mctrl; + port->mctrl = (old & ~clear) | set; + if (old != port->mctrl) + port->ops->set_mctrl(port, port->mctrl); + spin_unlock_irqrestore(&port->lock, flags); +} + +#define uart_set_mctrl(port,set) uart_update_mctrl(port,set,0) +#define uart_clear_mctrl(port,clear) uart_update_mctrl(port,0,clear) + +/* + * Startup the port. This will be called once per open. All calls + * will be serialised by the per-port semaphore. + */ +static int uart_startup(struct uart_state *state, int init_hw) +{ + struct uart_info *info = state->info; + struct uart_port *port = state->port; + unsigned long page; + int retval = 0; + + if (info->flags & UIF_INITIALIZED) + return 0; + + /* + * Set the TTY IO error marker - we will only clear this + * once we have successfully opened the port. Also set + * up the tty->alt_speed kludge + */ + if (info->tty) + set_bit(TTY_IO_ERROR, &info->tty->flags); + + if (port->type == PORT_UNKNOWN) + return 0; + + /* + * Initialise and allocate the transmit and temporary + * buffer. + */ + if (!info->xmit.buf) { + page = get_zeroed_page(GFP_KERNEL); + if (!page) + return -ENOMEM; + + info->xmit.buf = (unsigned char *) page; + info->tmpbuf = info->xmit.buf + UART_XMIT_SIZE; + init_MUTEX(&info->tmpbuf_sem); + uart_circ_clear(&info->xmit); + } + + port->mctrl = 0; + + retval = port->ops->startup(port); + if (retval == 0) { + if (init_hw) { + /* + * Initialise the hardware port settings. + */ + uart_change_speed(state, NULL); + + /* + * Setup the RTS and DTR signals once the + * port is open and ready to respond. + */ + if (info->tty->termios->c_cflag & CBAUD) + uart_set_mctrl(port, TIOCM_RTS | TIOCM_DTR); + } + + info->flags |= UIF_INITIALIZED; + + clear_bit(TTY_IO_ERROR, &info->tty->flags); + } + + if (retval && capable(CAP_SYS_ADMIN)) + retval = 0; + + return retval; +} + +/* + * This routine will shutdown a serial port; interrupts are disabled, and + * DTR is dropped if the hangup on close termio flag is on. Calls to + * uart_shutdown are serialised by the per-port semaphore. + */ +static void uart_shutdown(struct uart_state *state) +{ + struct uart_info *info = state->info; + struct uart_port *port = state->port; + + if (!(info->flags & UIF_INITIALIZED)) + return; + + /* + * Turn off DTR and RTS early. + */ + if (!info->tty || (info->tty->termios->c_cflag & HUPCL)) + uart_clear_mctrl(port, TIOCM_DTR | TIOCM_RTS); + + /* + * clear delta_msr_wait queue to avoid mem leaks: we may free + * the irq here so the queue might never be woken up. Note + * that we won't end up waiting on delta_msr_wait again since + * any outstanding file descriptors should be pointing at + * hung_up_tty_fops now. + */ + wake_up_interruptible(&info->delta_msr_wait); + + /* + * Free the IRQ and disable the port. + */ + port->ops->shutdown(port); + + /* + * Ensure that the IRQ handler isn't running on another CPU. + */ + synchronize_irq(port->irq); + + /* + * Free the transmit buffer page. + */ + if (info->xmit.buf) { + free_page((unsigned long)info->xmit.buf); + info->xmit.buf = NULL; + info->tmpbuf = NULL; + } + + /* + * kill off our tasklet + */ + tasklet_kill(&info->tlet); + if (info->tty) + set_bit(TTY_IO_ERROR, &info->tty->flags); + + info->flags &= ~UIF_INITIALIZED; +} + +/** + * uart_update_timeout - update per-port FIFO timeout. + * @port: uart_port structure describing the port. + * @cflag: termios cflag value + * @quot: uart clock divisor quotient + * + * Set the port FIFO timeout value. The @cflag value should + * reflect the actual hardware settings. + */ +void +uart_update_timeout(struct uart_port *port, unsigned int cflag, + unsigned int baud) +{ + unsigned int bits; + + /* byte size and parity */ + switch (cflag & CSIZE) { + case CS5: + bits = 7; + break; + case CS6: + bits = 8; + break; + case CS7: + bits = 9; + break; + default: + bits = 10; + break; // CS8 + } + + if (cflag & CSTOPB) + bits++; + if (cflag & PARENB) + bits++; + + /* + * The total number of bits to be transmitted in the fifo. + */ + bits = bits * port->fifosize; + + /* + * Figure the timeout to send the above number of bits. + * Add .02 seconds of slop + */ + port->timeout = (HZ * bits) / baud + HZ/50; +} + +EXPORT_SYMBOL(uart_update_timeout); + +/** + * uart_get_baud_rate - return baud rate for a particular port + * @port: uart_port structure describing the port in question. + * @termios: desired termios settings. + * @old: old termios (or NULL) + * @min: minimum acceptable baud rate + * @max: maximum acceptable baud rate + * + * Decode the termios structure into a numeric baud rate, + * taking account of the magic 38400 baud rate (with spd_* + * flags), and mapping the %B0 rate to 9600 baud. + * + * If the new baud rate is invalid, try the old termios setting. + * If it's still invalid, we try 9600 baud. + * + * Update the @termios structure to reflect the baud rate + * we're actually going to be using. + */ +unsigned int +uart_get_baud_rate(struct uart_port *port, struct termios *termios, + struct termios *old, unsigned int min, unsigned int max) +{ + unsigned int try, baud, altbaud = 38400; + unsigned int flags = port->flags & UPF_SPD_MASK; + + if (flags == UPF_SPD_HI) + altbaud = 57600; + if (flags == UPF_SPD_VHI) + altbaud = 115200; + if (flags == UPF_SPD_SHI) + altbaud = 230400; + if (flags == UPF_SPD_WARP) + altbaud = 460800; + + for (try = 0; try < 2; try++) { + baud = tty_termios_baud_rate(termios); + + /* + * The spd_hi, spd_vhi, spd_shi, spd_warp kludge... + * Die! Die! Die! + */ + if (baud == 38400) + baud = altbaud; + + /* + * Special case: B0 rate. + */ + if (baud == 0) + baud = 9600; + + if (baud >= min && baud <= max) + return baud; + + /* + * Oops, the quotient was zero. Try again with + * the old baud rate if possible. + */ + termios->c_cflag &= ~CBAUD; + if (old) { + termios->c_cflag |= old->c_cflag & CBAUD; + old = NULL; + continue; + } + + /* + * As a last resort, if the quotient is zero, + * default to 9600 bps + */ + termios->c_cflag |= B9600; + } + + return 0; +} + +EXPORT_SYMBOL(uart_get_baud_rate); + +/** + * uart_get_divisor - return uart clock divisor + * @port: uart_port structure describing the port. + * @baud: desired baud rate + * + * Calculate the uart clock divisor for the port. + */ +unsigned int +uart_get_divisor(struct uart_port *port, unsigned int baud) +{ + unsigned int quot; + + /* + * Old custom speed handling. + */ + if (baud == 38400 && (port->flags & UPF_SPD_MASK) == UPF_SPD_CUST) + quot = port->custom_divisor; + else + quot = port->uartclk / (16 * baud); + + return quot; +} + +EXPORT_SYMBOL(uart_get_divisor); + +static void +uart_change_speed(struct uart_state *state, struct termios *old_termios) +{ + struct tty_struct *tty = state->info->tty; + struct uart_port *port = state->port; + struct termios *termios; + + /* + * If we have no tty, termios, or the port does not exist, + * then we can't set the parameters for this port. + */ + if (!tty || !tty->termios || port->type == PORT_UNKNOWN) + return; + + termios = tty->termios; + + /* + * Set flags based on termios cflag + */ + if (termios->c_cflag & CRTSCTS) + state->info->flags |= UIF_CTS_FLOW; + else + state->info->flags &= ~UIF_CTS_FLOW; + + if (termios->c_cflag & CLOCAL) + state->info->flags &= ~UIF_CHECK_CD; + else + state->info->flags |= UIF_CHECK_CD; + + port->ops->set_termios(port, termios, old_termios); +} + +static inline void +__uart_put_char(struct uart_port *port, struct circ_buf *circ, unsigned char c) +{ + unsigned long flags; + + if (!circ->buf) + return; + + spin_lock_irqsave(&port->lock, flags); + if (uart_circ_chars_free(circ) != 0) { + circ->buf[circ->head] = c; + circ->head = (circ->head + 1) & (UART_XMIT_SIZE - 1); + } + spin_unlock_irqrestore(&port->lock, flags); +} + +static inline int +__uart_user_write(struct uart_port *port, struct circ_buf *circ, + const unsigned char *buf, int count) +{ + unsigned long flags; + int c, ret = 0; + + if (down_interruptible(&port->info->tmpbuf_sem)) + return -EINTR; + + while (1) { + int c1; + c = CIRC_SPACE_TO_END(circ->head, circ->tail, UART_XMIT_SIZE); + if (count < c) + c = count; + if (c <= 0) + break; + + c -= copy_from_user(port->info->tmpbuf, buf, c); + if (!c) { + if (!ret) + ret = -EFAULT; + break; + } + spin_lock_irqsave(&port->lock, flags); + c1 = CIRC_SPACE_TO_END(circ->head, circ->tail, UART_XMIT_SIZE); + if (c1 < c) + c = c1; + memcpy(circ->buf + circ->head, port->info->tmpbuf, c); + circ->head = (circ->head + c) & (UART_XMIT_SIZE - 1); + spin_unlock_irqrestore(&port->lock, flags); + buf += c; + count -= c; + ret += c; + } + up(&port->info->tmpbuf_sem); + + return ret; +} + +static inline int +__uart_kern_write(struct uart_port *port, struct circ_buf *circ, + const unsigned char *buf, int count) +{ + unsigned long flags; + int c, ret = 0; + + spin_lock_irqsave(&port->lock, flags); + while (1) { + c = CIRC_SPACE_TO_END(circ->head, circ->tail, UART_XMIT_SIZE); + if (count < c) + c = count; + if (c <= 0) + break; + memcpy(circ->buf + circ->head, buf, c); + circ->head = (circ->head + c) & (UART_XMIT_SIZE - 1); + buf += c; + count -= c; + ret += c; + } + spin_unlock_irqrestore(&port->lock, flags); + + return ret; +} + +static void uart_put_char(struct tty_struct *tty, unsigned char ch) +{ + struct uart_state *state = tty->driver_data; + + if (tty) + __uart_put_char(state->port, &state->info->xmit, ch); +} + +static void uart_flush_chars(struct tty_struct *tty) +{ + uart_start(tty); +} + +static int +uart_write(struct tty_struct *tty, int from_user, const unsigned char * buf, + int count) +{ + struct uart_state *state = tty->driver_data; + int ret; + + if (!tty || !state->info->xmit.buf) + return 0; + + if (from_user) + ret = __uart_user_write(state->port, &state->info->xmit, buf, count); + else + ret = __uart_kern_write(state->port, &state->info->xmit, buf, count); + + uart_start(tty); + return ret; +} + +static int uart_write_room(struct tty_struct *tty) +{ + struct uart_state *state = tty->driver_data; + + return uart_circ_chars_free(&state->info->xmit); +} + +static int uart_chars_in_buffer(struct tty_struct *tty) +{ + struct uart_state *state = tty->driver_data; + + return uart_circ_chars_pending(&state->info->xmit); +} + +static void uart_flush_buffer(struct tty_struct *tty) +{ + struct uart_state *state = tty->driver_data; + struct uart_port *port = state->port; + unsigned long flags; + + DPRINTK("uart_flush_buffer(%d) called\n", tty->index); + + spin_lock_irqsave(&port->lock, flags); + uart_circ_clear(&state->info->xmit); + spin_unlock_irqrestore(&port->lock, flags); + wake_up_interruptible(&tty->write_wait); + if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) && + tty->ldisc.write_wakeup) + (tty->ldisc.write_wakeup)(tty); +} + +/* + * This function is used to send a high-priority XON/XOFF character to + * the device + */ +static void uart_send_xchar(struct tty_struct *tty, char ch) +{ + struct uart_state *state = tty->driver_data; + struct uart_port *port = state->port; + unsigned long flags; + + if (port->ops->send_xchar) + port->ops->send_xchar(port, ch); + else { + port->x_char = ch; + if (ch) { + spin_lock_irqsave(&port->lock, flags); + port->ops->start_tx(port, 0); + spin_unlock_irqrestore(&port->lock, flags); + } + } +} + +static void uart_throttle(struct tty_struct *tty) +{ + struct uart_state *state = tty->driver_data; + + if (I_IXOFF(tty)) + uart_send_xchar(tty, STOP_CHAR(tty)); + + if (tty->termios->c_cflag & CRTSCTS) + uart_clear_mctrl(state->port, TIOCM_RTS); +} + +static void uart_unthrottle(struct tty_struct *tty) +{ + struct uart_state *state = tty->driver_data; + struct uart_port *port = state->port; + + if (I_IXOFF(tty)) { + if (port->x_char) + port->x_char = 0; + else + uart_send_xchar(tty, START_CHAR(tty)); + } + + if (tty->termios->c_cflag & CRTSCTS) + uart_set_mctrl(port, TIOCM_RTS); +} + +static int uart_get_info(struct uart_state *state, struct serial_struct *retinfo) +{ + struct uart_port *port = state->port; + struct serial_struct tmp; + + memset(&tmp, 0, sizeof(tmp)); + tmp.type = port->type; + tmp.line = port->line; + tmp.port = port->iobase; + if (HIGH_BITS_OFFSET) + tmp.port_high = (long) port->iobase >> HIGH_BITS_OFFSET; + tmp.irq = port->irq; + tmp.flags = port->flags; + tmp.xmit_fifo_size = port->fifosize; + tmp.baud_base = port->uartclk / 16; + tmp.close_delay = state->close_delay; + tmp.closing_wait = state->closing_wait; + tmp.custom_divisor = port->custom_divisor; + tmp.hub6 = port->hub6; + tmp.io_type = port->iotype; + tmp.iomem_reg_shift = port->regshift; + tmp.iomem_base = (void *)port->mapbase; + + if (copy_to_user(retinfo, &tmp, sizeof(*retinfo))) + return -EFAULT; + return 0; +} + +static int +uart_set_info(struct uart_state *state, struct serial_struct *newinfo) +{ + struct serial_struct new_serial; + struct uart_port *port = state->port; + unsigned long new_port; + unsigned int change_irq, change_port, old_flags; + unsigned int old_custom_divisor; + int retval = 0; + + if (copy_from_user(&new_serial, newinfo, sizeof(new_serial))) + return -EFAULT; + + new_port = new_serial.port; + if (HIGH_BITS_OFFSET) + new_port += (unsigned long) new_serial.port_high << HIGH_BITS_OFFSET; + + new_serial.irq = irq_canonicalize(new_serial.irq); + + /* + * This semaphore protects state->count. It is also + * very useful to prevent opens. Also, take the + * port configuration semaphore to make sure that a + * module insertion/removal doesn't change anything + * under us. + */ + down(&state->sem); + + change_irq = new_serial.irq != port->irq; + + /* + * Since changing the 'type' of the port changes its resource + * allocations, we should treat type changes the same as + * IO port changes. + */ + change_port = new_port != port->iobase || + (unsigned long)new_serial.iomem_base != port->mapbase || + new_serial.hub6 != port->hub6 || + new_serial.io_type != port->iotype || + new_serial.iomem_reg_shift != port->regshift || + new_serial.type != port->type; + + old_flags = port->flags; + old_custom_divisor = port->custom_divisor; + + if (!capable(CAP_SYS_ADMIN)) { + retval = -EPERM; + if (change_irq || change_port || + (new_serial.baud_base != port->uartclk / 16) || + (new_serial.close_delay != state->close_delay) || + (new_serial.closing_wait != state->closing_wait) || + (new_serial.xmit_fifo_size != port->fifosize) || + (((new_serial.flags ^ old_flags) & ~UPF_USR_MASK) != 0)) + goto exit; + port->flags = ((port->flags & ~UPF_USR_MASK) | + (new_serial.flags & UPF_USR_MASK)); + port->custom_divisor = new_serial.custom_divisor; + goto check_and_exit; + } + + /* + * Ask the low level driver to verify the settings. + */ + if (port->ops->verify_port) + retval = port->ops->verify_port(port, &new_serial); + + if ((new_serial.irq >= NR_IRQS) || (new_serial.irq < 0) || + (new_serial.baud_base < 9600)) + retval = -EINVAL; + + if (retval) + goto exit; + + if (change_port || change_irq) { + retval = -EBUSY; + + /* + * Make sure that we are the sole user of this port. + */ + if (uart_users(state) > 1) + goto exit; + + /* + * We need to shutdown the serial port at the old + * port/type/irq combination. + */ + uart_shutdown(state); + } + + if (change_port) { + unsigned long old_iobase, old_mapbase; + unsigned int old_type, old_iotype, old_hub6, old_shift; + + old_iobase = port->iobase; + old_mapbase = port->mapbase; + old_type = port->type; + old_hub6 = port->hub6; + old_iotype = port->iotype; + old_shift = port->regshift; + + /* + * Free and release old regions + */ + if (old_type != PORT_UNKNOWN) + port->ops->release_port(port); + + port->iobase = new_port; + port->type = new_serial.type; + port->hub6 = new_serial.hub6; + port->iotype = new_serial.io_type; + port->regshift = new_serial.iomem_reg_shift; + port->mapbase = (unsigned long)new_serial.iomem_base; + + /* + * Claim and map the new regions + */ + if (port->type != PORT_UNKNOWN) { + retval = port->ops->request_port(port); + } else { + /* Always success - Jean II */ + retval = 0; + } + + /* + * If we fail to request resources for the + * new port, try to restore the old settings. + */ + if (retval && old_type != PORT_UNKNOWN) { + port->iobase = old_iobase; + port->type = old_type; + port->hub6 = old_hub6; + port->iotype = old_iotype; + port->regshift = old_shift; + port->mapbase = old_mapbase; + retval = port->ops->request_port(port); + /* + * If we failed to restore the old settings, + * we fail like this. + */ + if (retval) + port->type = PORT_UNKNOWN; + + /* + * We failed anyway. + */ + retval = -EBUSY; + } + } + + port->irq = new_serial.irq; + port->uartclk = new_serial.baud_base * 16; + port->flags = (port->flags & ~UPF_CHANGE_MASK) | + (new_serial.flags & UPF_CHANGE_MASK); + port->custom_divisor = new_serial.custom_divisor; + state->close_delay = new_serial.close_delay * HZ / 100; + state->closing_wait = new_serial.closing_wait * HZ / 100; + port->fifosize = new_serial.xmit_fifo_size; + if (state->info->tty) + state->info->tty->low_latency = + (port->flags & UPF_LOW_LATENCY) ? 1 : 0; + + check_and_exit: + retval = 0; + if (port->type == PORT_UNKNOWN) + goto exit; + if (state->info->flags & UIF_INITIALIZED) { + if (((old_flags ^ port->flags) & UPF_SPD_MASK) || + old_custom_divisor != port->custom_divisor) { + /* If they're setting up a custom divisor or speed, + * instead of clearing it, then bitch about it. No + * need to rate-limit; it's CAP_SYS_ADMIN only. */ + if (port->flags & UPF_SPD_MASK) { + printk(KERN_NOTICE "%s sets custom speed on %s%d. This is deprecated.\n", + current->comm, state->info->tty->driver->name, + state->port->line); + } + uart_change_speed(state, NULL); + } + } else + retval = uart_startup(state, 1); + exit: + up(&state->sem); + return retval; +} + + +/* + * uart_get_lsr_info - get line status register info. + * Note: uart_ioctl protects us against hangups. + */ +static int uart_get_lsr_info(struct uart_state *state, unsigned int *value) +{ + struct uart_port *port = state->port; + unsigned int result; + + result = port->ops->tx_empty(port); + + /* + * If we're about to load something into the transmit + * register, we'll pretend the transmitter isn't empty to + * avoid a race condition (depending on when the transmit + * interrupt happens). + */ + if (port->x_char || + ((uart_circ_chars_pending(&state->info->xmit) > 0) && + !state->info->tty->stopped && !state->info->tty->hw_stopped)) + result &= ~TIOCSER_TEMT; + + return put_user(result, value); +} + +static int uart_tiocmget(struct tty_struct *tty, struct file *file) +{ + struct uart_state *state = tty->driver_data; + struct uart_port *port = state->port; + int result = -EIO; + + down(&state->sem); + if ((!file || !tty_hung_up_p(file)) && + !(tty->flags & (1 << TTY_IO_ERROR))) { + result = port->mctrl; + result |= port->ops->get_mctrl(port); + } + up(&state->sem); + + return result; +} + +static int +uart_tiocmset(struct tty_struct *tty, struct file *file, + unsigned int set, unsigned int clear) +{ + struct uart_state *state = tty->driver_data; + struct uart_port *port = state->port; + int ret = -EIO; + + down(&state->sem); + if ((!file || !tty_hung_up_p(file)) && + !(tty->flags & (1 << TTY_IO_ERROR))) { + uart_update_mctrl(port, set, clear); + ret = 0; + } + up(&state->sem); + return ret; +} + +static void uart_break_ctl(struct tty_struct *tty, int break_state) +{ + struct uart_state *state = tty->driver_data; + struct uart_port *port = state->port; + + BUG_ON(!kernel_locked()); + + down(&state->sem); + + if (port->type != PORT_UNKNOWN) + port->ops->break_ctl(port, break_state); + + up(&state->sem); +} + +static int uart_do_autoconfig(struct uart_state *state) +{ + struct uart_port *port = state->port; + int flags, ret; + + if (!capable(CAP_SYS_ADMIN)) + return -EPERM; + + /* + * Take the per-port semaphore. This prevents count from + * changing, and hence any extra opens of the port while + * we're auto-configuring. + */ + if (down_interruptible(&state->sem)) + return -ERESTARTSYS; + + ret = -EBUSY; + if (uart_users(state) == 1) { + uart_shutdown(state); + + /* + * If we already have a port type configured, + * we must release its resources. + */ + if (port->type != PORT_UNKNOWN) + port->ops->release_port(port); + + flags = UART_CONFIG_TYPE; + if (port->flags & UPF_AUTO_IRQ) + flags |= UART_CONFIG_IRQ; + + /* + * This will claim the ports resources if + * a port is found. + */ + port->ops->config_port(port, flags); + + ret = uart_startup(state, 1); + } + up(&state->sem); + return ret; +} + +/* + * Wait for any of the 4 modem inputs (DCD,RI,DSR,CTS) to change + * - mask passed in arg for lines of interest + * (use |'ed TIOCM_RNG/DSR/CD/CTS for masking) + * Caller should use TIOCGICOUNT to see which one it was + */ +static int +uart_wait_modem_status(struct uart_state *state, unsigned long arg) +{ + struct uart_port *port = state->port; + DECLARE_WAITQUEUE(wait, current); + struct uart_icount cprev, cnow; + int ret; + + /* + * note the counters on entry + */ + spin_lock_irq(&port->lock); + memcpy(&cprev, &port->icount, sizeof(struct uart_icount)); + + /* + * Force modem status interrupts on + */ + port->ops->enable_ms(port); + spin_unlock_irq(&port->lock); + + add_wait_queue(&state->info->delta_msr_wait, &wait); + for (;;) { + spin_lock_irq(&port->lock); + memcpy(&cnow, &port->icount, sizeof(struct uart_icount)); + spin_unlock_irq(&port->lock); + + set_current_state(TASK_INTERRUPTIBLE); + + if (((arg & TIOCM_RNG) && (cnow.rng != cprev.rng)) || + ((arg & TIOCM_DSR) && (cnow.dsr != cprev.dsr)) || + ((arg & TIOCM_CD) && (cnow.dcd != cprev.dcd)) || + ((arg & TIOCM_CTS) && (cnow.cts != cprev.cts))) { + ret = 0; + break; + } + + schedule(); + + /* see if a signal did it */ + if (signal_pending(current)) { + ret = -ERESTARTSYS; + break; + } + + cprev = cnow; + } + + current->state = TASK_RUNNING; + remove_wait_queue(&state->info->delta_msr_wait, &wait); + + return ret; +} + +/* + * Get counter of input serial line interrupts (DCD,RI,DSR,CTS) + * Return: write counters to the user passed counter struct + * NB: both 1->0 and 0->1 transitions are counted except for + * RI where only 0->1 is counted. + */ +static int +uart_get_count(struct uart_state *state, struct serial_icounter_struct *icnt) +{ + struct serial_icounter_struct icount; + struct uart_icount cnow; + struct uart_port *port = state->port; + + spin_lock_irq(&port->lock); + memcpy(&cnow, &port->icount, sizeof(struct uart_icount)); + spin_unlock_irq(&port->lock); + + icount.cts = cnow.cts; + icount.dsr = cnow.dsr; + icount.rng = cnow.rng; + icount.dcd = cnow.dcd; + icount.rx = cnow.rx; + icount.tx = cnow.tx; + icount.frame = cnow.frame; + icount.overrun = cnow.overrun; + icount.parity = cnow.parity; + icount.brk = cnow.brk; + icount.buf_overrun = cnow.buf_overrun; + + return copy_to_user(icnt, &icount, sizeof(icount)) ? -EFAULT : 0; +} + +/* + * Called via sys_ioctl under the BKL. We can use spin_lock_irq() here. + */ +static int +uart_ioctl(struct tty_struct *tty, struct file *filp, unsigned int cmd, + unsigned long arg) +{ + struct uart_state *state = tty->driver_data; + int ret = -ENOIOCTLCMD; + + BUG_ON(!kernel_locked()); + + /* + * These ioctls don't rely on the hardware to be present. + */ + switch (cmd) { + case TIOCGSERIAL: + ret = uart_get_info(state, (struct serial_struct *)arg); + break; + + case TIOCSSERIAL: + ret = uart_set_info(state, (struct serial_struct *)arg); + break; + + case TIOCSERCONFIG: + ret = uart_do_autoconfig(state); + break; + + case TIOCSERGWILD: /* obsolete */ + case TIOCSERSWILD: /* obsolete */ + ret = 0; + break; + } + + if (ret != -ENOIOCTLCMD) + goto out; + + if (tty->flags & (1 << TTY_IO_ERROR)) { + ret = -EIO; + goto out; + } + + /* + * The following should only be used when hardware is present. + */ + switch (cmd) { + case TIOCMIWAIT: + ret = uart_wait_modem_status(state, arg); + break; + + case TIOCGICOUNT: + ret = uart_get_count(state, (struct serial_icounter_struct *)arg); + break; + } + + if (ret != -ENOIOCTLCMD) + goto out; + + down(&state->sem); + + if (tty_hung_up_p(filp)) { + ret = -EIO; + goto out_up; + } + + /* + * All these rely on hardware being present and need to be + * protected against the tty being hung up. + */ + switch (cmd) { + case TIOCSERGETLSR: /* Get line status register */ + ret = uart_get_lsr_info(state, (unsigned int *)arg); + break; + + default: { + struct uart_port *port = state->port; + if (port->ops->ioctl) + ret = port->ops->ioctl(port, cmd, arg); + break; + } + } + out_up: + up(&state->sem); + out: + return ret; +} + +static void uart_set_termios(struct tty_struct *tty, struct termios *old_termios) +{ + struct uart_state *state = tty->driver_data; + unsigned long flags; + unsigned int cflag = tty->termios->c_cflag; + + BUG_ON(!kernel_locked()); + + /* + * These are the bits that are used to setup various + * flags in the low level driver. + */ +#define RELEVANT_IFLAG(iflag) ((iflag) & (IGNBRK|BRKINT|IGNPAR|PARMRK|INPCK)) + + if ((cflag ^ old_termios->c_cflag) == 0 && + RELEVANT_IFLAG(tty->termios->c_iflag ^ old_termios->c_iflag) == 0) + return; + + uart_change_speed(state, old_termios); + + /* Handle transition to B0 status */ + if ((old_termios->c_cflag & CBAUD) && !(cflag & CBAUD)) + uart_clear_mctrl(state->port, TIOCM_RTS | TIOCM_DTR); + + /* Handle transition away from B0 status */ + if (!(old_termios->c_cflag & CBAUD) && (cflag & CBAUD)) { + unsigned int mask = TIOCM_DTR; + if (!(cflag & CRTSCTS) || + !test_bit(TTY_THROTTLED, &tty->flags)) + mask |= TIOCM_RTS; + uart_set_mctrl(state->port, mask); + } + + /* Handle turning off CRTSCTS */ + if ((old_termios->c_cflag & CRTSCTS) && !(cflag & CRTSCTS)) { + spin_lock_irqsave(&state->port->lock, flags); + tty->hw_stopped = 0; + __uart_start(tty); + spin_unlock_irqrestore(&state->port->lock, flags); + } + +#if 0 + /* + * No need to wake up processes in open wait, since they + * sample the CLOCAL flag once, and don't recheck it. + * XXX It's not clear whether the current behavior is correct + * or not. Hence, this may change..... + */ + if (!(old_termios->c_cflag & CLOCAL) && + (tty->termios->c_cflag & CLOCAL)) + wake_up_interruptible(&state->info->open_wait); +#endif +} + +/* + * In 2.4.5, calls to this will be serialized via the BKL in + * linux/drivers/char/tty_io.c:tty_release() + * linux/drivers/char/tty_io.c:do_tty_handup() + */ +static void uart_close(struct tty_struct *tty, struct file *filp) +{ + struct uart_state *state = tty->driver_data; + struct uart_port *port = state->port; + + BUG_ON(!kernel_locked()); + DPRINTK("uart_close(%d) called\n", port->line); + + down(&state->sem); + + if (tty_hung_up_p(filp)) + goto done; + + if ((tty->count == 1) && (state->count != 1)) { + /* + * Uh, oh. tty->count is 1, which means that the tty + * structure will be freed. state->count should always + * be one in these conditions. If it's greater than + * one, we've got real problems, since it means the + * serial port won't be shutdown. + */ + printk("uart_close: bad serial port count; tty->count is 1, " + "state->count is %d\n", state->count); + state->count = 1; + } + if (--state->count < 0) { + printk("rs_close: bad serial port count for %s: %d\n", + tty->name, state->count); + state->count = 0; + } + if (state->count) + goto done; + + /* + * Now we wait for the transmit buffer to clear; and we notify + * the line discipline to only process XON/XOFF characters by + * setting tty->closing. + */ + tty->closing = 1; + + if (state->closing_wait != USF_CLOSING_WAIT_NONE) + tty_wait_until_sent(tty, state->closing_wait); + + /* + * At this point, we stop accepting input. To do this, we + * disable the receive line status interrupts. + */ + if (state->info->flags & UIF_INITIALIZED) { + unsigned long flags; + spin_lock_irqsave(&port->lock, flags); + port->ops->stop_rx(port); + spin_unlock_irqrestore(&port->lock, flags); + /* + * Before we drop DTR, make sure the UART transmitter + * has completely drained; this is especially + * important if there is a transmit FIFO! + */ + uart_wait_until_sent(tty, port->timeout); + } + + uart_shutdown(state); + uart_flush_buffer(tty); + if (tty->ldisc.flush_buffer) + tty->ldisc.flush_buffer(tty); + tty->closing = 0; + state->info->tty = NULL; + + if (state->info->blocked_open) { + if (state->close_delay) { + set_current_state(TASK_INTERRUPTIBLE); + schedule_timeout(state->close_delay); + set_current_state(TASK_RUNNING); + } + } else if (!uart_console(port)) { + uart_change_pm(state, 3); + } + + /* + * Wake up anyone trying to open this port. + */ + state->info->flags &= ~UIF_NORMAL_ACTIVE; + wake_up_interruptible(&state->info->open_wait); + + done: + up(&state->sem); +} + +static void uart_wait_until_sent(struct tty_struct *tty, int timeout) +{ + struct uart_state *state = tty->driver_data; + struct uart_port *port = state->port; + unsigned long char_time, expire; + + BUG_ON(!kernel_locked()); + + if (port->type == PORT_UNKNOWN || port->fifosize == 0) + return; + + /* + * Set the check interval to be 1/5 of the estimated time to + * send a single character, and make it at least 1. The check + * interval should also be less than the timeout. + * + * Note: we have to use pretty tight timings here to satisfy + * the NIST-PCTS. + */ + char_time = (port->timeout - HZ/50) / port->fifosize; + char_time = char_time / 5; + if (char_time == 0) + char_time = 1; + if (timeout && timeout < char_time) + char_time = timeout; + + /* + * If the transmitter hasn't cleared in twice the approximate + * amount of time to send the entire FIFO, it probably won't + * ever clear. This assumes the UART isn't doing flow + * control, which is currently the case. Hence, if it ever + * takes longer than port->timeout, this is probably due to a + * UART bug of some kind. So, we clamp the timeout parameter at + * 2*port->timeout. + */ + if (timeout == 0 || timeout > 2 * port->timeout) + timeout = 2 * port->timeout; + + expire = jiffies + timeout; + + DPRINTK("uart_wait_until_sent(%d), jiffies=%lu, expire=%lu...\n", + port->line, jiffies, expire); + + /* + * Check whether the transmitter is empty every 'char_time'. + * 'timeout' / 'expire' give us the maximum amount of time + * we wait. + */ + while (!port->ops->tx_empty(port)) { + set_current_state(TASK_INTERRUPTIBLE); + schedule_timeout(char_time); + if (signal_pending(current)) + break; + if (time_after(jiffies, expire)) + break; + } + set_current_state(TASK_RUNNING); /* might not be needed */ +} + +/* + * This is called with the BKL held in + * linux/drivers/char/tty_io.c:do_tty_hangup() + * We're called from the eventd thread, so we can sleep for + * a _short_ time only. + */ +static void uart_hangup(struct tty_struct *tty) +{ + struct uart_state *state = tty->driver_data; + + BUG_ON(!kernel_locked()); + DPRINTK("uart_hangup(%d)\n", state->port->line); + + down(&state->sem); + if (state->info && state->info->flags & UIF_NORMAL_ACTIVE) { + uart_flush_buffer(tty); + uart_shutdown(state); + state->count = 0; + state->info->flags &= ~UIF_NORMAL_ACTIVE; + state->info->tty = NULL; + wake_up_interruptible(&state->info->open_wait); + wake_up_interruptible(&state->info->delta_msr_wait); + } + up(&state->sem); +} + +/* + * Copy across the serial console cflag setting into the termios settings + * for the initial open of the port. This allows continuity between the + * kernel settings, and the settings init adopts when it opens the port + * for the first time. + */ +static void uart_update_termios(struct uart_state *state) +{ + struct tty_struct *tty = state->info->tty; + struct uart_port *port = state->port; + + if (uart_console(port) && port->cons->cflag) { + tty->termios->c_cflag = port->cons->cflag; + port->cons->cflag = 0; + } + + /* + * If the device failed to grab its irq resources, + * or some other error occurred, don't try to talk + * to the port hardware. + */ + if (!(tty->flags & (1 << TTY_IO_ERROR))) { + /* + * Make termios settings take effect. + */ + uart_change_speed(state, NULL); + + /* + * And finally enable the RTS and DTR signals. + */ + if (tty->termios->c_cflag & CBAUD) + uart_set_mctrl(port, TIOCM_DTR | TIOCM_RTS); + } +} + +/* + * Block the open until the port is ready. We must be called with + * the per-port semaphore held. + */ +static int +uart_block_til_ready(struct file *filp, struct uart_state *state) +{ + DECLARE_WAITQUEUE(wait, current); + struct uart_info *info = state->info; + struct uart_port *port = state->port; + + info->blocked_open++; + state->count--; + + add_wait_queue(&info->open_wait, &wait); + while (1) { + set_current_state(TASK_INTERRUPTIBLE); + + /* + * If we have been hung up, tell userspace/restart open. + */ + if (tty_hung_up_p(filp) || info->tty == NULL) + break; + + /* + * If the port has been closed, tell userspace/restart open. + */ + if (!(info->flags & UIF_INITIALIZED)) + break; + + /* + * If non-blocking mode is set, or CLOCAL mode is set, + * we don't want to wait for the modem status lines to + * indicate that the port is ready. + * + * Also, if the port is not enabled/configured, we want + * to allow the open to succeed here. Note that we will + * have set TTY_IO_ERROR for a non-existant port. + */ + if ((filp->f_flags & O_NONBLOCK) || + (info->tty->termios->c_cflag & CLOCAL) || + (info->tty->flags & (1 << TTY_IO_ERROR))) { + break; + } + + /* + * Set DTR to allow modem to know we're waiting. Do + * not set RTS here - we want to make sure we catch + * the data from the modem. + */ + if (info->tty->termios->c_cflag & CBAUD) + uart_set_mctrl(port, TIOCM_DTR); + + /* + * and wait for the carrier to indicate that the + * modem is ready for us. + */ + if (port->ops->get_mctrl(port) & TIOCM_CAR) + break; + + up(&state->sem); + schedule(); + down(&state->sem); + + if (signal_pending(current)) + break; + } + set_current_state(TASK_RUNNING); + remove_wait_queue(&info->open_wait, &wait); + + state->count++; + info->blocked_open--; + + if (signal_pending(current)) + return -ERESTARTSYS; + + if (!info->tty || tty_hung_up_p(filp)) + return -EAGAIN; + + return 0; +} + +static struct uart_state *uart_get(struct uart_driver *drv, int line) +{ + struct uart_state *state; + + down(&port_sem); + state = drv->state + line; + if (down_interruptible(&state->sem)) { + state = ERR_PTR(-ERESTARTSYS); + goto out; + } + + state->count++; + if (!state->port) { + state->count--; + up(&state->sem); + state = ERR_PTR(-ENXIO); + goto out; + } + + if (!state->info) { + state->info = kmalloc(sizeof(struct uart_info), GFP_KERNEL); + if (state->info) { + memset(state->info, 0, sizeof(struct uart_info)); + init_waitqueue_head(&state->info->open_wait); + init_waitqueue_head(&state->info->delta_msr_wait); + + /* + * Link the info into the other structures. + */ + state->port->info = state->info; + + tasklet_init(&state->info->tlet, uart_tasklet_action, + (unsigned long)state); + } else { + state->count--; + up(&state->sem); + state = ERR_PTR(-ENOMEM); + } + } + + out: + up(&port_sem); + return state; +} + +/* + * In 2.4.5, calls to uart_open are serialised by the BKL in + * linux/fs/devices.c:chrdev_open() + * Note that if this fails, then uart_close() _will_ be called. + * + * In time, we want to scrap the "opening nonpresent ports" + * behaviour and implement an alternative way for setserial + * to set base addresses/ports/types. This will allow us to + * get rid of a certain amount of extra tests. + */ +static int uart_open(struct tty_struct *tty, struct file *filp) +{ + struct uart_driver *drv = (struct uart_driver *)tty->driver->driver_state; + struct uart_state *state; + int retval, line = tty->index; + + BUG_ON(!kernel_locked()); + DPRINTK("uart_open(%d) called\n", line); + + /* + * tty->driver->num won't change, so we won't fail here with + * tty->driver_data set to something non-NULL (and therefore + * we won't get caught by uart_close()). + */ + retval = -ENODEV; + if (line >= tty->driver->num) + goto fail; + + /* + * We take the semaphore inside uart_get to guarantee that we won't + * be re-entered while allocating the info structure, or while we + * request any IRQs that the driver may need. This also has the nice + * side-effect that it delays the action of uart_hangup, so we can + * guarantee that info->tty will always contain something reasonable. + */ + state = uart_get(drv, line); + if (IS_ERR(state)) { + retval = PTR_ERR(state); + goto fail; + } + + /* + * Once we set tty->driver_data here, we are guaranteed that + * uart_close() will decrement the driver module use count. + * Any failures from here onwards should not touch the count. + */ + tty->driver_data = state; + tty->low_latency = (state->port->flags & UPF_LOW_LATENCY) ? 1 : 0; + tty->alt_speed = 0; + state->info->tty = tty; + + /* + * If the port is in the middle of closing, bail out now. + */ + if (tty_hung_up_p(filp)) { + retval = -EAGAIN; + state->count--; + up(&state->sem); + goto fail; + } + + /* + * Make sure the device is in D0 state. + */ + if (state->count == 1) + uart_change_pm(state, 0); + + /* + * Start up the serial port. + */ + retval = uart_startup(state, 0); + + /* + * If we succeeded, wait until the port is ready. + */ + if (retval == 0) + retval = uart_block_til_ready(filp, state); + up(&state->sem); + + /* + * If this is the first open to succeed, adjust things to suit. + */ + if (retval == 0 && !(state->info->flags & UIF_NORMAL_ACTIVE)) { + state->info->flags |= UIF_NORMAL_ACTIVE; + + uart_update_termios(state); + } + + fail: + return retval; +} + +static const char *uart_type(struct uart_port *port) +{ + const char *str = NULL; + + if (port->ops->type) + str = port->ops->type(port); + + if (!str) + str = "unknown"; + + return str; +} + +#ifdef CONFIG_PROC_FS + +static int uart_line_info(char *buf, struct uart_driver *drv, int i) +{ + struct uart_state *state = drv->state + i; + struct uart_port *port = state->port; + char stat_buf[32]; + unsigned int status; + int ret; + + if (!port) + return 0; + + ret = sprintf(buf, "%d: uart:%s port:%08X irq:%d", + port->line, uart_type(port), + port->iobase, port->irq); + + if (port->type == PORT_UNKNOWN) { + strcat(buf, "\n"); + return ret + 1; + } + + if(capable(CAP_SYS_ADMIN)) + { + status = port->ops->get_mctrl(port); + + ret += sprintf(buf + ret, " tx:%d rx:%d", + port->icount.tx, port->icount.rx); + if (port->icount.frame) + ret += sprintf(buf + ret, " fe:%d", + port->icount.frame); + if (port->icount.parity) + ret += sprintf(buf + ret, " pe:%d", + port->icount.parity); + if (port->icount.brk) + ret += sprintf(buf + ret, " brk:%d", + port->icount.brk); + if (port->icount.overrun) + ret += sprintf(buf + ret, " oe:%d", + port->icount.overrun); + +#define INFOBIT(bit,str) \ + if (port->mctrl & (bit)) \ + strncat(stat_buf, (str), sizeof(stat_buf) - \ + strlen(stat_buf) - 2) +#define STATBIT(bit,str) \ + if (status & (bit)) \ + strncat(stat_buf, (str), sizeof(stat_buf) - \ + strlen(stat_buf) - 2) + + stat_buf[0] = '\0'; + stat_buf[1] = '\0'; + INFOBIT(TIOCM_RTS, "|RTS"); + STATBIT(TIOCM_CTS, "|CTS"); + INFOBIT(TIOCM_DTR, "|DTR"); + STATBIT(TIOCM_DSR, "|DSR"); + STATBIT(TIOCM_CAR, "|CD"); + STATBIT(TIOCM_RNG, "|RI"); + if (stat_buf[0]) + stat_buf[0] = ' '; + strcat(stat_buf, "\n"); + + ret += sprintf(buf + ret, stat_buf); + } +#undef STATBIT +#undef INFOBIT + return ret; +} + +static int uart_read_proc(char *page, char **start, off_t off, + int count, int *eof, void *data) +{ + struct tty_driver *ttydrv = data; + struct uart_driver *drv = ttydrv->driver_state; + int i, len = 0, l; + off_t begin = 0; + + len += sprintf(page, "serinfo:1.0 driver%s%s revision:%s\n", + "", "", ""); + for (i = 0; i < drv->nr && len < PAGE_SIZE - 96; i++) { + l = uart_line_info(page + len, drv, i); + len += l; + if (len + begin > off + count) + goto done; + if (len + begin < off) { + begin += len; + len = 0; + } + } + *eof = 1; + done: + if (off >= len + begin) + return 0; + *start = page + (off - begin); + return (count < begin + len - off) ? count : (begin + len - off); +} +#endif + +#ifdef CONFIG_SERIAL_CORE_CONSOLE +/* + * Check whether an invalid uart number has been specified, and + * if so, search for the first available port that does have + * console support. + */ +struct uart_port * __init +uart_get_console(struct uart_port *ports, int nr, struct console *co) +{ + int idx = co->index; + + if (idx < 0 || idx >= nr || (ports[idx].iobase == 0 && + ports[idx].membase == NULL)) + for (idx = 0; idx < nr; idx++) + if (ports[idx].iobase != 0 || + ports[idx].membase != NULL) + break; + + co->index = idx; + + return ports + idx; +} + +/** + * uart_parse_options - Parse serial port baud/parity/bits/flow contro. + * @options: pointer to option string + * @baud: pointer to an 'int' variable for the baud rate. + * @parity: pointer to an 'int' variable for the parity. + * @bits: pointer to an 'int' variable for the number of data bits. + * @flow: pointer to an 'int' variable for the flow control character. + * + * uart_parse_options decodes a string containing the serial console + * options. The format of the string is , + * eg: 115200n8r + */ +void __init +uart_parse_options(char *options, int *baud, int *parity, int *bits, int *flow) +{ + char *s = options; + + *baud = simple_strtoul(s, NULL, 10); + while (*s >= '0' && *s <= '9') + s++; + if (*s) + *parity = *s++; + if (*s) + *bits = *s++ - '0'; + if (*s) + *flow = *s; +} + +struct baud_rates { + unsigned int rate; + unsigned int cflag; +}; + +static struct baud_rates baud_rates[] = { + { 921600, B921600 }, + { 460800, B460800 }, + { 230400, B230400 }, + { 115200, B115200 }, + { 57600, B57600 }, + { 38400, B38400 }, + { 19200, B19200 }, + { 9600, B9600 }, + { 4800, B4800 }, + { 2400, B2400 }, + { 1200, B1200 }, + { 0, B38400 } +}; + +/** + * uart_set_options - setup the serial console parameters + * @port: pointer to the serial ports uart_port structure + * @co: console pointer + * @baud: baud rate + * @parity: parity character - 'n' (none), 'o' (odd), 'e' (even) + * @bits: number of data bits + * @flow: flow control character - 'r' (rts) + */ +int __init +uart_set_options(struct uart_port *port, struct console *co, + int baud, int parity, int bits, int flow) +{ + struct termios termios; + int i; + + memset(&termios, 0, sizeof(struct termios)); + + termios.c_cflag = CREAD | HUPCL | CLOCAL; + + /* + * Construct a cflag setting. + */ + for (i = 0; baud_rates[i].rate; i++) + if (baud_rates[i].rate <= baud) + break; + + termios.c_cflag |= baud_rates[i].cflag; + + if (bits == 7) + termios.c_cflag |= CS7; + else + termios.c_cflag |= CS8; + + switch (parity) { + case 'o': case 'O': + termios.c_cflag |= PARODD; + /*fall through*/ + case 'e': case 'E': + termios.c_cflag |= PARENB; + break; + } + + if (flow == 'r') + termios.c_cflag |= CRTSCTS; + + port->ops->set_termios(port, &termios, NULL); + co->cflag = termios.c_cflag; + + return 0; +} +#endif /* CONFIG_SERIAL_CORE_CONSOLE */ + +static void uart_change_pm(struct uart_state *state, int pm_state) +{ + struct uart_port *port = state->port; + if (port->ops->pm) + port->ops->pm(port, pm_state, state->pm_state); + state->pm_state = pm_state; +} + +int uart_suspend_port(struct uart_driver *drv, struct uart_port *port) +{ + struct uart_state *state = drv->state + port->line; + + down(&state->sem); + + if (state->info && state->info->flags & UIF_INITIALIZED) { + struct uart_ops *ops = port->ops; + + spin_lock_irq(&port->lock); + ops->stop_tx(port, 0); + ops->set_mctrl(port, 0); + ops->stop_rx(port); + spin_unlock_irq(&port->lock); + + /* + * Wait for the transmitter to empty. + */ + while (!ops->tx_empty(port)) { + set_current_state(TASK_UNINTERRUPTIBLE); + schedule_timeout(10*HZ/1000); + } + set_current_state(TASK_RUNNING); + + ops->shutdown(port); + } + + /* + * Disable the console device before suspending. + */ + if (uart_console(port)) + port->cons->flags &= ~CON_ENABLED; + + uart_change_pm(state, 3); + + up(&state->sem); + + return 0; +} + +int uart_resume_port(struct uart_driver *drv, struct uart_port *port) +{ + struct uart_state *state = drv->state + port->line; + + down(&state->sem); + + uart_change_pm(state, 0); + + /* + * Re-enable the console device after suspending. + */ + if (uart_console(port)) { + uart_change_speed(state, NULL); + port->cons->flags |= CON_ENABLED; + } + + if (state->info && state->info->flags & UIF_INITIALIZED) { + struct uart_ops *ops = port->ops; + + ops->set_mctrl(port, 0); + ops->startup(port); + uart_change_speed(state, NULL); + spin_lock_irq(&port->lock); + ops->set_mctrl(port, port->mctrl); + ops->start_tx(port, 0); + spin_unlock_irq(&port->lock); + } + + up(&state->sem); + + return 0; +} + +static inline void +uart_report_port(struct uart_driver *drv, struct uart_port *port) +{ + printk("%s%d", drv->dev_name, port->line); + printk(" at "); + switch (port->iotype) { + case UPIO_PORT: + printk("I/O 0x%x", port->iobase); + break; + case UPIO_HUB6: + printk("I/O 0x%x offset 0x%x", port->iobase, port->hub6); + break; + case UPIO_MEM: + printk("MMIO 0x%lx", port->mapbase); + break; + } + printk(" (irq = %d) is a %s\n", port->irq, uart_type(port)); +} + +static void +uart_configure_port(struct uart_driver *drv, struct uart_state *state, + struct uart_port *port) +{ + unsigned int flags; + + /* + * If there isn't a port here, don't do anything further. + */ + if (!port->iobase && !port->mapbase && !port->membase) + return; + + /* + * Now do the auto configuration stuff. Note that config_port + * is expected to claim the resources and map the port for us. + */ + flags = UART_CONFIG_TYPE; + if (port->flags & UPF_AUTO_IRQ) + flags |= UART_CONFIG_IRQ; + if (port->flags & UPF_BOOT_AUTOCONF) { + port->type = PORT_UNKNOWN; + port->ops->config_port(port, flags); + } + + if (port->type != PORT_UNKNOWN) { + unsigned long flags; + + uart_report_port(drv, port); + + /* + * Ensure that the modem control lines are de-activated. + * We probably don't need a spinlock around this, but + */ + spin_lock_irqsave(&port->lock, flags); + port->ops->set_mctrl(port, 0); + spin_unlock_irqrestore(&port->lock, flags); + + /* + * Power down all ports by default, except the + * console if we have one. + */ + if (!uart_console(port)) + uart_change_pm(state, 3); + } +} + +/* + * This reverses the effects of uart_configure_port, hanging up the + * port before removal. + */ +static void +uart_unconfigure_port(struct uart_driver *drv, struct uart_state *state) +{ + struct uart_port *port = state->port; + struct uart_info *info = state->info; + + if (info && info->tty) + tty_vhangup(info->tty); + + down(&state->sem); + + state->info = NULL; + + /* + * Free the port IO and memory resources, if any. + */ + if (port->type != PORT_UNKNOWN) + port->ops->release_port(port); + + /* + * Indicate that there isn't a port here anymore. + */ + port->type = PORT_UNKNOWN; + + /* + * Kill the tasklet, and free resources. + */ + if (info) { + tasklet_kill(&info->tlet); + kfree(info); + } + + up(&state->sem); +} + +static struct tty_operations uart_ops = { + .open = uart_open, + .close = uart_close, + .write = uart_write, + .put_char = uart_put_char, + .flush_chars = uart_flush_chars, + .write_room = uart_write_room, + .chars_in_buffer= uart_chars_in_buffer, + .flush_buffer = uart_flush_buffer, + .ioctl = uart_ioctl, + .throttle = uart_throttle, + .unthrottle = uart_unthrottle, + .send_xchar = uart_send_xchar, + .set_termios = uart_set_termios, + .stop = uart_stop, + .start = uart_start, + .hangup = uart_hangup, + .break_ctl = uart_break_ctl, + .wait_until_sent= uart_wait_until_sent, +#ifdef CONFIG_PROC_FS + .read_proc = uart_read_proc, +#endif + .tiocmget = uart_tiocmget, + .tiocmset = uart_tiocmset, +}; + +/** + * uart_register_driver - register a driver with the uart core layer + * @drv: low level driver structure + * + * Register a uart driver with the core driver. We in turn register + * with the tty layer, and initialise the core driver per-port state. + * + * We have a proc file in /proc/tty/driver which is named after the + * normal driver. + * + * drv->port should be NULL, and the per-port structures should be + * registered using uart_add_one_port after this call has succeeded. + */ +int uart_register_driver(struct uart_driver *drv) +{ + struct tty_driver *normal = NULL; + int i, retval; + + BUG_ON(drv->state); + + /* + * Maybe we should be using a slab cache for this, especially if + * we have a large number of ports to handle. + */ + drv->state = kmalloc(sizeof(struct uart_state) * drv->nr, GFP_KERNEL); + retval = -ENOMEM; + if (!drv->state) + goto out; + + memset(drv->state, 0, sizeof(struct uart_state) * drv->nr); + + normal = alloc_tty_driver(drv->nr); + if (!normal) + goto out; + + drv->tty_driver = normal; + + normal->owner = drv->owner; + normal->driver_name = drv->driver_name; + normal->devfs_name = drv->devfs_name; + normal->name = drv->dev_name; + normal->major = drv->major; + normal->minor_start = drv->minor; + normal->type = TTY_DRIVER_TYPE_SERIAL; + normal->subtype = SERIAL_TYPE_NORMAL; + normal->init_termios = tty_std_termios; + normal->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL; + normal->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_NO_DEVFS; + normal->driver_state = drv; + tty_set_operations(normal, &uart_ops); + + /* + * Initialise the UART state(s). + */ + for (i = 0; i < drv->nr; i++) { + struct uart_state *state = drv->state + i; + + state->close_delay = 5 * HZ / 10; + state->closing_wait = 30 * HZ; + + init_MUTEX(&state->sem); + } + + retval = tty_register_driver(normal); + out: + if (retval < 0) { + put_tty_driver(normal); + kfree(drv->state); + } + return retval; +} + +/** + * uart_unregister_driver - remove a driver from the uart core layer + * @drv: low level driver structure + * + * Remove all references to a driver from the core driver. The low + * level driver must have removed all its ports via the + * uart_remove_one_port() if it registered them with uart_add_one_port(). + * (ie, drv->port == NULL) + */ +void uart_unregister_driver(struct uart_driver *drv) +{ + struct tty_driver *p = drv->tty_driver; + tty_unregister_driver(p); + put_tty_driver(p); + kfree(drv->state); + drv->tty_driver = NULL; +} + +struct tty_driver *uart_console_device(struct console *co, int *index) +{ + struct uart_driver *p = co->data; + *index = co->index; + return p->tty_driver; +} + +/** + * uart_add_one_port - attach a driver-defined port structure + * @drv: pointer to the uart low level driver structure for this port + * @port: uart port structure to use for this port. + * + * This allows the driver to register its own uart_port structure + * with the core driver. The main purpose is to allow the low + * level uart drivers to expand uart_port, rather than having yet + * more levels of structures. + */ +int uart_add_one_port(struct uart_driver *drv, struct uart_port *port) +{ + struct uart_state *state; + int ret = 0; + + BUG_ON(in_interrupt()); + + if (port->line >= drv->nr) + return -EINVAL; + + state = drv->state + port->line; + + down(&port_sem); + if (state->port) { + ret = -EINVAL; + goto out; + } + + state->port = port; + + spin_lock_init(&port->lock); + port->cons = drv->cons; + port->info = state->info; + + uart_configure_port(drv, state, port); + + /* + * Register the port whether it's detected or not. This allows + * setserial to be used to alter this ports parameters. + */ + tty_register_device(drv->tty_driver, port->line, NULL); + + out: + up(&port_sem); + + return ret; +} + +/** + * uart_remove_one_port - detach a driver defined port structure + * @drv: pointer to the uart low level driver structure for this port + * @port: uart port structure for this port + * + * This unhooks (and hangs up) the specified port structure from the + * core driver. No further calls will be made to the low-level code + * for this port. + */ +int uart_remove_one_port(struct uart_driver *drv, struct uart_port *port) +{ + struct uart_state *state = drv->state + port->line; + + BUG_ON(in_interrupt()); + + if (state->port != port) + printk(KERN_ALERT "Removing wrong port: %p != %p\n", + state->port, port); + + down(&port_sem); + + /* + * Remove the devices from devfs + */ + tty_unregister_device(drv->tty_driver, port->line); + + uart_unconfigure_port(drv, state); + state->port = NULL; + up(&port_sem); + + return 0; +} + +/* + * Are the two ports equivalent? + */ +static int uart_match_port(struct uart_port *port1, struct uart_port *port2) +{ + if (port1->iotype != port2->iotype) + return 0; + + switch (port1->iotype) { + case UPIO_PORT: + return (port1->iobase == port2->iobase); + case UPIO_HUB6: + return (port1->iobase == port2->iobase) && + (port1->hub6 == port2->hub6); + case UPIO_MEM: + return (port1->membase == port2->membase); + } + return 0; +} + +/* + * Try to find an unused uart_state slot for a port. + */ +static struct uart_state * +uart_find_match_or_unused(struct uart_driver *drv, struct uart_port *port) +{ + int i; + + /* + * First, find a port entry which matches. Note: if we do + * find a matching entry, and it has a non-zero use count, + * then we can't register the port. + */ + for (i = 0; i < drv->nr; i++) + if (uart_match_port(drv->state[i].port, port)) + return &drv->state[i]; + + /* + * We didn't find a matching entry, so look for the first + * free entry. We look for one which hasn't been previously + * used (indicated by zero iobase). + */ + for (i = 0; i < drv->nr; i++) + if (drv->state[i].port->type == PORT_UNKNOWN && + drv->state[i].port->iobase == 0 && + drv->state[i].count == 0) + return &drv->state[i]; + + /* + * That also failed. Last resort is to find any currently + * entry which doesn't have a real port associated with it. + */ + for (i = 0; i < drv->nr; i++) + if (drv->state[i].port->type == PORT_UNKNOWN && + drv->state[i].count == 0) + return &drv->state[i]; + + return NULL; +} + +/** + * uart_register_port: register uart settings with a port + * @drv: pointer to the uart low level driver structure for this port + * @port: uart port structure describing the port + * + * Register UART settings with the specified low level driver. Detect + * the type of the port if UPF_BOOT_AUTOCONF is set, and detect the + * IRQ if UPF_AUTO_IRQ is set. + * + * We try to pick the same port for the same IO base address, so that + * when a modem is plugged in, unplugged and plugged back in, it gets + * allocated the same port. + * + * Returns negative error, or positive line number. + */ +int uart_register_port(struct uart_driver *drv, struct uart_port *port) +{ + struct uart_state *state; + int ret; + + down(&port_sem); + + state = uart_find_match_or_unused(drv, port); + + if (state) { + /* + * Ok, we've found a line that we can use. + * + * If we find a port that matches this one, and it appears + * to be in-use (even if it doesn't have a type) we shouldn't + * alter it underneath itself - the port may be open and + * trying to do useful work. + */ + if (uart_users(state) != 0) { + ret = -EBUSY; + goto out; + } + + /* + * If the port is already initialised, don't touch it. + */ + if (state->port->type == PORT_UNKNOWN) { + state->port->iobase = port->iobase; + state->port->membase = port->membase; + state->port->irq = port->irq; + state->port->uartclk = port->uartclk; + state->port->fifosize = port->fifosize; + state->port->regshift = port->regshift; + state->port->iotype = port->iotype; + state->port->flags = port->flags; + state->port->line = state - drv->state; + state->port->mapbase = port->mapbase; + + uart_configure_port(drv, state, state->port); + } + + ret = state->port->line; + } else + ret = -ENOSPC; + out: + up(&port_sem); + return ret; +} + +/** + * uart_unregister_port - de-allocate a port + * @drv: pointer to the uart low level driver structure for this port + * @line: line index previously returned from uart_register_port() + * + * Hang up the specified line associated with the low level driver, + * and mark the port as unused. + */ +void uart_unregister_port(struct uart_driver *drv, int line) +{ + struct uart_state *state; + + if (line < 0 || line >= drv->nr) { + printk(KERN_ERR "Attempt to unregister "); + printk("%s%d", drv->dev_name, line); + printk("\n"); + return; + } + + state = drv->state + line; + + down(&port_sem); + uart_unconfigure_port(drv, state); + up(&port_sem); +} + +EXPORT_SYMBOL(uart_write_wakeup); +EXPORT_SYMBOL(uart_register_driver); +EXPORT_SYMBOL(uart_unregister_driver); +EXPORT_SYMBOL(uart_suspend_port); +EXPORT_SYMBOL(uart_resume_port); +EXPORT_SYMBOL(uart_register_port); +EXPORT_SYMBOL(uart_unregister_port); +EXPORT_SYMBOL(uart_add_one_port); +EXPORT_SYMBOL(uart_remove_one_port); + +MODULE_DESCRIPTION("Serial driver core"); +MODULE_LICENSE("GPL"); diff -prauN linux-2.6.0-test5/drivers/serial/serial_cs.c wli-2.6.0-test5-bk12-25/drivers/serial/serial_cs.c --- linux-2.6.0-test5/drivers/serial/serial_cs.c 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/drivers/serial/serial_cs.c 2003-09-25 19:16:04.000000000 -0700 @@ -0,0 +1,712 @@ +/*====================================================================== + + A driver for PCMCIA serial devices + + serial_cs.c 1.134 2002/05/04 05:48:53 + + The contents of this file are subject to the Mozilla Public + License Version 1.1 (the "License"); you may not use this file + except in compliance with the License. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS + IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + implied. See the License for the specific language governing + rights and limitations under the License. + + The initial developer of the original code is David A. Hinds + . Portions created by David A. Hinds + are Copyright (C) 1999 David A. Hinds. All Rights Reserved. + + Alternatively, the contents of this file may be used under the + terms of the GNU General Public License version 2 (the "GPL"), in which + case the provisions of the GPL are applicable instead of the + above. If you wish to allow the use of your version of this file + only under the terms of the GPL and not to allow others to use + your version of this file under the MPL, indicate your decision + by deleting the provisions above and replace them with the notice + and other provisions required by the GPL. If you do not delete + the provisions above, a recipient may use your version of this + file under either the MPL or the GPL. + +======================================================================*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#ifdef PCMCIA_DEBUG +static int pc_debug = PCMCIA_DEBUG; +MODULE_PARM(pc_debug, "i"); +#define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args) +static char *version = "serial_cs.c 1.134 2002/05/04 05:48:53 (David Hinds)"; +#else +#define DEBUG(n, args...) +#endif + +/*====================================================================*/ + +/* Parameters that can be set with 'insmod' */ + +/* Bit map of interrupts to choose from */ +static u_int irq_mask = 0xdeb8; +static int irq_list[4] = { -1 }; + +/* Enable the speaker? */ +static int do_sound = 1; +/* Skip strict UART tests? */ +static int buggy_uart; + +MODULE_PARM(irq_mask, "i"); +MODULE_PARM(irq_list, "1-4i"); +MODULE_PARM(do_sound, "i"); +MODULE_PARM(buggy_uart, "i"); + +/*====================================================================*/ + +/* Table of multi-port card ID's */ + +struct multi_id { + u_short manfid; + u_short prodid; + int multi; /* 1 = multifunction, > 1 = # ports */ +}; + +static struct multi_id multi_id[] = { + { MANFID_OMEGA, PRODID_OMEGA_QSP_100, 4 }, + { MANFID_QUATECH, PRODID_QUATECH_DUAL_RS232, 2 }, + { MANFID_QUATECH, PRODID_QUATECH_DUAL_RS232_D1, 2 }, + { MANFID_QUATECH, PRODID_QUATECH_QUAD_RS232, 4 }, + { MANFID_SOCKET, PRODID_SOCKET_DUAL_RS232, 2 }, + { MANFID_INTEL, PRODID_INTEL_DUAL_RS232, 2 }, + { MANFID_NATINST, PRODID_NATINST_QUAD_RS232, 4 } +}; +#define MULTI_COUNT (sizeof(multi_id)/sizeof(struct multi_id)) + +struct serial_info { + dev_link_t link; + int ndev; + int multi; + int slave; + int manfid; + dev_node_t node[4]; + int line[4]; +}; + +static void serial_config(dev_link_t * link); +static int serial_event(event_t event, int priority, + event_callback_args_t * args); + +static dev_info_t dev_info = "serial_cs"; + +static dev_link_t *serial_attach(void); +static void serial_detach(dev_link_t *); + +static dev_link_t *dev_list = NULL; + +/*====================================================================== + + After a card is removed, serial_remove() will unregister + the serial device(s), and release the PCMCIA configuration. + +======================================================================*/ + +static void serial_remove(dev_link_t *link) +{ + struct serial_info *info = link->priv; + int i; + + link->state &= ~DEV_PRESENT; + + DEBUG(0, "serial_release(0x%p)\n", link); + + /* + * Recheck to see if the device is still configured. + */ + if (info->link.state & DEV_CONFIG) { + for (i = 0; i < info->ndev; i++) + unregister_serial(info->line[i]); + + info->link.dev = NULL; + + if (!info->slave) { + CardServices(ReleaseConfiguration, info->link.handle); + CardServices(ReleaseIO, info->link.handle, &info->link.io); + CardServices(ReleaseIRQ, info->link.handle, &info->link.irq); + } + + info->link.state &= ~DEV_CONFIG; + } +} + +/*====================================================================== + + serial_attach() creates an "instance" of the driver, allocating + local data structures for one device. The device is registered + with Card Services. + +======================================================================*/ + +static dev_link_t *serial_attach(void) +{ + struct serial_info *info; + client_reg_t client_reg; + dev_link_t *link; + int i, ret; + + DEBUG(0, "serial_attach()\n"); + + /* Create new serial device */ + info = kmalloc(sizeof (*info), GFP_KERNEL); + if (!info) + return NULL; + memset(info, 0, sizeof (*info)); + link = &info->link; + link->priv = info; + + link->io.Attributes1 = IO_DATA_PATH_WIDTH_8; + link->io.NumPorts1 = 8; + link->irq.Attributes = IRQ_TYPE_EXCLUSIVE; + link->irq.IRQInfo1 = IRQ_INFO2_VALID | IRQ_LEVEL_ID; + if (irq_list[0] == -1) + link->irq.IRQInfo2 = irq_mask; + else + for (i = 0; i < 4; i++) + link->irq.IRQInfo2 |= 1 << irq_list[i]; + link->conf.Attributes = CONF_ENABLE_IRQ; + if (do_sound) { + link->conf.Attributes |= CONF_ENABLE_SPKR; + link->conf.Status = CCSR_AUDIO_ENA; + } + link->conf.IntType = INT_MEMORY_AND_IO; + + /* Register with Card Services */ + link->next = dev_list; + dev_list = link; + client_reg.dev_info = &dev_info; + client_reg.Attributes = INFO_IO_CLIENT | INFO_CARD_SHARE; + client_reg.EventMask = + CS_EVENT_CARD_INSERTION | CS_EVENT_CARD_REMOVAL | + CS_EVENT_RESET_PHYSICAL | CS_EVENT_CARD_RESET | + CS_EVENT_PM_SUSPEND | CS_EVENT_PM_RESUME; + client_reg.event_handler = &serial_event; + client_reg.Version = 0x0210; + client_reg.event_callback_args.client_data = link; + ret = CardServices(RegisterClient, &link->handle, &client_reg); + if (ret != CS_SUCCESS) { + cs_error(link->handle, RegisterClient, ret); + serial_detach(link); + return NULL; + } + + return link; +} + +/*====================================================================== + + This deletes a driver "instance". The device is de-registered + with Card Services. If it has been released, all local data + structures are freed. Otherwise, the structures will be freed + when the device is released. + +======================================================================*/ + +static void serial_detach(dev_link_t * link) +{ + struct serial_info *info = link->priv; + dev_link_t **linkp; + int ret; + + DEBUG(0, "serial_detach(0x%p)\n", link); + + /* Locate device structure */ + for (linkp = &dev_list; *linkp; linkp = &(*linkp)->next) + if (*linkp == link) + break; + if (*linkp == NULL) + return; + + /* + * Ensure any outstanding scheduled tasks are completed. + */ + flush_scheduled_work(); + + /* + * Ensure that the ports have been released. + */ + serial_remove(link); + + if (link->handle) { + ret = CardServices(DeregisterClient, link->handle); + if (ret != CS_SUCCESS) + cs_error(link->handle, DeregisterClient, ret); + } + + /* Unlink device structure, free bits */ + *linkp = link->next; + kfree(info); +} + +/*====================================================================*/ + +static int setup_serial(struct serial_info * info, ioaddr_t port, int irq) +{ + struct serial_struct serial; + int line; + + memset(&serial, 0, sizeof (serial)); + serial.port = port; + serial.irq = irq; + serial.flags = UPF_SKIP_TEST | UPF_SHARE_IRQ; + if (buggy_uart) + serial.flags |= UPF_BUGGY_UART; + line = register_serial(&serial); + if (line < 0) { + printk(KERN_NOTICE "serial_cs: register_serial() at 0x%04lx," + " irq %d failed\n", (u_long) serial.port, serial.irq); + return -EINVAL; + } + + info->line[info->ndev] = line; + sprintf(info->node[info->ndev].dev_name, "ttyS%d", line); + info->node[info->ndev].major = TTY_MAJOR; + info->node[info->ndev].minor = 0x40 + line; + if (info->ndev > 0) + info->node[info->ndev - 1].next = &info->node[info->ndev]; + info->ndev++; + + return 0; +} + +/*====================================================================*/ + +static int +get_tuple(int fn, client_handle_t handle, tuple_t * tuple, cisparse_t * parse) +{ + int i; + i = CardServices(fn, handle, tuple); + if (i != CS_SUCCESS) + return CS_NO_MORE_ITEMS; + i = CardServices(GetTupleData, handle, tuple); + if (i != CS_SUCCESS) + return i; + return CardServices(ParseTuple, handle, tuple, parse); +} + +#define first_tuple(a, b, c) get_tuple(GetFirstTuple, a, b, c) +#define next_tuple(a, b, c) get_tuple(GetNextTuple, a, b, c) + +/*====================================================================*/ + +static int simple_config(dev_link_t * link) +{ + static ioaddr_t base[5] = { 0x3f8, 0x2f8, 0x3e8, 0x2e8, 0x0 }; + client_handle_t handle = link->handle; + struct serial_info *info = link->priv; + tuple_t tuple; + u_char buf[256]; + cisparse_t parse; + cistpl_cftable_entry_t *cf = &parse.cftable_entry; + config_info_t config; + int i, j, try; + + /* If the card is already configured, look up the port and irq */ + i = CardServices(GetConfigurationInfo, handle, &config); + if ((i == CS_SUCCESS) && (config.Attributes & CONF_VALID_CLIENT)) { + ioaddr_t port = 0; + if ((config.BasePort2 != 0) && (config.NumPorts2 == 8)) { + port = config.BasePort2; + info->slave = 1; + } else if ((info->manfid == MANFID_OSITECH) && + (config.NumPorts1 == 0x40)) { + port = config.BasePort1 + 0x28; + info->slave = 1; + } + if (info->slave) + return setup_serial(info, port, config.AssignedIRQ); + } + link->conf.Vcc = config.Vcc; + + /* First pass: look for a config entry that looks normal. */ + tuple.TupleData = (cisdata_t *) buf; + tuple.TupleOffset = 0; + tuple.TupleDataMax = 255; + tuple.Attributes = 0; + tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; + /* Two tries: without IO aliases, then with aliases */ + for (try = 0; try < 2; try++) { + i = first_tuple(handle, &tuple, &parse); + while (i != CS_NO_MORE_ITEMS) { + if (i != CS_SUCCESS) + goto next_entry; + if (cf->vpp1.present & (1 << CISTPL_POWER_VNOM)) + link->conf.Vpp1 = link->conf.Vpp2 = + cf->vpp1.param[CISTPL_POWER_VNOM] / 10000; + if ((cf->io.nwin > 0) && (cf->io.win[0].len == 8) && + (cf->io.win[0].base != 0)) { + link->conf.ConfigIndex = cf->index; + link->io.BasePort1 = cf->io.win[0].base; + link->io.IOAddrLines = (try == 0) ? + 16 : cf->io.flags & CISTPL_IO_LINES_MASK; + i = + CardServices(RequestIO, link->handle, + &link->io); + if (i == CS_SUCCESS) + goto found_port; + } + next_entry: + i = next_tuple(handle, &tuple, &parse); + } + } + + /* Second pass: try to find an entry that isn't picky about + its base address, then try to grab any standard serial port + address, and finally try to get any free port. */ + i = first_tuple(handle, &tuple, &parse); + while (i != CS_NO_MORE_ITEMS) { + if ((i == CS_SUCCESS) && (cf->io.nwin > 0) && + ((cf->io.flags & CISTPL_IO_LINES_MASK) <= 3)) { + link->conf.ConfigIndex = cf->index; + for (j = 0; j < 5; j++) { + link->io.BasePort1 = base[j]; + link->io.IOAddrLines = base[j] ? 16 : 3; + i = CardServices(RequestIO, link->handle, + &link->io); + if (i == CS_SUCCESS) + goto found_port; + } + } + i = next_tuple(handle, &tuple, &parse); + } + + found_port: + if (i != CS_SUCCESS) { + printk(KERN_NOTICE + "serial_cs: no usable port range found, giving up\n"); + cs_error(link->handle, RequestIO, i); + return -1; + } + + i = CardServices(RequestIRQ, link->handle, &link->irq); + if (i != CS_SUCCESS) { + cs_error(link->handle, RequestIRQ, i); + link->irq.AssignedIRQ = 0; + } + if (info->multi && (info->manfid == MANFID_3COM)) + link->conf.ConfigIndex &= ~(0x08); + i = CardServices(RequestConfiguration, link->handle, &link->conf); + if (i != CS_SUCCESS) { + cs_error(link->handle, RequestConfiguration, i); + return -1; + } + + return setup_serial(info, link->io.BasePort1, link->irq.AssignedIRQ); +} + +static int multi_config(dev_link_t * link) +{ + client_handle_t handle = link->handle; + struct serial_info *info = link->priv; + tuple_t tuple; + u_char buf[256]; + cisparse_t parse; + cistpl_cftable_entry_t *cf = &parse.cftable_entry; + config_info_t config; + int i, base2 = 0; + + i = CardServices(GetConfigurationInfo, handle, &config); + if (i != CS_SUCCESS) { + cs_error(handle, GetConfigurationInfo, i); + return -1; + } + link->conf.Vcc = config.Vcc; + + tuple.TupleData = (cisdata_t *) buf; + tuple.TupleOffset = 0; + tuple.TupleDataMax = 255; + tuple.Attributes = 0; + tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; + + /* First, look for a generic full-sized window */ + link->io.NumPorts1 = info->multi * 8; + i = first_tuple(handle, &tuple, &parse); + while (i != CS_NO_MORE_ITEMS) { + /* The quad port cards have bad CIS's, so just look for a + window larger than 8 ports and assume it will be right */ + if ((i == CS_SUCCESS) && (cf->io.nwin == 1) && + (cf->io.win[0].len > 8)) { + link->conf.ConfigIndex = cf->index; + link->io.BasePort1 = cf->io.win[0].base; + link->io.IOAddrLines = + cf->io.flags & CISTPL_IO_LINES_MASK; + i = CardServices(RequestIO, link->handle, &link->io); + base2 = link->io.BasePort1 + 8; + if (i == CS_SUCCESS) + break; + } + i = next_tuple(handle, &tuple, &parse); + } + + /* If that didn't work, look for two windows */ + if (i != CS_SUCCESS) { + link->io.NumPorts1 = link->io.NumPorts2 = 8; + info->multi = 2; + i = first_tuple(handle, &tuple, &parse); + while (i != CS_NO_MORE_ITEMS) { + if ((i == CS_SUCCESS) && (cf->io.nwin == 2)) { + link->conf.ConfigIndex = cf->index; + link->io.BasePort1 = cf->io.win[0].base; + link->io.BasePort2 = cf->io.win[1].base; + link->io.IOAddrLines = + cf->io.flags & CISTPL_IO_LINES_MASK; + i = + CardServices(RequestIO, link->handle, + &link->io); + base2 = link->io.BasePort2; + if (i == CS_SUCCESS) + break; + } + i = next_tuple(handle, &tuple, &parse); + } + } + + if (i != CS_SUCCESS) { + cs_error(link->handle, RequestIO, i); + return -1; + } + + i = CardServices(RequestIRQ, link->handle, &link->irq); + if (i != CS_SUCCESS) { + printk(KERN_NOTICE + "serial_cs: no usable port range found, giving up\n"); + cs_error(link->handle, RequestIRQ, i); + link->irq.AssignedIRQ = 0; + } + /* Socket Dual IO: this enables irq's for second port */ + if (info->multi && (info->manfid == MANFID_SOCKET)) { + link->conf.Present |= PRESENT_EXT_STATUS; + link->conf.ExtStatus = ESR_REQ_ATTN_ENA; + } + i = CardServices(RequestConfiguration, link->handle, &link->conf); + if (i != CS_SUCCESS) { + cs_error(link->handle, RequestConfiguration, i); + return -1; + } + + /* The Oxford Semiconductor OXCF950 cards are in fact single-port: + 8 registers are for the UART, the others are extra registers */ + if (info->manfid == MANFID_OXSEMI) { + if (cf->index == 1 || cf->index == 3) { + setup_serial(info, base2, link->irq.AssignedIRQ); + outb(12, link->io.BasePort1 + 1); + } else { + setup_serial(info, link->io.BasePort1, link->irq.AssignedIRQ); + outb(12, base2 + 1); + } + return 0; + } + + setup_serial(info, link->io.BasePort1, link->irq.AssignedIRQ); + /* The Nokia cards are not really multiport cards */ + if (info->manfid == MANFID_NOKIA) + return 0; + for (i = 0; i < info->multi - 1; i++) + setup_serial(info, base2 + (8 * i), link->irq.AssignedIRQ); + + return 0; +} + +/*====================================================================== + + serial_config() is scheduled to run after a CARD_INSERTION event + is received, to configure the PCMCIA socket, and to make the + serial device available to the system. + +======================================================================*/ + +#define CS_CHECK(fn, args...) \ +while ((last_ret=CardServices(last_fn=(fn), args))!=0) goto cs_failed + +void serial_config(dev_link_t * link) +{ + client_handle_t handle = link->handle; + struct serial_info *info = link->priv; + tuple_t tuple; + u_short buf[128]; + cisparse_t parse; + cistpl_cftable_entry_t *cf = &parse.cftable_entry; + int i, last_ret, last_fn; + + DEBUG(0, "serial_config(0x%p)\n", link); + + tuple.TupleData = (cisdata_t *) buf; + tuple.TupleOffset = 0; + tuple.TupleDataMax = 255; + tuple.Attributes = 0; + /* Get configuration register information */ + tuple.DesiredTuple = CISTPL_CONFIG; + last_ret = first_tuple(handle, &tuple, &parse); + if (last_ret != CS_SUCCESS) { + last_fn = ParseTuple; + goto cs_failed; + } + link->conf.ConfigBase = parse.config.base; + link->conf.Present = parse.config.rmask[0]; + + /* Configure card */ + link->state |= DEV_CONFIG; + + /* Is this a compliant multifunction card? */ + tuple.DesiredTuple = CISTPL_LONGLINK_MFC; + tuple.Attributes = TUPLE_RETURN_COMMON | TUPLE_RETURN_LINK; + info->multi = (first_tuple(handle, &tuple, &parse) == CS_SUCCESS); + + /* Is this a multiport card? */ + tuple.DesiredTuple = CISTPL_MANFID; + if (first_tuple(handle, &tuple, &parse) == CS_SUCCESS) { + info->manfid = le16_to_cpu(buf[0]); + for (i = 0; i < MULTI_COUNT; i++) + if ((info->manfid == multi_id[i].manfid) && + (le16_to_cpu(buf[1]) == multi_id[i].prodid)) + break; + if (i < MULTI_COUNT) + info->multi = multi_id[i].multi; + } + + /* Another check for dual-serial cards: look for either serial or + multifunction cards that ask for appropriate IO port ranges */ + tuple.DesiredTuple = CISTPL_FUNCID; + if ((info->multi == 0) && + ((first_tuple(handle, &tuple, &parse) != CS_SUCCESS) || + (parse.funcid.func == CISTPL_FUNCID_MULTI) || + (parse.funcid.func == CISTPL_FUNCID_SERIAL))) { + tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; + if (first_tuple(handle, &tuple, &parse) == CS_SUCCESS) { + if ((cf->io.nwin == 1) && (cf->io.win[0].len % 8 == 0)) + info->multi = cf->io.win[0].len >> 3; + if ((cf->io.nwin == 2) && (cf->io.win[0].len == 8) && + (cf->io.win[1].len == 8)) + info->multi = 2; + } + } + + if (info->multi > 1) + multi_config(link); + else + simple_config(link); + + if (info->ndev == 0) + goto failed; + + if (info->manfid == MANFID_IBM) { + conf_reg_t reg = { 0, CS_READ, 0x800, 0 }; + CS_CHECK(AccessConfigurationRegister, link->handle, ®); + reg.Action = CS_WRITE; + reg.Value = reg.Value | 1; + CS_CHECK(AccessConfigurationRegister, link->handle, ®); + } + + link->dev = &info->node[0]; + link->state &= ~DEV_CONFIG_PENDING; + return; + + cs_failed: + cs_error(link->handle, last_fn, last_ret); + failed: + serial_remove(link); + link->state &= ~DEV_CONFIG_PENDING; +} + +/*====================================================================== + + The card status event handler. Mostly, this schedules other + stuff to run after an event is received. A CARD_REMOVAL event + also sets some flags to discourage the serial drivers from + talking to the ports. + +======================================================================*/ + +static int +serial_event(event_t event, int priority, event_callback_args_t * args) +{ + dev_link_t *link = args->client_data; + struct serial_info *info = link->priv; + + DEBUG(1, "serial_event(0x%06x)\n", event); + + switch (event) { + case CS_EVENT_CARD_REMOVAL: + serial_remove(link); + break; + + case CS_EVENT_CARD_INSERTION: + link->state |= DEV_PRESENT | DEV_CONFIG_PENDING; + serial_config(link); + break; + + case CS_EVENT_PM_SUSPEND: + link->state |= DEV_SUSPEND; + /* Fall through... */ + case CS_EVENT_RESET_PHYSICAL: + if ((link->state & DEV_CONFIG) && !info->slave) + CardServices(ReleaseConfiguration, link->handle); + break; + + case CS_EVENT_PM_RESUME: + link->state &= ~DEV_SUSPEND; + /* Fall through... */ + case CS_EVENT_CARD_RESET: + if (DEV_OK(link) && !info->slave) + CardServices(RequestConfiguration, link->handle, + &link->conf); + break; + } + return 0; +} + +static struct pcmcia_driver serial_cs_driver = { + .owner = THIS_MODULE, + .drv = { + .name = "serial_cs", + }, + .attach = serial_attach, + .detach = serial_detach, +}; + +static int __init init_serial_cs(void) +{ + return pcmcia_register_driver(&serial_cs_driver); +} + +static void __exit exit_serial_cs(void) +{ + pcmcia_unregister_driver(&serial_cs_driver); + + /* XXX: this really needs to move into generic code.. */ + while (dev_list != NULL) + serial_detach(dev_list); +} + +module_init(init_serial_cs); +module_exit(exit_serial_cs); + +MODULE_LICENSE("GPL"); diff -prauN linux-2.6.0-test5/drivers/telephony/Kconfig wli-2.6.0-test5-bk12-25/drivers/telephony/Kconfig --- linux-2.6.0-test5/drivers/telephony/Kconfig 2003-09-08 12:49:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/telephony/Kconfig 2003-09-25 19:16:04.000000000 -0700 @@ -13,10 +13,8 @@ config PHONE Note: this has nothing to do with modems. You do not need to say Y here in order to be able to use a modem under Linux. - This support is also available as a module. If you want to compile - it as a module, say M here and read - . The module will be called - phonedev. + To compile this driver as a module, choose M here: the + module will be called phonedev. config PHONE_IXJ tristate "QuickNet Internet LineJack/PhoneJack support" diff -prauN linux-2.6.0-test5/drivers/telephony/ixj_pcmcia.c wli-2.6.0-test5-bk12-25/drivers/telephony/ixj_pcmcia.c --- linux-2.6.0-test5/drivers/telephony/ixj_pcmcia.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/telephony/ixj_pcmcia.c 2003-09-25 19:16:04.000000000 -0700 @@ -60,8 +60,10 @@ static dev_link_t *ixj_attach(void) link->conf.Vcc = 50; link->conf.IntType = INT_MEMORY_AND_IO; link->priv = kmalloc(sizeof(struct ixj_info_t), GFP_KERNEL); - if (!link->priv) + if (!link->priv) { + kfree(link); return NULL; + } memset(link->priv, 0, sizeof(struct ixj_info_t)); /* Register with Card Services */ link->next = dev_list; diff -prauN linux-2.6.0-test5/drivers/usb/Kconfig wli-2.6.0-test5-bk12-25/drivers/usb/Kconfig --- linux-2.6.0-test5/drivers/usb/Kconfig 2003-09-08 12:49:55.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/usb/Kconfig 2003-09-25 19:16:04.000000000 -0700 @@ -33,10 +33,8 @@ config USB It doesn't normally hurt to select them all if you are not certain. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called usbcore. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called usbcore. source "drivers/usb/core/Kconfig" @@ -82,10 +80,8 @@ config USB_USS720 Say Y here if you own an USS-720 USB->Parport cable and intend to connect anything other than a printer to it. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called uss720. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called uss720. source "drivers/usb/serial/Kconfig" diff -prauN linux-2.6.0-test5/drivers/usb/class/Kconfig wli-2.6.0-test5-bk12-25/drivers/usb/class/Kconfig --- linux-2.6.0-test5/drivers/usb/class/Kconfig 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/usb/class/Kconfig 2003-09-25 19:16:04.000000000 -0700 @@ -11,10 +11,8 @@ config USB_AUDIO Say Y here if you want to connect USB audio equipment such as speakers to your computer's USB port. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called audio. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called audio. comment "USB Bluetooth TTY can only be used with disabled Bluetooth subsystem" depends on USB && BT @@ -36,10 +34,8 @@ config USB_BLUETOOTH_TTY If in doubt, say N here. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called bluetty. If you want to compile it as - a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called bluetty. config USB_MIDI tristate "USB MIDI support" @@ -59,10 +55,8 @@ config USB_MIDI * Roland UA-100 * Yamaha MU1000 - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called usb-midi. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called usb-midi. config USB_ACM tristate "USB Modem (CDC ACM) support" @@ -76,10 +70,8 @@ config USB_ACM /proc/bus/usb/devices, then your modem will not work with this driver. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called acm. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called acm. config USB_PRINTER tristate "USB Printer support" @@ -88,8 +80,6 @@ config USB_PRINTER Say Y here if you want to connect a USB printer to your computer's USB port. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called usblp. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called usblp. diff -prauN linux-2.6.0-test5/drivers/usb/class/usblp.c wli-2.6.0-test5-bk12-25/drivers/usb/class/usblp.c --- linux-2.6.0-test5/drivers/usb/class/usblp.c 2003-09-08 12:49:54.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/usb/class/usblp.c 2003-09-25 19:16:04.000000000 -0700 @@ -159,7 +159,10 @@ static void usblp_dump(struct usblp *usb dbg("usblp=0x%p", usblp); dbg("dev=0x%p", usblp->dev); dbg("present=%d", usblp->present); - dbg("buf=0x%p", usblp->buf); + dbg("readbuf=0x%p", usblp->readbuf); + dbg("writebuf=0x%p", usblp->writebuf); + dbg("readurb=0x%p", usblp->readurb); + dbg("writeurb=0x%p", usblp->writeurb); dbg("readcount=%d", usblp->readcount); dbg("ifnum=%d", usblp->ifnum); for (p = USBLP_FIRST_PROTOCOL; p <= USBLP_LAST_PROTOCOL; p++) { diff -prauN linux-2.6.0-test5/drivers/usb/core/config.c wli-2.6.0-test5-bk12-25/drivers/usb/core/config.c --- linux-2.6.0-test5/drivers/usb/core/config.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/usb/core/config.c 2003-09-25 19:16:04.000000000 -0700 @@ -10,364 +10,329 @@ /* these maximums are arbitrary */ #define USB_MAXCONFIG 8 -#define USB_ALTSETTINGALLOC 4 #define USB_MAXINTERFACES 32 static int usb_parse_endpoint(struct usb_host_endpoint *endpoint, unsigned char *buffer, int size) { + unsigned char *buffer0 = buffer; struct usb_descriptor_header *header; unsigned char *begin; - int parsed = 0, len, numskipped; + int numskipped; header = (struct usb_descriptor_header *)buffer; - - /* Everything should be fine being passed into here, but we sanity */ - /* check JIC */ - if (header->bLength > size) { - err("ran out of descriptors parsing"); - return -1; - } - if (header->bDescriptorType != USB_DT_ENDPOINT) { warn("unexpected descriptor 0x%X, expecting endpoint, 0x%X", header->bDescriptorType, USB_DT_ENDPOINT); - return parsed; + return -EINVAL; } - if (header->bLength == USB_DT_ENDPOINT_AUDIO_SIZE) + if (header->bLength >= USB_DT_ENDPOINT_AUDIO_SIZE) memcpy(&endpoint->desc, buffer, USB_DT_ENDPOINT_AUDIO_SIZE); - else + else if (header->bLength >= USB_DT_ENDPOINT_SIZE) memcpy(&endpoint->desc, buffer, USB_DT_ENDPOINT_SIZE); - + else { + warn("invalid endpoint descriptor"); + return -EINVAL; + } + + if ((endpoint->desc.bEndpointAddress & ~USB_ENDPOINT_DIR_MASK) >= 16) { + warn("invalid endpoint address 0x%X", + endpoint->desc.bEndpointAddress); + return -EINVAL; + } + le16_to_cpus(&endpoint->desc.wMaxPacketSize); buffer += header->bLength; size -= header->bLength; - parsed += header->bLength; - /* Skip over the rest of the Class Specific or Vendor Specific */ - /* descriptors */ + /* Skip over any Class Specific or Vendor Specific descriptors */ begin = buffer; numskipped = 0; while (size >= sizeof(struct usb_descriptor_header)) { header = (struct usb_descriptor_header *)buffer; - if (header->bLength < 2) { - err("invalid descriptor length of %d", header->bLength); - return -1; - } - /* If we find another "proper" descriptor then we're done */ if ((header->bDescriptorType == USB_DT_ENDPOINT) || - (header->bDescriptorType == USB_DT_INTERFACE) || - (header->bDescriptorType == USB_DT_CONFIG) || - (header->bDescriptorType == USB_DT_DEVICE)) + (header->bDescriptorType == USB_DT_INTERFACE)) break; - dbg("skipping descriptor 0x%X", - header->bDescriptorType); + dbg("skipping descriptor 0x%X", header->bDescriptorType); numskipped++; buffer += header->bLength; size -= header->bLength; - parsed += header->bLength; } - if (numskipped) + if (numskipped) { dbg("skipped %d class/vendor specific endpoint descriptors", numskipped); - - /* Copy any unknown descriptors into a storage area for drivers */ - /* to later parse */ - len = (int)(buffer - begin); - if (!len) { - endpoint->extra = NULL; - endpoint->extralen = 0; - return parsed; - } - - endpoint->extra = kmalloc(len, GFP_KERNEL); - - if (!endpoint->extra) { - err("couldn't allocate memory for endpoint extra descriptors"); - endpoint->extralen = 0; - return parsed; + endpoint->extra = begin; + endpoint->extralen = buffer - begin; } - memcpy(endpoint->extra, begin, len); - endpoint->extralen = len; - - return parsed; + return buffer - buffer0; } static void usb_release_intf(struct device *dev) { struct usb_interface *intf; int j; - int k; intf = to_usb_interface(dev); if (intf->altsetting) { for (j = 0; j < intf->num_altsetting; j++) { struct usb_host_interface *as = &intf->altsetting[j]; - if (as->extra) - kfree(as->extra); - if (as->endpoint) { - for (k = 0; k < as->desc.bNumEndpoints; k++) - if (as->endpoint[k].extra) - kfree(as->endpoint[k].extra); - kfree(as->endpoint); - } + kfree(as->endpoint); } kfree(intf->altsetting); } kfree(intf); } -static int usb_parse_interface(struct usb_interface *interface, unsigned char *buffer, int size) +static int usb_parse_interface(struct usb_host_config *config, unsigned char *buffer, int size) { - int i, len, numskipped, retval, parsed = 0; - struct usb_descriptor_header *header; + unsigned char *buffer0 = buffer; + struct usb_interface_descriptor *d; + int inum, asnum; + struct usb_interface *interface; struct usb_host_interface *ifp; + int len, numskipped; + struct usb_descriptor_header *header; unsigned char *begin; + int i, retval; - interface->act_altsetting = 0; - interface->num_altsetting = 0; - interface->max_altsetting = USB_ALTSETTINGALLOC; - device_initialize(&interface->dev); - interface->dev.release = usb_release_intf; - - /* put happens in usb_destroy_configuration */ - get_device(&interface->dev); - - interface->altsetting = kmalloc(sizeof(*interface->altsetting) * interface->max_altsetting, - GFP_KERNEL); - - if (!interface->altsetting) { - err("couldn't kmalloc interface->altsetting"); - return -1; - } - - while (size > 0) { - struct usb_interface_descriptor *d; - - if (interface->num_altsetting >= interface->max_altsetting) { - struct usb_host_interface *ptr; - int oldmas; - - oldmas = interface->max_altsetting; - interface->max_altsetting += USB_ALTSETTINGALLOC; - if (interface->max_altsetting > USB_MAXALTSETTING) { - warn("too many alternate settings (incr %d max %d)\n", - USB_ALTSETTINGALLOC, USB_MAXALTSETTING); - return -1; - } - - ptr = kmalloc(sizeof(*ptr) * interface->max_altsetting, GFP_KERNEL); - if (ptr == NULL) { - err("couldn't kmalloc interface->altsetting"); - return -1; - } - memcpy(ptr, interface->altsetting, sizeof(*interface->altsetting) * oldmas); - kfree(interface->altsetting); - interface->altsetting = ptr; - } - - ifp = interface->altsetting + interface->num_altsetting; - ifp->endpoint = NULL; - ifp->extra = NULL; - ifp->extralen = 0; - interface->num_altsetting++; - - memcpy(ifp, buffer, USB_DT_INTERFACE_SIZE); - - /* Skip over the interface */ - buffer += ifp->desc.bLength; - parsed += ifp->desc.bLength; - size -= ifp->desc.bLength; + d = (struct usb_interface_descriptor *) buffer; + if (d->bDescriptorType != USB_DT_INTERFACE) { + warn("unexpected descriptor 0x%X, expecting interface, 0x%X", + d->bDescriptorType, USB_DT_INTERFACE); + return -EINVAL; + } - begin = buffer; - numskipped = 0; + inum = d->bInterfaceNumber; + if (inum >= config->desc.bNumInterfaces) { - /* Skip over any interface, class or vendor descriptors */ + /* Skip to the next interface descriptor */ + buffer += d->bLength; + size -= d->bLength; while (size >= sizeof(struct usb_descriptor_header)) { - header = (struct usb_descriptor_header *)buffer; + header = (struct usb_descriptor_header *) buffer; - if (header->bLength < 2) { - err("invalid descriptor length of %d", header->bLength); - return -1; - } - - /* If we find another "proper" descriptor then we're done */ - if ((header->bDescriptorType == USB_DT_INTERFACE) || - (header->bDescriptorType == USB_DT_ENDPOINT) || - (header->bDescriptorType == USB_DT_CONFIG) || - (header->bDescriptorType == USB_DT_DEVICE)) + if (header->bDescriptorType == USB_DT_INTERFACE) break; - - numskipped++; - buffer += header->bLength; - parsed += header->bLength; size -= header->bLength; } + return buffer - buffer0; + } - if (numskipped) - dbg("skipped %d class/vendor specific interface descriptors", numskipped); + interface = config->interface[inum]; + asnum = d->bAlternateSetting; + if (asnum >= interface->num_altsetting) { + warn("invalid alternate setting %d for interface %d", + asnum, inum); + return -EINVAL; + } - /* Copy any unknown descriptors into a storage area for */ - /* drivers to later parse */ - len = (int)(buffer - begin); - if (len) { - ifp->extra = kmalloc(len, GFP_KERNEL); - - if (!ifp->extra) { - err("couldn't allocate memory for interface extra descriptors"); - ifp->extralen = 0; - return -1; - } - memcpy(ifp->extra, begin, len); - ifp->extralen = len; - } + ifp = &interface->altsetting[asnum]; + if (ifp->desc.bLength) { + warn("duplicate descriptor for interface %d altsetting %d", + inum, asnum); + return -EINVAL; + } + memcpy(&ifp->desc, buffer, USB_DT_INTERFACE_SIZE); + + buffer += d->bLength; + size -= d->bLength; - /* Did we hit an unexpected descriptor? */ + /* Skip over any Class Specific or Vendor Specific descriptors */ + begin = buffer; + numskipped = 0; + while (size >= sizeof(struct usb_descriptor_header)) { header = (struct usb_descriptor_header *)buffer; - if ((size >= sizeof(struct usb_descriptor_header)) && - ((header->bDescriptorType == USB_DT_CONFIG) || - (header->bDescriptorType == USB_DT_DEVICE))) - return parsed; - - if (ifp->desc.bNumEndpoints > USB_MAXENDPOINTS) { - warn("too many endpoints"); - return -1; - } - ifp->endpoint = (struct usb_host_endpoint *) - kmalloc(ifp->desc.bNumEndpoints * - sizeof(struct usb_host_endpoint), GFP_KERNEL); - if (!ifp->endpoint) { - err("out of memory"); - return -1; - } + /* If we find another "proper" descriptor then we're done */ + if ((header->bDescriptorType == USB_DT_INTERFACE) || + (header->bDescriptorType == USB_DT_ENDPOINT)) + break; - memset(ifp->endpoint, 0, ifp->desc.bNumEndpoints * - sizeof(struct usb_host_endpoint)); - - for (i = 0; i < ifp->desc.bNumEndpoints; i++) { - header = (struct usb_descriptor_header *)buffer; - - if (header->bLength > size) { - err("ran out of descriptors parsing"); - return -1; - } - - retval = usb_parse_endpoint(ifp->endpoint + i, buffer, size); - if (retval < 0) - return retval; + dbg("skipping descriptor 0x%X", header->bDescriptorType); + numskipped++; + + buffer += header->bLength; + size -= header->bLength; + } + if (numskipped) { + dbg("skipped %d class/vendor specific interface descriptors", numskipped); + ifp->extra = begin; + ifp->extralen = buffer - begin; + } + + if (ifp->desc.bNumEndpoints > USB_MAXENDPOINTS) { + warn("too many endpoints for interface %d altsetting %d", + inum, asnum); + return -EINVAL; + } + + len = ifp->desc.bNumEndpoints * sizeof(struct usb_host_endpoint); + ifp->endpoint = kmalloc(len, GFP_KERNEL); + if (!ifp->endpoint) { + err("out of memory"); + return -ENOMEM; + } + memset(ifp->endpoint, 0, len); - buffer += retval; - parsed += retval; - size -= retval; + for (i = 0; i < ifp->desc.bNumEndpoints; i++) { + if (size < USB_DT_ENDPOINT_SIZE) { + warn("ran out of descriptors while parsing endpoints"); + return -EINVAL; } - /* We check to see if it's an alternate to this one */ - d = (struct usb_interface_descriptor *)buffer; - if (size < USB_DT_INTERFACE_SIZE - || d->bDescriptorType != USB_DT_INTERFACE - || !d->bAlternateSetting) - return parsed; + retval = usb_parse_endpoint(ifp->endpoint + i, buffer, size); + if (retval < 0) + return retval; + + buffer += retval; + size -= retval; } - return parsed; + return buffer - buffer0; } -int usb_parse_configuration(struct usb_host_config *config, char *buffer) +int usb_parse_configuration(struct usb_host_config *config, char *buffer, int size) { - int i, size; - int retval = -EINVAL; + int nintf, nintf_orig; + int i, j; + struct usb_interface *interface; + char *buffer2; + int size2; struct usb_descriptor_header *header; + int numskipped, len; + char *begin; + int retval; memcpy(&config->desc, buffer, USB_DT_CONFIG_SIZE); - le16_to_cpus(&config->desc.wTotalLength); - size = config->desc.wTotalLength; + if (config->desc.bDescriptorType != USB_DT_CONFIG || + config->desc.bLength < USB_DT_CONFIG_SIZE) { + warn("invalid configuration descriptor"); + return -EINVAL; + } + config->desc.wTotalLength = size; - for (i = 0; i < USB_MAXINTERFACES; ++i) - config->interface[i] = NULL; + nintf = nintf_orig = config->desc.bNumInterfaces; + if (nintf > USB_MAXINTERFACES) { + warn("too many interfaces (%d max %d)", + nintf, USB_MAXINTERFACES); + config->desc.bNumInterfaces = nintf = USB_MAXINTERFACES; + } - if (config->desc.bNumInterfaces > USB_MAXINTERFACES) { - warn("too many interfaces"); - goto error; + for (i = 0; i < nintf; ++i) { + interface = config->interface[i] = + kmalloc(sizeof(struct usb_interface), GFP_KERNEL); + dbg("kmalloc IF %p, numif %i", interface, i); + if (!interface) { + err("out of memory"); + return -ENOMEM; + } + memset(interface, 0, sizeof(struct usb_interface)); + interface->dev.release = usb_release_intf; + device_initialize(&interface->dev); + + /* put happens in usb_destroy_configuration */ + get_device(&interface->dev); + } + + /* Go through the descriptors, checking their length and counting the + * number of altsettings for each interface */ + buffer2 = buffer; + size2 = size; + j = 0; + while (size2 >= sizeof(struct usb_descriptor_header)) { + header = (struct usb_descriptor_header *) buffer2; + if ((header->bLength > size2) || (header->bLength < 2)) { + warn("invalid descriptor of length %d", header->bLength); + return -EINVAL; + } + + if (header->bDescriptorType == USB_DT_INTERFACE) { + struct usb_interface_descriptor *d; + + if (header->bLength < USB_DT_INTERFACE_SIZE) { + warn("invalid interface descriptor"); + return -EINVAL; + } + d = (struct usb_interface_descriptor *) header; + i = d->bInterfaceNumber; + if (i >= nintf_orig) { + warn("invalid interface number (%d/%d)", + i, nintf_orig); + return -EINVAL; + } + if (i < nintf) + ++config->interface[i]->num_altsetting; + + } else if ((header->bDescriptorType == USB_DT_DEVICE || + header->bDescriptorType == USB_DT_CONFIG) && j) { + warn("unexpected descriptor type 0x%X", header->bDescriptorType); + return -EINVAL; + } + + j = 1; + buffer2 += header->bLength; + size2 -= header->bLength; } + /* Allocate the altsetting arrays */ for (i = 0; i < config->desc.bNumInterfaces; ++i) { - config->interface[i] = kmalloc(sizeof(struct usb_interface), GFP_KERNEL); - dbg("kmalloc IF %p, numif %i", config->interface[i], i); - if (!config->interface[i]) { - err("out of memory"); - retval = -ENOMEM; - goto error; + interface = config->interface[i]; + if (interface->num_altsetting > USB_MAXALTSETTING) { + warn("too many alternate settings for interface %d (%d max %d)\n", + i, interface->num_altsetting, USB_MAXALTSETTING); + return -EINVAL; + } + if (interface->num_altsetting == 0) { + warn("no alternate settings for interface %d", i); + return -EINVAL; + } + + len = sizeof(*interface->altsetting) * interface->num_altsetting; + interface->altsetting = kmalloc(len, GFP_KERNEL); + if (!interface->altsetting) { + err("couldn't kmalloc interface->altsetting"); + return -ENOMEM; } - memset(config->interface[i], 0x00, sizeof(struct usb_interface)); + memset(interface->altsetting, 0, len); } buffer += config->desc.bLength; size -= config->desc.bLength; - - config->extra = NULL; - config->extralen = 0; - - for (i = 0; i < config->desc.bNumInterfaces; i++) { - int numskipped, len; - char *begin; - - /* Skip over the rest of the Class Specific or Vendor */ - /* Specific descriptors */ - begin = buffer; - numskipped = 0; - while (size >= sizeof(struct usb_descriptor_header)) { - header = (struct usb_descriptor_header *)buffer; - if ((header->bLength > size) || (header->bLength < 2)) { - err("invalid descriptor length of %d", header->bLength); - return -1; - } - - /* If we find another "proper" descriptor then we're done */ - if ((header->bDescriptorType == USB_DT_ENDPOINT) || - (header->bDescriptorType == USB_DT_INTERFACE) || - (header->bDescriptorType == USB_DT_CONFIG) || - (header->bDescriptorType == USB_DT_DEVICE)) - break; - - dbg("skipping descriptor 0x%X", header->bDescriptorType); - numskipped++; + /* Skip over any Class Specific or Vendor Specific descriptors */ + begin = buffer; + numskipped = 0; + while (size >= sizeof(struct usb_descriptor_header)) { + header = (struct usb_descriptor_header *)buffer; - buffer += header->bLength; - size -= header->bLength; - } - if (numskipped) - dbg("skipped %d class/vendor specific endpoint descriptors", numskipped); + /* If we find another "proper" descriptor then we're done */ + if ((header->bDescriptorType == USB_DT_ENDPOINT) || + (header->bDescriptorType == USB_DT_INTERFACE)) + break; - /* Copy any unknown descriptors into a storage area for */ - /* drivers to later parse */ - len = (int)(buffer - begin); - if (len) { - if (config->extralen) { - warn("extra config descriptor"); - } else { - config->extra = kmalloc(len, GFP_KERNEL); - if (!config->extra) { - err("couldn't allocate memory for config extra descriptors"); - config->extralen = 0; - return -1; - } + dbg("skipping descriptor 0x%X", header->bDescriptorType); + numskipped++; - memcpy(config->extra, begin, len); - config->extralen = len; - } - } + buffer += header->bLength; + size -= header->bLength; + } + if (numskipped) { + dbg("skipped %d class/vendor specific configuration descriptors", numskipped); + config->extra = begin; + config->extralen = buffer - begin; + } - retval = usb_parse_interface(config->interface[i], buffer, size); + /* Parse all the interface/altsetting descriptors */ + while (size >= sizeof(struct usb_descriptor_header)) { + retval = usb_parse_interface(config, buffer, size); if (retval < 0) return retval; @@ -375,11 +340,18 @@ int usb_parse_configuration(struct usb_h size -= retval; } + /* Check for missing altsettings */ + for (i = 0; i < nintf; ++i) { + interface = config->interface[i]; + for (j = 0; j < interface->num_altsetting; ++j) { + if (!interface->altsetting[j].desc.bLength) { + warn("missing altsetting %d for interface %d", j, i); + return -EINVAL; + } + } + } + return size; -error: - for (i = 0; i < USB_MAXINTERFACES; ++i) - kfree(config->interface[i]); - return retval; } // hub-only!! ... and only exported for reset/reinit path. @@ -387,7 +359,7 @@ error: void usb_destroy_configuration(struct usb_device *dev) { int c, i; - + if (!dev->config) return; @@ -401,12 +373,11 @@ void usb_destroy_configuration(struct us for (c = 0; c < dev->descriptor.bNumConfigurations; c++) { struct usb_host_config *cf = &dev->config[c]; - if (!cf->interface) - break; - for (i = 0; i < cf->desc.bNumInterfaces; i++) { struct usb_interface *ifp = cf->interface[i]; - put_device(&ifp->dev); + + if (ifp) + put_device(&ifp->dev); } } kfree(dev->config); @@ -417,38 +388,39 @@ void usb_destroy_configuration(struct us // (used by real hubs and virtual root hubs) int usb_get_configuration(struct usb_device *dev) { + int ncfg = dev->descriptor.bNumConfigurations; int result; unsigned int cfgno, length; unsigned char *buffer; unsigned char *bigbuffer; struct usb_config_descriptor *desc; - if (dev->descriptor.bNumConfigurations > USB_MAXCONFIG) { - warn("too many configurations"); - return -EINVAL; + if (ncfg > USB_MAXCONFIG) { + warn("too many configurations (%d max %d)", + ncfg, USB_MAXCONFIG); + dev->descriptor.bNumConfigurations = ncfg = USB_MAXCONFIG; } - if (dev->descriptor.bNumConfigurations < 1) { - warn("not enough configurations"); + if (ncfg < 1) { + warn("no configurations"); return -EINVAL; } - dev->config = (struct usb_host_config *) - kmalloc(dev->descriptor.bNumConfigurations * - sizeof(struct usb_host_config), GFP_KERNEL); + length = ncfg * sizeof(struct usb_host_config); + dev->config = kmalloc(length, GFP_KERNEL); if (!dev->config) { err("out of memory"); - return -ENOMEM; + return -ENOMEM; } - memset(dev->config, 0, dev->descriptor.bNumConfigurations * - sizeof(struct usb_host_config)); + memset(dev->config, 0, length); - dev->rawdescriptors = (char **)kmalloc(sizeof(char *) * - dev->descriptor.bNumConfigurations, GFP_KERNEL); + length = ncfg * sizeof(char *); + dev->rawdescriptors = kmalloc(length, GFP_KERNEL); if (!dev->rawdescriptors) { err("out of memory"); return -ENOMEM; } + memset(dev->rawdescriptors, 0, length); buffer = kmalloc(8, GFP_KERNEL); if (!buffer) { @@ -457,7 +429,7 @@ int usb_get_configuration(struct usb_dev } desc = (struct usb_config_descriptor *)buffer; - for (cfgno = 0; cfgno < dev->descriptor.bNumConfigurations; cfgno++) { + for (cfgno = 0; cfgno < ncfg; cfgno++) { /* We grab the first 8 bytes so we know how long the whole */ /* configuration is */ result = usb_get_descriptor(dev, USB_DT_CONFIG, cfgno, buffer, 8); @@ -465,14 +437,14 @@ int usb_get_configuration(struct usb_dev if (result < 0) err("unable to get descriptor"); else { - err("config descriptor too short (expected %i, got %i)", 8, result); + warn("config descriptor too short (expected %i, got %i)", 8, result); result = -EINVAL; } goto err; } /* Get the full buffer */ - length = le16_to_cpu(desc->wTotalLength); + length = max((int) le16_to_cpu(desc->wTotalLength), USB_DT_CONFIG_SIZE); bigbuffer = kmalloc(length, GFP_KERNEL); if (!bigbuffer) { @@ -487,8 +459,8 @@ int usb_get_configuration(struct usb_dev err("couldn't get all of config descriptors"); kfree(bigbuffer); goto err; - } - + } + if (result < length) { err("config descriptor too short (expected %i, got %i)", length, result); result = -EINVAL; @@ -498,11 +470,11 @@ int usb_get_configuration(struct usb_dev dev->rawdescriptors[cfgno] = bigbuffer; - result = usb_parse_configuration(&dev->config[cfgno], bigbuffer); + result = usb_parse_configuration(&dev->config[cfgno], bigbuffer, length); if (result > 0) dbg("descriptor data left"); else if (result < 0) { - result = -EINVAL; + ++cfgno; goto err; } } diff -prauN linux-2.6.0-test5/drivers/usb/core/hub.c wli-2.6.0-test5-bk12-25/drivers/usb/core/hub.c --- linux-2.6.0-test5/drivers/usb/core/hub.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/usb/core/hub.c 2003-09-25 19:16:04.000000000 -0700 @@ -859,8 +859,7 @@ static int hub_port_debounce(struct usb_ } } - /* XXX Replace this with dbg() when 2.6 is about to ship. */ - dev_info (hubdev (hub), + dev_dbg (hubdev (hub), "debounce: port %d: delay %dms stable %d status 0x%x\n", port + 1, delay_time, stable_count, portstatus); @@ -1183,8 +1182,7 @@ int usb_hub_init(void) return -1; } - pid = kernel_thread(hub_thread, NULL, - CLONE_FS | CLONE_FILES | CLONE_SIGHAND); + pid = kernel_thread(hub_thread, NULL, CLONE_KERNEL); if (pid >= 0) { khubd_pid = pid; diff -prauN linux-2.6.0-test5/drivers/usb/core/usb.c wli-2.6.0-test5-bk12-25/drivers/usb/core/usb.c --- linux-2.6.0-test5/drivers/usb/core/usb.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/usb/core/usb.c 2003-09-25 19:16:04.000000000 -0700 @@ -1424,14 +1424,15 @@ static int usb_device_suspend(struct dev struct usb_interface *intf; struct usb_driver *driver; - if ((dev->driver == &usb_generic_driver) || + if ((dev->driver == NULL) || + (dev->driver == &usb_generic_driver) || (dev->driver_data == &usb_generic_driver_data)) return 0; intf = to_usb_interface(dev); driver = to_usb_driver(dev->driver); - if (driver && driver->suspend) + if (driver->suspend) return driver->suspend(intf, state); return 0; } @@ -1441,14 +1442,15 @@ static int usb_device_resume(struct devi struct usb_interface *intf; struct usb_driver *driver; - if ((dev->driver == &usb_generic_driver) || + if ((dev->driver == NULL) || + (dev->driver == &usb_generic_driver) || (dev->driver_data == &usb_generic_driver_data)) return 0; intf = to_usb_interface(dev); driver = to_usb_driver(dev->driver); - if (driver && driver->resume) + if (driver->resume) return driver->resume(intf); return 0; } diff -prauN linux-2.6.0-test5/drivers/usb/gadget/Kconfig wli-2.6.0-test5-bk12-25/drivers/usb/gadget/Kconfig --- linux-2.6.0-test5/drivers/usb/gadget/Kconfig 2003-09-08 12:50:00.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/usb/gadget/Kconfig 2003-09-25 19:16:04.000000000 -0700 @@ -68,7 +68,7 @@ choice config USB_ZERO tristate "Gadget Zero (DEVELOPMENT)" - depends on USB_GADGET && (USB_DUMMY_HCD || USB_NET2280 || USB_PXA250 || USB_SA1100) + depends on USB_GADGET && (USB_DUMMY_HCD || USB_NET2280 || USB_PXA2XX || USB_SA1100) help Gadget Zero is a two-configuration device. It either sinks and sources bulk data; or it loops back a configurable number of @@ -97,9 +97,9 @@ config USB_ZERO_NET2280 depends on USB_ZERO && (USB_NET2280 || USB_DUMMY_HCD) default y -config USB_ZERO_PXA250 +config USB_ZERO_PXA2XX bool - depends on USB_ZERO && USB_PXA250 + depends on USB_ZERO && USB_PXA2XX default y config USB_ZERO_SA1100 @@ -110,22 +110,28 @@ config USB_ZERO_SA1100 config USB_ETH tristate "Ethernet Gadget" - depends on USB_GADGET && (USB_DUMMY_HCD || USB_NET2280 || USB_PXA250 || USB_SA1100) + depends on USB_GADGET && (USB_DUMMY_HCD || USB_NET2280 || USB_PXA2XX || USB_SA1100) help - This driver implements the "Communication Device Class" (CDC) - Ethernet Control Model. That protocol is often avoided with pure - Ethernet adapters, in favor of simpler vendor-specific hardware, - but is widely supported by firmware for smart network devices. + This driver implements Ethernet style communication, in either + of two ways: + + - The "Communication Device Class" (CDC) Ethernet Control Model. + That protocol is often avoided with pure Ethernet adapters, in + favor of simpler vendor-specific hardware, but is widely + supported by firmware for smart network devices. + + - On hardware can't implement that protocol, a simpler approach + is used, placing fewer demands on USB. Within the USB device, this gadget driver exposes a network device "usbX", where X depends on what other networking devices you have. Treat it like a two-node Ethernet link: host, and gadget. The Linux-USB host-side "usbnet" driver interoperates with this - driver, so that deep I/O queues can be supported. (On 2.4 kernels, - use "CDCEther" instead.) Deep queues are especially important with - high speed devices. It should also interoperate with standard CDC - Ethernet class drivers on other host operating systems. + driver, so that deep I/O queues can be supported. On 2.4 kernels, + use "CDCEther" instead, if you're using the CDC option. That CDC + mode should also interoperate with standard CDC Ethernet class + drivers on other host operating systems. Say "y" to link the driver statically, or "m" to build a dynamically linked module called "g_ether". @@ -137,9 +143,9 @@ config USB_ETH_NET2280 depends on USB_ETH && (USB_NET2280 || USB_DUMMY_HCD) default y -config USB_ETH_PXA250 +config USB_ETH_PXA2XX bool - depends on USB_ETH && USB_PXA250 + depends on USB_ETH && USB_PXA2XX default y config USB_ETH_SA1100 diff -prauN linux-2.6.0-test5/drivers/usb/gadget/inode.c wli-2.6.0-test5-bk12-25/drivers/usb/gadget/inode.c --- linux-2.6.0-test5/drivers/usb/gadget/inode.c 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/usb/gadget/inode.c 2003-09-25 19:16:04.000000000 -0700 @@ -28,7 +28,6 @@ #include #include #include -#include #include #include #include diff -prauN linux-2.6.0-test5/drivers/usb/host/Kconfig wli-2.6.0-test5-bk12-25/drivers/usb/host/Kconfig --- linux-2.6.0-test5/drivers/usb/host/Kconfig 2003-09-08 12:50:32.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/usb/host/Kconfig 2003-09-25 19:16:04.000000000 -0700 @@ -26,10 +26,8 @@ config USB_EHCI_HCD You may want to read . - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called ehci-hcd. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called ehci-hcd. config USB_OHCI_HCD tristate "OHCI HCD support" @@ -44,10 +42,8 @@ config USB_OHCI_HCD based system where you're not sure, the "lspci -v" entry will list the right "prog-if" for your USB controller(s): EHCI, OHCI, or UHCI. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called ohci-hcd. If you want to compile it - as a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called ohci-hcd. config USB_UHCI_HCD tristate "UHCI HCD (most Intel and VIA) support" @@ -62,10 +58,8 @@ config USB_UHCI_HCD (like VIA VP2, VP3, MVP3, Apollo Pro, Apollo Pro II or Apollo Pro 133). If unsure, say Y. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called uhci-hcd. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called uhci-hcd. config USB_SL811HS tristate "SL811HS support" @@ -75,8 +69,6 @@ config USB_SL811HS If you do not know what this is, please say N. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called hc_sl811. If you want to compile it - as a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called hc_sl811. diff -prauN linux-2.6.0-test5/drivers/usb/image/Kconfig wli-2.6.0-test5-bk12-25/drivers/usb/image/Kconfig --- linux-2.6.0-test5/drivers/usb/image/Kconfig 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/usb/image/Kconfig 2003-09-25 19:16:04.000000000 -0700 @@ -14,10 +14,8 @@ config USB_MDC800 To use it create a device node with "mknod /dev/mustek c 180 32" and configure it in your software. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called mdc800. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called mdc800. config USB_SCANNER tristate "USB Scanner support" @@ -27,10 +25,8 @@ config USB_SCANNER USB port. Please read for more information. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called scanner. If you want to compile it as - a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called scanner. config USB_MICROTEK tristate "Microtek X6USB scanner support" diff -prauN linux-2.6.0-test5/drivers/usb/input/Kconfig wli-2.6.0-test5-bk12-25/drivers/usb/input/Kconfig --- linux-2.6.0-test5/drivers/usb/input/Kconfig 2003-09-08 12:50:20.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/usb/input/Kconfig 2003-09-25 19:16:04.000000000 -0700 @@ -20,10 +20,8 @@ config USB_HID If unsure, say Y. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called hid. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called hid. comment "Input core support is needed for USB HID input layer or HIDBP support" depends on USB && INPUT=n @@ -104,10 +102,8 @@ config USB_KBD This is almost certainly not what you want. This is mostly useful for embedded applications or simple keyboards. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called usbkbd. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called usbkbd. If even remotely unsure, say N. @@ -122,10 +118,8 @@ config USB_MOUSE This is almost certainly not what you want. This is mostly useful for embedded applications or simple mice. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called usbmouse. If you want to compile it as - a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called usbmouse. If even remotely unsure, say N. @@ -140,10 +134,8 @@ config USB_AIPTEK (CONFIG_INPUT_MOUSEDEV) and/or "Event interface support" (CONFIG_INPUT_EVDEV) as well. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called aiptek. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called aiptek. config USB_WACOM tristate "Wacom Intuos/Graphire tablet support" @@ -154,10 +146,8 @@ config USB_WACOM (CONFIG_INPUT_MOUSEDEV) and/or "Event interface support" (CONFIG_INPUT_EVDEV) as well. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called wacom. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called wacom. config USB_KBTAB tristate "KB Gear JamStudio tablet support" @@ -168,10 +158,8 @@ config USB_KBTAB (CONFIG_INPUT_MOUSEDEV) and/or "Event interface support" (CONFIG_INPUT_EVDEV) as well. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called kbtab.o. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called kbtab. config USB_POWERMATE tristate "Griffin PowerMate and Contour Jog support" @@ -184,10 +172,8 @@ config USB_POWERMATE You can download userspace tools from http://sowerbutts.com/powermate/ - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called powermate. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called powermate. config USB_XPAD tristate "X-Box gamepad support" diff -prauN linux-2.6.0-test5/drivers/usb/input/hiddev.c wli-2.6.0-test5-bk12-25/drivers/usb/input/hiddev.c --- linux-2.6.0-test5/drivers/usb/input/hiddev.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/usb/input/hiddev.c 2003-09-25 19:16:04.000000000 -0700 @@ -727,6 +727,7 @@ int hiddev_connect(struct hid_device *hi retval = usb_register_dev(&hiddev->intf, &hiddev_class); if (retval) { err("Not able to get a minor for this device."); + kfree(hiddev); return -1; } diff -prauN linux-2.6.0-test5/drivers/usb/media/Kconfig wli-2.6.0-test5-bk12-25/drivers/usb/media/Kconfig --- linux-2.6.0-test5/drivers/usb/media/Kconfig 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/usb/media/Kconfig 2003-09-25 19:16:04.000000000 -0700 @@ -14,10 +14,8 @@ config USB_DABUSB isochronous transactions. URB's are explained in . - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called dabusb. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called dabusb. comment "Video4Linux support is needed for USB Multimedia device support" depends on USB && VIDEO_DEV=n @@ -33,10 +31,8 @@ config USB_VICAM Information on this API and pointers to "v4l" programs may be found on the WWW at . - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called vicam. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called vicam. config USB_DSBR tristate "D-Link USB FM radio support (EXPERIMENTAL)" @@ -53,10 +49,8 @@ config USB_DSBR "v4l" programs may be found on the WWW at . - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called dsbr100. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called dsbr100. config USB_IBMCAM tristate "USB IBM (Xirlink) C-it Camera support" @@ -72,13 +66,12 @@ config USB_IBMCAM "v4l" programs may be found on the WWW at . - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called ibmcam. If you want to compile it as a - module, say M here and read . This - camera has several configuration options which can be specified when - you load the module. Read to - learn more. + To compile this driver as a module, choose M here: the + module will be called ibmcam. + + This camera has several configuration options which + can be specified when you load the module. Read + to learn more. config USB_KONICAWC tristate "USB Konica Webcam support" @@ -93,10 +86,8 @@ config USB_KONICAWC "v4l" programs may be found on the WWW at . - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called konicawc. If you want to compile it as - a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called konicawc. config USB_OV511 tristate "USB OV511 Camera support" @@ -111,10 +102,8 @@ config USB_OV511 Information on this API and pointers to "v4l" programs may be found on the WWW at . - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called ov511. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called ov511. config USB_PWC tristate "USB Philips Cameras" @@ -152,10 +141,8 @@ config USB_PWC Information on this API and pointers to "v4l" programs may be found on the WWW at . - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called pwc. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called pwc. config USB_SE401 tristate "USB SE401 Camera support" @@ -170,10 +157,8 @@ config USB_SE401 Information on this API and pointers to "v4l" programs may be found on the WWW at . - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called se401. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called se401. config USB_STV680 tristate "USB STV680 (Pencam) Camera support" @@ -189,8 +174,6 @@ config USB_STV680 Information on this API and pointers to "v4l" programs may be found on the WWW at . - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called stv680. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called stv680. diff -prauN linux-2.6.0-test5/drivers/usb/media/dabusb.c wli-2.6.0-test5-bk12-25/drivers/usb/media/dabusb.c --- linux-2.6.0-test5/drivers/usb/media/dabusb.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/usb/media/dabusb.c 2003-09-25 19:16:04.000000000 -0700 @@ -89,7 +89,6 @@ static int dabusb_add_buf_tail (pdabusb_ static void dump_urb (struct urb *urb) { dbg("urb :%p", urb); - dbg("next :%p", urb->next); dbg("dev :%p", urb->dev); dbg("pipe :%08X", urb->pipe); dbg("status :%d", urb->status); @@ -728,7 +727,7 @@ static int dabusb_probe (struct usb_inte pdabusb_t s; dbg("dabusb: probe: vendor id 0x%x, device id 0x%x ifnum:%d", - usbdev->descriptor.idVendor, usbdev->descriptor.idProduct, ifnum); + usbdev->descriptor.idVendor, usbdev->descriptor.idProduct, intf->altsetting->desc.bInterfaceNumber); /* We don't handle multiple configurations */ if (usbdev->descriptor.bNumConfigurations != 1) @@ -762,7 +761,7 @@ static int dabusb_probe (struct usb_inte goto reject; } } - dbg("bound to interface: %d", ifnum); + dbg("bound to interface: %d", intf->altsetting->desc.bInterfaceNumber); usb_set_intfdata (intf, s); up (&s->mutex); diff -prauN linux-2.6.0-test5/drivers/usb/media/usbvideo.c wli-2.6.0-test5-bk12-25/drivers/usb/media/usbvideo.c --- linux-2.6.0-test5/drivers/usb/media/usbvideo.c 2003-09-08 12:50:56.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/usb/media/usbvideo.c 2003-09-25 19:16:04.000000000 -0700 @@ -24,7 +24,6 @@ #include #include #include -#include #include diff -prauN linux-2.6.0-test5/drivers/usb/media/vicam.c wli-2.6.0-test5-bk12-25/drivers/usb/media/vicam.c --- linux-2.6.0-test5/drivers/usb/media/vicam.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/usb/media/vicam.c 2003-09-25 19:16:04.000000000 -0700 @@ -1292,7 +1292,7 @@ vicam_probe( struct usb_interface *intf, interface = &intf->altsetting[0]; DBG(KERN_DEBUG "Interface %d. has %u. endpoints!\n", - ifnum, (unsigned) (interface->desc.bNumEndpoints)); + interface->desc.bInterfaceNumber, (unsigned) (interface->desc.bNumEndpoints)); endpoint = &interface->endpoint[0].desc; if ((endpoint->bEndpointAddress & 0x80) && diff -prauN linux-2.6.0-test5/drivers/usb/misc/Kconfig wli-2.6.0-test5-bk12-25/drivers/usb/misc/Kconfig --- linux-2.6.0-test5/drivers/usb/misc/Kconfig 2003-09-08 12:50:32.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/usb/misc/Kconfig 2003-09-25 19:16:04.000000000 -0700 @@ -14,10 +14,8 @@ config USB_EMI26 After firmware load the device is handled with standard linux USB Audio driver. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called audio. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called audio. config USB_TIGL tristate "Texas Instruments Graph Link USB (aka SilverLink) cable support" @@ -30,10 +28,8 @@ config USB_TIGL If you enable this driver, you will be able to communicate with your calculator through a set of device nodes under /dev. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called tiglusb. If you want to compile it as a - module, say M here and read Documentation/modules.txt. + To compile this driver as a module, choose M here: the + module will be called tiglusb. If you don't know what the SilverLink cable is or what a Texas Instruments graphing calculator is, then you probably don't need this @@ -48,10 +44,8 @@ config USB_AUERSWALD Say Y here if you want to connect an Auerswald USB ISDN Device to your computer's USB port. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called auerswald. If you want to compile it as - a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called auerswald. config USB_RIO500 tristate "USB Diamond Rio500 support (EXPERIMENTAL)" @@ -61,10 +55,8 @@ config USB_RIO500 computer's USB port. Please read for more information. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called rio500. If you want to compile it as - a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called rio500. config USB_BRLVGER tristate "Tieman Voyager USB Braille display support (EXPERIMENTAL)" @@ -74,10 +66,8 @@ config USB_BRLVGER Tieman. See for more information. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called brlvger. If you want to compile it as - a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called brlvger. config USB_LCD tristate "USB LCD driver support" @@ -88,10 +78,8 @@ config USB_LCD alphanumeric LCD modules. See for more information. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called usblcd. If you want to compile it as - a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called usblcd. config USB_SPEEDTOUCH tristate "Alcatel Speedtouch USB support" @@ -101,10 +89,8 @@ config USB_SPEEDTOUCH modem. In order to use your modem you will need to install some user space tools, see for details. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called speedtch. If you want to compile it as - a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called speedtch. config USB_TEST tristate "USB testing driver (DEVELOPMENT)" diff -prauN linux-2.6.0-test5/drivers/usb/misc/speedtch.c wli-2.6.0-test5-bk12-25/drivers/usb/misc/speedtch.c --- linux-2.6.0-test5/drivers/usb/misc/speedtch.c 2003-09-08 12:50:50.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/usb/misc/speedtch.c 2003-09-25 19:16:04.000000000 -0700 @@ -21,7 +21,9 @@ ******************************************************************************/ /* - * Written by Johan Verrept, maintained by Duncan Sands (duncan.sands@wanadoo.fr) + * Written by Johan Verrept, maintained by Duncan Sands (duncan.sands@free.fr) + * + * 1.7+: - See the check-in logs * * 1.6: - No longer opens a connection if the firmware is not loaded * - Added support for the speedtouch 330 @@ -84,6 +86,11 @@ #include +#ifdef DEBUG +#define DEBUG_ON(x) BUG_ON(x) +#else +#define DEBUG_ON(x) do { if (x); } while (0) +#endif #ifdef VERBOSE_DEBUG static int udsl_print_packet (const unsigned char *data, int len); @@ -94,9 +101,9 @@ static int udsl_print_packet (const unsi #define vdbg(arg...) #endif -#define DRIVER_AUTHOR "Johan Verrept, Duncan Sands " +#define DRIVER_AUTHOR "Johan Verrept, Duncan Sands " #define DRIVER_DESC "Alcatel SpeedTouch USB driver" -#define DRIVER_VERSION "1.6" +#define DRIVER_VERSION "1.7" static const char udsl_driver_name [] = "speedtch"; @@ -109,10 +116,10 @@ static const char udsl_driver_name [] = #define UDSL_MAX_SND_BUFS 8 #define UDSL_MAX_RCV_BUF_SIZE 1024 /* ATM cells */ #define UDSL_MAX_SND_BUF_SIZE 1024 /* ATM cells */ -#define UDSL_DEFAULT_RCV_URBS 1 -#define UDSL_DEFAULT_SND_URBS 1 -#define UDSL_DEFAULT_RCV_BUFS 2 -#define UDSL_DEFAULT_SND_BUFS 2 +#define UDSL_DEFAULT_RCV_URBS 2 +#define UDSL_DEFAULT_SND_URBS 2 +#define UDSL_DEFAULT_RCV_BUFS 4 +#define UDSL_DEFAULT_SND_BUFS 4 #define UDSL_DEFAULT_RCV_BUF_SIZE 64 /* ATM cells */ #define UDSL_DEFAULT_SND_BUF_SIZE 64 /* ATM cells */ @@ -351,7 +358,7 @@ static void udsl_extract_cells (struct u dbg ("udsl_extract_cells: buffer overrun (max_pdu: %u, skb->len %u, vcc: 0x%p)", vcc_data->max_pdu, skb->len, vcc); /* discard cells already received */ skb_trim (skb, 0); - BUG_ON (vcc_data->max_pdu < ATM_CELL_PAYLOAD); + DEBUG_ON (vcc_data->max_pdu < ATM_CELL_PAYLOAD); } memcpy (skb->tail, source + ATM_CELL_HEADER, ATM_CELL_PAYLOAD); @@ -498,7 +505,7 @@ static unsigned int udsl_write_cells (un memset (target, 0, ATM_CELL_PAYLOAD - ATM_AAL5_TRAILER); target += ATM_CELL_PAYLOAD - ATM_AAL5_TRAILER; - BUG_ON (--ctrl->num_cells); + DEBUG_ON (--ctrl->num_cells); } memcpy (target, ctrl->aal5_trailer, ATM_AAL5_TRAILER); @@ -535,7 +542,7 @@ static void udsl_complete_receive (struc vdbg ("udsl_complete_receive: urb 0x%p, status %d, actual_length %d, filled_cells %u, rcv 0x%p, buf 0x%p", urb, urb->status, urb->actual_length, buf->filled_cells, rcv, buf); - BUG_ON (buf->filled_cells > rcv_buf_size); + DEBUG_ON (buf->filled_cells > rcv_buf_size); /* may not be in_interrupt() */ spin_lock_irqsave (&instance->receive_lock, flags); @@ -1216,8 +1223,7 @@ static void udsl_usb_disconnect (struct count = 0; spin_lock_irq (&instance->receive_lock); list_for_each (pos, &instance->spare_receivers) - if (++count > num_rcv_urbs) - panic (__FILE__ ": memory corruption detected at line %d!\n", __LINE__); + DEBUG_ON (++count > num_rcv_urbs); spin_unlock_irq (&instance->receive_lock); dbg ("udsl_usb_disconnect: found %u spare receivers", count); @@ -1253,8 +1259,7 @@ static void udsl_usb_disconnect (struct count = 0; spin_lock_irq (&instance->send_lock); list_for_each (pos, &instance->spare_senders) - if (++count > num_snd_urbs) - panic (__FILE__ ": memory corruption detected at line %d!\n", __LINE__); + DEBUG_ON (++count > num_snd_urbs); spin_unlock_irq (&instance->send_lock); dbg ("udsl_usb_disconnect: found %u spare senders", count); diff -prauN linux-2.6.0-test5/drivers/usb/misc/usbtest.c wli-2.6.0-test5-bk12-25/drivers/usb/misc/usbtest.c --- linux-2.6.0-test5/drivers/usb/misc/usbtest.c 2003-09-08 12:50:32.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/usb/misc/usbtest.c 2003-09-25 19:16:04.000000000 -0700 @@ -87,7 +87,7 @@ get_endpoints (struct usbtest_dev *dev, struct usb_host_endpoint *in, *out; struct usb_device *udev; - for (tmp = 0; tmp < intf->max_altsetting; tmp++) { + for (tmp = 0; tmp < intf->num_altsetting; tmp++) { unsigned ep; in = out = 0; diff -prauN linux-2.6.0-test5/drivers/usb/net/Kconfig wli-2.6.0-test5-bk12-25/drivers/usb/net/Kconfig --- linux-2.6.0-test5/drivers/usb/net/Kconfig 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/usb/net/Kconfig 2003-09-25 19:16:04.000000000 -0700 @@ -23,10 +23,8 @@ config USB_AX8817X_STANDALONE typically on eth0, if it is the only ethernet device, or perhaps on eth1, if you have a PCI or ISA ethernet card installed. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called ax8817x.o. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called ax8817x. config USB_CATC tristate "USB CATC NetMate-based Ethernet device support (EXPERIMENTAL)" @@ -44,10 +42,8 @@ config USB_CATC typically on eth0, if it is the only ethernet device, or perhaps on eth1, if you have a PCI or ISA ethernet card installed. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called catc. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called catc. config USB_KAWETH tristate "USB KLSI KL5USB101-based ethernet device support" @@ -86,10 +82,8 @@ config USB_KAWETH typically on eth0, if it is the only ethernet device, or perhaps on eth1, if you have a PCI or ISA ethernet card installed. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called kaweth. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called kaweth. config USB_PEGASUS tristate "USB Pegasus/Pegasus-II based ethernet device support" @@ -102,10 +96,8 @@ config USB_PEGASUS is Pegasus or Pegasus II based then send me (petkan@users.sourceforge.net) vendor and device IDs. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called pegasus. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called pegasus. config USB_RTL8150 tristate "USB RTL8150 based ethernet device support (EXPERIMENTAL)" @@ -115,10 +107,8 @@ config USB_RTL8150 Send me (petkan@users.sourceforge.net) any comments you may have. You can also check for updates at http://pegasus2.sourceforge.net/ - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called rtl8150. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called rtl8150. config USB_USBNET tristate "Multi-purpose USB Networking Framework" @@ -151,10 +141,8 @@ config USB_USBNET For more information see . - This code is also available as a kernel module (code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called usbnet. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called usbnet. comment "USB Host-to-Host Cables" depends on USB_USBNET diff -prauN linux-2.6.0-test5/drivers/usb/net/usbnet.c wli-2.6.0-test5-bk12-25/drivers/usb/net/usbnet.c --- linux-2.6.0-test5/drivers/usb/net/usbnet.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/usb/net/usbnet.c 2003-09-25 19:16:04.000000000 -0700 @@ -252,6 +252,8 @@ struct driver_info { /* for new devices, use the descriptor-reading code instead */ int in; /* rx endpoint */ int out; /* tx endpoint */ + + unsigned long data; /* Misc driver specific data */ }; // we record the state for each of our queued skbs @@ -298,6 +300,9 @@ MODULE_PARM_DESC (msg_level, "Initial me /*-------------------------------------------------------------------------*/ +static struct ethtool_ops usbnet_ethtool_ops; +static void usbnet_get_drvinfo (struct net_device *, struct ethtool_drvinfo *); + /* mostly for PDA style devices, which are always connected if present */ static int always_connected (struct usbnet *dev) { @@ -312,7 +317,7 @@ get_endpoints (struct usbnet *dev, struc struct usb_host_interface *alt; struct usb_host_endpoint *in, *out; - for (tmp = 0; tmp < intf->max_altsetting; tmp++) { + for (tmp = 0; tmp < intf->num_altsetting; tmp++) { unsigned ep; in = out = 0; @@ -383,10 +388,10 @@ static const struct driver_info an2720_i #ifdef CONFIG_USB_AX8817X -#define NEED_MII /* ASIX AX8817X based USB 2.0 Ethernet Devices */ #define HAVE_HARDWARE +#define NEED_MII #include @@ -394,6 +399,8 @@ static const struct driver_info an2720_i #define AX_CMD_READ_MII_REG 0x07 #define AX_CMD_WRITE_MII_REG 0x08 #define AX_CMD_SET_HW_MII 0x0a +#define AX_CMD_READ_EEPROM 0x0b +#define AX_CMD_WRITE_EEPROM 0x0c #define AX_CMD_WRITE_RX_CTL 0x10 #define AX_CMD_READ_IPG012 0x11 #define AX_CMD_WRITE_IPG0 0x12 @@ -403,8 +410,15 @@ static const struct driver_info an2720_i #define AX_CMD_READ_NODE_ID 0x17 #define AX_CMD_READ_PHY_ID 0x19 #define AX_CMD_WRITE_MEDIUM_MODE 0x1b +#define AX_CMD_READ_MONITOR_MODE 0x1c +#define AX_CMD_WRITE_MONITOR_MODE 0x1d #define AX_CMD_WRITE_GPIOS 0x1f +#define AX_MONITOR_MODE 0x01 +#define AX_MONITOR_LINK 0x02 +#define AX_MONITOR_MAGIC 0x04 +#define AX_MONITOR_HSFS 0x10 + #define AX_MCAST_FILTER_SIZE 8 #define AX_MAX_MCAST 64 @@ -441,11 +455,11 @@ static int ax8817x_write_cmd(struct usbn static void ax8817x_async_cmd_callback(struct urb *urb, struct pt_regs *regs) { struct usb_ctrlrequest *req = (struct usb_ctrlrequest *)urb->context; - + if (urb->status < 0) printk(KERN_DEBUG "ax8817x_async_cmd_callback() failed with %d", urb->status); - + kfree(req); usb_free_urb(urb); } @@ -456,12 +470,12 @@ static void ax8817x_write_cmd_async(stru struct usb_ctrlrequest *req; int status; struct urb *urb; - + if ((urb = usb_alloc_urb(0, GFP_ATOMIC)) == NULL) { devdbg(dev, "Error allocating URB in write_cmd_async!"); return; } - + if ((req = kmalloc(sizeof(struct usb_ctrlrequest), GFP_ATOMIC)) == NULL) { deverr(dev, "Failed to allocate memory for control request"); usb_free_urb(urb); @@ -496,34 +510,31 @@ static void ax8817x_set_multicast(struct } else if (net->mc_count == 0) { /* just broadcast and directed */ } else { + /* We use the 20 byte dev->data + * for our 8 byte filter buffer + * to avoid allocating memory that + * is tricky to free later */ + u8 *multi_filter = (u8 *)dev->data; struct dev_mc_list *mc_list = net->mc_list; - u8 *multi_filter; u32 crc_bits; int i; - multi_filter = kmalloc(AX_MCAST_FILTER_SIZE, GFP_ATOMIC); - if (multi_filter == NULL) { - /* Oops, couldn't allocate a buffer for setting the multicast - filter. Try all multi mode. */ - rx_ctl |= 0x02; - } else { - memset(multi_filter, 0, AX_MCAST_FILTER_SIZE); - - /* Build the multicast hash filter. */ - for (i = 0; i < net->mc_count; i++) { - crc_bits = - ether_crc(ETH_ALEN, - mc_list->dmi_addr) >> 26; - multi_filter[crc_bits >> 3] |= - 1 << (crc_bits & 7); - mc_list = mc_list->next; - } - - ax8817x_write_cmd_async(dev, AX_CMD_WRITE_MULTI_FILTER, 0, 0, - AX_MCAST_FILTER_SIZE, multi_filter); + memset(multi_filter, 0, AX_MCAST_FILTER_SIZE); - rx_ctl |= 0x10; + /* Build the multicast hash filter. */ + for (i = 0; i < net->mc_count; i++) { + crc_bits = + ether_crc(ETH_ALEN, + mc_list->dmi_addr) >> 26; + multi_filter[crc_bits >> 3] |= + 1 << (crc_bits & 7); + mc_list = mc_list->next; } + + ax8817x_write_cmd_async(dev, AX_CMD_WRITE_MULTI_FILTER, 0, 0, + AX_MCAST_FILTER_SIZE, multi_filter); + + rx_ctl |= 0x10; } ax8817x_write_cmd_async(dev, AX_CMD_WRITE_RX_CTL, rx_ctl, 0, 0, NULL); @@ -533,7 +544,7 @@ static int ax8817x_mdio_read(struct net_ { struct usbnet *dev = netdev->priv; u16 res; - u8 buf[4]; + u8 buf[1]; ax8817x_write_cmd(dev, AX_CMD_SET_SW_MII, 0, 0, 0, &buf); ax8817x_read_cmd(dev, AX_CMD_READ_MII_REG, phy_id, (__u16)loc, 2, (u16 *)&res); @@ -546,23 +557,103 @@ static void ax8817x_mdio_write(struct ne { struct usbnet *dev = netdev->priv; u16 res = val; - u8 buf[4]; + u8 buf[1]; ax8817x_write_cmd(dev, AX_CMD_SET_SW_MII, 0, 0, 0, &buf); ax8817x_write_cmd(dev, AX_CMD_WRITE_MII_REG, phy_id, (__u16)loc, 2, (u16 *)&res); ax8817x_write_cmd(dev, AX_CMD_SET_HW_MII, 0, 0, 0, &buf); } +void ax8817x_get_wol(struct net_device *net, struct ethtool_wolinfo *wolinfo) +{ + struct usbnet *dev = (struct usbnet *)net->priv; + u8 opt; + + if (ax8817x_read_cmd(dev, AX_CMD_READ_MONITOR_MODE, 0, 0, 1, &opt) < 0) { + wolinfo->supported = 0; + wolinfo->wolopts = 0; + return; + } + wolinfo->supported = WAKE_PHY | WAKE_MAGIC; + wolinfo->wolopts = 0; + if (opt & AX_MONITOR_MODE) { + if (opt & AX_MONITOR_LINK) + wolinfo->wolopts |= WAKE_PHY; + if (opt & AX_MONITOR_MAGIC) + wolinfo->wolopts |= WAKE_MAGIC; + } +} + +int ax8817x_set_wol(struct net_device *net, struct ethtool_wolinfo *wolinfo) +{ + struct usbnet *dev = (struct usbnet *)net->priv; + u8 opt = 0; + u8 buf[1]; + + if (wolinfo->wolopts & WAKE_PHY) + opt |= AX_MONITOR_LINK; + if (wolinfo->wolopts & WAKE_MAGIC) + opt |= AX_MONITOR_MAGIC; + if (opt != 0) + opt |= AX_MONITOR_MODE; + + if (ax8817x_write_cmd(dev, AX_CMD_WRITE_MONITOR_MODE, + opt, 0, 0, &buf) < 0) + return -EINVAL; + + return 0; +} + +int ax8817x_get_eeprom(struct net_device *net, + struct ethtool_eeprom *eeprom, u8 *data) +{ + struct usbnet *dev = (struct usbnet *)net->priv; + u16 *ebuf = (u16 *)data; + int i; + + /* Crude hack to ensure that we don't overwrite memory + * if an odd length is supplied + */ + if (eeprom->len % 2) + return -EINVAL; + + /* ax8817x returns 2 bytes from eeprom on read */ + for (i=0; i < eeprom->len / 2; i++) { + if (ax8817x_read_cmd(dev, AX_CMD_READ_EEPROM, + eeprom->offset + i, 0, 2, &ebuf[i]) < 0) + return -EINVAL; + } + return i * 2; +} + +static void ax8817x_get_drvinfo (struct net_device *net, + struct ethtool_drvinfo *info) +{ + /* Inherit standard device info */ + usbnet_get_drvinfo(net, info); + info->eedump_len = 0x3e; +} + static int ax8817x_bind(struct usbnet *dev, struct usb_interface *intf) { int ret; u8 buf[6]; u16 *buf16 = (u16 *) buf; int i; + unsigned long gpio_bits = dev->driver_info->data; dev->in = usb_rcvbulkpipe(dev->udev, 3); dev->out = usb_sndbulkpipe(dev->udev, 2); + /* Toggle the GPIOs in a manufacturer/model specific way */ + for (i = 2; i >= 0; i--) { + if ((ret = ax8817x_write_cmd(dev, AX_CMD_WRITE_GPIOS, + (gpio_bits >> (i * 8)) & 0xff, 0, 0, + buf)) < 0) + return ret; + wait_ms(5); + } + if ((ret = ax8817x_write_cmd(dev, AX_CMD_WRITE_RX_CTL, 0x80, 0, 0, buf)) < 0) { dbg("send AX_CMD_WRITE_RX_CTL failed: %d", ret); return ret; @@ -640,6 +731,11 @@ static int ax8817x_bind(struct usbnet *d dev->net->set_multicast_list = ax8817x_set_multicast; + usbnet_ethtool_ops.get_drvinfo = &ax8817x_get_drvinfo; + usbnet_ethtool_ops.get_wol = &ax8817x_get_wol; + usbnet_ethtool_ops.set_wol = &ax8817x_set_wol; + usbnet_ethtool_ops.get_eeprom = &ax8817x_get_eeprom; + return 0; } @@ -647,7 +743,30 @@ static const struct driver_info ax8817x_ .description = "ASIX AX8817x USB 2.0 Ethernet", .bind = ax8817x_bind, .flags = FLAG_ETHER, + .data = 0x00130103, +}; + +static const struct driver_info dlink_dub_e100_info = { + .description = "DLink DUB-E100 USB Ethernet", + .bind = ax8817x_bind, + .flags = FLAG_ETHER, + .data = 0x009f9d9f, +}; + +static const struct driver_info netgear_fa120_info = { + .description = "Netgear FA-120 USB Ethernet", + .bind = ax8817x_bind, + .flags = FLAG_ETHER, + .data = 0x00130103, }; + +static const struct driver_info hawking_uf200_info = { + .description = "Hawking UF200 USB Ethernet", + .bind = ax8817x_bind, + .flags = FLAG_ETHER, + .data = 0x001f1d1f, +}; + #endif /* CONFIG_USB_AX8817X */ @@ -2415,72 +2534,45 @@ done: /*-------------------------------------------------------------------------*/ -static inline int -usbnet_ethtool_ioctl (struct net_device *net, void __user *useraddr) +static void usbnet_get_drvinfo (struct net_device *net, struct ethtool_drvinfo *info) { - struct usbnet *dev = (struct usbnet *) net->priv; - u32 cmd; + struct usbnet *dev = net->priv; - if (get_user (cmd, (u32 *)useraddr)) - return -EFAULT; - switch (cmd) { - - case ETHTOOL_GDRVINFO: { /* get driver info */ - struct ethtool_drvinfo info; - - memset (&info, 0, sizeof info); - info.cmd = ETHTOOL_GDRVINFO; - strncpy (info.driver, driver_name, sizeof info.driver); - strncpy (info.version, DRIVER_VERSION, sizeof info.version); - strncpy (info.fw_version, dev->driver_info->description, - sizeof info.fw_version); - usb_make_path (dev->udev, info.bus_info, sizeof info.bus_info); - if (copy_to_user (useraddr, &info, sizeof (info))) - return -EFAULT; - return 0; - } + strncpy (info->driver, driver_name, sizeof info->driver); + strncpy (info->version, DRIVER_VERSION, sizeof info->version); + strncpy (info->fw_version, dev->driver_info->description, + sizeof info->fw_version); + usb_make_path (dev->udev, info->bus_info, sizeof info->bus_info); +} - case ETHTOOL_GLINK: /* get link status */ - if (dev->driver_info->check_connect) { - struct ethtool_value edata = { ETHTOOL_GLINK }; - - edata.data = dev->driver_info->check_connect (dev) == 0; - if (copy_to_user (useraddr, &edata, sizeof (edata))) - return -EFAULT; - return 0; - } - break; +static u32 usbnet_get_link (struct net_device *net) +{ + struct usbnet *dev = net->priv; - case ETHTOOL_GMSGLVL: { /* get message-level */ - struct ethtool_value edata = {ETHTOOL_GMSGLVL}; + /* If a check_connect is defined, return it's results */ + if (dev->driver_info->check_connect) + return dev->driver_info->check_connect (dev) == 0; - edata.data = dev->msg_level; - if (copy_to_user (useraddr, &edata, sizeof (edata))) - return -EFAULT; - return 0; - } + /* Otherwise, we're up to avoid breaking scripts */ + return 1; +} - case ETHTOOL_SMSGLVL: { /* set message-level */ - struct ethtool_value edata; +static u32 usbnet_get_msglevel (struct net_device *net) +{ + struct usbnet *dev = net->priv; - if (copy_from_user (&edata, useraddr, sizeof (edata))) - return -EFAULT; - dev->msg_level = edata.data; - return 0; - } - - /* could also map RINGPARAM to RX/TX QLEN */ + return dev->msg_level; +} - } - /* Note that the ethtool user space code requires EOPNOTSUPP */ - return -EOPNOTSUPP; +static void usbnet_set_msglevel (struct net_device *net, u32 level) +{ + struct usbnet *dev = net->priv; + + dev->msg_level = level; } static int usbnet_ioctl (struct net_device *net, struct ifreq *rq, int cmd) { - if (cmd == SIOCETHTOOL) - return usbnet_ethtool_ioctl (net, (void __user *)rq->ifr_data); - #ifdef NEED_MII { struct usbnet *dev = (struct usbnet *)net->priv; @@ -2889,6 +2981,7 @@ usbnet_probe (struct usb_interface *udev net->watchdog_timeo = TX_TIMEOUT_JIFFIES; net->tx_timeout = usbnet_tx_timeout; net->do_ioctl = usbnet_ioctl; + net->ethtool_ops = &usbnet_ethtool_ops; // allow device-specific bind/init procedures // NOTE net->name still not usable ... @@ -2991,19 +3084,19 @@ static const struct usb_device_id produc }, { // Netgear FA120 USB_DEVICE (0x0846, 0x1040), - .driver_info = (unsigned long) &ax8817x_info, + .driver_info = (unsigned long) &netgear_fa120_info, }, { // DLink DUB-E100 USB_DEVICE (0x2001, 0x1a00), - .driver_info = (unsigned long) &ax8817x_info, + .driver_info = (unsigned long) &dlink_dub_e100_info, }, { // Intellinet, ST Lab USB Ethernet USB_DEVICE (0x0b95, 0x1720), - .driver_info = (unsigned long) &ax8817x_info, + .driver_info = (unsigned long) &ax8817x_info, }, { // Hawking UF200, TrendNet TU2-ET100 USB_DEVICE (0x07b8, 0x420a), - .driver_info = (unsigned long) &ax8817x_info, + .driver_info = (unsigned long) &hawking_uf200_info, }, #endif @@ -3167,6 +3260,14 @@ static struct usb_driver usbnet_driver = .disconnect = usbnet_disconnect, }; +/* Default ethtool_ops assigned. Devices can override in their bind() routine */ +static struct ethtool_ops usbnet_ethtool_ops = { + .get_drvinfo = usbnet_get_drvinfo, + .get_link = usbnet_get_link, + .get_msglevel = usbnet_get_msglevel, + .set_msglevel = usbnet_set_msglevel, +}; + /*-------------------------------------------------------------------------*/ static int __init usbnet_init (void) diff -prauN linux-2.6.0-test5/drivers/usb/serial/Kconfig wli-2.6.0-test5-bk12-25/drivers/usb/serial/Kconfig --- linux-2.6.0-test5/drivers/usb/serial/Kconfig 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/usb/serial/Kconfig 2003-09-25 19:16:04.000000000 -0700 @@ -17,10 +17,8 @@ config USB_SERIAL information on the specifics of the different devices that are supported, and on how to use them. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called usbserial. If you want to compile it - as a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called usbserial. config USB_SERIAL_DEBUG bool "USB Serial Converter verbose debug" @@ -70,10 +68,8 @@ config USB_SERIAL_BELKIN adaptor (F5U103 is one of the model numbers) or the Peracom single port USB to serial adapter. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called belkin_sa. If you want to compile it as - a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called belkin_sa. config USB_SERIAL_WHITEHEAT tristate "USB ConnectTech WhiteHEAT Serial Driver" @@ -82,10 +78,8 @@ config USB_SERIAL_WHITEHEAT Say Y here if you want to use a ConnectTech WhiteHEAT 4 port USB to serial converter device. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called whiteheat. If you want to compile it as - a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called whiteheat. config USB_SERIAL_DIGI_ACCELEPORT tristate "USB Digi International AccelePort USB Serial Driver" @@ -99,11 +93,8 @@ config USB_SERIAL_DIGI_ACCELEPORT This driver works under SMP with the usb-uhci driver. It does not work under SMP with the uhci driver. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called digi_acceleport. If you want to compile - it as a module, say M here and read - . + To compile this driver as a module, choose M here: the + module will be called digi_acceleport. config USB_SERIAL_EMPEG tristate "USB Empeg empeg-car Mark I/II Driver" @@ -114,10 +105,8 @@ config USB_SERIAL_EMPEG device node. See for more tidbits of information. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called empeg. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called empeg. config USB_SERIAL_FTDI_SIO tristate "USB FTDI Single Port Serial Driver (EXPERIMENTAL)" @@ -130,10 +119,8 @@ config USB_SERIAL_FTDI_SIO See for more information on this driver and the device. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called ftdi_sio. If you want to compile it as - a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called ftdi_sio. config USB_SERIAL_VISOR tristate "USB Handspring Visor / Palm m50x / Sony Clie Driver" @@ -144,10 +131,8 @@ config USB_SERIAL_VISOR for more information on using this driver. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called visor. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called visor. config USB_SERIAL_IPAQ tristate "USB PocketPC PDA Driver" @@ -158,10 +143,8 @@ config USB_SERIAL_IPAQ using a USB cradle/cable. For information on using the driver, read . - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called ipaq. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called ipaq. config USB_SERIAL_IR tristate "USB IR Dongle Serial Driver (EXPERIMENTAL)" @@ -171,10 +154,8 @@ config USB_SERIAL_IR devices. This is useful if you do not want to use the full IrDA stack. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called ir-usb. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called ir-usb. config USB_SERIAL_EDGEPORT tristate "USB Inside Out Edgeport Serial Driver" @@ -199,10 +180,8 @@ config USB_SERIAL_EDGEPORT Edgeport/4 DIN Edgeport/16 Dual - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called io_edgeport. If you want to compile it - as a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called io_edgeport. config USB_SERIAL_EDGEPORT_TI tristate "USB Inside Out Edgeport Serial Driver (TI devices)" @@ -212,10 +191,8 @@ config USB_SERIAL_EDGEPORT_TI Networks (Digi) that are not supported by the io_edgeport driver. This includes the Edgeport/1 device. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called io_ti. If you want to compile it - as a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called io_ti. config USB_SERIAL_KEYSPAN_PDA tristate "USB Keyspan PDA Single Port Serial Driver" @@ -225,10 +202,8 @@ config USB_SERIAL_KEYSPAN_PDA serial converter device. This driver makes use of firmware developed from scratch by Brian Warner. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called keyspan_pda. If you want to compile it - as a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called keyspan_pda. config USB_SERIAL_KEYSPAN tristate "USB Keyspan USA-xxx Serial Driver" @@ -241,10 +216,8 @@ config USB_SERIAL_KEYSPAN See for more information. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called keyspan. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called keyspan. config USB_SERIAL_KEYSPAN_MPR bool "USB Keyspan MPR Firmware" @@ -337,10 +310,8 @@ config USB_SERIAL_KLSI Please read for more information. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called kl5kusb105. If you want to compile it as - a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called kl5kusb105. config USB_SERIAL_KOBIL_SCT tristate "USB KOBIL chipcard reader (EXPERIMENTAL)" @@ -357,10 +328,8 @@ config USB_SERIAL_KOBIL_SCT - KAAN Professional Note that you need a current CT-API. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called kobil_sct. If you want to compile it as - a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called kobil_sct. config USB_SERIAL_MCT_U232 tristate "USB MCT Single Port Serial Driver" @@ -372,10 +341,8 @@ config USB_SERIAL_MCT_U232 This driver also works with Sitecom U232-P25 and D-Link DU-H3SP USB BAY devices. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called mct_u232. If you want to compile it as - a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called mct_u232. config USB_SERIAL_PL2303 tristate "USB Prolific 2303 Single Port Serial Driver" @@ -384,10 +351,8 @@ config USB_SERIAL_PL2303 Say Y here if you want to use the PL2303 USB Serial single port adapter from Prolific. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called pl2303. If you want to compile it as - a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called pl2303. config USB_SERIAL_SAFE tristate "USB Safe Serial (Encapsulated) Driver (EXPERIMENTAL)" @@ -405,10 +370,8 @@ config USB_SERIAL_CYBERJACK reader. This is an interface to ISO 7816 compatible contactbased chipcards, e.g. GSM SIMs. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called cyberjack. If you want to compile it as - a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called cyberjack. If unsure, say N. @@ -420,10 +383,8 @@ config USB_SERIAL_XIRCOM serial converter device. This driver makes use of firmware developed from scratch by Brian Warner. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called keyspan_pda. If you want to compile it - as a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called keyspan_pda. config USB_SERIAL_OMNINET tristate "USB ZyXEL omni.net LCD Plus Driver (EXPERIMENTAL)" @@ -431,10 +392,8 @@ config USB_SERIAL_OMNINET help Say Y here if you want to use a ZyXEL omni.net LCD ISDN TA. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called omninet. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called omninet. config USB_EZUSB bool diff -prauN linux-2.6.0-test5/drivers/usb/serial/ipaq.c wli-2.6.0-test5-bk12-25/drivers/usb/serial/ipaq.c --- linux-2.6.0-test5/drivers/usb/serial/ipaq.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/usb/serial/ipaq.c 2003-09-25 19:16:04.000000000 -0700 @@ -341,7 +341,7 @@ static void ipaq_read_bulk_callback(stru usb_serial_debug_data (__FILE__, __FUNCTION__, urb->actual_length, data); tty = port->tty; - if (urb->actual_length) { + if (tty && urb->actual_length) { for (i = 0; i < urb->actual_length ; ++i) { /* if we insert more than TTY_FLIPBUF_SIZE characters, we drop them. */ if(tty->flip.count >= TTY_FLIPBUF_SIZE) { diff -prauN linux-2.6.0-test5/drivers/usb/serial/usb-serial.c wli-2.6.0-test5-bk12-25/drivers/usb/serial/usb-serial.c --- linux-2.6.0-test5/drivers/usb/serial/usb-serial.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/usb/serial/usb-serial.c 2003-09-25 19:16:04.000000000 -0700 @@ -871,8 +871,10 @@ static void destroy_serial (struct kobje /* the ports are cleaned up and released in port_release() */ for (i = 0; i < serial->num_ports; ++i) - if (serial->port[i]->dev.parent != NULL) + if (serial->port[i]->dev.parent != NULL) { device_unregister(&serial->port[i]->dev); + serial->port[i] = NULL; + } /* If this is a "fake" port, we have to clean it up here, as it will * not get cleaned up in port_release() as it was never registered with diff -prauN linux-2.6.0-test5/drivers/usb/storage/Kconfig wli-2.6.0-test5-bk12-25/drivers/usb/storage/Kconfig --- linux-2.6.0-test5/drivers/usb/storage/Kconfig 2003-09-08 12:50:32.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/usb/storage/Kconfig 2003-09-25 19:16:04.000000000 -0700 @@ -15,10 +15,8 @@ config USB_STORAGE similar devices. This driver may also be used for some cameras and card readers. - This code is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called usb-storage. If you want to compile it - as a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called usb-storage. config USB_STORAGE_DEBUG bool "USB Mass Storage verbose debug" diff -prauN linux-2.6.0-test5/drivers/usb/storage/unusual_devs.h wli-2.6.0-test5-bk12-25/drivers/usb/storage/unusual_devs.h --- linux-2.6.0-test5/drivers/usb/storage/unusual_devs.h 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/usb/storage/unusual_devs.h 2003-09-25 19:16:04.000000000 -0700 @@ -289,7 +289,7 @@ UNUSUAL_DEV( 0x054c, 0x006d, 0x0000, 0x UNUSUAL_DEV( 0x057b, 0x0000, 0x0000, 0x0299, "Y-E Data", "Flashbuster-U", - US_SC_UFI, US_PR_CB, NULL, + US_SC_DEVICE, US_PR_CB, NULL, US_FL_SINGLE_LUN), UNUSUAL_DEV( 0x057b, 0x0000, 0x0300, 0x9999, diff -prauN linux-2.6.0-test5/drivers/video/Kconfig wli-2.6.0-test5-bk12-25/drivers/video/Kconfig --- linux-2.6.0-test5/drivers/video/Kconfig 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/video/Kconfig 2003-09-25 19:16:04.000000000 -0700 @@ -158,10 +158,8 @@ config FB_AMIGA This is the frame buffer device driver for the builtin graphics chipset found in Amigas. - The driver is also available as a module ( = code which can be - inserted and removed from the running kernel whenever you want). The - module will be called amifb. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called amifb. config FB_AMIGA_OCS bool "Amiga OCS chipset support" @@ -288,11 +286,8 @@ config FB_VGA16 This is the frame buffer device driver for VGA 16 color graphic cards. Say Y if you have such a card. - This code is also available as a module. If you want to compile it - as a module ( = code which can be inserted in and removed from the - running kernel whenever you want), say M here and read - . The module will be called - vga16fb. + To compile this driver as a module, choose M here: the + module will be called vga16fb. config FB_STI tristate "HP STI frame buffer device support" @@ -348,10 +343,8 @@ config FB_HGA help Say Y here if you have a Hercules mono graphics card. - This driver is also available as a module ( = code which can be - inserted and removed from the running kernel whenever you want). - The module will be called hgafb. If you want to compile it as - a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called hgafb. As this card technology is 15 years old, most people will answer N here. @@ -404,10 +397,8 @@ config FB_PVR2 This driver may or may not work on other PowerVR 2 cards, but is totally untested. Use at your own risk. If unsure, say N. - This driver is also available as a module ( = code which can be - inserted and removed from the running kernel whenever you want). - The module will be called pvr2fb. If you want to compile it as - a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called pvr2fb. You can pass several parameters to the driver at boot time or at module load time. The parameters look like "video=pvr2:XXX", where @@ -460,10 +451,8 @@ config FB_RIVA chips. Say Y if you have such a graphics board. - The driver is also available as a module ( = code which can be - inserted and removed from the running kernel whenever you want). The - module will be called rivafb. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called rivafb. config FB_I810 tristate "Intel 810/815 support (EXPERIMENTAL)" @@ -472,10 +461,8 @@ config FB_I810 This driver supports the on-board graphics built in to the Intel 810 and 815 chipsets. Say Y if you have and plan to use such a board. - The driver is also available as a module ( = code which can be - inserted and removed from the running kernel whenever you want). - The module will be called i810fb. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called i810fb. For more information, please read @@ -512,10 +499,8 @@ config FB_MATROX Mystique G200, Matrox Millennium G200, Matrox Marvel G200 video, Matrox G400, G450 or G550 card in your box. - This driver is also available as a module ( = code which can be - inserted and removed from the running kernel whenever you want). - The module will be called matroxfb. If you want to compile it as - a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called matroxfb. You can pass several parameters to the driver at boot time or at module load time. The parameters look like "video=matrox:XXX", and @@ -677,10 +662,8 @@ config FB_ATY128 Say Y if you have such a graphics board and read . - The driver is also available as a module ( = code which can be - inserted and removed from the running kernel whenever you want). The - module will be called aty128fb. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called aty128fb. config FB_ATY tristate "ATI Mach64 display support" if PCI || ATARI @@ -689,10 +672,8 @@ config FB_ATY This driver supports graphics boards with the ATI Mach64 chips. Say Y if you have such a graphics board. - The driver is also available as a module ( = code which can be - inserted and removed from the running kernel whenever you want). The - module will be called atyfb. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called atyfb. config FB_ATY_CT bool "Mach64 CT/VT/GT/LT (incl. 3D RAGE) support" @@ -750,10 +731,8 @@ config FB_NEOMAGIC This driver supports notebooks with NeoMagic PCI chips. Say Y if you have such a graphics card. - The driver is also available as a module ( = code which can be - inserted and removed from the running kernel whenever you want). The - module will be called neofb. If you want to compile it as a - module, say M here and read Documentation/modules.txt. + To compile this driver as a module, choose M here: the + module will be called neofb. config FB_3DFX tristate "3Dfx Banshee/Voodoo3 display support" @@ -762,10 +741,8 @@ config FB_3DFX This driver supports graphics boards with the 3Dfx Banshee/Voodoo3 chips. Say Y if you have such a graphics board. - The driver is also available as a module ( = code which can be - inserted and removed from the running kernel whenever you want). The - module will be called tdfxfb. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called tdfxfb. config FB_VOODOO1 tristate "3Dfx Voodoo Graphics (sst1) support" @@ -774,10 +751,8 @@ config FB_VOODOO1 Say Y here if you have a 3Dfx Voodoo Graphics (Voodoo1/sst1) or Voodoo2 (cvg) based graphics card. - This driver is also available as a module ( = code which can be - inserted and removed from the running kernel whenever you want). - The module will be called sstfb. If you want to compile it as - a module, say M here and read Documentation/modules.txt. + To compile this driver as a module, choose M here: the + module will be called sstfb. WARNING: Do not use any application that uses the 3D engine (namely glide) while using this driver. @@ -795,10 +770,8 @@ config FB_TRIDENT Say Y if you have such a graphics board. - The driver is also available as a module ( = code which can be - inserted and removed from the running kernel whenever you want). The - module will be called tridentfb. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called tridentfb. config FB_PM3 tristate "Permedia3 support" @@ -921,10 +894,8 @@ config FB_VIRTUAL the innocent, it has to be enabled explicitly at boot time using the kernel option `video=vfb:'. - This driver is also available as a module ( = code which can be - inserted and removed from the running kernel whenever you want). The - module will be called vfb. If you want to compile it as a module, - say M here and read . + To compile this driver as a module, choose M here: the + module will be called vfb. If unsure, say N. if VT diff -prauN linux-2.6.0-test5/drivers/video/console/Kconfig wli-2.6.0-test5-bk12-25/drivers/video/console/Kconfig --- linux-2.6.0-test5/drivers/video/console/Kconfig 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/video/console/Kconfig 2003-09-25 19:16:04.000000000 -0700 @@ -51,10 +51,8 @@ config MDA_CONSOLE say Y here if your MDA card is the primary card in your system; the normal VGA driver will handle it. - This driver is also available as a module ( = code which can be - inserted and removed from the running kernel whenever you want). - The module will be called mdacon. If you want to compile it as - a module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called mdacon. If unsure, say N. diff -prauN linux-2.6.0-test5/drivers/video/i810/i810_main.c wli-2.6.0-test5-bk12-25/drivers/video/i810/i810_main.c --- linux-2.6.0-test5/drivers/video/i810/i810_main.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/video/i810/i810_main.c 2003-09-25 19:16:04.000000000 -0700 @@ -57,7 +57,7 @@ #include "i810_main.h" /* PCI */ -static const char *i810_pci_list[] __initdata = { +static const char *i810_pci_list[] __devinitdata = { "Intel(R) 810 Framebuffer Device" , "Intel(R) 810-DC100 Framebuffer Device" , "Intel(R) 810E Framebuffer Device" , @@ -66,7 +66,7 @@ static const char *i810_pci_list[] __ini "Intel(R) 815 (Internal Graphics with AGP) Framebuffer Device" }; -static struct pci_device_id i810fb_pci_tbl[] __initdata = { +static struct pci_device_id i810fb_pci_tbl[] = { { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82810_IG1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82810_IG3, @@ -1456,7 +1456,7 @@ static int i810fb_cursor(struct fb_info return 0; } -static struct fb_ops i810fb_ops __initdata = { +static struct fb_ops i810fb_ops __devinitdata = { .owner = THIS_MODULE, .fb_open = i810fb_open, .fb_release = i810fb_release, @@ -1538,7 +1538,7 @@ static int i810fb_resume(struct pci_dev * AGP resource allocation * ***********************************************************************/ -static void __init i810_fix_pointers(struct i810fb_par *par) +static void __devinit i810_fix_pointers(struct i810fb_par *par) { par->fb.physical = par->aperture.physical+(par->fb.offset << 12); par->fb.virtual = par->aperture.virtual+(par->fb.offset << 12); @@ -1550,7 +1550,7 @@ static void __init i810_fix_pointers(str (par->cursor_heap.offset << 12); } -static void __init i810_fix_offsets(struct i810fb_par *par) +static void __devinit i810_fix_offsets(struct i810fb_par *par) { if (vram + 1 > par->aperture.size >> 20) vram = (par->aperture.size >> 20) - 1; @@ -1570,7 +1570,7 @@ static void __init i810_fix_offsets(stru par->cursor_heap.size = 4096; } -static int __init i810_alloc_agp_mem(struct fb_info *info) +static int __devinit i810_alloc_agp_mem(struct fb_info *info) { struct i810fb_par *par = (struct i810fb_par *) info->par; int size; @@ -1635,7 +1635,7 @@ static int __init i810_alloc_agp_mem(str * Sets the the user monitor's horizontal and vertical * frequency limits */ -static void __init i810_init_monspecs(struct fb_info *info) +static void __devinit i810_init_monspecs(struct fb_info *info) { if (!hsync1) hsync1 = HFMIN; @@ -1663,7 +1663,7 @@ static void __init i810_init_monspecs(st * @par: pointer to i810fb_par structure * @info: pointer to current fb_info structure */ -static void __init i810_init_defaults(struct i810fb_par *par, +static void __devinit i810_init_defaults(struct i810fb_par *par, struct fb_info *info) { if (voffset) @@ -1707,7 +1707,7 @@ static void __init i810_init_defaults(st * i810_init_device - initialize device * @par: pointer to i810fb_par structure */ -static void __init i810_init_device(struct i810fb_par *par) +static void __devinit i810_init_device(struct i810fb_par *par) { u8 reg, *mmio = par->mmio_start_virtual; @@ -1726,7 +1726,7 @@ static void __init i810_init_device(stru par->mem_freq = (reg) ? 133 : 100; } -static int __init +static int __devinit i810_allocate_pci_resource(struct i810fb_par *par, const struct pci_device_id *entry) { @@ -1831,7 +1831,7 @@ int __init i810fb_setup(char *options) return 0; } -static int __init i810fb_init_pci (struct pci_dev *dev, +static int __devinit i810fb_init_pci (struct pci_dev *dev, const struct pci_device_id *entry) { struct fb_info *info; diff -prauN linux-2.6.0-test5/drivers/video/i810/i810_main.h wli-2.6.0-test5-bk12-25/drivers/video/i810/i810_main.h --- linux-2.6.0-test5/drivers/video/i810/i810_main.h 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/video/i810/i810_main.h 2003-09-25 19:16:04.000000000 -0700 @@ -14,7 +14,7 @@ #ifndef __I810_MAIN_H__ #define __I810_MAIN_H__ -static int __init i810fb_init_pci (struct pci_dev *dev, +static int __devinit i810fb_init_pci (struct pci_dev *dev, const struct pci_device_id *entry); static void __exit i810fb_remove_pci(struct pci_dev *dev); static int i810fb_resume(struct pci_dev *dev); @@ -95,7 +95,7 @@ inline void flush_cache(void) #ifdef CONFIG_MTRR #define KERNEL_HAS_MTRR 1 -static inline void __init set_mtrr(struct i810fb_par *par) +static inline void __devinit set_mtrr(struct i810fb_par *par) { par->mtrr_reg = mtrr_add((u32) par->aperture.physical, par->aperture.size, MTRR_TYPE_WRCOMB, 1); diff -prauN linux-2.6.0-test5/drivers/video/matrox/i2c-matroxfb.c wli-2.6.0-test5-bk12-25/drivers/video/matrox/i2c-matroxfb.c --- linux-2.6.0-test5/drivers/video/matrox/i2c-matroxfb.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/video/matrox/i2c-matroxfb.c 2003-09-25 19:16:04.000000000 -0700 @@ -111,7 +111,7 @@ static int i2c_bus_reg(struct i2c_bit_ad b->mask.data = data; b->mask.clock = clock; b->adapter = matrox_i2c_adapter_template; - snprintf(b->adapter.name, DEVICE_NAME_SIZE, name, + snprintf(b->adapter.name, I2C_NAME_SIZE, name, minfo->fbcon.node); i2c_set_adapdata(&b->adapter, b); b->adapter.algo_data = &b->bac; diff -prauN linux-2.6.0-test5/drivers/video/riva/fbdev.c wli-2.6.0-test5-bk12-25/drivers/video/riva/fbdev.c --- linux-2.6.0-test5/drivers/video/riva/fbdev.c 2003-09-08 12:50:17.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/drivers/video/riva/fbdev.c 2003-09-25 19:16:04.000000000 -0700 @@ -1576,7 +1576,7 @@ static struct fb_ops riva_fb_ops = { .fb_sync = rivafb_sync, }; -static int __init riva_set_fbinfo(struct fb_info *info) +static int __devinit riva_set_fbinfo(struct fb_info *info) { struct riva_par *par = (struct riva_par *) info->par; unsigned int cmap_len; @@ -1726,7 +1726,7 @@ static void riva_get_dfpinfo(struct fb_i * * ------------------------------------------------------------------------- */ -static int __init rivafb_probe(struct pci_dev *pd, +static int __devinit rivafb_probe(struct pci_dev *pd, const struct pci_device_id *ent) { struct riva_chip_info *rci = &riva_chip_info[ent->driver_data]; diff -prauN linux-2.6.0-test5/fs/Kconfig wli-2.6.0-test5-bk12-25/fs/Kconfig --- linux-2.6.0-test5/fs/Kconfig 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/Kconfig 2003-09-25 19:16:05.000000000 -0700 @@ -43,9 +43,7 @@ config EXT2_FS available from . - If you want to compile this file system as a module ( = code which - can be inserted in and removed from the running kernel whenever you - want), say M here and read . The + To compile this file system support as a module, choose M here: the module will be called ext2. Be aware however that the file system of your root partition (the one containing the directory /) cannot be compiled as a module, and so this could be dangerous. Most @@ -111,9 +109,7 @@ config EXT3_FS e2fsprogs version 1.20 or later in order to create ext3 journals (available at ). - If you want to compile this file system as a module ( = code which - can be inserted in and removed from the running kernel whenever you - want), say M here and read . The + To compile this file system support as a module, choose M here: the module will be called ext3. Be aware however that the file system of your root partition (the one containing the directory /) cannot be compiled as a module, and so this may be dangerous. @@ -170,11 +166,9 @@ config JBD If you are using the ext3 file system, you need to say Y here. If you are not using ext3 then you will probably want to say N. - If you want to compile this device as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module - will be called jbd. If you are compiling ext3 into the kernel, - you cannot compile this code as a module. + To compile this device as a module, choose M here: the module will be + called jbd. If you are compiling ext3 into the kernel, you cannot + compile this code as a module. config JBD_DEBUG bool "JBD (ext3) debugging support" @@ -310,9 +304,7 @@ config XFS_FS for complete details. This implementation is on-disk compatible with the IRIX version of XFS. - If you want to compile this file system as a module ( = code which - can be inserted in and removed from the running kernel whenever you - want), say M here and read . The + To compile this file system support as a module, choose M here: the module will be called xfs. Be aware, however, that if the file system of your root partition is compiled as a module, you'll need to use an initial ramdisk (initrd) to boot. @@ -375,10 +367,8 @@ config MINIX_FS on older Linux floppy disks. This option will enlarge your kernel by about 28 KB. If unsure, say N. - 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 . The module - will be called minix. Note that the file system of your root + To compile this file system support as a module, choose M here: the + module will be called minix. Note that the file system of your root partition (the one containing the directory /) cannot be compiled as a module. @@ -390,11 +380,8 @@ config ROMFS_FS other read-only media as well. Read for details. - This file system support is also available as a module ( = code - which can be inserted in and removed from the running kernel - whenever you want). The module is called romfs. If you want to - compile it as a module, say M here and read - . Note that the file system of your + To compile this file system support as a module, choose M here: the + module will be called romfs. Note that the file system of your root partition (the one containing the directory /) cannot be a module. @@ -450,10 +437,8 @@ config AUTOFS_FS features, say N here and say Y to "Kernel automounter v4 support", below. - 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 . The module - will be called autofs. + To compile this support as a module, choose M here: the module will be + called autofs. If you are not a part of a fairly large, distributed network, you probably do not need an automounter, and can say N here. @@ -470,11 +455,9 @@ config AUTOFS4_FS ; you also want to answer Y to "NFS file system support", below. - 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 . The module - will be called autofs4. You will need to add "alias autofs - autofs4" to your modules configuration file. + To compile this support as a module, choose M here: the module will be + called autofs4. You will need to add "alias autofs autofs4" to your + modules configuration file. If you are not a part of a fairly large, distributed network or don't have a laptop which needs to dynamically reconfigure to the @@ -496,10 +479,8 @@ config ISO9660_FS available from ), thereby enlarging your kernel by about 27 KB; otherwise say N. - 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 . The module - will be called isofs. + To compile this file system support as a module, choose M here: the + module will be called isofs. config JOLIET bool "Microsoft Joliet CDROM extensions" @@ -537,11 +518,8 @@ config UDF_FS if written to by other UDF utilities, such as DirectCD. Please read . - This file system support is also available as a module ( = code - which can be inserted in and removed from the running kernel - whenever you want). The module is called udf. If you want to - compile it as a module, say M here and read - . + To compile this file system support as a module, choose M here: the + module will be called udf. If unsure, say N. @@ -582,12 +560,10 @@ config FAT_FS The FAT support will enlarge your kernel by about 37 KB. If unsure, say Y. - If you want to compile this as a module however ( = code which can - be inserted in and removed from the running kernel whenever you - want), say M here and read . The - module will be called fat. Note that if you compile the FAT - support as a module, you cannot compile any of the FAT-based file - systems into the kernel -- they will have to be modules as well. + To compile this as a module, choose M here: the module will be called + fat. Note that if you compile the FAT support as a module, you + cannot compile any of the FAT-based file systems into the kernel + -- they will have to be modules as well. The file system of your root partition (the one containing the directory /) cannot be a module, so don't say M here if you intend to use UMSDOS as your root file system. @@ -618,11 +594,8 @@ config MSDOS_FS This option will enlarge your kernel by about 7 KB. If unsure, answer Y. This will only work if you said Y to "DOS FAT fs support" - as well. If you want to compile this as a module however ( = code - which can be inserted in and removed from the running kernel - whenever you want), say M here and read - . - The module will be called msdos. + as well. To compile this as a module, choose M here: the module will + be called msdos. config VFAT_FS tristate "VFAT (Windows-95) fs support" @@ -643,10 +616,8 @@ config VFAT_FS the file for details. If unsure, say Y. - 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 . The module - will be called vfat. + To compile this as a module, choose M here: the module will be called + vfat. config UMSDOS_FS #dep_tristate ' UMSDOS: Unix-like file system on top of standard MSDOS fs' CONFIG_UMSDOS_FS $CONFIG_MSDOS_FS @@ -672,39 +643,49 @@ config UMSDOS_FS This option enlarges your kernel by about 28 KB and it only works if you said Y to both "DOS FAT fs support" and "MSDOS fs support" - above. 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 . The - module will be called umsdos. Note that the file system of your - root partition (the one containing the directory /) cannot be a - module, so saying M could be dangerous. If unsure, say N. + above. To compile this as a module, choose M here: the module will be + called umsdos. Note that the file system of your root partition + (the one containing the directory /) cannot be a module, so saying M + could be dangerous. If unsure, say N. config NTFS_FS - tristate "NTFS file system support (read only)" + tristate "NTFS file system support" help - NTFS is the file system of Microsoft Windows NT/2000/XP. For more - information see . Saying Y - here would allow you to read from NTFS partitions. - - This file system is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called ntfs. If you want to compile it as a - module, say M here and read . + NTFS is the file system of Microsoft Windows NT, 2000, XP and 2003. + + Saying Y or M here enables read support. There is partial, but + safe, write support available. For write support you must also + say Y to "NTFS write support" below. + + There are also a number of user-space tools available, called + ntfsprogs. These include ntfsundelete and ntfsresize, that work + without NTFS support enabled in the kernel. + + This is a rewrite from scratch of Linux NTFS support and replaced + the old NTFS code starting with Linux 2.5.11. A backport to + the Linux 2.4 kernel series is separately available as a patch + from the project web site. - If you are not using Windows NT/2000/XP in addition to Linux on your - computer it is safe to say N. + For more information see + and . + + To compile this file system support as a module, choose M here: the + module will be called ntfs. + + If you are not using Windows NT, 2000, XP or 2003 in addition to + Linux on your computer it is safe to say N. config NTFS_DEBUG bool "NTFS debugging support" depends on NTFS_FS help If you are experiencing any problems with the NTFS file system, say - Y here. This will result in additional consistency checks to be + Y here. This will result in additional consistency checks to be performed by the driver as well as additional debugging messages to - be written to the system log. Note that debugging messages are - disabled by default. To enable them, supply the option debug_msgs=1 + be written to the system log. Note that debugging messages are + disabled by default. To enable them, supply the option debug_msgs=1 at the kernel command line when booting the kernel or as an option - to insmod when loading the ntfs module. Once the driver is active, + to insmod when loading the ntfs module. Once the driver is active, you can enable debugging messages by doing (as root): echo 1 > /proc/sys/fs/ntfs-debug Replacing the "1" with "0" would disable debug messages. @@ -717,16 +698,33 @@ config NTFS_DEBUG debugging messages while the misbehaviour was occurring. config NTFS_RW - bool "NTFS write support (DANGEROUS)" - depends on NTFS_FS && EXPERIMENTAL + bool "NTFS write support" + depends on NTFS_FS help - This enables the experimental write support in the NTFS driver. + This enables the partial, but safe, write support in the NTFS driver. - WARNING: Do not use this option unless you are actively developing - NTFS as it is currently guaranteed to be broken and you - may lose all your data! + The only supported operation is overwriting existing files, without + changing the file length. No file or directory creation, deletion or + renaming is possible. Note only non-resident files can be written to + so you may find that some very small files (<500 bytes or so) cannot + be written to. + + While we cannot guarantee that it will not damage any data, we have + so far not received a single report where the driver would have + damaged someones data so we assume it is perfectly safe to use. + + Note: While write support is safe in this version (a rewrite from + scratch of the NTFS support), it should be noted that the old NTFS + write support, included in Linux 2.5.10 and before (since 1997), + is not safe. + + This is currently useful with TopologiLinux. TopologiLinux is run + on top of any DOS/Microsoft Windows system without partitioning your + hard disk. Unlike other Linux distributions TopologiLinux does not + need its own partition. For more information see + - It is strongly recommended and perfectly safe to say N here. + It is perfectly safe to say N here. endmenu @@ -761,8 +759,12 @@ config PROC_FS This option will enlarge your kernel by about 67 KB. Several programs depend on this, so everyone should say Y here. +config PROC_KCORE + bool + default y if !ARM + config DEVFS_FS - bool "/dev file system support (EXPERIMENTAL)" + bool "/dev file system support (OBSOLETE)" depends on EXPERIMENTAL help This is support for devfs, a virtual file system (like /proc) which @@ -781,6 +783,13 @@ config DEVFS_FS ptys, you will also need to enable (and mount) the /dev/pts filesystem (CONFIG_DEVPTS_FS). + Note that devfs has been obsoleted by udev, + . + It has been stripped down to a bare minimum and is only provided for + legacy installations that use its naming scheme which is + unfortunately different from the names normal Linux installations + use. + If unsure, say N. config DEVFS_MOUNT @@ -864,7 +873,9 @@ config TMPFS config HUGETLBFS bool "HugeTLB file system support" - depends on HUGETLB_PAGE + +config HUGETLB_PAGE + def_bool HUGETLBFS config RAMFS bool @@ -877,10 +888,8 @@ config RAMFS you need a file system which lives in RAM with limit checking use tmpfs. - 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 . The module - will be called ramfs. + To compile this as a module, choose M here: the module will be called + ramfs. endmenu @@ -901,10 +910,8 @@ config ADFS_FS /dev/[hs]d?1) on each of your drives. Please read the file for further details. - This code is also available as a module called adfs ( = code which - can be inserted in and removed from the running kernel whenever you - want). If you want to compile it as a module, say M here and read - . + To compile this code as a module, choose M here: the module will be + called adfs. If unsure, say N. @@ -935,11 +942,8 @@ config AFFS_FS If you want to do this, you will also need to say Y or M to "Loop device support", above. - This file system is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module is called affs. If you want to compile it as a module, - say M here and read . If unsure, - say N. + To compile this file system support as a module, choose M here: the + module will be called affs. If unsure, say N. config HFS_FS tristate "Apple Macintosh file system support (EXPERIMENTAL)" @@ -950,11 +954,8 @@ config HFS_FS Please read to learn about the available mount options. - This file system support is also available as a module ( = code - which can be inserted in and removed from the running kernel - whenever you want). The module is called hfs. If you want to - compile it as a module, say M here and read - . + To compile this file system support as a module, choose M here: the + module will be called hfs. config BEFS_FS tristate "BeOS file systemv(BeFS) support (read only) (EXPERIMENTAL)" @@ -972,9 +973,7 @@ config BEFS_FS If you don't know what this is about, say N. - 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 Documentation/modules.txt. The module will be + To compile this as a module, choose M here: the module will be called befs. config BEFS_DEBUG @@ -1000,12 +999,9 @@ config BFS_FS If you don't know what this is about, say N. - 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 . The module - will be called bfs. Note that the file system of your root - partition (the one containing the directory /) cannot be compiled as - a module. + To compile this as a module, choose M here: the module will be called + bfs. Note that the file system of your root partition (the one + containing the directory /) cannot be compiled as a module. @@ -1021,10 +1017,8 @@ config EFS_FS what all this is about, it's safe to say N. For more information about EFS see its home page at . - If you want to compile the EFS file system support as a module ( = - code which can be inserted in and removed from the running kernel - whenever you want), say M here and read - . The module will be called efs. + To compile the EFS file system support as a module, choose M here: the + module will be called efs. config JFFS_FS tristate "Journalling Flash File System (JFFS) support" @@ -1107,11 +1101,9 @@ config CRAMFS See and for further information. - 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 . The module - will be called cramfs. Note that the root file system (the one - containing the directory /) cannot be compiled as a module. + To compile this as a module, choose M here: the module will be called + cramfs. Note that the root file system (the one containing the + directory /) cannot be compiled as a module. If unsure, say N. @@ -1128,11 +1120,8 @@ config VXFS_FS fstab(5) is 'vxfs' as it describes the file system format, not the actual driver. - This file system is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module is called freevxfs. If you want to compile it as a - module, say M here and read . If - unsure, say N. + To compile this as a module, choose M here: the module will be + called freevxfs. If unsure, say N. config HPFS_FS @@ -1146,11 +1135,8 @@ config HPFS_FS option in order to be able to read them. Read . - This file system is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module is called hpfs. If you want to compile it as a module, - say M here and read . If unsure, - say N. + To compile this file system support as a module, choose M here: the + module will be called hpfs. If unsure, say N. @@ -1164,11 +1150,8 @@ config QNX4FS_FS Unless you say Y to "QNX4FS read-write support" below, you will only be able to read these file systems. - This file system support is also available as a module ( = code - which can be inserted in and removed from the running kernel - whenever you want). The module is called qnx4. If you want to - compile it as a module, say M here and read - . + To compile this file system support as a module, choose M here: the + module will be called qnx4. If you don't know whether you need it, then you don't need it: answer N. @@ -1215,10 +1198,8 @@ config SYSV_FS . Saying Y here will enlarge your kernel by about 27 KB. - 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 . The module - will be called sysv. + To compile this as a module, choose M here: the module will be called + sysv. If you haven't heard about all of this before, it's safe to say N. @@ -1248,10 +1229,8 @@ config UFS_FS NeXT character set to the Latin1 character set; use the program recode ("info recode") for this purpose. - If you want to compile the UFS file system support as a module ( = - code which can be inserted in and removed from the running kernel - whenever you want), say M here and read - . The module will be called ufs. + To compile the UFS file system support as a module, choose M here: the + module will be called ufs. If you haven't heard about all of this before, it's safe to say N. @@ -1289,10 +1268,8 @@ config NFS_FS If you say Y here, you should have said Y to TCP/IP networking also. This option would enlarge your kernel by about 27 KB. - This file system is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module is called nfs. If you want to compile it as a module, - say M here and read . + To compile this file system support as a module, choose M here: the + module will be called nfs. If you are configuring a diskless machine which will mount its root file system over NFS at boot time, say Y here and to "Kernel @@ -1347,11 +1324,8 @@ config NFSD Please read the NFS-HOWTO, available from . - The NFS server is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module is called nfsd. If you want to compile it as a module, - say M here and read . If unsure, - say N. + To compile the NFS server support as a module, choose M here: the + module will be called nfsd. If unsure, say N. config NFSD_V3 bool "Provide NFSv3 server support" @@ -1456,10 +1430,8 @@ config SMB_FS General information about how to connect Linux, Windows machines and Macs is on the WWW at . - If you want to compile the SMB support as a module ( = code which - can be inserted in and removed from the running kernel whenever you - want), say M here and read . The - module will be called smbfs. Most people say N, however. + To compile the SMB support as a module, choose M here: the module will + be called smbfs. Most people say N, however. config SMB_NLS_DEFAULT bool "Use a default NLS" @@ -1505,7 +1477,7 @@ config CIFS cifs module since smbfs is currently more stable and provides support for older servers. The intent of this module is to provide the most advanced network file system function for CIFS compliant servers, - including support for dfs (heirarchical name space), secure per-user + including support for dfs (hierarchical name space), secure per-user session establishment, safe distributed caching (oplock), optional packet signing, Unicode and other internationalization improvements, and optional Winbind (nsswitch) integration. This module is in an early @@ -1530,11 +1502,8 @@ config NCP_FS General information about how to connect Linux, Windows machines and Macs is on the WWW at . - 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 . The module - will be called ncpfs. Say N unless you are connected to a Novell - network. + To compile this as a module, choose M here: the module will be called + ncpfs. Say N unless you are connected to a Novell network. source "fs/ncpfs/Kconfig" @@ -1557,10 +1526,22 @@ config CODA_FS and check out the Coda home page . - If you want to compile the coda client support as a module ( = code - which can be inserted in and removed from the running kernel - whenever you want), say M here and read - . The module will be called coda. + To compile the coda client support as a module, choose M here: the + module will be called coda. + +config CODA_FS_OLD_API + bool "Use 96-bit Coda file identifiers" + depends on CODA_FS + help + A new kernel-userspace API had to be introduced for Coda v6.0 + to support larger 128-bit file identifiers as needed by the + new realms implementation. + + However this new API is not backward compatible with older + clients. If you really need to run the old Coda userspace + cache manager then say Y. + + For most cases you probably want to say N. config INTERMEZZO_FS tristate "InterMezzo file system support (replicating fs) (EXPERIMENTAL)" diff -prauN linux-2.6.0-test5/fs/Kconfig.binfmt wli-2.6.0-test5-bk12-25/fs/Kconfig.binfmt --- linux-2.6.0-test5/fs/Kconfig.binfmt 2003-09-08 12:50:29.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/Kconfig.binfmt 2003-09-25 19:16:05.000000000 -0700 @@ -23,11 +23,9 @@ config BINFMT_ELF ld.so (check the file for location and latest version). - 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 . The module - will be called binfmt_elf. Saying M or N here is dangerous because - some crucial programs on your system might be in ELF format. + To compile this as a module, choose M here: the module will be called + binfmt_elf. Saying M or N here is dangerous because some crucial + programs on your system might be in ELF format. config BINFMT_FLAT tristate "Kernel support for flat binaries" diff -prauN linux-2.6.0-test5/fs/adfs/inode.c wli-2.6.0-test5-bk12-25/fs/adfs/inode.c --- linux-2.6.0-test5/fs/adfs/inode.c 2003-09-08 12:49:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/adfs/inode.c 2003-09-28 23:04:07.000000000 -0700 @@ -63,7 +63,7 @@ static int adfs_readpage(struct file *fi static int adfs_prepare_write(struct file *file, struct page *page, unsigned int from, unsigned int to) { return cont_prepare_write(page, from, to, adfs_get_block, - &ADFS_I(page->mapping->host)->mmu_private); + &ADFS_I(page_mapping(page)->host)->mmu_private); } static sector_t _adfs_bmap(struct address_space *mapping, sector_t block) diff -prauN linux-2.6.0-test5/fs/affs/file.c wli-2.6.0-test5-bk12-25/fs/affs/file.c --- linux-2.6.0-test5/fs/affs/file.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/affs/file.c 2003-09-28 23:04:07.000000000 -0700 @@ -418,7 +418,7 @@ static int affs_readpage(struct file *fi static int affs_prepare_write(struct file *file, struct page *page, unsigned from, unsigned to) { return cont_prepare_write(page, from, to, affs_get_block, - &AFFS_I(page->mapping->host)->mmu_private); + &AFFS_I(page_mapping(page)->host)->mmu_private); } static sector_t _affs_bmap(struct address_space *mapping, sector_t block) { @@ -507,7 +507,7 @@ affs_file_write(struct file *file, const static int affs_do_readpage_ofs(struct file *file, struct page *page, unsigned from, unsigned to) { - struct inode *inode = page->mapping->host; + struct inode *inode = page_mapping(page)->host; struct super_block *sb = inode->i_sb; struct buffer_head *bh; char *data; @@ -615,7 +615,7 @@ out: static int affs_readpage_ofs(struct file *file, struct page *page) { - struct inode *inode = page->mapping->host; + struct inode *inode = page_mapping(page)->host; u32 to; int err; @@ -635,7 +635,7 @@ affs_readpage_ofs(struct file *file, str static int affs_prepare_write_ofs(struct file *file, struct page *page, unsigned from, unsigned to) { - struct inode *inode = page->mapping->host; + struct inode *inode = page_mapping(page)->host; u32 size, offset; u32 tmp; int err = 0; @@ -676,7 +676,7 @@ static int affs_prepare_write_ofs(struct static int affs_commit_write_ofs(struct file *file, struct page *page, unsigned from, unsigned to) { - struct inode *inode = page->mapping->host; + struct inode *inode = page_mapping(page)->host; struct super_block *sb = inode->i_sb; struct buffer_head *bh, *prev_bh; char *data; diff -prauN linux-2.6.0-test5/fs/affs/symlink.c wli-2.6.0-test5-bk12-25/fs/affs/symlink.c --- linux-2.6.0-test5/fs/affs/symlink.c 2003-09-08 12:49:55.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/affs/symlink.c 2003-09-28 23:04:07.000000000 -0700 @@ -20,7 +20,7 @@ static int affs_symlink_readpage(struct file *file, struct page *page) { struct buffer_head *bh; - struct inode *inode = page->mapping->host; + struct inode *inode = page_mapping(page)->host; char *link = kmap(page); struct slink_front *lf; int err; diff -prauN linux-2.6.0-test5/fs/afs/Makefile wli-2.6.0-test5-bk12-25/fs/afs/Makefile --- linux-2.6.0-test5/fs/afs/Makefile 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/afs/Makefile 2003-09-25 19:16:05.000000000 -0700 @@ -2,6 +2,8 @@ # Makefile for Red Hat Linux AFS client. # +#CFLAGS += -finstrument-functions + kafs-objs := \ callback.o \ cell.o \ diff -prauN linux-2.6.0-test5/fs/afs/cache-layout.h wli-2.6.0-test5-bk12-25/fs/afs/cache-layout.h --- linux-2.6.0-test5/fs/afs/cache-layout.h 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/afs/cache-layout.h 1969-12-31 16:00:00.000000000 -0800 @@ -1,224 +0,0 @@ -/* cache-layout.h: AFS cache layout - * - * Copyright (C) 2002 Red Hat, Inc. All Rights Reserved. - * Written by David Howells (dhowells@redhat.com) - * - * 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 of the License, or (at your option) any later version. - * - * - * The cache is stored on a block device and is laid out as: - * - * 0 +------------------------------------------------ - * | - * | SuperBlock - * | - * 1 +------------------------------------------------ - * | - * | file-meta-data File: Data block #0 - * | - file-meta-data file (volix #0 file #0) : Meta-data block - * | - contains direct pointers to first 64 file data blocks - * | - Cached cell catalogue file (volix #0 file #1) file: Meta-data block - * | - Cached volume location catalogue file (volix #0 file #2): Meta-data block - * | - Vnode catalogue hash bucket #n file: Meta-data block - * | - * 2 +------------------------------------------------ - * | - * | Bitmap Block Allocation Bitmap - * | - 1 bit per block in the bitmap block - * | - bit 0 of dword 0 refers to the bitmap block 0 - * | - set if the bitmap block is full - * | - 32768 bits per block, requiring 4 blocks for a 16Tb cache - * | - bitmap bitmap blocks are cleared initially - * | - not present if <4 bitmap blocks - * | - * +------------------------------------------------ - * | - * | File Block Allocation Bitmap - * | - 1 bit per block in the cache - * | - bit 0 of dword 0 refers to the first block of the data cache - * | - set if block is allocated - * | - 32768 bits per block, requiring 131072 blocks for a 16Tb cache - * | - bitmap blocks are cleared lazily (sb->bix_bitmap_unready) - * | - * +------------------------------------------------ - * | - * | Data Cache - * | - * End +------------------------------------------------ - * - * Blocks are indexed by an unsigned 32-bit word, meaning that the cache can hold up to 2^32 pages, - * or 16Tb in total. - * - * Credentials will be cached in memory, since they are subject to change without notice, and are - * difficult to derive manually, being constructed from the following information: - * - per vnode user ID and mode mask - * - parent directory ACL - * - directory ACL (dirs only) - * - group lists from ptserver - */ - -#ifndef _LINUX_AFS_CACHE_LAYOUT_H -#define _LINUX_AFS_CACHE_LAYOUT_H - -#include "types.h" - -typedef u32 afsc_blockix_t; -typedef u32 afsc_cellix_t; - -/* Cached volume index - * - afsc_volix_t/4 is the index into the volume cache - * - afsc_volix_t%4 is 0 for R/W, 1 for R/O and 2 for Bak (3 is not used) - * - afsc_volix_t==0-3 refers to a "virtual" volume that stores meta-data about the cache - */ -typedef struct { - u32 index; -} afsc_volix_t; - -#define AFSC_VNCAT_HASH_NBUCKETS 128 - -/* special meta file IDs (all cell 0 vol 0) */ -enum afsc_meta_fids { - AFSC_META_FID_METADATA = 0, - AFSC_META_FID_CELL_CATALOGUE = 1, - AFSC_META_FID_VLDB_CATALOGUE = 2, - AFSC_META_FID_VNODE_CATALOGUE0 = 3, - AFSC_META_FID__COUNT = AFSC_VNCAT_HASH_NBUCKETS + 3 -}; - -/*****************************************************************************/ -/* - * cache superblock block layout - * - the blockdev is prepared for initialisation by 'echo "kafsuninit" >/dev/hdaXX' before mounting - * - when initialised, the magic number is changed to "kafs-cache" - */ -struct afsc_super_block -{ - char magic[10]; /* magic number */ -#define AFSC_SUPER_MAGIC "kafs-cache" -#define AFSC_SUPER_MAGIC_NEEDS_INIT "kafsuninit" -#define AFSC_SUPER_MAGIC_SIZE 10 - - unsigned short endian; /* 0x1234 stored CPU-normal order */ -#define AFSC_SUPER_ENDIAN 0x1234 - - unsigned version; /* format version */ -#define AFSC_SUPER_VERSION 1 - - /* layout */ - unsigned bsize; /* cache block size */ - afsc_blockix_t bix_bitmap_fullmap; /* block ix of bitmap full bitmap */ - afsc_blockix_t bix_bitmap; /* block ix of alloc bitmap */ - afsc_blockix_t bix_bitmap_unready; /* block ix of unready area of bitmap */ - afsc_blockix_t bix_cache; /* block ix of data cache */ - afsc_blockix_t bix_end; /* block ix of end of cache */ -}; - -/*****************************************************************************/ -/* - * vnode (inode) metadata cache record - * - padded out to 512 bytes and stored eight to a page - * - only the data version is necessary - * - disconnected operation is not supported - * - afs_iget() contacts the server to get the meta-data _anyway_ when an inode is first brought - * into memory - * - at least 64 direct block pointers will be available (a directory is max 256Kb) - * - any block pointer which is 0 indicates an uncached page - */ -struct afsc_vnode_meta -{ - /* file ID */ - afsc_volix_t volume_ix; /* volume catalogue index */ - unsigned vnode; /* vnode number */ - unsigned unique; /* FID unique */ - unsigned size; /* size of file */ - time_t mtime; /* last modification time */ - - /* file status */ - afs_dataversion_t version; /* current data version */ - - /* file contents */ - afsc_blockix_t dbl_indirect; /* double indirect block index */ - afsc_blockix_t indirect; /* single indirect block 0 index */ - afsc_blockix_t direct[0]; /* direct block index (#AFSC_VNODE_META_DIRECT) */ -}; - -#define AFSC_VNODE_META_RECSIZE 512 /* record size */ - -#define AFSC_VNODE_META_DIRECT \ - ((AFSC_VNODE_META_RECSIZE-sizeof(struct afsc_vnode_meta))/sizeof(afsc_blockix_t)) - -#define AFSC_VNODE_META_PER_PAGE (PAGE_SIZE / AFSC_VNODE_META_RECSIZE) - -/*****************************************************************************/ -/* - * entry in the cached cell catalogue - */ -struct afsc_cell_record -{ - char name[64]; /* cell name (padded with NULs) */ - struct in_addr servers[16]; /* cached cell servers */ -}; - -/*****************************************************************************/ -/* - * entry in the cached volume location catalogue - * - indexed by afsc_volix_t/4 - */ -struct afsc_vldb_record -{ - char name[64]; /* volume name (padded with NULs) */ - afs_volid_t vid[3]; /* volume IDs for R/W, R/O and Bak volumes */ - unsigned char vidmask; /* voltype mask for vid[] */ - unsigned char _pad[1]; - unsigned short nservers; /* number of entries used in servers[] */ - struct in_addr servers[8]; /* fileserver addresses */ - unsigned char srvtmask[8]; /* voltype masks for servers[] */ -#define AFSC_VOL_STM_RW 0x01 /* server holds a R/W version of the volume */ -#define AFSC_VOL_STM_RO 0x02 /* server holds a R/O version of the volume */ -#define AFSC_VOL_STM_BAK 0x04 /* server holds a backup version of the volume */ - - afsc_cellix_t cell_ix; /* cell catalogue index (MAX_UINT if unused) */ - time_t ctime; /* time at which cached */ -}; - -/*****************************************************************************/ -/* - * vnode catalogue entry - * - must be 2^x size so that do_generic_file_read doesn't present them split across pages - */ -struct afsc_vnode_catalogue -{ - afsc_volix_t volume_ix; /* volume catalogue index */ - afs_vnodeid_t vnode; /* vnode ID */ - u32 meta_ix; /* metadata file index */ - u32 atime; /* last time entry accessed */ -} __attribute__((packed)); - -#define AFSC_VNODE_CATALOGUE_PER_BLOCK ((size_t)(PAGE_SIZE/sizeof(struct afsc_vnode_catalogue))) - -/*****************************************************************************/ -/* - * vnode data "page directory" block - * - first 1024 pages don't map through here - * - PAGE_SIZE in size - */ -struct afsc_indirect_block -{ - afsc_blockix_t pt_bix[1024]; /* "page table" block indices */ -}; - -/*****************************************************************************/ -/* - * vnode data "page table" block - * - PAGE_SIZE in size - */ -struct afsc_dbl_indirect_block -{ - afsc_blockix_t page_bix[1024]; /* "page" block indices */ -}; - - -#endif /* _LINUX_AFS_CACHE_LAYOUT_H */ diff -prauN linux-2.6.0-test5/fs/afs/cache.h wli-2.6.0-test5-bk12-25/fs/afs/cache.h --- linux-2.6.0-test5/fs/afs/cache.h 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/fs/afs/cache.h 2003-09-25 19:16:05.000000000 -0700 @@ -0,0 +1,27 @@ +/* cache.h: AFS local cache management interface + * + * Copyright (C) 2002 Red Hat, Inc. All Rights Reserved. + * Written by David Howells (dhowells@redhat.com) + * + * 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 of the License, or (at your option) any later version. + */ + +#ifndef _LINUX_AFS_CACHE_H +#define _LINUX_AFS_CACHE_H + +#undef AFS_CACHING_SUPPORT + +#include +#ifdef AFS_CACHING_SUPPORT +#include +#endif +#include "types.h" + +#ifdef __KERNEL__ + +#endif /* __KERNEL__ */ + +#endif /* _LINUX_AFS_CACHE_H */ diff -prauN linux-2.6.0-test5/fs/afs/callback.c wli-2.6.0-test5-bk12-25/fs/afs/callback.c --- linux-2.6.0-test5/fs/afs/callback.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/afs/callback.c 2003-09-25 19:16:05.000000000 -0700 @@ -68,7 +68,7 @@ int SRXAFSCM_InitCallBackState(afs_serve spin_unlock(&vnode->lock); iput(inode); - if (release) afs_put_server(server); + afs_put_server(server); spin_lock(&server->cb_lock); } diff -prauN linux-2.6.0-test5/fs/afs/cell.c wli-2.6.0-test5-bk12-25/fs/afs/cell.c --- linux-2.6.0-test5/fs/afs/cell.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/afs/cell.c 2003-09-25 19:16:05.000000000 -0700 @@ -36,6 +36,19 @@ static char *rootcell; MODULE_PARM(rootcell,"s"); MODULE_PARM_DESC(rootcell,"root AFS cell name and VL server IP addr list"); +#ifdef AFS_CACHING_SUPPORT +static cachefs_match_val_t afs_cell_cache_match(void *target, const void *entry); +static void afs_cell_cache_update(void *source, void *entry); + +struct cachefs_index_def afs_cache_cell_index_def = { + .name = "cell_ix", + .data_size = sizeof(afs_cell_t), + .keys[0] = { CACHEFS_INDEX_KEYS_ASCIIZ, 64 }, + .match = afs_cell_cache_match, + .update = afs_cell_cache_update, +}; +#endif + /*****************************************************************************/ /* * create a cell record @@ -65,7 +78,6 @@ int afs_cell_create(const char *name, ch atomic_set(&cell->usage,0); INIT_LIST_HEAD(&cell->link); - INIT_LIST_HEAD(&cell->caches); rwlock_init(&cell->sv_lock); INIT_LIST_HEAD(&cell->sv_list); @@ -96,7 +108,7 @@ int afs_cell_create(const char *name, ch cell->vl_addrs[cell->vl_naddrs++].s_addr = htonl((a<<24)|(b<<16)|(c<<8)|d); - if (cell->vl_naddrs>=16) + if (cell->vl_naddrs >= AFS_CELL_MAX_ADDRS) break; } while(vllist=next, vllist); @@ -106,6 +118,14 @@ int afs_cell_create(const char *name, ch if (ret<0) goto error; +#ifdef AFS_CACHING_SUPPORT + /* put it up for caching */ + cachefs_acquire_cookie(afs_cache_netfs.primary_index, + &afs_vlocation_cache_index_def, + cell, + &cell->cache); +#endif + /* add to the cell lists */ write_lock(&afs_cells_lock); list_add_tail(&cell->link,&afs_cells); @@ -166,36 +186,45 @@ int afs_cell_init(void) /* * lookup a cell record */ -int afs_cell_lookup(const char *name, afs_cell_t **_cell) +int afs_cell_lookup(const char *name, unsigned namesz, struct afs_cell **_cell) { struct list_head *_p; afs_cell_t *cell; + int ret; - _enter("\"%s\",",name?name:"*thiscell*"); + _enter("\"%*.*s\",", namesz, namesz, name ? name : ""); - cell = afs_cell_root; + *_cell = NULL; if (name) { /* if the cell was named, look for it in the cell record list */ + ret = -ENOENT; cell = NULL; read_lock(&afs_cells_lock); list_for_each(_p,&afs_cells) { - cell = list_entry(_p,afs_cell_t,link); - if (strcmp(cell->name,name)==0) + cell = list_entry(_p, struct afs_cell, link); + if (strncmp(cell->name, name, namesz) == 0) { + afs_get_cell(cell); break; + } cell = NULL; } read_unlock(&afs_cells_lock); - } - if (cell) + if (cell) + ret = 0; + } + else { + cell = afs_cell_root; afs_get_cell(cell); + ret = 0; + } *_cell = cell; - _leave(" = %d (%p)",cell?0:-ENOENT,cell); - return cell ? 0 : -ENOENT; + _leave(" = %d (%p)", ret, cell); + return ret; } /* end afs_cell_lookup() */ @@ -211,8 +240,8 @@ afs_cell_t *afs_get_cell_maybe(afs_cell_ cell = *_cell; if (cell && !list_empty(&cell->link)) - atomic_inc(&cell->usage); - else + afs_get_cell(cell); + else cell = NULL; write_unlock(&afs_cells_lock); @@ -226,6 +255,9 @@ afs_cell_t *afs_get_cell_maybe(afs_cell_ */ void afs_put_cell(afs_cell_t *cell) { + if (!cell) + return; + _enter("%p{%d,%s}",cell,atomic_read(&cell->usage),cell->name); /* sanity check */ @@ -278,6 +310,10 @@ static void afs_cell_destroy(afs_cell_t list_del_init(&cell->proc_link); up_write(&afs_proc_cells_sem); +#ifdef AFS_CACHING_SUPPORT + cachefs_relinquish_cookie(cell->cache,0); +#endif + up_write(&afs_cells_sem); if (!list_empty(&cell->sv_list)) BUG(); @@ -377,8 +413,7 @@ void afs_cell_purge(void) _enter(""); - if (afs_cell_root) - afs_put_cell(afs_cell_root); + afs_put_cell(afs_cell_root); while (!list_empty(&afs_cells)) { cell = NULL; @@ -450,3 +485,46 @@ void afs_cell_purge(void) _leave(""); } /* end afs_cell_purge() */ + +/*****************************************************************************/ +/* + * match a cell record obtained from the cache + */ +#ifdef AFS_CACHING_SUPPORT +static cachefs_match_val_t afs_cell_cache_match(void *target, const void *entry) +{ + const struct afs_cache_cell *ccell = entry; + struct afs_cell *cell = target; + + _enter("{%s},{%s}", ccell->name, cell->name); + + if (strncmp(ccell->name, cell->name, sizeof(ccell->name)) == 0) { + _leave(" = SUCCESS"); + return CACHEFS_MATCH_SUCCESS; + } + + _leave(" = FAILED"); + return CACHEFS_MATCH_FAILED; +} /* end afs_cell_cache_match() */ +#endif + +/*****************************************************************************/ +/* + * update a cell record in the cache + */ +#ifdef AFS_CACHING_SUPPORT +static void afs_cell_cache_update(void *source, void *entry) +{ + struct afs_cache_cell *ccell = entry; + struct afs_cell *cell = source; + + _enter("%p,%p", source, entry); + + strncpy(ccell->name, cell->name, sizeof(ccell->name)); + + memcpy(ccell->vl_servers, + cell->vl_addrs, + min(sizeof(ccell->vl_servers), sizeof(cell->vl_addrs))); + +} /* end afs_cell_cache_update() */ +#endif diff -prauN linux-2.6.0-test5/fs/afs/cell.h wli-2.6.0-test5-bk12-25/fs/afs/cell.h --- linux-2.6.0-test5/fs/afs/cell.h 2003-09-08 12:50:23.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/afs/cell.h 2003-09-25 19:16:05.000000000 -0700 @@ -13,11 +13,24 @@ #define _LINUX_AFS_CELL_H #include "types.h" +#include "cache.h" + +#define AFS_CELL_MAX_ADDRS 15 extern volatile int afs_cells_being_purged; /* T when cells are being purged by rmmod */ /*****************************************************************************/ /* + * entry in the cached cell catalogue + */ +struct afs_cache_cell +{ + char name[64]; /* cell name (padded with NULs) */ + struct in_addr vl_servers[15]; /* cached cell VL servers */ +}; + +/*****************************************************************************/ +/* * AFS cell record */ struct afs_cell @@ -26,7 +39,9 @@ struct afs_cell struct list_head link; /* main cell list link */ struct list_head proc_link; /* /proc cell list link */ struct proc_dir_entry *proc_dir; /* /proc dir for this cell */ - struct list_head caches; /* list of caches currently backing this cell */ +#ifdef AFS_CACHING_SUPPORT + struct cachefs_cookie *cache; /* caching cookie */ +#endif /* server record management */ rwlock_t sv_lock; /* active server list lock */ @@ -41,22 +56,22 @@ struct afs_cell spinlock_t vl_gylock; /* graveyard lock */ unsigned short vl_naddrs; /* number of VL servers in addr list */ unsigned short vl_curr_svix; /* current server index */ - struct in_addr vl_addrs[16]; /* cell VL server addresses */ + struct in_addr vl_addrs[AFS_CELL_MAX_ADDRS]; /* cell VL server addresses */ char name[0]; /* cell name - must go last */ }; extern int afs_cell_init(void); -extern int afs_cell_create(const char *name, char *vllist, afs_cell_t **_cell); +extern int afs_cell_create(const char *name, char *vllist, struct afs_cell **_cell); -extern int afs_cell_lookup(const char *name, afs_cell_t **_cell); +extern int afs_cell_lookup(const char *name, unsigned nmsize, struct afs_cell **_cell); #define afs_get_cell(C) do { atomic_inc(&(C)->usage); } while(0) -extern afs_cell_t *afs_get_cell_maybe(afs_cell_t **_cell); +extern struct afs_cell *afs_get_cell_maybe(struct afs_cell **_cell); -extern void afs_put_cell(afs_cell_t *cell); +extern void afs_put_cell(struct afs_cell *cell); extern void afs_cell_purge(void); diff -prauN linux-2.6.0-test5/fs/afs/cmservice.c wli-2.6.0-test5-bk12-25/fs/afs/cmservice.c --- linux-2.6.0-test5/fs/afs/cmservice.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/afs/cmservice.c 2003-09-25 19:16:05.000000000 -0700 @@ -119,6 +119,7 @@ static int kafscmd(void *arg) int die; printk("kAFS: Started kafscmd %d\n",current->pid); + daemonize("kafscmd"); complete(&kafscmd_alive); @@ -293,15 +294,20 @@ int afscm_start(void) down_write(&afscm_sem); if (!afscm_usage) { - ret = kernel_thread(kafscmd,NULL,0); - if (ret<0) + ret = kernel_thread(kafscmd, NULL, 0); + if (ret < 0) goto out; wait_for_completion(&kafscmd_alive); - ret = rxrpc_add_service(afs_transport,&AFSCM_service); + ret = rxrpc_add_service(afs_transport, &AFSCM_service); if (ret<0) goto kill; + +#ifdef AFS_AUTOMOUNT_SUPPORT + afs_kafstimod_add_timer(&afs_mntpt_expiry_timer, + afs_mntpt_expiry_timeout * HZ); +#endif } afscm_usage++; @@ -330,17 +336,20 @@ void afscm_stop(void) down_write(&afscm_sem); - if (afscm_usage==0) BUG(); + if (afscm_usage == 0) BUG(); afscm_usage--; - if (afscm_usage==0) { + if (afscm_usage == 0) { /* don't want more incoming calls */ - rxrpc_del_service(afs_transport,&AFSCM_service); + rxrpc_del_service(afs_transport, &AFSCM_service); /* abort any calls I've still got open (the afscm_error() will dequeue them) */ spin_lock(&afscm_calls_lock); while (!list_empty(&afscm_calls)) { - call = list_entry(afscm_calls.next,struct rxrpc_call,app_link); + call = list_entry(afscm_calls.next, + struct rxrpc_call, + app_link); + list_del_init(&call->app_link); rxrpc_get_call(call); spin_unlock(&afscm_calls_lock); @@ -348,7 +357,8 @@ void afscm_stop(void) rxrpc_call_abort(call,-ESRCH); /* abort, dequeue and put */ _debug("nuking active call %08x.%d", - ntohl(call->conn->conn_id),ntohl(call->call_id)); + ntohl(call->conn->conn_id), + ntohl(call->call_id)); rxrpc_put_call(call); rxrpc_put_call(call); @@ -376,6 +386,10 @@ void afscm_stop(void) spin_lock(&kafscmd_attention_lock); } spin_unlock(&kafscmd_attention_lock); + +#ifdef AFS_AUTOMOUNT_SUPPORT + afs_kafstimod_del_timer(&afs_mntpt_expiry_timer); +#endif } up_write(&afscm_sem); @@ -490,7 +504,7 @@ static void _SRXAFSCM_CallBack(struct rx if (ret<0) rxrpc_call_abort(call,ret); - if (server) afs_put_server(server); + afs_put_server(server); _leave(" = %d",ret); @@ -556,7 +570,7 @@ static void _SRXAFSCM_InitCallBackState( if (ret<0) rxrpc_call_abort(call,ret); - if (server) afs_put_server(server); + afs_put_server(server); _leave(" = %d",ret); @@ -622,7 +636,7 @@ static void _SRXAFSCM_Probe(struct rxrpc if (ret<0) rxrpc_call_abort(call,ret); - if (server) afs_put_server(server); + afs_put_server(server); _leave(" = %d",ret); diff -prauN linux-2.6.0-test5/fs/afs/dir.c wli-2.6.0-test5-bk12-25/fs/afs/dir.c --- linux-2.6.0-test5/fs/afs/dir.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/afs/dir.c 2003-09-25 19:16:05.000000000 -0700 @@ -23,10 +23,11 @@ #include "super.h" #include "internal.h" -static struct dentry *afs_dir_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *); +static struct dentry *afs_dir_lookup(struct inode *dir, struct dentry *dentry, + struct nameidata *nd); static int afs_dir_open(struct inode *inode, struct file *file); static int afs_dir_readdir(struct file *file, void *dirent, filldir_t filldir); -static int afs_d_revalidate(struct dentry *dentry, struct nameidata *); +static int afs_d_revalidate(struct dentry *dentry, struct nameidata *nd); static int afs_d_delete(struct dentry *dentry); static int afs_dir_lookup_filldir(void *_cookie, const char *name, int nlen, loff_t fpos, ino_t ino, unsigned dtype); @@ -70,7 +71,7 @@ typedef union afs_dirent { u8 name[16]; u8 overflow[4]; /* if any char of the name (inc NUL) reaches here, consume * the next dirent too */ - } parts; + } u; u8 extended_name[32]; } afs_dirent_t; @@ -256,7 +257,7 @@ static int afs_dir_iterate_block(unsigne /* got a valid entry */ dire = &block->dirents[offset]; - nlen = strnlen(dire->parts.name,sizeof(*block) - offset*sizeof(afs_dirent_t)); + nlen = strnlen(dire->u.name,sizeof(*block) - offset*sizeof(afs_dirent_t)); _debug("ENT[%Zu.%u]: %s %Zu \"%s\"\n", blkoff/sizeof(afs_dir_block_t),offset, @@ -288,11 +289,11 @@ static int afs_dir_iterate_block(unsigne /* found the next entry */ ret = filldir(cookie, - dire->parts.name, + dire->u.name, nlen, blkoff + offset * sizeof(afs_dirent_t), - ntohl(dire->parts.vnode), - filldir==afs_dir_lookup_filldir ? dire->parts.unique : DT_UNKNOWN); + ntohl(dire->u.vnode), + filldir==afs_dir_lookup_filldir ? dire->u.unique : DT_UNKNOWN); if (ret<0) { _leave(" = 0 [full]"); return 0; @@ -414,7 +415,8 @@ static int afs_dir_lookup_filldir(void * /* * look up an entry in a directory */ -static struct dentry *afs_dir_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd) +static struct dentry *afs_dir_lookup(struct inode *dir, struct dentry *dentry, + struct nameidata *nd) { struct afs_dir_lookup_cookie cookie; struct afs_super_info *as; @@ -423,11 +425,11 @@ static struct dentry *afs_dir_lookup(str unsigned fpos; int ret; - _enter("{%lu},{%s}",dir->i_ino,dentry->d_name.name); + _enter("{%lu},%p{%s}",dir->i_ino,dentry,dentry->d_name.name); /* insanity checks first */ - if (sizeof(afs_dir_block_t) != 2048) BUG(); - if (sizeof(afs_dirent_t) != 32) BUG(); + BUG_ON(sizeof(afs_dir_block_t) != 2048); + BUG_ON(sizeof(afs_dirent_t) != 32); if (dentry->d_name.len > 255) { _leave(" = -ENAMETOOLONG"); @@ -495,9 +497,11 @@ static int afs_d_revalidate(struct dentr unsigned fpos; int ret; - _enter("%s,%p",dentry->d_name.name,nd); + _enter("{sb=%p n=%s},",dentry->d_sb,dentry->d_name.name); + + /* lock down the parent dentry so we can peer at it */ + parent = dget_parent(dentry->d_parent); - parent = dget_parent(dentry); dir = parent->d_inode; inode = dentry->d_inode; diff -prauN linux-2.6.0-test5/fs/afs/file.c wli-2.6.0-test5-bk12-25/fs/afs/file.c --- linux-2.6.0-test5/fs/afs/file.c 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/afs/file.c 2003-09-28 23:04:07.000000000 -0700 @@ -16,6 +16,7 @@ #include #include #include +#include #include "volume.h" #include "vnode.h" #include @@ -27,6 +28,8 @@ static int afs_file_release(struct inode #endif static int afs_file_readpage(struct file *file, struct page *page); +static int afs_file_invalidatepage(struct page *page, unsigned long offset); +static int afs_file_releasepage(struct page *page, int gfp_flags); static ssize_t afs_file_write(struct file *file, const char *buf, size_t size, loff_t *off); @@ -37,7 +40,7 @@ struct inode_operations afs_file_inode_o struct file_operations afs_file_file_operations = { .read = generic_file_read, .write = afs_file_write, - .mmap = generic_file_readonly_mmap, + .mmap = generic_file_mmap, #if 0 .open = afs_file_open, .release = afs_file_release, @@ -47,6 +50,10 @@ struct file_operations afs_file_file_ope struct address_space_operations afs_fs_aops = { .readpage = afs_file_readpage, + .sync_page = block_sync_page, + .set_page_dirty = __set_page_dirty_nobuffers, + .releasepage = afs_file_releasepage, + .invalidatepage = afs_file_invalidatepage, }; /*****************************************************************************/ @@ -66,16 +73,53 @@ static ssize_t afs_file_write(struct fil /*****************************************************************************/ /* + * deal with notification that a page was read from the cache + */ +#ifdef AFS_CACHING_SUPPORT +static void afs_file_readpage_read_complete(void *cookie_data, struct page *page, void *data, + int error) +{ + _enter("%p,%p,%p,%d",cookie_data,page,data,error); + + if (error) + SetPageError(page); + else + SetPageUptodate(page); + unlock_page(page); + +} /* end afs_file_readpage_read_complete() */ +#endif + +/*****************************************************************************/ +/* + * deal with notification that a page was written to the cache + */ +#ifdef AFS_CACHING_SUPPORT +static void afs_file_readpage_write_complete(void *cookie_data, struct page *page, void *data, + int error) +{ + _enter("%p,%p,%p,%d",cookie_data,page,data,error); + + unlock_page(page); + +} /* end afs_file_readpage_write_complete() */ +#endif + +/*****************************************************************************/ +/* * AFS read page from file (or symlink) */ static int afs_file_readpage(struct file *file, struct page *page) { struct afs_rxfs_fetch_descriptor desc; +#ifdef AFS_CACHING_SUPPORT + struct cachefs_page *pageio; +#endif struct inode *inode; afs_vnode_t *vnode; int ret; - inode = page->mapping->host; + inode = page_mapping(page)->host; _enter("{%lu},{%lu}",inode->i_ino,page->index); @@ -88,28 +132,73 @@ static int afs_file_readpage(struct file if (vnode->flags & AFS_VNODE_DELETED) goto error; - /* work out how much to get and from where */ - desc.fid = vnode->fid; - desc.offset = page->index << PAGE_CACHE_SHIFT; - desc.size = min((size_t)(inode->i_size - desc.offset),(size_t)PAGE_SIZE); - desc.buffer = kmap(page); - - clear_page(desc.buffer); - - /* read the contents of the file from the server into the page */ - ret = afs_vnode_fetch_data(vnode,&desc); - kunmap(page); - if (ret<0) { - if (ret==-ENOENT) { - _debug("got NOENT from server - marking file deleted and stale"); - vnode->flags |= AFS_VNODE_DELETED; - ret = -ESTALE; - } +#ifdef AFS_CACHING_SUPPORT + ret = cachefs_page_get_private(page,&pageio,GFP_NOIO); + if (ret<0) goto error; - } - SetPageUptodate(page); - unlock_page(page); + /* is it cached? */ + ret = cachefs_read_or_alloc_page(vnode->cache, + page, + afs_file_readpage_read_complete, + NULL, + GFP_KERNEL); +#else + ret = -ENOBUFS; +#endif + + switch (ret) { + /* read BIO submitted and wb-journal entry found */ + case 1: + BUG(); // TODO - handle wb-journal match + + /* read BIO submitted (page in cache) */ + case 0: + break; + + /* no page available in cache */ + case -ENOBUFS: + case -ENODATA: + default: + desc.fid = vnode->fid; + desc.offset = page->index << PAGE_CACHE_SHIFT; + desc.size = min((size_t)(inode->i_size - desc.offset),(size_t)PAGE_SIZE); + desc.buffer = kmap(page); + + clear_page(desc.buffer); + + /* read the contents of the file from the server into the page */ + ret = afs_vnode_fetch_data(vnode,&desc); + kunmap(page); + if (ret<0) { + if (ret==-ENOENT) { + _debug("got NOENT from server - marking file deleted and stale"); + vnode->flags |= AFS_VNODE_DELETED; + ret = -ESTALE; + } + +#ifdef AFS_CACHING_SUPPORT + cachefs_uncache_page(vnode->cache,page); +#endif + goto error; + } + + SetPageUptodate(page); + +#ifdef AFS_CACHING_SUPPORT + if (cachefs_write_page(vnode->cache, + page, + afs_file_readpage_write_complete, + NULL, + GFP_KERNEL) != 0 + ) { + cachefs_uncache_page(vnode->cache,page); + unlock_page(page); + } +#else + unlock_page(page); +#endif + } _leave(" = 0"); return 0; @@ -122,3 +211,83 @@ static int afs_file_readpage(struct file return ret; } /* end afs_file_readpage() */ + +/*****************************************************************************/ +/* + * get a page cookie for the specified page + */ +#ifdef AFS_CACHING_SUPPORT +int afs_cache_get_page_cookie(struct page *page, struct cachefs_page **_page_cookie) +{ + int ret; + + _enter(""); + ret = cachefs_page_get_private(page,_page_cookie,GFP_NOIO); + + _leave(" = %d",ret); + return ret; +} /* end afs_cache_get_page_cookie() */ +#endif + +/*****************************************************************************/ +/* + * invalidate part or all of a page + */ +static int afs_file_invalidatepage(struct page *page, unsigned long offset) +{ + int ret = 1; + + _enter("{%lu},%lu",page->index,offset); + + BUG_ON(!PageLocked(page)); + if (PagePrivate(page)) { +#ifdef AFS_CACHING_SUPPORT + struct afs_vnode *vnode = AFS_FS_I(page->mapping->host); + cachefs_uncache_page(vnode->cache,page); +#endif + + /* + * We release buffers only if the entire page is being invalidated. + * The get_block cached value has been unconditionally invalidated, + * so real IO is not possible anymore. + */ + if (offset == 0) { + BUG_ON(!PageLocked(page)); + + ret = 0; + if (!PageWriteback(page)) + ret = page->mapping->a_ops->releasepage(page, 0); + } + } + + _leave(" = %d",ret); + return ret; +} /* end afs_file_invalidatepage() */ + +/*****************************************************************************/ +/* + * release a page and cleanup its private data + */ +static int afs_file_releasepage(struct page *page, int gfp_flags) +{ + struct cachefs_page *pageio; + + _enter("{%lu},%x",page->index,gfp_flags); + + if (PagePrivate(page)) { +#ifdef AFS_CACHING_SUPPORT + struct afs_vnode *vnode = AFS_FS_I(page->mapping->host); + cachefs_uncache_page(vnode->cache,page); +#endif + + pageio = (struct cachefs_page *) page->private; + page->private = 0; + ClearPagePrivate(page); + + if (pageio) + kfree(pageio); + } + + _leave(" = 0"); + return 0; +} /* end afs_file_releasepage() */ diff -prauN linux-2.6.0-test5/fs/afs/inode.c wli-2.6.0-test5-bk12-25/fs/afs/inode.c --- linux-2.6.0-test5/fs/afs/inode.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/afs/inode.c 2003-09-25 19:16:05.000000000 -0700 @@ -69,17 +69,16 @@ static int afs_inode_map_status(afs_vnod inode->i_uid = vnode->status.owner; inode->i_gid = 0; inode->i_size = vnode->status.size; - inode->i_atime.tv_sec = inode->i_mtime.tv_sec = inode->i_ctime.tv_sec = vnode->status.mtime_server; - inode->i_atime.tv_nsec = - inode->i_mtime.tv_nsec = - inode->i_ctime.tv_nsec = 0; + inode->i_ctime.tv_sec = vnode->status.mtime_server; + inode->i_ctime.tv_nsec = 0; + inode->i_atime = inode->i_mtime = inode->i_ctime; inode->i_blksize = PAGE_CACHE_SIZE; inode->i_blocks = 0; inode->i_version = vnode->fid.unique; inode->i_mapping->a_ops = &afs_fs_aops; /* check to see whether a symbolic link is really a mountpoint */ - if (vnode->status.type==AFS_FTYPE_SYMLINK) { + if (vnode->status.type == AFS_FTYPE_SYMLINK) { afs_mntpt_check_symlink(vnode); if (vnode->flags & AFS_VNODE_MOUNTPOINT) { @@ -105,7 +104,7 @@ int afs_inode_fetch_status(struct inode ret = afs_vnode_fetch_status(vnode); - if (ret==0) + if (ret == 0) ret = afs_inode_map_status(vnode); return ret; @@ -120,8 +119,8 @@ static int afs_iget5_test(struct inode * { struct afs_iget_data *data = opaque; - /* only match inodes with the same version number */ - return inode->i_ino==data->fid.vnode && inode->i_version==data->fid.unique; + return inode->i_ino == data->fid.vnode && + inode->i_version == data->fid.unique; } /* end afs_iget5_test() */ /*****************************************************************************/ @@ -145,20 +144,22 @@ static int afs_iget5_set(struct inode *i /* * inode retrieval */ -inline int afs_iget(struct super_block *sb, afs_fid_t *fid, struct inode **_inode) +inline int afs_iget(struct super_block *sb, afs_fid_t *fid, + struct inode **_inode) { - struct afs_iget_data data = { .fid = *fid }; + struct afs_iget_data data = { fid: *fid }; struct afs_super_info *as; + struct afs_vnode *vnode; struct inode *inode; - afs_vnode_t *vnode; int ret; - _enter(",{%u,%u,%u},,",fid->vid,fid->vnode,fid->unique); + _enter(",{%u,%u,%u},,", fid->vid, fid->vnode, fid->unique); as = sb->s_fs_info; data.volume = as->volume; - inode = iget5_locked(sb,fid->vnode,afs_iget5_test,afs_iget5_set,&data); + inode = iget5_locked(sb, fid->vnode, afs_iget5_test, afs_iget5_set, + &data); if (!inode) { _leave(" = -ENOMEM"); return -ENOMEM; @@ -173,10 +174,19 @@ inline int afs_iget(struct super_block * *_inode = inode; else iput(inode); - _leave(" = %d",ret); + _leave(" = %d", ret); return ret; } +#ifdef AFS_CACHING_SUPPORT + /* set up caching before reading the status, as fetch-status reads the + * first page of symlinks to see if they're really mntpts */ + cachefs_acquire_cookie(vnode->volume->cache, + NULL, + vnode, + &vnode->cache); +#endif + /* okay... it's a new inode */ vnode->flags |= AFS_VNODE_CHANGED; ret = afs_inode_fetch_status(inode); @@ -187,11 +197,11 @@ inline int afs_iget(struct super_block * unlock_new_inode(inode); *_inode = inode; - _leave(" = 0 [CB { v=%u x=%lu t=%u nix=%u }]", + _leave(" = 0 [CB { v=%u x=%lu t=%u } c=%p]", vnode->cb_version, vnode->cb_timeout.timo_jif, vnode->cb_type, - vnode->nix + vnode->cache ); return 0; @@ -201,7 +211,7 @@ inline int afs_iget(struct super_block * unlock_new_inode(inode); iput(inode); - _leave(" = %d [bad]",ret); + _leave(" = %d [bad]", ret); return ret; } /* end afs_iget() */ @@ -209,7 +219,8 @@ inline int afs_iget(struct super_block * /* * read the attributes of an inode */ -int afs_inode_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat) +int afs_inode_getattr(struct vfsmount *mnt, struct dentry *dentry, + struct kstat *stat) { struct inode *inode; afs_vnode_t *vnode; @@ -217,23 +228,25 @@ int afs_inode_getattr(struct vfsmount *m inode = dentry->d_inode; - _enter("{ ino=%lu v=%lu }",inode->i_ino,inode->i_version); + _enter("{ ino=%lu v=%lu }", inode->i_ino, inode->i_version); vnode = AFS_FS_I(inode); ret = afs_inode_fetch_status(inode); - if (ret==-ENOENT) { - _leave(" = %d [%d %p]",ret,atomic_read(&dentry->d_count),dentry->d_inode); + if (ret == -ENOENT) { + _leave(" = %d [%d %p]", + ret, atomic_read(&dentry->d_count), dentry->d_inode); return ret; } - else if (ret<0) { + else if (ret < 0) { make_bad_inode(inode); - _leave(" = %d",ret); + _leave(" = %d", ret); return ret; } - /* transfer attributes from the inode structure to the stat structure */ - generic_fillattr(inode,stat); + /* transfer attributes from the inode structure to the stat + * structure */ + generic_fillattr(inode, stat); _leave(" = 0 CB { v=%u x=%u t=%u }", vnode->cb_version, @@ -261,9 +274,14 @@ void afs_clear_inode(struct inode *inode vnode->cb_type ); - if (inode->i_ino!=vnode->fid.vnode) BUG(); + BUG_ON(inode->i_ino != vnode->fid.vnode); afs_vnode_give_up_callback(vnode); +#ifdef AFS_CACHING_SUPPORT + cachefs_relinquish_cookie(vnode->cache, 0); + vnode->cache = NULL; +#endif + _leave(""); } /* end afs_clear_inode() */ diff -prauN linux-2.6.0-test5/fs/afs/internal.h wli-2.6.0-test5-bk12-25/fs/afs/internal.h --- linux-2.6.0-test5/fs/afs/internal.h 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/afs/internal.h 2003-09-25 19:16:05.000000000 -0700 @@ -26,7 +26,7 @@ #define kproto(FMT, a...) printk("### "FMT"\n" , ## a) #define knet(FMT, a...) printk(FMT"\n" , ## a) -#if 0 +#ifdef __KDEBUG #define _enter(FMT, a...) kenter(FMT , ## a) #define _leave(FMT, a...) kleave(FMT , ## a) #define _debug(FMT, a...) kdebug(FMT , ## a) @@ -56,6 +56,9 @@ static inline void afs_discard_my_signal */ extern struct rw_semaphore afs_proc_cells_sem; extern struct list_head afs_proc_cells; +#ifdef AFS_CACHING_SUPPORT +extern struct cachefs_index_def afs_cache_cell_index_def; +#endif /* * dir.c @@ -70,6 +73,10 @@ extern struct address_space_operations a extern struct inode_operations afs_file_inode_operations; extern struct file_operations afs_file_file_operations; +#ifdef AFS_CACHING_SUPPORT +extern int afs_cache_get_page_cookie(struct page *page, struct cachefs_page **_page_cookie); +#endif + /* * inode.c */ @@ -78,10 +85,22 @@ extern int afs_inode_getattr(struct vfsm extern void afs_clear_inode(struct inode *inode); /* + * main.c + */ +#ifdef AFS_CACHING_SUPPORT +extern struct cachefs_netfs afs_cache_netfs; +#endif + +/* * mntpt.c */ extern struct inode_operations afs_mntpt_inode_operations; extern struct file_operations afs_mntpt_file_operations; +#ifdef AFS_AUTOMOUNT_SUPPORT +extern struct afs_timer afs_mntpt_expiry_timer; +extern struct afs_timer_ops afs_mntpt_expiry_timer_ops; +extern unsigned long afs_mntpt_expiry_timeout; +#endif extern int afs_mntpt_check_symlink(afs_vnode_t *vnode); diff -prauN linux-2.6.0-test5/fs/afs/kafsasyncd.c wli-2.6.0-test5-bk12-25/fs/afs/kafsasyncd.c --- linux-2.6.0-test5/fs/afs/kafsasyncd.c 2003-09-08 12:50:32.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/afs/kafsasyncd.c 2003-09-25 19:16:05.000000000 -0700 @@ -153,8 +153,7 @@ static int kafsasyncd(void *arg) spin_lock(&kafsasyncd_async_lock); /* fold the busy and attention queues together */ - list_splice(&kafsasyncd_async_busyq,&kafsasyncd_async_attnq); - list_del_init(&kafsasyncd_async_busyq); + list_splice_init(&kafsasyncd_async_busyq,&kafsasyncd_async_attnq); /* dequeue kafsasyncd from all their wait queues */ list_for_each(_p,&kafsasyncd_async_attnq) { @@ -197,6 +196,7 @@ void afs_kafsasyncd_begin_op(afs_async_o spin_lock(&kafsasyncd_async_lock); init_waitqueue_entry(&op->waiter,kafsasyncd_task); + add_wait_queue(&op->call->waitq,&op->waiter); list_del(&op->link); list_add_tail(&op->link,&kafsasyncd_async_busyq); @@ -238,7 +238,10 @@ void afs_kafsasyncd_terminate_op(afs_asy spin_lock(&kafsasyncd_async_lock); - list_del_init(&op->link); + if (!list_empty(&op->link)) { + list_del_init(&op->link); + remove_wait_queue(&op->call->waitq,&op->waiter); + } spin_unlock(&kafsasyncd_async_lock); diff -prauN linux-2.6.0-test5/fs/afs/kafstimod.c wli-2.6.0-test5-bk12-25/fs/afs/kafstimod.c --- linux-2.6.0-test5/fs/afs/kafstimod.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/afs/kafstimod.c 2003-09-25 19:16:05.000000000 -0700 @@ -82,7 +82,7 @@ static int kafstimod(void *arg) for (;;) { unsigned long jif; - unsigned long timeout; + signed long timeout; /* deal with the server being asked to die */ if (kafstimod_die) { @@ -98,18 +98,18 @@ static int kafstimod(void *arg) spin_lock(&kafstimod_lock); if (list_empty(&kafstimod_list)) { timeout = MAX_SCHEDULE_TIMEOUT; - } else { - unsigned long tmo; - - timer = list_entry(kafstimod_list.next, - afs_timer_t, link); - tmo = timer->timo_jif; + } + else { + timer = list_entry(kafstimod_list.next,afs_timer_t,link); + timeout = timer->timo_jif; jif = jiffies; - if (time_before_eq(tmo,jif)) + if (time_before_eq((unsigned long)timeout,jif)) goto immediate; - timeout = (long)tmo - (long)jiffies; + else { + timeout = (long)timeout - (long)jiffies; + } } spin_unlock(&kafstimod_lock); @@ -170,7 +170,7 @@ void afs_kafstimod_add_timer(afs_timer_t wake_up(&kafstimod_sleepq); _leave(""); -} /* end afs_kafstimod_queue_vlocation() */ +} /* end afs_kafstimod_add_timer() */ /*****************************************************************************/ /* diff -prauN linux-2.6.0-test5/fs/afs/main.c wli-2.6.0-test5-bk12-25/fs/afs/main.c --- linux-2.6.0-test5/fs/afs/main.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/afs/main.c 2003-09-25 19:16:05.000000000 -0700 @@ -17,6 +17,7 @@ #include #include #include +#include "cache.h" #include "cell.h" #include "server.h" #include "fsclient.h" @@ -47,6 +48,18 @@ static struct rxrpc_peer_ops afs_peer_op struct list_head afs_cb_hash_tbl[AFS_CB_HASH_COUNT]; spinlock_t afs_cb_hash_lock = SPIN_LOCK_UNLOCKED; +#ifdef AFS_CACHING_SUPPORT +static struct cachefs_netfs_operations afs_cache_ops = { + .get_page_cookie = afs_cache_get_page_cookie, +}; + +struct cachefs_netfs afs_cache_netfs = { + .name = "afs", + .version = 0, + .ops = &afs_cache_ops, +}; +#endif + /*****************************************************************************/ /* * initialise the AFS client FS module @@ -64,34 +77,41 @@ static int afs_init(void) /* register the /proc stuff */ ret = afs_proc_init(); - if (ret<0) + if (ret < 0) return ret; +#ifdef AFS_CACHING_SUPPORT + /* we want to be able to cache */ + ret = cachefs_register_netfs(&afs_cache_netfs,&afs_cache_cell_index_def); + if (ret < 0) + goto error; +#endif + /* initialise the cell DB */ ret = afs_cell_init(); - if (ret<0) - goto error; + if (ret < 0) + goto error_cache; /* start the timeout daemon */ ret = afs_kafstimod_start(); - if (ret<0) - goto error; + if (ret < 0) + goto error_cache; /* start the async operation daemon */ ret = afs_kafsasyncd_start(); - if (ret<0) + if (ret < 0) goto error_kafstimod; /* create the RxRPC transport */ ret = rxrpc_create_transport(7001,&afs_transport); - if (ret<0) + if (ret < 0) goto error_kafsasyncd; afs_transport->peer_ops = &afs_peer_ops; /* register the filesystems */ ret = afs_fs_init(); - if (ret<0) + if (ret < 0) goto error_transport; return ret; @@ -102,7 +122,11 @@ static int afs_init(void) afs_kafsasyncd_stop(); error_kafstimod: afs_kafstimod_stop(); + error_cache: +#ifdef AFS_CACHING_SUPPORT + cachefs_unregister_netfs(&afs_cache_netfs); error: +#endif afs_cell_purge(); afs_proc_cleanup(); printk(KERN_ERR "kAFS: failed to register: %d\n",ret); @@ -122,6 +146,9 @@ static void __exit afs_exit(void) afs_kafstimod_stop(); afs_kafsasyncd_stop(); afs_cell_purge(); +#ifdef AFS_CACHING_SUPPORT + cachefs_unregister_netfs(&afs_cache_netfs); +#endif afs_proc_cleanup(); } /* end afs_exit() */ @@ -142,7 +169,7 @@ static int afs_adding_peer(struct rxrpc_ /* determine which server the peer resides in (if any) */ ret = afs_server_find_by_peer(peer,&server); - if (ret<0) + if (ret < 0) return ret; /* none that we recognise, so abort */ _debug("Server %p{u=%d}\n",server,atomic_read(&server->usage)); @@ -191,3 +218,48 @@ static void afs_discarding_peer(struct r _leave(""); } /* end afs_discarding_peer() */ + +/*****************************************************************************/ +/* + * clear the dead space between task_struct and kernel stack + * - called by supplying -finstrument-functions to gcc + */ +#if 0 +void __cyg_profile_func_enter (void *this_fn, void *call_site) +__attribute__((no_instrument_function)); + +void __cyg_profile_func_enter (void *this_fn, void *call_site) +{ + asm volatile(" movl %%esp,%%edi \n" + " andl %0,%%edi \n" + " addl %1,%%edi \n" + " movl %%esp,%%ecx \n" + " subl %%edi,%%ecx \n" + " shrl $2,%%ecx \n" + " movl $0xedededed,%%eax \n" + " rep stosl \n" + : + : "i"(~(THREAD_SIZE-1)), "i"(sizeof(struct thread_info)) + : "eax", "ecx", "edi", "memory", "cc" + ); +} + +void __cyg_profile_func_exit(void *this_fn, void *call_site) +__attribute__((no_instrument_function)); + +void __cyg_profile_func_exit(void *this_fn, void *call_site) +{ + asm volatile(" movl %%esp,%%edi \n" + " andl %0,%%edi \n" + " addl %1,%%edi \n" + " movl %%esp,%%ecx \n" + " subl %%edi,%%ecx \n" + " shrl $2,%%ecx \n" + " movl $0xdadadada,%%eax \n" + " rep stosl \n" + : + : "i"(~(THREAD_SIZE-1)), "i"(sizeof(struct thread_info)) + : "eax", "ecx", "edi", "memory", "cc" + ); +} +#endif diff -prauN linux-2.6.0-test5/fs/afs/mntpt.c wli-2.6.0-test5-bk12-25/fs/afs/mntpt.c --- linux-2.6.0-test5/fs/afs/mntpt.c 2003-09-08 12:49:54.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/afs/mntpt.c 2003-09-25 19:16:05.000000000 -0700 @@ -16,24 +16,52 @@ #include #include #include +#include +#include +#include +#include "super.h" +#include "cell.h" #include "volume.h" #include "vnode.h" #include "internal.h" -static struct dentry *afs_mntpt_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *); +static struct dentry *afs_mntpt_lookup(struct inode *dir, + struct dentry *dentry, + struct nameidata *nd); static int afs_mntpt_open(struct inode *inode, struct file *file); +#ifdef AFS_AUTOMOUNT_SUPPORT +static int afs_mntpt_follow_link(struct dentry *dentry, struct nameidata *nd); +#endif + struct file_operations afs_mntpt_file_operations = { .open = afs_mntpt_open, }; struct inode_operations afs_mntpt_inode_operations = { .lookup = afs_mntpt_lookup, +#ifdef AFS_AUTOMOUNT_SUPPORT + .follow_link = afs_mntpt_follow_link, +#endif .readlink = page_readlink, .getattr = afs_inode_getattr, }; +#ifdef AFS_AUTOMOUNT_SUPPORT +static LIST_HEAD(afs_vfsmounts); + +static void afs_mntpt_expiry_timed_out(struct afs_timer *timer); + +struct afs_timer_ops afs_mntpt_expiry_timer_ops = { + .timed_out = afs_mntpt_expiry_timed_out, +}; + +struct afs_timer afs_mntpt_expiry_timer; + +unsigned long afs_mntpt_expiry_timeout = 20; +#endif + /*****************************************************************************/ /* * check a symbolic link to see whether it actually encodes a mountpoint @@ -93,8 +121,17 @@ int afs_mntpt_check_symlink(afs_vnode_t /* * no valid lookup procedure on this sort of dir */ -static struct dentry *afs_mntpt_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd) +static struct dentry *afs_mntpt_lookup(struct inode *dir, + struct dentry *dentry, + struct nameidata *nd) { + kenter("%p,%p{%p{%s},%s}", + dir, + dentry, + dentry->d_parent, + dentry->d_parent ? dentry->d_parent->d_name.name : (const unsigned char*)"", + dentry->d_name.name); + return ERR_PTR(-EREMOTE); } /* end afs_mntpt_lookup() */ @@ -104,5 +141,146 @@ static struct dentry *afs_mntpt_lookup(s */ static int afs_mntpt_open(struct inode *inode, struct file *file) { + kenter("%p,%p{%p{%s},%s}", + inode, file, + file->f_dentry->d_parent, + file->f_dentry->d_parent ? file->f_dentry->d_parent->d_name.name : (const unsigned char*)"", + file->f_dentry->d_name.name); + return -EREMOTE; } /* end afs_mntpt_open() */ + +#ifdef AFS_AUTOMOUNT_SUPPORT +/*****************************************************************************/ +/* + * create a vfsmount to be automounted + */ +static struct vfsmount *afs_mntpt_do_automount(struct dentry *mntpt) +{ + struct afs_super_info *super; + struct vfsmount *mnt; + struct page *page = NULL; + size_t size; + char *buf, *devname = NULL, *options = NULL; + int ret; + + kenter("{%s}", mntpt->d_name.name); + + BUG_ON(!mntpt->d_inode); + + ret = -EINVAL; + size = mntpt->d_inode->i_size; + if (size > PAGE_SIZE - 1) + goto error; + + ret = -ENOMEM; + devname = (char *) get_zeroed_page(GFP_KERNEL); + if (!devname) + goto error; + + options = (char *) get_zeroed_page(GFP_KERNEL); + if (!options) + goto error; + + /* read the contents of the AFS special symlink */ + page = read_cache_page(mntpt->d_inode->i_mapping, + 0, + (filler_t*)mntpt->d_inode->i_mapping->a_ops->readpage, + NULL); + if (IS_ERR(page)) { + ret = PTR_ERR(page); + goto error; + } + + ret = -EIO; + wait_on_page_locked(page); + if (!PageUptodate(page) || PageError(page)) + goto error; + + buf = kmap(page); + memcpy(devname, buf, size); + kunmap(page); + page_cache_release(page); + page = NULL; + + /* work out what options we want */ + super = AFS_FS_S(mntpt->d_sb); + memcpy(options, "cell=", 5); + strcpy(options + 5, super->volume->cell->name); + if (super->volume->type == AFSVL_RWVOL) + strcat(options,",rwpath"); + + /* try and do the mount */ + kdebug("--- attempting mount %s -o %s ---", devname, options); + mnt = do_kern_mount("afs", 0, devname, options); + kdebug("--- mount result %p ---", mnt); + + free_page((unsigned long)devname); + free_page((unsigned long)options); + kleave(" = %p",mnt); + return mnt; + + error: + if (page) + page_cache_release(page); + if (devname) + free_page((unsigned long)devname); + if (options) + free_page((unsigned long)options); + kleave(" = %d",ret); + return ERR_PTR(ret); +} /* end afs_mntpt_do_automount() */ + +/*****************************************************************************/ +/* + * follow a link from a mountpoint directory, thus causing it to be mounted + */ +static int afs_mntpt_follow_link(struct dentry *dentry, struct nameidata *nd) +{ + struct nameidata newnd; + struct vfsmount *newmnt; + int err; + + kenter("%p{%s},{%s:%p{%s}}", + dentry, + dentry->d_name.name, + nd->mnt->mnt_devname, + dentry, + nd->dentry->d_name.name); + + newmnt = afs_mntpt_do_automount(dentry); + if (IS_ERR(newmnt)) + return PTR_ERR(newmnt); + + struct_cpy(&newnd,nd); + newnd.dentry = dentry; + err = do_add_mount(newmnt, &newnd, 0, &afs_vfsmounts); + + if (!err) { + path_release(nd); + mntget(newmnt); + nd->mnt = newmnt; + dget(newmnt->mnt_root); + nd->dentry = newmnt->mnt_root; + } + + kleave(" = %d", err); + return err; +} /* end afs_mntpt_follow_link() */ + +/*****************************************************************************/ +/* + * handle mountpoint expiry timer going off + */ +static void afs_mntpt_expiry_timed_out(struct afs_timer *timer) +{ + kenter(""); + + mark_mounts_for_expiry(&afs_vfsmounts); + + afs_kafstimod_add_timer(&afs_mntpt_expiry_timer, + afs_mntpt_expiry_timeout * HZ); + + kleave(""); +} /* end afs_mntpt_expiry_timed_out() */ +#endif diff -prauN linux-2.6.0-test5/fs/afs/mount.h wli-2.6.0-test5-bk12-25/fs/afs/mount.h --- linux-2.6.0-test5/fs/afs/mount.h 2003-09-08 12:49:50.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/afs/mount.h 2003-09-25 19:16:05.000000000 -0700 @@ -17,7 +17,7 @@ struct afs_mountdata { const char *cell; /* name of cell containing volume */ const char *cache; /* name of cache block device */ size_t nservers; /* number of server addresses listed */ - u_int32_t servers[10]; /* IP addresses of servers in this cell */ + uint32_t servers[10]; /* IP addresses of servers in this cell */ }; #endif /* _LINUX_AFS_MOUNT_H */ diff -prauN linux-2.6.0-test5/fs/afs/server.c wli-2.6.0-test5-bk12-25/fs/afs/server.c --- linux-2.6.0-test5/fs/afs/server.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/afs/server.c 2003-09-25 19:16:05.000000000 -0700 @@ -148,6 +148,9 @@ void afs_put_server(afs_server_t *server { afs_cell_t *cell; + if (!server) + return; + _enter("%p",server); cell = server->cell; diff -prauN linux-2.6.0-test5/fs/afs/super.c wli-2.6.0-test5-bk12-25/fs/afs/super.c --- linux-2.6.0-test5/fs/afs/super.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/afs/super.c 2003-09-25 19:16:05.000000000 -0700 @@ -29,15 +29,22 @@ #define AFS_FS_MAGIC 0x6B414653 /* 'kAFS' */ +struct afs_mount_params { + int rwpath; + struct afs_cell *default_cell; + struct afs_volume *volume; +}; + static inline char *strdup(const char *s) { - char *ns = kmalloc(strlen(s)+1,GFP_KERNEL); + char *ns = kmalloc(strlen(s) + 1, GFP_KERNEL); if (ns) - strcpy(ns,s); + strcpy(ns, s); return ns; } -static void afs_i_init_once(void *foo, kmem_cache_t *cachep, unsigned long flags); +static void afs_i_init_once(void *foo, kmem_cache_t *cachep, + unsigned long flags); static struct super_block *afs_get_sb(struct file_system_type *fs_type, int flags, const char *dev_name, @@ -66,6 +73,7 @@ static struct super_operations afs_super }; static kmem_cache_t *afs_inode_cachep; +static atomic_t afs_count_active_inodes; /*****************************************************************************/ /* @@ -75,16 +83,22 @@ int __init afs_fs_init(void) { int ret; - kenter(""); + _enter(""); + +#ifdef AFS_AUTOMOUNT_SUPPORT + afs_timer_init(&afs_mntpt_expiry_timer, &afs_mntpt_expiry_timer_ops); +#endif /* create ourselves an inode cache */ + atomic_set(&afs_count_active_inodes, 0); + ret = -ENOMEM; afs_inode_cachep = kmem_cache_create("afs_inode_cache", - sizeof(afs_vnode_t), - 0, - SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT, - afs_i_init_once, - NULL); + sizeof(afs_vnode_t), + 0, + SLAB_HWCACHE_ALIGN, + afs_i_init_once, + NULL); if (!afs_inode_cachep) { printk(KERN_NOTICE "kAFS: Failed to allocate inode cache\n"); return ret; @@ -92,9 +106,9 @@ int __init afs_fs_init(void) /* now export our filesystem to lesser mortals */ ret = register_filesystem(&afs_fs_type); - if (ret<0) { + if (ret < 0) { kmem_cache_destroy(afs_inode_cachep); - kleave(" = %d",ret); + kleave(" = %d", ret); return ret; } @@ -108,11 +122,16 @@ int __init afs_fs_init(void) */ void __exit afs_fs_exit(void) { - /* destroy our private inode cache */ - kmem_cache_destroy(afs_inode_cachep); - unregister_filesystem(&afs_fs_type); + if (atomic_read(&afs_count_active_inodes) != 0) { + printk("kAFS: %d active inode objects still present\n", + atomic_read(&afs_count_active_inodes)); + BUG(); + } + + kmem_cache_destroy(afs_inode_cachep); + } /* end afs_fs_exit() */ /*****************************************************************************/ @@ -122,7 +141,7 @@ void __exit afs_fs_exit(void) static int want_arg(char **_value, const char *option) { if (!_value || !*_value || !**_value) { - printk(KERN_NOTICE "kAFS: %s: argument missing\n",option); + printk(KERN_NOTICE "kAFS: %s: argument missing\n", option); return 0; } return 1; @@ -130,27 +149,13 @@ static int want_arg(char **_value, const /*****************************************************************************/ /* - * check that there is a value - */ -#if 0 -static int want_value(char **_value, const char *option) -{ - if (!_value || !*_value || !**_value) { - printk(KERN_NOTICE "kAFS: %s: argument incomplete\n",option); - return 0; - } - return 1; -} /* end want_value() */ -#endif - -/*****************************************************************************/ -/* * check that there's no subsequent value */ static int want_no_value(char *const *_value, const char *option) { if (*_value && **_value) { - printk(KERN_NOTICE "kAFS: %s: Invalid argument: %s\n",option,*_value); + printk(KERN_NOTICE "kAFS: %s: Invalid argument: %s\n", + option, *_value); return 0; } return 1; @@ -158,150 +163,55 @@ static int want_no_value(char *const *_v /*****************************************************************************/ /* - * extract a number from an option string value - */ -#if 0 -static int want_number(char **_value, const char *option, unsigned long *number, - unsigned long limit) -{ - char *value = *_value; - - if (!want_value(_value,option)) - return 0; - - *number = simple_strtoul(value,_value,0); - - if (value==*_value) { - printk(KERN_NOTICE "kAFS: %s: Invalid number: %s\n",option,value); - return 0; - } - - if (*number>limit) { - printk(KERN_NOTICE "kAFS: %s: numeric value %lu > %lu\n",option,*number,limit); - return 0; - } - - return 1; -} /* end want_number() */ -#endif - -/*****************************************************************************/ -/* - * extract a separator from an option string value - */ -#if 0 -static int want_sep(char **_value, const char *option, char sep) -{ - if (!want_value(_value,option)) - return 0; - - if (*(*_value)++ != sep) { - printk(KERN_NOTICE "kAFS: %s: '%c' expected: %s\n",option,sep,*_value-1); - return 0; - } - - return 1; -} /* end want_number() */ -#endif - -/*****************************************************************************/ -/* - * extract an IP address from an option string value - */ -#if 0 -static int want_ipaddr(char **_value, const char *option, struct in_addr *addr) -{ - unsigned long number[4]; - - if (!want_value(_value,option)) - return 0; - - if (!want_number(_value,option,&number[0],255) || - !want_sep(_value,option,'.') || - !want_number(_value,option,&number[1],255) || - !want_sep(_value,option,'.') || - !want_number(_value,option,&number[2],255) || - !want_sep(_value,option,'.') || - !want_number(_value,option,&number[3],255)) - return 0; - - ((u8*)addr)[0] = number[0]; - ((u8*)addr)[1] = number[1]; - ((u8*)addr)[2] = number[2]; - ((u8*)addr)[3] = number[3]; - - return 1; -} /* end want_numeric() */ -#endif - -/*****************************************************************************/ -/* * parse the mount options * - this function has been shamelessly adapted from the ext3 fs which shamelessly adapted it from * the msdos fs */ -static int afs_super_parse_options(struct afs_super_info *as, char *options, const char ** devname) +static int afs_super_parse_options(struct afs_mount_params *params, + char *options, + const char **devname) { char *key, *value; int ret; - _enter("%s",options); + _enter("%s", options); + + options[PAGE_SIZE - 1] = 0; ret = 0; - while ((key = strsep(&options,","))) + while ((key = strsep(&options, ","))) { - value = strchr(key,'='); + value = strchr(key, '='); if (value) *value++ = 0; - printk("kAFS: KEY: %s, VAL:%s\n",key,value?:"-"); + printk("kAFS: KEY: %s, VAL:%s\n", key, value ?: "-"); - if (strcmp(key,"rwpath")==0) { - if (!want_no_value(&value,"rwpath")) return -EINVAL; - as->rwparent = 1; + if (strcmp(key, "rwpath") == 0) { + if (!want_no_value(&value, "rwpath")) + return -EINVAL; + params->rwpath = 1; continue; } - else if (strcmp(key,"vol")==0) { - if (!want_arg(&value,"vol")) return -EINVAL; + else if (strcmp(key, "vol") == 0) { + if (!want_arg(&value, "vol")) + return -EINVAL; *devname = value; continue; } - -#if 0 - if (strcmp(key,"servers")==0) { - if (!want_arg(&value,"servers")) return -EINVAL; - - _debug("servers=%s",value); - - for (;;) { - struct in_addr addr; - - if (!want_ipaddr(&value,"servers",&addr)) - return -EINVAL; - - ret = afs_create_server(as->cell,&addr,&as->server); - if (ret<0) { - printk("kAFS: unable to create server: %d\n",ret); - return ret; - } - - if (!*value) - break; - - if (as->server) { - printk(KERN_NOTICE - "kAFS: only one server can be specified\n"); - return -EINVAL; - } - - if (!want_sep(&value,"servers",':')) - return -EINVAL; - } + else if (strcmp(key, "cell") == 0) { + if (!want_arg(&value, "cell")) + return -EINVAL; + afs_put_cell(params->default_cell); + ret = afs_cell_lookup(value, + strlen(value), + ¶ms->default_cell); + if (ret < 0) + return -EINVAL; continue; } -#endif - printk("kAFS: Unknown mount option: '%s'\n",key); + printk("kAFS: Unknown mount option: '%s'\n", key); ret = -EINVAL; goto error; } @@ -309,67 +219,48 @@ static int afs_super_parse_options(struc ret = 0; error: - _leave(" = %d",ret); - + _leave(" = %d", ret); return ret; } /* end afs_super_parse_options() */ -struct fill_super_options { - const char *dev_name; - void *options; -}; +/*****************************************************************************/ +/* + * check a superblock to see if it's the one we're looking for + */ +static int afs_test_super(struct super_block *sb, void *data) +{ + struct afs_mount_params *params = data; + struct afs_super_info *as = sb->s_fs_info; + + return as->volume == params->volume; +} /* end afs_test_super() */ /*****************************************************************************/ /* * fill in the superblock */ -static int afs_fill_super(struct super_block *sb, void *_data, int silent) +static int afs_fill_super(struct super_block *sb, void *data, int silent) { + struct afs_mount_params *params = data; struct afs_super_info *as = NULL; struct dentry *root = NULL; struct inode *inode = NULL; afs_fid_t fid; - struct fill_super_options *data = _data; - const char *devname; - char *options; int ret; - _enter(""); - - if (!data) { - _leave(" = -EINVAL"); - return -EINVAL; - } - devname = data->dev_name; - options = data->options; - if (options) - options[PAGE_SIZE-1] = 0; + kenter(""); /* allocate a superblock info record */ - as = kmalloc(sizeof(struct afs_super_info),GFP_KERNEL); + as = kmalloc(sizeof(struct afs_super_info), GFP_KERNEL); if (!as) { _leave(" = -ENOMEM"); return -ENOMEM; } - memset(as,0,sizeof(struct afs_super_info)); + memset(as, 0, sizeof(struct afs_super_info)); - /* parse the options */ - if (options) { - ret = afs_super_parse_options(as,options,&devname); - if (ret<0) - goto error; - if (!devname) { - printk("kAFS: no volume name specified\n"); - ret = -EINVAL; - goto error; - } - } - - /* parse the device name */ - ret = afs_volume_lookup(devname,as->rwparent,&as->volume); - if (ret<0) - goto error; + afs_get_volume(params->volume); + as->volume = params->volume; /* fill in the superblock */ sb->s_blocksize = PAGE_CACHE_SIZE; @@ -382,8 +273,8 @@ static int afs_fill_super(struct super_b fid.vid = as->volume->vid; fid.vnode = 1; fid.unique = 1; - ret = afs_iget(sb,&fid,&inode); - if (ret<0) + ret = afs_iget(sb, &fid, &inode); + if (ret < 0) goto error; ret = -ENOMEM; @@ -393,19 +284,18 @@ static int afs_fill_super(struct super_b sb->s_root = root; - _leave(" = 0"); + kleave(" = 0"); return 0; error: - if (root) dput(root); - if (inode) iput(inode); - if (as) { - if (as->volume) afs_put_volume(as->volume); - kfree(as); - } + dput(root); + iput(inode); + afs_put_volume(as->volume); + kfree(as); + sb->s_fs_info = NULL; - _leave(" = %d",ret); + kleave(" = %d", ret); return ret; } /* end afs_fill_super() */ @@ -414,32 +304,72 @@ static int afs_fill_super(struct super_b * get an AFS superblock * - TODO: don't use get_sb_nodev(), but rather call sget() directly */ -static struct super_block * -afs_get_sb(struct file_system_type *fs_type, int flags, - const char *dev_name, void *options) +static struct super_block *afs_get_sb(struct file_system_type *fs_type, + int flags, + const char *dev_name, + void *options) { + struct afs_mount_params params; struct super_block *sb; - struct fill_super_options data = { dev_name, options }; int ret; - _enter(",,%s,%p",dev_name,options); + _enter(",,%s,%p", dev_name, options); + + memset(¶ms, 0, sizeof(params)); /* start the cache manager */ ret = afscm_start(); - if (ret<0) { - _leave(" = %d",ret); + if (ret < 0) { + _leave(" = %d", ret); return ERR_PTR(ret); } + /* parse the options */ + if (options) { + ret = afs_super_parse_options(¶ms, options, &dev_name); + if (ret < 0) + goto error; + if (!dev_name) { + printk("kAFS: no volume name specified\n"); + ret = -EINVAL; + goto error; + } + } + + /* parse the device name */ + ret = afs_volume_lookup(dev_name, + params.default_cell, + params.rwpath, + ¶ms.volume); + if (ret < 0) + goto error; + /* allocate a deviceless superblock */ - sb = get_sb_nodev(fs_type, flags, &data, afs_fill_super); - if (IS_ERR(sb)) { - afscm_stop(); - return sb; + sb = sget(fs_type, afs_test_super, set_anon_super, ¶ms); + if (IS_ERR(sb)) + goto error; + + sb->s_flags = flags; + + ret = afs_fill_super(sb, ¶ms, flags & MS_VERBOSE ? 1 : 0); + if (ret < 0) { + up_write(&sb->s_umount); + deactivate_super(sb); + goto error; } + sb->s_flags |= MS_ACTIVE; - _leave(""); + afs_put_volume(params.volume); + afs_put_cell(params.default_cell); + _leave(" = %p", sb); return sb; + + error: + afs_put_volume(params.volume); + afs_put_cell(params.default_cell); + afscm_stop(); + _leave(" = %d", ret); + return ERR_PTR(ret); } /* end afs_get_sb() */ /*****************************************************************************/ @@ -452,11 +382,7 @@ static void afs_put_super(struct super_b _enter(""); - if (as) { - if (as->volume) afs_put_volume(as->volume); - } - - /* stop the cache manager */ + afs_put_volume(as->volume); afscm_stop(); _leave(""); @@ -466,18 +392,21 @@ static void afs_put_super(struct super_b /* * initialise an inode cache slab element prior to any use */ -static void afs_i_init_once(void *_vnode, kmem_cache_t *cachep, unsigned long flags) +static void afs_i_init_once(void *_vnode, kmem_cache_t *cachep, + unsigned long flags) { afs_vnode_t *vnode = (afs_vnode_t *) _vnode; - if ((flags & (SLAB_CTOR_VERIFY|SLAB_CTOR_CONSTRUCTOR)) == SLAB_CTOR_CONSTRUCTOR) { - memset(vnode,0,sizeof(*vnode)); + if ((flags & (SLAB_CTOR_VERIFY|SLAB_CTOR_CONSTRUCTOR)) == + SLAB_CTOR_CONSTRUCTOR) { + memset(vnode, 0, sizeof(*vnode)); inode_init_once(&vnode->vfs_inode); init_waitqueue_head(&vnode->update_waitq); spin_lock_init(&vnode->lock); INIT_LIST_HEAD(&vnode->cb_link); INIT_LIST_HEAD(&vnode->cb_hash_link); - afs_timer_init(&vnode->cb_timeout,&afs_vnode_cb_timed_out_ops); + afs_timer_init(&vnode->cb_timeout, + &afs_vnode_cb_timed_out_ops); } } /* end afs_i_init_once() */ @@ -490,16 +419,19 @@ static struct inode *afs_alloc_inode(str { afs_vnode_t *vnode; - vnode = (afs_vnode_t *) kmem_cache_alloc(afs_inode_cachep,SLAB_KERNEL); + vnode = (afs_vnode_t *) + kmem_cache_alloc(afs_inode_cachep, SLAB_KERNEL); if (!vnode) return NULL; - memset(&vnode->fid,0,sizeof(vnode->fid)); - memset(&vnode->status,0,sizeof(vnode->status)); + atomic_inc(&afs_count_active_inodes); + + memset(&vnode->fid, 0, sizeof(vnode->fid)); + memset(&vnode->status, 0, sizeof(vnode->status)); - vnode->volume = NULL; - vnode->update_cnt = 0; - vnode->flags = 0; + vnode->volume = NULL; + vnode->update_cnt = 0; + vnode->flags = 0; return &vnode->vfs_inode; } /* end afs_alloc_inode() */ @@ -510,6 +442,10 @@ static struct inode *afs_alloc_inode(str */ static void afs_destroy_inode(struct inode *inode) { - _enter("{%lu}",inode->i_ino); + _enter("{%lu}", inode->i_ino); + kmem_cache_free(afs_inode_cachep, AFS_FS_I(inode)); + + atomic_dec(&afs_count_active_inodes); + } /* end afs_destroy_inode() */ diff -prauN linux-2.6.0-test5/fs/afs/super.h wli-2.6.0-test5-bk12-25/fs/afs/super.h --- linux-2.6.0-test5/fs/afs/super.h 2003-09-08 12:51:00.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/afs/super.h 2003-09-25 19:16:05.000000000 -0700 @@ -29,7 +29,7 @@ */ struct afs_super_info { - afs_volume_t *volume; /* volume record */ + struct afs_volume *volume; /* volume record */ char rwparent; /* T if parent is R/W AFS volume */ }; diff -prauN linux-2.6.0-test5/fs/afs/types.h wli-2.6.0-test5-bk12-25/fs/afs/types.h --- linux-2.6.0-test5/fs/afs/types.h 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/afs/types.h 2003-09-25 19:16:05.000000000 -0700 @@ -33,26 +33,13 @@ typedef struct afs_volsync afs_volsync_ typedef struct afs_volume afs_volume_t; typedef struct afs_volume_info afs_volume_info_t; -typedef struct afsc_cache afsc_cache_t; -typedef struct afsc_cache_cell afsc_cache_cell_t; -typedef struct afsc_cache_vldb afsc_cache_vldb_t; -typedef struct afsc_cell_record afsc_cell_record_t; -typedef struct afsc_inode afsc_inode_t; -typedef struct afsc_io afsc_io_t; -typedef struct afsc_io_subop afsc_io_subop_t; -typedef struct afsc_io_queue afsc_io_queue_t; -typedef struct afsc_super_block afsc_super_block_t; -typedef struct afsc_vldb_record afsc_vldb_record_t; -typedef struct afsc_vnode_catalogue afsc_vnode_catalogue_t; -typedef struct afsc_vnode_meta afsc_vnode_meta_t; - typedef struct afsvl_dbentry afsvl_dbentry_t; typedef enum { AFSVL_RWVOL, /* read/write volume */ AFSVL_ROVOL, /* read-only volume */ AFSVL_BACKVOL, /* backup volume */ -} afs_voltype_t; +} __attribute__((packed)) afs_voltype_t; extern const char *afs_voltypes[]; diff -prauN linux-2.6.0-test5/fs/afs/vlclient.c wli-2.6.0-test5-bk12-25/fs/afs/vlclient.c --- linux-2.6.0-test5/fs/afs/vlclient.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/afs/vlclient.c 2003-09-25 19:16:05.000000000 -0700 @@ -176,8 +176,8 @@ int afs_rxvl_probe(afs_server_t *server, /* * look up a volume location database entry by name */ -int afs_rxvl_get_entry_by_name(afs_server_t *server, const char *volname, - afsc_vldb_record_t *entry) +int afs_rxvl_get_entry_by_name(afs_server_t *server, const char *volname, unsigned volnamesz, + struct afs_cache_vlocation *entry) { DECLARE_WAITQUEUE(myself,current); @@ -189,29 +189,29 @@ int afs_rxvl_get_entry_by_name(afs_serve int ret, loop; u32 *bp, param[2], zero; - _enter(",%s,",volname); + _enter(",%*.*s,%u,", volnamesz, volnamesz, volname, volnamesz); - memset(entry,0,sizeof(*entry)); + memset(entry, 0, sizeof(*entry)); /* get hold of the vlserver connection */ - ret = afs_server_get_vlconn(server,&conn); + ret = afs_server_get_vlconn(server, &conn); if (ret<0) goto out; /* create a call through that connection */ - ret = rxrpc_create_call(conn,NULL,NULL,afs_rxvl_aemap,&call); - if (ret<0) { - printk("kAFS: Unable to create call: %d\n",ret); + ret = rxrpc_create_call(conn, NULL, NULL, afs_rxvl_aemap, &call); + if (ret < 0) { + printk("kAFS: Unable to create call: %d\n", ret); goto out_put_conn; } call->app_opcode = VLGETENTRYBYNAME; /* we want to get event notifications from the call */ - add_wait_queue(&call->waitq,&myself); + add_wait_queue(&call->waitq, &myself); /* marshall the parameters */ - piov[1].iov_len = strlen(volname); - piov[1].iov_base = (char*)volname; + piov[1].iov_len = volnamesz; + piov[1].iov_base = (char*) volname; zero = 0; piov[2].iov_len = (4 - (piov[1].iov_len & 3)) & 3; @@ -224,16 +224,16 @@ int afs_rxvl_get_entry_by_name(afs_serve piov[0].iov_base = param; /* send the parameters to the server */ - ret = rxrpc_call_write_data(call,3,piov,RXRPC_LAST_PACKET,GFP_NOFS,0,&sent); + ret = rxrpc_call_write_data(call, 3, piov, RXRPC_LAST_PACKET, GFP_NOFS, 0, &sent); if (ret<0) goto abort; /* wait for the reply to completely arrive */ - bp = rxrpc_call_alloc_scratch(call,384); + bp = rxrpc_call_alloc_scratch(call, 384); - ret = rxrpc_call_read_data(call,bp,384,RXRPC_CALL_READ_BLOCK|RXRPC_CALL_READ_ALL); - if (ret<0) { - if (ret==-ECONNABORTED) { + ret = rxrpc_call_read_data(call, bp, 384, RXRPC_CALL_READ_BLOCK|RXRPC_CALL_READ_ALL); + if (ret < 0) { + if (ret == -ECONNABORTED) { ret = call->app_errno; goto out_unwait; } @@ -255,9 +255,9 @@ int afs_rxvl_get_entry_by_name(afs_serve for (loop=0; loop<8; loop++) { tmp = ntohl(*bp++); - if (tmp & AFS_VLSF_RWVOL ) entry->srvtmask[loop] |= AFSC_VOL_STM_RW; - if (tmp & AFS_VLSF_ROVOL ) entry->srvtmask[loop] |= AFSC_VOL_STM_RO; - if (tmp & AFS_VLSF_BACKVOL) entry->srvtmask[loop] |= AFSC_VOL_STM_BAK; + if (tmp & AFS_VLSF_RWVOL ) entry->srvtmask[loop] |= AFS_VOL_VTM_RW; + if (tmp & AFS_VLSF_ROVOL ) entry->srvtmask[loop] |= AFS_VOL_VTM_RO; + if (tmp & AFS_VLSF_BACKVOL) entry->srvtmask[loop] |= AFS_VOL_VTM_BAK; } entry->vid[0] = ntohl(*bp++); @@ -267,26 +267,26 @@ int afs_rxvl_get_entry_by_name(afs_serve bp++; /* clone ID */ tmp = ntohl(*bp++); /* flags */ - if (tmp & AFS_VLF_RWEXISTS ) entry->vidmask |= AFSC_VOL_STM_RW; - if (tmp & AFS_VLF_ROEXISTS ) entry->vidmask |= AFSC_VOL_STM_RO; - if (tmp & AFS_VLF_BACKEXISTS) entry->vidmask |= AFSC_VOL_STM_BAK; + if (tmp & AFS_VLF_RWEXISTS ) entry->vidmask |= AFS_VOL_VTM_RW; + if (tmp & AFS_VLF_ROEXISTS ) entry->vidmask |= AFS_VOL_VTM_RO; + if (tmp & AFS_VLF_BACKEXISTS) entry->vidmask |= AFS_VOL_VTM_BAK; ret = -ENOMEDIUM; if (!entry->vidmask) goto abort; /* success */ - entry->ctime = get_seconds(); + entry->rtime = get_seconds(); ret = 0; out_unwait: set_current_state(TASK_RUNNING); - remove_wait_queue(&call->waitq,&myself); + remove_wait_queue(&call->waitq, &myself); rxrpc_put_call(call); out_put_conn: rxrpc_put_connection(conn); out: - _leave(" = %d",ret); + _leave(" = %d", ret); return ret; abort: @@ -303,7 +303,7 @@ int afs_rxvl_get_entry_by_name(afs_serve int afs_rxvl_get_entry_by_id(afs_server_t *server, afs_volid_t volid, afs_voltype_t voltype, - afsc_vldb_record_t *entry) + struct afs_cache_vlocation *entry) { DECLARE_WAITQUEUE(myself,current); @@ -375,9 +375,9 @@ int afs_rxvl_get_entry_by_id(afs_server_ for (loop=0; loop<8; loop++) { tmp = ntohl(*bp++); - if (tmp & AFS_VLSF_RWVOL ) entry->srvtmask[loop] |= AFSC_VOL_STM_RW; - if (tmp & AFS_VLSF_ROVOL ) entry->srvtmask[loop] |= AFSC_VOL_STM_RO; - if (tmp & AFS_VLSF_BACKVOL) entry->srvtmask[loop] |= AFSC_VOL_STM_BAK; + if (tmp & AFS_VLSF_RWVOL ) entry->srvtmask[loop] |= AFS_VOL_VTM_RW; + if (tmp & AFS_VLSF_ROVOL ) entry->srvtmask[loop] |= AFS_VOL_VTM_RO; + if (tmp & AFS_VLSF_BACKVOL) entry->srvtmask[loop] |= AFS_VOL_VTM_BAK; } entry->vid[0] = ntohl(*bp++); @@ -387,9 +387,9 @@ int afs_rxvl_get_entry_by_id(afs_server_ bp++; /* clone ID */ tmp = ntohl(*bp++); /* flags */ - if (tmp & AFS_VLF_RWEXISTS ) entry->vidmask |= AFSC_VOL_STM_RW; - if (tmp & AFS_VLF_ROEXISTS ) entry->vidmask |= AFSC_VOL_STM_RO; - if (tmp & AFS_VLF_BACKEXISTS) entry->vidmask |= AFSC_VOL_STM_BAK; + if (tmp & AFS_VLF_RWEXISTS ) entry->vidmask |= AFS_VOL_VTM_RW; + if (tmp & AFS_VLF_ROEXISTS ) entry->vidmask |= AFS_VOL_VTM_RO; + if (tmp & AFS_VLF_BACKEXISTS) entry->vidmask |= AFS_VOL_VTM_BAK; ret = -ENOMEDIUM; if (!entry->vidmask) @@ -401,13 +401,13 @@ int afs_rxvl_get_entry_by_id(afs_server_ entry->servers[1].s_addr = htonl(0xac101243); entry->servers[2].s_addr = htonl(0xac10125b /*0xac10125b*/); - entry->srvtmask[0] = AFSC_VOL_STM_RO; - entry->srvtmask[1] = AFSC_VOL_STM_RO; - entry->srvtmask[2] = AFSC_VOL_STM_RO | AFSC_VOL_STM_RW; + entry->srvtmask[0] = AFS_VOL_VTM_RO; + entry->srvtmask[1] = AFS_VOL_VTM_RO; + entry->srvtmask[2] = AFS_VOL_VTM_RO | AFS_VOL_VTM_RW; #endif /* success */ - entry->ctime = get_seconds(); + entry->rtime = get_seconds(); ret = 0; out_unwait: @@ -520,7 +520,7 @@ int afs_rxvl_get_entry_by_id_async(afs_a * attend to the asynchronous get VLDB entry by ID */ int afs_rxvl_get_entry_by_id_async2(afs_async_op_t *op, - afsc_vldb_record_t *entry) + struct afs_cache_vlocation *entry) { unsigned *bp, tmp; int loop, ret; @@ -550,9 +550,9 @@ int afs_rxvl_get_entry_by_id_async2(afs_ for (loop=0; loop<8; loop++) { tmp = ntohl(*bp++); - if (tmp & AFS_VLSF_RWVOL ) entry->srvtmask[loop] |= AFSC_VOL_STM_RW; - if (tmp & AFS_VLSF_ROVOL ) entry->srvtmask[loop] |= AFSC_VOL_STM_RO; - if (tmp & AFS_VLSF_BACKVOL) entry->srvtmask[loop] |= AFSC_VOL_STM_BAK; + if (tmp & AFS_VLSF_RWVOL ) entry->srvtmask[loop] |= AFS_VOL_VTM_RW; + if (tmp & AFS_VLSF_ROVOL ) entry->srvtmask[loop] |= AFS_VOL_VTM_RO; + if (tmp & AFS_VLSF_BACKVOL) entry->srvtmask[loop] |= AFS_VOL_VTM_BAK; } entry->vid[0] = ntohl(*bp++); @@ -562,9 +562,9 @@ int afs_rxvl_get_entry_by_id_async2(afs_ bp++; /* clone ID */ tmp = ntohl(*bp++); /* flags */ - if (tmp & AFS_VLF_RWEXISTS ) entry->vidmask |= AFSC_VOL_STM_RW; - if (tmp & AFS_VLF_ROEXISTS ) entry->vidmask |= AFSC_VOL_STM_RO; - if (tmp & AFS_VLF_BACKEXISTS) entry->vidmask |= AFSC_VOL_STM_BAK; + if (tmp & AFS_VLF_RWEXISTS ) entry->vidmask |= AFS_VOL_VTM_RW; + if (tmp & AFS_VLF_ROEXISTS ) entry->vidmask |= AFS_VOL_VTM_RO; + if (tmp & AFS_VLF_BACKEXISTS) entry->vidmask |= AFS_VOL_VTM_BAK; ret = -ENOMEDIUM; if (!entry->vidmask) { @@ -578,13 +578,13 @@ int afs_rxvl_get_entry_by_id_async2(afs_ entry->servers[1].s_addr = htonl(0xac101243); entry->servers[2].s_addr = htonl(0xac10125b /*0xac10125b*/); - entry->srvtmask[0] = AFSC_VOL_STM_RO; - entry->srvtmask[1] = AFSC_VOL_STM_RO; - entry->srvtmask[2] = AFSC_VOL_STM_RO | AFSC_VOL_STM_RW; + entry->srvtmask[0] = AFS_VOL_VTM_RO; + entry->srvtmask[1] = AFS_VOL_VTM_RO; + entry->srvtmask[2] = AFS_VOL_VTM_RO | AFS_VOL_VTM_RW; #endif /* success */ - entry->ctime = get_seconds(); + entry->rtime = get_seconds(); ret = 0; goto done; } @@ -626,7 +626,8 @@ static void afs_rxvl_get_entry_by_id_att case RXRPC_CSTATE_CLNT_GOT_REPLY: if (call->app_read_count==0) break; - printk("kAFS: Reply bigger than expected {cst=%u asyn=%d mark=%Zu rdy=%Zu pr=%u%s}", + printk("kAFS: Reply bigger than expected" + " {cst=%u asyn=%d mark=%Zu rdy=%Zu pr=%u%s}", call->app_call_state, call->app_async_read, call->app_mark, diff -prauN linux-2.6.0-test5/fs/afs/vlclient.h wli-2.6.0-test5-bk12-25/fs/afs/vlclient.h --- linux-2.6.0-test5/fs/afs/vlclient.h 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/afs/vlclient.h 2003-09-25 19:16:05.000000000 -0700 @@ -46,7 +46,7 @@ enum AFSVL_Errors { }; /* maps to "struct vldbentry" in vvl-spec.pdf */ -struct afsvl_dbentry { +struct afs_vldbentry { char name[65]; /* name of volume (including NUL char) */ afs_voltype_t type; /* volume type */ unsigned num_servers; /* num servers that hold instances of this vol */ @@ -77,19 +77,20 @@ extern int afs_rxvl_probe(afs_server_t * /* look up a volume location database entry by name */ extern int afs_rxvl_get_entry_by_name(afs_server_t *server, const char *volname, - afsc_vldb_record_t *entry); + unsigned volnamesz, + struct afs_cache_vlocation *entry); /* look up a volume location database entry by ID */ extern int afs_rxvl_get_entry_by_id(afs_server_t *server, afs_volid_t volid, afs_voltype_t voltype, - afsc_vldb_record_t *entry); + struct afs_cache_vlocation *entry); extern int afs_rxvl_get_entry_by_id_async(afs_async_op_t *op, afs_volid_t volid, afs_voltype_t voltype); extern int afs_rxvl_get_entry_by_id_async2(afs_async_op_t *op, - afsc_vldb_record_t *entry); + struct afs_cache_vlocation *entry); #endif /* _LINUX_AFS_VLCLIENT_H */ diff -prauN linux-2.6.0-test5/fs/afs/vlocation.c wli-2.6.0-test5-bk12-25/fs/afs/vlocation.c --- linux-2.6.0-test5/fs/afs/vlocation.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/afs/vlocation.c 2003-09-25 19:16:05.000000000 -0700 @@ -56,6 +56,19 @@ static LIST_HEAD(afs_vlocation_update_pe static afs_vlocation_t *afs_vlocation_update; /* VL currently being updated */ static spinlock_t afs_vlocation_update_lock = SPIN_LOCK_UNLOCKED; /* lock guarding update queue */ +#ifdef AFS_CACHING_SUPPORT +static cachefs_match_val_t afs_vlocation_cache_match(void *target, const void *entry); +static void afs_vlocation_cache_update(void *source, void *entry); + +struct cachefs_index_def afs_vlocation_cache_index_def = { + .name = "vldb", + .data_size = sizeof(struct afs_cache_vlocation), + .keys[0] = { CACHEFS_INDEX_KEYS_ASCIIZ, 64 }, + .match = afs_vlocation_cache_match, + .update = afs_vlocation_cache_update, +}; +#endif + /*****************************************************************************/ /* * iterate through the VL servers in a cell until one of them admits knowing about the volume in @@ -64,21 +77,23 @@ static spinlock_t afs_vlocation_update_l */ static int afs_vlocation_access_vl_by_name(afs_vlocation_t *vlocation, const char *name, - afsc_vldb_record_t *vldb) + unsigned namesz, + struct afs_cache_vlocation *vldb) { afs_server_t *server = NULL; afs_cell_t *cell = vlocation->cell; int count, ret; - _enter("%s,%s,",cell->name,name); + _enter("%s,%*.*s,%u", cell->name, namesz, namesz, name, namesz); ret = -ENOMEDIUM; for (count=cell->vl_naddrs; count>0; count--) { _debug("CellServ[%hu]: %08x", - cell->vl_curr_svix,cell->vl_addrs[cell->vl_curr_svix].s_addr); + cell->vl_curr_svix, + cell->vl_addrs[cell->vl_curr_svix].s_addr); /* try and create a server */ - ret = afs_server_lookup(cell,&cell->vl_addrs[cell->vl_curr_svix],&server); + ret = afs_server_lookup(cell, &cell->vl_addrs[cell->vl_curr_svix], &server); switch (ret) { case 0: break; @@ -90,7 +105,7 @@ static int afs_vlocation_access_vl_by_na } /* attempt to access the VL server */ - ret = afs_rxvl_get_entry_by_name(server,name,vldb); + ret = afs_rxvl_get_entry_by_name(server, name, namesz, vldb); switch (ret) { case 0: afs_put_server(server); @@ -107,7 +122,7 @@ static int afs_vlocation_access_vl_by_na } up_write(&server->sem); afs_put_server(server); - if (ret==-ENOMEM || ret==-ENONET) + if (ret == -ENOMEM || ret == -ENONET) goto out; goto rotate; case -ENOMEDIUM: @@ -140,21 +155,22 @@ static int afs_vlocation_access_vl_by_na static int afs_vlocation_access_vl_by_id(afs_vlocation_t *vlocation, afs_volid_t volid, afs_voltype_t voltype, - afsc_vldb_record_t *vldb) + struct afs_cache_vlocation *vldb) { afs_server_t *server = NULL; afs_cell_t *cell = vlocation->cell; int count, ret; - _enter("%s,%x,%d,",cell->name,volid,voltype); + _enter("%s,%x,%d,", cell->name, volid, voltype); ret = -ENOMEDIUM; for (count=cell->vl_naddrs; count>0; count--) { _debug("CellServ[%hu]: %08x", - cell->vl_curr_svix,cell->vl_addrs[cell->vl_curr_svix].s_addr); + cell->vl_curr_svix, + cell->vl_addrs[cell->vl_curr_svix].s_addr); /* try and create a server */ - ret = afs_server_lookup(cell,&cell->vl_addrs[cell->vl_curr_svix],&server); + ret = afs_server_lookup(cell, &cell->vl_addrs[cell->vl_curr_svix], &server); switch (ret) { case 0: break; @@ -166,7 +182,7 @@ static int afs_vlocation_access_vl_by_id } /* attempt to access the VL server */ - ret = afs_rxvl_get_entry_by_id(server,volid,voltype,vldb); + ret = afs_rxvl_get_entry_by_id(server, volid, voltype, vldb); switch (ret) { case 0: afs_put_server(server); @@ -183,7 +199,7 @@ static int afs_vlocation_access_vl_by_id } up_write(&server->sem); afs_put_server(server); - if (ret==-ENOMEM || ret==-ENONET) + if (ret == -ENOMEM || ret == -ENONET) goto out; goto rotate; case -ENOMEDIUM: @@ -216,74 +232,83 @@ static int afs_vlocation_access_vl_by_id * - lookup in the local cache if not able to find on the VL server * - insert/update in the local cache if did get a VL response */ -int afs_vlocation_lookup(afs_cell_t *cell, const char *name, afs_vlocation_t **_vlocation) +int afs_vlocation_lookup(afs_cell_t *cell, const char *name, unsigned namesz, + afs_vlocation_t **_vlocation) { - afsc_vldb_record_t vldb; + struct afs_cache_vlocation vldb; struct list_head *_p; afs_vlocation_t *vlocation; afs_voltype_t voltype; afs_volid_t vid; int active = 0, ret; - _enter(",%s,%s,",cell->name,name); + _enter("{%s},%*.*s,%u,", cell->name, namesz, namesz, name, namesz); - if (strlen(name)>sizeof(vlocation->vldb.name)) { + if (namesz > sizeof(vlocation->vldb.name)) { _leave(" = -ENAMETOOLONG"); return -ENAMETOOLONG; } /* search the cell's active list first */ - list_for_each(_p,&cell->vl_list) { - vlocation = list_entry(_p,afs_vlocation_t,link); - if (strncmp(vlocation->vldb.name,name,sizeof(vlocation->vldb.name))==0) + list_for_each(_p, &cell->vl_list) { + vlocation = list_entry(_p, afs_vlocation_t, link); + if (namesz < sizeof(vlocation->vldb.name) && + vlocation->vldb.name[namesz] != '\0') + continue; + + if (memcmp(vlocation->vldb.name, name, namesz) == 0) goto found_in_memory; } /* search the cell's graveyard list second */ spin_lock(&cell->vl_gylock); - list_for_each(_p,&cell->vl_graveyard) { - vlocation = list_entry(_p,afs_vlocation_t,link); - if (strncmp(vlocation->vldb.name,name,sizeof(vlocation->vldb.name))==0) + list_for_each(_p, &cell->vl_graveyard) { + vlocation = list_entry(_p, afs_vlocation_t, link); + if (namesz < sizeof(vlocation->vldb.name) && + vlocation->vldb.name[namesz] != '\0') + continue; + + if (memcmp(vlocation->vldb.name, name, namesz) == 0) goto found_in_graveyard; } spin_unlock(&cell->vl_gylock); /* not in the cell's in-memory lists - create a new record */ - vlocation = kmalloc(sizeof(afs_vlocation_t),GFP_KERNEL); + vlocation = kmalloc(sizeof(afs_vlocation_t), GFP_KERNEL); if (!vlocation) return -ENOMEM; - memset(vlocation,0,sizeof(afs_vlocation_t)); - atomic_set(&vlocation->usage,1); + memset(vlocation, 0, sizeof(afs_vlocation_t)); + atomic_set(&vlocation->usage, 1); INIT_LIST_HEAD(&vlocation->link); rwlock_init(&vlocation->lock); - strncpy(vlocation->vldb.name,name,sizeof(vlocation->vldb.name)); + memcpy(vlocation->vldb.name, name, namesz); - afs_timer_init(&vlocation->timeout,&afs_vlocation_timer_ops); - afs_timer_init(&vlocation->upd_timer,&afs_vlocation_update_timer_ops); - afs_async_op_init(&vlocation->upd_op,&afs_vlocation_update_op_ops); - - INIT_LIST_HEAD(&vlocation->caches); + afs_timer_init(&vlocation->timeout, &afs_vlocation_timer_ops); + afs_timer_init(&vlocation->upd_timer, &afs_vlocation_update_timer_ops); + afs_async_op_init(&vlocation->upd_op, &afs_vlocation_update_op_ops); afs_get_cell(cell); vlocation->cell = cell; - list_add_tail(&vlocation->link,&cell->vl_list); + list_add_tail(&vlocation->link, &cell->vl_list); -#if 0 - /* search local cache if wasn't in memory */ - ret = afsc_lookup_vlocation(vlocation); - switch (ret) { - default: goto error; /* disk error */ - case 0: goto found_in_cache; /* pulled from local cache into memory */ - case -ENOENT: break; /* not in local cache */ - } +#ifdef AFS_CACHING_SUPPORT + /* we want to store it in the cache, plus it might already be encached */ + cachefs_acquire_cookie(cell->cache, + &afs_volume_cache_index_def, + vlocation, + &vlocation->cache); + + if (vlocation->valid) + goto found_in_cache; #endif /* try to look up an unknown volume in the cell VL databases by name */ - ret = afs_vlocation_access_vl_by_name(vlocation,name,&vldb); + ret = afs_vlocation_access_vl_by_name(vlocation, name, namesz, &vldb); if (ret<0) { - printk("kAFS: failed to locate '%s' in cell '%s'\n",name,cell->name); + printk("kAFS: failed to locate '%*.*s' in cell '%s'\n", + namesz, namesz, name, cell->name); goto error; } @@ -294,7 +319,7 @@ int afs_vlocation_lookup(afs_cell_t *cel _debug("found in graveyard"); atomic_inc(&vlocation->usage); list_del(&vlocation->link); - list_add_tail(&vlocation->link,&cell->vl_list); + list_add_tail(&vlocation->link, &cell->vl_list); spin_unlock(&cell->vl_gylock); afs_kafstimod_del_timer(&vlocation->timeout); @@ -308,30 +333,32 @@ int afs_vlocation_lookup(afs_cell_t *cel active: active = 1; -/* found_in_cache: */ +#ifdef AFS_CACHING_SUPPORT + found_in_cache: +#endif /* try to look up a cached volume in the cell VL databases by ID */ _debug("found in cache"); _debug("Locally Cached: %s %02x { %08x(%x) %08x(%x) %08x(%x) }", vlocation->vldb.name, vlocation->vldb.vidmask, - ntohl(vlocation->vldb.servers[0].s_addr),vlocation->vldb.srvtmask[0], - ntohl(vlocation->vldb.servers[1].s_addr),vlocation->vldb.srvtmask[1], - ntohl(vlocation->vldb.servers[2].s_addr),vlocation->vldb.srvtmask[2] + ntohl(vlocation->vldb.servers[0].s_addr), vlocation->vldb.srvtmask[0], + ntohl(vlocation->vldb.servers[1].s_addr), vlocation->vldb.srvtmask[1], + ntohl(vlocation->vldb.servers[2].s_addr), vlocation->vldb.srvtmask[2] ); _debug("Vids: %08x %08x %08x", - vlocation->vldb.vid[0],vlocation->vldb.vid[1],vlocation->vldb.vid[2]); + vlocation->vldb.vid[0], vlocation->vldb.vid[1], vlocation->vldb.vid[2]); - if (vlocation->vldb.vidmask & AFSC_VOL_STM_RW) { + if (vlocation->vldb.vidmask & AFS_VOL_VTM_RW) { vid = vlocation->vldb.vid[0]; voltype = AFSVL_RWVOL; } - else if (vlocation->vldb.vidmask & AFSC_VOL_STM_RO) { + else if (vlocation->vldb.vidmask & AFS_VOL_VTM_RO) { vid = vlocation->vldb.vid[1]; voltype = AFSVL_ROVOL; } - else if (vlocation->vldb.vidmask & AFSC_VOL_STM_BAK) { + else if (vlocation->vldb.vidmask & AFS_VOL_VTM_BAK) { vid = vlocation->vldb.vid[2]; voltype = AFSVL_BACKVOL; } @@ -341,41 +368,44 @@ int afs_vlocation_lookup(afs_cell_t *cel voltype = 0; } - ret = afs_vlocation_access_vl_by_id(vlocation,vid,voltype,&vldb); + ret = afs_vlocation_access_vl_by_id(vlocation, vid, voltype, &vldb); switch (ret) { /* net error */ default: - printk("kAFS: failed to volume '%s' (%x) up in '%s': %d\n", - name,vid,cell->name,ret); + printk("kAFS: failed to volume '%*.*s' (%x) up in '%s': %d\n", + namesz, namesz, name, vid, cell->name, ret); goto error; /* pulled from local cache into memory */ - case 0: + case 0: goto found_on_vlserver; /* uh oh... looks like the volume got deleted */ case -ENOMEDIUM: - printk("kAFS: volume '%s' (%x) does not exist '%s'\n",name,vid,cell->name); + printk("kAFS: volume '%*.*s' (%x) does not exist '%s'\n", + namesz, namesz, name, vid, cell->name); /* TODO: make existing record unavailable */ goto error; } found_on_vlserver: - _debug("Done VL Lookup: %s %02x { %08x(%x) %08x(%x) %08x(%x) }", - name, + _debug("Done VL Lookup: %*.*s %02x { %08x(%x) %08x(%x) %08x(%x) }", + namesz, namesz, name, vldb.vidmask, - ntohl(vldb.servers[0].s_addr),vldb.srvtmask[0], - ntohl(vldb.servers[1].s_addr),vldb.srvtmask[1], - ntohl(vldb.servers[2].s_addr),vldb.srvtmask[2] + ntohl(vldb.servers[0].s_addr), vldb.srvtmask[0], + ntohl(vldb.servers[1].s_addr), vldb.srvtmask[1], + ntohl(vldb.servers[2].s_addr), vldb.srvtmask[2] ); - _debug("Vids: %08x %08x %08x",vldb.vid[0],vldb.vid[1],vldb.vid[2]); + _debug("Vids: %08x %08x %08x", vldb.vid[0], vldb.vid[1], vldb.vid[2]); - if (strncmp(vldb.name,name,sizeof(vlocation->vldb.name))!=0) - printk("kAFS: name of volume '%s' changed to '%s' on server\n",name,vldb.name); + if ((namesz < sizeof(vlocation->vldb.name) && vlocation->vldb.name[namesz] != '\0') || + memcmp(vldb.name, name, namesz) != 0) + printk("kAFS: name of volume '%*.*s' changed to '%s' on server\n", + namesz, namesz, name, vldb.name); - memcpy(&vlocation->vldb,&vldb,sizeof(vlocation->vldb)); + memcpy(&vlocation->vldb, &vldb, sizeof(vlocation->vldb)); #if 0 /* add volume entry to local cache */ @@ -384,7 +414,7 @@ int afs_vlocation_lookup(afs_cell_t *cel goto error; #endif - afs_kafstimod_add_timer(&vlocation->upd_timer,10*HZ); + afs_kafstimod_add_timer(&vlocation->upd_timer, 10*HZ); *_vlocation = vlocation; _leave(" = 0 (%p)",vlocation); @@ -397,10 +427,10 @@ int afs_vlocation_lookup(afs_cell_t *cel } else { list_del(&vlocation->link); - afs_put_cell(vlocation->cell); -#if 0 - afs_put_cache(vlocation->cache); +#ifdef AFS_CACHING_SUPPORT + cachefs_relinquish_cookie(vlocation->cache, 0); #endif + afs_put_cell(vlocation->cell); kfree(vlocation); } } @@ -414,12 +444,17 @@ int afs_vlocation_lookup(afs_cell_t *cel * finish using a volume location record * - caller must have cell->vol_sem write-locked */ -void __afs_put_vlocation(afs_vlocation_t *vlocation) +void __afs_put_vlocation(struct afs_vlocation *vlocation) { - afs_cell_t *cell = vlocation->cell; + struct afs_cell *cell; + + if (!vlocation) + return; _enter("%s",vlocation->vldb.name); + cell = vlocation->cell; + /* sanity check */ if (atomic_read(&vlocation->usage)<=0) BUG(); @@ -453,11 +488,13 @@ void __afs_put_vlocation(afs_vlocation_t */ void afs_put_vlocation(afs_vlocation_t *vlocation) { - afs_cell_t *cell = vlocation->cell; + if (vlocation) { + struct afs_cell *cell = vlocation->cell; - down_write(&cell->vl_sem); - __afs_put_vlocation(vlocation); - up_write(&cell->vl_sem); + down_write(&cell->vl_sem); + __afs_put_vlocation(vlocation); + up_write(&cell->vl_sem); + } } /* end afs_put_vlocation() */ /*****************************************************************************/ @@ -489,10 +526,10 @@ void afs_vlocation_do_timeout(afs_vlocat } /* we can now destroy it properly */ - afs_put_cell(cell); -#if 0 - afs_put_cache(vlocation->cache); +#ifdef AFS_CACHING_SUPPORT + cachefs_relinquish_cookie(vlocation->cache,0); #endif + afs_put_cell(cell); kfree(vlocation); @@ -513,15 +550,15 @@ static int afs_vlocation_update_begin(af vlocation->vldb.name,vlocation->upd_first_svix,vlocation->upd_curr_svix); /* try to look up a cached volume in the cell VL databases by ID */ - if (vlocation->vldb.vidmask & AFSC_VOL_STM_RW) { + if (vlocation->vldb.vidmask & AFS_VOL_VTM_RW) { vid = vlocation->vldb.vid[0]; voltype = AFSVL_RWVOL; } - else if (vlocation->vldb.vidmask & AFSC_VOL_STM_RO) { + else if (vlocation->vldb.vidmask & AFS_VOL_VTM_RO) { vid = vlocation->vldb.vid[1]; voltype = AFSVL_ROVOL; } - else if (vlocation->vldb.vidmask & AFSC_VOL_STM_BAK) { + else if (vlocation->vldb.vidmask & AFS_VOL_VTM_BAK) { vid = vlocation->vldb.vid[2]; voltype = AFSVL_BACKVOL; } @@ -571,10 +608,8 @@ static void afs_vlocation_update_abandon printk("kAFS: Abandoning VL update '%s': %d\n",vlocation->vldb.name,ret); /* discard the server record */ - if (vlocation->upd_op.server) { - afs_put_server(vlocation->upd_op.server); - vlocation->upd_op.server = NULL; - } + afs_put_server(vlocation->upd_op.server); + vlocation->upd_op.server = NULL; spin_lock(&afs_vlocation_update_lock); afs_vlocation_update = NULL; @@ -669,7 +704,7 @@ static void afs_vlocation_update_timer(a */ static void afs_vlocation_update_attend(afs_async_op_t *op) { - afsc_vldb_record_t vldb; + struct afs_cache_vlocation vldb; afs_vlocation_t *vlocation = list_entry(op,afs_vlocation_t,upd_op); unsigned tmp; int ret; @@ -762,11 +797,9 @@ static void afs_vlocation_update_attend( try_next: vlocation->upd_busy_cnt = 0; - if (vlocation->upd_op.server) { - /* discard the server record */ - afs_put_server(vlocation->upd_op.server); - vlocation->upd_op.server = NULL; - } + /* discard the server record */ + afs_put_server(vlocation->upd_op.server); + vlocation->upd_op.server = NULL; tmp = vlocation->cell->vl_naddrs; if (tmp==0) @@ -822,3 +855,68 @@ static void afs_vlocation_update_discard _leave(""); } /* end afs_vlocation_update_discard() */ + +/*****************************************************************************/ +/* + * match a VLDB record stored in the cache + * - may also load target from entry + */ +#ifdef AFS_CACHING_SUPPORT +static cachefs_match_val_t afs_vlocation_cache_match(void *target, + const void *entry) +{ + const struct afs_cache_vlocation *vldb = entry; + struct afs_vlocation *vlocation = target; + + _enter("{%s},{%s}", vlocation->vldb.name, vldb->name); + + if (strncmp(vlocation->vldb.name, + vldb->name, + sizeof(vldb->name)) == 0) { + if (!vlocation->valid || + vlocation->vldb.rtime == vldb->rtime) { + struct_cpy(&vlocation->vldb, vldb); + vlocation->valid = 1; + _leave(" = SUCCESS [c->m]"); + return CACHEFS_MATCH_SUCCESS; + } + /* need to update cache if cached info differs */ + else if (memcmp(&vlocation->vldb, vldb, sizeof(*vldb)) != 0) { + /* delete if VIDs for this name differ */ + if (memcmp(&vlocation->vldb.vid, + &vldb->vid, + sizeof(vldb->vid)) != 0) { + _leave(" = DELETE"); + return CACHEFS_MATCH_SUCCESS_DELETE; + } + + _leave(" = UPDATE"); + return CACHEFS_MATCH_SUCCESS_UPDATE; + } + else { + _leave(" = SUCCESS"); + return CACHEFS_MATCH_SUCCESS; + } + } + + _leave(" = FAILED"); + return CACHEFS_MATCH_FAILED; +} /* end afs_vlocation_cache_match() */ +#endif + +/*****************************************************************************/ +/* + * update a VLDB record stored in the cache + */ +#ifdef AFS_CACHING_SUPPORT +static void afs_vlocation_cache_update(void *source, void *entry) +{ + struct afs_cache_vlocation *vldb = entry; + struct afs_vlocation *vlocation = source; + + _enter(""); + + struct_cpy(vldb,&vlocation->vldb); + +} /* end afs_vlocation_cache_update() */ +#endif diff -prauN linux-2.6.0-test5/fs/afs/vnode.c wli-2.6.0-test5-bk12-25/fs/afs/vnode.c --- linux-2.6.0-test5/fs/afs/vnode.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/afs/vnode.c 2003-09-25 19:16:05.000000000 -0700 @@ -29,6 +29,19 @@ struct afs_timer_ops afs_vnode_cb_timed_ .timed_out = afs_vnode_cb_timed_out, }; +#ifdef AFS_CACHING_SUPPORT +static cachefs_match_val_t afs_vnode_cache_match(void *target, const void *entry); +static void afs_vnode_cache_update(void *source, void *entry); + +struct cachefs_index_def afs_vnode_cache_index_def = { + .name = "vnode", + .data_size = sizeof(struct afs_cache_vnode), + .keys[0] = { CACHEFS_INDEX_KEYS_BIN, 4 }, + .match = afs_vnode_cache_match, + .update = afs_vnode_cache_update, +}; +#endif + /*****************************************************************************/ /* * handle a callback timing out @@ -61,8 +74,7 @@ static void afs_vnode_cb_timed_out(struc spin_unlock(&vnode->lock); - if (oldserver) - afs_put_server(oldserver); + afs_put_server(oldserver); _leave(""); } /* end afs_vnode_cb_timed_out() */ @@ -126,8 +138,7 @@ void afs_vnode_finalise_status_update(af wake_up_all(&vnode->update_waitq); - if (oldserver) - afs_put_server(oldserver); + afs_put_server(oldserver); _leave(""); @@ -272,7 +283,7 @@ int afs_vnode_fetch_data(afs_vnode_t *vn /*****************************************************************************/ /* * break any outstanding callback on a vnode - * - only relevant to server that issued it + * - only relevent to server that issued it */ int afs_vnode_give_up_callback(afs_vnode_t *vnode) { @@ -314,3 +325,56 @@ int afs_vnode_give_up_callback(afs_vnode _leave(" = %d",ret); return ret; } /* end afs_vnode_give_up_callback() */ + +/*****************************************************************************/ +/* + * match a vnode record stored in the cache + */ +#ifdef AFS_CACHING_SUPPORT +static cachefs_match_val_t afs_vnode_cache_match(void *target, const void *entry) +{ + const struct afs_cache_vnode *cvnode = entry; + struct afs_vnode *vnode = target; + + _enter("{%x,%x,%Lx},{%x,%x,%Lx}", + vnode->fid.vnode, + vnode->fid.unique, + vnode->status.version, + cvnode->vnode_id, + cvnode->vnode_unique, + cvnode->data_version); + + if (vnode->fid.vnode != cvnode->vnode_id) { + _leave(" = FAILED"); + return CACHEFS_MATCH_FAILED; + } + + if (vnode->fid.unique != cvnode->vnode_unique || + vnode->status.version != cvnode->data_version) { + _leave(" = DELETE"); + return CACHEFS_MATCH_SUCCESS_DELETE; + } + + _leave(" = SUCCESS"); + return CACHEFS_MATCH_SUCCESS; +} /* end afs_vnode_cache_match() */ +#endif + +/*****************************************************************************/ +/* + * update a vnode record stored in the cache + */ +#ifdef AFS_CACHING_SUPPORT +static void afs_vnode_cache_update(void *source, void *entry) +{ + struct afs_cache_vnode *cvnode = entry; + struct afs_vnode *vnode = source; + + _enter(""); + + cvnode->vnode_id = vnode->fid.vnode; + cvnode->vnode_unique = vnode->fid.unique; + cvnode->data_version = vnode->status.version; + +} /* end afs_vnode_cache_update() */ +#endif diff -prauN linux-2.6.0-test5/fs/afs/vnode.h wli-2.6.0-test5-bk12-25/fs/afs/vnode.h --- linux-2.6.0-test5/fs/afs/vnode.h 2003-09-08 12:49:50.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/afs/vnode.h 2003-09-25 19:16:05.000000000 -0700 @@ -15,6 +15,7 @@ #include #include "server.h" #include "kafstimod.h" +#include "cache.h" #ifdef __KERNEL__ @@ -22,16 +23,33 @@ struct afs_rxfs_fetch_descriptor; /*****************************************************************************/ /* + * vnode catalogue entry + */ +struct afs_cache_vnode +{ + afs_vnodeid_t vnode_id; /* vnode ID */ + unsigned vnode_unique; /* vnode ID uniquifier */ + afs_dataversion_t data_version; /* data version */ +}; + +#ifdef AFS_CACHING_SUPPORT +extern struct cachefs_index_def afs_vnode_cache_index_def; +#endif + +/*****************************************************************************/ +/* * AFS inode private data */ struct afs_vnode { struct inode vfs_inode; /* the VFS's inode record */ - afs_volume_t *volume; /* volume on which vnode resides */ - afs_fid_t fid; /* the file identifier for this inode */ - afs_file_status_t status; /* AFS status info for this file */ - unsigned nix; /* vnode index in cache */ + struct afs_volume *volume; /* volume on which vnode resides */ + struct afs_fid fid; /* the file identifier for this inode */ + struct afs_file_status status; /* AFS status info for this file */ +#ifdef AFS_CACHING_SUPPORT + struct cachefs_cookie *cache; /* caching cookie */ +#endif wait_queue_head_t update_waitq; /* status fetch waitqueue */ unsigned update_cnt; /* number of outstanding ops that will update the @@ -43,10 +61,10 @@ struct afs_vnode #define AFS_VNODE_MOUNTPOINT 0x00000004 /* set if vnode is a mountpoint symlink */ /* outstanding callback notification on this file */ - afs_server_t *cb_server; /* server that made the current promise */ + struct afs_server *cb_server; /* server that made the current promise */ struct list_head cb_link; /* link in server's promises list */ struct list_head cb_hash_link; /* link in master callback hash */ - afs_timer_t cb_timeout; /* timeout on promise */ + struct afs_timer cb_timeout; /* timeout on promise */ unsigned cb_version; /* callback version */ unsigned cb_expiry; /* callback expiry time */ afs_callback_type_t cb_type; /* type of callback */ diff -prauN linux-2.6.0-test5/fs/afs/volume.c wli-2.6.0-test5-bk12-25/fs/afs/volume.c --- linux-2.6.0-test5/fs/afs/volume.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/afs/volume.c 2003-09-25 19:16:05.000000000 -0700 @@ -16,7 +16,9 @@ #include #include #include "volume.h" +#include "vnode.h" #include "cell.h" +#include "cache.h" #include "cmservice.h" #include "fsclient.h" #include "vlclient.h" @@ -24,6 +26,20 @@ const char *afs_voltypes[] = { "R/W", "R/O", "BAK" }; +#ifdef AFS_CACHING_SUPPORT +static cachefs_match_val_t afs_volume_cache_match(void *target, const void *entry); +static void afs_volume_cache_update(void *source, void *entry); + +struct cachefs_index_def afs_volume_cache_index_def = { + .name = "volume", + .data_size = sizeof(struct afs_cache_vhash), + .keys[0] = { CACHEFS_INDEX_KEYS_BIN, 1 }, + .keys[1] = { CACHEFS_INDEX_KEYS_BIN, 1 }, + .match = afs_volume_cache_match, + .update = afs_volume_cache_update, +}; +#endif + /*****************************************************************************/ /* * lookup a volume by name @@ -43,19 +59,19 @@ const char *afs_voltypes[] = { "R/W", "R * - Rule 2: If parent volume is R/O, then mount R/O volume by preference, R/W if not available * - Rule 3: If parent volume is R/W, then only mount R/W volume unless explicitly told otherwise */ -int afs_volume_lookup(const char *name, int rwparent, afs_volume_t **_volume) +int afs_volume_lookup(const char *name, struct afs_cell *cell, int rwpath, + afs_volume_t **_volume) { - afs_vlocation_t *vlocation = NULL; + struct afs_vlocation *vlocation = NULL; + struct afs_volume *volume = NULL; afs_voltype_t type; - afs_volume_t *volume = NULL; - afs_cell_t *cell = NULL; - char *cellname, *volname, *suffix; + const char *cellname, *volname, *suffix; char srvtmask; - int force, ret, loop; + int force, ret, loop, cellnamesz, volnamesz; - _enter(",%s,",name); + _enter("%s,,%d,", name, rwpath); - if (!name || (name[0]!='%' && name[0]!='#') || !name[1]) { + if (!name || (name[0] != '%' && name[0] != '#') || !name[1]) { printk("kAFS: unparsable volume name\n"); return -EINVAL; } @@ -64,24 +80,22 @@ int afs_volume_lookup(const char *name, force = 0; type = AFSVL_ROVOL; - if (rwparent || name[0]=='%') { + if (rwpath || name[0] == '%') { type = AFSVL_RWVOL; force = 1; } - suffix = strrchr(name,'.'); + suffix = strrchr(name, '.'); if (suffix) { - if (strcmp(suffix,".readonly")==0) { + if (strcmp(suffix, ".readonly") == 0) { type = AFSVL_ROVOL; force = 1; } - else if (strcmp(suffix,".backup")==0) { + else if (strcmp(suffix, ".backup") == 0) { type = AFSVL_BACKVOL; force = 1; } - else if (suffix[1]==0) { - *suffix = 0; - suffix = NULL; + else if (suffix[1] == 0) { } else { suffix = NULL; @@ -90,38 +104,45 @@ int afs_volume_lookup(const char *name, /* split the cell and volume names */ name++; - volname = strchr(name,':'); + volname = strchr(name, ':'); if (volname) { - *volname++ = 0; cellname = name; + cellnamesz = volname - name; } else { volname = name; cellname = NULL; + cellnamesz = 0; } - _debug("CELL:%s VOLUME:%s SUFFIX:%s TYPE:%d%s", - cellname,volname,suffix?:"-",type,force?" FORCE":""); + volnamesz = suffix ? suffix - volname : strlen(volname); - /* lookup the cell record */ - ret = afs_cell_lookup(cellname,&cell); - if (ret<0) - printk("kAFS: unable to lookup cell '%s'\n",cellname?:""); + _debug("CELL:%*.*s [%p] VOLUME:%*.*s SUFFIX:%s TYPE:%d%s", + cellnamesz, cellnamesz, cellname ?: "", cell, + volnamesz, volnamesz, volname, suffix ?: "-", + type, + force ? " FORCE" : ""); - if (cellname) volname[-1] = ':'; - if (ret<0) - goto error; + /* lookup the cell record */ + if (cellname || !cell) { + ret = afs_cell_lookup(cellname, cellnamesz, &cell); + if (ret<0) { + printk("kAFS: unable to lookup cell '%s'\n", cellname ?: ""); + goto error; + } + } + else { + afs_get_cell(cell); + } /* lookup the volume location record */ - if (suffix) *suffix = 0; - ret = afs_vlocation_lookup(cell,volname,&vlocation); - if (suffix) *suffix = '.'; - if (ret<0) + ret = afs_vlocation_lookup(cell, volname, volnamesz, &vlocation); + if (ret < 0) goto error; /* make the final decision on the type we want */ ret = -ENOMEDIUM; - if (force && !(vlocation->vldb.vidmask & (1<vldb.vidmask & (1 << type))) goto error; srvtmask = 0; @@ -129,13 +150,13 @@ int afs_volume_lookup(const char *name, srvtmask |= vlocation->vldb.srvtmask[loop]; if (force) { - if (!(srvtmask & (1 <usage,1); - volume->type = type; - volume->type_force = force; - volume->cell = cell; - volume->vid = vlocation->vldb.vid[type]; + memset(volume, 0, sizeof(afs_volume_t)); + atomic_set(&volume->usage, 1); + volume->type = type; + volume->type_force = force; + volume->cell = cell; + volume->vid = vlocation->vldb.vid[type]; init_rwsem(&volume->server_sem); @@ -183,15 +204,20 @@ int afs_volume_lookup(const char *name, } /* attach the cache and volume location */ -#if 0 - afs_get_cache(cache); volume->cache = cache; +#ifdef AFS_CACHING_SUPPORT + cachefs_acquire_cookie(vlocation->cache, + &afs_vnode_cache_index_def, + volume, + &volume->cache); #endif - afs_get_vlocation(vlocation); volume->vlocation = vlocation; + + afs_get_vlocation(vlocation); + volume->vlocation = vlocation; vlocation->vols[type] = volume; success: - _debug("kAFS selected %s volume %08x",afs_voltypes[volume->type],volume->vid); + _debug("kAFS selected %s volume %08x", afs_voltypes[volume->type], volume->vid); *_volume = volume; ret = 0; @@ -199,18 +225,17 @@ int afs_volume_lookup(const char *name, error_up: up_write(&cell->vl_sem); error: - if (vlocation) afs_put_vlocation(vlocation); - if (cell) afs_put_cell(cell); + afs_put_vlocation(vlocation); + afs_put_cell(cell); - _leave(" = %d (%p)",ret,volume); + _leave(" = %d (%p)", ret, volume); return ret; error_discard: up_write(&cell->vl_sem); for (loop=volume->nservers-1; loop>=0; loop--) - if (volume->servers[loop]) - afs_put_server(volume->servers[loop]); + afs_put_server(volume->servers[loop]); kfree(volume); goto error; @@ -225,6 +250,9 @@ void afs_put_volume(afs_volume_t *volume afs_vlocation_t *vlocation; int loop; + if (!volume) + return; + _enter("%p",volume); vlocation = volume->vlocation; @@ -246,16 +274,14 @@ void afs_put_volume(afs_volume_t *volume up_write(&vlocation->cell->vl_sem); - afs_put_vlocation(vlocation); - /* finish cleaning up the volume */ -#if 0 - if (volume->cache) afs_put_cache(volume->cache); +#ifdef AFS_CACHING_SUPPORT + cachefs_relinquish_cookie(volume->cache,0); #endif + afs_put_vlocation(vlocation); for (loop=volume->nservers-1; loop>=0; loop--) - if (volume->servers[loop]) - afs_put_server(volume->servers[loop]); + afs_put_server(volume->servers[loop]); kfree(volume); @@ -428,3 +454,42 @@ int afs_volume_release_fileserver(afs_vo return 0; } /* end afs_volume_release_fileserver() */ + +/*****************************************************************************/ +/* + * match a volume hash record stored in the cache + */ +#ifdef AFS_CACHING_SUPPORT +static cachefs_match_val_t afs_volume_cache_match(void *target, const void *entry) +{ + const struct afs_cache_vhash *vhash = entry; + struct afs_volume *volume = target; + + _enter("{%u},{%u}", volume->type, vhash->vtype); + + if (volume->type == vhash->vtype) { + _leave(" = SUCCESS"); + return CACHEFS_MATCH_SUCCESS; + } + + _leave(" = FAILED"); + return CACHEFS_MATCH_FAILED; +} /* end afs_volume_cache_match() */ +#endif + +/*****************************************************************************/ +/* + * update a volume hash record stored in the cache + */ +#ifdef AFS_CACHING_SUPPORT +static void afs_volume_cache_update(void *source, void *entry) +{ + struct afs_cache_vhash *vhash = entry; + struct afs_volume *volume = source; + + _enter(""); + + vhash->vtype = volume->type; + +} /* end afs_volume_cache_update() */ +#endif diff -prauN linux-2.6.0-test5/fs/afs/volume.h wli-2.6.0-test5-bk12-25/fs/afs/volume.h --- linux-2.6.0-test5/fs/afs/volume.h 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/afs/volume.h 2003-09-25 19:16:05.000000000 -0700 @@ -16,7 +16,7 @@ #include "fsclient.h" #include "kafstimod.h" #include "kafsasyncd.h" -#include "cache-layout.h" +#include "cache.h" #define __packed __attribute__((packed)) @@ -30,21 +30,60 @@ typedef enum { /*****************************************************************************/ /* + * entry in the cached volume location catalogue + */ +struct afs_cache_vlocation +{ + uint8_t name[64]; /* volume name (lowercase, padded with NULs) */ + uint8_t nservers; /* number of entries used in servers[] */ + uint8_t vidmask; /* voltype mask for vid[] */ + uint8_t srvtmask[8]; /* voltype masks for servers[] */ +#define AFS_VOL_VTM_RW 0x01 /* R/W version of the volume is available (on this server) */ +#define AFS_VOL_VTM_RO 0x02 /* R/O version of the volume is available (on this server) */ +#define AFS_VOL_VTM_BAK 0x04 /* backup version of the volume is available (on this server) */ + + afs_volid_t vid[3]; /* volume IDs for R/W, R/O and Bak volumes */ + struct in_addr servers[8]; /* fileserver addresses */ + time_t rtime; /* last retrieval time */ +}; + +#ifdef AFS_CACHING_SUPPORT +extern struct cachefs_index_def afs_vlocation_cache_index_def; +#endif + +/*****************************************************************************/ +/* + * volume -> vnode hash table entry + */ +struct afs_cache_vhash +{ + afs_voltype_t vtype; /* which volume variation */ + uint8_t hash_bucket; /* which hash bucket this represents */ +} __attribute__((packed)); + +#ifdef AFS_CACHING_SUPPORT +extern struct cachefs_index_def afs_volume_cache_index_def; +#endif + +/*****************************************************************************/ +/* * AFS volume location record */ struct afs_vlocation { atomic_t usage; struct list_head link; /* link in cell volume location list */ - afs_timer_t timeout; /* decaching timer */ - afs_cell_t *cell; /* cell to which volume belongs */ - struct list_head caches; /* backing caches */ - afsc_vldb_record_t vldb; /* volume information DB record */ + struct afs_timer timeout; /* decaching timer */ + struct afs_cell *cell; /* cell to which volume belongs */ +#ifdef AFS_CACHING_SUPPORT + struct cachefs_cookie *cache; /* caching cookie */ +#endif + struct afs_cache_vlocation vldb; /* volume information DB record */ struct afs_volume *vols[3]; /* volume access record pointer (index by type) */ rwlock_t lock; /* access lock */ unsigned long read_jif; /* time at which last read from vlserver */ - afs_timer_t upd_timer; /* update timer */ - afs_async_op_t upd_op; /* update operation */ + struct afs_timer upd_timer; /* update timer */ + struct afs_async_op upd_op; /* update operation */ afs_vlocation_upd_t upd_state; /* update state */ unsigned short upd_first_svix; /* first server index during update */ unsigned short upd_curr_svix; /* current server index during update */ @@ -53,13 +92,16 @@ struct afs_vlocation unsigned short valid; /* T if valid */ }; -extern int afs_vlocation_lookup(afs_cell_t *cell, const char *name, afs_vlocation_t **_vlocation); +extern int afs_vlocation_lookup(struct afs_cell *cell, + const char *name, + unsigned namesz, + struct afs_vlocation **_vlocation); #define afs_get_vlocation(V) do { atomic_inc(&(V)->usage); } while(0) -extern void __afs_put_vlocation(afs_vlocation_t *vlocation); -extern void afs_put_vlocation(afs_vlocation_t *vlocation); -extern void afs_vlocation_do_timeout(afs_vlocation_t *vlocation); +extern void __afs_put_vlocation(struct afs_vlocation *vlocation); +extern void afs_put_vlocation(struct afs_vlocation *vlocation); +extern void afs_vlocation_do_timeout(struct afs_vlocation *vlocation); /*****************************************************************************/ /* @@ -68,25 +110,34 @@ extern void afs_vlocation_do_timeout(afs struct afs_volume { atomic_t usage; - afs_cell_t *cell; /* cell to which belongs (unrefd ptr) */ - afs_vlocation_t *vlocation; /* volume location */ + struct afs_cell *cell; /* cell to which belongs (unrefd ptr) */ + struct afs_vlocation *vlocation; /* volume location */ +#ifdef AFS_CACHING_SUPPORT + struct cachefs_cookie *cache; /* caching cookie */ +#endif afs_volid_t vid; /* volume ID */ afs_voltype_t __packed type; /* type of volume */ char type_force; /* force volume type (suppress R/O -> R/W) */ unsigned short nservers; /* number of server slots filled */ unsigned short rjservers; /* number of servers discarded due to -ENOMEDIUM */ - afs_server_t *servers[8]; /* servers on which volume resides (ordered) */ + struct afs_server *servers[8]; /* servers on which volume resides (ordered) */ struct rw_semaphore server_sem; /* lock for accessing current server */ }; -extern int afs_volume_lookup(const char *name, int ro, afs_volume_t **_volume); +extern int afs_volume_lookup(const char *name, + struct afs_cell *cell, + int rwpath, + struct afs_volume **_volume); #define afs_get_volume(V) do { atomic_inc(&(V)->usage); } while(0) -extern void afs_put_volume(afs_volume_t *volume); +extern void afs_put_volume(struct afs_volume *volume); -extern int afs_volume_pick_fileserver(afs_volume_t *volume, afs_server_t **_server); +extern int afs_volume_pick_fileserver(struct afs_volume *volume, + struct afs_server **_server); -extern int afs_volume_release_fileserver(afs_volume_t *volume, afs_server_t *server, int result); +extern int afs_volume_release_fileserver(struct afs_volume *volume, + struct afs_server *server, + int result); #endif /* _LINUX_AFS_VOLUME_H */ diff -prauN linux-2.6.0-test5/fs/autofs/autofs_i.h wli-2.6.0-test5-bk12-25/fs/autofs/autofs_i.h --- linux-2.6.0-test5/fs/autofs/autofs_i.h 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/autofs/autofs_i.h 2003-09-25 19:16:05.000000000 -0700 @@ -123,7 +123,7 @@ static inline struct autofs_sb_info *aut filesystem without "magic".) */ static inline int autofs_oz_mode(struct autofs_sb_info *sbi) { - return sbi->catatonic || current->pgrp == sbi->oz_pgrp; + return sbi->catatonic || process_group(current) == sbi->oz_pgrp; } /* Hash operations */ diff -prauN linux-2.6.0-test5/fs/autofs/inode.c wli-2.6.0-test5-bk12-25/fs/autofs/inode.c --- linux-2.6.0-test5/fs/autofs/inode.c 2003-09-08 12:50:19.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/autofs/inode.c 2003-09-25 19:16:05.000000000 -0700 @@ -51,7 +51,7 @@ static int parse_options(char *options, *uid = current->uid; *gid = current->gid; - *pgrp = current->pgrp; + *pgrp = process_group(current); *minproto = *maxproto = AUTOFS_PROTO_VERSION; @@ -129,7 +129,7 @@ int autofs_fill_super(struct super_block sbi->magic = AUTOFS_SBI_MAGIC; sbi->catatonic = 0; sbi->exp_timeout = 0; - sbi->oz_pgrp = current->pgrp; + sbi->oz_pgrp = process_group(current); autofs_initialize_hash(&sbi->dirhash); sbi->queues = NULL; memset(sbi->symlink_bitmap, 0, sizeof(long)*AUTOFS_SYMLINK_BITMAP_LEN); diff -prauN linux-2.6.0-test5/fs/autofs/root.c wli-2.6.0-test5-bk12-25/fs/autofs/root.c --- linux-2.6.0-test5/fs/autofs/root.c 2003-09-08 12:50:04.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/autofs/root.c 2003-09-25 19:16:05.000000000 -0700 @@ -213,7 +213,7 @@ static struct dentry *autofs_root_lookup oz_mode = autofs_oz_mode(sbi); DPRINTK(("autofs_lookup: pid = %u, pgrp = %u, catatonic = %d, oz_mode = %d\n", - current->pid, current->pgrp, sbi->catatonic, oz_mode)); + current->pid, process_group(current), sbi->catatonic, oz_mode)); /* * Mark the dentry incomplete, but add it. This is needed so @@ -527,7 +527,7 @@ static int autofs_root_ioctl(struct inod { struct autofs_sb_info *sbi = autofs_sbi(inode->i_sb); - DPRINTK(("autofs_ioctl: cmd = 0x%08x, arg = 0x%08lx, sbi = %p, pgrp = %u\n",cmd,arg,sbi,current->pgrp)); + DPRINTK(("autofs_ioctl: cmd = 0x%08x, arg = 0x%08lx, sbi = %p, pgrp = %u\n",cmd,arg,sbi,process_group(current))); if ( _IOC_TYPE(cmd) != _IOC_TYPE(AUTOFS_IOC_FIRST) || _IOC_NR(cmd) - _IOC_NR(AUTOFS_IOC_FIRST) >= AUTOFS_IOC_COUNT ) diff -prauN linux-2.6.0-test5/fs/autofs4/autofs_i.h wli-2.6.0-test5-bk12-25/fs/autofs4/autofs_i.h --- linux-2.6.0-test5/fs/autofs4/autofs_i.h 2003-09-08 12:50:14.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/autofs4/autofs_i.h 2003-09-25 19:16:05.000000000 -0700 @@ -113,7 +113,7 @@ static inline struct autofs_info *autofs filesystem without "magic".) */ static inline int autofs4_oz_mode(struct autofs_sb_info *sbi) { - return sbi->catatonic || current->pgrp == sbi->oz_pgrp; + return sbi->catatonic || process_group(current) == sbi->oz_pgrp; } /* Does a dentry have some pending activity? */ diff -prauN linux-2.6.0-test5/fs/autofs4/inode.c wli-2.6.0-test5-bk12-25/fs/autofs4/inode.c --- linux-2.6.0-test5/fs/autofs4/inode.c 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/autofs4/inode.c 2003-09-25 19:16:05.000000000 -0700 @@ -101,7 +101,7 @@ static int parse_options(char *options, *uid = current->uid; *gid = current->gid; - *pgrp = current->pgrp; + *pgrp = process_group(current); *minproto = AUTOFS_MIN_PROTO_VERSION; *maxproto = AUTOFS_MAX_PROTO_VERSION; @@ -192,7 +192,7 @@ int autofs4_fill_super(struct super_bloc sbi->magic = AUTOFS_SBI_MAGIC; sbi->catatonic = 0; sbi->exp_timeout = 0; - sbi->oz_pgrp = current->pgrp; + sbi->oz_pgrp = process_group(current); sbi->sb = s; sbi->version = 0; sbi->queues = NULL; diff -prauN linux-2.6.0-test5/fs/autofs4/root.c wli-2.6.0-test5-bk12-25/fs/autofs4/root.c --- linux-2.6.0-test5/fs/autofs4/root.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/autofs4/root.c 2003-09-25 19:16:05.000000000 -0700 @@ -255,7 +255,7 @@ static struct dentry *autofs4_root_looku lock_kernel(); oz_mode = autofs4_oz_mode(sbi); DPRINTK(("autofs_lookup: pid = %u, pgrp = %u, catatonic = %d, oz_mode = %d\n", - current->pid, current->pgrp, sbi->catatonic, oz_mode)); + current->pid, process_group(current), sbi->catatonic, oz_mode)); /* * Mark the dentry incomplete, but add it. This is needed so @@ -518,7 +518,7 @@ static int autofs4_root_ioctl(struct ino struct autofs_sb_info *sbi = autofs4_sbi(inode->i_sb); DPRINTK(("autofs_ioctl: cmd = 0x%08x, arg = 0x%08lx, sbi = %p, pgrp = %u\n", - cmd,arg,sbi,current->pgrp)); + cmd,arg,sbi,process_group(current))); if ( _IOC_TYPE(cmd) != _IOC_TYPE(AUTOFS_IOC_FIRST) || _IOC_NR(cmd) - _IOC_NR(AUTOFS_IOC_FIRST) >= AUTOFS_IOC_COUNT ) diff -prauN linux-2.6.0-test5/fs/bfs/inode.c wli-2.6.0-test5-bk12-25/fs/bfs/inode.c --- linux-2.6.0-test5/fs/bfs/inode.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/bfs/inode.c 2003-09-25 19:16:05.000000000 -0700 @@ -194,13 +194,15 @@ static void bfs_put_super(struct super_b static int bfs_statfs(struct super_block *s, struct kstatfs *buf) { struct bfs_sb_info *info = BFS_SB(s); + u64 id = huge_encode_dev(s->s_bdev->bd_dev); buf->f_type = BFS_MAGIC; buf->f_bsize = s->s_blocksize; buf->f_blocks = info->si_blocks; buf->f_bfree = buf->f_bavail = info->si_freeb; buf->f_files = info->si_lasti + 1 - BFS_ROOT_INO; buf->f_ffree = info->si_freei; - buf->f_fsid.val[0] = s->s_dev; + buf->f_fsid.val[0] = (u32)id; + buf->f_fsid.val[1] = (u32)(id >> 32); buf->f_namelen = BFS_NAMELEN; return 0; } diff -prauN linux-2.6.0-test5/fs/binfmt_elf.c wli-2.6.0-test5-bk12-25/fs/binfmt_elf.c --- linux-2.6.0-test5/fs/binfmt_elf.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/binfmt_elf.c 2003-09-29 01:15:24.000000000 -0700 @@ -7,6 +7,7 @@ * Tools". * * Copyright 1993, 1994: Eric Youngdale (ericy@cais.com). + * Top-down vma allocation support, William Irwin, IBM, 2003 */ #include @@ -323,8 +324,13 @@ static unsigned long load_elf_interp(str if (retval < 0) goto out_close; +#ifndef CONFIG_MMAP_TOPDOWN eppnt = elf_phdata; for (i=0; ie_phnum; i++, eppnt++) { +#else + eppnt = &elf_phdata[interp_elf_ex->e_phnum - 1]; + for (i = interp_elf_ex->e_phnum - 1; i >= 0; --i, --eppnt) { +#endif if (eppnt->p_type == PT_LOAD) { int elf_type = MAP_PRIVATE | MAP_DENYWRITE; int elf_prot = 0; @@ -338,7 +344,8 @@ static unsigned long load_elf_interp(str if (interp_elf_ex->e_type == ET_EXEC || load_addr_set) elf_type |= MAP_FIXED; - map_addr = elf_map(interpreter, load_addr + vaddr, eppnt, elf_prot, elf_type); + map_addr = load_addr_set ? load_addr + vaddr : 0; + map_addr = elf_map(interpreter, map_addr, eppnt, elf_prot, elf_type); if (BAD_ADDR(map_addr)) goto out_close; @@ -1023,6 +1030,7 @@ static inline void fill_elf_header(struc elf->e_ident[EI_CLASS] = ELF_CLASS; elf->e_ident[EI_DATA] = ELF_DATA; elf->e_ident[EI_VERSION] = EV_CURRENT; + elf->e_ident[EI_OSABI] = ELF_OSABI; memset(elf->e_ident+EI_PAD, 0, EI_NIDENT-EI_PAD); elf->e_type = ET_CORE; @@ -1076,7 +1084,7 @@ static void fill_prstatus(struct elf_prs prstatus->pr_sighold = p->blocked.sig[0]; prstatus->pr_pid = p->pid; prstatus->pr_ppid = p->parent->pid; - prstatus->pr_pgrp = p->pgrp; + prstatus->pr_pgrp = process_group(p); prstatus->pr_sid = p->session; jiffies_to_timeval(p->utime, &prstatus->pr_utime); jiffies_to_timeval(p->stime, &prstatus->pr_stime); @@ -1104,7 +1112,7 @@ static void fill_psinfo(struct elf_prpsi psinfo->pr_pid = p->pid; psinfo->pr_ppid = p->parent->pid; - psinfo->pr_pgrp = p->pgrp; + psinfo->pr_pgrp = process_group(p); psinfo->pr_sid = p->session; i = p->state ? ffz(~p->state) + 1 : 0; diff -prauN linux-2.6.0-test5/fs/bio.c wli-2.6.0-test5-bk12-25/fs/bio.c --- linux-2.6.0-test5/fs/bio.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/bio.c 2003-09-25 19:16:05.000000000 -0700 @@ -532,6 +532,12 @@ void bio_unmap_user(struct bio *bio, int * check that the pages are still dirty. If so, fine. If not, redirty them * in process context. * + * We special-case compound pages here: normally this means reads into hugetlb + * pages. The logic in here doesn't really work right for compound pages + * because the VM does not uniformly chase down the head page in all cases. + * But dirtiness of compound pages is pretty meaningless anyway: the VM doesn't + * handle them at all. So we skip compound pages here at an early stage. + * * Note that this code is very hard to test under normal circumstances because * direct-io pins the pages with get_user_pages(). This makes * is_page_cache_freeable return false, and the VM will not clean the pages. @@ -553,8 +559,21 @@ void bio_set_pages_dirty(struct bio *bio for (i = 0; i < bio->bi_vcnt; i++) { struct page *page = bvec[i].bv_page; + if (page && !PageCompound(page)) + set_page_dirty_lock(page); + } +} + +static void bio_release_pages(struct bio *bio) +{ + struct bio_vec *bvec = bio->bi_io_vec; + int i; + + for (i = 0; i < bio->bi_vcnt; i++) { + struct page *page = bvec[i].bv_page; + if (page) - set_page_dirty_lock(bvec[i].bv_page); + put_page(page); } } @@ -592,6 +611,7 @@ static void bio_dirty_fn(void *data) struct bio *next = bio->bi_private; bio_set_pages_dirty(bio); + bio_release_pages(bio); bio_put(bio); bio = next; } @@ -606,7 +626,7 @@ void bio_check_pages_dirty(struct bio *b for (i = 0; i < bio->bi_vcnt; i++) { struct page *page = bvec[i].bv_page; - if (PageDirty(page)) { + if (PageDirty(page) || PageCompound(page)) { page_cache_release(page); bvec[i].bv_page = NULL; } else { diff -prauN linux-2.6.0-test5/fs/buffer.c wli-2.6.0-test5-bk12-25/fs/buffer.c --- linux-2.6.0-test5/fs/buffer.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/buffer.c 2003-09-29 13:42:28.000000000 -0700 @@ -46,7 +46,7 @@ static void invalidate_bh_lrus(void); /* * Hashed waitqueue_head's for wait_on_buffer() */ -#define BH_WAIT_TABLE_ORDER 7 +#define BH_WAIT_TABLE_ORDER 12 static struct bh_wait_queue_head { wait_queue_head_t wqh; } ____cacheline_aligned_in_smp bh_wait_queue_heads[1<b_bdev, b)); - set_bit(AS_EIO, &page->mapping->flags); + set_bit(AS_EIO, &page_mapping(page)->flags); clear_buffer_uptodate(bh); SetPageError(page); } @@ -790,7 +790,7 @@ void write_boundary_block(struct block_d void mark_buffer_dirty_inode(struct buffer_head *bh, struct inode *inode) { struct address_space *mapping = inode->i_mapping; - struct address_space *buffer_mapping = bh->b_page->mapping; + struct address_space *buffer_mapping = page_mapping(bh->b_page); mark_buffer_dirty(bh); if (!mapping->assoc_mapping) { @@ -835,19 +835,10 @@ EXPORT_SYMBOL(mark_buffer_dirty_inode); * * FIXME: may need to call ->reservepage here as well. That's rather up to the * address_space though. - * - * For now, we treat swapper_space specially. It doesn't use the normal - * block a_ops. */ -int __set_page_dirty_buffers(struct page *page) +int set_page_dirty_buffers(struct page *page) { - struct address_space * const mapping = page->mapping; - int ret = 0; - - if (mapping == NULL) { - SetPageDirty(page); - goto out; - } + struct address_space * const mapping = page_mapping(page); spin_lock(&mapping->private_lock); if (page_has_buffers(page)) { @@ -865,21 +856,19 @@ int __set_page_dirty_buffers(struct page spin_unlock(&mapping->private_lock); if (!TestSetPageDirty(page)) { - spin_lock(&mapping->page_lock); - if (page->mapping) { /* Race with truncate? */ + mapping_wrlock(&mapping->page_lock); + if (page_mapping(page)) { /* Race with truncate? */ if (!mapping->backing_dev_info->memory_backed) inc_page_state(nr_dirty); list_del(&page->list); list_add(&page->list, &mapping->dirty_pages); } - spin_unlock(&mapping->page_lock); + mapping_wrunlock(&mapping->page_lock); __mark_inode_dirty(mapping->host, I_DIRTY_PAGES); } - -out: - return ret; + return 0; } -EXPORT_SYMBOL(__set_page_dirty_buffers); +EXPORT_SYMBOL(set_page_dirty_buffers); /* * Write out and wait upon a list of buffers. @@ -1251,7 +1240,7 @@ __getblk_slow(struct block_device *bdev, * address_space's dirty_pages list and then attach the address_space's * inode to its superblock's dirty inode list. * - * mark_buffer_dirty() is atomic. It takes bh->b_page->mapping->private_lock, + * mark_buffer_dirty() is atomic. It takes page_mapping(bh->b_page)->private_lock, * mapping->page_lock and the global inode_lock. */ void mark_buffer_dirty(struct buffer_head *bh) @@ -1259,7 +1248,7 @@ void mark_buffer_dirty(struct buffer_hea if (!buffer_uptodate(bh)) buffer_error(); if (!buffer_dirty(bh) && !test_set_buffer_dirty(bh)) - __set_page_dirty_nobuffers(bh->b_page); + set_page_dirty_nobuffers(bh->b_page); } /* @@ -1287,7 +1276,7 @@ void __bforget(struct buffer_head *bh) { clear_buffer_dirty(bh); if (!list_empty(&bh->b_assoc_buffers)) { - struct address_space *buffer_mapping = bh->b_page->mapping; + struct address_space *buffer_mapping = page_mapping(bh->b_page); spin_lock(&buffer_mapping->private_lock); list_del_init(&bh->b_assoc_buffers); @@ -1574,7 +1563,7 @@ static inline void discard_buffer(struct */ int try_to_release_page(struct page *page, int gfp_mask) { - struct address_space * const mapping = page->mapping; + struct address_space * const mapping = page_mapping(page); if (!PageLocked(page)) BUG(); @@ -1640,7 +1629,7 @@ EXPORT_SYMBOL(block_invalidatepage); /* * We attach and possibly dirty the buffers atomically wrt - * __set_page_dirty_buffers() via private_lock. try_to_free_buffers + * set_page_dirty_buffers() via private_lock. try_to_free_buffers * is already excluded via the page lock. */ void create_empty_buffers(struct page *page, @@ -1657,7 +1646,7 @@ void create_empty_buffers(struct page *p } while (bh); tail->b_this_page = head; - spin_lock(&page->mapping->private_lock); + spin_lock(&page_mapping(page)->private_lock); if (PageUptodate(page) || PageDirty(page)) { bh = head; do { @@ -1669,7 +1658,7 @@ void create_empty_buffers(struct page *p } while (bh != head); } __set_page_buffers(page, head); - spin_unlock(&page->mapping->private_lock); + spin_unlock(&page_mapping(page)->private_lock); } EXPORT_SYMBOL(create_empty_buffers); @@ -1753,12 +1742,12 @@ static int __block_write_full_page(struc } /* - * Be very careful. We have no exclusion from __set_page_dirty_buffers + * Be very careful. We have no exclusion from set_page_dirty_buffers * here, and the (potentially unmapped) buffers may become dirty at * any time. If a buffer becomes dirty here after we've inspected it * then we just miss that fact, and the page stays dirty. * - * Buffers outside i_size may be dirtied by __set_page_dirty_buffers; + * Buffers outside i_size may be dirtied by set_page_dirty_buffers; * handle that here by just cleaning them. */ @@ -1809,7 +1798,7 @@ static int __block_write_full_page(struc lock_buffer(bh); } else { if (test_set_buffer_locked(bh)) { - __set_page_dirty_nobuffers(page); + set_page_dirty_nobuffers(page); continue; } } @@ -2062,7 +2051,7 @@ static int __block_commit_write(struct i */ int block_read_full_page(struct page *page, get_block_t *get_block) { - struct inode *inode = page->mapping->host; + struct inode *inode = page_mapping(page)->host; sector_t iblock, lblock; struct buffer_head *bh, *head, *arr[MAX_BUF_PER_PAGE]; unsigned int blocksize; @@ -2202,7 +2191,7 @@ out: int cont_prepare_write(struct page *page, unsigned offset, unsigned to, get_block_t *get_block, loff_t *bytes) { - struct address_space *mapping = page->mapping; + struct address_space *mapping = page_mapping(page); struct inode *inode = mapping->host; struct page *new_page; unsigned long pgpos; @@ -2284,7 +2273,7 @@ out: int block_prepare_write(struct page *page, unsigned from, unsigned to, get_block_t *get_block) { - struct inode *inode = page->mapping->host; + struct inode *inode = page_mapping(page)->host; int err = __block_prepare_write(inode, page, from, to, get_block); if (err) ClearPageUptodate(page); @@ -2293,7 +2282,7 @@ int block_prepare_write(struct page *pag int block_commit_write(struct page *page, unsigned from, unsigned to) { - struct inode *inode = page->mapping->host; + struct inode *inode = page_mapping(page)->host; __block_commit_write(inode,page,from,to); return 0; } @@ -2301,7 +2290,7 @@ int block_commit_write(struct page *page int generic_commit_write(struct file *file, struct page *page, unsigned from, unsigned to) { - struct inode *inode = page->mapping->host; + struct inode *inode = page_mapping(page)->host; loff_t pos = ((loff_t)page->index << PAGE_CACHE_SHIFT) + to; __block_commit_write(inode,page,from,to); /* @@ -2322,7 +2311,7 @@ int generic_commit_write(struct file *fi int nobh_prepare_write(struct page *page, unsigned from, unsigned to, get_block_t *get_block) { - struct inode *inode = page->mapping->host; + struct inode *inode = page_mapping(page)->host; const unsigned blkbits = inode->i_blkbits; const unsigned blocksize = 1 << blkbits; struct buffer_head map_bh; @@ -2456,7 +2445,7 @@ EXPORT_SYMBOL(nobh_prepare_write); int nobh_commit_write(struct file *file, struct page *page, unsigned from, unsigned to) { - struct inode *inode = page->mapping->host; + struct inode *inode = page_mapping(page)->host; loff_t pos = ((loff_t)page->index << PAGE_CACHE_SHIFT) + to; set_page_dirty(page); @@ -2590,7 +2579,7 @@ out: int block_write_full_page(struct page *page, get_block_t *get_block, struct writeback_control *wbc) { - struct inode * const inode = page->mapping->host; + struct inode * const inode = page_mapping(page)->host; loff_t i_size = i_size_read(inode); const unsigned long end_index = i_size >> PAGE_CACHE_SHIFT; unsigned offset; @@ -2769,9 +2758,9 @@ void sync_dirty_buffer(struct buffer_hea static void check_ttfb_buffer(struct page *page, struct buffer_head *bh) { if (!buffer_uptodate(bh) && !buffer_req(bh)) { - if (PageUptodate(page) && page->mapping + if (PageUptodate(page) && page_mapping(page) && buffer_mapped(bh) /* discard_buffer */ - && S_ISBLK(page->mapping->host->i_mode)) + && S_ISBLK(page_mapping(page)->host->i_mode)) { buffer_error(); } @@ -2793,7 +2782,7 @@ static void check_ttfb_buffer(struct pag * * The same applies to regular filesystem pages: if all the buffers are * clean then we set the page clean and proceed. To do that, we require - * total exclusion from __set_page_dirty_buffers(). That is obtained with + * total exclusion from set_page_dirty_buffers(). That is obtained with * private_lock. * * try_to_free_buffers() is non-blocking. @@ -2815,7 +2804,7 @@ drop_buffers(struct page *page, struct b do { check_ttfb_buffer(page, bh); if (buffer_write_io_error(bh)) - set_bit(AS_EIO, &page->mapping->flags); + set_bit(AS_EIO, &page_mapping(page)->flags); if (buffer_busy(bh)) goto failed; if (!buffer_uptodate(bh) && !buffer_req(bh)) @@ -2842,7 +2831,7 @@ failed: int try_to_free_buffers(struct page *page) { - struct address_space * const mapping = page->mapping; + struct address_space * const mapping = page_mapping(page); struct buffer_head *buffers_to_free = NULL; int ret = 0; diff -prauN linux-2.6.0-test5/fs/char_dev.c wli-2.6.0-test5-bk12-25/fs/char_dev.c --- linux-2.6.0-test5/fs/char_dev.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/char_dev.c 2003-09-25 19:16:05.000000000 -0700 @@ -445,3 +445,18 @@ void __init chrdev_init(void) kset_register(&kset_dynamic); cdev_map = kobj_map_init(base_probe, &cdev_subsys); } + + +/* Let modules do char dev stuff */ +EXPORT_SYMBOL(register_chrdev_region); +EXPORT_SYMBOL(unregister_chrdev_region); +EXPORT_SYMBOL(alloc_chrdev_region); +EXPORT_SYMBOL(cdev_init); +EXPORT_SYMBOL(cdev_alloc); +EXPORT_SYMBOL(cdev_get); +EXPORT_SYMBOL(cdev_put); +EXPORT_SYMBOL(cdev_del); +EXPORT_SYMBOL(cdev_add); +EXPORT_SYMBOL(cdev_unmap); +EXPORT_SYMBOL(register_chrdev); +EXPORT_SYMBOL(unregister_chrdev); diff -prauN linux-2.6.0-test5/fs/cifs/file.c wli-2.6.0-test5-bk12-25/fs/cifs/file.c --- linux-2.6.0-test5/fs/cifs/file.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/cifs/file.c 2003-09-28 23:04:07.000000000 -0700 @@ -471,14 +471,14 @@ cifs_write(struct file * file, const cha static int cifs_partialpagewrite(struct page *page,unsigned from, unsigned to) { - struct address_space *mapping = page->mapping; + struct address_space *mapping = page_mapping(page); loff_t offset = (loff_t)page->index << PAGE_CACHE_SHIFT; char * write_data; int rc = -EFAULT; int bytes_written = 0; struct cifs_sb_info *cifs_sb; struct cifsTconInfo *pTcon; - struct inode *inode = page->mapping->host; + struct inode *inode = page_mapping(page)->host; struct cifsInodeInfo *cifsInode; struct cifsFileInfo *open_file = NULL; struct list_head *tmp; @@ -597,7 +597,7 @@ cifs_commit_write(struct file *file, str { int xid; int rc = 0; - struct inode *inode = page->mapping->host; + struct inode *inode = page_mapping(page)->host; loff_t position = ((loff_t)page->index << PAGE_CACHE_SHIFT) + to; struct cifsFileInfo *open_file; struct cifs_sb_info *cifs_sb; @@ -651,7 +651,7 @@ cifs_sync_page(struct page *page) int rc = 0; cFYI(1,("sync page %p",page)); - mapping = page->mapping; + mapping = page_mapping(page); if (!mapping) return 0; inode = mapping->host; diff -prauN linux-2.6.0-test5/fs/coda/cache.c wli-2.6.0-test5-bk12-25/fs/coda/cache.c --- linux-2.6.0-test5/fs/coda/cache.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/coda/cache.c 2003-09-25 19:16:05.000000000 -0700 @@ -23,13 +23,16 @@ #include #include +static atomic_t permission_epoch = ATOMIC_INIT(0); + /* replace or extend an acl cache hit */ void coda_cache_enter(struct inode *inode, int mask) { struct coda_inode_info *cii = ITOC(inode); - if ( !coda_cred_ok(&cii->c_cached_cred) ) { - coda_load_creds(&cii->c_cached_cred); + cii->c_cached_epoch = atomic_read(&permission_epoch); + if (cii->c_uid != current->fsuid) { + cii->c_uid = current->fsuid; cii->c_cached_perm = mask; } else cii->c_cached_perm |= mask; @@ -42,22 +45,15 @@ void coda_cache_clear_inode(struct inode cii->c_cached_perm = 0; } -/* remove all acl caches for a principal (or all principals when cred == NULL)*/ -void coda_cache_clear_all(struct super_block *sb, struct coda_cred *cred) +/* remove all acl caches */ +void coda_cache_clear_all(struct super_block *sb) { struct coda_sb_info *sbi; - struct coda_inode_info *cii; - struct list_head *tmp; sbi = coda_sbp(sb); if (!sbi) BUG(); - list_for_each(tmp, &sbi->sbi_cihead) - { - cii = list_entry(tmp, struct coda_inode_info, c_cilist); - if (!cred || coda_cred_eq(cred, &cii->c_cached_cred)) - cii->c_cached_perm = 0; - } + atomic_inc(&permission_epoch); } @@ -67,8 +63,9 @@ int coda_cache_check(struct inode *inode struct coda_inode_info *cii = ITOC(inode); int hit; - hit = ((mask & cii->c_cached_perm) == mask) && - coda_cred_ok(&cii->c_cached_cred); + hit = (mask & cii->c_cached_perm) == mask && + cii->c_uid == current->fsuid && + cii->c_cached_epoch == atomic_read(&permission_epoch); return hit; } diff -prauN linux-2.6.0-test5/fs/coda/cnode.c wli-2.6.0-test5-bk12-25/fs/coda/cnode.c --- linux-2.6.0-test5/fs/coda/cnode.c 2003-09-08 12:50:20.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/coda/cnode.c 2003-09-25 19:16:05.000000000 -0700 @@ -11,18 +11,9 @@ #include #include -inline int coda_fideq(ViceFid *fid1, ViceFid *fid2) +inline int coda_fideq(struct CodaFid *fid1, struct CodaFid *fid2) { - if (fid1->Vnode != fid2->Vnode) return 0; - if (fid1->Volume != fid2->Volume) return 0; - if (fid1->Unique != fid2->Unique) return 0; - return 1; -} - -inline int coda_isnullfid(ViceFid *fid) -{ - if (fid->Vnode || fid->Volume || fid->Unique) return 0; - return 1; + return memcmp(fid1, fid2, sizeof(*fid1)) == 0; } static struct inode_operations coda_symlink_inode_operations = { @@ -47,18 +38,18 @@ static void coda_fill_inode(struct inode inode->i_data.a_ops = &coda_symlink_aops; inode->i_mapping = &inode->i_data; } else - init_special_inode(inode, inode->i_mode, attr->va_rdev); + init_special_inode(inode, inode->i_mode, huge_decode_dev(attr->va_rdev)); } static int coda_test_inode(struct inode *inode, void *data) { - ViceFid *fid = (ViceFid *)data; + struct CodaFid *fid = (struct CodaFid *)data; return coda_fideq(&(ITOC(inode)->c_fid), fid); } static int coda_set_inode(struct inode *inode, void *data) { - ViceFid *fid = (ViceFid *)data; + struct CodaFid *fid = (struct CodaFid *)data; ITOC(inode)->c_fid = *fid; return 0; } @@ -68,12 +59,11 @@ static int coda_fail_inode(struct inode return -1; } -struct inode * coda_iget(struct super_block * sb, ViceFid * fid, +struct inode * coda_iget(struct super_block * sb, struct CodaFid * fid, struct coda_vattr * attr) { struct inode *inode; struct coda_inode_info *cii; - struct coda_sb_info *sbi = coda_sbp(sb); unsigned long hash = coda_f2i(fid); inode = iget5_locked(sb, hash, coda_test_inode, coda_set_inode, fid); @@ -86,7 +76,6 @@ struct inode * coda_iget(struct super_bl /* we still need to set i_ino for things like stat(2) */ inode->i_ino = hash; cii->c_mapcount = 0; - list_add(&cii->c_cilist, &sbi->sbi_cihead); unlock_new_inode(inode); } @@ -101,7 +90,7 @@ struct inode * coda_iget(struct super_bl - link the two up if this is needed - fill in the attributes */ -int coda_cnode_make(struct inode **inode, ViceFid *fid, struct super_block *sb) +int coda_cnode_make(struct inode **inode, struct CodaFid *fid, struct super_block *sb) { struct coda_vattr attr; int error; @@ -122,8 +111,8 @@ int coda_cnode_make(struct inode **inode } -void coda_replace_fid(struct inode *inode, struct ViceFid *oldfid, - struct ViceFid *newfid) +void coda_replace_fid(struct inode *inode, struct CodaFid *oldfid, + struct CodaFid *newfid) { struct coda_inode_info *cii; unsigned long hash = coda_f2i(newfid); @@ -142,7 +131,7 @@ void coda_replace_fid(struct inode *inod } /* convert a fid to an inode. */ -struct inode *coda_fid_to_inode(ViceFid *fid, struct super_block *sb) +struct inode *coda_fid_to_inode(struct CodaFid *fid, struct super_block *sb) { struct inode *inode; unsigned long hash = coda_f2i(fid); diff -prauN linux-2.6.0-test5/fs/coda/coda_linux.c wli-2.6.0-test5-bk12-25/fs/coda/coda_linux.c --- linux-2.6.0-test5/fs/coda/coda_linux.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/coda/coda_linux.c 2003-09-25 19:16:05.000000000 -0700 @@ -25,10 +25,14 @@ int coda_fake_statfs; /* print a fid */ -char * coda_f2s(ViceFid *f) +char * coda_f2s(struct CodaFid *f) { static char s[60]; - sprintf(s, "(%-#lx.%-#lx.%-#lx)", f->Volume, f->Vnode, f->Unique); +#ifdef CODA_FS_OLD_API + sprintf(s, "(%08x.%08x.%08x)", f->opaque[0], f->opaque[1], f->opaque[2]); +#else + sprintf(s, "(%08x.%08x.%08x.%08x)", f->opaque[0], f->opaque[1], f->opaque[2], f->opaque[3]); +#endif return s; } @@ -45,30 +49,6 @@ int coda_isroot(struct inode *i) return ( i->i_sb->s_root->d_inode == i ); } -/* put the current process credentials in the cred */ -void coda_load_creds(struct coda_cred *cred) -{ - cred->cr_uid = (vuid_t) current->uid; - cred->cr_euid = (vuid_t) current->euid; - cred->cr_suid = (vuid_t) current->suid; - cred->cr_fsuid = (vuid_t) current->fsuid; - - cred->cr_groupid = (vgid_t) current->gid; - cred->cr_egid = (vgid_t) current->egid; - cred->cr_sgid = (vgid_t) current->sgid; - cred->cr_fsgid = (vgid_t) current->fsgid; -} - -int coda_cred_ok(struct coda_cred *cred) -{ - return(current->fsuid == cred->cr_fsuid); -} - -int coda_cred_eq(struct coda_cred *cred1, struct coda_cred *cred2) -{ - return (cred1->cr_fsuid == cred2->cr_fsuid); -} - unsigned short coda_flags_to_cflags(unsigned short flags) { unsigned short coda_flags = 0; @@ -215,58 +195,3 @@ void coda_iattr_to_vattr(struct iattr *i } } -void print_vattr(struct coda_vattr *attr) -{ - char *typestr; - - switch (attr->va_type) { - case C_VNON: - typestr = "C_VNON"; - break; - case C_VREG: - typestr = "C_VREG"; - break; - case C_VDIR: - typestr = "C_VDIR"; - break; - case C_VBLK: - typestr = "C_VBLK"; - break; - case C_VCHR: - typestr = "C_VCHR"; - break; - case C_VLNK: - typestr = "C_VLNK"; - break; - case C_VSOCK: - typestr = "C_VSCK"; - break; - case C_VFIFO: - typestr = "C_VFFO"; - break; - case C_VBAD: - typestr = "C_VBAD"; - break; - default: - typestr = "????"; - break; - } - - - printk("attr: type %s (%o) mode %o uid %d gid %d rdev %d\n", - typestr, (int)attr->va_type, (int)attr->va_mode, - (int)attr->va_uid, (int)attr->va_gid, (int)attr->va_rdev); - - printk(" fileid %d nlink %d size %d blocksize %d bytes %d\n", - (int)attr->va_fileid, (int)attr->va_nlink, - (int)attr->va_size, - (int)attr->va_blocksize,(int)attr->va_bytes); - printk(" gen %ld flags %ld\n", - attr->va_gen, attr->va_flags); - printk(" atime sec %d nsec %d\n", - (int)attr->va_atime.tv_sec, (int)attr->va_atime.tv_nsec); - printk(" mtime sec %d nsec %d\n", - (int)attr->va_mtime.tv_sec, (int)attr->va_mtime.tv_nsec); - printk(" ctime sec %d nsec %d\n", - (int)attr->va_ctime.tv_sec, (int)attr->va_ctime.tv_nsec); -} diff -prauN linux-2.6.0-test5/fs/coda/dir.c wli-2.6.0-test5-bk12-25/fs/coda/dir.c --- linux-2.6.0-test5/fs/coda/dir.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/coda/dir.c 2003-09-25 19:16:05.000000000 -0700 @@ -93,7 +93,7 @@ struct file_operations coda_dir_operatio static struct dentry *coda_lookup(struct inode *dir, struct dentry *entry, struct nameidata *nd) { struct inode *res_inode = NULL; - struct ViceFid resfid = {0,0,0}; + struct CodaFid resfid = { { 0, } }; int dropme = 0; /* to indicate entry should not be cached */ int type = 0; int error = 0; @@ -196,7 +196,7 @@ static int coda_create(struct inode *dir const char *name=de->d_name.name; int length=de->d_name.len; struct inode *inode; - struct ViceFid newfid; + struct CodaFid newfid; struct coda_vattr attrs; lock_kernel(); @@ -236,7 +236,7 @@ static int coda_mknod(struct inode *dir, const char *name=de->d_name.name; int length=de->d_name.len; struct inode *inode; - struct ViceFid newfid; + struct CodaFid newfid; struct coda_vattr attrs; if ( coda_hasmknod == 0 ) @@ -283,7 +283,7 @@ static int coda_mkdir(struct inode *dir, const char *name = de->d_name.name; int len = de->d_name.len; int error; - struct ViceFid newfid; + struct CodaFid newfid; lock_kernel(); coda_vfs_stat.mkdir++; @@ -588,8 +588,7 @@ static int coda_venus_readdir(struct fil break; } /* validate whether the directory file actually makes sense */ - if (vdir->d_reclen < vdir_size + vdir->d_namlen || - vdir->d_namlen > CODA_MAXNAMLEN) { + if (vdir->d_reclen < vdir_size + vdir->d_namlen) { printk("coda_venus_readdir: Invalid dir: %ld\n", filp->f_dentry->d_inode->i_ino); ret = -EBADF; diff -prauN linux-2.6.0-test5/fs/coda/file.c wli-2.6.0-test5-bk12-25/fs/coda/file.c --- linux-2.6.0-test5/fs/coda/file.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/coda/file.c 2003-09-25 19:16:05.000000000 -0700 @@ -136,7 +136,6 @@ int coda_open(struct inode *coda_inode, cfi->cfi_magic = CODA_MAGIC; cfi->cfi_mapcount = 0; cfi->cfi_container = host_file; - coda_load_creds(&cfi->cfi_cred); BUG_ON(coda_file->private_data != NULL); coda_file->private_data = cfi; @@ -176,7 +175,7 @@ int coda_flush(struct file *coda_file) coda_inode = coda_file->f_dentry->d_inode; err = venus_store(coda_inode->i_sb, coda_i2f(coda_inode), coda_flags, - &cfi->cfi_cred); + coda_file->f_uid); if (err == -EOPNOTSUPP) { use_coda_close = 1; @@ -214,7 +213,7 @@ int coda_release(struct inode *coda_inod if (use_coda_close) err = venus_close(coda_inode->i_sb, coda_i2f(coda_inode), - coda_flags, &cfi->cfi_cred); + coda_flags, coda_file->f_uid); host_inode = cfi->cfi_container->f_dentry->d_inode; cii = ITOC(coda_inode); diff -prauN linux-2.6.0-test5/fs/coda/inode.c wli-2.6.0-test5-bk12-25/fs/coda/inode.c --- linux-2.6.0-test5/fs/coda/inode.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/coda/inode.c 2003-09-25 19:16:05.000000000 -0700 @@ -44,10 +44,9 @@ static struct inode *coda_alloc_inode(st ei = (struct coda_inode_info *)kmem_cache_alloc(coda_inode_cachep, SLAB_KERNEL); if (!ei) return NULL; - memset(&ei->c_fid, 0, sizeof(struct ViceFid)); + memset(&ei->c_fid, 0, sizeof(struct CodaFid)); ei->c_flags = 0; - INIT_LIST_HEAD(&ei->c_cilist); - memset(&ei->c_cached_cred, 0, sizeof(struct coda_cred)); + ei->c_uid = 0; ei->c_cached_perm = 0; return &ei->vfs_inode; } @@ -139,7 +138,7 @@ static int coda_fill_super(struct super_ struct inode *root = 0; struct coda_sb_info *sbi = NULL; struct venus_comm *vc = NULL; - ViceFid fid; + struct CodaFid fid; int error; int idx; @@ -169,9 +168,7 @@ static int coda_fill_super(struct super_ vc->vc_sb = sb; - sbi->sbi_sb = sb; sbi->sbi_vcomm = vc; - INIT_LIST_HEAD(&sbi->sbi_cihead); sb->s_fs_info = sbi; sb->s_blocksize = 1024; /* XXXXX what do we put here?? */ @@ -218,7 +215,6 @@ static void coda_put_super(struct super_ sbi = coda_sbp(sb); sbi->sbi_vcomm->vc_sb = NULL; - list_del_init(&sbi->sbi_cihead); printk("Coda: Bye bye.\n"); kfree(sbi); @@ -226,9 +222,6 @@ static void coda_put_super(struct super_ static void coda_clear_inode(struct inode *inode) { - struct coda_inode_info *cii = ITOC(inode); - - list_del_init(&cii->c_cilist); coda_cache_clear_inode(inode); } diff -prauN linux-2.6.0-test5/fs/coda/psdev.c wli-2.6.0-test5-bk12-25/fs/coda/psdev.c --- linux-2.6.0-test5/fs/coda/psdev.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/coda/psdev.c 2003-09-25 19:16:05.000000000 -0700 @@ -61,7 +61,6 @@ unsigned long coda_timeout = 30; /* .. s struct venus_comm coda_comms[MAX_CODADEVS]; -kmem_cache_t *cii_cache, *cred_cache, *upc_cache; /* * Device operations @@ -126,13 +125,13 @@ static ssize_t coda_psdev_write(struct f } if ( nbytes < sizeof(struct coda_out_hdr) ) { - printk("coda_downcall opc %ld uniq %ld, not enough!\n", + printk("coda_downcall opc %d uniq %d, not enough!\n", hdr.opcode, hdr.unique); count = nbytes; goto out; } if ( nbytes > size ) { - printk("Coda: downcall opc %ld, uniq %ld, too much!", + printk("Coda: downcall opc %d, uniq %d, too much!", hdr.opcode, hdr.unique); nbytes = size; } @@ -171,7 +170,7 @@ static ssize_t coda_psdev_write(struct f unlock_kernel(); if (!req) { - printk("psdev_write: msg (%ld, %ld) not found\n", + printk("psdev_write: msg (%d, %d) not found\n", hdr.opcode, hdr.unique); retval = -ESRCH; goto out; @@ -179,7 +178,7 @@ static ssize_t coda_psdev_write(struct f /* move data into response buffer. */ if (req->uc_outSize < nbytes) { - printk("psdev_write: too much cnt: %d, cnt: %ld, opc: %ld, uniq: %ld.\n", + printk("psdev_write: too much cnt: %d, cnt: %ld, opc: %d, uniq: %d.\n", req->uc_outSize, (long)nbytes, hdr.opcode, hdr.unique); nbytes = req->uc_outSize; /* don't have more space! */ } @@ -325,10 +324,7 @@ static int coda_psdev_release(struct ino } /* Wakeup clients so they can return. */ - lh = vcp->vc_pending.next; - next = lh; - while ( (lh = next) != &vcp->vc_pending) { - next = lh->next; + list_for_each_safe(lh, next, &vcp->vc_pending) { req = list_entry(lh, struct upc_req, uc_chain); /* Async requests need to be freed here */ if (req->uc_flags & REQ_ASYNC) { @@ -340,9 +336,7 @@ static int coda_psdev_release(struct ino wake_up(&req->uc_sleep); } - lh = &vcp->vc_processing; - while ( (lh = lh->next) != &vcp->vc_processing) { - req = list_entry(lh, struct upc_req, uc_chain); + list_for_each_entry(req, &vcp->vc_processing, uc_chain) { req->uc_flags |= REQ_ABORT; wake_up(&req->uc_sleep); } @@ -390,7 +384,13 @@ static int __init init_coda(void) { int status; int i; - printk(KERN_INFO "Coda Kernel/Venus communications, v5.3.15, coda@cs.cmu.edu\n"); + printk(KERN_INFO "Coda Kernel/Venus communications, " +#ifdef CODA_FS_OLD_API + "v5.3.20" +#else + "v6.0.0" +#endif + ", coda@cs.cmu.edu\n"); status = coda_init_inodecache(); if (status) diff -prauN linux-2.6.0-test5/fs/coda/symlink.c wli-2.6.0-test5-bk12-25/fs/coda/symlink.c --- linux-2.6.0-test5/fs/coda/symlink.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/coda/symlink.c 2003-09-28 23:04:07.000000000 -0700 @@ -24,7 +24,7 @@ static int coda_symlink_filler(struct file *file, struct page *page) { - struct inode *inode = page->mapping->host; + struct inode *inode = page_mapping(page)->host; int error; struct coda_inode_info *cii; unsigned int len = PAGE_SIZE; diff -prauN linux-2.6.0-test5/fs/coda/upcall.c wli-2.6.0-test5-bk12-25/fs/coda/upcall.c --- linux-2.6.0-test5/fs/coda/upcall.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/coda/upcall.c 2003-09-25 19:16:05.000000000 -0700 @@ -54,9 +54,13 @@ static void *alloc_upcall(int opcode, in inp->ih.opcode = opcode; inp->ih.pid = current->pid; - inp->ih.pgid = current->pgrp; - coda_load_creds(&(inp->ih.cred)); - + inp->ih.pgid = process_group(current); +#ifdef CODA_FS_OLD_API + memset(&inp->ih.cred, 0, sizeof(struct coda_cred)); + inp->ih.cred.cr_fsuid = current->fsuid; +#else + inp->ih.uid = current->fsuid; +#endif return (void*)inp; } @@ -74,7 +78,7 @@ do {\ /* the upcalls */ -int venus_rootfid(struct super_block *sb, ViceFid *fidp) +int venus_rootfid(struct super_block *sb, struct CodaFid *fidp) { union inputArgs *inp; union outputArgs *outp; @@ -88,14 +92,14 @@ int venus_rootfid(struct super_block *sb if (error) { printk("coda_get_rootfid: error %d\n", error); } else { - *fidp = (ViceFid) outp->coda_root.VFid; + *fidp = outp->coda_root.VFid; } CODA_FREE(inp, insize); return error; } -int venus_getattr(struct super_block *sb, struct ViceFid *fid, +int venus_getattr(struct super_block *sb, struct CodaFid *fid, struct coda_vattr *attr) { union inputArgs *inp; @@ -114,7 +118,7 @@ int venus_getattr(struct super_block *sb return error; } -int venus_setattr(struct super_block *sb, struct ViceFid *fid, +int venus_setattr(struct super_block *sb, struct CodaFid *fid, struct coda_vattr *vattr) { union inputArgs *inp; @@ -133,9 +137,9 @@ int venus_setattr(struct super_block *sb return error; } -int venus_lookup(struct super_block *sb, struct ViceFid *fid, +int venus_lookup(struct super_block *sb, struct CodaFid *fid, const char *name, int length, int * type, - struct ViceFid *resfid) + struct CodaFid *resfid) { union inputArgs *inp; union outputArgs *outp; @@ -162,17 +166,25 @@ int venus_lookup(struct super_block *sb, return error; } -int venus_store(struct super_block *sb, struct ViceFid *fid, int flags, - struct coda_cred *cred) +int venus_store(struct super_block *sb, struct CodaFid *fid, int flags, + vuid_t uid) { union inputArgs *inp; union outputArgs *outp; int insize, outsize, error; +#ifdef CODA_FS_OLD_API + struct coda_cred cred = { 0, }; + cred.cr_fsuid = uid; +#endif insize = SIZE(store); UPARG(CODA_STORE); - memcpy(&(inp->ih.cred), cred, sizeof(*cred)); +#ifdef CODA_FS_OLD_API + memcpy(&(inp->ih.cred), &cred, sizeof(cred)); +#else + inp->ih.uid = uid; +#endif inp->coda_store.VFid = *fid; inp->coda_store.flags = flags; @@ -183,7 +195,7 @@ int venus_store(struct super_block *sb, return error; } -int venus_release(struct super_block *sb, struct ViceFid *fid, int flags) +int venus_release(struct super_block *sb, struct CodaFid *fid, int flags) { union inputArgs *inp; union outputArgs *outp; @@ -201,17 +213,25 @@ int venus_release(struct super_block *sb return error; } -int venus_close(struct super_block *sb, struct ViceFid *fid, int flags, - struct coda_cred *cred) +int venus_close(struct super_block *sb, struct CodaFid *fid, int flags, + vuid_t uid) { union inputArgs *inp; union outputArgs *outp; int insize, outsize, error; +#ifdef CODA_FS_OLD_API + struct coda_cred cred = { 0, }; + cred.cr_fsuid = uid; +#endif insize = SIZE(release); UPARG(CODA_CLOSE); - memcpy(&(inp->ih.cred), cred, sizeof(*cred)); +#ifdef CODA_FS_OLD_API + memcpy(&(inp->ih.cred), &cred, sizeof(cred)); +#else + inp->ih.uid = uid; +#endif inp->coda_close.VFid = *fid; inp->coda_close.flags = flags; @@ -222,7 +242,7 @@ int venus_close(struct super_block *sb, return error; } -int venus_open(struct super_block *sb, struct ViceFid *fid, +int venus_open(struct super_block *sb, struct CodaFid *fid, int flags, struct file **fh) { union inputArgs *inp; @@ -243,9 +263,9 @@ int venus_open(struct super_block *sb, s return error; } -int venus_mkdir(struct super_block *sb, struct ViceFid *dirfid, +int venus_mkdir(struct super_block *sb, struct CodaFid *dirfid, const char *name, int length, - struct ViceFid *newfid, struct coda_vattr *attrs) + struct CodaFid *newfid, struct coda_vattr *attrs) { union inputArgs *inp; union outputArgs *outp; @@ -273,8 +293,8 @@ int venus_mkdir(struct super_block *sb, } -int venus_rename(struct super_block *sb, struct ViceFid *old_fid, - struct ViceFid *new_fid, size_t old_length, +int venus_rename(struct super_block *sb, struct CodaFid *old_fid, + struct CodaFid *new_fid, size_t old_length, size_t new_length, const char *old_name, const char *new_name) { @@ -310,9 +330,9 @@ int venus_rename(struct super_block *sb, return error; } -int venus_create(struct super_block *sb, struct ViceFid *dirfid, +int venus_create(struct super_block *sb, struct CodaFid *dirfid, const char *name, int length, int excl, int mode, dev_t rdev, - struct ViceFid *newfid, struct coda_vattr *attrs) + struct CodaFid *newfid, struct coda_vattr *attrs) { union inputArgs *inp; union outputArgs *outp; @@ -325,7 +345,7 @@ int venus_create(struct super_block *sb, inp->coda_create.VFid = *dirfid; inp->coda_create.attr.va_mode = mode; - inp->coda_create.attr.va_rdev = rdev; + inp->coda_create.attr.va_rdev = huge_encode_dev(rdev); inp->coda_create.excl = excl; inp->coda_create.mode = mode; inp->coda_create.name = offset; @@ -343,7 +363,7 @@ int venus_create(struct super_block *sb, return error; } -int venus_rmdir(struct super_block *sb, struct ViceFid *dirfid, +int venus_rmdir(struct super_block *sb, struct CodaFid *dirfid, const char *name, int length) { union inputArgs *inp; @@ -366,7 +386,7 @@ int venus_rmdir(struct super_block *sb, return error; } -int venus_remove(struct super_block *sb, struct ViceFid *dirfid, +int venus_remove(struct super_block *sb, struct CodaFid *dirfid, const char *name, int length) { union inputArgs *inp; @@ -388,7 +408,7 @@ int venus_remove(struct super_block *sb, return error; } -int venus_readlink(struct super_block *sb, struct ViceFid *fid, +int venus_readlink(struct super_block *sb, struct CodaFid *fid, char *buffer, int *length) { union inputArgs *inp; @@ -421,8 +441,8 @@ int venus_readlink(struct super_block *s -int venus_link(struct super_block *sb, struct ViceFid *fid, - struct ViceFid *dirfid, const char *name, int len ) +int venus_link(struct super_block *sb, struct CodaFid *fid, + struct CodaFid *dirfid, const char *name, int len ) { union inputArgs *inp; union outputArgs *outp; @@ -447,7 +467,7 @@ int venus_link(struct super_block *sb, s return error; } -int venus_symlink(struct super_block *sb, struct ViceFid *fid, +int venus_symlink(struct super_block *sb, struct CodaFid *fid, const char *name, int len, const char *symname, int symlen) { @@ -482,7 +502,7 @@ int venus_symlink(struct super_block *sb return error; } -int venus_fsync(struct super_block *sb, struct ViceFid *fid) +int venus_fsync(struct super_block *sb, struct CodaFid *fid) { union inputArgs *inp; union outputArgs *outp; @@ -499,7 +519,7 @@ int venus_fsync(struct super_block *sb, return error; } -int venus_access(struct super_block *sb, struct ViceFid *fid, int mask) +int venus_access(struct super_block *sb, struct CodaFid *fid, int mask) { union inputArgs *inp; union outputArgs *outp; @@ -518,7 +538,7 @@ int venus_access(struct super_block *sb, } -int venus_pioctl(struct super_block *sb, struct ViceFid *fid, +int venus_pioctl(struct super_block *sb, struct CodaFid *fid, unsigned int cmd, struct PioctlData *data) { union inputArgs *inp; @@ -808,7 +828,7 @@ static int coda_upcall(struct coda_sb_in * The last allows Venus to replace local fids with global ones * during reintegration. * - * CODA_REPLACE -- replace one ViceFid with another throughout the name cache */ + * CODA_REPLACE -- replace one CodaFid with another throughout the name cache */ int coda_downcall(int opcode, union outputArgs * out, struct super_block *sb) { @@ -819,25 +839,20 @@ int coda_downcall(int opcode, union outp switch (opcode) { case CODA_FLUSH : { - coda_cache_clear_all(sb, NULL); + coda_cache_clear_all(sb); shrink_dcache_sb(sb); coda_flag_inode(sb->s_root->d_inode, C_FLUSH); return(0); } case CODA_PURGEUSER : { - struct coda_cred *cred = &out->coda_purgeuser.cred; - if ( !cred ) { - printk("PURGEUSER: null cred!\n"); - return 0; - } - coda_cache_clear_all(sb, cred); + coda_cache_clear_all(sb); return(0); } case CODA_ZAPDIR : { struct inode *inode; - ViceFid *fid = &out->coda_zapdir.CodaFid; + struct CodaFid *fid = &out->coda_zapdir.CodaFid; inode = coda_fid_to_inode(fid, sb); if (inode) { @@ -851,7 +866,7 @@ int coda_downcall(int opcode, union outp case CODA_ZAPFILE : { struct inode *inode; - struct ViceFid *fid = &out->coda_zapfile.CodaFid; + struct CodaFid *fid = &out->coda_zapfile.CodaFid; inode = coda_fid_to_inode(fid, sb); if ( inode ) { coda_flag_inode(inode, C_VATTR); @@ -862,7 +877,7 @@ int coda_downcall(int opcode, union outp case CODA_PURGEFID : { struct inode *inode; - ViceFid *fid = &out->coda_purgefid.CodaFid; + struct CodaFid *fid = &out->coda_purgefid.CodaFid; inode = coda_fid_to_inode(fid, sb); if ( inode ) { coda_flag_inode_children(inode, C_PURGE); @@ -878,8 +893,8 @@ int coda_downcall(int opcode, union outp case CODA_REPLACE : { struct inode *inode; - ViceFid *oldfid = &out->coda_replace.OldFid; - ViceFid *newfid = &out->coda_replace.NewFid; + struct CodaFid *oldfid = &out->coda_replace.OldFid; + struct CodaFid *newfid = &out->coda_replace.NewFid; inode = coda_fid_to_inode(oldfid, sb); if ( inode ) { coda_replace_fid(inode, oldfid, newfid); diff -prauN linux-2.6.0-test5/fs/compat.c wli-2.6.0-test5-bk12-25/fs/compat.c --- linux-2.6.0-test5/fs/compat.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/compat.c 2003-09-25 19:16:05.000000000 -0700 @@ -120,7 +120,12 @@ static int put_compat_statfs(struct comp __put_user(kbuf->f_namelen, &ubuf->f_namelen) || __put_user(kbuf->f_fsid.val[0], &ubuf->f_fsid.val[0]) || __put_user(kbuf->f_fsid.val[1], &ubuf->f_fsid.val[1]) || - __put_user(kbuf->f_frsize, &ubuf->f_frsize)) + __put_user(kbuf->f_frsize, &ubuf->f_frsize) || + __put_user(0, &ubuf->f_spare[0]) || + __put_user(0, &ubuf->f_spare[1]) || + __put_user(0, &ubuf->f_spare[2]) || + __put_user(0, &ubuf->f_spare[3]) || + __put_user(0, &ubuf->f_spare[4])) return -EFAULT; return 0; } diff -prauN linux-2.6.0-test5/fs/cramfs/inode.c wli-2.6.0-test5-bk12-25/fs/cramfs/inode.c --- linux-2.6.0-test5/fs/cramfs/inode.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/cramfs/inode.c 2003-09-28 23:04:07.000000000 -0700 @@ -402,7 +402,7 @@ static struct dentry * cramfs_lookup(str static int cramfs_readpage(struct file *file, struct page * page) { - struct inode *inode = page->mapping->host; + struct inode *inode = page_mapping(page)->host; u32 maxblock, bytes_filled; void *pgdata; diff -prauN linux-2.6.0-test5/fs/dcache.c wli-2.6.0-test5-bk12-25/fs/dcache.c --- linux-2.6.0-test5/fs/dcache.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/dcache.c 2003-09-25 19:16:05.000000000 -0700 @@ -82,7 +82,7 @@ static void d_free(struct dentry *dentry /* * Release the dentry's inode, using the filesystem * d_iput() operation if defined. - * Called with dcache_lock held, drops it. + * Called with dcache_lock and per dentry lock held, drops both. */ static inline void dentry_iput(struct dentry * dentry) { @@ -90,13 +90,16 @@ static inline void dentry_iput(struct de if (inode) { dentry->d_inode = NULL; list_del_init(&dentry->d_alias); + spin_unlock(&dentry->d_lock); spin_unlock(&dcache_lock); if (dentry->d_op && dentry->d_op->d_iput) dentry->d_op->d_iput(dentry, inode); else iput(inode); - } else + } else { + spin_unlock(&dentry->d_lock); spin_unlock(&dcache_lock); + } } /* @@ -177,9 +180,8 @@ kill_it: { dentry_stat.nr_unused--; } list_del(&dentry->d_child); - spin_unlock(&dentry->d_lock); dentry_stat.nr_dentry--; /* For d_free, below */ - /* drops the lock, at that point nobody can reach this dentry */ + /*drops the locks, at that point nobody can reach this dentry */ dentry_iput(dentry); parent = dentry->d_parent; d_free(dentry); @@ -341,7 +343,6 @@ static inline void prune_one_dentry(stru __d_drop(dentry); list_del(&dentry->d_child); - spin_unlock(&dentry->d_lock); dentry_stat.nr_dentry--; /* For d_free, below */ dentry_iput(dentry); parent = dentry->d_parent; @@ -1116,7 +1117,6 @@ void d_delete(struct dentry * dentry) spin_lock(&dcache_lock); spin_lock(&dentry->d_lock); if (atomic_read(&dentry->d_count) == 1) { - spin_unlock(&dentry->d_lock); dentry_iput(dentry); return; } diff -prauN linux-2.6.0-test5/fs/devfs/base.c wli-2.6.0-test5-bk12-25/fs/devfs/base.c --- linux-2.6.0-test5/fs/devfs/base.c 2003-09-08 12:49:54.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/devfs/base.c 2003-09-25 19:16:05.000000000 -0700 @@ -1334,7 +1334,7 @@ static int is_devfsd_or_child (struct fs struct task_struct *p = current; if (p == fs_info->devfsd_task) return (TRUE); - if (p->pgrp == fs_info->devfsd_pgrp) return (TRUE); + if (process_group(p) == fs_info->devfsd_pgrp) return (TRUE); read_lock(&tasklist_lock); for ( ; p != &init_task; p = p->real_parent) { @@ -2744,8 +2744,8 @@ static int devfsd_ioctl (struct inode *i } fs_info->devfsd_task = current; spin_unlock (&lock); - fs_info->devfsd_pgrp = (current->pgrp == current->pid) ? - current->pgrp : 0; + fs_info->devfsd_pgrp = (process_group(current) == current->pid) ? + process_group(current) : 0; fs_info->devfsd_file = file; fs_info->devfsd_info = kmalloc (sizeof *fs_info->devfsd_info, GFP_KERNEL); diff -prauN linux-2.6.0-test5/fs/efs/inode.c wli-2.6.0-test5-bk12-25/fs/efs/inode.c --- linux-2.6.0-test5/fs/efs/inode.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/efs/inode.c 2003-09-25 19:16:05.000000000 -0700 @@ -47,9 +47,11 @@ static inline void extent_copy(efs_exten return; } -void efs_read_inode(struct inode *inode) { +void efs_read_inode(struct inode *inode) +{ int i, inode_index; dev_t device; + u32 rdev; struct buffer_head *bh; struct efs_sb_info *sb = SUPER_INFO(inode->i_sb); struct efs_inode_info *in = INODE_INFO(inode); @@ -104,20 +106,15 @@ void efs_read_inode(struct inode *inode) inode->i_blocks = ((inode->i_size - 1) >> EFS_BLOCKSIZE_BITS) + 1; } - /* - * BUG: irix dev_t is 32-bits. linux dev_t is only 16-bits. - * - * apparently linux will change to 32-bit dev_t sometime during - * linux 2.3. - * - * as is, this code maps devices that can't be represented in - * 16-bits (ie major > 255 or minor > 255) to major = minor = 255. - * - * during 2.3 when 32-bit dev_t become available, we should test - * to see whether odev contains 65535. if this is the case then we - * should then do device = be32_to_cpu(efs_inode->di_u.di_dev.ndev). - */ - device = old_decode_dev(be16_to_cpu(efs_inode->di_u.di_dev.odev)); + rdev = be16_to_cpu(efs_inode->di_u.di_dev.odev); + if (rdev == 0xffff) { + rdev = be32_to_cpu(efs_inode->di_u.di_dev.ndev); + if (sysv_major(rdev) > 0xfff) + device = 0; + else + device = MKDEV(sysv_major(rdev), sysv_minor(rdev)); + } else + device = old_decode_dev(rdev); /* get the number of extents for this object */ in->numextents = be16_to_cpu(efs_inode->di_numextents); diff -prauN linux-2.6.0-test5/fs/efs/symlink.c wli-2.6.0-test5-bk12-25/fs/efs/symlink.c --- linux-2.6.0-test5/fs/efs/symlink.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/efs/symlink.c 2003-09-28 23:04:07.000000000 -0700 @@ -16,7 +16,7 @@ static int efs_symlink_readpage(struct f { char *link = kmap(page); struct buffer_head * bh; - struct inode * inode = page->mapping->host; + struct inode * inode = page_mapping(page)->host; efs_block_t size = inode->i_size; int err; diff -prauN linux-2.6.0-test5/fs/eventpoll.c wli-2.6.0-test5-bk12-25/fs/eventpoll.c --- linux-2.6.0-test5/fs/eventpoll.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/eventpoll.c 2003-09-25 19:16:05.000000000 -0700 @@ -288,8 +288,10 @@ static int ep_getfd(int *efd, struct ino static int ep_alloc_pages(char **pages, int numpages); static int ep_free_pages(char **pages, int numpages); static int ep_file_init(struct file *file, unsigned int hashbits); -static unsigned int ep_hash_index(struct eventpoll *ep, struct file *file, int fd); -static struct list_head *ep_hash_entry(struct eventpoll *ep, unsigned int index); +static unsigned int ep_hash_index(struct eventpoll *ep, struct file *file, + int fd); +static struct list_head *ep_hash_entry(struct eventpoll *ep, + unsigned int index); static int ep_init(struct eventpoll *ep, unsigned int hashbits); static void ep_free(struct eventpoll *ep); static struct epitem *ep_find(struct eventpoll *ep, struct file *file, int fd); @@ -299,7 +301,8 @@ static void ep_ptable_queue_proc(struct poll_table *pt); static int ep_insert(struct eventpoll *ep, struct epoll_event *event, struct file *tfile, int fd); -static int ep_modify(struct eventpoll *ep, struct epitem *epi, struct epoll_event *event); +static int ep_modify(struct eventpoll *ep, struct epitem *epi, + struct epoll_event *event); static void ep_unregister_pollwait(struct eventpoll *ep, struct epitem *epi); static int ep_unlink(struct eventpoll *ep, struct epitem *epi); static int ep_remove(struct eventpoll *ep, struct epitem *epi); @@ -309,11 +312,12 @@ static unsigned int ep_eventpoll_poll(st static int ep_collect_ready_items(struct eventpoll *ep, struct list_head *txlist, int maxevents); static int ep_send_events(struct eventpoll *ep, struct list_head *txlist, - struct epoll_event *events); + struct epoll_event __user *events); static void ep_reinject_items(struct eventpoll *ep, struct list_head *txlist); static int ep_events_transfer(struct eventpoll *ep, - struct epoll_event *events, int maxevents); -static int ep_poll(struct eventpoll *ep, struct epoll_event *events, + struct epoll_event __user *events, + int maxevents); +static int ep_poll(struct eventpoll *ep, struct epoll_event __user *events, int maxevents, long timeout); static int eventpollfs_delete_dentry(struct dentry *dentry); static struct inode *ep_eventpoll_inode(void); @@ -532,11 +536,13 @@ eexit_1: /* - * The following function implement the controller interface for the eventpoll - * file that enable the insertion/removal/change of file descriptors inside - * the interest set. It rapresents the kernel part of the user space epoll_ctl(2). + * The following function implements the controller interface for + * the eventpoll file that enables the insertion/removal/change of + * file descriptors inside the interest set. It represents + * the kernel part of the user space epoll_ctl(2). */ -asmlinkage long sys_epoll_ctl(int epfd, int op, int fd, struct epoll_event *event) +asmlinkage long +sys_epoll_ctl(int epfd, int op, int fd, struct epoll_event __user *event) { int error; struct file *file, *tfile; @@ -637,8 +643,8 @@ eexit_1: * Implement the event wait interface for the eventpoll file. It is the kernel * part of the user space epoll_wait(2). */ -asmlinkage long sys_epoll_wait(int epfd, struct epoll_event *events, int maxevents, - int timeout) +asmlinkage long sys_epoll_wait(int epfd, struct epoll_event __user *events, + int maxevents, int timeout) { int error; struct file *file; @@ -662,7 +668,7 @@ asmlinkage long sys_epoll_wait(int epfd, goto eexit_1; /* - * We have to check that the file structure underneath the file descriptor + * We have to check that the file structure underneath the fd * the user passed to us _is_ an eventpoll file. */ error = -EINVAL; @@ -1409,7 +1415,7 @@ static int ep_collect_ready_items(struct * because of the way poll() is traditionally implemented in Linux. */ static int ep_send_events(struct eventpoll *ep, struct list_head *txlist, - struct epoll_event *events) + struct epoll_event __user *events) { int eventcnt = 0, eventbuf = 0; unsigned int revents; @@ -1521,7 +1527,8 @@ static void ep_reinject_items(struct eve /* * Perform the transfer of events to user space. */ -static int ep_events_transfer(struct eventpoll *ep, struct epoll_event *events, int maxevents) +static int ep_events_transfer(struct eventpoll *ep, + struct epoll_event __user *events, int maxevents) { int eventcnt = 0; struct list_head txlist; @@ -1549,8 +1556,8 @@ static int ep_events_transfer(struct eve } -static int ep_poll(struct eventpoll *ep, struct epoll_event *events, int maxevents, - long timeout) +static int ep_poll(struct eventpoll *ep, struct epoll_event __user *events, + int maxevents, long timeout) { int res, eavail; unsigned long flags; diff -prauN linux-2.6.0-test5/fs/exec.c wli-2.6.0-test5-bk12-25/fs/exec.c --- linux-2.6.0-test5/fs/exec.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/exec.c 2003-09-29 00:40:22.000000000 -0700 @@ -44,7 +44,7 @@ #include #include #include -#include +#include #include #include @@ -56,7 +56,7 @@ int core_uses_pid; char core_pattern[65] = "core"; -/* The maximal length of core_pattern is also specified in sysctl.c */ +/* The maximal length of core_pattern is also specified in sysctl.c */ static struct linux_binfmt *formats; static rwlock_t binfmt_lock = RW_LOCK_UNLOCKED; @@ -185,15 +185,33 @@ static int count(char __user * __user * return i; } +static inline size_t exec_copy_from_user(struct page *page, + unsigned long offset, + const char __user *buf, + unsigned bytes) +{ + int left; + char *kaddr; + + kaddr = kmap_atomic(page, KM_USER0); + left = __copy_from_user(kaddr + offset, buf, bytes); + kunmap_atomic(kaddr, KM_USER0); + + if (left) { + kaddr = kmap(page); + left = __copy_from_user(kaddr + offset, buf, bytes); + kunmap(page); + } + return left; +} + /* * 'copy_strings()' copies argument/environment strings from user * memory to free pages in kernel mem. These are in a format ready * to be put directly into the top of new user memory. */ -int copy_strings(int argc,char __user * __user * argv, struct linux_binprm *bprm) +int copy_strings(int argc,char __user * __user * argv, struct linux_binprm *bprm) { - struct page *kmapped_page = NULL; - char *kaddr = NULL; int ret; while (argc-- > 0) { @@ -213,13 +231,14 @@ int copy_strings(int argc,char __user * } bprm->p -= len; - /* XXX: add architecture specific overflow check here. */ + /* XXX: add architecture specific overflow check here. */ pos = bprm->p; while (len > 0) { int i, new, err; int offset, bytes_to_copy; struct page *page; + char *kaddr = NULL; offset = pos % PAGE_SIZE; i = pos/PAGE_SIZE; @@ -235,22 +254,26 @@ int copy_strings(int argc,char __user * new = 1; } - if (page != kmapped_page) { - if (kmapped_page) - kunmap(kmapped_page); - kmapped_page = page; - kaddr = kmap(kmapped_page); - } + bytes_to_copy = PAGE_SIZE - offset; + + if ((new && offset) || bytes_to_copy > len) + kaddr = kmap_atomic(page, KM_USER0); + if (new && offset) memset(kaddr, 0, offset); - bytes_to_copy = PAGE_SIZE - offset; + if (bytes_to_copy > len) { bytes_to_copy = len; if (new) memset(kaddr+offset+len, 0, PAGE_SIZE-offset-len); } - err = copy_from_user(kaddr+offset, str, bytes_to_copy); + + if (kaddr) + kunmap_atomic(kaddr, KM_USER0); + + fault_in_pages_readable(str, bytes_to_copy); + err = exec_copy_from_user(page, offset, str, bytes_to_copy); if (err) { ret = -EFAULT; goto out; @@ -263,8 +286,6 @@ int copy_strings(int argc,char __user * } ret = 0; out: - if (kmapped_page) - kunmap(kmapped_page); return ret; } @@ -275,10 +296,10 @@ int copy_strings_kernel(int argc,char ** { int r; mm_segment_t oldfs = get_fs(); - set_fs(KERNEL_DS); + set_fs(KERNEL_DS); r = copy_strings(argc, (char __user * __user *)argv, bprm); set_fs(oldfs); - return r; + return r; } #ifdef CONFIG_MMU @@ -286,52 +307,48 @@ int copy_strings_kernel(int argc,char ** * This routine is used to map in a page into an address space: needed by * execve() for the initial stack and environment pages. * - * tsk->mmap_sem is held for writing. + * The caller should hold task->mm->mmap_sem for writing. */ -void put_dirty_page(struct task_struct *tsk, struct page *page, - unsigned long address, pgprot_t prot) +void put_dirty_page(task_t *task, struct vm_area_struct *vma, + struct page *page, unsigned long address, pgprot_t prot) { - pgd_t * pgd; - pmd_t * pmd; - pte_t * pte; - struct pte_chain *pte_chain; + struct mm_struct *mm = task->mm; + pgd_t *pgd; + pmd_t *pmd; + pte_t *pte; if (page_count(page) != 1) printk(KERN_ERR "mem_map disagrees with %p at %08lx\n", page, address); - pgd = pgd_offset(tsk->mm, address); - pte_chain = pte_chain_alloc(GFP_KERNEL); - if (!pte_chain) - goto out_sig; - spin_lock(&tsk->mm->page_table_lock); - pmd = pmd_alloc(tsk->mm, pgd, address); + pgd = pgd_offset(mm, address); + spin_lock(&mm->page_table_lock); + pmd = pmd_alloc_map(mm, pgd, address); if (!pmd) goto out; - pte = pte_alloc_map(tsk->mm, pmd, address); + pte = pte_alloc_map(mm, pgd, &pmd, address); if (!pte) goto out; if (!pte_none(*pte)) { pte_unmap(pte); + pmd_unmap(pmd); goto out; } + mm->rss++; lru_cache_add_active(page); flush_dcache_page(page); - set_pte(pte, pte_mkdirty(pte_mkwrite(mk_pte(page, prot)))); - pte_chain = page_add_rmap(page, pte, pte_chain); + vm_set_pte(vma, pte, pte_mkdirty(pte_mkwrite(mk_pte(page, prot))), address); + page_add_rmap(page, vma, address, 1); pte_unmap(pte); - tsk->mm->rss++; - spin_unlock(&tsk->mm->page_table_lock); + pmd_unmap(pmd); + spin_unlock(&mm->page_table_lock); /* no need for flush_tlb */ - pte_chain_free(pte_chain); return; out: - spin_unlock(&tsk->mm->page_table_lock); -out_sig: + spin_unlock(&mm->page_table_lock); __free_page(page); - force_sig(SIGKILL, tsk); - pte_chain_free(pte_chain); + force_sig(SIGKILL, task); return; } @@ -374,7 +391,13 @@ int setup_arg_pages(struct linux_binprm /* Adjust bprm->p to point to the end of the strings. */ bprm->p = PAGE_SIZE * i - offset; - stack_base = STACK_TOP - current->rlim[RLIMIT_STACK].rlim_max; + + /* Limit stack size to 1GB */ + stack_base = current->rlim[RLIMIT_STACK].rlim_max; + if (stack_base > (1 << 30)) + stack_base = 1 << 30; + stack_base = PAGE_ALIGN(STACK_TOP - stack_base); + mm->arg_start = stack_base; arg_size = i << PAGE_SHIFT; @@ -421,13 +444,13 @@ int setup_arg_pages(struct linux_binprm mpnt->vm_private_data = (void *) 0; insert_vm_struct(mm, mpnt); mm->total_vm = (mpnt->vm_end - mpnt->vm_start) >> PAGE_SHIFT; - } + } for (i = 0 ; i < MAX_ARG_PAGES ; i++) { struct page *page = bprm->page[i]; if (page) { bprm->page[i] = NULL; - put_dirty_page(current, page, stack_base, + put_dirty_page(current, mpnt, page, stack_base, mpnt->vm_page_prot); } stack_base += PAGE_SIZE; @@ -803,7 +826,7 @@ int flush_old_exec(struct linux_binprm * /* An exec changes our domain. We are no longer part of the thread group */ - + current->self_exec_id++; flush_signal_handlers(current, 0); @@ -887,7 +910,7 @@ int prepare_binprm(struct linux_binprm * * */ -void compute_creds(struct linux_binprm *bprm) +void compute_creds(struct linux_binprm *bprm) { task_lock(current); if (bprm->e_uid != current->uid || bprm->e_gid != current->gid) { @@ -1052,7 +1075,7 @@ int do_execve(char * filename, return retval; bprm.p = PAGE_SIZE*MAX_ARG_PAGES-sizeof(void *); - memset(bprm.page, 0, MAX_ARG_PAGES*sizeof(bprm.page[0])); + memset(bprm.page, 0, MAX_ARG_PAGES*sizeof(bprm.page[0])); bprm.file = file; bprm.filename = filename; @@ -1083,21 +1106,21 @@ int do_execve(char * filename, goto out; retval = prepare_binprm(&bprm); - if (retval < 0) - goto out; + if (retval < 0) + goto out; retval = copy_strings_kernel(1, &bprm.filename, &bprm); - if (retval < 0) - goto out; + if (retval < 0) + goto out; bprm.exec = bprm.p; retval = copy_strings(bprm.envc, envp, &bprm); - if (retval < 0) - goto out; + if (retval < 0) + goto out; retval = copy_strings(bprm.argc, argv, &bprm); - if (retval < 0) - goto out; + if (retval < 0) + goto out; retval = search_binary_handler(&bprm,regs); if (retval >= 0) { diff -prauN linux-2.6.0-test5/fs/ext2/dir.c wli-2.6.0-test5-bk12-25/fs/ext2/dir.c --- linux-2.6.0-test5/fs/ext2/dir.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/ext2/dir.c 2003-09-28 23:04:07.000000000 -0700 @@ -64,10 +64,10 @@ ext2_last_byte(struct inode *inode, unsi static int ext2_commit_chunk(struct page *page, unsigned from, unsigned to) { - struct inode *dir = page->mapping->host; + struct inode *dir = page_mapping(page)->host; int err = 0; dir->i_version++; - page->mapping->a_ops->commit_write(NULL, page, from, to); + page_mapping(page)->a_ops->commit_write(NULL, page, from, to); if (IS_DIRSYNC(dir)) err = write_one_page(page, 1); else @@ -77,7 +77,7 @@ static int ext2_commit_chunk(struct page static void ext2_check_page(struct page *page) { - struct inode *dir = page->mapping->host; + struct inode *dir = page_mapping(page)->host; struct super_block *sb = dir->i_sb; unsigned chunk_size = ext2_chunk_size(dir); char *kaddr = page_address(page); @@ -412,7 +412,7 @@ void ext2_set_link(struct inode *dir, st int err; lock_page(page); - err = page->mapping->a_ops->prepare_write(NULL, page, from, to); + err = page_mapping(page)->a_ops->prepare_write(NULL, page, from, to); if (err) BUG(); de->inode = cpu_to_le32(inode->i_ino); @@ -495,7 +495,7 @@ int ext2_add_link (struct dentry *dentry got_it: from = (char*)de - (char*)page_address(page); to = from + rec_len; - err = page->mapping->a_ops->prepare_write(NULL, page, from, to); + err = page_mapping(page)->a_ops->prepare_write(NULL, page, from, to); if (err) goto out_unlock; if (de->inode) { @@ -528,7 +528,7 @@ out_unlock: */ int ext2_delete_entry (struct ext2_dir_entry_2 * dir, struct page * page ) { - struct address_space *mapping = page->mapping; + struct address_space *mapping = page_mapping(page); struct inode *inode = mapping->host; char *kaddr = page_address(page); unsigned from = ((char*)dir - kaddr) & ~(ext2_chunk_size(inode)-1); diff -prauN linux-2.6.0-test5/fs/ext2/inode.c wli-2.6.0-test5-bk12-25/fs/ext2/inode.c --- linux-2.6.0-test5/fs/ext2/inode.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/ext2/inode.c 2003-09-25 19:16:06.000000000 -0700 @@ -1126,8 +1126,12 @@ void ext2_read_inode (struct inode * ino } } else { inode->i_op = &ext2_special_inode_operations; - init_special_inode(inode, inode->i_mode, + if (raw_inode->i_block[0]) + init_special_inode(inode, inode->i_mode, old_decode_dev(le32_to_cpu(raw_inode->i_block[0]))); + else + init_special_inode(inode, inode->i_mode, + new_decode_dev(le32_to_cpu(raw_inode->i_block[1]))); } brelse (bh); ext2_set_inode_flags(inode); @@ -1215,9 +1219,17 @@ static int ext2_update_inode(struct inod } raw_inode->i_generation = cpu_to_le32(inode->i_generation); - if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode)) - raw_inode->i_block[0] = cpu_to_le32(old_encode_dev(inode->i_rdev)); - else for (n = 0; n < EXT2_N_BLOCKS; n++) + if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode)) { + if (old_valid_dev(inode->i_rdev)) { + raw_inode->i_block[0] = + cpu_to_le32(old_encode_dev(inode->i_rdev)); + raw_inode->i_block[1] = 0; + } else { + raw_inode->i_block[0] = 0; + raw_inode->i_block[1] = + cpu_to_le32(new_encode_dev(inode->i_rdev)); + } + } else for (n = 0; n < EXT2_N_BLOCKS; n++) raw_inode->i_block[n] = ei->i_data[n]; mark_buffer_dirty(bh); if (do_sync) { diff -prauN linux-2.6.0-test5/fs/ext2/namei.c wli-2.6.0-test5-bk12-25/fs/ext2/namei.c --- linux-2.6.0-test5/fs/ext2/namei.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/ext2/namei.c 2003-09-25 19:16:06.000000000 -0700 @@ -142,7 +142,7 @@ static int ext2_mknod (struct inode * di struct inode * inode; int err; - if (!old_valid_dev(rdev)) + if (!new_valid_dev(rdev)) return -EINVAL; inode = ext2_new_inode (dir, mode); diff -prauN linux-2.6.0-test5/fs/ext2/symlink.c wli-2.6.0-test5-bk12-25/fs/ext2/symlink.c --- linux-2.6.0-test5/fs/ext2/symlink.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/ext2/symlink.c 2003-09-25 19:16:06.000000000 -0700 @@ -20,7 +20,8 @@ #include "ext2.h" #include "xattr.h" -static int ext2_readlink(struct dentry *dentry, char *buffer, int buflen) +static int +ext2_readlink(struct dentry *dentry, char __user *buffer, int buflen) { struct ext2_inode_info *ei = EXT2_I(dentry->d_inode); return vfs_readlink(dentry, buffer, buflen, (char *)ei->i_data); diff -prauN linux-2.6.0-test5/fs/ext3/inode.c wli-2.6.0-test5-bk12-25/fs/ext3/inode.c --- linux-2.6.0-test5/fs/ext3/inode.c 2003-09-08 12:50:13.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/ext3/inode.c 2003-09-28 23:16:30.000000000 -0700 @@ -1083,7 +1083,7 @@ static int do_journal_get_write_access(h static int ext3_prepare_write(struct file *file, struct page *page, unsigned from, unsigned to) { - struct inode *inode = page->mapping->host; + struct inode *inode = page_mapping(page)->host; int ret, needed_blocks = ext3_writepage_trans_blocks(inode); handle_t *handle; @@ -1138,7 +1138,7 @@ static int ext3_ordered_commit_write(str unsigned from, unsigned to) { handle_t *handle = ext3_journal_current_handle(); - struct inode *inode = page->mapping->host; + struct inode *inode = page_mapping(page)->host; int ret = 0, ret2; ret = walk_page_buffers(handle, page_buffers(page), @@ -1167,7 +1167,7 @@ static int ext3_writeback_commit_write(s unsigned from, unsigned to) { handle_t *handle = ext3_journal_current_handle(); - struct inode *inode = page->mapping->host; + struct inode *inode = page_mapping(page)->host; int ret = 0, ret2; loff_t new_i_size; @@ -1185,7 +1185,7 @@ static int ext3_journalled_commit_write( struct page *page, unsigned from, unsigned to) { handle_t *handle = ext3_journal_current_handle(); - struct inode *inode = page->mapping->host; + struct inode *inode = page_mapping(page)->host; int ret = 0, ret2; int partial = 0; loff_t pos; @@ -1340,7 +1340,7 @@ static int journal_dirty_data_fn(handle_ static int ext3_ordered_writepage(struct page *page, struct writeback_control *wbc) { - struct inode *inode = page->mapping->host; + struct inode *inode = page_mapping(page)->host; struct buffer_head *page_bufs; handle_t *handle = NULL; int ret = 0; @@ -1400,7 +1400,7 @@ static int ext3_ordered_writepage(struct return ret; out_fail: - __set_page_dirty_nobuffers(page); + set_page_dirty_nobuffers(page); unlock_page(page); return ret; } @@ -1408,7 +1408,7 @@ out_fail: static int ext3_writeback_writepage(struct page *page, struct writeback_control *wbc) { - struct inode *inode = page->mapping->host; + struct inode *inode = page_mapping(page)->host; handle_t *handle = NULL; int ret = 0; int err; @@ -1429,7 +1429,7 @@ static int ext3_writeback_writepage(stru return ret; out_fail: - __set_page_dirty_nobuffers(page); + set_page_dirty_nobuffers(page); unlock_page(page); return ret; } @@ -1437,7 +1437,7 @@ out_fail: static int ext3_journalled_writepage(struct page *page, struct writeback_control *wbc) { - struct inode *inode = page->mapping->host; + struct inode *inode = page_mapping(page)->host; handle_t *handle = NULL; int ret = 0; int err; @@ -1485,7 +1485,7 @@ out: return ret; no_write: - __set_page_dirty_nobuffers(page); + set_page_dirty_nobuffers(page); out_unlock: unlock_page(page); goto out; @@ -1505,7 +1505,7 @@ ext3_readpages(struct file *file, struct static int ext3_invalidatepage(struct page *page, unsigned long offset) { - journal_t *journal = EXT3_JOURNAL(page->mapping->host); + journal_t *journal = EXT3_JOURNAL(page_mapping(page)->host); /* * If it's a full truncate we just forget about the pending dirtying @@ -1518,7 +1518,7 @@ static int ext3_invalidatepage(struct pa static int ext3_releasepage(struct page *page, int wait) { - journal_t *journal = EXT3_JOURNAL(page->mapping->host); + journal_t *journal = EXT3_JOURNAL(page_mapping(page)->host); WARN_ON(PageChecked(page)); return journal_try_to_free_buffers(journal, page, wait); @@ -1605,7 +1605,7 @@ out: static int ext3_journalled_set_page_dirty(struct page *page) { SetPageChecked(page); - return __set_page_dirty_nobuffers(page); + return set_page_dirty_nobuffers(page); } static struct address_space_operations ext3_ordered_aops = { @@ -2565,8 +2565,12 @@ void ext3_read_inode(struct inode * inod } } else { inode->i_op = &ext3_special_inode_operations; - init_special_inode(inode, inode->i_mode, + if (raw_inode->i_block[0]) + init_special_inode(inode, inode->i_mode, old_decode_dev(le32_to_cpu(raw_inode->i_block[0]))); + else + init_special_inode(inode, inode->i_mode, + new_decode_dev(le32_to_cpu(raw_inode->i_block[1]))); } brelse (iloc.bh); ext3_set_inode_flags(inode); @@ -2666,10 +2670,17 @@ static int ext3_do_update_inode(handle_t } } raw_inode->i_generation = cpu_to_le32(inode->i_generation); - if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode)) - raw_inode->i_block[0] = - cpu_to_le32(old_encode_dev(inode->i_rdev)); - else for (block = 0; block < EXT3_N_BLOCKS; block++) + if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode)) { + if (old_valid_dev(inode->i_rdev)) { + raw_inode->i_block[0] = + cpu_to_le32(old_encode_dev(inode->i_rdev)); + raw_inode->i_block[1] = 0; + } else { + raw_inode->i_block[0] = 0; + raw_inode->i_block[1] = + cpu_to_le32(new_encode_dev(inode->i_rdev)); + } + } else for (block = 0; block < EXT3_N_BLOCKS; block++) raw_inode->i_block[block] = ei->i_data[block]; BUFFER_TRACE(bh, "call ext3_journal_dirty_metadata"); diff -prauN linux-2.6.0-test5/fs/ext3/namei.c wli-2.6.0-test5-bk12-25/fs/ext3/namei.c --- linux-2.6.0-test5/fs/ext3/namei.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/ext3/namei.c 2003-09-25 19:16:06.000000000 -0700 @@ -1659,7 +1659,7 @@ static int ext3_mknod (struct inode * di struct inode *inode; int err; - if (!old_valid_dev(rdev)) + if (!new_valid_dev(rdev)) return -EINVAL; handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS + diff -prauN linux-2.6.0-test5/fs/ext3/super.c wli-2.6.0-test5-bk12-25/fs/ext3/super.c --- linux-2.6.0-test5/fs/ext3/super.c 2003-09-08 12:50:27.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/ext3/super.c 2003-09-25 19:16:06.000000000 -0700 @@ -34,10 +34,6 @@ #include "xattr.h" #include "acl.h" -#ifdef CONFIG_JBD_DEBUG -static int ext3_ro_after; /* Make fs read-only after this many jiffies */ -#endif - static int ext3_load_journal(struct super_block *, struct ext3_super_block *); static int ext3_create_journal(struct super_block *, struct ext3_super_block *, int); @@ -50,64 +46,6 @@ static void ext3_clear_journal_err(struc struct ext3_super_block * es); static int ext3_sync_fs(struct super_block *sb, int wait); -#ifdef CONFIG_JBD_DEBUG -int journal_no_write[2]; - -/* - * Debug code for turning filesystems "read-only" after a specified - * amount of time. This is for crash/recovery testing. - */ - -static void make_rdonly(struct block_device *bdev, int *no_write) -{ - char b[BDEVNAME_SIZE]; - - if (bdev) { - printk(KERN_WARNING "Turning device %s read-only\n", - bdevname(bdev, b)); - *no_write = 0xdead0000 + bdev->bd_dev; - } -} - -static void turn_fs_readonly(unsigned long arg) -{ - struct super_block *sb = (struct super_block *)arg; - - make_rdonly(sb->s_bdev, &journal_no_write[0]); - make_rdonly(EXT3_SB(sb)->s_journal->j_dev, &journal_no_write[1]); - wake_up(&EXT3_SB(sb)->ro_wait_queue); -} - -static void setup_ro_after(struct super_block *sb) -{ - struct ext3_sb_info *sbi = EXT3_SB(sb); - init_timer(&sbi->turn_ro_timer); - if (ext3_ro_after) { - printk(KERN_DEBUG "fs will go read-only in %d jiffies\n", - ext3_ro_after); - init_waitqueue_head(&sbi->ro_wait_queue); - journal_no_write[0] = 0; - journal_no_write[1] = 0; - sbi->turn_ro_timer.function = turn_fs_readonly; - sbi->turn_ro_timer.data = (unsigned long)sb; - sbi->turn_ro_timer.expires = jiffies + ext3_ro_after; - ext3_ro_after = 0; - add_timer(&sbi->turn_ro_timer); - } -} - -static void clear_ro_after(struct super_block *sb) -{ - del_timer_sync(&EXT3_SB(sb)->turn_ro_timer); - journal_no_write[0] = 0; - journal_no_write[1] = 0; - ext3_ro_after = 0; -} -#else -#define setup_ro_after(sb) do {} while (0) -#define clear_ro_after(sb) do {} while (0) -#endif - /* * Wrappers for journal_start/end. * @@ -481,7 +419,6 @@ void ext3_put_super (struct super_block invalidate_bdev(sbi->journal_bdev, 0); ext3_blkdev_remove(sbi); } - clear_ro_after(sb); sb->s_fs_info = NULL; kfree(sbi); return; @@ -741,14 +678,6 @@ static int parse_options (char * options set_opt (sbi->s_mount_opt, OLDALLOC); else if (!strcmp (this_char, "orlov")) clear_opt (sbi->s_mount_opt, OLDALLOC); -#ifdef CONFIG_JBD_DEBUG - else if (!strcmp (this_char, "ro-after")) { - unsigned long v; - if (want_numeric(value, "ro-after", &v)) - return 0; - ext3_ro_after = v; - } -#endif /* Silently ignore the quota options */ else if (!strcmp (this_char, "grpquota") || !strcmp (this_char, "noquota") @@ -892,7 +821,6 @@ static int ext3_setup_super(struct super ext3_check_inodes_bitmap (sb); } #endif - setup_ro_after(sb); return res; } @@ -1092,9 +1020,6 @@ static int ext3_fill_super (struct super int i; int needs_recovery; -#ifdef CONFIG_JBD_DEBUG - ext3_ro_after = 0; -#endif sbi = kmalloc(sizeof(*sbi), GFP_KERNEL); if (!sbi) return -ENOMEM; @@ -1103,7 +1028,6 @@ static int ext3_fill_super (struct super sbi->s_mount_opt = 0; sbi->s_resuid = EXT3_DEF_RESUID; sbi->s_resgid = EXT3_DEF_RESGID; - setup_ro_after(sb); blocksize = sb_min_blocksize(sb, EXT3_MIN_BLOCK_SIZE); if (!blocksize) { @@ -1603,7 +1527,7 @@ static int ext3_load_journal(struct supe { journal_t *journal; int journal_inum = le32_to_cpu(es->s_journal_inum); - dev_t journal_dev = old_decode_dev(le32_to_cpu(es->s_journal_dev)); + dev_t journal_dev = new_decode_dev(le32_to_cpu(es->s_journal_dev)); int err = 0; int really_read_only; @@ -1868,8 +1792,6 @@ int ext3_remount (struct super_block * s struct ext3_sb_info *sbi = EXT3_SB(sb); unsigned long tmp; - clear_ro_after(sb); - /* * Allow the "check" option to be passed as a remount option. */ @@ -1929,7 +1851,6 @@ int ext3_remount (struct super_block * s sb->s_flags &= ~MS_RDONLY; } } - setup_ro_after(sb); return 0; } diff -prauN linux-2.6.0-test5/fs/fat/file.c wli-2.6.0-test5-bk12-25/fs/fat/file.c --- linux-2.6.0-test5/fs/fat/file.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/fat/file.c 2003-09-25 19:16:06.000000000 -0700 @@ -11,8 +11,8 @@ #include #include -static ssize_t fat_file_write(struct file *filp, const char *buf, size_t count, - loff_t *ppos); +static ssize_t fat_file_write(struct file *filp, const char __user *buf, + size_t count, loff_t *ppos); struct file_operations fat_file_operations = { .llseek = generic_file_llseek, @@ -66,8 +66,8 @@ int fat_get_block(struct inode *inode, s return 0; } -static ssize_t fat_file_write(struct file *filp, const char *buf, size_t count, - loff_t *ppos) +static ssize_t fat_file_write(struct file *filp, const char __user *buf, + size_t count, loff_t *ppos) { struct inode *inode = filp->f_dentry->d_inode; int retval; diff -prauN linux-2.6.0-test5/fs/fat/inode.c wli-2.6.0-test5-bk12-25/fs/fat/inode.c --- linux-2.6.0-test5/fs/fat/inode.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/fat/inode.c 2003-09-28 23:04:07.000000000 -0700 @@ -1063,7 +1063,7 @@ fat_prepare_write(struct file *file, str { kmap(page); return cont_prepare_write(page,from,to,fat_get_block, - &MSDOS_I(page->mapping->host)->mmu_private); + &MSDOS_I(page_mapping(page)->host)->mmu_private); } static int diff -prauN linux-2.6.0-test5/fs/freevxfs/vxfs_immed.c wli-2.6.0-test5-bk12-25/fs/freevxfs/vxfs_immed.c --- linux-2.6.0-test5/fs/freevxfs/vxfs_immed.c 2003-09-08 12:50:13.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/freevxfs/vxfs_immed.c 2003-09-28 23:04:07.000000000 -0700 @@ -122,7 +122,7 @@ vxfs_immed_follow_link(struct dentry *dp static int vxfs_immed_readpage(struct file *fp, struct page *pp) { - struct vxfs_inode_info *vip = VXFS_INO(pp->mapping->host); + struct vxfs_inode_info *vip = VXFS_INO(page_mapping(pp)->host); u_int64_t offset = pp->index << PAGE_CACHE_SHIFT; caddr_t kaddr; diff -prauN linux-2.6.0-test5/fs/fs-writeback.c wli-2.6.0-test5-bk12-25/fs/fs-writeback.c --- linux-2.6.0-test5/fs/fs-writeback.c 2003-09-08 12:50:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/fs-writeback.c 2003-09-28 21:59:32.000000000 -0700 @@ -150,10 +150,10 @@ __sync_single_inode(struct inode *inode, * read speculatively by this cpu before &= ~I_DIRTY -- mikulas */ - spin_lock(&mapping->page_lock); + mapping_wrlock(&mapping->page_lock); if (wait || !wbc->for_kupdate || list_empty(&mapping->io_pages)) list_splice_init(&mapping->dirty_pages, &mapping->io_pages); - spin_unlock(&mapping->page_lock); + mapping_wrunlock(&mapping->page_lock); spin_unlock(&inode_lock); do_writepages(mapping, wbc); diff -prauN linux-2.6.0-test5/fs/hfs/inode.c wli-2.6.0-test5-bk12-25/fs/hfs/inode.c --- linux-2.6.0-test5/fs/hfs/inode.c 2003-09-08 12:50:42.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/hfs/inode.c 2003-09-28 23:04:07.000000000 -0700 @@ -240,7 +240,7 @@ static int hfs_readpage(struct file *fil static int hfs_prepare_write(struct file *file, struct page *page, unsigned from, unsigned to) { return cont_prepare_write(page,from,to,hfs_get_block, - &HFS_I(page->mapping->host)->mmu_private); + &HFS_I(page_mapping(page)->host)->mmu_private); } static sector_t hfs_bmap(struct address_space *mapping, sector_t block) { diff -prauN linux-2.6.0-test5/fs/hpfs/file.c wli-2.6.0-test5-bk12-25/fs/hpfs/file.c --- linux-2.6.0-test5/fs/hpfs/file.c 2003-09-08 12:50:37.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/hpfs/file.c 2003-09-28 23:04:07.000000000 -0700 @@ -109,7 +109,7 @@ static int hpfs_readpage(struct file *fi static int hpfs_prepare_write(struct file *file, struct page *page, unsigned from, unsigned to) { return cont_prepare_write(page,from,to,hpfs_get_block, - &hpfs_i(page->mapping->host)->mmu_private); + &hpfs_i(page_mapping(page)->host)->mmu_private); } static sector_t _hpfs_bmap(struct address_space *mapping, sector_t block) { diff -prauN linux-2.6.0-test5/fs/hpfs/inode.c wli-2.6.0-test5-bk12-25/fs/hpfs/inode.c --- linux-2.6.0-test5/fs/hpfs/inode.c 2003-09-08 12:49:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/hpfs/inode.c 2003-09-25 19:16:06.000000000 -0700 @@ -159,7 +159,7 @@ void hpfs_read_inode(struct inode *i) i->i_size = 0; i->i_blocks = 1; init_special_inode(i, mode, - old_decode_dev(rdev)); + new_decode_dev(rdev)); return; } } @@ -223,7 +223,7 @@ void hpfs_write_inode_ea(struct inode *i hpfs_inode->i_ea_mode = 1; } if (S_ISBLK(i->i_mode) || S_ISCHR(i->i_mode)) { - ea = cpu_to_le32(old_encode_dev(i->i_rdev)); + ea = cpu_to_le32(new_encode_dev(i->i_rdev)); hpfs_set_ea(i, fnode, "DEV", (char *)&ea, 4); } } diff -prauN linux-2.6.0-test5/fs/hpfs/namei.c wli-2.6.0-test5-bk12-25/fs/hpfs/namei.c --- linux-2.6.0-test5/fs/hpfs/namei.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/hpfs/namei.c 2003-09-28 23:04:07.000000000 -0700 @@ -194,7 +194,7 @@ int hpfs_mknod(struct inode *dir, struct int err; if ((err = hpfs_chk_name((char *)name, &len))) return err==-ENOENT ? -EINVAL : err; if (hpfs_sb(dir->i_sb)->sb_eas < 2) return -EPERM; - if (!old_valid_dev(rdev)) + if (!new_valid_dev(rdev)) return -EINVAL; lock_kernel(); if (!(fnode = hpfs_alloc_fnode(dir->i_sb, hpfs_i(dir)->i_dno, &fno, &bh))) goto bail; @@ -452,7 +452,7 @@ int hpfs_rmdir(struct inode *dir, struct int hpfs_symlink_readpage(struct file *file, struct page *page) { char *link = kmap(page); - struct inode *i = page->mapping->host; + struct inode *i = page_mapping(page)->host; struct fnode *fnode; struct buffer_head *bh; int err; diff -prauN linux-2.6.0-test5/fs/hugetlbfs/inode.c wli-2.6.0-test5-bk12-25/fs/hugetlbfs/inode.c --- linux-2.6.0-test5/fs/hugetlbfs/inode.c 2003-09-08 12:50:23.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/hugetlbfs/inode.c 2003-09-28 22:48:27.000000000 -0700 @@ -47,7 +47,6 @@ static int hugetlbfs_file_mmap(struct fi { struct inode *inode = file->f_dentry->d_inode; struct address_space *mapping = inode->i_mapping; - struct hugetlbfs_sb_info *sbinfo = HUGETLBFS_SB(inode->i_sb); loff_t len, vma_len; int ret; @@ -61,19 +60,8 @@ static int hugetlbfs_file_mmap(struct fi return -EINVAL; vma_len = (loff_t)(vma->vm_end - vma->vm_start); - if (sbinfo->free_blocks >= 0) { /* Check if there is any size limit. */ - spin_lock(&sbinfo->stat_lock); - if ((vma_len >> HPAGE_SHIFT) <= sbinfo->free_blocks) { - sbinfo->free_blocks -= (vma_len >> HPAGE_SHIFT); - spin_unlock(&sbinfo->stat_lock); - } else { - spin_unlock(&sbinfo->stat_lock); - return -ENOMEM; - } - } down(&inode->i_sem); - update_atime(inode); vma->vm_flags |= VM_HUGETLB | VM_RESERVED; vma->vm_ops = &hugetlb_vm_ops; @@ -83,15 +71,6 @@ static int hugetlbfs_file_mmap(struct fi inode->i_size = len; up(&inode->i_sem); - /* - * If the huge page allocation has failed then increment free_blocks. - */ - if ((ret != 0) && (sbinfo->free_blocks >= 0)) { - spin_lock(&sbinfo->stat_lock); - sbinfo->free_blocks += (vma_len >> HPAGE_SHIFT); - spin_unlock(&sbinfo->stat_lock); - } - return ret; } @@ -178,7 +157,6 @@ void truncate_huge_page(struct page *pag void truncate_hugepages(struct address_space *mapping, loff_t lstart) { - struct hugetlbfs_sb_info *sbinfo = HUGETLBFS_SB(mapping->host->i_sb); const pgoff_t start = lstart >> HPAGE_SHIFT; struct pagevec pvec; pgoff_t next; @@ -203,11 +181,7 @@ void truncate_hugepages(struct address_s ++next; truncate_huge_page(page); unlock_page(page); - if (sbinfo->free_blocks >= 0) { - spin_lock(&sbinfo->stat_lock); - sbinfo->free_blocks++; - spin_unlock(&sbinfo->stat_lock); - } + hugetlb_put_quota(mapping); } huge_pagevec_release(&pvec); } @@ -295,12 +269,15 @@ hugetlb_vmtruncate_list(struct list_head { struct vm_area_struct *vma; - list_for_each_entry(vma, list, shared) { + list_for_each_entry_rcu(vma, list, shared) { unsigned long h_vm_pgoff; unsigned long v_length; unsigned long h_length; unsigned long v_offset; + if (vma->vm_flags & VM_DEAD) + continue; + h_vm_pgoff = vma->vm_pgoff << (HPAGE_SHIFT - PAGE_SHIFT); v_length = vma->vm_end - vma->vm_start; h_length = v_length >> HPAGE_SHIFT; @@ -345,12 +322,12 @@ static int hugetlb_vmtruncate(struct ino pgoff = offset >> HPAGE_SHIFT; inode->i_size = offset; - down(&mapping->i_shared_sem); + rcu_read_lock(); /* mapping->i_shared_lock */ if (!list_empty(&mapping->i_mmap)) hugetlb_vmtruncate_list(&mapping->i_mmap, pgoff); if (!list_empty(&mapping->i_mmap_shared)) hugetlb_vmtruncate_list(&mapping->i_mmap_shared, pgoff); - up(&mapping->i_shared_sem); + rcu_read_unlock(); /* mapping->i_shared_lock */ truncate_hugepages(mapping, offset); return 0; } @@ -712,6 +689,34 @@ hugetlbfs_fill_super(struct super_block return 0; } +int hugetlb_get_quota(struct address_space *mapping) +{ + int ret = 0; + struct hugetlbfs_sb_info *sbinfo = HUGETLBFS_SB(mapping->host->i_sb); + + if (sbinfo->free_blocks > -1) { + spin_lock(&sbinfo->stat_lock); + if (sbinfo->free_blocks > 0) + sbinfo->free_blocks--; + else + ret = -ENOMEM; + spin_unlock(&sbinfo->stat_lock); + } + + return ret; +} + +void hugetlb_put_quota(struct address_space *mapping) +{ + struct hugetlbfs_sb_info *sbinfo = HUGETLBFS_SB(mapping->host->i_sb); + + if (sbinfo->free_blocks > -1) { + spin_lock(&sbinfo->stat_lock); + sbinfo->free_blocks++; + spin_unlock(&sbinfo->stat_lock); + } +} + static struct super_block *hugetlbfs_get_sb(struct file_system_type *fs_type, int flags, const char *dev_name, void *data) { diff -prauN linux-2.6.0-test5/fs/inode.c wli-2.6.0-test5-bk12-25/fs/inode.c --- linux-2.6.0-test5/fs/inode.c 2003-09-08 12:50:41.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/inode.c 2003-09-29 13:42:28.000000000 -0700 @@ -184,8 +184,8 @@ void inode_init_once(struct inode *inode INIT_LIST_HEAD(&inode->i_devices); sema_init(&inode->i_sem, 1); INIT_RADIX_TREE(&inode->i_data.page_tree, GFP_ATOMIC); - spin_lock_init(&inode->i_data.page_lock); - init_MUTEX(&inode->i_data.i_shared_sem); + mapping_rwlock_init(&inode->i_data.page_lock); + spin_lock_init(&inode->i_data.i_shared_lock); atomic_set(&inode->i_data.truncate_count, 0); INIT_LIST_HEAD(&inode->i_data.private_list); spin_lock_init(&inode->i_data.private_lock); @@ -1233,7 +1233,7 @@ void remove_dquot_ref(struct super_block * Hashed waitqueues for wait_on_inode(). The table is pretty small - the * kernel doesn't lock many inodes at the same time. */ -#define I_WAIT_TABLE_ORDER 3 +#define I_WAIT_TABLE_ORDER 12 static struct i_wait_queue_head { wait_queue_head_t wqh; } ____cacheline_aligned_in_smp i_wait_queue_heads[1<f_dentry); if (dd && dd->dd_fset) { - int (*cache_ioctl)(struct inode *, struct file *, unsigned int, unsigned long ) = filter_c2cdfops(dd->dd_fset->fset_cache->cache_filter)->ioctl; + int (*cache_ioctl)(struct inode *, struct file *, unsigned int, unsigned long); + cache_ioctl = filter_c2cdfops(dd->dd_fset->fset_cache->cache_filter)->ioctl; rc = -ENOTTY; if (cache_ioctl) rc = cache_ioctl(inode, file, cmd, arg); @@ -906,47 +908,49 @@ int presto_ioctl(struct inode *inode, st return -EPERM; } - memset(buf, 0, sizeof(buf)); - - if (izo_ioctl_getdata(buf, buf + 1024, (void *)arg)) { + /* allocate a zero'd buffer for data */ + PRESTO_ALLOC(buf, bufsz); + if (!buf) { + EXIT; + return -ENOMEM; + } + + if (izo_ioctl_getdata(buf, buf + bufsz, (void *)arg)) { CERROR("intermezzo ioctl: data error\n"); - return -EINVAL; + rc = -EINVAL; + goto done; } data = (struct izo_ioctl_data *)buf; switch(cmd) { case IZO_IOC_REINTKML: { - int rc; int cperr; rc = kml_reint_rec(file, data); - EXIT; cperr = copy_to_user((char *)arg, data, sizeof(*data)); if (cperr) { CERROR("WARNING: cperr %d\n", cperr); rc = -EFAULT; } - return rc; + goto done; } case IZO_IOC_GET_RCVD: { struct izo_rcvd_rec rec; struct presto_file_set *fset; - int rc; fset = presto_fset(file->f_dentry); if (fset == NULL) { - EXIT; - return -ENODEV; - } + rc = -ENODEV; + goto done; + } + rc = izo_rcvd_get(&rec, fset, data->ioc_uuid); - if (rc < 0) { - EXIT; - return rc; - } + if (rc < 0) + goto done; - EXIT; - return copy_to_user((char *)arg, &rec, sizeof(rec))? -EFAULT : 0; + rc = copy_to_user((char *)arg, &rec, sizeof(rec))? -EFAULT : 0; + goto done; } case IZO_IOC_REPSTATUS: { @@ -955,12 +959,11 @@ int presto_ioctl(struct inode *inode, st struct izo_rcvd_rec rec; struct presto_file_set *fset; int minor; - int rc; fset = presto_fset(file->f_dentry); if (fset == NULL) { - EXIT; - return -ENODEV; + rc = -ENODEV; + goto done; } minor = presto_f2m(fset); @@ -969,13 +972,11 @@ int presto_ioctl(struct inode *inode, st rc = izo_repstatus(fset, client_kmlsize, lr_client, &rec); - if (rc < 0) { - EXIT; - return rc; - } + if (rc < 0) + goto done; - EXIT; - return copy_to_user((char *)arg, &rec, sizeof(rec))? -EFAULT : 0; + rc = copy_to_user((char *)arg, &rec, sizeof(rec))? -EFAULT : 0; + goto done; } case IZO_IOC_GET_CHANNEL: { @@ -983,30 +984,28 @@ int presto_ioctl(struct inode *inode, st fset = presto_fset(file->f_dentry); if (fset == NULL) { - EXIT; - return -ENODEV; + rc = -ENODEV; + goto done; } data->ioc_dev = fset->fset_cache->cache_psdev->uc_minor; CDEBUG(D_PSDEV, "CHANNEL %d\n", data->ioc_dev); - EXIT; - return copy_to_user((char *)arg, data, sizeof(*data))? -EFAULT : 0; + rc = copy_to_user((char *)arg, data, sizeof(*data))? -EFAULT : 0; + goto done; } case IZO_IOC_SET_IOCTL_UID: izo_authorized_uid = data->ioc_uid; - EXIT; - return 0; + rc = 0; + goto done; case IZO_IOC_SET_PID: rc = izo_psdev_setpid(data->ioc_dev); - EXIT; - return rc; + goto done; case IZO_IOC_SET_CHANNEL: rc = izo_psdev_setchannel(file, data->ioc_dev); - EXIT; - return rc; + goto done; case IZO_IOC_GET_KML_SIZE: { struct presto_file_set *fset; @@ -1014,14 +1013,14 @@ int presto_ioctl(struct inode *inode, st fset = presto_fset(file->f_dentry); if (fset == NULL) { - EXIT; - return -ENODEV; + rc = -ENODEV; + goto done; } kmlsize = presto_kml_offset(fset) + fset->fset_kml_logical_off; - EXIT; - return copy_to_user((char *)arg, &kmlsize, sizeof(kmlsize))?-EFAULT : 0; + rc = copy_to_user((char *)arg, &kmlsize, sizeof(kmlsize))?-EFAULT : 0; + goto done; } case IZO_IOC_PURGE_FILE_DATA: { @@ -1029,37 +1028,37 @@ int presto_ioctl(struct inode *inode, st fset = presto_fset(file->f_dentry); if (fset == NULL) { - EXIT; - return -ENODEV; + rc = -ENODEV; + goto done; } rc = izo_purge_file(fset, data->ioc_inlbuf1); - EXIT; - return rc; + goto done; } case IZO_IOC_GET_FILEID: { rc = izo_get_fileid(file, data); - EXIT; if (rc) - return rc; - return copy_to_user((char *)arg, data, sizeof(*data))? -EFAULT : 0; + goto done; + + rc = copy_to_user((char *)arg, data, sizeof(*data))? -EFAULT : 0; + goto done; } case IZO_IOC_SET_FILEID: { rc = izo_set_fileid(file, data); - EXIT; if (rc) - return rc; - return copy_to_user((char *)arg, data, sizeof(*data))? -EFAULT : 0; + goto done; + + rc = copy_to_user((char *)arg, data, sizeof(*data))? -EFAULT : 0; + goto done; } case IZO_IOC_ADJUST_LML: { struct lento_vfs_context *info; info = (struct lento_vfs_context *)data->ioc_inlbuf1; rc = presto_adjust_lml(file, info); - EXIT; - return rc; + goto done; } case IZO_IOC_CONNECT: { @@ -1068,16 +1067,15 @@ int presto_ioctl(struct inode *inode, st fset = presto_fset(file->f_dentry); if (fset == NULL) { - EXIT; - return -ENODEV; + rc = -ENODEV; + goto done; } minor = presto_f2m(fset); rc = izo_upc_connect(minor, data->ioc_ino, data->ioc_generation, data->ioc_uuid, data->ioc_flags); - EXIT; - return rc; + goto done; } case IZO_IOC_GO_FETCH_KML: { @@ -1086,15 +1084,14 @@ int presto_ioctl(struct inode *inode, st fset = presto_fset(file->f_dentry); if (fset == NULL) { - EXIT; - return -ENODEV; + rc = -ENODEV; + goto done; } minor = presto_f2m(fset); rc = izo_upc_go_fetch_kml(minor, fset->fset_name, data->ioc_uuid, data->ioc_kmlsize); - EXIT; - return rc; + goto done; } case IZO_IOC_REVOKE_PERMIT: @@ -1102,26 +1099,23 @@ int presto_ioctl(struct inode *inode, st rc = izo_revoke_permit(file->f_dentry, data->ioc_uuid); else rc = izo_revoke_permit(file->f_dentry, NULL); - EXIT; - return rc; + goto done; case IZO_IOC_CLEAR_FSET: rc = izo_clear_fsetroot(file->f_dentry); - EXIT; - return rc; + goto done; case IZO_IOC_CLEAR_ALL_FSETS: { struct presto_file_set *fset; fset = presto_fset(file->f_dentry); if (fset == NULL) { - EXIT; - return -ENODEV; + rc = -ENODEV; + goto done; } rc = izo_clear_all_fsetroots(fset->fset_cache); - EXIT; - return rc; + goto done; } case IZO_IOC_SET_FSET: @@ -1131,9 +1125,7 @@ int presto_ioctl(struct inode *inode, st rc = presto_set_fsetroot_from_ioc(file->f_dentry, data->ioc_inlbuf1, data->ioc_flags); - EXIT; - return rc; - + goto done; case IZO_IOC_MARK: { int res = 0; /* resulting flags - returned to user */ @@ -1189,16 +1181,16 @@ int presto_ioctl(struct inode *inode, st } if (error) { - EXIT; - return error; + rc = error; + goto done; } data->ioc_mark_what = res; CDEBUG(D_DOWNCALL, "mark inode: %ld, and: %x, or: %x, what %x\n", file->f_dentry->d_inode->i_ino, data->ioc_and_flag, data->ioc_or_flag, data->ioc_mark_what); - EXIT; - return copy_to_user((char *)arg, data, sizeof(*data))? -EFAULT : 0; + rc = copy_to_user((char *)arg, data, sizeof(*data))? -EFAULT : 0; + goto done; } #if 0 case IZO_IOC_CLIENT_MAKE_BRANCH: { @@ -1207,16 +1199,15 @@ int presto_ioctl(struct inode *inode, st fset = presto_fset(file->f_dentry); if (fset == NULL) { - EXIT; - return -ENODEV; + rc = -ENODEV; + goto done; } minor = presto_f2m(fset); rc = izo_upc_client_make_branch(minor, fset->fset_name, data->ioc_inlbuf1, data->ioc_inlbuf2); - EXIT; - return rc; + goto done; } #endif case IZO_IOC_SERVER_MAKE_BRANCH: { @@ -1225,14 +1216,14 @@ int presto_ioctl(struct inode *inode, st fset = presto_fset(file->f_dentry); if (fset == NULL) { - EXIT; - return -ENODEV; + rc = -ENODEV; + goto done; } minor = presto_f2m(fset); izo_upc_server_make_branch(minor, data->ioc_inlbuf1); - EXIT; - return 0; + rc = 0; + goto done; } case IZO_IOC_SET_KMLSIZE: { struct presto_file_set *fset; @@ -1241,38 +1232,33 @@ int presto_ioctl(struct inode *inode, st fset = presto_fset(file->f_dentry); if (fset == NULL) { - EXIT; - return -ENODEV; + rc = -ENODEV; + goto done; } minor = presto_f2m(fset); rc = izo_upc_set_kmlsize(minor, fset->fset_name, data->ioc_uuid, data->ioc_kmlsize); - if (rc != 0) { - EXIT; - return rc; - } + if (rc != 0) + goto done; rc = izo_rcvd_get(&rec, fset, data->ioc_uuid); if (rc == -EINVAL) { /* We don't know anything about this uuid yet; no * worries. */ memset(&rec, 0, sizeof(rec)); - } else if (rc <= 0) { + } else if (rc <= 0) { /* do we really want to return 0 if rc == 0 here? */ CERROR("InterMezzo: error reading last_rcvd: %d\n", rc); - EXIT; - return rc; + goto done; } rec.lr_remote_offset = data->ioc_kmlsize; rc = izo_rcvd_write(fset, &rec); if (rc <= 0) { CERROR("InterMezzo: error writing last_rcvd: %d\n", rc); - EXIT; - return rc; + goto done; } - EXIT; - return rc; + goto done; } case IZO_IOC_BRANCH_UNDO: { struct presto_file_set *fset; @@ -1280,15 +1266,14 @@ int presto_ioctl(struct inode *inode, st fset = presto_fset(file->f_dentry); if (fset == NULL) { - EXIT; - return -ENODEV; + rc = -ENODEV; + goto done; } minor = presto_f2m(fset); rc = izo_upc_branch_undo(minor, fset->fset_name, data->ioc_inlbuf1); - EXIT; - return rc; + goto done; } case IZO_IOC_BRANCH_REDO: { struct presto_file_set *fset; @@ -1296,28 +1281,33 @@ int presto_ioctl(struct inode *inode, st fset = presto_fset(file->f_dentry); if (fset == NULL) { - EXIT; - return -ENODEV; + rc = -ENODEV; + goto done; } minor = presto_f2m(fset); rc = izo_upc_branch_redo(minor, fset->fset_name, data->ioc_inlbuf1); - EXIT; - return rc; + goto done; } case TCGETS: - EXIT; - return -EINVAL; + rc = -EINVAL; + goto done; default: EXIT; - return -EINVAL; - + rc = -EINVAL; + goto done; + } + + rc = 0; + + done: + PRESTO_FREE(buf, bufsz); EXIT; - return 0; + return rc; } struct file_operations presto_dir_fops = { diff -prauN linux-2.6.0-test5/fs/intermezzo/inode.c wli-2.6.0-test5-bk12-25/fs/intermezzo/inode.c --- linux-2.6.0-test5/fs/intermezzo/inode.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/intermezzo/inode.c 2003-09-25 19:16:06.000000000 -0700 @@ -167,7 +167,6 @@ static void presto_put_super(struct supe exit: CDEBUG(D_MALLOC, "after umount: kmem %ld, vmem %ld\n", presto_kmemory, presto_vmemory); - MOD_DEC_USE_COUNT; return ; } diff -prauN linux-2.6.0-test5/fs/intermezzo/journal.c wli-2.6.0-test5-bk12-25/fs/intermezzo/journal.c --- linux-2.6.0-test5/fs/intermezzo/journal.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/intermezzo/journal.c 2003-09-29 13:47:20.000000000 -0700 @@ -1237,12 +1237,16 @@ int presto_write_kml_logical_offset(stru return izo_rcvd_write(fset, &rec); } +/* we are called from presto_finish_kml_truncate, which is called */ +/* with fset->fset_kml.fd_lock held. Allocations must be GFP_ATOMIC */ struct file * presto_copy_kml_tail(struct presto_file_set *fset, unsigned long int start) { struct file *f; int len; loff_t read_off, write_off, bytes; + char* buf; + size_t bufsz; ENTRY; @@ -1256,21 +1260,31 @@ struct file * presto_copy_kml_tail(struc write_off = 0; read_off = start; bytes = fset->fset_kml.fd_offset - start; - while (bytes > 0) { - char buf[4096]; - int toread; - if (bytes > sizeof(buf)) - toread = sizeof(buf); - else - toread = bytes; + bufsz = bytes; + /* can't use PRESTO_ALLOC - alloction must be atomic */ + buf = kmalloc(bufsz, GFP_ATOMIC); + if (!buf) { + CERROR("IZO: out of memory at %s:%d (trying to " + "allocate %d)\n", __FILE__, __LINE__, + bufsz); + filp_close(f, NULL); + EXIT; + return ERR_PTR(-ENOMEM); + } + + presto_kmem_inc(buf, bufsz); + memset(buf, 0, bufsz); - len = presto_fread(fset->fset_kml.fd_file, buf, toread, + while (bytes > 0) { + len = presto_fread(fset->fset_kml.fd_file, buf, bufsz, &read_off); if (len <= 0) break; if (presto_fwrite(f, buf, len, &write_off) != len) { + kfree(buf); + presto_kmem_dec(buf, bufsz); filp_close(f, NULL); EXIT; return ERR_PTR(-EIO); @@ -1278,7 +1292,9 @@ struct file * presto_copy_kml_tail(struc bytes -= len; } - + + kfree(buf); + presto_kmem_dec(buf, bufsz); EXIT; return f; } @@ -1587,11 +1603,12 @@ int presto_get_fileid(int minor, struct { int opcode = KML_OPCODE_GET_FILEID; struct rec_info rec; - char *buffer, *path, *logrecord, record[4096]; /*include path*/ + char *buffer, *path, *logrecord, *record; /*include path*/ struct dentry *root; __u32 uid, gid, pathlen; int error, size; struct kml_suffix *suffix; + size_t record_size; ENTRY; @@ -1607,9 +1624,13 @@ int presto_get_fileid(int minor, struct size_round(le32_to_cpu(pathlen)) + sizeof(struct kml_suffix); + record_size = max(4096, size); + error = -ENOMEM; + PRESTO_ALLOC(record, record_size); + if (!record) + goto free_buffer; + CDEBUG(D_FILE, "kml size: %d\n", size); - if ( size > sizeof(record) ) - CERROR("InterMezzo: BUFFER OVERFLOW in %s!\n", __FUNCTION__); memset(&rec, 0, sizeof(rec)); rec.is_kml = 1; @@ -1630,6 +1651,9 @@ int presto_get_fileid(int minor, struct size_round(le32_to_cpu(pathlen)), path, fset->fset_name); + PRESTO_FREE(record, record_size); + + free_buffer: BUFF_FREE(buffer); EXIT; return error; diff -prauN linux-2.6.0-test5/fs/isofs/rock.c wli-2.6.0-test5-bk12-25/fs/isofs/rock.c --- linux-2.6.0-test5/fs/isofs/rock.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/isofs/rock.c 2003-09-28 23:04:07.000000000 -0700 @@ -430,7 +430,7 @@ int parse_rock_ridge_inode(struct iso_di static int rock_ridge_symlink_readpage(struct file *file, struct page *page) { - struct inode *inode = page->mapping->host; + struct inode *inode = page_mapping(page)->host; char *link = kmap(page); unsigned long bufsize = ISOFS_BUFFER_SIZE(inode); unsigned char bufbits = ISOFS_BUFFER_BITS(inode); diff -prauN linux-2.6.0-test5/fs/jbd/commit.c wli-2.6.0-test5-bk12-25/fs/jbd/commit.c --- linux-2.6.0-test5/fs/jbd/commit.c 2003-09-08 12:50:23.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/jbd/commit.c 2003-09-28 23:04:07.000000000 -0700 @@ -60,7 +60,7 @@ static void release_buffer_page(struct b page = bh->b_page; if (!page) goto nope; - if (page->mapping) + if (page_mapping(page)) goto nope; /* OK, it's a truncated page */ diff -prauN linux-2.6.0-test5/fs/jbd/journal.c wli-2.6.0-test5-bk12-25/fs/jbd/journal.c --- linux-2.6.0-test5/fs/jbd/journal.c 2003-09-08 12:49:54.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/jbd/journal.c 2003-09-28 23:04:07.000000000 -0700 @@ -1677,7 +1677,7 @@ repeat: } else { J_ASSERT_BH(bh, (atomic_read(&bh->b_count) > 0) || - (bh->b_page && bh->b_page->mapping)); + (bh->b_page && page_mapping(bh->b_page))); if (!new_jh) { jbd_unlock_bh_journal_head(bh); diff -prauN linux-2.6.0-test5/fs/jbd/transaction.c wli-2.6.0-test5-bk12-25/fs/jbd/transaction.c --- linux-2.6.0-test5/fs/jbd/transaction.c 2003-09-08 12:49:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/jbd/transaction.c 2003-09-25 19:16:06.000000000 -0700 @@ -1932,9 +1932,6 @@ void __journal_file_buffer(struct journa J_ASSERT_JH(jh, jbd_is_locked_bh_state(bh)); assert_spin_locked(&transaction->t_journal->j_list_lock); -#ifdef __SMP__ - J_ASSERT (current->lock_depth >= 0); -#endif J_ASSERT_JH(jh, jh->b_jlist < BJ_Types); J_ASSERT_JH(jh, jh->b_transaction == transaction || jh->b_transaction == 0); diff -prauN linux-2.6.0-test5/fs/jffs/inode-v23.c wli-2.6.0-test5-bk12-25/fs/jffs/inode-v23.c --- linux-2.6.0-test5/fs/jffs/inode-v23.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/jffs/inode-v23.c 2003-09-28 23:04:07.000000000 -0700 @@ -139,7 +139,7 @@ static int jffs_fill_super(struct super_ c->thread_pid = kernel_thread (jffs_garbage_collect_thread, (void *) c, - CLONE_FS | CLONE_FILES | CLONE_SIGHAND); + CLONE_KERNEL); D1(printk(KERN_NOTICE "JFFS: GC thread pid=%d.\n", (int) c->thread_pid)); D1(printk(KERN_NOTICE "JFFS: Successfully mounted device %s.\n", @@ -743,7 +743,7 @@ jffs_do_readpage_nolock(struct file *fil void *buf; unsigned long read_len; int result; - struct inode *inode = (struct inode*)page->mapping->host; + struct inode *inode = (struct inode*)page_mapping(page)->host; struct jffs_file *f = (struct jffs_file *)inode->u.generic_ip; struct jffs_control *c = (struct jffs_control *)inode->i_sb->s_fs_info; int r; @@ -1734,7 +1734,7 @@ jffs_read_inode(struct inode *inode) the device should be read from the flash memory and then added to the inode's i_rdev member. */ u16 val; - jffs_read_data(f, (char *)val, 0, 2); + jffs_read_data(f, (char *)&val, 0, 2); init_special_inode(inode, inode->i_mode, old_decode_dev(val)); } diff -prauN linux-2.6.0-test5/fs/jffs2/file.c wli-2.6.0-test5-bk12-25/fs/jffs2/file.c --- linux-2.6.0-test5/fs/jffs2/file.c 2003-09-08 12:50:42.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/jffs2/file.c 2003-09-28 23:04:07.000000000 -0700 @@ -105,8 +105,7 @@ int jffs2_setattr (struct dentry *dentry it out again with the appropriate data attached */ if (S_ISBLK(inode->i_mode) || S_ISCHR(inode->i_mode)) { /* For these, we don't actually need to read the old node */ - dev = (imajor(dentry->d_inode) << 8) | - iminor(dentry->d_inode); + dev = old_encode_dev(dentry->d_inode->i_rdev); mdata = (char *)&dev; mdatalen = sizeof(dev); D1(printk(KERN_DEBUG "jffs2_setattr(): Writing %d bytes of kdev_t\n", mdatalen)); @@ -268,18 +267,18 @@ int jffs2_do_readpage_unlock(struct inod int jffs2_readpage (struct file *filp, struct page *pg) { - struct jffs2_inode_info *f = JFFS2_INODE_INFO(pg->mapping->host); + struct jffs2_inode_info *f = JFFS2_INODE_INFO(page_mapping(pg)->host); int ret; down(&f->sem); - ret = jffs2_do_readpage_unlock(pg->mapping->host, pg); + ret = jffs2_do_readpage_unlock(page_mapping(pg)->host, pg); up(&f->sem); return ret; } int jffs2_prepare_write (struct file *filp, struct page *pg, unsigned start, unsigned end) { - struct inode *inode = pg->mapping->host; + struct inode *inode = page_mapping(pg)->host; struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode); uint32_t pageofs = pg->index << PAGE_CACHE_SHIFT; int ret = 0; @@ -364,7 +363,7 @@ int jffs2_commit_write (struct file *fil /* Actually commit the write from the page cache page we're looking at. * For now, we write the full page out each time. It sucks, but it's simple */ - struct inode *inode = pg->mapping->host; + struct inode *inode = page_mapping(pg)->host; struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode); struct jffs2_sb_info *c = JFFS2_SB_INFO(inode->i_sb); struct jffs2_raw_inode *ri; diff -prauN linux-2.6.0-test5/fs/jffs2/super.c wli-2.6.0-test5-bk12-25/fs/jffs2/super.c --- linux-2.6.0-test5/fs/jffs2/super.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/jffs2/super.c 2003-09-25 19:16:06.000000000 -0700 @@ -173,7 +173,6 @@ static struct super_block *jffs2_get_sb( int err; struct nameidata nd; int mtdnr; - dev_t dev; if (!dev_name) return ERR_PTR(-EINVAL); @@ -227,26 +226,31 @@ static struct super_block *jffs2_get_sb( if (err) return ERR_PTR(err); - if (!S_ISBLK(nd.dentry->d_inode->i_mode)) { - path_release(&nd); - return ERR_PTR(-EINVAL); - } + err = -EINVAL; + + if (!S_ISBLK(nd.dentry->d_inode->i_mode)) + goto out; + if (nd.mnt->mnt_flags & MNT_NODEV) { - path_release(&nd); - return ERR_PTR(-EACCES); + err = -EACCES; + goto out; } - dev = nd.dentry->d_inode->i_rdev; - path_release(&nd); - - if (MAJOR(dev) != MTD_BLOCK_MAJOR) { + if (imajor(nd.dentry->d_inode) != MTD_BLOCK_MAJOR) { if (!(flags & MS_VERBOSE)) /* Yes I mean this. Strangely */ printk(KERN_NOTICE "Attempt to mount non-MTD device \"%s\" as JFFS2\n", dev_name); - return ERR_PTR(-EINVAL); + goto out; } - return jffs2_get_sb_mtdnr(fs_type, flags, dev_name, data, MINOR(dev)); + mtdnr = iminor(nd.dentry->d_inode); + path_release(&nd); + + return jffs2_get_sb_mtdnr(fs_type, flags, dev_name, data, mtdnr); + +out: + path_release(&nd); + return ERR_PTR(err); } diff -prauN linux-2.6.0-test5/fs/jfs/jfs_imap.c wli-2.6.0-test5-bk12-25/fs/jfs/jfs_imap.c --- linux-2.6.0-test5/fs/jfs/jfs_imap.c 2003-09-08 12:49:54.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/jfs/jfs_imap.c 2003-09-25 19:16:06.000000000 -0700 @@ -3041,10 +3041,11 @@ static int copy_from_dinode(struct dinod jfs_ip->next_index = le32_to_cpu(dip->di_next_index); jfs_ip->otime = le32_to_cpu(dip->di_otime.tv_sec); jfs_ip->acltype = le32_to_cpu(dip->di_acltype); - jfs_ip->dev = le32_to_cpu(dip->di_rdev); - if (S_ISCHR(ip->i_mode) || S_ISBLK(ip->i_mode)) - ip->i_rdev = old_decode_dev(jfs_ip->dev); + if (S_ISCHR(ip->i_mode) || S_ISBLK(ip->i_mode)) { + jfs_ip->dev = le32_to_cpu(dip->di_rdev); + ip->i_rdev = new_decode_dev(jfs_ip->dev); + } if (S_ISDIR(ip->i_mode)) { memcpy(&jfs_ip->i_dirtable, &dip->di_dirtable, 384); @@ -3101,7 +3102,8 @@ static void copy_to_dinode(struct dinode dip->di_otime.tv_sec = cpu_to_le32(jfs_ip->otime); dip->di_otime.tv_nsec = 0; dip->di_acltype = cpu_to_le32(jfs_ip->acltype); - dip->di_rdev = cpu_to_le32(jfs_ip->dev); + if (S_ISCHR(ip->i_mode) || S_ISBLK(ip->i_mode)) + dip->di_rdev = cpu_to_le32(jfs_ip->dev); } #ifdef _JFS_DEBUG_IMAP diff -prauN linux-2.6.0-test5/fs/jfs/jfs_mount.c wli-2.6.0-test5-bk12-25/fs/jfs/jfs_mount.c --- linux-2.6.0-test5/fs/jfs/jfs_mount.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/jfs/jfs_mount.c 2003-09-25 19:16:06.000000000 -0700 @@ -395,7 +395,7 @@ static int chkSuper(struct super_block * if (sbi->mntflag & JFS_INLINELOG) sbi->logpxd = j_sb->s_logpxd; else { - sbi->logdev = old_decode_dev(le32_to_cpu(j_sb->s_logdev)); + sbi->logdev = new_decode_dev(le32_to_cpu(j_sb->s_logdev)); memcpy(sbi->uuid, j_sb->s_uuid, sizeof(sbi->uuid)); memcpy(sbi->loguuid, j_sb->s_loguuid, sizeof(sbi->uuid)); } @@ -444,7 +444,7 @@ int updateSuper(struct super_block *sb, if (state == FM_MOUNT) { /* record log's dev_t and mount serial number */ - j_sb->s_logdev = cpu_to_le32(sbi->log->bdev->bd_dev); + j_sb->s_logdev = cpu_to_le32(new_encode_dev(sbi->log->bdev->bd_dev)); j_sb->s_logserial = cpu_to_le32(sbi->log->serial); } else if (state == FM_CLEAN) { /* @@ -507,7 +507,7 @@ static int logMOUNT(struct super_block * lrd.backchain = 0; lrd.type = cpu_to_le16(LOG_MOUNT); lrd.length = 0; - lrd.aggregate = cpu_to_le32(sb->s_bdev->bd_dev); + lrd.aggregate = cpu_to_le32(new_encode_dev(sb->s_bdev->bd_dev)); lmLog(log, NULL, &lrd, NULL); return 0; diff -prauN linux-2.6.0-test5/fs/jfs/jfs_txnmgr.c wli-2.6.0-test5-bk12-25/fs/jfs/jfs_txnmgr.c --- linux-2.6.0-test5/fs/jfs/jfs_txnmgr.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/jfs/jfs_txnmgr.c 2003-09-25 19:16:06.000000000 -0700 @@ -1354,7 +1354,7 @@ static int txLog(struct jfs_log * log, s /* initialize lrd common */ ip = tlck->ip; - lrd->aggregate = cpu_to_le32(ip->i_sb->s_bdev->bd_dev); + lrd->aggregate = cpu_to_le32(new_encode_dev(ip->i_sb->s_bdev->bd_dev)); lrd->log.redopage.fileset = cpu_to_le32(JFS_IP(ip)->fileset); lrd->log.redopage.inode = cpu_to_le32(ip->i_ino); diff -prauN linux-2.6.0-test5/fs/jfs/namei.c wli-2.6.0-test5-bk12-25/fs/jfs/namei.c --- linux-2.6.0-test5/fs/jfs/namei.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/jfs/namei.c 2003-09-25 19:16:06.000000000 -0700 @@ -1312,7 +1312,7 @@ int jfs_mknod(struct inode *dir, struct tid_t tid; struct tblock *tblk; - if (!old_valid_dev(rdev)) + if (!new_valid_dev(rdev)) return -EINVAL; jfs_info("jfs_mknod: %s", dentry->d_name.name); @@ -1344,7 +1344,7 @@ int jfs_mknod(struct inode *dir, struct goto out3; ip->i_op = &jfs_file_inode_operations; - jfs_ip->dev = old_encode_dev(rdev); + jfs_ip->dev = new_encode_dev(rdev); init_special_inode(ip, ip->i_mode, rdev); insert_inode_hash(ip); diff -prauN linux-2.6.0-test5/fs/jfs/super.c wli-2.6.0-test5-bk12-25/fs/jfs/super.c --- linux-2.6.0-test5/fs/jfs/super.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/jfs/super.c 2003-09-25 19:16:06.000000000 -0700 @@ -284,6 +284,9 @@ static int jfs_fill_super(struct super_b jfs_info("In jfs_read_super: s_flags=0x%lx", sb->s_flags); + if (!new_valid_dev(sb->s_bdev->bd_dev)) + return -EOVERFLOW; + sbi = kmalloc(sizeof (struct jfs_sb_info), GFP_KERNEL); if (!sbi) return -ENOSPC; @@ -501,24 +504,21 @@ static int __init init_jfs_fs(void) /* * I/O completion thread (endio) */ - jfsIOthread = kernel_thread(jfsIOWait, 0, - CLONE_FS | CLONE_FILES | CLONE_SIGHAND); + jfsIOthread = kernel_thread(jfsIOWait, 0, CLONE_KERNEL); if (jfsIOthread < 0) { jfs_err("init_jfs_fs: fork failed w/rc = %d", jfsIOthread); goto end_txmngr; } wait_for_completion(&jfsIOwait); /* Wait until thread starts */ - jfsCommitThread = kernel_thread(jfs_lazycommit, 0, - CLONE_FS | CLONE_FILES | CLONE_SIGHAND); + jfsCommitThread = kernel_thread(jfs_lazycommit, 0, CLONE_KERNEL); if (jfsCommitThread < 0) { jfs_err("init_jfs_fs: fork failed w/rc = %d", jfsCommitThread); goto kill_iotask; } wait_for_completion(&jfsIOwait); /* Wait until thread starts */ - jfsSyncThread = kernel_thread(jfs_sync, 0, - CLONE_FS | CLONE_FILES | CLONE_SIGHAND); + jfsSyncThread = kernel_thread(jfs_sync, 0, CLONE_KERNEL); if (jfsSyncThread < 0) { jfs_err("init_jfs_fs: fork failed w/rc = %d", jfsSyncThread); goto kill_committask; diff -prauN linux-2.6.0-test5/fs/libfs.c wli-2.6.0-test5-bk12-25/fs/libfs.c --- linux-2.6.0-test5/fs/libfs.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/libfs.c 2003-09-28 23:04:07.000000000 -0700 @@ -326,7 +326,7 @@ int simple_prepare_write(struct file *fi int simple_commit_write(struct file *file, struct page *page, unsigned offset, unsigned to) { - struct inode *inode = page->mapping->host; + struct inode *inode = page_mapping(page)->host; loff_t pos = ((loff_t)page->index << PAGE_CACHE_SHIFT) + to; /* @@ -429,22 +429,3 @@ void simple_release_fs(struct vfsmount * spin_unlock(&pin_fs_lock); mntput(mnt); } - -/* acceptable for old filesystems */ -int old_valid_dev(dev_t dev) -{ - return MAJOR(dev) < 256 && MINOR(dev) < 256; -} -EXPORT_SYMBOL(old_valid_dev); - -u16 old_encode_dev(dev_t dev) -{ - return (MAJOR(dev) << 8) | MINOR(dev); -} -EXPORT_SYMBOL(old_encode_dev); - -dev_t old_decode_dev(u16 val) -{ - return MKDEV((val >> 8) & 255, val & 255); -} -EXPORT_SYMBOL(old_decode_dev); diff -prauN linux-2.6.0-test5/fs/locks.c wli-2.6.0-test5-bk12-25/fs/locks.c --- linux-2.6.0-test5/fs/locks.c 2003-09-08 12:50:30.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/locks.c 2003-09-25 19:16:06.000000000 -0700 @@ -221,7 +221,7 @@ void locks_copy_lock(struct file_lock *n static inline int flock_translate_cmd(int cmd) { if (cmd & LOCK_MAND) return cmd & (LOCK_MAND | LOCK_RW); - switch (cmd &~ LOCK_NB) { + switch (cmd) { case LOCK_SH: return F_RDLCK; case LOCK_EX: @@ -233,8 +233,8 @@ static inline int flock_translate_cmd(in } /* Fill in a file_lock structure with an appropriate FLOCK lock. */ -static int flock_make_lock(struct file *filp, - struct file_lock **lock, unsigned int cmd) +static int flock_make_lock(struct file *filp, struct file_lock **lock, + unsigned int cmd) { struct file_lock *fl; int type = flock_translate_cmd(cmd); @@ -247,7 +247,7 @@ static int flock_make_lock(struct file * fl->fl_file = filp; fl->fl_pid = current->tgid; - fl->fl_flags = (cmd & LOCK_NB) ? FL_FLOCK : FL_FLOCK | FL_SLEEP; + fl->fl_flags = FL_FLOCK; fl->fl_type = type; fl->fl_end = OFFSET_MAX; @@ -1265,9 +1265,8 @@ int fcntl_setlease(unsigned int fd, stru locks_free_lock(fl); goto out_unlock; } - fl->fl_next = *before; - *before = fl; - list_add(&fl->fl_link, &file_lock_list); + + locks_insert_lock(before, fl); error = f_setown(filp, current->tgid, 1); out_unlock: @@ -1298,6 +1297,7 @@ asmlinkage long sys_flock(unsigned int f { struct file *filp; struct file_lock *lock; + int can_sleep, unlock; int error; error = -EBADF; @@ -1305,12 +1305,18 @@ asmlinkage long sys_flock(unsigned int f if (!filp) goto out; - if ((cmd != LOCK_UN) && !(cmd & LOCK_MAND) && !(filp->f_mode & 3)) + can_sleep = !(cmd & LOCK_NB); + cmd &= ~LOCK_NB; + unlock = (cmd == LOCK_UN); + + if (!unlock && !(cmd & LOCK_MAND) && !(filp->f_mode & 3)) goto out_putf; error = flock_make_lock(filp, &lock, cmd); if (error) goto out_putf; + if (can_sleep) + lock->fl_flags |= FL_SLEEP; error = security_file_lock(filp, cmd); if (error) @@ -1318,7 +1324,7 @@ asmlinkage long sys_flock(unsigned int f for (;;) { error = flock_lock_file(filp, lock); - if ((error != -EAGAIN) || (cmd & LOCK_NB)) + if ((error != -EAGAIN) || !can_sleep) break; error = wait_event_interruptible(lock->fl_wait, !lock->fl_next); if (!error) @@ -1329,7 +1335,7 @@ asmlinkage long sys_flock(unsigned int f } out_free: - if (error) { + if (list_empty(&lock->fl_link)) { locks_free_lock(lock); } diff -prauN linux-2.6.0-test5/fs/minix/dir.c wli-2.6.0-test5-bk12-25/fs/minix/dir.c --- linux-2.6.0-test5/fs/minix/dir.c 2003-09-08 12:50:19.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/minix/dir.c 2003-09-28 23:04:07.000000000 -0700 @@ -47,9 +47,9 @@ static inline unsigned long dir_pages(st static int dir_commit_chunk(struct page *page, unsigned from, unsigned to) { - struct inode *dir = (struct inode *)page->mapping->host; + struct inode *dir = (struct inode *)page_mapping(page)->host; int err = 0; - page->mapping->a_ops->commit_write(NULL, page, from, to); + page_mapping(page)->a_ops->commit_write(NULL, page, from, to); if (IS_DIRSYNC(dir)) err = write_one_page(page, 1); else @@ -240,7 +240,7 @@ int minix_add_link(struct dentry *dentry got_it: from = (char*)de - (char*)page_address(page); to = from + sbi->s_dirsize; - err = page->mapping->a_ops->prepare_write(NULL, page, from, to); + err = page_mapping(page)->a_ops->prepare_write(NULL, page, from, to); if (err) goto out_unlock; memcpy (de->name, name, namelen); @@ -260,7 +260,7 @@ out_unlock: int minix_delete_entry(struct minix_dir_entry *de, struct page *page) { - struct address_space *mapping = page->mapping; + struct address_space *mapping = page_mapping(page); struct inode *inode = (struct inode*)mapping->host; char *kaddr = page_address(page); unsigned from = (char*)de - kaddr; @@ -364,14 +364,14 @@ not_empty: void minix_set_link(struct minix_dir_entry *de, struct page *page, struct inode *inode) { - struct inode *dir = (struct inode*)page->mapping->host; + struct inode *dir = (struct inode*)page_mapping(page)->host; struct minix_sb_info *sbi = minix_sb(dir->i_sb); unsigned from = (char *)de-(char*)page_address(page); unsigned to = from + sbi->s_dirsize; int err; lock_page(page); - err = page->mapping->a_ops->prepare_write(NULL, page, from, to); + err = page_mapping(page)->a_ops->prepare_write(NULL, page, from, to); if (err == 0) { de->inode = inode->i_ino; err = dir_commit_chunk(page, from, to); diff -prauN linux-2.6.0-test5/fs/mpage.c wli-2.6.0-test5-bk12-25/fs/mpage.c --- linux-2.6.0-test5/fs/mpage.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/mpage.c 2003-09-28 23:04:07.000000000 -0700 @@ -129,7 +129,7 @@ mpage_alloc(struct block_device *bdev, static void map_buffer_to_page(struct page *page, struct buffer_head *bh, int page_block) { - struct inode *inode = page->mapping->host; + struct inode *inode = page_mapping(page)->host; struct buffer_head *page_bh, *head; int block = 0; @@ -209,7 +209,7 @@ static struct bio * do_mpage_readpage(struct bio *bio, struct page *page, unsigned nr_pages, sector_t *last_block_in_bio, get_block_t get_block) { - struct inode *inode = page->mapping->host; + struct inode *inode = page_mapping(page)->host; const unsigned blkbits = inode->i_blkbits; const unsigned blocks_per_page = PAGE_CACHE_SIZE >> blkbits; const unsigned blocksize = 1 << blkbits; @@ -388,8 +388,8 @@ static struct bio * mpage_writepage(struct bio *bio, struct page *page, get_block_t get_block, sector_t *last_block_in_bio, int *ret, struct writeback_control *wbc) { - struct address_space *mapping = page->mapping; - struct inode *inode = page->mapping->host; + struct address_space *mapping = page_mapping(page); + struct inode *inode = page_mapping(page)->host; const unsigned blkbits = inode->i_blkbits; unsigned long end_index; const unsigned blocks_per_page = PAGE_CACHE_SIZE >> blkbits; @@ -416,7 +416,7 @@ mpage_writepage(struct bio *bio, struct if (!buffer_mapped(bh)) { /* * unmapped dirty buffers are created by - * __set_page_dirty_buffers -> mmapped data + * set_page_dirty_buffers -> mmapped data */ if (buffer_dirty(bh)) goto confused; @@ -562,7 +562,7 @@ alloc_new: confused: if (bio) bio = mpage_bio_submit(WRITE, bio); - *ret = page->mapping->a_ops->writepage(page, wbc); + *ret = page_mapping(page)->a_ops->writepage(page, wbc); /* * The caller has a ref on the inode, so *mapping is stable */ @@ -635,7 +635,7 @@ mpage_writepages(struct address_space *m if (get_block == NULL) writepage = mapping->a_ops->writepage; - spin_lock(&mapping->page_lock); + mapping_wrlock(&mapping->page_lock); while (!list_empty(&mapping->io_pages) && !done) { struct page *page = list_entry(mapping->io_pages.prev, struct page, list); @@ -655,12 +655,12 @@ mpage_writepages(struct address_space *m list_add(&page->list, &mapping->locked_pages); page_cache_get(page); - spin_unlock(&mapping->page_lock); + mapping_wrunlock(&mapping->page_lock); /* * At this point we hold neither mapping->page_lock nor * lock on the page itself: the page may be truncated or - * invalidated (changing page->mapping to NULL), or even + * invalidated (changing page_mapping(page) to NULL), or even * swizzled back from swapper_space to tmpfs file mapping. */ @@ -669,7 +669,7 @@ mpage_writepages(struct address_space *m if (wbc->sync_mode != WB_SYNC_NONE) wait_on_page_writeback(page); - if (page->mapping == mapping && !PageWriteback(page) && + if (page_mapping(page) == mapping && !PageWriteback(page) && test_clear_page_dirty(page)) { if (writepage) { ret = (*writepage)(page, wbc); @@ -695,12 +695,12 @@ mpage_writepages(struct address_space *m unlock_page(page); } page_cache_release(page); - spin_lock(&mapping->page_lock); + mapping_wrlock(&mapping->page_lock); } /* * Leave any remaining dirty pages on ->io_pages */ - spin_unlock(&mapping->page_lock); + mapping_wrunlock(&mapping->page_lock); if (bio) mpage_bio_submit(WRITE, bio); return ret; diff -prauN linux-2.6.0-test5/fs/namei.c wli-2.6.0-test5-bk12-25/fs/namei.c --- linux-2.6.0-test5/fs/namei.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/namei.c 2003-09-25 19:16:06.000000000 -0700 @@ -1445,7 +1445,7 @@ int vfs_mknod(struct inode *dir, struct return error; } -asmlinkage long sys_mknod(const char __user * filename, int mode, dev_t dev) +asmlinkage long sys_mknod(const char __user * filename, int mode, unsigned dev) { int error = 0; char * tmp; @@ -1471,8 +1471,12 @@ asmlinkage long sys_mknod(const char __u case 0: case S_IFREG: error = vfs_create(nd.dentry->d_inode,dentry,mode,&nd); break; - case S_IFCHR: case S_IFBLK: case S_IFIFO: case S_IFSOCK: - error = vfs_mknod(nd.dentry->d_inode,dentry,mode,dev); + case S_IFCHR: case S_IFBLK: + error = vfs_mknod(nd.dentry->d_inode,dentry,mode, + new_decode_dev(dev)); + break; + case S_IFIFO: case S_IFSOCK: + error = vfs_mknod(nd.dentry->d_inode,dentry,mode,0); break; case S_IFDIR: error = -EPERM; diff -prauN linux-2.6.0-test5/fs/ncpfs/dir.c wli-2.6.0-test5-bk12-25/fs/ncpfs/dir.c --- linux-2.6.0-test5/fs/ncpfs/dir.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/ncpfs/dir.c 2003-09-25 19:16:06.000000000 -0700 @@ -929,10 +929,10 @@ int ncp_create_new(struct inode *dir, st finfo.access = opmode; if (ncp_is_nfs_extras(server, finfo.volume)) { finfo.i.nfs.mode = mode; - finfo.i.nfs.rdev = old_encode_dev(rdev); + finfo.i.nfs.rdev = new_encode_dev(rdev); if (ncp_modify_nfs_info(server, finfo.volume, finfo.i.dirEntNum, - mode, old_encode_dev(rdev)) != 0) + mode, new_encode_dev(rdev)) != 0) goto out; } @@ -1170,7 +1170,7 @@ out: static int ncp_mknod(struct inode * dir, struct dentry *dentry, int mode, dev_t rdev) { - if (!old_valid_dev(rdev)) + if (!new_valid_dev(rdev)) return -EINVAL; if (ncp_is_nfs_extras(NCP_SERVER(dir), NCP_FINFO(dir)->volNumber)) { DPRINTK(KERN_DEBUG "ncp_mknod: mode = 0%o\n", mode); diff -prauN linux-2.6.0-test5/fs/ncpfs/inode.c wli-2.6.0-test5-bk12-25/fs/ncpfs/inode.c --- linux-2.6.0-test5/fs/ncpfs/inode.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/ncpfs/inode.c 2003-09-25 19:16:06.000000000 -0700 @@ -262,7 +262,7 @@ ncp_iget(struct super_block *sb, struct #ifdef CONFIG_NCPFS_NFS_NS } else if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode) || S_ISFIFO(inode->i_mode) || S_ISSOCK(inode->i_mode)) { init_special_inode(inode, inode->i_mode, - old_decode_dev(info->i.nfs.rdev)); + new_decode_dev(info->i.nfs.rdev)); #endif #if defined(CONFIG_NCPFS_EXTRAS) || defined(CONFIG_NCPFS_NFS_NS) } else if (S_ISLNK(inode->i_mode)) { diff -prauN linux-2.6.0-test5/fs/ncpfs/symlink.c wli-2.6.0-test5-bk12-25/fs/ncpfs/symlink.c --- linux-2.6.0-test5/fs/ncpfs/symlink.c 2003-09-08 12:50:32.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/ncpfs/symlink.c 2003-09-28 23:04:07.000000000 -0700 @@ -43,7 +43,7 @@ static int ncp_symlink_readpage(struct file *file, struct page *page) { - struct inode *inode = page->mapping->host; + struct inode *inode = page_mapping(page)->host; int error, length, len; char *link, *rawlink; char *buf = kmap(page); diff -prauN linux-2.6.0-test5/fs/nfs/dir.c wli-2.6.0-test5-bk12-25/fs/nfs/dir.c --- linux-2.6.0-test5/fs/nfs/dir.c 2003-09-08 12:50:04.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nfs/dir.c 2003-09-25 19:16:06.000000000 -0700 @@ -859,7 +859,7 @@ nfs_mknod(struct inode *dir, struct dent dfprintk(VFS, "NFS: mknod(%s/%ld, %s\n", dir->i_sb->s_id, dir->i_ino, dentry->d_name.name); - if (!old_valid_dev(rdev)) + if (!new_valid_dev(rdev)) return -EINVAL; attr.ia_mode = mode; diff -prauN linux-2.6.0-test5/fs/nfs/file.c wli-2.6.0-test5-bk12-25/fs/nfs/file.c --- linux-2.6.0-test5/fs/nfs/file.c 2003-09-08 12:50:09.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nfs/file.c 2003-09-28 23:04:07.000000000 -0700 @@ -212,7 +212,7 @@ static int nfs_commit_write(struct file struct address_space_operations nfs_file_aops = { .readpage = nfs_readpage, .readpages = nfs_readpages, - .set_page_dirty = __set_page_dirty_nobuffers, + .set_page_dirty = set_page_dirty_nobuffers, .writepage = nfs_writepage, .writepages = nfs_writepages, .prepare_write = nfs_prepare_write, diff -prauN linux-2.6.0-test5/fs/nfs/nfs2xdr.c wli-2.6.0-test5-bk12-25/fs/nfs/nfs2xdr.c --- linux-2.6.0-test5/fs/nfs/nfs2xdr.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nfs/nfs2xdr.c 2003-09-25 19:16:06.000000000 -0700 @@ -122,7 +122,7 @@ xdr_decode_fattr(u32 *p, struct nfs_fatt p = xdr_decode_time(p, &fattr->mtime); p = xdr_decode_time(p, &fattr->ctime); fattr->valid |= NFS_ATTR_FATTR; - fattr->rdev = old_decode_dev(rdev); + fattr->rdev = new_decode_dev(rdev); if (fattr->type == NFCHR && rdev == NFS2_FIFO_DEV) { fattr->type = NFFIFO; fattr->mode = (fattr->mode & ~S_IFMT) | S_IFIFO; diff -prauN linux-2.6.0-test5/fs/nfs/nfs3proc.c wli-2.6.0-test5-bk12-25/fs/nfs/nfs3proc.c --- linux-2.6.0-test5/fs/nfs/nfs3proc.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nfs/nfs3proc.c 2003-09-25 19:16:06.000000000 -0700 @@ -651,7 +651,8 @@ nfs3_proc_mknod(struct inode *dir, struc default: return -EINVAL; } - dprintk("NFS call mknod %s %x\n", name->name, (unsigned)rdev); + dprintk("NFS call mknod %s %u:%u\n", name->name, + MAJOR(rdev), MINOR(rdev)); dir_attr.valid = 0; fattr->valid = 0; status = rpc_call(NFS_CLIENT(dir), NFS3PROC_MKNOD, &arg, &res, 0); diff -prauN linux-2.6.0-test5/fs/nfs/nfs3xdr.c wli-2.6.0-test5-bk12-25/fs/nfs/nfs3xdr.c --- linux-2.6.0-test5/fs/nfs/nfs3xdr.c 2003-09-08 12:50:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nfs/nfs3xdr.c 2003-09-25 19:16:06.000000000 -0700 @@ -163,6 +163,8 @@ xdr_decode_fattr(u32 *p, struct nfs_fatt major = ntohl(*p++); minor = ntohl(*p++); fattr->rdev = MKDEV(major, minor); + if (MAJOR(fattr->rdev) != major || MINOR(fattr->rdev) != minor) + fattr->rdev = 0; p = xdr_decode_hyper(p, &fattr->fsid_u.nfs3); p = xdr_decode_hyper(p, &fattr->fileid); diff -prauN linux-2.6.0-test5/fs/nfs/nfs4xdr.c wli-2.6.0-test5-bk12-25/fs/nfs/nfs4xdr.c --- linux-2.6.0-test5/fs/nfs/nfs4xdr.c 2003-09-08 12:50:43.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nfs/nfs4xdr.c 2003-09-25 19:16:06.000000000 -0700 @@ -1503,7 +1503,9 @@ decode_getattr(struct xdr_stream *xdr, s READ32(major); READ32(minor); nfp->rdev = MKDEV(major, minor); - dprintk("read_attrs: rdev=0x%x\n", nfp->rdev); + if (MAJOR(nfp->rdev) != major || MINOR(nfp->rdev) != minor) + nfp->rdev = 0; + dprintk("read_attrs: rdev=%u:%u\n", major, minor); } if (bmval1 & FATTR4_WORD1_SPACE_AVAIL) { READ_BUF(8); diff -prauN linux-2.6.0-test5/fs/nfs/proc.c wli-2.6.0-test5-bk12-25/fs/nfs/proc.c --- linux-2.6.0-test5/fs/nfs/proc.c 2003-09-08 12:50:28.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nfs/proc.c 2003-09-25 19:16:06.000000000 -0700 @@ -277,7 +277,7 @@ nfs_proc_mknod(struct inode *dir, struct sattr->ia_valid &= ~ATTR_SIZE; } else if (S_ISCHR(mode) || S_ISBLK(mode)) { sattr->ia_valid |= ATTR_SIZE; - sattr->ia_size = rdev; /* get out your barf bag */ + sattr->ia_size = new_encode_dev(rdev);/* get out your barf bag */ } fattr->valid = 0; diff -prauN linux-2.6.0-test5/fs/nfs/read.c wli-2.6.0-test5-bk12-25/fs/nfs/read.c --- linux-2.6.0-test5/fs/nfs/read.c 2003-09-08 12:49:50.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nfs/read.c 2003-09-28 23:04:07.000000000 -0700 @@ -300,7 +300,7 @@ nfs_readpage_result(struct rpc_task *tas int nfs_readpage(struct file *file, struct page *page) { - struct inode *inode = page->mapping->host; + struct inode *inode = page_mapping(page)->host; int error; dprintk("NFS: nfs_readpage (%p %ld@%lu)\n", @@ -341,14 +341,14 @@ static int readpage_sync_filler(void *data, struct page *page) { struct nfs_readdesc *desc = (struct nfs_readdesc *)data; - return nfs_readpage_sync(desc->filp, page->mapping->host, page); + return nfs_readpage_sync(desc->filp, page_mapping(page)->host, page); } static int readpage_async_filler(void *data, struct page *page) { struct nfs_readdesc *desc = (struct nfs_readdesc *)data; - struct inode *inode = page->mapping->host; + struct inode *inode = page_mapping(page)->host; struct nfs_page *new; nfs_wb_page(inode, page); diff -prauN linux-2.6.0-test5/fs/nfs/write.c wli-2.6.0-test5-bk12-25/fs/nfs/write.c --- linux-2.6.0-test5/fs/nfs/write.c 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nfs/write.c 2003-09-28 23:04:07.000000000 -0700 @@ -224,7 +224,7 @@ nfs_writepage_async(struct file *file, s int nfs_writepage(struct page *page, struct writeback_control *wbc) { - struct inode *inode = page->mapping->host; + struct inode *inode = page_mapping(page)->host; unsigned long end_index; unsigned offset = PAGE_CACHE_SIZE; loff_t i_size = i_size_read(inode); @@ -629,7 +629,7 @@ nfs_strategy(struct inode *inode) int nfs_flush_incompatible(struct file *file, struct page *page) { - struct inode *inode = page->mapping->host; + struct inode *inode = page_mapping(page)->host; struct rpc_cred *cred = nfs_file_cred(file); struct nfs_page *req; int status = 0; @@ -660,7 +660,7 @@ int nfs_updatepage(struct file *file, struct page *page, unsigned int offset, unsigned int count) { struct dentry *dentry = file->f_dentry; - struct inode *inode = page->mapping->host; + struct inode *inode = page_mapping(page)->host; struct nfs_page *req; loff_t end; int status = 0; diff -prauN linux-2.6.0-test5/fs/nfsd/export.c wli-2.6.0-test5-bk12-25/fs/nfsd/export.c --- linux-2.6.0-test5/fs/nfsd/export.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nfsd/export.c 2003-09-25 19:16:06.000000000 -0700 @@ -55,11 +55,16 @@ static int exp_verify_string(char *cp, #define EXPKEY_HASHMASK (EXPKEY_HASHMAX -1) static struct cache_head *expkey_table[EXPKEY_HASHMAX]; +static inline int key_len(int type) +{ + return type == 0 ? 8 : type == 1 ? 4 : 12; +} + static inline int svc_expkey_hash(struct svc_expkey *item) { int hash = item->ek_fsidtype; char * cp = (char*)item->ek_fsid; - int len = (item->ek_fsidtype==0)?8:4; + int len = key_len(item->ek_fsidtype); hash ^= hash_mem(cp, len, EXPKEY_HASHBITS); hash ^= hash_ptr(item->ek_client, EXPKEY_HASHBITS); @@ -89,7 +94,7 @@ void expkey_request(struct cache_detail qword_add(bpp, blen, ek->ek_client->name); snprintf(type, 5, "%d", ek->ek_fsidtype); qword_add(bpp, blen, type); - qword_addhex(bpp, blen, (char*)ek->ek_fsid, ek->ek_fsidtype==0?8:4); + qword_addhex(bpp, blen, (char*)ek->ek_fsid, key_len(ek->ek_fsidtype)); (*bpp)[-1] = '\n'; } @@ -130,12 +135,12 @@ int expkey_parse(struct cache_detail *cd if (*ep) goto out; dprintk("found fsidtype %d\n", fsidtype); - if (fsidtype > 1) + if (fsidtype > 2) goto out; if ((len=qword_get(&mesg, buf, PAGE_SIZE)) <= 0) goto out; dprintk("found fsid length %d\n", len); - if (len != ((fsidtype==0)?8:4)) + if (len != key_len(fsidtype)) goto out; /* OK, we seem to have a valid key */ @@ -206,8 +211,10 @@ static int expkey_show(struct seq_file * ek = container_of(h, struct svc_expkey, h); seq_printf(m, "%s %d 0x%08x", ek->ek_client->name, ek->ek_fsidtype, ek->ek_fsid[0]); - if (ek->ek_fsid == 0) - seq_printf(m, "%08x", ek->ek_fsid[0]); + if (ek->ek_fsidtype != 1) + seq_printf(m, "%08x", ek->ek_fsid[1]); + if (ek->ek_fsidtype == 2) + seq_printf(m, "%08x", ek->ek_fsid[2]); if (test_bit(CACHE_VALID, &h->flags) && !test_bit(CACHE_NEGATIVE, &h->flags)) { seq_printf(m, " "); @@ -230,13 +237,8 @@ struct cache_detail svc_expkey_cache = { static inline int svc_expkey_match (struct svc_expkey *a, struct svc_expkey *b) { if (a->ek_fsidtype != b->ek_fsidtype || - a->ek_client != b->ek_client) - return 0; - if (a->ek_fsid[0] != b->ek_fsid[0]) - return 0; - if (a->ek_fsidtype == 1) - return 1; - if (a->ek_fsid[1] != b->ek_fsid[1]) + a->ek_client != b->ek_client || + memcmp(a->ek_fsid, b->ek_fsid, key_len(a->ek_fsidtype)) != 0) return 0; return 1; } @@ -248,6 +250,7 @@ static inline void svc_expkey_init(struc new->ek_fsidtype = item->ek_fsidtype; new->ek_fsid[0] = item->ek_fsid[0]; new->ek_fsid[1] = item->ek_fsid[1]; + new->ek_fsid[2] = item->ek_fsid[2]; } static inline void svc_expkey_update(struct svc_expkey *new, struct svc_expkey *item) @@ -502,8 +505,7 @@ exp_find_key(svc_client *clp, int fsid_t key.ek_client = clp; key.ek_fsidtype = fsid_type; - key.ek_fsid[0] = fsidv[0]; - key.ek_fsid[1] = fsidv[1]; + memcpy(key.ek_fsid, fsidv, key_len(fsid_type)); ek = svc_expkey_lookup(&key, 0); if (ek != NULL) @@ -519,8 +521,7 @@ int exp_set_key(svc_client *clp, int fsi key.ek_client = clp; key.ek_fsidtype = fsid_type; - key.ek_fsid[0] = fsidv[0]; - key.ek_fsid[1] = fsidv[1]; + memcpy(key.ek_fsid, fsidv, key_len(fsid_type)); key.ek_export = exp; key.h.expiry_time = NEVER; key.h.flags = 0; @@ -539,10 +540,14 @@ int exp_set_key(svc_client *clp, int fsi static inline struct svc_expkey * exp_get_key(svc_client *clp, dev_t dev, ino_t ino) { - u32 fsidv[2]; + u32 fsidv[3]; - mk_fsid_v0(fsidv, dev, ino); - return exp_find_key(clp, 0, fsidv, NULL); + if (old_valid_dev(dev)) { + mk_fsid_v0(fsidv, dev, ino); + return exp_find_key(clp, 0, fsidv, NULL); + } + mk_fsid_v2(fsidv, dev, ino); + return exp_find_key(clp, 2, fsidv, NULL); } /* @@ -671,11 +676,15 @@ static int exp_fsid_hash(svc_client *clp static int exp_hash(struct auth_domain *clp, struct svc_export *exp) { u32 fsid[2]; - struct inode *inode; + struct inode *inode = exp->ex_dentry->d_inode; + dev_t dev = inode->i_sb->s_dev; - inode = exp->ex_dentry->d_inode; - mk_fsid_v0(fsid, inode->i_sb->s_dev, inode->i_ino); - return exp_set_key(clp, 0, fsid, exp); + if (old_valid_dev(dev)) { + mk_fsid_v0(fsid, dev, inode->i_ino); + return exp_set_key(clp, 0, fsid, exp); + } + mk_fsid_v2(fsid, dev, inode->i_ino); + return exp_set_key(clp, 2, fsid, exp); } static void exp_unhash(struct svc_export *exp) @@ -819,32 +828,42 @@ int exp_unexport(struct nfsctl_export *nxp) { struct auth_domain *dom; + svc_export *exp; + struct nameidata nd; int err; /* Consistency check */ - if (!exp_verify_string(nxp->ex_client, NFSCLNT_IDMAX)) + if (!exp_verify_string(nxp->ex_path, NFS_MAXPATHLEN) || + !exp_verify_string(nxp->ex_client, NFSCLNT_IDMAX)) return -EINVAL; exp_writelock(); err = -EINVAL; dom = auth_domain_find(nxp->ex_client); - - if (dom) { - struct svc_expkey *key = exp_get_key(dom, nxp->ex_dev, nxp->ex_ino); - if (key && !IS_ERR(key) && key->ek_export) { - exp_do_unexport(key->ek_export); - err = 0; - expkey_put(&key->h, &svc_expkey_cache); - } else - dprintk("nfsd: no export %x/%lx for %s\n", - (unsigned)nxp->ex_dev, - (unsigned long) nxp->ex_ino, nxp->ex_client); - auth_domain_put(dom); - cache_flush(); - } else + if (!dom) { dprintk("nfsd: unexport couldn't find %s\n", nxp->ex_client); + goto out_unlock; + } + + err = path_lookup(nxp->ex_path, 0, &nd); + if (err) + goto out_domain; + err = -EINVAL; + exp = exp_get_by_name(dom, nd.mnt, nd.dentry, NULL); + path_release(&nd); + if (!exp) + goto out_domain; + + exp_do_unexport(exp); + exp_put(exp); + err = 0; + +out_domain: + auth_domain_put(dom); + cache_flush(); +out_unlock: exp_writeunlock(); return err; } diff -prauN linux-2.6.0-test5/fs/nfsd/nfs3xdr.c wli-2.6.0-test5-bk12-25/fs/nfsd/nfs3xdr.c --- linux-2.6.0-test5/fs/nfsd/nfs3xdr.c 2003-09-08 12:49:50.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nfsd/nfs3xdr.c 2003-09-25 19:16:06.000000000 -0700 @@ -186,12 +186,10 @@ encode_fattr3(struct svc_rqst *rqstp, u3 p = xdr_encode_hyper(p, ((u64)stat.blocks) << 9); *p++ = htonl((u32) MAJOR(stat.rdev)); *p++ = htonl((u32) MINOR(stat.rdev)); - if (rqstp->rq_reffh->fh_version == 1 - && rqstp->rq_reffh->fh_fsid_type == 1 - && (fhp->fh_export->ex_flags & NFSEXP_FSID)) + if (is_fsid(fhp, rqstp->rq_reffh)) p = xdr_encode_hyper(p, (u64) fhp->fh_export->ex_fsid); else - p = xdr_encode_hyper(p, (u64) stat.dev); + p = xdr_encode_hyper(p, (u64) huge_encode_dev(stat.dev)); p = xdr_encode_hyper(p, (u64) stat.ino); p = encode_time3(p, &stat.atime); lease_get_mtime(dentry->d_inode, &time); @@ -222,12 +220,10 @@ encode_saved_post_attr(struct svc_rqst * p = xdr_encode_hyper(p, ((u64)fhp->fh_post_blocks) << 9); *p++ = fhp->fh_post_rdev[0]; *p++ = fhp->fh_post_rdev[1]; - if (rqstp->rq_reffh->fh_version == 1 - && rqstp->rq_reffh->fh_fsid_type == 1 - && (fhp->fh_export->ex_flags & NFSEXP_FSID)) + if (is_fsid(fhp, rqstp->rq_reffh)) p = xdr_encode_hyper(p, (u64) fhp->fh_export->ex_fsid); else - p = xdr_encode_hyper(p, (u64) inode->i_sb->s_dev); + p = xdr_encode_hyper(p, (u64)huge_encode_dev(inode->i_sb->s_dev)); p = xdr_encode_hyper(p, (u64) inode->i_ino); p = encode_time3(p, &fhp->fh_post_atime); p = encode_time3(p, &fhp->fh_post_mtime); diff -prauN linux-2.6.0-test5/fs/nfsd/nfs4proc.c wli-2.6.0-test5-bk12-25/fs/nfsd/nfs4proc.c --- linux-2.6.0-test5/fs/nfsd/nfs4proc.c 2003-09-08 12:50:43.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nfsd/nfs4proc.c 2003-09-25 19:16:06.000000000 -0700 @@ -355,7 +355,7 @@ nfsd4_read(struct svc_rqst *rqstp, struc if (read->rd_offset >= OFFSET_MAX) return nfserr_inval; - nfsd4_lock_state(); + nfs4_lock_state(); status = nfs_ok; /* For stateid -1, we don't check share reservations. */ if (ONE_STATEID(&read->rd_stateid)) { @@ -377,7 +377,7 @@ nfsd4_read(struct svc_rqst *rqstp, struc } /* check stateid */ if ((status = nfs4_preprocess_stateid_op(current_fh, &read->rd_stateid, - CHECK_FH, &stp))) { + CHECK_FH | RDWR_STATE, &stp))) { dprintk("NFSD: nfsd4_read: couldn't process stateid!\n"); goto out; } @@ -388,7 +388,7 @@ nfsd4_read(struct svc_rqst *rqstp, struc } status = nfs_ok; out: - nfsd4_unlock_state(); + nfs4_unlock_state(); read->rd_rqstp = rqstp; read->rd_fhp = current_fh; return status; @@ -464,10 +464,10 @@ nfsd4_setattr(struct svc_rqst *rqstp, st return status; } - nfsd4_lock_state(); + nfs4_lock_state(); if ((status = nfs4_preprocess_stateid_op(current_fh, &setattr->sa_stateid, - CHECK_FH, &stp))) { + CHECK_FH | RDWR_STATE, &stp))) { dprintk("NFSD: nfsd4_setattr: couldn't process stateid!\n"); goto out; } @@ -476,11 +476,11 @@ nfsd4_setattr(struct svc_rqst *rqstp, st dprintk("NFSD: nfsd4_setattr: not opened for write!\n"); goto out; } - nfsd4_unlock_state(); + nfs4_unlock_state(); } return (nfsd_setattr(rqstp, current_fh, &setattr->sa_iattr, 0, (time_t)0)); out: - nfsd4_unlock_state(); + nfs4_unlock_state(); return status; } @@ -497,7 +497,7 @@ nfsd4_write(struct svc_rqst *rqstp, stru if (write->wr_offset >= OFFSET_MAX) return nfserr_inval; - nfsd4_lock_state(); + nfs4_lock_state(); if (ZERO_STATEID(stateid) || ONE_STATEID(stateid)) { dprintk("NFSD: nfsd4_write: zero stateid...\n"); if ((status = nfs4_share_conflict(current_fh, NFS4_SHARE_DENY_WRITE))) { @@ -507,7 +507,7 @@ nfsd4_write(struct svc_rqst *rqstp, stru goto zero_stateid; } if ((status = nfs4_preprocess_stateid_op(current_fh, stateid, - CHECK_FH, &stp))) { + CHECK_FH | RDWR_STATE, &stp))) { dprintk("NFSD: nfsd4_write: couldn't process stateid!\n"); goto out; } @@ -519,7 +519,7 @@ nfsd4_write(struct svc_rqst *rqstp, stru } zero_stateid: - nfsd4_unlock_state(); + nfs4_unlock_state(); write->wr_bytes_written = write->wr_buflen; write->wr_how_written = write->wr_stable_how; p = (u32 *)write->wr_verifier; @@ -530,7 +530,7 @@ zero_stateid: write->wr_vec, write->wr_vlen, write->wr_buflen, &write->wr_how_written)); out: - nfsd4_unlock_state(); + nfs4_unlock_state(); return status; } @@ -664,6 +664,7 @@ nfsd4_proc_compound(struct svc_rqst *rqs break; case OP_CLOSE: op->status = nfsd4_close(rqstp, ¤t_fh, &op->u.close); + op->replay = &op->u.close.cl_stateowner->so_replay; break; case OP_COMMIT: op->status = nfsd4_commit(rqstp, ¤t_fh, &op->u.commit); @@ -680,6 +681,15 @@ nfsd4_proc_compound(struct svc_rqst *rqs case OP_LINK: op->status = nfsd4_link(rqstp, ¤t_fh, &save_fh, &op->u.link); break; + case OP_LOCK: + op->status = nfsd4_lock(rqstp, ¤t_fh, &op->u.lock); + break; + case OP_LOCKT: + op->status = nfsd4_lockt(rqstp, ¤t_fh, &op->u.lockt); + break; + case OP_LOCKU: + op->status = nfsd4_locku(rqstp, ¤t_fh, &op->u.locku); + break; case OP_LOOKUP: op->status = nfsd4_lookup(rqstp, ¤t_fh, &op->u.lookup); break; @@ -693,12 +703,15 @@ nfsd4_proc_compound(struct svc_rqst *rqs break; case OP_OPEN: op->status = nfsd4_open(rqstp, ¤t_fh, &op->u.open); + op->replay = &op->u.open.op_stateowner->so_replay; break; case OP_OPEN_CONFIRM: op->status = nfsd4_open_confirm(rqstp, ¤t_fh, &op->u.open_confirm); + op->replay = &op->u.open_confirm.oc_stateowner->so_replay; break; case OP_OPEN_DOWNGRADE: op->status = nfsd4_open_downgrade(rqstp, ¤t_fh, &op->u.open_downgrade); + op->replay = &op->u.open_downgrade.od_stateowner->so_replay; break; case OP_PUTFH: op->status = nfsd4_putfh(rqstp, ¤t_fh, &op->u.putfh); @@ -753,8 +766,13 @@ nfsd4_proc_compound(struct svc_rqst *rqs } encode_op: - nfsd4_encode_operation(resp, op); - status = op->status; + if (op->status == NFSERR_REPLAY_ME) { + nfsd4_encode_replay(resp, op); + status = op->status = NFS_OK; + } else { + nfsd4_encode_operation(resp, op); + status = op->status; + } } out: diff -prauN linux-2.6.0-test5/fs/nfsd/nfs4state.c wli-2.6.0-test5-bk12-25/fs/nfsd/nfs4state.c --- linux-2.6.0-test5/fs/nfsd/nfs4state.c 2003-09-08 12:50:17.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nfsd/nfs4state.c 2003-09-25 19:16:06.000000000 -0700 @@ -38,7 +38,6 @@ #include #include - #include #include #include @@ -70,6 +69,10 @@ u32 alloc_sowner = 0; u32 free_sowner = 0; u32 vfsopen = 0; u32 vfsclose = 0; +u32 alloc_lsowner= 0; + +/* forward declarations */ +struct nfs4_stateid * find_stateid(stateid_t *stid, int flags); /* Locking: * @@ -80,13 +83,13 @@ u32 vfsclose = 0; static struct semaphore client_sema; void -nfsd4_lock_state(void) +nfs4_lock_state(void) { down(&client_sema); } void -nfsd4_unlock_state(void) +nfs4_unlock_state(void) { up(&client_sema); } @@ -106,7 +109,7 @@ opaque_hashval(const void *ptr, int nbyt /* forward declarations */ static void release_stateowner(struct nfs4_stateowner *sop); -static void release_stateid(struct nfs4_stateid *stp); +static void release_stateid(struct nfs4_stateid *stp, int flags); static void release_file(struct nfs4_file *fp); @@ -386,7 +389,7 @@ nfsd4_setclientid(struct svc_rqst *rqstp strhashval = clientstr_hashval(clname.data, clname.len); conf = NULL; - down(&client_sema); + nfs4_lock_state(); list_for_each_safe(pos, next, &conf_str_hashtbl[strhashval]) { clp = list_entry(pos, struct nfs4_client, cl_strhash); if (!cmp_name(&clp->cl_name, &clname)) @@ -525,7 +528,7 @@ nfsd4_setclientid(struct svc_rqst *rqstp printk(KERN_INFO "NFSD: this client will not receive delegations\n"); status = nfs_ok; out: - up(&client_sema); + nfs4_unlock_state(); return status; } @@ -557,7 +560,7 @@ nfsd4_setclientid_confirm(struct svc_rqs */ idhashval = clientid_hashval(clid->cl_id); - down(&client_sema); + nfs4_lock_state(); list_for_each_safe(pos, next, &conf_id_hashtbl[idhashval]) { clp = list_entry(pos, struct nfs4_client, cl_idhash); if (!cmp_clid(&clp->cl_clientid, clid)) @@ -657,7 +660,7 @@ nfsd4_setclientid_confirm(struct svc_rqs goto out; out: /* XXX if status == nfs_ok, probe callback path */ - up(&client_sema); + nfs4_unlock_state(); return status; } @@ -683,17 +686,17 @@ static struct list_head ownerstr_hashtbl #define FILE_HASH_SIZE (1 << FILE_HASH_BITS) #define FILE_HASH_MASK (FILE_HASH_SIZE - 1) /* hash table for (open)nfs4_stateid */ -#define OPENSTATEID_HASH_BITS 10 -#define OPENSTATEID_HASH_SIZE (1 << OPENSTATEID_HASH_BITS) -#define OPENSTATEID_HASH_MASK (OPENSTATEID_HASH_SIZE - 1) +#define STATEID_HASH_BITS 10 +#define STATEID_HASH_SIZE (1 << STATEID_HASH_BITS) +#define STATEID_HASH_MASK (STATEID_HASH_SIZE - 1) #define file_hashval(x) \ hash_ptr(x, FILE_HASH_BITS) -#define openstateid_hashval(owner_id, file_id) \ - (((owner_id) + (file_id)) & OPENSTATEID_HASH_MASK) +#define stateid_hashval(owner_id, file_id) \ + (((owner_id) + (file_id)) & STATEID_HASH_MASK) static struct list_head file_hashtbl[FILE_HASH_SIZE]; -static struct list_head openstateid_hashtbl[OPENSTATEID_HASH_SIZE]; +static struct list_head stateid_hashtbl[STATEID_HASH_SIZE]; /* OPEN Share state helper functions */ static inline struct nfs4_file * @@ -757,8 +760,9 @@ free_stateowner(struct nfs4_stateowner * } static struct nfs4_stateowner * -alloc_init_stateowner(unsigned int strhashval, struct nfs4_client *clp, struct nfsd4_open *open) { +alloc_init_open_stateowner(unsigned int strhashval, struct nfs4_client *clp, struct nfsd4_open *open) { struct nfs4_stateowner *sop; + struct nfs4_replay *rp; unsigned int idhashval; if (!(sop = alloc_stateowner(&open->op_owner))) @@ -767,15 +771,20 @@ alloc_init_stateowner(unsigned int strha INIT_LIST_HEAD(&sop->so_idhash); INIT_LIST_HEAD(&sop->so_strhash); INIT_LIST_HEAD(&sop->so_perclient); - INIT_LIST_HEAD(&sop->so_peropenstate); + INIT_LIST_HEAD(&sop->so_perfilestate); list_add(&sop->so_idhash, &ownerid_hashtbl[idhashval]); list_add(&sop->so_strhash, &ownerstr_hashtbl[strhashval]); list_add(&sop->so_perclient, &clp->cl_perclient); add_perclient++; + sop->so_is_open_owner = 1; sop->so_id = current_ownerid++; sop->so_client = clp; sop->so_seqid = open->op_seqid; sop->so_confirmed = 0; + rp = &sop->so_replay; + rp->rp_status = NFSERR_SERVERFAULT; + rp->rp_buflen = 0; + rp->rp_buf = rp->rp_ibuf; alloc_sowner++; return sop; } @@ -789,23 +798,26 @@ release_stateowner(struct nfs4_stateowne list_del_init(&sop->so_strhash); list_del_init(&sop->so_perclient); del_perclient++; - while (!list_empty(&sop->so_peropenstate)) { - stp = list_entry(sop->so_peropenstate.next, - struct nfs4_stateid, st_peropenstate); - release_stateid(stp); + while (!list_empty(&sop->so_perfilestate)) { + stp = list_entry(sop->so_perfilestate.next, + struct nfs4_stateid, st_perfilestate); + if(sop->so_is_open_owner) + release_stateid(stp, OPEN_STATE); + else + release_stateid(stp, LOCK_STATE); } free_stateowner(sop); } static inline void init_stateid(struct nfs4_stateid *stp, struct nfs4_file *fp, struct nfs4_stateowner *sop, struct nfsd4_open *open) { - unsigned int hashval = openstateid_hashval(sop->so_id, fp->fi_id); + unsigned int hashval = stateid_hashval(sop->so_id, fp->fi_id); INIT_LIST_HEAD(&stp->st_hash); - INIT_LIST_HEAD(&stp->st_peropenstate); + INIT_LIST_HEAD(&stp->st_perfilestate); INIT_LIST_HEAD(&stp->st_perfile); - list_add(&stp->st_hash, &openstateid_hashtbl[hashval]); - list_add(&stp->st_peropenstate, &sop->so_peropenstate); + list_add(&stp->st_hash, &stateid_hashtbl[hashval]); + list_add(&stp->st_perfilestate, &sop->so_perfilestate); list_add_perfile++; list_add(&stp->st_perfile, &fp->fi_perfile); stp->st_stateowner = sop; @@ -819,13 +831,13 @@ init_stateid(struct nfs4_stateid *stp, s } static void -release_stateid(struct nfs4_stateid *stp) { +release_stateid(struct nfs4_stateid *stp, int flags) { list_del_init(&stp->st_hash); list_del_perfile++; list_del_init(&stp->st_perfile); - list_del_init(&stp->st_peropenstate); - if(stp->st_vfs_set) { + list_del_init(&stp->st_perfilestate); + if((stp->st_vfs_set) && (flags & OPEN_STATE)) { nfsd_close(&stp->st_vfs_file); vfsclose++; dput(stp->st_vfs_file.f_dentry); @@ -846,22 +858,23 @@ release_file(struct nfs4_file *fp) } void -release_open_state(struct nfs4_stateid *stp, struct nfsd4_close *cl) +release_state_owner(struct nfs4_stateid *stp, struct nfs4_stateowner **sopp, + int flag) { struct nfs4_stateowner *sop = stp->st_stateowner; struct nfs4_file *fp = stp->st_file; - dprintk("NFSD: release_open_state\n"); - release_stateid(stp); + dprintk("NFSD: release_state_owner\n"); + release_stateid(stp, flag); /* * release unused nfs4_stateowners. * XXX will need to be placed on an open_stateid_lru list to be * released by the laundromat service after the lease period * to enable us to handle CLOSE replay */ - if (sop->so_confirmed && list_empty(&sop->so_peropenstate)) { + if (sop->so_confirmed && list_empty(&sop->so_perfilestate)) { release_stateowner(sop); - cl->cl_stateowner = NULL; + *sopp = NULL; } /* unused nfs4_file's are releseed. XXX slab cache? */ if (list_empty(&fp->fi_perfile)) { @@ -870,21 +883,21 @@ release_open_state(struct nfs4_stateid * } static int -cmp_owner_str(struct nfs4_stateowner *sop, struct nfsd4_open *open) { - return ((sop->so_owner.len == open->op_owner.len) && - !memcmp(sop->so_owner.data, open->op_owner.data, sop->so_owner.len) && - (sop->so_client->cl_clientid.cl_id == open->op_clientid.cl_id)); +cmp_owner_str(struct nfs4_stateowner *sop, struct xdr_netobj *owner, clientid_t *clid) { + return ((sop->so_owner.len == owner->len) && + !memcmp(sop->so_owner.data, owner->data, owner->len) && + (sop->so_client->cl_clientid.cl_id == clid->cl_id)); } /* search ownerstr_hashtbl[] for owner */ static int -find_stateowner_str(unsigned int hashval, struct nfsd4_open *open, struct nfs4_stateowner **op) { +find_openstateowner_str(unsigned int hashval, struct nfsd4_open *open, struct nfs4_stateowner **op) { struct list_head *pos, *next; struct nfs4_stateowner *local = NULL; list_for_each_safe(pos, next, &ownerstr_hashtbl[hashval]) { local = list_entry(pos, struct nfs4_stateowner, so_strhash); - if(!cmp_owner_str(local, open)) + if(!cmp_owner_str(local, &open->op_owner, &open->op_clientid)) continue; *op = local; return(1); @@ -1015,13 +1028,26 @@ nfsd4_process_open1(struct nfsd4_open *o if (STALE_CLIENTID(&open->op_clientid)) goto out; - down(&client_sema); /* XXX need finer grained locking */ + nfs4_lock_state(); strhashval = ownerstr_hashval(clientid->cl_id, open->op_owner); - if (find_stateowner_str(strhashval, open, &sop)) { + if (find_openstateowner_str(strhashval, open, &sop)) { open->op_stateowner = sop; + /* check for replay */ if (open->op_seqid == sop->so_seqid){ - /* XXX retplay: for now, return bad seqid */ - status = nfserr_bad_seqid; + if (!sop->so_replay.rp_buflen) { + /* + * The original OPEN failed in so spectacularly that we + * don't even have replay data saved! Therefore, we + * have no choice but to continue processing + * this OPEN; presumably, we'll fail again for the same + * reason. + */ + dprintk("nfsd4_process_open1: replay with no replay cache\n"); + status = NFS_OK; + goto renew; + } + /* replay: indicate to calling function */ + status = NFSERR_REPLAY_ME; goto out; } if (sop->so_confirmed) { @@ -1033,9 +1059,8 @@ nfsd4_process_open1(struct nfsd4_open *o goto out; } /* If we get here, we received and OPEN for an unconfirmed - * nfs4_stateowner. If seqid's are the same then this - * is a replay. - * If the sequid's are different, then purge the + * nfs4_stateowner. + * Since the sequid's are different, purge the * existing nfs4_stateowner, and instantiate a new one. */ clp = sop->so_client; @@ -1054,14 +1079,14 @@ nfsd4_process_open1(struct nfsd4_open *o goto out; instantiate_new_owner: status = nfserr_resource; - if (!(sop = alloc_init_stateowner(strhashval, clp, open))) + if (!(sop = alloc_init_open_stateowner(strhashval, clp, open))) goto out; open->op_stateowner = sop; status = nfs_ok; renew: renew_client(sop->so_client); out: - up(&client_sema); /*XXX need finer grained locking */ + nfs4_unlock_state(); return status; } @@ -1083,7 +1108,7 @@ nfsd4_process_open2(struct svc_rqst *rqs ino = current_fh->fh_dentry->d_inode; - down(&client_sema); /*XXX need finer grained locking */ + nfs4_lock_state(); fi_hashval = file_hashval(ino); if (find_file(fi_hashval, ino, &fp)) { /* Search for conflicting share reservations */ @@ -1169,7 +1194,7 @@ out: if (!open->op_stateowner->so_confirmed) open->op_rflags |= NFS4_OPEN_RESULT_CONFIRM; - up(&client_sema); /*XXX need finer grained locking */ + nfs4_unlock_state(); return status; out_free: kfree(stp); @@ -1187,8 +1212,8 @@ nfsd4_renew(clientid_t *clid) unsigned int idhashval; int status; - down(&client_sema); - printk("process_renew(%08x/%08x): starting\n", + nfs4_lock_state(); + dprintk("process_renew(%08x/%08x): starting\n", clid->cl_boot, clid->cl_id); status = nfserr_stale_clientid; if (STALE_CLIENTID(clid)) @@ -1214,10 +1239,10 @@ nfsd4_renew(clientid_t *clid) * Presumably this is because the client took too long to * RENEW, so return NFS4ERR_EXPIRED. */ - printk("nfsd4_renew: clientid not found!\n"); + dprintk("nfsd4_renew: clientid not found!\n"); status = nfserr_expired; out: - up(&client_sema); + nfs4_unlock_state(); return status; } @@ -1229,7 +1254,7 @@ nfs4_laundromat(void) time_t cutoff = get_seconds() - NFSD_LEASE_TIME; time_t t, return_val = NFSD_LEASE_TIME; - down(&client_sema); + nfs4_lock_state(); dprintk("NFSD: laundromat service - starting, examining clients\n"); list_for_each_safe(pos, next, &client_lru) { @@ -1246,7 +1271,7 @@ nfs4_laundromat(void) } if (return_val < NFSD_LAUNDROMAT_MINTIMEOUT) return_val = NFSD_LAUNDROMAT_MINTIMEOUT; - up(&client_sema); + nfs4_unlock_state(); return return_val; } @@ -1260,28 +1285,9 @@ laundromat_main(void *not_used) schedule_delayed_work(&laundromat_work, t*HZ); } -/* search openstateid_hashtbl[] for stateid */ -struct nfs4_stateid * -find_stateid(stateid_t *stid) -{ - struct list_head *pos, *next; - struct nfs4_stateid *local = NULL; - u32 st_id = stid->si_stateownerid; - u32 f_id = stid->si_fileid; - unsigned int hashval = openstateid_hashval(st_id, f_id); - - list_for_each_safe(pos, next, &openstateid_hashtbl[hashval]) { - local = list_entry(pos, struct nfs4_stateid, st_hash); - if((local->st_stateid.si_stateownerid == st_id) && - (local->st_stateid.si_fileid == f_id)) - return local; - } - return NULL; -} - /* search ownerid_hashtbl[] for stateid owner (stateid->si_stateownerid) */ struct nfs4_stateowner * -find_stateowner_id(u32 st_id) { +find_openstateowner_id(u32 st_id) { struct list_head *pos, *next; struct nfs4_stateowner *local = NULL; unsigned int hashval = ownerid_hashval(st_id); @@ -1321,7 +1327,7 @@ nfs4_preprocess_stateid_op(struct svc_fh struct nfs4_stateid *stp; int status; - dprintk("NFSD: preprocess_stateid_op:stateid = (%08x/%08x/%08x/%08x)\n", + dprintk("NFSD: preprocess_stateid_op: stateid = (%08x/%08x/%08x/%08x)\n", stateid->si_boot, stateid->si_stateownerid, stateid->si_fileid, stateid->si_generation); @@ -1334,27 +1340,27 @@ nfs4_preprocess_stateid_op(struct svc_fh /* BAD STATEID */ status = nfserr_bad_stateid; - if (!(stp = find_stateid(stateid))) { - dprintk("NFSD: process stateid: no open stateid!\n"); + if (!(stp = find_stateid(stateid, flags))) { + dprintk("NFSD: preprocess_stateid_op: no open stateid!\n"); goto out; } if ((flags & CHECK_FH) && nfs4_check_fh(current_fh, stp)) { - dprintk("NFSD: preprocess_seqid_op: fh-stateid mismatch!\n"); + dprintk("NFSD: preprocess_stateid_op: fh-stateid mismatch!\n"); goto out; } if (!stp->st_stateowner->so_confirmed) { - dprintk("process_stateid: lockowner not confirmed yet!\n"); + dprintk("preprocess_stateid_op: lockowner not confirmed yet!\n"); goto out; } if (stateid->si_generation > stp->st_stateid.si_generation) { - dprintk("process_stateid: future stateid?!\n"); + dprintk("preprocess_stateid_op: future stateid?!\n"); goto out; } /* OLD STATEID */ status = nfserr_old_stateid; if (stateid->si_generation < stp->st_stateid.si_generation) { - dprintk("process_stateid: old stateid!\n"); + dprintk("preprocess_stateid_op: old stateid!\n"); goto out; } *stpp = stp; @@ -1367,8 +1373,6 @@ out: /* * Checks for sequence id mutating operations. - * - * XXX need to code replay cache logic */ int nfs4_preprocess_seqid_op(struct svc_fh *current_fh, u32 seqid, stateid_t *stateid, int flags, struct nfs4_stateowner **sopp, struct nfs4_stateid **stpp) @@ -1403,7 +1407,7 @@ nfs4_preprocess_seqid_op(struct svc_fh * * this might be a retransmitted CLOSE which has arrived after * the openfile has been released. */ - if (!(stp = find_stateid(stateid))) + if (!(stp = find_stateid(stateid, flags))) goto no_nfs4_stateid; status = nfserr_bad_stateid; @@ -1459,20 +1463,21 @@ no_nfs4_stateid: * starting by trying to look up the stateowner. * If stateowner is not found - stateid is bad. */ - if (!(sop = find_stateowner_id(stateid->si_stateownerid))) { + if (!(sop = find_openstateowner_id(stateid->si_stateownerid))) { printk("NFSD: preprocess_seqid_op: no stateowner or nfs4_stateid!\n"); status = nfserr_bad_stateid; goto out; } check_replay: - status = nfserr_bad_seqid; if (seqid == sop->so_seqid) { printk("NFSD: preprocess_seqid_op: retransmission?\n"); - /* XXX will need to indicate replay to calling function here */ + /* indicate replay to calling function */ + status = NFSERR_REPLAY_ME; } else printk("NFSD: preprocess_seqid_op: bad seqid (expected %d, got %d\n", sop->so_seqid +1, seqid); + status = nfserr_bad_seqid; goto out; } @@ -1487,11 +1492,11 @@ nfsd4_open_confirm(struct svc_rqst *rqst (int)current_fh->fh_dentry->d_name.len, current_fh->fh_dentry->d_name.name); oc->oc_stateowner = NULL; - down(&client_sema); /* XXX need finer grained locking */ + nfs4_lock_state(); if ((status = nfs4_preprocess_seqid_op(current_fh, oc->oc_seqid, &oc->oc_req_stateid, - CHECK_FH | CONFIRM, + CHECK_FH | CONFIRM | OPEN_STATE, &oc->oc_stateowner, &stp))) goto out; @@ -1499,7 +1504,6 @@ nfsd4_open_confirm(struct svc_rqst *rqst sop->so_confirmed = 1; update_stateid(&stp->st_stateid); memcpy(&oc->oc_resp_stateid, &stp->st_stateid, sizeof(stateid_t)); - /* XXX renew the client lease here */ dprintk("NFSD: nfsd4_open_confirm: success, seqid=%d " "stateid=(%08x/%08x/%08x/%08x)\n", oc->oc_seqid, stp->st_stateid.si_boot, @@ -1508,7 +1512,7 @@ nfsd4_open_confirm(struct svc_rqst *rqst stp->st_stateid.si_generation); status = nfs_ok; out: - up(&client_sema); + nfs4_unlock_state(); return status; } int @@ -1521,10 +1525,11 @@ nfsd4_open_downgrade(struct svc_rqst *rq (int)current_fh->fh_dentry->d_name.len, current_fh->fh_dentry->d_name.name); - down(&client_sema); /* XXX need finer grained locking */ + nfs4_lock_state(); if ((status = nfs4_preprocess_seqid_op(current_fh, od->od_seqid, &od->od_stateid, - CHECK_FH, &od->od_stateowner, &stp))) + CHECK_FH | OPEN_STATE, + &od->od_stateowner, &stp))) goto out; status = nfserr_inval; @@ -1546,7 +1551,7 @@ nfsd4_open_downgrade(struct svc_rqst *rq memcpy(&od->od_stateid, &stp->st_stateid, sizeof(stateid_t)); status = nfs_ok; out: - up(&client_sema); + nfs4_unlock_state(); return status; } @@ -1560,10 +1565,10 @@ nfsd4_close(struct svc_rqst *rqstp, stru (int)current_fh->fh_dentry->d_name.len, current_fh->fh_dentry->d_name.name); - down(&client_sema); /* XXX need finer grained locking */ + nfs4_lock_state(); if ((status = nfs4_preprocess_seqid_op(current_fh, close->cl_seqid, &close->cl_stateid, - CHECK_FH, + CHECK_FH | OPEN_STATE, &close->cl_stateowner, &stp))) goto out; /* @@ -1573,13 +1578,525 @@ nfsd4_close(struct svc_rqst *rqstp, stru update_stateid(&stp->st_stateid); memcpy(&close->cl_stateid, &stp->st_stateid, sizeof(stateid_t)); - /* release_open_state() calls nfsd_close() if needed */ - release_open_state(stp,close); + /* release_state_owner() calls nfsd_close() if needed */ + release_state_owner(stp, &close->cl_stateowner, OPEN_STATE); out: - up(&client_sema); + nfs4_unlock_state(); return status; } +/* + * Lock owner state (byte-range locks) + */ +#define LOFF_OVERFLOW(start, len) ((u64)(len) > ~(u64)(start)) +#define LOCK_HASH_BITS 8 +#define LOCK_HASH_SIZE (1 << LOCK_HASH_BITS) +#define LOCK_HASH_MASK (LOCK_HASH_SIZE - 1) + +#define lockownerid_hashval(id) \ + ((id) & LOCK_HASH_MASK) +#define lock_ownerstr_hashval(x, clientid, ownername) \ + ((file_hashval(x) + (clientid) + opaque_hashval((ownername.data), (ownername.len))) & LOCK_HASH_MASK) + +static struct list_head lock_ownerid_hashtbl[LOCK_HASH_SIZE]; +static struct list_head lock_ownerstr_hashtbl[LOCK_HASH_SIZE]; +static struct list_head lockstateid_hashtbl[STATEID_HASH_SIZE]; + +struct nfs4_stateid * +find_stateid(stateid_t *stid, int flags) +{ + struct list_head *pos, *next; + struct nfs4_stateid *local = NULL; + u32 st_id = stid->si_stateownerid; + u32 f_id = stid->si_fileid; + unsigned int hashval; + + dprintk("NFSD: find_stateid flags 0x%x\n",flags); + if ((flags & LOCK_STATE) || (flags & RDWR_STATE)) { + hashval = stateid_hashval(st_id, f_id); + list_for_each_safe(pos, next, &lockstateid_hashtbl[hashval]) { + local = list_entry(pos, struct nfs4_stateid, st_hash); + if((local->st_stateid.si_stateownerid == st_id) && + (local->st_stateid.si_fileid == f_id)) + return local; + } + } + if ((flags & OPEN_STATE) || (flags & RDWR_STATE)) { + hashval = stateid_hashval(st_id, f_id); + list_for_each_safe(pos, next, &stateid_hashtbl[hashval]) { + local = list_entry(pos, struct nfs4_stateid, st_hash); + if((local->st_stateid.si_stateownerid == st_id) && + (local->st_stateid.si_fileid == f_id)) + return local; + } + } else + printk("NFSD: find_stateid: ERROR: no state flag\n"); + return NULL; +} + + +/* + * TODO: Linux file offsets are _signed_ 64-bit quantities, which means that + * we can't properly handle lock requests that go beyond the (2^63 - 1)-th + * byte, because of sign extension problems. Since NFSv4 calls for 64-bit + * locking, this prevents us from being completely protocol-compliant. The + * real solution to this problem is to start using unsigned file offsets in + * the VFS, but this is a very deep change! + */ +static inline void +nfs4_transform_lock_offset(struct file_lock *lock) +{ + if (lock->fl_start < 0) + lock->fl_start = OFFSET_MAX; + if (lock->fl_end < 0) + lock->fl_end = OFFSET_MAX; +} + +int +nfs4_verify_lock_stateowner(struct nfs4_stateowner *sop, unsigned int hashval) +{ + struct list_head *pos, *next; + struct nfs4_stateowner *local = NULL; + int status = 0; + + if (hashval >= LOCK_HASH_SIZE) + goto out; + list_for_each_safe(pos, next, &lock_ownerid_hashtbl[hashval]) { + local = list_entry(pos, struct nfs4_stateowner, so_idhash); + if (local == sop) { + status = 1; + goto out; + } + } +out: + return status; +} + + +static inline void +nfs4_set_lock_denied(struct file_lock *fl, struct nfsd4_lock_denied *deny) +{ + struct nfs4_stateowner *sop = (struct nfs4_stateowner *) fl->fl_owner; + + deny->ld_sop = NULL; + if (nfs4_verify_lock_stateowner(sop, fl->fl_pid)) + deny->ld_sop = sop; + deny->ld_start = fl->fl_start; + deny->ld_length = ~(u64)0; + if (fl->fl_end != ~(u64)0) + deny->ld_length = fl->fl_end - fl->fl_start + 1; + deny->ld_type = NFS4_READ_LT; + if (fl->fl_type != F_RDLCK) + deny->ld_type = NFS4_WRITE_LT; +} + + +static int +find_lockstateowner_str(unsigned int hashval, struct xdr_netobj *owner, clientid_t *clid, struct nfs4_stateowner **op) { + struct list_head *pos, *next; + struct nfs4_stateowner *local = NULL; + + list_for_each_safe(pos, next, &lock_ownerstr_hashtbl[hashval]) { + local = list_entry(pos, struct nfs4_stateowner, so_strhash); + if(!cmp_owner_str(local, owner, clid)) + continue; + *op = local; + return(1); + } + *op = NULL; + return 0; +} + +/* + * Alloc a lock owner structure. + * Called in nfsd4_lock - therefore, OPEN and OPEN_CONFIRM (if needed) has + * occured. + * + * strhashval = lock_ownerstr_hashval + * so_seqid = lock->lk_new_lock_seqid - 1: it gets bumped in encode + */ + +static struct nfs4_stateowner * +alloc_init_lock_stateowner(unsigned int strhashval, struct nfs4_client *clp, struct nfsd4_lock *lock) { + struct nfs4_stateowner *sop; + struct nfs4_replay *rp; + unsigned int idhashval; + + if (!(sop = alloc_stateowner(&lock->lk_new_owner))) + return (struct nfs4_stateowner *)NULL; + idhashval = lockownerid_hashval(current_ownerid); + INIT_LIST_HEAD(&sop->so_idhash); + INIT_LIST_HEAD(&sop->so_strhash); + INIT_LIST_HEAD(&sop->so_perclient); + INIT_LIST_HEAD(&sop->so_perfilestate); + list_add(&sop->so_idhash, &lock_ownerid_hashtbl[idhashval]); + list_add(&sop->so_strhash, &lock_ownerstr_hashtbl[strhashval]); + list_add(&sop->so_perclient, &clp->cl_perclient); + add_perclient++; + sop->so_is_open_owner = 0; + sop->so_id = current_ownerid++; + sop->so_client = clp; + sop->so_seqid = lock->lk_new_lock_seqid - 1; + sop->so_confirmed = 1; + rp = &sop->so_replay; + rp->rp_status = NFSERR_SERVERFAULT; + rp->rp_buflen = 0; + rp->rp_buf = rp->rp_ibuf; + alloc_lsowner++; + return sop; +} + +struct nfs4_stateid * +alloc_init_lock_stateid(struct nfs4_stateowner *sop, struct nfs4_file *fp, struct nfs4_stateid *open_stp) +{ + struct nfs4_stateid *stp; + unsigned int hashval = stateid_hashval(sop->so_id, fp->fi_id); + + if ((stp = kmalloc(sizeof(struct nfs4_stateid), + GFP_KERNEL)) == NULL) + goto out; + + INIT_LIST_HEAD(&stp->st_hash); + INIT_LIST_HEAD(&stp->st_perfile); + INIT_LIST_HEAD(&stp->st_perfilestate); + list_add(&stp->st_hash, &lockstateid_hashtbl[hashval]); + list_add(&stp->st_perfile, &fp->fi_perfile); + list_add_perfile++; + list_add(&stp->st_perfilestate, &sop->so_perfilestate); + stp->st_stateowner = sop; + stp->st_file = fp; + stp->st_stateid.si_boot = boot_time; + stp->st_stateid.si_stateownerid = sop->so_id; + stp->st_stateid.si_fileid = fp->fi_id; + stp->st_stateid.si_generation = 0; + stp->st_vfs_file = open_stp->st_vfs_file; + stp->st_vfs_set = open_stp->st_vfs_set; + stp->st_share_access = -1; + stp->st_share_deny = -1; + +out: + return stp; +} + +/* + * LOCK operation + */ +int +nfsd4_lock(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_lock *lock) +{ + struct nfs4_stateowner *lock_sop = NULL, *open_sop = NULL; + struct nfs4_stateid *lock_stp; + struct file *filp; + struct file_lock file_lock; + struct file_lock *conflock; + int status = 0; + unsigned int strhashval; + + dprintk("NFSD: nfsd4_lock: start=%Ld length=%Ld\n", + lock->lk_offset, lock->lk_length); + + lock->lk_stateowner = NULL; + nfs4_lock_state(); + + if (lock->lk_is_new) { + /* + * Client indicates that this is a new lockowner. + * Use open owner and open stateid to create lock owner and lock + * stateid. + */ + struct nfs4_stateid *open_stp = NULL; + struct nfs4_file *fp; + + status = nfserr_stale_clientid; + if (STALE_CLIENTID(&lock->lk_new_clientid)) { + printk("NFSD: nfsd4_lock: clientid is stale!\n"); + goto out; + } + /* validate and update open stateid and open seqid */ + status = nfs4_preprocess_seqid_op(current_fh, + lock->lk_new_open_seqid, + &lock->lk_new_open_stateid, + CHECK_FH | OPEN_STATE, + &open_sop, &open_stp); + if (status) + goto out; + /* create lockowner and lock stateid */ + fp = open_stp->st_file; + strhashval = lock_ownerstr_hashval(fp->fi_inode, + open_sop->so_client->cl_clientid.cl_id, + lock->v.new.owner); + + /* + * If we already have this lock owner, the client is in + * error (or our bookeeping is wrong!) + * for asking for a 'new lock'. + */ + status = nfserr_bad_stateid; + if (find_lockstateowner_str(strhashval, &lock->v.new.owner, + &lock->v.new.clientid, &lock_sop)) + goto out; + status = nfserr_resource; + if (!(lock->lk_stateowner = alloc_init_lock_stateowner(strhashval, + open_sop->so_client, lock))) + goto out; + if ((lock_stp = alloc_init_lock_stateid(lock->lk_stateowner, + fp, open_stp)) == NULL) + goto out; + /* bump the open seqid used to create the lock */ + open_sop->so_seqid++; + } else { + /* lock (lock owner + lock stateid) already exists */ + status = nfs4_preprocess_seqid_op(current_fh, + lock->lk_old_lock_seqid, + &lock->lk_old_lock_stateid, + CHECK_FH | LOCK_STATE, + &lock->lk_stateowner, &lock_stp); + if (status) + goto out; + } + /* lock->lk_stateowner and lock_stp have been created or found */ + filp = &lock_stp->st_vfs_file; + + if ((status = fh_verify(rqstp, current_fh, S_IFREG, MAY_LOCK))) { + printk("NFSD: nfsd4_lock: permission denied!\n"); + goto out; + } + + switch (lock->lk_type) { + case NFS4_READ_LT: + case NFS4_READW_LT: + file_lock.fl_type = F_RDLCK; + break; + case NFS4_WRITE_LT: + case NFS4_WRITEW_LT: + file_lock.fl_type = F_WRLCK; + break; + default: + status = nfserr_inval; + goto out; + } + file_lock.fl_owner = (fl_owner_t) lock->lk_stateowner; + file_lock.fl_pid = lockownerid_hashval(lock->lk_stateowner->so_id); + file_lock.fl_file = filp; + file_lock.fl_flags = FL_POSIX; + file_lock.fl_notify = NULL; + file_lock.fl_insert = NULL; + file_lock.fl_remove = NULL; + + file_lock.fl_start = lock->lk_offset; + if ((lock->lk_length == ~(u64)0) || + LOFF_OVERFLOW(lock->lk_offset, lock->lk_length)) + file_lock.fl_end = ~(u64)0; + else + file_lock.fl_end = lock->lk_offset + lock->lk_length - 1; + nfs4_transform_lock_offset(&file_lock); + + /* + * Try to lock the file in the VFS. + * Note: locks.c uses the BKL to protect the inode's lock list. + */ + + status = posix_lock_file(filp, &file_lock); + dprintk("NFSD: nfsd4_lock: posix_test_lock passed. posix_lock_file status %d\n",status); + switch (-status) { + case 0: /* success! */ + update_stateid(&lock_stp->st_stateid); + memcpy(&lock->lk_resp_stateid, &lock_stp->st_stateid, + sizeof(stateid_t)); + goto out; + case (EAGAIN): + goto conflicting_lock; + case (EDEADLK): + status = nfserr_deadlock; + default: + dprintk("NFSD: nfsd4_lock: posix_lock_file() failed! status %d\n",status); + goto out_destroy_new_stateid; + } + +conflicting_lock: + dprintk("NFSD: nfsd4_lock: conflicting lock found!\n"); + status = nfserr_denied; + /* XXX There is a race here. Future patch needed to provide + * an atomic posix_lock_and_test_file + */ + if (!(conflock = posix_test_lock(filp, &file_lock))) { + status = nfserr_serverfault; + goto out; + } + nfs4_set_lock_denied(conflock, &lock->lk_denied); + +out_destroy_new_stateid: + if (lock->lk_is_new) { + dprintk("NFSD: nfsd4_lock: destroy new stateid!\n"); + /* + * An error encountered after instantiation of the new + * stateid has forced us to destroy it. + */ + if (!seqid_mutating_err(status)) + open_sop->so_seqid--; + + release_state_owner(lock_stp, &lock->lk_stateowner, LOCK_STATE); + } +out: + nfs4_unlock_state(); + return status; +} + +/* + * LOCKT operation + */ +int +nfsd4_lockt(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_lockt *lockt) +{ + struct inode *inode; + struct nfs4_stateowner *sop; + struct file file; + struct file_lock file_lock; + struct file_lock *conflicting_lock; + unsigned int strhashval; + int status; + + lockt->lt_stateowner = NULL; + nfs4_lock_state(); + + status = nfserr_stale_clientid; + if (STALE_CLIENTID(&lockt->lt_clientid)) { + printk("NFSD: nfsd4_lockt: clientid is stale!\n"); + goto out; + } + + if ((status = fh_verify(rqstp, current_fh, S_IFREG, 0))) { + printk("NFSD: nfsd4_lockt: fh_verify() failed!\n"); + goto out; + } + + inode = current_fh->fh_dentry->d_inode; + switch (lockt->lt_type) { + case NFS4_READ_LT: + case NFS4_READW_LT: + file_lock.fl_type = F_RDLCK; + break; + case NFS4_WRITE_LT: + case NFS4_WRITEW_LT: + file_lock.fl_type = F_WRLCK; + break; + default: + printk("NFSD: nfs4_lockt: bad lock type!\n"); + status = nfserr_inval; + goto out; + } + + strhashval = lock_ownerstr_hashval(inode, + lockt->lt_clientid.cl_id, lockt->lt_owner); + + if (find_lockstateowner_str(strhashval, &lockt->lt_owner, + &lockt->lt_clientid, + &lockt->lt_stateowner)) { + printk("NFSD: nsfd4_lockt: lookup_lockowner() failed!\n"); + goto out; + } + + sop = lockt->lt_stateowner; + if (sop) { + file_lock.fl_owner = (fl_owner_t) sop; + file_lock.fl_pid = lockownerid_hashval(sop->so_id); + } else { + file_lock.fl_owner = NULL; + file_lock.fl_pid = 0; + } + file_lock.fl_flags = FL_POSIX; + + file_lock.fl_start = lockt->lt_offset; + if ((lockt->lt_length == ~(u64)0) || LOFF_OVERFLOW(lockt->lt_offset, lockt->lt_length)) + file_lock.fl_end = ~(u64)0; + else + file_lock.fl_end = lockt->lt_offset + lockt->lt_length - 1; + + nfs4_transform_lock_offset(&file_lock); + + /* posix_test_lock uses the struct file _only_ to resolve the inode. + * since LOCKT doesn't require an OPEN, and therefore a struct + * file may not exist, pass posix_test_lock a struct file with + * only the dentry:inode set. + */ + memset(&file, 0, sizeof (struct file)); + file.f_dentry = current_fh->fh_dentry; + + status = nfs_ok; + conflicting_lock = posix_test_lock(&file, &file_lock); + if (conflicting_lock) { + status = nfserr_denied; + nfs4_set_lock_denied(conflicting_lock, &lockt->lt_denied); + } +out: + nfs4_unlock_state(); + return status; +} + +int +nfsd4_locku(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_locku *locku) +{ + struct nfs4_stateid *stp; + struct file *filp = NULL; + struct file_lock file_lock; + int status; + + dprintk("NFSD: nfsd4_locku: start=%Ld length=%Ld\n", + locku->lu_offset, locku->lu_length); + nfs4_lock_state(); + + if ((status = nfs4_preprocess_seqid_op(current_fh, + locku->lu_seqid, + &locku->lu_stateid, + CHECK_FH | LOCK_STATE, + &locku->lu_stateowner, &stp))) + goto out; + + filp = &stp->st_vfs_file; + BUG_ON(!filp); + file_lock.fl_type = F_UNLCK; + file_lock.fl_owner = (fl_owner_t) locku->lu_stateowner; + file_lock.fl_pid = lockownerid_hashval(locku->lu_stateowner->so_id); + file_lock.fl_file = filp; + file_lock.fl_flags = FL_POSIX; + file_lock.fl_notify = NULL; + file_lock.fl_insert = NULL; + file_lock.fl_remove = NULL; + file_lock.fl_start = locku->lu_offset; + + if ((locku->lu_length == ~(u64)0) || LOFF_OVERFLOW(locku->lu_offset, locku->lu_length)) + file_lock.fl_end = ~(u64)0; + else + file_lock.fl_end = locku->lu_offset + locku->lu_length - 1; + nfs4_transform_lock_offset(&file_lock); + + /* + * Try to unlock the file in the VFS. + */ + status = posix_lock_file(filp, &file_lock); + if (status) { + printk("NFSD: nfs4_locku: posix_lock_file failed!\n"); + goto out_nfserr; + } + /* + * OK, unlock succeeded; the only thing left to do is update the stateid. + */ + update_stateid(&stp->st_stateid); + memcpy(&locku->lu_stateid, &stp->st_stateid, sizeof(stateid_t)); + +out: + nfs4_unlock_state(); + return status; + +out_nfserr: + status = nfserrno(status); + goto out; +} + +/* + * Start and stop routines + */ + void nfs4_state_init(void) { @@ -1600,8 +2117,13 @@ nfs4_state_init(void) INIT_LIST_HEAD(&ownerstr_hashtbl[i]); INIT_LIST_HEAD(&ownerid_hashtbl[i]); } - for (i = 0; i < OPENSTATEID_HASH_SIZE; i++) { - INIT_LIST_HEAD(&openstateid_hashtbl[i]); + for (i = 0; i < STATEID_HASH_SIZE; i++) { + INIT_LIST_HEAD(&stateid_hashtbl[i]); + INIT_LIST_HEAD(&lockstateid_hashtbl[i]); + } + for (i = 0; i < LOCK_HASH_SIZE; i++) { + INIT_LIST_HEAD(&lock_ownerid_hashtbl[i]); + INIT_LIST_HEAD(&lock_ownerstr_hashtbl[i]); } memset(&zerostateid, 0, sizeof(stateid_t)); memset(&onestateid, ~0, sizeof(stateid_t)); @@ -1641,8 +2163,8 @@ __nfs4_state_shutdown(void) add_perclient, del_perclient); dprintk("NFSD: alloc_file %d free_file %d\n", alloc_file, free_file); - dprintk("NFSD: alloc_sowner %d free_sowner %d\n", - alloc_sowner, free_sowner); + dprintk("NFSD: alloc_sowner %d alloc_lsowner %d free_sowner %d\n", + alloc_sowner, alloc_lsowner, free_sowner); dprintk("NFSD: vfsopen %d vfsclose %d\n", vfsopen, vfsclose); } @@ -1650,7 +2172,7 @@ __nfs4_state_shutdown(void) void nfs4_state_shutdown(void) { - down(&client_sema); + nfs4_lock_state(); __nfs4_state_shutdown(); - up(&client_sema); + nfs4_unlock_state(); } diff -prauN linux-2.6.0-test5/fs/nfsd/nfs4xdr.c wli-2.6.0-test5-bk12-25/fs/nfsd/nfs4xdr.c --- linux-2.6.0-test5/fs/nfsd/nfs4xdr.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nfsd/nfs4xdr.c 2003-09-25 19:16:06.000000000 -0700 @@ -568,6 +568,81 @@ nfsd4_decode_link(struct nfsd4_compounda } static int +nfsd4_decode_lock(struct nfsd4_compoundargs *argp, struct nfsd4_lock *lock) +{ + DECODE_HEAD; + + /* + * type, reclaim(boolean), offset, length, new_lock_owner(boolean) + */ + READ_BUF(28); + READ32(lock->lk_type); + if ((lock->lk_type < NFS4_READ_LT) || (lock->lk_type > NFS4_WRITEW_LT)) + goto xdr_error; + READ32(lock->lk_reclaim); + READ64(lock->lk_offset); + READ64(lock->lk_length); + READ32(lock->lk_is_new); + + if (lock->lk_is_new) { + READ_BUF(36); + READ32(lock->lk_new_open_seqid); + READ32(lock->lk_new_open_stateid.si_generation); + + COPYMEM(&lock->lk_new_open_stateid.si_opaque, sizeof(stateid_opaque_t)); + READ32(lock->lk_new_lock_seqid); + COPYMEM(&lock->lk_new_clientid, sizeof(clientid_t)); + READ32(lock->lk_new_owner.len); + READ_BUF(lock->lk_new_owner.len); + READMEM(lock->lk_new_owner.data, lock->lk_new_owner.len); + } else { + READ_BUF(20); + READ32(lock->lk_old_lock_stateid.si_generation); + COPYMEM(&lock->lk_old_lock_stateid.si_opaque, sizeof(stateid_opaque_t)); + READ32(lock->lk_old_lock_seqid); + } + + DECODE_TAIL; +} + +static int +nfsd4_decode_lockt(struct nfsd4_compoundargs *argp, struct nfsd4_lockt *lockt) +{ + DECODE_HEAD; + + READ_BUF(32); + READ32(lockt->lt_type); + if((lockt->lt_type < NFS4_READ_LT) || (lockt->lt_type > NFS4_WRITEW_LT)) + goto xdr_error; + READ64(lockt->lt_offset); + READ64(lockt->lt_length); + COPYMEM(&lockt->lt_clientid, 8); + READ32(lockt->lt_owner.len); + READ_BUF(lockt->lt_owner.len); + READMEM(lockt->lt_owner.data, lockt->lt_owner.len); + + DECODE_TAIL; +} + +static int +nfsd4_decode_locku(struct nfsd4_compoundargs *argp, struct nfsd4_locku *locku) +{ + DECODE_HEAD; + + READ_BUF(24 + sizeof(stateid_t)); + READ32(locku->lu_type); + if ((locku->lu_type < NFS4_READ_LT) || (locku->lu_type > NFS4_WRITEW_LT)) + goto xdr_error; + READ32(locku->lu_seqid); + READ32(locku->lu_stateid.si_generation); + COPYMEM(&locku->lu_stateid.si_opaque, sizeof(stateid_opaque_t)); + READ64(locku->lu_offset); + READ64(locku->lu_length); + + DECODE_TAIL; +} + +static int nfsd4_decode_lookup(struct nfsd4_compoundargs *argp, struct nfsd4_lookup *lookup) { DECODE_HEAD; @@ -932,6 +1007,7 @@ nfsd4_decode_compound(struct nfsd4_compo for (i = 0; i < argp->opcnt; i++) { op = &argp->ops[i]; + op->replay = NULL; /* * We can't use READ_BUF() here because we need to handle @@ -988,6 +1064,15 @@ nfsd4_decode_compound(struct nfsd4_compo case OP_LINK: op->status = nfsd4_decode_link(argp, &op->u.link); break; + case OP_LOCK: + op->status = nfsd4_decode_lock(argp, &op->u.lock); + break; + case OP_LOCKT: + op->status = nfsd4_decode_lockt(argp, &op->u.lockt); + break; + case OP_LOCKU: + op->status = nfsd4_decode_locku(argp, &op->u.locku); + break; case OP_LOOKUP: op->status = nfsd4_decode_lookup(argp, &op->u.lookup); break; @@ -1111,18 +1196,31 @@ nfsd4_decode_compound(struct nfsd4_compo #define ADJUST_ARGS() resp->p = p /* + * Header routine to setup seqid operation replay cache + */ +#define ENCODE_SEQID_OP_HEAD \ + u32 *p; \ + u32 *save; \ + \ + save = resp->p; + +/* * Routine for encoding the result of a * "seqid-mutating" NFSv4 operation. This is - * where seqids are incremented + * where seqids are incremented, and the + * replay cache is filled. */ -#define ENCODE_SEQID_OP_TAIL(stateowner) \ - BUG_ON(!stateowner); \ - if (seqid_mutating_err(nfserr) && stateowner) { \ - if (stateowner->so_confirmed) \ - stateowner->so_seqid++; \ - } \ - return nfserr; +#define ENCODE_SEQID_OP_TAIL(stateowner) do { \ + if (seqid_mutating_err(nfserr) && stateowner) { \ + if (stateowner->so_confirmed) \ + stateowner->so_seqid++; \ + stateowner->so_replay.rp_status = nfserr; \ + stateowner->so_replay.rp_buflen = \ + (((char *)(resp)->p - (char *)save)); \ + memcpy(stateowner->so_replay.rp_buf, save, \ + stateowner->so_replay.rp_buflen); \ + } } while(0) static u32 nfs4_ftypes[16] = { @@ -1623,7 +1721,7 @@ nfsd4_encode_access(struct nfsd4_compoun static void nfsd4_encode_close(struct nfsd4_compoundres *resp, int nfserr, struct nfsd4_close *close) { - ENCODE_HEAD; + ENCODE_SEQID_OP_HEAD; if (!nfserr) { RESERVE_SPACE(sizeof(stateid_t)); @@ -1631,8 +1729,7 @@ nfsd4_encode_close(struct nfsd4_compound WRITEMEM(&close->cl_stateid.si_opaque, sizeof(stateid_opaque_t)); ADJUST_ARGS(); } - if ((close->cl_stateowner) && (close->cl_stateowner->so_confirmed)) - close->cl_stateowner->so_seqid++; + ENCODE_SEQID_OP_TAIL(close->cl_stateowner); } @@ -1696,6 +1793,65 @@ nfsd4_encode_getfh(struct nfsd4_compound } } +/* +* Including all fields other than the name, a LOCK4denied structure requires +* 8(clientid) + 4(namelen) + 8(offset) + 8(length) + 4(type) = 32 bytes. +*/ +static void +nfsd4_encode_lock_denied(struct nfsd4_compoundres *resp, struct nfsd4_lock_denied *ld) +{ + ENCODE_HEAD; + + RESERVE_SPACE(32 + XDR_LEN(ld->ld_sop->so_owner.len)); + WRITE64(ld->ld_start); + WRITE64(ld->ld_length); + WRITE32(ld->ld_type); + WRITEMEM(&ld->ld_sop->so_client->cl_clientid, 8); + WRITE32(ld->ld_sop->so_owner.len); + WRITEMEM(ld->ld_sop->so_owner.data, ld->ld_sop->so_owner.len); + ADJUST_ARGS(); +} + +static void +nfsd4_encode_lock(struct nfsd4_compoundres *resp, int nfserr, struct nfsd4_lock *lock) +{ + + ENCODE_SEQID_OP_HEAD; + + if (!nfserr) { + RESERVE_SPACE(4 + sizeof(stateid_t)); + WRITE32(lock->lk_resp_stateid.si_generation); + WRITEMEM(&lock->lk_resp_stateid.si_opaque, sizeof(stateid_opaque_t)); + ADJUST_ARGS(); + } else if (nfserr == nfserr_denied) + nfsd4_encode_lock_denied(resp, &lock->lk_denied); + + ENCODE_SEQID_OP_TAIL(lock->lk_stateowner); +} + +static void +nfsd4_encode_lockt(struct nfsd4_compoundres *resp, int nfserr, struct nfsd4_lockt *lockt) +{ + if (nfserr == nfserr_denied) + nfsd4_encode_lock_denied(resp, &lockt->lt_denied); +} + +static void +nfsd4_encode_locku(struct nfsd4_compoundres *resp, int nfserr, struct nfsd4_locku *locku) +{ + ENCODE_SEQID_OP_HEAD; + + if (!nfserr) { + RESERVE_SPACE(sizeof(stateid_t)); + WRITE32(locku->lu_stateid.si_generation); + WRITEMEM(&locku->lu_stateid.si_opaque, sizeof(stateid_opaque_t)); + ADJUST_ARGS(); + } + + ENCODE_SEQID_OP_TAIL(locku->lu_stateowner); +} + + static void nfsd4_encode_link(struct nfsd4_compoundres *resp, int nfserr, struct nfsd4_link *link) { @@ -1712,7 +1868,7 @@ nfsd4_encode_link(struct nfsd4_compoundr static void nfsd4_encode_open(struct nfsd4_compoundres *resp, int nfserr, struct nfsd4_open *open) { - ENCODE_HEAD; + ENCODE_SEQID_OP_HEAD; if (nfserr) return; @@ -1773,10 +1929,10 @@ nfsd4_encode_open(struct nfsd4_compoundr ENCODE_SEQID_OP_TAIL(open->op_stateowner); } -static int +static void nfsd4_encode_open_confirm(struct nfsd4_compoundres *resp, int nfserr, struct nfsd4_open_confirm *oc) { - ENCODE_HEAD; + ENCODE_SEQID_OP_HEAD; if (!nfserr) { RESERVE_SPACE(sizeof(stateid_t)); @@ -1788,10 +1944,10 @@ nfsd4_encode_open_confirm(struct nfsd4_c ENCODE_SEQID_OP_TAIL(oc->oc_stateowner); } -static int +static void nfsd4_encode_open_downgrade(struct nfsd4_compoundres *resp, int nfserr, struct nfsd4_open_downgrade *od) { - ENCODE_HEAD; + ENCODE_SEQID_OP_HEAD; if (!nfserr) { RESERVE_SPACE(sizeof(stateid_t)); @@ -2106,6 +2262,15 @@ nfsd4_encode_operation(struct nfsd4_comp case OP_LINK: nfsd4_encode_link(resp, op->status, &op->u.link); break; + case OP_LOCK: + nfsd4_encode_lock(resp, op->status, &op->u.lock); + break; + case OP_LOCKT: + nfsd4_encode_lockt(resp, op->status, &op->u.lockt); + break; + case OP_LOCKU: + nfsd4_encode_locku(resp, op->status, &op->u.locku); + break; case OP_LOOKUP: break; case OP_LOOKUPP: @@ -2170,6 +2335,30 @@ nfsd4_encode_operation(struct nfsd4_comp *statp = op->status; } +/* + * Encode the reply stored in the stateowner reply cache + * + * XDR note: do not encode rp->rp_buflen: the buffer contains the + * previously sent already encoded operation. + */ +void +nfsd4_encode_replay(struct nfsd4_compoundres *resp, struct nfsd4_op *op) +{ + ENCODE_HEAD; + struct nfs4_replay *rp = op->replay; + + BUG_ON(!rp); + + RESERVE_SPACE(8); + WRITE32(op->opnum); + WRITE32(NFS_OK); + ADJUST_ARGS(); + + RESERVE_SPACE(rp->rp_buflen); + WRITEMEM(rp->rp_buf, rp->rp_buflen); + ADJUST_ARGS(); +} + /* * END OF "GENERIC" ENCODE ROUTINES. */ diff -prauN linux-2.6.0-test5/fs/nfsd/nfsfh.c wli-2.6.0-test5-bk12-25/fs/nfsd/nfsfh.c --- linux-2.6.0-test5/fs/nfsd/nfsfh.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nfsd/nfsfh.c 2003-09-25 19:16:06.000000000 -0700 @@ -125,6 +125,9 @@ fh_verify(struct svc_rqst *rqstp, struct case 1: len = 1; break; + case 2: + len = 3; + break; default: goto out; } @@ -137,7 +140,7 @@ fh_verify(struct svc_rqst *rqstp, struct if (fh->fh_size != NFS_FHSIZE) goto out; /* assume old filehandle format */ - xdev = u32_to_dev_t(fh->ofh_xdev); + xdev = old_decode_dev(fh->ofh_xdev); xino = u32_to_ino_t(fh->ofh_xino); mk_fsid_v0(tfh, xdev, xino); exp = exp_find(rqstp->rq_client, 0, tfh, &rqstp->rq_chandle); @@ -329,12 +332,21 @@ fh_compose(struct svc_fh *fhp, struct sv parent->d_name.name, dentry->d_name.name, (inode ? inode->i_ino : 0)); - if (ref_fh) { + /* for large devnums rules are simple */ + if (!old_valid_dev(ex_dev)) { + ref_fh_version = 1; + if (exp->ex_flags & NFSEXP_FSID) + ref_fh_fsid_type = 1; + else + ref_fh_fsid_type = 2; + } else if (ref_fh) { ref_fh_version = ref_fh->fh_handle.fh_version; ref_fh_fsid_type = ref_fh->fh_handle.fh_fsid_type; - if (ref_fh == fhp) - fh_put(ref_fh); + if (!(exp->ex_flags & NFSEXP_FSID) || ref_fh_fsid_type == 2) + ref_fh_fsid_type = 0; } + if (ref_fh == fhp) + fh_put(ref_fh); if (fhp->fh_locked || fhp->fh_dentry) { printk(KERN_ERR "fh_compose: fh %s/%s not initialized!\n", @@ -353,7 +365,7 @@ fh_compose(struct svc_fh *fhp, struct sv memset(&fhp->fh_handle.fh_base, 0, NFS_FHSIZE); fhp->fh_handle.fh_size = NFS_FHSIZE; fhp->fh_handle.ofh_dcookie = 0xfeebbaca; - fhp->fh_handle.ofh_dev = htonl((MAJOR(ex_dev)<<16)| MINOR(ex_dev)); + fhp->fh_handle.ofh_dev = old_encode_dev(ex_dev); fhp->fh_handle.ofh_xdev = fhp->fh_handle.ofh_dev; fhp->fh_handle.ofh_xino = ino_t_to_u32(exp->ex_dentry->d_inode->i_ino); fhp->fh_handle.ofh_dirino = ino_t_to_u32(parent_ino(dentry)); @@ -363,19 +375,33 @@ fh_compose(struct svc_fh *fhp, struct sv fhp->fh_handle.fh_version = 1; fhp->fh_handle.fh_auth_type = 0; datap = fhp->fh_handle.fh_auth+0; - if ((exp->ex_flags & NFSEXP_FSID) && - (ref_fh_fsid_type == 1)) { - fhp->fh_handle.fh_fsid_type = 1; - /* fsid_type 1 == 4 bytes filesystem id */ - mk_fsid_v1(datap, exp->ex_fsid); - datap += 1; - fhp->fh_handle.fh_size = 2*4; - } else { - fhp->fh_handle.fh_fsid_type = 0; - /* fsid_type 0 == 2byte major, 2byte minor, 4byte inode */ - mk_fsid_v0(datap, ex_dev, exp->ex_dentry->d_inode->i_ino); - datap += 2; - fhp->fh_handle.fh_size = 3*4; + fhp->fh_handle.fh_fsid_type = ref_fh_fsid_type; + switch (ref_fh_fsid_type) { + case 1: + /* fsid_type 1 == 4 bytes filesystem id */ + mk_fsid_v1(datap, exp->ex_fsid); + datap += 1; + fhp->fh_handle.fh_size = 2*4; + break; + case 2: + /* + * fsid_type 2: + * 4byte major, 4byte minor, 4byte inode + */ + mk_fsid_v2(datap, ex_dev, + exp->ex_dentry->d_inode->i_ino); + datap += 3; + fhp->fh_handle.fh_size = 4*4; + break; + default: + /* + * fsid_type 0: + * 2byte major, 2byte minor, 4byte inode + */ + mk_fsid_v0(datap, ex_dev, + exp->ex_dentry->d_inode->i_ino); + datap += 2; + fhp->fh_handle.fh_size = 3*4; } if (inode) { int size = fhp->fh_maxsize/4 - 3; diff -prauN linux-2.6.0-test5/fs/nfsd/nfsproc.c wli-2.6.0-test5-bk12-25/fs/nfsd/nfsproc.c --- linux-2.6.0-test5/fs/nfsd/nfsproc.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nfsd/nfsproc.c 2003-09-25 19:16:06.000000000 -0700 @@ -184,7 +184,7 @@ nfsd_proc_create(struct svc_rqst *rqstp, struct inode *inode; struct dentry *dchild; int nfserr, type, mode; - dev_t rdev = 0; + dev_t rdev = 0, wanted = new_decode_dev(attr->ia_size); dprintk("nfsd: CREATE %s %.*s\n", SVCFH_fmt(dirfhp), argp->len, argp->name); @@ -230,7 +230,7 @@ nfsd_proc_create(struct svc_rqst *rqstp, inode = newfhp->fh_dentry->d_inode; /* Unfudge the mode bits */ - if (attr->ia_valid & ATTR_MODE) { + if (attr->ia_valid & ATTR_MODE) { type = attr->ia_mode & S_IFMT; mode = attr->ia_mode & ~S_IFMT; if (!type) { @@ -242,7 +242,7 @@ nfsd_proc_create(struct svc_rqst *rqstp, case S_IFCHR: case S_IFBLK: /* reserve rdev for later checking */ - attr->ia_size = inode->i_rdev; + rdev = inode->i_rdev; attr->ia_valid |= ATTR_SIZE; /* FALLTHROUGH */ @@ -277,22 +277,16 @@ nfsd_proc_create(struct svc_rqst *rqstp, */ if (type != S_IFREG) { int is_borc = 0; - u32 size = attr->ia_size; - - /* may need to change when we widen dev_t */ - rdev = old_decode_dev(size); if (type != S_IFBLK && type != S_IFCHR) { rdev = 0; } else if (type == S_IFCHR && !(attr->ia_valid & ATTR_SIZE)) { /* If you think you've seen the worst, grok this. */ type = S_IFIFO; - } else if (size != rdev) { - /* dev got truncated because of 16bit Linux dev_t */ - nfserr = nfserr_inval; - goto out_unlock; } else { /* Okay, char or block special */ is_borc = 1; + if (!rdev) + rdev = wanted; } /* we've used the SIZE information, so discard it */ @@ -300,11 +294,10 @@ nfsd_proc_create(struct svc_rqst *rqstp, /* Make sure the type and device matches */ nfserr = nfserr_exist; - if (inode && (type != (inode->i_mode & S_IFMT) || - (is_borc && inode->i_rdev != rdev))) + if (inode && type != (inode->i_mode & S_IFMT)) goto out_unlock; } - + nfserr = 0; if (!inode) { /* File doesn't exist. Create it and set attrs */ diff -prauN linux-2.6.0-test5/fs/nfsd/nfsxdr.c wli-2.6.0-test5-bk12-25/fs/nfsd/nfsxdr.c --- linux-2.6.0-test5/fs/nfsd/nfsxdr.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nfsd/nfsxdr.c 2003-09-25 19:16:06.000000000 -0700 @@ -159,16 +159,14 @@ encode_fattr(struct svc_rqst *rqstp, u32 } *p++ = htonl((u32) stat.blksize); if (S_ISCHR(type) || S_ISBLK(type)) - *p++ = htonl((u32) stat.rdev); + *p++ = htonl(new_encode_dev(stat.rdev)); else *p++ = htonl(0xffffffff); *p++ = htonl((u32) stat.blocks); - if (rqstp->rq_reffh->fh_version == 1 - && rqstp->rq_reffh->fh_fsid_type == 1 - && (fhp->fh_export->ex_flags & NFSEXP_FSID)) + if (is_fsid(fhp, rqstp->rq_reffh)) *p++ = htonl((u32) fhp->fh_export->ex_fsid); else - *p++ = htonl((u32) stat.dev); + *p++ = htonl(new_encode_dev(stat.dev)); *p++ = htonl((u32) stat.ino); *p++ = htonl((u32) stat.atime.tv_sec); *p++ = htonl(stat.atime.tv_nsec ? stat.atime.tv_nsec / 1000 : 0); diff -prauN linux-2.6.0-test5/fs/nls/Makefile wli-2.6.0-test5-bk12-25/fs/nls/Makefile --- linux-2.6.0-test5/fs/nls/Makefile 2003-09-08 12:49:54.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/Makefile 2003-09-25 19:16:06.000000000 -0700 @@ -19,14 +19,13 @@ obj-$(CONFIG_NLS_CODEPAGE_864) += nls_cp obj-$(CONFIG_NLS_CODEPAGE_865) += nls_cp865.o obj-$(CONFIG_NLS_CODEPAGE_866) += nls_cp866.o obj-$(CONFIG_NLS_CODEPAGE_869) += nls_cp869.o -obj-$(CONFIG_NLS_CODEPAGE_874) += nls_cp874.o nls_tis-620.o -obj-$(CONFIG_NLS_CODEPAGE_932) += nls_cp932.o nls_sjis.o nls_euc-jp.o -obj-$(CONFIG_NLS_CODEPAGE_936) += nls_cp936.o nls_gb2312.o -obj-$(CONFIG_NLS_CODEPAGE_949) += nls_cp949.o nls_euc-kr.o -obj-$(CONFIG_NLS_CODEPAGE_950) += nls_cp950.o nls_big5.o +obj-$(CONFIG_NLS_CODEPAGE_874) += nls_cp874.o +obj-$(CONFIG_NLS_CODEPAGE_932) += nls_cp932.o nls_euc-jp.o +obj-$(CONFIG_NLS_CODEPAGE_936) += nls_cp936.o +obj-$(CONFIG_NLS_CODEPAGE_949) += nls_cp949.o +obj-$(CONFIG_NLS_CODEPAGE_950) += nls_cp950.o obj-$(CONFIG_NLS_CODEPAGE_1250) += nls_cp1250.o obj-$(CONFIG_NLS_CODEPAGE_1251) += nls_cp1251.o -obj-$(CONFIG_NLS_CODEPAGE_1255) += nls_cp1255.o obj-$(CONFIG_NLS_ISO8859_1) += nls_iso8859-1.o obj-$(CONFIG_NLS_ISO8859_2) += nls_iso8859-2.o obj-$(CONFIG_NLS_ISO8859_3) += nls_iso8859-3.o @@ -34,7 +33,7 @@ obj-$(CONFIG_NLS_ISO8859_4) += nls_iso88 obj-$(CONFIG_NLS_ISO8859_5) += nls_iso8859-5.o obj-$(CONFIG_NLS_ISO8859_6) += nls_iso8859-6.o obj-$(CONFIG_NLS_ISO8859_7) += nls_iso8859-7.o -obj-$(CONFIG_NLS_ISO8859_8) += nls_cp1255.o nls_iso8859-8.o +obj-$(CONFIG_NLS_ISO8859_8) += nls_cp1255.o obj-$(CONFIG_NLS_ISO8859_9) += nls_iso8859-9.o obj-$(CONFIG_NLS_ISO8859_10) += nls_iso8859-10.o obj-$(CONFIG_NLS_ISO8859_13) += nls_iso8859-13.o diff -prauN linux-2.6.0-test5/fs/nls/nls_base.c wli-2.6.0-test5-bk12-25/fs/nls/nls_base.c --- linux-2.6.0-test5/fs/nls/nls_base.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_base.c 2003-09-25 19:16:06.000000000 -0700 @@ -203,9 +203,12 @@ static struct nls_table *find_nls(char * { struct nls_table *nls; spin_lock(&nls_lock); - for (nls = tables; nls; nls = nls->next) + for (nls = tables; nls; nls = nls->next) { if (!strcmp(nls->charset, charset)) break; + if (nls->alias && !strcmp(nls->alias, charset)) + break; + } if (nls && !try_module_get(nls->owner)) nls = NULL; spin_unlock(&nls_lock); diff -prauN linux-2.6.0-test5/fs/nls/nls_big5.c wli-2.6.0-test5-bk12-25/fs/nls/nls_big5.c --- linux-2.6.0-test5/fs/nls/nls_big5.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_big5.c 1969-12-31 16:00:00.000000000 -0800 @@ -1,59 +0,0 @@ -/* - * linux/fs/nls_big5.c - */ - -#include -#include -#include -#include -#include - -static struct nls_table *p_nls; - -static struct nls_table table = { - .charset = "big5", - .owner = THIS_MODULE, -}; - -static int __init init_nls_big5(void) -{ - p_nls = load_nls("cp950"); - - if (p_nls) { - table.uni2char = p_nls->uni2char; - table.char2uni = p_nls->char2uni; - table.charset2upper = p_nls->charset2upper; - table.charset2lower = p_nls->charset2lower; - return register_nls(&table); - } - - return -EINVAL; -} - -static void __exit exit_nls_big5(void) -{ - unregister_nls(&table); - unload_nls(p_nls); -} - -module_init(init_nls_big5) -module_exit(exit_nls_big5) -MODULE_LICENSE("Dual BSD/GPL"); - -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * ---------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ diff -prauN linux-2.6.0-test5/fs/nls/nls_cp1250.c wli-2.6.0-test5-bk12-25/fs/nls/nls_cp1250.c --- linux-2.6.0-test5/fs/nls/nls_cp1250.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_cp1250.c 2003-09-25 19:16:06.000000000 -0700 @@ -345,21 +345,3 @@ module_init(init_nls_cp1250) module_exit(exit_nls_cp1250) MODULE_LICENSE("Dual BSD/GPL"); - -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * --------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ - diff -prauN linux-2.6.0-test5/fs/nls/nls_cp1251.c wli-2.6.0-test5-bk12-25/fs/nls/nls_cp1251.c --- linux-2.6.0-test5/fs/nls/nls_cp1251.c 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_cp1251.c 2003-09-25 19:16:06.000000000 -0700 @@ -299,20 +299,4 @@ static void __exit exit_nls_cp1251(void) module_init(init_nls_cp1251) module_exit(exit_nls_cp1251) -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * --------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ MODULE_LICENSE("Dual BSD/GPL"); diff -prauN linux-2.6.0-test5/fs/nls/nls_cp1255.c wli-2.6.0-test5-bk12-25/fs/nls/nls_cp1255.c --- linux-2.6.0-test5/fs/nls/nls_cp1255.c 2003-09-08 12:49:50.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_cp1255.c 2003-09-25 19:16:06.000000000 -0700 @@ -360,6 +360,7 @@ static int char2uni(const unsigned char static struct nls_table table = { .charset = "cp1255", + .alias = "iso8859-8", .uni2char = uni2char, .char2uni = char2uni, .charset2lower = charset2lower, @@ -380,20 +381,5 @@ static void __exit exit_nls_cp1255(void) module_init(init_nls_cp1255) module_exit(exit_nls_cp1255) -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * --------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ MODULE_LICENSE("Dual BSD/GPL"); +MODULE_ALIAS_NLS(iso8859-8); diff -prauN linux-2.6.0-test5/fs/nls/nls_cp437.c wli-2.6.0-test5-bk12-25/fs/nls/nls_cp437.c --- linux-2.6.0-test5/fs/nls/nls_cp437.c 2003-09-08 12:50:33.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_cp437.c 2003-09-25 19:16:06.000000000 -0700 @@ -385,20 +385,4 @@ static void __exit exit_nls_cp437(void) module_init(init_nls_cp437) module_exit(exit_nls_cp437) -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * --------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ MODULE_LICENSE("Dual BSD/GPL"); diff -prauN linux-2.6.0-test5/fs/nls/nls_cp737.c wli-2.6.0-test5-bk12-25/fs/nls/nls_cp737.c --- linux-2.6.0-test5/fs/nls/nls_cp737.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_cp737.c 2003-09-25 19:16:06.000000000 -0700 @@ -348,20 +348,4 @@ static void __exit exit_nls_cp737(void) module_init(init_nls_cp737) module_exit(exit_nls_cp737) -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * --------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ MODULE_LICENSE("Dual BSD/GPL"); diff -prauN linux-2.6.0-test5/fs/nls/nls_cp775.c wli-2.6.0-test5-bk12-25/fs/nls/nls_cp775.c --- linux-2.6.0-test5/fs/nls/nls_cp775.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_cp775.c 2003-09-25 19:16:06.000000000 -0700 @@ -317,20 +317,4 @@ static void __exit exit_nls_cp775(void) module_init(init_nls_cp775) module_exit(exit_nls_cp775) -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * --------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ MODULE_LICENSE("Dual BSD/GPL"); diff -prauN linux-2.6.0-test5/fs/nls/nls_cp850.c wli-2.6.0-test5-bk12-25/fs/nls/nls_cp850.c --- linux-2.6.0-test5/fs/nls/nls_cp850.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_cp850.c 2003-09-25 19:16:06.000000000 -0700 @@ -313,20 +313,4 @@ static void __exit exit_nls_cp850(void) module_init(init_nls_cp850) module_exit(exit_nls_cp850) -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * --------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ MODULE_LICENSE("Dual BSD/GPL"); diff -prauN linux-2.6.0-test5/fs/nls/nls_cp852.c wli-2.6.0-test5-bk12-25/fs/nls/nls_cp852.c --- linux-2.6.0-test5/fs/nls/nls_cp852.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_cp852.c 2003-09-25 19:16:06.000000000 -0700 @@ -335,20 +335,4 @@ static void __exit exit_nls_cp852(void) module_init(init_nls_cp852) module_exit(exit_nls_cp852) -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * --------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ MODULE_LICENSE("Dual BSD/GPL"); diff -prauN linux-2.6.0-test5/fs/nls/nls_cp855.c wli-2.6.0-test5-bk12-25/fs/nls/nls_cp855.c --- linux-2.6.0-test5/fs/nls/nls_cp855.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_cp855.c 2003-09-25 19:16:06.000000000 -0700 @@ -297,20 +297,4 @@ static void __exit exit_nls_cp855(void) module_init(init_nls_cp855) module_exit(exit_nls_cp855) -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * --------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ MODULE_LICENSE("Dual BSD/GPL"); diff -prauN linux-2.6.0-test5/fs/nls/nls_cp857.c wli-2.6.0-test5-bk12-25/fs/nls/nls_cp857.c --- linux-2.6.0-test5/fs/nls/nls_cp857.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_cp857.c 2003-09-25 19:16:06.000000000 -0700 @@ -299,20 +299,4 @@ static void __exit exit_nls_cp857(void) module_init(init_nls_cp857) module_exit(exit_nls_cp857) -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * --------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ MODULE_LICENSE("Dual BSD/GPL"); diff -prauN linux-2.6.0-test5/fs/nls/nls_cp860.c wli-2.6.0-test5-bk12-25/fs/nls/nls_cp860.c --- linux-2.6.0-test5/fs/nls/nls_cp860.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_cp860.c 2003-09-25 19:16:06.000000000 -0700 @@ -362,20 +362,4 @@ static void __exit exit_nls_cp860(void) module_init(init_nls_cp860) module_exit(exit_nls_cp860) -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * --------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ MODULE_LICENSE("Dual BSD/GPL"); diff -prauN linux-2.6.0-test5/fs/nls/nls_cp861.c wli-2.6.0-test5-bk12-25/fs/nls/nls_cp861.c --- linux-2.6.0-test5/fs/nls/nls_cp861.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_cp861.c 2003-09-25 19:16:06.000000000 -0700 @@ -385,20 +385,4 @@ static void __exit exit_nls_cp861(void) module_init(init_nls_cp861) module_exit(exit_nls_cp861) -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * --------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ MODULE_LICENSE("Dual BSD/GPL"); diff -prauN linux-2.6.0-test5/fs/nls/nls_cp862.c wli-2.6.0-test5-bk12-25/fs/nls/nls_cp862.c --- linux-2.6.0-test5/fs/nls/nls_cp862.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_cp862.c 2003-09-25 19:16:06.000000000 -0700 @@ -419,20 +419,4 @@ static void __exit exit_nls_cp862(void) module_init(init_nls_cp862) module_exit(exit_nls_cp862) -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * --------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ MODULE_LICENSE("Dual BSD/GPL"); diff -prauN linux-2.6.0-test5/fs/nls/nls_cp863.c wli-2.6.0-test5-bk12-25/fs/nls/nls_cp863.c --- linux-2.6.0-test5/fs/nls/nls_cp863.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_cp863.c 2003-09-25 19:16:06.000000000 -0700 @@ -379,20 +379,4 @@ static void __exit exit_nls_cp863(void) module_init(init_nls_cp863) module_exit(exit_nls_cp863) -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * --------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ MODULE_LICENSE("Dual BSD/GPL"); diff -prauN linux-2.6.0-test5/fs/nls/nls_cp864.c wli-2.6.0-test5-bk12-25/fs/nls/nls_cp864.c --- linux-2.6.0-test5/fs/nls/nls_cp864.c 2003-09-08 12:50:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_cp864.c 2003-09-25 19:16:06.000000000 -0700 @@ -405,20 +405,4 @@ static void __exit exit_nls_cp864(void) module_init(init_nls_cp864) module_exit(exit_nls_cp864) -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * --------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ MODULE_LICENSE("Dual BSD/GPL"); diff -prauN linux-2.6.0-test5/fs/nls/nls_cp865.c wli-2.6.0-test5-bk12-25/fs/nls/nls_cp865.c --- linux-2.6.0-test5/fs/nls/nls_cp865.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_cp865.c 2003-09-25 19:16:06.000000000 -0700 @@ -385,20 +385,4 @@ static void __exit exit_nls_cp865(void) module_init(init_nls_cp865) module_exit(exit_nls_cp865) -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * --------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ MODULE_LICENSE("Dual BSD/GPL"); diff -prauN linux-2.6.0-test5/fs/nls/nls_cp866.c wli-2.6.0-test5-bk12-25/fs/nls/nls_cp866.c --- linux-2.6.0-test5/fs/nls/nls_cp866.c 2003-09-08 12:50:19.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_cp866.c 2003-09-25 19:16:06.000000000 -0700 @@ -303,20 +303,4 @@ static void __exit exit_nls_cp866(void) module_init(init_nls_cp866) module_exit(exit_nls_cp866) -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * --------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ MODULE_LICENSE("Dual BSD/GPL"); diff -prauN linux-2.6.0-test5/fs/nls/nls_cp869.c wli-2.6.0-test5-bk12-25/fs/nls/nls_cp869.c --- linux-2.6.0-test5/fs/nls/nls_cp869.c 2003-09-08 12:50:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_cp869.c 2003-09-25 19:16:06.000000000 -0700 @@ -313,20 +313,4 @@ static void __exit exit_nls_cp869(void) module_init(init_nls_cp869) module_exit(exit_nls_cp869) -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * --------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ MODULE_LICENSE("Dual BSD/GPL"); diff -prauN linux-2.6.0-test5/fs/nls/nls_cp874.c wli-2.6.0-test5-bk12-25/fs/nls/nls_cp874.c --- linux-2.6.0-test5/fs/nls/nls_cp874.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_cp874.c 2003-09-25 19:16:07.000000000 -0700 @@ -251,6 +251,7 @@ static int char2uni(const unsigned char static struct nls_table table = { .charset = "cp874", + .alias = "tis-620", .uni2char = uni2char, .char2uni = char2uni, .charset2lower = charset2lower, @@ -271,20 +272,5 @@ static void __exit exit_nls_cp874(void) module_init(init_nls_cp874) module_exit(exit_nls_cp874) -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * --------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ MODULE_LICENSE("Dual BSD/GPL"); +MODULE_ALIAS_NLS(tis-620); diff -prauN linux-2.6.0-test5/fs/nls/nls_cp932.c wli-2.6.0-test5-bk12-25/fs/nls/nls_cp932.c --- linux-2.6.0-test5/fs/nls/nls_cp932.c 2003-09-08 12:49:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_cp932.c 2003-09-25 19:16:07.000000000 -0700 @@ -7885,6 +7885,7 @@ static int char2uni(const unsigned char static struct nls_table table = { .charset = "cp932", + .alias = "sjis", .uni2char = uni2char, .char2uni = char2uni, .charset2lower = charset2lower, @@ -7904,22 +7905,6 @@ static void __exit exit_nls_cp932(void) module_init(init_nls_cp932) module_exit(exit_nls_cp932) -MODULE_LICENSE("Dual BSD/GPL"); -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * ---------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ +MODULE_LICENSE("Dual BSD/GPL"); +MODULE_ALIAS_NLS(sjis); diff -prauN linux-2.6.0-test5/fs/nls/nls_cp936.c wli-2.6.0-test5-bk12-25/fs/nls/nls_cp936.c --- linux-2.6.0-test5/fs/nls/nls_cp936.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_cp936.c 2003-09-25 19:16:07.000000000 -0700 @@ -11005,6 +11005,7 @@ static int char2uni(const unsigned char static struct nls_table table = { .charset = "cp936", + .alias = "gb2312", .uni2char = uni2char, .char2uni = char2uni, .charset2lower = charset2lower, @@ -11024,22 +11025,6 @@ static void __exit exit_nls_cp936(void) module_init(init_nls_cp936) module_exit(exit_nls_cp936) -MODULE_LICENSE("Dual BSD/GPL"); -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * ---------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ +MODULE_LICENSE("Dual BSD/GPL"); +MODULE_ALIAS_NLS(gb2312); diff -prauN linux-2.6.0-test5/fs/nls/nls_cp949.c wli-2.6.0-test5-bk12-25/fs/nls/nls_cp949.c --- linux-2.6.0-test5/fs/nls/nls_cp949.c 2003-09-08 12:50:54.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_cp949.c 2003-09-25 19:16:08.000000000 -0700 @@ -13922,6 +13922,7 @@ static int char2uni(const unsigned char static struct nls_table table = { .charset = "cp949", + .alias = "euc-kr", .uni2char = uni2char, .char2uni = char2uni, .charset2lower = charset2lower, @@ -13941,22 +13942,6 @@ static void __exit exit_nls_cp949(void) module_init(init_nls_cp949) module_exit(exit_nls_cp949) -MODULE_LICENSE("Dual BSD/GPL"); -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * ---------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ +MODULE_LICENSE("Dual BSD/GPL"); +MODULE_ALIAS_NLS(euc-kr); diff -prauN linux-2.6.0-test5/fs/nls/nls_cp950.c wli-2.6.0-test5-bk12-25/fs/nls/nls_cp950.c --- linux-2.6.0-test5/fs/nls/nls_cp950.c 2003-09-08 12:50:33.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_cp950.c 2003-09-25 19:16:08.000000000 -0700 @@ -9461,6 +9461,7 @@ static int char2uni(const unsigned char static struct nls_table table = { .charset = "cp950", + .alias = "big5", .uni2char = uni2char, .char2uni = char2uni, .charset2lower = charset2lower, @@ -9480,22 +9481,6 @@ static void __exit exit_nls_cp950(void) module_init(init_nls_cp950) module_exit(exit_nls_cp950) -MODULE_LICENSE("Dual BSD/GPL"); -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * ---------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ +MODULE_LICENSE("Dual BSD/GPL"); +MODULE_ALIAS_NLS(big5); diff -prauN linux-2.6.0-test5/fs/nls/nls_euc-jp.c wli-2.6.0-test5-bk12-25/fs/nls/nls_euc-jp.c --- linux-2.6.0-test5/fs/nls/nls_euc-jp.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_euc-jp.c 2003-09-25 19:16:08.000000000 -0700 @@ -579,22 +579,5 @@ static void __exit exit_nls_euc_jp(void) module_init(init_nls_euc_jp) module_exit(exit_nls_euc_jp) -MODULE_LICENSE("Dual BSD/GPL"); -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * ---------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ +MODULE_LICENSE("Dual BSD/GPL"); diff -prauN linux-2.6.0-test5/fs/nls/nls_euc-kr.c wli-2.6.0-test5-bk12-25/fs/nls/nls_euc-kr.c --- linux-2.6.0-test5/fs/nls/nls_euc-kr.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_euc-kr.c 1969-12-31 16:00:00.000000000 -0800 @@ -1,59 +0,0 @@ -/* - * linux/fs/nls_euc-kr.c - */ - -#include -#include -#include -#include -#include - -static struct nls_table *p_nls; - -static struct nls_table table = { - .charset = "euc-kr", - .owner = THIS_MODULE, -}; - -static int __init init_nls_euc_kr(void) -{ - p_nls = load_nls("cp949"); - - if (p_nls) { - table.uni2char = p_nls->uni2char; - table.char2uni = p_nls->char2uni; - table.charset2upper = p_nls->charset2upper; - table.charset2lower = p_nls->charset2lower; - return register_nls(&table); - } - - return -EINVAL; -} - -static void __exit exit_nls_euc_kr(void) -{ - unregister_nls(&table); - unload_nls(p_nls); -} - -module_init(init_nls_euc_kr) -module_exit(exit_nls_euc_kr) -MODULE_LICENSE("Dual BSD/GPL"); - -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * ---------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ diff -prauN linux-2.6.0-test5/fs/nls/nls_gb2312.c wli-2.6.0-test5-bk12-25/fs/nls/nls_gb2312.c --- linux-2.6.0-test5/fs/nls/nls_gb2312.c 2003-09-08 12:50:42.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_gb2312.c 1969-12-31 16:00:00.000000000 -0800 @@ -1,59 +0,0 @@ -/* - * linux/fs/nls_gb2312.c - */ - -#include -#include -#include -#include -#include - -static struct nls_table *p_nls; - -static struct nls_table table = { - .charset = "gb2312", - .owner = THIS_MODULE, -}; - -static int __init init_nls_gb2312(void) -{ - p_nls = load_nls("cp936"); - - if (p_nls) { - table.uni2char = p_nls->uni2char; - table.char2uni = p_nls->char2uni; - table.charset2upper = p_nls->charset2upper; - table.charset2lower = p_nls->charset2lower; - return register_nls(&table); - } - - return -EINVAL; -} - -static void __exit exit_nls_gb2312(void) -{ - unregister_nls(&table); - unload_nls(p_nls); -} - -module_init(init_nls_gb2312) -module_exit(exit_nls_gb2312) -MODULE_LICENSE("Dual BSD/GPL"); - -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * ---------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ diff -prauN linux-2.6.0-test5/fs/nls/nls_iso8859-1.c wli-2.6.0-test5-bk12-25/fs/nls/nls_iso8859-1.c --- linux-2.6.0-test5/fs/nls/nls_iso8859-1.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_iso8859-1.c 2003-09-25 19:16:08.000000000 -0700 @@ -254,21 +254,5 @@ static void __exit exit_nls_iso8859_1(vo module_init(init_nls_iso8859_1) module_exit(exit_nls_iso8859_1) -MODULE_LICENSE("Dual BSD/GPL"); -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * --------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ +MODULE_LICENSE("Dual BSD/GPL"); diff -prauN linux-2.6.0-test5/fs/nls/nls_iso8859-13.c wli-2.6.0-test5-bk12-25/fs/nls/nls_iso8859-13.c --- linux-2.6.0-test5/fs/nls/nls_iso8859-13.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_iso8859-13.c 2003-09-25 19:16:08.000000000 -0700 @@ -282,21 +282,5 @@ static void __exit exit_nls_iso8859_13(v module_init(init_nls_iso8859_13) module_exit(exit_nls_iso8859_13) -MODULE_LICENSE("Dual BSD/GPL"); -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * --------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ +MODULE_LICENSE("Dual BSD/GPL"); diff -prauN linux-2.6.0-test5/fs/nls/nls_iso8859-14.c wli-2.6.0-test5-bk12-25/fs/nls/nls_iso8859-14.c --- linux-2.6.0-test5/fs/nls/nls_iso8859-14.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_iso8859-14.c 2003-09-25 19:16:08.000000000 -0700 @@ -338,21 +338,5 @@ static void __exit exit_nls_iso8859_14(v module_init(init_nls_iso8859_14) module_exit(exit_nls_iso8859_14) -MODULE_LICENSE("Dual BSD/GPL"); -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * --------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ +MODULE_LICENSE("Dual BSD/GPL"); diff -prauN linux-2.6.0-test5/fs/nls/nls_iso8859-15.c wli-2.6.0-test5-bk12-25/fs/nls/nls_iso8859-15.c --- linux-2.6.0-test5/fs/nls/nls_iso8859-15.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_iso8859-15.c 2003-09-25 19:16:08.000000000 -0700 @@ -304,21 +304,5 @@ static void __exit exit_nls_iso8859_15(v module_init(init_nls_iso8859_15) module_exit(exit_nls_iso8859_15) -MODULE_LICENSE("Dual BSD/GPL"); -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * --------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ +MODULE_LICENSE("Dual BSD/GPL"); diff -prauN linux-2.6.0-test5/fs/nls/nls_iso8859-2.c wli-2.6.0-test5-bk12-25/fs/nls/nls_iso8859-2.c --- linux-2.6.0-test5/fs/nls/nls_iso8859-2.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_iso8859-2.c 2003-09-25 19:16:08.000000000 -0700 @@ -305,21 +305,5 @@ static void __exit exit_nls_iso8859_2(vo module_init(init_nls_iso8859_2) module_exit(exit_nls_iso8859_2) -MODULE_LICENSE("Dual BSD/GPL"); -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * --------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ +MODULE_LICENSE("Dual BSD/GPL"); diff -prauN linux-2.6.0-test5/fs/nls/nls_iso8859-3.c wli-2.6.0-test5-bk12-25/fs/nls/nls_iso8859-3.c --- linux-2.6.0-test5/fs/nls/nls_iso8859-3.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_iso8859-3.c 2003-09-25 19:16:08.000000000 -0700 @@ -305,21 +305,5 @@ static void __exit exit_nls_iso8859_3(vo module_init(init_nls_iso8859_3) module_exit(exit_nls_iso8859_3) -MODULE_LICENSE("Dual BSD/GPL"); -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * --------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ +MODULE_LICENSE("Dual BSD/GPL"); diff -prauN linux-2.6.0-test5/fs/nls/nls_iso8859-4.c wli-2.6.0-test5-bk12-25/fs/nls/nls_iso8859-4.c --- linux-2.6.0-test5/fs/nls/nls_iso8859-4.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_iso8859-4.c 2003-09-25 19:16:08.000000000 -0700 @@ -305,21 +305,5 @@ static void __exit exit_nls_iso8859_4(vo module_init(init_nls_iso8859_4) module_exit(exit_nls_iso8859_4) -MODULE_LICENSE("Dual BSD/GPL"); -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * --------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ +MODULE_LICENSE("Dual BSD/GPL"); diff -prauN linux-2.6.0-test5/fs/nls/nls_iso8859-5.c wli-2.6.0-test5-bk12-25/fs/nls/nls_iso8859-5.c --- linux-2.6.0-test5/fs/nls/nls_iso8859-5.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_iso8859-5.c 2003-09-25 19:16:08.000000000 -0700 @@ -269,21 +269,5 @@ static void __exit exit_nls_iso8859_5(vo module_init(init_nls_iso8859_5) module_exit(exit_nls_iso8859_5) -MODULE_LICENSE("Dual BSD/GPL"); -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * --------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ +MODULE_LICENSE("Dual BSD/GPL"); diff -prauN linux-2.6.0-test5/fs/nls/nls_iso8859-6.c wli-2.6.0-test5-bk12-25/fs/nls/nls_iso8859-6.c --- linux-2.6.0-test5/fs/nls/nls_iso8859-6.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_iso8859-6.c 2003-09-25 19:16:08.000000000 -0700 @@ -260,21 +260,5 @@ static void __exit exit_nls_iso8859_6(vo module_init(init_nls_iso8859_6) module_exit(exit_nls_iso8859_6) -MODULE_LICENSE("Dual BSD/GPL"); -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * --------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ +MODULE_LICENSE("Dual BSD/GPL"); diff -prauN linux-2.6.0-test5/fs/nls/nls_iso8859-7.c wli-2.6.0-test5-bk12-25/fs/nls/nls_iso8859-7.c --- linux-2.6.0-test5/fs/nls/nls_iso8859-7.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_iso8859-7.c 2003-09-25 19:16:08.000000000 -0700 @@ -314,21 +314,5 @@ static void __exit exit_nls_iso8859_7(vo module_init(init_nls_iso8859_7) module_exit(exit_nls_iso8859_7) -MODULE_LICENSE("Dual BSD/GPL"); -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * --------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ +MODULE_LICENSE("Dual BSD/GPL"); diff -prauN linux-2.6.0-test5/fs/nls/nls_iso8859-8.c wli-2.6.0-test5-bk12-25/fs/nls/nls_iso8859-8.c --- linux-2.6.0-test5/fs/nls/nls_iso8859-8.c 2003-09-08 12:50:28.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_iso8859-8.c 1969-12-31 16:00:00.000000000 -0800 @@ -1,59 +0,0 @@ -/* - * linux/fs/nls_iso8859-8.c - */ - -#include -#include -#include -#include -#include - -static struct nls_table *p_nls; - -static struct nls_table table = { - .charset = "iso8859-8", - .owner = THIS_MODULE, -}; - -static int __init init_nls_iso8859_8(void) -{ - p_nls = load_nls("cp1255"); - - if (p_nls) { - table.uni2char = p_nls->uni2char; - table.char2uni = p_nls->char2uni; - table.charset2upper = p_nls->charset2upper; - table.charset2lower = p_nls->charset2lower; - return register_nls(&table); - } - - return -EINVAL; -} - -static void __exit exit_nls_iso8859_8(void) -{ - unregister_nls(&table); - unload_nls(p_nls); -} - -module_init(init_nls_iso8859_8) -module_exit(exit_nls_iso8859_8) -MODULE_LICENSE("Dual BSD/GPL"); - -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * ---------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ diff -prauN linux-2.6.0-test5/fs/nls/nls_iso8859-9.c wli-2.6.0-test5-bk12-25/fs/nls/nls_iso8859-9.c --- linux-2.6.0-test5/fs/nls/nls_iso8859-9.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_iso8859-9.c 2003-09-25 19:16:08.000000000 -0700 @@ -269,21 +269,5 @@ static void __exit exit_nls_iso8859_9(vo module_init(init_nls_iso8859_9) module_exit(exit_nls_iso8859_9) -MODULE_LICENSE("Dual BSD/GPL"); -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * --------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ +MODULE_LICENSE("Dual BSD/GPL"); diff -prauN linux-2.6.0-test5/fs/nls/nls_koi8-r.c wli-2.6.0-test5-bk12-25/fs/nls/nls_koi8-r.c --- linux-2.6.0-test5/fs/nls/nls_koi8-r.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_koi8-r.c 2003-09-25 19:16:08.000000000 -0700 @@ -320,21 +320,5 @@ static void __exit exit_nls_koi8_r(void) module_init(init_nls_koi8_r) module_exit(exit_nls_koi8_r) -MODULE_LICENSE("Dual BSD/GPL"); -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * --------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ +MODULE_LICENSE("Dual BSD/GPL"); diff -prauN linux-2.6.0-test5/fs/nls/nls_koi8-ru.c wli-2.6.0-test5-bk12-25/fs/nls/nls_koi8-ru.c --- linux-2.6.0-test5/fs/nls/nls_koi8-ru.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_koi8-ru.c 2003-09-25 19:16:08.000000000 -0700 @@ -79,21 +79,5 @@ static void __exit exit_nls_koi8_ru(void module_init(init_nls_koi8_ru) module_exit(exit_nls_koi8_ru) -MODULE_LICENSE("Dual BSD/GPL"); -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * --------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ +MODULE_LICENSE("Dual BSD/GPL"); diff -prauN linux-2.6.0-test5/fs/nls/nls_koi8-u.c wli-2.6.0-test5-bk12-25/fs/nls/nls_koi8-u.c --- linux-2.6.0-test5/fs/nls/nls_koi8-u.c 2003-09-08 12:50:41.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_koi8-u.c 2003-09-25 19:16:08.000000000 -0700 @@ -327,21 +327,5 @@ static void __exit exit_nls_koi8_u(void) module_init(init_nls_koi8_u) module_exit(exit_nls_koi8_u) -MODULE_LICENSE("Dual BSD/GPL"); -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * --------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ +MODULE_LICENSE("Dual BSD/GPL"); diff -prauN linux-2.6.0-test5/fs/nls/nls_sjis.c wli-2.6.0-test5-bk12-25/fs/nls/nls_sjis.c --- linux-2.6.0-test5/fs/nls/nls_sjis.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_sjis.c 1969-12-31 16:00:00.000000000 -0800 @@ -1,59 +0,0 @@ -/* - * linux/fs/nls_sjis.c - */ - -#include -#include -#include -#include -#include - -static struct nls_table *p_nls; - -static struct nls_table table = { - .charset = "sjis", - .owner = THIS_MODULE, -}; - -static int __init init_nls_sjis(void) -{ - p_nls = load_nls("cp932"); - - if (p_nls) { - table.uni2char = p_nls->uni2char; - table.char2uni = p_nls->char2uni; - table.charset2upper = p_nls->charset2upper; - table.charset2lower = p_nls->charset2lower; - return register_nls(&table); - } - - return -EINVAL; -} - -static void __exit exit_nls_sjis(void) -{ - unregister_nls(&table); - unload_nls(p_nls); -} - -module_init(init_nls_sjis) -module_exit(exit_nls_sjis) -MODULE_LICENSE("Dual BSD/GPL"); - -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * ---------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ diff -prauN linux-2.6.0-test5/fs/nls/nls_tis-620.c wli-2.6.0-test5-bk12-25/fs/nls/nls_tis-620.c --- linux-2.6.0-test5/fs/nls/nls_tis-620.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/nls/nls_tis-620.c 1969-12-31 16:00:00.000000000 -0800 @@ -1,59 +0,0 @@ -/* - * linux/fs/nls_tis-620.c - */ - -#include -#include -#include -#include -#include - -static struct nls_table *p_nls; - -static struct nls_table table = { - .charset = "tis-620", - .owner = THIS_MODULE, -}; - -static int __init init_nls_tis_620(void) -{ - p_nls = load_nls("cp874"); - - if (p_nls) { - table.uni2char = p_nls->uni2char; - table.char2uni = p_nls->char2uni; - table.charset2upper = p_nls->charset2upper; - table.charset2lower = p_nls->charset2lower; - return register_nls(&table); - } - - return -EINVAL; -} - -static void __exit exit_nls_tis_620(void) -{ - unregister_nls(&table); - unload_nls(p_nls); -} - -module_init(init_nls_tis_620) -module_exit(exit_nls_tis_620) -MODULE_LICENSE("Dual BSD/GPL"); - -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * ---------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * End: - */ diff -prauN linux-2.6.0-test5/fs/ntfs/aops.c wli-2.6.0-test5-bk12-25/fs/ntfs/aops.c --- linux-2.6.0-test5/fs/ntfs/aops.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/ntfs/aops.c 2003-09-28 23:04:07.000000000 -0700 @@ -55,7 +55,7 @@ static void ntfs_end_buffer_async_read(s int page_uptodate = 1; page = bh->b_page; - ni = NTFS_I(page->mapping->host); + ni = NTFS_I(page_mapping(page)->host); if (likely(uptodate)) { s64 file_ofs; @@ -176,7 +176,7 @@ static int ntfs_read_block(struct page * int i, nr; unsigned char blocksize_bits; - ni = NTFS_I(page->mapping->host); + ni = NTFS_I(page_mapping(page)->host); vol = ni->vol; blocksize_bits = VFS_I(ni)->i_blkbits; @@ -359,7 +359,7 @@ int ntfs_readpage(struct file *file, str return 0; } - ni = NTFS_I(page->mapping->host); + ni = NTFS_I(page_mapping(page)->host); if (NInoNonResident(ni)) { /* @@ -473,7 +473,7 @@ static int ntfs_write_block(struct page BOOL need_end_writeback; unsigned char blocksize_bits; - vi = page->mapping->host; + vi = page_mapping(page)->host; ni = NTFS_I(vi); vol = ni->vol; @@ -500,9 +500,9 @@ static int ntfs_write_block(struct page * buffer's dirty state as-is. */ // FIXME: Once Andrew's -EAGAIN patch goes in, remove the - // __set_page_dirty_nobuffers(page) and return -EAGAIN instead + // set_page_dirty_nobuffers(page) and return -EAGAIN instead // of zero. - __set_page_dirty_nobuffers(page); + set_page_dirty_nobuffers(page); unlock_page(page); return 0; } @@ -519,12 +519,12 @@ static int ntfs_write_block(struct page iblock = ni->initialized_size >> blocksize_bits; /* - * Be very careful. We have no exclusion from __set_page_dirty_buffers + * Be very careful. We have no exclusion from set_page_dirty_buffers * here, and the (potentially unmapped) buffers may become dirty at * any time. If a buffer becomes dirty here after we've inspected it * then we just miss that fact, and the page stays dirty. * - * Buffers outside i_size may be dirtied by __set_page_dirty_buffers; + * Buffers outside i_size may be dirtied by set_page_dirty_buffers; * handle that here by just cleaning them. */ @@ -579,7 +579,7 @@ static int ntfs_write_block(struct page // Update initialized size in the attribute and // in the inode. // Again, for each page do: - // __set_page_dirty_buffers(); + // set_page_dirty_buffers(); // page_cache_release() // We don't need to wait on the writes. // Update iblock. @@ -734,9 +734,9 @@ lock_retry_remap: * leave its buffer's dirty state as-is. */ // FIXME: Once Andrew's -EAGAIN patch goes in, remove - // the __set_page_dirty_nobuffers(page) and set err to + // the set_page_dirty_nobuffers(page) and set err to // -EAGAIN instead of zero. - __set_page_dirty_nobuffers(page); + set_page_dirty_nobuffers(page); err = 0; } else SetPageError(page); @@ -805,7 +805,7 @@ static int ntfs_writepage(struct page *p BUG_ON(!PageLocked(page)); - vi = page->mapping->host; + vi = page_mapping(page)->host; /* Is the page fully outside i_size? (truncate in progress) */ if (unlikely(page->index >= (vi->i_size + PAGE_CACHE_SIZE - 1) >> @@ -987,9 +987,9 @@ err_out: * buffer's dirty state as-is. */ // FIXME: Once Andrew's -EAGAIN patch goes in, remove the - // __set_page_dirty_nobuffers(page) and set err to -EAGAIN + // set_page_dirty_nobuffers(page) and set err to -EAGAIN // instead of zero. - __set_page_dirty_nobuffers(page); + set_page_dirty_nobuffers(page); err = 0; } else { ntfs_error(vi->i_sb, "Resident attribute write failed with " @@ -1024,7 +1024,7 @@ static int ntfs_prepare_nonresident_writ BOOL is_retry; unsigned char blocksize_bits; - vi = page->mapping->host; + vi = page_mapping(page)->host; ni = NTFS_I(vi); vol = ni->vol; @@ -1125,7 +1125,7 @@ static int ntfs_prepare_nonresident_writ // Update initialized size in the attribute and // in the inode. // Again, for each page do: - // __set_page_dirty_buffers(); + // set_page_dirty_buffers(); // page_cache_release() // We don't need to wait on the writes. // Update iblock. @@ -1361,7 +1361,7 @@ err_out: * ntfs_prepare_write - prepare a page for receiving data * * This is called from generic_file_write() with i_sem held on the inode - * (@page->mapping->host). The @page is locked and kmap()ped so page_address() + * (@page_mapping(page)->host). The @page is locked and kmap()ped so page_address() * can simply be used. The source data has not yet been copied into the @page. * * Need to extend the attribute/fill in holes if necessary, create blocks and @@ -1382,7 +1382,7 @@ err_out: static int ntfs_prepare_write(struct file *file, struct page *page, unsigned from, unsigned to) { - struct inode *vi = page->mapping->host; + struct inode *vi = page_mapping(page)->host; ntfs_inode *ni = NTFS_I(vi); ntfs_debug("Entering for inode %li, attribute type 0x%x, page index " @@ -1491,7 +1491,7 @@ static int ntfs_commit_nonresident_write unsigned int block_start, block_end, blocksize; BOOL partial; - vi = page->mapping->host; + vi = page_mapping(page)->host; ntfs_debug("Entering for inode %li, attribute type 0x%x, page index " "0x%lx, from = %u, to = %u.", vi->i_ino, @@ -1547,7 +1547,7 @@ static int ntfs_commit_nonresident_write * ntfs_commit_write - commit the received data * * This is called from generic_file_write() with i_sem held on the inode - * (@page->mapping->host). The @page is locked and kmap()ped so page_address() + * (@page_mapping(page)->host). The @page is locked and kmap()ped so page_address() * can simply be used. The source data has already been copied into the @page. * * Need to mark modified blocks dirty so they get written out later when @@ -1585,7 +1585,7 @@ static int ntfs_commit_write(struct file u32 attr_len, bytes; int err; - vi = page->mapping->host; + vi = page_mapping(page)->host; ni = NTFS_I(vi); ntfs_debug("Entering for inode %li, attribute type 0x%x, page index " @@ -1758,7 +1758,7 @@ err_out: * Put the page on mapping->dirty_pages, but leave its * buffer's dirty state as-is. */ - __set_page_dirty_nobuffers(page); + set_page_dirty_nobuffers(page); err = 0; } else ntfs_error(vi->i_sb, "Page is not uptodate. Written " diff -prauN linux-2.6.0-test5/fs/ntfs/compress.c wli-2.6.0-test5-bk12-25/fs/ntfs/compress.c --- linux-2.6.0-test5/fs/ntfs/compress.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/ntfs/compress.c 2003-09-28 23:04:07.000000000 -0700 @@ -209,7 +209,7 @@ return_error: /* Second stage: finalize completed pages. */ if (nr_completed_pages > 0) { struct page *page = dest_pages[completed_pages[0]]; - ntfs_inode *ni = NTFS_I(page->mapping->host); + ntfs_inode *ni = NTFS_I(page_mapping(page)->host); for (i = 0; i < nr_completed_pages; i++) { int di = completed_pages[i]; @@ -467,7 +467,7 @@ return_overflow: */ int ntfs_read_compressed_block(struct page *page) { - struct address_space *mapping = page->mapping; + struct address_space *mapping = page_mapping(page); ntfs_inode *ni = NTFS_I(mapping->host); ntfs_volume *vol = ni->vol; struct super_block *sb = vol->sb; diff -prauN linux-2.6.0-test5/fs/ntfs/layout.h wli-2.6.0-test5-bk12-25/fs/ntfs/layout.h --- linux-2.6.0-test5/fs/ntfs/layout.h 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/ntfs/layout.h 2003-09-25 19:16:08.000000000 -0700 @@ -42,8 +42,8 @@ #define const_cpu_to_le32(x) __constant_cpu_to_le32(x) #define const_cpu_to_le64(x) __constant_cpu_to_le64(x) -/* The NTFS oem_id */ -#define magicNTFS const_cpu_to_le64(0x202020205346544e) /* "NTFS " */ +/* The NTFS oem_id "NTFS " */ +#define magicNTFS const_cpu_to_le64(0x202020205346544eULL) /* * Location of bootsector on partition: diff -prauN linux-2.6.0-test5/fs/open.c wli-2.6.0-test5-bk12-25/fs/open.c --- linux-2.6.0-test5/fs/open.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/open.c 2003-09-25 19:16:08.000000000 -0700 @@ -354,6 +354,10 @@ asmlinkage long sys_utime(char __user * /* Don't worry, the checks are done in inode_change_ok() */ newattrs.ia_valid = ATTR_CTIME | ATTR_MTIME | ATTR_ATIME; if (times) { + error = -EPERM; + if (IS_APPEND(inode) || IS_IMMUTABLE(inode)) + goto dput_and_out; + error = get_user(newattrs.ia_atime.tv_sec, ×->actime); newattrs.ia_atime.tv_nsec = 0; if (!error) @@ -364,6 +368,10 @@ asmlinkage long sys_utime(char __user * newattrs.ia_valid |= ATTR_ATIME_SET | ATTR_MTIME_SET; } else { + error = -EACCES; + if (IS_IMMUTABLE(inode)) + goto dput_and_out; + if (current->fsuid != inode->i_uid && (error = permission(inode,MAY_WRITE,&nd)) != 0) goto dput_and_out; @@ -403,12 +411,20 @@ long do_utimes(char __user * filename, s /* Don't worry, the checks are done in inode_change_ok() */ newattrs.ia_valid = ATTR_CTIME | ATTR_MTIME | ATTR_ATIME; if (times) { + error = -EPERM; + if (IS_APPEND(inode) || IS_IMMUTABLE(inode)) + goto dput_and_out; + newattrs.ia_atime.tv_sec = times[0].tv_sec; newattrs.ia_atime.tv_nsec = times[0].tv_usec * 1000; newattrs.ia_mtime.tv_sec = times[1].tv_sec; newattrs.ia_mtime.tv_nsec = times[1].tv_usec * 1000; newattrs.ia_valid |= ATTR_ATIME_SET | ATTR_MTIME_SET; } else { + error = -EACCES; + if (IS_IMMUTABLE(inode)) + goto dput_and_out; + if (current->fsuid != inode->i_uid && (error = permission(inode,MAY_WRITE,&nd)) != 0) goto dput_and_out; diff -prauN linux-2.6.0-test5/fs/partitions/efi.c wli-2.6.0-test5-bk12-25/fs/partitions/efi.c --- linux-2.6.0-test5/fs/partitions/efi.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/partitions/efi.c 2003-09-25 19:16:08.000000000 -0700 @@ -3,7 +3,7 @@ * Per Intel EFI Specification v1.02 * http://developer.intel.com/technology/efi/efi.htm * efi.[ch] by Matt Domsch - * Copyright 2000,2001,2002 Dell Computer Corporation + * Copyright 2000,2001,2002 Dell Inc. * * 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 diff -prauN linux-2.6.0-test5/fs/partitions/efi.h wli-2.6.0-test5-bk12-25/fs/partitions/efi.h --- linux-2.6.0-test5/fs/partitions/efi.h 2003-09-08 12:50:17.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/partitions/efi.h 2003-09-25 19:16:08.000000000 -0700 @@ -4,7 +4,7 @@ * http://developer.intel.com/technology/efi/efi.htm * * By Matt Domsch Fri Sep 22 22:15:56 CDT 2000 - * Copyright 2000,2001 Dell Computer Corporation + * Copyright 2000,2001 Dell Inc. * * 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 diff -prauN linux-2.6.0-test5/fs/proc/Makefile wli-2.6.0-test5-bk12-25/fs/proc/Makefile --- linux-2.6.0-test5/fs/proc/Makefile 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/proc/Makefile 2003-09-25 19:16:08.000000000 -0700 @@ -8,6 +8,7 @@ proc-y := task_nommu.o proc-$(CONFIG_MMU) := task_mmu.o proc-y += inode.o root.o base.o generic.o array.o \ - kmsg.o proc_tty.o proc_misc.o kcore.o + kmsg.o proc_tty.o proc_misc.o -proc-$(CONFIG_PROC_DEVICETREE) += proc_devtree.o +proc-$(CONFIG_PROC_KCORE) += kcore.o +proc-$(CONFIG_PROC_DEVICETREE) += proc_devtree.o diff -prauN linux-2.6.0-test5/fs/proc/array.c wli-2.6.0-test5-bk12-25/fs/proc/array.c --- linux-2.6.0-test5/fs/proc/array.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/proc/array.c 2003-09-28 21:47:08.000000000 -0700 @@ -154,13 +154,16 @@ static inline char * task_state(struct t read_lock(&tasklist_lock); buffer += sprintf(buffer, "State:\t%s\n" + "SleepAVG:\t%lu%%\n" "Tgid:\t%d\n" "Pid:\t%d\n" "PPid:\t%d\n" "TracerPid:\t%d\n" "Uid:\t%d\t%d\t%d\t%d\n" "Gid:\t%d\t%d\t%d\t%d\n", - get_task_state(p), p->tgid, + get_task_state(p), + (p->sleep_avg/1024)*100/(1000000000/1024), + p->tgid, p->pid, p->pid ? p->real_parent->pid : 0, p->pid && p->ptrace ? p->parent->pid : 0, p->uid, p->euid, p->suid, p->fsuid, @@ -283,7 +286,7 @@ int proc_pid_status(struct task_struct * return buffer - orig; } -extern unsigned long task_vsize(struct mm_struct *); +unsigned long task_vsize(struct mm_struct *); int proc_pid_stat(struct task_struct *task, char * buffer) { unsigned long vsize, eip, esp, wchan; @@ -303,15 +306,13 @@ int proc_pid_stat(struct task_struct *ta mm = mmgrab(mm); if (task->tty) { tty_pgrp = task->tty->pgrp; - tty_nr = task->tty->device; + tty_nr = new_encode_dev(tty_devnum(task->tty)); } task_unlock(task); if (mm) { - down_read(&mm->mmap_sem); vsize = task_vsize(mm); eip = KSTK_EIP(task); esp = KSTK_ESP(task); - up_read(&mm->mmap_sem); } wchan = get_wchan(task); @@ -341,7 +342,7 @@ int proc_pid_stat(struct task_struct *ta task->comm, state, ppid, - task->pgrp, + process_group(task), task->session, tty_nr, tty_pgrp, @@ -388,20 +389,20 @@ int proc_pid_stat(struct task_struct *ta return res; } -extern int task_statm(struct mm_struct *, int *, int *, int *, int *); +int task_statm(struct mm_struct *, int *, int *, int *, int *, int *, int *); int proc_pid_statm(struct task_struct *task, char *buffer) { - int size = 0, resident = 0, shared = 0, text = 0, lib = 0, data = 0; + int size, resident, shared, text, lib, data, dirty; struct mm_struct *mm = get_task_mm(task); - if (mm) { - down_read(&mm->mmap_sem); - size = task_statm(mm, &shared, &text, &data, &resident); - up_read(&mm->mmap_sem); - + if (!mm) + size = resident = shared = text = lib = data = dirty = 0; + else { + size = task_statm(mm, &shared, &text, &lib, &data, + &resident, &dirty); mmput(mm); } return sprintf(buffer,"%d %d %d %d %d %d %d\n", - size, resident, shared, text, lib, data, 0); + size, resident, shared, text, lib, data, dirty); } diff -prauN linux-2.6.0-test5/fs/proc/base.c wli-2.6.0-test5-bk12-25/fs/proc/base.c --- linux-2.6.0-test5/fs/proc/base.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/proc/base.c 2003-09-25 20:57:35.000000000 -0700 @@ -44,28 +44,51 @@ #define fake_ino(pid,ino) (((pid)<<16)|(ino)) enum pid_directory_inos { - PROC_PID_INO = 2, - PROC_PID_STATUS, - PROC_PID_MEM, - PROC_PID_CWD, - PROC_PID_ROOT, - PROC_PID_EXE, - PROC_PID_FD, - PROC_PID_ENVIRON, - PROC_PID_CMDLINE, - PROC_PID_STAT, - PROC_PID_STATM, - PROC_PID_MAPS, - PROC_PID_MOUNTS, - PROC_PID_WCHAN, + PROC_TGID_INO = 2, + PROC_TGID_TASK, + PROC_TGID_STATUS, + PROC_TGID_MEM, + PROC_TGID_CWD, + PROC_TGID_ROOT, + PROC_TGID_EXE, + PROC_TGID_FD, + PROC_TGID_ENVIRON, + PROC_TGID_CMDLINE, + PROC_TGID_STAT, + PROC_TGID_STATM, + PROC_TGID_MAPS, + PROC_TGID_MOUNTS, + PROC_TGID_WCHAN, #ifdef CONFIG_SECURITY - PROC_PID_ATTR, - PROC_PID_ATTR_CURRENT, - PROC_PID_ATTR_PREV, - PROC_PID_ATTR_EXEC, - PROC_PID_ATTR_FSCREATE, + PROC_TGID_ATTR, + PROC_TGID_ATTR_CURRENT, + PROC_TGID_ATTR_PREV, + PROC_TGID_ATTR_EXEC, + PROC_TGID_ATTR_FSCREATE, #endif - PROC_PID_FD_DIR = 0x8000, /* 0x8000-0xffff */ + PROC_TGID_FD_DIR, + PROC_TID_INO, + PROC_TID_STATUS, + PROC_TID_MEM, + PROC_TID_CWD, + PROC_TID_ROOT, + PROC_TID_EXE, + PROC_TID_FD, + PROC_TID_ENVIRON, + PROC_TID_CMDLINE, + PROC_TID_STAT, + PROC_TID_STATM, + PROC_TID_MAPS, + PROC_TID_MOUNTS, + PROC_TID_WCHAN, +#ifdef CONFIG_SECURITY + PROC_TID_ATTR, + PROC_TID_ATTR_CURRENT, + PROC_TID_ATTR_PREV, + PROC_TID_ATTR_EXEC, + PROC_TID_ATTR_FSCREATE, +#endif + PROC_TID_FD_DIR = 0x8000, /* 0x8000-0xffff */ }; struct pid_entry { @@ -76,36 +99,68 @@ struct pid_entry { }; #define E(type,name,mode) {(type),sizeof(name)-1,(name),(mode)} -static struct pid_entry base_stuff[] = { - E(PROC_PID_FD, "fd", S_IFDIR|S_IRUSR|S_IXUSR), - E(PROC_PID_ENVIRON, "environ", S_IFREG|S_IRUSR), - E(PROC_PID_STATUS, "status", S_IFREG|S_IRUGO), - E(PROC_PID_CMDLINE, "cmdline", S_IFREG|S_IRUGO), - E(PROC_PID_STAT, "stat", S_IFREG|S_IRUGO), - E(PROC_PID_STATM, "statm", S_IFREG|S_IRUGO), - E(PROC_PID_MAPS, "maps", S_IFREG|S_IRUGO), - E(PROC_PID_MEM, "mem", S_IFREG|S_IRUSR|S_IWUSR), - E(PROC_PID_CWD, "cwd", S_IFLNK|S_IRWXUGO), - E(PROC_PID_ROOT, "root", S_IFLNK|S_IRWXUGO), - E(PROC_PID_EXE, "exe", S_IFLNK|S_IRWXUGO), - E(PROC_PID_MOUNTS, "mounts", S_IFREG|S_IRUGO), + +static struct pid_entry tgid_base_stuff[] = { + E(PROC_TGID_TASK, "task", S_IFDIR|S_IRUGO|S_IXUGO), + E(PROC_TGID_FD, "fd", S_IFDIR|S_IRUSR|S_IXUSR), + E(PROC_TGID_ENVIRON, "environ", S_IFREG|S_IRUSR), + E(PROC_TGID_STATUS, "status", S_IFREG|S_IRUGO), + E(PROC_TGID_CMDLINE, "cmdline", S_IFREG|S_IRUGO), + E(PROC_TGID_STAT, "stat", S_IFREG|S_IRUGO), + E(PROC_TGID_STATM, "statm", S_IFREG|S_IRUGO), + E(PROC_TGID_MAPS, "maps", S_IFREG|S_IRUGO), + E(PROC_TGID_MEM, "mem", S_IFREG|S_IRUSR|S_IWUSR), + E(PROC_TGID_CWD, "cwd", S_IFLNK|S_IRWXUGO), + E(PROC_TGID_ROOT, "root", S_IFLNK|S_IRWXUGO), + E(PROC_TGID_EXE, "exe", S_IFLNK|S_IRWXUGO), + E(PROC_TGID_MOUNTS, "mounts", S_IFREG|S_IRUGO), #ifdef CONFIG_SECURITY - E(PROC_PID_ATTR, "attr", S_IFDIR|S_IRUGO|S_IXUGO), + E(PROC_TGID_ATTR, "attr", S_IFDIR|S_IRUGO|S_IXUGO), #endif #ifdef CONFIG_KALLSYMS - E(PROC_PID_WCHAN, "wchan", S_IFREG|S_IRUGO), + E(PROC_TGID_WCHAN, "wchan", S_IFREG|S_IRUGO), #endif - {0,0,NULL,0} + {0,0,NULL,0} }; +static struct pid_entry tid_base_stuff[] = { + E(PROC_TID_FD, "fd", S_IFDIR|S_IRUSR|S_IXUSR), + E(PROC_TID_ENVIRON, "environ", S_IFREG|S_IRUSR), + E(PROC_TID_STATUS, "status", S_IFREG|S_IRUGO), + E(PROC_TID_CMDLINE, "cmdline", S_IFREG|S_IRUGO), + E(PROC_TID_STAT, "stat", S_IFREG|S_IRUGO), + E(PROC_TID_STATM, "statm", S_IFREG|S_IRUGO), + E(PROC_TID_MAPS, "maps", S_IFREG|S_IRUGO), + E(PROC_TID_MEM, "mem", S_IFREG|S_IRUSR|S_IWUSR), + E(PROC_TID_CWD, "cwd", S_IFLNK|S_IRWXUGO), + E(PROC_TID_ROOT, "root", S_IFLNK|S_IRWXUGO), + E(PROC_TID_EXE, "exe", S_IFLNK|S_IRWXUGO), + E(PROC_TID_MOUNTS, "mounts", S_IFREG|S_IRUGO), #ifdef CONFIG_SECURITY -static struct pid_entry attr_stuff[] = { - E(PROC_PID_ATTR_CURRENT, "current", S_IFREG|S_IRUGO|S_IWUGO), - E(PROC_PID_ATTR_PREV, "prev", S_IFREG|S_IRUGO), - E(PROC_PID_ATTR_EXEC, "exec", S_IFREG|S_IRUGO|S_IWUGO), - E(PROC_PID_ATTR_FSCREATE, "fscreate", S_IFREG|S_IRUGO|S_IWUGO), - {0,0,NULL,0} + E(PROC_TID_ATTR, "attr", S_IFDIR|S_IRUGO|S_IXUGO), +#endif +#ifdef CONFIG_KALLSYMS + E(PROC_TID_WCHAN, "wchan", S_IFREG|S_IRUGO), +#endif + {0,0,NULL,0} +}; + +#ifdef CONFIG_SECURITY +static struct pid_entry tgid_attr_stuff[] = { + E(PROC_TGID_ATTR_CURRENT, "current", S_IFREG|S_IRUGO|S_IWUGO), + E(PROC_TGID_ATTR_PREV, "prev", S_IFREG|S_IRUGO), + E(PROC_TGID_ATTR_EXEC, "exec", S_IFREG|S_IRUGO|S_IWUGO), + E(PROC_TGID_ATTR_FSCREATE, "fscreate", S_IFREG|S_IRUGO|S_IWUGO), + {0,0,NULL,0} +}; +static struct pid_entry tid_attr_stuff[] = { + E(PROC_TID_ATTR_CURRENT, "current", S_IFREG|S_IRUGO|S_IWUGO), + E(PROC_TID_ATTR_PREV, "prev", S_IFREG|S_IRUGO), + E(PROC_TID_ATTR_EXEC, "exec", S_IFREG|S_IRUGO|S_IWUGO), + E(PROC_TID_ATTR_FSCREATE, "fscreate", S_IFREG|S_IRUGO|S_IWUGO), + {0,0,NULL,0} }; #endif + #undef E static inline struct task_struct *proc_task(struct inode *inode) @@ -128,7 +183,7 @@ static int proc_fd_link(struct inode *in struct task_struct *task = proc_task(inode); struct files_struct *files; struct file *file; - int fd = proc_type(inode) - PROC_PID_FD_DIR; + int fd = proc_type(inode) - PROC_TID_FD_DIR; task_lock(task); files = task->files; @@ -675,7 +730,7 @@ static int proc_readfd(struct file * fil { struct inode *inode = filp->f_dentry->d_inode; struct task_struct *p = proc_task(inode); - unsigned int fd, pid, ino; + unsigned int fd, tid, ino; int retval; char buf[NUMBUF]; struct files_struct * files; @@ -684,7 +739,7 @@ static int proc_readfd(struct file * fil if (!pid_alive(p)) goto out; retval = 0; - pid = p->pid; + tid = p->pid; fd = filp->f_pos; switch (fd) { @@ -693,7 +748,7 @@ static int proc_readfd(struct file * fil goto out; filp->f_pos++; case 1: - ino = fake_ino(pid, PROC_PID_INO); + ino = fake_ino(tid, PROC_TID_INO); if (filldir(dirent, "..", 2, 1, ino, DT_DIR) < 0) goto out; filp->f_pos++; @@ -723,7 +778,7 @@ static int proc_readfd(struct file * fil i /= 10; } while (i); - ino = fake_ino(pid, PROC_PID_FD_DIR + fd); + ino = fake_ino(tid, PROC_TID_FD_DIR + fd); if (filldir(dirent, buf+j, NUMBUF-j, fd+2, ino, DT_LNK) < 0) { spin_lock(&files->file_lock); break; @@ -792,11 +847,18 @@ out: return ret; } -static int proc_base_readdir(struct file * filp, +static int proc_tgid_base_readdir(struct file * filp, + void * dirent, filldir_t filldir) +{ + return proc_pident_readdir(filp,dirent,filldir, + tgid_base_stuff,ARRAY_SIZE(tgid_base_stuff)); +} + +static int proc_tid_base_readdir(struct file * filp, void * dirent, filldir_t filldir) { return proc_pident_readdir(filp,dirent,filldir, - base_stuff,ARRAY_SIZE(base_stuff)); + tid_base_stuff,ARRAY_SIZE(tid_base_stuff)); } /* building an inode */ @@ -843,7 +905,7 @@ static struct inode *proc_pid_make_inode ei->type = ino; inode->i_uid = 0; inode->i_gid = 0; - if (ino == PROC_PID_INO || task_dumpable(task)) { + if (ino == PROC_TGID_INO || ino == PROC_TID_INO || task_dumpable(task)) { inode->i_uid = task->euid; inode->i_gid = task->egid; } @@ -873,7 +935,7 @@ static int pid_revalidate(struct dentry struct inode *inode = dentry->d_inode; struct task_struct *task = proc_task(inode); if (pid_alive(task)) { - if (proc_type(inode) == PROC_PID_INO || task_dumpable(task)) { + if (proc_type(inode) == PROC_TGID_INO || proc_type(inode) == PROC_TID_INO || task_dumpable(task)) { inode->i_uid = task->euid; inode->i_gid = task->egid; } else { @@ -887,11 +949,11 @@ static int pid_revalidate(struct dentry return 0; } -static int pid_fd_revalidate(struct dentry *dentry, struct nameidata *nd) +static int tid_fd_revalidate(struct dentry *dentry, struct nameidata *nd) { struct inode *inode = dentry->d_inode; struct task_struct *task = proc_task(inode); - int fd = proc_type(inode) - PROC_PID_FD_DIR; + int fd = proc_type(inode) - PROC_TID_FD_DIR; struct files_struct *files; task_lock(task); @@ -940,10 +1002,9 @@ static int pid_delete_dentry(struct dent return !pid_alive(proc_task(dentry->d_inode)); } - -static struct dentry_operations pid_fd_dentry_operations = +static struct dentry_operations tid_fd_dentry_operations = { - .d_revalidate = pid_fd_revalidate, + .d_revalidate = tid_fd_revalidate, .d_delete = pid_delete_dentry, }; @@ -999,7 +1060,7 @@ static struct dentry *proc_lookupfd(stru if (!pid_alive(task)) goto out; - inode = proc_pid_make_inode(dir->i_sb, task, PROC_PID_FD_DIR+fd); + inode = proc_pid_make_inode(dir->i_sb, task, PROC_TID_FD_DIR+fd); if (!inode) goto out; ei = PROC_I(inode); @@ -1024,7 +1085,7 @@ static struct dentry *proc_lookupfd(stru inode->i_op = &proc_pid_link_inode_operations; inode->i_size = 64; ei->op.proc_get_link = proc_fd_link; - dentry->d_op = &pid_fd_dentry_operations; + dentry->d_op = &tid_fd_dentry_operations; d_add(dentry, inode); return NULL; @@ -1037,11 +1098,19 @@ out: return ERR_PTR(-ENOENT); } +static int proc_task_readdir(struct file * filp, void * dirent, filldir_t filldir); +static struct dentry *proc_task_lookup(struct inode *dir, struct dentry * dentry, struct nameidata *nd); + static struct file_operations proc_fd_operations = { .read = generic_read_dir, .readdir = proc_readfd, }; +static struct file_operations proc_task_operations = { + .read = generic_read_dir, + .readdir = proc_task_readdir, +}; + /* * proc directories can do almost nothing.. */ @@ -1050,6 +1119,11 @@ static struct inode_operations proc_fd_i .permission = proc_permission, }; +static struct inode_operations proc_task_inode_operations = { + .lookup = proc_task_lookup, + .permission = proc_permission, +}; + #ifdef CONFIG_SECURITY static ssize_t proc_pid_attr_read(struct file * file, char * buf, size_t count, loff_t *ppos) @@ -1122,8 +1196,10 @@ static struct file_operations proc_pid_a .write = proc_pid_attr_write, }; -static struct file_operations proc_attr_operations; -static struct inode_operations proc_attr_inode_operations; +static struct file_operations proc_tid_attr_operations; +static struct inode_operations proc_tid_attr_inode_operations; +static struct file_operations proc_tgid_attr_operations; +static struct inode_operations proc_tgid_attr_inode_operations; #endif /* SMP-safe */ @@ -1161,71 +1237,98 @@ static struct dentry *proc_pident_lookup inode->i_mode = p->mode; /* * Yes, it does not scale. And it should not. Don't add - * new entries into /proc// without very good reasons. + * new entries into /proc// without very good reasons. */ switch(p->type) { - case PROC_PID_FD: + case PROC_TGID_TASK: + inode->i_nlink = 3; + inode->i_op = &proc_task_inode_operations; + inode->i_fop = &proc_task_operations; + break; + case PROC_TID_FD: + case PROC_TGID_FD: inode->i_nlink = 2; inode->i_op = &proc_fd_inode_operations; inode->i_fop = &proc_fd_operations; break; - case PROC_PID_EXE: + case PROC_TID_EXE: + case PROC_TGID_EXE: inode->i_op = &proc_pid_link_inode_operations; ei->op.proc_get_link = proc_exe_link; break; - case PROC_PID_CWD: + case PROC_TID_CWD: + case PROC_TGID_CWD: inode->i_op = &proc_pid_link_inode_operations; ei->op.proc_get_link = proc_cwd_link; break; - case PROC_PID_ROOT: + case PROC_TID_ROOT: + case PROC_TGID_ROOT: inode->i_op = &proc_pid_link_inode_operations; ei->op.proc_get_link = proc_root_link; break; - case PROC_PID_ENVIRON: + case PROC_TID_ENVIRON: + case PROC_TGID_ENVIRON: inode->i_fop = &proc_info_file_operations; ei->op.proc_read = proc_pid_environ; break; - case PROC_PID_STATUS: + case PROC_TID_STATUS: + case PROC_TGID_STATUS: inode->i_fop = &proc_info_file_operations; ei->op.proc_read = proc_pid_status; break; - case PROC_PID_STAT: + case PROC_TID_STAT: + case PROC_TGID_STAT: inode->i_fop = &proc_info_file_operations; ei->op.proc_read = proc_pid_stat; break; - case PROC_PID_CMDLINE: + case PROC_TID_CMDLINE: + case PROC_TGID_CMDLINE: inode->i_fop = &proc_info_file_operations; ei->op.proc_read = proc_pid_cmdline; break; - case PROC_PID_STATM: + case PROC_TID_STATM: + case PROC_TGID_STATM: inode->i_fop = &proc_info_file_operations; ei->op.proc_read = proc_pid_statm; break; - case PROC_PID_MAPS: + case PROC_TID_MAPS: + case PROC_TGID_MAPS: inode->i_fop = &proc_maps_operations; break; - case PROC_PID_MEM: + case PROC_TID_MEM: + case PROC_TGID_MEM: inode->i_op = &proc_mem_inode_operations; inode->i_fop = &proc_mem_operations; break; - case PROC_PID_MOUNTS: + case PROC_TID_MOUNTS: + case PROC_TGID_MOUNTS: inode->i_fop = &proc_mounts_operations; break; #ifdef CONFIG_SECURITY - case PROC_PID_ATTR: + case PROC_TID_ATTR: + inode->i_nlink = 2; + inode->i_op = &proc_tid_attr_inode_operations; + inode->i_fop = &proc_tid_attr_operations; + break; + case PROC_TGID_ATTR: inode->i_nlink = 2; - inode->i_op = &proc_attr_inode_operations; - inode->i_fop = &proc_attr_operations; + inode->i_op = &proc_tgid_attr_inode_operations; + inode->i_fop = &proc_tgid_attr_operations; break; - case PROC_PID_ATTR_CURRENT: - case PROC_PID_ATTR_PREV: - case PROC_PID_ATTR_EXEC: - case PROC_PID_ATTR_FSCREATE: + case PROC_TID_ATTR_CURRENT: + case PROC_TGID_ATTR_CURRENT: + case PROC_TID_ATTR_PREV: + case PROC_TGID_ATTR_PREV: + case PROC_TID_ATTR_EXEC: + case PROC_TGID_ATTR_EXEC: + case PROC_TID_ATTR_FSCREATE: + case PROC_TGID_ATTR_FSCREATE: inode->i_fop = &proc_pid_attr_operations; break; #endif #ifdef CONFIG_KALLSYMS - case PROC_PID_WCHAN: + case PROC_TID_WCHAN: + case PROC_TGID_WCHAN: inode->i_fop = &proc_info_file_operations; ei->op.proc_read = proc_pid_wchan; break; @@ -1243,40 +1346,75 @@ out: return ERR_PTR(error); } -static struct dentry *proc_base_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd){ - return proc_pident_lookup(dir, dentry, base_stuff); +static struct dentry *proc_tgid_base_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd){ + return proc_pident_lookup(dir, dentry, tgid_base_stuff); } -static struct file_operations proc_base_operations = { +static struct dentry *proc_tid_base_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd){ + return proc_pident_lookup(dir, dentry, tid_base_stuff); +} + +static struct file_operations proc_tgid_base_operations = { + .read = generic_read_dir, + .readdir = proc_tgid_base_readdir, +}; + +static struct file_operations proc_tid_base_operations = { .read = generic_read_dir, - .readdir = proc_base_readdir, + .readdir = proc_tid_base_readdir, +}; + +static struct inode_operations proc_tgid_base_inode_operations = { + .lookup = proc_tgid_base_lookup, }; -static struct inode_operations proc_base_inode_operations = { - .lookup = proc_base_lookup, +static struct inode_operations proc_tid_base_inode_operations = { + .lookup = proc_tid_base_lookup, }; #ifdef CONFIG_SECURITY -static int proc_attr_readdir(struct file * filp, +static int proc_tgid_attr_readdir(struct file * filp, + void * dirent, filldir_t filldir) +{ + return proc_pident_readdir(filp,dirent,filldir, + tgid_attr_stuff,ARRAY_SIZE(tgid_attr_stuff)); +} + +static int proc_tid_attr_readdir(struct file * filp, void * dirent, filldir_t filldir) { return proc_pident_readdir(filp,dirent,filldir, - attr_stuff,ARRAY_SIZE(attr_stuff)); + tid_attr_stuff,ARRAY_SIZE(tid_attr_stuff)); } -static struct file_operations proc_attr_operations = { +static struct file_operations proc_tgid_attr_operations = { .read = generic_read_dir, - .readdir = proc_attr_readdir, + .readdir = proc_tgid_attr_readdir, }; -static struct dentry *proc_attr_lookup(struct inode *dir, +static struct file_operations proc_tid_attr_operations = { + .read = generic_read_dir, + .readdir = proc_tid_attr_readdir, +}; + +static struct dentry *proc_tgid_attr_lookup(struct inode *dir, + struct dentry *dentry, struct nameidata *nd) +{ + return proc_pident_lookup(dir, dentry, tgid_attr_stuff); +} + +static struct dentry *proc_tid_attr_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd) { - return proc_pident_lookup(dir, dentry, attr_stuff); + return proc_pident_lookup(dir, dentry, tid_attr_stuff); } -static struct inode_operations proc_attr_inode_operations = { - .lookup = proc_attr_lookup, +static struct inode_operations proc_tgid_attr_inode_operations = { + .lookup = proc_tgid_attr_lookup, +}; + +static struct inode_operations proc_tid_attr_inode_operations = { + .lookup = proc_tid_attr_lookup, }; #endif @@ -1286,14 +1424,14 @@ static struct inode_operations proc_attr static int proc_self_readlink(struct dentry *dentry, char *buffer, int buflen) { char tmp[30]; - sprintf(tmp, "%d", current->pid); + sprintf(tmp, "%d", current->tgid); return vfs_readlink(dentry,buffer,buflen,tmp); } static int proc_self_follow_link(struct dentry *dentry, struct nameidata *nd) { char tmp[30]; - sprintf(tmp, "%d", current->pid); + sprintf(tmp, "%d", current->tgid); return vfs_follow_link(nd,tmp); } @@ -1357,7 +1495,7 @@ struct dentry *proc_pid_lookup(struct in struct task_struct *task; struct inode *inode; struct proc_inode *ei; - unsigned pid; + unsigned tgid; if (dentry->d_name.len == 4 && !memcmp(dentry->d_name.name,"self",4)) { inode = new_inode(dir->i_sb); @@ -1365,7 +1503,7 @@ struct dentry *proc_pid_lookup(struct in return ERR_PTR(-ENOMEM); ei = PROC_I(inode); inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME; - inode->i_ino = fake_ino(0, PROC_PID_INO); + inode->i_ino = fake_ino(0, PROC_TGID_INO); ei->pde = NULL; inode->i_mode = S_IFLNK|S_IRWXUGO; inode->i_uid = inode->i_gid = 0; @@ -1374,19 +1512,64 @@ struct dentry *proc_pid_lookup(struct in d_add(dentry, inode); return NULL; } - pid = name_to_int(dentry); - if (pid == ~0U) + tgid = name_to_int(dentry); + if (tgid == ~0U) + goto out; + + read_lock(&tasklist_lock); + task = find_task_by_pid(tgid); + if (task) + get_task_struct(task); + read_unlock(&tasklist_lock); + if (!task) + goto out; + + inode = proc_pid_make_inode(dir->i_sb, task, PROC_TGID_INO); + + + if (!inode) { + put_task_struct(task); + goto out; + } + inode->i_mode = S_IFDIR|S_IRUGO|S_IXUGO; + inode->i_op = &proc_tgid_base_inode_operations; + inode->i_fop = &proc_tgid_base_operations; + inode->i_nlink = 3; + inode->i_flags|=S_IMMUTABLE; + + dentry->d_op = &pid_base_dentry_operations; + + spin_lock(&task->proc_lock); + task->proc_dentry = dentry; + d_add(dentry, inode); + spin_unlock(&task->proc_lock); + + put_task_struct(task); + return NULL; +out: + return ERR_PTR(-ENOENT); +} + +/* SMP-safe */ +static struct dentry *proc_task_lookup(struct inode *dir, struct dentry * dentry, struct nameidata *nd) +{ + struct task_struct *task; + struct inode *inode; + unsigned tid; + + tid = name_to_int(dentry); + if (tid == ~0U) goto out; read_lock(&tasklist_lock); - task = find_task_by_pid(pid); + task = find_task_by_pid(tid); if (task) get_task_struct(task); read_unlock(&tasklist_lock); if (!task) goto out; - inode = proc_pid_make_inode(dir->i_sb, task, PROC_PID_INO); + inode = proc_pid_make_inode(dir->i_sb, task, PROC_TID_INO); if (!inode) { @@ -1394,8 +1577,8 @@ struct dentry *proc_pid_lookup(struct in goto out; } inode->i_mode = S_IFDIR|S_IRUGO|S_IXUGO; - inode->i_op = &proc_base_inode_operations; - inode->i_fop = &proc_base_operations; + inode->i_op = &proc_tid_base_inode_operations; + inode->i_fop = &proc_tid_base_operations; inode->i_nlink = 3; inode->i_flags|=S_IMMUTABLE; @@ -1416,59 +1599,119 @@ out: #define PROC_MAXPIDS 20 /* - * Get a few pid's to return for filldir - we need to hold the + * Get a few tid's to return for filldir - we need to hold the * tasklist lock while doing this, and we must release it before * we actually do the filldir itself, so we use a temp buffer.. */ -static int get_pid_list(int index, unsigned int *pids) +static int get_tid_list(int index, unsigned int *tids, struct inode *dir) { - struct task_struct *p; - int nr_pids = 0; + struct task_struct *leader_task = proc_task(dir); + struct task_struct *task = leader_task; + int nr_tids = 0; - index--; + index -= 2; read_lock(&tasklist_lock); - for_each_process(p) { - int pid = p->pid; - if (!pid_alive(p)) + do { + int tid = task->pid; + if (!pid_alive(task)) continue; if (--index >= 0) continue; - pids[nr_pids] = pid; - nr_pids++; - if (nr_pids >= PROC_MAXPIDS) + tids[nr_tids] = tid; + nr_tids++; + if (nr_tids >= PROC_MAXPIDS) break; - } + } while ((task = next_thread(task)) != leader_task); read_unlock(&tasklist_lock); - return nr_pids; + return nr_tids; } +/* for the /proc/ directory itself, after non-process stuff has been done */ int proc_pid_readdir(struct file * filp, void * dirent, filldir_t filldir) { - unsigned int pid_array[PROC_MAXPIDS]; char buf[PROC_NUMBUF]; unsigned int nr = filp->f_pos - FIRST_PROCESS_ENTRY; - unsigned int nr_pids, i; + int tgid; if (!nr) { - ino_t ino = fake_ino(0,PROC_PID_INO); + ino_t ino = fake_ino(0, PROC_TGID_INO); if (filldir(dirent, "self", 4, filp->f_pos, ino, DT_LNK) < 0) return 0; filp->f_pos++; - nr++; + nr = 1; } - nr_pids = get_pid_list(nr, pid_array); + tgid = nr - 1; + while (1) { + unsigned long i, j; + ino_t ino; - for (i = 0; i < nr_pids; i++) { - int pid = pid_array[i]; - ino_t ino = fake_ino(pid,PROC_PID_INO); - unsigned long j = PROC_NUMBUF; + tgid = find_next_tgid(tgid); + if (tgid < 0) + break; - do buf[--j] = '0' + (pid % 10); while (pid/=10); + i = tgid; + j = PROC_NUMBUF; + do buf[--j] = '0' + (i % 10); while (i /= 10); - if (filldir(dirent, buf+j, PROC_NUMBUF-j, filp->f_pos, ino, DT_DIR) < 0) + ino = fake_ino(tgid, PROC_TGID_INO); + if (filldir(dirent, buf + j, PROC_NUMBUF - j, + filp->f_pos, ino, DT_DIR) < 0) break; - filp->f_pos++; + filp->f_pos = tgid + 1 + FIRST_PROCESS_ENTRY; } + return 0; } + +/* for the /proc/TGID/task/ directories */ +static int proc_task_readdir(struct file * filp, void * dirent, filldir_t filldir) +{ + unsigned int tid_array[PROC_MAXPIDS]; + char buf[PROC_NUMBUF]; + unsigned int nr_tids, i; + struct dentry *dentry = filp->f_dentry; + struct inode *inode = dentry->d_inode; + int retval = -ENOENT; + ino_t ino; + unsigned long pos = filp->f_pos; /* avoiding "long long" filp->f_pos */ + + if (!pid_alive(proc_task(inode))) + goto out; + retval = 0; + + switch (pos) { + case 0: + ino = inode->i_ino; + if (filldir(dirent, ".", 1, pos, ino, DT_DIR) < 0) + goto out; + pos++; + /* fall through */ + case 1: + ino = parent_ino(dentry); + if (filldir(dirent, "..", 2, pos, ino, DT_DIR) < 0) + goto out; + pos++; + /* fall through */ + } + + nr_tids = get_tid_list(pos, tid_array, inode); + + for (i = 0; i < nr_tids; i++) { + unsigned long j = PROC_NUMBUF; + int tid = tid_array[i]; + + ino = fake_ino(tid,PROC_TID_INO); + + do + buf[--j] = '0' + (tid % 10); + while (tid /= 10); + + if (filldir(dirent, buf+j, PROC_NUMBUF-j, pos, ino, DT_DIR) < 0) + break; + pos++; + } +out: + filp->f_pos = pos; + return retval; +} diff -prauN linux-2.6.0-test5/fs/proc/generic.c wli-2.6.0-test5-bk12-25/fs/proc/generic.c --- linux-2.6.0-test5/fs/proc/generic.c 2003-09-08 12:50:43.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/proc/generic.c 2003-09-25 19:16:08.000000000 -0700 @@ -18,13 +18,13 @@ #include #include -static ssize_t proc_file_read(struct file * file, char * buf, +static ssize_t proc_file_read(struct file *file, char __user *buf, size_t nbytes, loff_t *ppos); -static ssize_t proc_file_write(struct file * file, const char * buffer, +static ssize_t proc_file_write(struct file *file, const char __user *buffer, size_t count, loff_t *ppos); static loff_t proc_file_lseek(struct file *, loff_t, int); -int proc_match(int len, const char *name,struct proc_dir_entry * de) +int proc_match(int len, const char *name, struct proc_dir_entry *de) { if (de->namelen != len) return 0; @@ -45,7 +45,8 @@ static struct file_operations proc_file_ #define PROC_BLOCK_SIZE (PAGE_SIZE - 1024) static ssize_t -proc_file_read(struct file * file, char * buf, size_t nbytes, loff_t *ppos) +proc_file_read(struct file *file, char __user *buf, size_t nbytes, + loff_t *ppos) { struct inode * inode = file->f_dentry->d_inode; char *page; @@ -59,8 +60,7 @@ proc_file_read(struct file * file, char if (!(page = (char*) __get_free_page(GFP_KERNEL))) return -ENOMEM; - while ((nbytes > 0) && !eof) - { + while ((nbytes > 0) && !eof) { count = MIN(PROC_BLOCK_SIZE, nbytes); start = NULL; @@ -184,7 +184,7 @@ proc_file_read(struct file * file, char } static ssize_t -proc_file_write(struct file * file, const char * buffer, +proc_file_write(struct file *file, const char __user *buffer, size_t count, loff_t *ppos) { struct inode *inode = file->f_dentry->d_inode; @@ -201,7 +201,7 @@ proc_file_write(struct file * file, cons static loff_t -proc_file_lseek(struct file * file, loff_t offset, int orig) +proc_file_lseek(struct file *file, loff_t offset, int orig) { lock_kernel(); @@ -299,15 +299,16 @@ out: return i; } -static int proc_readlink(struct dentry *dentry, char *buffer, int buflen) +static int +proc_readlink(struct dentry *dentry, char __user *buffer, int buflen) { - char *s=PDE(dentry->d_inode)->data; + char *s = PDE(dentry->d_inode)->data; return vfs_readlink(dentry, buffer, buflen, s); } static int proc_follow_link(struct dentry *dentry, struct nameidata *nd) { - char *s=PDE(dentry->d_inode)->data; + char *s = PDE(dentry->d_inode)->data; return vfs_follow_link(nd, s); } diff -prauN linux-2.6.0-test5/fs/proc/kcore.c wli-2.6.0-test5-bk12-25/fs/proc/kcore.c --- linux-2.6.0-test5/fs/proc/kcore.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/proc/kcore.c 2003-09-25 19:16:08.000000000 -0700 @@ -27,7 +27,7 @@ static int open_kcore(struct inode * ino return capable(CAP_SYS_RAWIO) ? 0 : -EPERM; } -static ssize_t read_kcore(struct file *, char *, size_t, loff_t *); +static ssize_t read_kcore(struct file *, char __user *, size_t, loff_t *); struct file_operations proc_kcore_operations = { .read = read_kcore, @@ -175,6 +175,7 @@ static void elf_kcore_store_hdr(char *bu elf->e_ident[EI_CLASS] = ELF_CLASS; elf->e_ident[EI_DATA] = ELF_DATA; elf->e_ident[EI_VERSION]= EV_CURRENT; + elf->e_ident[EI_OSABI] = ELF_OSABI; memset(elf->e_ident+EI_PAD, 0, EI_NIDENT-EI_PAD); elf->e_type = ET_CORE; elf->e_machine = ELF_ARCH; @@ -267,7 +268,8 @@ static void elf_kcore_store_hdr(char *bu /* * read from the ELF header and then kernel memory */ -static ssize_t read_kcore(struct file *file, char *buffer, size_t buflen, loff_t *fpos) +static ssize_t +read_kcore(struct file *file, char __user *buffer, size_t buflen, loff_t *fpos) { ssize_t acc = 0; size_t size, tsz; diff -prauN linux-2.6.0-test5/fs/proc/kmsg.c wli-2.6.0-test5-bk12-25/fs/proc/kmsg.c --- linux-2.6.0-test5/fs/proc/kmsg.c 2003-09-08 12:50:42.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/proc/kmsg.c 2003-09-25 19:16:08.000000000 -0700 @@ -17,7 +17,7 @@ extern wait_queue_head_t log_wait; -extern int do_syslog(int type, char * bug, int count); +extern int do_syslog(int type, char __user *bug, int count); static int kmsg_open(struct inode * inode, struct file * file) { @@ -30,13 +30,13 @@ static int kmsg_release(struct inode * i return 0; } -static ssize_t kmsg_read(struct file * file, char * buf, +static ssize_t kmsg_read(struct file *file, char __user *buf, size_t count, loff_t *ppos) { - return do_syslog(2,buf,count); + return do_syslog(2, buf, count); } -static unsigned int kmsg_poll(struct file *file, poll_table * wait) +static unsigned int kmsg_poll(struct file *file, poll_table *wait) { poll_wait(file, &log_wait, wait); if (do_syslog(9, 0, 0)) diff -prauN linux-2.6.0-test5/fs/proc/proc_misc.c wli-2.6.0-test5-bk12-25/fs/proc/proc_misc.c --- linux-2.6.0-test5/fs/proc/proc_misc.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/proc/proc_misc.c 2003-09-28 23:04:07.000000000 -0700 @@ -200,6 +200,7 @@ static int meminfo_read_proc(char *page, "SwapFree: %8lu kB\n" "Dirty: %8lu kB\n" "Writeback: %8lu kB\n" + "Deferred: %8lu kB\n" "Mapped: %8lu kB\n" "Slab: %8lu kB\n" "Committed_AS: %8u kB\n" @@ -210,8 +211,8 @@ static int meminfo_read_proc(char *page, K(i.totalram), K(i.freeram), K(i.bufferram), - K(get_page_cache_size()-total_swapcache_pages-i.bufferram), - K(total_swapcache_pages), + K(get_page_cache_size() - i.bufferram - ps.nr_swapcache), + K(ps.nr_swapcache), K(active), K(inactive), K(i.totalhigh), @@ -222,6 +223,7 @@ static int meminfo_read_proc(char *page, K(i.freeswap), K(ps.nr_dirty), K(ps.nr_writeback), + K(nr_deferred_pages()), K(ps.nr_mapped), K(ps.nr_slab), K(committed), @@ -343,7 +345,7 @@ static struct file_operations proc_modul #endif extern struct seq_operations slabinfo_op; -extern ssize_t slabinfo_write(struct file *, const char *, size_t, loff_t *); +extern ssize_t slabinfo_write(struct file *, const char __user *, size_t, loff_t *); static int slabinfo_open(struct inode *inode, struct file *file) { return seq_open(file, &slabinfo_op); @@ -548,8 +550,8 @@ static int execdomains_read_proc(char *p * buffer. Use of the program readprofile is recommended in order to * get meaningful info out of these data. */ -static ssize_t read_profile(struct file *file, char *buf, - size_t count, loff_t *ppos) +static ssize_t +read_profile(struct file *file, char __user *buf, size_t count, loff_t *ppos) { unsigned long p = *ppos; ssize_t read; @@ -580,13 +582,13 @@ static ssize_t read_profile(struct file * Writing a 'profiling multiplier' value into it also re-sets the profiling * interrupt frequency, on architectures that support this. */ -static ssize_t write_profile(struct file * file, const char * buf, +static ssize_t write_profile(struct file *file, const char __user *buf, size_t count, loff_t *ppos) { #ifdef CONFIG_SMP extern int setup_profiling_timer (unsigned int multiplier); - if (count==sizeof(int)) { + if (count == sizeof(int)) { unsigned int multiplier; if (copy_from_user(&multiplier, buf, sizeof(int))) @@ -610,8 +612,8 @@ static struct file_operations proc_profi /* * writing 'C' to /proc/sysrq-trigger is like sysrq-C */ -static ssize_t write_sysrq_trigger(struct file *file, const char *buf, - size_t count, loff_t *ppos) +static ssize_t write_sysrq_trigger(struct file *file, const char __user *buf, + size_t count, loff_t *ppos) { if (count) { char c; @@ -685,12 +687,14 @@ void __init proc_misc_init(void) #ifdef CONFIG_MODULES create_seq_entry("modules", 0, &proc_modules_operations); #endif +#ifdef CONFIG_PROC_KCORE proc_root_kcore = create_proc_entry("kcore", S_IRUSR, NULL); if (proc_root_kcore) { proc_root_kcore->proc_fops = &proc_kcore_operations; proc_root_kcore->size = (size_t)high_memory - PAGE_OFFSET + PAGE_SIZE; } +#endif if (prof_on) { entry = create_proc_entry("profile", S_IWUSR | S_IRUGO, NULL); if (entry) { diff -prauN linux-2.6.0-test5/fs/proc/task_mmu.c wli-2.6.0-test5-bk12-25/fs/proc/task_mmu.c --- linux-2.6.0-test5/fs/proc/task_mmu.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/proc/task_mmu.c 2003-09-28 21:47:08.000000000 -0700 @@ -5,27 +5,6 @@ char *task_mem(struct mm_struct *mm, char *buffer) { - unsigned long data = 0, stack = 0, exec = 0, lib = 0; - struct vm_area_struct *vma; - - down_read(&mm->mmap_sem); - for (vma = mm->mmap; vma; vma = vma->vm_next) { - unsigned long len = (vma->vm_end - vma->vm_start) >> 10; - if (!vma->vm_file) { - data += len; - if (vma->vm_flags & VM_GROWSDOWN) - stack += len; - continue; - } - if (vma->vm_flags & VM_WRITE) - continue; - if (vma->vm_flags & VM_EXEC) { - exec += len; - if (vma->vm_flags & VM_EXECUTABLE) - continue; - lib += len; - } - } buffer += sprintf(buffer, "VmSize:\t%8lu kB\n" "VmLck:\t%8lu kB\n" @@ -37,9 +16,10 @@ char *task_mem(struct mm_struct *mm, cha mm->total_vm << (PAGE_SHIFT-10), mm->locked_vm << (PAGE_SHIFT-10), mm->rss << (PAGE_SHIFT-10), - data - stack, stack, - exec - lib, lib); - up_read(&mm->mmap_sem); + (mm->data - mm->stack) << (PAGE_SHIFT-10), + mm->stack << (PAGE_SHIFT-10), + mm->text << (PAGE_SHIFT-10), + mm->lib << (PAGE_SHIFT-10)); return buffer; } @@ -49,30 +29,15 @@ unsigned long task_vsize(struct mm_struc } int task_statm(struct mm_struct *mm, int *shared, int *text, - int *data, int *resident) + int *lib, int *data, int *resident, int *dirty) { - struct vm_area_struct *vma; - int size = 0; - + *shared = mm->shared; + *text = mm->text; + *lib = mm->lib; + *data = mm->data; + *dirty = mm->dirty; *resident = mm->rss; - for (vma = mm->mmap; vma; vma = vma->vm_next) { - int pages = (vma->vm_end - vma->vm_start) >> PAGE_SHIFT; - - size += pages; - if (is_vm_hugetlb_page(vma)) { - if (!(vma->vm_flags & VM_DONTCOPY)) - *shared += pages; - continue; - } - if (vma->vm_flags & VM_SHARED || !list_empty(&vma->shared)) - *shared += pages; - if (vma->vm_flags & VM_EXECUTABLE) - *text += pages; - else - *data += pages; - } - - return size; + return mm->total_vm; } static int show_map(struct seq_file *m, void *v) diff -prauN linux-2.6.0-test5/fs/proc/task_nommu.c wli-2.6.0-test5-bk12-25/fs/proc/task_nommu.c --- linux-2.6.0-test5/fs/proc/task_nommu.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/proc/task_nommu.c 2003-09-28 21:47:08.000000000 -0700 @@ -67,19 +67,23 @@ unsigned long task_vsize(struct mm_struc struct mm_tblock_struct *tbp; unsigned long vsize = 0; + down_read(&mm->mmap_sem); for (tbp = &mm->context.tblock; tbp; tbp = tbp->next) { if (tbp->rblock) vsize += kobjsize(tbp->rblock->kblock); } - + up_read(&mm->mmap_sem); return vsize; } int task_statm(struct mm_struct *mm, int *shared, int *text, - int *data, int *resident) + int *lib, int *data, int *resident, int *dirty) { struct mm_tblock_struct *tbp; - int size = kobjsize(mm); + int size; + + down_read(&mm->mmap_sem); + size = kobjsize(mm); for (tbp = &mm->context.tblock; tbp; tbp = tbp->next) { if (tbp->next) @@ -92,8 +96,9 @@ int task_statm(struct mm_struct *mm, int size += (*text = mm->end_code - mm->start_code); size += (*data = mm->start_stack - mm->start_data); - + *shared = *lib = *dirty = 0; *resident = size; + up_read(&mm->mmap_sem); return size; } diff -prauN linux-2.6.0-test5/fs/qnx4/inode.c wli-2.6.0-test5-bk12-25/fs/qnx4/inode.c --- linux-2.6.0-test5/fs/qnx4/inode.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/qnx4/inode.c 2003-09-28 23:04:07.000000000 -0700 @@ -434,7 +434,7 @@ static int qnx4_readpage(struct file *fi static int qnx4_prepare_write(struct file *file, struct page *page, unsigned from, unsigned to) { - struct qnx4_inode_info *qnx4_inode = qnx4_i(page->mapping->host); + struct qnx4_inode_info *qnx4_inode = qnx4_i(page_mapping(page)->host); return cont_prepare_write(page, from, to, qnx4_get_block, &qnx4_inode->mmu_private); } diff -prauN linux-2.6.0-test5/fs/reiserfs/file.c wli-2.6.0-test5-bk12-25/fs/reiserfs/file.c --- linux-2.6.0-test5/fs/reiserfs/file.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/reiserfs/file.c 2003-09-25 19:16:08.000000000 -0700 @@ -485,6 +485,11 @@ int reiserfs_allocate_blocks_for_region( /* Now the final thing, if we have grew the file, we must update it's size*/ if ( pos + write_bytes > inode->i_size) { inode->i_size = pos + write_bytes; // Set new size + /* If the file have grown so much that tail packing is no longer possible, reset + "need to pack" flag */ + if ( (have_large_tails (inode->i_sb) && inode->i_size > i_block_size (inode)*4) || + (have_small_tails (inode->i_sb) && inode->i_size > i_block_size(inode)) ) + REISERFS_I(inode)->i_flags &= ~i_pack_on_close_mask ; } /* Amount of on-disk blocks used by file have changed, update it */ @@ -779,7 +784,7 @@ int reiserfs_prepare_file_region_for_wri /* Now if all the write area lies past the file end, no point in maping blocks, since there is none, so we just zero out remaining parts of first and last pages in write area (if needed) */ - if ( (pos & ~(PAGE_CACHE_SIZE - 1)) > inode->i_size ) { + if ( (pos & ~((loff_t)PAGE_CACHE_SIZE - 1)) > inode->i_size ) { if ( from != 0 ) {/* First page needs to be partially zeroed */ char *kaddr = kmap_atomic(prepared_pages[0], KM_USER0); memset(kaddr, 0, from); @@ -801,9 +806,9 @@ int reiserfs_prepare_file_region_for_wri we need to allocate (calculated above) */ /* Mask write position to start on blocksize, we do it out of the loop for performance reasons */ - pos &= ~(inode->i_sb->s_blocksize - 1); + pos &= ~((loff_t) inode->i_sb->s_blocksize - 1); /* Set cpu key to the starting position in a file (on left block boundary)*/ - make_cpu_key (&key, inode, 1 + ((pos) & ~(inode->i_sb->s_blocksize - 1)), TYPE_ANY, 3/*key length*/); + make_cpu_key (&key, inode, 1 + ((pos) & ~((loff_t) inode->i_sb->s_blocksize - 1)), TYPE_ANY, 3/*key length*/); reiserfs_write_lock(inode->i_sb); // We need that for at least search_by_key() for ( i = 0; i < num_pages ; i++ ) { @@ -999,9 +1004,41 @@ ssize_t reiserfs_file_write( struct file struct page * prepared_pages[REISERFS_WRITE_PAGES_AT_A_TIME]; /* To simplify coding at this time, we store locked pages in array for now */ - if ( count <= PAGE_CACHE_SIZE || file->f_flags & O_DIRECT) + if ( count <= PAGE_CACHE_SIZE ) return generic_file_write(file, buf, count, ppos); + if ( file->f_flags & O_DIRECT) { // Direct IO needs some special threating. + int result, after_file_end = 0; + if ( (*ppos + count >= inode->i_size) || (file->f_flags & O_APPEND) ) { + /* If we are appending a file, we need to put this savelink in here. + If we will crash while doing direct io, finish_unfinished will + cut the garbage from the file end. */ + struct reiserfs_transaction_handle th; + reiserfs_write_lock(inode->i_sb); + journal_begin(&th, inode->i_sb, JOURNAL_PER_BALANCE_CNT ); + reiserfs_update_inode_transaction(inode); + add_save_link (&th, inode, 1 /* Truncate */); + journal_end(&th, inode->i_sb, JOURNAL_PER_BALANCE_CNT ); + reiserfs_write_unlock(inode->i_sb); + after_file_end = 1; + } + result = generic_file_write(file, buf, count, ppos); + + if ( after_file_end ) { /* Now update i_size and remove the savelink */ + struct reiserfs_transaction_handle th; + reiserfs_write_lock(inode->i_sb); + journal_begin(&th, inode->i_sb, 1); + reiserfs_update_inode_transaction(inode); + reiserfs_update_sd(&th, inode); + journal_end(&th, inode->i_sb, 1); + remove_save_link (inode, 1/* truncate */); + reiserfs_write_unlock(inode->i_sb); + } + + return result; + } + + if ( unlikely((ssize_t) count < 0 )) return -EINVAL; diff -prauN linux-2.6.0-test5/fs/reiserfs/inode.c wli-2.6.0-test5-bk12-25/fs/reiserfs/inode.c --- linux-2.6.0-test5/fs/reiserfs/inode.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/reiserfs/inode.c 2003-09-28 23:04:07.000000000 -0700 @@ -306,7 +306,7 @@ research: ** read old data off disk. Set the up to date bit on the buffer instead ** and jump to the end */ - if (PageUptodate(bh_result->b_page)) { + if (!bh_result->b_page || PageUptodate(bh_result->b_page)) { set_buffer_uptodate(bh_result); goto finished ; } @@ -420,6 +420,45 @@ static int reiserfs_get_block_create_0 ( return reiserfs_get_block(inode, block, bh_result, GET_BLOCK_NO_HOLE) ; } +/* This is special helper for reiserfs_get_block in case we are executing + direct_IO request. */ +static int reiserfs_get_blocks_direct_io(struct inode *inode, + sector_t iblock, + unsigned long max_blocks, + struct buffer_head *bh_result, + int create) +{ + int ret ; + + bh_result->b_page = NULL; + + /* We set the b_size before reiserfs_get_block call since it is + referenced in convert_tail_for_hole() that may be called from + reiserfs_get_block() */ + bh_result->b_size = (1 << inode->i_blkbits); + + ret = reiserfs_get_block(inode, iblock, bh_result, create) ; + + /* don't allow direct io onto tail pages */ + if (ret == 0 && buffer_mapped(bh_result) && bh_result->b_blocknr == 0) { + /* make sure future calls to the direct io funcs for this offset + ** in the file fail by unmapping the buffer + */ + reiserfs_unmap_buffer(bh_result); + ret = -EINVAL ; + } + /* Possible unpacked tail. Flush the data before pages have + disappeared */ + if (REISERFS_I(inode)->i_flags & i_pack_on_close_mask) { + lock_kernel(); + reiserfs_commit_for_inode(inode); + REISERFS_I(inode)->i_flags &= ~i_pack_on_close_mask; + unlock_kernel(); + } + return ret ; +} + + /* ** helper function for when reiserfs_get_block is called for a hole ** but the file tail is still in a direct item @@ -448,7 +487,10 @@ static int convert_tail_for_hole(struct tail_end = (tail_start | (bh_result->b_size - 1)) + 1 ; index = tail_offset >> PAGE_CACHE_SHIFT ; - if (index != hole_page->index) { + /* hole_page can be zero in case of direct_io, we are sure + that we cannot get here if we write with O_DIRECT into + tail page */ + if (!hole_page || index != hole_page->index) { tail_page = grab_cache_page(inode->i_mapping, index) ; retval = -ENOMEM; if (!tail_page) { @@ -554,7 +596,12 @@ int reiserfs_get_block (struct inode * i return ret; } - REISERFS_I(inode)->i_flags |= i_pack_on_close_mask ; + /* If file is of such a size, that it might have a tail and tails are enabled + ** we should mark it as possibly needing tail packing on close + */ + if ( (have_large_tails (inode->i_sb) && inode->i_size < i_block_size (inode)*4) || + (have_small_tails (inode->i_sb) && inode->i_size < i_block_size(inode)) ) + REISERFS_I(inode)->i_flags |= i_pack_on_close_mask ; windex = push_journal_writer("reiserfs_get_block") ; @@ -745,21 +792,26 @@ int reiserfs_get_block (struct inode * i */ set_buffer_uptodate (unbh); - /* we've converted the tail, so we must - ** flush unbh before the transaction commits - */ - add_to_flushlist(inode, unbh) ; - - /* mark it dirty now to prevent commit_write from adding - ** this buffer to the inode's dirty buffer list + /* unbh->b_page == NULL in case of DIRECT_IO request, this means + buffer will disappear shortly, so it should not be added to */ + if ( unbh->b_page ) { + /* we've converted the tail, so we must + ** flush unbh before the transaction commits + */ + add_to_flushlist(inode, unbh) ; + + /* mark it dirty now to prevent commit_write from adding + ** this buffer to the inode's dirty buffer list + */ /* * AKPM: changed __mark_buffer_dirty to mark_buffer_dirty(). * It's still atomic, but it sets the page dirty too, * which makes it eligible for writeback at any time by the * VM (which was also the case with __mark_buffer_dirty()) */ - mark_buffer_dirty(unbh) ; + mark_buffer_dirty(unbh) ; + } //inode->i_blocks += inode->i_sb->s_blocksize / 512; //mark_tail_converted (inode); @@ -1003,7 +1055,7 @@ static void init_inode (struct inode * i inode->i_mapping->a_ops = &reiserfs_address_space_operations; } else { inode->i_blocks = 0; - init_special_inode(inode, inode->i_mode, old_decode_dev(rdev)); + init_special_inode(inode, inode->i_mode, new_decode_dev(rdev)); } } @@ -1024,7 +1076,7 @@ static void inode2sd (void * sd, struct set_sd_v2_ctime(sd_v2, inode->i_ctime.tv_sec ); set_sd_v2_blocks(sd_v2, inode->i_blocks ); if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode)) - set_sd_v2_rdev(sd_v2, old_encode_dev(inode->i_rdev)); + set_sd_v2_rdev(sd_v2, new_encode_dev(inode->i_rdev)); else set_sd_v2_generation(sd_v2, inode->i_generation); flags = REISERFS_I(inode)->i_attrs; @@ -1048,7 +1100,7 @@ static void inode2sd_v1 (void * sd, stru set_sd_v1_mtime(sd_v1, inode->i_mtime.tv_sec ); if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode)) - set_sd_v1_rdev(sd_v1, old_encode_dev(inode->i_rdev)); + set_sd_v1_rdev(sd_v1, new_encode_dev(inode->i_rdev)); else set_sd_v1_blocks(sd_v1, inode->i_blocks ); @@ -1998,7 +2050,7 @@ static void lock_buffer_for_writepage(st lock_buffer(bh); } else { if (test_set_buffer_locked(bh)) { - __set_page_dirty_nobuffers(page); + set_page_dirty_nobuffers(page); return; } } @@ -2017,7 +2069,7 @@ static void lock_buffer_for_writepage(st * code to handle reiserfs tails. */ static int reiserfs_write_full_page(struct page *page, struct writeback_control *wbc) { - struct inode *inode = page->mapping->host ; + struct inode *inode = page_mapping(page)->host ; unsigned long end_index = inode->i_size >> PAGE_CACHE_SHIFT ; int error = 0; unsigned long block ; @@ -2170,7 +2222,7 @@ static int reiserfs_readpage (struct fil static int reiserfs_writepage (struct page * page, struct writeback_control *wbc) { - struct inode *inode = page->mapping->host ; + struct inode *inode = page_mapping(page)->host ; reiserfs_wait_on_write_block(inode->i_sb) ; return reiserfs_write_full_page(page, wbc) ; } @@ -2178,7 +2230,7 @@ static int reiserfs_writepage (struct pa int reiserfs_prepare_write(struct file *f, struct page *page, unsigned from, unsigned to) { - struct inode *inode = page->mapping->host ; + struct inode *inode = page_mapping(page)->host ; reiserfs_wait_on_write_block(inode->i_sb) ; fix_tail_page_for_writing(page) ; return block_prepare_write(page, from, to, reiserfs_get_block) ; @@ -2191,7 +2243,7 @@ static sector_t reiserfs_aop_bmap(struct static int reiserfs_commit_write(struct file *f, struct page *page, unsigned from, unsigned to) { - struct inode *inode = page->mapping->host ; + struct inode *inode = page_mapping(page)->host ; loff_t pos = ((loff_t)page->index << PAGE_CACHE_SHIFT) + to; int ret ; @@ -2204,6 +2256,13 @@ static int reiserfs_commit_write(struct if (pos > inode->i_size) { struct reiserfs_transaction_handle th ; reiserfs_write_lock(inode->i_sb); + /* If the file have grown beyond the border where it + can have a tail, unmark it as needing a tail + packing */ + if ( (have_large_tails (inode->i_sb) && inode->i_size > i_block_size (inode)*4) || + (have_small_tails (inode->i_sb) && inode->i_size > i_block_size(inode)) ) + REISERFS_I(inode)->i_flags &= ~i_pack_on_close_mask ; + journal_begin(&th, inode->i_sb, 1) ; reiserfs_update_inode_transaction(inode) ; inode->i_size = pos ; @@ -2286,7 +2345,7 @@ void i_attrs_to_sd_attrs( struct inode * */ static int reiserfs_releasepage(struct page *page, int unused_gfp_flags) { - struct inode *inode = page->mapping->host ; + struct inode *inode = page_mapping(page)->host ; struct reiserfs_journal *j = SB_JOURNAL(inode->i_sb) ; struct buffer_head *head ; struct buffer_head *bh ; @@ -2310,6 +2369,19 @@ static int reiserfs_releasepage(struct p return ret ; } +/* We thank Mingming Cao for helping us understand in great detail what + to do in this section of the code. */ +static int reiserfs_direct_IO(int rw, struct kiocb *iocb, const struct iovec *iov, + loff_t offset, unsigned long nr_segs) +{ + struct file *file = iocb->ki_filp; + struct inode *inode = file->f_dentry->d_inode->i_mapping->host; + + return blockdev_direct_IO(rw, iocb, inode, inode->i_sb->s_bdev, iov, + offset, nr_segs, reiserfs_get_blocks_direct_io, NULL); +} + + struct address_space_operations reiserfs_address_space_operations = { .writepage = reiserfs_writepage, .readpage = reiserfs_readpage, @@ -2318,5 +2390,6 @@ struct address_space_operations reiserfs .sync_page = block_sync_page, .prepare_write = reiserfs_prepare_write, .commit_write = reiserfs_commit_write, - .bmap = reiserfs_aop_bmap + .bmap = reiserfs_aop_bmap, + .direct_IO = reiserfs_direct_IO } ; diff -prauN linux-2.6.0-test5/fs/reiserfs/journal.c wli-2.6.0-test5-bk12-25/fs/reiserfs/journal.c --- linux-2.6.0-test5/fs/reiserfs/journal.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/reiserfs/journal.c 2003-09-25 19:16:08.000000000 -0700 @@ -1406,6 +1406,10 @@ static int journal_transaction_is_valid( *newest_mount_id) ; return -1 ; } + if ( get_desc_trans_len(desc) > SB_JOURNAL_TRANS_MAX(p_s_sb) ) { + reiserfs_warning("journal-2018: Bad transaction length %d encountered, ignoring transaction\n", get_desc_trans_len(desc)); + return -1 ; + } offset = d_bh->b_blocknr - SB_ONDISK_JOURNAL_1st_BLOCK(p_s_sb) ; /* ok, we have a journal description block, lets see if the transaction was valid */ @@ -1422,11 +1426,12 @@ static int journal_transaction_is_valid( get_commit_trans_id (commit), get_commit_trans_len(commit)); brelse(c_bh) ; - if (oldest_invalid_trans_id) - *oldest_invalid_trans_id = get_desc_trans_id(desc) ; + if (oldest_invalid_trans_id) { + *oldest_invalid_trans_id = get_desc_trans_id(desc) ; reiserfs_debug(p_s_sb, REISERFS_DEBUG_CODE, "journal-1004: " "transaction_is_valid setting oldest invalid trans_id " "to %d\n", get_desc_trans_id(desc)) ; + } return -1; } brelse(c_bh) ; @@ -1527,9 +1532,14 @@ static int journal_read_transaction(stru } else { real_blocks[i] = sb_getblk(p_s_sb, le32_to_cpu(commit->j_realblock[i - trans_half])) ; } + if ( real_blocks[i]->b_blocknr > SB_BLOCK_COUNT(p_s_sb) ) { + reiserfs_warning("journal-1207: REPLAY FAILURE fsck required! Block to replay is outside of filesystem\n"); + goto abort_replay; + } /* make sure we don't try to replay onto log or reserved area */ if (is_block_in_log_or_reserved_area(p_s_sb, real_blocks[i]->b_blocknr)) { reiserfs_warning("journal-1204: REPLAY FAILURE fsck required! Trying to replay onto a log block\n") ; +abort_replay: brelse_array(log_blocks, i) ; brelse_array(real_blocks, i) ; brelse(c_bh) ; @@ -1906,7 +1916,7 @@ static int journal_init_dev( struct supe journal -> j_dev_bd = NULL; journal -> j_dev_file = NULL; jdev = SB_ONDISK_JOURNAL_DEVICE( super ) ? - old_decode_dev(SB_ONDISK_JOURNAL_DEVICE(super)) : super->s_dev; + new_decode_dev(SB_ONDISK_JOURNAL_DEVICE(super)) : super->s_dev; if (bdev_read_only(super->s_bdev)) blkdev_mode = FMODE_READ; diff -prauN linux-2.6.0-test5/fs/reiserfs/namei.c wli-2.6.0-test5-bk12-25/fs/reiserfs/namei.c --- linux-2.6.0-test5/fs/reiserfs/namei.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/reiserfs/namei.c 2003-09-25 19:16:08.000000000 -0700 @@ -613,7 +613,7 @@ static int reiserfs_mknod (struct inode struct reiserfs_transaction_handle th ; int jbegin_count = JOURNAL_PER_BALANCE_CNT * 3; - if (!old_valid_dev(rdev)) + if (!new_valid_dev(rdev)) return -EINVAL; if (!(inode = new_inode(dir->i_sb))) { diff -prauN linux-2.6.0-test5/fs/reiserfs/procfs.c wli-2.6.0-test5-bk12-25/fs/reiserfs/procfs.c --- linux-2.6.0-test5/fs/reiserfs/procfs.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/reiserfs/procfs.c 2003-09-25 19:16:08.000000000 -0700 @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -29,58 +30,10 @@ * */ -static struct super_block *procinfo_prologue(dev_t dev) +static int show_version(struct seq_file *m, struct super_block *sb) { - struct super_block *result; - - /* get super-block by device */ - result = user_get_super(dev); - if( result != NULL ) { - if( !is_reiserfs_super( result ) ) { - printk( KERN_DEBUG "reiserfs: procfs-52: " - "non-reiserfs super found\n" ); - drop_super( result ); - result = NULL; - } - } else - printk( KERN_DEBUG "reiserfs: procfs-74: " - "race between procinfo and umount\n" ); - return result; -} - -int procinfo_epilogue( struct super_block *super ) -{ - drop_super( super ); - return 0; -} - -int reiserfs_proc_tail( int len, char *buffer, char **start, - off_t offset, int count, int *eof ) -{ - /* this is black procfs magic */ - if( offset >= len ) { - *start = buffer; - *eof = 1; - return 0; - } - *start = buffer + offset; - if( ( len -= offset ) > count ) { - return count; - } - *eof = 1; - return len; -} - -int reiserfs_version_in_proc( char *buffer, char **start, off_t offset, - int count, int *eof, void *data ) -{ - int len = 0; - struct super_block *sb; char *format; - sb = procinfo_prologue((int)data); - if( sb == NULL ) - return -ENOENT; if ( REISERFS_SB(sb)->s_properties & (1 << REISERFS_3_6) ) { format = "3.6"; } else if ( REISERFS_SB(sb)->s_properties & (1 << REISERFS_3_5) ) { @@ -89,7 +42,7 @@ int reiserfs_version_in_proc( char *buff format = "unknown"; } - len += sprintf( &buffer[ len ], "%s format\twith checks %s\n", + seq_printf(m, "%s format\twith checks %s\n", format, #if defined( CONFIG_REISERFS_CHECK ) "on" @@ -97,15 +50,15 @@ int reiserfs_version_in_proc( char *buff "off" #endif ); - procinfo_epilogue( sb ); - return reiserfs_proc_tail( len, buffer, start, offset, count, eof ); + return 0; } int reiserfs_global_version_in_proc( char *buffer, char **start, off_t offset, int count, int *eof, void *data ) { - int len = 0; - return reiserfs_proc_tail( len, buffer, start, offset, count, eof ); + *start = buffer; + *eof = 1; + return 0; } #define SF( x ) ( r -> x ) @@ -129,19 +82,11 @@ int reiserfs_global_version_in_proc( cha #define DJP( x ) le32_to_cpu( jp -> x ) #define JF( x ) ( r -> s_journal -> x ) -int reiserfs_super_in_proc( char *buffer, char **start, off_t offset, - int count, int *eof, void *data ) +static int show_super(struct seq_file *m, struct super_block *sb) { - struct super_block *sb; - struct reiserfs_sb_info *r; - int len = 0; + struct reiserfs_sb_info *r = REISERFS_SB(sb); - sb = procinfo_prologue((int)data); - if( sb == NULL ) - return -ENOENT; - r = REISERFS_SB(sb); - len += sprintf( &buffer[ len ], - "state: \t%s\n" + seq_printf(m, "state: \t%s\n" "mount options: \t%s%s%s%s%s%s%s%s%s%s%s%s\n" "gen. counter: \t%i\n" "s_kmallocs: \t%i\n" @@ -217,25 +162,15 @@ int reiserfs_super_in_proc( char *buffer SFP( leaked_oid ), SFP( leaves_removable ) ); - procinfo_epilogue( sb ); - return reiserfs_proc_tail( len, buffer, start, offset, count, eof ); + return 0; } -int reiserfs_per_level_in_proc( char *buffer, char **start, off_t offset, - int count, int *eof, void *data ) +static int show_per_level(struct seq_file *m, struct super_block *sb) { - struct super_block *sb; - struct reiserfs_sb_info *r; - int len = 0; + struct reiserfs_sb_info *r = REISERFS_SB(sb); int level; - - sb = procinfo_prologue((int)data); - if( sb == NULL ) - return -ENOENT; - r = REISERFS_SB(sb); - len += sprintf( &buffer[ len ], - "level\t" + seq_printf(m, "level\t" " balances" " [sbk: reads" " fs_changed" @@ -256,12 +191,7 @@ int reiserfs_per_level_in_proc( char *bu ); for( level = 0 ; level < MAX_HEIGHT ; ++ level ) { - if( len > PAGE_SIZE - 240 ) { - len += sprintf( &buffer[ len ], "... and more\n" ); - break; - } - len += sprintf( &buffer[ len ], - "%i\t" + seq_printf(m, "%i\t" " %12lu" " %12lu" " %12lu" @@ -296,24 +226,14 @@ int reiserfs_per_level_in_proc( char *bu SFPL( need_r_neighbor ) ); } - - procinfo_epilogue( sb ); - return reiserfs_proc_tail( len, buffer, start, offset, count, eof ); + return 0; } -int reiserfs_bitmap_in_proc( char *buffer, char **start, off_t offset, - int count, int *eof, void *data ) +static int show_bitmap(struct seq_file *m, struct super_block *sb) { - struct super_block *sb; - struct reiserfs_sb_info *r; - int len = 0; - - sb = procinfo_prologue((int)data); - if( sb == NULL ) - return -ENOENT; - r = REISERFS_SB(sb); + struct reiserfs_sb_info *r = REISERFS_SB(sb); - len += sprintf( &buffer[ len ], "free_block: %lu\n" + seq_printf(m, "free_block: %lu\n" " scan_bitmap:" " wait" " bmap" @@ -339,30 +259,17 @@ int reiserfs_bitmap_in_proc( char *buffe SFPF( in_journal_hint ), SFPF( in_journal_nohint ) ); - procinfo_epilogue( sb ); - return reiserfs_proc_tail( len, buffer, start, offset, count, eof ); + return 0; } -int reiserfs_on_disk_super_in_proc( char *buffer, char **start, off_t offset, - int count, int *eof, void *data ) +static int show_on_disk_super(struct seq_file *m, struct super_block *sb) { - struct super_block *sb; - struct reiserfs_sb_info *sb_info; - struct reiserfs_super_block *rs; - int hash_code; - __u32 flags; - int len = 0; - - sb = procinfo_prologue((int)data); - if( sb == NULL ) - return -ENOENT; - sb_info = REISERFS_SB(sb); - rs = sb_info -> s_rs; - hash_code = DFL( s_hash_function_code ); - flags = DJF( s_flags ); + struct reiserfs_sb_info *sb_info = REISERFS_SB(sb); + struct reiserfs_super_block *rs = sb_info -> s_rs; + int hash_code = DFL( s_hash_function_code ); + __u32 flags = DJF( s_flags ); - len += sprintf( &buffer[ len ], - "block_count: \t%i\n" + seq_printf(m, "block_count: \t%i\n" "free_blocks: \t%i\n" "root_block: \t%i\n" "blocksize: \t%i\n" @@ -399,84 +306,49 @@ int reiserfs_on_disk_super_in_proc( char ? "attrs_cleared" : "", DF (s_reserved_for_journal)); - procinfo_epilogue( sb ); - return reiserfs_proc_tail( len, buffer, start, offset, count, eof ); + return 0; } -int reiserfs_oidmap_in_proc( char *buffer, char **start, off_t offset, - int count, int *eof, void *data ) +static int show_oidmap(struct seq_file *m, struct super_block *sb) { - struct super_block *sb; - struct reiserfs_sb_info *sb_info; - struct reiserfs_super_block *rs; + struct reiserfs_sb_info *sb_info = REISERFS_SB(sb); + struct reiserfs_super_block *rs = sb_info -> s_rs; + unsigned int mapsize = le16_to_cpu( rs -> s_v1.s_oid_cursize ); + unsigned long total_used = 0; int i; - unsigned int mapsize; - unsigned long total_used; - int len = 0; - int exact; - - sb = procinfo_prologue((int)data); - if( sb == NULL ) - return -ENOENT; - sb_info = REISERFS_SB(sb); - rs = sb_info -> s_rs; - mapsize = le16_to_cpu( rs -> s_v1.s_oid_cursize ); - total_used = 0; for( i = 0 ; i < mapsize ; ++i ) { __u32 right; right = ( i == mapsize - 1 ) ? MAX_KEY_OBJECTID : MAP( i + 1 ); - len += sprintf( &buffer[ len ], "%s: [ %x .. %x )\n", + seq_printf(m, "%s: [ %x .. %x )\n", ( i & 1 ) ? "free" : "used", MAP( i ), right ); if( ! ( i & 1 ) ) { total_used += right - MAP( i ); } - if( len > PAGE_SIZE - 100 ) { - len += sprintf( &buffer[ len ], "... and more\n" ); - break; - } } #if defined( REISERFS_USE_OIDMAPF ) if( sb_info -> oidmap.use_file && ( sb_info -> oidmap.mapf != NULL ) ) { - loff_t size; - - size = sb_info -> oidmap.mapf -> f_dentry -> d_inode -> i_size; + loff_t size = sb_info->oidmap.mapf->f_dentry->d_inode->i_size; total_used += size / sizeof( reiserfs_oidinterval_d_t ); - exact = 1; - } else -#endif - { - exact = ( i == mapsize ); } - len += sprintf( &buffer[ len ], "total: \t%i [%i/%i] used: %lu [%s]\n", - i, +#endif + seq_printf(m, "total: \t%i [%i/%i] used: %lu [exact]\n", + mapsize, mapsize, le16_to_cpu( rs -> s_v1.s_oid_maxsize ), - total_used, exact ? "exact" : "estimation" ); - - procinfo_epilogue( sb ); - return reiserfs_proc_tail( len, buffer, start, offset, count, eof ); + total_used); + return 0; } -int reiserfs_journal_in_proc( char *buffer, char **start, off_t offset, - int count, int *eof, void *data ) +static int show_journal(struct seq_file *m, struct super_block *sb) { - struct super_block *sb; - struct reiserfs_sb_info *r; - struct reiserfs_super_block *rs; - struct journal_params *jp; - int len = 0; + struct reiserfs_sb_info *r = REISERFS_SB(sb); + struct reiserfs_super_block *rs = r -> s_rs; + struct journal_params *jp = &rs->s_v1.s_journal; char b[BDEVNAME_SIZE]; - sb = procinfo_prologue((int)data); - if( sb == NULL ) - return -ENOENT; - r = REISERFS_SB(sb); - rs = r -> s_rs; - jp = &rs->s_v1.s_journal; - len += sprintf( &buffer[ len ], - /* on-disk fields */ + seq_printf(m, /* on-disk fields */ "jp_journal_1st_block: \t%i\n" "jp_journal_dev: \t%s[%x]\n" "jp_journal_size: \t%i\n" @@ -567,21 +439,115 @@ int reiserfs_journal_in_proc( char *buff SFPJ( prepare ), SFPJ( prepare_retry ) ); + return 0; +} + +/* iterator */ +static int test_sb(struct super_block *sb, void *data) +{ + return data == sb; +} + +static int set_sb(struct super_block *sb, void *data) +{ + return -ENOENT; +} + +static void *r_start(struct seq_file *m, loff_t *pos) +{ + struct proc_dir_entry *de = m->private; + struct super_block *s = de->parent->data; + loff_t l = *pos; + + if (l) + return NULL; + + if (IS_ERR(sget(&reiserfs_fs_type, test_sb, set_sb, s))) + return NULL; + + up_write(&s->s_umount); - procinfo_epilogue( sb ); - return reiserfs_proc_tail( len, buffer, start, offset, count, eof ); + if (de->deleted) { + deactivate_super(s); + return NULL; + } + + return s; +} + +static void *r_next(struct seq_file *m, void *v, loff_t *pos) +{ + ++*pos; + return NULL; +} + +static void r_stop(struct seq_file *m, void *v) +{ + struct proc_dir_entry *de = m->private; + struct super_block *s = de->data; + deactivate_super(s); +} + +static int r_show(struct seq_file *m, void *v) +{ + struct proc_dir_entry *de = m->private; + int (*show)(struct seq_file *, struct super_block *) = de->data; + return show(m, v); +} + +static struct seq_operations r_ops = { + .start = r_start, + .next = r_next, + .stop = r_stop, + .show = r_show, +}; + +static int r_open(struct inode *inode, struct file *file) +{ + int ret = seq_open(file, &r_ops); + + if (!ret) { + struct seq_file *m = file->private_data; + m->private = PDE(inode); + } + return ret; } +static struct file_operations r_file_operations = { + .open = r_open, + .read = seq_read, + .llseek = seq_lseek, + .release = seq_release, +}; static struct proc_dir_entry *proc_info_root = NULL; static const char proc_info_root_name[] = "fs/reiserfs"; +static void add_file(struct super_block *sb, char *name, + int (*func)(struct seq_file *, struct super_block *)) +{ + struct proc_dir_entry *de; + de = create_proc_entry(name, 0, REISERFS_SB(sb)->procdir); + if (de) { + de->data = func; + de->proc_fops = &r_file_operations; + } +} + int reiserfs_proc_info_init( struct super_block *sb ) { spin_lock_init( & __PINFO( sb ).lock ); REISERFS_SB(sb)->procdir = proc_mkdir(reiserfs_bdevname (sb), proc_info_root); if( REISERFS_SB(sb)->procdir ) { - REISERFS_SB(sb)->procdir -> owner = THIS_MODULE; + REISERFS_SB(sb)->procdir->owner = THIS_MODULE; + REISERFS_SB(sb)->procdir->data = sb; + add_file(sb, "version", show_version); + add_file(sb, "super", show_super); + add_file(sb, "per-level", show_per_level); + add_file(sb, "bitmap", show_bitmap); + add_file(sb, "on-disk-super", show_on_disk_super); + add_file(sb, "oidmap", show_oidmap); + add_file(sb, "journal", show_journal); return 0; } reiserfs_warning( "reiserfs: cannot create /proc/%s/%s\n", @@ -589,9 +555,18 @@ int reiserfs_proc_info_init( struct supe return 1; } - int reiserfs_proc_info_done( struct super_block *sb ) { + struct proc_dir_entry *de = REISERFS_SB(sb)->procdir; + if (de) { + remove_proc_entry("journal", de); + remove_proc_entry("oidmap", de); + remove_proc_entry("on-disk-super", de); + remove_proc_entry("bitmap", de); + remove_proc_entry("per-level", de); + remove_proc_entry("super", de); + remove_proc_entry("version", de); + } spin_lock( & __PINFO( sb ).lock ); __PINFO( sb ).exiting = 1; spin_unlock( & __PINFO( sb ).lock ); @@ -602,23 +577,6 @@ int reiserfs_proc_info_done( struct supe return 0; } -/* Create /proc/fs/reiserfs/DEV/name and attach read procedure @func - to it. Other parts of reiserfs use this function to make their - per-device statistics available via /proc */ - -struct proc_dir_entry *reiserfs_proc_register( struct super_block *sb, - char *name, read_proc_t *func ) -{ - return ( REISERFS_SB(sb)->procdir ) ? create_proc_read_entry - ( name, 0, REISERFS_SB(sb)->procdir, func, - ( void * )(int) sb->s_bdev->bd_dev) : NULL; -} - -void reiserfs_proc_unregister( struct super_block *sb, const char *name ) -{ - remove_proc_entry( name, REISERFS_SB(sb)->procdir ); -} - struct proc_dir_entry *reiserfs_proc_register_global( char *name, read_proc_t *func ) { @@ -662,14 +620,6 @@ int reiserfs_proc_info_global_done( void int reiserfs_proc_info_init( struct super_block *sb ) { return 0; } int reiserfs_proc_info_done( struct super_block *sb ) { return 0; } -struct proc_dir_entry *reiserfs_proc_register( struct super_block *sb, - char *name, - read_proc_t *func ) -{ return NULL; } - -void reiserfs_proc_unregister( struct super_block *sb, const char *name ) -{;} - struct proc_dir_entry *reiserfs_proc_register_global( char *name, read_proc_t *func ) { return NULL; } @@ -684,34 +634,6 @@ int reiserfs_global_version_in_proc( cha int count, int *eof, void *data ) { return 0; } -int reiserfs_version_in_proc( char *buffer, char **start, off_t offset, - int count, int *eof, void *data ) -{ return 0; } - -int reiserfs_super_in_proc( char *buffer, char **start, off_t offset, - int count, int *eof, void *data ) -{ return 0; } - -int reiserfs_per_level_in_proc( char *buffer, char **start, off_t offset, - int count, int *eof, void *data ) -{ return 0; } - -int reiserfs_bitmap_in_proc( char *buffer, char **start, off_t offset, - int count, int *eof, void *data ) -{ return 0; } - -int reiserfs_on_disk_super_in_proc( char *buffer, char **start, off_t offset, - int count, int *eof, void *data ) -{ return 0; } - -int reiserfs_oidmap_in_proc( char *buffer, char **start, off_t offset, - int count, int *eof, void *data ) -{ return 0; } - -int reiserfs_journal_in_proc( char *buffer, char **start, off_t offset, - int count, int *eof, void *data ) -{ return 0; } - /* REISERFS_PROC_INFO */ #endif diff -prauN linux-2.6.0-test5/fs/reiserfs/super.c wli-2.6.0-test5-bk12-25/fs/reiserfs/super.c --- linux-2.6.0-test5/fs/reiserfs/super.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/reiserfs/super.c 2003-09-25 19:16:08.000000000 -0700 @@ -23,7 +23,7 @@ #include #include -static struct file_system_type reiserfs_fs_type; +struct file_system_type reiserfs_fs_type; const char reiserfs_3_5_magic_string[] = REISERFS_SUPER_MAGIC_STRING; const char reiserfs_3_6_magic_string[] = REISER2FS_SUPER_MAGIC_STRING; @@ -56,11 +56,6 @@ static int is_any_reiserfs_magic_string is_reiserfs_jr (rs)); } -int is_reiserfs_super (struct super_block *s) -{ - return s -> s_type == & reiserfs_fs_type ; -} - static int reiserfs_remount (struct super_block * s, int * flags, char * data); static int reiserfs_statfs (struct super_block * s, struct kstatfs * buf); @@ -391,13 +386,6 @@ static void reiserfs_put_super (struct s REISERFS_SB(s)->reserved_blocks); } - reiserfs_proc_unregister( s, "journal" ); - reiserfs_proc_unregister( s, "oidmap" ); - reiserfs_proc_unregister( s, "on-disk-super" ); - reiserfs_proc_unregister( s, "bitmap" ); - reiserfs_proc_unregister( s, "per-level" ); - reiserfs_proc_unregister( s, "super" ); - reiserfs_proc_unregister( s, "version" ); reiserfs_proc_info_done( s ); kfree(s->s_fs_info); @@ -1264,6 +1252,18 @@ static int reiserfs_fill_super (struct s printk("sh-2021: reiserfs_fill_super: can not find reiserfs on %s\n", reiserfs_bdevname (s)); goto error; } + + rs = SB_DISK_SUPER_BLOCK (s); + /* Let's do basic sanity check to verify that underlying device is not + smaller than the filesystem. If the check fails then abort and scream, + because bad stuff will happen otherwise. */ + if ( s->s_bdev && s->s_bdev->bd_inode && i_size_read(s->s_bdev->bd_inode) < sb_block_count(rs)*sb_blocksize(rs) ) { + printk("Filesystem on %s cannot be mounted because it is bigger than the device\n", reiserfs_bdevname(s)); + printk("You may need to run fsck or increase size of your LVM partition\n"); + printk("Or may be you forgot to reboot after fdisk when it told you to\n"); + goto error; + } + sbi->s_mount_state = SB_REISERFS_STATE(s); sbi->s_mount_state = REISERFS_VALID_FS ; @@ -1324,7 +1324,6 @@ static int reiserfs_fill_super (struct s goto error ; } - rs = SB_DISK_SUPER_BLOCK (s); if (is_reiserfs_3_5 (rs) || (is_reiserfs_jr (rs) && SB_VERSION (s) == REISERFS_VERSION_1)) set_bit(REISERFS_3_5, &(sbi->s_properties)); else @@ -1378,13 +1377,7 @@ static int reiserfs_fill_super (struct s handle_attrs( s ); reiserfs_proc_info_init( s ); - reiserfs_proc_register( s, "version", reiserfs_version_in_proc ); - reiserfs_proc_register( s, "super", reiserfs_super_in_proc ); - reiserfs_proc_register( s, "per-level", reiserfs_per_level_in_proc ); - reiserfs_proc_register( s, "bitmap", reiserfs_bitmap_in_proc ); - reiserfs_proc_register( s, "on-disk-super", reiserfs_on_disk_super_in_proc ); - reiserfs_proc_register( s, "oidmap", reiserfs_oidmap_in_proc ); - reiserfs_proc_register( s, "journal", reiserfs_journal_in_proc ); + init_waitqueue_head (&(sbi->s_wait)); sbi->bitmap_lock = SPIN_LOCK_UNLOCKED; @@ -1469,7 +1462,7 @@ exit_reiserfs_fs ( void ) destroy_inodecache (); } -static struct file_system_type reiserfs_fs_type = { +struct file_system_type reiserfs_fs_type = { .owner = THIS_MODULE, .name = "reiserfs", .get_sb = get_super_block, diff -prauN linux-2.6.0-test5/fs/reiserfs/tail_conversion.c wli-2.6.0-test5-bk12-25/fs/reiserfs/tail_conversion.c --- linux-2.6.0-test5/fs/reiserfs/tail_conversion.c 2003-09-08 12:50:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/reiserfs/tail_conversion.c 2003-09-25 19:16:08.000000000 -0700 @@ -104,8 +104,10 @@ int direct2indirect (struct reiserfs_tra /* we only send the unbh pointer if the buffer is not up to date. ** this avoids overwriting good data from writepage() with old data ** from the disk or buffer cache + ** Special case: unbh->b_page will be NULL if we are coming through + ** DIRECT_IO handler here. */ - if (buffer_uptodate(unbh) || PageUptodate(unbh->b_page)) { + if (!unbh->b_page || buffer_uptodate(unbh) || PageUptodate(unbh->b_page)) { up_to_date_bh = NULL ; } else { up_to_date_bh = unbh ; diff -prauN linux-2.6.0-test5/fs/romfs/inode.c wli-2.6.0-test5-bk12-25/fs/romfs/inode.c --- linux-2.6.0-test5/fs/romfs/inode.c 2003-09-08 12:50:13.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/romfs/inode.c 2003-09-28 23:04:07.000000000 -0700 @@ -414,7 +414,7 @@ out: unlock_kernel(); static int romfs_readpage(struct file *file, struct page * page) { - struct inode *inode = page->mapping->host; + struct inode *inode = page_mapping(page)->host; unsigned long offset, avail, readlen; void *buf; int result = -EIO; diff -prauN linux-2.6.0-test5/fs/smbfs/Makefile wli-2.6.0-test5-bk12-25/fs/smbfs/Makefile --- linux-2.6.0-test5/fs/smbfs/Makefile 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/smbfs/Makefile 2003-09-25 19:16:08.000000000 -0700 @@ -32,6 +32,8 @@ proto: @echo >> proto2.h " */" @echo >> proto2.h "" @echo >> proto2.h "struct smb_request;" + @echo >> proto2.h "struct sock;" + @echo >> proto2.h "struct statfs;" @echo >> proto2.h "" cproto -E "gcc -E" -e -v -I $(TOPDIR)/include -DMAKING_PROTO -D__KERNEL__ $(SRC) >> proto2.h mv proto2.h proto.h diff -prauN linux-2.6.0-test5/fs/smbfs/dir.c wli-2.6.0-test5-bk12-25/fs/smbfs/dir.c --- linux-2.6.0-test5/fs/smbfs/dir.c 2003-09-08 12:50:33.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/smbfs/dir.c 2003-09-25 19:16:08.000000000 -0700 @@ -661,7 +661,7 @@ smb_make_node(struct inode *dir, struct attr.ia_uid = current->euid; attr.ia_gid = current->egid; - if (!old_valid_dev(dev)) + if (!new_valid_dev(dev)) return -EINVAL; smb_invalid_dir_cache(dir); diff -prauN linux-2.6.0-test5/fs/smbfs/file.c wli-2.6.0-test5-bk12-25/fs/smbfs/file.c --- linux-2.6.0-test5/fs/smbfs/file.c 2003-09-08 12:50:23.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/smbfs/file.c 2003-09-28 23:04:07.000000000 -0700 @@ -172,7 +172,7 @@ smb_writepage_sync(struct inode *inode, static int smb_writepage(struct page *page, struct writeback_control *wbc) { - struct address_space *mapping = page->mapping; + struct address_space *mapping = page_mapping(page); struct inode *inode; unsigned long end_index; unsigned offset = PAGE_CACHE_SIZE; diff -prauN linux-2.6.0-test5/fs/smbfs/inode.c wli-2.6.0-test5-bk12-25/fs/smbfs/inode.c --- linux-2.6.0-test5/fs/smbfs/inode.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/smbfs/inode.c 2003-09-25 19:16:08.000000000 -0700 @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include @@ -447,6 +448,19 @@ smb_show_options(struct seq_file *s, str } static void +smb_unload_nls(struct smb_sb_info *server) +{ + if (server->remote_nls) { + unload_nls(server->remote_nls); + server->remote_nls = NULL; + } + if (server->local_nls) { + unload_nls(server->local_nls); + server->local_nls = NULL; + } +} + +static void smb_put_super(struct super_block *sb) { struct smb_sb_info *server = SMB_SB(sb); @@ -461,15 +475,7 @@ smb_put_super(struct super_block *sb) kill_proc(server->conn_pid, SIGTERM, 1); smb_kfree(server->ops); - - if (server->remote_nls) { - unload_nls(server->remote_nls); - server->remote_nls = NULL; - } - if (server->local_nls) { - unload_nls(server->local_nls); - server->local_nls = NULL; - } + smb_unload_nls(server); sb->s_fs_info = NULL; smb_unlock_server(server); smb_kfree(server); @@ -545,10 +551,8 @@ int smb_fill_super(struct super_block *s if (ver == SMB_MOUNT_OLDVERSION) { mnt->version = oldmnt->version; - /* FIXME: is this enough to convert uid/gid's ? */ - mnt->mounted_uid = oldmnt->mounted_uid; - mnt->uid = oldmnt->uid; - mnt->gid = oldmnt->gid; + mnt->uid = low2highuid(oldmnt->uid); + mnt->gid = low2highuid(oldmnt->gid); mnt->file_mode = (oldmnt->file_mode & S_IRWXUGO) | S_IFREG; mnt->dir_mode = (oldmnt->dir_mode & S_IRWXUGO) | S_IFDIR; @@ -557,9 +561,8 @@ int smb_fill_super(struct super_block *s } else { if (parse_options(mnt, raw_data)) goto out_bad_option; - - mnt->mounted_uid = current->uid; } + mnt->mounted_uid = current->uid; smb_setcodepage(server, &mnt->codepage); /* @@ -571,6 +574,11 @@ int smb_fill_super(struct super_block *s else if (mnt->flags & SMB_MOUNT_DIRATTR) printk("SMBFS: Using dir ff getattr\n"); + if (smbiod_register_server(server) < 0) { + printk(KERN_ERR "smbfs: failed to start smbiod\n"); + goto out_no_smbiod; + } + /* * Keep the super block locked while we get the root inode. */ @@ -584,12 +592,12 @@ int smb_fill_super(struct super_block *s goto out_no_root; smb_new_dentry(sb->s_root); - smbiod_register_server(server); - return 0; out_no_root: iput(root_inode); +out_no_smbiod: + smb_unload_nls(server); out_bad_option: smb_kfree(mem); out_no_mem: diff -prauN linux-2.6.0-test5/fs/smbfs/proc.c wli-2.6.0-test5-bk12-25/fs/smbfs/proc.c --- linux-2.6.0-test5/fs/smbfs/proc.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/smbfs/proc.c 2003-09-25 19:16:08.000000000 -0700 @@ -212,12 +212,9 @@ static int char2uni(const unsigned char } static struct nls_table unicode_table = { - "unicode", - uni2char, - char2uni, - NULL, /* not used by smbfs */ - NULL, - NULL, /* not a module */ + .charset = "unicode", + .uni2char = uni2char, + .char2uni = char2uni, }; /* ----------------------------------------------------------- */ @@ -2115,6 +2112,9 @@ void smb_decode_unix_basic(struct smb_fa __u64 minor = LVAL(p, 68); fattr->f_rdev = MKDEV(major & 0xffffffff, minor & 0xffffffff); + if (MAJOR(fattr->f_rdev) != (major & 0xffffffff) || + MINOR(fattr->f_rdev) != (minor & 0xffffffff)) + fattr->f_rdev = 0; } fattr->f_mode |= LVAL(p, 84); } diff -prauN linux-2.6.0-test5/fs/smbfs/proto.h wli-2.6.0-test5-bk12-25/fs/smbfs/proto.h --- linux-2.6.0-test5/fs/smbfs/proto.h 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/smbfs/proto.h 2003-09-25 19:16:08.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Autogenerated with cproto on: Sun Sep 29 21:48:59 CEST 2002 + * Autogenerated with cproto on: Sat Sep 13 17:18:51 CEST 2003 */ struct smb_request; @@ -34,6 +34,7 @@ extern int smb_proc_read_link(struct smb extern int smb_proc_symlink(struct smb_sb_info *server, struct dentry *d, const char *oldpath); extern int smb_proc_link(struct smb_sb_info *server, struct dentry *dentry, struct dentry *new_dentry); extern int smb_proc_query_cifsunix(struct smb_sb_info *server); +extern void smb_install_null_ops(struct smb_ops *ops); /* dir.c */ extern struct file_operations smb_dir_operations; extern struct inode_operations smb_dir_inode_operations; @@ -71,7 +72,7 @@ extern struct inode_operations smb_file_ extern int smb_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg); /* smbiod.c */ extern void smbiod_wake_up(void); -extern void smbiod_register_server(struct smb_sb_info *server); +extern int smbiod_register_server(struct smb_sb_info *server); extern void smbiod_unregister_server(struct smb_sb_info *server); extern void smbiod_flush(struct smb_sb_info *server); extern int smbiod_retry(struct smb_sb_info *server); diff -prauN linux-2.6.0-test5/fs/smbfs/smbiod.c wli-2.6.0-test5-bk12-25/fs/smbfs/smbiod.c --- linux-2.6.0-test5/fs/smbfs/smbiod.c 2003-09-08 12:50:09.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/smbfs/smbiod.c 2003-09-25 19:16:08.000000000 -0700 @@ -49,7 +49,7 @@ static spinlock_t servers_lock = SPIN_LO static long smbiod_flags; static int smbiod(void *); -static void smbiod_start(void); +static int smbiod_start(void); /* * called when there's work for us to do @@ -65,30 +65,36 @@ void smbiod_wake_up() /* * start smbiod if none is running */ -static void smbiod_start() +static int smbiod_start() { pid_t pid; if (smbiod_state != SMBIOD_DEAD) - return; + return 0; smbiod_state = SMBIOD_STARTING; + __module_get(THIS_MODULE); spin_unlock(&servers_lock); pid = kernel_thread(smbiod, NULL, 0); + if (pid < 0) + module_put(THIS_MODULE); spin_lock(&servers_lock); - smbiod_state = SMBIOD_RUNNING; + smbiod_state = pid < 0 ? SMBIOD_DEAD : SMBIOD_RUNNING; smbiod_pid = pid; + return pid; } /* * register a server & start smbiod if necessary */ -void smbiod_register_server(struct smb_sb_info *server) +int smbiod_register_server(struct smb_sb_info *server) { + int ret; spin_lock(&servers_lock); list_add(&server->entry, &smb_servers); VERBOSE("%p\n", server); - smbiod_start(); + ret = smbiod_start(); spin_unlock(&servers_lock); + return ret; } /* @@ -282,7 +288,6 @@ out: */ static int smbiod(void *unused) { - MOD_INC_USE_COUNT; daemonize("smbiod"); allow_signal(SIGKILL); @@ -330,6 +335,5 @@ static int smbiod(void *unused) } VERBOSE("SMB Kernel thread exiting (%d) ...\n", current->pid); - MOD_DEC_USE_COUNT; - return 0; + module_put_and_exit(0); } diff -prauN linux-2.6.0-test5/fs/stat.c wli-2.6.0-test5-bk12-25/fs/stat.c --- linux-2.6.0-test5/fs/stat.c 2003-09-08 12:49:54.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/stat.c 2003-09-25 19:16:08.000000000 -0700 @@ -117,13 +117,13 @@ static int cp_old_stat(struct kstat *sta } memset(&tmp, 0, sizeof(struct __old_kernel_stat)); - tmp.st_dev = stat->dev; + tmp.st_dev = old_encode_dev(stat->dev); tmp.st_ino = stat->ino; tmp.st_mode = stat->mode; tmp.st_nlink = stat->nlink; SET_OLDSTAT_UID(tmp, stat->uid); SET_OLDSTAT_GID(tmp, stat->gid); - tmp.st_rdev = stat->rdev; + tmp.st_rdev = old_encode_dev(stat->rdev); #if BITS_PER_LONG == 32 if (stat->size > MAX_NON_LFS) return -EOVERFLOW; @@ -172,14 +172,30 @@ static int cp_new_stat(struct kstat *sta { struct stat tmp; +#if BITS_PER_LONG == 32 + if (!old_valid_dev(stat->dev) || !old_valid_dev(stat->rdev)) + return -EOVERFLOW; +#else + if (!new_valid_dev(stat->dev) || !new_valid_dev(stat->rdev)) + return -EOVERFLOW; +#endif + memset(&tmp, 0, sizeof(tmp)); - tmp.st_dev = stat->dev; +#if BITS_PER_LONG == 32 + tmp.st_dev = old_encode_dev(stat->dev); +#else + tmp.st_dev = new_encode_dev(stat->dev); +#endif tmp.st_ino = stat->ino; tmp.st_mode = stat->mode; tmp.st_nlink = stat->nlink; SET_STAT_UID(tmp, stat->uid); SET_STAT_GID(tmp, stat->gid); - tmp.st_rdev = stat->rdev; +#if BITS_PER_LONG == 32 + tmp.st_rdev = old_encode_dev(stat->rdev); +#else + tmp.st_rdev = new_encode_dev(stat->rdev); +#endif #if BITS_PER_LONG == 32 if (stat->size > MAX_NON_LFS) return -EOVERFLOW; @@ -263,7 +279,16 @@ static long cp_new_stat64(struct kstat * struct stat64 tmp; memset(&tmp, 0, sizeof(struct stat64)); - tmp.st_dev = stat->dev; +#ifdef CONFIG_MIPS + /* mips has weird padding, so we don't get 64 bits there */ + if (!new_valid_dev(stat->dev) || !new_valid_dev(stat->rdev)) + return -EOVERFLOW; + tmp.st_dev = new_encode_dev(stat->dev); + tmp.st_rdev = new_encode_dev(stat->rdev); +#else + tmp.st_dev = huge_encode_dev(stat->dev); + tmp.st_rdev = huge_encode_dev(stat->rdev); +#endif tmp.st_ino = stat->ino; #ifdef STAT64_HAS_BROKEN_ST_INO tmp.__st_ino = stat->ino; @@ -272,7 +297,6 @@ static long cp_new_stat64(struct kstat * tmp.st_nlink = stat->nlink; tmp.st_uid = stat->uid; tmp.st_gid = stat->gid; - tmp.st_rdev = stat->rdev; tmp.st_atime = stat->atime.tv_sec; tmp.st_atime_nsec = stat->atime.tv_nsec; tmp.st_mtime = stat->mtime.tv_sec; diff -prauN linux-2.6.0-test5/fs/super.c wli-2.6.0-test5-bk12-25/fs/super.c --- linux-2.6.0-test5/fs/super.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/super.c 2003-09-25 19:16:09.000000000 -0700 @@ -405,14 +405,14 @@ rescan: return NULL; } -asmlinkage long sys_ustat(dev_t dev, struct ustat __user * ubuf) +asmlinkage long sys_ustat(unsigned dev, struct ustat __user * ubuf) { struct super_block *s; struct ustat tmp; struct kstatfs sbuf; int err = -EINVAL; - s = user_get_super(dev); + s = user_get_super(new_decode_dev(dev)); if (s == NULL) goto out; err = vfs_statfs(s, &sbuf); diff -prauN linux-2.6.0-test5/fs/sysv/dir.c wli-2.6.0-test5-bk12-25/fs/sysv/dir.c --- linux-2.6.0-test5/fs/sysv/dir.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/sysv/dir.c 2003-09-28 23:04:07.000000000 -0700 @@ -39,10 +39,10 @@ static inline unsigned long dir_pages(st static int dir_commit_chunk(struct page *page, unsigned from, unsigned to) { - struct inode *dir = (struct inode *)page->mapping->host; + struct inode *dir = (struct inode *)page_mapping(page)->host; int err = 0; - page->mapping->a_ops->commit_write(NULL, page, from, to); + page_mapping(page)->a_ops->commit_write(NULL, page, from, to); if (IS_DIRSYNC(dir)) err = write_one_page(page, 1); else @@ -225,7 +225,7 @@ got_it: from = (char*)de - (char*)page_address(page); to = from + SYSV_DIRSIZE; lock_page(page); - err = page->mapping->a_ops->prepare_write(NULL, page, from, to); + err = page_mapping(page)->a_ops->prepare_write(NULL, page, from, to); if (err) goto out_unlock; memcpy (de->name, name, namelen); @@ -245,7 +245,7 @@ out_unlock: int sysv_delete_entry(struct sysv_dir_entry *de, struct page *page) { - struct address_space *mapping = page->mapping; + struct address_space *mapping = page_mapping(page); struct inode *inode = (struct inode*)mapping->host; char *kaddr = (char*)page_address(page); unsigned from = (char*)de - kaddr; @@ -347,13 +347,13 @@ not_empty: void sysv_set_link(struct sysv_dir_entry *de, struct page *page, struct inode *inode) { - struct inode *dir = (struct inode*)page->mapping->host; + struct inode *dir = (struct inode*)page_mapping(page)->host; unsigned from = (char *)de-(char*)page_address(page); unsigned to = from + SYSV_DIRSIZE; int err; lock_page(page); - err = page->mapping->a_ops->prepare_write(NULL, page, from, to); + err = page_mapping(page)->a_ops->prepare_write(NULL, page, from, to); if (err) BUG(); de->inode = cpu_to_fs16(SYSV_SB(inode->i_sb), inode->i_ino); diff -prauN linux-2.6.0-test5/fs/udf/file.c wli-2.6.0-test5-bk12-25/fs/udf/file.c --- linux-2.6.0-test5/fs/udf/file.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/udf/file.c 2003-09-28 23:04:07.000000000 -0700 @@ -46,7 +46,7 @@ static int udf_adinicb_readpage(struct file *file, struct page * page) { - struct inode *inode = page->mapping->host; + struct inode *inode = page_mapping(page)->host; char *kaddr; if (!PageLocked(page)) @@ -64,7 +64,7 @@ static int udf_adinicb_readpage(struct f static int udf_adinicb_writepage(struct page *page, struct writeback_control *wbc) { - struct inode *inode = page->mapping->host; + struct inode *inode = page_mapping(page)->host; char *kaddr; if (!PageLocked(page)) @@ -87,7 +87,7 @@ static int udf_adinicb_prepare_write(str static int udf_adinicb_commit_write(struct file *file, struct page *page, unsigned offset, unsigned to) { - struct inode *inode = page->mapping->host; + struct inode *inode = page_mapping(page)->host; char *kaddr = page_address(page); memcpy(UDF_I_DATA(inode) + UDF_I_LENEATTR(inode) + offset, diff -prauN linux-2.6.0-test5/fs/udf/symlink.c wli-2.6.0-test5-bk12-25/fs/udf/symlink.c --- linux-2.6.0-test5/fs/udf/symlink.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/udf/symlink.c 2003-09-28 23:04:07.000000000 -0700 @@ -80,7 +80,7 @@ static void udf_pc_to_char(struct super_ static int udf_symlink_filler(struct file *file, struct page *page) { - struct inode *inode = page->mapping->host; + struct inode *inode = page_mapping(page)->host; struct buffer_head *bh = NULL; char *symlink; int err = -EIO; diff -prauN linux-2.6.0-test5/fs/ufs/namei.c wli-2.6.0-test5-bk12-25/fs/ufs/namei.c --- linux-2.6.0-test5/fs/ufs/namei.c 2003-09-08 12:50:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/ufs/namei.c 2003-09-25 19:16:09.000000000 -0700 @@ -112,11 +112,13 @@ static int ufs_create (struct inode * di static int ufs_mknod (struct inode * dir, struct dentry *dentry, int mode, dev_t rdev) { - struct inode * inode; + struct inode *inode; + int err; + if (!old_valid_dev(rdev)) return -EINVAL; inode = ufs_new_inode(dir, mode); - int err = PTR_ERR(inode); + err = PTR_ERR(inode); if (!IS_ERR(inode)) { init_special_inode(inode, mode, rdev); /* NOTE: that'll go when we get wide dev_t */ diff -prauN linux-2.6.0-test5/fs/xattr.c wli-2.6.0-test5-bk12-25/fs/xattr.c --- linux-2.6.0-test5/fs/xattr.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xattr.c 2003-09-25 19:16:09.000000000 -0700 @@ -53,7 +53,8 @@ xattr_free(void *ptr, size_t size) * Extended attribute SET operations */ static long -setxattr(struct dentry *d, char *name, void *value, size_t size, int flags) +setxattr(struct dentry *d, char __user *name, void __user *value, + size_t size, int flags) { int error; void *kvalue; @@ -94,7 +95,8 @@ out: } asmlinkage long -sys_setxattr(char *path, char *name, void *value, size_t size, int flags) +sys_setxattr(char __user *path, char __user *name, void __user *value, + size_t size, int flags) { struct nameidata nd; int error; @@ -108,7 +110,8 @@ sys_setxattr(char *path, char *name, voi } asmlinkage long -sys_lsetxattr(char *path, char *name, void *value, size_t size, int flags) +sys_lsetxattr(char __user *path, char __user *name, void __user *value, + size_t size, int flags) { struct nameidata nd; int error; @@ -122,7 +125,8 @@ sys_lsetxattr(char *path, char *name, vo } asmlinkage long -sys_fsetxattr(int fd, char *name, void *value, size_t size, int flags) +sys_fsetxattr(int fd, char __user *name, void __user *value, + size_t size, int flags) { struct file *f; int error = -EBADF; @@ -139,7 +143,7 @@ sys_fsetxattr(int fd, char *name, void * * Extended attribute GET operations */ static ssize_t -getxattr(struct dentry *d, char *name, void *value, size_t size) +getxattr(struct dentry *d, char __user *name, void __user *value, size_t size) { ssize_t error; void *kvalue; @@ -172,7 +176,8 @@ out: } asmlinkage ssize_t -sys_getxattr(char *path, char *name, void *value, size_t size) +sys_getxattr(char __user *path, char __user *name, void __user *value, + size_t size) { struct nameidata nd; ssize_t error; @@ -186,7 +191,8 @@ sys_getxattr(char *path, char *name, voi } asmlinkage ssize_t -sys_lgetxattr(char *path, char *name, void *value, size_t size) +sys_lgetxattr(char __user *path, char __user *name, void __user *value, + size_t size) { struct nameidata nd; ssize_t error; @@ -200,7 +206,7 @@ sys_lgetxattr(char *path, char *name, vo } asmlinkage ssize_t -sys_fgetxattr(int fd, char *name, void *value, size_t size) +sys_fgetxattr(int fd, char __user *name, void __user *value, size_t size) { struct file *f; ssize_t error = -EBADF; @@ -217,7 +223,7 @@ sys_fgetxattr(int fd, char *name, void * * Extended attribute LIST operations */ static ssize_t -listxattr(struct dentry *d, char *list, size_t size) +listxattr(struct dentry *d, char __user *list, size_t size) { ssize_t error; char *klist; @@ -243,7 +249,7 @@ out: } asmlinkage ssize_t -sys_listxattr(char *path, char *list, size_t size) +sys_listxattr(char __user *path, char __user *list, size_t size) { struct nameidata nd; ssize_t error; @@ -257,7 +263,7 @@ sys_listxattr(char *path, char *list, si } asmlinkage ssize_t -sys_llistxattr(char *path, char *list, size_t size) +sys_llistxattr(char __user *path, char __user *list, size_t size) { struct nameidata nd; ssize_t error; @@ -271,7 +277,7 @@ sys_llistxattr(char *path, char *list, s } asmlinkage ssize_t -sys_flistxattr(int fd, char *list, size_t size) +sys_flistxattr(int fd, char __user *list, size_t size) { struct file *f; ssize_t error = -EBADF; @@ -288,7 +294,7 @@ sys_flistxattr(int fd, char *list, size_ * Extended attribute REMOVE operations */ static long -removexattr(struct dentry *d, char *name) +removexattr(struct dentry *d, char __user *name) { int error; char kname[XATTR_NAME_MAX + 1]; @@ -313,7 +319,7 @@ out: } asmlinkage long -sys_removexattr(char *path, char *name) +sys_removexattr(char __user *path, char __user *name) { struct nameidata nd; int error; @@ -327,7 +333,7 @@ sys_removexattr(char *path, char *name) } asmlinkage long -sys_lremovexattr(char *path, char *name) +sys_lremovexattr(char __user *path, char __user *name) { struct nameidata nd; int error; @@ -341,7 +347,7 @@ sys_lremovexattr(char *path, char *name) } asmlinkage long -sys_fremovexattr(int fd, char *name) +sys_fremovexattr(int fd, char __user *name) { struct file *f; int error = -EBADF; diff -prauN linux-2.6.0-test5/fs/xfs/Makefile wli-2.6.0-test5-bk12-25/fs/xfs/Makefile --- linux-2.6.0-test5/fs/xfs/Makefile 2003-09-08 12:50:17.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/Makefile 2003-09-25 19:16:09.000000000 -0700 @@ -65,7 +65,6 @@ xfs-$(CONFIG_SYSCTL) += linux/xfs_sysct xfs-y += xfs_alloc.o \ xfs_alloc_btree.o \ xfs_attr.o \ - xfs_attr_fetch.o \ xfs_attr_leaf.o \ xfs_bit.o \ xfs_bmap.o \ diff -prauN linux-2.6.0-test5/fs/xfs/linux/xfs_aops.c wli-2.6.0-test5-bk12-25/fs/xfs/linux/xfs_aops.c --- linux-2.6.0-test5/fs/xfs/linux/xfs_aops.c 2003-09-08 12:50:27.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/linux/xfs_aops.c 2003-09-28 23:04:07.000000000 -0700 @@ -225,7 +225,8 @@ probe_unwritten_page( page_buf_bmap_t *mp, page_buf_t *pb, unsigned long max_offset, - unsigned long *fsbs) + unsigned long *fsbs, + unsigned int bbits) { struct page *page; @@ -235,7 +236,7 @@ probe_unwritten_page( if (PageWriteback(page)) goto out; - if (page->mapping && page_has_buffers(page)) { + if (page_mapping(page) && page_has_buffers(page)) { struct buffer_head *bh, *head; unsigned long p_offset = 0; @@ -248,6 +249,7 @@ probe_unwritten_page( break; if (p_offset >= max_offset) break; + map_buffer_at_offset(page, bh, p_offset, bbits, mp); set_buffer_unwritten_io(bh); bh->b_private = pb; p_offset += bh->b_size; @@ -282,7 +284,7 @@ probe_unmapped_page( if (PageWriteback(page)) goto out; - if (page->mapping && PageDirty(page)) { + if (page_mapping(page) && PageDirty(page)) { if (page_has_buffers(page)) { struct buffer_head *bh, *head; @@ -361,7 +363,7 @@ probe_delalloc_page( if (PageWriteback(page)) goto out; - if (page->mapping && page_has_buffers(page)) { + if (page_mapping(page) && page_has_buffers(page)) { struct buffer_head *bh, *head; int acceptable = 0; @@ -455,13 +457,14 @@ map_unwritten( if (bh == head) { struct address_space *mapping = inode->i_mapping; unsigned long tindex, tloff, tlast, bs; + unsigned int bbits = inode->i_blkbits; struct page *page; tlast = i_size_read(inode) >> PAGE_CACHE_SHIFT; tloff = min(tlast, start_page->index + pb->pb_page_count - 1); for (tindex = start_page->index + 1; tindex < tloff; tindex++) { page = probe_unwritten_page(mapping, tindex, mp, pb, - PAGE_CACHE_SIZE, &bs); + PAGE_CACHE_SIZE, &bs, bbits); if (!page) break; nblocks += bs; @@ -472,7 +475,7 @@ map_unwritten( if (tindex == tlast && (tloff = (i_size_read(inode) & (PAGE_CACHE_SIZE - 1)))) { page = probe_unwritten_page(mapping, tindex, mp, pb, - tloff, &bs); + tloff, &bs, bbits); if (page) { nblocks += bs; atomic_add(bs, &pb->pb_io_remaining); @@ -560,7 +563,8 @@ convert_page( offset = i << bbits; if (!(PageUptodate(page) || buffer_uptodate(bh))) continue; - if (buffer_mapped(bh) && !buffer_delay(bh) && all_bh) { + if (buffer_mapped(bh) && all_bh && + !buffer_unwritten(bh) && !buffer_delay(bh)) { if (startio && (offset < end)) { lock_buffer(bh); bh_arr[index++] = bh; @@ -581,7 +585,7 @@ convert_page( ASSERT(tmp->pbm_flags & PBMF_UNWRITTEN); map_unwritten(inode, page, head, bh, offset, bbits, tmp, all_bh); - } else { + } else if (! (buffer_unwritten(bh) && buffer_locked(bh))) { map_buffer_at_offset(page, bh, offset, bbits, tmp); if (buffer_unwritten(bh)) { set_buffer_unwritten_io(bh); @@ -1073,7 +1077,7 @@ linvfs_writepage( int error; int need_trans; int delalloc, unmapped, unwritten; - struct inode *inode = page->mapping->host; + struct inode *inode = page_mapping(page)->host; /* * We need a transaction if: @@ -1153,7 +1157,7 @@ linvfs_release_page( struct page *page, int gfp_mask) { - struct inode *inode = page->mapping->host; + struct inode *inode = page_mapping(page)->host; int delalloc, unmapped, unwritten; count_page_state(page, &delalloc, &unmapped, &unwritten); diff -prauN linux-2.6.0-test5/fs/xfs/linux/xfs_globals.c wli-2.6.0-test5-bk12-25/fs/xfs/linux/xfs_globals.c --- linux-2.6.0-test5/fs/xfs/linux/xfs_globals.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/linux/xfs_globals.c 2003-09-25 19:16:09.000000000 -0700 @@ -59,6 +59,9 @@ xfs_param_t xfs_params = { .error_level = { 0, 3, 11 }, .sync_interval = { HZ, 30*HZ, 60*HZ }, .stats_clear = { 0, 0, 1 }, + .inherit_sync = { 0, 1, 1 }, + .inherit_nodump = { 0, 1, 1 }, + .inherit_noatim = { 0, 1, 1 }, }; /* diff -prauN linux-2.6.0-test5/fs/xfs/linux/xfs_ioctl.c wli-2.6.0-test5-bk12-25/fs/xfs/linux/xfs_ioctl.c --- linux-2.6.0-test5/fs/xfs/linux/xfs_ioctl.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/linux/xfs_ioctl.c 2003-09-25 19:16:09.000000000 -0700 @@ -72,6 +72,13 @@ #include #include +/* + * ioctl commands that are used by Linux filesystems + */ +#define XFS_IOC_GETXFLAGS _IOR('f', 1, long) +#define XFS_IOC_SETXFLAGS _IOW('f', 2, long) +#define XFS_IOC_GETVERSION _IOR('v', 1, long) + /* * xfs_find_handle maps from userspace xfs_fsop_handlereq structure to @@ -328,6 +335,17 @@ xfs_open_by_handle( if (permflag & O_TRUNC) permflag |= 2; + if ((!(permflag & O_APPEND) || (permflag & O_TRUNC)) && + (permflag & FMODE_WRITE) && IS_APPEND(inode)) { + iput(inode); + return -XFS_ERROR(EPERM); + } + + if ((permflag & FMODE_WRITE) && IS_IMMUTABLE(inode)) { + iput(inode); + return -XFS_ERROR(EACCES); + } + /* Can't write directories. */ if ( S_ISDIR(inode->i_mode) && (permflag & FMODE_WRITE)) { iput(inode); @@ -429,6 +447,11 @@ xfs_fssetdm_by_handle( if (error) return -error; + if (IS_IMMUTABLE(inode) || IS_APPEND(inode)) { + VN_RELE(vp); + return -XFS_ERROR(EPERM); + } + if (copy_from_user(&fsd, dmhreq.data, sizeof(fsd))) { VN_RELE(vp); return -XFS_ERROR(EFAULT); @@ -514,11 +537,19 @@ xfs_attrmulti_by_handle( NULL, ops[i].am_error); break; case ATTR_OP_SET: + if (IS_IMMUTABLE(inode) || IS_APPEND(inode)) { + ops[i].am_error = EPERM; + break; + } VOP_ATTR_SET(vp,ops[i].am_attrname, ops[i].am_attrvalue, ops[i].am_length, ops[i].am_flags, NULL, ops[i].am_error); break; case ATTR_OP_REMOVE: + if (IS_IMMUTABLE(inode) || IS_APPEND(inode)) { + ops[i].am_error = EPERM; + break; + } VOP_ATTR_REMOVE(vp, ops[i].am_attrname, ops[i].am_flags, NULL, ops[i].am_error); break; @@ -566,6 +597,7 @@ xfs_ioc_fsgeometry( STATIC int xfs_ioc_xattr( vnode_t *vp, + xfs_inode_t *ip, struct file *filp, unsigned int cmd, unsigned long arg); @@ -648,10 +680,13 @@ xfs_ioctl( case XFS_IOC_FSGEOMETRY: return xfs_ioc_fsgeometry(mp, arg); + case XFS_IOC_GETVERSION: + case XFS_IOC_GETXFLAGS: + case XFS_IOC_SETXFLAGS: case XFS_IOC_FSGETXATTR: case XFS_IOC_FSSETXATTR: case XFS_IOC_FSGETXATTRA: - return xfs_ioc_xattr(vp, filp, cmd, arg); + return xfs_ioc_xattr(vp, ip, filp, cmd, arg); case XFS_IOC_FSSETDM: { struct fsdmidata dmi; @@ -837,6 +872,9 @@ xfs_ioc_space( int attr_flags = 0; int error; + if (vp->v_inode.i_flags & (S_IMMUTABLE|S_APPEND)) + return -XFS_ERROR(EPERM); + if (filp->f_flags & O_RDONLY) return -XFS_ERROR(EBADF); @@ -957,9 +995,50 @@ xfs_ioc_fsgeometry( return 0; } +/* + * Linux extended inode flags interface. + */ +#define LINUX_XFLAG_SYNC 0x00000008 /* Synchronous updates */ +#define LINUX_XFLAG_IMMUTABLE 0x00000010 /* Immutable file */ +#define LINUX_XFLAG_APPEND 0x00000020 /* writes to file may only append */ +#define LINUX_XFLAG_NODUMP 0x00000040 /* do not dump file */ +#define LINUX_XFLAG_NOATIME 0x00000080 /* do not update atime */ + +STATIC unsigned int +xfs_merge_ioc_xflags( + unsigned int flags, + unsigned int start) +{ + unsigned int xflags = start; + + if (flags & LINUX_XFLAG_IMMUTABLE) + xflags |= XFS_XFLAG_IMMUTABLE; + else + xflags &= ~XFS_XFLAG_IMMUTABLE; + if (flags & LINUX_XFLAG_APPEND) + xflags |= XFS_XFLAG_APPEND; + else + xflags &= ~XFS_XFLAG_APPEND; + if (flags & LINUX_XFLAG_SYNC) + xflags |= XFS_XFLAG_SYNC; + else + xflags &= ~XFS_XFLAG_SYNC; + if (flags & LINUX_XFLAG_NOATIME) + xflags |= XFS_XFLAG_NOATIME; + else + xflags &= ~XFS_XFLAG_NOATIME; + if (flags & LINUX_XFLAG_NODUMP) + xflags |= XFS_XFLAG_NODUMP; + else + xflags &= ~XFS_XFLAG_NODUMP; + + return xflags; +} + STATIC int xfs_ioc_xattr( vnode_t *vp, + xfs_inode_t *ip, struct file *filp, unsigned int cmd, unsigned long arg) @@ -967,6 +1046,8 @@ xfs_ioc_xattr( struct fsxattr fa; vattr_t va; int error; + int attr_flags; + unsigned int flags; switch (cmd) { case XFS_IOC_FSGETXATTR: { @@ -985,24 +1066,24 @@ xfs_ioc_xattr( } case XFS_IOC_FSSETXATTR: { - int attr_flags = 0; - if (copy_from_user(&fa, (struct fsxattr *)arg, sizeof(fa))) return -XFS_ERROR(EFAULT); + attr_flags = 0; + if (filp->f_flags & (O_NDELAY|O_NONBLOCK)) + attr_flags |= ATTR_NONBLOCK; + va.va_mask = XFS_AT_XFLAGS | XFS_AT_EXTSIZE; va.va_xflags = fa.fsx_xflags; va.va_extsize = fa.fsx_extsize; - if (filp->f_flags & (O_NDELAY|O_NONBLOCK)) - attr_flags |= ATTR_NONBLOCK; - VOP_SETATTR(vp, &va, attr_flags, NULL, error); + if (!error) + vn_revalidate(vp); /* update Linux inode flags */ return -error; } case XFS_IOC_FSGETXATTRA: { - va.va_mask = XFS_AT_XFLAGS|XFS_AT_EXTSIZE|XFS_AT_ANEXTENTS; VOP_GETATTR(vp, &va, 0, NULL, error); if (error) @@ -1017,9 +1098,54 @@ xfs_ioc_xattr( return 0; } + case XFS_IOC_GETXFLAGS: { + flags = 0; + if (ip->i_d.di_flags & XFS_XFLAG_IMMUTABLE) + flags |= LINUX_XFLAG_IMMUTABLE; + if (ip->i_d.di_flags & XFS_XFLAG_APPEND) + flags |= LINUX_XFLAG_APPEND; + if (ip->i_d.di_flags & XFS_XFLAG_SYNC) + flags |= LINUX_XFLAG_SYNC; + if (ip->i_d.di_flags & XFS_XFLAG_NOATIME) + flags |= LINUX_XFLAG_NOATIME; + if (ip->i_d.di_flags & XFS_XFLAG_NODUMP) + flags |= LINUX_XFLAG_NODUMP; + if (copy_to_user((unsigned int *)arg, &flags, sizeof(flags))) + return -XFS_ERROR(EFAULT); + return 0; + } + + case XFS_IOC_SETXFLAGS: { + if (copy_from_user(&flags, (unsigned int *)arg, sizeof(flags))) + return -XFS_ERROR(EFAULT); + + if (flags & ~(LINUX_XFLAG_IMMUTABLE | LINUX_XFLAG_APPEND | \ + LINUX_XFLAG_NOATIME | LINUX_XFLAG_NODUMP | \ + LINUX_XFLAG_SYNC)) + return -XFS_ERROR(EOPNOTSUPP); + + attr_flags = 0; + if (filp->f_flags & (O_NDELAY|O_NONBLOCK)) + attr_flags |= ATTR_NONBLOCK; + + va.va_mask = XFS_AT_XFLAGS; + va.va_xflags = xfs_merge_ioc_xflags(flags, ip->i_d.di_flags); + + VOP_SETATTR(vp, &va, attr_flags, NULL, error); + if (!error) + vn_revalidate(vp); /* update Linux inode flags */ + return -error; + } + + case XFS_IOC_GETVERSION: { + flags = LINVFS_GET_IP(vp)->i_generation; + if (copy_to_user((unsigned int *)arg, &flags, sizeof(flags))) + return -XFS_ERROR(EFAULT); + return 0; + } + default: return -ENOTTY; - } } diff -prauN linux-2.6.0-test5/fs/xfs/linux/xfs_iomap.c wli-2.6.0-test5-bk12-25/fs/xfs/linux/xfs_iomap.c --- linux-2.6.0-test5/fs/xfs/linux/xfs_iomap.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/linux/xfs_iomap.c 2003-09-25 19:16:09.000000000 -0700 @@ -156,7 +156,7 @@ xfs_iomap( if (flags & BMAP_IGNSTATE) bmap_flags |= XFS_BMAPI_IGSTATE; break; - case PBF_WRITE: + case BMAP_WRITE: lockmode = XFS_ILOCK_EXCL|XFS_EXTSIZE_WR; bmap_flags = 0; XFS_ILOCK(mp, io, lockmode); @@ -598,7 +598,7 @@ xfs_iomap_write_allocate( count_fsb = map->br_blockcount; map_start_fsb = offset_fsb; - XFS_STATS_ADD(xfsstats.xs_xstrat_bytes, XFS_FSB_TO_B(mp, count_fsb)); + XFS_STATS_ADD(xs_xstrat_bytes, XFS_FSB_TO_B(mp, count_fsb)); while (count_fsb != 0) { /* @@ -689,7 +689,7 @@ xfs_iomap_write_allocate( imap[i].br_blockcount))) { *map = imap[i]; *retmap = 1; - XFS_STATS_INC(xfsstats.xs_xstrat_quick); + XFS_STATS_INC(xs_xstrat_quick); return 0; } count_fsb -= imap[i].br_blockcount; diff -prauN linux-2.6.0-test5/fs/xfs/linux/xfs_iops.c wli-2.6.0-test5-bk12-25/fs/xfs/linux/xfs_iops.c --- linux-2.6.0-test5/fs/xfs/linux/xfs_iops.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/linux/xfs_iops.c 2003-09-25 19:16:09.000000000 -0700 @@ -113,7 +113,11 @@ linvfs_mknod( xattr_exists_t test_default_acl = _ACL_DEFAULT_EXISTS; int error; - if (!old_valid_dev(rdev)) + /* + * Irix uses Missed'em'V split, but doesn't want to see + * the upper 5 bits of (14bit) major. + */ + if (!sysv_valid_dev(rdev) || MAJOR(rdev) & ~0x1ff) return -EINVAL; if (test_default_acl && test_default_acl(dvp)) { @@ -135,7 +139,7 @@ linvfs_mknod( switch (mode & S_IFMT) { case S_IFCHR: case S_IFBLK: case S_IFIFO: case S_IFSOCK: - va.va_rdev = XFS_MKDEV(MAJOR(rdev), MINOR(rdev)); + va.va_rdev = sysv_encode_dev(rdev); va.va_mask |= XFS_AT_RDEV; /*FALLTHROUGH*/ case S_IFREG: @@ -638,6 +642,9 @@ linvfs_setxattr( return error; } + if (IS_IMMUTABLE(inode) || IS_APPEND(inode)) + return -EPERM; + /* Convert Linux syscall to XFS internal ATTR flags */ if (flags & XATTR_CREATE) xflags |= ATTR_CREATE; @@ -787,6 +794,9 @@ linvfs_removexattr( return error; } + if (IS_IMMUTABLE(inode) || IS_APPEND(inode)) + return -EPERM; + if (strncmp(name, xfs_namespaces[ROOT_NAMES].name, xfs_namespaces[ROOT_NAMES].namelen) == 0) { if (!capable(CAP_SYS_ADMIN)) diff -prauN linux-2.6.0-test5/fs/xfs/linux/xfs_linux.h wli-2.6.0-test5-bk12-25/fs/xfs/linux/xfs_linux.h --- linux-2.6.0-test5/fs/xfs/linux/xfs_linux.h 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/linux/xfs_linux.h 2003-09-25 19:16:09.000000000 -0700 @@ -96,6 +96,9 @@ static inline void set_buffer_unwritten_ #define xfs_error_level xfs_params.error_level.val #define xfs_syncd_interval xfs_params.sync_interval.val #define xfs_stats_clear xfs_params.stats_clear.val +#define xfs_inherit_sync xfs_params.inherit_sync.val +#define xfs_inherit_nodump xfs_params.inherit_nodump.val +#define xfs_inherit_noatime xfs_params.inherit_noatim.val #define NBPP PAGE_SIZE #define DPPSHFT (PAGE_SHIFT - 9) diff -prauN linux-2.6.0-test5/fs/xfs/linux/xfs_lrw.c wli-2.6.0-test5-bk12-25/fs/xfs/linux/xfs_lrw.c --- linux-2.6.0-test5/fs/xfs/linux/xfs_lrw.c 2003-09-08 12:49:50.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/linux/xfs_lrw.c 2003-09-25 19:16:09.000000000 -0700 @@ -167,7 +167,7 @@ xfs_read( mp = ip->i_mount; vn_trace_entry(vp, "xfs_read", (inst_t *)__return_address); - XFS_STATS_INC(xfsstats.xs_read_calls); + XFS_STATS_INC(xs_read_calls); /* START copy & waste from filemap.c */ for (seg = 0; seg < segs; seg++) { @@ -231,7 +231,7 @@ xfs_read( xfs_iunlock(ip, XFS_IOLOCK_SHARED); if (ret > 0) - XFS_STATS_ADD(xfsstats.xs_read_bytes, ret); + XFS_STATS_ADD(xs_read_bytes, ret); if (!invisible) xfs_ichgtime(ip, XFS_ICHGTIME_ACC); @@ -261,7 +261,7 @@ xfs_sendfile( mp = ip->i_mount; vn_trace_entry(vp, "xfs_sendfile", (inst_t *)__return_address); - XFS_STATS_INC(xfsstats.xs_read_calls); + XFS_STATS_INC(xs_read_calls); n = XFS_MAXIOFFSET(mp) - *offset; if ((n <= 0) || (count == 0)) @@ -288,7 +288,7 @@ xfs_sendfile( ret = generic_file_sendfile(filp, offset, count, actor, target); xfs_iunlock(ip, XFS_IOLOCK_SHARED); - XFS_STATS_ADD(xfsstats.xs_read_bytes, ret); + XFS_STATS_ADD(xs_read_bytes, ret); if (!invisible) xfs_ichgtime(ip, XFS_ICHGTIME_ACC); return ret; @@ -537,7 +537,7 @@ xfs_write( int eventsent = 0; vrwlock_t locktype; - XFS_STATS_INC(xfsstats.xs_write_calls); + XFS_STATS_INC(xs_write_calls); vp = BHV_TO_VNODE(bdp); vn_trace_entry(vp, "xfs_write", (inst_t *)__return_address); @@ -693,8 +693,8 @@ retry: DM_EVENT_ENABLED(vp->v_vfsp, xip, DM_EVENT_NOSPACE) && !invisible) { xfs_rwunlock(bdp, locktype); - error = XFS_SEND_NAMESP(xip->i_mount, DM_EVENT_NOSPACE, bdp, - DM_RIGHT_NULL, bdp, DM_RIGHT_NULL, NULL, NULL, + error = XFS_SEND_NAMESP(xip->i_mount, DM_EVENT_NOSPACE, vp, + DM_RIGHT_NULL, vp, DM_RIGHT_NULL, NULL, NULL, 0, 0, 0); /* Delay flag intentionally unused */ if (error) return -error; @@ -722,7 +722,7 @@ retry: return ret; } - XFS_STATS_ADD(xfsstats.xs_write_bytes, ret); + XFS_STATS_ADD(xs_write_bytes, ret); /* Handle various SYNC-type writes */ if ((file->f_flags & O_SYNC) || IS_SYNC(file->f_dentry->d_inode)) { diff -prauN linux-2.6.0-test5/fs/xfs/linux/xfs_stats.c wli-2.6.0-test5-bk12-25/fs/xfs/linux/xfs_stats.c --- linux-2.6.0-test5/fs/xfs/linux/xfs_stats.c 2003-09-08 12:50:28.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/linux/xfs_stats.c 2003-09-25 19:16:09.000000000 -0700 @@ -80,6 +80,12 @@ xfs_read_xfsstats( xfsstats.xs_xstrat_bytes, xfsstats.xs_write_bytes, xfsstats.xs_read_bytes); + len += sprintf(buffer + len, "debug %u\n", +#if defined(XFSDEBUG) + 1); +#else + 0); +#endif if (offset >= len) { *start = buffer; diff -prauN linux-2.6.0-test5/fs/xfs/linux/xfs_stats.h wli-2.6.0-test5-bk12-25/fs/xfs/linux/xfs_stats.h --- linux-2.6.0-test5/fs/xfs/linux/xfs_stats.h 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/linux/xfs_stats.h 2003-09-25 19:16:09.000000000 -0700 @@ -128,9 +128,9 @@ struct xfsstats { extern struct xfsstats xfsstats; -# define XFS_STATS_INC(count) ( (count)++ ) -# define XFS_STATS_DEC(count) ( (count)-- ) -# define XFS_STATS_ADD(count, inc) ( (count) += (inc) ) +# define XFS_STATS_INC(count) ( xfsstats.count++ ) +# define XFS_STATS_DEC(count) ( xfsstats.count-- ) +# define XFS_STATS_ADD(count, inc) ( xfsstats.count += (inc) ) extern void xfs_init_procfs(void); extern void xfs_cleanup_procfs(void); diff -prauN linux-2.6.0-test5/fs/xfs/linux/xfs_super.c wli-2.6.0-test5-bk12-25/fs/xfs/linux/xfs_super.c --- linux-2.6.0-test5/fs/xfs/linux/xfs_super.c 2003-09-08 12:50:28.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/linux/xfs_super.c 2003-09-25 19:16:09.000000000 -0700 @@ -174,7 +174,7 @@ xfs_revalidate_inode( inode->i_rdev = 0; } else { xfs_dev_t dev = ip->i_df.if_u2.if_rdev; - inode->i_rdev = XFS_DEV_TO_KDEVT(dev); + inode->i_rdev = MKDEV(sysv_major(dev) & 0x1ff, sysv_minor(dev)); } inode->i_blksize = PAGE_CACHE_SIZE; inode->i_generation = ip->i_d.di_gen; @@ -187,7 +187,22 @@ xfs_revalidate_inode( inode->i_mtime.tv_nsec = ip->i_d.di_mtime.t_nsec; inode->i_ctime.tv_sec = ip->i_d.di_ctime.t_sec; inode->i_ctime.tv_nsec = ip->i_d.di_ctime.t_nsec; - + if (ip->i_d.di_flags & XFS_DIFLAG_IMMUTABLE) + inode->i_flags |= S_IMMUTABLE; + else + inode->i_flags &= ~S_IMMUTABLE; + if (ip->i_d.di_flags & XFS_DIFLAG_APPEND) + inode->i_flags |= S_APPEND; + else + inode->i_flags &= ~S_APPEND; + if (ip->i_d.di_flags & XFS_DIFLAG_SYNC) + inode->i_flags |= S_SYNC; + else + inode->i_flags &= ~S_SYNC; + if (ip->i_d.di_flags & XFS_DIFLAG_NOATIME) + inode->i_flags |= S_NOATIME; + else + inode->i_flags &= ~S_NOATIME; vp->v_flag &= ~VMODIFIED; } @@ -300,8 +315,8 @@ xfs_setsize_buftarg( if (set_blocksize(btp->pbr_bdev, sectorsize)) { printk(KERN_WARNING - "XFS: Cannot set_blocksize to %u on device 0x%lx\n", - sectorsize, (unsigned long)btp->pbr_dev); + "XFS: Cannot set_blocksize to %u on device %u:%u\n", + sectorsize, MAJOR(btp->pbr_dev), MINOR(btp->pbr_dev)); } } diff -prauN linux-2.6.0-test5/fs/xfs/linux/xfs_super.h wli-2.6.0-test5-bk12-25/fs/xfs/linux/xfs_super.h --- linux-2.6.0-test5/fs/xfs/linux/xfs_super.h 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/linux/xfs_super.h 2003-09-25 19:16:09.000000000 -0700 @@ -66,8 +66,12 @@ # define XFS_REALTIME_STRING #endif -#if XFS_BIG_FILESYSTEMS -# define XFS_BIGFS_STRING "big filesystems, " +#if XFS_BIG_BLKNOS +# if XFS_BIG_INUMS +# define XFS_BIGFS_STRING "large block/inode numbers, " +# else +# define XFS_BIGFS_STRING "large block numbers, " +# endif #else # define XFS_BIGFS_STRING #endif diff -prauN linux-2.6.0-test5/fs/xfs/linux/xfs_sysctl.c wli-2.6.0-test5-bk12-25/fs/xfs/linux/xfs_sysctl.c --- linux-2.6.0-test5/fs/xfs/linux/xfs_sysctl.c 2003-09-08 12:51:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/linux/xfs_sysctl.c 2003-09-25 19:16:09.000000000 -0700 @@ -68,39 +68,54 @@ xfs_stats_clear_proc_handler( STATIC ctl_table xfs_table[] = { {XFS_RESTRICT_CHOWN, "restrict_chown", &xfs_params.restrict_chown.val, - sizeof(ulong), 0644, NULL, &proc_doulongvec_minmax, + sizeof(int), 0644, NULL, &proc_dointvec_minmax, &sysctl_intvec, NULL, &xfs_params.restrict_chown.min, &xfs_params.restrict_chown.max}, {XFS_SGID_INHERIT, "irix_sgid_inherit", &xfs_params.sgid_inherit.val, - sizeof(ulong), 0644, NULL, &proc_doulongvec_minmax, + sizeof(int), 0644, NULL, &proc_dointvec_minmax, &sysctl_intvec, NULL, &xfs_params.sgid_inherit.min, &xfs_params.sgid_inherit.max}, {XFS_SYMLINK_MODE, "irix_symlink_mode", &xfs_params.symlink_mode.val, - sizeof(ulong), 0644, NULL, &proc_doulongvec_minmax, + sizeof(int), 0644, NULL, &proc_dointvec_minmax, &sysctl_intvec, NULL, &xfs_params.symlink_mode.min, &xfs_params.symlink_mode.max}, {XFS_PANIC_MASK, "panic_mask", &xfs_params.panic_mask.val, - sizeof(ulong), 0644, NULL, &proc_doulongvec_minmax, + sizeof(int), 0644, NULL, &proc_dointvec_minmax, &sysctl_intvec, NULL, &xfs_params.panic_mask.min, &xfs_params.panic_mask.max}, {XFS_ERRLEVEL, "error_level", &xfs_params.error_level.val, - sizeof(ulong), 0644, NULL, &proc_doulongvec_minmax, + sizeof(int), 0644, NULL, &proc_dointvec_minmax, &sysctl_intvec, NULL, &xfs_params.error_level.min, &xfs_params.error_level.max}, {XFS_SYNC_INTERVAL, "sync_interval", &xfs_params.sync_interval.val, - sizeof(ulong), 0644, NULL, &proc_doulongvec_minmax, + sizeof(int), 0644, NULL, &proc_dointvec_minmax, &sysctl_intvec, NULL, &xfs_params.sync_interval.min, &xfs_params.sync_interval.max}, + {XFS_INHERIT_SYNC, "inherit_sync", &xfs_params.inherit_sync.val, + sizeof(int), 0644, NULL, &proc_dointvec_minmax, + &sysctl_intvec, NULL, + &xfs_params.inherit_sync.min, &xfs_params.inherit_sync.max}, + + {XFS_INHERIT_NODUMP, "inherit_nodump", &xfs_params.inherit_nodump.val, + sizeof(int), 0644, NULL, &proc_dointvec_minmax, + &sysctl_intvec, NULL, + &xfs_params.inherit_nodump.min, &xfs_params.inherit_nodump.max}, + + {XFS_INHERIT_NOATIME, "inherit_noatime", &xfs_params.inherit_noatim.val, + sizeof(int), 0644, NULL, &proc_dointvec_minmax, + &sysctl_intvec, NULL, + &xfs_params.inherit_noatim.min, &xfs_params.inherit_noatim.max}, + /* please keep this the last entry */ #ifdef CONFIG_PROC_FS {XFS_STATS_CLEAR, "stats_clear", &xfs_params.stats_clear.val, - sizeof(ulong), 0644, NULL, &xfs_stats_clear_proc_handler, + sizeof(int), 0644, NULL, &xfs_stats_clear_proc_handler, &sysctl_intvec, NULL, &xfs_params.stats_clear.min, &xfs_params.stats_clear.max}, #endif /* CONFIG_PROC_FS */ diff -prauN linux-2.6.0-test5/fs/xfs/linux/xfs_sysctl.h wli-2.6.0-test5-bk12-25/fs/xfs/linux/xfs_sysctl.h --- linux-2.6.0-test5/fs/xfs/linux/xfs_sysctl.h 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/linux/xfs_sysctl.h 2003-09-25 19:16:09.000000000 -0700 @@ -40,9 +40,9 @@ */ typedef struct xfs_sysctl_val { - ulong min; - ulong val; - ulong max; + int min; + int val; + int max; } xfs_sysctl_val_t; typedef struct xfs_param { @@ -55,6 +55,9 @@ typedef struct xfs_param { xfs_sysctl_val_t error_level; /* Degree of reporting for problems */ xfs_sysctl_val_t sync_interval; /* time between sync calls */ xfs_sysctl_val_t stats_clear; /* Reset all XFS statistics to zero. */ + xfs_sysctl_val_t inherit_sync; /* Inherit the "sync" inode flag. */ + xfs_sysctl_val_t inherit_nodump;/* Inherit the "nodump" inode flag. */ + xfs_sysctl_val_t inherit_noatim;/* Inherit the "noatime" inode flag. */ } xfs_param_t; /* @@ -73,13 +76,16 @@ typedef struct xfs_param { */ enum { - XFS_RESTRICT_CHOWN = 1, - XFS_SGID_INHERIT = 2, - XFS_SYMLINK_MODE = 3, - XFS_PANIC_MASK = 4, - XFS_ERRLEVEL = 5, - XFS_SYNC_INTERVAL = 6, - XFS_STATS_CLEAR = 7, + XFS_RESTRICT_CHOWN = 3, + XFS_SGID_INHERIT = 4, + XFS_SYMLINK_MODE = 5, + XFS_PANIC_MASK = 6, + XFS_ERRLEVEL = 7, + XFS_SYNC_INTERVAL = 8, + XFS_STATS_CLEAR = 12, + XFS_INHERIT_SYNC = 13, + XFS_INHERIT_NODUMP = 14, + XFS_INHERIT_NOATIME = 15, }; extern xfs_param_t xfs_params; diff -prauN linux-2.6.0-test5/fs/xfs/linux/xfs_vnode.c wli-2.6.0-test5-bk12-25/fs/xfs/linux/xfs_vnode.c --- linux-2.6.0-test5/fs/xfs/linux/xfs_vnode.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/linux/xfs_vnode.c 2003-09-25 19:16:09.000000000 -0700 @@ -77,7 +77,7 @@ vn_reclaim( { int error; - XFS_STATS_INC(xfsstats.vn_reclaim); + XFS_STATS_INC(vn_reclaim); vn_trace_entry(vp, "vn_reclaim", (inst_t *)__return_address); /* @@ -137,8 +137,8 @@ vn_initialize( { struct vnode *vp = LINVFS_GET_VP(inode); - XFS_STATS_INC(xfsstats.vn_active); - XFS_STATS_INC(xfsstats.vn_alloc); + XFS_STATS_INC(vn_active); + XFS_STATS_INC(vn_alloc); vp->v_flag = VMODIFIED; spinlock_init(&vp->v_lock, "v_lock"); @@ -172,7 +172,7 @@ vn_get( { struct inode *inode; - XFS_STATS_INC(xfsstats.vn_get); + XFS_STATS_INC(vn_get); inode = LINVFS_GET_IP(vp); if (inode->i_state & I_FREEING) return NULL; @@ -200,7 +200,7 @@ vn_revalidate( vn_trace_entry(vp, "vn_revalidate", (inst_t *)__return_address); ASSERT(vp->v_fbhv != NULL); - va.va_mask = XFS_AT_STAT; + va.va_mask = XFS_AT_STAT|XFS_AT_GENCOUNT; VOP_GETATTR(vp, &va, 0, NULL, error); if (!error) { inode = LINVFS_GET_IP(vp); @@ -213,6 +213,22 @@ vn_revalidate( inode->i_ctime = va.va_ctime; inode->i_atime = va.va_atime; i_size_write(inode, va.va_size); + if (va.va_xflags & XFS_XFLAG_IMMUTABLE) + inode->i_flags |= S_IMMUTABLE; + else + inode->i_flags &= ~S_IMMUTABLE; + if (va.va_xflags & XFS_XFLAG_APPEND) + inode->i_flags |= S_APPEND; + else + inode->i_flags &= ~S_APPEND; + if (va.va_xflags & XFS_XFLAG_SYNC) + inode->i_flags |= S_SYNC; + else + inode->i_flags &= ~S_SYNC; + if (va.va_xflags & XFS_XFLAG_NOATIME) + inode->i_flags |= S_NOATIME; + else + inode->i_flags &= ~S_NOATIME; VUNMODIFY(vp); } return -error; @@ -264,7 +280,7 @@ again: return; } - XFS_STATS_DEC(xfsstats.vn_active); + XFS_STATS_DEC(vn_active); vp->v_flag |= VRECLM; VN_UNLOCK(vp, 0); @@ -292,7 +308,7 @@ vn_hold( { struct inode *inode; - XFS_STATS_INC(xfsstats.vn_hold); + XFS_STATS_INC(vn_hold); VN_LOCK(vp); inode = igrab(LINVFS_GET_IP(vp)); @@ -312,7 +328,7 @@ vn_rele( int vcnt; int cache; - XFS_STATS_INC(xfsstats.vn_rele); + XFS_STATS_INC(vn_rele); VN_LOCK(vp); @@ -364,7 +380,7 @@ vn_remove( if (!(vp->v_fbhv)) return; - XFS_STATS_INC(xfsstats.vn_remove); + XFS_STATS_INC(vn_remove); vn_trace_exit(vp, "vn_remove", (inst_t *)__return_address); /* diff -prauN linux-2.6.0-test5/fs/xfs/pagebuf/page_buf.c wli-2.6.0-test5-bk12-25/fs/xfs/pagebuf/page_buf.c --- linux-2.6.0-test5/fs/xfs/pagebuf/page_buf.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/pagebuf/page_buf.c 2003-09-25 19:16:09.000000000 -0700 @@ -174,16 +174,13 @@ STATIC pb_hash_t pbhash[NHASH]; STATIC int _bhash( - dev_t dev, + struct block_device *bdev, loff_t base) { int bit, hval; base >>= 9; - /* - * dev_t is 16 bits, loff_t is always 64 bits - */ - base ^= dev; + base ^= (unsigned long)bdev / L1_CACHE_BYTES; for (bit = hval = 0; base && bit < sizeof(base) * 8; bit += NBITS) { hval ^= (int)base & (NHASH-1); base >>= NBITS; @@ -619,7 +616,7 @@ _pagebuf_find( /* find buffer for blo /* Ensure we never do IOs that are not sector aligned */ BUG_ON(range_base & (loff_t)target->pbr_smask); - hval = _bhash(target->pbr_bdev->bd_dev, range_base); + hval = _bhash(target->pbr_bdev, range_base); h = &pbhash[hval]; spin_lock(&h->pb_hash_lock); @@ -1867,23 +1864,23 @@ STATIC struct ctl_table_header *pagebuf_ STATIC ctl_table pagebuf_table[] = { {PB_FLUSH_INT, "flush_int", &pb_params.flush_interval.val, - sizeof(ulong), 0644, NULL, &proc_doulongvec_ms_jiffies_minmax, + sizeof(int), 0644, NULL, &proc_dointvec_minmax, &sysctl_intvec, NULL, &pb_params.flush_interval.min, &pb_params.flush_interval.max}, {PB_FLUSH_AGE, "flush_age", &pb_params.age_buffer.val, - sizeof(ulong), 0644, NULL, &proc_doulongvec_ms_jiffies_minmax, + sizeof(int), 0644, NULL, &proc_dointvec_minmax, &sysctl_intvec, NULL, &pb_params.age_buffer.min, &pb_params.age_buffer.max}, {PB_STATS_CLEAR, "stats_clear", &pb_params.stats_clear.val, - sizeof(ulong), 0644, NULL, &pb_stats_clear_handler, + sizeof(int), 0644, NULL, &pb_stats_clear_handler, &sysctl_intvec, NULL, &pb_params.stats_clear.min, &pb_params.stats_clear.max}, #ifdef PAGEBUF_TRACE {PB_DEBUG, "debug", &pb_params.debug.val, - sizeof(ulong), 0644, NULL, &proc_doulongvec_minmax, + sizeof(int), 0644, NULL, &proc_dointvec_minmax, &sysctl_intvec, NULL, &pb_params.debug.min, &pb_params.debug.max}, #endif diff -prauN linux-2.6.0-test5/fs/xfs/pagebuf/page_buf_internal.h wli-2.6.0-test5-bk12-25/fs/xfs/pagebuf/page_buf_internal.h --- linux-2.6.0-test5/fs/xfs/pagebuf/page_buf_internal.h 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/pagebuf/page_buf_internal.h 2003-09-25 19:16:09.000000000 -0700 @@ -81,9 +81,9 @@ struct pagebuf_trace_buf { */ typedef struct pb_sysctl_val { - ulong min; - ulong val; - ulong max; + int min; + int val; + int max; } pb_sysctl_val_t; typedef struct pagebuf_param { diff -prauN linux-2.6.0-test5/fs/xfs/xfs_acl.c wli-2.6.0-test5-bk12-25/fs/xfs/xfs_acl.c --- linux-2.6.0-test5/fs/xfs/xfs_acl.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/xfs_acl.c 2003-09-25 19:16:09.000000000 -0700 @@ -388,6 +388,8 @@ xfs_acl_allow_set( vattr_t va; int error; + if (vp->v_inode.i_flags & (S_IMMUTABLE|S_APPEND)) + return EPERM; if (kind == _ACL_TYPE_DEFAULT && vp->v_type != VDIR) return ENOTDIR; if (vp->v_vfsp->vfs_flag & VFS_RDONLY) diff -prauN linux-2.6.0-test5/fs/xfs/xfs_alloc.c wli-2.6.0-test5-bk12-25/fs/xfs/xfs_alloc.c --- linux-2.6.0-test5/fs/xfs/xfs_alloc.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/xfs_alloc.c 2003-09-25 19:16:09.000000000 -0700 @@ -636,8 +636,8 @@ xfs_alloc_ag_vextent( xfs_trans_mod_sb(args->tp, args->wasdel ? XFS_TRANS_SB_RES_FDBLOCKS : XFS_TRANS_SB_FDBLOCKS, -slen); - XFS_STATS_INC(xfsstats.xs_allocx); - XFS_STATS_ADD(xfsstats.xs_allocb, args->len); + XFS_STATS_INC(xs_allocx); + XFS_STATS_ADD(xs_allocb, args->len); } return 0; } @@ -1781,8 +1781,8 @@ xfs_free_ag_extent( xfs_alloc_log_agf(tp, agbp, XFS_AGF_FREEBLKS); if (!isfl) xfs_trans_mod_sb(tp, XFS_TRANS_SB_FDBLOCKS, (long)len); - XFS_STATS_INC(xfsstats.xs_freex); - XFS_STATS_ADD(xfsstats.xs_freeb, len); + XFS_STATS_INC(xs_freex); + XFS_STATS_ADD(xs_freeb, len); } TRACE_FREE(haveleft ? (haveright ? "both" : "left") : diff -prauN linux-2.6.0-test5/fs/xfs/xfs_alloc_btree.c wli-2.6.0-test5-bk12-25/fs/xfs/xfs_alloc_btree.c --- linux-2.6.0-test5/fs/xfs/xfs_alloc_btree.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/xfs_alloc_btree.c 2003-09-25 19:16:09.000000000 -0700 @@ -133,7 +133,7 @@ xfs_alloc_delrec( *stat = 0; return 0; } - XFS_STATS_INC(xfsstats.xs_abt_delrec); + XFS_STATS_INC(xs_abt_delrec); /* * It's a nonleaf. Excise the key and ptr being deleted, by * sliding the entries past them down one. @@ -631,7 +631,7 @@ xfs_alloc_insrec( * and we're done. */ if (level >= cur->bc_nlevels) { - XFS_STATS_INC(xfsstats.xs_abt_insrec); + XFS_STATS_INC(xs_abt_insrec); if ((error = xfs_alloc_newroot(cur, &i))) return error; *bnop = NULLAGBLOCK; @@ -651,7 +651,7 @@ xfs_alloc_insrec( *stat = 0; return 0; } - XFS_STATS_INC(xfsstats.xs_abt_insrec); + XFS_STATS_INC(xs_abt_insrec); /* * Get pointers to the btree buffer and block. */ @@ -951,7 +951,7 @@ xfs_alloc_lookup( int level; /* level in the btree */ xfs_mount_t *mp; /* file system mount point */ - XFS_STATS_INC(xfsstats.xs_abt_lookup); + XFS_STATS_INC(xs_abt_lookup); /* * Get the allocation group header, and the root block number. */ @@ -1046,7 +1046,7 @@ xfs_alloc_lookup( xfs_extlen_t blockcount; /* key value */ xfs_agblock_t startblock; /* key value */ - XFS_STATS_INC(xfsstats.xs_abt_compare); + XFS_STATS_INC(xs_abt_compare); /* * keyno is average of low and high. */ diff -prauN linux-2.6.0-test5/fs/xfs/xfs_arch.h wli-2.6.0-test5-bk12-25/fs/xfs/xfs_arch.h --- linux-2.6.0-test5/fs/xfs/xfs_arch.h 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/xfs_arch.h 2003-09-25 19:16:09.000000000 -0700 @@ -32,8 +32,8 @@ #ifndef __XFS_ARCH_H__ #define __XFS_ARCH_H__ -#ifndef XFS_BIG_FILESYSTEMS -#error XFS_BIG_FILESYSTEMS must be defined true or false +#ifndef XFS_BIG_INUMS +# error XFS_BIG_INUMS must be defined true or false #endif #ifdef __KERNEL__ @@ -239,7 +239,7 @@ (INT_GET_UNALIGNED_32_BE(pointer)) \ ) -#if XFS_BIG_FILESYSTEMS +#if XFS_BIG_INUMS #define DIRINO_GET_ARCH(pointer,arch) \ ( ((arch) == ARCH_NOCONVERT) \ ? \ diff -prauN linux-2.6.0-test5/fs/xfs/xfs_attr.c wli-2.6.0-test5-bk12-25/fs/xfs/xfs_attr.c --- linux-2.6.0-test5/fs/xfs/xfs_attr.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/xfs_attr.c 2003-09-25 19:16:09.000000000 -0700 @@ -116,37 +116,37 @@ ktrace_t *xfs_attr_trace_buf; *========================================================================*/ /*ARGSUSED*/ -int /* error */ -xfs_attr_get(bhv_desc_t *bdp, char *name, char *value, int *valuelenp, - int flags, struct cred *cred) +STATIC int +xfs_attr_get_int(xfs_inode_t *ip, char *name, char *value, int *valuelenp, + int flags, int lock, struct cred *cred) { xfs_da_args_t args; int error; int namelen; - xfs_inode_t *ip = XFS_BHVTOI(bdp); - if (!name) - return EINVAL; ASSERT(MAXNAMELEN-1 <= 0xff); /* length is stored in uint8 */ namelen = strlen(name); if (namelen >= MAXNAMELEN) - return EFAULT; /* match IRIX behaviour */ - XFS_STATS_INC(xfsstats.xs_attr_get); - - if (XFS_IFORK_Q(ip) == 0) - return ENOATTR; - + return(EFAULT); /* match IRIX behaviour */ + XFS_STATS_INC(xs_attr_get); if (XFS_FORCED_SHUTDOWN(ip->i_mount)) - return (EIO); + return(EIO); - /* - * Do we answer them, or ignore them? - */ - xfs_ilock(ip, XFS_ILOCK_SHARED); - if ((error = xfs_iaccess(XFS_BHVTOI(bdp), IREAD, cred))) { - xfs_iunlock(ip, XFS_ILOCK_SHARED); - return(XFS_ERROR(error)); + if ((XFS_IFORK_Q(ip) == 0) || + (ip->i_d.di_aformat == XFS_DINODE_FMT_EXTENTS && + ip->i_d.di_anextents == 0)) + return(ENOATTR); + + if (lock) { + xfs_ilock(ip, XFS_ILOCK_SHARED); + /* + * Do we answer them, or ignore them? + */ + if ((error = xfs_iaccess(ip, IREAD, cred))) { + xfs_iunlock(ip, XFS_ILOCK_SHARED); + return(XFS_ERROR(error)); + } } /* @@ -177,7 +177,9 @@ xfs_attr_get(bhv_desc_t *bdp, char *name } else { error = xfs_attr_node_get(&args); } - xfs_iunlock(ip, XFS_ILOCK_SHARED); + + if (lock) + xfs_iunlock(ip, XFS_ILOCK_SHARED); /* * Return the number of bytes in the value to the caller. @@ -189,6 +191,23 @@ xfs_attr_get(bhv_desc_t *bdp, char *name return(error); } +int +xfs_attr_fetch(xfs_inode_t *ip, char *name, char *value, int valuelen) +{ + return xfs_attr_get_int(ip, name, value, &valuelen, ATTR_ROOT, 0, NULL); +} + +int +xfs_attr_get(bhv_desc_t *bdp, char *name, char *value, int *valuelenp, + int flags, struct cred *cred) +{ + xfs_inode_t *ip = XFS_BHVTOI(bdp); + + if (!name) + return(EINVAL); + return xfs_attr_get_int(ip, name, value, valuelenp, flags, 1, cred); +} + /*ARGSUSED*/ int /* error */ xfs_attr_set(bhv_desc_t *bdp, char *name, char *value, int valuelen, int flags, @@ -210,7 +229,7 @@ xfs_attr_set(bhv_desc_t *bdp, char *name if (namelen >= MAXNAMELEN) return EFAULT; /* match irix behaviour */ - XFS_STATS_INC(xfsstats.xs_attr_set); + XFS_STATS_INC(xs_attr_set); /* * Do we answer them, or ignore them? */ @@ -468,7 +487,7 @@ xfs_attr_remove(bhv_desc_t *bdp, char *n if (namelen>=MAXNAMELEN) return EFAULT; /* match irix behaviour */ - XFS_STATS_INC(xfsstats.xs_attr_remove); + XFS_STATS_INC(xs_attr_remove); /* * Do we answer them, or ignore them? @@ -620,7 +639,7 @@ xfs_attr_list(bhv_desc_t *bdp, char *buf xfs_inode_t *dp; int error; - XFS_STATS_INC(xfsstats.xs_attr_list); + XFS_STATS_INC(xs_attr_list); /* * Validate the cursor. @@ -1718,7 +1737,6 @@ xfs_attr_node_get(xfs_da_args_t *args) int i; state = xfs_da_state_alloc(); - state->holeok = 1; state->args = args; state->mp = args->dp->i_mount; state->blocksize = state->mp->m_sb.sb_blocksize; diff -prauN linux-2.6.0-test5/fs/xfs/xfs_bit.c wli-2.6.0-test5-bk12-25/fs/xfs/xfs_bit.c --- linux-2.6.0-test5/fs/xfs/xfs_bit.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/xfs_bit.c 2003-09-25 19:16:09.000000000 -0700 @@ -156,12 +156,12 @@ xfs_lowbit64( { int n; n = ffs((unsigned)v); - if (n == 0) { + if (n <= 0) { n = ffs(v >> 32); if (n >= 0) n+=32; } - return n-1; + return (n <= 0) ? n : n-1; } /* diff -prauN linux-2.6.0-test5/fs/xfs/xfs_bmap.c wli-2.6.0-test5-bk12-25/fs/xfs/xfs_bmap.c --- linux-2.6.0-test5/fs/xfs/xfs_bmap.c 2003-09-08 12:50:28.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/xfs_bmap.c 2003-09-25 19:16:09.000000000 -0700 @@ -52,7 +52,6 @@ #include "xfs_dir_sf.h" #include "xfs_dir2_sf.h" #include "xfs_dinode.h" -#include "xfs_dmapi.h" #include "xfs_inode_item.h" #include "xfs_inode.h" #include "xfs_itable.h" @@ -565,7 +564,7 @@ xfs_bmap_add_extent( int logflags; /* returned value */ xfs_extnum_t nextents; /* number of extents in file now */ - XFS_STATS_INC(xfsstats.xs_add_exlist); + XFS_STATS_INC(xs_add_exlist); cur = *curp; ifp = XFS_IFORK_PTR(ip, whichfork); nextents = ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t); @@ -2837,7 +2836,7 @@ xfs_bmap_del_extent( xfs_filblks_t temp; /* for indirect length calculations */ xfs_filblks_t temp2; /* for indirect length calculations */ - XFS_STATS_INC(xfsstats.xs_del_exlist); + XFS_STATS_INC(xs_del_exlist); mp = ip->i_mount; ifp = XFS_IFORK_PTR(ip, whichfork); nextents = ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t); @@ -3462,7 +3461,7 @@ xfs_bmap_do_search_extents( low = 0; high = nextents - 1; while (low <= high) { - XFS_STATS_INC(xfsstats.xs_cmp_exlist); + XFS_STATS_INC(xs_cmp_exlist); lastx = (low + high) >> 1; ep = base + lastx; got.br_startoff = xfs_bmbt_get_startoff(ep); @@ -3532,7 +3531,7 @@ xfs_bmap_search_extents( xfs_extnum_t lastx; /* last extent index used */ xfs_extnum_t nextents; /* extent list size */ - XFS_STATS_INC(xfsstats.xs_look_exlist); + XFS_STATS_INC(xs_look_exlist); ifp = XFS_IFORK_PTR(ip, whichfork); lastx = ifp->if_lastex; nextents = ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t); @@ -4630,9 +4629,9 @@ xfs_bmapi( ASSERT(ifp->if_ext_max == XFS_IFORK_SIZE(ip, whichfork) / (uint)sizeof(xfs_bmbt_rec_t)); if ((wr = (flags & XFS_BMAPI_WRITE)) != 0) - XFS_STATS_INC(xfsstats.xs_blk_mapw); + XFS_STATS_INC(xs_blk_mapw); else - XFS_STATS_INC(xfsstats.xs_blk_mapr); + XFS_STATS_INC(xs_blk_mapr); delay = (flags & XFS_BMAPI_DELAY) != 0; trim = (flags & XFS_BMAPI_ENTIRE) == 0; userdata = (flags & XFS_BMAPI_METADATA) == 0; @@ -5116,7 +5115,7 @@ xfs_bmapi_single( } if (XFS_FORCED_SHUTDOWN(ip->i_mount)) return XFS_ERROR(EIO); - XFS_STATS_INC(xfsstats.xs_blk_mapr); + XFS_STATS_INC(xs_blk_mapr); if (!(ifp->if_flags & XFS_IFEXTENTS) && (error = xfs_iread_extents(tp, ip, whichfork))) return error; @@ -5205,7 +5204,7 @@ xfs_bunmapi( *done = 1; return 0; } - XFS_STATS_INC(xfsstats.xs_blk_unmap); + XFS_STATS_INC(xs_blk_unmap); isrt = (whichfork == XFS_DATA_FORK) && (ip->i_d.di_flags & XFS_DIFLAG_REALTIME); start = bno; diff -prauN linux-2.6.0-test5/fs/xfs/xfs_bmap_btree.c wli-2.6.0-test5-bk12-25/fs/xfs/xfs_bmap_btree.c --- linux-2.6.0-test5/fs/xfs/xfs_bmap_btree.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/xfs_bmap_btree.c 2003-09-25 19:16:09.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000-2001 Silicon Graphics, Inc. All Rights Reserved. + * Copyright (c) 2000-2003 Silicon Graphics, Inc. All Rights Reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of version 2 of the GNU General Public License as @@ -392,7 +392,7 @@ xfs_bmbt_delrec( *stat = 0; return 0; } - XFS_STATS_INC(xfsstats.xs_bmbt_delrec); + XFS_STATS_INC(xs_bmbt_delrec); if (level > 0) { kp = XFS_BMAP_KEY_IADDR(block, 1, cur); pp = XFS_BMAP_PTR_IADDR(block, 1, cur); @@ -784,7 +784,7 @@ xfs_bmbt_insrec( *stat = 0; return 0; } - XFS_STATS_INC(xfsstats.xs_bmbt_insrec); + XFS_STATS_INC(xs_bmbt_insrec); block = xfs_bmbt_get_block(cur, level, &bp); numrecs = INT_GET(block->bb_numrecs, ARCH_CONVERT); #ifdef DEBUG @@ -1137,7 +1137,7 @@ xfs_bmbt_lookup( xfs_fileoff_t startoff; xfs_trans_t *tp; - XFS_STATS_INC(xfsstats.xs_bmbt_lookup); + XFS_STATS_INC(xs_bmbt_lookup); XFS_BMBT_TRACE_CURSOR(cur, ENTRY); XFS_BMBT_TRACE_ARGI(cur, (int)dir); tp = cur->bc_tp; @@ -1182,7 +1182,7 @@ xfs_bmbt_lookup( return 0; } while (low <= high) { - XFS_STATS_INC(xfsstats.xs_bmbt_compare); + XFS_STATS_INC(xs_bmbt_compare); keyno = (low + high) >> 1; if (level > 0) { kkp = kkbase + keyno - 1; @@ -1899,7 +1899,7 @@ __xfs_bmbt_get_all( ext_flag = (int)(l0 >> (64 - BMBT_EXNTFLAG_BITLEN)); s->br_startoff = ((xfs_fileoff_t)l0 & XFS_MASK64LO(64 - BMBT_EXNTFLAG_BITLEN)) >> 9; -#if XFS_BIG_FILESYSTEMS +#if XFS_BIG_BLKNOS s->br_startblock = (((xfs_fsblock_t)l0 & XFS_MASK64LO(9)) << 43) | (((xfs_fsblock_t)l1) >> 21); #else @@ -1915,7 +1915,7 @@ __xfs_bmbt_get_all( #else /* !DEBUG */ s->br_startblock = (xfs_fsblock_t)(((xfs_dfsbno_t)l1) >> 21); #endif /* DEBUG */ -#endif /* XFS_BIG_FILESYSTEMS */ +#endif /* XFS_BIG_BLKNOS */ s->br_blockcount = (xfs_filblks_t)(l1 & XFS_MASK64LO(21)); /* This is xfs_extent_state() in-line */ if (ext_flag) { @@ -1976,7 +1976,7 @@ xfs_fsblock_t xfs_bmbt_get_startblock( xfs_bmbt_rec_t *r) { -#if XFS_BIG_FILESYSTEMS +#if XFS_BIG_BLKNOS return (((xfs_fsblock_t)r->l0 & XFS_MASK64LO(9)) << 43) | (((xfs_fsblock_t)r->l1) >> 21); #else @@ -1990,7 +1990,7 @@ xfs_bmbt_get_startblock( #else /* !DEBUG */ return (xfs_fsblock_t)(((xfs_dfsbno_t)r->l1) >> 21); #endif /* DEBUG */ -#endif /* XFS_BIG_FILESYSTEMS */ +#endif /* XFS_BIG_BLKNOS */ } /* @@ -2047,7 +2047,7 @@ xfs_fsblock_t xfs_bmbt_disk_get_startblock( xfs_bmbt_rec_t *r) { -#if XFS_BIG_FILESYSTEMS +#if XFS_BIG_BLKNOS return (((xfs_fsblock_t)INT_GET(r->l0, ARCH_CONVERT) & XFS_MASK64LO(9)) << 43) | (((xfs_fsblock_t)INT_GET(r->l1, ARCH_CONVERT)) >> 21); #else @@ -2061,7 +2061,7 @@ xfs_bmbt_disk_get_startblock( #else /* !DEBUG */ return (xfs_fsblock_t)(((xfs_dfsbno_t)INT_GET(r->l1, ARCH_CONVERT)) >> 21); #endif /* DEBUG */ -#endif /* XFS_BIG_FILESYSTEMS */ +#endif /* XFS_BIG_BLKNOS */ } /* @@ -2472,17 +2472,15 @@ xfs_bmbt_set_all( extent_flag = (s->br_state == XFS_EXT_NORM) ? 0 : 1; ASSERT((s->br_startoff & XFS_MASK64HI(9)) == 0); ASSERT((s->br_blockcount & XFS_MASK64HI(43)) == 0); -#if XFS_BIG_FILESYSTEMS +#if XFS_BIG_BLKNOS ASSERT((s->br_startblock & XFS_MASK64HI(12)) == 0); -#endif /* XFS_BIG_FILESYSTEMS */ -#if XFS_BIG_FILESYSTEMS r->l0 = ((xfs_bmbt_rec_base_t)extent_flag << 63) | ((xfs_bmbt_rec_base_t)s->br_startoff << 9) | ((xfs_bmbt_rec_base_t)s->br_startblock >> 43); r->l1 = ((xfs_bmbt_rec_base_t)s->br_startblock << 21) | ((xfs_bmbt_rec_base_t)s->br_blockcount & (xfs_bmbt_rec_base_t)XFS_MASK64LO(21)); -#else /* !XFS_BIG_FILESYSTEMS */ +#else /* !XFS_BIG_BLKNOS */ if (ISNULLSTARTBLOCK(s->br_startblock)) { r->l0 = ((xfs_bmbt_rec_base_t)extent_flag << 63) | ((xfs_bmbt_rec_base_t)s->br_startoff << 9) | @@ -2498,7 +2496,7 @@ xfs_bmbt_set_all( ((xfs_bmbt_rec_base_t)s->br_blockcount & (xfs_bmbt_rec_base_t)XFS_MASK64LO(21)); } -#endif /* XFS_BIG_FILESYSTEMS */ +#endif /* XFS_BIG_BLKNOS */ } /* @@ -2518,17 +2516,15 @@ xfs_bmbt_set_allf( extent_flag = (v == XFS_EXT_NORM) ? 0 : 1; ASSERT((o & XFS_MASK64HI(64-BMBT_STARTOFF_BITLEN)) == 0); ASSERT((c & XFS_MASK64HI(64-BMBT_BLOCKCOUNT_BITLEN)) == 0); -#if XFS_BIG_FILESYSTEMS +#if XFS_BIG_BLKNOS ASSERT((b & XFS_MASK64HI(64-BMBT_STARTBLOCK_BITLEN)) == 0); -#endif /* XFS_BIG_FILESYSTEMS */ -#if XFS_BIG_FILESYSTEMS r->l0 = ((xfs_bmbt_rec_base_t)extent_flag << 63) | ((xfs_bmbt_rec_base_t)o << 9) | ((xfs_bmbt_rec_base_t)b >> 43); r->l1 = ((xfs_bmbt_rec_base_t)b << 21) | ((xfs_bmbt_rec_base_t)c & (xfs_bmbt_rec_base_t)XFS_MASK64LO(21)); -#else /* !XFS_BIG_FILESYSTEMS */ +#else /* !XFS_BIG_BLKNOS */ if (ISNULLSTARTBLOCK(b)) { r->l0 = ((xfs_bmbt_rec_base_t)extent_flag << 63) | ((xfs_bmbt_rec_base_t)o << 9) | @@ -2544,7 +2540,7 @@ xfs_bmbt_set_allf( ((xfs_bmbt_rec_base_t)c & (xfs_bmbt_rec_base_t)XFS_MASK64LO(21)); } -#endif /* XFS_BIG_FILESYSTEMS */ +#endif /* XFS_BIG_BLKNOS */ } #if ARCH_CONVERT != ARCH_NOCONVERT @@ -2563,17 +2559,15 @@ xfs_bmbt_disk_set_all( extent_flag = (s->br_state == XFS_EXT_NORM) ? 0 : 1; ASSERT((s->br_startoff & XFS_MASK64HI(9)) == 0); ASSERT((s->br_blockcount & XFS_MASK64HI(43)) == 0); -#if XFS_BIG_FILESYSTEMS +#if XFS_BIG_BLKNOS ASSERT((s->br_startblock & XFS_MASK64HI(12)) == 0); -#endif /* XFS_BIG_FILESYSTEMS */ -#if XFS_BIG_FILESYSTEMS INT_SET(r->l0, ARCH_CONVERT, ((xfs_bmbt_rec_base_t)extent_flag << 63) | ((xfs_bmbt_rec_base_t)s->br_startoff << 9) | ((xfs_bmbt_rec_base_t)s->br_startblock >> 43)); INT_SET(r->l1, ARCH_CONVERT, ((xfs_bmbt_rec_base_t)s->br_startblock << 21) | ((xfs_bmbt_rec_base_t)s->br_blockcount & (xfs_bmbt_rec_base_t)XFS_MASK64LO(21))); -#else /* !XFS_BIG_FILESYSTEMS */ +#else /* !XFS_BIG_BLKNOS */ if (ISNULLSTARTBLOCK(s->br_startblock)) { INT_SET(r->l0, ARCH_CONVERT, ((xfs_bmbt_rec_base_t)extent_flag << 63) | ((xfs_bmbt_rec_base_t)s->br_startoff << 9) | @@ -2589,7 +2583,7 @@ xfs_bmbt_disk_set_all( ((xfs_bmbt_rec_base_t)s->br_blockcount & (xfs_bmbt_rec_base_t)XFS_MASK64LO(21))); } -#endif /* XFS_BIG_FILESYSTEMS */ +#endif /* XFS_BIG_BLKNOS */ } /* @@ -2609,17 +2603,15 @@ xfs_bmbt_disk_set_allf( extent_flag = (v == XFS_EXT_NORM) ? 0 : 1; ASSERT((o & XFS_MASK64HI(64-BMBT_STARTOFF_BITLEN)) == 0); ASSERT((c & XFS_MASK64HI(64-BMBT_BLOCKCOUNT_BITLEN)) == 0); -#if XFS_BIG_FILESYSTEMS +#if XFS_BIG_BLKNOS ASSERT((b & XFS_MASK64HI(64-BMBT_STARTBLOCK_BITLEN)) == 0); -#endif /* XFS_BIG_FILESYSTEMS */ -#if XFS_BIG_FILESYSTEMS INT_SET(r->l0, ARCH_CONVERT, ((xfs_bmbt_rec_base_t)extent_flag << 63) | ((xfs_bmbt_rec_base_t)o << 9) | ((xfs_bmbt_rec_base_t)b >> 43)); INT_SET(r->l1, ARCH_CONVERT, ((xfs_bmbt_rec_base_t)b << 21) | ((xfs_bmbt_rec_base_t)c & (xfs_bmbt_rec_base_t)XFS_MASK64LO(21))); -#else /* !XFS_BIG_FILESYSTEMS */ +#else /* !XFS_BIG_BLKNOS */ if (ISNULLSTARTBLOCK(b)) { INT_SET(r->l0, ARCH_CONVERT, ((xfs_bmbt_rec_base_t)extent_flag << 63) | ((xfs_bmbt_rec_base_t)o << 9) | @@ -2635,7 +2627,7 @@ xfs_bmbt_disk_set_allf( ((xfs_bmbt_rec_base_t)c & (xfs_bmbt_rec_base_t)XFS_MASK64LO(21))); } -#endif /* XFS_BIG_FILESYSTEMS */ +#endif /* XFS_BIG_BLKNOS */ } #endif @@ -2660,15 +2652,13 @@ xfs_bmbt_set_startblock( xfs_bmbt_rec_t *r, xfs_fsblock_t v) { -#if XFS_BIG_FILESYSTEMS +#if XFS_BIG_BLKNOS ASSERT((v & XFS_MASK64HI(12)) == 0); -#endif /* XFS_BIG_FILESYSTEMS */ -#if XFS_BIG_FILESYSTEMS r->l0 = (r->l0 & (xfs_bmbt_rec_base_t)XFS_MASK64HI(55)) | (xfs_bmbt_rec_base_t)(v >> 43); r->l1 = (r->l1 & (xfs_bmbt_rec_base_t)XFS_MASK64LO(21)) | (xfs_bmbt_rec_base_t)(v << 21); -#else /* !XFS_BIG_FILESYSTEMS */ +#else /* !XFS_BIG_BLKNOS */ if (ISNULLSTARTBLOCK(v)) { r->l0 |= (xfs_bmbt_rec_base_t)XFS_MASK64LO(9); r->l1 = (xfs_bmbt_rec_base_t)XFS_MASK64HI(11) | @@ -2679,7 +2669,7 @@ xfs_bmbt_set_startblock( r->l1 = ((xfs_bmbt_rec_base_t)v << 21) | (r->l1 & (xfs_bmbt_rec_base_t)XFS_MASK64LO(21)); } -#endif /* XFS_BIG_FILESYSTEMS */ +#endif /* XFS_BIG_BLKNOS */ } /* diff -prauN linux-2.6.0-test5/fs/xfs/xfs_bmap_btree.h wli-2.6.0-test5-bk12-25/fs/xfs/xfs_bmap_btree.h --- linux-2.6.0-test5/fs/xfs/xfs_bmap_btree.h 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/xfs_bmap_btree.h 2003-09-25 19:16:10.000000000 -0700 @@ -108,7 +108,7 @@ typedef xfs_bmbt_rec_64_t xfs_bmbt_rec_t * Values and macros for delayed-allocation startblock fields. */ #define STARTBLOCKVALBITS 17 -#define STARTBLOCKMASKBITS (15 + XFS_BIG_FILESYSTEMS * 20) +#define STARTBLOCKMASKBITS (15 + XFS_BIG_BLKNOS * 20) #define DSTARTBLOCKMASKBITS (15 + 20) #define STARTBLOCKMASK \ (((((xfs_fsblock_t)1) << STARTBLOCKMASKBITS) - 1) << STARTBLOCKVALBITS) diff -prauN linux-2.6.0-test5/fs/xfs/xfs_cap.c wli-2.6.0-test5-bk12-25/fs/xfs/xfs_cap.c --- linux-2.6.0-test5/fs/xfs/xfs_cap.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/xfs_cap.c 2003-09-25 19:16:10.000000000 -0700 @@ -192,6 +192,8 @@ xfs_cap_allow_set( if (vp->v_vfsp->vfs_flag & VFS_RDONLY) return EROFS; + if (vp->v_inode.i_flags & (S_IMMUTABLE|S_APPEND)) + return EPERM; if ((error = _MAC_VACCESS(vp, NULL, VWRITE))) return error; va.va_mask = XFS_AT_UID; diff -prauN linux-2.6.0-test5/fs/xfs/xfs_da_btree.c wli-2.6.0-test5-bk12-25/fs/xfs/xfs_da_btree.c --- linux-2.6.0-test5/fs/xfs/xfs_da_btree.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/xfs_da_btree.c 2003-09-25 19:16:10.000000000 -0700 @@ -1141,12 +1141,10 @@ xfs_da_node_lookup_int(xfs_da_state_t *s xfs_da_node_entry_t *btree; xfs_dablk_t blkno; int probe, span, max, error, retval; - xfs_daddr_t mappedbno; xfs_dahash_t hashval; xfs_da_args_t *args; args = state->args; - mappedbno = state->holeok ? -2 : -1; /* * Descend thru the B-tree searching each level for the right @@ -1164,9 +1162,7 @@ xfs_da_node_lookup_int(xfs_da_state_t *s */ blk->blkno = blkno; error = xfs_da_read_buf(args->trans, args->dp, blkno, - mappedbno, &blk->bp, args->whichfork); - if (!error && unlikely(state->holeok && !blk->bp)) - error = XFS_ERROR(ENOATTR); /* always attr here */ + -1, &blk->bp, args->whichfork); if (error) { blk->blkno = 0; state->path.active--; @@ -2170,9 +2166,9 @@ xfs_da_do_buf( if (xfs_error_level >= XFS_ERRLEVEL_LOW) { int i; cmn_err(CE_ALERT, "xfs_da_do_buf: bno %lld\n", - bno); + (long long)bno); cmn_err(CE_ALERT, "dir: inode %lld\n", - dp->i_ino); + (long long)dp->i_ino); for (i = 0; i < nmap; i++) { cmn_err(CE_ALERT, "[%02d] br_startoff %lld br_startblock %lld br_blockcount %lld br_state %d\n", diff -prauN linux-2.6.0-test5/fs/xfs/xfs_da_btree.h wli-2.6.0-test5-bk12-25/fs/xfs/xfs_da_btree.h --- linux-2.6.0-test5/fs/xfs/xfs_da_btree.h 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/xfs_da_btree.h 2003-09-25 19:16:10.000000000 -0700 @@ -189,10 +189,10 @@ typedef struct xfs_da_args { int index2; /* index of 2nd attr in blk */ xfs_dablk_t rmtblkno2; /* remote attr value starting blkno */ int rmtblkcnt2; /* remote attr value block count */ - int justcheck : 1; /* T/F: check for ok with no space */ - int rename : 1; /* T/F: this is an atomic rename op */ - int addname : 1; /* T/F: this is an add operation */ - int oknoent : 1; /* T/F: ok to return ENOENT, else die */ + unsigned char justcheck; /* T/F: check for ok with no space */ + unsigned char rename; /* T/F: this is an atomic rename op */ + unsigned char addname; /* T/F: this is an add operation */ + unsigned char oknoent; /* T/F: ok to return ENOENT, else die */ } xfs_da_args_t; /* @@ -252,10 +252,9 @@ typedef struct xfs_da_state { unsigned int node_ents; /* how many entries in danode */ xfs_da_state_path_t path; /* search/split paths */ xfs_da_state_path_t altpath; /* alternate path for join */ - unsigned int inleaf : 1; /* insert into 1->lf, 0->splf */ - unsigned int holeok : 1; /* T/F: can deal with a hole */ - unsigned int extravalid : 1; /* T/F: extrablk is in use */ - unsigned int extraafter : 1; /* T/F: extrablk is after new */ + unsigned char inleaf; /* insert into 1->lf, 0->splf */ + unsigned char extravalid; /* T/F: extrablk is in use */ + unsigned char extraafter; /* T/F: extrablk is after new */ xfs_da_state_blk_t extrablk; /* for double-splits on leafs */ /* for dirv2 extrablk is data */ } xfs_da_state_t; diff -prauN linux-2.6.0-test5/fs/xfs/xfs_dinode.h wli-2.6.0-test5-bk12-25/fs/xfs/xfs_dinode.h --- linux-2.6.0-test5/fs/xfs/xfs_dinode.h 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/xfs_dinode.h 2003-09-25 19:16:10.000000000 -0700 @@ -471,13 +471,21 @@ xfs_dinode_t *xfs_buf_to_dinode(struct x * There should be a one-to-one correspondence between these flags and the * XFS_XFLAG_s. */ -#define XFS_DIFLAG_REALTIME_BIT 0 /* file's blocks come from rt area */ -#define XFS_DIFLAG_PREALLOC_BIT 1 /* file space has been preallocated */ -#define XFS_DIFLAG_NEWRTBM_BIT 2 /* for rtbitmap inode, new format */ -#define XFS_DIFLAG_REALTIME (1 << XFS_DIFLAG_REALTIME_BIT) -#define XFS_DIFLAG_PREALLOC (1 << XFS_DIFLAG_PREALLOC_BIT) -#define XFS_DIFLAG_NEWRTBM (1 << XFS_DIFLAG_NEWRTBM_BIT) -#define XFS_DIFLAG_ALL \ - (XFS_DIFLAG_REALTIME|XFS_DIFLAG_PREALLOC|XFS_DIFLAG_NEWRTBM) +#define XFS_DIFLAG_REALTIME_BIT 0 /* file's blocks come from rt area */ +#define XFS_DIFLAG_PREALLOC_BIT 1 /* file space has been preallocated */ +#define XFS_DIFLAG_NEWRTBM_BIT 2 /* for rtbitmap inode, new format */ +#define XFS_DIFLAG_IMMUTABLE_BIT 3 /* inode is immutable */ +#define XFS_DIFLAG_APPEND_BIT 4 /* inode is append-only */ +#define XFS_DIFLAG_SYNC_BIT 5 /* inode is written synchronously */ +#define XFS_DIFLAG_NOATIME_BIT 6 /* do not update atime */ +#define XFS_DIFLAG_NODUMP_BIT 7 /* do not dump */ +#define XFS_DIFLAG_REALTIME (1 << XFS_DIFLAG_REALTIME_BIT) +#define XFS_DIFLAG_PREALLOC (1 << XFS_DIFLAG_PREALLOC_BIT) +#define XFS_DIFLAG_NEWRTBM (1 << XFS_DIFLAG_NEWRTBM_BIT) +#define XFS_DIFLAG_IMMUTABLE (1 << XFS_DIFLAG_IMMUTABLE_BIT) +#define XFS_DIFLAG_APPEND (1 << XFS_DIFLAG_APPEND_BIT) +#define XFS_DIFLAG_SYNC (1 << XFS_DIFLAG_SYNC_BIT) +#define XFS_DIFLAG_NOATIME (1 << XFS_DIFLAG_NOATIME_BIT) +#define XFS_DIFLAG_NODUMP (1 << XFS_DIFLAG_NODUMP_BIT) #endif /* __XFS_DINODE_H__ */ diff -prauN linux-2.6.0-test5/fs/xfs/xfs_dir.c wli-2.6.0-test5-bk12-25/fs/xfs/xfs_dir.c --- linux-2.6.0-test5/fs/xfs/xfs_dir.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/xfs_dir.c 2003-09-25 19:16:10.000000000 -0700 @@ -262,7 +262,7 @@ xfs_dir_createname(xfs_trans_t *trans, x if ((retval = xfs_dir_ino_validate(trans->t_mountp, inum))) return (retval); - XFS_STATS_INC(xfsstats.xs_dir_create); + XFS_STATS_INC(xs_dir_create); /* * Fill in the arg structure for this request. */ @@ -367,7 +367,7 @@ xfs_dir_removename(xfs_trans_t *trans, x int count, totallen, newsize, retval; ASSERT((dp->i_d.di_mode & IFMT) == IFDIR); - XFS_STATS_INC(xfsstats.xs_dir_remove); + XFS_STATS_INC(xs_dir_remove); /* * Fill in the arg structure for this request. */ @@ -411,7 +411,7 @@ xfs_dir_lookup(xfs_trans_t *trans, xfs_i ASSERT((dp->i_d.di_mode & IFMT) == IFDIR); - XFS_STATS_INC(xfsstats.xs_dir_lookup); + XFS_STATS_INC(xs_dir_lookup); /* * Fill in the arg structure for this request. */ @@ -454,7 +454,7 @@ xfs_dir_getdents(xfs_trans_t *trans, xfs int alignment, retval; xfs_dir_put_t put; - XFS_STATS_INC(xfsstats.xs_dir_getdents); + XFS_STATS_INC(xs_dir_getdents); ASSERT((dp->i_d.di_mode & IFMT) == IFDIR); /* diff -prauN linux-2.6.0-test5/fs/xfs/xfs_dir2.c wli-2.6.0-test5-bk12-25/fs/xfs/xfs_dir2.c --- linux-2.6.0-test5/fs/xfs/xfs_dir2.c 2003-09-08 12:50:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/xfs_dir2.c 2003-09-25 19:16:10.000000000 -0700 @@ -63,7 +63,6 @@ #include "xfs_dir2_leaf.h" #include "xfs_dir2_block.h" #include "xfs_dir2_node.h" -#include "xfs_dir2_sf.h" #include "xfs_dir2_trace.h" #include "xfs_error.h" #include "xfs_bit.h" @@ -213,7 +212,7 @@ xfs_dir2_createname( if ((rval = xfs_dir_ino_validate(tp->t_mountp, inum))) { return rval; } - XFS_STATS_INC(xfsstats.xs_dir_create); + XFS_STATS_INC(xs_dir_create); /* * Fill in the arg structure for this request. */ @@ -263,7 +262,7 @@ xfs_dir2_lookup( int v; /* type-checking value */ ASSERT((dp->i_d.di_mode & IFMT) == IFDIR); - XFS_STATS_INC(xfsstats.xs_dir_lookup); + XFS_STATS_INC(xs_dir_lookup); /* * Fill in the arg structure for this request. @@ -321,7 +320,7 @@ xfs_dir2_removename( int v; /* type-checking value */ ASSERT((dp->i_d.di_mode & IFMT) == IFDIR); - XFS_STATS_INC(xfsstats.xs_dir_remove); + XFS_STATS_INC(xs_dir_remove); /* * Fill in the arg structure for this request. */ @@ -371,7 +370,7 @@ xfs_dir2_getdents( int v; /* type-checking value */ ASSERT((dp->i_d.di_mode & IFMT) == IFDIR); - XFS_STATS_INC(xfsstats.xs_dir_getdents); + XFS_STATS_INC(xs_dir_getdents); /* * If our caller has given us a single contiguous aligned memory buffer, * just work directly within that buffer. If it's in user memory, diff -prauN linux-2.6.0-test5/fs/xfs/xfs_dir2_block.c wli-2.6.0-test5-bk12-25/fs/xfs/xfs_dir2_block.c --- linux-2.6.0-test5/fs/xfs/xfs_dir2_block.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/xfs_dir2_block.c 2003-09-25 19:16:10.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000-2002 Silicon Graphics, Inc. All Rights Reserved. + * Copyright (c) 2000-2003 Silicon Graphics, Inc. All Rights Reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of version 2 of the GNU General Public License as @@ -530,10 +530,9 @@ xfs_dir2_block_getdents( p.cook = XFS_DIR2_DB_OFF_TO_DATAPTR(mp, mp->m_dirdatablk, ptr - (char *)block); -#if XFS_BIG_FILESYSTEMS - p.ino = INT_GET(dep->inumber, ARCH_CONVERT) + mp->m_inoadd; -#else p.ino = INT_GET(dep->inumber, ARCH_CONVERT); +#if XFS_BIG_INUMS + p.ino += mp->m_inoadd; #endif p.name = (char *)dep->name; diff -prauN linux-2.6.0-test5/fs/xfs/xfs_dir2_leaf.c wli-2.6.0-test5-bk12-25/fs/xfs/xfs_dir2_leaf.c --- linux-2.6.0-test5/fs/xfs/xfs_dir2_leaf.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/xfs_dir2_leaf.c 2003-09-25 19:16:10.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000-2002 Silicon Graphics, Inc. All Rights Reserved. + * Copyright (c) 2000-2003 Silicon Graphics, Inc. All Rights Reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of version 2 of the GNU General Public License as @@ -1118,10 +1118,9 @@ xfs_dir2_leaf_getdents( p.cook = XFS_DIR2_BYTE_TO_DATAPTR(mp, curoff + length); -#if XFS_BIG_FILESYSTEMS - p.ino = INT_GET(dep->inumber, ARCH_CONVERT) + mp->m_inoadd; -#else p.ino = INT_GET(dep->inumber, ARCH_CONVERT); +#if XFS_BIG_INUMS + p.ino += mp->m_inoadd; #endif p.name = (char *)dep->name; diff -prauN linux-2.6.0-test5/fs/xfs/xfs_dir2_node.c wli-2.6.0-test5-bk12-25/fs/xfs/xfs_dir2_node.c --- linux-2.6.0-test5/fs/xfs/xfs_dir2_node.c 2003-09-08 12:49:50.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/xfs_dir2_node.c 2003-09-25 19:16:10.000000000 -0700 @@ -1612,7 +1612,8 @@ xfs_dir2_node_addname_int( if (XFS_DIR2_DB_TO_FDB(mp, dbno) != fbno) { cmn_err(CE_ALERT, "xfs_dir2_node_addname_int: needed block %lld, got %lld\n", - XFS_DIR2_DB_TO_FDB(mp, dbno), fbno); + (long long)XFS_DIR2_DB_TO_FDB(mp, dbno), + (long long)fbno); XFS_ERROR_REPORT("xfs_dir2_node_addname_int", XFS_ERRLEVEL_LOW, mp); return XFS_ERROR(EFSCORRUPTED); diff -prauN linux-2.6.0-test5/fs/xfs/xfs_dir2_sf.c wli-2.6.0-test5-bk12-25/fs/xfs/xfs_dir2_sf.c --- linux-2.6.0-test5/fs/xfs/xfs_dir2_sf.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/xfs_dir2_sf.c 2003-09-25 19:16:10.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000-2002 Silicon Graphics, Inc. All Rights Reserved. + * Copyright (c) 2000-2003 Silicon Graphics, Inc. All Rights Reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of version 2 of the GNU General Public License as @@ -79,10 +79,10 @@ static void xfs_dir2_sf_check(xfs_da_arg #else #define xfs_dir2_sf_check(args) #endif /* DEBUG */ -#if XFS_BIG_FILESYSTEMS +#if XFS_BIG_INUMS static void xfs_dir2_sf_toino4(xfs_da_args_t *args); static void xfs_dir2_sf_toino8(xfs_da_args_t *args); -#endif /* XFS_BIG_FILESYSTEMS */ +#endif /* XFS_BIG_INUMS */ /* * Given a block directory (dp/block), calculate its size as a shortform (sf) @@ -136,7 +136,7 @@ xfs_dir2_block_sfsize( isdotdot = dep->namelen == 2 && dep->name[0] == '.' && dep->name[1] == '.'; -#if XFS_BIG_FILESYSTEMS +#if XFS_BIG_INUMS if (!isdot) i8count += INT_GET(dep->inumber, ARCH_CONVERT) > XFS_DIR2_MAX_SHORT_INUM; #endif @@ -324,7 +324,8 @@ xfs_dir2_sf_addname( */ add_entsize = XFS_DIR2_SF_ENTSIZE_BYNAME(sfp, args->namelen); incr_isize = add_entsize; -#if XFS_BIG_FILESYSTEMS + objchange = 0; +#if XFS_BIG_INUMS /* * Do we have to change to 8 byte inodes? */ @@ -340,10 +341,7 @@ xfs_dir2_sf_addname( ((uint)sizeof(xfs_dir2_ino8_t) - (uint)sizeof(xfs_dir2_ino4_t)); objchange = 1; - } else - objchange = 0; -#else - objchange = 0; + } #endif old_isize = (int)dp->i_d.di_size; new_isize = old_isize + incr_isize; @@ -383,7 +381,7 @@ xfs_dir2_sf_addname( */ else { ASSERT(pick == 2); -#if XFS_BIG_FILESYSTEMS +#if XFS_BIG_INUMS if (objchange) xfs_dir2_sf_toino8(args); #endif @@ -437,7 +435,7 @@ xfs_dir2_sf_addname_easy( * Update the header and inode. */ sfp->hdr.count++; -#if XFS_BIG_FILESYSTEMS +#if XFS_BIG_INUMS if (args->inumber > XFS_DIR2_MAX_SHORT_INUM) sfp->hdr.i8count++; #endif @@ -526,7 +524,7 @@ xfs_dir2_sf_addname_hard( XFS_DIR2_SF_PUT_INUMBER_ARCH(sfp, &args->inumber, XFS_DIR2_SF_INUMBERP(sfep), ARCH_CONVERT); sfp->hdr.count++; -#if XFS_BIG_FILESYSTEMS +#if XFS_BIG_INUMS if (args->inumber > XFS_DIR2_MAX_SHORT_INUM && !objchange) sfp->hdr.i8count++; #endif @@ -603,7 +601,7 @@ xfs_dir2_sf_addname_pick( /* * If changing the inode number size, do it the hard way. */ -#if XFS_BIG_FILESYSTEMS +#if XFS_BIG_INUMS if (objchange) { return 2; } @@ -657,9 +655,7 @@ xfs_dir2_sf_check( XFS_DIR2_DATA_ENTSIZE(sfep->namelen); } ASSERT(i8count == sfp->hdr.i8count); -#if !XFS_BIG_FILESYSTEMS - ASSERT(i8count == 0); -#endif + ASSERT(XFS_BIG_INUMS || i8count == 0); ASSERT((char *)sfep - (char *)sfp == dp->i_d.di_size); ASSERT(offset + (sfp->hdr.count + 2) * (uint)sizeof(xfs_dir2_leaf_entry_t) + @@ -779,10 +775,9 @@ xfs_dir2_sf_getdents( XFS_DIR2_DATA_DOT_OFFSET)) { p.cook = XFS_DIR2_DB_OFF_TO_DATAPTR(mp, 0, XFS_DIR2_DATA_DOTDOT_OFFSET); -#if XFS_BIG_FILESYSTEMS - p.ino = dp->i_ino + mp->m_inoadd; -#else p.ino = dp->i_ino; +#if XFS_BIG_INUMS + p.ino += mp->m_inoadd; #endif p.name = "."; p.namelen = 1; @@ -805,11 +800,10 @@ xfs_dir2_sf_getdents( XFS_DIR2_DATA_DOTDOT_OFFSET)) { p.cook = XFS_DIR2_DB_OFF_TO_DATAPTR(mp, mp->m_dirdatablk, XFS_DIR2_DATA_FIRST_OFFSET); -#if XFS_BIG_FILESYSTEMS - p.ino = XFS_DIR2_SF_GET_INUMBER_ARCH(sfp, &sfp->hdr.parent, ARCH_CONVERT) + - mp->m_inoadd; -#else - p.ino = XFS_DIR2_SF_GET_INUMBER_ARCH(sfp, &sfp->hdr.parent, ARCH_CONVERT); + p.ino = XFS_DIR2_SF_GET_INUMBER_ARCH(sfp, &sfp->hdr.parent, + ARCH_CONVERT); +#if XFS_BIG_INUMS + p.ino += mp->m_inoadd; #endif p.name = ".."; p.namelen = 2; @@ -843,13 +837,10 @@ xfs_dir2_sf_getdents( XFS_DIR2_SF_GET_OFFSET_ARCH(sfep, ARCH_CONVERT) + XFS_DIR2_DATA_ENTSIZE(p.namelen)); -#if XFS_BIG_FILESYSTEMS - p.ino = XFS_DIR2_SF_GET_INUMBER_ARCH(sfp, - XFS_DIR2_SF_INUMBERP(sfep), ARCH_CONVERT) + - mp->m_inoadd; -#else p.ino = XFS_DIR2_SF_GET_INUMBER_ARCH(sfp, XFS_DIR2_SF_INUMBERP(sfep), ARCH_CONVERT); +#if XFS_BIG_INUMS + p.ino += mp->m_inoadd; #endif p.name = (char *)sfep->name; @@ -1014,7 +1005,7 @@ xfs_dir2_sf_removename( */ xfs_idata_realloc(dp, newsize - oldsize, XFS_DATA_FORK); sfp = (xfs_dir2_sf_t *)dp->i_df.if_u1.if_data; -#if XFS_BIG_FILESYSTEMS +#if XFS_BIG_INUMS /* * Are we changing inode number size? */ @@ -1039,10 +1030,10 @@ xfs_dir2_sf_replace( { xfs_inode_t *dp; /* incore directory inode */ int i; /* entry index */ -#if XFS_BIG_FILESYSTEMS || defined(DEBUG) +#if XFS_BIG_INUMS || defined(DEBUG) xfs_ino_t ino=0; /* entry old inode number */ #endif -#if XFS_BIG_FILESYSTEMS +#if XFS_BIG_INUMS int i8elevated; /* sf_toino8 set i8count=1 */ #endif xfs_dir2_sf_entry_t *sfep; /* shortform directory entry */ @@ -1063,7 +1054,7 @@ xfs_dir2_sf_replace( ASSERT(dp->i_df.if_u1.if_data != NULL); sfp = (xfs_dir2_sf_t *)dp->i_df.if_u1.if_data; ASSERT(dp->i_d.di_size >= XFS_DIR2_SF_HDR_SIZE(sfp->hdr.i8count)); -#if XFS_BIG_FILESYSTEMS +#if XFS_BIG_INUMS /* * New inode number is large, and need to convert to 8-byte inodes. */ @@ -1101,7 +1092,7 @@ xfs_dir2_sf_replace( */ if (args->namelen == 2 && args->name[0] == '.' && args->name[1] == '.') { -#if XFS_BIG_FILESYSTEMS || defined(DEBUG) +#if XFS_BIG_INUMS || defined(DEBUG) ino = XFS_DIR2_SF_GET_INUMBER_ARCH(sfp, &sfp->hdr.parent, ARCH_CONVERT); ASSERT(args->inumber != ino); #endif @@ -1117,7 +1108,7 @@ xfs_dir2_sf_replace( if (sfep->namelen == args->namelen && sfep->name[0] == args->name[0] && memcmp(args->name, sfep->name, args->namelen) == 0) { -#if XFS_BIG_FILESYSTEMS || defined(DEBUG) +#if XFS_BIG_INUMS || defined(DEBUG) ino = XFS_DIR2_SF_GET_INUMBER_ARCH(sfp, XFS_DIR2_SF_INUMBERP(sfep), ARCH_CONVERT); ASSERT(args->inumber != ino); @@ -1132,14 +1123,14 @@ xfs_dir2_sf_replace( */ if (i == sfp->hdr.count) { ASSERT(args->oknoent); -#if XFS_BIG_FILESYSTEMS +#if XFS_BIG_INUMS if (i8elevated) xfs_dir2_sf_toino4(args); #endif return XFS_ERROR(ENOENT); } } -#if XFS_BIG_FILESYSTEMS +#if XFS_BIG_INUMS /* * See if the old number was large, the new number is small. */ @@ -1172,7 +1163,7 @@ xfs_dir2_sf_replace( return 0; } -#if XFS_BIG_FILESYSTEMS +#if XFS_BIG_INUMS /* * Convert from 8-byte inode numbers to 4-byte inode numbers. * The last 8-byte inode number is gone, but the count is still 1. @@ -1325,4 +1316,4 @@ xfs_dir2_sf_toino8( dp->i_d.di_size = newsize; xfs_trans_log_inode(args->trans, dp, XFS_ILOG_CORE | XFS_ILOG_DDATA); } -#endif /* XFS_BIG_FILESYSTEMS */ +#endif /* XFS_BIG_INUMS */ diff -prauN linux-2.6.0-test5/fs/xfs/xfs_dir_leaf.c wli-2.6.0-test5-bk12-25/fs/xfs/xfs_dir_leaf.c --- linux-2.6.0-test5/fs/xfs/xfs_dir_leaf.c 2003-09-08 12:50:23.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/xfs_dir_leaf.c 2003-09-25 19:16:10.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000-2002 Silicon Graphics, Inc. All Rights Reserved. + * Copyright (c) 2000-2003 Silicon Graphics, Inc. All Rights Reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of version 2 of the GNU General Public License as @@ -561,10 +561,9 @@ xfs_dir_shortform_getdents(xfs_inode_t * if (sbp->seqno == 0 || sbp == sbuf) lastresid = uio->uio_resid; XFS_PUT_COOKIE(p.cook, mp, 0, sbp[1].seqno, sbp[1].hash); -#if XFS_BIG_FILESYSTEMS - p.ino = sbp->ino + mp->m_inoadd; -#else p.ino = sbp->ino; +#if XFS_BIG_INUMS + p.ino += mp->m_inoadd; #endif p.name = sbp->name; p.namelen = sbp->namelen; @@ -1835,7 +1834,6 @@ xfs_dir_leaf_moveents(xfs_dir_leafblock_ entry_d = &leaf_d->entries[start_d]; for (i = 0; i < count; entry_s++, entry_d++, i++) { ASSERT(INT_GET(entry_s->nameidx, ARCH_CONVERT) >= INT_GET(hdr_s->firstused, ARCH_CONVERT)); - ASSERT(entry_s->namelen < MAXNAMELEN); tmp = XFS_DIR_LEAF_ENTSIZE_BYENTRY(entry_s); INT_MOD(hdr_d->firstused, ARCH_CONVERT, -(tmp)); entry_d->hashval = entry_s->hashval; /* INT_: direct copy */ @@ -2142,10 +2140,9 @@ xfs_dir_leaf_getdents_int( * then restore the UIO to the first entry in the current * run of equal-hashval entries (probably one 1 entry long). */ -#if XFS_BIG_FILESYSTEMS - p.ino = XFS_GET_DIR_INO_ARCH(mp, namest->inumber, ARCH_CONVERT) + mp->m_inoadd; -#else p.ino = XFS_GET_DIR_INO_ARCH(mp, namest->inumber, ARCH_CONVERT); +#if XFS_BIG_INUMS + p.ino += mp->m_inoadd; #endif p.name = (char *)namest->name; p.namelen = entry->namelen; diff -prauN linux-2.6.0-test5/fs/xfs/xfs_error.c wli-2.6.0-test5-bk12-25/fs/xfs/xfs_error.c --- linux-2.6.0-test5/fs/xfs/xfs_error.c 2003-09-08 12:50:30.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/xfs_error.c 2003-09-25 19:16:10.000000000 -0700 @@ -238,7 +238,7 @@ xfs_fs_cmn_err(int level, xfs_mount_t *m } void -xfs_cmn_err(uint64_t panic_tag, int level, xfs_mount_t *mp, char *fmt, ...) +xfs_cmn_err(int panic_tag, int level, xfs_mount_t *mp, char *fmt, ...) { va_list ap; diff -prauN linux-2.6.0-test5/fs/xfs/xfs_error.h wli-2.6.0-test5-bk12-25/fs/xfs/xfs_error.h --- linux-2.6.0-test5/fs/xfs/xfs_error.h 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/xfs_error.h 2003-09-25 19:16:10.000000000 -0700 @@ -33,7 +33,7 @@ #define __XFS_ERROR_H__ #define prdev(fmt,dev,args...) \ - printk("XFS: device 0x%x- " fmt "\n", (unsigned)dev, ## args) + printk("XFS: device %u:%u- " fmt "\n", MAJOR(dev), MINOR(dev), ## args) #define XFS_ERECOVER 1 /* Failure to recover log */ #define XFS_ELOGSTAT 2 /* Failure to stat log in user space */ @@ -177,18 +177,18 @@ int xfs_errortag_clearall_umount(int64_ * sysctl. update xfs_max[XFS_PARAM] if * more are added. */ -#define XFS_NO_PTAG 0LL -#define XFS_PTAG_IFLUSH 0x0000000000000001LL -#define XFS_PTAG_LOGRES 0x0000000000000002LL -#define XFS_PTAG_AILDELETE 0x0000000000000004LL -#define XFS_PTAG_ERROR_REPORT 0x0000000000000008LL -#define XFS_PTAG_SHUTDOWN_CORRUPT 0x0000000000000010LL -#define XFS_PTAG_SHUTDOWN_IOERROR 0x0000000000000020LL -#define XFS_PTAG_SHUTDOWN_LOGERROR 0x0000000000000040LL +#define XFS_NO_PTAG 0 +#define XFS_PTAG_IFLUSH 0x00000001 +#define XFS_PTAG_LOGRES 0x00000002 +#define XFS_PTAG_AILDELETE 0x00000004 +#define XFS_PTAG_ERROR_REPORT 0x00000008 +#define XFS_PTAG_SHUTDOWN_CORRUPT 0x00000010 +#define XFS_PTAG_SHUTDOWN_IOERROR 0x00000020 +#define XFS_PTAG_SHUTDOWN_LOGERROR 0x00000040 struct xfs_mount; /* PRINTFLIKE4 */ -void xfs_cmn_err(uint64_t panic_tag, int level, struct xfs_mount *mp, +void xfs_cmn_err(int panic_tag, int level, struct xfs_mount *mp, char *fmt, ...); /* PRINTFLIKE3 */ void xfs_fs_cmn_err(int level, struct xfs_mount *mp, char *fmt, ...); diff -prauN linux-2.6.0-test5/fs/xfs/xfs_fs.h wli-2.6.0-test5-bk12-25/fs/xfs/xfs_fs.h --- linux-2.6.0-test5/fs/xfs/xfs_fs.h 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/xfs_fs.h 2003-09-25 19:16:10.000000000 -0700 @@ -69,12 +69,14 @@ struct fsxattr { * There should be a one-to-one correspondence between these flags and the * XFS_DIFLAG_s. */ -#define XFS_XFLAG_REALTIME 0x00000001 -#define XFS_XFLAG_PREALLOC 0x00000002 +#define XFS_XFLAG_REALTIME 0x00000001 /* data in realtime volume */ +#define XFS_XFLAG_PREALLOC 0x00000002 /* preallocated file extents */ +#define XFS_XFLAG_IMMUTABLE 0x00000008 /* file cannot be modified */ +#define XFS_XFLAG_APPEND 0x00000010 /* all writes append */ +#define XFS_XFLAG_SYNC 0x00000020 /* all writes synchronous */ +#define XFS_XFLAG_NOATIME 0x00000040 /* do not update access time */ +#define XFS_XFLAG_NODUMP 0x00000080 /* do not include in backups */ #define XFS_XFLAG_HASATTR 0x80000000 /* no DIFLAG for this */ -#define XFS_XFLAG_ALL \ - ( XFS_XFLAG_REALTIME|XFS_XFLAG_PREALLOC|XFS_XFLAG_HASATTR ) - /* * Structure for XFS_IOC_GETBMAP. diff -prauN linux-2.6.0-test5/fs/xfs/xfs_fsops.c wli-2.6.0-test5-bk12-25/fs/xfs/xfs_fsops.c --- linux-2.6.0-test5/fs/xfs/xfs_fsops.c 2003-09-08 12:50:23.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/xfs_fsops.c 2003-09-25 19:16:10.000000000 -0700 @@ -53,7 +53,6 @@ #include "xfs_rw.h" #include "xfs_trans_space.h" #include "xfs_rtalloc.h" -#include "xfs_dir.h" #include "xfs_dir2.h" #include "xfs_attr_sf.h" #include "xfs_dir_sf.h" @@ -172,7 +171,7 @@ xfs_growfs_data_private( if (nb < mp->m_sb.sb_dblocks) return XFS_ERROR(EINVAL); } - new = in->newblocks - mp->m_sb.sb_dblocks; + new = nb - mp->m_sb.sb_dblocks; oagcount = mp->m_sb.sb_agcount; if (nagcount > oagcount) { down_write(&mp->m_peraglock); diff -prauN linux-2.6.0-test5/fs/xfs/xfs_ialloc.c wli-2.6.0-test5-bk12-25/fs/xfs/xfs_ialloc.c --- linux-2.6.0-test5/fs/xfs/xfs_ialloc.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/xfs_ialloc.c 2003-09-25 19:16:10.000000000 -0700 @@ -1114,7 +1114,7 @@ xfs_dilocate( agbno = XFS_AGINO_TO_AGBNO(mp, agino); if (agno >= mp->m_sb.sb_agcount || agbno >= mp->m_sb.sb_agblocks || ino != XFS_AGINO_TO_INO(mp, agno, agino)) { -#ifdef DEBUG +#if 0 if (agno >= mp->m_sb.sb_agcount) { xfs_fs_cmn_err(CE_ALERT, mp, "xfs_dilocate: agno (%d) >= " diff -prauN linux-2.6.0-test5/fs/xfs/xfs_iget.c wli-2.6.0-test5-bk12-25/fs/xfs/xfs_iget.c --- linux-2.6.0-test5/fs/xfs/xfs_iget.c 2003-09-08 12:50:33.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/xfs_iget.c 2003-09-25 19:16:10.000000000 -0700 @@ -204,7 +204,7 @@ again: if (ip->i_flags & XFS_IRECLAIM) { read_unlock(&ih->ih_lock); delay(1); - XFS_STATS_INC(xfsstats.xs_ig_frecycle); + XFS_STATS_INC(xs_ig_frecycle); goto again; } @@ -212,7 +212,7 @@ again: vn_trace_exit(vp, "xfs_iget.alloc", (inst_t *)__return_address); - XFS_STATS_INC(xfsstats.xs_ig_found); + XFS_STATS_INC(xs_ig_found); ip->i_flags &= ~XFS_IRECLAIMABLE; read_unlock(&ih->ih_lock); @@ -232,7 +232,7 @@ again: if (inode->i_state & (I_FREEING | I_CLEAR)) { read_unlock(&ih->ih_lock); delay(1); - XFS_STATS_INC(xfsstats.xs_ig_frecycle); + XFS_STATS_INC(xs_ig_frecycle); goto again; } @@ -247,7 +247,7 @@ again: read_unlock(&ih->ih_lock); - XFS_STATS_INC(xfsstats.xs_ig_found); + XFS_STATS_INC(xs_ig_found); finish_inode: if (lock_flags != 0) { @@ -269,7 +269,7 @@ finish_inode: * Inode cache miss: save the hash chain version stamp and unlock * the chain, so we don't deadlock in vn_alloc. */ - XFS_STATS_INC(xfsstats.xs_ig_missed); + XFS_STATS_INC(xs_ig_missed); version = ih->ih_version; @@ -305,7 +305,7 @@ finish_inode: write_unlock(&ih->ih_lock); xfs_idestroy(ip); - XFS_STATS_INC(xfsstats.xs_ig_dup); + XFS_STATS_INC(xs_ig_dup); goto again; } } @@ -442,7 +442,7 @@ xfs_iget( int error; retry: - XFS_STATS_INC(xfsstats.xs_ig_attempts); + XFS_STATS_INC(xs_ig_attempts); if ((inode = iget_locked(XFS_MTOVFS(mp)->vfs_super, ino))) { bhv_desc_t *bdp; @@ -475,7 +475,7 @@ inode_allocate: bdp = vn_bhv_lookup(VN_BHV_HEAD(vp), &xfs_vnodeops); if (bdp == NULL) { - XFS_STATS_INC(xfsstats.xs_ig_dup); + XFS_STATS_INC(xs_ig_dup); goto inode_allocate; } ip = XFS_BHVTOI(bdp); @@ -484,7 +484,7 @@ inode_allocate: newnode = (ip->i_d.di_mode == 0); if (newnode) xfs_iocore_inode_reinit(ip); - XFS_STATS_INC(xfsstats.xs_ig_found); + XFS_STATS_INC(xs_ig_found); *ipp = ip; error = 0; } @@ -604,7 +604,7 @@ xfs_ireclaim(xfs_inode_t *ip) /* * Remove from old hash list and mount list. */ - XFS_STATS_INC(xfsstats.xs_ig_reclaims); + XFS_STATS_INC(xs_ig_reclaims); xfs_iextract(ip); diff -prauN linux-2.6.0-test5/fs/xfs/xfs_inode.c wli-2.6.0-test5-bk12-25/fs/xfs/xfs_inode.c --- linux-2.6.0-test5/fs/xfs/xfs_inode.c 2003-09-08 12:50:33.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/xfs_inode.c 2003-09-25 19:16:10.000000000 -0700 @@ -1210,6 +1210,18 @@ xfs_ialloc( break; case IFREG: case IFDIR: + if (pip->i_d.di_flags & + (XFS_DIFLAG_NOATIME|XFS_DIFLAG_NODUMP|XFS_DIFLAG_SYNC)) { + if ((pip->i_d.di_flags & XFS_DIFLAG_NOATIME) && + xfs_inherit_noatime) + ip->i_d.di_flags |= XFS_DIFLAG_NOATIME; + if ((pip->i_d.di_flags & XFS_DIFLAG_NODUMP) && + xfs_inherit_nodump) + ip->i_d.di_flags |= XFS_DIFLAG_NODUMP; + if ((pip->i_d.di_flags & XFS_DIFLAG_SYNC) && + xfs_inherit_sync) + ip->i_d.di_flags |= XFS_DIFLAG_SYNC; + } case IFLNK: ip->i_d.di_format = XFS_DINODE_FMT_EXTENTS; ip->i_df.if_flags = XFS_IFEXTENTS; @@ -2884,7 +2896,7 @@ xfs_iflush( enum { INT_DELWRI = (1 << 0), INT_ASYNC = (1 << 1) }; SPLDECL(s); - XFS_STATS_INC(xfsstats.xs_iflush_count); + XFS_STATS_INC(xs_iflush_count); ASSERT(ismrlocked(&ip->i_lock, MR_UPDATE|MR_ACCESS)); ASSERT(valusema(&ip->i_flock) <= 0); @@ -3057,8 +3069,8 @@ xfs_iflush( mutex_spinunlock(&ch->ch_lock, s); if (clcount) { - XFS_STATS_INC(xfsstats.xs_icluster_flushcnt); - XFS_STATS_ADD(xfsstats.xs_icluster_flushinode, clcount); + XFS_STATS_INC(xs_icluster_flushcnt); + XFS_STATS_ADD(xs_icluster_flushinode, clcount); } /* @@ -3500,6 +3512,9 @@ xfs_iaccess( if (IS_RDONLY(inode) && (S_ISREG(imode) || S_ISDIR(imode) || S_ISLNK(imode))) return XFS_ERROR(EROFS); + + if (IS_IMMUTABLE(inode)) + return XFS_ERROR(EACCES); } /* @@ -3623,7 +3638,7 @@ xfs_ichgtime(xfs_inode_t *ip, * Don't update access timestamps on reads if mounted "noatime" * Throw it away if anyone asks us. */ - if (ip->i_mount->m_flags & XFS_MOUNT_NOATIME && + if ((ip->i_mount->m_flags & XFS_MOUNT_NOATIME || IS_NOATIME(inode)) && ((flags & (XFS_ICHGTIME_ACC|XFS_ICHGTIME_MOD|XFS_ICHGTIME_CHG)) == XFS_ICHGTIME_ACC)) return; @@ -3657,7 +3672,7 @@ xfs_ichgtime(xfs_inode_t *ip, SYNCHRONIZE(); ip->i_update_core = 1; if (!(inode->i_state & I_LOCK)) - mark_inode_dirty(inode); + mark_inode_dirty_sync(inode); } #ifdef XFS_ILOCK_TRACE diff -prauN linux-2.6.0-test5/fs/xfs/xfs_inum.h wli-2.6.0-test5-bk12-25/fs/xfs/xfs_inum.h --- linux-2.6.0-test5/fs/xfs/xfs_inum.h 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/xfs_inum.h 2003-09-25 19:16:10.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved. + * Copyright (c) 2000-2003 Silicon Graphics, Inc. All Rights Reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of version 2 of the GNU General Public License as @@ -47,7 +47,7 @@ typedef __uint32_t xfs_agino_t; /* withi * Used in some places where having 64-bits in the 32-bit kernels * costs too much. */ -#if XFS_BIG_FILESYSTEMS +#if XFS_BIG_INUMS typedef xfs_ino_t xfs_intino_t; #else typedef __uint32_t xfs_intino_t; @@ -162,7 +162,7 @@ xfs_agino_t xfs_offbno_to_agino(struct x ((xfs_agino_t)(((b) << XFS_INO_OFFSET_BITS(mp)) | (o))) #endif -#if XFS_BIG_FILESYSTEMS +#if XFS_BIG_INUMS #define XFS_MAXINUMBER ((xfs_ino_t)((1ULL << 56) - 1ULL)) #define XFS_INO64_OFFSET ((xfs_ino_t)(1ULL << 32)) #else diff -prauN linux-2.6.0-test5/fs/xfs/xfs_iocore.c wli-2.6.0-test5-bk12-25/fs/xfs/xfs_iocore.c --- linux-2.6.0-test5/fs/xfs/xfs_iocore.c 2003-09-08 12:50:20.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/xfs_iocore.c 2003-09-25 19:16:10.000000000 -0700 @@ -61,7 +61,6 @@ #include "xfs_rw.h" #include "xfs_quota.h" #include "xfs_trans_space.h" -#include "xfs_dmapi.h" STATIC xfs_fsize_t diff -prauN linux-2.6.0-test5/fs/xfs/xfs_itable.c wli-2.6.0-test5-bk12-25/fs/xfs/xfs_itable.c --- linux-2.6.0-test5/fs/xfs/xfs_itable.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/xfs_itable.c 2003-09-25 19:16:10.000000000 -0700 @@ -156,13 +156,23 @@ xfs_bulkstat_one( /* * convert di_flags to bs_xflags. */ - di_flags=INT_GET(dic->di_flags, arch); + di_flags = INT_GET(dic->di_flags, arch); buf->bs_xflags = ((di_flags & XFS_DIFLAG_REALTIME) ? XFS_XFLAG_REALTIME : 0) | ((di_flags & XFS_DIFLAG_PREALLOC) ? XFS_XFLAG_PREALLOC : 0) | + ((di_flags & XFS_DIFLAG_IMMUTABLE) ? + XFS_XFLAG_IMMUTABLE : 0) | + ((di_flags & XFS_DIFLAG_APPEND) ? + XFS_XFLAG_APPEND : 0) | + ((di_flags & XFS_DIFLAG_SYNC) ? + XFS_XFLAG_SYNC : 0) | + ((di_flags & XFS_DIFLAG_NOATIME) ? + XFS_XFLAG_NOATIME : 0) | + ((di_flags & XFS_DIFLAG_NODUMP) ? + XFS_XFLAG_NODUMP : 0) | (XFS_CFORK_Q_ARCH(dic, arch) ? XFS_XFLAG_HASATTR : 0); diff -prauN linux-2.6.0-test5/fs/xfs/xfs_log.c wli-2.6.0-test5-bk12-25/fs/xfs/xfs_log.c --- linux-2.6.0-test5/fs/xfs/xfs_log.c 2003-09-08 12:50:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/xfs_log.c 2003-09-25 19:16:10.000000000 -0700 @@ -345,7 +345,7 @@ xfs_log_force(xfs_mount_t *mp, ASSERT(flags & XFS_LOG_FORCE); - XFS_STATS_INC(xfsstats.xs_log_force); + XFS_STATS_INC(xs_log_force); if ((log->l_flags & XLOG_IO_ERROR) == 0) { if (lsn == 0) @@ -446,7 +446,7 @@ xfs_log_reserve(xfs_mount_t *mp, if (XLOG_FORCED_SHUTDOWN(log)) return XFS_ERROR(EIO); - XFS_STATS_INC(xfsstats.xs_try_logspace); + XFS_STATS_INC(xs_try_logspace); if (*ticket != NULL) { ASSERT(flags & XFS_LOG_PERM_RESERV); @@ -497,7 +497,8 @@ xfs_log_mount(xfs_mount_t *mp, #if defined(DEBUG) || defined(XLOG_NOLOG) if (! xlog_debug) { - cmn_err(CE_NOTE, "log dev: 0x%x", log_dev); + cmn_err(CE_NOTE, "log dev: %u:%u", + MAJOR(log_dev), MINOR(log_dev)); return 0; } #endif @@ -1428,7 +1429,7 @@ xlog_sync(xlog_t *log, int split = 0; /* split write into two regions */ int error; - XFS_STATS_INC(xfsstats.xs_log_writes); + XFS_STATS_INC(xs_log_writes); ASSERT(iclog->ic_refcnt == 0); /* Round out the log write size */ @@ -1477,7 +1478,7 @@ xlog_sync(xlog_t *log, /* Add for LR header */ count += log->l_iclog_hsize; - XFS_STATS_ADD(xfsstats.xs_log_blocks, BTOBB(count)); + XFS_STATS_ADD(xs_log_blocks, BTOBB(count)); /* Do we need to split this write into 2 parts? */ if (XFS_BUF_ADDR(bp) + BTOBB(count) > log->l_logBBsize) { @@ -2308,7 +2309,7 @@ restart: log->l_flushcnt++; LOG_UNLOCK(log, s); xlog_trace_iclog(iclog, XLOG_TRACE_SLEEP_FLUSH); - XFS_STATS_INC(xfsstats.xs_log_noiclogs); + XFS_STATS_INC(xs_log_noiclogs); /* Ensure that log writes happen */ psema(&log->l_flushsema, PINOD); goto restart; @@ -2421,7 +2422,7 @@ xlog_grant_log_space(xlog_t *log, if (XLOG_FORCED_SHUTDOWN(log)) goto error_return; - XFS_STATS_INC(xfsstats.xs_sleep_logspace); + XFS_STATS_INC(xs_sleep_logspace); sv_wait(&tic->t_sema, PINOD|PLTWAIT, &log->l_grant_lock, s); /* * If we got an error, and the filesystem is shutting down, @@ -2447,7 +2448,7 @@ redo: XLOG_INS_TICKETQ(log->l_reserve_headq, tic); xlog_trace_loggrant(log, tic, "xlog_grant_log_space: sleep 2"); - XFS_STATS_INC(xfsstats.xs_sleep_logspace); + XFS_STATS_INC(xs_sleep_logspace); sv_wait(&tic->t_sema, PINOD|PLTWAIT, &log->l_grant_lock, s); if (XLOG_FORCED_SHUTDOWN(log)) { @@ -2558,7 +2559,7 @@ xlog_regrant_write_log_space(xlog_t * xlog_trace_loggrant(log, tic, "xlog_regrant_write_log_space: sleep 1"); - XFS_STATS_INC(xfsstats.xs_sleep_logspace); + XFS_STATS_INC(xs_sleep_logspace); sv_wait(&tic->t_sema, PINOD|PLTWAIT, &log->l_grant_lock, s); @@ -2587,7 +2588,7 @@ redo: if (free_bytes < need_bytes) { if ((tic->t_flags & XLOG_TIC_IN_Q) == 0) XLOG_INS_TICKETQ(log->l_write_headq, tic); - XFS_STATS_INC(xfsstats.xs_sleep_logspace); + XFS_STATS_INC(xs_sleep_logspace); sv_wait(&tic->t_sema, PINOD|PLTWAIT, &log->l_grant_lock, s); /* If we're shutting down, this tic is already off the queue */ @@ -2952,7 +2953,7 @@ maybe_sleep: LOG_UNLOCK(log, s); return XFS_ERROR(EIO); } - XFS_STATS_INC(xfsstats.xs_log_force_sleep); + XFS_STATS_INC(xs_log_force_sleep); sv_wait(&iclog->ic_forcesema, PINOD, &log->l_icloglock, s); /* * No need to grab the log lock here since we're @@ -3035,7 +3036,7 @@ try_again: (iclog->ic_prev->ic_state & (XLOG_STATE_WANT_SYNC | XLOG_STATE_SYNCING))) { ASSERT(!(iclog->ic_state & XLOG_STATE_IOERROR)); - XFS_STATS_INC(xfsstats.xs_log_force_sleep); + XFS_STATS_INC(xs_log_force_sleep); sv_wait(&iclog->ic_prev->ic_writesema, PSWP, &log->l_icloglock, s); already_slept = 1; @@ -3061,7 +3062,7 @@ try_again: LOG_UNLOCK(log, s); return XFS_ERROR(EIO); } - XFS_STATS_INC(xfsstats.xs_log_force_sleep); + XFS_STATS_INC(xs_log_force_sleep); sv_wait(&iclog->ic_forcesema, PSWP, &log->l_icloglock, s); /* * No need to grab the log lock here since we're @@ -3128,7 +3129,7 @@ xlog_state_ticket_alloc(xlog_t *log) * The kmem_zalloc may sleep, so we shouldn't be holding the * global lock. XXXmiken: may want to use zone allocator. */ - buf = (xfs_caddr_t) kmem_zalloc(NBPP, 0); + buf = (xfs_caddr_t) kmem_zalloc(NBPP, KM_SLEEP); s = LOG_LOCK(log); @@ -3427,8 +3428,8 @@ xlog_verify_iclog(xlog_t *log, if (syncing == B_FALSE || (field_offset & 0x1ff)) { clientid = ophead->oh_clientid; } else { - idx = BTOBB((xfs_caddr_t)&(ophead->oh_clientid) - iclog->ic_datap); - if (idx > (XLOG_HEADER_CYCLE_SIZE / BBSIZE)) { + idx = BTOBBT((xfs_caddr_t)&(ophead->oh_clientid) - iclog->ic_datap); + if (idx >= (XLOG_HEADER_CYCLE_SIZE / BBSIZE)) { j = idx / (XLOG_HEADER_CYCLE_SIZE / BBSIZE); k = idx % (XLOG_HEADER_CYCLE_SIZE / BBSIZE); clientid = GET_CLIENT_ID(xhdr[j].hic_xheader.xh_cycle_data[k], ARCH_CONVERT); @@ -3445,9 +3446,9 @@ xlog_verify_iclog(xlog_t *log, if (syncing == B_FALSE || (field_offset & 0x1ff)) { op_len = INT_GET(ophead->oh_len, ARCH_CONVERT); } else { - idx = BTOBB((__psint_t)&ophead->oh_len - + idx = BTOBBT((__psint_t)&ophead->oh_len - (__psint_t)iclog->ic_datap); - if (idx > (XLOG_HEADER_CYCLE_SIZE / BBSIZE)) { + if (idx >= (XLOG_HEADER_CYCLE_SIZE / BBSIZE)) { j = idx / (XLOG_HEADER_CYCLE_SIZE / BBSIZE); k = idx % (XLOG_HEADER_CYCLE_SIZE / BBSIZE); op_len = INT_GET(xhdr[j].hic_xheader.xh_cycle_data[k], ARCH_CONVERT); diff -prauN linux-2.6.0-test5/fs/xfs/xfs_log_recover.c wli-2.6.0-test5-bk12-25/fs/xfs/xfs_log_recover.c --- linux-2.6.0-test5/fs/xfs/xfs_log_recover.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/xfs_log_recover.c 2003-09-25 19:16:10.000000000 -0700 @@ -54,7 +54,6 @@ #include "xfs_inode.h" #include "xfs_ialloc_btree.h" #include "xfs_ialloc.h" -#include "xfs_error.h" #include "xfs_log_priv.h" #include "xfs_buf_item.h" #include "xfs_alloc_btree.h" @@ -1360,7 +1359,7 @@ xlog_recover_add_item( { xlog_recover_item_t *item; - item = kmem_zalloc(sizeof(xlog_recover_item_t), 0); + item = kmem_zalloc(sizeof(xlog_recover_item_t), KM_SLEEP); xlog_recover_insert_item_backq(itemq, item); } @@ -1444,7 +1443,7 @@ xlog_recover_add_to_trans( item->ri_total = in_f->ilf_size; ASSERT(item->ri_total <= XLOG_MAX_REGIONS_IN_ITEM); item->ri_buf = kmem_zalloc((item->ri_total * - sizeof(xfs_log_iovec_t)), 0); + sizeof(xfs_log_iovec_t)), KM_SLEEP); } ASSERT(item->ri_total > item->ri_cnt); /* Description region is ri_buf[0] */ @@ -2180,8 +2179,8 @@ xlog_recover_do_buffer_trans( break; default: xfs_fs_cmn_err(CE_ALERT, log->l_mp, - "xfs_log_recover: unknown buffer type 0x%x, dev 0x%x", - buf_f->blf_type, log->l_dev); + "xfs_log_recover: unknown buffer type 0x%x, dev %u:%u", + buf_f->blf_type, MAJOR(log->l_dev), MINOR(log->l_dev)); XFS_ERROR_REPORT("xlog_recover_do_buffer_trans", XFS_ERRLEVEL_LOW, log->l_mp); return XFS_ERROR(EFSCORRUPTED); diff -prauN linux-2.6.0-test5/fs/xfs/xfs_mount.c wli-2.6.0-test5-bk12-25/fs/xfs/xfs_mount.c --- linux-2.6.0-test5/fs/xfs/xfs_mount.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/xfs_mount.c 2003-09-25 19:16:10.000000000 -0700 @@ -222,15 +222,21 @@ xfs_mount_validate_sb( return XFS_ERROR(EWRONGFS); } - if (unlikely(sbp->sb_logstart == 0 && mp->m_logdev_targp == mp->m_ddev_targp)) { - cmn_err(CE_WARN, "XFS: filesystem is marked as having an external log; specify logdev on the\nmount command line."); + if (unlikely( + sbp->sb_logstart == 0 && mp->m_logdev_targp == mp->m_ddev_targp)) { + cmn_err(CE_WARN, + "XFS: filesystem is marked as having an external log; " + "specify logdev on the\nmount command line."); XFS_CORRUPTION_ERROR("xfs_mount_validate_sb(1)", XFS_ERRLEVEL_HIGH, mp, sbp); return XFS_ERROR(EFSCORRUPTED); } - if (unlikely(sbp->sb_logstart != 0 && mp->m_logdev_targp != mp->m_ddev_targp)) { - cmn_err(CE_WARN, "XFS: filesystem is marked as having an internal log; don't specify logdev on\nthe mount command line."); + if (unlikely( + sbp->sb_logstart != 0 && mp->m_logdev_targp != mp->m_ddev_targp)) { + cmn_err(CE_WARN, + "XFS: filesystem is marked as having an internal log; " + "don't specify logdev on\nthe mount command line."); XFS_CORRUPTION_ERROR("xfs_mount_validate_sb(2)", XFS_ERRLEVEL_HIGH, mp, sbp); return XFS_ERROR(EFSCORRUPTED); @@ -276,10 +282,14 @@ xfs_mount_validate_sb( return XFS_ERROR(EFSCORRUPTED); } -#if !XFS_BIG_FILESYSTEMS - if (sbp->sb_dblocks > INT_MAX || sbp->sb_rblocks > INT_MAX) { +#if !XFS_BIG_BLKNOS + if (unlikely( + (sbp->sb_dblocks << (__uint64_t)(sbp->sb_blocklog - BBSHIFT)) + > INT_MAX || + (sbp->sb_rblocks << (__uint64_t)(sbp->sb_blocklog - BBSHIFT)) + > INT_MAX)) { cmn_err(CE_WARN, -"XFS: File systems greater than 1TB not supported on this system."); + "XFS: File system is too large to be mounted on this system."); return XFS_ERROR(E2BIG); } #endif @@ -294,7 +304,7 @@ xfs_mount_validate_sb( /* * Until this is fixed only page-sized or smaller data blocks work. */ - if (sbp->sb_blocksize > PAGE_SIZE) { + if (unlikely(sbp->sb_blocksize > PAGE_SIZE)) { cmn_err(CE_WARN, "XFS: Attempted to mount file system with blocksize %d bytes", sbp->sb_blocksize); @@ -322,9 +332,11 @@ xfs_initialize_perag(xfs_mount_t *mp, in ino = XFS_AGINO_TO_INO(mp, agcount - 1, agino); /* Clear the mount flag if no inode can overflow 32 bits - * on this filesystem. + * on this filesystem, or if specifically requested.. */ - if (ino <= max_inum) { + if ((mp->m_flags & XFS_MOUNT_32BITINOOPT) && ino > max_inum) { + mp->m_flags |= XFS_MOUNT_32BITINODES; + } else { mp->m_flags &= ~XFS_MOUNT_32BITINODES; } diff -prauN linux-2.6.0-test5/fs/xfs/xfs_mount.h wli-2.6.0-test5-bk12-25/fs/xfs/xfs_mount.h --- linux-2.6.0-test5/fs/xfs/xfs_mount.h 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/xfs_mount.h 2003-09-25 19:16:10.000000000 -0700 @@ -95,8 +95,8 @@ typedef int (*xfs_send_data_t)(int, stru xfs_off_t, size_t, int, vrwlock_t *); typedef int (*xfs_send_mmap_t)(struct vm_area_struct *, uint); typedef int (*xfs_send_destroy_t)(struct bhv_desc *, dm_right_t); -typedef int (*xfs_send_namesp_t)(dm_eventtype_t, struct bhv_desc *, - dm_right_t, struct bhv_desc *, dm_right_t, +typedef int (*xfs_send_namesp_t)(dm_eventtype_t, struct vnode *, + dm_right_t, struct vnode *, dm_right_t, char *, char *, mode_t, int, int); typedef void (*xfs_send_unmount_t)(struct vfs *, struct vnode *, dm_right_t, mode_t, int, int); @@ -354,7 +354,7 @@ typedef struct xfs_mount { __uint64_t m_maxioffset; /* maximum inode offset */ __uint64_t m_resblks; /* total reserved blocks */ __uint64_t m_resblks_avail;/* available reserved blocks */ -#if XFS_BIG_FILESYSTEMS +#if XFS_BIG_INUMS xfs_ino_t m_inoadd; /* add value for ino64_offset */ #endif int m_dalign; /* stripe unit */ @@ -392,9 +392,7 @@ typedef struct xfs_mount { #define XFS_MOUNT_WSYNC 0x00000001 /* for nfs - all metadata ops must be synchronous except for space allocations */ -#if XFS_BIG_FILESYSTEMS #define XFS_MOUNT_INO64 0x00000002 -#endif /* 0x00000004 -- currently unused */ /* 0x00000008 -- currently unused */ #define XFS_MOUNT_FS_SHUTDOWN 0x00000010 /* atomic stop of all filesystem @@ -413,10 +411,11 @@ typedef struct xfs_mount { #define XFS_MOUNT_DFLT_IOSIZE 0x00001000 /* set default i/o size */ #define XFS_MOUNT_OSYNCISOSYNC 0x00002000 /* o_sync is REALLY o_sync */ /* osyncisdsync is now default*/ -#define XFS_MOUNT_NOUUID 0x00004000 /* ignore uuid during mount */ -#define XFS_MOUNT_32BITINODES 0x00008000 /* do not create inodes above +#define XFS_MOUNT_32BITINODES 0x00004000 /* do not create inodes above * 32 bits in size */ -#define XFS_MOUNT_NOLOGFLUSH 0x00010000 +#define XFS_MOUNT_32BITINOOPT 0x00008000 /* saved mount option state */ +#define XFS_MOUNT_NOUUID 0x00010000 /* ignore uuid during mount */ +#define XFS_MOUNT_NOLOGFLUSH 0x00020000 /* * Default minimum read and write sizes. diff -prauN linux-2.6.0-test5/fs/xfs/xfs_rename.c wli-2.6.0-test5-bk12-25/fs/xfs/xfs_rename.c --- linux-2.6.0-test5/fs/xfs/xfs_rename.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/xfs_rename.c 2003-09-25 19:16:10.000000000 -0700 @@ -56,7 +56,6 @@ #include "xfs_trans_space.h" #include "xfs_da_btree.h" #include "xfs_dir_leaf.h" -#include "xfs_dmapi.h" /* @@ -293,8 +292,8 @@ xfs_rename( DM_EVENT_ENABLED(target_dir_vp->v_vfsp, target_dp, DM_EVENT_RENAME)) { error = XFS_SEND_NAMESP(mp, DM_EVENT_RENAME, - src_dir_bdp, DM_RIGHT_NULL, - target_dir_bdp, DM_RIGHT_NULL, + src_dir_vp, DM_RIGHT_NULL, + target_dir_vp, DM_RIGHT_NULL, src_name, target_name, 0, 0, 0); if (error) { @@ -650,8 +649,8 @@ std_return: DM_EVENT_ENABLED(target_dir_vp->v_vfsp, target_dp, DM_EVENT_POSTRENAME)) { (void) XFS_SEND_NAMESP (mp, DM_EVENT_POSTRENAME, - src_dir_bdp, DM_RIGHT_NULL, - target_dir_bdp, DM_RIGHT_NULL, + src_dir_vp, DM_RIGHT_NULL, + target_dir_vp, DM_RIGHT_NULL, src_name, target_name, 0, error, 0); } diff -prauN linux-2.6.0-test5/fs/xfs/xfs_rtalloc.h wli-2.6.0-test5-bk12-25/fs/xfs/xfs_rtalloc.h --- linux-2.6.0-test5/fs/xfs/xfs_rtalloc.h 2003-09-08 12:50:17.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/xfs_rtalloc.h 2003-09-25 19:16:10.000000000 -0700 @@ -77,7 +77,7 @@ struct xfs_trans; #define XFS_RTLOBIT(w) xfs_lowbit32(w) #define XFS_RTHIBIT(w) xfs_highbit32(w) -#if XFS_BIG_FILESYSTEMS +#if XFS_BIG_BLKNOS #define XFS_RTBLOCKLOG(b) xfs_highbit64(b) #else #define XFS_RTBLOCKLOG(b) xfs_highbit32(b) diff -prauN linux-2.6.0-test5/fs/xfs/xfs_rw.c wli-2.6.0-test5-bk12-25/fs/xfs/xfs_rw.c --- linux-2.6.0-test5/fs/xfs/xfs_rw.c 2003-09-08 12:50:40.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/xfs_rw.c 2003-09-25 19:16:10.000000000 -0700 @@ -59,7 +59,6 @@ #include "xfs_bmap.h" #include "xfs_acl.h" #include "xfs_mac.h" -#include "xfs_attr.h" #include "xfs_error.h" #include "xfs_buf_item.h" #include "xfs_rw.h" @@ -261,10 +260,11 @@ xfs_ioerror_alert( xfs_daddr_t blkno) { cmn_err(CE_ALERT, - "I/O error in filesystem (\"%s\") meta-data dev 0x%x block 0x%llx" + "I/O error in filesystem (\"%s\") meta-data dev %u:%u block 0x%llx" " (\"%s\") error %d buf count %u", (!mp || !mp->m_fsname) ? "(fs name not set)" : mp->m_fsname, - XFS_BUF_TARGET_DEV(bp), + MAJOR(XFS_BUF_TARGET_DEV(bp)), + MINOR(XFS_BUF_TARGET_DEV(bp)), (__uint64_t)blkno, func, XFS_BUF_GETERROR(bp), diff -prauN linux-2.6.0-test5/fs/xfs/xfs_trans.c wli-2.6.0-test5-bk12-25/fs/xfs/xfs_trans.c --- linux-2.6.0-test5/fs/xfs/xfs_trans.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/xfs_trans.c 2003-09-25 19:16:10.000000000 -0700 @@ -739,7 +739,7 @@ shut_us_down: xfs_trans_free_items(tp, shutdown? XFS_TRANS_ABORT : 0); xfs_trans_free_busy(tp); xfs_trans_free(tp); - XFS_STATS_INC(xfsstats.xs_trans_empty); + XFS_STATS_INC(xs_trans_empty); if (commit_lsn_p) *commit_lsn_p = commit_lsn; return (shutdown); @@ -895,9 +895,9 @@ shut_us_down: if (!error) error = xfs_log_force(mp, commit_lsn, XFS_LOG_FORCE | XFS_LOG_SYNC); - XFS_STATS_INC(xfsstats.xs_trans_sync); + XFS_STATS_INC(xs_trans_sync); } else { - XFS_STATS_INC(xfsstats.xs_trans_async); + XFS_STATS_INC(xs_trans_async); } return (error); diff -prauN linux-2.6.0-test5/fs/xfs/xfs_trans_ail.c wli-2.6.0-test5-bk12-25/fs/xfs/xfs_trans_ail.c --- linux-2.6.0-test5/fs/xfs/xfs_trans_ail.c 2003-09-08 12:50:41.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/xfs_trans_ail.c 2003-09-25 19:16:10.000000000 -0700 @@ -40,7 +40,6 @@ #include "xfs_dir.h" #include "xfs_dmapi.h" #include "xfs_mount.h" -#include "xfs_log.h" #include "xfs_trans_priv.h" #include "xfs_error.h" @@ -119,7 +118,7 @@ xfs_trans_push_ail( return (xfs_lsn_t)0; } - XFS_STATS_INC(xfsstats.xs_push_ail); + XFS_STATS_INC(xs_push_ail); /* * While the item we are looking at is below the given threshold @@ -153,14 +152,14 @@ xfs_trans_push_ail( switch (lock_result) { case XFS_ITEM_SUCCESS: AIL_UNLOCK(mp, s); - XFS_STATS_INC(xfsstats.xs_push_ail_success); + XFS_STATS_INC(xs_push_ail_success); IOP_PUSH(lip); AIL_LOCK(mp,s); break; case XFS_ITEM_PUSHBUF: AIL_UNLOCK(mp, s); - XFS_STATS_INC(xfsstats.xs_push_ail_pushbuf); + XFS_STATS_INC(xs_push_ail_pushbuf); #ifdef XFSRACEDEBUG delay_for_intr(); delay(300); @@ -172,16 +171,16 @@ xfs_trans_push_ail( break; case XFS_ITEM_PINNED: - XFS_STATS_INC(xfsstats.xs_push_ail_pinned); + XFS_STATS_INC(xs_push_ail_pinned); flush_log = 1; break; case XFS_ITEM_LOCKED: - XFS_STATS_INC(xfsstats.xs_push_ail_locked); + XFS_STATS_INC(xs_push_ail_locked); break; case XFS_ITEM_FLUSHING: - XFS_STATS_INC(xfsstats.xs_push_ail_flushing); + XFS_STATS_INC(xs_push_ail_flushing); break; default: @@ -210,7 +209,7 @@ xfs_trans_push_ail( * move forward in the AIL. */ AIL_UNLOCK(mp, s); - XFS_STATS_INC(xfsstats.xs_push_ail_flush); + XFS_STATS_INC(xs_push_ail_flush); xfs_log_force(mp, (xfs_lsn_t)0, XFS_LOG_FORCE); AIL_LOCK(mp, s); } @@ -429,7 +428,7 @@ xfs_trans_next_ail( nlip = xfs_ail_min(&(mp->m_ail)); *gen = (int)mp->m_ail_gen; if (restarts != NULL) { - XFS_STATS_INC(xfsstats.xs_push_ail_restarts); + XFS_STATS_INC(xs_push_ail_restarts); (*restarts)++; } } diff -prauN linux-2.6.0-test5/fs/xfs/xfs_types.h wli-2.6.0-test5-bk12-25/fs/xfs/xfs_types.h --- linux-2.6.0-test5/fs/xfs/xfs_types.h 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/xfs_types.h 2003-09-25 19:16:10.000000000 -0700 @@ -78,20 +78,21 @@ typedef __uint64_t __psunsigned_t; #endif /* __KERNEL__ */ /* - * Some types are conditional based on the selected configuration. - * Set XFS_BIG_FILESYSTEMS=1 or 0 depending on the desired configuration. - * XFS_BIG_FILESYSTEMS needs daddr_t to be 64 bits - * - * On linux right now we are limited to 2^32 512 byte blocks in a - * filesystem, Once this limit is changed, setting this to 1 - * will allow XFS to go larger. With BIG_FILESYSTEMS set to 0 - * a 4K block filesystem could still theoretically be 16Gbytes - * long, so on an ia32 box the 32 bit page index will then be - * the limiting factor. - */ - -#ifndef XFS_BIG_FILESYSTEMS -#define XFS_BIG_FILESYSTEMS 0 + * Some types are conditional depending on the target system. + * XFS_BIG_BLKNOS needs block layer disk addresses to be 64 bits. + * XFS_BIG_INUMS needs the VFS inode number to be 64 bits, as well + * as requiring XFS_BIG_BLKNOS to be set. + */ +#if defined(CONFIG_LBD) || (defined(HAVE_SECTOR_T) && (BITS_PER_LONG == 64)) +# define XFS_BIG_BLKNOS 1 +# if BITS_PER_LONG == 64 +# define XFS_BIG_INUMS 1 +# else +# define XFS_BIG_INUMS 0 +# endif +#else +# define XFS_BIG_BLKNOS 0 +# define XFS_BIG_INUMS 0 #endif typedef __uint32_t xfs_agblock_t; /* blockno in alloc. group */ @@ -126,7 +127,7 @@ typedef __uint64_t xfs_dfilblks_t; /* nu /* * Memory based types are conditional. */ -#if XFS_BIG_FILESYSTEMS +#if XFS_BIG_BLKNOS typedef __uint64_t xfs_fsblock_t; /* blockno in filesystem (agno|agbno) */ typedef __uint64_t xfs_rfsblock_t; /* blockno in filesystem (raw) */ typedef __uint64_t xfs_rtblock_t; /* extent (block) in realtime area */ @@ -196,20 +197,4 @@ typedef enum { XFS_BTNUM_MAX } xfs_btnum_t; - -/* - * Juggle IRIX device numbers - still used in ondisk structures - */ -#define XFS_DEV_BITSMAJOR 14 -#define XFS_DEV_BITSMINOR 18 -#define XFS_DEV_MAXMAJ 0x1ff -#define XFS_DEV_MAXMIN 0x3ffff -#define XFS_DEV_MAJOR(dev) ((int)(((unsigned)(dev)>>XFS_DEV_BITSMINOR) \ - & XFS_DEV_MAXMAJ)) -#define XFS_DEV_MINOR(dev) ((int)((dev)&XFS_DEV_MAXMIN)) -#define XFS_MKDEV(major,minor) ((xfs_dev_t)(((major)<flags & XFSMNT_WSYNC) mp->m_flags |= XFS_MOUNT_WSYNC; -#if XFS_BIG_FILESYSTEMS +#if XFS_BIG_INUMS if (ap->flags & XFSMNT_INO64) { mp->m_flags |= XFS_MOUNT_INO64; mp->m_inoadd = XFS_INO64_OFFSET; @@ -285,7 +283,7 @@ xfs_start_flags( mp->m_flags |= XFS_MOUNT_OSYNCISOSYNC; if (ap->flags & XFSMNT_32BITINODES) - mp->m_flags |= XFS_MOUNT_32BITINODES; + mp->m_flags |= (XFS_MOUNT_32BITINODES | XFS_MOUNT_32BITINOOPT); if (ap->flags & XFSMNT_IOSIZE) { if (ap->iosizelog > XFS_MAX_IO_LOG || @@ -333,9 +331,10 @@ xfs_finish_flags( { /* Fail a mount where the logbuf is smaller then the log stripe */ if (XFS_SB_VERSION_HASLOGV2(&mp->m_sb)) { - if (((ap->logbufsize == -1) && - (mp->m_sb.sb_logsunit > XLOG_BIG_RECORD_BSIZE)) || - (ap->logbufsize < mp->m_sb.sb_logsunit)) { + if ((ap->logbufsize == -1) && + (mp->m_sb.sb_logsunit > XLOG_BIG_RECORD_BSIZE)) { + mp->m_logbsize = mp->m_sb.sb_logsunit; + } else if (ap->logbufsize < mp->m_sb.sb_logsunit) { cmn_err(CE_WARN, "XFS: logbuf size must be greater than or equal to log stripe size"); return XFS_ERROR(EINVAL); @@ -534,11 +533,8 @@ xfs_unmount( rvp = XFS_ITOV(rip); if (vfsp->vfs_flag & VFS_DMI) { - bhv_desc_t *rbdp; - - rbdp = vn_bhv_lookup_unlocked(VN_BHV_HEAD(rvp), &xfs_vnodeops); error = XFS_SEND_NAMESP(mp, DM_EVENT_PREUNMOUNT, - rbdp, DM_RIGHT_NULL, rbdp, DM_RIGHT_NULL, + rvp, DM_RIGHT_NULL, rvp, DM_RIGHT_NULL, NULL, NULL, 0, 0, (mp->m_dmevmask & (1<m_sb); @@ -771,13 +768,13 @@ xfs_statvfs( statp->f_blocks = sbp->sb_dblocks - lsize; statp->f_bfree = statp->f_bavail = sbp->sb_fdblocks; fakeinos = statp->f_bfree << sbp->sb_inopblog; -#if XFS_BIG_FILESYSTEMS +#if XFS_BIG_INUMS fakeinos += mp->m_inoadd; #endif statp->f_files = MIN(sbp->sb_icount + fakeinos, (__uint64_t)XFS_MAXINUMBER); if (mp->m_maxicount) -#if XFS_BIG_FILESYSTEMS +#if XFS_BIG_INUMS if (!mp->m_inoadd) #endif statp->f_files = @@ -785,8 +782,9 @@ xfs_statvfs( statp->f_ffree = statp->f_files - (sbp->sb_icount - sbp->sb_ifree); XFS_SB_UNLOCK(mp, s); - statp->f_fsid.val[0] = mp->m_dev; - statp->f_fsid.val[1] = 0; + id = huge_encode_dev(mp->m_dev); + statp->f_fsid.val[0] = (u32)id; + statp->f_fsid.val[1] = (u32)(id >> 32); statp->f_namelen = MAXNAMELEN - 1; return 0; @@ -1589,6 +1587,7 @@ xfs_vget( #define MNTOPT_NORECOVERY "norecovery" /* don't run XFS recovery */ #define MNTOPT_NOLOGFLUSH "nologflush" /* don't hard flush on log writes */ #define MNTOPT_OSYNCISOSYNC "osyncisosync" /* o_sync is REALLY o_sync */ +#define MNTOPT_64BITINODE "inode64" /* inodes can be allocated anywhere */ int @@ -1675,7 +1674,7 @@ xfs_parseargs( args->flags |= XFSMNT_NORECOVERY; } else if (!strcmp(this_char, MNTOPT_INO64)) { args->flags |= XFSMNT_INO64; -#ifndef XFS_BIG_FILESYSTEMS +#if !XFS_BIG_INUMS printk("XFS: %s option not allowed on this system\n", MNTOPT_INO64); return EINVAL; @@ -1696,6 +1695,13 @@ xfs_parseargs( return EINVAL; } dswidth = simple_strtoul(value, &eov, 10); + } else if (!strcmp(this_char, MNTOPT_64BITINODE)) { + args->flags &= ~XFSMNT_32BITINODES; +#if !XFS_BIG_INUMS + printk("XFS: %s option not allowed on this system\n", + MNTOPT_64BITINODE); + return EINVAL; +#endif } else if (!strcmp(this_char, MNTOPT_NOUUID)) { args->flags |= XFSMNT_NOUUID; } else if (!strcmp(this_char, MNTOPT_NOLOGFLUSH)) { diff -prauN linux-2.6.0-test5/fs/xfs/xfs_vnodeops.c wli-2.6.0-test5-bk12-25/fs/xfs/xfs_vnodeops.c --- linux-2.6.0-test5/fs/xfs/xfs_vnodeops.c 2003-09-08 12:50:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/xfs_vnodeops.c 2003-09-25 19:16:10.000000000 -0700 @@ -66,7 +66,6 @@ #include "xfs_utils.h" #include "xfs_trans_space.h" #include "xfs_dir_leaf.h" -#include "xfs_dmapi.h" #include "xfs_mac.h" #include "xfs_log_priv.h" @@ -153,10 +152,9 @@ xfs_getattr( vap->va_nblocks = XFS_FSB_TO_BB(mp, ip->i_d.di_nblocks + ip->i_delayed_blks); vap->va_fsid = mp->m_dev; -#if XFS_BIG_FILESYSTEMS - vap->va_nodeid = ip->i_ino + mp->m_inoadd; -#else vap->va_nodeid = ip->i_ino; +#if XFS_BIG_INUMS + vap->va_nodeid += mp->m_inoadd; #endif vap->va_nlink = ip->i_d.di_nlink; @@ -266,6 +264,16 @@ xfs_getattr( XFS_XFLAG_REALTIME : 0) | ((ip->i_d.di_flags & XFS_DIFLAG_PREALLOC) ? XFS_XFLAG_PREALLOC : 0) | + ((ip->i_d.di_flags & XFS_DIFLAG_IMMUTABLE) ? + XFS_XFLAG_IMMUTABLE : 0) | + ((ip->i_d.di_flags & XFS_DIFLAG_APPEND) ? + XFS_XFLAG_APPEND : 0) | + ((ip->i_d.di_flags & XFS_DIFLAG_SYNC) ? + XFS_XFLAG_SYNC : 0) | + ((ip->i_d.di_flags & XFS_DIFLAG_NOATIME) ? + XFS_XFLAG_NOATIME : 0) | + ((ip->i_d.di_flags & XFS_DIFLAG_NODUMP) ? + XFS_XFLAG_NODUMP: 0) | (XFS_IFORK_Q(ip) ? XFS_XFLAG_HASATTR : 0); vap->va_extsize = ip->i_d.di_extsize << mp->m_sb.sb_blocklog; @@ -648,6 +656,20 @@ xfs_setattr( goto error_return; } } + + /* + * Can't modify an immutable/append-only file unless + * we have appropriate permission. + */ + if ((mask & XFS_AT_XFLAGS) && + (ip->i_d.di_flags & + (XFS_DIFLAG_IMMUTABLE|XFS_DIFLAG_APPEND) || + (vap->va_xflags & + (XFS_XFLAG_IMMUTABLE | XFS_XFLAG_APPEND))) && + !capable(CAP_LINUX_IMMUTABLE)) { + code = XFS_ERROR(EPERM); + goto error_return; + } } /* @@ -833,6 +855,16 @@ xfs_setattr( ip->i_d.di_flags |= XFS_DIFLAG_REALTIME; ip->i_iocore.io_flags |= XFS_IOCORE_RT; } + if (vap->va_xflags & XFS_XFLAG_IMMUTABLE) + ip->i_d.di_flags |= XFS_DIFLAG_IMMUTABLE; + if (vap->va_xflags & XFS_XFLAG_APPEND) + ip->i_d.di_flags |= XFS_DIFLAG_APPEND; + if (vap->va_xflags & XFS_XFLAG_SYNC) + ip->i_d.di_flags |= XFS_DIFLAG_SYNC; + if (vap->va_xflags & XFS_XFLAG_NOATIME) + ip->i_d.di_flags |= XFS_DIFLAG_NOATIME; + if (vap->va_xflags & XFS_XFLAG_NODUMP) + ip->i_d.di_flags |= XFS_DIFLAG_NODUMP; /* can't set PREALLOC this way, just ignore it */ } xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); @@ -858,7 +890,7 @@ xfs_setattr( if (timeflags && !(flags & ATTR_DMI)) xfs_ichgtime(ip, timeflags); - XFS_STATS_INC(xfsstats.xs_ig_attrchg); + XFS_STATS_INC(xs_ig_attrchg); /* * If this is a synchronous mount, make sure that the @@ -905,7 +937,7 @@ xfs_setattr( if (DM_EVENT_ENABLED(vp->v_vfsp, ip, DM_EVENT_ATTRIBUTE) && !(flags & ATTR_DMI)) { - (void) XFS_SEND_NAMESP(mp, DM_EVENT_ATTRIBUTE, bdp, DM_RIGHT_NULL, + (void) XFS_SEND_NAMESP(mp, DM_EVENT_ATTRIBUTE, vp, DM_RIGHT_NULL, NULL, DM_RIGHT_NULL, NULL, NULL, 0, 0, AT_DELAY_FLAG(flags)); } @@ -1635,7 +1667,7 @@ xfs_release( if ((((ip->i_d.di_mode & IFMT) == IFREG) && ((ip->i_d.di_size > 0) || (VN_CACHED(vp) > 0)) && (ip->i_df.if_flags & XFS_IFEXTENTS)) && - (!(ip->i_d.di_flags & XFS_DIFLAG_PREALLOC))) { + (!(ip->i_d.di_flags & (XFS_DIFLAG_PREALLOC|XFS_DIFLAG_APPEND)))) { if ((error = xfs_inactive_free_eofblocks(mp, ip))) return (error); /* Update linux inode block count after free above */ @@ -1710,7 +1742,7 @@ xfs_inactive( if ((((ip->i_d.di_mode & IFMT) == IFREG) && ((ip->i_d.di_size > 0) || (VN_CACHED(vp) > 0)) && (ip->i_df.if_flags & XFS_IFEXTENTS)) && - (!(ip->i_d.di_flags & XFS_DIFLAG_PREALLOC) || + (!(ip->i_d.di_flags & (XFS_DIFLAG_PREALLOC|XFS_DIFLAG_APPEND)) || (ip->i_delayed_blks != 0))) { if ((error = xfs_inactive_free_eofblocks(mp, ip))) return (VN_INACTIVE_CACHE); @@ -1948,7 +1980,7 @@ xfs_create( if (DM_EVENT_ENABLED(dir_vp->v_vfsp, dp, DM_EVENT_CREATE)) { error = XFS_SEND_NAMESP(mp, DM_EVENT_CREATE, - dir_bdp, DM_RIGHT_NULL, NULL, + dir_vp, DM_RIGHT_NULL, NULL, DM_RIGHT_NULL, name, NULL, dm_di_mode, 0, 0); @@ -2114,8 +2146,8 @@ std_return: DM_EVENT_ENABLED(dir_vp->v_vfsp, XFS_BHVTOI(dir_bdp), DM_EVENT_POSTCREATE)) { (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTCREATE, - dir_bdp, DM_RIGHT_NULL, - *vpp ? vn_bhv_lookup_unlocked(VN_BHV_HEAD(vp), &xfs_vnodeops):NULL, + dir_vp, DM_RIGHT_NULL, + *vpp ? vp:NULL, DM_RIGHT_NULL, name, NULL, dm_di_mode, error, 0); } @@ -2428,7 +2460,7 @@ xfs_remove( namelen = VNAMELEN(dentry); if (DM_EVENT_ENABLED(dir_vp->v_vfsp, dp, DM_EVENT_REMOVE)) { - error = XFS_SEND_NAMESP(mp, DM_EVENT_REMOVE, dir_bdp, + error = XFS_SEND_NAMESP(mp, DM_EVENT_REMOVE, dir_vp, DM_RIGHT_NULL, NULL, DM_RIGHT_NULL, name, NULL, 0, 0, 0); if (error) @@ -2594,7 +2626,7 @@ xfs_remove( if (DM_EVENT_ENABLED(dir_vp->v_vfsp, dp, DM_EVENT_POSTREMOVE)) { (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTREMOVE, - dir_bdp, DM_RIGHT_NULL, + dir_vp, DM_RIGHT_NULL, NULL, DM_RIGHT_NULL, name, NULL, dm_di_mode, error, 0); } @@ -2678,8 +2710,8 @@ xfs_link( if (DM_EVENT_ENABLED(src_vp->v_vfsp, tdp, DM_EVENT_LINK)) { error = XFS_SEND_NAMESP(mp, DM_EVENT_LINK, - target_dir_bdp, DM_RIGHT_NULL, - src_bdp, DM_RIGHT_NULL, + target_dir_vp, DM_RIGHT_NULL, + src_vp, DM_RIGHT_NULL, target_name, NULL, 0, 0, 0); if (error) return error; @@ -2782,8 +2814,8 @@ std_return: if (DM_EVENT_ENABLED(src_vp->v_vfsp, sip, DM_EVENT_POSTLINK)) { (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTLINK, - target_dir_bdp, DM_RIGHT_NULL, - src_bdp, DM_RIGHT_NULL, + target_dir_vp, DM_RIGHT_NULL, + src_vp, DM_RIGHT_NULL, target_name, NULL, 0, error, 0); } return error; @@ -2844,7 +2876,7 @@ xfs_mkdir( if (DM_EVENT_ENABLED(dir_vp->v_vfsp, dp, DM_EVENT_CREATE)) { error = XFS_SEND_NAMESP(mp, DM_EVENT_CREATE, - dir_bdp, DM_RIGHT_NULL, NULL, + dir_vp, DM_RIGHT_NULL, NULL, DM_RIGHT_NULL, dir_name, NULL, dm_di_mode, 0, 0); if (error) @@ -3003,8 +3035,8 @@ std_return: DM_EVENT_ENABLED(dir_vp->v_vfsp, XFS_BHVTOI(dir_bdp), DM_EVENT_POSTCREATE)) { (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTCREATE, - dir_bdp, DM_RIGHT_NULL, - created ? XFS_ITOBHV(cdp):NULL, + dir_vp, DM_RIGHT_NULL, + created ? XFS_ITOV(cdp):NULL, DM_RIGHT_NULL, dir_name, NULL, dm_di_mode, error, 0); @@ -3067,7 +3099,7 @@ xfs_rmdir( if (DM_EVENT_ENABLED(dir_vp->v_vfsp, dp, DM_EVENT_REMOVE)) { error = XFS_SEND_NAMESP(mp, DM_EVENT_REMOVE, - dir_bdp, DM_RIGHT_NULL, + dir_vp, DM_RIGHT_NULL, NULL, DM_RIGHT_NULL, name, NULL, 0, 0, 0); if (error) @@ -3261,7 +3293,7 @@ xfs_rmdir( std_return: if (DM_EVENT_ENABLED(dir_vp->v_vfsp, dp, DM_EVENT_POSTREMOVE)) { (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTREMOVE, - dir_bdp, DM_RIGHT_NULL, + dir_vp, DM_RIGHT_NULL, NULL, DM_RIGHT_NULL, name, NULL, dm_di_mode, error, 0); @@ -3405,7 +3437,7 @@ xfs_symlink( } if (DM_EVENT_ENABLED(dir_vp->v_vfsp, dp, DM_EVENT_SYMLINK)) { - error = XFS_SEND_NAMESP(mp, DM_EVENT_SYMLINK, dir_bdp, + error = XFS_SEND_NAMESP(mp, DM_EVENT_SYMLINK, dir_vp, DM_RIGHT_NULL, NULL, DM_RIGHT_NULL, link_name, target_path, 0, 0, 0); if (error) @@ -3597,8 +3629,8 @@ std_return: if (DM_EVENT_ENABLED(dir_vp->v_vfsp, XFS_BHVTOI(dir_bdp), DM_EVENT_POSTSYMLINK)) { (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTSYMLINK, - dir_bdp, DM_RIGHT_NULL, - error ? NULL : XFS_ITOBHV(ip), + dir_vp, DM_RIGHT_NULL, + error ? NULL : XFS_ITOV(ip), DM_RIGHT_NULL, link_name, target_path, 0, error, 0); } @@ -4236,8 +4268,8 @@ dmapi_enospc_check: DM_EVENT_ENABLED(XFS_MTOVFS(mp), ip, DM_EVENT_NOSPACE)) { error = XFS_SEND_NAMESP(mp, DM_EVENT_NOSPACE, - XFS_ITOBHV(ip), DM_RIGHT_NULL, - XFS_ITOBHV(ip), DM_RIGHT_NULL, + XFS_ITOV(ip), DM_RIGHT_NULL, + XFS_ITOV(ip), DM_RIGHT_NULL, NULL, NULL, 0, 0, 0); /* Delay flag intentionally unused */ if (error == 0) goto retry; /* Maybe DMAPI app. has made space */ diff -prauN linux-2.6.0-test5/fs/xfs/xfsidbg.c wli-2.6.0-test5-bk12-25/fs/xfs/xfsidbg.c --- linux-2.6.0-test5/fs/xfs/xfsidbg.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/fs/xfs/xfsidbg.c 2003-09-25 19:16:10.000000000 -0700 @@ -78,7 +78,6 @@ #include "xfs_rw.h" #include "xfs_bit.h" #include "xfs_quota.h" -#include "xfs_log_recover.h" #include "quota/xfs_qm.h" MODULE_AUTHOR("Silicon Graphics, Inc."); @@ -1685,9 +1684,11 @@ static void printinode(struct inode *ip) ip->i_size); kdb_printf( - " i_mode = 0x%x i_nlink = %d i_rdev = 0x%x i_state = 0x%lx\n", + " i_mode = 0x%x i_nlink = %d i_rdev = %u:%u i_state = 0x%lx\n", ip->i_mode, ip->i_nlink, - ip->i_rdev, ip->i_state); + MAJOR(ip->i_rdev), + MINOR(ip->i_rdev), + ip->i_state); kdb_printf(" i_hash.nxt = 0x%p i_hash.prv = 0x%p\n", ip->i_hash.next, ip->i_hash.prev); @@ -3022,6 +3023,12 @@ xfs_prdinode_core(xfs_dinode_core_t *dip static char *diflags[] = { "realtime", /* XFS_DIFLAG_REALTIME */ "prealloc", /* XFS_DIFLAG_PREALLOC */ + "newrtbm", /* XFS_DIFLAG_NEWRTBM */ + "immutable", /* XFS_DIFLAG_IMMUTABLE */ + "append", /* XFS_DIFLAG_APPEND */ + "sync", /* XFS_DIFLAG_SYNC */ + "noatime", /* XFS_DIFLAG_NOATIME */ + "nodump", /* XFS_DIFLAG_NODUMP */ NULL }; @@ -3732,8 +3739,9 @@ xfsidbg_xdabuf(xfs_dabuf_t *dabuf) kdb_printf(" %d:0x%p", i, dabuf->bps[i]); kdb_printf("\n"); #ifdef XFS_DABUF_DEBUG - kdb_printf(" ra 0x%x prev 0x%x next 0x%x dev 0x%x blkno 0x%x\n", - dabuf->ra, dabuf->prev, dabuf->next, dabuf->dev, dabuf->blkno); + kdb_printf(" ra 0x%x prev 0x%x next 0x%x dev %u:%u blkno 0x%x\n", + dabuf->ra, dabuf->prev, dabuf->next, + MAJOR(dabuf->dev), MINOR(dabuf->dev), dabuf->blkno); #endif } @@ -4261,8 +4269,9 @@ xfsidbg_xlog(xlog_t *log) xfsidbg_get_cstate(log->l_covered_state)); kdb_printf("flags: "); printflags(log->l_flags, t_flags,"log"); - kdb_printf(" dev: 0x%x logBBstart: %lld logsize: %d logBBsize: %d\n", - log->l_dev, (long long) log->l_logBBstart, + kdb_printf(" dev: %u:%u logBBstart: %lld logsize: %d logBBsize: %d\n", + MAJOR(log->l_dev), MINOR(log->l_dev), + (long long) log->l_logBBstart, log->l_logsize,log->l_logBBsize); kdb_printf("curr_cycle: %d prev_cycle: %d curr_block: %d prev_block: %d\n", log->l_curr_cycle, log->l_prev_cycle, log->l_curr_block, @@ -4637,11 +4646,14 @@ xfsidbg_xmount(xfs_mount_t *mp) XFS_MTOVFS(mp), mp->m_tid, &mp->m_ail_lock, &mp->m_ail); kdb_printf("ail_gen 0x%x &sb 0x%p\n", mp->m_ail_gen, &mp->m_sb); - kdb_printf("sb_lock 0x%p sb_bp 0x%p dev 0x%x logdev 0x%x rtdev 0x%x\n", + kdb_printf("sb_lock 0x%p sb_bp 0x%p dev %u:%u logdev %u:%u rtdev %u:%u\n", &mp->m_sb_lock, mp->m_sb_bp, - mp->m_ddev_targp ? mp->m_ddev_targp->pbr_dev : 0, - mp->m_logdev_targp ? mp->m_logdev_targp->pbr_dev : 0, - mp->m_rtdev_targp ? mp->m_rtdev_targp->pbr_dev : 0); + mp->m_ddev_targp ? MAJOR(mp->m_ddev_targp->pbr_dev) : 0, + mp->m_ddev_targp ? MINOR(mp->m_ddev_targp->pbr_dev) : 0, + mp->m_logdev_targp ? MAJOR(mp->m_logdev_targp->pbr_dev) : 0, + mp->m_logdev_targp ? MINOR(mp->m_logdev_targp->pbr_dev) : 0, + mp->m_rtdev_targp ? MAJOR(mp->m_rtdev_targp->pbr_dev) : 0, + mp->m_rtdev_targp ? MINOR(mp->m_rtdev_targp->pbr_dev) : 0); kdb_printf("bsize %d agfrotor %d agirotor %d ihash 0x%p ihsize %d\n", mp->m_bsize, mp->m_agfrotor, mp->m_agirotor, mp->m_ihash, mp->m_ihsize); @@ -4687,7 +4699,7 @@ xfsidbg_xmount(xfs_mount_t *mp) mp->m_attroffset, mp->m_maxicount, mp->m_inoalign_mask); kdb_printf("resblks %Ld resblks_avail %Ld\n", mp->m_resblks, mp->m_resblks_avail); -#if XFS_BIG_FILESYSTEMS +#if XFS_BIG_INUMS kdb_printf(" inoadd %llx\n", (unsigned long long) mp->m_inoadd); #else kdb_printf("\n"); @@ -4812,8 +4824,9 @@ xfsidbg_xnode(xfs_inode_t *ip) ip->i_mnext, ip->i_mprev, XFS_ITOV_NULL(ip)); - kdb_printf("dev %x ino %s\n", - ip->i_mount->m_dev, + kdb_printf("dev %u:%u ino %s\n", + MAJOR(ip->i_mount->m_dev), + MINOR(ip->i_mount->m_dev), xfs_fmtino(ip->i_ino, ip->i_mount)); kdb_printf("blkno 0x%llx len 0x%x boffset 0x%x\n", (long long) ip->i_blkno, diff -prauN linux-2.6.0-test5/include/asm-alpha/pgalloc.h wli-2.6.0-test5-bk12-25/include/asm-alpha/pgalloc.h --- linux-2.6.0-test5/include/asm-alpha/pgalloc.h 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-alpha/pgalloc.h 2003-09-25 20:03:31.000000000 -0700 @@ -24,9 +24,9 @@ pmd_populate_kernel(struct mm_struct *mm } static inline void -pgd_populate(struct mm_struct *mm, pgd_t *pgd, pmd_t *pmd) +pgd_populate(struct mm_struct *mm, pgd_t *pgd, struct page *pmd) { - pgd_set(pgd, pmd); + pgd_set(pgd, page_address(pmd)); } extern pgd_t *pgd_alloc(struct mm_struct *mm); @@ -37,19 +37,29 @@ pgd_free(pgd_t *pgd) free_page((unsigned long)pgd); } -static inline pmd_t * +static inline struct page * pmd_alloc_one(struct mm_struct *mm, unsigned long address) { - pmd_t *ret = (pmd_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT); - if (ret) - clear_page(ret); - return ret; + struct page *page = alloc_page(GFP_KERNEL|__GFP_REPEAT); + if (page) + clear_highpage(page); + return page; +} + +static inline pmd_t * +pmd_alloc_one_kernel(struct mm_struct *mm, unsigned long addr) +{ + struct page *page = pmd_alloc_one(mm, addr); + if (page) + return page_address(page); + else + return NULL; } static inline void -pmd_free(pmd_t *pmd) +pmd_free(struct page *pmd) { - free_page((unsigned long)pmd); + __free_page(pmd); } extern pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr); diff -prauN linux-2.6.0-test5/include/asm-alpha/pgtable.h wli-2.6.0-test5-bk12-25/include/asm-alpha/pgtable.h --- linux-2.6.0-test5/include/asm-alpha/pgtable.h 2003-09-08 12:49:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-alpha/pgtable.h 2003-09-25 20:03:31.000000000 -0700 @@ -229,9 +229,11 @@ pmd_page_kernel(pmd_t pmd) #define pmd_page(pmd) (mem_map + ((pmd_val(pmd) & _PFN_MASK) >> 32)) #endif -extern inline unsigned long pgd_page(pgd_t pgd) +extern inline unsigned long __pgd_page(pgd_t pgd) { return PAGE_OFFSET + ((pgd_val(pgd) & _PFN_MASK) >> (32-PAGE_SHIFT)); } +#define pgd_page(pgd) virt_to_page(__pgd_page(pgd)) + extern inline int pte_none(pte_t pte) { return !pte_val(pte); } extern inline int pte_present(pte_t pte) { return pte_val(pte) & _PAGE_VALID; } extern inline void pte_clear(pte_t *ptep) { pte_val(*ptep) = 0; } @@ -280,9 +282,15 @@ extern inline pte_t pte_mkyoung(pte_t pt /* Find an entry in the second-level page table.. */ extern inline pmd_t * pmd_offset(pgd_t * dir, unsigned long address) { - return (pmd_t *) pgd_page(*dir) + ((address >> PMD_SHIFT) & (PTRS_PER_PAGE - 1)); + return (pmd_t *)__pgd_page(*dir) + ((address >> PMD_SHIFT) & (PTRS_PER_PAGE - 1)); } +#define pmd_offset_kernel(pgd, addr) pmd_offset(pgd, addr) +#define pmd_offset_map(pgd, addr) pmd_offset(pgd, addr) +#define pmd_offset_map_nested(pgd, addr) pmd_offset(pgd, addr) +#define pmd_unmap(pmd) do { } while (0) +#define pmd_unmap_nested(pmd) do { } while (0) + /* Find an entry in the third-level page table.. */ extern inline pte_t * pte_offset_kernel(pmd_t * dir, unsigned long address) { diff -prauN linux-2.6.0-test5/include/asm-alpha/posix_types.h wli-2.6.0-test5-bk12-25/include/asm-alpha/posix_types.h --- linux-2.6.0-test5/include/asm-alpha/posix_types.h 2003-09-08 12:50:16.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-alpha/posix_types.h 2003-09-25 19:16:10.000000000 -0700 @@ -7,7 +7,6 @@ * assume GCC is being used. */ -typedef unsigned int __kernel_dev_t; typedef unsigned int __kernel_ino_t; typedef unsigned int __kernel_mode_t; typedef unsigned int __kernel_nlink_t; diff -prauN linux-2.6.0-test5/include/asm-alpha/processor.h wli-2.6.0-test5-bk12-25/include/asm-alpha/processor.h --- linux-2.6.0-test5/include/asm-alpha/processor.h 2003-09-08 12:50:41.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-alpha/processor.h 2003-09-25 19:16:10.000000000 -0700 @@ -29,7 +29,6 @@ /* * Bus types */ -#define EISA_bus 1 #define MCA_bus 0 #define MCA_bus__is_a_macro /* for versions in ksyms.c */ diff -prauN linux-2.6.0-test5/include/asm-alpha/signal.h wli-2.6.0-test5-bk12-25/include/asm-alpha/signal.h --- linux-2.6.0-test5/include/asm-alpha/signal.h 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-alpha/signal.h 2003-09-25 19:16:10.000000000 -0700 @@ -71,7 +71,7 @@ typedef unsigned long sigset_t; /* These should not be considered constants from userland. */ #define SIGRTMIN 32 -#define SIGRTMAX (_NSIG-1) +#define SIGRTMAX _NSIG /* * SA_FLAGS values: diff -prauN linux-2.6.0-test5/include/asm-alpha/smp.h wli-2.6.0-test5-bk12-25/include/asm-alpha/smp.h --- linux-2.6.0-test5/include/asm-alpha/smp.h 2003-09-08 12:50:28.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-alpha/smp.h 2003-09-25 19:16:10.000000000 -0700 @@ -46,7 +46,7 @@ extern struct cpuinfo_alpha cpu_data[NR_ #define smp_processor_id() (current_thread_info()->cpu) extern cpumask_t cpu_present_mask; -extern cpumask_t long cpu_online_map; +extern cpumask_t cpu_online_map; extern int smp_num_cpus; #define cpu_possible(cpu) cpu_isset(cpu, cpu_present_mask) diff -prauN linux-2.6.0-test5/include/asm-arm/arch-clps711x/system.h wli-2.6.0-test5-bk12-25/include/asm-arm/arch-clps711x/system.h --- linux-2.6.0-test5/include/asm-arm/arch-clps711x/system.h 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-arm/arch-clps711x/system.h 2003-09-25 19:16:10.000000000 -0700 @@ -26,7 +26,7 @@ static inline void arch_idle(void) { clps_writel(1, HALT); __asm__ __volatile__( - "mov r0, r0 + "mov r0, r0\n\ mov r0, r0"); } diff -prauN linux-2.6.0-test5/include/asm-arm/arch-integrator/lm.h wli-2.6.0-test5-bk12-25/include/asm-arm/arch-integrator/lm.h --- linux-2.6.0-test5/include/asm-arm/arch-integrator/lm.h 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/include/asm-arm/arch-integrator/lm.h 2003-09-25 19:16:10.000000000 -0700 @@ -0,0 +1,23 @@ + +struct lm_device { + struct device dev; + struct resource resource; + unsigned int irq; + unsigned int id; +}; + +struct lm_driver { + struct device_driver drv; + int (*probe)(struct lm_device *); + void (*remove)(struct lm_device *); + int (*suspend)(struct lm_device *, u32); + int (*resume)(struct lm_device *); +}; + +int lm_driver_register(struct lm_driver *drv); +void lm_driver_unregister(struct lm_driver *drv); + +int lm_device_register(struct lm_device *dev); + +#define lm_get_drvdata(lm) dev_get_drvdata(&(lm)->dev) +#define lm_set_drvdata(lm,d) dev_set_drvdata(&(lm)->dev, d) diff -prauN linux-2.6.0-test5/include/asm-arm/arch-iop3xx/iop321-irqs.h wli-2.6.0-test5-bk12-25/include/asm-arm/arch-iop3xx/iop321-irqs.h --- linux-2.6.0-test5/include/asm-arm/arch-iop3xx/iop321-irqs.h 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-arm/arch-iop3xx/iop321-irqs.h 2003-09-25 19:16:10.000000000 -0700 @@ -10,6 +10,7 @@ * */ +#include /* * IOP80321 chipset interrupts diff -prauN linux-2.6.0-test5/include/asm-arm/arch-iop3xx/irqs.h wli-2.6.0-test5-bk12-25/include/asm-arm/arch-iop3xx/irqs.h --- linux-2.6.0-test5/include/asm-arm/arch-iop3xx/irqs.h 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-arm/arch-iop3xx/irqs.h 2003-09-25 19:16:10.000000000 -0700 @@ -10,6 +10,8 @@ * */ +#include + /* * Whic iop3xx implementation is this? */ diff -prauN linux-2.6.0-test5/include/asm-arm/arch-pxa/hardware.h wli-2.6.0-test5-bk12-25/include/asm-arm/arch-pxa/hardware.h --- linux-2.6.0-test5/include/asm-arm/arch-pxa/hardware.h 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-arm/arch-pxa/hardware.h 2003-09-25 19:16:10.000000000 -0700 @@ -13,7 +13,6 @@ #ifndef __ASM_ARCH_HARDWARE_H #define __ASM_ARCH_HARDWARE_H -#include #include diff -prauN linux-2.6.0-test5/include/asm-arm/arch-pxa/ide.h wli-2.6.0-test5-bk12-25/include/asm-arm/arch-pxa/ide.h --- linux-2.6.0-test5/include/asm-arm/arch-pxa/ide.h 2003-09-08 12:50:54.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-arm/arch-pxa/ide.h 2003-09-25 19:16:10.000000000 -0700 @@ -14,7 +14,6 @@ * */ -#include #include #include #include diff -prauN linux-2.6.0-test5/include/asm-arm/arch-pxa/idp.h wli-2.6.0-test5-bk12-25/include/asm-arm/arch-pxa/idp.h --- linux-2.6.0-test5/include/asm-arm/arch-pxa/idp.h 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-arm/arch-pxa/idp.h 2003-09-25 19:16:10.000000000 -0700 @@ -12,6 +12,7 @@ * */ +#include /* * Note: this file must be safe to include in assembly files diff -prauN linux-2.6.0-test5/include/asm-arm/arch-pxa/irqs.h wli-2.6.0-test5-bk12-25/include/asm-arm/arch-pxa/irqs.h --- linux-2.6.0-test5/include/asm-arm/arch-pxa/irqs.h 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-arm/arch-pxa/irqs.h 2003-09-25 19:16:10.000000000 -0700 @@ -10,6 +10,8 @@ * published by the Free Software Foundation. */ +#include + #define PXA_IRQ_SKIP 7 /* The first 7 IRQs are not yet used */ #define PXA_IRQ(x) ((x) - PXA_IRQ_SKIP) diff -prauN linux-2.6.0-test5/include/asm-arm/arch-pxa/keyboard.h wli-2.6.0-test5-bk12-25/include/asm-arm/arch-pxa/keyboard.h --- linux-2.6.0-test5/include/asm-arm/arch-pxa/keyboard.h 2003-09-08 12:50:32.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-arm/arch-pxa/keyboard.h 2003-09-25 19:16:10.000000000 -0700 @@ -7,7 +7,6 @@ #ifndef _PXA_KEYBOARD_H #define _PXA_KEYBOARD_H -#include #include #include diff -prauN linux-2.6.0-test5/include/asm-arm/arch-pxa/pxa-regs.h wli-2.6.0-test5-bk12-25/include/asm-arm/arch-pxa/pxa-regs.h --- linux-2.6.0-test5/include/asm-arm/arch-pxa/pxa-regs.h 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-arm/arch-pxa/pxa-regs.h 2003-09-25 19:16:10.000000000 -0700 @@ -10,6 +10,7 @@ * published by the Free Software Foundation. */ +#include // FIXME hack so that SA-1111.h will work [cb] diff -prauN linux-2.6.0-test5/include/asm-arm/arch-sa1100/serial.h wli-2.6.0-test5-bk12-25/include/asm-arm/arch-sa1100/serial.h --- linux-2.6.0-test5/include/asm-arm/arch-sa1100/serial.h 2003-09-08 12:49:54.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-arm/arch-sa1100/serial.h 2003-09-25 19:16:10.000000000 -0700 @@ -7,6 +7,8 @@ * This is included by serial.c -- serial_sa1100.c makes no use of it. */ +#include + /* Standard COM flags */ #define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST) diff -prauN linux-2.6.0-test5/include/asm-arm/arch-sa1100/trizeps.h wli-2.6.0-test5-bk12-25/include/asm-arm/arch-sa1100/trizeps.h --- linux-2.6.0-test5/include/asm-arm/arch-sa1100/trizeps.h 2003-09-08 12:50:23.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-arm/arch-sa1100/trizeps.h 2003-09-25 19:16:10.000000000 -0700 @@ -13,6 +13,8 @@ #ifndef _ASM_ARCH_TRIZEPS_H_ #define _ASM_ARCH_TRIZEPS_H_ +#include + #ifdef CONFIG_TRIZEPS_MFTB2 #include "mftb2.h" #endif diff -prauN linux-2.6.0-test5/include/asm-arm/bugs.h wli-2.6.0-test5-bk12-25/include/asm-arm/bugs.h --- linux-2.6.0-test5/include/asm-arm/bugs.h 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-arm/bugs.h 2003-09-25 19:16:10.000000000 -0700 @@ -10,6 +10,8 @@ #ifndef __ASM_BUGS_H #define __ASM_BUGS_H -#define check_bugs() do { } while (0) +extern void check_writebuffer_bugs(void); + +#define check_bugs() check_writebuffer_bugs() #endif diff -prauN linux-2.6.0-test5/include/asm-arm/cacheflush.h wli-2.6.0-test5-bk12-25/include/asm-arm/cacheflush.h --- linux-2.6.0-test5/include/asm-arm/cacheflush.h 2003-09-08 12:50:27.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-arm/cacheflush.h 2003-09-25 19:16:10.000000000 -0700 @@ -10,6 +10,7 @@ #ifndef _ASMARM_CACHEFLUSH_H #define _ASMARM_CACHEFLUSH_H +#include #include #include diff -prauN linux-2.6.0-test5/include/asm-arm/glue.h wli-2.6.0-test5-bk12-25/include/asm-arm/glue.h --- linux-2.6.0-test5/include/asm-arm/glue.h 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-arm/glue.h 2003-09-25 19:16:10.000000000 -0700 @@ -58,7 +58,7 @@ # endif #endif -#if defined(CONFIG_CPU_ARM720T) +#ifdef CONFIG_CPU_ABRT_LV4T # ifdef CPU_ABORT_HANDLER # define MULTI_ABORT 1 # else @@ -66,7 +66,7 @@ # endif #endif -#if defined(CONFIG_CPU_SA110) || defined(CONFIG_CPU_SA1100) +#ifdef CONFIG_CPU_ABRT_EV4 # ifdef CPU_ABORT_HANDLER # define MULTI_ABORT 1 # else @@ -74,8 +74,7 @@ # endif #endif -#if defined(CONFIG_CPU_ARM920T) || defined(CONFIG_CPU_ARM922T) || \ - defined(CONFIG_CPU_ARM1020) +#ifdef CONFIG_CPU_ABRT_EV4T # ifdef CPU_ABORT_HANDLER # define MULTI_ABORT 1 # else @@ -83,19 +82,19 @@ # endif #endif -#if defined(CONFIG_CPU_ARM926T) +#ifdef CONFIG_CPU_ABRT_EV5TJ # ifdef CPU_ABORT_HANDLER # define MULTI_ABORT 1 # else -# define CPU_ABORT_HANDLER v5tej_early_abort +# define CPU_ABORT_HANDLER v5tj_early_abort # endif #endif -#if defined(CONFIG_CPU_XSCALE) +#ifdef CONFIG_CPU_ABRT_EV5T # ifdef CPU_ABORT_HANDLER # define MULTI_ABORT 1 # else -# define CPU_ABORT_HANDLER xscale_abort +# define CPU_ABORT_HANDLER v5t_early_abort # endif #endif diff -prauN linux-2.6.0-test5/include/asm-arm/hardware/sa1111.h wli-2.6.0-test5-bk12-25/include/asm-arm/hardware/sa1111.h --- linux-2.6.0-test5/include/asm-arm/hardware/sa1111.h 2003-09-08 12:50:39.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-arm/hardware/sa1111.h 2003-09-25 19:16:10.000000000 -0700 @@ -543,7 +543,7 @@ struct sa1111_dev { #define SA1111_DEV(_d) container_of((_d), struct sa1111_dev, dev) #define sa1111_get_drvdata(d) dev_get_drvdata(&(d)->dev) -#define sa1111_set_drvdata(d,p) dev_get_drvdata(&(d)->dev, p) +#define sa1111_set_drvdata(d,p) dev_set_drvdata(&(d)->dev, p) struct sa1111_driver { struct device_driver drv; @@ -559,11 +559,6 @@ struct sa1111_driver { #define SA1111_DRIVER_NAME(_sadev) ((_sadev)->dev.driver->name) /* - * Probe for a SA1111 chip. - */ -extern int sa1111_init(unsigned long phys, unsigned int irq); - -/* * These frob the SKPCR register. */ void sa1111_enable_device(struct sa1111_dev *); diff -prauN linux-2.6.0-test5/include/asm-arm/mmu.h wli-2.6.0-test5-bk12-25/include/asm-arm/mmu.h --- linux-2.6.0-test5/include/asm-arm/mmu.h 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-arm/mmu.h 2003-09-25 19:16:10.000000000 -0700 @@ -1,8 +1,6 @@ #ifndef __ARM_MMU_H #define __ARM_MMU_H -#include - typedef struct { #if __LINUX_ARM_ARCH__ >= 6 unsigned int id; diff -prauN linux-2.6.0-test5/include/asm-arm/page.h wli-2.6.0-test5-bk12-25/include/asm-arm/page.h --- linux-2.6.0-test5/include/asm-arm/page.h 2003-09-08 12:49:54.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-arm/page.h 2003-09-25 19:16:10.000000000 -0700 @@ -44,7 +44,7 @@ #undef _USER #undef MULTI_USER -#if defined(CONFIG_CPU_ARM610) || defined(CONFIG_CPU_ARM710) +#ifdef CONFIG_CPU_COPY_V3 # ifdef _USER # define MULTI_USER 1 # else @@ -52,7 +52,7 @@ # endif #endif -#if defined(CONFIG_CPU_ARM720T) +#ifdef CONFIG_CPU_COPY_V4WT # ifdef _USER # define MULTI_USER 1 # else @@ -60,9 +60,7 @@ # endif #endif -#if defined(CONFIG_CPU_ARM920T) || defined(CONFIG_CPU_ARM922T) || \ - defined(CONFIG_CPU_ARM926T) || defined(CONFIG_CPU_SA110) || \ - defined(CONFIG_CPU_ARM1020) +#ifdef CONFIG_CPU_COPY_V4WB # ifdef _USER # define MULTI_USER 1 # else @@ -70,7 +68,7 @@ # endif #endif -#if defined(CONFIG_CPU_SA1100) +#ifdef CONFIG_CPU_SA1100 # ifdef _USER # define MULTI_USER 1 # else @@ -78,7 +76,7 @@ # endif #endif -#if defined(CONFIG_CPU_XSCALE) +#ifdef CONFIG_CPU_XSCALE # ifdef _USER # define MULTI_USER 1 # else diff -prauN linux-2.6.0-test5/include/asm-arm/pgalloc.h wli-2.6.0-test5-bk12-25/include/asm-arm/pgalloc.h --- linux-2.6.0-test5/include/asm-arm/pgalloc.h 2003-09-08 12:50:31.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-arm/pgalloc.h 2003-09-25 20:03:31.000000000 -0700 @@ -17,7 +17,8 @@ /* * Since we have only two-level page tables, these are trivial */ -#define pmd_alloc_one(mm,addr) ({ BUG(); ((pmd_t *)2); }) +#define pmd_alloc_one(mm,addr) ({ BUG(); ((struct page *)2); }) +#define pmd_alloc_one_kernel(mm,addr) ({ BUG(); ((pmd_t *)2); }) #define pmd_free(pmd) do { } while (0) #define pgd_populate(mm,pmd,pte) BUG() diff -prauN linux-2.6.0-test5/include/asm-arm/pgtable.h wli-2.6.0-test5-bk12-25/include/asm-arm/pgtable.h --- linux-2.6.0-test5/include/asm-arm/pgtable.h 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-arm/pgtable.h 2003-09-25 20:03:31.000000000 -0700 @@ -10,7 +10,6 @@ #ifndef _ASMARM_PGTABLE_H #define _ASMARM_PGTABLE_H -#include #include #include #include @@ -106,6 +105,7 @@ extern void __pgd_error(const char *file /* * - extended small page/tiny page */ +#define PTE_EXT_AP_MASK (3 << 4) #define PTE_EXT_AP_UNO_SRO (0 << 4) #define PTE_EXT_AP_UNO_SRW (1 << 4) #define PTE_EXT_AP_URO_SRW (2 << 4) @@ -115,12 +115,11 @@ extern void __pgd_error(const char *file /* * - small page */ +#define PTE_SMALL_AP_MASK (0xff << 4) #define PTE_SMALL_AP_UNO_SRO (0x00 << 4) #define PTE_SMALL_AP_UNO_SRW (0x55 << 4) #define PTE_SMALL_AP_URO_SRW (0xaa << 4) #define PTE_SMALL_AP_URW_SRW (0xff << 4) -#define PTE_AP_READ PTE_SMALL_AP_URO_SRW -#define PTE_AP_WRITE PTE_SMALL_AP_UNO_SRW /* * "Linux" PTE definitions. @@ -318,6 +317,11 @@ static inline pte_t *pmd_page_kernel(pmd /* Find an entry in the second-level page table.. */ #define pmd_offset(dir, addr) ((pmd_t *)(dir)) +#define pmd_offset_kernel(pgd, addr) pmd_offset(pgd, addr) +#define pmd_offset_map(pgd, addr) pmd_offset(pgd, addr) +#define pmd_offset_map_nested(pgd, addr) pmd_offset(pgd, addr) +#define pmd_unmap(pmd) do { } while (0) +#define pmd_unmap_nested(pmd) do { } while (0) /* Find an entry in the third-level page table.. */ #define __pte_index(addr) (((addr) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)) diff -prauN linux-2.6.0-test5/include/asm-arm/posix_types.h wli-2.6.0-test5-bk12-25/include/asm-arm/posix_types.h --- linux-2.6.0-test5/include/asm-arm/posix_types.h 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-arm/posix_types.h 2003-09-25 19:16:10.000000000 -0700 @@ -19,7 +19,6 @@ * assume GCC is being used. */ -typedef unsigned short __kernel_dev_t; typedef unsigned long __kernel_ino_t; typedef unsigned short __kernel_mode_t; typedef unsigned short __kernel_nlink_t; diff -prauN linux-2.6.0-test5/include/asm-arm/proc-fns.h wli-2.6.0-test5-bk12-25/include/asm-arm/proc-fns.h --- linux-2.6.0-test5/include/asm-arm/proc-fns.h 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-arm/proc-fns.h 2003-09-25 19:16:10.000000000 -0700 @@ -26,7 +26,6 @@ */ #ifdef CONFIG_CPU_32 -# define CPU_INCLUDE_NAME "asm/cpu-multi32.h" # ifdef CONFIG_CPU_ARM610 # ifdef CPU_NAME # undef MULTI_CPU @@ -99,6 +98,30 @@ # define CPU_NAME cpu_arm1020 # endif # endif +# ifdef CONFIG_CPU_ARM1020E +# ifdef CPU_NAME +# undef MULTI_CPU +# define MULTI_CPU +# else +# define CPU_NAME cpu_arm1020e +# endif +# endif +# ifdef CONFIG_CPU_ARM1022 +# ifdef CPU_NAME +# undef MULTI_CPU +# define MULTI_CPU +# else +# define CPU_NAME cpu_arm1022 +# endif +# endif +# ifdef CONFIG_CPU_ARM1026 +# ifdef CPU_NAME +# undef MULTI_CPU +# define MULTI_CPU +# else +# define CPU_NAME cpu_arm1026 +# endif +# endif # ifdef CONFIG_CPU_XSCALE # ifdef CPU_NAME # undef MULTI_CPU @@ -110,11 +133,10 @@ #endif #ifndef MULTI_CPU -#undef CPU_INCLUDE_NAME -#define CPU_INCLUDE_NAME "asm/cpu-single.h" +#include "asm/cpu-single.h" +#else +#include "asm/cpu-multi32.h" #endif -#include CPU_INCLUDE_NAME - #endif /* __KERNEL__ */ #endif /* __ASM_PROCFNS_H */ diff -prauN linux-2.6.0-test5/include/asm-arm/processor.h wli-2.6.0-test5-bk12-25/include/asm-arm/processor.h --- linux-2.6.0-test5/include/asm-arm/processor.h 2003-09-08 12:50:04.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-arm/processor.h 2003-09-25 19:16:10.000000000 -0700 @@ -19,7 +19,6 @@ #ifdef __KERNEL__ -#define EISA_bus 0 #define MCA_bus 0 #define MCA_bus__is_a_macro diff -prauN linux-2.6.0-test5/include/asm-arm/signal.h wli-2.6.0-test5-bk12-25/include/asm-arm/signal.h --- linux-2.6.0-test5/include/asm-arm/signal.h 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-arm/signal.h 2003-09-25 19:16:10.000000000 -0700 @@ -68,7 +68,7 @@ typedef unsigned long sigset_t; /* These should not be considered constants from userland. */ #define SIGRTMIN 32 -#define SIGRTMAX (_NSIG-1) +#define SIGRTMAX _NSIG #define SIGSWI 32 diff -prauN linux-2.6.0-test5/include/asm-arm/string.h wli-2.6.0-test5-bk12-25/include/asm-arm/string.h --- linux-2.6.0-test5/include/asm-arm/string.h 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-arm/string.h 2003-09-25 19:16:10.000000000 -0700 @@ -25,6 +25,8 @@ extern void * memchr(const void *, int, #define __HAVE_ARCH_MEMSET extern void * memset(void *, int, __kernel_size_t); +#define __HAVE_ARCH_BCOPY + extern void __memzero(void *ptr, __kernel_size_t n); #define memset(p,v,n) \ diff -prauN linux-2.6.0-test5/include/asm-arm/system.h wli-2.6.0-test5-bk12-25/include/asm-arm/system.h --- linux-2.6.0-test5/include/asm-arm/system.h 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-arm/system.h 2003-09-25 19:16:10.000000000 -0700 @@ -36,7 +36,7 @@ #define CR_DT (1 << 16) #define CR_IT (1 << 18) #define CR_ST (1 << 19) -#define CR_FI (1 << 21) +#define CR_FI (1 << 21) /* Fast interrupt (lower latency mode) */ #define CR_U (1 << 22) /* Unaligned access operation */ #define CR_XP (1 << 23) /* Extended page tables */ #define CR_VE (1 << 24) /* Vectored interrupts */ diff -prauN linux-2.6.0-test5/include/asm-arm/tlbflush.h wli-2.6.0-test5-bk12-25/include/asm-arm/tlbflush.h --- linux-2.6.0-test5/include/asm-arm/tlbflush.h 2003-09-08 12:50:19.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-arm/tlbflush.h 2003-09-25 19:16:10.000000000 -0700 @@ -52,7 +52,7 @@ #define v3_tlb_flags (TLB_V3_FULL | TLB_V3_PAGE) -#if defined(CONFIG_CPU_ARM610) || defined(CONFIG_CPU_ARM710) +#ifdef CONFIG_CPU_TLB_V3 # define v3_possible_flags v3_tlb_flags # define v3_always_flags v3_tlb_flags # ifdef _TLB @@ -67,7 +67,7 @@ #define v4_tlb_flags (TLB_V4_U_FULL | TLB_V4_U_PAGE) -#if defined(CONFIG_CPU_ARM720T) +#ifdef CONFIG_CPU_TLB_V4WT # define v4_possible_flags v4_tlb_flags # define v4_always_flags v4_tlb_flags # ifdef _TLB @@ -84,9 +84,7 @@ TLB_V4_I_FULL | TLB_V4_D_FULL | \ TLB_V4_I_PAGE | TLB_V4_D_PAGE) -#if defined(CONFIG_CPU_ARM920T) || defined(CONFIG_CPU_ARM922T) || \ - defined(CONFIG_CPU_ARM926T) || defined(CONFIG_CPU_ARM1020) || \ - defined(CONFIG_CPU_XSCALE) +#ifdef CONFIG_CPU_TLB_V4WBI # define v4wbi_possible_flags v4wbi_tlb_flags # define v4wbi_always_flags v4wbi_tlb_flags # ifdef _TLB @@ -103,7 +101,7 @@ TLB_V4_I_FULL | TLB_V4_D_FULL | \ TLB_V4_D_PAGE) -#if defined(CONFIG_CPU_SA110) || defined(CONFIG_CPU_SA1100) +#ifdef CONFIG_CPU_TLB_V4WB # define v4wb_possible_flags v4wb_tlb_flags # define v4wb_always_flags v4wb_tlb_flags # ifdef _TLB @@ -121,7 +119,7 @@ TLB_V6_I_PAGE | TLB_V6_D_PAGE | \ TLB_V6_I_ASID | TLB_V6_D_ASID) -#if defined(CONFIG_CPU_V6) +#ifdef CONFIG_CPU_TLB_V6 # define v6wbi_possible_flags v6wbi_tlb_flags # define v6wbi_always_flags v6wbi_tlb_flags # ifdef _TLB diff -prauN linux-2.6.0-test5/include/asm-arm26/hardirq.h wli-2.6.0-test5-bk12-25/include/asm-arm26/hardirq.h --- linux-2.6.0-test5/include/asm-arm26/hardirq.h 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-arm26/hardirq.h 2003-09-25 19:16:10.000000000 -0700 @@ -5,7 +5,6 @@ #include #include -/* softirq.h is sensitive to the offsets of these fields */ typedef struct { unsigned int __softirq_pending; unsigned int __local_irq_count; diff -prauN linux-2.6.0-test5/include/asm-arm26/pgalloc.h wli-2.6.0-test5-bk12-25/include/asm-arm26/pgalloc.h --- linux-2.6.0-test5/include/asm-arm26/pgalloc.h 2003-09-08 12:50:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-arm26/pgalloc.h 2003-09-25 20:03:31.000000000 -0700 @@ -55,7 +55,8 @@ pmd_populate_kernel(struct mm_struct *mm * is thrown away. It just cant be zero. -IM */ -#define pmd_alloc_one(mm,addr) ({ BUG(); ((pmd_t *)2); }) +#define pmd_alloc_one(mm,addr) ({ BUG(); ((struct page *)2); }) +#define pmd_alloc_one_kernel(mm,addr) ({ BUG(); ((pmd_t *)2); }) #define pmd_free(pmd) do { } while (0) #define pgd_populate(mm,pmd,pte) BUG() diff -prauN linux-2.6.0-test5/include/asm-arm26/pgtable.h wli-2.6.0-test5-bk12-25/include/asm-arm26/pgtable.h --- linux-2.6.0-test5/include/asm-arm26/pgtable.h 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-arm26/pgtable.h 2003-09-25 20:03:31.000000000 -0700 @@ -99,7 +99,7 @@ extern struct page *empty_zero_page; * on arm26 we have no 2nd level page table. we simulate this by removing the * PMD. * - * pgd_none is 0 to prevernt pmd_alloc() calling __pmd_alloc(). This causes it + * pgd_none is 0 to prevernt pmd_alloc_map() calling __pmd_alloc(). This causes it * to return pmd_offset(pgd,addr) which is a pointer to the pgd (IOW, a no-op). * * however, to work this way, whilst we are allocating 32 pgds, containing 32 @@ -134,7 +134,7 @@ extern struct page *empty_zero_page; #define _PMD_PRESENT (0x01) -/* These definitions allow us to optimise out stuff like pmd_alloc() */ +/* These definitions allow us to optimise out stuff like pmd_alloc_map() */ #define pgd_none(pgd) (0) #define pgd_bad(pgd) (0) #define pgd_present(pgd) (1) @@ -189,6 +189,12 @@ extern struct page *empty_zero_page; #define pte_unmap(pte) do { } while (0) #define pte_unmap_nested(pte) do { } while (0) +#define pmd_offset_kernel(pgd, addr) pmd_offset(pgd, addr) +#define pmd_offset_map(pgd, addr) pmd_offset(pgd, addr) +#define pmd_offset_map_nested(pgd, addr) pmd_offset(pgd, addr) +#define pmd_unmap(pgd, addr) do { } while (0) +#define pmd_unmap_nested(pgd, addr) do { } while (0) + #define _PAGE_PRESENT 0x01 #define _PAGE_READONLY 0x02 diff -prauN linux-2.6.0-test5/include/asm-arm26/posix_types.h wli-2.6.0-test5-bk12-25/include/asm-arm26/posix_types.h --- linux-2.6.0-test5/include/asm-arm26/posix_types.h 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-arm26/posix_types.h 2003-09-25 19:16:10.000000000 -0700 @@ -19,7 +19,6 @@ * assume GCC is being used. */ -typedef unsigned short __kernel_dev_t; typedef unsigned long __kernel_ino_t; typedef unsigned short __kernel_mode_t; typedef unsigned short __kernel_nlink_t; diff -prauN linux-2.6.0-test5/include/asm-arm26/processor.h wli-2.6.0-test5-bk12-25/include/asm-arm26/processor.h --- linux-2.6.0-test5/include/asm-arm26/processor.h 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-arm26/processor.h 2003-09-25 19:16:10.000000000 -0700 @@ -20,7 +20,6 @@ #ifdef __KERNEL__ -#define EISA_bus 0 #define MCA_bus 0 #define MCA_bus__is_a_macro diff -prauN linux-2.6.0-test5/include/asm-arm26/rmap.h wli-2.6.0-test5-bk12-25/include/asm-arm26/rmap.h --- linux-2.6.0-test5/include/asm-arm26/rmap.h 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-arm26/rmap.h 2003-09-28 23:04:08.000000000 -0700 @@ -14,14 +14,14 @@ static inline void pgtable_add_rmap(struct page *page, struct mm_struct * mm, unsigned long address) { - page->mapping = (void *)mm; + set_page_mapping(page, mm); page->index = address & ~((PTRS_PER_PTE * PAGE_SIZE) - 1); inc_page_state(nr_page_table_pages); } static inline void pgtable_remove_rmap(struct page *page) { - page->mapping = NULL; + set_page_mapping(page, NULL); page->index = 0; dec_page_state(nr_page_table_pages); } @@ -29,7 +29,7 @@ static inline void pgtable_remove_rmap(s static inline struct mm_struct * ptep_to_mm(pte_t * ptep) { struct page * page = virt_to_page(ptep); - return (struct mm_struct *)page->mapping; + return (struct mm_struct *)page_mapping(page); } /* The page table takes half of the page */ diff -prauN linux-2.6.0-test5/include/asm-arm26/signal.h wli-2.6.0-test5-bk12-25/include/asm-arm26/signal.h --- linux-2.6.0-test5/include/asm-arm26/signal.h 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-arm26/signal.h 2003-09-25 19:16:10.000000000 -0700 @@ -68,7 +68,7 @@ typedef unsigned long sigset_t; /* These should not be considered constants from userland. */ #define SIGRTMIN 32 -#define SIGRTMAX (_NSIG-1) +#define SIGRTMAX _NSIG #define SIGSWI 32 diff -prauN linux-2.6.0-test5/include/asm-arm26/softirq.h wli-2.6.0-test5-bk12-25/include/asm-arm26/softirq.h --- linux-2.6.0-test5/include/asm-arm26/softirq.h 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-arm26/softirq.h 1969-12-31 16:00:00.000000000 -0800 @@ -1,20 +0,0 @@ -#ifndef __ASM_SOFTIRQ_H -#define __ASM_SOFTIRQ_H - -#include -#include - -#define local_bh_disable() \ - do { preempt_count() += SOFTIRQ_OFFSET; barrier(); } while (0) -#define __local_bh_enable() \ - do { barrier(); preempt_count() -= SOFTIRQ_OFFSET; } while (0) - -#define local_bh_enable() \ -do { \ - __local_bh_enable(); \ - if (unlikely(!in_interrupt() && softirq_pending(smp_processor_id()))) \ - __asm__("bl%? __do_softirq": : : "lr");/* out of line */\ - preempt_check_resched(); \ -} while (0) - -#endif /* __ASM_SOFTIRQ_H */ diff -prauN linux-2.6.0-test5/include/asm-arm26/stat.h wli-2.6.0-test5-bk12-25/include/asm-arm26/stat.h --- linux-2.6.0-test5/include/asm-arm26/stat.h 2003-09-08 12:50:09.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-arm26/stat.h 2003-09-25 19:16:10.000000000 -0700 @@ -42,8 +42,7 @@ struct stat { * insane amounts of padding around dev_t's. */ struct stat64 { - unsigned short st_dev; - unsigned char __pad0b[6]; + unsigned long long st_dev; unsigned char __pad0[4]; #define STAT64_HAS_BROKEN_ST_INO 1 @@ -54,8 +53,7 @@ struct stat64 { unsigned long st_uid; unsigned long st_gid; - unsigned short st_rdev; - unsigned char __pad3b[6]; + unsigned long long st_rdev; unsigned char __pad3[4]; long long st_size; diff -prauN linux-2.6.0-test5/include/asm-cris/pgalloc.h wli-2.6.0-test5-bk12-25/include/asm-cris/pgalloc.h --- linux-2.6.0-test5/include/asm-cris/pgalloc.h 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-cris/pgalloc.h 2003-09-25 20:03:31.000000000 -0700 @@ -57,7 +57,8 @@ extern inline void pte_free(struct page * the pgd will always be present.. */ -#define pmd_alloc_one(mm, addr) ({ BUG(); ((pmd_t *)2); }) +#define pmd_alloc_one(mm, addr) ({ BUG(); ((struct page *)2); }) +#define pmd_alloc_one_kernel(mm, addr) ({ BUG(); ((pmd_t *)2); }) #define pmd_free(x) do { } while (0) #define __pmd_free_tlb(tlb,x) do { } while (0) #define pgd_populate(mm, pmd, pte) BUG() diff -prauN linux-2.6.0-test5/include/asm-cris/pgtable.h wli-2.6.0-test5-bk12-25/include/asm-cris/pgtable.h --- linux-2.6.0-test5/include/asm-cris/pgtable.h 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-cris/pgtable.h 2003-09-25 20:03:31.000000000 -0700 @@ -281,6 +281,12 @@ extern inline pmd_t * pmd_offset(pgd_t * return (pmd_t *) dir; } +#define pmd_offset_kernel(pgd, addr) pmd_offset(pgd, addr) +#define pmd_offset_map(pgd, addr) pmd_offset(pgd, addr) +#define pmd_offset_map_nested(pgd, addr) pmd_offset(pgd, addr) +#define pmd_unmap(pmd) do { } while (0) +#define pmd_unmap_nested(pmd) do { } while (0) + /* Find an entry in the third-level page table.. */ #define __pte_offset(address) \ (((address) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)) diff -prauN linux-2.6.0-test5/include/asm-cris/posix_types.h wli-2.6.0-test5-bk12-25/include/asm-cris/posix_types.h --- linux-2.6.0-test5/include/asm-cris/posix_types.h 2003-09-08 12:49:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-cris/posix_types.h 2003-09-25 19:16:10.000000000 -0700 @@ -14,7 +14,6 @@ * assume GCC is being used. */ -typedef unsigned short __kernel_dev_t; typedef unsigned long __kernel_ino_t; typedef unsigned short __kernel_mode_t; typedef unsigned short __kernel_nlink_t; diff -prauN linux-2.6.0-test5/include/asm-cris/signal.h wli-2.6.0-test5-bk12-25/include/asm-cris/signal.h --- linux-2.6.0-test5/include/asm-cris/signal.h 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-cris/signal.h 2003-09-25 19:16:10.000000000 -0700 @@ -68,7 +68,7 @@ typedef unsigned long sigset_t; /* These should not be considered constants from userland. */ #define SIGRTMIN 32 -#define SIGRTMAX (_NSIG-1) +#define SIGRTMAX _NSIG /* * SA_FLAGS values: diff -prauN linux-2.6.0-test5/include/asm-generic/cpumask_arith.h wli-2.6.0-test5-bk12-25/include/asm-generic/cpumask_arith.h --- linux-2.6.0-test5/include/asm-generic/cpumask_arith.h 2003-09-08 12:50:16.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-generic/cpumask_arith.h 2003-09-25 19:16:10.000000000 -0700 @@ -27,7 +27,12 @@ #define cpus_shift_right(dst, src, n) do { dst = (src) >> (n); } while (0) #define cpus_shift_left(dst, src, n) do { dst = (src) << (n); } while (0) -#define any_online_cpu(map) ({ (map) ? first_cpu(map) : NR_CPUS; }) +#define any_online_cpu(map) \ +({ \ + cpumask_t __tmp__; \ + cpus_and(__tmp__, map, cpu_online_map); \ + __tmp__ ? first_cpu(__tmp__) : NR_CPUS; \ +}) #define CPU_MASK_ALL (~((cpumask_t)0) >> (8*sizeof(cpumask_t) - NR_CPUS)) #define CPU_MASK_NONE ((cpumask_t)0) diff -prauN linux-2.6.0-test5/include/asm-generic/cpumask_array.h wli-2.6.0-test5-bk12-25/include/asm-generic/cpumask_array.h --- linux-2.6.0-test5/include/asm-generic/cpumask_array.h 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-generic/cpumask_array.h 2003-09-25 19:16:10.000000000 -0700 @@ -36,7 +36,13 @@ cpu_set(cpu, __cpu_mask); \ __cpu_mask; \ }) -#define any_online_cpu(map) find_first_bit((map).mask, NR_CPUS) +#define any_online_cpu(map) \ +({ \ + cpumask_t __tmp__; \ + cpus_and(__tmp__, map, cpu_online_map); \ + find_first_bit(__tmp__.mask, NR_CPUS); \ +}) + /* * um, these need to be usable as static initializers diff -prauN linux-2.6.0-test5/include/asm-generic/cpumask_up.h wli-2.6.0-test5-bk12-25/include/asm-generic/cpumask_up.h --- linux-2.6.0-test5/include/asm-generic/cpumask_up.h 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-generic/cpumask_up.h 2003-09-25 19:16:10.000000000 -0700 @@ -6,7 +6,7 @@ #define cpu_set(cpu, map) do { (void)(cpu); cpus_coerce(map) = 1UL; } while (0) #define cpu_clear(cpu, map) do { (void)(cpu); cpus_coerce(map) = 0UL; } while (0) #define cpu_isset(cpu, map) ((void)(cpu), cpus_coerce(map) != 0UL) -#define cpu_test_and_set(cpu, map) ((void)(cpu), test_and_set_bit(0, (map).mask)) +#define cpu_test_and_set(cpu, map) ((void)(cpu), test_and_set_bit(0, &(map))) #define cpus_and(dst, src1, src2) \ do { \ diff -prauN linux-2.6.0-test5/include/asm-generic/rmap.h wli-2.6.0-test5-bk12-25/include/asm-generic/rmap.h --- linux-2.6.0-test5/include/asm-generic/rmap.h 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-generic/rmap.h 1969-12-31 16:00:00.000000000 -0800 @@ -1,90 +0,0 @@ -#ifndef _GENERIC_RMAP_H -#define _GENERIC_RMAP_H -/* - * linux/include/asm-generic/rmap.h - * - * Architecture dependent parts of the reverse mapping code, - * this version should work for most architectures with a - * 'normal' page table layout. - * - * We use the struct page of the page table page to find out - * the process and full address of a page table entry: - * - page->mapping points to the process' mm_struct - * - page->index has the high bits of the address - * - the lower bits of the address are calculated from the - * offset of the page table entry within the page table page - * - * For CONFIG_HIGHPTE, we need to represent the address of a pte in a - * scalar pte_addr_t. The pfn of the pte's page is shifted left by PAGE_SIZE - * bits and is then ORed with the byte offset of the pte within its page. - * - * For CONFIG_HIGHMEM4G, the pte_addr_t is 32 bits. 20 for the pfn, 12 for - * the offset. - * - * For CONFIG_HIGHMEM64G, the pte_addr_t is 64 bits. 52 for the pfn, 12 for - * the offset. - */ -#include - -static inline void pgtable_add_rmap(struct page * page, struct mm_struct * mm, unsigned long address) -{ -#ifdef BROKEN_PPC_PTE_ALLOC_ONE - /* OK, so PPC calls pte_alloc() before mem_map[] is setup ... ;( */ - extern int mem_init_done; - - if (!mem_init_done) - return; -#endif - page->mapping = (void *)mm; - page->index = address & ~((PTRS_PER_PTE * PAGE_SIZE) - 1); - inc_page_state(nr_page_table_pages); -} - -static inline void pgtable_remove_rmap(struct page * page) -{ - page->mapping = NULL; - page->index = 0; - dec_page_state(nr_page_table_pages); -} - -static inline struct mm_struct * ptep_to_mm(pte_t * ptep) -{ - struct page * page = kmap_atomic_to_page(ptep); - return (struct mm_struct *) page->mapping; -} - -static inline unsigned long ptep_to_address(pte_t * ptep) -{ - struct page * page = kmap_atomic_to_page(ptep); - unsigned long low_bits; - low_bits = ((unsigned long)ptep & ~PAGE_MASK) * PTRS_PER_PTE; - return page->index + low_bits; -} - -#ifdef CONFIG_HIGHPTE -static inline pte_addr_t ptep_to_paddr(pte_t *ptep) -{ - pte_addr_t paddr; - paddr = ((pte_addr_t)page_to_pfn(kmap_atomic_to_page(ptep))) << PAGE_SHIFT; - return paddr + (pte_addr_t)((unsigned long)ptep & ~PAGE_MASK); -} -#else -static inline pte_addr_t ptep_to_paddr(pte_t *ptep) -{ - return (pte_addr_t)ptep; -} -#endif - -#ifndef CONFIG_HIGHPTE -static inline pte_t *rmap_ptep_map(pte_addr_t pte_paddr) -{ - return (pte_t *)pte_paddr; -} - -static inline void rmap_ptep_unmap(pte_t *pte) -{ - return; -} -#endif - -#endif /* _GENERIC_RMAP_H */ diff -prauN linux-2.6.0-test5/include/asm-h8300/pgtable.h wli-2.6.0-test5-bk12-25/include/asm-h8300/pgtable.h --- linux-2.6.0-test5/include/asm-h8300/pgtable.h 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-h8300/pgtable.h 2003-09-25 20:03:31.000000000 -0700 @@ -18,6 +18,11 @@ typedef pte_t *pte_addr_t; #define pmd_none(pmd) (1) #define pgd_offset_k(adrdress) ((pgd_t *)0) #define pte_offset_kernel(dir, address) ((pte_t *)0) +#define pmd_offset_kernel(a,b) pmd_offset(a,b) +#define pmd_offset_map(a,b) pmd_offset(a,b) +#define pmd_offset_map_nested(a,b) pmd_offset(a,b) +#define pmd_unmap(pmd) do { } while (0) +#define pmd_unmap_nested(pmd) do { } while (0) #define PAGE_NONE __pgprot(0) /* these mean nothing to NO_MM */ #define PAGE_SHARED __pgprot(0) /* these mean nothing to NO_MM */ diff -prauN linux-2.6.0-test5/include/asm-h8300/posix_types.h wli-2.6.0-test5-bk12-25/include/asm-h8300/posix_types.h --- linux-2.6.0-test5/include/asm-h8300/posix_types.h 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-h8300/posix_types.h 2003-09-25 19:16:10.000000000 -0700 @@ -7,7 +7,6 @@ * assume GCC is being used. */ -typedef unsigned short __kernel_dev_t; typedef unsigned long __kernel_ino_t; typedef unsigned short __kernel_mode_t; typedef unsigned short __kernel_nlink_t; diff -prauN linux-2.6.0-test5/include/asm-h8300/processor.h wli-2.6.0-test5-bk12-25/include/asm-h8300/processor.h --- linux-2.6.0-test5/include/asm-h8300/processor.h 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-h8300/processor.h 2003-09-25 19:16:10.000000000 -0700 @@ -48,7 +48,6 @@ extern inline void wrusp(unsigned long u /* * Bus types */ -#define EISA_bus 0 #define MCA_bus 0 struct thread_struct { diff -prauN linux-2.6.0-test5/include/asm-h8300/signal.h wli-2.6.0-test5-bk12-25/include/asm-h8300/signal.h --- linux-2.6.0-test5/include/asm-h8300/signal.h 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-h8300/signal.h 2003-09-25 19:16:10.000000000 -0700 @@ -68,7 +68,7 @@ typedef unsigned long sigset_t; /* These should not be considered constants from userland. */ #define SIGRTMIN 32 -#define SIGRTMAX (_NSIG-1) +#define SIGRTMAX _NSIG /* * SA_FLAGS values: diff -prauN linux-2.6.0-test5/include/asm-h8300/stat.h wli-2.6.0-test5-bk12-25/include/asm-h8300/stat.h --- linux-2.6.0-test5/include/asm-h8300/stat.h 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-h8300/stat.h 2003-09-25 19:16:10.000000000 -0700 @@ -42,8 +42,7 @@ struct stat { * insane amounts of padding around dev_t's. */ struct stat64 { - unsigned char __pad0[6]; - unsigned short st_dev; + unsigned long long st_dev; unsigned char __pad1[2]; #define STAT64_HAS_BROKEN_ST_INO 1 @@ -55,8 +54,7 @@ struct stat64 { unsigned long st_uid; unsigned long st_gid; - unsigned char __pad2[6]; - unsigned short st_rdev; + unsigned long long st_rdev; unsigned char __pad3[2]; long long st_size; diff -prauN linux-2.6.0-test5/include/asm-i386/a.out.h wli-2.6.0-test5-bk12-25/include/asm-i386/a.out.h --- linux-2.6.0-test5/include/asm-i386/a.out.h 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-i386/a.out.h 2003-09-29 01:15:24.000000000 -0700 @@ -19,7 +19,11 @@ struct exec #ifdef __KERNEL__ +#ifdef CONFIG_MMAP_TOPDOWN +#define STACK_TOP (128 << 20) +#else #define STACK_TOP TASK_SIZE +#endif #endif diff -prauN linux-2.6.0-test5/include/asm-i386/cpufeature.h wli-2.6.0-test5-bk12-25/include/asm-i386/cpufeature.h --- linux-2.6.0-test5/include/asm-i386/cpufeature.h 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-i386/cpufeature.h 2003-09-25 19:16:10.000000000 -0700 @@ -71,6 +71,8 @@ /* Intel-defined CPU features, CPUID level 0x00000001 (ecx), word 4 */ #define X86_FEATURE_EST (4*32+ 7) /* Enhanced SpeedStep */ +#define X86_FEATURE_MWAIT (4*32+ 3) /* Monitor/Mwait support */ + /* VIA/Cyrix/Centaur-defined CPU features, CPUID level 0xC0000001, word 5 */ #define X86_FEATURE_XSTORE (5*32+ 2) /* on-CPU RNG present (xstore insn) */ diff -prauN linux-2.6.0-test5/include/asm-i386/edd.h wli-2.6.0-test5-bk12-25/include/asm-i386/edd.h --- linux-2.6.0-test5/include/asm-i386/edd.h 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-i386/edd.h 2003-09-25 19:16:10.000000000 -0700 @@ -1,6 +1,6 @@ /* * linux/include/asm-i386/edd.h - * Copyright (C) 2002 Dell Computer Corporation + * Copyright (C) 2002 Dell Inc. * by Matt Domsch * * structures and definitions for the int 13h, ax={41,48}h diff -prauN linux-2.6.0-test5/include/asm-i386/genapic.h wli-2.6.0-test5-bk12-25/include/asm-i386/genapic.h --- linux-2.6.0-test5/include/asm-i386/genapic.h 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-i386/genapic.h 2003-09-25 19:16:10.000000000 -0700 @@ -30,6 +30,7 @@ struct genapic { unsigned long (*check_apicid_used)(physid_mask_t bitmap, int apicid); unsigned long (*check_apicid_present)(int apicid); int no_balance_irq; + int no_ioapic_check; void (*init_apic_ldr)(void); physid_mask_t (*ioapic_phys_id_map)(physid_mask_t map); @@ -77,6 +78,7 @@ struct genapic { .int_dest_mode = INT_DEST_MODE, \ .apic_broadcast_id = APIC_BROADCAST_ID, \ .no_balance_irq = NO_BALANCE_IRQ, \ + .no_ioapic_check = NO_IOAPIC_CHECK, \ APICFUNC(apic_id_registered), \ APICFUNC(target_cpus), \ APICFUNC(check_apicid_used), \ diff -prauN linux-2.6.0-test5/include/asm-i386/highmem.h wli-2.6.0-test5-bk12-25/include/asm-i386/highmem.h --- linux-2.6.0-test5/include/asm-i386/highmem.h 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-i386/highmem.h 2003-09-28 21:58:40.000000000 -0700 @@ -41,9 +41,9 @@ extern void kmap_init(void); * chunk of RAM. */ #if NR_CPUS <= 32 -#define PKMAP_BASE (0xff800000UL) +#define PKMAP_BASE (0xff400000UL) #else -#define PKMAP_BASE (0xff600000UL) +#define PKMAP_BASE (0xfe800000UL) #endif #ifdef CONFIG_X86_PAE #define LAST_PKMAP 512 @@ -54,14 +54,60 @@ extern void kmap_init(void); #define PKMAP_NR(virt) ((virt-PKMAP_BASE) >> PAGE_SHIFT) #define PKMAP_ADDR(nr) (PKMAP_BASE + ((nr) << PAGE_SHIFT)) -extern void * FASTCALL(kmap_high(struct page *page)); -extern void FASTCALL(kunmap_high(struct page *page)); +void *FASTCALL(kmap_high(struct page *page)); +void FASTCALL(kunmap_high(struct page *page)); -void *kmap(struct page *page); -void kunmap(struct page *page); -void *kmap_atomic(struct page *page, enum km_type type); -void kunmap_atomic(void *kvaddr, enum km_type type); -struct page *kmap_atomic_to_page(void *ptr); +void *FASTCALL(__kmap_atomic(struct page *page, enum km_type type, unsigned long vaddr)); + +static inline void *kmap(struct page *page) +{ + might_sleep(); + if (page < highmem_start_page) + return lowmem_page_address(page); + else + return kmap_high(page); +} + +static inline void kunmap(struct page *page) +{ + BUG_ON(in_interrupt()); + if (page >= highmem_start_page) + kunmap_high(page); +} + +static inline void *kmap_atomic(struct page *page, enum km_type type) +{ + inc_preempt_count(); + if (page < highmem_start_page) + return lowmem_page_address(page); + else + return __kmap_atomic(page, type, __fix_to_virt(FIX_KMAP_BEGIN + type)); +} + +#ifdef CONFIG_DEBUG_HIGHMEM +void FASTCALL(__kunmap_atomic(void *kvaddr, enum km_type type, unsigned long vaddr)); +#else +static inline void __kunmap_atomic(void *kvaddr, enum km_type idx, unsigned long vaddr) +{ +} +#endif + +static inline void kunmap_atomic(void *kvaddr, enum km_type type) +{ + if ((unsigned long)kvaddr >= FIXADDR_START) + __kunmap_atomic(kvaddr, type, __fix_to_virt(FIX_KMAP_BEGIN + type)); + dec_preempt_count(); +} + +static inline struct page *kmap_atomic_to_page(void *vaddr) +{ + if ((unsigned long)vaddr < FIXADDR_START) + return virt_to_page(vaddr); + else { + unsigned long idx = virt_to_fix((unsigned long)vaddr); + return pte_page(*(kmap_pte - (idx - FIX_KMAP_BEGIN))); + } +} #endif /* __KERNEL__ */ diff -prauN linux-2.6.0-test5/include/asm-i386/ist.h wli-2.6.0-test5-bk12-25/include/asm-i386/ist.h --- linux-2.6.0-test5/include/asm-i386/ist.h 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/include/asm-i386/ist.h 2003-09-25 19:16:10.000000000 -0700 @@ -0,0 +1,32 @@ +#ifndef _ASM_IST_H +#define _ASM_IST_H + +/* + * Include file for the interface to IST BIOS + * Copyright 2002 Andy Grover + * + * 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. + */ + + +#ifdef __KERNEL__ + +struct ist_info { + unsigned long signature; + unsigned long command; + unsigned long event; + unsigned long perf_level; +}; + +extern struct ist_info ist_info; + +#endif /* __KERNEL__ */ +#endif /* _ASM_IST_H */ diff -prauN linux-2.6.0-test5/include/asm-i386/kmap_types.h wli-2.6.0-test5-bk12-25/include/asm-i386/kmap_types.h --- linux-2.6.0-test5/include/asm-i386/kmap_types.h 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-i386/kmap_types.h 2003-09-25 20:03:31.000000000 -0700 @@ -17,14 +17,16 @@ D(3) KM_USER0, D(4) KM_USER1, D(5) KM_BIO_SRC_IRQ, D(6) KM_BIO_DST_IRQ, -D(7) KM_PTE0, -D(8) KM_PTE1, -D(9) KM_PTE2, -D(10) KM_IRQ0, -D(11) KM_IRQ1, -D(12) KM_SOFTIRQ0, -D(13) KM_SOFTIRQ1, -D(14) KM_TYPE_NR +D(7) KM_PMD0, +D(8) KM_PMD1, +D(9) KM_PTE0, +D(10) KM_PTE1, +D(11) KM_PTE2, +D(12) KM_IRQ0, +D(13) KM_IRQ1, +D(14) KM_SOFTIRQ0, +D(15) KM_SOFTIRQ1, +D(16) KM_TYPE_NR }; #undef D diff -prauN linux-2.6.0-test5/include/asm-i386/linkage.h wli-2.6.0-test5-bk12-25/include/asm-i386/linkage.h --- linux-2.6.0-test5/include/asm-i386/linkage.h 2003-09-08 12:50:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-i386/linkage.h 2003-09-28 22:07:47.000000000 -0700 @@ -3,6 +3,7 @@ #define asmlinkage CPP_ASMLINKAGE __attribute__((regparm(0))) #define FASTCALL(x) x __attribute__((regparm(3))) +#define IRQHANDLER(x) x __attribute__((regparm(1))) #ifdef CONFIG_X86_ALIGNMENT_16 #define __ALIGN .align 16,0x90 diff -prauN linux-2.6.0-test5/include/asm-i386/mach-bigsmp/mach_apic.h wli-2.6.0-test5-bk12-25/include/asm-i386/mach-bigsmp/mach_apic.h --- linux-2.6.0-test5/include/asm-i386/mach-bigsmp/mach_apic.h 2003-09-08 12:50:29.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-i386/mach-bigsmp/mach_apic.h 2003-09-25 19:16:11.000000000 -0700 @@ -14,6 +14,8 @@ #define NO_BALANCE_IRQ (1) #define esr_disable (1) +#define NO_IOAPIC_CHECK (0) + static inline int apic_id_registered(void) { return (1); diff -prauN linux-2.6.0-test5/include/asm-i386/mach-default/mach_apic.h wli-2.6.0-test5-bk12-25/include/asm-i386/mach-default/mach_apic.h --- linux-2.6.0-test5/include/asm-i386/mach-default/mach_apic.h 2003-09-08 12:50:48.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-i386/mach-default/mach_apic.h 2003-09-25 19:16:11.000000000 -0700 @@ -18,6 +18,8 @@ static inline cpumask_t target_cpus(void #define NO_BALANCE_IRQ (0) #define esr_disable (0) +#define NO_IOAPIC_CHECK (0) + #define INT_DELIVERY_MODE dest_LowestPrio #define INT_DEST_MODE 1 /* logical delivery broadcast to all procs */ diff -prauN linux-2.6.0-test5/include/asm-i386/mach-generic/mach_apic.h wli-2.6.0-test5-bk12-25/include/asm-i386/mach-generic/mach_apic.h --- linux-2.6.0-test5/include/asm-i386/mach-generic/mach_apic.h 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-i386/mach-generic/mach_apic.h 2003-09-25 19:16:11.000000000 -0700 @@ -5,6 +5,7 @@ #define esr_disable (genapic->esr_disable) #define NO_BALANCE_IRQ (genapic->no_balance_irq) +#define NO_IOAPIC_CHECK (genapic->no_ioapic_check) #define APIC_BROADCAST_ID (genapic->apic_broadcast_id) #define INT_DELIVERY_MODE (genapic->int_delivery_mode) #define INT_DEST_MODE (genapic->int_dest_mode) diff -prauN linux-2.6.0-test5/include/asm-i386/mach-numaq/mach_apic.h wli-2.6.0-test5-bk12-25/include/asm-i386/mach-numaq/mach_apic.h --- linux-2.6.0-test5/include/asm-i386/mach-numaq/mach_apic.h 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-i386/mach-numaq/mach_apic.h 2003-09-25 19:16:11.000000000 -0700 @@ -17,6 +17,8 @@ static inline cpumask_t target_cpus(void #define NO_BALANCE_IRQ (1) #define esr_disable (1) +#define NO_IOAPIC_CHECK (0) + #define INT_DELIVERY_MODE dest_LowestPrio #define INT_DEST_MODE 0 /* physical delivery on LOCAL quad */ diff -prauN linux-2.6.0-test5/include/asm-i386/mach-summit/mach_apic.h wli-2.6.0-test5-bk12-25/include/asm-i386/mach-summit/mach_apic.h --- linux-2.6.0-test5/include/asm-i386/mach-summit/mach_apic.h 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-i386/mach-summit/mach_apic.h 2003-09-25 19:16:11.000000000 -0700 @@ -7,14 +7,13 @@ #define esr_disable (1) #define NO_BALANCE_IRQ (0) -#define XAPIC_DEST_CPUS_MASK 0x0Fu -#define XAPIC_DEST_CLUSTER_MASK 0xF0u +#define NO_IOAPIC_CHECK (1) /* Don't check I/O APIC ID for xAPIC */ -static inline unsigned long xapic_phys_to_log_apicid(int phys_apic) -{ - return ( (1ul << ((phys_apic) & 0x3)) | - ((phys_apic) & XAPIC_DEST_CLUSTER_MASK) ); -} +/* In clustered mode, the high nibble of APIC ID is a cluster number. + * The low nibble is a 4-bit bitmap. */ +#define XAPIC_DEST_CPUS_SHIFT 4 +#define XAPIC_DEST_CPUS_MASK ((1u << XAPIC_DEST_CPUS_SHIFT) - 1) +#define XAPIC_DEST_CLUSTER_MASK (XAPIC_DEST_CPUS_MASK << XAPIC_DEST_CPUS_SHIFT) #define APIC_DFR_VALUE (APIC_DFR_CLUSTER) @@ -40,15 +39,29 @@ static inline unsigned long check_apicid return 1; } -#define apicid_cluster(apicid) (apicid & 0xF0) +#define apicid_cluster(apicid) ((apicid) & XAPIC_DEST_CLUSTER_MASK) extern u8 bios_cpu_apicid[]; +extern u8 cpu_2_logical_apicid[]; static inline void init_apic_ldr(void) { unsigned long val, id; - - id = xapic_phys_to_log_apicid(hard_smp_processor_id()); + int i, count; + u8 lid; + u8 my_id = (u8)hard_smp_processor_id(); + u8 my_cluster = (u8)apicid_cluster(my_id); + + /* Create logical APIC IDs by counting CPUs already in cluster. */ + for (count = 0, i = NR_CPUS; --i >= 0; ) { + lid = cpu_2_logical_apicid[i]; + if (lid != BAD_APICID && apicid_cluster(lid) == my_cluster) + ++count; + } + /* We only have a 4 wide bitmap in cluster mode. If a deranged + * BIOS puts 5 CPUs in one APIC cluster, we're hosed. */ + BUG_ON(count >= XAPIC_DEST_CPUS_SHIFT); + id = my_cluster | (1UL << count); apic_write_around(APIC_DFR, APIC_DFR_VALUE); val = apic_read(APIC_LDR) & ~APIC_LDR_MASK; val |= SET_APIC_LOGICAL_ID(id); @@ -77,7 +90,6 @@ static inline int apicid_to_node(int log } /* Mapping from cpu number to logical apicid */ -extern u8 cpu_2_logical_apicid[]; static inline int cpu_to_logical_apicid(int cpu) { if (cpu >= NR_CPUS) diff -prauN linux-2.6.0-test5/include/asm-i386/mach-visws/mach_apic.h wli-2.6.0-test5-bk12-25/include/asm-i386/mach-visws/mach_apic.h --- linux-2.6.0-test5/include/asm-i386/mach-visws/mach_apic.h 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-i386/mach-visws/mach_apic.h 2003-09-25 19:16:11.000000000 -0700 @@ -8,6 +8,8 @@ #define no_balance_irq (0) #define esr_disable (0) +#define NO_IOAPIC_CHECK (0) + #define INT_DELIVERY_MODE dest_LowestPrio #define INT_DEST_MODE 1 /* logical delivery broadcast to all procs */ diff -prauN linux-2.6.0-test5/include/asm-i386/mmzone.h wli-2.6.0-test5-bk12-25/include/asm-i386/mmzone.h --- linux-2.6.0-test5/include/asm-i386/mmzone.h 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-i386/mmzone.h 2003-09-25 19:16:11.000000000 -0700 @@ -119,14 +119,32 @@ static inline struct pglist_data *pfn_to #ifdef CONFIG_X86_NUMAQ #include -#elif CONFIG_NUMA /* summit or generic arch */ +#elif CONFIG_ACPI_SRAT #include #elif CONFIG_X86_PC -#define get_memcfg_numa get_memcfg_numa_flat #define get_zholes_size(n) (0) #else #define pfn_to_nid(pfn) (0) #endif /* CONFIG_X86_NUMAQ */ +extern int get_memcfg_numa_flat(void ); +/* + * This allows any one NUMA architecture to be compiled + * for, and still fall back to the flat function if it + * fails. + */ +static inline void get_memcfg_numa(void) +{ +#ifdef CONFIG_X86_NUMAQ + if (get_memcfg_numaq()) + return; +#elif CONFIG_ACPI_SRAT + if (get_memcfg_from_srat()) + return; +#endif + + get_memcfg_numa_flat(); +} + #endif /* CONFIG_DISCONTIGMEM */ #endif /* _ASM_MMZONE_H_ */ diff -prauN linux-2.6.0-test5/include/asm-i386/numaq.h wli-2.6.0-test5-bk12-25/include/asm-i386/numaq.h --- linux-2.6.0-test5/include/asm-i386/numaq.h 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-i386/numaq.h 2003-09-29 01:08:18.000000000 -0700 @@ -29,8 +29,8 @@ #ifdef CONFIG_X86_NUMAQ #define MAX_NUMNODES 16 -extern void get_memcfg_numaq(void); -#define get_memcfg_numa() get_memcfg_numaq() +#define MAX_NODE_CPUS 4 +extern int get_memcfg_numaq(void); /* * SYS_CFG_DATA_PRIV_ADDR, struct eachquadmem, and struct sys_cfg_data are the diff -prauN linux-2.6.0-test5/include/asm-i386/numnodes.h wli-2.6.0-test5-bk12-25/include/asm-i386/numnodes.h --- linux-2.6.0-test5/include/asm-i386/numnodes.h 2003-09-08 12:49:54.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-i386/numnodes.h 2003-09-25 19:16:11.000000000 -0700 @@ -5,7 +5,7 @@ #ifdef CONFIG_X86_NUMAQ #include -#elif CONFIG_NUMA +#elif CONFIG_ACPI_SRAT #include #else #define MAX_NUMNODES 1 diff -prauN linux-2.6.0-test5/include/asm-i386/page.h wli-2.6.0-test5-bk12-25/include/asm-i386/page.h --- linux-2.6.0-test5/include/asm-i386/page.h 2003-09-08 12:49:54.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-i386/page.h 2003-09-28 22:06:44.000000000 -0700 @@ -3,7 +3,11 @@ /* PAGE_SHIFT determines the page size */ #define PAGE_SHIFT 12 -#define PAGE_SIZE (1UL << PAGE_SHIFT) +#ifndef __ASSEMBLY__ +#define PAGE_SIZE (1UL << PAGE_SHIFT) +#else +#define PAGE_SIZE (1 << PAGE_SHIFT) +#endif #define PAGE_MASK (~(PAGE_SIZE-1)) #define LARGE_PAGE_MASK (~(LARGE_PAGE_SIZE-1)) diff -prauN linux-2.6.0-test5/include/asm-i386/percpu.h wli-2.6.0-test5-bk12-25/include/asm-i386/percpu.h --- linux-2.6.0-test5/include/asm-i386/percpu.h 2003-09-08 12:50:29.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-i386/percpu.h 2003-09-29 01:07:31.000000000 -0700 @@ -3,4 +3,9 @@ #include +#ifdef CONFIG_NUMA +#undef __GENERIC_PER_CPU +void setup_per_cpu_areas(void); +#endif + #endif /* __ARCH_I386_PERCPU__ */ diff -prauN linux-2.6.0-test5/include/asm-i386/pgalloc.h wli-2.6.0-test5-bk12-25/include/asm-i386/pgalloc.h --- linux-2.6.0-test5/include/asm-i386/pgalloc.h 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-i386/pgalloc.h 2003-09-25 20:26:41.000000000 -0700 @@ -31,25 +31,36 @@ static inline void pte_free_kernel(pte_t free_page((unsigned long)pte); } -static inline void pte_free(struct page *pte) -{ - __free_page(pte); -} - - -#define __pte_free_tlb(tlb,pte) tlb_remove_page((tlb),(pte)) - /* * allocating and freeing a pmd is trivial: the 1-entry pmd is * inside the pgd, so has no extra memory associated with it. * (In the PAE case we free the pmds as part of the pgd.) */ -#define pmd_alloc_one(mm, addr) ({ BUG(); ((pmd_t *)2); }) +#define pmd_alloc_one(mm, addr) ({ BUG(); ((struct page *)2); }) +#define pmd_alloc_one_kernel(mm, addr) ({ BUG(); ((pmd_t *)2); }) #define pmd_free(x) do { } while (0) #define __pmd_free_tlb(tlb,x) do { } while (0) #define pgd_populate(mm, pmd, pte) BUG() #define check_pgt_cache() do { } while (0) +#include + +static inline void pte_free(struct page *page) +{ + struct mmu_gather *tlb = &per_cpu(mmu_gathers, get_cpu()); + tlb_remove_page(tlb, page); + put_cpu(); +} + +static inline void pte_free_tlb(struct mmu_gather *tlb, struct page *page) +{ + tlb_remove_page(tlb, page); +} + +static inline void pmd_free_tlb(struct mmu_gather *tlb, struct page *page) +{ +} + #endif /* _I386_PGALLOC_H */ diff -prauN linux-2.6.0-test5/include/asm-i386/pgtable-2level.h wli-2.6.0-test5-bk12-25/include/asm-i386/pgtable-2level.h --- linux-2.6.0-test5/include/asm-i386/pgtable-2level.h 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-i386/pgtable-2level.h 2003-09-25 20:03:31.000000000 -0700 @@ -48,13 +48,15 @@ static inline int pgd_present(pgd_t pgd) #define set_pmd(pmdptr, pmdval) (*(pmdptr) = pmdval) #define set_pgd(pgdptr, pgdval) (*(pgdptr) = pgdval) -#define pgd_page(pgd) \ -((unsigned long) __va(pgd_val(pgd) & PAGE_MASK)) +#define pgd_page(pgd) pfn_to_page(pgd_val(pgd) >> PAGE_SHIFT) + +#define pmd_offset_map(pgd, addr) ({ (pmd_t *)(pgd); }) +#define pmd_offset_map_nested(pgd, addr) pmd_offset_map(pgd, addr) +#define pmd_offset_kernel(pgd, addr) pmd_offset_map(pgd, addr) + +#define pmd_unmap(pmd) do { } while (0) +#define pmd_unmap_nested(pmd) do { } while (0) -static inline pmd_t * pmd_offset(pgd_t * dir, unsigned long address) -{ - return (pmd_t *) dir; -} #define ptep_get_and_clear(xp) __pte(xchg(&(xp)->pte_low, 0)) #define pte_same(a, b) ((a).pte_low == (b).pte_low) #define pte_page(x) pfn_to_page(pte_pfn(x)) diff -prauN linux-2.6.0-test5/include/asm-i386/pgtable-3level.h wli-2.6.0-test5-bk12-25/include/asm-i386/pgtable-3level.h --- linux-2.6.0-test5/include/asm-i386/pgtable-3level.h 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-i386/pgtable-3level.h 2003-09-25 20:03:31.000000000 -0700 @@ -64,12 +64,32 @@ static inline void set_pte(pte_t *ptep, */ static inline void pgd_clear (pgd_t * pgd) { } -#define pgd_page(pgd) \ -((unsigned long) __va(pgd_val(pgd) & PAGE_MASK)) +static inline unsigned long pgd_pfn(pgd_t pgd) +{ + return pgd_val(pgd) >> PAGE_SHIFT; +} + +#define pgd_page(pgd) pfn_to_page(pgd_pfn(pgd)) + +#define pmd_offset_kernel(pgd, addr) \ + ((pmd_t *)__va(pgd_val(*(pgd)) & PAGE_MASK) + pmd_index(addr)) /* Find an entry in the second-level page table.. */ -#define pmd_offset(dir, address) ((pmd_t *) pgd_page(*(dir)) + \ - pmd_index(address)) +#ifdef CONFIG_HIGHPMD +#define __pmd_offset(pgd, addr, type) \ + ((pmd_t *)kmap_atomic(pgd_page(*(pgd)), type) + pmd_index(addr)) +#define __pmd_unmap(pmd, type) kunmap_atomic(pmd, type) +#else +#define __pmd_offset(pgd, addr, type) \ + ((pmd_t *)__va(pgd_val(*(pgd)) & PAGE_MASK) + pmd_index(addr)) +#define __pmd_unmap(pmd, type) do { } while (0) +#endif + +#define pmd_offset_map(pgd, addr) __pmd_offset(pgd, addr, KM_PMD0) +#define pmd_offset_map_nested(pgd, addr) __pmd_offset(pgd, addr, KM_PMD1) + +#define pmd_unmap(pmd) __pmd_unmap(pmd, KM_PMD0); +#define pmd_unmap_nested(pmd) __pmd_unmap(pmd, KM_PMD1); static inline pte_t ptep_get_and_clear(pte_t *ptep) { diff -prauN linux-2.6.0-test5/include/asm-i386/pgtable.h wli-2.6.0-test5-bk12-25/include/asm-i386/pgtable.h --- linux-2.6.0-test5/include/asm-i386/pgtable.h 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-i386/pgtable.h 2003-09-29 01:15:24.000000000 -0700 @@ -25,6 +25,10 @@ #include #include +#ifdef CONFIG_MMAP_TOPDOWN +#define HAVE_ARCH_UNMAPPED_AREA +#endif + /* * ZERO_PAGE is a global shared page that is always zero: used * for zero-mapped memory areas etc.. @@ -33,16 +37,17 @@ extern unsigned long empty_zero_page[1024]; extern pgd_t swapper_pg_dir[1024]; extern kmem_cache_t *pgd_cache; -extern kmem_cache_t *pmd_cache; extern spinlock_t pgd_lock; extern struct list_head pgd_list; -void pmd_ctor(void *, kmem_cache_t *, unsigned long); void pgd_ctor(void *, kmem_cache_t *, unsigned long); void pgd_dtor(void *, kmem_cache_t *, unsigned long); void pgtable_cache_init(void); void paging_init(void); +#define HAVE_ARCH_PAGETABLE_CACHE +void shrink_pagetable_cache(int gfp_mask); + #endif /* !__ASSEMBLY__ */ /* diff -prauN linux-2.6.0-test5/include/asm-i386/posix_types.h wli-2.6.0-test5-bk12-25/include/asm-i386/posix_types.h --- linux-2.6.0-test5/include/asm-i386/posix_types.h 2003-09-08 12:50:32.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-i386/posix_types.h 2003-09-25 19:16:11.000000000 -0700 @@ -7,7 +7,6 @@ * assume GCC is being used. */ -typedef unsigned short __kernel_dev_t; typedef unsigned long __kernel_ino_t; typedef unsigned short __kernel_mode_t; typedef unsigned short __kernel_nlink_t; diff -prauN linux-2.6.0-test5/include/asm-i386/processor.h wli-2.6.0-test5-bk12-25/include/asm-i386/processor.h --- linux-2.6.0-test5/include/asm-i386/processor.h 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-i386/processor.h 2003-09-25 19:16:11.000000000 -0700 @@ -260,11 +260,6 @@ static inline void clear_in_cr4 (unsigne * Bus types (default is ISA, but people can check others with these..) * pc98 indicates PC98 systems (CBUS) */ -#ifdef CONFIG_EISA -extern int EISA_bus; -#else -#define EISA_bus (0) -#endif extern int MCA_bus; #ifdef CONFIG_X86_PC9800 #define pc98 1 @@ -272,6 +267,22 @@ extern int MCA_bus; #define pc98 0 #endif +static inline void __monitor(const void *eax, unsigned long ecx, + unsigned long edx) +{ + /* "monitor %eax,%ecx,%edx;" */ + asm volatile( + ".byte 0x0f,0x01,0xc8;" + : :"a" (eax), "c" (ecx), "d"(edx)); +} + +static inline void __mwait(unsigned long eax, unsigned long ecx) +{ + /* "mwait %eax,%ecx;" */ + asm volatile( + ".byte 0x0f,0x01,0xc9;" + : :"a" (eax), "c" (ecx)); +} /* from system description table in BIOS. Mostly for MCA use, but others may find it useful. */ @@ -601,4 +612,6 @@ extern inline void prefetchw(const void } #define spin_lock_prefetch(x) prefetchw(x) +extern void select_idle_routine(const struct cpuinfo_x86 *c); + #endif /* __ASM_I386_PROCESSOR_H */ diff -prauN linux-2.6.0-test5/include/asm-i386/rmap.h wli-2.6.0-test5-bk12-25/include/asm-i386/rmap.h --- linux-2.6.0-test5/include/asm-i386/rmap.h 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-i386/rmap.h 1969-12-31 16:00:00.000000000 -0800 @@ -1,21 +0,0 @@ -#ifndef _I386_RMAP_H -#define _I386_RMAP_H - -/* nothing to see, move along */ -#include - -#ifdef CONFIG_HIGHPTE -static inline pte_t *rmap_ptep_map(pte_addr_t pte_paddr) -{ - unsigned long pfn = (unsigned long)(pte_paddr >> PAGE_SHIFT); - unsigned long off = ((unsigned long)pte_paddr) & ~PAGE_MASK; - return (pte_t *)((char *)kmap_atomic(pfn_to_page(pfn), KM_PTE2) + off); -} - -static inline void rmap_ptep_unmap(pte_t *pte) -{ - kunmap_atomic(pte, KM_PTE2); -} -#endif - -#endif diff -prauN linux-2.6.0-test5/include/asm-i386/setup.h wli-2.6.0-test5-bk12-25/include/asm-i386/setup.h --- linux-2.6.0-test5/include/asm-i386/setup.h 2003-09-08 12:50:09.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-i386/setup.h 2003-09-25 19:16:11.000000000 -0700 @@ -26,6 +26,7 @@ #define E820_MAP_NR (*(char*) (PARAM+E820NR)) #define E820_MAP ((struct e820entry *) (PARAM+E820MAP)) #define APM_BIOS_INFO (*(struct apm_bios_info *) (PARAM+0x40)) +#define IST_INFO (*(struct ist_info *) (PARAM+0x60)) #define DRIVE_INFO (*(struct drive_info_struct *) (PARAM+0x80)) #define SYS_DESC_TABLE (*(struct sys_desc_table_struct*)(PARAM+0xa0)) #define MOUNT_ROOT_RDONLY (*(unsigned short *) (PARAM+0x1F2)) diff -prauN linux-2.6.0-test5/include/asm-i386/signal.h wli-2.6.0-test5-bk12-25/include/asm-i386/signal.h --- linux-2.6.0-test5/include/asm-i386/signal.h 2003-09-08 12:49:54.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-i386/signal.h 2003-09-25 19:16:11.000000000 -0700 @@ -70,7 +70,7 @@ typedef unsigned long sigset_t; /* These should not be considered constants from userland. */ #define SIGRTMIN 32 -#define SIGRTMAX (_NSIG-1) +#define SIGRTMAX _NSIG /* * SA_FLAGS values: diff -prauN linux-2.6.0-test5/include/asm-i386/srat.h wli-2.6.0-test5-bk12-25/include/asm-i386/srat.h --- linux-2.6.0-test5/include/asm-i386/srat.h 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-i386/srat.h 2003-09-29 01:08:35.000000000 -0700 @@ -27,9 +27,13 @@ #ifndef _ASM_SRAT_H_ #define _ASM_SRAT_H_ +#ifndef CONFIG_ACPI_SRAT +#error CONFIG_ACPI_SRAT not defined, and srat.h header has been included +#endif + #define MAX_NUMNODES 8 -extern void get_memcfg_from_srat(void); +#define MAX_NODE_CPUS 4 +extern int get_memcfg_from_srat(void); extern unsigned long *get_zholes_size(int); -#define get_memcfg_numa() get_memcfg_from_srat() #endif /* _ASM_SRAT_H_ */ diff -prauN linux-2.6.0-test5/include/asm-i386/system.h wli-2.6.0-test5-bk12-25/include/asm-i386/system.h --- linux-2.6.0-test5/include/asm-i386/system.h 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-i386/system.h 2003-09-25 20:26:41.000000000 -0700 @@ -461,6 +461,18 @@ struct alt_instr { /* For spinlocks etc */ #define local_irq_save(x) __asm__ __volatile__("pushfl ; popl %0 ; cli":"=g" (x): /* no input */ :"memory") +#ifdef CONFIG_SMP +#define smp_local_irq_save(x) local_irq_save(x) +#define smp_local_irq_restore(x) local_irq_restore(x) +#define smp_local_irq_disable() local_irq_disable() +#define smp_local_irq_enable() local_irq_enable() +#else +#define smp_local_irq_save(x) do { (void)(x); } while (0) +#define smp_local_irq_restore(x) do { (void)(x); } while (0) +#define smp_local_irq_disable() do { } while (0) +#define smp_local_irq_enable() do { } while (0) +#endif /* CONFIG_SMP */ + /* * disable hlt during certain critical i/o operations */ diff -prauN linux-2.6.0-test5/include/asm-i386/thread_info.h wli-2.6.0-test5-bk12-25/include/asm-i386/thread_info.h --- linux-2.6.0-test5/include/asm-i386/thread_info.h 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-i386/thread_info.h 2003-09-28 22:29:13.000000000 -0700 @@ -9,6 +9,8 @@ #ifdef __KERNEL__ +#include +#include #ifndef __ASSEMBLY__ #include #endif @@ -30,9 +32,11 @@ struct thread_info { __s32 preempt_count; /* 0 => preemptable, <0 => BUG */ mm_segment_t addr_limit; /* thread address space: + 0 for interrupts: illegal 0-0xBFFFFFFF for user-thead 0-0xFFFFFFFF for kernel-thread */ + struct thread_info *irq_stack; /* pointer to cpu irq stack */ struct restart_block restart_block; __u8 supervisor_stack[0]; @@ -48,7 +52,8 @@ struct thread_info { #define TI_CPU 0x00000010 #define TI_PRE_COUNT 0x00000014 #define TI_ADDR_LIMIT 0x00000018 -#define TI_RESTART_BLOCK 0x000001C +#define TI_IRQ_STACK 0x0000001C +#define TI_RESTART_BLOCK 0x0000026 #endif @@ -59,46 +64,60 @@ struct thread_info { * * preempt_count needs to be 1 initially, until the scheduler is functional. */ +#ifdef CONFIG_4K_STACK +#define THREAD_ORDER 0 +#else +#define THREAD_ORDER 1 +#endif +#define THREAD_SIZE (PAGE_SIZE << THREAD_ORDER) +#define INIT_THREAD_SIZE THREAD_SIZE +#define STACK_WARN (THREAD_SIZE/4) +#define STACK_PANIC (THREAD_SIZE/8) + #ifndef __ASSEMBLY__ -#define INIT_THREAD_INFO(tsk) \ -{ \ - .task = &tsk, \ - .exec_domain = &default_exec_domain, \ - .flags = 0, \ - .cpu = 0, \ - .preempt_count = 1, \ - .addr_limit = KERNEL_DS, \ - .restart_block = { \ - .fn = do_no_restart_syscall, \ - }, \ +#define INIT_THREAD_INFO(tsk) \ +{ \ + .task = &tsk, \ + .exec_domain = &default_exec_domain, \ + .flags = 0, \ + .cpu = 0, \ + .preempt_count = 1, \ + .addr_limit = KERNEL_DS, \ + .irq_stack = &init_irq_union.thread_info, \ + .restart_block = { \ + .fn = do_no_restart_syscall, \ + } \ } #define init_thread_info (init_thread_union.thread_info) #define init_stack (init_thread_union.stack) +/* thread information allocation */ +#define alloc_thread_info(task) ((struct thread_info *)kmalloc(THREAD_SIZE, GFP_KERNEL)) +#define free_thread_info(info) kfree(info) +#define get_thread_info(ti) get_task_struct((ti)->task) +#define put_thread_info(ti) put_task_struct((ti)->task) + /* how to get the thread information struct from C */ static inline struct thread_info *current_thread_info(void) { struct thread_info *ti; - __asm__("andl %%esp,%0; ":"=r" (ti) : "0" (~8191UL)); + __asm__("andl %%esp,%0; ":"=r" (ti) : "0" (~(THREAD_SIZE - 1))); return ti; } -/* thread information allocation */ -#define THREAD_SIZE (2*PAGE_SIZE) -#define alloc_thread_info(task) ((struct thread_info *)kmalloc(THREAD_SIZE, GFP_KERNEL)) -#define free_thread_info(info) kfree(info) -#define get_thread_info(ti) get_task_struct((ti)->task) -#define put_thread_info(ti) put_task_struct((ti)->task) - #else /* !__ASSEMBLY__ */ /* how to get the thread information struct from ASM */ #define GET_THREAD_INFO(reg) \ - movl $-8192, reg; \ + movl $-THREAD_SIZE, reg; \ andl %esp, reg +/* use this one if reg already contains %esp */ +#define GET_THREAD_INFO_WITH_ESP(reg) \ + andl $-THREAD_SIZE, reg + #endif /* diff -prauN linux-2.6.0-test5/include/asm-i386/timer.h wli-2.6.0-test5-bk12-25/include/asm-i386/timer.h --- linux-2.6.0-test5/include/asm-i386/timer.h 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-i386/timer.h 2003-09-25 19:16:11.000000000 -0700 @@ -38,8 +38,10 @@ extern struct timer_opts timer_tsc; extern struct timer_opts timer_cyclone; #endif +extern unsigned long calibrate_tsc(void); #ifdef CONFIG_HPET_TIMER extern struct timer_opts timer_hpet; +extern unsigned long calibrate_tsc_hpet(unsigned long *tsc_hpet_quotient_ptr); #endif #endif diff -prauN linux-2.6.0-test5/include/asm-i386/tlb.h wli-2.6.0-test5-bk12-25/include/asm-i386/tlb.h --- linux-2.6.0-test5/include/asm-i386/tlb.h 2003-09-08 12:49:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-i386/tlb.h 2003-09-25 20:26:41.000000000 -0700 @@ -1,10 +1,58 @@ #ifndef _I386_TLB_H #define _I386_TLB_H +/* + * include/asm-i386/tlb.h + * (C) June 2003 William Irwin, IBM + * Routines for pagetable cacheing and release. + */ + +#include +#include +#include +#include +#include +#include +#include + +#ifdef CONFIG_HIGHPTE +#define GFP_PTE (GFP_KERNEL|__GFP_REPEAT|__GFP_HIGHMEM) +#else +#define GFP_PTE (GFP_KERNEL|__GFP_REPEAT) +#endif + +#ifdef CONFIG_HIGHPMD +#define GFP_PMD (GFP_KERNEL|__GFP_REPEAT|__GFP_HIGHMEM) +#else +#define GFP_PMD (GFP_KERNEL|__GFP_REPEAT) +#endif + +#define PG_PTE PG_arch_1 +#define NR_PTE 128 +#define FREE_PTE_NR NR_PTE +#define NR_NONPTE 512 +#define MAX_ZONE_ID (MAX_NUMNODES * MAX_NR_ZONES) + +#define PagePTE(page) test_bit(PG_PTE, &(page)->flags) +#define SetPagePTE(page) set_bit(PG_PTE, &(page)->flags) +#define ClearPagePTE(page) clear_bit(PG_PTE, &(page)->flags) +#define TestSetPagePTE(page) test_and_set_bit(PG_PTE, &(page)->flags) +#define TestClearPagePTE(page) test_and_clear_bit(PG_PTE, &(page)->flags) +#define PageZoneID(page) ((page)->flags >> ZONE_SHIFT) /* - * x86 doesn't need any special per-pte or - * per-vma handling.. + * vmscan.c does smp_call_function() to shoot down cached pagetables under + * memory pressure. */ +struct mmu_gather { + struct mm_struct *mm; + int nr_pte_active, nr_pte_ready, nr_nonpte, need_flush, fullmm, freed; + struct list_head active_list[MAX_ZONE_ID], ready_list[MAX_ZONE_ID]; + int active_count[MAX_ZONE_ID], ready_count[MAX_ZONE_ID]; + struct page *nonpte[NR_NONPTE]; +}; + +DECLARE_PER_CPU(struct mmu_gather, mmu_gathers); + #define tlb_start_vma(tlb, vma) do { } while (0) #define tlb_end_vma(tlb, vma) do { } while (0) #define __tlb_remove_tlb_entry(tlb, ptep, address) do { } while (0) @@ -15,6 +63,122 @@ */ #define tlb_flush(tlb) flush_tlb_mm((tlb)->mm) -#include +void tlb_init(void); -#endif +static inline +struct mmu_gather *tlb_gather_mmu(struct mm_struct *mm, unsigned int flush) +{ + struct mmu_gather *tlb = &per_cpu(mmu_gathers, get_cpu()); + tlb->mm = mm; + tlb->fullmm = flush; + tlb->freed = 0; + put_cpu(); + return tlb; +} + +static inline +void tlb_remove_tlb_entry(struct mmu_gather *tlb, pte_t *pte, unsigned long addr) +{ + tlb->need_flush = 1; +} + +static inline +void tlb_flush_ready(struct mmu_gather *tlb) +{ + int zone; + + for (zone = 0; tlb->nr_pte_ready >= NR_PTE && zone < MAX_ZONE_ID; ++zone) { + struct page *head; + + if (!tlb->ready_count[zone]) + continue; + + head = list_entry(tlb->ready_list[zone].next, struct page, list); + list_del_init(&head->list); + list_splice_init(&tlb->ready_list[zone], &head->list); + head->private = tlb->ready_count[zone]; + tlb->nr_pte_ready -= tlb->ready_count[zone]; + tlb->ready_count[zone] = 0; + free_pages_bulk(zone_table[zone], head, 0); + } +} + +static inline +void tlb_flush_mmu(struct mmu_gather *tlb, unsigned long start, unsigned long end) +{ + int zone; + unsigned long flags; + + if (!tlb->need_flush && tlb->nr_nonpte < NR_NONPTE) + return; + + tlb->need_flush = 0; + tlb_flush(tlb); + + smp_local_irq_save(flags); + + if (tlb->nr_nonpte) { + free_pages_and_swap_cache(tlb->nonpte, tlb->nr_nonpte); + tlb->nr_nonpte = 0; + } + + for (zone = 0; zone < MAX_ZONE_ID; ++zone) { + if (!tlb->active_count[zone]) + continue; + + list_splice_init(&tlb->active_list[zone], &tlb->ready_list[zone]); + tlb->ready_count[zone] += tlb->active_count[zone]; + tlb->active_count[zone] = 0; + } + tlb->nr_pte_ready += tlb->nr_pte_active; + tlb->nr_pte_active = 0; + if (tlb->nr_pte_ready >= NR_PTE) + tlb_flush_ready(tlb); + + smp_local_irq_restore(flags); +} + +static inline +void tlb_finish_mmu(struct mmu_gather *tlb, unsigned long start, unsigned long end) +{ + if (tlb->mm->rss >= tlb->freed) + tlb->mm->rss -= tlb->freed; + else + tlb->mm->rss = 0; + tlb_flush_mmu(tlb, start, end); +} + +static inline +void tlb_remove_nonpte_page(struct mmu_gather *tlb, struct page *page) +{ + tlb->nonpte[tlb->nr_nonpte] = page; + tlb->nr_nonpte++; + if (tlb->nr_nonpte >= NR_NONPTE) + tlb_flush_mmu(tlb, 0, 0); +} + +static inline +void tlb_remove_pte_page(struct mmu_gather *tlb, struct page *page) +{ + int zone = PageZoneID(page); + ClearPagePTE(page); + tlb->nr_pte_active++; + tlb->active_count[zone]++; + list_add(&page->list, &tlb->active_list[zone]); +} + +static inline +void tlb_remove_page(struct mmu_gather *tlb, struct page *page) +{ + unsigned long flags; + + smp_local_irq_save(flags); + tlb->need_flush = 1; + if (PagePTE(page)) + tlb_remove_pte_page(tlb, page); + else + tlb_remove_nonpte_page(tlb, page); + smp_local_irq_restore(flags); +} + +#endif /* _I386_TLB_H */ diff -prauN linux-2.6.0-test5/include/asm-i386/uaccess.h wli-2.6.0-test5-bk12-25/include/asm-i386/uaccess.h --- linux-2.6.0-test5/include/asm-i386/uaccess.h 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-i386/uaccess.h 2003-09-25 19:16:11.000000000 -0700 @@ -80,7 +80,7 @@ extern struct movsl_mask { * checks that the pointer is in the user space range - after calling * this function, memory access functions may still return -EFAULT. */ -#define access_ok(type,addr,size) (__range_ok(addr,size) == 0) +#define access_ok(type,addr,size) (likely(__range_ok(addr,size) == 0)) /** * verify_area: - Obsolete, use access_ok() diff -prauN linux-2.6.0-test5/include/asm-ia64/acpi.h wli-2.6.0-test5-bk12-25/include/asm-ia64/acpi.h --- linux-2.6.0-test5/include/asm-ia64/acpi.h 2003-09-08 12:50:23.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ia64/acpi.h 2003-09-25 19:16:11.000000000 -0700 @@ -30,6 +30,8 @@ #ifdef __KERNEL__ +#include + #define COMPILER_DEPENDENT_INT64 long #define COMPILER_DEPENDENT_UINT64 unsigned long @@ -54,47 +56,35 @@ #define ACPI_ENABLE_IRQS() local_irq_enable() #define ACPI_FLUSH_CPU_CACHE() -#define ACPI_ACQUIRE_GLOBAL_LOCK(GLptr, Acq) \ - do { \ - __asm__ volatile ("1: ld4 r29=[%1]\n" \ - ";;\n" \ - "mov ar.ccv=r29\n" \ - "mov r2=r29\n" \ - "shr.u r30=r29,1\n" \ - "and r29=-4,r29\n" \ - ";;\n" \ - "add r29=2,r29\n" \ - "and r30=1,r30\n" \ - ";;\n" \ - "add r29=r29,r30\n" \ - ";;\n" \ - "cmpxchg4.acq r30=[%1],r29,ar.ccv\n" \ - ";;\n" \ - "cmp.eq p6,p7=r2,r30\n" \ - "(p7) br.dpnt.few 1b\n" \ - "cmp.gt p8,p9=3,r29\n" \ - ";;\n" \ - "(p8) mov %0=-1\n" \ - "(p9) mov %0=r0\n" \ - :"=r"(Acq):"r"(GLptr):"r2","r29","r30","memory"); \ - } while (0) - -#define ACPI_RELEASE_GLOBAL_LOCK(GLptr, Acq) \ - do { \ - __asm__ volatile ("1: ld4 r29=[%1]\n" \ - ";;\n" \ - "mov ar.ccv=r29\n" \ - "mov r2=r29\n" \ - "and r29=-4,r29\n" \ - ";;\n" \ - "cmpxchg4.acq r30=[%1],r29,ar.ccv\n" \ - ";;\n" \ - "cmp.eq p6,p7=r2,r30\n" \ - "(p7) br.dpnt.few 1b\n" \ - "and %0=1,r2\n" \ - ";;\n" \ - :"=r"(Acq):"r"(GLptr):"r2","r29","r30","memory"); \ - } while (0) +static inline int +ia64_acpi_acquire_global_lock (unsigned int *lock) +{ + unsigned int old, new, val; + do { + old = *lock; + new = (((old & ~0x3) + 2) + ((old >> 1) & 0x1)); + val = ia64_cmpxchg4_acq(lock, new, old); + } while (unlikely (val != old)); + return (new < 3) ? -1 : 0; +} + +static inline int +ia64_acpi_release_global_lock (unsigned int *lock) +{ + unsigned int old, new, val; + do { + old = *lock; + new = old & ~0x3; + val = ia64_cmpxchg4_acq(lock, new, old); + } while (unlikely (val != old)); + return old & 0x1; +} + +#define ACPI_ACQUIRE_GLOBAL_LOCK(GLptr, Acq) \ + ((Acq) = ia64_acpi_acquire_global_lock((unsigned int *) GLptr)) + +#define ACPI_RELEASE_GLOBAL_LOCK(GLptr, Acq) \ + ((Acq) = ia64_acpi_release_global_lock((unsigned int *) GLptr)) const char *acpi_get_sysname (void); int acpi_request_vector (u32 int_type); diff -prauN linux-2.6.0-test5/include/asm-ia64/hw_irq.h wli-2.6.0-test5-bk12-25/include/asm-ia64/hw_irq.h --- linux-2.6.0-test5/include/asm-ia64/hw_irq.h 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ia64/hw_irq.h 2003-09-25 19:16:11.000000000 -0700 @@ -9,6 +9,7 @@ #include #include #include +#include #include #include diff -prauN linux-2.6.0-test5/include/asm-ia64/intel_intrin.h wli-2.6.0-test5-bk12-25/include/asm-ia64/intel_intrin.h --- linux-2.6.0-test5/include/asm-ia64/intel_intrin.h 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/include/asm-ia64/intel_intrin.h 2003-09-25 19:16:11.000000000 -0700 @@ -0,0 +1,254 @@ +#ifndef _ASM_IA64_INTEL_INTRIN_H +#define _ASM_IA64_INTEL_INTRIN_H +/* + * Intel Compiler Intrinsics + * + * Copyright (C) 2002,2003 Jun Nakajima + * Copyright (C) 2002,2003 Suresh Siddha + * + */ +#include + +void __lfetch(int lfhint, void *y); +void __lfetch_excl(int lfhint, void *y); +void __lfetch_fault(int lfhint, void *y); +void __lfetch_fault_excl(int lfhint, void *y); + +/* In the following, whichFloatReg should be an integer from 0-127 */ +void __ldfs(const int whichFloatReg, void *src); +void __ldfd(const int whichFloatReg, void *src); +void __ldfe(const int whichFloatReg, void *src); +void __ldf8(const int whichFloatReg, void *src); +void __ldf_fill(const int whichFloatReg, void *src); +void __stfs(void *dst, const int whichFloatReg); +void __stfd(void *dst, const int whichFloatReg); +void __stfe(void *dst, const int whichFloatReg); +void __stf8(void *dst, const int whichFloatReg); +void __stf_spill(void *dst, const int whichFloatReg); + +void __st1_rel(void *dst, const __s8 value); +void __st2_rel(void *dst, const __s16 value); +void __st4_rel(void *dst, const __s32 value); +void __st8_rel(void *dst, const __s64 value); +__u8 __ld1_acq(void *src); +__u16 __ld2_acq(void *src); +__u32 __ld4_acq(void *src); +__u64 __ld8_acq(void *src); + +__u64 __fetchadd4_acq(__u32 *addend, const int increment); +__u64 __fetchadd4_rel(__u32 *addend, const int increment); +__u64 __fetchadd8_acq(__u64 *addend, const int increment); +__u64 __fetchadd8_rel(__u64 *addend, const int increment); + +__u64 __getf_exp(double d); + +/* OS Related Itanium(R) Intrinsics */ + +/* The names to use for whichReg and whichIndReg below come from + the include file asm/ia64regs.h */ + +__u64 __getIndReg(const int whichIndReg, __s64 index); +__u64 __getReg(const int whichReg); + +void __setIndReg(const int whichIndReg, __s64 index, __u64 value); +void __setReg(const int whichReg, __u64 value); + +void __mf(void); +void __mfa(void); +void __synci(void); +void __itcd(__s64 pa); +void __itci(__s64 pa); +void __itrd(__s64 whichTransReg, __s64 pa); +void __itri(__s64 whichTransReg, __s64 pa); +void __ptce(__s64 va); +void __ptcl(__s64 va, __s64 pagesz); +void __ptcg(__s64 va, __s64 pagesz); +void __ptcga(__s64 va, __s64 pagesz); +void __ptri(__s64 va, __s64 pagesz); +void __ptrd(__s64 va, __s64 pagesz); +void __invala (void); +void __invala_gr(const int whichGeneralReg /* 0-127 */ ); +void __invala_fr(const int whichFloatReg /* 0-127 */ ); +void __nop(const int); +void __fc(__u64 *addr); +void __sum(int mask); +void __rum(int mask); +void __ssm(int mask); +void __rsm(int mask); +__u64 __thash(__s64); +__u64 __ttag(__s64); +__s64 __tpa(__s64); + +/* Intrinsics for implementing get/put_user macros */ +void __st_user(const char *tableName, __u64 addr, char size, char relocType, __u64 val); +void __ld_user(const char *tableName, __u64 addr, char size, char relocType); + +/* This intrinsic does not generate code, it creates a barrier across which + * the compiler will not schedule data access instructions. + */ +void __memory_barrier(void); + +void __isrlz(void); +void __dsrlz(void); + +__u64 _m64_mux1(__u64 a, const int n); +__u64 __thash(__u64); + +/* Lock and Atomic Operation Related Intrinsics */ +__u64 _InterlockedExchange8(volatile __u8 *trgt, __u8 value); +__u64 _InterlockedExchange16(volatile __u16 *trgt, __u16 value); +__s64 _InterlockedExchange(volatile __u32 *trgt, __u32 value); +__s64 _InterlockedExchange64(volatile __u64 *trgt, __u64 value); + +__u64 _InterlockedCompareExchange8_rel(volatile __u8 *dest, __u64 xchg, __u64 comp); +__u64 _InterlockedCompareExchange8_acq(volatile __u8 *dest, __u64 xchg, __u64 comp); +__u64 _InterlockedCompareExchange16_rel(volatile __u16 *dest, __u64 xchg, __u64 comp); +__u64 _InterlockedCompareExchange16_acq(volatile __u16 *dest, __u64 xchg, __u64 comp); +__u64 _InterlockedCompareExchange_rel(volatile __u32 *dest, __u64 xchg, __u64 comp); +__u64 _InterlockedCompareExchange_acq(volatile __u32 *dest, __u64 xchg, __u64 comp); +__u64 _InterlockedCompareExchange64_rel(volatile __u64 *dest, __u64 xchg, __u64 comp); +__u64 _InterlockedCompareExchange64_acq(volatile __u64 *dest, __u64 xchg, __u64 comp); + +__s64 _m64_dep_mi(const int v, __s64 s, const int p, const int len); +__s64 _m64_shrp(__s64 a, __s64 b, const int count); +__s64 _m64_popcnt(__s64 a); + +#define ia64_barrier() __memory_barrier() + +#define ia64_stop() /* Nothing: As of now stop bit is generated for each + * intrinsic + */ + +#define ia64_getreg __getReg +#define ia64_setreg __setReg + +#define ia64_hint(x) + +#define ia64_mux1_brcst 0 +#define ia64_mux1_mix 8 +#define ia64_mux1_shuf 9 +#define ia64_mux1_alt 10 +#define ia64_mux1_rev 11 + +#define ia64_mux1 _m64_mux1 +#define ia64_popcnt _m64_popcnt +#define ia64_getf_exp __getf_exp +#define ia64_shrp _m64_shrp + +#define ia64_tpa __tpa +#define ia64_invala __invala +#define ia64_invala_gr __invala_gr +#define ia64_invala_fr __invala_fr +#define ia64_nop __nop +#define ia64_sum __sum +#define ia64_ssm __ssm +#define ia64_rum __rum +#define ia64_rsm __rsm +#define ia64_fc __fc + +#define ia64_ldfs __ldfs +#define ia64_ldfd __ldfd +#define ia64_ldfe __ldfe +#define ia64_ldf8 __ldf8 +#define ia64_ldf_fill __ldf_fill + +#define ia64_stfs __stfs +#define ia64_stfd __stfd +#define ia64_stfe __stfe +#define ia64_stf8 __stf8 +#define ia64_stf_spill __stf_spill + +#define ia64_mf __mf +#define ia64_mfa __mfa + +#define ia64_fetchadd4_acq __fetchadd4_acq +#define ia64_fetchadd4_rel __fetchadd4_rel +#define ia64_fetchadd8_acq __fetchadd8_acq +#define ia64_fetchadd8_rel __fetchadd8_rel + +#define ia64_xchg1 _InterlockedExchange8 +#define ia64_xchg2 _InterlockedExchange16 +#define ia64_xchg4 _InterlockedExchange +#define ia64_xchg8 _InterlockedExchange64 + +#define ia64_cmpxchg1_rel _InterlockedCompareExchange8_rel +#define ia64_cmpxchg1_acq _InterlockedCompareExchange8_acq +#define ia64_cmpxchg2_rel _InterlockedCompareExchange16_rel +#define ia64_cmpxchg2_acq _InterlockedCompareExchange16_acq +#define ia64_cmpxchg4_rel _InterlockedCompareExchange_rel +#define ia64_cmpxchg4_acq _InterlockedCompareExchange_acq +#define ia64_cmpxchg8_rel _InterlockedCompareExchange64_rel +#define ia64_cmpxchg8_acq _InterlockedCompareExchange64_acq + +#define __ia64_set_dbr(index, val) \ + __setIndReg(_IA64_REG_INDR_DBR, index, val) +#define ia64_set_ibr(index, val) \ + __setIndReg(_IA64_REG_INDR_IBR, index, val) +#define ia64_set_pkr(index, val) \ + __setIndReg(_IA64_REG_INDR_PKR, index, val) +#define ia64_set_pmc(index, val) \ + __setIndReg(_IA64_REG_INDR_PMC, index, val) +#define ia64_set_pmd(index, val) \ + __setIndReg(_IA64_REG_INDR_PMD, index, val) +#define ia64_set_rr(index, val) \ + __setIndReg(_IA64_REG_INDR_RR, index, val) + +#define ia64_get_cpuid(index) __getIndReg(_IA64_REG_INDR_CPUID, index) +#define __ia64_get_dbr(index) __getIndReg(_IA64_REG_INDR_DBR, index) +#define ia64_get_ibr(index) __getIndReg(_IA64_REG_INDR_IBR, index) +#define ia64_get_pkr(index) __getIndReg(_IA64_REG_INDR_PKR, index) +#define ia64_get_pmc(index) __getIndReg(_IA64_REG_INDR_PMC, index) +#define ia64_get_pmd(index) __getIndReg(_IA64_REG_INDR_PMD, index) +#define ia64_get_rr(index) __getIndReg(_IA64_REG_INDR_RR, index) + +#define ia64_srlz_d __dsrlz +#define ia64_srlz_i __isrlz + +#define ia64_st1_rel __st1_rel +#define ia64_st2_rel __st2_rel +#define ia64_st4_rel __st4_rel +#define ia64_st8_rel __st8_rel + +#define ia64_ld1_acq __ld1_acq +#define ia64_ld2_acq __ld2_acq +#define ia64_ld4_acq __ld4_acq +#define ia64_ld8_acq __ld8_acq + +#define ia64_sync_i __synci +#define ia64_thash __thash +#define ia64_ttag __ttag +#define ia64_itcd __itcd +#define ia64_itci __itci +#define ia64_itrd __itrd +#define ia64_itri __itri +#define ia64_ptce __ptce +#define ia64_ptcl __ptcl +#define ia64_ptcg __ptcg +#define ia64_ptcga __ptcga +#define ia64_ptri __ptri +#define ia64_ptrd __ptrd +#define ia64_dep_mi _m64_dep_mi + +/* Values for lfhint in __lfetch and __lfetch_fault */ + +#define ia64_lfhint_none 0 +#define ia64_lfhint_nt1 1 +#define ia64_lfhint_nt2 2 +#define ia64_lfhint_nta 3 + +#define ia64_lfetch __lfetch +#define ia64_lfetch_excl __lfetch_excl +#define ia64_lfetch_fault __lfetch_fault +#define ia64_lfetch_fault_excl __lfetch_fault_excl + +#define ia64_intrin_local_irq_restore(x) \ +do { \ + if ((x) != 0) { \ + ia64_ssm(IA64_PSR_I); \ + ia64_srlz_d(); \ + } else { \ + ia64_rsm(IA64_PSR_I); \ + } \ +} while (0) + +#endif /* _ASM_IA64_INTEL_INTRIN_H */ diff -prauN linux-2.6.0-test5/include/asm-ia64/numa.h wli-2.6.0-test5-bk12-25/include/asm-ia64/numa.h --- linux-2.6.0-test5/include/asm-ia64/numa.h 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ia64/numa.h 2003-09-25 19:16:11.000000000 -0700 @@ -23,7 +23,7 @@ #include extern volatile char cpu_to_node_map[NR_CPUS] __cacheline_aligned; -extern volatile unsigned long node_to_cpu_mask[NR_NODES] __cacheline_aligned; +extern volatile cpumask_t node_to_cpu_mask[NR_NODES] __cacheline_aligned; /* Stuff below this line could be architecture independent */ diff -prauN linux-2.6.0-test5/include/asm-ia64/param.h wli-2.6.0-test5-bk12-25/include/asm-ia64/param.h --- linux-2.6.0-test5/include/asm-ia64/param.h 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ia64/param.h 2003-09-25 19:16:11.000000000 -0700 @@ -4,22 +4,10 @@ /* * Fundamental kernel parameters. * - * Copyright (C) 1998, 1999, 2002 Hewlett-Packard Co + * Copyright (C) 1998, 1999, 2002-2003 Hewlett-Packard Co * David Mosberger-Tang */ -#include - -#ifdef CONFIG_IA64_HP_SIM -/* - * Yeah, simulating stuff is slow, so let us catch some breath between - * timer interrupts... - */ -# define HZ 32 -#else -# define HZ 1024 -#endif - #define EXEC_PAGESIZE 65536 #ifndef NGROUPS @@ -33,8 +21,24 @@ #define MAXHOSTNAMELEN 64 /* max length of hostname */ #ifdef __KERNEL__ +# include /* mustn't include outside of #ifdef __KERNEL__ */ +# ifdef CONFIG_IA64_HP_SIM + /* + * Yeah, simulating stuff is slow, so let us catch some breath between + * timer interrupts... + */ +# define HZ 32 +# else +# define HZ 1024 +# endif # define USER_HZ HZ # define CLOCKS_PER_SEC HZ /* frequency at which times() counts */ +#else + /* + * Technically, this is wrong, but some old apps still refer to it. The proper way to + * get the HZ value is via sysconf(_SC_CLK_TCK). + */ +# define HZ 1024 #endif #endif /* _ASM_IA64_PARAM_H */ diff -prauN linux-2.6.0-test5/include/asm-ia64/pgalloc.h wli-2.6.0-test5-bk12-25/include/asm-ia64/pgalloc.h --- linux-2.6.0-test5/include/asm-ia64/pgalloc.h 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ia64/pgalloc.h 2003-09-25 20:03:31.000000000 -0700 @@ -71,9 +71,9 @@ pgd_free (pgd_t *pgd) } static inline void -pgd_populate (struct mm_struct *mm, pgd_t *pgd_entry, pmd_t *pmd) +pgd_populate (struct mm_struct *mm, pgd_t *pgd_entry, struct page *pmd) { - pgd_val(*pgd_entry) = __pa(pmd); + pgd_val(*pgd_entry) = __pa(page_address(pmd)); } @@ -90,8 +90,8 @@ pmd_alloc_one_fast (struct mm_struct *mm return (pmd_t *)ret; } -static inline pmd_t* -pmd_alloc_one (struct mm_struct *mm, unsigned long addr) +static inline pmd_t * +pmd_alloc_one_kernel(struct mm_struct *mm, unsigned long addr) { pmd_t *pmd = (pmd_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT); @@ -100,9 +100,16 @@ pmd_alloc_one (struct mm_struct *mm, uns return pmd; } +static inline struct page *pmd_alloc_one(struct mm_struct *mm, unsigned long addr) +{ + pmd_t *pmd = pmd_alloc_one_kernel(mm, addr); + return pmd ? virt_to_page(pmd) : NULL; +} + static inline void -pmd_free (pmd_t *pmd) +pmd_free(struct page *page) { + pmd_t *pmd = page_address(page); *(unsigned long *)pmd = (unsigned long) pmd_quicklist; pmd_quicklist = (unsigned long *) pmd; ++pgtable_cache_size; diff -prauN linux-2.6.0-test5/include/asm-ia64/pgtable.h wli-2.6.0-test5-bk12-25/include/asm-ia64/pgtable.h --- linux-2.6.0-test5/include/asm-ia64/pgtable.h 2003-09-08 12:49:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ia64/pgtable.h 2003-09-25 20:03:31.000000000 -0700 @@ -257,7 +257,8 @@ ia64_phys_addr_valid (unsigned long addr #define pgd_bad(pgd) (!ia64_phys_addr_valid(pgd_val(pgd))) #define pgd_present(pgd) (pgd_val(pgd) != 0UL) #define pgd_clear(pgdp) (pgd_val(*(pgdp)) = 0UL) -#define pgd_page(pgd) ((unsigned long) __va(pgd_val(pgd) & _PFN_MASK)) +#define __pgd_page(pgd) ((unsigned long)__va(pgd_val(pgd) & _PFN_MASK)) +#define pgd_page(pgd) virt_to_page(__pgd_page(pgd)) /* * The following have defined behavior only work if pte_present() is true. @@ -326,7 +327,13 @@ pgd_offset (struct mm_struct *mm, unsign /* Find an entry in the second-level page table.. */ #define pmd_offset(dir,addr) \ - ((pmd_t *) pgd_page(*(dir)) + (((addr) >> PMD_SHIFT) & (PTRS_PER_PMD - 1))) + ((pmd_t *)__pgd_page(*(dir)) + (((addr) >> PMD_SHIFT) & (PTRS_PER_PMD - 1))) + +#define pmd_offset_kernel(pgd, addr) pmd_offset(pgd, addr) +#define pmd_offset_map(pgd, addr) pmd_offset(pgd, addr) +#define pmd_offset_map_nested(pgd, addr) pmd_offset(pgd, addr) +#define pmd_unmap(pmd) do { } while (0) +#define pmd_unmap_nested(pmd) do { } while (0) /* * Find an entry in the third-level page table. This looks more complicated than it diff -prauN linux-2.6.0-test5/include/asm-ia64/posix_types.h wli-2.6.0-test5-bk12-25/include/asm-ia64/posix_types.h --- linux-2.6.0-test5/include/asm-ia64/posix_types.h 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ia64/posix_types.h 2003-09-25 19:16:11.000000000 -0700 @@ -10,7 +10,6 @@ * David Mosberger-Tang */ -typedef unsigned int __kernel_dev_t; typedef unsigned int __kernel_ino_t; typedef unsigned int __kernel_mode_t; typedef unsigned int __kernel_nlink_t; diff -prauN linux-2.6.0-test5/include/asm-ia64/processor.h wli-2.6.0-test5-bk12-25/include/asm-ia64/processor.h --- linux-2.6.0-test5/include/asm-ia64/processor.h 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ia64/processor.h 2003-09-25 19:16:11.000000000 -0700 @@ -56,7 +56,6 @@ /* * Bus types */ -#define EISA_bus 0 #define MCA_bus 0 #define MCA_bus__is_a_macro /* for versions in ksyms.c */ diff -prauN linux-2.6.0-test5/include/asm-ia64/ptrace.h wli-2.6.0-test5-bk12-25/include/asm-ia64/ptrace.h --- linux-2.6.0-test5/include/asm-ia64/ptrace.h 2003-09-08 12:50:09.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ia64/ptrace.h 2003-09-25 19:16:11.000000000 -0700 @@ -223,6 +223,12 @@ struct switch_stack { }; #ifdef __KERNEL__ +/* + * We use the ia64_psr(regs)->ri to determine which of the three + * instructions in bundle (16 bytes) took the sample. Generate + * the canonical representation by adding to instruction pointer. + */ +# define instruction_pointer(regs) ((regs)->cr_iip + ia64_psr(regs)->ri) /* given a pointer to a task_struct, return the user's pt_regs */ # define ia64_task_regs(t) (((struct pt_regs *) ((char *) (t) + IA64_STK_OFFSET)) - 1) # define ia64_psr(regs) ((struct ia64_psr *) &(regs)->cr_ipsr) diff -prauN linux-2.6.0-test5/include/asm-ia64/signal.h wli-2.6.0-test5-bk12-25/include/asm-ia64/signal.h --- linux-2.6.0-test5/include/asm-ia64/signal.h 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ia64/signal.h 2003-09-25 19:16:11.000000000 -0700 @@ -2,7 +2,7 @@ #define _ASM_IA64_SIGNAL_H /* - * Copyright (C) 1998-2001 Hewlett-Packard Co + * Copyright (C) 1998-2001, 2003 Hewlett-Packard Co * David Mosberger-Tang * * Unfortunately, this file is being included by bits/signal.h in @@ -50,7 +50,7 @@ /* These should not be considered constants from userland. */ #define SIGRTMIN 32 -#define SIGRTMAX (_NSIG-1) +#define SIGRTMAX _NSIG /* * SA_FLAGS values: @@ -96,7 +96,16 @@ * ar.rsc.loadrs is 14 bits, we can assume that they'll never take up * more than 16KB of space. */ -#define MINSIGSTKSZ 131027 /* min. stack size for sigaltstack() */ +#if 1 + /* + * This is a stupid typo: the value was _meant_ to be 131072 (0x20000), but I typed it + * in wrong. ;-( To preserve backwards compatibility, we leave the kernel at the + * incorrect value and fix libc only. + */ +# define MINSIGSTKSZ 131027 /* min. stack size for sigaltstack() */ +#else +# define MINSIGSTKSZ 131072 /* min. stack size for sigaltstack() */ +#endif #define SIGSTKSZ 262144 /* default stack size for sigaltstack() */ #ifdef __KERNEL__ diff -prauN linux-2.6.0-test5/include/asm-ia64/sn/hcl.h wli-2.6.0-test5-bk12-25/include/asm-ia64/sn/hcl.h --- linux-2.6.0-test5/include/asm-ia64/sn/hcl.h 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ia64/sn/hcl.h 2003-09-25 19:16:12.000000000 -0700 @@ -10,6 +10,7 @@ #define _ASM_IA64_SN_HCL_H #include +#include extern vertex_hdl_t hwgraph_root; extern vertex_hdl_t linux_busnum; diff -prauN linux-2.6.0-test5/include/asm-ia64/sn/ioc3.h wli-2.6.0-test5-bk12-25/include/asm-ia64/sn/ioc3.h --- linux-2.6.0-test5/include/asm-ia64/sn/ioc3.h 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ia64/sn/ioc3.h 1969-12-31 16:00:00.000000000 -0800 @@ -1,705 +0,0 @@ -/* - * Copyright (c) 2002-2003 Silicon Graphics, Inc. All Rights Reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * Further, this software is distributed without any warranty that it is - * free of the rightful claim of any third person regarding infringement - * or the like. Any license provided herein, whether implied or - * otherwise, applies only to this software file. Patent licenses, if - * any, provided herein do not apply to combinations of this program with - * other software, or any other product whatsoever. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. - * - * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy, - * Mountain View, CA 94043, or: - * - * http://www.sgi.com - * - * For further information regarding this notice, see: - * - * http://oss.sgi.com/projects/GenInfo/NoticeExplan - */ - -/* $Id: ioc3.h,v 1.2 2000/11/16 19:49:17 pfg Exp $ - * - * Copyright (C) 1999 Ralf Baechle - * This file is part of the Linux driver for the SGI IOC3. - */ -#ifndef _ASM_IA64_SN_IOC3_H -#define _ASM_IA64_SN_IOC3_H - -#include - -/* SUPERIO uart register map */ -typedef volatile struct ioc3_uartregs { - union { - volatile u8 rbr; /* read only, DLAB == 0 */ - volatile u8 thr; /* write only, DLAB == 0 */ - volatile u8 dll; /* DLAB == 1 */ - } u1; - union { - volatile u8 ier; /* DLAB == 0 */ - volatile u8 dlm; /* DLAB == 1 */ - } u2; - union { - volatile u8 iir; /* read only */ - volatile u8 fcr; /* write only */ - } u3; - volatile u8 iu_lcr; - volatile u8 iu_mcr; - volatile u8 iu_lsr; - volatile u8 iu_msr; - volatile u8 iu_scr; -} ioc3_uregs_t; - -#define iu_rbr u1.rbr -#define iu_thr u1.thr -#define iu_dll u1.dll -#define iu_ier u2.ier -#define iu_dlm u2.dlm -#define iu_iir u3.iir -#define iu_fcr u3.fcr - -struct ioc3_sioregs { - volatile u8 fill[0x141]; /* starts at 0x141 */ - - volatile u8 uartc; - volatile u8 kbdcg; - - volatile u8 fill0[0x150 - 0x142 - 1]; - - volatile u8 pp_data; - volatile u8 pp_dsr; - volatile u8 pp_dcr; - - volatile u8 fill1[0x158 - 0x152 - 1]; - - volatile u8 pp_fifa; - volatile u8 pp_cfgb; - volatile u8 pp_ecr; - - volatile u8 fill2[0x168 - 0x15a - 1]; - - volatile u8 rtcad; - volatile u8 rtcdat; - - volatile u8 fill3[0x170 - 0x169 - 1]; - - struct ioc3_uartregs uartb; /* 0x20170 */ - struct ioc3_uartregs uarta; /* 0x20178 */ -}; - -/* Register layout of IOC3 in configuration space. */ -struct ioc3 { - volatile u32 pad0[7]; /* 0x00000 */ - volatile u32 sio_ir; /* 0x0001c */ - volatile u32 sio_ies; /* 0x00020 */ - volatile u32 sio_iec; /* 0x00024 */ - volatile u32 sio_cr; /* 0x00028 */ - volatile u32 int_out; /* 0x0002c */ - volatile u32 mcr; /* 0x00030 */ - - /* General Purpose I/O registers */ - volatile u32 gpcr_s; /* 0x00034 */ - volatile u32 gpcr_c; /* 0x00038 */ - volatile u32 gpdr; /* 0x0003c */ - volatile u32 gppr_0; /* 0x00040 */ - volatile u32 gppr_1; /* 0x00044 */ - volatile u32 gppr_2; /* 0x00048 */ - volatile u32 gppr_3; /* 0x0004c */ - volatile u32 gppr_4; /* 0x00050 */ - volatile u32 gppr_5; /* 0x00054 */ - volatile u32 gppr_6; /* 0x00058 */ - volatile u32 gppr_7; /* 0x0005c */ - volatile u32 gppr_8; /* 0x00060 */ - volatile u32 gppr_9; /* 0x00064 */ - volatile u32 gppr_10; /* 0x00068 */ - volatile u32 gppr_11; /* 0x0006c */ - volatile u32 gppr_12; /* 0x00070 */ - volatile u32 gppr_13; /* 0x00074 */ - volatile u32 gppr_14; /* 0x00078 */ - volatile u32 gppr_15; /* 0x0007c */ - - /* Parallel Port Registers */ - volatile u32 ppbr_h_a; /* 0x00080 */ - volatile u32 ppbr_l_a; /* 0x00084 */ - volatile u32 ppcr_a; /* 0x00088 */ - volatile u32 ppcr; /* 0x0008c */ - volatile u32 ppbr_h_b; /* 0x00090 */ - volatile u32 ppbr_l_b; /* 0x00094 */ - volatile u32 ppcr_b; /* 0x00098 */ - - /* Keyboard and Mouse Registers */ - volatile u32 km_csr; /* 0x0009c */ - volatile u32 k_rd; /* 0x000a0 */ - volatile u32 m_rd; /* 0x000a4 */ - volatile u32 k_wd; /* 0x000a8 */ - volatile u32 m_wd; /* 0x000ac */ - - /* Serial Port Registers */ - volatile u32 sbbr_h; /* 0x000b0 */ - volatile u32 sbbr_l; /* 0x000b4 */ - volatile u32 sscr_a; /* 0x000b8 */ - volatile u32 stpir_a; /* 0x000bc */ - volatile u32 stcir_a; /* 0x000c0 */ - volatile u32 srpir_a; /* 0x000c4 */ - volatile u32 srcir_a; /* 0x000c8 */ - volatile u32 srtr_a; /* 0x000cc */ - volatile u32 shadow_a; /* 0x000d0 */ - volatile u32 sscr_b; /* 0x000d4 */ - volatile u32 stpir_b; /* 0x000d8 */ - volatile u32 stcir_b; /* 0x000dc */ - volatile u32 srpir_b; /* 0x000e0 */ - volatile u32 srcir_b; /* 0x000e4 */ - volatile u32 srtr_b; /* 0x000e8 */ - volatile u32 shadow_b; /* 0x000ec */ - - /* Ethernet Registers */ - volatile u32 emcr; /* 0x000f0 */ - volatile u32 eisr; /* 0x000f4 */ - volatile u32 eier; /* 0x000f8 */ - volatile u32 ercsr; /* 0x000fc */ - volatile u32 erbr_h; /* 0x00100 */ - volatile u32 erbr_l; /* 0x00104 */ - volatile u32 erbar; /* 0x00108 */ - volatile u32 ercir; /* 0x0010c */ - volatile u32 erpir; /* 0x00110 */ - volatile u32 ertr; /* 0x00114 */ - volatile u32 etcsr; /* 0x00118 */ - volatile u32 ersr; /* 0x0011c */ - volatile u32 etcdc; /* 0x00120 */ - volatile u32 ebir; /* 0x00124 */ - volatile u32 etbr_h; /* 0x00128 */ - volatile u32 etbr_l; /* 0x0012c */ - volatile u32 etcir; /* 0x00130 */ - volatile u32 etpir; /* 0x00134 */ - volatile u32 emar_h; /* 0x00138 */ - volatile u32 emar_l; /* 0x0013c */ - volatile u32 ehar_h; /* 0x00140 */ - volatile u32 ehar_l; /* 0x00144 */ - volatile u32 micr; /* 0x00148 */ - volatile u32 midr_r; /* 0x0014c */ - volatile u32 midr_w; /* 0x00150 */ - volatile u32 pad1[(0x20000 - 0x00154) / 4]; - - /* SuperIO Registers XXX */ - struct ioc3_sioregs sregs; /* 0x20000 */ - volatile u32 pad2[(0x40000 - 0x20180) / 4]; - - /* SSRAM Diagnostic Access */ - volatile u32 ssram[(0x80000 - 0x40000) / 4]; - - /* Bytebus device offsets - 0x80000 - Access to the generic devices selected with DEV0 - 0x9FFFF bytebus DEV_SEL_0 - 0xA0000 - Access to the generic devices selected with DEV1 - 0xBFFFF bytebus DEV_SEL_1 - 0xC0000 - Access to the generic devices selected with DEV2 - 0xDFFFF bytebus DEV_SEL_2 - 0xE0000 - Access to the generic devices selected with DEV3 - 0xFFFFF bytebus DEV_SEL_3 */ -}; - -/* - * Ethernet RX Buffer - */ -struct ioc3_erxbuf { - u32 w0; /* first word (valid,bcnt,cksum) */ - u32 err; /* second word various errors */ - /* next comes n bytes of padding */ - /* then the received ethernet frame itself */ -}; - -#define ERXBUF_IPCKSUM_MASK 0x0000ffff -#define ERXBUF_BYTECNT_MASK 0x07ff0000 -#define ERXBUF_BYTECNT_SHIFT 16 -#define ERXBUF_V 0x80000000 - -#define ERXBUF_CRCERR 0x00000001 /* aka RSV15 */ -#define ERXBUF_FRAMERR 0x00000002 /* aka RSV14 */ -#define ERXBUF_CODERR 0x00000004 /* aka RSV13 */ -#define ERXBUF_INVPREAMB 0x00000008 /* aka RSV18 */ -#define ERXBUF_LOLEN 0x00007000 /* aka RSV2_0 */ -#define ERXBUF_HILEN 0x03ff0000 /* aka RSV12_3 */ -#define ERXBUF_MULTICAST 0x04000000 /* aka RSV16 */ -#define ERXBUF_BROADCAST 0x08000000 /* aka RSV17 */ -#define ERXBUF_LONGEVENT 0x10000000 /* aka RSV19 */ -#define ERXBUF_BADPKT 0x20000000 /* aka RSV20 */ -#define ERXBUF_GOODPKT 0x40000000 /* aka RSV21 */ -#define ERXBUF_CARRIER 0x80000000 /* aka RSV22 */ - -/* - * Ethernet TX Descriptor - */ -#define ETXD_DATALEN 104 -struct ioc3_etxd { - u32 cmd; /* command field */ - u32 bufcnt; /* buffer counts field */ - u64 p1; /* buffer pointer 1 */ - u64 p2; /* buffer pointer 2 */ - u8 data[ETXD_DATALEN]; /* opt. tx data */ -}; - -#define ETXD_BYTECNT_MASK 0x000007ff /* total byte count */ -#define ETXD_INTWHENDONE 0x00001000 /* intr when done */ -#define ETXD_D0V 0x00010000 /* data 0 valid */ -#define ETXD_B1V 0x00020000 /* buf 1 valid */ -#define ETXD_B2V 0x00040000 /* buf 2 valid */ -#define ETXD_DOCHECKSUM 0x00080000 /* insert ip cksum */ -#define ETXD_CHKOFF_MASK 0x07f00000 /* cksum byte offset */ -#define ETXD_CHKOFF_SHIFT 20 - -#define ETXD_D0CNT_MASK 0x0000007f -#define ETXD_B1CNT_MASK 0x0007ff00 -#define ETXD_B1CNT_SHIFT 8 -#define ETXD_B2CNT_MASK 0x7ff00000 -#define ETXD_B2CNT_SHIFT 20 - -/* - * Bytebus device space - */ -#define IOC3_BYTEBUS_DEV0 0x80000L -#define IOC3_BYTEBUS_DEV1 0xa0000L -#define IOC3_BYTEBUS_DEV2 0xc0000L -#define IOC3_BYTEBUS_DEV3 0xe0000L - -/* ------------------------------------------------------------------------- */ - -/* Superio Registers (PIO Access) */ -#define IOC3_SIO_BASE 0x20000 -#define IOC3_SIO_UARTC (IOC3_SIO_BASE+0x141) /* UART Config */ -#define IOC3_SIO_KBDCG (IOC3_SIO_BASE+0x142) /* KBD Config */ -#define IOC3_SIO_PP_BASE (IOC3_SIO_BASE+PP_BASE) /* Parallel Port */ -#define IOC3_SIO_RTC_BASE (IOC3_SIO_BASE+0x168) /* Real Time Clock */ -#define IOC3_SIO_UB_BASE (IOC3_SIO_BASE+UARTB_BASE) /* UART B */ -#define IOC3_SIO_UA_BASE (IOC3_SIO_BASE+UARTA_BASE) /* UART A */ - -/* SSRAM Diagnostic Access */ -#define IOC3_SSRAM IOC3_RAM_OFF /* base of SSRAM diagnostic access */ -#define IOC3_SSRAM_LEN 0x40000 /* 256kb (address space size, may not be fully populated) */ -#define IOC3_SSRAM_DM 0x0000ffff /* data mask */ -#define IOC3_SSRAM_PM 0x00010000 /* parity mask */ - -/* bitmasks for PCI_SCR */ -#define PCI_SCR_PAR_RESP_EN 0x00000040 /* enb PCI parity checking */ -#define PCI_SCR_SERR_EN 0x00000100 /* enable the SERR# driver */ -#define PCI_SCR_DROP_MODE_EN 0x00008000 /* drop pios on parity err */ -#define PCI_SCR_RX_SERR (0x1 << 16) -#define PCI_SCR_DROP_MODE (0x1 << 17) -#define PCI_SCR_SIG_PAR_ERR (0x1 << 24) -#define PCI_SCR_SIG_TAR_ABRT (0x1 << 27) -#define PCI_SCR_RX_TAR_ABRT (0x1 << 28) -#define PCI_SCR_SIG_MST_ABRT (0x1 << 29) -#define PCI_SCR_SIG_SERR (0x1 << 30) -#define PCI_SCR_PAR_ERR (0x1 << 31) - -/* bitmasks for IOC3_KM_CSR */ -#define KM_CSR_K_WRT_PEND 0x00000001 /* kbd port xmitting or resetting */ -#define KM_CSR_M_WRT_PEND 0x00000002 /* mouse port xmitting or resetting */ -#define KM_CSR_K_LCB 0x00000004 /* Line Cntrl Bit for last KBD write */ -#define KM_CSR_M_LCB 0x00000008 /* same for mouse */ -#define KM_CSR_K_DATA 0x00000010 /* state of kbd data line */ -#define KM_CSR_K_CLK 0x00000020 /* state of kbd clock line */ -#define KM_CSR_K_PULL_DATA 0x00000040 /* pull kbd data line low */ -#define KM_CSR_K_PULL_CLK 0x00000080 /* pull kbd clock line low */ -#define KM_CSR_M_DATA 0x00000100 /* state of ms data line */ -#define KM_CSR_M_CLK 0x00000200 /* state of ms clock line */ -#define KM_CSR_M_PULL_DATA 0x00000400 /* pull ms data line low */ -#define KM_CSR_M_PULL_CLK 0x00000800 /* pull ms clock line low */ -#define KM_CSR_EMM_MODE 0x00001000 /* emulation mode */ -#define KM_CSR_SIM_MODE 0x00002000 /* clock X8 */ -#define KM_CSR_K_SM_IDLE 0x00004000 /* Keyboard is idle */ -#define KM_CSR_M_SM_IDLE 0x00008000 /* Mouse is idle */ -#define KM_CSR_K_TO 0x00010000 /* Keyboard trying to send/receive */ -#define KM_CSR_M_TO 0x00020000 /* Mouse trying to send/receive */ -#define KM_CSR_K_TO_EN 0x00040000 /* KM_CSR_K_TO + KM_CSR_K_TO_EN = cause - SIO_IR to assert */ -#define KM_CSR_M_TO_EN 0x00080000 /* KM_CSR_M_TO + KM_CSR_M_TO_EN = cause - SIO_IR to assert */ -#define KM_CSR_K_CLAMP_ONE 0x00100000 /* Pull K_CLK low after rec. one char */ -#define KM_CSR_M_CLAMP_ONE 0x00200000 /* Pull M_CLK low after rec. one char */ -#define KM_CSR_K_CLAMP_THREE 0x00400000 /* Pull K_CLK low after rec. three chars */ -#define KM_CSR_M_CLAMP_THREE 0x00800000 /* Pull M_CLK low after rec. three char */ - -/* bitmasks for IOC3_K_RD and IOC3_M_RD */ -#define KM_RD_DATA_2 0x000000ff /* 3rd char recvd since last read */ -#define KM_RD_DATA_2_SHIFT 0 -#define KM_RD_DATA_1 0x0000ff00 /* 2nd char recvd since last read */ -#define KM_RD_DATA_1_SHIFT 8 -#define KM_RD_DATA_0 0x00ff0000 /* 1st char recvd since last read */ -#define KM_RD_DATA_0_SHIFT 16 -#define KM_RD_FRAME_ERR_2 0x01000000 /* framing or parity error in byte 2 */ -#define KM_RD_FRAME_ERR_1 0x02000000 /* same for byte 1 */ -#define KM_RD_FRAME_ERR_0 0x04000000 /* same for byte 0 */ - -#define KM_RD_KBD_MSE 0x08000000 /* 0 if from kbd, 1 if from mouse */ -#define KM_RD_OFLO 0x10000000 /* 4th char recvd before this read */ -#define KM_RD_VALID_2 0x20000000 /* DATA_2 valid */ -#define KM_RD_VALID_1 0x40000000 /* DATA_1 valid */ -#define KM_RD_VALID_0 0x80000000 /* DATA_0 valid */ -#define KM_RD_VALID_ALL (KM_RD_VALID_0|KM_RD_VALID_1|KM_RD_VALID_2) - -/* bitmasks for IOC3_K_WD & IOC3_M_WD */ -#define KM_WD_WRT_DATA 0x000000ff /* write to keyboard/mouse port */ -#define KM_WD_WRT_DATA_SHIFT 0 - -/* bitmasks for serial RX status byte */ -#define RXSB_OVERRUN 0x01 /* char(s) lost */ -#define RXSB_PAR_ERR 0x02 /* parity error */ -#define RXSB_FRAME_ERR 0x04 /* framing error */ -#define RXSB_BREAK 0x08 /* break character */ -#define RXSB_CTS 0x10 /* state of CTS */ -#define RXSB_DCD 0x20 /* state of DCD */ -#define RXSB_MODEM_VALID 0x40 /* DCD, CTS and OVERRUN are valid */ -#define RXSB_DATA_VALID 0x80 /* data byte, FRAME_ERR PAR_ERR & BREAK valid */ - -/* bitmasks for serial TX control byte */ -#define TXCB_INT_WHEN_DONE 0x20 /* interrupt after this byte is sent */ -#define TXCB_INVALID 0x00 /* byte is invalid */ -#define TXCB_VALID 0x40 /* byte is valid */ -#define TXCB_MCR 0x80 /* data<7:0> to modem control register */ -#define TXCB_DELAY 0xc0 /* delay data<7:0> mSec */ - -/* bitmasks for IOC3_SBBR_L */ -#define SBBR_L_SIZE 0x00000001 /* 0 == 1KB rings, 1 == 4KB rings */ -#define SBBR_L_BASE 0xfffff000 /* lower serial ring base addr */ - -/* bitmasks for IOC3_SSCR_ */ -#define SSCR_RX_THRESHOLD 0x000001ff /* hiwater mark */ -#define SSCR_TX_TIMER_BUSY 0x00010000 /* TX timer in progress */ -#define SSCR_HFC_EN 0x00020000 /* hardware flow control enabled */ -#define SSCR_RX_RING_DCD 0x00040000 /* post RX record on delta-DCD */ -#define SSCR_RX_RING_CTS 0x00080000 /* post RX record on delta-CTS */ -#define SSCR_HIGH_SPD 0x00100000 /* 4X speed */ -#define SSCR_DIAG 0x00200000 /* bypass clock divider for sim */ -#define SSCR_RX_DRAIN 0x08000000 /* drain RX buffer to memory */ -#define SSCR_DMA_EN 0x10000000 /* enable ring buffer DMA */ -#define SSCR_DMA_PAUSE 0x20000000 /* pause DMA */ -#define SSCR_PAUSE_STATE 0x40000000 /* sets when PAUSE takes effect */ -#define SSCR_RESET 0x80000000 /* reset DMA channels */ - -/* all producer/comsumer pointers are the same bitfield */ -#define PROD_CONS_PTR_4K 0x00000ff8 /* for 4K buffers */ -#define PROD_CONS_PTR_1K 0x000003f8 /* for 1K buffers */ -#define PROD_CONS_PTR_OFF 3 - -/* bitmasks for IOC3_SRCIR_ */ -#define SRCIR_ARM 0x80000000 /* arm RX timer */ - -/* bitmasks for IOC3_SRPIR_ */ -#define SRPIR_BYTE_CNT 0x07000000 /* bytes in packer */ -#define SRPIR_BYTE_CNT_SHIFT 24 - -/* bitmasks for IOC3_STCIR_ */ -#define STCIR_BYTE_CNT 0x0f000000 /* bytes in unpacker */ -#define STCIR_BYTE_CNT_SHIFT 24 - -/* bitmasks for IOC3_SHADOW_ */ -#define SHADOW_DR 0x00000001 /* data ready */ -#define SHADOW_OE 0x00000002 /* overrun error */ -#define SHADOW_PE 0x00000004 /* parity error */ -#define SHADOW_FE 0x00000008 /* framing error */ -#define SHADOW_BI 0x00000010 /* break interrupt */ -#define SHADOW_THRE 0x00000020 /* transmit holding register empty */ -#define SHADOW_TEMT 0x00000040 /* transmit shift register empty */ -#define SHADOW_RFCE 0x00000080 /* char in RX fifo has an error */ -#define SHADOW_DCTS 0x00010000 /* delta clear to send */ -#define SHADOW_DDCD 0x00080000 /* delta data carrier detect */ -#define SHADOW_CTS 0x00100000 /* clear to send */ -#define SHADOW_DCD 0x00800000 /* data carrier detect */ -#define SHADOW_DTR 0x01000000 /* data terminal ready */ -#define SHADOW_RTS 0x02000000 /* request to send */ -#define SHADOW_OUT1 0x04000000 /* 16550 OUT1 bit */ -#define SHADOW_OUT2 0x08000000 /* 16550 OUT2 bit */ -#define SHADOW_LOOP 0x10000000 /* loopback enabled */ - -/* bitmasks for IOC3_SRTR_ */ -#define SRTR_CNT 0x00000fff /* reload value for RX timer */ -#define SRTR_CNT_VAL 0x0fff0000 /* current value of RX timer */ -#define SRTR_CNT_VAL_SHIFT 16 -#define SRTR_HZ 16000 /* SRTR clock frequency */ - -/* bitmasks for IOC3_SIO_IR, IOC3_SIO_IEC and IOC3_SIO_IES */ -#define SIO_IR_SA_TX_MT 0x00000001 /* Serial port A TX empty */ -#define SIO_IR_SA_RX_FULL 0x00000002 /* port A RX buf full */ -#define SIO_IR_SA_RX_HIGH 0x00000004 /* port A RX hiwat */ -#define SIO_IR_SA_RX_TIMER 0x00000008 /* port A RX timeout */ -#define SIO_IR_SA_DELTA_DCD 0x00000010 /* port A delta DCD */ -#define SIO_IR_SA_DELTA_CTS 0x00000020 /* port A delta CTS */ -#define SIO_IR_SA_INT 0x00000040 /* port A pass-thru intr */ -#define SIO_IR_SA_TX_EXPLICIT 0x00000080 /* port A explicit TX thru */ -#define SIO_IR_SA_MEMERR 0x00000100 /* port A PCI error */ -#define SIO_IR_SB_TX_MT 0x00000200 /* */ -#define SIO_IR_SB_RX_FULL 0x00000400 /* */ -#define SIO_IR_SB_RX_HIGH 0x00000800 /* */ -#define SIO_IR_SB_RX_TIMER 0x00001000 /* */ -#define SIO_IR_SB_DELTA_DCD 0x00002000 /* */ -#define SIO_IR_SB_DELTA_CTS 0x00004000 /* */ -#define SIO_IR_SB_INT 0x00008000 /* */ -#define SIO_IR_SB_TX_EXPLICIT 0x00010000 /* */ -#define SIO_IR_SB_MEMERR 0x00020000 /* */ -#define SIO_IR_PP_INT 0x00040000 /* P port pass-thru intr */ -#define SIO_IR_PP_INTA 0x00080000 /* PP context A thru */ -#define SIO_IR_PP_INTB 0x00100000 /* PP context B thru */ -#define SIO_IR_PP_MEMERR 0x00200000 /* PP PCI error */ -#define SIO_IR_KBD_INT 0x00400000 /* kbd/mouse intr */ -#define SIO_IR_RT_INT 0x08000000 /* RT output pulse */ -#define SIO_IR_GEN_INT1 0x10000000 /* RT input pulse */ -#define SIO_IR_GEN_INT_SHIFT 28 - -/* per device interrupt masks */ -#define SIO_IR_SA (SIO_IR_SA_TX_MT | SIO_IR_SA_RX_FULL | \ - SIO_IR_SA_RX_HIGH | SIO_IR_SA_RX_TIMER | \ - SIO_IR_SA_DELTA_DCD | SIO_IR_SA_DELTA_CTS | \ - SIO_IR_SA_INT | SIO_IR_SA_TX_EXPLICIT | \ - SIO_IR_SA_MEMERR) -#define SIO_IR_SB (SIO_IR_SB_TX_MT | SIO_IR_SB_RX_FULL | \ - SIO_IR_SB_RX_HIGH | SIO_IR_SB_RX_TIMER | \ - SIO_IR_SB_DELTA_DCD | SIO_IR_SB_DELTA_CTS | \ - SIO_IR_SB_INT | SIO_IR_SB_TX_EXPLICIT | \ - SIO_IR_SB_MEMERR) -#define SIO_IR_PP (SIO_IR_PP_INT | SIO_IR_PP_INTA | \ - SIO_IR_PP_INTB | SIO_IR_PP_MEMERR) -#define SIO_IR_RT (SIO_IR_RT_INT | SIO_IR_GEN_INT1) - -/* macro to load pending interrupts */ -#define IOC3_PENDING_INTRS(mem) (PCI_INW(&((mem)->sio_ir)) & \ - PCI_INW(&((mem)->sio_ies_ro))) - -/* bitmasks for SIO_CR */ -#define SIO_CR_SIO_RESET 0x00000001 /* reset the SIO */ -#define SIO_CR_SER_A_BASE 0x000000fe /* DMA poll addr port A */ -#define SIO_CR_SER_A_BASE_SHIFT 1 -#define SIO_CR_SER_B_BASE 0x00007f00 /* DMA poll addr port B */ -#define SIO_CR_SER_B_BASE_SHIFT 8 -#define SIO_SR_CMD_PULSE 0x00078000 /* byte bus strobe length */ -#define SIO_CR_CMD_PULSE_SHIFT 15 -#define SIO_CR_ARB_DIAG 0x00380000 /* cur !enet PCI requet (ro) */ -#define SIO_CR_ARB_DIAG_TXA 0x00000000 -#define SIO_CR_ARB_DIAG_RXA 0x00080000 -#define SIO_CR_ARB_DIAG_TXB 0x00100000 -#define SIO_CR_ARB_DIAG_RXB 0x00180000 -#define SIO_CR_ARB_DIAG_PP 0x00200000 -#define SIO_CR_ARB_DIAG_IDLE 0x00400000 /* 0 -> active request (ro) */ - -/* bitmasks for INT_OUT */ -#define INT_OUT_COUNT 0x0000ffff /* pulse interval timer */ -#define INT_OUT_MODE 0x00070000 /* mode mask */ -#define INT_OUT_MODE_0 0x00000000 /* set output to 0 */ -#define INT_OUT_MODE_1 0x00040000 /* set output to 1 */ -#define INT_OUT_MODE_1PULSE 0x00050000 /* send 1 pulse */ -#define INT_OUT_MODE_PULSES 0x00060000 /* send 1 pulse every interval */ -#define INT_OUT_MODE_SQW 0x00070000 /* toggle output every interval */ -#define INT_OUT_DIAG 0x40000000 /* diag mode */ -#define INT_OUT_INT_OUT 0x80000000 /* current state of INT_OUT */ - -/* time constants for INT_OUT */ -#define INT_OUT_NS_PER_TICK (30 * 260) /* 30 ns PCI clock, divisor=260 */ -#define INT_OUT_TICKS_PER_PULSE 3 /* outgoing pulse lasts 3 ticks */ -#define INT_OUT_US_TO_COUNT(x) /* convert uS to a count value */ \ - (((x) * 10 + INT_OUT_NS_PER_TICK / 200) * \ - 100 / INT_OUT_NS_PER_TICK - 1) -#define INT_OUT_COUNT_TO_US(x) /* convert count value to uS */ \ - (((x) + 1) * INT_OUT_NS_PER_TICK / 1000) -#define INT_OUT_MIN_TICKS 3 /* min period is width of pulse in "ticks" */ -#define INT_OUT_MAX_TICKS INT_OUT_COUNT /* largest possible count */ - -/* bitmasks for GPCR */ -#define GPCR_DIR 0x000000ff /* tristate pin input or output */ -#define GPCR_DIR_PIN(x) (1<<(x)) /* access one of the DIR bits */ -#define GPCR_EDGE 0x000f0000 /* extint edge or level sensitive */ -#define GPCR_EDGE_PIN(x) (1<<((x)+15)) /* access one of the EDGE bits */ - -/* values for GPCR */ -#define GPCR_INT_OUT_EN 0x00100000 /* enable INT_OUT to pin 0 */ -#define GPCR_MLAN_EN 0x00200000 /* enable MCR to pin 8 */ -#define GPCR_DIR_SERA_XCVR 0x00000080 /* Port A Transceiver select enable */ -#define GPCR_DIR_SERB_XCVR 0x00000040 /* Port B Transceiver select enable */ -#define GPCR_DIR_PHY_RST 0x00000020 /* ethernet PHY reset enable */ - -/* defs for some of the generic I/O pins */ -#define GPCR_PHY_RESET 0x20 /* pin is output to PHY reset */ -#define GPCR_UARTB_MODESEL 0x40 /* pin is output to port B mode sel */ -#define GPCR_UARTA_MODESEL 0x80 /* pin is output to port A mode sel */ - -#define GPPR_PHY_RESET_PIN 5 /* GIO pin controlling phy reset */ -#define GPPR_UARTB_MODESEL_PIN 6 /* GIO pin controlling uart b mode select */ -#define GPPR_UARTA_MODESEL_PIN 7 /* GIO pin controlling uart a mode select */ - -#define EMCR_DUPLEX 0x00000001 -#define EMCR_PROMISC 0x00000002 -#define EMCR_PADEN 0x00000004 -#define EMCR_RXOFF_MASK 0x000001f8 -#define EMCR_RXOFF_SHIFT 3 -#define EMCR_RAMPAR 0x00000200 -#define EMCR_BADPAR 0x00000800 -#define EMCR_BUFSIZ 0x00001000 -#define EMCR_TXDMAEN 0x00002000 -#define EMCR_TXEN 0x00004000 -#define EMCR_RXDMAEN 0x00008000 -#define EMCR_RXEN 0x00010000 -#define EMCR_LOOPBACK 0x00020000 -#define EMCR_ARB_DIAG 0x001c0000 -#define EMCR_ARB_DIAG_IDLE 0x00200000 -#define EMCR_RST 0x80000000 - -#define EISR_RXTIMERINT 0x00000001 -#define EISR_RXTHRESHINT 0x00000002 -#define EISR_RXOFLO 0x00000004 -#define EISR_RXBUFOFLO 0x00000008 -#define EISR_RXMEMERR 0x00000010 -#define EISR_RXPARERR 0x00000020 -#define EISR_TXEMPTY 0x00010000 -#define EISR_TXRTRY 0x00020000 -#define EISR_TXEXDEF 0x00040000 -#define EISR_TXLCOL 0x00080000 -#define EISR_TXGIANT 0x00100000 -#define EISR_TXBUFUFLO 0x00200000 -#define EISR_TXEXPLICIT 0x00400000 -#define EISR_TXCOLLWRAP 0x00800000 -#define EISR_TXDEFERWRAP 0x01000000 -#define EISR_TXMEMERR 0x02000000 -#define EISR_TXPARERR 0x04000000 - -#define ERCSR_THRESH_MASK 0x000001ff /* enet RX threshold */ -#define ERCSR_RX_TMR 0x40000000 /* simulation only */ -#define ERCSR_DIAG_OFLO 0x80000000 /* simulation only */ - -#define ERBR_ALIGNMENT 4096 -#define ERBR_L_RXRINGBASE_MASK 0xfffff000 - -#define ERBAR_BARRIER_BIT 0x0100 -#define ERBAR_RXBARR_MASK 0xffff0000 -#define ERBAR_RXBARR_SHIFT 16 - -#define ERCIR_RXCONSUME_MASK 0x00000fff - -#define ERPIR_RXPRODUCE_MASK 0x00000fff -#define ERPIR_ARM 0x80000000 - -#define ERTR_CNT_MASK 0x000007ff - -#define ETCSR_IPGT_MASK 0x0000007f -#define ETCSR_IPGR1_MASK 0x00007f00 -#define ETCSR_IPGR1_SHIFT 8 -#define ETCSR_IPGR2_MASK 0x007f0000 -#define ETCSR_IPGR2_SHIFT 16 -#define ETCSR_NOTXCLK 0x80000000 - -#define ETCDC_COLLCNT_MASK 0x0000ffff -#define ETCDC_DEFERCNT_MASK 0xffff0000 -#define ETCDC_DEFERCNT_SHIFT 16 - -#define ETBR_ALIGNMENT (64*1024) -#define ETBR_L_RINGSZ_MASK 0x00000001 -#define ETBR_L_RINGSZ128 0 -#define ETBR_L_RINGSZ512 1 -#define ETBR_L_TXRINGBASE_MASK 0xffffc000 - -#define ETCIR_TXCONSUME_MASK 0x0000ffff -#define ETCIR_IDLE 0x80000000 - -#define ETPIR_TXPRODUCE_MASK 0x0000ffff - -#define EBIR_TXBUFPROD_MASK 0x0000001f -#define EBIR_TXBUFCONS_MASK 0x00001f00 -#define EBIR_TXBUFCONS_SHIFT 8 -#define EBIR_RXBUFPROD_MASK 0x007fc000 -#define EBIR_RXBUFPROD_SHIFT 14 -#define EBIR_RXBUFCONS_MASK 0xff800000 -#define EBIR_RXBUFCONS_SHIFT 23 - -#define MICR_REGADDR_MASK 0x0000001f -#define MICR_PHYADDR_MASK 0x000003e0 -#define MICR_PHYADDR_SHIFT 5 -#define MICR_READTRIG 0x00000400 -#define MICR_BUSY 0x00000800 - -#define MIDR_DATA_MASK 0x0000ffff - -#define ERXBUF_IPCKSUM_MASK 0x0000ffff -#define ERXBUF_BYTECNT_MASK 0x07ff0000 -#define ERXBUF_BYTECNT_SHIFT 16 -#define ERXBUF_V 0x80000000 - -#define ERXBUF_CRCERR 0x00000001 /* aka RSV15 */ -#define ERXBUF_FRAMERR 0x00000002 /* aka RSV14 */ -#define ERXBUF_CODERR 0x00000004 /* aka RSV13 */ -#define ERXBUF_INVPREAMB 0x00000008 /* aka RSV18 */ -#define ERXBUF_LOLEN 0x00007000 /* aka RSV2_0 */ -#define ERXBUF_HILEN 0x03ff0000 /* aka RSV12_3 */ -#define ERXBUF_MULTICAST 0x04000000 /* aka RSV16 */ -#define ERXBUF_BROADCAST 0x08000000 /* aka RSV17 */ -#define ERXBUF_LONGEVENT 0x10000000 /* aka RSV19 */ -#define ERXBUF_BADPKT 0x20000000 /* aka RSV20 */ -#define ERXBUF_GOODPKT 0x40000000 /* aka RSV21 */ -#define ERXBUF_CARRIER 0x80000000 /* aka RSV22 */ - -#define ETXD_BYTECNT_MASK 0x000007ff /* total byte count */ -#define ETXD_INTWHENDONE 0x00001000 /* intr when done */ -#define ETXD_D0V 0x00010000 /* data 0 valid */ -#define ETXD_B1V 0x00020000 /* buf 1 valid */ -#define ETXD_B2V 0x00040000 /* buf 2 valid */ -#define ETXD_DOCHECKSUM 0x00080000 /* insert ip cksum */ -#define ETXD_CHKOFF_MASK 0x07f00000 /* cksum byte offset */ -#define ETXD_CHKOFF_SHIFT 20 - -#define ETXD_D0CNT_MASK 0x0000007f -#define ETXD_B1CNT_MASK 0x0007ff00 -#define ETXD_B1CNT_SHIFT 8 -#define ETXD_B2CNT_MASK 0x7ff00000 -#define ETXD_B2CNT_SHIFT 20 - -typedef enum ioc3_subdevs_e { - ioc3_subdev_ether, - ioc3_subdev_generic, - ioc3_subdev_nic, - ioc3_subdev_kbms, - ioc3_subdev_ttya, - ioc3_subdev_ttyb, - ioc3_subdev_ecpp, - ioc3_subdev_rt, - ioc3_nsubdevs -} ioc3_subdev_t; - -/* subdevice disable bits, - * from the standard INFO_LBL_SUBDEVS - */ -#define IOC3_SDB_ETHER (1< -#include - -#define RTC_BASE_ADDR (unsigned char *)(nvram_base) - -/* Defines for the SGS-Thomson M48T35 clock */ -#define RTC_SGS_WRITE_ENABLE 0x80 -#define RTC_SGS_READ_PROTECT 0x40 -#define RTC_SGS_YEAR_ADDR (RTC_BASE_ADDR + 0x7fffL) -#define RTC_SGS_MONTH_ADDR (RTC_BASE_ADDR + 0x7ffeL) -#define RTC_SGS_DATE_ADDR (RTC_BASE_ADDR + 0x7ffdL) -#define RTC_SGS_DAY_ADDR (RTC_BASE_ADDR + 0x7ffcL) -#define RTC_SGS_HOUR_ADDR (RTC_BASE_ADDR + 0x7ffbL) -#define RTC_SGS_MIN_ADDR (RTC_BASE_ADDR + 0x7ffaL) -#define RTC_SGS_SEC_ADDR (RTC_BASE_ADDR + 0x7ff9L) -#define RTC_SGS_CONTROL_ADDR (RTC_BASE_ADDR + 0x7ff8L) - -/* Defines for the Dallas DS1386 */ -#define RTC_DAL_UPDATE_ENABLE 0x80 -#define RTC_DAL_UPDATE_DISABLE 0x00 -#define RTC_DAL_YEAR_ADDR (RTC_BASE_ADDR + 0xaL) -#define RTC_DAL_MONTH_ADDR (RTC_BASE_ADDR + 0x9L) -#define RTC_DAL_DATE_ADDR (RTC_BASE_ADDR + 0x8L) -#define RTC_DAL_DAY_ADDR (RTC_BASE_ADDR + 0x6L) -#define RTC_DAL_HOUR_ADDR (RTC_BASE_ADDR + 0x4L) -#define RTC_DAL_MIN_ADDR (RTC_BASE_ADDR + 0x2L) -#define RTC_DAL_SEC_ADDR (RTC_BASE_ADDR + 0x1L) -#define RTC_DAL_CONTROL_ADDR (RTC_BASE_ADDR + 0xbL) -#define RTC_DAL_USER_ADDR (RTC_BASE_ADDR + 0xeL) - -/* Defines for the Dallas DS1742 */ -#define RTC_DS1742_WRITE_ENABLE 0x80 -#define RTC_DS1742_READ_ENABLE 0x40 -#define RTC_DS1742_UPDATE_DISABLE 0x00 -#define RTC_DS1742_YEAR_ADDR (RTC_BASE_ADDR + 0x7ffL) -#define RTC_DS1742_MONTH_ADDR (RTC_BASE_ADDR + 0x7feL) -#define RTC_DS1742_DATE_ADDR (RTC_BASE_ADDR + 0x7fdL) -#define RTC_DS1742_DAY_ADDR (RTC_BASE_ADDR + 0x7fcL) -#define RTC_DS1742_HOUR_ADDR (RTC_BASE_ADDR + 0x7fbL) -#define RTC_DS1742_MIN_ADDR (RTC_BASE_ADDR + 0x7faL) -#define RTC_DS1742_SEC_ADDR (RTC_BASE_ADDR + 0x7f9L) -#define RTC_DS1742_CONTROL_ADDR (RTC_BASE_ADDR + 0x7f8L) -#define RTC_DS1742_USER_ADDR (RTC_BASE_ADDR + 0x0L) - -#define BCD_TO_INT(x) (((x>>4) * 10) + (x & 0xf)) -#define INT_TO_BCD(x) (((x / 10)<<4) + (x % 10)) - -#define YRREF 1970 - -#endif /* _ASM_IA64_SN_KLCLOCK_H */ diff -prauN linux-2.6.0-test5/include/asm-ia64/sn/ksys/elsc.h wli-2.6.0-test5-bk12-25/include/asm-ia64/sn/ksys/elsc.h --- linux-2.6.0-test5/include/asm-ia64/sn/ksys/elsc.h 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ia64/sn/ksys/elsc.h 2003-09-25 19:16:12.000000000 -0700 @@ -9,9 +9,6 @@ #ifndef _ASM_SN_KSYS_ELSC_H #define _ASM_SN_KSYS_ELSC_H -#include -#include - /* * Error codes * diff -prauN linux-2.6.0-test5/include/asm-ia64/sn/ksys/l1.h wli-2.6.0-test5-bk12-25/include/asm-ia64/sn/ksys/l1.h --- linux-2.6.0-test5/include/asm-ia64/sn/ksys/l1.h 2003-09-08 12:50:00.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ia64/sn/ksys/l1.h 2003-09-25 19:16:12.000000000 -0700 @@ -10,10 +10,7 @@ #ifndef _ASM_SN_KSYS_L1_H #define _ASM_SN_KSYS_L1_H -#include -#include -#include -#include +#include /* L1 Target Addresses */ /* @@ -39,18 +36,6 @@ #define L1_ADDR_TASK_BEDROCK 0x05 /* bedrock */ #define L1_ADDR_TASK_GENERAL 0x06 /* general requests */ -#define L1_ADDR_LOCAL \ - (L1_ADDR_TYPE_L1 << L1_ADDR_TYPE_SHFT) | \ - (L1_ADDR_RACK_LOCAL << L1_ADDR_RACK_SHFT) | \ - (L1_ADDR_BAY_LOCAL << L1_ADDR_BAY_SHFT) - -#define L1_ADDR_LOCALIO \ - (L1_ADDR_TYPE_IOBRICK << L1_ADDR_TYPE_SHFT) | \ - (L1_ADDR_RACK_LOCAL << L1_ADDR_RACK_SHFT) | \ - (L1_ADDR_BAY_LOCAL << L1_ADDR_BAY_SHFT) - -#define L1_ADDR_LOCAL_SHFT L1_ADDR_BAY_SHFT - /* response argument types */ #define L1_ARG_INT 0x00 /* 4-byte integer (big-endian) */ #define L1_ARG_ASCII 0x01 /* null-terminated ASCII string */ @@ -133,18 +118,6 @@ #define L1_EEP_IUSE 3 /* internal use area */ #define L1_EEP_SPD 4 /* serial presence detect record */ -typedef uint32_t l1addr_t; - -#define L1_BUILD_ADDR(addr,at,r,s,t) \ - (*(l1addr_t *)(addr) = ((l1addr_t)(at) << L1_ADDR_TYPE_SHFT) | \ - ((l1addr_t)(r) << L1_ADDR_RACK_SHFT) | \ - ((l1addr_t)(s) << L1_ADDR_BAY_SHFT) | \ - ((l1addr_t)(t) << L1_ADDR_TASK_SHFT)) - -#define L1_ADDRESS_TO_TASK(addr,trb,tsk) \ - (*(l1addr_t *)(addr) = (l1addr_t)(trb) | \ - ((l1addr_t)(tsk) << L1_ADDR_TASK_SHFT)) - #define L1_DISPLAY_LINE_LENGTH 12 /* L1 display characters/line */ #ifdef L1_DISP_2LINES @@ -154,11 +127,9 @@ typedef uint32_t l1addr_t; * to system software */ #endif -#define bzero(d, n) memset((d), 0, (n)) - int elsc_display_line(nasid_t nasid, char *line, int lnum); -int iobrick_rack_bay_type_get( nasid_t nasid, uint *rack, - uint *bay, uint *brick_type ); +int iobrick_rack_bay_type_get( nasid_t nasid, unsigned int *rack, + unsigned int *bay, unsigned int *brick_type ); int iobrick_module_get( nasid_t nasid ); diff -prauN linux-2.6.0-test5/include/asm-ia64/sn/nodepda.h wli-2.6.0-test5-bk12-25/include/asm-ia64/sn/nodepda.h --- linux-2.6.0-test5/include/asm-ia64/sn/nodepda.h 2003-09-08 12:49:56.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ia64/sn/nodepda.h 2003-09-25 19:16:12.000000000 -0700 @@ -87,7 +87,7 @@ struct irqpda_s { char irq_flags[NR_IRQS]; struct pci_dev *device_dev[NR_IRQS]; char share_count[NR_IRQS]; - struct pci_dev *current; + struct pci_dev *curr; }; typedef struct irqpda_s irqpda_t; @@ -128,7 +128,7 @@ typedef struct irqpda_s irqpda_t; * Check if given a compact node id the corresponding node has all the * cpus disabled. */ -#define is_headless_node(cnode) (!node_to_cpumask(cnode)) +#define is_headless_node(cnode) (!any_online_cpu(node_to_cpumask(cnode))) /* * Check if given a node vertex handle the corresponding node has all the diff -prauN linux-2.6.0-test5/include/asm-ia64/sn/pci/pcibr_private.h wli-2.6.0-test5-bk12-25/include/asm-ia64/sn/pci/pcibr_private.h --- linux-2.6.0-test5/include/asm-ia64/sn/pci/pcibr_private.h 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ia64/sn/pci/pcibr_private.h 2003-09-25 19:16:12.000000000 -0700 @@ -15,11 +15,9 @@ * should ever peek into this file. */ -#include #include #include #include -#include /* * convenience typedefs diff -prauN linux-2.6.0-test5/include/asm-ia64/sn/pci/pciio.h wli-2.6.0-test5-bk12-25/include/asm-ia64/sn/pci/pciio.h --- linux-2.6.0-test5/include/asm-ia64/sn/pci/pciio.h 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ia64/sn/pci/pciio.h 2003-09-25 19:16:12.000000000 -0700 @@ -695,5 +695,39 @@ extern int pciio_info_type1_get(pciio_i extern int pciio_error_handler(vertex_hdl_t, int, ioerror_mode_t, ioerror_t *); extern int pciio_dma_enabled(vertex_hdl_t); +/** + * sn_pci_set_vchan - Set the requested Virtual Channel bits into the mapped DMA + * address. + * @pci_dev: pci device pointer + * @addr: mapped dma address + * @vchan: Virtual Channel to use 0 or 1. + * + * Set the Virtual Channel bit in the mapped dma address. + */ + +static inline int +sn_pci_set_vchan(struct pci_dev *pci_dev, + dma_addr_t *addr, + int vchan) +{ + if (vchan > 1) { + return -1; + } + + if (!(*addr >> 32)) /* Using a mask here would be cleaner */ + return 0; /* but this generates better code */ + + if (vchan == 1) { + /* Set Bit 57 */ + *addr |= (1UL << 57); + } + else { + /* Clear Bit 57 */ + *addr &= ~(1UL << 57); + } + + return 0; +} + #endif /* C or C++ */ #endif /* _ASM_SN_PCI_PCIIO_H */ diff -prauN linux-2.6.0-test5/include/asm-ia64/sn/router.h wli-2.6.0-test5-bk12-25/include/asm-ia64/sn/router.h --- linux-2.6.0-test5/include/asm-ia64/sn/router.h 2003-09-08 12:49:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ia64/sn/router.h 2003-09-25 19:16:12.000000000 -0700 @@ -1,5 +1,4 @@ - -/* $Id$ +/* $id$ * * This file is subject to the terms and conditions of the GNU General Public * License. See the file "COPYING" in the main directory of this archive @@ -19,7 +18,6 @@ #ifndef __ASSEMBLY__ -#include #include #include #include @@ -31,23 +29,19 @@ typedef uint64_t router_reg_t; #define MAX_ROUTER_PATH 80 #define ROUTER_REG_CAST (volatile router_reg_t *) -#define PS_UINT_CAST (__psunsigned_t) -#define UINT64_CAST (uint64_t) typedef signed char port_no_t; /* Type for router port number */ #else #define ROUTERREG_CAST -#define PS_UINT_CAST -#define UINT64_CAST #endif /* __ASSEMBLY__ */ -#define MAX_ROUTER_PORTS (8) /* Max. number of ports on a router */ +#define MAX_ROUTER_PORTS 8 /* Max. number of ports on a router */ #define ALL_PORTS ((1 << MAX_ROUTER_PORTS) - 1) /* for 0 based references */ -#define PORT_INVALID (-1) /* Invalid port number */ +#define PORT_INVALID -1 /* Invalid port number */ #define IS_META(_rp) ((_rp)->flags & PCFG_ROUTER_META) @@ -126,24 +120,24 @@ typedef signed char port_no_t; /* Type */ #define RSRI_INPORT_SHFT 52 -#define RSRI_INPORT_MASK (UINT64_CAST 0xf << 52) +#define RSRI_INPORT_MASK (0xfUL << 52) #define RSRI_LINKWORKING_BIT(_L) (35 + 2 * (_L)) -#define RSRI_LINKWORKING(_L) (UINT64_CAST 1 << (35 + 2 * (_L))) -#define RSRI_LINKRESETFAIL(_L) (UINT64_CAST 1 << (34 + 2 * (_L))) +#define RSRI_LINKWORKING(_L) (1UL << (35 + 2 * (_L))) +#define RSRI_LINKRESETFAIL(_L) (1UL << (34 + 2 * (_L))) #define RSRI_LSTAT_SHFT(_L) (34 + 2 * (_L)) -#define RSRI_LSTAT_MASK(_L) (UINT64_CAST 0x3 << 34 + 2 * (_L)) -#define RSRI_LOCALSBERROR (UINT64_CAST 1 << 35) -#define RSRI_LOCALSTUCK (UINT64_CAST 1 << 34) -#define RSRI_LOCALBADVEC (UINT64_CAST 1 << 33) -#define RSRI_LOCALTAILERR (UINT64_CAST 1 << 32) +#define RSRI_LSTAT_MASK(_L) (0x3UL << 34 + 2 * (_L)) +#define RSRI_LOCALSBERROR (1UL << 35) +#define RSRI_LOCALSTUCK (1UL << 34) +#define RSRI_LOCALBADVEC (1UL << 33) +#define RSRI_LOCALTAILERR (1UL << 32) #define RSRI_LOCAL_SHFT 32 -#define RSRI_LOCAL_MASK (UINT64_CAST 0xf << 32) +#define RSRI_LOCAL_MASK (0xfUL << 32) #define RSRI_CHIPREV_SHFT 28 -#define RSRI_CHIPREV_MASK (UINT64_CAST 0xf << 28) +#define RSRI_CHIPREV_MASK (0xfUL << 28) #define RSRI_CHIPID_SHFT 12 -#define RSRI_CHIPID_MASK (UINT64_CAST 0xffff << 12) +#define RSRI_CHIPID_MASK (0xffffUL << 12) #define RSRI_MFGID_SHFT 1 -#define RSRI_MFGID_MASK (UINT64_CAST 0x7ff << 1) +#define RSRI_MFGID_MASK (0x7ffUL << 1) #define RSRI_LSTAT_WENTDOWN 0 #define RSRI_LSTAT_RESETFAIL 1 @@ -154,38 +148,38 @@ typedef signed char port_no_t; /* Type * RR_PORT_RESET mask definitions */ -#define RPRESET_WARM (UINT64_CAST 1 << 9) -#define RPRESET_LINK(_L) (UINT64_CAST 1 << (_L)) -#define RPRESET_LOCAL (UINT64_CAST 1) +#define RPRESET_WARM (1UL << 9) +#define RPRESET_LINK(_L) (1UL << (_L)) +#define RPRESET_LOCAL 1UL /* * RR_PROT_CONF mask and shift definitions */ #define RPCONF_DIRCMPDIS_SHFT 13 -#define RPCONF_DIRCMPDIS_MASK (UINT64_CAST 1 << 13) -#define RPCONF_FORCELOCAL (UINT64_CAST 1 << 12) +#define RPCONF_DIRCMPDIS_MASK (1UL << 13) +#define RPCONF_FORCELOCAL (1UL << 12) #define RPCONF_FLOCAL_SHFT 12 #define RPCONF_METAID_SHFT 8 -#define RPCONF_METAID_MASK (UINT64_CAST 0xf << 8) -#define RPCONF_RESETOK(_L) (UINT64_CAST 1 << ((_L) - 1)) +#define RPCONF_METAID_MASK (0xfUL << 8) +#define RPCONF_RESETOK(_L) (1UL << ((_L) - 1)) /* * RR_GLOBAL_PORT_DEF mask and shift definitions */ #define RGPD_MGLBLNHBR_ID_SHFT 12 /* -global neighbor ID */ -#define RGPD_MGLBLNHBR_ID_MASK (UINT64_CAST 0xf << 12) +#define RGPD_MGLBLNHBR_ID_MASK (0xfUL << 12) #define RGPD_MGLBLNHBR_VLD_SHFT 11 /* -global neighbor Valid */ -#define RGPD_MGLBLNHBR_VLD_MASK (UINT64_CAST 0x1 << 11) +#define RGPD_MGLBLNHBR_VLD_MASK (0x1UL << 11) #define RGPD_MGLBLPORT_SHFT 8 /* -global neighbor Port */ -#define RGPD_MGLBLPORT_MASK (UINT64_CAST 0x7 << 8) +#define RGPD_MGLBLPORT_MASK (0x7UL << 8) #define RGPD_PGLBLNHBR_ID_SHFT 4 /* +global neighbor ID */ -#define RGPD_PGLBLNHBR_ID_MASK (UINT64_CAST 0xf << 4) +#define RGPD_PGLBLNHBR_ID_MASK (0xfUL << 4) #define RGPD_PGLBLNHBR_VLD_SHFT 3 /* +global neighbor Valid */ -#define RGPD_PGLBLNHBR_VLD_MASK (UINT64_CAST 0x1 << 3) +#define RGPD_PGLBLNHBR_VLD_MASK (0x1UL << 3) #define RGPD_PGLBLPORT_SHFT 0 /* +global neighbor Port */ -#define RGPD_PGLBLPORT_MASK (UINT64_CAST 0x7 << 0) +#define RGPD_PGLBLPORT_MASK (0x7UL << 0) #define GLBL_PARMS_REGS 2 /* Two Global Parms registers */ @@ -194,95 +188,95 @@ typedef signed char port_no_t; /* Type */ #define RGPARM0_ARB_VALUE_SHFT 54 /* Local Block Arbitration State */ -#define RGPARM0_ARB_VALUE_MASK (UINT64_CAST 0x7 << 54) +#define RGPARM0_ARB_VALUE_MASK (0x7UL << 54) #define RGPARM0_ROTATEARB_SHFT 53 /* Rotate Local Block Arbitration */ -#define RGPARM0_ROTATEARB_MASK (UINT64_CAST 0x1 << 53) +#define RGPARM0_ROTATEARB_MASK (1UL << 53) #define RGPARM0_FAIREN_SHFT 52 /* Fairness logic Enable */ -#define RGPARM0_FAIREN_MASK (UINT64_CAST 0x1 << 52) +#define RGPARM0_FAIREN_MASK (1UL << 52) #define RGPARM0_LOCGNTTO_SHFT 40 /* Local grant timeout */ -#define RGPARM0_LOCGNTTO_MASK (UINT64_CAST 0xfff << 40) +#define RGPARM0_LOCGNTTO_MASK (0xfffUL << 40) #define RGPARM0_DATELINE_SHFT 38 /* Dateline crossing router */ -#define RGPARM0_DATELINE_MASK (UINT64_CAST 0x1 << 38) +#define RGPARM0_DATELINE_MASK (1UL << 38) #define RGPARM0_MAXRETRY_SHFT 28 /* Max retry count */ -#define RGPARM0_MAXRETRY_MASK (UINT64_CAST 0x3ff << 28) +#define RGPARM0_MAXRETRY_MASK (0x3ffUL << 28) #define RGPARM0_URGWRAP_SHFT 20 /* Urgent wrap */ -#define RGPARM0_URGWRAP_MASK (UINT64_CAST 0xff << 20) +#define RGPARM0_URGWRAP_MASK (0xffUL << 20) #define RGPARM0_DEADLKTO_SHFT 16 /* Deadlock timeout */ -#define RGPARM0_DEADLKTO_MASK (UINT64_CAST 0xf << 16) +#define RGPARM0_DEADLKTO_MASK (0xfUL << 16) #define RGPARM0_URGVAL_SHFT 12 /* Urgent value */ -#define RGPARM0_URGVAL_MASK (UINT64_CAST 0xf << 12) +#define RGPARM0_URGVAL_MASK (0xfUL << 12) #define RGPARM0_VCHSELEN_SHFT 11 /* VCH_SEL_EN */ -#define RGPARM0_VCHSELEN_MASK (UINT64_CAST 0x1 << 11) +#define RGPARM0_VCHSELEN_MASK (1UL << 11) #define RGPARM0_LOCURGTO_SHFT 9 /* Local urgent timeout */ -#define RGPARM0_LOCURGTO_MASK (UINT64_CAST 0x3 << 9) +#define RGPARM0_LOCURGTO_MASK (0x3UL << 9) #define RGPARM0_TAILVAL_SHFT 5 /* Tail value */ -#define RGPARM0_TAILVAL_MASK (UINT64_CAST 0xf << 5) +#define RGPARM0_TAILVAL_MASK (0xfUL << 5) #define RGPARM0_CLOCK_SHFT 1 /* Global clock select */ -#define RGPARM0_CLOCK_MASK (UINT64_CAST 0xf << 1) +#define RGPARM0_CLOCK_MASK (0xfUL << 1) #define RGPARM0_BYPEN_SHFT 0 -#define RGPARM0_BYPEN_MASK (UINT64_CAST 1) /* Bypass enable */ +#define RGPARM0_BYPEN_MASK 1UL /* Bypass enable */ /* * RR_GLOBAL_PARMS1 shift and mask definitions */ #define RGPARM1_TTOWRAP_SHFT 12 /* Tail timeout wrap */ -#define RGPARM1_TTOWRAP_MASK (UINT64_CAST 0xfffff << 12) +#define RGPARM1_TTOWRAP_MASK (0xfffffUL << 12) #define RGPARM1_AGERATE_SHFT 8 /* Age rate */ -#define RGPARM1_AGERATE_MASK (UINT64_CAST 0xf << 8) +#define RGPARM1_AGERATE_MASK (0xfUL << 8) #define RGPARM1_JSWSTAT_SHFT 0 /* JTAG Sw Register bits */ -#define RGPARM1_JSWSTAT_MASK (UINT64_CAST 0xff << 0) +#define RGPARM1_JSWSTAT_MASK (0xffUL << 0) /* * RR_DIAG_PARMS mask and shift definitions */ -#define RDPARM_ABSHISTOGRAM (UINT64_CAST 1 << 17) /* Absolute histgrm */ -#define RDPARM_DEADLOCKRESET (UINT64_CAST 1 << 16) /* Reset on deadlck */ -#define RDPARM_DISABLE(_L) (UINT64_CAST 1 << ((_L) + 7)) -#define RDPARM_SENDERROR(_L) (UINT64_CAST 1 << ((_L) - 1)) +#define RDPARM_ABSHISTOGRAM (1UL << 17) /* Absolute histgrm */ +#define RDPARM_DEADLOCKRESET (1UL << 16) /* Reset on deadlck */ +#define RDPARM_DISABLE(_L) (1UL << ((_L) + 7)) +#define RDPARM_SENDERROR(_L) (1UL << ((_L) - 1)) /* * RR_DEBUG_ADDR mask and shift definitions */ #define RDA_DATA_SHFT 10 /* Observed debug data */ -#define RDA_DATA_MASK (UINT64_CAST 0xffff << 10) +#define RDA_DATA_MASK (0xffffUL << 10) #define RDA_ADDR_SHFT 0 /* debug address for data */ -#define RDA_ADDR_MASK (UINT64_CAST 0x3ff << 0) +#define RDA_ADDR_MASK (0x3ffUL << 0) /* * RR_LB_TO_L2 mask and shift definitions */ #define RLBTOL2_DATA_VLD_SHFT 32 /* data is valid for JTAG controller */ -#define RLBTOL2_DATA_VLD_MASK (UINT64_CAST 0x1 << 32) +#define RLBTOL2_DATA_VLD_MASK (1UL << 32) #define RLBTOL2_DATA_SHFT 0 /* data bits for JTAG controller */ -#define RLBTOL2_DATA_MASK (UINT64_CAST 0xffffffff) +#define RLBTOL2_DATA_MASK 0xffffffffUL /* * RR_L2_TO_LB mask and shift definitions */ #define RL2TOLB_DATA_VLD_SHFT 33 /* data is valid from JTAG controller */ -#define RL2TOLB_DATA_VLD_MASK (UINT64_CAST 0x1 << 33) +#define RL2TOLB_DATA_VLD_MASK (1UL << 33) #define RL2TOLB_PARITY_SHFT 32 /* sw implemented parity for data */ -#define RL2TOLB_PARITY_MASK (UINT64_CAST 0x1 << 32) +#define RL2TOLB_PARITY_MASK (1UL << 32) #define RL2TOLB_DATA_SHFT 0 /* data bits from JTAG controller */ -#define RL2TOLB_DATA_MASK (UINT64_CAST 0xffffffff) +#define RL2TOLB_DATA_MASK 0xffffffffUL /* * RR_JBUS_CONTROL mask and shift definitions */ #define RJC_POS_BITS_SHFT 20 /* Router position bits */ -#define RJC_POS_BITS_MASK (UINT64_CAST 0xf << 20) +#define RJC_POS_BITS_MASK (0xfUL << 20) #define RJC_RD_DATA_STROBE_SHFT 16 /* count when read data is strobed in */ -#define RJC_RD_DATA_STROBE_MASK (UINT64_CAST 0xf << 16) +#define RJC_RD_DATA_STROBE_MASK (0xfUL << 16) #define RJC_WE_OE_HOLD_SHFT 8 /* time OE or WE is held */ -#define RJC_WE_OE_HOLD_MASK (UINT64_CAST 0xff << 8) +#define RJC_WE_OE_HOLD_MASK (0xffUL << 8) #define RJC_ADDR_SET_HLD_SHFT 0 /* time address driven around OE/WE */ -#define RJC_ADDR_SET_HLD_MASK (UINT64_CAST 0xff) +#define RJC_ADDR_SET_HLD_MASK 0xffUL /* * RR_SCRATCH_REGx mask and shift definitions @@ -291,58 +285,58 @@ typedef signed char port_no_t; /* Type */ #define RSCR0_BOOTED_SHFT 63 -#define RSCR0_BOOTED_MASK (UINT64_CAST 0x1 << RSCR0_BOOTED_SHFT) +#define RSCR0_BOOTED_MASK (0x1UL << RSCR0_BOOTED_SHFT) #define RSCR0_LOCALID_SHFT 56 -#define RSCR0_LOCALID_MASK (UINT64_CAST 0x7f << RSCR0_LOCALID_SHFT) +#define RSCR0_LOCALID_MASK (0x7fUL << RSCR0_LOCALID_SHFT) #define RSCR0_UNUSED_SHFT 48 -#define RSCR0_UNUSED_MASK (UINT64_CAST 0xff << RSCR0_UNUSED_SHFT) +#define RSCR0_UNUSED_MASK (0xffUL << RSCR0_UNUSED_SHFT) #define RSCR0_NIC_SHFT 0 -#define RSCR0_NIC_MASK (UINT64_CAST 0xffffffffffff) +#define RSCR0_NIC_MASK 0xffffffffffffUL #define RSCR1_MODID_SHFT 0 -#define RSCR1_MODID_MASK (UINT64_CAST 0xffff) +#define RSCR1_MODID_MASK 0xffffUL /* * RR_VECTOR_HW_BAR mask and shift definitions */ #define BAR_TX_SHFT 27 /* Barrier in trans(m)it when read */ -#define BAR_TX_MASK (UINT64_CAST 1 << BAR_TX_SHFT) +#define BAR_TX_MASK (1UL << BAR_TX_SHFT) #define BAR_VLD_SHFT 26 /* Valid Configuration */ -#define BAR_VLD_MASK (UINT64_CAST 1 << BAR_VLD_SHFT) +#define BAR_VLD_MASK (1UL << BAR_VLD_SHFT) #define BAR_SEQ_SHFT 24 /* Sequence number */ -#define BAR_SEQ_MASK (UINT64_CAST 3 << BAR_SEQ_SHFT) +#define BAR_SEQ_MASK (3UL << BAR_SEQ_SHFT) #define BAR_LEAFSTATE_SHFT 18 /* Leaf State */ -#define BAR_LEAFSTATE_MASK (UINT64_CAST 0x3f << BAR_LEAFSTATE_SHFT) +#define BAR_LEAFSTATE_MASK (0x3fUL << BAR_LEAFSTATE_SHFT) #define BAR_PARENT_SHFT 14 /* Parent Port */ -#define BAR_PARENT_MASK (UINT64_CAST 0xf << BAR_PARENT_SHFT) +#define BAR_PARENT_MASK (0xfUL << BAR_PARENT_SHFT) #define BAR_CHILDREN_SHFT 6 /* Child Select port bits */ -#define BAR_CHILDREN_MASK (UINT64_CAST 0xff << BAR_CHILDREN_SHFT) +#define BAR_CHILDREN_MASK (0xffUL << BAR_CHILDREN_SHFT) #define BAR_LEAFCOUNT_SHFT 0 /* Leaf Count to trigger parent */ -#define BAR_LEAFCOUNT_MASK (UINT64_CAST 0x3f) +#define BAR_LEAFCOUNT_MASK 0x3fUL /* * RR_PORT_PARMS(_L) mask and shift definitions */ #define RPPARM_MIPRESETEN_SHFT 29 /* Message In Progress reset enable */ -#define RPPARM_MIPRESETEN_MASK (UINT64_CAST 0x1 << 29) +#define RPPARM_MIPRESETEN_MASK (0x1UL << 29) #define RPPARM_UBAREN_SHFT 28 /* Enable user barrier requests */ -#define RPPARM_UBAREN_MASK (UINT64_CAST 0x1 << 28) +#define RPPARM_UBAREN_MASK (0x1UL << 28) #define RPPARM_OUTPDTO_SHFT 24 /* Output Port Deadlock TO value */ -#define RPPARM_OUTPDTO_MASK (UINT64_CAST 0xf << 24) +#define RPPARM_OUTPDTO_MASK (0xfUL << 24) #define RPPARM_PORTMATE_SHFT 21 /* Port Mate for the port */ -#define RPPARM_PORTMATE_MASK (UINT64_CAST 0x7 << 21) +#define RPPARM_PORTMATE_MASK (0x7UL << 21) #define RPPARM_HISTEN_SHFT 20 /* Histogram counter enable */ -#define RPPARM_HISTEN_MASK (UINT64_CAST 0x1 << 20) +#define RPPARM_HISTEN_MASK (0x1UL << 20) #define RPPARM_HISTSEL_SHFT 18 -#define RPPARM_HISTSEL_MASK (UINT64_CAST 0x3 << 18) +#define RPPARM_HISTSEL_MASK (0x3UL << 18) #define RPPARM_DAMQHS_SHFT 16 -#define RPPARM_DAMQHS_MASK (UINT64_CAST 0x3 << 16) +#define RPPARM_DAMQHS_MASK (0x3UL << 16) #define RPPARM_NULLTO_SHFT 10 -#define RPPARM_NULLTO_MASK (UINT64_CAST 0x3f << 10) +#define RPPARM_NULLTO_MASK (0x3fUL << 10) #define RPPARM_MAXBURST_SHFT 0 -#define RPPARM_MAXBURST_MASK (UINT64_CAST 0x3ff) +#define RPPARM_MAXBURST_MASK 0x3ffUL /* * NOTE: Normally the kernel tracks only UTILIZATION statistics. @@ -356,23 +350,23 @@ typedef signed char port_no_t; /* Type /* * RR_STATUS_ERROR(_L) and RR_ERROR_CLEAR(_L) mask and shift definitions */ -#define RSERR_POWERNOK (UINT64_CAST 1 << 38) -#define RSERR_PORT_DEADLOCK (UINT64_CAST 1 << 37) -#define RSERR_WARMRESET (UINT64_CAST 1 << 36) -#define RSERR_LINKRESET (UINT64_CAST 1 << 35) -#define RSERR_RETRYTIMEOUT (UINT64_CAST 1 << 34) -#define RSERR_FIFOOVERFLOW (UINT64_CAST 1 << 33) -#define RSERR_ILLEGALPORT (UINT64_CAST 1 << 32) +#define RSERR_POWERNOK (1UL << 38) +#define RSERR_PORT_DEADLOCK (1UL << 37) +#define RSERR_WARMRESET (1UL << 36) +#define RSERR_LINKRESET (1UL << 35) +#define RSERR_RETRYTIMEOUT (1UL << 34) +#define RSERR_FIFOOVERFLOW (1UL << 33) +#define RSERR_ILLEGALPORT (1UL << 32) #define RSERR_DEADLOCKTO_SHFT 28 -#define RSERR_DEADLOCKTO_MASK (UINT64_CAST 0xf << 28) +#define RSERR_DEADLOCKTO_MASK (0xfUL << 28) #define RSERR_RECVTAILTO_SHFT 24 -#define RSERR_RECVTAILTO_MASK (UINT64_CAST 0xf << 24) +#define RSERR_RECVTAILTO_MASK (0xfUL << 24) #define RSERR_RETRYCNT_SHFT 16 -#define RSERR_RETRYCNT_MASK (UINT64_CAST 0xff << 16) +#define RSERR_RETRYCNT_MASK (0xffUL << 16) #define RSERR_CBERRCNT_SHFT 8 -#define RSERR_CBERRCNT_MASK (UINT64_CAST 0xff << 8) +#define RSERR_CBERRCNT_MASK (0xffUL << 8) #define RSERR_SNERRCNT_SHFT 0 -#define RSERR_SNERRCNT_MASK (UINT64_CAST 0xff << 0) +#define RSERR_SNERRCNT_MASK (0xffUL << 0) #define PORT_STATUS_UP (1 << 0) /* Router link up */ @@ -393,10 +387,10 @@ typedef signed char port_no_t; /* Type * why the router link * went down */ -#define PROBE_RESULT_BAD (-1) /* Set if any of the router +#define PROBE_RESULT_BAD -1 /* Set if any of the router * links failed after reset */ -#define PROBE_RESULT_GOOD (0) /* Set if all the router links +#define PROBE_RESULT_GOOD 0 /* Set if all the router links * which came out of reset * are up */ @@ -528,23 +522,6 @@ typedef struct router_info_s { #define RIP_PROMLOG 2 /* Router info in promlog */ #define RIP_CONSOLE 4 /* Router info on console */ -#define ROUTER_INFO_PRINT(_rip,_where) (_rip->ri_print |= _where) - /* Set the field used to check if a - * router info can be printed - */ -#define IS_ROUTER_INFO_PRINTED(_rip,_where) \ - (_rip->ri_print & _where) - /* Was the router info printed to - * the given location (_where) ? - * Mainly used to prevent duplicate - * router error states. - */ -#define ROUTER_INFO_LOCK(_rip,_s) _s = mutex_spinlock(&(_rip->ri_lock)) - /* Take the lock on router info - * to gain exclusive access - */ -#define ROUTER_INFO_UNLOCK(_rip,_s) mutex_spinunlock(&(_rip->ri_lock),_s) - /* Release the lock on router info */ /* * Router info hanging in the nodepda */ @@ -623,7 +600,7 @@ typedef struct router_queue_s { */ #define RHIST_BUCKET_SHFT(_x) (32 * ((_x) & 0x1)) -#define RHIST_BUCKET_MASK(_x) (UINT64_CAST 0xffffffff << RHIST_BUCKET_SHFT((_x) & 0x1)) +#define RHIST_BUCKET_MASK(_x) (0xffffffffUL << RHIST_BUCKET_SHFT((_x) & 0x1)) #define RHIST_GET_BUCKET(_x, _reg) \ ((RHIST_BUCKET_MASK(_x) & ((_reg)[(_x) >> 1])) >> RHIST_BUCKET_SHFT(_x)) @@ -631,7 +608,7 @@ typedef struct router_queue_s { * RR_RESET_MASK(_L) mask and shift definitions */ -#define RRM_RESETOK(_L) (UINT64_CAST 1 << ((_L) - 1)) +#define RRM_RESETOK(_L) (1UL << ((_L) - 1)) #define RRM_RESETOK_ALL ALL_PORTS /* @@ -639,7 +616,7 @@ typedef struct router_queue_s { */ #define RTABLE_SHFT(_L) (4 * ((_L) - 1)) -#define RTABLE_MASK(_L) (UINT64_CAST 0x7 << RTABLE_SHFT(_L)) +#define RTABLE_MASK(_L) (0x7UL << RTABLE_SHFT(_L)) #define ROUTERINFO_STKSZ 4096 diff -prauN linux-2.6.0-test5/include/asm-ia64/sn/sn2/intr.h wli-2.6.0-test5-bk12-25/include/asm-ia64/sn/sn2/intr.h --- linux-2.6.0-test5/include/asm-ia64/sn/sn2/intr.h 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ia64/sn/sn2/intr.h 2003-09-25 19:16:12.000000000 -0700 @@ -17,10 +17,11 @@ #define SGI_II_ERROR (0x31) #define SGI_XBOW_ERROR (0x32) #define SGI_PCIBR_ERROR (0x33) +#define SGI_ACPI_SCI_INT (0x34) #define SGI_XPC_NOTIFY (0xe7) #define IA64_SN2_FIRST_DEVICE_VECTOR (0x34) -#define IA64_SN2_LAST_DEVICE_VECTOR (0xe6) +#define IA64_SN2_LAST_DEVICE_VECTOR (0xe7) #define SN2_IRQ_RESERVED (0x1) #define SN2_IRQ_CONNECTED (0x2) diff -prauN linux-2.6.0-test5/include/asm-ia64/sn/sn2/shub.h wli-2.6.0-test5-bk12-25/include/asm-ia64/sn/sn2/shub.h --- linux-2.6.0-test5/include/asm-ia64/sn/sn2/shub.h 2003-09-08 12:50:33.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ia64/sn/sn2/shub.h 2003-09-25 19:16:12.000000000 -0700 @@ -11,13 +11,6 @@ #ifndef _ASM_IA64_SN_SN2_SHUB_H #define _ASM_IA64_SN_SN2_SHUB_H -#include /* shub mmr addresses and formats */ -#include -#include -#ifndef __ASSEMBLY__ -#include /* shub mmr struct defines */ -#endif - /* * Junk Bus Address Space * The junk bus is used to access the PROM, LED's, and UART. It's diff -prauN linux-2.6.0-test5/include/asm-ia64/sn/sn2/shub_mmr_t.h wli-2.6.0-test5-bk12-25/include/asm-ia64/sn/sn2/shub_mmr_t.h --- linux-2.6.0-test5/include/asm-ia64/sn/sn2/shub_mmr_t.h 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ia64/sn/sn2/shub_mmr_t.h 2003-09-25 19:16:12.000000000 -0700 @@ -7,8 +7,6 @@ * Copyright (c) 2001-2003 Silicon Graphics, Inc. All rights reserved. */ - - #ifndef _ASM_IA64_SN_SN2_SHUB_MMR_T_H #define _ASM_IA64_SN_SN2_SHUB_MMR_T_H @@ -19,7 +17,6 @@ /* FSB BINIT# Control */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_fsb_binit_control_u { mmr_t sh_fsb_binit_control_regval; struct { @@ -27,22 +24,12 @@ typedef union sh_fsb_binit_control_u { mmr_t reserved_0 : 63; } sh_fsb_binit_control_s; } sh_fsb_binit_control_u_t; -#else -typedef union sh_fsb_binit_control_u { - mmr_t sh_fsb_binit_control_regval; - struct { - mmr_t reserved_0 : 63; - mmr_t binit : 1; - } sh_fsb_binit_control_s; -} sh_fsb_binit_control_u_t; -#endif /* ==================================================================== */ /* Register "SH_FSB_RESET_CONTROL" */ /* FSB Reset Control */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_fsb_reset_control_u { mmr_t sh_fsb_reset_control_regval; struct { @@ -50,22 +37,12 @@ typedef union sh_fsb_reset_control_u { mmr_t reserved_0 : 63; } sh_fsb_reset_control_s; } sh_fsb_reset_control_u_t; -#else -typedef union sh_fsb_reset_control_u { - mmr_t sh_fsb_reset_control_regval; - struct { - mmr_t reserved_0 : 63; - mmr_t reset : 1; - } sh_fsb_reset_control_s; -} sh_fsb_reset_control_u_t; -#endif /* ==================================================================== */ /* Register "SH_FSB_SYSTEM_AGENT_CONFIG" */ /* FSB System Agent Configuration */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_fsb_system_agent_config_u { mmr_t sh_fsb_system_agent_config_regval; struct { @@ -88,37 +65,12 @@ typedef union sh_fsb_system_agent_config mmr_t reserved_3 : 18; } sh_fsb_system_agent_config_s; } sh_fsb_system_agent_config_u_t; -#else -typedef union sh_fsb_system_agent_config_u { - mmr_t sh_fsb_system_agent_config_regval; - struct { - mmr_t reserved_3 : 18; - mmr_t binit_event_enables : 14; - mmr_t reserved_2 : 7; - mmr_t serialize_fsb_en : 1; - mmr_t tdot : 1; - mmr_t reserved_1 : 4; - mmr_t inta_trans_rsp : 1; - mmr_t xtpr_trans_rsp : 1; - mmr_t io_trans_rsp : 1; - mmr_t inta_rsp_data : 8; - mmr_t short_hang_en : 1; - mmr_t bnr_throttling_en : 1; - mmr_t binit_assert_en : 1; - mmr_t berr_sampling_en : 1; - mmr_t berr_assert_en : 1; - mmr_t reserved_0 : 2; - mmr_t rcnt_scnt_en : 1; - } sh_fsb_system_agent_config_s; -} sh_fsb_system_agent_config_u_t; -#endif /* ==================================================================== */ /* Register "SH_FSB_VGA_REMAP" */ /* FSB VGA Address Space Remap */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_fsb_vga_remap_u { mmr_t sh_fsb_vga_remap_regval; struct { @@ -131,27 +83,12 @@ typedef union sh_fsb_vga_remap_u { mmr_t reserved_2 : 1; } sh_fsb_vga_remap_s; } sh_fsb_vga_remap_u_t; -#else -typedef union sh_fsb_vga_remap_u { - mmr_t sh_fsb_vga_remap_regval; - struct { - mmr_t reserved_2 : 1; - mmr_t vga_remapping_enabled : 1; - mmr_t reserved_1 : 13; - mmr_t nid : 11; - mmr_t asid : 2; - mmr_t offset : 19; - mmr_t reserved_0 : 17; - } sh_fsb_vga_remap_s; -} sh_fsb_vga_remap_u_t; -#endif /* ==================================================================== */ /* Register "SH_FSB_RESET_STATUS" */ /* FSB Reset Status */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_fsb_reset_status_u { mmr_t sh_fsb_reset_status_regval; struct { @@ -159,22 +96,12 @@ typedef union sh_fsb_reset_status_u { mmr_t reserved_0 : 63; } sh_fsb_reset_status_s; } sh_fsb_reset_status_u_t; -#else -typedef union sh_fsb_reset_status_u { - mmr_t sh_fsb_reset_status_regval; - struct { - mmr_t reserved_0 : 63; - mmr_t reset_in_progress : 1; - } sh_fsb_reset_status_s; -} sh_fsb_reset_status_u_t; -#endif /* ==================================================================== */ /* Register "SH_FSB_SYMMETRIC_AGENT_STATUS" */ /* FSB Symmetric Agent Status */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_fsb_symmetric_agent_status_u { mmr_t sh_fsb_symmetric_agent_status_regval; struct { @@ -184,24 +111,12 @@ typedef union sh_fsb_symmetric_agent_sta mmr_t reserved_0 : 61; } sh_fsb_symmetric_agent_status_s; } sh_fsb_symmetric_agent_status_u_t; -#else -typedef union sh_fsb_symmetric_agent_status_u { - mmr_t sh_fsb_symmetric_agent_status_regval; - struct { - mmr_t reserved_0 : 61; - mmr_t cpus_ready : 1; - mmr_t cpu_1_active : 1; - mmr_t cpu_0_active : 1; - } sh_fsb_symmetric_agent_status_s; -} sh_fsb_symmetric_agent_status_u_t; -#endif /* ==================================================================== */ /* Register "SH_GFX_CREDIT_COUNT_0" */ /* Graphics-write Credit Count for CPU 0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_gfx_credit_count_0_u { mmr_t sh_gfx_credit_count_0_regval; struct { @@ -210,23 +125,12 @@ typedef union sh_gfx_credit_count_0_u { mmr_t reset_gfx_state : 1; } sh_gfx_credit_count_0_s; } sh_gfx_credit_count_0_u_t; -#else -typedef union sh_gfx_credit_count_0_u { - mmr_t sh_gfx_credit_count_0_regval; - struct { - mmr_t reset_gfx_state : 1; - mmr_t reserved_0 : 43; - mmr_t count : 20; - } sh_gfx_credit_count_0_s; -} sh_gfx_credit_count_0_u_t; -#endif /* ==================================================================== */ /* Register "SH_GFX_CREDIT_COUNT_1" */ /* Graphics-write Credit Count for CPU 1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_gfx_credit_count_1_u { mmr_t sh_gfx_credit_count_1_regval; struct { @@ -235,23 +139,12 @@ typedef union sh_gfx_credit_count_1_u { mmr_t reset_gfx_state : 1; } sh_gfx_credit_count_1_s; } sh_gfx_credit_count_1_u_t; -#else -typedef union sh_gfx_credit_count_1_u { - mmr_t sh_gfx_credit_count_1_regval; - struct { - mmr_t reset_gfx_state : 1; - mmr_t reserved_0 : 43; - mmr_t count : 20; - } sh_gfx_credit_count_1_s; -} sh_gfx_credit_count_1_u_t; -#endif /* ==================================================================== */ /* Register "SH_GFX_MODE_CNTRL_0" */ /* Graphics credit mode amd message ordering for CPU 0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_gfx_mode_cntrl_0_u { mmr_t sh_gfx_mode_cntrl_0_regval; struct { @@ -261,24 +154,12 @@ typedef union sh_gfx_mode_cntrl_0_u { mmr_t reserved_0 : 61; } sh_gfx_mode_cntrl_0_s; } sh_gfx_mode_cntrl_0_u_t; -#else -typedef union sh_gfx_mode_cntrl_0_u { - mmr_t sh_gfx_mode_cntrl_0_regval; - struct { - mmr_t reserved_0 : 61; - mmr_t relaxed_ordering : 1; - mmr_t mixed_mode_credits : 1; - mmr_t dword_credits : 1; - } sh_gfx_mode_cntrl_0_s; -} sh_gfx_mode_cntrl_0_u_t; -#endif /* ==================================================================== */ /* Register "SH_GFX_MODE_CNTRL_1" */ /* Graphics credit mode amd message ordering for CPU 1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_gfx_mode_cntrl_1_u { mmr_t sh_gfx_mode_cntrl_1_regval; struct { @@ -288,24 +169,12 @@ typedef union sh_gfx_mode_cntrl_1_u { mmr_t reserved_0 : 61; } sh_gfx_mode_cntrl_1_s; } sh_gfx_mode_cntrl_1_u_t; -#else -typedef union sh_gfx_mode_cntrl_1_u { - mmr_t sh_gfx_mode_cntrl_1_regval; - struct { - mmr_t reserved_0 : 61; - mmr_t relaxed_ordering : 1; - mmr_t mixed_mode_credits : 1; - mmr_t dword_credits : 1; - } sh_gfx_mode_cntrl_1_s; -} sh_gfx_mode_cntrl_1_u_t; -#endif /* ==================================================================== */ /* Register "SH_GFX_SKID_CREDIT_COUNT_0" */ /* Graphics-write Skid Credit Count for CPU 0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_gfx_skid_credit_count_0_u { mmr_t sh_gfx_skid_credit_count_0_regval; struct { @@ -313,22 +182,12 @@ typedef union sh_gfx_skid_credit_count_0 mmr_t reserved_0 : 44; } sh_gfx_skid_credit_count_0_s; } sh_gfx_skid_credit_count_0_u_t; -#else -typedef union sh_gfx_skid_credit_count_0_u { - mmr_t sh_gfx_skid_credit_count_0_regval; - struct { - mmr_t reserved_0 : 44; - mmr_t skid : 20; - } sh_gfx_skid_credit_count_0_s; -} sh_gfx_skid_credit_count_0_u_t; -#endif /* ==================================================================== */ /* Register "SH_GFX_SKID_CREDIT_COUNT_1" */ /* Graphics-write Skid Credit Count for CPU 1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_gfx_skid_credit_count_1_u { mmr_t sh_gfx_skid_credit_count_1_regval; struct { @@ -336,22 +195,12 @@ typedef union sh_gfx_skid_credit_count_1 mmr_t reserved_0 : 44; } sh_gfx_skid_credit_count_1_s; } sh_gfx_skid_credit_count_1_u_t; -#else -typedef union sh_gfx_skid_credit_count_1_u { - mmr_t sh_gfx_skid_credit_count_1_regval; - struct { - mmr_t reserved_0 : 44; - mmr_t skid : 20; - } sh_gfx_skid_credit_count_1_s; -} sh_gfx_skid_credit_count_1_u_t; -#endif /* ==================================================================== */ /* Register "SH_GFX_STALL_LIMIT_0" */ /* Graphics-write Stall Limit for CPU 0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_gfx_stall_limit_0_u { mmr_t sh_gfx_stall_limit_0_regval; struct { @@ -359,22 +208,12 @@ typedef union sh_gfx_stall_limit_0_u { mmr_t reserved_0 : 38; } sh_gfx_stall_limit_0_s; } sh_gfx_stall_limit_0_u_t; -#else -typedef union sh_gfx_stall_limit_0_u { - mmr_t sh_gfx_stall_limit_0_regval; - struct { - mmr_t reserved_0 : 38; - mmr_t limit : 26; - } sh_gfx_stall_limit_0_s; -} sh_gfx_stall_limit_0_u_t; -#endif /* ==================================================================== */ /* Register "SH_GFX_STALL_LIMIT_1" */ /* Graphics-write Stall Limit for CPU 1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_gfx_stall_limit_1_u { mmr_t sh_gfx_stall_limit_1_regval; struct { @@ -382,22 +221,12 @@ typedef union sh_gfx_stall_limit_1_u { mmr_t reserved_0 : 38; } sh_gfx_stall_limit_1_s; } sh_gfx_stall_limit_1_u_t; -#else -typedef union sh_gfx_stall_limit_1_u { - mmr_t sh_gfx_stall_limit_1_regval; - struct { - mmr_t reserved_0 : 38; - mmr_t limit : 26; - } sh_gfx_stall_limit_1_s; -} sh_gfx_stall_limit_1_u_t; -#endif /* ==================================================================== */ /* Register "SH_GFX_STALL_TIMER_0" */ /* Graphics-write Stall Timer for CPU 0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_gfx_stall_timer_0_u { mmr_t sh_gfx_stall_timer_0_regval; struct { @@ -405,22 +234,12 @@ typedef union sh_gfx_stall_timer_0_u { mmr_t reserved_0 : 38; } sh_gfx_stall_timer_0_s; } sh_gfx_stall_timer_0_u_t; -#else -typedef union sh_gfx_stall_timer_0_u { - mmr_t sh_gfx_stall_timer_0_regval; - struct { - mmr_t reserved_0 : 38; - mmr_t timer_value : 26; - } sh_gfx_stall_timer_0_s; -} sh_gfx_stall_timer_0_u_t; -#endif /* ==================================================================== */ /* Register "SH_GFX_STALL_TIMER_1" */ /* Graphics-write Stall Timer for CPU 1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_gfx_stall_timer_1_u { mmr_t sh_gfx_stall_timer_1_regval; struct { @@ -428,22 +247,12 @@ typedef union sh_gfx_stall_timer_1_u { mmr_t reserved_0 : 38; } sh_gfx_stall_timer_1_s; } sh_gfx_stall_timer_1_u_t; -#else -typedef union sh_gfx_stall_timer_1_u { - mmr_t sh_gfx_stall_timer_1_regval; - struct { - mmr_t reserved_0 : 38; - mmr_t timer_value : 26; - } sh_gfx_stall_timer_1_s; -} sh_gfx_stall_timer_1_u_t; -#endif /* ==================================================================== */ /* Register "SH_GFX_WINDOW_0" */ /* Graphics-write Window for CPU 0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_gfx_window_0_u { mmr_t sh_gfx_window_0_regval; struct { @@ -453,24 +262,12 @@ typedef union sh_gfx_window_0_u { mmr_t gfx_window_en : 1; } sh_gfx_window_0_s; } sh_gfx_window_0_u_t; -#else -typedef union sh_gfx_window_0_u { - mmr_t sh_gfx_window_0_regval; - struct { - mmr_t gfx_window_en : 1; - mmr_t reserved_1 : 27; - mmr_t base_addr : 12; - mmr_t reserved_0 : 24; - } sh_gfx_window_0_s; -} sh_gfx_window_0_u_t; -#endif /* ==================================================================== */ /* Register "SH_GFX_WINDOW_1" */ /* Graphics-write Window for CPU 1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_gfx_window_1_u { mmr_t sh_gfx_window_1_regval; struct { @@ -480,24 +277,12 @@ typedef union sh_gfx_window_1_u { mmr_t gfx_window_en : 1; } sh_gfx_window_1_s; } sh_gfx_window_1_u_t; -#else -typedef union sh_gfx_window_1_u { - mmr_t sh_gfx_window_1_regval; - struct { - mmr_t gfx_window_en : 1; - mmr_t reserved_1 : 27; - mmr_t base_addr : 12; - mmr_t reserved_0 : 24; - } sh_gfx_window_1_s; -} sh_gfx_window_1_u_t; -#endif /* ==================================================================== */ /* Register "SH_GFX_INTERRUPT_TIMER_LIMIT_0" */ /* Graphics-write Interrupt Limit for CPU 0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_gfx_interrupt_timer_limit_0_u { mmr_t sh_gfx_interrupt_timer_limit_0_regval; struct { @@ -505,22 +290,12 @@ typedef union sh_gfx_interrupt_timer_lim mmr_t reserved_0 : 56; } sh_gfx_interrupt_timer_limit_0_s; } sh_gfx_interrupt_timer_limit_0_u_t; -#else -typedef union sh_gfx_interrupt_timer_limit_0_u { - mmr_t sh_gfx_interrupt_timer_limit_0_regval; - struct { - mmr_t reserved_0 : 56; - mmr_t interrupt_timer_limit : 8; - } sh_gfx_interrupt_timer_limit_0_s; -} sh_gfx_interrupt_timer_limit_0_u_t; -#endif /* ==================================================================== */ /* Register "SH_GFX_INTERRUPT_TIMER_LIMIT_1" */ /* Graphics-write Interrupt Limit for CPU 1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_gfx_interrupt_timer_limit_1_u { mmr_t sh_gfx_interrupt_timer_limit_1_regval; struct { @@ -528,22 +303,12 @@ typedef union sh_gfx_interrupt_timer_lim mmr_t reserved_0 : 56; } sh_gfx_interrupt_timer_limit_1_s; } sh_gfx_interrupt_timer_limit_1_u_t; -#else -typedef union sh_gfx_interrupt_timer_limit_1_u { - mmr_t sh_gfx_interrupt_timer_limit_1_regval; - struct { - mmr_t reserved_0 : 56; - mmr_t interrupt_timer_limit : 8; - } sh_gfx_interrupt_timer_limit_1_s; -} sh_gfx_interrupt_timer_limit_1_u_t; -#endif /* ==================================================================== */ /* Register "SH_GFX_WRITE_STATUS_0" */ /* Graphics Write Status for CPU 0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_gfx_write_status_0_u { mmr_t sh_gfx_write_status_0_regval; struct { @@ -552,23 +317,12 @@ typedef union sh_gfx_write_status_0_u { mmr_t re_enable_gfx_stall : 1; } sh_gfx_write_status_0_s; } sh_gfx_write_status_0_u_t; -#else -typedef union sh_gfx_write_status_0_u { - mmr_t sh_gfx_write_status_0_regval; - struct { - mmr_t re_enable_gfx_stall : 1; - mmr_t reserved_0 : 62; - mmr_t busy : 1; - } sh_gfx_write_status_0_s; -} sh_gfx_write_status_0_u_t; -#endif /* ==================================================================== */ /* Register "SH_GFX_WRITE_STATUS_1" */ /* Graphics Write Status for CPU 1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_gfx_write_status_1_u { mmr_t sh_gfx_write_status_1_regval; struct { @@ -577,23 +331,12 @@ typedef union sh_gfx_write_status_1_u { mmr_t re_enable_gfx_stall : 1; } sh_gfx_write_status_1_s; } sh_gfx_write_status_1_u_t; -#else -typedef union sh_gfx_write_status_1_u { - mmr_t sh_gfx_write_status_1_regval; - struct { - mmr_t re_enable_gfx_stall : 1; - mmr_t reserved_0 : 62; - mmr_t busy : 1; - } sh_gfx_write_status_1_s; -} sh_gfx_write_status_1_u_t; -#endif /* ==================================================================== */ /* Register "SH_II_INT0" */ /* SHub II Interrupt 0 Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ii_int0_u { mmr_t sh_ii_int0_regval; struct { @@ -602,23 +345,12 @@ typedef union sh_ii_int0_u { mmr_t reserved_0 : 55; } sh_ii_int0_s; } sh_ii_int0_u_t; -#else -typedef union sh_ii_int0_u { - mmr_t sh_ii_int0_regval; - struct { - mmr_t reserved_0 : 55; - mmr_t send : 1; - mmr_t idx : 8; - } sh_ii_int0_s; -} sh_ii_int0_u_t; -#endif /* ==================================================================== */ /* Register "SH_II_INT0_CONFIG" */ /* SHub II Interrupt 0 Config Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ii_int0_config_u { mmr_t sh_ii_int0_config_regval; struct { @@ -630,26 +362,12 @@ typedef union sh_ii_int0_config_u { mmr_t reserved_1 : 14; } sh_ii_int0_config_s; } sh_ii_int0_config_u_t; -#else -typedef union sh_ii_int0_config_u { - mmr_t sh_ii_int0_config_regval; - struct { - mmr_t reserved_1 : 14; - mmr_t base : 29; - mmr_t reserved_0 : 1; - mmr_t pid : 16; - mmr_t agt : 1; - mmr_t type : 3; - } sh_ii_int0_config_s; -} sh_ii_int0_config_u_t; -#endif /* ==================================================================== */ /* Register "SH_II_INT0_ENABLE" */ /* SHub II Interrupt 0 Enable Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ii_int0_enable_u { mmr_t sh_ii_int0_enable_regval; struct { @@ -657,22 +375,12 @@ typedef union sh_ii_int0_enable_u { mmr_t reserved_0 : 63; } sh_ii_int0_enable_s; } sh_ii_int0_enable_u_t; -#else -typedef union sh_ii_int0_enable_u { - mmr_t sh_ii_int0_enable_regval; - struct { - mmr_t reserved_0 : 63; - mmr_t ii_enable : 1; - } sh_ii_int0_enable_s; -} sh_ii_int0_enable_u_t; -#endif /* ==================================================================== */ /* Register "SH_II_INT1" */ /* SHub II Interrupt 1 Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ii_int1_u { mmr_t sh_ii_int1_regval; struct { @@ -681,23 +389,12 @@ typedef union sh_ii_int1_u { mmr_t reserved_0 : 55; } sh_ii_int1_s; } sh_ii_int1_u_t; -#else -typedef union sh_ii_int1_u { - mmr_t sh_ii_int1_regval; - struct { - mmr_t reserved_0 : 55; - mmr_t send : 1; - mmr_t idx : 8; - } sh_ii_int1_s; -} sh_ii_int1_u_t; -#endif /* ==================================================================== */ /* Register "SH_II_INT1_CONFIG" */ /* SHub II Interrupt 1 Config Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ii_int1_config_u { mmr_t sh_ii_int1_config_regval; struct { @@ -709,26 +406,12 @@ typedef union sh_ii_int1_config_u { mmr_t reserved_1 : 14; } sh_ii_int1_config_s; } sh_ii_int1_config_u_t; -#else -typedef union sh_ii_int1_config_u { - mmr_t sh_ii_int1_config_regval; - struct { - mmr_t reserved_1 : 14; - mmr_t base : 29; - mmr_t reserved_0 : 1; - mmr_t pid : 16; - mmr_t agt : 1; - mmr_t type : 3; - } sh_ii_int1_config_s; -} sh_ii_int1_config_u_t; -#endif /* ==================================================================== */ /* Register "SH_II_INT1_ENABLE" */ /* SHub II Interrupt 1 Enable Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ii_int1_enable_u { mmr_t sh_ii_int1_enable_regval; struct { @@ -736,22 +419,12 @@ typedef union sh_ii_int1_enable_u { mmr_t reserved_0 : 63; } sh_ii_int1_enable_s; } sh_ii_int1_enable_u_t; -#else -typedef union sh_ii_int1_enable_u { - mmr_t sh_ii_int1_enable_regval; - struct { - mmr_t reserved_0 : 63; - mmr_t ii_enable : 1; - } sh_ii_int1_enable_s; -} sh_ii_int1_enable_u_t; -#endif /* ==================================================================== */ /* Register "SH_INT_NODE_ID_CONFIG" */ /* SHub Interrupt Node ID Configuration */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_int_node_id_config_u { mmr_t sh_int_node_id_config_regval; struct { @@ -760,23 +433,12 @@ typedef union sh_int_node_id_config_u { mmr_t reserved_0 : 52; } sh_int_node_id_config_s; } sh_int_node_id_config_u_t; -#else -typedef union sh_int_node_id_config_u { - mmr_t sh_int_node_id_config_regval; - struct { - mmr_t reserved_0 : 52; - mmr_t id_sel : 1; - mmr_t node_id : 11; - } sh_int_node_id_config_s; -} sh_int_node_id_config_u_t; -#endif /* ==================================================================== */ /* Register "SH_IPI_INT" */ /* SHub Inter-Processor Interrupt Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ipi_int_u { mmr_t sh_ipi_int_regval; struct { @@ -791,29 +453,12 @@ typedef union sh_ipi_int_u { mmr_t send : 1; } sh_ipi_int_s; } sh_ipi_int_u_t; -#else -typedef union sh_ipi_int_u { - mmr_t sh_ipi_int_regval; - struct { - mmr_t send : 1; - mmr_t reserved_2 : 3; - mmr_t idx : 8; - mmr_t reserved_1 : 2; - mmr_t base : 29; - mmr_t reserved_0 : 1; - mmr_t pid : 16; - mmr_t agt : 1; - mmr_t type : 3; - } sh_ipi_int_s; -} sh_ipi_int_u_t; -#endif /* ==================================================================== */ /* Register "SH_IPI_INT_ENABLE" */ /* SHub Inter-Processor Interrupt Enable Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ipi_int_enable_u { mmr_t sh_ipi_int_enable_regval; struct { @@ -821,22 +466,12 @@ typedef union sh_ipi_int_enable_u { mmr_t reserved_0 : 63; } sh_ipi_int_enable_s; } sh_ipi_int_enable_u_t; -#else -typedef union sh_ipi_int_enable_u { - mmr_t sh_ipi_int_enable_regval; - struct { - mmr_t reserved_0 : 63; - mmr_t pio_enable : 1; - } sh_ipi_int_enable_s; -} sh_ipi_int_enable_u_t; -#endif /* ==================================================================== */ /* Register "SH_LOCAL_INT0_CONFIG" */ /* SHub Local Interrupt 0 Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_local_int0_config_u { mmr_t sh_local_int0_config_regval; struct { @@ -850,28 +485,12 @@ typedef union sh_local_int0_config_u { mmr_t reserved_2 : 4; } sh_local_int0_config_s; } sh_local_int0_config_u_t; -#else -typedef union sh_local_int0_config_u { - mmr_t sh_local_int0_config_regval; - struct { - mmr_t reserved_2 : 4; - mmr_t idx : 8; - mmr_t reserved_1 : 2; - mmr_t base : 29; - mmr_t reserved_0 : 1; - mmr_t pid : 16; - mmr_t agt : 1; - mmr_t type : 3; - } sh_local_int0_config_s; -} sh_local_int0_config_u_t; -#endif /* ==================================================================== */ /* Register "SH_LOCAL_INT0_ENABLE" */ /* SHub Local Interrupt 0 Enable */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_local_int0_enable_u { mmr_t sh_local_int0_enable_regval; struct { @@ -894,37 +513,12 @@ typedef union sh_local_int0_enable_u { mmr_t reserved_1 : 48; } sh_local_int0_enable_s; } sh_local_int0_enable_u_t; -#else -typedef union sh_local_int0_enable_u { - mmr_t sh_local_int0_enable_regval; - struct { - mmr_t reserved_1 : 48; - mmr_t stop_clock : 1; - mmr_t l1_nmi_int : 1; - mmr_t uart_int : 1; - mmr_t system_shutdown_int : 1; - mmr_t reserved_0 : 1; - mmr_t xn_uce_int : 1; - mmr_t md_uce_int : 1; - mmr_t pi_uce_int : 1; - mmr_t xn_ce_int : 1; - mmr_t md_ce_int : 1; - mmr_t pi_ce_int : 1; - mmr_t ii_hw_int : 1; - mmr_t lb_hw_int : 1; - mmr_t xn_hw_int : 1; - mmr_t md_hw_int : 1; - mmr_t pi_hw_int : 1; - } sh_local_int0_enable_s; -} sh_local_int0_enable_u_t; -#endif /* ==================================================================== */ /* Register "SH_LOCAL_INT1_CONFIG" */ /* SHub Local Interrupt 1 Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_local_int1_config_u { mmr_t sh_local_int1_config_regval; struct { @@ -938,28 +532,12 @@ typedef union sh_local_int1_config_u { mmr_t reserved_2 : 4; } sh_local_int1_config_s; } sh_local_int1_config_u_t; -#else -typedef union sh_local_int1_config_u { - mmr_t sh_local_int1_config_regval; - struct { - mmr_t reserved_2 : 4; - mmr_t idx : 8; - mmr_t reserved_1 : 2; - mmr_t base : 29; - mmr_t reserved_0 : 1; - mmr_t pid : 16; - mmr_t agt : 1; - mmr_t type : 3; - } sh_local_int1_config_s; -} sh_local_int1_config_u_t; -#endif /* ==================================================================== */ /* Register "SH_LOCAL_INT1_ENABLE" */ /* SHub Local Interrupt 1 Enable */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_local_int1_enable_u { mmr_t sh_local_int1_enable_regval; struct { @@ -982,37 +560,12 @@ typedef union sh_local_int1_enable_u { mmr_t reserved_1 : 48; } sh_local_int1_enable_s; } sh_local_int1_enable_u_t; -#else -typedef union sh_local_int1_enable_u { - mmr_t sh_local_int1_enable_regval; - struct { - mmr_t reserved_1 : 48; - mmr_t stop_clock : 1; - mmr_t l1_nmi_int : 1; - mmr_t uart_int : 1; - mmr_t system_shutdown_int : 1; - mmr_t reserved_0 : 1; - mmr_t xn_uce_int : 1; - mmr_t md_uce_int : 1; - mmr_t pi_uce_int : 1; - mmr_t xn_ce_int : 1; - mmr_t md_ce_int : 1; - mmr_t pi_ce_int : 1; - mmr_t ii_hw_int : 1; - mmr_t lb_hw_int : 1; - mmr_t xn_hw_int : 1; - mmr_t md_hw_int : 1; - mmr_t pi_hw_int : 1; - } sh_local_int1_enable_s; -} sh_local_int1_enable_u_t; -#endif /* ==================================================================== */ /* Register "SH_LOCAL_INT2_CONFIG" */ /* SHub Local Interrupt 2 Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_local_int2_config_u { mmr_t sh_local_int2_config_regval; struct { @@ -1026,28 +579,12 @@ typedef union sh_local_int2_config_u { mmr_t reserved_2 : 4; } sh_local_int2_config_s; } sh_local_int2_config_u_t; -#else -typedef union sh_local_int2_config_u { - mmr_t sh_local_int2_config_regval; - struct { - mmr_t reserved_2 : 4; - mmr_t idx : 8; - mmr_t reserved_1 : 2; - mmr_t base : 29; - mmr_t reserved_0 : 1; - mmr_t pid : 16; - mmr_t agt : 1; - mmr_t type : 3; - } sh_local_int2_config_s; -} sh_local_int2_config_u_t; -#endif /* ==================================================================== */ /* Register "SH_LOCAL_INT2_ENABLE" */ /* SHub Local Interrupt 2 Enable */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_local_int2_enable_u { mmr_t sh_local_int2_enable_regval; struct { @@ -1070,37 +607,12 @@ typedef union sh_local_int2_enable_u { mmr_t reserved_1 : 48; } sh_local_int2_enable_s; } sh_local_int2_enable_u_t; -#else -typedef union sh_local_int2_enable_u { - mmr_t sh_local_int2_enable_regval; - struct { - mmr_t reserved_1 : 48; - mmr_t stop_clock : 1; - mmr_t l1_nmi_int : 1; - mmr_t uart_int : 1; - mmr_t system_shutdown_int : 1; - mmr_t reserved_0 : 1; - mmr_t xn_uce_int : 1; - mmr_t md_uce_int : 1; - mmr_t pi_uce_int : 1; - mmr_t xn_ce_int : 1; - mmr_t md_ce_int : 1; - mmr_t pi_ce_int : 1; - mmr_t ii_hw_int : 1; - mmr_t lb_hw_int : 1; - mmr_t xn_hw_int : 1; - mmr_t md_hw_int : 1; - mmr_t pi_hw_int : 1; - } sh_local_int2_enable_s; -} sh_local_int2_enable_u_t; -#endif /* ==================================================================== */ /* Register "SH_LOCAL_INT3_CONFIG" */ /* SHub Local Interrupt 3 Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_local_int3_config_u { mmr_t sh_local_int3_config_regval; struct { @@ -1114,28 +626,12 @@ typedef union sh_local_int3_config_u { mmr_t reserved_2 : 4; } sh_local_int3_config_s; } sh_local_int3_config_u_t; -#else -typedef union sh_local_int3_config_u { - mmr_t sh_local_int3_config_regval; - struct { - mmr_t reserved_2 : 4; - mmr_t idx : 8; - mmr_t reserved_1 : 2; - mmr_t base : 29; - mmr_t reserved_0 : 1; - mmr_t pid : 16; - mmr_t agt : 1; - mmr_t type : 3; - } sh_local_int3_config_s; -} sh_local_int3_config_u_t; -#endif /* ==================================================================== */ /* Register "SH_LOCAL_INT3_ENABLE" */ /* SHub Local Interrupt 3 Enable */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_local_int3_enable_u { mmr_t sh_local_int3_enable_regval; struct { @@ -1158,37 +654,12 @@ typedef union sh_local_int3_enable_u { mmr_t reserved_1 : 48; } sh_local_int3_enable_s; } sh_local_int3_enable_u_t; -#else -typedef union sh_local_int3_enable_u { - mmr_t sh_local_int3_enable_regval; - struct { - mmr_t reserved_1 : 48; - mmr_t stop_clock : 1; - mmr_t l1_nmi_int : 1; - mmr_t uart_int : 1; - mmr_t system_shutdown_int : 1; - mmr_t reserved_0 : 1; - mmr_t xn_uce_int : 1; - mmr_t md_uce_int : 1; - mmr_t pi_uce_int : 1; - mmr_t xn_ce_int : 1; - mmr_t md_ce_int : 1; - mmr_t pi_ce_int : 1; - mmr_t ii_hw_int : 1; - mmr_t lb_hw_int : 1; - mmr_t xn_hw_int : 1; - mmr_t md_hw_int : 1; - mmr_t pi_hw_int : 1; - } sh_local_int3_enable_s; -} sh_local_int3_enable_u_t; -#endif /* ==================================================================== */ /* Register "SH_LOCAL_INT4_CONFIG" */ /* SHub Local Interrupt 4 Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_local_int4_config_u { mmr_t sh_local_int4_config_regval; struct { @@ -1202,28 +673,12 @@ typedef union sh_local_int4_config_u { mmr_t reserved_2 : 4; } sh_local_int4_config_s; } sh_local_int4_config_u_t; -#else -typedef union sh_local_int4_config_u { - mmr_t sh_local_int4_config_regval; - struct { - mmr_t reserved_2 : 4; - mmr_t idx : 8; - mmr_t reserved_1 : 2; - mmr_t base : 29; - mmr_t reserved_0 : 1; - mmr_t pid : 16; - mmr_t agt : 1; - mmr_t type : 3; - } sh_local_int4_config_s; -} sh_local_int4_config_u_t; -#endif /* ==================================================================== */ /* Register "SH_LOCAL_INT4_ENABLE" */ /* SHub Local Interrupt 4 Enable */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_local_int4_enable_u { mmr_t sh_local_int4_enable_regval; struct { @@ -1246,37 +701,12 @@ typedef union sh_local_int4_enable_u { mmr_t reserved_1 : 48; } sh_local_int4_enable_s; } sh_local_int4_enable_u_t; -#else -typedef union sh_local_int4_enable_u { - mmr_t sh_local_int4_enable_regval; - struct { - mmr_t reserved_1 : 48; - mmr_t stop_clock : 1; - mmr_t l1_nmi_int : 1; - mmr_t uart_int : 1; - mmr_t system_shutdown_int : 1; - mmr_t reserved_0 : 1; - mmr_t xn_uce_int : 1; - mmr_t md_uce_int : 1; - mmr_t pi_uce_int : 1; - mmr_t xn_ce_int : 1; - mmr_t md_ce_int : 1; - mmr_t pi_ce_int : 1; - mmr_t ii_hw_int : 1; - mmr_t lb_hw_int : 1; - mmr_t xn_hw_int : 1; - mmr_t md_hw_int : 1; - mmr_t pi_hw_int : 1; - } sh_local_int4_enable_s; -} sh_local_int4_enable_u_t; -#endif /* ==================================================================== */ /* Register "SH_LOCAL_INT5_CONFIG" */ /* SHub Local Interrupt 5 Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_local_int5_config_u { mmr_t sh_local_int5_config_regval; struct { @@ -1290,28 +720,12 @@ typedef union sh_local_int5_config_u { mmr_t reserved_2 : 4; } sh_local_int5_config_s; } sh_local_int5_config_u_t; -#else -typedef union sh_local_int5_config_u { - mmr_t sh_local_int5_config_regval; - struct { - mmr_t reserved_2 : 4; - mmr_t idx : 8; - mmr_t reserved_1 : 2; - mmr_t base : 29; - mmr_t reserved_0 : 1; - mmr_t pid : 16; - mmr_t agt : 1; - mmr_t type : 3; - } sh_local_int5_config_s; -} sh_local_int5_config_u_t; -#endif /* ==================================================================== */ /* Register "SH_LOCAL_INT5_ENABLE" */ /* SHub Local Interrupt 5 Enable */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_local_int5_enable_u { mmr_t sh_local_int5_enable_regval; struct { @@ -1334,37 +748,12 @@ typedef union sh_local_int5_enable_u { mmr_t reserved_1 : 48; } sh_local_int5_enable_s; } sh_local_int5_enable_u_t; -#else -typedef union sh_local_int5_enable_u { - mmr_t sh_local_int5_enable_regval; - struct { - mmr_t reserved_1 : 48; - mmr_t stop_clock : 1; - mmr_t l1_nmi_int : 1; - mmr_t uart_int : 1; - mmr_t system_shutdown_int : 1; - mmr_t reserved_0 : 1; - mmr_t xn_uce_int : 1; - mmr_t md_uce_int : 1; - mmr_t pi_uce_int : 1; - mmr_t xn_ce_int : 1; - mmr_t md_ce_int : 1; - mmr_t pi_ce_int : 1; - mmr_t ii_hw_int : 1; - mmr_t lb_hw_int : 1; - mmr_t xn_hw_int : 1; - mmr_t md_hw_int : 1; - mmr_t pi_hw_int : 1; - } sh_local_int5_enable_s; -} sh_local_int5_enable_u_t; -#endif /* ==================================================================== */ /* Register "SH_PROC0_ERR_INT_CONFIG" */ /* SHub Processor 0 Error Interrupt Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_proc0_err_int_config_u { mmr_t sh_proc0_err_int_config_regval; struct { @@ -1378,28 +767,12 @@ typedef union sh_proc0_err_int_config_u mmr_t reserved_2 : 4; } sh_proc0_err_int_config_s; } sh_proc0_err_int_config_u_t; -#else -typedef union sh_proc0_err_int_config_u { - mmr_t sh_proc0_err_int_config_regval; - struct { - mmr_t reserved_2 : 4; - mmr_t idx : 8; - mmr_t reserved_1 : 2; - mmr_t base : 29; - mmr_t reserved_0 : 1; - mmr_t pid : 16; - mmr_t agt : 1; - mmr_t type : 3; - } sh_proc0_err_int_config_s; -} sh_proc0_err_int_config_u_t; -#endif /* ==================================================================== */ /* Register "SH_PROC1_ERR_INT_CONFIG" */ /* SHub Processor 1 Error Interrupt Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_proc1_err_int_config_u { mmr_t sh_proc1_err_int_config_regval; struct { @@ -1413,28 +786,12 @@ typedef union sh_proc1_err_int_config_u mmr_t reserved_2 : 4; } sh_proc1_err_int_config_s; } sh_proc1_err_int_config_u_t; -#else -typedef union sh_proc1_err_int_config_u { - mmr_t sh_proc1_err_int_config_regval; - struct { - mmr_t reserved_2 : 4; - mmr_t idx : 8; - mmr_t reserved_1 : 2; - mmr_t base : 29; - mmr_t reserved_0 : 1; - mmr_t pid : 16; - mmr_t agt : 1; - mmr_t type : 3; - } sh_proc1_err_int_config_s; -} sh_proc1_err_int_config_u_t; -#endif /* ==================================================================== */ /* Register "SH_PROC2_ERR_INT_CONFIG" */ /* SHub Processor 2 Error Interrupt Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_proc2_err_int_config_u { mmr_t sh_proc2_err_int_config_regval; struct { @@ -1448,28 +805,12 @@ typedef union sh_proc2_err_int_config_u mmr_t reserved_2 : 4; } sh_proc2_err_int_config_s; } sh_proc2_err_int_config_u_t; -#else -typedef union sh_proc2_err_int_config_u { - mmr_t sh_proc2_err_int_config_regval; - struct { - mmr_t reserved_2 : 4; - mmr_t idx : 8; - mmr_t reserved_1 : 2; - mmr_t base : 29; - mmr_t reserved_0 : 1; - mmr_t pid : 16; - mmr_t agt : 1; - mmr_t type : 3; - } sh_proc2_err_int_config_s; -} sh_proc2_err_int_config_u_t; -#endif /* ==================================================================== */ /* Register "SH_PROC3_ERR_INT_CONFIG" */ /* SHub Processor 3 Error Interrupt Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_proc3_err_int_config_u { mmr_t sh_proc3_err_int_config_regval; struct { @@ -1483,28 +824,12 @@ typedef union sh_proc3_err_int_config_u mmr_t reserved_2 : 4; } sh_proc3_err_int_config_s; } sh_proc3_err_int_config_u_t; -#else -typedef union sh_proc3_err_int_config_u { - mmr_t sh_proc3_err_int_config_regval; - struct { - mmr_t reserved_2 : 4; - mmr_t idx : 8; - mmr_t reserved_1 : 2; - mmr_t base : 29; - mmr_t reserved_0 : 1; - mmr_t pid : 16; - mmr_t agt : 1; - mmr_t type : 3; - } sh_proc3_err_int_config_s; -} sh_proc3_err_int_config_u_t; -#endif /* ==================================================================== */ /* Register "SH_PROC0_ADV_INT_CONFIG" */ /* SHub Processor 0 Advisory Interrupt Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_proc0_adv_int_config_u { mmr_t sh_proc0_adv_int_config_regval; struct { @@ -1518,28 +843,12 @@ typedef union sh_proc0_adv_int_config_u mmr_t reserved_2 : 4; } sh_proc0_adv_int_config_s; } sh_proc0_adv_int_config_u_t; -#else -typedef union sh_proc0_adv_int_config_u { - mmr_t sh_proc0_adv_int_config_regval; - struct { - mmr_t reserved_2 : 4; - mmr_t idx : 8; - mmr_t reserved_1 : 2; - mmr_t base : 29; - mmr_t reserved_0 : 1; - mmr_t pid : 16; - mmr_t agt : 1; - mmr_t type : 3; - } sh_proc0_adv_int_config_s; -} sh_proc0_adv_int_config_u_t; -#endif /* ==================================================================== */ /* Register "SH_PROC1_ADV_INT_CONFIG" */ /* SHub Processor 1 Advisory Interrupt Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_proc1_adv_int_config_u { mmr_t sh_proc1_adv_int_config_regval; struct { @@ -1553,28 +862,12 @@ typedef union sh_proc1_adv_int_config_u mmr_t reserved_2 : 4; } sh_proc1_adv_int_config_s; } sh_proc1_adv_int_config_u_t; -#else -typedef union sh_proc1_adv_int_config_u { - mmr_t sh_proc1_adv_int_config_regval; - struct { - mmr_t reserved_2 : 4; - mmr_t idx : 8; - mmr_t reserved_1 : 2; - mmr_t base : 29; - mmr_t reserved_0 : 1; - mmr_t pid : 16; - mmr_t agt : 1; - mmr_t type : 3; - } sh_proc1_adv_int_config_s; -} sh_proc1_adv_int_config_u_t; -#endif /* ==================================================================== */ /* Register "SH_PROC2_ADV_INT_CONFIG" */ /* SHub Processor 2 Advisory Interrupt Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_proc2_adv_int_config_u { mmr_t sh_proc2_adv_int_config_regval; struct { @@ -1588,28 +881,12 @@ typedef union sh_proc2_adv_int_config_u mmr_t reserved_2 : 4; } sh_proc2_adv_int_config_s; } sh_proc2_adv_int_config_u_t; -#else -typedef union sh_proc2_adv_int_config_u { - mmr_t sh_proc2_adv_int_config_regval; - struct { - mmr_t reserved_2 : 4; - mmr_t idx : 8; - mmr_t reserved_1 : 2; - mmr_t base : 29; - mmr_t reserved_0 : 1; - mmr_t pid : 16; - mmr_t agt : 1; - mmr_t type : 3; - } sh_proc2_adv_int_config_s; -} sh_proc2_adv_int_config_u_t; -#endif /* ==================================================================== */ /* Register "SH_PROC3_ADV_INT_CONFIG" */ /* SHub Processor 3 Advisory Interrupt Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_proc3_adv_int_config_u { mmr_t sh_proc3_adv_int_config_regval; struct { @@ -1623,28 +900,12 @@ typedef union sh_proc3_adv_int_config_u mmr_t reserved_2 : 4; } sh_proc3_adv_int_config_s; } sh_proc3_adv_int_config_u_t; -#else -typedef union sh_proc3_adv_int_config_u { - mmr_t sh_proc3_adv_int_config_regval; - struct { - mmr_t reserved_2 : 4; - mmr_t idx : 8; - mmr_t reserved_1 : 2; - mmr_t base : 29; - mmr_t reserved_0 : 1; - mmr_t pid : 16; - mmr_t agt : 1; - mmr_t type : 3; - } sh_proc3_adv_int_config_s; -} sh_proc3_adv_int_config_u_t; -#endif /* ==================================================================== */ /* Register "SH_PROC0_ERR_INT_ENABLE" */ /* SHub Processor 0 Error Interrupt Enable Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_proc0_err_int_enable_u { mmr_t sh_proc0_err_int_enable_regval; struct { @@ -1652,22 +913,12 @@ typedef union sh_proc0_err_int_enable_u mmr_t reserved_0 : 63; } sh_proc0_err_int_enable_s; } sh_proc0_err_int_enable_u_t; -#else -typedef union sh_proc0_err_int_enable_u { - mmr_t sh_proc0_err_int_enable_regval; - struct { - mmr_t reserved_0 : 63; - mmr_t proc0_err_enable : 1; - } sh_proc0_err_int_enable_s; -} sh_proc0_err_int_enable_u_t; -#endif /* ==================================================================== */ /* Register "SH_PROC1_ERR_INT_ENABLE" */ /* SHub Processor 1 Error Interrupt Enable Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_proc1_err_int_enable_u { mmr_t sh_proc1_err_int_enable_regval; struct { @@ -1675,22 +926,12 @@ typedef union sh_proc1_err_int_enable_u mmr_t reserved_0 : 63; } sh_proc1_err_int_enable_s; } sh_proc1_err_int_enable_u_t; -#else -typedef union sh_proc1_err_int_enable_u { - mmr_t sh_proc1_err_int_enable_regval; - struct { - mmr_t reserved_0 : 63; - mmr_t proc1_err_enable : 1; - } sh_proc1_err_int_enable_s; -} sh_proc1_err_int_enable_u_t; -#endif /* ==================================================================== */ /* Register "SH_PROC2_ERR_INT_ENABLE" */ /* SHub Processor 2 Error Interrupt Enable Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_proc2_err_int_enable_u { mmr_t sh_proc2_err_int_enable_regval; struct { @@ -1698,22 +939,12 @@ typedef union sh_proc2_err_int_enable_u mmr_t reserved_0 : 63; } sh_proc2_err_int_enable_s; } sh_proc2_err_int_enable_u_t; -#else -typedef union sh_proc2_err_int_enable_u { - mmr_t sh_proc2_err_int_enable_regval; - struct { - mmr_t reserved_0 : 63; - mmr_t proc2_err_enable : 1; - } sh_proc2_err_int_enable_s; -} sh_proc2_err_int_enable_u_t; -#endif /* ==================================================================== */ /* Register "SH_PROC3_ERR_INT_ENABLE" */ /* SHub Processor 3 Error Interrupt Enable Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_proc3_err_int_enable_u { mmr_t sh_proc3_err_int_enable_regval; struct { @@ -1721,22 +952,12 @@ typedef union sh_proc3_err_int_enable_u mmr_t reserved_0 : 63; } sh_proc3_err_int_enable_s; } sh_proc3_err_int_enable_u_t; -#else -typedef union sh_proc3_err_int_enable_u { - mmr_t sh_proc3_err_int_enable_regval; - struct { - mmr_t reserved_0 : 63; - mmr_t proc3_err_enable : 1; - } sh_proc3_err_int_enable_s; -} sh_proc3_err_int_enable_u_t; -#endif /* ==================================================================== */ /* Register "SH_PROC0_ADV_INT_ENABLE" */ /* SHub Processor 0 Advisory Interrupt Enable Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_proc0_adv_int_enable_u { mmr_t sh_proc0_adv_int_enable_regval; struct { @@ -1744,22 +965,12 @@ typedef union sh_proc0_adv_int_enable_u mmr_t reserved_0 : 63; } sh_proc0_adv_int_enable_s; } sh_proc0_adv_int_enable_u_t; -#else -typedef union sh_proc0_adv_int_enable_u { - mmr_t sh_proc0_adv_int_enable_regval; - struct { - mmr_t reserved_0 : 63; - mmr_t proc0_adv_enable : 1; - } sh_proc0_adv_int_enable_s; -} sh_proc0_adv_int_enable_u_t; -#endif /* ==================================================================== */ /* Register "SH_PROC1_ADV_INT_ENABLE" */ /* SHub Processor 1 Advisory Interrupt Enable Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_proc1_adv_int_enable_u { mmr_t sh_proc1_adv_int_enable_regval; struct { @@ -1767,22 +978,12 @@ typedef union sh_proc1_adv_int_enable_u mmr_t reserved_0 : 63; } sh_proc1_adv_int_enable_s; } sh_proc1_adv_int_enable_u_t; -#else -typedef union sh_proc1_adv_int_enable_u { - mmr_t sh_proc1_adv_int_enable_regval; - struct { - mmr_t reserved_0 : 63; - mmr_t proc1_adv_enable : 1; - } sh_proc1_adv_int_enable_s; -} sh_proc1_adv_int_enable_u_t; -#endif /* ==================================================================== */ /* Register "SH_PROC2_ADV_INT_ENABLE" */ /* SHub Processor 2 Advisory Interrupt Enable Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_proc2_adv_int_enable_u { mmr_t sh_proc2_adv_int_enable_regval; struct { @@ -1790,22 +991,12 @@ typedef union sh_proc2_adv_int_enable_u mmr_t reserved_0 : 63; } sh_proc2_adv_int_enable_s; } sh_proc2_adv_int_enable_u_t; -#else -typedef union sh_proc2_adv_int_enable_u { - mmr_t sh_proc2_adv_int_enable_regval; - struct { - mmr_t reserved_0 : 63; - mmr_t proc2_adv_enable : 1; - } sh_proc2_adv_int_enable_s; -} sh_proc2_adv_int_enable_u_t; -#endif /* ==================================================================== */ /* Register "SH_PROC3_ADV_INT_ENABLE" */ /* SHub Processor 3 Advisory Interrupt Enable Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_proc3_adv_int_enable_u { mmr_t sh_proc3_adv_int_enable_regval; struct { @@ -1813,22 +1004,12 @@ typedef union sh_proc3_adv_int_enable_u mmr_t reserved_0 : 63; } sh_proc3_adv_int_enable_s; } sh_proc3_adv_int_enable_u_t; -#else -typedef union sh_proc3_adv_int_enable_u { - mmr_t sh_proc3_adv_int_enable_regval; - struct { - mmr_t reserved_0 : 63; - mmr_t proc3_adv_enable : 1; - } sh_proc3_adv_int_enable_s; -} sh_proc3_adv_int_enable_u_t; -#endif /* ==================================================================== */ /* Register "SH_PROFILE_INT_CONFIG" */ /* SHub Profile Interrupt Configuration Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_profile_int_config_u { mmr_t sh_profile_int_config_regval; struct { @@ -1842,28 +1023,12 @@ typedef union sh_profile_int_config_u { mmr_t reserved_2 : 4; } sh_profile_int_config_s; } sh_profile_int_config_u_t; -#else -typedef union sh_profile_int_config_u { - mmr_t sh_profile_int_config_regval; - struct { - mmr_t reserved_2 : 4; - mmr_t idx : 8; - mmr_t reserved_1 : 2; - mmr_t base : 29; - mmr_t reserved_0 : 1; - mmr_t pid : 16; - mmr_t agt : 1; - mmr_t type : 3; - } sh_profile_int_config_s; -} sh_profile_int_config_u_t; -#endif /* ==================================================================== */ /* Register "SH_PROFILE_INT_ENABLE" */ /* SHub Profile Interrupt Enable Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_profile_int_enable_u { mmr_t sh_profile_int_enable_regval; struct { @@ -1871,22 +1036,12 @@ typedef union sh_profile_int_enable_u { mmr_t reserved_0 : 63; } sh_profile_int_enable_s; } sh_profile_int_enable_u_t; -#else -typedef union sh_profile_int_enable_u { - mmr_t sh_profile_int_enable_regval; - struct { - mmr_t reserved_0 : 63; - mmr_t profile_enable : 1; - } sh_profile_int_enable_s; -} sh_profile_int_enable_u_t; -#endif /* ==================================================================== */ /* Register "SH_RTC0_INT_CONFIG" */ /* SHub RTC 0 Interrupt Config Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_rtc0_int_config_u { mmr_t sh_rtc0_int_config_regval; struct { @@ -1900,28 +1055,12 @@ typedef union sh_rtc0_int_config_u { mmr_t reserved_2 : 4; } sh_rtc0_int_config_s; } sh_rtc0_int_config_u_t; -#else -typedef union sh_rtc0_int_config_u { - mmr_t sh_rtc0_int_config_regval; - struct { - mmr_t reserved_2 : 4; - mmr_t idx : 8; - mmr_t reserved_1 : 2; - mmr_t base : 29; - mmr_t reserved_0 : 1; - mmr_t pid : 16; - mmr_t agt : 1; - mmr_t type : 3; - } sh_rtc0_int_config_s; -} sh_rtc0_int_config_u_t; -#endif /* ==================================================================== */ /* Register "SH_RTC0_INT_ENABLE" */ /* SHub RTC 0 Interrupt Enable Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_rtc0_int_enable_u { mmr_t sh_rtc0_int_enable_regval; struct { @@ -1929,22 +1068,12 @@ typedef union sh_rtc0_int_enable_u { mmr_t reserved_0 : 63; } sh_rtc0_int_enable_s; } sh_rtc0_int_enable_u_t; -#else -typedef union sh_rtc0_int_enable_u { - mmr_t sh_rtc0_int_enable_regval; - struct { - mmr_t reserved_0 : 63; - mmr_t rtc0_enable : 1; - } sh_rtc0_int_enable_s; -} sh_rtc0_int_enable_u_t; -#endif /* ==================================================================== */ /* Register "SH_RTC1_INT_CONFIG" */ /* SHub RTC 1 Interrupt Config Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_rtc1_int_config_u { mmr_t sh_rtc1_int_config_regval; struct { @@ -1958,28 +1087,12 @@ typedef union sh_rtc1_int_config_u { mmr_t reserved_2 : 4; } sh_rtc1_int_config_s; } sh_rtc1_int_config_u_t; -#else -typedef union sh_rtc1_int_config_u { - mmr_t sh_rtc1_int_config_regval; - struct { - mmr_t reserved_2 : 4; - mmr_t idx : 8; - mmr_t reserved_1 : 2; - mmr_t base : 29; - mmr_t reserved_0 : 1; - mmr_t pid : 16; - mmr_t agt : 1; - mmr_t type : 3; - } sh_rtc1_int_config_s; -} sh_rtc1_int_config_u_t; -#endif /* ==================================================================== */ /* Register "SH_RTC1_INT_ENABLE" */ /* SHub RTC 1 Interrupt Enable Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_rtc1_int_enable_u { mmr_t sh_rtc1_int_enable_regval; struct { @@ -1987,22 +1100,12 @@ typedef union sh_rtc1_int_enable_u { mmr_t reserved_0 : 63; } sh_rtc1_int_enable_s; } sh_rtc1_int_enable_u_t; -#else -typedef union sh_rtc1_int_enable_u { - mmr_t sh_rtc1_int_enable_regval; - struct { - mmr_t reserved_0 : 63; - mmr_t rtc1_enable : 1; - } sh_rtc1_int_enable_s; -} sh_rtc1_int_enable_u_t; -#endif /* ==================================================================== */ /* Register "SH_RTC2_INT_CONFIG" */ /* SHub RTC 2 Interrupt Config Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_rtc2_int_config_u { mmr_t sh_rtc2_int_config_regval; struct { @@ -2016,28 +1119,12 @@ typedef union sh_rtc2_int_config_u { mmr_t reserved_2 : 4; } sh_rtc2_int_config_s; } sh_rtc2_int_config_u_t; -#else -typedef union sh_rtc2_int_config_u { - mmr_t sh_rtc2_int_config_regval; - struct { - mmr_t reserved_2 : 4; - mmr_t idx : 8; - mmr_t reserved_1 : 2; - mmr_t base : 29; - mmr_t reserved_0 : 1; - mmr_t pid : 16; - mmr_t agt : 1; - mmr_t type : 3; - } sh_rtc2_int_config_s; -} sh_rtc2_int_config_u_t; -#endif /* ==================================================================== */ /* Register "SH_RTC2_INT_ENABLE" */ /* SHub RTC 2 Interrupt Enable Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_rtc2_int_enable_u { mmr_t sh_rtc2_int_enable_regval; struct { @@ -2045,22 +1132,12 @@ typedef union sh_rtc2_int_enable_u { mmr_t reserved_0 : 63; } sh_rtc2_int_enable_s; } sh_rtc2_int_enable_u_t; -#else -typedef union sh_rtc2_int_enable_u { - mmr_t sh_rtc2_int_enable_regval; - struct { - mmr_t reserved_0 : 63; - mmr_t rtc2_enable : 1; - } sh_rtc2_int_enable_s; -} sh_rtc2_int_enable_u_t; -#endif /* ==================================================================== */ /* Register "SH_RTC3_INT_CONFIG" */ /* SHub RTC 3 Interrupt Config Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_rtc3_int_config_u { mmr_t sh_rtc3_int_config_regval; struct { @@ -2074,28 +1151,12 @@ typedef union sh_rtc3_int_config_u { mmr_t reserved_2 : 4; } sh_rtc3_int_config_s; } sh_rtc3_int_config_u_t; -#else -typedef union sh_rtc3_int_config_u { - mmr_t sh_rtc3_int_config_regval; - struct { - mmr_t reserved_2 : 4; - mmr_t idx : 8; - mmr_t reserved_1 : 2; - mmr_t base : 29; - mmr_t reserved_0 : 1; - mmr_t pid : 16; - mmr_t agt : 1; - mmr_t type : 3; - } sh_rtc3_int_config_s; -} sh_rtc3_int_config_u_t; -#endif /* ==================================================================== */ /* Register "SH_RTC3_INT_ENABLE" */ /* SHub RTC 3 Interrupt Enable Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_rtc3_int_enable_u { mmr_t sh_rtc3_int_enable_regval; struct { @@ -2103,22 +1164,12 @@ typedef union sh_rtc3_int_enable_u { mmr_t reserved_0 : 63; } sh_rtc3_int_enable_s; } sh_rtc3_int_enable_u_t; -#else -typedef union sh_rtc3_int_enable_u { - mmr_t sh_rtc3_int_enable_regval; - struct { - mmr_t reserved_0 : 63; - mmr_t rtc3_enable : 1; - } sh_rtc3_int_enable_s; -} sh_rtc3_int_enable_u_t; -#endif /* ==================================================================== */ /* Register "SH_EVENT_OCCURRED" */ /* SHub Interrupt Event Occurred */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_event_occurred_u { mmr_t sh_event_occurred_regval; struct { @@ -2156,54 +1207,14 @@ typedef union sh_event_occurred_u { mmr_t reserved_0 : 33; } sh_event_occurred_s; } sh_event_occurred_u_t; -#else -typedef union sh_event_occurred_u { - mmr_t sh_event_occurred_regval; - struct { - mmr_t reserved_0 : 33; - mmr_t ii_int1 : 1; - mmr_t ii_int0 : 1; - mmr_t ipi_int : 1; - mmr_t profile_int : 1; - mmr_t rtc3_int : 1; - mmr_t rtc2_int : 1; - mmr_t rtc1_int : 1; - mmr_t rtc0_int : 1; - mmr_t stop_clock : 1; - mmr_t l1_nmi_int : 1; - mmr_t uart_int : 1; - mmr_t system_shutdown_int : 1; - mmr_t proc3_err_int : 1; - mmr_t proc2_err_int : 1; - mmr_t proc1_err_int : 1; - mmr_t proc0_err_int : 1; - mmr_t proc3_adv_int : 1; - mmr_t proc2_adv_int : 1; - mmr_t proc1_adv_int : 1; - mmr_t proc0_adv_int : 1; - mmr_t xn_uce_int : 1; - mmr_t md_uce_int : 1; - mmr_t pi_uce_int : 1; - mmr_t xn_ce_int : 1; - mmr_t md_ce_int : 1; - mmr_t pi_ce_int : 1; - mmr_t ii_hw_int : 1; - mmr_t lb_hw_int : 1; - mmr_t xn_hw_int : 1; - mmr_t md_hw_int : 1; - mmr_t pi_hw_int : 1; - } sh_event_occurred_s; -} sh_event_occurred_u_t; -#endif - -/* ==================================================================== */ -/* Register "SH_EVENT_OVERFLOW" */ -/* SHub Interrupt Event Occurred Overflow */ -/* ==================================================================== */ - -#ifdef LITTLE_ENDIAN -typedef union sh_event_overflow_u { - mmr_t sh_event_overflow_regval; + +/* ==================================================================== */ +/* Register "SH_EVENT_OVERFLOW" */ +/* SHub Interrupt Event Occurred Overflow */ +/* ==================================================================== */ + +typedef union sh_event_overflow_u { + mmr_t sh_event_overflow_regval; struct { mmr_t pi_hw_int : 1; mmr_t md_hw_int : 1; @@ -2236,49 +1247,12 @@ typedef union sh_event_overflow_u { mmr_t reserved_0 : 36; } sh_event_overflow_s; } sh_event_overflow_u_t; -#else -typedef union sh_event_overflow_u { - mmr_t sh_event_overflow_regval; - struct { - mmr_t reserved_0 : 36; - mmr_t profile_int : 1; - mmr_t rtc3_int : 1; - mmr_t rtc2_int : 1; - mmr_t rtc1_int : 1; - mmr_t rtc0_int : 1; - mmr_t stop_clock : 1; - mmr_t l1_nmi_int : 1; - mmr_t uart_int : 1; - mmr_t system_shutdown_int : 1; - mmr_t proc3_err_int : 1; - mmr_t proc2_err_int : 1; - mmr_t proc1_err_int : 1; - mmr_t proc0_err_int : 1; - mmr_t proc3_adv_int : 1; - mmr_t proc2_adv_int : 1; - mmr_t proc1_adv_int : 1; - mmr_t proc0_adv_int : 1; - mmr_t xn_uce_int : 1; - mmr_t md_uce_int : 1; - mmr_t pi_uce_int : 1; - mmr_t xn_ce_int : 1; - mmr_t md_ce_int : 1; - mmr_t pi_ce_int : 1; - mmr_t ii_hw_int : 1; - mmr_t lb_hw_int : 1; - mmr_t xn_hw_int : 1; - mmr_t md_hw_int : 1; - mmr_t pi_hw_int : 1; - } sh_event_overflow_s; -} sh_event_overflow_u_t; -#endif /* ==================================================================== */ /* Register "SH_JUNK_BUS_TIME" */ /* Junk Bus Timing */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_junk_bus_time_u { mmr_t sh_junk_bus_time_regval; struct { @@ -2289,25 +1263,12 @@ typedef union sh_junk_bus_time_u { mmr_t reserved_0 : 32; } sh_junk_bus_time_s; } sh_junk_bus_time_u_t; -#else -typedef union sh_junk_bus_time_u { - mmr_t sh_junk_bus_time_regval; - struct { - mmr_t reserved_0 : 32; - mmr_t uart_enable : 8; - mmr_t uart_setup_hold : 8; - mmr_t fprom_enable : 8; - mmr_t fprom_setup_hold : 8; - } sh_junk_bus_time_s; -} sh_junk_bus_time_u_t; -#endif /* ==================================================================== */ /* Register "SH_JUNK_LATCH_TIME" */ /* Junk Bus Latch Timing */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_junk_latch_time_u { mmr_t sh_junk_latch_time_regval; struct { @@ -2315,22 +1276,12 @@ typedef union sh_junk_latch_time_u { mmr_t reserved_0 : 61; } sh_junk_latch_time_s; } sh_junk_latch_time_u_t; -#else -typedef union sh_junk_latch_time_u { - mmr_t sh_junk_latch_time_regval; - struct { - mmr_t reserved_0 : 61; - mmr_t setup_hold : 3; - } sh_junk_latch_time_s; -} sh_junk_latch_time_u_t; -#endif /* ==================================================================== */ /* Register "SH_JUNK_NACK_RESET" */ /* Junk Bus Nack Counter Reset */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_junk_nack_reset_u { mmr_t sh_junk_nack_reset_regval; struct { @@ -2338,22 +1289,12 @@ typedef union sh_junk_nack_reset_u { mmr_t reserved_0 : 63; } sh_junk_nack_reset_s; } sh_junk_nack_reset_u_t; -#else -typedef union sh_junk_nack_reset_u { - mmr_t sh_junk_nack_reset_regval; - struct { - mmr_t reserved_0 : 63; - mmr_t pulse : 1; - } sh_junk_nack_reset_s; -} sh_junk_nack_reset_u_t; -#endif /* ==================================================================== */ /* Register "SH_JUNK_BUS_LED0" */ /* Junk Bus LED0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_junk_bus_led0_u { mmr_t sh_junk_bus_led0_regval; struct { @@ -2361,22 +1302,12 @@ typedef union sh_junk_bus_led0_u { mmr_t reserved_0 : 56; } sh_junk_bus_led0_s; } sh_junk_bus_led0_u_t; -#else -typedef union sh_junk_bus_led0_u { - mmr_t sh_junk_bus_led0_regval; - struct { - mmr_t reserved_0 : 56; - mmr_t led0_data : 8; - } sh_junk_bus_led0_s; -} sh_junk_bus_led0_u_t; -#endif /* ==================================================================== */ /* Register "SH_JUNK_BUS_LED1" */ /* Junk Bus LED1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_junk_bus_led1_u { mmr_t sh_junk_bus_led1_regval; struct { @@ -2384,22 +1315,12 @@ typedef union sh_junk_bus_led1_u { mmr_t reserved_0 : 56; } sh_junk_bus_led1_s; } sh_junk_bus_led1_u_t; -#else -typedef union sh_junk_bus_led1_u { - mmr_t sh_junk_bus_led1_regval; - struct { - mmr_t reserved_0 : 56; - mmr_t led1_data : 8; - } sh_junk_bus_led1_s; -} sh_junk_bus_led1_u_t; -#endif /* ==================================================================== */ /* Register "SH_JUNK_BUS_LED2" */ /* Junk Bus LED2 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_junk_bus_led2_u { mmr_t sh_junk_bus_led2_regval; struct { @@ -2407,22 +1328,12 @@ typedef union sh_junk_bus_led2_u { mmr_t reserved_0 : 56; } sh_junk_bus_led2_s; } sh_junk_bus_led2_u_t; -#else -typedef union sh_junk_bus_led2_u { - mmr_t sh_junk_bus_led2_regval; - struct { - mmr_t reserved_0 : 56; - mmr_t led2_data : 8; - } sh_junk_bus_led2_s; -} sh_junk_bus_led2_u_t; -#endif /* ==================================================================== */ /* Register "SH_JUNK_BUS_LED3" */ /* Junk Bus LED3 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_junk_bus_led3_u { mmr_t sh_junk_bus_led3_regval; struct { @@ -2430,22 +1341,12 @@ typedef union sh_junk_bus_led3_u { mmr_t reserved_0 : 56; } sh_junk_bus_led3_s; } sh_junk_bus_led3_u_t; -#else -typedef union sh_junk_bus_led3_u { - mmr_t sh_junk_bus_led3_regval; - struct { - mmr_t reserved_0 : 56; - mmr_t led3_data : 8; - } sh_junk_bus_led3_s; -} sh_junk_bus_led3_u_t; -#endif /* ==================================================================== */ /* Register "SH_JUNK_ERROR_STATUS" */ /* Junk Bus Error Status */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_junk_error_status_u { mmr_t sh_junk_error_status_regval; struct { @@ -2457,26 +1358,12 @@ typedef union sh_junk_error_status_u { mmr_t reserved_1 : 3; } sh_junk_error_status_s; } sh_junk_error_status_u_t; -#else -typedef union sh_junk_error_status_u { - mmr_t sh_junk_error_status_regval; - struct { - mmr_t reserved_1 : 3; - mmr_t status : 4; - mmr_t mode : 1; - mmr_t cmd : 8; - mmr_t reserved_0 : 1; - mmr_t address : 47; - } sh_junk_error_status_s; -} sh_junk_error_status_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI0_LLP_STAT" */ /* This register describes the LLP status. */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ni0_llp_stat_u { mmr_t sh_ni0_llp_stat_regval; struct { @@ -2484,22 +1371,12 @@ typedef union sh_ni0_llp_stat_u { mmr_t reserved_0 : 60; } sh_ni0_llp_stat_s; } sh_ni0_llp_stat_u_t; -#else -typedef union sh_ni0_llp_stat_u { - mmr_t sh_ni0_llp_stat_regval; - struct { - mmr_t reserved_0 : 60; - mmr_t link_reset_state : 4; - } sh_ni0_llp_stat_s; -} sh_ni0_llp_stat_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI0_LLP_RESET" */ /* Writing issues a reset to the network interface */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ni0_llp_reset_u { mmr_t sh_ni0_llp_reset_regval; struct { @@ -2508,23 +1385,12 @@ typedef union sh_ni0_llp_reset_u { mmr_t reserved_0 : 62; } sh_ni0_llp_reset_s; } sh_ni0_llp_reset_u_t; -#else -typedef union sh_ni0_llp_reset_u { - mmr_t sh_ni0_llp_reset_regval; - struct { - mmr_t reserved_0 : 62; - mmr_t warm : 1; - mmr_t link : 1; - } sh_ni0_llp_reset_s; -} sh_ni0_llp_reset_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI0_LLP_RESET_EN" */ /* Controls LLP warm reset propagation */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ni0_llp_reset_en_u { mmr_t sh_ni0_llp_reset_en_regval; struct { @@ -2532,22 +1398,12 @@ typedef union sh_ni0_llp_reset_en_u { mmr_t reserved_0 : 63; } sh_ni0_llp_reset_en_s; } sh_ni0_llp_reset_en_u_t; -#else -typedef union sh_ni0_llp_reset_en_u { - mmr_t sh_ni0_llp_reset_en_regval; - struct { - mmr_t reserved_0 : 63; - mmr_t ok : 1; - } sh_ni0_llp_reset_en_s; -} sh_ni0_llp_reset_en_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI0_LLP_CHAN_MODE" */ /* Sets the signaling mode of LLP and channel */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ni0_llp_chan_mode_u { mmr_t sh_ni0_llp_chan_mode_regval; struct { @@ -2559,26 +1415,12 @@ typedef union sh_ni0_llp_chan_mode_u { mmr_t reserved_0 : 59; } sh_ni0_llp_chan_mode_s; } sh_ni0_llp_chan_mode_u_t; -#else -typedef union sh_ni0_llp_chan_mode_u { - mmr_t sh_ni0_llp_chan_mode_regval; - struct { - mmr_t reserved_0 : 59; - mmr_t enable_clkquad : 1; - mmr_t enable_rmt_ft_upd : 1; - mmr_t enable_tuning : 1; - mmr_t ac_encode : 1; - mmr_t bitmode32 : 1; - } sh_ni0_llp_chan_mode_s; -} sh_ni0_llp_chan_mode_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI0_LLP_CONFIG" */ /* Sets the configuration of LLP and channel */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ni0_llp_config_u { mmr_t sh_ni0_llp_config_regval; struct { @@ -2589,24 +1431,11 @@ typedef union sh_ni0_llp_config_u { mmr_t reserved_0 : 26; } sh_ni0_llp_config_s; } sh_ni0_llp_config_u_t; -#else -typedef union sh_ni0_llp_config_u { - mmr_t sh_ni0_llp_config_regval; - struct { - mmr_t reserved_0 : 26; - mmr_t ftu_time : 12; - mmr_t nulltimeout : 6; - mmr_t maxretry : 10; - mmr_t maxburst : 10; - } sh_ni0_llp_config_s; -} sh_ni0_llp_config_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI0_LLP_TEST_CTL" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ni0_llp_test_ctl_u { mmr_t sh_ni0_llp_test_ctl_regval; struct { @@ -2627,77 +1456,36 @@ typedef union sh_ni0_llp_test_ctl_u { mmr_t reserved_2 : 1; } sh_ni0_llp_test_ctl_s; } sh_ni0_llp_test_ctl_u_t; -#else -typedef union sh_ni0_llp_test_ctl_u { - mmr_t sh_ni0_llp_test_ctl_regval; - struct { - mmr_t reserved_2 : 1; - mmr_t cberror : 1; - mmr_t captured : 1; - mmr_t fakesnerror : 1; - mmr_t sendsnerror : 1; - mmr_t sendcberror : 1; - mmr_t capturecbonly : 1; - mmr_t armcapture : 1; - mmr_t noise_mode : 2; - mmr_t lfsr_mode : 2; - mmr_t reserved_1 : 2; - mmr_t wire_sel : 6; - mmr_t reserved_0 : 2; - mmr_t send_test_mode : 2; - mmr_t pattern : 40; - } sh_ni0_llp_test_ctl_s; -} sh_ni0_llp_test_ctl_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI0_LLP_CAPT_WD1" */ /* low order 64-bit captured word */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_ni0_llp_capt_wd1_u { - mmr_t sh_ni0_llp_capt_wd1_regval; - struct { - mmr_t data : 64; - } sh_ni0_llp_capt_wd1_s; -} sh_ni0_llp_capt_wd1_u_t; -#else typedef union sh_ni0_llp_capt_wd1_u { mmr_t sh_ni0_llp_capt_wd1_regval; struct { mmr_t data : 64; } sh_ni0_llp_capt_wd1_s; } sh_ni0_llp_capt_wd1_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI0_LLP_CAPT_WD2" */ /* high order 64-bit captured word */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ni0_llp_capt_wd2_u { mmr_t sh_ni0_llp_capt_wd2_regval; struct { mmr_t data : 64; } sh_ni0_llp_capt_wd2_s; } sh_ni0_llp_capt_wd2_u_t; -#else -typedef union sh_ni0_llp_capt_wd2_u { - mmr_t sh_ni0_llp_capt_wd2_regval; - struct { - mmr_t data : 64; - } sh_ni0_llp_capt_wd2_s; -} sh_ni0_llp_capt_wd2_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI0_LLP_CAPT_SBCB" */ /* captured sideband, sequence, and CRC */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ni0_llp_capt_sbcb_u { mmr_t sh_ni0_llp_capt_sbcb_regval; struct { @@ -2711,27 +1499,11 @@ typedef union sh_ni0_llp_capt_sbcb_u { mmr_t reserved_0 : 27; } sh_ni0_llp_capt_sbcb_s; } sh_ni0_llp_capt_sbcb_u_t; -#else -typedef union sh_ni0_llp_capt_sbcb_u { - mmr_t sh_ni0_llp_capt_sbcb_regval; - struct { - mmr_t reserved_0 : 27; - mmr_t chargeunderflow : 1; - mmr_t chargeoverflow : 1; - mmr_t fakedallsnerrors : 1; - mmr_t sentallsnerrors : 1; - mmr_t sentallcberrors : 1; - mmr_t capturedrcvcrc : 16; - mmr_t capturedrcvsbsn : 16; - } sh_ni0_llp_capt_sbcb_s; -} sh_ni0_llp_capt_sbcb_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI0_LLP_ERR" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ni0_llp_err_u { mmr_t sh_ni0_llp_err_regval; struct { @@ -2747,30 +1519,12 @@ typedef union sh_ni0_llp_err_u { mmr_t reserved_0 : 11; } sh_ni0_llp_err_s; } sh_ni0_llp_err_u_t; -#else -typedef union sh_ni0_llp_err_u { - mmr_t sh_ni0_llp_err_regval; - struct { - mmr_t reserved_0 : 11; - mmr_t wire_overflow : 1; - mmr_t wire_cnt : 24; - mmr_t power_not_ok : 1; - mmr_t squash : 1; - mmr_t rcv_link_reset : 1; - mmr_t retry_timeout : 1; - mmr_t retry_count : 8; - mmr_t rx_cb_err_count : 8; - mmr_t rx_sn_err_count : 8; - } sh_ni0_llp_err_s; -} sh_ni0_llp_err_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI1_LLP_STAT" */ /* This register describes the LLP status. */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ni1_llp_stat_u { mmr_t sh_ni1_llp_stat_regval; struct { @@ -2778,22 +1532,12 @@ typedef union sh_ni1_llp_stat_u { mmr_t reserved_0 : 60; } sh_ni1_llp_stat_s; } sh_ni1_llp_stat_u_t; -#else -typedef union sh_ni1_llp_stat_u { - mmr_t sh_ni1_llp_stat_regval; - struct { - mmr_t reserved_0 : 60; - mmr_t link_reset_state : 4; - } sh_ni1_llp_stat_s; -} sh_ni1_llp_stat_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI1_LLP_RESET" */ /* Writing issues a reset to the network interface */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ni1_llp_reset_u { mmr_t sh_ni1_llp_reset_regval; struct { @@ -2802,23 +1546,12 @@ typedef union sh_ni1_llp_reset_u { mmr_t reserved_0 : 62; } sh_ni1_llp_reset_s; } sh_ni1_llp_reset_u_t; -#else -typedef union sh_ni1_llp_reset_u { - mmr_t sh_ni1_llp_reset_regval; - struct { - mmr_t reserved_0 : 62; - mmr_t warm : 1; - mmr_t link : 1; - } sh_ni1_llp_reset_s; -} sh_ni1_llp_reset_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI1_LLP_RESET_EN" */ /* Controls LLP warm reset propagation */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ni1_llp_reset_en_u { mmr_t sh_ni1_llp_reset_en_regval; struct { @@ -2826,22 +1559,12 @@ typedef union sh_ni1_llp_reset_en_u { mmr_t reserved_0 : 63; } sh_ni1_llp_reset_en_s; } sh_ni1_llp_reset_en_u_t; -#else -typedef union sh_ni1_llp_reset_en_u { - mmr_t sh_ni1_llp_reset_en_regval; - struct { - mmr_t reserved_0 : 63; - mmr_t ok : 1; - } sh_ni1_llp_reset_en_s; -} sh_ni1_llp_reset_en_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI1_LLP_CHAN_MODE" */ /* Sets the signaling mode of LLP and channel */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ni1_llp_chan_mode_u { mmr_t sh_ni1_llp_chan_mode_regval; struct { @@ -2853,26 +1576,12 @@ typedef union sh_ni1_llp_chan_mode_u { mmr_t reserved_0 : 59; } sh_ni1_llp_chan_mode_s; } sh_ni1_llp_chan_mode_u_t; -#else -typedef union sh_ni1_llp_chan_mode_u { - mmr_t sh_ni1_llp_chan_mode_regval; - struct { - mmr_t reserved_0 : 59; - mmr_t enable_clkquad : 1; - mmr_t enable_rmt_ft_upd : 1; - mmr_t enable_tuning : 1; - mmr_t ac_encode : 1; - mmr_t bitmode32 : 1; - } sh_ni1_llp_chan_mode_s; -} sh_ni1_llp_chan_mode_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI1_LLP_CONFIG" */ /* Sets the configuration of LLP and channel */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ni1_llp_config_u { mmr_t sh_ni1_llp_config_regval; struct { @@ -2883,24 +1592,11 @@ typedef union sh_ni1_llp_config_u { mmr_t reserved_0 : 26; } sh_ni1_llp_config_s; } sh_ni1_llp_config_u_t; -#else -typedef union sh_ni1_llp_config_u { - mmr_t sh_ni1_llp_config_regval; - struct { - mmr_t reserved_0 : 26; - mmr_t ftu_time : 12; - mmr_t nulltimeout : 6; - mmr_t maxretry : 10; - mmr_t maxburst : 10; - } sh_ni1_llp_config_s; -} sh_ni1_llp_config_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI1_LLP_TEST_CTL" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ni1_llp_test_ctl_u { mmr_t sh_ni1_llp_test_ctl_regval; struct { @@ -2921,77 +1617,36 @@ typedef union sh_ni1_llp_test_ctl_u { mmr_t reserved_2 : 1; } sh_ni1_llp_test_ctl_s; } sh_ni1_llp_test_ctl_u_t; -#else -typedef union sh_ni1_llp_test_ctl_u { - mmr_t sh_ni1_llp_test_ctl_regval; - struct { - mmr_t reserved_2 : 1; - mmr_t cberror : 1; - mmr_t captured : 1; - mmr_t fakesnerror : 1; - mmr_t sendsnerror : 1; - mmr_t sendcberror : 1; - mmr_t capturecbonly : 1; - mmr_t armcapture : 1; - mmr_t noise_mode : 2; - mmr_t lfsr_mode : 2; - mmr_t reserved_1 : 2; - mmr_t wire_sel : 6; - mmr_t reserved_0 : 2; - mmr_t send_test_mode : 2; - mmr_t pattern : 40; - } sh_ni1_llp_test_ctl_s; -} sh_ni1_llp_test_ctl_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI1_LLP_CAPT_WD1" */ /* low order 64-bit captured word */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_ni1_llp_capt_wd1_u { - mmr_t sh_ni1_llp_capt_wd1_regval; - struct { - mmr_t data : 64; - } sh_ni1_llp_capt_wd1_s; -} sh_ni1_llp_capt_wd1_u_t; -#else typedef union sh_ni1_llp_capt_wd1_u { mmr_t sh_ni1_llp_capt_wd1_regval; struct { mmr_t data : 64; } sh_ni1_llp_capt_wd1_s; } sh_ni1_llp_capt_wd1_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI1_LLP_CAPT_WD2" */ /* high order 64-bit captured word */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_ni1_llp_capt_wd2_u { - mmr_t sh_ni1_llp_capt_wd2_regval; - struct { - mmr_t data : 64; - } sh_ni1_llp_capt_wd2_s; -} sh_ni1_llp_capt_wd2_u_t; -#else typedef union sh_ni1_llp_capt_wd2_u { mmr_t sh_ni1_llp_capt_wd2_regval; struct { mmr_t data : 64; } sh_ni1_llp_capt_wd2_s; } sh_ni1_llp_capt_wd2_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI1_LLP_CAPT_SBCB" */ /* captured sideband, sequence, and CRC */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ni1_llp_capt_sbcb_u { mmr_t sh_ni1_llp_capt_sbcb_regval; struct { @@ -3005,27 +1660,11 @@ typedef union sh_ni1_llp_capt_sbcb_u { mmr_t reserved_0 : 27; } sh_ni1_llp_capt_sbcb_s; } sh_ni1_llp_capt_sbcb_u_t; -#else -typedef union sh_ni1_llp_capt_sbcb_u { - mmr_t sh_ni1_llp_capt_sbcb_regval; - struct { - mmr_t reserved_0 : 27; - mmr_t chargeunderflow : 1; - mmr_t chargeoverflow : 1; - mmr_t fakedallsnerrors : 1; - mmr_t sentallsnerrors : 1; - mmr_t sentallcberrors : 1; - mmr_t capturedrcvcrc : 16; - mmr_t capturedrcvsbsn : 16; - } sh_ni1_llp_capt_sbcb_s; -} sh_ni1_llp_capt_sbcb_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI1_LLP_ERR" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ni1_llp_err_u { mmr_t sh_ni1_llp_err_regval; struct { @@ -3041,29 +1680,11 @@ typedef union sh_ni1_llp_err_u { mmr_t reserved_0 : 11; } sh_ni1_llp_err_s; } sh_ni1_llp_err_u_t; -#else -typedef union sh_ni1_llp_err_u { - mmr_t sh_ni1_llp_err_regval; - struct { - mmr_t reserved_0 : 11; - mmr_t wire_overflow : 1; - mmr_t wire_cnt : 24; - mmr_t power_not_ok : 1; - mmr_t squash : 1; - mmr_t rcv_link_reset : 1; - mmr_t retry_timeout : 1; - mmr_t retry_count : 8; - mmr_t rx_cb_err_count : 8; - mmr_t rx_sn_err_count : 8; - } sh_ni1_llp_err_s; -} sh_ni1_llp_err_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI0_LLP_TO_FIFO02_FLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni0_llp_to_fifo02_flow_u { mmr_t sh_xnni0_llp_to_fifo02_flow_regval; struct { @@ -3084,34 +1705,11 @@ typedef union sh_xnni0_llp_to_fifo02_flo mmr_t reserved_6 : 2; } sh_xnni0_llp_to_fifo02_flow_s; } sh_xnni0_llp_to_fifo02_flow_u_t; -#else -typedef union sh_xnni0_llp_to_fifo02_flow_u { - mmr_t sh_xnni0_llp_to_fifo02_flow_regval; - struct { - mmr_t reserved_6 : 2; - mmr_t credit_vc2_cap : 6; - mmr_t reserved_5 : 2; - mmr_t credit_vc2_dyn : 6; - mmr_t reserved_4 : 10; - mmr_t credit_vc0_cap : 6; - mmr_t reserved_3 : 2; - mmr_t credit_vc0_dyn : 6; - mmr_t reserved_2 : 8; - mmr_t debit_vc2_force_cred : 1; - mmr_t reserved_1 : 1; - mmr_t debit_vc2_withhold : 6; - mmr_t debit_vc0_force_cred : 1; - mmr_t reserved_0 : 1; - mmr_t debit_vc0_withhold : 6; - } sh_xnni0_llp_to_fifo02_flow_s; -} sh_xnni0_llp_to_fifo02_flow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI0_LLP_TO_FIFO13_FLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni0_llp_to_fifo13_flow_u { mmr_t sh_xnni0_llp_to_fifo13_flow_regval; struct { @@ -3132,34 +1730,11 @@ typedef union sh_xnni0_llp_to_fifo13_flo mmr_t reserved_6 : 2; } sh_xnni0_llp_to_fifo13_flow_s; } sh_xnni0_llp_to_fifo13_flow_u_t; -#else -typedef union sh_xnni0_llp_to_fifo13_flow_u { - mmr_t sh_xnni0_llp_to_fifo13_flow_regval; - struct { - mmr_t reserved_6 : 2; - mmr_t credit_vc2_cap : 6; - mmr_t reserved_5 : 2; - mmr_t credit_vc2_dyn : 6; - mmr_t reserved_4 : 10; - mmr_t credit_vc0_cap : 6; - mmr_t reserved_3 : 2; - mmr_t credit_vc0_dyn : 6; - mmr_t reserved_2 : 8; - mmr_t debit_vc2_force_cred : 1; - mmr_t reserved_1 : 1; - mmr_t debit_vc2_withhold : 6; - mmr_t debit_vc0_force_cred : 1; - mmr_t reserved_0 : 1; - mmr_t debit_vc0_withhold : 6; - } sh_xnni0_llp_to_fifo13_flow_s; -} sh_xnni0_llp_to_fifo13_flow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI0_LLP_DEBIT_FLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni0_llp_debit_flow_u { mmr_t sh_xnni0_llp_debit_flow_regval; struct { @@ -3181,35 +1756,11 @@ typedef union sh_xnni0_llp_debit_flow_u mmr_t reserved_7 : 3; } sh_xnni0_llp_debit_flow_s; } sh_xnni0_llp_debit_flow_u_t; -#else -typedef union sh_xnni0_llp_debit_flow_u { - mmr_t sh_xnni0_llp_debit_flow_regval; - struct { - mmr_t reserved_7 : 3; - mmr_t debit_vc3_cap : 5; - mmr_t reserved_6 : 3; - mmr_t debit_vc3_dyn : 5; - mmr_t reserved_5 : 3; - mmr_t debit_vc2_cap : 5; - mmr_t reserved_4 : 3; - mmr_t debit_vc2_dyn : 5; - mmr_t reserved_3 : 3; - mmr_t debit_vc1_cap : 5; - mmr_t reserved_2 : 3; - mmr_t debit_vc1_dyn : 5; - mmr_t reserved_1 : 3; - mmr_t debit_vc0_cap : 5; - mmr_t reserved_0 : 3; - mmr_t debit_vc0_dyn : 5; - } sh_xnni0_llp_debit_flow_s; -} sh_xnni0_llp_debit_flow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI0_LINK_0_FLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni0_link_0_flow_u { mmr_t sh_xnni0_link_0_flow_regval; struct { @@ -3224,28 +1775,11 @@ typedef union sh_xnni0_link_0_flow_u { mmr_t reserved_3 : 33; } sh_xnni0_link_0_flow_s; } sh_xnni0_link_0_flow_u_t; -#else -typedef union sh_xnni0_link_0_flow_u { - mmr_t sh_xnni0_link_0_flow_regval; - struct { - mmr_t reserved_3 : 33; - mmr_t credit_vc0_cap : 7; - mmr_t reserved_2 : 1; - mmr_t credit_vc0_dyn : 7; - mmr_t reserved_1 : 1; - mmr_t credit_vc0_test : 7; - mmr_t debit_vc0_force_cred : 1; - mmr_t reserved_0 : 1; - mmr_t debit_vc0_withhold : 6; - } sh_xnni0_link_0_flow_s; -} sh_xnni0_link_0_flow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI0_LINK_1_FLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni0_link_1_flow_u { mmr_t sh_xnni0_link_1_flow_regval; struct { @@ -3260,28 +1794,11 @@ typedef union sh_xnni0_link_1_flow_u { mmr_t reserved_3 : 33; } sh_xnni0_link_1_flow_s; } sh_xnni0_link_1_flow_u_t; -#else -typedef union sh_xnni0_link_1_flow_u { - mmr_t sh_xnni0_link_1_flow_regval; - struct { - mmr_t reserved_3 : 33; - mmr_t credit_vc1_cap : 7; - mmr_t reserved_2 : 1; - mmr_t credit_vc1_dyn : 7; - mmr_t reserved_1 : 1; - mmr_t credit_vc1_test : 7; - mmr_t debit_vc1_force_cred : 1; - mmr_t reserved_0 : 1; - mmr_t debit_vc1_withhold : 6; - } sh_xnni0_link_1_flow_s; -} sh_xnni0_link_1_flow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI0_LINK_2_FLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni0_link_2_flow_u { mmr_t sh_xnni0_link_2_flow_regval; struct { @@ -3296,28 +1813,11 @@ typedef union sh_xnni0_link_2_flow_u { mmr_t reserved_3 : 33; } sh_xnni0_link_2_flow_s; } sh_xnni0_link_2_flow_u_t; -#else -typedef union sh_xnni0_link_2_flow_u { - mmr_t sh_xnni0_link_2_flow_regval; - struct { - mmr_t reserved_3 : 33; - mmr_t credit_vc2_cap : 7; - mmr_t reserved_2 : 1; - mmr_t credit_vc2_dyn : 7; - mmr_t reserved_1 : 1; - mmr_t credit_vc2_test : 7; - mmr_t debit_vc2_force_cred : 1; - mmr_t reserved_0 : 1; - mmr_t debit_vc2_withhold : 6; - } sh_xnni0_link_2_flow_s; -} sh_xnni0_link_2_flow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI0_LINK_3_FLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni0_link_3_flow_u { mmr_t sh_xnni0_link_3_flow_regval; struct { @@ -3332,28 +1832,11 @@ typedef union sh_xnni0_link_3_flow_u { mmr_t reserved_3 : 33; } sh_xnni0_link_3_flow_s; } sh_xnni0_link_3_flow_u_t; -#else -typedef union sh_xnni0_link_3_flow_u { - mmr_t sh_xnni0_link_3_flow_regval; - struct { - mmr_t reserved_3 : 33; - mmr_t credit_vc3_cap : 7; - mmr_t reserved_2 : 1; - mmr_t credit_vc3_dyn : 7; - mmr_t reserved_1 : 1; - mmr_t credit_vc3_test : 7; - mmr_t debit_vc3_force_cred : 1; - mmr_t reserved_0 : 1; - mmr_t debit_vc3_withhold : 6; - } sh_xnni0_link_3_flow_s; -} sh_xnni0_link_3_flow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI1_LLP_TO_FIFO02_FLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni1_llp_to_fifo02_flow_u { mmr_t sh_xnni1_llp_to_fifo02_flow_regval; struct { @@ -3374,34 +1857,11 @@ typedef union sh_xnni1_llp_to_fifo02_flo mmr_t reserved_6 : 2; } sh_xnni1_llp_to_fifo02_flow_s; } sh_xnni1_llp_to_fifo02_flow_u_t; -#else -typedef union sh_xnni1_llp_to_fifo02_flow_u { - mmr_t sh_xnni1_llp_to_fifo02_flow_regval; - struct { - mmr_t reserved_6 : 2; - mmr_t credit_vc2_cap : 6; - mmr_t reserved_5 : 2; - mmr_t credit_vc2_dyn : 6; - mmr_t reserved_4 : 10; - mmr_t credit_vc0_cap : 6; - mmr_t reserved_3 : 2; - mmr_t credit_vc0_dyn : 6; - mmr_t reserved_2 : 8; - mmr_t debit_vc2_force_cred : 1; - mmr_t reserved_1 : 1; - mmr_t debit_vc2_withhold : 6; - mmr_t debit_vc0_force_cred : 1; - mmr_t reserved_0 : 1; - mmr_t debit_vc0_withhold : 6; - } sh_xnni1_llp_to_fifo02_flow_s; -} sh_xnni1_llp_to_fifo02_flow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI1_LLP_TO_FIFO13_FLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni1_llp_to_fifo13_flow_u { mmr_t sh_xnni1_llp_to_fifo13_flow_regval; struct { @@ -3422,34 +1882,11 @@ typedef union sh_xnni1_llp_to_fifo13_flo mmr_t reserved_6 : 2; } sh_xnni1_llp_to_fifo13_flow_s; } sh_xnni1_llp_to_fifo13_flow_u_t; -#else -typedef union sh_xnni1_llp_to_fifo13_flow_u { - mmr_t sh_xnni1_llp_to_fifo13_flow_regval; - struct { - mmr_t reserved_6 : 2; - mmr_t credit_vc2_cap : 6; - mmr_t reserved_5 : 2; - mmr_t credit_vc2_dyn : 6; - mmr_t reserved_4 : 10; - mmr_t credit_vc0_cap : 6; - mmr_t reserved_3 : 2; - mmr_t credit_vc0_dyn : 6; - mmr_t reserved_2 : 8; - mmr_t debit_vc2_force_cred : 1; - mmr_t reserved_1 : 1; - mmr_t debit_vc2_withhold : 6; - mmr_t debit_vc0_force_cred : 1; - mmr_t reserved_0 : 1; - mmr_t debit_vc0_withhold : 6; - } sh_xnni1_llp_to_fifo13_flow_s; -} sh_xnni1_llp_to_fifo13_flow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI1_LLP_DEBIT_FLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni1_llp_debit_flow_u { mmr_t sh_xnni1_llp_debit_flow_regval; struct { @@ -3471,35 +1908,11 @@ typedef union sh_xnni1_llp_debit_flow_u mmr_t reserved_7 : 3; } sh_xnni1_llp_debit_flow_s; } sh_xnni1_llp_debit_flow_u_t; -#else -typedef union sh_xnni1_llp_debit_flow_u { - mmr_t sh_xnni1_llp_debit_flow_regval; - struct { - mmr_t reserved_7 : 3; - mmr_t debit_vc3_cap : 5; - mmr_t reserved_6 : 3; - mmr_t debit_vc3_dyn : 5; - mmr_t reserved_5 : 3; - mmr_t debit_vc2_cap : 5; - mmr_t reserved_4 : 3; - mmr_t debit_vc2_dyn : 5; - mmr_t reserved_3 : 3; - mmr_t debit_vc1_cap : 5; - mmr_t reserved_2 : 3; - mmr_t debit_vc1_dyn : 5; - mmr_t reserved_1 : 3; - mmr_t debit_vc0_cap : 5; - mmr_t reserved_0 : 3; - mmr_t debit_vc0_dyn : 5; - } sh_xnni1_llp_debit_flow_s; -} sh_xnni1_llp_debit_flow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI1_LINK_0_FLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni1_link_0_flow_u { mmr_t sh_xnni1_link_0_flow_regval; struct { @@ -3514,28 +1927,11 @@ typedef union sh_xnni1_link_0_flow_u { mmr_t reserved_3 : 33; } sh_xnni1_link_0_flow_s; } sh_xnni1_link_0_flow_u_t; -#else -typedef union sh_xnni1_link_0_flow_u { - mmr_t sh_xnni1_link_0_flow_regval; - struct { - mmr_t reserved_3 : 33; - mmr_t credit_vc0_cap : 7; - mmr_t reserved_2 : 1; - mmr_t credit_vc0_dyn : 7; - mmr_t reserved_1 : 1; - mmr_t credit_vc0_test : 7; - mmr_t debit_vc0_force_cred : 1; - mmr_t reserved_0 : 1; - mmr_t debit_vc0_withhold : 6; - } sh_xnni1_link_0_flow_s; -} sh_xnni1_link_0_flow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI1_LINK_1_FLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni1_link_1_flow_u { mmr_t sh_xnni1_link_1_flow_regval; struct { @@ -3550,28 +1946,11 @@ typedef union sh_xnni1_link_1_flow_u { mmr_t reserved_3 : 33; } sh_xnni1_link_1_flow_s; } sh_xnni1_link_1_flow_u_t; -#else -typedef union sh_xnni1_link_1_flow_u { - mmr_t sh_xnni1_link_1_flow_regval; - struct { - mmr_t reserved_3 : 33; - mmr_t credit_vc1_cap : 7; - mmr_t reserved_2 : 1; - mmr_t credit_vc1_dyn : 7; - mmr_t reserved_1 : 1; - mmr_t credit_vc1_test : 7; - mmr_t debit_vc1_force_cred : 1; - mmr_t reserved_0 : 1; - mmr_t debit_vc1_withhold : 6; - } sh_xnni1_link_1_flow_s; -} sh_xnni1_link_1_flow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI1_LINK_2_FLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni1_link_2_flow_u { mmr_t sh_xnni1_link_2_flow_regval; struct { @@ -3586,28 +1965,11 @@ typedef union sh_xnni1_link_2_flow_u { mmr_t reserved_3 : 33; } sh_xnni1_link_2_flow_s; } sh_xnni1_link_2_flow_u_t; -#else -typedef union sh_xnni1_link_2_flow_u { - mmr_t sh_xnni1_link_2_flow_regval; - struct { - mmr_t reserved_3 : 33; - mmr_t credit_vc2_cap : 7; - mmr_t reserved_2 : 1; - mmr_t credit_vc2_dyn : 7; - mmr_t reserved_1 : 1; - mmr_t credit_vc2_test : 7; - mmr_t debit_vc2_force_cred : 1; - mmr_t reserved_0 : 1; - mmr_t debit_vc2_withhold : 6; - } sh_xnni1_link_2_flow_s; -} sh_xnni1_link_2_flow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI1_LINK_3_FLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni1_link_3_flow_u { mmr_t sh_xnni1_link_3_flow_regval; struct { @@ -3622,29 +1984,12 @@ typedef union sh_xnni1_link_3_flow_u { mmr_t reserved_3 : 33; } sh_xnni1_link_3_flow_s; } sh_xnni1_link_3_flow_u_t; -#else -typedef union sh_xnni1_link_3_flow_u { - mmr_t sh_xnni1_link_3_flow_regval; - struct { - mmr_t reserved_3 : 33; - mmr_t credit_vc3_cap : 7; - mmr_t reserved_2 : 1; - mmr_t credit_vc3_dyn : 7; - mmr_t reserved_1 : 1; - mmr_t credit_vc3_test : 7; - mmr_t debit_vc3_force_cred : 1; - mmr_t reserved_0 : 1; - mmr_t debit_vc3_withhold : 6; - } sh_xnni1_link_3_flow_s; -} sh_xnni1_link_3_flow_u_t; -#endif /* ==================================================================== */ /* Register "SH_IILB_LOCAL_TABLE" */ /* local lookup table */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_iilb_local_table_u { mmr_t sh_iilb_local_table_regval; struct { @@ -3655,25 +2000,12 @@ typedef union sh_iilb_local_table_u { mmr_t valid : 1; } sh_iilb_local_table_s; } sh_iilb_local_table_u_t; -#else -typedef union sh_iilb_local_table_u { - mmr_t sh_iilb_local_table_regval; - struct { - mmr_t valid : 1; - mmr_t reserved_0 : 57; - mmr_t ni_sel0 : 1; - mmr_t v0 : 1; - mmr_t dir0 : 4; - } sh_iilb_local_table_s; -} sh_iilb_local_table_u_t; -#endif /* ==================================================================== */ /* Register "SH_IILB_GLOBAL_TABLE" */ /* global lookup table */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_iilb_global_table_u { mmr_t sh_iilb_global_table_regval; struct { @@ -3684,25 +2016,12 @@ typedef union sh_iilb_global_table_u { mmr_t valid : 1; } sh_iilb_global_table_s; } sh_iilb_global_table_u_t; -#else -typedef union sh_iilb_global_table_u { - mmr_t sh_iilb_global_table_regval; - struct { - mmr_t valid : 1; - mmr_t reserved_0 : 57; - mmr_t ni_sel0 : 1; - mmr_t v0 : 1; - mmr_t dir0 : 4; - } sh_iilb_global_table_s; -} sh_iilb_global_table_u_t; -#endif /* ==================================================================== */ /* Register "SH_IILB_OVER_RIDE_TABLE" */ /* If enabled, bypass the Global/Local tables */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_iilb_over_ride_table_u { mmr_t sh_iilb_over_ride_table_regval; struct { @@ -3713,46 +2032,24 @@ typedef union sh_iilb_over_ride_table_u mmr_t enable : 1; } sh_iilb_over_ride_table_s; } sh_iilb_over_ride_table_u_t; -#else -typedef union sh_iilb_over_ride_table_u { - mmr_t sh_iilb_over_ride_table_regval; - struct { - mmr_t enable : 1; - mmr_t reserved_0 : 57; - mmr_t ni_sel0 : 1; - mmr_t v0 : 1; - mmr_t dir0 : 4; - } sh_iilb_over_ride_table_s; -} sh_iilb_over_ride_table_u_t; -#endif /* ==================================================================== */ /* Register "SH_IILB_RSP_PLANE_HINT" */ /* If enabled, invert incoming response only plane hint bit before lo */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_iilb_rsp_plane_hint_u { - mmr_t sh_iilb_rsp_plane_hint_regval; - struct { - mmr_t reserved_0 : 64; - } sh_iilb_rsp_plane_hint_s; -} sh_iilb_rsp_plane_hint_u_t; -#else typedef union sh_iilb_rsp_plane_hint_u { mmr_t sh_iilb_rsp_plane_hint_regval; struct { mmr_t reserved_0 : 64; } sh_iilb_rsp_plane_hint_s; } sh_iilb_rsp_plane_hint_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_LOCAL_TABLE" */ /* local lookup table */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_local_table_u { mmr_t sh_pi_local_table_regval; struct { @@ -3767,29 +2064,12 @@ typedef union sh_pi_local_table_u { mmr_t valid : 1; } sh_pi_local_table_s; } sh_pi_local_table_u_t; -#else -typedef union sh_pi_local_table_u { - mmr_t sh_pi_local_table_regval; - struct { - mmr_t valid : 1; - mmr_t reserved_1 : 49; - mmr_t ni_sel1 : 1; - mmr_t v1 : 1; - mmr_t dir1 : 4; - mmr_t reserved_0 : 2; - mmr_t ni_sel0 : 1; - mmr_t v0 : 1; - mmr_t dir0 : 4; - } sh_pi_local_table_s; -} sh_pi_local_table_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_GLOBAL_TABLE" */ /* global lookup table */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_global_table_u { mmr_t sh_pi_global_table_regval; struct { @@ -3804,29 +2084,12 @@ typedef union sh_pi_global_table_u { mmr_t valid : 1; } sh_pi_global_table_s; } sh_pi_global_table_u_t; -#else -typedef union sh_pi_global_table_u { - mmr_t sh_pi_global_table_regval; - struct { - mmr_t valid : 1; - mmr_t reserved_1 : 49; - mmr_t ni_sel1 : 1; - mmr_t v1 : 1; - mmr_t dir1 : 4; - mmr_t reserved_0 : 2; - mmr_t ni_sel0 : 1; - mmr_t v0 : 1; - mmr_t dir0 : 4; - } sh_pi_global_table_s; -} sh_pi_global_table_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_OVER_RIDE_TABLE" */ /* If enabled, bypass the Global/Local tables */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_over_ride_table_u { mmr_t sh_pi_over_ride_table_regval; struct { @@ -3841,29 +2104,12 @@ typedef union sh_pi_over_ride_table_u { mmr_t enable : 1; } sh_pi_over_ride_table_s; } sh_pi_over_ride_table_u_t; -#else -typedef union sh_pi_over_ride_table_u { - mmr_t sh_pi_over_ride_table_regval; - struct { - mmr_t enable : 1; - mmr_t reserved_1 : 49; - mmr_t ni_sel1 : 1; - mmr_t v1 : 1; - mmr_t dir1 : 4; - mmr_t reserved_0 : 2; - mmr_t ni_sel0 : 1; - mmr_t v0 : 1; - mmr_t dir0 : 4; - } sh_pi_over_ride_table_s; -} sh_pi_over_ride_table_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_RSP_PLANE_HINT" */ /* If enabled, invert incoming response only plane hint bit before lo */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_rsp_plane_hint_u { mmr_t sh_pi_rsp_plane_hint_regval; struct { @@ -3871,22 +2117,12 @@ typedef union sh_pi_rsp_plane_hint_u { mmr_t reserved_0 : 63; } sh_pi_rsp_plane_hint_s; } sh_pi_rsp_plane_hint_u_t; -#else -typedef union sh_pi_rsp_plane_hint_u { - mmr_t sh_pi_rsp_plane_hint_regval; - struct { - mmr_t reserved_0 : 63; - mmr_t invert : 1; - } sh_pi_rsp_plane_hint_s; -} sh_pi_rsp_plane_hint_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI0_LOCAL_TABLE" */ /* local lookup table */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ni0_local_table_u { mmr_t sh_ni0_local_table_regval; struct { @@ -3896,24 +2132,12 @@ typedef union sh_ni0_local_table_u { mmr_t valid : 1; } sh_ni0_local_table_s; } sh_ni0_local_table_u_t; -#else -typedef union sh_ni0_local_table_u { - mmr_t sh_ni0_local_table_regval; - struct { - mmr_t valid : 1; - mmr_t reserved_0 : 58; - mmr_t v0 : 1; - mmr_t dir0 : 4; - } sh_ni0_local_table_s; -} sh_ni0_local_table_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI0_GLOBAL_TABLE" */ /* global lookup table */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ni0_global_table_u { mmr_t sh_ni0_global_table_regval; struct { @@ -3923,24 +2147,12 @@ typedef union sh_ni0_global_table_u { mmr_t valid : 1; } sh_ni0_global_table_s; } sh_ni0_global_table_u_t; -#else -typedef union sh_ni0_global_table_u { - mmr_t sh_ni0_global_table_regval; - struct { - mmr_t valid : 1; - mmr_t reserved_0 : 58; - mmr_t v0 : 1; - mmr_t dir0 : 4; - } sh_ni0_global_table_s; -} sh_ni0_global_table_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI0_OVER_RIDE_TABLE" */ /* If enabled, bypass the Global/Local tables */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ni0_over_ride_table_u { mmr_t sh_ni0_over_ride_table_regval; struct { @@ -3950,45 +2162,24 @@ typedef union sh_ni0_over_ride_table_u { mmr_t enable : 1; } sh_ni0_over_ride_table_s; } sh_ni0_over_ride_table_u_t; -#else -typedef union sh_ni0_over_ride_table_u { - mmr_t sh_ni0_over_ride_table_regval; - struct { - mmr_t enable : 1; - mmr_t reserved_0 : 58; - mmr_t v0 : 1; - mmr_t dir0 : 4; - } sh_ni0_over_ride_table_s; -} sh_ni0_over_ride_table_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI0_RSP_PLANE_HINT" */ /* If enabled, invert incoming response only plane hint bit before lo */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_ni0_rsp_plane_hint_u { - mmr_t sh_ni0_rsp_plane_hint_regval; - struct { - mmr_t reserved_0 : 64; - } sh_ni0_rsp_plane_hint_s; -} sh_ni0_rsp_plane_hint_u_t; -#else typedef union sh_ni0_rsp_plane_hint_u { mmr_t sh_ni0_rsp_plane_hint_regval; struct { mmr_t reserved_0 : 64; } sh_ni0_rsp_plane_hint_s; } sh_ni0_rsp_plane_hint_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI1_LOCAL_TABLE" */ /* local lookup table */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ni1_local_table_u { mmr_t sh_ni1_local_table_regval; struct { @@ -3998,24 +2189,12 @@ typedef union sh_ni1_local_table_u { mmr_t valid : 1; } sh_ni1_local_table_s; } sh_ni1_local_table_u_t; -#else -typedef union sh_ni1_local_table_u { - mmr_t sh_ni1_local_table_regval; - struct { - mmr_t valid : 1; - mmr_t reserved_0 : 58; - mmr_t v0 : 1; - mmr_t dir0 : 4; - } sh_ni1_local_table_s; -} sh_ni1_local_table_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI1_GLOBAL_TABLE" */ /* global lookup table */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ni1_global_table_u { mmr_t sh_ni1_global_table_regval; struct { @@ -4025,24 +2204,12 @@ typedef union sh_ni1_global_table_u { mmr_t valid : 1; } sh_ni1_global_table_s; } sh_ni1_global_table_u_t; -#else -typedef union sh_ni1_global_table_u { - mmr_t sh_ni1_global_table_regval; - struct { - mmr_t valid : 1; - mmr_t reserved_0 : 58; - mmr_t v0 : 1; - mmr_t dir0 : 4; - } sh_ni1_global_table_s; -} sh_ni1_global_table_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI1_OVER_RIDE_TABLE" */ /* If enabled, bypass the Global/Local tables */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ni1_over_ride_table_u { mmr_t sh_ni1_over_ride_table_regval; struct { @@ -4052,45 +2219,24 @@ typedef union sh_ni1_over_ride_table_u { mmr_t enable : 1; } sh_ni1_over_ride_table_s; } sh_ni1_over_ride_table_u_t; -#else -typedef union sh_ni1_over_ride_table_u { - mmr_t sh_ni1_over_ride_table_regval; - struct { - mmr_t enable : 1; - mmr_t reserved_0 : 58; - mmr_t v0 : 1; - mmr_t dir0 : 4; - } sh_ni1_over_ride_table_s; -} sh_ni1_over_ride_table_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI1_RSP_PLANE_HINT" */ /* If enabled, invert incoming response only plane hint bit before lo */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_ni1_rsp_plane_hint_u { - mmr_t sh_ni1_rsp_plane_hint_regval; - struct { - mmr_t reserved_0 : 64; - } sh_ni1_rsp_plane_hint_s; -} sh_ni1_rsp_plane_hint_u_t; -#else typedef union sh_ni1_rsp_plane_hint_u { mmr_t sh_ni1_rsp_plane_hint_regval; struct { mmr_t reserved_0 : 64; } sh_ni1_rsp_plane_hint_s; } sh_ni1_rsp_plane_hint_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_LOCAL_TABLE" */ /* local lookup table */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_local_table_u { mmr_t sh_md_local_table_regval; struct { @@ -4105,29 +2251,12 @@ typedef union sh_md_local_table_u { mmr_t valid : 1; } sh_md_local_table_s; } sh_md_local_table_u_t; -#else -typedef union sh_md_local_table_u { - mmr_t sh_md_local_table_regval; - struct { - mmr_t valid : 1; - mmr_t reserved_1 : 49; - mmr_t ni_sel1 : 1; - mmr_t v1 : 1; - mmr_t dir1 : 4; - mmr_t reserved_0 : 2; - mmr_t ni_sel0 : 1; - mmr_t v0 : 1; - mmr_t dir0 : 4; - } sh_md_local_table_s; -} sh_md_local_table_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_GLOBAL_TABLE" */ /* global lookup table */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_global_table_u { mmr_t sh_md_global_table_regval; struct { @@ -4142,29 +2271,12 @@ typedef union sh_md_global_table_u { mmr_t valid : 1; } sh_md_global_table_s; } sh_md_global_table_u_t; -#else -typedef union sh_md_global_table_u { - mmr_t sh_md_global_table_regval; - struct { - mmr_t valid : 1; - mmr_t reserved_1 : 49; - mmr_t ni_sel1 : 1; - mmr_t v1 : 1; - mmr_t dir1 : 4; - mmr_t reserved_0 : 2; - mmr_t ni_sel0 : 1; - mmr_t v0 : 1; - mmr_t dir0 : 4; - } sh_md_global_table_s; -} sh_md_global_table_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_OVER_RIDE_TABLE" */ /* If enabled, bypass the Global/Local tables */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_over_ride_table_u { mmr_t sh_md_over_ride_table_regval; struct { @@ -4179,29 +2291,12 @@ typedef union sh_md_over_ride_table_u { mmr_t enable : 1; } sh_md_over_ride_table_s; } sh_md_over_ride_table_u_t; -#else -typedef union sh_md_over_ride_table_u { - mmr_t sh_md_over_ride_table_regval; - struct { - mmr_t enable : 1; - mmr_t reserved_1 : 49; - mmr_t ni_sel1 : 1; - mmr_t v1 : 1; - mmr_t dir1 : 4; - mmr_t reserved_0 : 2; - mmr_t ni_sel0 : 1; - mmr_t v0 : 1; - mmr_t dir0 : 4; - } sh_md_over_ride_table_s; -} sh_md_over_ride_table_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_RSP_PLANE_HINT" */ /* If enabled, invert incoming response only plane hint bit before lo */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_rsp_plane_hint_u { mmr_t sh_md_rsp_plane_hint_regval; struct { @@ -4209,22 +2304,12 @@ typedef union sh_md_rsp_plane_hint_u { mmr_t reserved_0 : 63; } sh_md_rsp_plane_hint_s; } sh_md_rsp_plane_hint_u_t; -#else -typedef union sh_md_rsp_plane_hint_u { - mmr_t sh_md_rsp_plane_hint_regval; - struct { - mmr_t reserved_0 : 63; - mmr_t invert : 1; - } sh_md_rsp_plane_hint_s; -} sh_md_rsp_plane_hint_u_t; -#endif /* ==================================================================== */ /* Register "SH_LB_LIQ_CTL" */ /* Local Block LIQ Control */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_lb_liq_ctl_u { mmr_t sh_lb_liq_ctl_regval; struct { @@ -4238,28 +2323,12 @@ typedef union sh_lb_liq_ctl_u { mmr_t reserved_2 : 45; } sh_lb_liq_ctl_s; } sh_lb_liq_ctl_u_t; -#else -typedef union sh_lb_liq_ctl_u { - mmr_t sh_lb_liq_ctl_regval; - struct { - mmr_t reserved_2 : 45; - mmr_t force_linvv_credit : 1; - mmr_t force_rp_credit : 1; - mmr_t force_rq_credit : 1; - mmr_t reserved_1 : 4; - mmr_t liq_rpl_ctl : 4; - mmr_t reserved_0 : 3; - mmr_t liq_req_ctl : 5; - } sh_lb_liq_ctl_s; -} sh_lb_liq_ctl_u_t; -#endif /* ==================================================================== */ /* Register "SH_LB_LOQ_CTL" */ /* Local Block LOQ Control */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_lb_loq_ctl_u { mmr_t sh_lb_loq_ctl_regval; struct { @@ -4268,23 +2337,12 @@ typedef union sh_lb_loq_ctl_u { mmr_t reserved_0 : 62; } sh_lb_loq_ctl_s; } sh_lb_loq_ctl_u_t; -#else -typedef union sh_lb_loq_ctl_u { - mmr_t sh_lb_loq_ctl_regval; - struct { - mmr_t reserved_0 : 62; - mmr_t loq_rpl_ctl : 1; - mmr_t loq_req_ctl : 1; - } sh_lb_loq_ctl_s; -} sh_lb_loq_ctl_u_t; -#endif /* ==================================================================== */ /* Register "SH_LB_MAX_REP_CREDIT_CNT" */ /* Maximum number of reply credits from XN */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_lb_max_rep_credit_cnt_u { mmr_t sh_lb_max_rep_credit_cnt_regval; struct { @@ -4292,22 +2350,12 @@ typedef union sh_lb_max_rep_credit_cnt_u mmr_t reserved_0 : 59; } sh_lb_max_rep_credit_cnt_s; } sh_lb_max_rep_credit_cnt_u_t; -#else -typedef union sh_lb_max_rep_credit_cnt_u { - mmr_t sh_lb_max_rep_credit_cnt_regval; - struct { - mmr_t reserved_0 : 59; - mmr_t max_cnt : 5; - } sh_lb_max_rep_credit_cnt_s; -} sh_lb_max_rep_credit_cnt_u_t; -#endif /* ==================================================================== */ /* Register "SH_LB_MAX_REQ_CREDIT_CNT" */ /* Maximum number of request credits from XN */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_lb_max_req_credit_cnt_u { mmr_t sh_lb_max_req_credit_cnt_regval; struct { @@ -4315,22 +2363,12 @@ typedef union sh_lb_max_req_credit_cnt_u mmr_t reserved_0 : 59; } sh_lb_max_req_credit_cnt_s; } sh_lb_max_req_credit_cnt_u_t; -#else -typedef union sh_lb_max_req_credit_cnt_u { - mmr_t sh_lb_max_req_credit_cnt_regval; - struct { - mmr_t reserved_0 : 59; - mmr_t max_cnt : 5; - } sh_lb_max_req_credit_cnt_s; -} sh_lb_max_req_credit_cnt_u_t; -#endif /* ==================================================================== */ /* Register "SH_PIO_TIME_OUT" */ /* Local Block PIO time out value */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pio_time_out_u { mmr_t sh_pio_time_out_regval; struct { @@ -4338,22 +2376,12 @@ typedef union sh_pio_time_out_u { mmr_t reserved_0 : 48; } sh_pio_time_out_s; } sh_pio_time_out_u_t; -#else -typedef union sh_pio_time_out_u { - mmr_t sh_pio_time_out_regval; - struct { - mmr_t reserved_0 : 48; - mmr_t value : 16; - } sh_pio_time_out_s; -} sh_pio_time_out_u_t; -#endif /* ==================================================================== */ /* Register "SH_PIO_NACK_RESET" */ /* Local Block PIO Reset for nack counters */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pio_nack_reset_u { mmr_t sh_pio_nack_reset_regval; struct { @@ -4361,22 +2389,12 @@ typedef union sh_pio_nack_reset_u { mmr_t reserved_0 : 63; } sh_pio_nack_reset_s; } sh_pio_nack_reset_u_t; -#else -typedef union sh_pio_nack_reset_u { - mmr_t sh_pio_nack_reset_regval; - struct { - mmr_t reserved_0 : 63; - mmr_t pulse : 1; - } sh_pio_nack_reset_s; -} sh_pio_nack_reset_u_t; -#endif /* ==================================================================== */ /* Register "SH_CONVEYOR_BELT_TIME_OUT" */ /* Local Block conveyor belt time out value */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_conveyor_belt_time_out_u { mmr_t sh_conveyor_belt_time_out_regval; struct { @@ -4384,22 +2402,12 @@ typedef union sh_conveyor_belt_time_out_ mmr_t reserved_0 : 52; } sh_conveyor_belt_time_out_s; } sh_conveyor_belt_time_out_u_t; -#else -typedef union sh_conveyor_belt_time_out_u { - mmr_t sh_conveyor_belt_time_out_regval; - struct { - mmr_t reserved_0 : 52; - mmr_t value : 12; - } sh_conveyor_belt_time_out_s; -} sh_conveyor_belt_time_out_u_t; -#endif /* ==================================================================== */ /* Register "SH_LB_CREDIT_STATUS" */ /* Credit Counter Status Register */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_lb_credit_status_u { mmr_t sh_lb_credit_status_regval; struct { @@ -4413,28 +2421,12 @@ typedef union sh_lb_credit_status_u { mmr_t reserved_2 : 36; } sh_lb_credit_status_s; } sh_lb_credit_status_u_t; -#else -typedef union sh_lb_credit_status_u { - mmr_t sh_lb_credit_status_regval; - struct { - mmr_t reserved_2 : 36; - mmr_t loq_rp_credit : 5; - mmr_t loq_rq_credit : 5; - mmr_t linvv_credit : 6; - mmr_t reserved_1 : 2; - mmr_t liq_rp_credit : 4; - mmr_t reserved_0 : 1; - mmr_t liq_rq_credit : 5; - } sh_lb_credit_status_s; -} sh_lb_credit_status_u_t; -#endif /* ==================================================================== */ /* Register "SH_LB_DEBUG_LOCAL_SEL" */ /* LB Debug Port Select */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_lb_debug_local_sel_u { mmr_t sh_lb_debug_local_sel_regval; struct { @@ -4472,52 +2464,12 @@ typedef union sh_lb_debug_local_sel_u { mmr_t trigger_enable : 1; } sh_lb_debug_local_sel_s; } sh_lb_debug_local_sel_u_t; -#else -typedef union sh_lb_debug_local_sel_u { - mmr_t sh_lb_debug_local_sel_regval; - struct { - mmr_t trigger_enable : 1; - mmr_t nibble7_nibble_sel : 3; - mmr_t reserved_14 : 1; - mmr_t nibble7_chiplet_sel : 3; - mmr_t reserved_13 : 1; - mmr_t nibble6_nibble_sel : 3; - mmr_t reserved_12 : 1; - mmr_t nibble6_chiplet_sel : 3; - mmr_t reserved_11 : 1; - mmr_t nibble5_nibble_sel : 3; - mmr_t reserved_10 : 1; - mmr_t nibble5_chiplet_sel : 3; - mmr_t reserved_9 : 1; - mmr_t nibble4_nibble_sel : 3; - mmr_t reserved_8 : 1; - mmr_t nibble4_chiplet_sel : 3; - mmr_t reserved_7 : 1; - mmr_t nibble3_nibble_sel : 3; - mmr_t reserved_6 : 1; - mmr_t nibble3_chiplet_sel : 3; - mmr_t reserved_5 : 1; - mmr_t nibble2_nibble_sel : 3; - mmr_t reserved_4 : 1; - mmr_t nibble2_chiplet_sel : 3; - mmr_t reserved_3 : 1; - mmr_t nibble1_nibble_sel : 3; - mmr_t reserved_2 : 1; - mmr_t nibble1_chiplet_sel : 3; - mmr_t reserved_1 : 1; - mmr_t nibble0_nibble_sel : 3; - mmr_t reserved_0 : 1; - mmr_t nibble0_chiplet_sel : 3; - } sh_lb_debug_local_sel_s; -} sh_lb_debug_local_sel_u_t; -#endif /* ==================================================================== */ /* Register "SH_LB_DEBUG_PERF_SEL" */ /* LB Debug Port Performance Select */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_lb_debug_perf_sel_u { mmr_t sh_lb_debug_perf_sel_regval; struct { @@ -4555,52 +2507,12 @@ typedef union sh_lb_debug_perf_sel_u { mmr_t reserved_15 : 1; } sh_lb_debug_perf_sel_s; } sh_lb_debug_perf_sel_u_t; -#else -typedef union sh_lb_debug_perf_sel_u { - mmr_t sh_lb_debug_perf_sel_regval; - struct { - mmr_t reserved_15 : 1; - mmr_t nibble7_nibble_sel : 3; - mmr_t reserved_14 : 1; - mmr_t nibble7_chiplet_sel : 3; - mmr_t reserved_13 : 1; - mmr_t nibble6_nibble_sel : 3; - mmr_t reserved_12 : 1; - mmr_t nibble6_chiplet_sel : 3; - mmr_t reserved_11 : 1; - mmr_t nibble5_nibble_sel : 3; - mmr_t reserved_10 : 1; - mmr_t nibble5_chiplet_sel : 3; - mmr_t reserved_9 : 1; - mmr_t nibble4_nibble_sel : 3; - mmr_t reserved_8 : 1; - mmr_t nibble4_chiplet_sel : 3; - mmr_t reserved_7 : 1; - mmr_t nibble3_nibble_sel : 3; - mmr_t reserved_6 : 1; - mmr_t nibble3_chiplet_sel : 3; - mmr_t reserved_5 : 1; - mmr_t nibble2_nibble_sel : 3; - mmr_t reserved_4 : 1; - mmr_t nibble2_chiplet_sel : 3; - mmr_t reserved_3 : 1; - mmr_t nibble1_nibble_sel : 3; - mmr_t reserved_2 : 1; - mmr_t nibble1_chiplet_sel : 3; - mmr_t reserved_1 : 1; - mmr_t nibble0_nibble_sel : 3; - mmr_t reserved_0 : 1; - mmr_t nibble0_chiplet_sel : 3; - } sh_lb_debug_perf_sel_s; -} sh_lb_debug_perf_sel_u_t; -#endif /* ==================================================================== */ /* Register "SH_LB_DEBUG_TRIG_SEL" */ /* LB Debug Trigger Select */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_lb_debug_trig_sel_u { mmr_t sh_lb_debug_trig_sel_regval; struct { @@ -4638,52 +2550,12 @@ typedef union sh_lb_debug_trig_sel_u { mmr_t reserved_15 : 1; } sh_lb_debug_trig_sel_s; } sh_lb_debug_trig_sel_u_t; -#else -typedef union sh_lb_debug_trig_sel_u { - mmr_t sh_lb_debug_trig_sel_regval; - struct { - mmr_t reserved_15 : 1; - mmr_t trigger7_nibble_sel : 3; - mmr_t reserved_14 : 1; - mmr_t trigger7_chiplet_sel : 3; - mmr_t reserved_13 : 1; - mmr_t trigger6_nibble_sel : 3; - mmr_t reserved_12 : 1; - mmr_t trigger6_chiplet_sel : 3; - mmr_t reserved_11 : 1; - mmr_t trigger5_nibble_sel : 3; - mmr_t reserved_10 : 1; - mmr_t trigger5_chiplet_sel : 3; - mmr_t reserved_9 : 1; - mmr_t trigger4_nibble_sel : 3; - mmr_t reserved_8 : 1; - mmr_t trigger4_chiplet_sel : 3; - mmr_t reserved_7 : 1; - mmr_t trigger3_nibble_sel : 3; - mmr_t reserved_6 : 1; - mmr_t trigger3_chiplet_sel : 3; - mmr_t reserved_5 : 1; - mmr_t trigger2_nibble_sel : 3; - mmr_t reserved_4 : 1; - mmr_t trigger2_chiplet_sel : 3; - mmr_t reserved_3 : 1; - mmr_t trigger1_nibble_sel : 3; - mmr_t reserved_2 : 1; - mmr_t trigger1_chiplet_sel : 3; - mmr_t reserved_1 : 1; - mmr_t trigger0_nibble_sel : 3; - mmr_t reserved_0 : 1; - mmr_t trigger0_chiplet_sel : 3; - } sh_lb_debug_trig_sel_s; -} sh_lb_debug_trig_sel_u_t; -#endif /* ==================================================================== */ /* Register "SH_LB_ERROR_DETAIL_1" */ /* LB Error capture information: HDR1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_lb_error_detail_1_u { mmr_t sh_lb_error_detail_1_regval; struct { @@ -4700,31 +2572,12 @@ typedef union sh_lb_error_detail_1_u { mmr_t valid : 1; } sh_lb_error_detail_1_s; } sh_lb_error_detail_1_u_t; -#else -typedef union sh_lb_error_detail_1_u { - mmr_t sh_lb_error_detail_1_regval; - struct { - mmr_t valid : 1; - mmr_t reserved_3 : 13; - mmr_t data_err : 1; - mmr_t hdr_err : 1; - mmr_t reserved_2 : 5; - mmr_t dest : 3; - mmr_t reserved_1 : 2; - mmr_t source : 14; - mmr_t reserved_0 : 2; - mmr_t suppl : 14; - mmr_t command : 8; - } sh_lb_error_detail_1_s; -} sh_lb_error_detail_1_u_t; -#endif /* ==================================================================== */ /* Register "SH_LB_ERROR_DETAIL_2" */ /* LB Error Bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_lb_error_detail_2_u { mmr_t sh_lb_error_detail_2_regval; struct { @@ -4732,64 +2585,36 @@ typedef union sh_lb_error_detail_2_u { mmr_t reserved_0 : 17; } sh_lb_error_detail_2_s; } sh_lb_error_detail_2_u_t; -#else -typedef union sh_lb_error_detail_2_u { - mmr_t sh_lb_error_detail_2_regval; - struct { - mmr_t reserved_0 : 17; - mmr_t address : 47; - } sh_lb_error_detail_2_s; -} sh_lb_error_detail_2_u_t; -#endif /* ==================================================================== */ /* Register "SH_LB_ERROR_DETAIL_3" */ /* LB Error Bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_lb_error_detail_3_u { - mmr_t sh_lb_error_detail_3_regval; - struct { - mmr_t data : 64; - } sh_lb_error_detail_3_s; -} sh_lb_error_detail_3_u_t; -#else typedef union sh_lb_error_detail_3_u { mmr_t sh_lb_error_detail_3_regval; struct { mmr_t data : 64; } sh_lb_error_detail_3_s; } sh_lb_error_detail_3_u_t; -#endif /* ==================================================================== */ /* Register "SH_LB_ERROR_DETAIL_4" */ /* LB Error Bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_lb_error_detail_4_u { - mmr_t sh_lb_error_detail_4_regval; - struct { - mmr_t route : 64; - } sh_lb_error_detail_4_s; -} sh_lb_error_detail_4_u_t; -#else typedef union sh_lb_error_detail_4_u { mmr_t sh_lb_error_detail_4_regval; struct { mmr_t route : 64; } sh_lb_error_detail_4_s; } sh_lb_error_detail_4_u_t; -#endif /* ==================================================================== */ /* Register "SH_LB_ERROR_DETAIL_5" */ /* LB Error Bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_lb_error_detail_5_u { mmr_t sh_lb_error_detail_5_regval; struct { @@ -4803,28 +2628,12 @@ typedef union sh_lb_error_detail_5_u { mmr_t reserved_0 : 57; } sh_lb_error_detail_5_s; } sh_lb_error_detail_5_u_t; -#else -typedef union sh_lb_error_detail_5_u { - mmr_t sh_lb_error_detail_5_regval; - struct { - mmr_t reserved_0 : 57; - mmr_t nack_b_timeout : 1; - mmr_t nack_a_timeout : 1; - mmr_t count_b_overflow : 1; - mmr_t count_a_overflow : 1; - mmr_t write_retry : 1; - mmr_t ptc1_write : 1; - mmr_t read_retry : 1; - } sh_lb_error_detail_5_s; -} sh_lb_error_detail_5_u_t; -#endif /* ==================================================================== */ /* Register "SH_LB_ERROR_MASK" */ /* LB Error Mask */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_lb_error_mask_u { mmr_t sh_lb_error_mask_regval; struct { @@ -4854,44 +2663,12 @@ typedef union sh_lb_error_mask_u { mmr_t reserved_0 : 41; } sh_lb_error_mask_s; } sh_lb_error_mask_u_t; -#else -typedef union sh_lb_error_mask_u { - mmr_t sh_lb_error_mask_regval; - struct { - mmr_t reserved_0 : 41; - mmr_t rp_credit_overflow : 1; - mmr_t rq_credit_overflow : 1; - mmr_t unexp_valid : 1; - mmr_t rp_fifo_error : 1; - mmr_t rq_fifo_error : 1; - mmr_t gclk_drop : 1; - mmr_t vector_rp_route_error : 1; - mmr_t vector_rq_route_error : 1; - mmr_t pio_cb_err : 1; - mmr_t junk_bus_err : 1; - mmr_t ptc_1_timeout : 1; - mmr_t unexpected_linv : 1; - mmr_t linvv_overflow : 1; - mmr_t rq_time_out : 1; - mmr_t rq_bad_addr : 1; - mmr_t rp_bad_data : 1; - mmr_t rq_bad_data : 1; - mmr_t rp_long : 1; - mmr_t rq_long : 1; - mmr_t rp_short : 1; - mmr_t rq_short : 1; - mmr_t rp_bad_cmd : 1; - mmr_t rq_bad_cmd : 1; - } sh_lb_error_mask_s; -} sh_lb_error_mask_u_t; -#endif /* ==================================================================== */ /* Register "SH_LB_ERROR_OVERFLOW" */ /* LB Error Overflow */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_lb_error_overflow_u { mmr_t sh_lb_error_overflow_regval; struct { @@ -4921,44 +2698,12 @@ typedef union sh_lb_error_overflow_u { mmr_t reserved_0 : 41; } sh_lb_error_overflow_s; } sh_lb_error_overflow_u_t; -#else -typedef union sh_lb_error_overflow_u { - mmr_t sh_lb_error_overflow_regval; - struct { - mmr_t reserved_0 : 41; - mmr_t rp_credit_overflow_ovrfl : 1; - mmr_t rq_credit_overflow_ovrfl : 1; - mmr_t unexp_valid_ovrfl : 1; - mmr_t rp_fifo_error_ovrfl : 1; - mmr_t rq_fifo_error_ovrfl : 1; - mmr_t gclk_drop_ovrfl : 1; - mmr_t vector_rp_route_error_ovrfl : 1; - mmr_t vector_rq_route_error_ovrfl : 1; - mmr_t pio_cb_err_ovrfl : 1; - mmr_t junk_bus_err_ovrfl : 1; - mmr_t ptc_1_timeout_ovrfl : 1; - mmr_t unexpected_linv_ovrfl : 1; - mmr_t linvv_overflow_ovrfl : 1; - mmr_t rq_time_out_ovrfl : 1; - mmr_t rq_bad_addr_ovrfl : 1; - mmr_t rp_bad_data_ovrfl : 1; - mmr_t rq_bad_data_ovrfl : 1; - mmr_t rp_long_ovrfl : 1; - mmr_t rq_long_ovrfl : 1; - mmr_t rp_short_ovrfl : 1; - mmr_t rq_short_ovrfl : 1; - mmr_t rp_bad_cmd_ovrfl : 1; - mmr_t rq_bad_cmd_ovrfl : 1; - } sh_lb_error_overflow_s; -} sh_lb_error_overflow_u_t; -#endif /* ==================================================================== */ /* Register "SH_LB_ERROR_SUMMARY" */ /* LB Error Bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_lb_error_summary_u { mmr_t sh_lb_error_summary_regval; struct { @@ -4988,44 +2733,12 @@ typedef union sh_lb_error_summary_u { mmr_t reserved_0 : 41; } sh_lb_error_summary_s; } sh_lb_error_summary_u_t; -#else -typedef union sh_lb_error_summary_u { - mmr_t sh_lb_error_summary_regval; - struct { - mmr_t reserved_0 : 41; - mmr_t rp_credit_overflow : 1; - mmr_t rq_credit_overflow : 1; - mmr_t unexp_valid : 1; - mmr_t rp_fifo_error : 1; - mmr_t rq_fifo_error : 1; - mmr_t gclk_drop : 1; - mmr_t vector_rp_route_error : 1; - mmr_t vector_rq_route_error : 1; - mmr_t pio_cb_err : 1; - mmr_t junk_bus_err : 1; - mmr_t ptc_1_timeout : 1; - mmr_t unexpected_linv : 1; - mmr_t linvv_overflow : 1; - mmr_t rq_time_out : 1; - mmr_t rq_bad_addr : 1; - mmr_t rp_bad_data : 1; - mmr_t rq_bad_data : 1; - mmr_t rp_long : 1; - mmr_t rq_long : 1; - mmr_t rp_short : 1; - mmr_t rq_short : 1; - mmr_t rp_bad_cmd : 1; - mmr_t rq_bad_cmd : 1; - } sh_lb_error_summary_s; -} sh_lb_error_summary_u_t; -#endif /* ==================================================================== */ /* Register "SH_LB_FIRST_ERROR" */ /* LB First Error */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_lb_first_error_u { mmr_t sh_lb_first_error_regval; struct { @@ -5055,44 +2768,12 @@ typedef union sh_lb_first_error_u { mmr_t reserved_0 : 41; } sh_lb_first_error_s; } sh_lb_first_error_u_t; -#else -typedef union sh_lb_first_error_u { - mmr_t sh_lb_first_error_regval; - struct { - mmr_t reserved_0 : 41; - mmr_t rp_credit_overflow : 1; - mmr_t rq_credit_overflow : 1; - mmr_t unexp_valid : 1; - mmr_t rp_fifo_error : 1; - mmr_t rq_fifo_error : 1; - mmr_t gclk_drop : 1; - mmr_t vector_rp_route_error : 1; - mmr_t vector_rq_route_error : 1; - mmr_t pio_cb_err : 1; - mmr_t junk_bus_err : 1; - mmr_t ptc_1_timeout : 1; - mmr_t unexpected_linv : 1; - mmr_t linvv_overflow : 1; - mmr_t rq_time_out : 1; - mmr_t rq_bad_addr : 1; - mmr_t rp_bad_data : 1; - mmr_t rq_bad_data : 1; - mmr_t rp_long : 1; - mmr_t rq_long : 1; - mmr_t rp_short : 1; - mmr_t rq_short : 1; - mmr_t rp_bad_cmd : 1; - mmr_t rq_bad_cmd : 1; - } sh_lb_first_error_s; -} sh_lb_first_error_u_t; -#endif /* ==================================================================== */ /* Register "SH_LB_LAST_CREDIT" */ /* Credit counter status register */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_lb_last_credit_u { mmr_t sh_lb_last_credit_regval; struct { @@ -5106,28 +2787,12 @@ typedef union sh_lb_last_credit_u { mmr_t reserved_2 : 36; } sh_lb_last_credit_s; } sh_lb_last_credit_u_t; -#else -typedef union sh_lb_last_credit_u { - mmr_t sh_lb_last_credit_regval; - struct { - mmr_t reserved_2 : 36; - mmr_t loq_rp_credit : 5; - mmr_t loq_rq_credit : 5; - mmr_t linvv_credit : 6; - mmr_t reserved_1 : 2; - mmr_t liq_rp_credit : 4; - mmr_t reserved_0 : 1; - mmr_t liq_rq_credit : 5; - } sh_lb_last_credit_s; -} sh_lb_last_credit_u_t; -#endif /* ==================================================================== */ /* Register "SH_LB_NACK_STATUS" */ /* Nack Counter Status Register */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_lb_nack_status_u { mmr_t sh_lb_nack_status_regval; struct { @@ -5141,28 +2806,12 @@ typedef union sh_lb_nack_status_u { mmr_t reserved_2 : 2; } sh_lb_nack_status_s; } sh_lb_nack_status_u_t; -#else -typedef union sh_lb_nack_status_u { - mmr_t sh_lb_nack_status_regval; - struct { - mmr_t reserved_2 : 2; - mmr_t cb_state : 2; - mmr_t cb_timeout_count : 12; - mmr_t junk_nack : 16; - mmr_t reserved_1 : 4; - mmr_t pio_nack_b : 12; - mmr_t reserved_0 : 4; - mmr_t pio_nack_a : 12; - } sh_lb_nack_status_s; -} sh_lb_nack_status_u_t; -#endif /* ==================================================================== */ /* Register "SH_LB_TRIGGER_COMPARE" */ /* LB Test-point Trigger Compare */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_lb_trigger_compare_u { mmr_t sh_lb_trigger_compare_regval; struct { @@ -5170,22 +2819,12 @@ typedef union sh_lb_trigger_compare_u { mmr_t reserved_0 : 32; } sh_lb_trigger_compare_s; } sh_lb_trigger_compare_u_t; -#else -typedef union sh_lb_trigger_compare_u { - mmr_t sh_lb_trigger_compare_regval; - struct { - mmr_t reserved_0 : 32; - mmr_t mask : 32; - } sh_lb_trigger_compare_s; -} sh_lb_trigger_compare_u_t; -#endif /* ==================================================================== */ /* Register "SH_LB_TRIGGER_DATA" */ /* LB Test-point Trigger Compare Data */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_lb_trigger_data_u { mmr_t sh_lb_trigger_data_regval; struct { @@ -5193,22 +2832,12 @@ typedef union sh_lb_trigger_data_u { mmr_t reserved_0 : 32; } sh_lb_trigger_data_s; } sh_lb_trigger_data_u_t; -#else -typedef union sh_lb_trigger_data_u { - mmr_t sh_lb_trigger_data_regval; - struct { - mmr_t reserved_0 : 32; - mmr_t compare_pattern : 32; - } sh_lb_trigger_data_s; -} sh_lb_trigger_data_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_AEC_CONFIG" */ /* PI Adaptive Error Correction Configuration */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_aec_config_u { mmr_t sh_pi_aec_config_regval; struct { @@ -5216,22 +2845,12 @@ typedef union sh_pi_aec_config_u { mmr_t reserved_0 : 61; } sh_pi_aec_config_s; } sh_pi_aec_config_u_t; -#else -typedef union sh_pi_aec_config_u { - mmr_t sh_pi_aec_config_regval; - struct { - mmr_t reserved_0 : 61; - mmr_t mode : 3; - } sh_pi_aec_config_s; -} sh_pi_aec_config_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_AFI_ERROR_MASK" */ /* PI AFI Error Mask */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_afi_error_mask_u { mmr_t sh_pi_afi_error_mask_regval; struct { @@ -5253,36 +2872,12 @@ typedef union sh_pi_afi_error_mask_u { mmr_t reserved_1 : 29; } sh_pi_afi_error_mask_s; } sh_pi_afi_error_mask_u_t; -#else -typedef union sh_pi_afi_error_mask_u { - mmr_t sh_pi_afi_error_mask_regval; - struct { - mmr_t reserved_1 : 29; - mmr_t msg_len : 1; - mmr_t fsb_tbl_miss : 1; - mmr_t bad_snoop : 1; - mmr_t livelock : 1; - mmr_t shub_fsb_ce : 1; - mmr_t shub_fsb_uce : 1; - mmr_t shub_fsb_dqe : 1; - mmr_t addr_parity : 1; - mmr_t req_parity : 1; - mmr_t addr_access : 1; - mmr_t req_format : 1; - mmr_t ioq_overrun : 1; - mmr_t rsp_parity : 1; - mmr_t hung_bus : 1; - mmr_t reserved_0 : 21; - } sh_pi_afi_error_mask_s; -} sh_pi_afi_error_mask_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_AFI_TEST_POINT_COMPARE" */ /* PI AFI Test Point Compare */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_afi_test_point_compare_u { mmr_t sh_pi_afi_test_point_compare_regval; struct { @@ -5290,22 +2885,12 @@ typedef union sh_pi_afi_test_point_compa mmr_t compare_pattern : 32; } sh_pi_afi_test_point_compare_s; } sh_pi_afi_test_point_compare_u_t; -#else -typedef union sh_pi_afi_test_point_compare_u { - mmr_t sh_pi_afi_test_point_compare_regval; - struct { - mmr_t compare_pattern : 32; - mmr_t compare_mask : 32; - } sh_pi_afi_test_point_compare_s; -} sh_pi_afi_test_point_compare_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_AFI_TEST_POINT_SELECT" */ /* PI AFI Test Point Select */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_afi_test_point_select_u { mmr_t sh_pi_afi_test_point_select_regval; struct { @@ -5335,44 +2920,12 @@ typedef union sh_pi_afi_test_point_selec mmr_t trigger_enable : 1; } sh_pi_afi_test_point_select_s; } sh_pi_afi_test_point_select_u_t; -#else -typedef union sh_pi_afi_test_point_select_u { - mmr_t sh_pi_afi_test_point_select_regval; - struct { - mmr_t trigger_enable : 1; - mmr_t nibble7_nibble_sel : 3; - mmr_t nibble7_chiplet_sel : 4; - mmr_t reserved_6 : 1; - mmr_t nibble6_nibble_sel : 3; - mmr_t nibble6_chiplet_sel : 4; - mmr_t reserved_5 : 1; - mmr_t nibble5_nibble_sel : 3; - mmr_t nibble5_chiplet_sel : 4; - mmr_t reserved_4 : 1; - mmr_t nibble4_nibble_sel : 3; - mmr_t nibble4_chiplet_sel : 4; - mmr_t reserved_3 : 1; - mmr_t nibble3_nibble_sel : 3; - mmr_t nibble3_chiplet_sel : 4; - mmr_t reserved_2 : 1; - mmr_t nibble2_nibble_sel : 3; - mmr_t nibble2_chiplet_sel : 4; - mmr_t reserved_1 : 1; - mmr_t nibble1_nibble_sel : 3; - mmr_t nibble1_chiplet_sel : 4; - mmr_t reserved_0 : 1; - mmr_t nibble0_nibble_sel : 3; - mmr_t nibble0_chiplet_sel : 4; - } sh_pi_afi_test_point_select_s; -} sh_pi_afi_test_point_select_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_AFI_TEST_POINT_TRIGGER_SELECT" */ /* PI CRBC Test Point Trigger Select */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_afi_test_point_trigger_select_u { mmr_t sh_pi_afi_test_point_trigger_select_regval; struct { @@ -5402,44 +2955,12 @@ typedef union sh_pi_afi_test_point_trigg mmr_t reserved_7 : 1; } sh_pi_afi_test_point_trigger_select_s; } sh_pi_afi_test_point_trigger_select_u_t; -#else -typedef union sh_pi_afi_test_point_trigger_select_u { - mmr_t sh_pi_afi_test_point_trigger_select_regval; - struct { - mmr_t reserved_7 : 1; - mmr_t trigger7_nibble_sel : 3; - mmr_t trigger7_chiplet_sel : 4; - mmr_t reserved_6 : 1; - mmr_t trigger6_nibble_sel : 3; - mmr_t trigger6_chiplet_sel : 4; - mmr_t reserved_5 : 1; - mmr_t trigger5_nibble_sel : 3; - mmr_t trigger5_chiplet_sel : 4; - mmr_t reserved_4 : 1; - mmr_t trigger4_nibble_sel : 3; - mmr_t trigger4_chiplet_sel : 4; - mmr_t reserved_3 : 1; - mmr_t trigger3_nibble_sel : 3; - mmr_t trigger3_chiplet_sel : 4; - mmr_t reserved_2 : 1; - mmr_t trigger2_nibble_sel : 3; - mmr_t trigger2_chiplet_sel : 4; - mmr_t reserved_1 : 1; - mmr_t trigger1_nibble_sel : 3; - mmr_t trigger1_chiplet_sel : 4; - mmr_t reserved_0 : 1; - mmr_t trigger0_nibble_sel : 3; - mmr_t trigger0_chiplet_sel : 4; - } sh_pi_afi_test_point_trigger_select_s; -} sh_pi_afi_test_point_trigger_select_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_AUTO_REPLY_ENABLE" */ /* PI Auto Reply Enable */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_auto_reply_enable_u { mmr_t sh_pi_auto_reply_enable_regval; struct { @@ -5447,22 +2968,12 @@ typedef union sh_pi_auto_reply_enable_u mmr_t reserved_0 : 63; } sh_pi_auto_reply_enable_s; } sh_pi_auto_reply_enable_u_t; -#else -typedef union sh_pi_auto_reply_enable_u { - mmr_t sh_pi_auto_reply_enable_regval; - struct { - mmr_t reserved_0 : 63; - mmr_t auto_reply_enable : 1; - } sh_pi_auto_reply_enable_s; -} sh_pi_auto_reply_enable_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_CAM_CONTROL" */ /* CRB CAM MMR Access Control */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_cam_control_u { mmr_t sh_pi_cam_control_regval; struct { @@ -5474,26 +2985,12 @@ typedef union sh_pi_cam_control_u { mmr_t start : 1; } sh_pi_cam_control_s; } sh_pi_cam_control_u_t; -#else -typedef union sh_pi_cam_control_u { - mmr_t sh_pi_cam_control_regval; - struct { - mmr_t start : 1; - mmr_t reserved_1 : 53; - mmr_t rrb_rd_xfer_clear : 1; - mmr_t cam_write : 1; - mmr_t reserved_0 : 1; - mmr_t cam_indx : 7; - } sh_pi_cam_control_s; -} sh_pi_cam_control_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_CRBC_TEST_POINT_COMPARE" */ /* PI CRBC Test Point Compare */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_crbc_test_point_compare_u { mmr_t sh_pi_crbc_test_point_compare_regval; struct { @@ -5501,22 +2998,12 @@ typedef union sh_pi_crbc_test_point_comp mmr_t compare_pattern : 32; } sh_pi_crbc_test_point_compare_s; } sh_pi_crbc_test_point_compare_u_t; -#else -typedef union sh_pi_crbc_test_point_compare_u { - mmr_t sh_pi_crbc_test_point_compare_regval; - struct { - mmr_t compare_pattern : 32; - mmr_t compare_mask : 32; - } sh_pi_crbc_test_point_compare_s; -} sh_pi_crbc_test_point_compare_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_CRBC_TEST_POINT_SELECT" */ /* PI CRBC Test Point Select */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_crbc_test_point_select_u { mmr_t sh_pi_crbc_test_point_select_regval; struct { @@ -5554,54 +3041,14 @@ typedef union sh_pi_crbc_test_point_sele mmr_t trigger_enable : 1; } sh_pi_crbc_test_point_select_s; } sh_pi_crbc_test_point_select_u_t; -#else -typedef union sh_pi_crbc_test_point_select_u { - mmr_t sh_pi_crbc_test_point_select_regval; - struct { - mmr_t trigger_enable : 1; - mmr_t nibble7_nibble_sel : 3; - mmr_t reserved_14 : 1; - mmr_t nibble7_chiplet_sel : 3; - mmr_t reserved_13 : 1; - mmr_t nibble6_nibble_sel : 3; - mmr_t reserved_12 : 1; - mmr_t nibble6_chiplet_sel : 3; - mmr_t reserved_11 : 1; - mmr_t nibble5_nibble_sel : 3; - mmr_t reserved_10 : 1; - mmr_t nibble5_chiplet_sel : 3; - mmr_t reserved_9 : 1; - mmr_t nibble4_nibble_sel : 3; - mmr_t reserved_8 : 1; - mmr_t nibble4_chiplet_sel : 3; - mmr_t reserved_7 : 1; - mmr_t nibble3_nibble_sel : 3; - mmr_t reserved_6 : 1; - mmr_t nibble3_chiplet_sel : 3; - mmr_t reserved_5 : 1; - mmr_t nibble2_nibble_sel : 3; - mmr_t reserved_4 : 1; - mmr_t nibble2_chiplet_sel : 3; - mmr_t reserved_3 : 1; - mmr_t nibble1_nibble_sel : 3; - mmr_t reserved_2 : 1; - mmr_t nibble1_chiplet_sel : 3; - mmr_t reserved_1 : 1; - mmr_t nibble0_nibble_sel : 3; - mmr_t reserved_0 : 1; - mmr_t nibble0_chiplet_sel : 3; - } sh_pi_crbc_test_point_select_s; -} sh_pi_crbc_test_point_select_u_t; -#endif - -/* ==================================================================== */ -/* Register "SH_PI_CRBC_TEST_POINT_TRIGGER_SELECT" */ -/* PI CRBC Test Point Trigger Select */ -/* ==================================================================== */ - -#ifdef LITTLE_ENDIAN -typedef union sh_pi_crbc_test_point_trigger_select_u { - mmr_t sh_pi_crbc_test_point_trigger_select_regval; + +/* ==================================================================== */ +/* Register "SH_PI_CRBC_TEST_POINT_TRIGGER_SELECT" */ +/* PI CRBC Test Point Trigger Select */ +/* ==================================================================== */ + +typedef union sh_pi_crbc_test_point_trigger_select_u { + mmr_t sh_pi_crbc_test_point_trigger_select_regval; struct { mmr_t trigger0_chiplet_sel : 3; mmr_t reserved_0 : 1; @@ -5637,52 +3084,12 @@ typedef union sh_pi_crbc_test_point_trig mmr_t reserved_15 : 1; } sh_pi_crbc_test_point_trigger_select_s; } sh_pi_crbc_test_point_trigger_select_u_t; -#else -typedef union sh_pi_crbc_test_point_trigger_select_u { - mmr_t sh_pi_crbc_test_point_trigger_select_regval; - struct { - mmr_t reserved_15 : 1; - mmr_t trigger7_nibble_sel : 3; - mmr_t reserved_14 : 1; - mmr_t trigger7_chiplet_sel : 3; - mmr_t reserved_13 : 1; - mmr_t trigger6_nibble_sel : 3; - mmr_t reserved_12 : 1; - mmr_t trigger6_chiplet_sel : 3; - mmr_t reserved_11 : 1; - mmr_t trigger5_nibble_sel : 3; - mmr_t reserved_10 : 1; - mmr_t trigger5_chiplet_sel : 3; - mmr_t reserved_9 : 1; - mmr_t trigger4_nibble_sel : 3; - mmr_t reserved_8 : 1; - mmr_t trigger4_chiplet_sel : 3; - mmr_t reserved_7 : 1; - mmr_t trigger3_nibble_sel : 3; - mmr_t reserved_6 : 1; - mmr_t trigger3_chiplet_sel : 3; - mmr_t reserved_5 : 1; - mmr_t trigger2_nibble_sel : 3; - mmr_t reserved_4 : 1; - mmr_t trigger2_chiplet_sel : 3; - mmr_t reserved_3 : 1; - mmr_t trigger1_nibble_sel : 3; - mmr_t reserved_2 : 1; - mmr_t trigger1_chiplet_sel : 3; - mmr_t reserved_1 : 1; - mmr_t trigger0_nibble_sel : 3; - mmr_t reserved_0 : 1; - mmr_t trigger0_chiplet_sel : 3; - } sh_pi_crbc_test_point_trigger_select_s; -} sh_pi_crbc_test_point_trigger_select_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_CRBP_ERROR_MASK" */ /* PI CRBP Error Mask */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_crbp_error_mask_u { mmr_t sh_pi_crbp_error_mask_regval; struct { @@ -5710,42 +3117,12 @@ typedef union sh_pi_crbp_error_mask_u { mmr_t reserved_0 : 43; } sh_pi_crbp_error_mask_s; } sh_pi_crbp_error_mask_u_t; -#else -typedef union sh_pi_crbp_error_mask_u { - mmr_t sh_pi_crbp_error_mask_regval; - struct { - mmr_t reserved_0 : 43; - mmr_t xn_rp_crd_oflow : 1; - mmr_t xn_rq_crd_oflow : 1; - mmr_t md_rp_crd_oflow : 1; - mmr_t md_rq_crd_oflow : 1; - mmr_t gfx_int_1 : 1; - mmr_t gfx_int_0 : 1; - mmr_t nack_oflow : 1; - mmr_t xn_rp_q_oflow : 1; - mmr_t xn_rq_q_oflow : 1; - mmr_t md_rp_q_oflow : 1; - mmr_t md_rq_q_oflow : 1; - mmr_t msg_color_err : 1; - mmr_t fsb_shub_ce : 1; - mmr_t fsb_shub_uce : 1; - mmr_t pio_to_err : 1; - mmr_t mem_to_err : 1; - mmr_t pio_rp_err : 1; - mmr_t mem_rp_err : 1; - mmr_t xb_proto_err : 1; - mmr_t gfx_rp_err : 1; - mmr_t fsb_proto_err : 1; - } sh_pi_crbp_error_mask_s; -} sh_pi_crbp_error_mask_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_CRBP_FSB_PIPE_COMPARE" */ /* CRBP FSB Pipe Compare */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_crbp_fsb_pipe_compare_u { mmr_t sh_pi_crbp_fsb_pipe_compare_regval; struct { @@ -5754,23 +3131,12 @@ typedef union sh_pi_crbp_fsb_pipe_compar mmr_t reserved_0 : 11; } sh_pi_crbp_fsb_pipe_compare_s; } sh_pi_crbp_fsb_pipe_compare_u_t; -#else -typedef union sh_pi_crbp_fsb_pipe_compare_u { - mmr_t sh_pi_crbp_fsb_pipe_compare_regval; - struct { - mmr_t reserved_0 : 11; - mmr_t compare_req : 6; - mmr_t compare_address : 47; - } sh_pi_crbp_fsb_pipe_compare_s; -} sh_pi_crbp_fsb_pipe_compare_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_CRBP_FSB_PIPE_MASK" */ /* CRBP Compare Mask */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_crbp_fsb_pipe_mask_u { mmr_t sh_pi_crbp_fsb_pipe_mask_regval; struct { @@ -5779,23 +3145,12 @@ typedef union sh_pi_crbp_fsb_pipe_mask_u mmr_t reserved_0 : 11; } sh_pi_crbp_fsb_pipe_mask_s; } sh_pi_crbp_fsb_pipe_mask_u_t; -#else -typedef union sh_pi_crbp_fsb_pipe_mask_u { - mmr_t sh_pi_crbp_fsb_pipe_mask_regval; - struct { - mmr_t reserved_0 : 11; - mmr_t compare_req_mask : 6; - mmr_t compare_address_mask : 47; - } sh_pi_crbp_fsb_pipe_mask_s; -} sh_pi_crbp_fsb_pipe_mask_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_CRBP_TEST_POINT_COMPARE" */ /* PI CRBP Test Point Compare */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_crbp_test_point_compare_u { mmr_t sh_pi_crbp_test_point_compare_regval; struct { @@ -5803,22 +3158,12 @@ typedef union sh_pi_crbp_test_point_comp mmr_t compare_pattern : 32; } sh_pi_crbp_test_point_compare_s; } sh_pi_crbp_test_point_compare_u_t; -#else -typedef union sh_pi_crbp_test_point_compare_u { - mmr_t sh_pi_crbp_test_point_compare_regval; - struct { - mmr_t compare_pattern : 32; - mmr_t compare_mask : 32; - } sh_pi_crbp_test_point_compare_s; -} sh_pi_crbp_test_point_compare_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_CRBP_TEST_POINT_SELECT" */ /* PI CRBP Test Point Select */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_crbp_test_point_select_u { mmr_t sh_pi_crbp_test_point_select_regval; struct { @@ -5856,52 +3201,12 @@ typedef union sh_pi_crbp_test_point_sele mmr_t trigger_enable : 1; } sh_pi_crbp_test_point_select_s; } sh_pi_crbp_test_point_select_u_t; -#else -typedef union sh_pi_crbp_test_point_select_u { - mmr_t sh_pi_crbp_test_point_select_regval; - struct { - mmr_t trigger_enable : 1; - mmr_t nibble7_nibble_sel : 3; - mmr_t reserved_14 : 1; - mmr_t nibble7_chiplet_sel : 3; - mmr_t reserved_13 : 1; - mmr_t nibble6_nibble_sel : 3; - mmr_t reserved_12 : 1; - mmr_t nibble6_chiplet_sel : 3; - mmr_t reserved_11 : 1; - mmr_t nibble5_nibble_sel : 3; - mmr_t reserved_10 : 1; - mmr_t nibble5_chiplet_sel : 3; - mmr_t reserved_9 : 1; - mmr_t nibble4_nibble_sel : 3; - mmr_t reserved_8 : 1; - mmr_t nibble4_chiplet_sel : 3; - mmr_t reserved_7 : 1; - mmr_t nibble3_nibble_sel : 3; - mmr_t reserved_6 : 1; - mmr_t nibble3_chiplet_sel : 3; - mmr_t reserved_5 : 1; - mmr_t nibble2_nibble_sel : 3; - mmr_t reserved_4 : 1; - mmr_t nibble2_chiplet_sel : 3; - mmr_t reserved_3 : 1; - mmr_t nibble1_nibble_sel : 3; - mmr_t reserved_2 : 1; - mmr_t nibble1_chiplet_sel : 3; - mmr_t reserved_1 : 1; - mmr_t nibble0_nibble_sel : 3; - mmr_t reserved_0 : 1; - mmr_t nibble0_chiplet_sel : 3; - } sh_pi_crbp_test_point_select_s; -} sh_pi_crbp_test_point_select_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_CRBP_TEST_POINT_TRIGGER_SELECT" */ /* PI CRBP Test Point Trigger Select */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_crbp_test_point_trigger_select_u { mmr_t sh_pi_crbp_test_point_trigger_select_regval; struct { @@ -5939,52 +3244,12 @@ typedef union sh_pi_crbp_test_point_trig mmr_t reserved_15 : 1; } sh_pi_crbp_test_point_trigger_select_s; } sh_pi_crbp_test_point_trigger_select_u_t; -#else -typedef union sh_pi_crbp_test_point_trigger_select_u { - mmr_t sh_pi_crbp_test_point_trigger_select_regval; - struct { - mmr_t reserved_15 : 1; - mmr_t trigger7_nibble_sel : 3; - mmr_t reserved_14 : 1; - mmr_t trigger7_chiplet_sel : 3; - mmr_t reserved_13 : 1; - mmr_t trigger6_nibble_sel : 3; - mmr_t reserved_12 : 1; - mmr_t trigger6_chiplet_sel : 3; - mmr_t reserved_11 : 1; - mmr_t trigger5_nibble_sel : 3; - mmr_t reserved_10 : 1; - mmr_t trigger5_chiplet_sel : 3; - mmr_t reserved_9 : 1; - mmr_t trigger4_nibble_sel : 3; - mmr_t reserved_8 : 1; - mmr_t trigger4_chiplet_sel : 3; - mmr_t reserved_7 : 1; - mmr_t trigger3_nibble_sel : 3; - mmr_t reserved_6 : 1; - mmr_t trigger3_chiplet_sel : 3; - mmr_t reserved_5 : 1; - mmr_t trigger2_nibble_sel : 3; - mmr_t reserved_4 : 1; - mmr_t trigger2_chiplet_sel : 3; - mmr_t reserved_3 : 1; - mmr_t trigger1_nibble_sel : 3; - mmr_t reserved_2 : 1; - mmr_t trigger1_chiplet_sel : 3; - mmr_t reserved_1 : 1; - mmr_t trigger0_nibble_sel : 3; - mmr_t reserved_0 : 1; - mmr_t trigger0_chiplet_sel : 3; - } sh_pi_crbp_test_point_trigger_select_s; -} sh_pi_crbp_test_point_trigger_select_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_CRBP_XB_PIPE_COMPARE_0" */ /* CRBP XB Pipe Compare */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_crbp_xb_pipe_compare_0_u { mmr_t sh_pi_crbp_xb_pipe_compare_0_regval; struct { @@ -5993,23 +3258,12 @@ typedef union sh_pi_crbp_xb_pipe_compare mmr_t reserved_0 : 9; } sh_pi_crbp_xb_pipe_compare_0_s; } sh_pi_crbp_xb_pipe_compare_0_u_t; -#else -typedef union sh_pi_crbp_xb_pipe_compare_0_u { - mmr_t sh_pi_crbp_xb_pipe_compare_0_regval; - struct { - mmr_t reserved_0 : 9; - mmr_t compare_command : 8; - mmr_t compare_address : 47; - } sh_pi_crbp_xb_pipe_compare_0_s; -} sh_pi_crbp_xb_pipe_compare_0_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_CRBP_XB_PIPE_COMPARE_1" */ /* CRBP XB Pipe Compare */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_crbp_xb_pipe_compare_1_u { mmr_t sh_pi_crbp_xb_pipe_compare_1_regval; struct { @@ -6021,26 +3275,12 @@ typedef union sh_pi_crbp_xb_pipe_compare mmr_t reserved_2 : 23; } sh_pi_crbp_xb_pipe_compare_1_s; } sh_pi_crbp_xb_pipe_compare_1_u_t; -#else -typedef union sh_pi_crbp_xb_pipe_compare_1_u { - mmr_t sh_pi_crbp_xb_pipe_compare_1_regval; - struct { - mmr_t reserved_2 : 23; - mmr_t compare_echo : 9; - mmr_t reserved_1 : 2; - mmr_t compare_supplemental : 14; - mmr_t reserved_0 : 2; - mmr_t compare_source : 14; - } sh_pi_crbp_xb_pipe_compare_1_s; -} sh_pi_crbp_xb_pipe_compare_1_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_CRBP_XB_PIPE_MASK_0" */ /* CRBP Compare Mask Register 1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_crbp_xb_pipe_mask_0_u { mmr_t sh_pi_crbp_xb_pipe_mask_0_regval; struct { @@ -6049,23 +3289,12 @@ typedef union sh_pi_crbp_xb_pipe_mask_0_ mmr_t reserved_0 : 9; } sh_pi_crbp_xb_pipe_mask_0_s; } sh_pi_crbp_xb_pipe_mask_0_u_t; -#else -typedef union sh_pi_crbp_xb_pipe_mask_0_u { - mmr_t sh_pi_crbp_xb_pipe_mask_0_regval; - struct { - mmr_t reserved_0 : 9; - mmr_t compare_command_mask : 8; - mmr_t compare_address_mask : 47; - } sh_pi_crbp_xb_pipe_mask_0_s; -} sh_pi_crbp_xb_pipe_mask_0_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_CRBP_XB_PIPE_MASK_1" */ /* CRBP XB Pipe Compare Mask Register 1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_crbp_xb_pipe_mask_1_u { mmr_t sh_pi_crbp_xb_pipe_mask_1_regval; struct { @@ -6077,26 +3306,12 @@ typedef union sh_pi_crbp_xb_pipe_mask_1_ mmr_t reserved_2 : 23; } sh_pi_crbp_xb_pipe_mask_1_s; } sh_pi_crbp_xb_pipe_mask_1_u_t; -#else -typedef union sh_pi_crbp_xb_pipe_mask_1_u { - mmr_t sh_pi_crbp_xb_pipe_mask_1_regval; - struct { - mmr_t reserved_2 : 23; - mmr_t compare_echo_mask : 9; - mmr_t reserved_1 : 2; - mmr_t compare_supplemental_mask : 14; - mmr_t reserved_0 : 2; - mmr_t compare_source_mask : 14; - } sh_pi_crbp_xb_pipe_mask_1_s; -} sh_pi_crbp_xb_pipe_mask_1_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_DPC_QUEUE_CONFIG" */ /* DPC Queue Configuration */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_dpc_queue_config_u { mmr_t sh_pi_dpc_queue_config_regval; struct { @@ -6110,28 +3325,12 @@ typedef union sh_pi_dpc_queue_config_u { mmr_t reserved_3 : 35; } sh_pi_dpc_queue_config_s; } sh_pi_dpc_queue_config_u_t; -#else -typedef union sh_pi_dpc_queue_config_u { - mmr_t sh_pi_dpc_queue_config_regval; - struct { - mmr_t reserved_3 : 35; - mmr_t fwcq_af_thresh : 5; - mmr_t reserved_2 : 3; - mmr_t fwcq_ae_level : 5; - mmr_t reserved_1 : 3; - mmr_t dwcq_af_thresh : 5; - mmr_t reserved_0 : 3; - mmr_t dwcq_ae_level : 5; - } sh_pi_dpc_queue_config_s; -} sh_pi_dpc_queue_config_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_ERROR_MASK" */ /* PI Error Mask */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_error_mask_u { mmr_t sh_pi_error_mask_regval; struct { @@ -6173,56 +3372,12 @@ typedef union sh_pi_error_mask_u { mmr_t reserved_0 : 29; } sh_pi_error_mask_s; } sh_pi_error_mask_u_t; -#else -typedef union sh_pi_error_mask_u { - mmr_t sh_pi_error_mask_regval; - struct { - mmr_t reserved_0 : 29; - mmr_t msg_length : 1; - mmr_t fsb_tbl_miss : 1; - mmr_t bad_snoop : 1; - mmr_t livelock : 1; - mmr_t shub_fsb_ce : 1; - mmr_t shub_fsb_uce : 1; - mmr_t shub_fsb_dqe : 1; - mmr_t addr_parity : 1; - mmr_t req_parity : 1; - mmr_t addr_access : 1; - mmr_t req_format : 1; - mmr_t ioq_overrun : 1; - mmr_t rsp_parity : 1; - mmr_t hung_bus : 1; - mmr_t xn_rp_crd_oflow : 1; - mmr_t xn_rq_crd_oflow : 1; - mmr_t md_rp_crd_oflow : 1; - mmr_t md_rq_crd_oflow : 1; - mmr_t gfx_int_1 : 1; - mmr_t gfx_int_0 : 1; - mmr_t nack_oflow : 1; - mmr_t xn_rp_q_oflow : 1; - mmr_t xn_rq_q_oflow : 1; - mmr_t md_rp_q_oflow : 1; - mmr_t md_rq_q_oflow : 1; - mmr_t msg_color_err : 1; - mmr_t fsb_shub_ce : 1; - mmr_t fsb_shub_uce : 1; - mmr_t pio_to_err : 1; - mmr_t mem_to_err : 1; - mmr_t pio_rp_err : 1; - mmr_t mem_rp_err : 1; - mmr_t xb_proto_err : 1; - mmr_t gfx_rp_err : 1; - mmr_t fsb_proto_err : 1; - } sh_pi_error_mask_s; -} sh_pi_error_mask_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_EXPRESS_REPLY_CONFIG" */ /* PI Express Reply Configuration */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_express_reply_config_u { mmr_t sh_pi_express_reply_config_regval; struct { @@ -6230,64 +3385,36 @@ typedef union sh_pi_express_reply_config mmr_t reserved_0 : 61; } sh_pi_express_reply_config_s; } sh_pi_express_reply_config_u_t; -#else -typedef union sh_pi_express_reply_config_u { - mmr_t sh_pi_express_reply_config_regval; - struct { - mmr_t reserved_0 : 61; - mmr_t mode : 3; - } sh_pi_express_reply_config_s; -} sh_pi_express_reply_config_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_FSB_COMPARE_VALUE" */ /* FSB Compare Value */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_pi_fsb_compare_value_u { - mmr_t sh_pi_fsb_compare_value_regval; - struct { - mmr_t compare_value : 64; - } sh_pi_fsb_compare_value_s; -} sh_pi_fsb_compare_value_u_t; -#else typedef union sh_pi_fsb_compare_value_u { mmr_t sh_pi_fsb_compare_value_regval; struct { mmr_t compare_value : 64; } sh_pi_fsb_compare_value_s; } sh_pi_fsb_compare_value_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_FSB_COMPARE_MASK" */ /* FSB Compare Mask */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_fsb_compare_mask_u { mmr_t sh_pi_fsb_compare_mask_regval; struct { mmr_t mask_value : 64; } sh_pi_fsb_compare_mask_s; } sh_pi_fsb_compare_mask_u_t; -#else -typedef union sh_pi_fsb_compare_mask_u { - mmr_t sh_pi_fsb_compare_mask_regval; - struct { - mmr_t mask_value : 64; - } sh_pi_fsb_compare_mask_s; -} sh_pi_fsb_compare_mask_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_FSB_ERROR_INJECTION" */ /* Inject an Error onto the FSB */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_fsb_error_injection_u { mmr_t sh_pi_fsb_error_injection_regval; struct { @@ -6321,48 +3448,12 @@ typedef union sh_pi_fsb_error_injection_ mmr_t reserved_2 : 29; } sh_pi_fsb_error_injection_s; } sh_pi_fsb_error_injection_u_t; -#else -typedef union sh_pi_fsb_error_injection_u { - mmr_t sh_pi_fsb_error_injection_regval; - struct { - mmr_t reserved_2 : 29; - mmr_t bus_hang : 1; - mmr_t livelock : 1; - mmr_t ioq_overrun : 1; - mmr_t reserved_1 : 4; - mmr_t dw3_uce_from_fsb : 1; - mmr_t dw3_ce_from_fsb : 1; - mmr_t dw2_uce_from_fsb : 1; - mmr_t dw2_ce_from_fsb : 1; - mmr_t dw1_uce_from_fsb : 1; - mmr_t dw1_ce_from_fsb : 1; - mmr_t dw0_uce_from_fsb : 1; - mmr_t dw0_ce_from_fsb : 1; - mmr_t rsp_pe_from_fsb : 1; - mmr_t ap1_pe_from_fsb : 1; - mmr_t ap0_pe_from_fsb : 1; - mmr_t rp_pe_from_fsb : 1; - mmr_t reserved_0 : 6; - mmr_t ip1_pe_to_fsb : 1; - mmr_t ip0_pe_to_fsb : 1; - mmr_t dw1_uce_to_fsb : 1; - mmr_t dw1_ce_to_fsb : 1; - mmr_t dw0_uce_to_fsb : 1; - mmr_t dw0_ce_to_fsb : 1; - mmr_t rsp_pe_to_fsb : 1; - mmr_t ap1_pe_to_fsb : 1; - mmr_t ap0_pe_to_fsb : 1; - mmr_t rp_pe_to_fsb : 1; - } sh_pi_fsb_error_injection_s; -} sh_pi_fsb_error_injection_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_MD2PI_REPLY_VC_CONFIG" */ /* MD-to-PI Reply Virtual Channel Configuration */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_md2pi_reply_vc_config_u { mmr_t sh_pi_md2pi_reply_vc_config_regval; struct { @@ -6374,26 +3465,12 @@ typedef union sh_pi_md2pi_reply_vc_confi mmr_t capture_credit_status : 1; } sh_pi_md2pi_reply_vc_config_s; } sh_pi_md2pi_reply_vc_config_u_t; -#else -typedef union sh_pi_md2pi_reply_vc_config_u { - mmr_t sh_pi_md2pi_reply_vc_config_regval; - struct { - mmr_t capture_credit_status : 1; - mmr_t force_credit : 1; - mmr_t reserved_0 : 48; - mmr_t max_credits : 6; - mmr_t data_depth : 4; - mmr_t hdr_depth : 4; - } sh_pi_md2pi_reply_vc_config_s; -} sh_pi_md2pi_reply_vc_config_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_MD2PI_REQUEST_VC_CONFIG" */ /* MD-to-PI Request Virtual Channel Configuration */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_md2pi_request_vc_config_u { mmr_t sh_pi_md2pi_request_vc_config_regval; struct { @@ -6405,26 +3482,12 @@ typedef union sh_pi_md2pi_request_vc_con mmr_t capture_credit_status : 1; } sh_pi_md2pi_request_vc_config_s; } sh_pi_md2pi_request_vc_config_u_t; -#else -typedef union sh_pi_md2pi_request_vc_config_u { - mmr_t sh_pi_md2pi_request_vc_config_regval; - struct { - mmr_t capture_credit_status : 1; - mmr_t force_credit : 1; - mmr_t reserved_0 : 48; - mmr_t max_credits : 6; - mmr_t data_depth : 4; - mmr_t hdr_depth : 4; - } sh_pi_md2pi_request_vc_config_s; -} sh_pi_md2pi_request_vc_config_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_QUEUE_ERROR_INJECTION" */ /* PI Queue Error Injection */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_queue_error_injection_u { mmr_t sh_pi_queue_error_injection_regval; struct { @@ -6439,29 +3502,12 @@ typedef union sh_pi_queue_error_injectio mmr_t reserved_0 : 56; } sh_pi_queue_error_injection_s; } sh_pi_queue_error_injection_u_t; -#else -typedef union sh_pi_queue_error_injection_u { - mmr_t sh_pi_queue_error_injection_regval; - struct { - mmr_t reserved_0 : 56; - mmr_t xnpi_rpy_bfr : 1; - mmr_t rxl_rdy_q : 1; - mmr_t rxl_kill_q : 1; - mmr_t ptc_intr : 1; - mmr_t mdpi_rpy_bfr : 1; - mmr_t fsb_wtl_cmnd_q : 1; - mmr_t dxb_wtl_cmnd_q : 1; - mmr_t dat_dfr_q : 1; - } sh_pi_queue_error_injection_s; -} sh_pi_queue_error_injection_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_TEST_POINT_COMPARE" */ /* PI Test Point Compare */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_test_point_compare_u { mmr_t sh_pi_test_point_compare_regval; struct { @@ -6469,22 +3515,12 @@ typedef union sh_pi_test_point_compare_u mmr_t compare_pattern : 32; } sh_pi_test_point_compare_s; } sh_pi_test_point_compare_u_t; -#else -typedef union sh_pi_test_point_compare_u { - mmr_t sh_pi_test_point_compare_regval; - struct { - mmr_t compare_pattern : 32; - mmr_t compare_mask : 32; - } sh_pi_test_point_compare_s; -} sh_pi_test_point_compare_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_TEST_POINT_SELECT" */ /* PI Test Point Select */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_test_point_select_u { mmr_t sh_pi_test_point_select_regval; struct { @@ -6522,52 +3558,12 @@ typedef union sh_pi_test_point_select_u mmr_t trigger_enable : 1; } sh_pi_test_point_select_s; } sh_pi_test_point_select_u_t; -#else -typedef union sh_pi_test_point_select_u { - mmr_t sh_pi_test_point_select_regval; - struct { - mmr_t trigger_enable : 1; - mmr_t nibble7_nibble_sel : 3; - mmr_t reserved_14 : 1; - mmr_t nibble7_chiplet_sel : 3; - mmr_t reserved_13 : 1; - mmr_t nibble6_nibble_sel : 3; - mmr_t reserved_12 : 1; - mmr_t nibble6_chiplet_sel : 3; - mmr_t reserved_11 : 1; - mmr_t nibble5_nibble_sel : 3; - mmr_t reserved_10 : 1; - mmr_t nibble5_chiplet_sel : 3; - mmr_t reserved_9 : 1; - mmr_t nibble4_nibble_sel : 3; - mmr_t reserved_8 : 1; - mmr_t nibble4_chiplet_sel : 3; - mmr_t reserved_7 : 1; - mmr_t nibble3_nibble_sel : 3; - mmr_t reserved_6 : 1; - mmr_t nibble3_chiplet_sel : 3; - mmr_t reserved_5 : 1; - mmr_t nibble2_nibble_sel : 3; - mmr_t reserved_4 : 1; - mmr_t nibble2_chiplet_sel : 3; - mmr_t reserved_3 : 1; - mmr_t nibble1_nibble_sel : 3; - mmr_t reserved_2 : 1; - mmr_t nibble1_chiplet_sel : 3; - mmr_t reserved_1 : 1; - mmr_t nibble0_nibble_sel : 3; - mmr_t reserved_0 : 1; - mmr_t nibble0_chiplet_sel : 3; - } sh_pi_test_point_select_s; -} sh_pi_test_point_select_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_TEST_POINT_TRIGGER_SELECT" */ /* PI Test Point Trigger Select */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_test_point_trigger_select_u { mmr_t sh_pi_test_point_trigger_select_regval; struct { @@ -6605,52 +3601,12 @@ typedef union sh_pi_test_point_trigger_s mmr_t reserved_15 : 1; } sh_pi_test_point_trigger_select_s; } sh_pi_test_point_trigger_select_u_t; -#else -typedef union sh_pi_test_point_trigger_select_u { - mmr_t sh_pi_test_point_trigger_select_regval; - struct { - mmr_t reserved_15 : 1; - mmr_t trigger7_nibble_sel : 3; - mmr_t reserved_14 : 1; - mmr_t trigger7_chiplet_sel : 3; - mmr_t reserved_13 : 1; - mmr_t trigger6_nibble_sel : 3; - mmr_t reserved_12 : 1; - mmr_t trigger6_chiplet_sel : 3; - mmr_t reserved_11 : 1; - mmr_t trigger5_nibble_sel : 3; - mmr_t reserved_10 : 1; - mmr_t trigger5_chiplet_sel : 3; - mmr_t reserved_9 : 1; - mmr_t trigger4_nibble_sel : 3; - mmr_t reserved_8 : 1; - mmr_t trigger4_chiplet_sel : 3; - mmr_t reserved_7 : 1; - mmr_t trigger3_nibble_sel : 3; - mmr_t reserved_6 : 1; - mmr_t trigger3_chiplet_sel : 3; - mmr_t reserved_5 : 1; - mmr_t trigger2_nibble_sel : 3; - mmr_t reserved_4 : 1; - mmr_t trigger2_chiplet_sel : 3; - mmr_t reserved_3 : 1; - mmr_t trigger1_nibble_sel : 3; - mmr_t reserved_2 : 1; - mmr_t trigger1_chiplet_sel : 3; - mmr_t reserved_1 : 1; - mmr_t trigger0_nibble_sel : 3; - mmr_t reserved_0 : 1; - mmr_t trigger0_chiplet_sel : 3; - } sh_pi_test_point_trigger_select_s; -} sh_pi_test_point_trigger_select_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_XN2PI_REPLY_VC_CONFIG" */ /* XN-to-PI Reply Virtual Channel Configuration */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_xn2pi_reply_vc_config_u { mmr_t sh_pi_xn2pi_reply_vc_config_regval; struct { @@ -6662,26 +3618,12 @@ typedef union sh_pi_xn2pi_reply_vc_confi mmr_t capture_credit_status : 1; } sh_pi_xn2pi_reply_vc_config_s; } sh_pi_xn2pi_reply_vc_config_u_t; -#else -typedef union sh_pi_xn2pi_reply_vc_config_u { - mmr_t sh_pi_xn2pi_reply_vc_config_regval; - struct { - mmr_t capture_credit_status : 1; - mmr_t force_credit : 1; - mmr_t reserved_0 : 48; - mmr_t max_credits : 6; - mmr_t data_depth : 4; - mmr_t hdr_depth : 4; - } sh_pi_xn2pi_reply_vc_config_s; -} sh_pi_xn2pi_reply_vc_config_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_XN2PI_REQUEST_VC_CONFIG" */ /* XN-to-PI Request Virtual Channel Configuration */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_xn2pi_request_vc_config_u { mmr_t sh_pi_xn2pi_request_vc_config_regval; struct { @@ -6693,26 +3635,12 @@ typedef union sh_pi_xn2pi_request_vc_con mmr_t capture_credit_status : 1; } sh_pi_xn2pi_request_vc_config_s; } sh_pi_xn2pi_request_vc_config_u_t; -#else -typedef union sh_pi_xn2pi_request_vc_config_u { - mmr_t sh_pi_xn2pi_request_vc_config_regval; - struct { - mmr_t capture_credit_status : 1; - mmr_t force_credit : 1; - mmr_t reserved_0 : 48; - mmr_t max_credits : 6; - mmr_t data_depth : 4; - mmr_t hdr_depth : 4; - } sh_pi_xn2pi_request_vc_config_s; -} sh_pi_xn2pi_request_vc_config_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_AEC_STATUS" */ /* PI Adaptive Error Correction Status */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_aec_status_u { mmr_t sh_pi_aec_status_regval; struct { @@ -6720,22 +3648,12 @@ typedef union sh_pi_aec_status_u { mmr_t reserved_0 : 61; } sh_pi_aec_status_s; } sh_pi_aec_status_u_t; -#else -typedef union sh_pi_aec_status_u { - mmr_t sh_pi_aec_status_regval; - struct { - mmr_t reserved_0 : 61; - mmr_t state : 3; - } sh_pi_aec_status_s; -} sh_pi_aec_status_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_AFI_FIRST_ERROR" */ /* PI AFI First Error */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_afi_first_error_u { mmr_t sh_pi_afi_first_error_regval; struct { @@ -6760,85 +3678,38 @@ typedef union sh_pi_afi_first_error_u { mmr_t reserved_2 : 29; } sh_pi_afi_first_error_s; } sh_pi_afi_first_error_u_t; -#else -typedef union sh_pi_afi_first_error_u { - mmr_t sh_pi_afi_first_error_regval; - struct { - mmr_t reserved_2 : 29; - mmr_t msg_len : 1; - mmr_t fsb_tbl_miss : 1; - mmr_t bad_snoop : 1; - mmr_t livelock : 1; - mmr_t shub_fsb_ce : 1; - mmr_t shub_fsb_uce : 1; - mmr_t shub_fsb_dqe : 1; - mmr_t addr_parity : 1; - mmr_t req_parity : 1; - mmr_t addr_access : 1; - mmr_t req_format : 1; - mmr_t ioq_overrun : 1; - mmr_t rsp_parity : 1; - mmr_t hung_bus : 1; - mmr_t reserved_1 : 12; - mmr_t fsb_shub_ce : 1; - mmr_t fsb_shub_uce : 1; - mmr_t reserved_0 : 7; - } sh_pi_afi_first_error_s; -} sh_pi_afi_first_error_u_t; -#endif - -/* ==================================================================== */ -/* Register "SH_PI_CAM_ADDRESS_READ_DATA" */ -/* CRB CAM MMR Address Read Data */ -/* ==================================================================== */ - -#ifdef LITTLE_ENDIAN -typedef union sh_pi_cam_address_read_data_u { - mmr_t sh_pi_cam_address_read_data_regval; + +/* ==================================================================== */ +/* Register "SH_PI_CAM_ADDRESS_READ_DATA" */ +/* CRB CAM MMR Address Read Data */ +/* ==================================================================== */ + +typedef union sh_pi_cam_address_read_data_u { + mmr_t sh_pi_cam_address_read_data_regval; struct { mmr_t cam_addr : 48; mmr_t reserved_0 : 15; mmr_t cam_addr_val : 1; } sh_pi_cam_address_read_data_s; } sh_pi_cam_address_read_data_u_t; -#else -typedef union sh_pi_cam_address_read_data_u { - mmr_t sh_pi_cam_address_read_data_regval; - struct { - mmr_t cam_addr_val : 1; - mmr_t reserved_0 : 15; - mmr_t cam_addr : 48; - } sh_pi_cam_address_read_data_s; -} sh_pi_cam_address_read_data_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_CAM_LPRA_READ_DATA" */ /* CRB CAM MMR LPRA Read Data */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_pi_cam_lpra_read_data_u { - mmr_t sh_pi_cam_lpra_read_data_regval; - struct { - mmr_t cam_lpra : 64; - } sh_pi_cam_lpra_read_data_s; -} sh_pi_cam_lpra_read_data_u_t; -#else typedef union sh_pi_cam_lpra_read_data_u { mmr_t sh_pi_cam_lpra_read_data_regval; struct { mmr_t cam_lpra : 64; } sh_pi_cam_lpra_read_data_s; } sh_pi_cam_lpra_read_data_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_CAM_STATE_READ_DATA" */ /* CRB CAM MMR State Read Data */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_cam_state_read_data_u { mmr_t sh_pi_cam_state_read_data_regval; struct { @@ -6851,27 +3722,12 @@ typedef union sh_pi_cam_state_read_data_ mmr_t cam_rd_data_val : 1; } sh_pi_cam_state_read_data_s; } sh_pi_cam_state_read_data_u_t; -#else -typedef union sh_pi_cam_state_read_data_u { - mmr_t sh_pi_cam_state_read_data_regval; - struct { - mmr_t cam_rd_data_val : 1; - mmr_t reserved_1 : 13; - mmr_t cam_lpra : 18; - mmr_t reserved_0 : 26; - mmr_t cam_state_rd_pend : 1; - mmr_t cam_to : 1; - mmr_t cam_state : 4; - } sh_pi_cam_state_read_data_s; -} sh_pi_cam_state_read_data_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_CORRECTED_DETAIL_1" */ /* PI Corrected Error Detail */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_corrected_detail_1_u { mmr_t sh_pi_corrected_detail_1_regval; struct { @@ -6880,44 +3736,24 @@ typedef union sh_pi_corrected_detail_1_u mmr_t dep : 8; } sh_pi_corrected_detail_1_s; } sh_pi_corrected_detail_1_u_t; -#else -typedef union sh_pi_corrected_detail_1_u { - mmr_t sh_pi_corrected_detail_1_regval; - struct { - mmr_t dep : 8; - mmr_t syndrome : 8; - mmr_t address : 48; - } sh_pi_corrected_detail_1_s; -} sh_pi_corrected_detail_1_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_CORRECTED_DETAIL_2" */ /* PI Corrected Error Detail 2 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_pi_corrected_detail_2_u { - mmr_t sh_pi_corrected_detail_2_regval; - struct { - mmr_t data : 64; - } sh_pi_corrected_detail_2_s; -} sh_pi_corrected_detail_2_u_t; -#else typedef union sh_pi_corrected_detail_2_u { mmr_t sh_pi_corrected_detail_2_regval; struct { mmr_t data : 64; } sh_pi_corrected_detail_2_s; } sh_pi_corrected_detail_2_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_CORRECTED_DETAIL_3" */ /* PI Corrected Error Detail 3 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_corrected_detail_3_u { mmr_t sh_pi_corrected_detail_3_regval; struct { @@ -6926,44 +3762,24 @@ typedef union sh_pi_corrected_detail_3_u mmr_t dep : 8; } sh_pi_corrected_detail_3_s; } sh_pi_corrected_detail_3_u_t; -#else -typedef union sh_pi_corrected_detail_3_u { - mmr_t sh_pi_corrected_detail_3_regval; - struct { - mmr_t dep : 8; - mmr_t syndrome : 8; - mmr_t address : 48; - } sh_pi_corrected_detail_3_s; -} sh_pi_corrected_detail_3_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_CORRECTED_DETAIL_4" */ /* PI Corrected Error Detail 4 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_pi_corrected_detail_4_u { - mmr_t sh_pi_corrected_detail_4_regval; - struct { - mmr_t data : 64; - } sh_pi_corrected_detail_4_s; -} sh_pi_corrected_detail_4_u_t; -#else typedef union sh_pi_corrected_detail_4_u { mmr_t sh_pi_corrected_detail_4_regval; struct { mmr_t data : 64; } sh_pi_corrected_detail_4_s; } sh_pi_corrected_detail_4_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_CRBP_FIRST_ERROR" */ /* PI CRBP First Error */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_crbp_first_error_u { mmr_t sh_pi_crbp_first_error_regval; struct { @@ -6991,84 +3807,36 @@ typedef union sh_pi_crbp_first_error_u { mmr_t reserved_0 : 43; } sh_pi_crbp_first_error_s; } sh_pi_crbp_first_error_u_t; -#else -typedef union sh_pi_crbp_first_error_u { - mmr_t sh_pi_crbp_first_error_regval; - struct { - mmr_t reserved_0 : 43; - mmr_t xn_rp_crd_oflow : 1; - mmr_t xn_rq_crd_oflow : 1; - mmr_t md_rp_crd_oflow : 1; - mmr_t md_rq_crd_oflow : 1; - mmr_t gfx_int_1 : 1; - mmr_t gfx_int_0 : 1; - mmr_t nack_oflow : 1; - mmr_t xn_rp_q_oflow : 1; - mmr_t xn_rq_q_oflow : 1; - mmr_t md_rp_q_oflow : 1; - mmr_t md_rq_q_oflow : 1; - mmr_t msg_color_err : 1; - mmr_t fsb_shub_ce : 1; - mmr_t fsb_shub_uce : 1; - mmr_t pio_to_err : 1; - mmr_t mem_to_err : 1; - mmr_t pio_rp_err : 1; - mmr_t mem_rp_err : 1; - mmr_t xb_proto_err : 1; - mmr_t gfx_rp_err : 1; - mmr_t fsb_proto_err : 1; - } sh_pi_crbp_first_error_s; -} sh_pi_crbp_first_error_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_ERROR_DETAIL_1" */ /* PI Error Detail 1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_pi_error_detail_1_u { - mmr_t sh_pi_error_detail_1_regval; - struct { - mmr_t status : 64; - } sh_pi_error_detail_1_s; -} sh_pi_error_detail_1_u_t; -#else typedef union sh_pi_error_detail_1_u { mmr_t sh_pi_error_detail_1_regval; struct { mmr_t status : 64; } sh_pi_error_detail_1_s; } sh_pi_error_detail_1_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_ERROR_DETAIL_2" */ /* PI Error Detail 2 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_error_detail_2_u { mmr_t sh_pi_error_detail_2_regval; struct { mmr_t status : 64; } sh_pi_error_detail_2_s; } sh_pi_error_detail_2_u_t; -#else -typedef union sh_pi_error_detail_2_u { - mmr_t sh_pi_error_detail_2_regval; - struct { - mmr_t status : 64; - } sh_pi_error_detail_2_s; -} sh_pi_error_detail_2_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_ERROR_OVERFLOW" */ /* PI Error Overflow */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_error_overflow_u { mmr_t sh_pi_error_overflow_regval; struct { @@ -7110,56 +3878,12 @@ typedef union sh_pi_error_overflow_u { mmr_t reserved_0 : 29; } sh_pi_error_overflow_s; } sh_pi_error_overflow_u_t; -#else -typedef union sh_pi_error_overflow_u { - mmr_t sh_pi_error_overflow_regval; - struct { - mmr_t reserved_0 : 29; - mmr_t msg_length : 1; - mmr_t fsb_tbl_miss : 1; - mmr_t bad_snoop : 1; - mmr_t livelock : 1; - mmr_t shub_fsb_ce : 1; - mmr_t shub_fsb_uce : 1; - mmr_t shub_fsb_dqe : 1; - mmr_t addr_parity : 1; - mmr_t req_parity : 1; - mmr_t addr_access : 1; - mmr_t req_format : 1; - mmr_t ioq_overrun : 1; - mmr_t rsp_parity : 1; - mmr_t hung_bus : 1; - mmr_t xn_rp_crd_oflow : 1; - mmr_t xn_rq_crd_oflow : 1; - mmr_t md_rp_crd_oflow : 1; - mmr_t md_rq_crd_oflow : 1; - mmr_t gfx_int_1 : 1; - mmr_t gfx_int_0 : 1; - mmr_t nack_oflow : 1; - mmr_t xn_rp_q_oflow : 1; - mmr_t xn_rq_q_oflow : 1; - mmr_t md_rp_q_oflow : 1; - mmr_t md_rq_q_oflow : 1; - mmr_t msg_color_err : 1; - mmr_t fsb_shub_ce : 1; - mmr_t fsb_shub_uce : 1; - mmr_t pio_to_err : 1; - mmr_t mem_to_err : 1; - mmr_t pio_rp_err : 1; - mmr_t mem_rp_err : 1; - mmr_t xb_proto_err : 1; - mmr_t gfx_rp_err : 1; - mmr_t fsb_proto_err : 1; - } sh_pi_error_overflow_s; -} sh_pi_error_overflow_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_ERROR_SUMMARY" */ /* PI Error Summary */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_error_summary_u { mmr_t sh_pi_error_summary_regval; struct { @@ -7201,56 +3925,12 @@ typedef union sh_pi_error_summary_u { mmr_t reserved_0 : 29; } sh_pi_error_summary_s; } sh_pi_error_summary_u_t; -#else -typedef union sh_pi_error_summary_u { - mmr_t sh_pi_error_summary_regval; - struct { - mmr_t reserved_0 : 29; - mmr_t msg_length : 1; - mmr_t fsb_tbl_miss : 1; - mmr_t bad_snoop : 1; - mmr_t livelock : 1; - mmr_t shub_fsb_ce : 1; - mmr_t shub_fsb_uce : 1; - mmr_t shub_fsb_dqe : 1; - mmr_t addr_parity : 1; - mmr_t req_parity : 1; - mmr_t addr_access : 1; - mmr_t req_format : 1; - mmr_t ioq_overrun : 1; - mmr_t rsp_parity : 1; - mmr_t hung_bus : 1; - mmr_t xn_rp_crd_oflow : 1; - mmr_t xn_rq_crd_oflow : 1; - mmr_t md_rp_crd_oflow : 1; - mmr_t md_rq_crd_oflow : 1; - mmr_t gfx_int_1 : 1; - mmr_t gfx_int_0 : 1; - mmr_t nack_oflow : 1; - mmr_t xn_rp_q_oflow : 1; - mmr_t xn_rq_q_oflow : 1; - mmr_t md_rp_q_oflow : 1; - mmr_t md_rq_q_oflow : 1; - mmr_t msg_color_err : 1; - mmr_t fsb_shub_ce : 1; - mmr_t fsb_shub_uce : 1; - mmr_t pio_to_err : 1; - mmr_t mem_to_err : 1; - mmr_t pio_rp_err : 1; - mmr_t mem_rp_err : 1; - mmr_t xb_proto_err : 1; - mmr_t gfx_rp_err : 1; - mmr_t fsb_proto_err : 1; - } sh_pi_error_summary_s; -} sh_pi_error_summary_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_EXPRESS_REPLY_STATUS" */ /* PI Express Reply Status */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_express_reply_status_u { mmr_t sh_pi_express_reply_status_regval; struct { @@ -7258,22 +3938,12 @@ typedef union sh_pi_express_reply_status mmr_t reserved_0 : 61; } sh_pi_express_reply_status_s; } sh_pi_express_reply_status_u_t; -#else -typedef union sh_pi_express_reply_status_u { - mmr_t sh_pi_express_reply_status_regval; - struct { - mmr_t reserved_0 : 61; - mmr_t state : 3; - } sh_pi_express_reply_status_s; -} sh_pi_express_reply_status_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_FIRST_ERROR" */ /* PI First Error */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_first_error_u { mmr_t sh_pi_first_error_regval; struct { @@ -7315,56 +3985,12 @@ typedef union sh_pi_first_error_u { mmr_t reserved_0 : 29; } sh_pi_first_error_s; } sh_pi_first_error_u_t; -#else -typedef union sh_pi_first_error_u { - mmr_t sh_pi_first_error_regval; - struct { - mmr_t reserved_0 : 29; - mmr_t msg_length : 1; - mmr_t fsb_tbl_miss : 1; - mmr_t bad_snoop : 1; - mmr_t livelock : 1; - mmr_t shub_fsb_ce : 1; - mmr_t shub_fsb_uce : 1; - mmr_t shub_fsb_dqe : 1; - mmr_t addr_parity : 1; - mmr_t req_parity : 1; - mmr_t addr_access : 1; - mmr_t req_format : 1; - mmr_t ioq_overrun : 1; - mmr_t rsp_parity : 1; - mmr_t hung_bus : 1; - mmr_t xn_rp_crd_oflow : 1; - mmr_t xn_rq_crd_oflow : 1; - mmr_t md_rp_crd_oflow : 1; - mmr_t md_rq_crd_oflow : 1; - mmr_t gfx_int_1 : 1; - mmr_t gfx_int_0 : 1; - mmr_t nack_oflow : 1; - mmr_t xn_rp_q_oflow : 1; - mmr_t xn_rq_q_oflow : 1; - mmr_t md_rp_q_oflow : 1; - mmr_t md_rq_q_oflow : 1; - mmr_t msg_color_err : 1; - mmr_t fsb_shub_ce : 1; - mmr_t fsb_shub_uce : 1; - mmr_t pio_to_err : 1; - mmr_t mem_to_err : 1; - mmr_t pio_rp_err : 1; - mmr_t mem_rp_err : 1; - mmr_t xb_proto_err : 1; - mmr_t gfx_rp_err : 1; - mmr_t fsb_proto_err : 1; - } sh_pi_first_error_s; -} sh_pi_first_error_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_PI2MD_REPLY_VC_STATUS" */ /* PI-to-MD Reply Virtual Channel Status */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_pi2md_reply_vc_status_u { mmr_t sh_pi_pi2md_reply_vc_status_regval; struct { @@ -7372,22 +3998,12 @@ typedef union sh_pi_pi2md_reply_vc_statu mmr_t reserved_0 : 58; } sh_pi_pi2md_reply_vc_status_s; } sh_pi_pi2md_reply_vc_status_u_t; -#else -typedef union sh_pi_pi2md_reply_vc_status_u { - mmr_t sh_pi_pi2md_reply_vc_status_regval; - struct { - mmr_t reserved_0 : 58; - mmr_t output_crd_stat : 6; - } sh_pi_pi2md_reply_vc_status_s; -} sh_pi_pi2md_reply_vc_status_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_PI2MD_REQUEST_VC_STATUS" */ /* PI-to-MD Request Virtual Channel Status */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_pi2md_request_vc_status_u { mmr_t sh_pi_pi2md_request_vc_status_regval; struct { @@ -7395,22 +4011,12 @@ typedef union sh_pi_pi2md_request_vc_sta mmr_t reserved_0 : 58; } sh_pi_pi2md_request_vc_status_s; } sh_pi_pi2md_request_vc_status_u_t; -#else -typedef union sh_pi_pi2md_request_vc_status_u { - mmr_t sh_pi_pi2md_request_vc_status_regval; - struct { - mmr_t reserved_0 : 58; - mmr_t output_crd_stat : 6; - } sh_pi_pi2md_request_vc_status_s; -} sh_pi_pi2md_request_vc_status_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_PI2XN_REPLY_VC_STATUS" */ /* PI-to-XN Reply Virtual Channel Status */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_pi2xn_reply_vc_status_u { mmr_t sh_pi_pi2xn_reply_vc_status_regval; struct { @@ -7418,22 +4024,12 @@ typedef union sh_pi_pi2xn_reply_vc_statu mmr_t reserved_0 : 58; } sh_pi_pi2xn_reply_vc_status_s; } sh_pi_pi2xn_reply_vc_status_u_t; -#else -typedef union sh_pi_pi2xn_reply_vc_status_u { - mmr_t sh_pi_pi2xn_reply_vc_status_regval; - struct { - mmr_t reserved_0 : 58; - mmr_t output_crd_stat : 6; - } sh_pi_pi2xn_reply_vc_status_s; -} sh_pi_pi2xn_reply_vc_status_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_PI2XN_REQUEST_VC_STATUS" */ /* PI-to-XN Request Virtual Channel Status */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_pi2xn_request_vc_status_u { mmr_t sh_pi_pi2xn_request_vc_status_regval; struct { @@ -7441,22 +4037,12 @@ typedef union sh_pi_pi2xn_request_vc_sta mmr_t reserved_0 : 58; } sh_pi_pi2xn_request_vc_status_s; } sh_pi_pi2xn_request_vc_status_u_t; -#else -typedef union sh_pi_pi2xn_request_vc_status_u { - mmr_t sh_pi_pi2xn_request_vc_status_regval; - struct { - mmr_t reserved_0 : 58; - mmr_t output_crd_stat : 6; - } sh_pi_pi2xn_request_vc_status_s; -} sh_pi_pi2xn_request_vc_status_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_UNCORRECTED_DETAIL_1" */ /* PI Uncorrected Error Detail 1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_uncorrected_detail_1_u { mmr_t sh_pi_uncorrected_detail_1_regval; struct { @@ -7465,44 +4051,24 @@ typedef union sh_pi_uncorrected_detail_1 mmr_t dep : 8; } sh_pi_uncorrected_detail_1_s; } sh_pi_uncorrected_detail_1_u_t; -#else -typedef union sh_pi_uncorrected_detail_1_u { - mmr_t sh_pi_uncorrected_detail_1_regval; - struct { - mmr_t dep : 8; - mmr_t syndrome : 8; - mmr_t address : 48; - } sh_pi_uncorrected_detail_1_s; -} sh_pi_uncorrected_detail_1_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_UNCORRECTED_DETAIL_2" */ /* PI Uncorrected Error Detail 2 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_pi_uncorrected_detail_2_u { - mmr_t sh_pi_uncorrected_detail_2_regval; - struct { - mmr_t data : 64; - } sh_pi_uncorrected_detail_2_s; -} sh_pi_uncorrected_detail_2_u_t; -#else typedef union sh_pi_uncorrected_detail_2_u { mmr_t sh_pi_uncorrected_detail_2_regval; struct { mmr_t data : 64; } sh_pi_uncorrected_detail_2_s; } sh_pi_uncorrected_detail_2_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_UNCORRECTED_DETAIL_3" */ /* PI Uncorrected Error Detail 3 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_uncorrected_detail_3_u { mmr_t sh_pi_uncorrected_detail_3_regval; struct { @@ -7511,44 +4077,24 @@ typedef union sh_pi_uncorrected_detail_3 mmr_t dep : 8; } sh_pi_uncorrected_detail_3_s; } sh_pi_uncorrected_detail_3_u_t; -#else -typedef union sh_pi_uncorrected_detail_3_u { - mmr_t sh_pi_uncorrected_detail_3_regval; - struct { - mmr_t dep : 8; - mmr_t syndrome : 8; - mmr_t address : 48; - } sh_pi_uncorrected_detail_3_s; -} sh_pi_uncorrected_detail_3_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_UNCORRECTED_DETAIL_4" */ /* PI Uncorrected Error Detail 4 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_pi_uncorrected_detail_4_u { - mmr_t sh_pi_uncorrected_detail_4_regval; - struct { - mmr_t data : 64; - } sh_pi_uncorrected_detail_4_s; -} sh_pi_uncorrected_detail_4_u_t; -#else typedef union sh_pi_uncorrected_detail_4_u { mmr_t sh_pi_uncorrected_detail_4_regval; struct { mmr_t data : 64; } sh_pi_uncorrected_detail_4_s; } sh_pi_uncorrected_detail_4_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_MD2PI_REPLY_VC_STATUS" */ /* MD-to-PI Reply Virtual Channel Status */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_md2pi_reply_vc_status_u { mmr_t sh_pi_md2pi_reply_vc_status_regval; struct { @@ -7558,24 +4104,12 @@ typedef union sh_pi_md2pi_reply_vc_statu mmr_t reserved_0 : 52; } sh_pi_md2pi_reply_vc_status_s; } sh_pi_md2pi_reply_vc_status_u_t; -#else -typedef union sh_pi_md2pi_reply_vc_status_u { - mmr_t sh_pi_md2pi_reply_vc_status_regval; - struct { - mmr_t reserved_0 : 52; - mmr_t input_queue_stat : 4; - mmr_t input_dat_crd_stat : 4; - mmr_t input_hdr_crd_stat : 4; - } sh_pi_md2pi_reply_vc_status_s; -} sh_pi_md2pi_reply_vc_status_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_MD2PI_REQUEST_VC_STATUS" */ /* MD-to-PI Request Virtual Channel Status */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_md2pi_request_vc_status_u { mmr_t sh_pi_md2pi_request_vc_status_regval; struct { @@ -7585,24 +4119,12 @@ typedef union sh_pi_md2pi_request_vc_sta mmr_t reserved_0 : 52; } sh_pi_md2pi_request_vc_status_s; } sh_pi_md2pi_request_vc_status_u_t; -#else -typedef union sh_pi_md2pi_request_vc_status_u { - mmr_t sh_pi_md2pi_request_vc_status_regval; - struct { - mmr_t reserved_0 : 52; - mmr_t input_queue_stat : 4; - mmr_t input_dat_crd_stat : 4; - mmr_t input_hdr_crd_stat : 4; - } sh_pi_md2pi_request_vc_status_s; -} sh_pi_md2pi_request_vc_status_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_XN2PI_REPLY_VC_STATUS" */ /* XN-to-PI Reply Virtual Channel Status */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_xn2pi_reply_vc_status_u { mmr_t sh_pi_xn2pi_reply_vc_status_regval; struct { @@ -7612,24 +4134,12 @@ typedef union sh_pi_xn2pi_reply_vc_statu mmr_t reserved_0 : 52; } sh_pi_xn2pi_reply_vc_status_s; } sh_pi_xn2pi_reply_vc_status_u_t; -#else -typedef union sh_pi_xn2pi_reply_vc_status_u { - mmr_t sh_pi_xn2pi_reply_vc_status_regval; - struct { - mmr_t reserved_0 : 52; - mmr_t input_queue_stat : 4; - mmr_t input_dat_crd_stat : 4; - mmr_t input_hdr_crd_stat : 4; - } sh_pi_xn2pi_reply_vc_status_s; -} sh_pi_xn2pi_reply_vc_status_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_XN2PI_REQUEST_VC_STATUS" */ /* XN-to-PI Request Virtual Channel Status */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_xn2pi_request_vc_status_u { mmr_t sh_pi_xn2pi_request_vc_status_regval; struct { @@ -7639,23 +4149,11 @@ typedef union sh_pi_xn2pi_request_vc_sta mmr_t reserved_0 : 52; } sh_pi_xn2pi_request_vc_status_s; } sh_pi_xn2pi_request_vc_status_u_t; -#else -typedef union sh_pi_xn2pi_request_vc_status_u { - mmr_t sh_pi_xn2pi_request_vc_status_regval; - struct { - mmr_t reserved_0 : 52; - mmr_t input_queue_stat : 4; - mmr_t input_dat_crd_stat : 4; - mmr_t input_hdr_crd_stat : 4; - } sh_pi_xn2pi_request_vc_status_s; -} sh_pi_xn2pi_request_vc_status_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNPI_SIC_FLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnpi_sic_flow_u { mmr_t sh_xnpi_sic_flow_regval; struct { @@ -7680,38 +4178,11 @@ typedef union sh_xnpi_sic_flow_u { mmr_t disable_bypass_out : 1; } sh_xnpi_sic_flow_s; } sh_xnpi_sic_flow_u_t; -#else -typedef union sh_xnpi_sic_flow_u { - mmr_t sh_xnpi_sic_flow_regval; - struct { - mmr_t disable_bypass_out : 1; - mmr_t reserved_7 : 2; - mmr_t credit_vc2_cap : 5; - mmr_t reserved_6 : 3; - mmr_t credit_vc2_dyn : 5; - mmr_t reserved_5 : 3; - mmr_t credit_vc2_test : 5; - mmr_t reserved_4 : 3; - mmr_t credit_vc0_cap : 5; - mmr_t reserved_3 : 3; - mmr_t credit_vc0_dyn : 5; - mmr_t reserved_2 : 3; - mmr_t credit_vc0_test : 5; - mmr_t debit_vc2_force_cred : 1; - mmr_t reserved_1 : 2; - mmr_t debit_vc2_withhold : 5; - mmr_t debit_vc0_force_cred : 1; - mmr_t reserved_0 : 2; - mmr_t debit_vc0_withhold : 5; - } sh_xnpi_sic_flow_s; -} sh_xnpi_sic_flow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNPI_TO_NI0_PORT_FLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnpi_to_ni0_port_flow_u { mmr_t sh_xnpi_to_ni0_port_flow_regval; struct { @@ -7732,34 +4203,11 @@ typedef union sh_xnpi_to_ni0_port_flow_u mmr_t reserved_6 : 2; } sh_xnpi_to_ni0_port_flow_s; } sh_xnpi_to_ni0_port_flow_u_t; -#else -typedef union sh_xnpi_to_ni0_port_flow_u { - mmr_t sh_xnpi_to_ni0_port_flow_regval; - struct { - mmr_t reserved_6 : 2; - mmr_t credit_vc2_cap : 6; - mmr_t reserved_5 : 2; - mmr_t credit_vc2_dyn : 6; - mmr_t reserved_4 : 10; - mmr_t credit_vc0_cap : 6; - mmr_t reserved_3 : 2; - mmr_t credit_vc0_dyn : 6; - mmr_t reserved_2 : 8; - mmr_t debit_vc2_force_cred : 1; - mmr_t reserved_1 : 1; - mmr_t debit_vc2_withhold : 6; - mmr_t debit_vc0_force_cred : 1; - mmr_t reserved_0 : 1; - mmr_t debit_vc0_withhold : 6; - } sh_xnpi_to_ni0_port_flow_s; -} sh_xnpi_to_ni0_port_flow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNPI_TO_NI1_PORT_FLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnpi_to_ni1_port_flow_u { mmr_t sh_xnpi_to_ni1_port_flow_regval; struct { @@ -7780,34 +4228,11 @@ typedef union sh_xnpi_to_ni1_port_flow_u mmr_t reserved_6 : 2; } sh_xnpi_to_ni1_port_flow_s; } sh_xnpi_to_ni1_port_flow_u_t; -#else -typedef union sh_xnpi_to_ni1_port_flow_u { - mmr_t sh_xnpi_to_ni1_port_flow_regval; - struct { - mmr_t reserved_6 : 2; - mmr_t credit_vc2_cap : 6; - mmr_t reserved_5 : 2; - mmr_t credit_vc2_dyn : 6; - mmr_t reserved_4 : 10; - mmr_t credit_vc0_cap : 6; - mmr_t reserved_3 : 2; - mmr_t credit_vc0_dyn : 6; - mmr_t reserved_2 : 8; - mmr_t debit_vc2_force_cred : 1; - mmr_t reserved_1 : 1; - mmr_t debit_vc2_withhold : 6; - mmr_t debit_vc0_force_cred : 1; - mmr_t reserved_0 : 1; - mmr_t debit_vc0_withhold : 6; - } sh_xnpi_to_ni1_port_flow_s; -} sh_xnpi_to_ni1_port_flow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNPI_TO_IILB_PORT_FLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnpi_to_iilb_port_flow_u { mmr_t sh_xnpi_to_iilb_port_flow_regval; struct { @@ -7828,34 +4253,11 @@ typedef union sh_xnpi_to_iilb_port_flow_ mmr_t reserved_6 : 2; } sh_xnpi_to_iilb_port_flow_s; } sh_xnpi_to_iilb_port_flow_u_t; -#else -typedef union sh_xnpi_to_iilb_port_flow_u { - mmr_t sh_xnpi_to_iilb_port_flow_regval; - struct { - mmr_t reserved_6 : 2; - mmr_t credit_vc2_cap : 6; - mmr_t reserved_5 : 2; - mmr_t credit_vc2_dyn : 6; - mmr_t reserved_4 : 10; - mmr_t credit_vc0_cap : 6; - mmr_t reserved_3 : 2; - mmr_t credit_vc0_dyn : 6; - mmr_t reserved_2 : 8; - mmr_t debit_vc2_force_cred : 1; - mmr_t reserved_1 : 1; - mmr_t debit_vc2_withhold : 6; - mmr_t debit_vc0_force_cred : 1; - mmr_t reserved_0 : 1; - mmr_t debit_vc0_withhold : 6; - } sh_xnpi_to_iilb_port_flow_s; -} sh_xnpi_to_iilb_port_flow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNPI_FR_NI0_PORT_FLOW_FIFO" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnpi_fr_ni0_port_flow_fifo_u { mmr_t sh_xnpi_fr_ni0_port_flow_fifo_regval; struct { @@ -7873,31 +4275,11 @@ typedef union sh_xnpi_fr_ni0_port_flow_f mmr_t reserved_5 : 19; } sh_xnpi_fr_ni0_port_flow_fifo_s; } sh_xnpi_fr_ni0_port_flow_fifo_u_t; -#else -typedef union sh_xnpi_fr_ni0_port_flow_fifo_u { - mmr_t sh_xnpi_fr_ni0_port_flow_fifo_regval; - struct { - mmr_t reserved_5 : 19; - mmr_t entry_vc2_test : 5; - mmr_t reserved_4 : 3; - mmr_t entry_vc0_test : 5; - mmr_t reserved_3 : 2; - mmr_t entry_vc2_cap : 6; - mmr_t reserved_2 : 2; - mmr_t entry_vc2_dyn : 6; - mmr_t reserved_1 : 2; - mmr_t entry_vc0_cap : 6; - mmr_t reserved_0 : 2; - mmr_t entry_vc0_dyn : 6; - } sh_xnpi_fr_ni0_port_flow_fifo_s; -} sh_xnpi_fr_ni0_port_flow_fifo_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNPI_FR_NI1_PORT_FLOW_FIFO" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnpi_fr_ni1_port_flow_fifo_u { mmr_t sh_xnpi_fr_ni1_port_flow_fifo_regval; struct { @@ -7915,31 +4297,11 @@ typedef union sh_xnpi_fr_ni1_port_flow_f mmr_t reserved_5 : 19; } sh_xnpi_fr_ni1_port_flow_fifo_s; } sh_xnpi_fr_ni1_port_flow_fifo_u_t; -#else -typedef union sh_xnpi_fr_ni1_port_flow_fifo_u { - mmr_t sh_xnpi_fr_ni1_port_flow_fifo_regval; - struct { - mmr_t reserved_5 : 19; - mmr_t entry_vc2_test : 5; - mmr_t reserved_4 : 3; - mmr_t entry_vc0_test : 5; - mmr_t reserved_3 : 2; - mmr_t entry_vc2_cap : 6; - mmr_t reserved_2 : 2; - mmr_t entry_vc2_dyn : 6; - mmr_t reserved_1 : 2; - mmr_t entry_vc0_cap : 6; - mmr_t reserved_0 : 2; - mmr_t entry_vc0_dyn : 6; - } sh_xnpi_fr_ni1_port_flow_fifo_s; -} sh_xnpi_fr_ni1_port_flow_fifo_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNPI_FR_IILB_PORT_FLOW_FIFO" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnpi_fr_iilb_port_flow_fifo_u { mmr_t sh_xnpi_fr_iilb_port_flow_fifo_regval; struct { @@ -7957,31 +4319,11 @@ typedef union sh_xnpi_fr_iilb_port_flow_ mmr_t reserved_5 : 19; } sh_xnpi_fr_iilb_port_flow_fifo_s; } sh_xnpi_fr_iilb_port_flow_fifo_u_t; -#else -typedef union sh_xnpi_fr_iilb_port_flow_fifo_u { - mmr_t sh_xnpi_fr_iilb_port_flow_fifo_regval; - struct { - mmr_t reserved_5 : 19; - mmr_t entry_vc2_test : 5; - mmr_t reserved_4 : 3; - mmr_t entry_vc0_test : 5; - mmr_t reserved_3 : 2; - mmr_t entry_vc2_cap : 6; - mmr_t reserved_2 : 2; - mmr_t entry_vc2_dyn : 6; - mmr_t reserved_1 : 2; - mmr_t entry_vc0_cap : 6; - mmr_t reserved_0 : 2; - mmr_t entry_vc0_dyn : 6; - } sh_xnpi_fr_iilb_port_flow_fifo_s; -} sh_xnpi_fr_iilb_port_flow_fifo_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNMD_SIC_FLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnmd_sic_flow_u { mmr_t sh_xnmd_sic_flow_regval; struct { @@ -8006,38 +4348,11 @@ typedef union sh_xnmd_sic_flow_u { mmr_t disable_bypass_out : 1; } sh_xnmd_sic_flow_s; } sh_xnmd_sic_flow_u_t; -#else -typedef union sh_xnmd_sic_flow_u { - mmr_t sh_xnmd_sic_flow_regval; - struct { - mmr_t disable_bypass_out : 1; - mmr_t reserved_7 : 2; - mmr_t credit_vc2_cap : 5; - mmr_t reserved_6 : 3; - mmr_t credit_vc2_dyn : 5; - mmr_t reserved_5 : 3; - mmr_t credit_vc2_test : 5; - mmr_t reserved_4 : 3; - mmr_t credit_vc0_cap : 5; - mmr_t reserved_3 : 3; - mmr_t credit_vc0_dyn : 5; - mmr_t reserved_2 : 3; - mmr_t credit_vc0_test : 5; - mmr_t debit_vc2_force_cred : 1; - mmr_t reserved_1 : 2; - mmr_t debit_vc2_withhold : 5; - mmr_t debit_vc0_force_cred : 1; - mmr_t reserved_0 : 2; - mmr_t debit_vc0_withhold : 5; - } sh_xnmd_sic_flow_s; -} sh_xnmd_sic_flow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNMD_TO_NI0_PORT_FLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnmd_to_ni0_port_flow_u { mmr_t sh_xnmd_to_ni0_port_flow_regval; struct { @@ -8058,34 +4373,11 @@ typedef union sh_xnmd_to_ni0_port_flow_u mmr_t reserved_6 : 2; } sh_xnmd_to_ni0_port_flow_s; } sh_xnmd_to_ni0_port_flow_u_t; -#else -typedef union sh_xnmd_to_ni0_port_flow_u { - mmr_t sh_xnmd_to_ni0_port_flow_regval; - struct { - mmr_t reserved_6 : 2; - mmr_t credit_vc2_cap : 6; - mmr_t reserved_5 : 2; - mmr_t credit_vc2_dyn : 6; - mmr_t reserved_4 : 10; - mmr_t credit_vc0_cap : 6; - mmr_t reserved_3 : 2; - mmr_t credit_vc0_dyn : 6; - mmr_t reserved_2 : 8; - mmr_t debit_vc2_force_cred : 1; - mmr_t reserved_1 : 1; - mmr_t debit_vc2_withhold : 6; - mmr_t debit_vc0_force_cred : 1; - mmr_t reserved_0 : 1; - mmr_t debit_vc0_withhold : 6; - } sh_xnmd_to_ni0_port_flow_s; -} sh_xnmd_to_ni0_port_flow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNMD_TO_NI1_PORT_FLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnmd_to_ni1_port_flow_u { mmr_t sh_xnmd_to_ni1_port_flow_regval; struct { @@ -8106,34 +4398,11 @@ typedef union sh_xnmd_to_ni1_port_flow_u mmr_t reserved_6 : 2; } sh_xnmd_to_ni1_port_flow_s; } sh_xnmd_to_ni1_port_flow_u_t; -#else -typedef union sh_xnmd_to_ni1_port_flow_u { - mmr_t sh_xnmd_to_ni1_port_flow_regval; - struct { - mmr_t reserved_6 : 2; - mmr_t credit_vc2_cap : 6; - mmr_t reserved_5 : 2; - mmr_t credit_vc2_dyn : 6; - mmr_t reserved_4 : 10; - mmr_t credit_vc0_cap : 6; - mmr_t reserved_3 : 2; - mmr_t credit_vc0_dyn : 6; - mmr_t reserved_2 : 8; - mmr_t debit_vc2_force_cred : 1; - mmr_t reserved_1 : 1; - mmr_t debit_vc2_withhold : 6; - mmr_t debit_vc0_force_cred : 1; - mmr_t reserved_0 : 1; - mmr_t debit_vc0_withhold : 6; - } sh_xnmd_to_ni1_port_flow_s; -} sh_xnmd_to_ni1_port_flow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNMD_TO_IILB_PORT_FLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnmd_to_iilb_port_flow_u { mmr_t sh_xnmd_to_iilb_port_flow_regval; struct { @@ -8154,34 +4423,11 @@ typedef union sh_xnmd_to_iilb_port_flow_ mmr_t reserved_6 : 2; } sh_xnmd_to_iilb_port_flow_s; } sh_xnmd_to_iilb_port_flow_u_t; -#else -typedef union sh_xnmd_to_iilb_port_flow_u { - mmr_t sh_xnmd_to_iilb_port_flow_regval; - struct { - mmr_t reserved_6 : 2; - mmr_t credit_vc2_cap : 6; - mmr_t reserved_5 : 2; - mmr_t credit_vc2_dyn : 6; - mmr_t reserved_4 : 10; - mmr_t credit_vc0_cap : 6; - mmr_t reserved_3 : 2; - mmr_t credit_vc0_dyn : 6; - mmr_t reserved_2 : 8; - mmr_t debit_vc2_force_cred : 1; - mmr_t reserved_1 : 1; - mmr_t debit_vc2_withhold : 6; - mmr_t debit_vc0_force_cred : 1; - mmr_t reserved_0 : 1; - mmr_t debit_vc0_withhold : 6; - } sh_xnmd_to_iilb_port_flow_s; -} sh_xnmd_to_iilb_port_flow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNMD_FR_NI0_PORT_FLOW_FIFO" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnmd_fr_ni0_port_flow_fifo_u { mmr_t sh_xnmd_fr_ni0_port_flow_fifo_regval; struct { @@ -8199,31 +4445,11 @@ typedef union sh_xnmd_fr_ni0_port_flow_f mmr_t reserved_5 : 19; } sh_xnmd_fr_ni0_port_flow_fifo_s; } sh_xnmd_fr_ni0_port_flow_fifo_u_t; -#else -typedef union sh_xnmd_fr_ni0_port_flow_fifo_u { - mmr_t sh_xnmd_fr_ni0_port_flow_fifo_regval; - struct { - mmr_t reserved_5 : 19; - mmr_t entry_vc2_test : 5; - mmr_t reserved_4 : 3; - mmr_t entry_vc0_test : 5; - mmr_t reserved_3 : 2; - mmr_t entry_vc2_cap : 6; - mmr_t reserved_2 : 2; - mmr_t entry_vc2_dyn : 6; - mmr_t reserved_1 : 2; - mmr_t entry_vc0_cap : 6; - mmr_t reserved_0 : 2; - mmr_t entry_vc0_dyn : 6; - } sh_xnmd_fr_ni0_port_flow_fifo_s; -} sh_xnmd_fr_ni0_port_flow_fifo_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNMD_FR_NI1_PORT_FLOW_FIFO" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnmd_fr_ni1_port_flow_fifo_u { mmr_t sh_xnmd_fr_ni1_port_flow_fifo_regval; struct { @@ -8241,31 +4467,11 @@ typedef union sh_xnmd_fr_ni1_port_flow_f mmr_t reserved_5 : 19; } sh_xnmd_fr_ni1_port_flow_fifo_s; } sh_xnmd_fr_ni1_port_flow_fifo_u_t; -#else -typedef union sh_xnmd_fr_ni1_port_flow_fifo_u { - mmr_t sh_xnmd_fr_ni1_port_flow_fifo_regval; - struct { - mmr_t reserved_5 : 19; - mmr_t entry_vc2_test : 5; - mmr_t reserved_4 : 3; - mmr_t entry_vc0_test : 5; - mmr_t reserved_3 : 2; - mmr_t entry_vc2_cap : 6; - mmr_t reserved_2 : 2; - mmr_t entry_vc2_dyn : 6; - mmr_t reserved_1 : 2; - mmr_t entry_vc0_cap : 6; - mmr_t reserved_0 : 2; - mmr_t entry_vc0_dyn : 6; - } sh_xnmd_fr_ni1_port_flow_fifo_s; -} sh_xnmd_fr_ni1_port_flow_fifo_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNMD_FR_IILB_PORT_FLOW_FIFO" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnmd_fr_iilb_port_flow_fifo_u { mmr_t sh_xnmd_fr_iilb_port_flow_fifo_regval; struct { @@ -8283,31 +4489,11 @@ typedef union sh_xnmd_fr_iilb_port_flow_ mmr_t reserved_5 : 19; } sh_xnmd_fr_iilb_port_flow_fifo_s; } sh_xnmd_fr_iilb_port_flow_fifo_u_t; -#else -typedef union sh_xnmd_fr_iilb_port_flow_fifo_u { - mmr_t sh_xnmd_fr_iilb_port_flow_fifo_regval; - struct { - mmr_t reserved_5 : 19; - mmr_t entry_vc2_test : 5; - mmr_t reserved_4 : 3; - mmr_t entry_vc0_test : 5; - mmr_t reserved_3 : 2; - mmr_t entry_vc2_cap : 6; - mmr_t reserved_2 : 2; - mmr_t entry_vc2_dyn : 6; - mmr_t reserved_1 : 2; - mmr_t entry_vc0_cap : 6; - mmr_t reserved_0 : 2; - mmr_t entry_vc0_dyn : 6; - } sh_xnmd_fr_iilb_port_flow_fifo_s; -} sh_xnmd_fr_iilb_port_flow_fifo_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNII_INTRA_FLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnii_intra_flow_u { mmr_t sh_xnii_intra_flow_regval; struct { @@ -8331,37 +4517,11 @@ typedef union sh_xnii_intra_flow_u { mmr_t reserved_7 : 1; } sh_xnii_intra_flow_s; } sh_xnii_intra_flow_u_t; -#else -typedef union sh_xnii_intra_flow_u { - mmr_t sh_xnii_intra_flow_regval; - struct { - mmr_t reserved_7 : 1; - mmr_t credit_vc2_cap : 7; - mmr_t reserved_6 : 1; - mmr_t credit_vc2_dyn : 7; - mmr_t reserved_5 : 1; - mmr_t credit_vc2_test : 7; - mmr_t reserved_4 : 1; - mmr_t credit_vc0_cap : 7; - mmr_t reserved_3 : 1; - mmr_t credit_vc0_dyn : 7; - mmr_t reserved_2 : 1; - mmr_t credit_vc0_test : 7; - mmr_t debit_vc2_force_cred : 1; - mmr_t reserved_1 : 1; - mmr_t debit_vc2_withhold : 6; - mmr_t debit_vc0_force_cred : 1; - mmr_t reserved_0 : 1; - mmr_t debit_vc0_withhold : 6; - } sh_xnii_intra_flow_s; -} sh_xnii_intra_flow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNLB_INTRA_FLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnlb_intra_flow_u { mmr_t sh_xnlb_intra_flow_regval; struct { @@ -8385,37 +4545,11 @@ typedef union sh_xnlb_intra_flow_u { mmr_t disable_bypass_in : 1; } sh_xnlb_intra_flow_s; } sh_xnlb_intra_flow_u_t; -#else -typedef union sh_xnlb_intra_flow_u { - mmr_t sh_xnlb_intra_flow_regval; - struct { - mmr_t disable_bypass_in : 1; - mmr_t credit_vc2_cap : 7; - mmr_t reserved_6 : 1; - mmr_t credit_vc2_dyn : 7; - mmr_t reserved_5 : 1; - mmr_t credit_vc2_test : 7; - mmr_t reserved_4 : 1; - mmr_t credit_vc0_cap : 7; - mmr_t reserved_3 : 1; - mmr_t credit_vc0_dyn : 7; - mmr_t reserved_2 : 1; - mmr_t credit_vc0_test : 7; - mmr_t debit_vc2_force_cred : 1; - mmr_t reserved_1 : 1; - mmr_t debit_vc2_withhold : 6; - mmr_t debit_vc0_force_cred : 1; - mmr_t reserved_0 : 1; - mmr_t debit_vc0_withhold : 6; - } sh_xnlb_intra_flow_s; -} sh_xnlb_intra_flow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNIILB_TO_NI0_INTRA_FLOW_DEBIT" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xniilb_to_ni0_intra_flow_debit_u { mmr_t sh_xniilb_to_ni0_intra_flow_debit_regval; struct { @@ -8436,34 +4570,11 @@ typedef union sh_xniilb_to_ni0_intra_flo mmr_t reserved_6 : 1; } sh_xniilb_to_ni0_intra_flow_debit_s; } sh_xniilb_to_ni0_intra_flow_debit_u_t; -#else -typedef union sh_xniilb_to_ni0_intra_flow_debit_u { - mmr_t sh_xniilb_to_ni0_intra_flow_debit_regval; - struct { - mmr_t reserved_6 : 1; - mmr_t vc2_cap : 7; - mmr_t reserved_5 : 1; - mmr_t vc2_dyn : 7; - mmr_t reserved_4 : 9; - mmr_t vc0_cap : 7; - mmr_t reserved_3 : 1; - mmr_t vc0_dyn : 7; - mmr_t reserved_2 : 8; - mmr_t vc2_force_cred : 1; - mmr_t reserved_1 : 1; - mmr_t vc2_withhold : 6; - mmr_t vc0_force_cred : 1; - mmr_t reserved_0 : 1; - mmr_t vc0_withhold : 6; - } sh_xniilb_to_ni0_intra_flow_debit_s; -} sh_xniilb_to_ni0_intra_flow_debit_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNIILB_TO_NI1_INTRA_FLOW_DEBIT" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xniilb_to_ni1_intra_flow_debit_u { mmr_t sh_xniilb_to_ni1_intra_flow_debit_regval; struct { @@ -8484,34 +4595,11 @@ typedef union sh_xniilb_to_ni1_intra_flo mmr_t reserved_6 : 1; } sh_xniilb_to_ni1_intra_flow_debit_s; } sh_xniilb_to_ni1_intra_flow_debit_u_t; -#else -typedef union sh_xniilb_to_ni1_intra_flow_debit_u { - mmr_t sh_xniilb_to_ni1_intra_flow_debit_regval; - struct { - mmr_t reserved_6 : 1; - mmr_t vc2_cap : 7; - mmr_t reserved_5 : 1; - mmr_t vc2_dyn : 7; - mmr_t reserved_4 : 9; - mmr_t vc0_cap : 7; - mmr_t reserved_3 : 1; - mmr_t vc0_dyn : 7; - mmr_t reserved_2 : 8; - mmr_t vc2_force_cred : 1; - mmr_t reserved_1 : 1; - mmr_t vc2_withhold : 6; - mmr_t vc0_force_cred : 1; - mmr_t reserved_0 : 1; - mmr_t vc0_withhold : 6; - } sh_xniilb_to_ni1_intra_flow_debit_s; -} sh_xniilb_to_ni1_intra_flow_debit_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNIILB_TO_MD_INTRA_FLOW_DEBIT" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xniilb_to_md_intra_flow_debit_u { mmr_t sh_xniilb_to_md_intra_flow_debit_regval; struct { @@ -8532,34 +4620,11 @@ typedef union sh_xniilb_to_md_intra_flow mmr_t reserved_6 : 1; } sh_xniilb_to_md_intra_flow_debit_s; } sh_xniilb_to_md_intra_flow_debit_u_t; -#else -typedef union sh_xniilb_to_md_intra_flow_debit_u { - mmr_t sh_xniilb_to_md_intra_flow_debit_regval; - struct { - mmr_t reserved_6 : 1; - mmr_t vc2_cap : 7; - mmr_t reserved_5 : 1; - mmr_t vc2_dyn : 7; - mmr_t reserved_4 : 9; - mmr_t vc0_cap : 7; - mmr_t reserved_3 : 1; - mmr_t vc0_dyn : 7; - mmr_t reserved_2 : 8; - mmr_t vc2_force_cred : 1; - mmr_t reserved_1 : 1; - mmr_t vc2_withhold : 6; - mmr_t vc0_force_cred : 1; - mmr_t reserved_0 : 1; - mmr_t vc0_withhold : 6; - } sh_xniilb_to_md_intra_flow_debit_s; -} sh_xniilb_to_md_intra_flow_debit_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNIILB_TO_IILB_INTRA_FLOW_DEBIT" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xniilb_to_iilb_intra_flow_debit_u { mmr_t sh_xniilb_to_iilb_intra_flow_debit_regval; struct { @@ -8580,34 +4645,11 @@ typedef union sh_xniilb_to_iilb_intra_fl mmr_t reserved_6 : 1; } sh_xniilb_to_iilb_intra_flow_debit_s; } sh_xniilb_to_iilb_intra_flow_debit_u_t; -#else -typedef union sh_xniilb_to_iilb_intra_flow_debit_u { - mmr_t sh_xniilb_to_iilb_intra_flow_debit_regval; - struct { - mmr_t reserved_6 : 1; - mmr_t vc2_cap : 7; - mmr_t reserved_5 : 1; - mmr_t vc2_dyn : 7; - mmr_t reserved_4 : 9; - mmr_t vc0_cap : 7; - mmr_t reserved_3 : 1; - mmr_t vc0_dyn : 7; - mmr_t reserved_2 : 8; - mmr_t vc2_force_cred : 1; - mmr_t reserved_1 : 1; - mmr_t vc2_withhold : 6; - mmr_t vc0_force_cred : 1; - mmr_t reserved_0 : 1; - mmr_t vc0_withhold : 6; - } sh_xniilb_to_iilb_intra_flow_debit_s; -} sh_xniilb_to_iilb_intra_flow_debit_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNIILB_TO_PI_INTRA_FLOW_DEBIT" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xniilb_to_pi_intra_flow_debit_u { mmr_t sh_xniilb_to_pi_intra_flow_debit_regval; struct { @@ -8628,34 +4670,11 @@ typedef union sh_xniilb_to_pi_intra_flow mmr_t reserved_6 : 1; } sh_xniilb_to_pi_intra_flow_debit_s; } sh_xniilb_to_pi_intra_flow_debit_u_t; -#else -typedef union sh_xniilb_to_pi_intra_flow_debit_u { - mmr_t sh_xniilb_to_pi_intra_flow_debit_regval; - struct { - mmr_t reserved_6 : 1; - mmr_t vc2_cap : 7; - mmr_t reserved_5 : 1; - mmr_t vc2_dyn : 7; - mmr_t reserved_4 : 9; - mmr_t vc0_cap : 7; - mmr_t reserved_3 : 1; - mmr_t vc0_dyn : 7; - mmr_t reserved_2 : 8; - mmr_t vc2_force_cred : 1; - mmr_t reserved_1 : 1; - mmr_t vc2_withhold : 6; - mmr_t vc0_force_cred : 1; - mmr_t reserved_0 : 1; - mmr_t vc0_withhold : 6; - } sh_xniilb_to_pi_intra_flow_debit_s; -} sh_xniilb_to_pi_intra_flow_debit_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNIILB_FR_NI0_INTRA_FLOW_CREDIT" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xniilb_fr_ni0_intra_flow_credit_u { mmr_t sh_xniilb_fr_ni0_intra_flow_credit_regval; struct { @@ -8673,31 +4692,11 @@ typedef union sh_xniilb_fr_ni0_intra_flo mmr_t reserved_5 : 17; } sh_xniilb_fr_ni0_intra_flow_credit_s; } sh_xniilb_fr_ni0_intra_flow_credit_u_t; -#else -typedef union sh_xniilb_fr_ni0_intra_flow_credit_u { - mmr_t sh_xniilb_fr_ni0_intra_flow_credit_regval; - struct { - mmr_t reserved_5 : 17; - mmr_t vc2_cap : 7; - mmr_t reserved_4 : 1; - mmr_t vc2_dyn : 7; - mmr_t reserved_3 : 1; - mmr_t vc2_test : 7; - mmr_t reserved_2 : 1; - mmr_t vc0_cap : 7; - mmr_t reserved_1 : 1; - mmr_t vc0_dyn : 7; - mmr_t reserved_0 : 1; - mmr_t vc0_test : 7; - } sh_xniilb_fr_ni0_intra_flow_credit_s; -} sh_xniilb_fr_ni0_intra_flow_credit_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNIILB_FR_NI1_INTRA_FLOW_CREDIT" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xniilb_fr_ni1_intra_flow_credit_u { mmr_t sh_xniilb_fr_ni1_intra_flow_credit_regval; struct { @@ -8715,31 +4714,11 @@ typedef union sh_xniilb_fr_ni1_intra_flo mmr_t reserved_5 : 17; } sh_xniilb_fr_ni1_intra_flow_credit_s; } sh_xniilb_fr_ni1_intra_flow_credit_u_t; -#else -typedef union sh_xniilb_fr_ni1_intra_flow_credit_u { - mmr_t sh_xniilb_fr_ni1_intra_flow_credit_regval; - struct { - mmr_t reserved_5 : 17; - mmr_t vc2_cap : 7; - mmr_t reserved_4 : 1; - mmr_t vc2_dyn : 7; - mmr_t reserved_3 : 1; - mmr_t vc2_test : 7; - mmr_t reserved_2 : 1; - mmr_t vc0_cap : 7; - mmr_t reserved_1 : 1; - mmr_t vc0_dyn : 7; - mmr_t reserved_0 : 1; - mmr_t vc0_test : 7; - } sh_xniilb_fr_ni1_intra_flow_credit_s; -} sh_xniilb_fr_ni1_intra_flow_credit_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNIILB_FR_MD_INTRA_FLOW_CREDIT" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xniilb_fr_md_intra_flow_credit_u { mmr_t sh_xniilb_fr_md_intra_flow_credit_regval; struct { @@ -8757,31 +4736,11 @@ typedef union sh_xniilb_fr_md_intra_flow mmr_t reserved_5 : 17; } sh_xniilb_fr_md_intra_flow_credit_s; } sh_xniilb_fr_md_intra_flow_credit_u_t; -#else -typedef union sh_xniilb_fr_md_intra_flow_credit_u { - mmr_t sh_xniilb_fr_md_intra_flow_credit_regval; - struct { - mmr_t reserved_5 : 17; - mmr_t vc2_cap : 7; - mmr_t reserved_4 : 1; - mmr_t vc2_dyn : 7; - mmr_t reserved_3 : 1; - mmr_t vc2_test : 7; - mmr_t reserved_2 : 1; - mmr_t vc0_cap : 7; - mmr_t reserved_1 : 1; - mmr_t vc0_dyn : 7; - mmr_t reserved_0 : 1; - mmr_t vc0_test : 7; - } sh_xniilb_fr_md_intra_flow_credit_s; -} sh_xniilb_fr_md_intra_flow_credit_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNIILB_FR_IILB_INTRA_FLOW_CREDIT" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xniilb_fr_iilb_intra_flow_credit_u { mmr_t sh_xniilb_fr_iilb_intra_flow_credit_regval; struct { @@ -8799,31 +4758,11 @@ typedef union sh_xniilb_fr_iilb_intra_fl mmr_t reserved_5 : 17; } sh_xniilb_fr_iilb_intra_flow_credit_s; } sh_xniilb_fr_iilb_intra_flow_credit_u_t; -#else -typedef union sh_xniilb_fr_iilb_intra_flow_credit_u { - mmr_t sh_xniilb_fr_iilb_intra_flow_credit_regval; - struct { - mmr_t reserved_5 : 17; - mmr_t vc2_cap : 7; - mmr_t reserved_4 : 1; - mmr_t vc2_dyn : 7; - mmr_t reserved_3 : 1; - mmr_t vc2_test : 7; - mmr_t reserved_2 : 1; - mmr_t vc0_cap : 7; - mmr_t reserved_1 : 1; - mmr_t vc0_dyn : 7; - mmr_t reserved_0 : 1; - mmr_t vc0_test : 7; - } sh_xniilb_fr_iilb_intra_flow_credit_s; -} sh_xniilb_fr_iilb_intra_flow_credit_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNIILB_FR_PI_INTRA_FLOW_CREDIT" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xniilb_fr_pi_intra_flow_credit_u { mmr_t sh_xniilb_fr_pi_intra_flow_credit_regval; struct { @@ -8841,31 +4780,11 @@ typedef union sh_xniilb_fr_pi_intra_flow mmr_t reserved_5 : 17; } sh_xniilb_fr_pi_intra_flow_credit_s; } sh_xniilb_fr_pi_intra_flow_credit_u_t; -#else -typedef union sh_xniilb_fr_pi_intra_flow_credit_u { - mmr_t sh_xniilb_fr_pi_intra_flow_credit_regval; - struct { - mmr_t reserved_5 : 17; - mmr_t vc2_cap : 7; - mmr_t reserved_4 : 1; - mmr_t vc2_dyn : 7; - mmr_t reserved_3 : 1; - mmr_t vc2_test : 7; - mmr_t reserved_2 : 1; - mmr_t vc0_cap : 7; - mmr_t reserved_1 : 1; - mmr_t vc0_dyn : 7; - mmr_t reserved_0 : 1; - mmr_t vc0_test : 7; - } sh_xniilb_fr_pi_intra_flow_credit_s; -} sh_xniilb_fr_pi_intra_flow_credit_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI0_TO_PI_INTRA_FLOW_DEBIT" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni0_to_pi_intra_flow_debit_u { mmr_t sh_xnni0_to_pi_intra_flow_debit_regval; struct { @@ -8886,34 +4805,11 @@ typedef union sh_xnni0_to_pi_intra_flow_ mmr_t reserved_6 : 1; } sh_xnni0_to_pi_intra_flow_debit_s; } sh_xnni0_to_pi_intra_flow_debit_u_t; -#else -typedef union sh_xnni0_to_pi_intra_flow_debit_u { - mmr_t sh_xnni0_to_pi_intra_flow_debit_regval; - struct { - mmr_t reserved_6 : 1; - mmr_t vc2_cap : 7; - mmr_t reserved_5 : 1; - mmr_t vc2_dyn : 7; - mmr_t reserved_4 : 9; - mmr_t vc0_cap : 7; - mmr_t reserved_3 : 1; - mmr_t vc0_dyn : 7; - mmr_t reserved_2 : 8; - mmr_t vc2_force_cred : 1; - mmr_t reserved_1 : 1; - mmr_t vc2_withhold : 6; - mmr_t vc0_force_cred : 1; - mmr_t reserved_0 : 1; - mmr_t vc0_withhold : 6; - } sh_xnni0_to_pi_intra_flow_debit_s; -} sh_xnni0_to_pi_intra_flow_debit_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI0_TO_MD_INTRA_FLOW_DEBIT" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni0_to_md_intra_flow_debit_u { mmr_t sh_xnni0_to_md_intra_flow_debit_regval; struct { @@ -8934,34 +4830,11 @@ typedef union sh_xnni0_to_md_intra_flow_ mmr_t reserved_6 : 1; } sh_xnni0_to_md_intra_flow_debit_s; } sh_xnni0_to_md_intra_flow_debit_u_t; -#else -typedef union sh_xnni0_to_md_intra_flow_debit_u { - mmr_t sh_xnni0_to_md_intra_flow_debit_regval; - struct { - mmr_t reserved_6 : 1; - mmr_t vc2_cap : 7; - mmr_t reserved_5 : 1; - mmr_t vc2_dyn : 7; - mmr_t reserved_4 : 9; - mmr_t vc0_cap : 7; - mmr_t reserved_3 : 1; - mmr_t vc0_dyn : 7; - mmr_t reserved_2 : 8; - mmr_t vc2_force_cred : 1; - mmr_t reserved_1 : 1; - mmr_t vc2_withhold : 6; - mmr_t vc0_force_cred : 1; - mmr_t reserved_0 : 1; - mmr_t vc0_withhold : 6; - } sh_xnni0_to_md_intra_flow_debit_s; -} sh_xnni0_to_md_intra_flow_debit_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI0_TO_IILB_INTRA_FLOW_DEBIT" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni0_to_iilb_intra_flow_debit_u { mmr_t sh_xnni0_to_iilb_intra_flow_debit_regval; struct { @@ -8982,34 +4855,11 @@ typedef union sh_xnni0_to_iilb_intra_flo mmr_t reserved_6 : 1; } sh_xnni0_to_iilb_intra_flow_debit_s; } sh_xnni0_to_iilb_intra_flow_debit_u_t; -#else -typedef union sh_xnni0_to_iilb_intra_flow_debit_u { - mmr_t sh_xnni0_to_iilb_intra_flow_debit_regval; - struct { - mmr_t reserved_6 : 1; - mmr_t vc2_cap : 7; - mmr_t reserved_5 : 1; - mmr_t vc2_dyn : 7; - mmr_t reserved_4 : 9; - mmr_t vc0_cap : 7; - mmr_t reserved_3 : 1; - mmr_t vc0_dyn : 7; - mmr_t reserved_2 : 8; - mmr_t vc2_force_cred : 1; - mmr_t reserved_1 : 1; - mmr_t vc2_withhold : 6; - mmr_t vc0_force_cred : 1; - mmr_t reserved_0 : 1; - mmr_t vc0_withhold : 6; - } sh_xnni0_to_iilb_intra_flow_debit_s; -} sh_xnni0_to_iilb_intra_flow_debit_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI0_FR_PI_INTRA_FLOW_CREDIT" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni0_fr_pi_intra_flow_credit_u { mmr_t sh_xnni0_fr_pi_intra_flow_credit_regval; struct { @@ -9027,31 +4877,11 @@ typedef union sh_xnni0_fr_pi_intra_flow_ mmr_t reserved_5 : 17; } sh_xnni0_fr_pi_intra_flow_credit_s; } sh_xnni0_fr_pi_intra_flow_credit_u_t; -#else -typedef union sh_xnni0_fr_pi_intra_flow_credit_u { - mmr_t sh_xnni0_fr_pi_intra_flow_credit_regval; - struct { - mmr_t reserved_5 : 17; - mmr_t vc2_cap : 7; - mmr_t reserved_4 : 1; - mmr_t vc2_dyn : 7; - mmr_t reserved_3 : 1; - mmr_t vc2_test : 7; - mmr_t reserved_2 : 1; - mmr_t vc0_cap : 7; - mmr_t reserved_1 : 1; - mmr_t vc0_dyn : 7; - mmr_t reserved_0 : 1; - mmr_t vc0_test : 7; - } sh_xnni0_fr_pi_intra_flow_credit_s; -} sh_xnni0_fr_pi_intra_flow_credit_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI0_FR_MD_INTRA_FLOW_CREDIT" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni0_fr_md_intra_flow_credit_u { mmr_t sh_xnni0_fr_md_intra_flow_credit_regval; struct { @@ -9069,31 +4899,11 @@ typedef union sh_xnni0_fr_md_intra_flow_ mmr_t reserved_5 : 17; } sh_xnni0_fr_md_intra_flow_credit_s; } sh_xnni0_fr_md_intra_flow_credit_u_t; -#else -typedef union sh_xnni0_fr_md_intra_flow_credit_u { - mmr_t sh_xnni0_fr_md_intra_flow_credit_regval; - struct { - mmr_t reserved_5 : 17; - mmr_t vc2_cap : 7; - mmr_t reserved_4 : 1; - mmr_t vc2_dyn : 7; - mmr_t reserved_3 : 1; - mmr_t vc2_test : 7; - mmr_t reserved_2 : 1; - mmr_t vc0_cap : 7; - mmr_t reserved_1 : 1; - mmr_t vc0_dyn : 7; - mmr_t reserved_0 : 1; - mmr_t vc0_test : 7; - } sh_xnni0_fr_md_intra_flow_credit_s; -} sh_xnni0_fr_md_intra_flow_credit_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI0_FR_IILB_INTRA_FLOW_CREDIT" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni0_fr_iilb_intra_flow_credit_u { mmr_t sh_xnni0_fr_iilb_intra_flow_credit_regval; struct { @@ -9111,31 +4921,11 @@ typedef union sh_xnni0_fr_iilb_intra_flo mmr_t reserved_5 : 17; } sh_xnni0_fr_iilb_intra_flow_credit_s; } sh_xnni0_fr_iilb_intra_flow_credit_u_t; -#else -typedef union sh_xnni0_fr_iilb_intra_flow_credit_u { - mmr_t sh_xnni0_fr_iilb_intra_flow_credit_regval; - struct { - mmr_t reserved_5 : 17; - mmr_t vc2_cap : 7; - mmr_t reserved_4 : 1; - mmr_t vc2_dyn : 7; - mmr_t reserved_3 : 1; - mmr_t vc2_test : 7; - mmr_t reserved_2 : 1; - mmr_t vc0_cap : 7; - mmr_t reserved_1 : 1; - mmr_t vc0_dyn : 7; - mmr_t reserved_0 : 1; - mmr_t vc0_test : 7; - } sh_xnni0_fr_iilb_intra_flow_credit_s; -} sh_xnni0_fr_iilb_intra_flow_credit_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI0_0_INTRANI_FLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni0_0_intrani_flow_u { mmr_t sh_xnni0_0_intrani_flow_regval; struct { @@ -9145,23 +4935,11 @@ typedef union sh_xnni0_0_intrani_flow_u mmr_t reserved_1 : 56; } sh_xnni0_0_intrani_flow_s; } sh_xnni0_0_intrani_flow_u_t; -#else -typedef union sh_xnni0_0_intrani_flow_u { - mmr_t sh_xnni0_0_intrani_flow_regval; - struct { - mmr_t reserved_1 : 56; - mmr_t debit_vc0_force_cred : 1; - mmr_t reserved_0 : 1; - mmr_t debit_vc0_withhold : 6; - } sh_xnni0_0_intrani_flow_s; -} sh_xnni0_0_intrani_flow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI0_1_INTRANI_FLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni0_1_intrani_flow_u { mmr_t sh_xnni0_1_intrani_flow_regval; struct { @@ -9171,23 +4949,11 @@ typedef union sh_xnni0_1_intrani_flow_u mmr_t reserved_1 : 56; } sh_xnni0_1_intrani_flow_s; } sh_xnni0_1_intrani_flow_u_t; -#else -typedef union sh_xnni0_1_intrani_flow_u { - mmr_t sh_xnni0_1_intrani_flow_regval; - struct { - mmr_t reserved_1 : 56; - mmr_t debit_vc1_force_cred : 1; - mmr_t reserved_0 : 1; - mmr_t debit_vc1_withhold : 6; - } sh_xnni0_1_intrani_flow_s; -} sh_xnni0_1_intrani_flow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI0_2_INTRANI_FLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni0_2_intrani_flow_u { mmr_t sh_xnni0_2_intrani_flow_regval; struct { @@ -9197,23 +4963,11 @@ typedef union sh_xnni0_2_intrani_flow_u mmr_t reserved_1 : 56; } sh_xnni0_2_intrani_flow_s; } sh_xnni0_2_intrani_flow_u_t; -#else -typedef union sh_xnni0_2_intrani_flow_u { - mmr_t sh_xnni0_2_intrani_flow_regval; - struct { - mmr_t reserved_1 : 56; - mmr_t debit_vc2_force_cred : 1; - mmr_t reserved_0 : 1; - mmr_t debit_vc2_withhold : 6; - } sh_xnni0_2_intrani_flow_s; -} sh_xnni0_2_intrani_flow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI0_3_INTRANI_FLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni0_3_intrani_flow_u { mmr_t sh_xnni0_3_intrani_flow_regval; struct { @@ -9223,23 +4977,11 @@ typedef union sh_xnni0_3_intrani_flow_u mmr_t reserved_1 : 56; } sh_xnni0_3_intrani_flow_s; } sh_xnni0_3_intrani_flow_u_t; -#else -typedef union sh_xnni0_3_intrani_flow_u { - mmr_t sh_xnni0_3_intrani_flow_regval; - struct { - mmr_t reserved_1 : 56; - mmr_t debit_vc3_force_cred : 1; - mmr_t reserved_0 : 1; - mmr_t debit_vc3_withhold : 6; - } sh_xnni0_3_intrani_flow_s; -} sh_xnni0_3_intrani_flow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI0_VCSWITCH_FLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni0_vcswitch_flow_u { mmr_t sh_xnni0_vcswitch_flow_regval; struct { @@ -9257,31 +4999,11 @@ typedef union sh_xnni0_vcswitch_flow_u { mmr_t reserved_4 : 29; } sh_xnni0_vcswitch_flow_s; } sh_xnni0_vcswitch_flow_u_t; -#else -typedef union sh_xnni0_vcswitch_flow_u { - mmr_t sh_xnni0_vcswitch_flow_regval; - struct { - mmr_t reserved_4 : 29; - mmr_t async_fifoes : 1; - mmr_t disable_sync_bypass_out : 1; - mmr_t disable_sync_bypass_in : 1; - mmr_t reserved_3 : 7; - mmr_t iilb_vcfifo_switch : 1; - mmr_t reserved_2 : 7; - mmr_t md_vcfifo_switch : 1; - mmr_t reserved_1 : 7; - mmr_t pi_vcfifo_switch : 1; - mmr_t reserved_0 : 7; - mmr_t ni_vcfifo_dateline_switch : 1; - } sh_xnni0_vcswitch_flow_s; -} sh_xnni0_vcswitch_flow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI0_TIMER_REG" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni0_timer_reg_u { mmr_t sh_xnni0_timer_reg_regval; struct { @@ -9291,23 +5013,11 @@ typedef union sh_xnni0_timer_reg_u { mmr_t reserved_1 : 31; } sh_xnni0_timer_reg_s; } sh_xnni0_timer_reg_u_t; -#else -typedef union sh_xnni0_timer_reg_u { - mmr_t sh_xnni0_timer_reg_regval; - struct { - mmr_t reserved_1 : 31; - mmr_t linkcleanup_reg : 1; - mmr_t reserved_0 : 8; - mmr_t timeout_reg : 24; - } sh_xnni0_timer_reg_s; -} sh_xnni0_timer_reg_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI0_FIFO02_FLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni0_fifo02_flow_u { mmr_t sh_xnni0_fifo02_flow_regval; struct { @@ -9325,31 +5035,11 @@ typedef union sh_xnni0_fifo02_flow_u { mmr_t reserved_5 : 20; } sh_xnni0_fifo02_flow_s; } sh_xnni0_fifo02_flow_u_t; -#else -typedef union sh_xnni0_fifo02_flow_u { - mmr_t sh_xnni0_fifo02_flow_regval; - struct { - mmr_t reserved_5 : 20; - mmr_t count_vc2_cap : 4; - mmr_t reserved_4 : 4; - mmr_t count_vc2_dyn : 4; - mmr_t reserved_3 : 4; - mmr_t count_vc2_limit : 4; - mmr_t reserved_2 : 4; - mmr_t count_vc0_cap : 4; - mmr_t reserved_1 : 4; - mmr_t count_vc0_dyn : 4; - mmr_t reserved_0 : 4; - mmr_t count_vc0_limit : 4; - } sh_xnni0_fifo02_flow_s; -} sh_xnni0_fifo02_flow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI0_FIFO13_FLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni0_fifo13_flow_u { mmr_t sh_xnni0_fifo13_flow_regval; struct { @@ -9367,31 +5057,11 @@ typedef union sh_xnni0_fifo13_flow_u { mmr_t reserved_5 : 20; } sh_xnni0_fifo13_flow_s; } sh_xnni0_fifo13_flow_u_t; -#else -typedef union sh_xnni0_fifo13_flow_u { - mmr_t sh_xnni0_fifo13_flow_regval; - struct { - mmr_t reserved_5 : 20; - mmr_t count_vc3_cap : 4; - mmr_t reserved_4 : 4; - mmr_t count_vc3_dyn : 4; - mmr_t reserved_3 : 4; - mmr_t count_vc3_limit : 4; - mmr_t reserved_2 : 4; - mmr_t count_vc1_cap : 4; - mmr_t reserved_1 : 4; - mmr_t count_vc1_dyn : 4; - mmr_t reserved_0 : 4; - mmr_t count_vc1_limit : 4; - } sh_xnni0_fifo13_flow_s; -} sh_xnni0_fifo13_flow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI0_NI_FLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni0_ni_flow_u { mmr_t sh_xnni0_ni_flow_regval; struct { @@ -9413,35 +5083,11 @@ typedef union sh_xnni0_ni_flow_u { mmr_t vc3_cap : 4; } sh_xnni0_ni_flow_s; } sh_xnni0_ni_flow_u_t; -#else -typedef union sh_xnni0_ni_flow_u { - mmr_t sh_xnni0_ni_flow_regval; - struct { - mmr_t vc3_cap : 4; - mmr_t vc3_dyn : 4; - mmr_t reserved_3 : 4; - mmr_t vc3_limit : 4; - mmr_t vc2_cap : 4; - mmr_t vc2_dyn : 4; - mmr_t reserved_2 : 4; - mmr_t vc2_limit : 4; - mmr_t vc1_cap : 4; - mmr_t vc1_dyn : 4; - mmr_t reserved_1 : 4; - mmr_t vc1_limit : 4; - mmr_t vc0_cap : 4; - mmr_t vc0_dyn : 4; - mmr_t reserved_0 : 4; - mmr_t vc0_limit : 4; - } sh_xnni0_ni_flow_s; -} sh_xnni0_ni_flow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI0_DEAD_FLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni0_dead_flow_u { mmr_t sh_xnni0_dead_flow_regval; struct { @@ -9463,35 +5109,11 @@ typedef union sh_xnni0_dead_flow_u { mmr_t vc3_cap : 4; } sh_xnni0_dead_flow_s; } sh_xnni0_dead_flow_u_t; -#else -typedef union sh_xnni0_dead_flow_u { - mmr_t sh_xnni0_dead_flow_regval; - struct { - mmr_t vc3_cap : 4; - mmr_t vc3_dyn : 4; - mmr_t reserved_3 : 4; - mmr_t vc3_limit : 4; - mmr_t vc2_cap : 4; - mmr_t vc2_dyn : 4; - mmr_t reserved_2 : 4; - mmr_t vc2_limit : 4; - mmr_t vc1_cap : 4; - mmr_t vc1_dyn : 4; - mmr_t reserved_1 : 4; - mmr_t vc1_limit : 4; - mmr_t vc0_cap : 4; - mmr_t vc0_dyn : 4; - mmr_t reserved_0 : 4; - mmr_t vc0_limit : 4; - } sh_xnni0_dead_flow_s; -} sh_xnni0_dead_flow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI0_INJECT_AGE" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni0_inject_age_u { mmr_t sh_xnni0_inject_age_regval; struct { @@ -9500,22 +5122,11 @@ typedef union sh_xnni0_inject_age_u { mmr_t reserved_0 : 48; } sh_xnni0_inject_age_s; } sh_xnni0_inject_age_u_t; -#else -typedef union sh_xnni0_inject_age_u { - mmr_t sh_xnni0_inject_age_regval; - struct { - mmr_t reserved_0 : 48; - mmr_t reply_inject : 8; - mmr_t request_inject : 8; - } sh_xnni0_inject_age_s; -} sh_xnni0_inject_age_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI1_TO_PI_INTRA_FLOW_DEBIT" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni1_to_pi_intra_flow_debit_u { mmr_t sh_xnni1_to_pi_intra_flow_debit_regval; struct { @@ -9536,34 +5147,11 @@ typedef union sh_xnni1_to_pi_intra_flow_ mmr_t reserved_6 : 1; } sh_xnni1_to_pi_intra_flow_debit_s; } sh_xnni1_to_pi_intra_flow_debit_u_t; -#else -typedef union sh_xnni1_to_pi_intra_flow_debit_u { - mmr_t sh_xnni1_to_pi_intra_flow_debit_regval; - struct { - mmr_t reserved_6 : 1; - mmr_t vc2_cap : 7; - mmr_t reserved_5 : 1; - mmr_t vc2_dyn : 7; - mmr_t reserved_4 : 9; - mmr_t vc0_cap : 7; - mmr_t reserved_3 : 1; - mmr_t vc0_dyn : 7; - mmr_t reserved_2 : 8; - mmr_t vc2_force_cred : 1; - mmr_t reserved_1 : 1; - mmr_t vc2_withhold : 6; - mmr_t vc0_force_cred : 1; - mmr_t reserved_0 : 1; - mmr_t vc0_withhold : 6; - } sh_xnni1_to_pi_intra_flow_debit_s; -} sh_xnni1_to_pi_intra_flow_debit_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI1_TO_MD_INTRA_FLOW_DEBIT" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni1_to_md_intra_flow_debit_u { mmr_t sh_xnni1_to_md_intra_flow_debit_regval; struct { @@ -9584,34 +5172,11 @@ typedef union sh_xnni1_to_md_intra_flow_ mmr_t reserved_6 : 1; } sh_xnni1_to_md_intra_flow_debit_s; } sh_xnni1_to_md_intra_flow_debit_u_t; -#else -typedef union sh_xnni1_to_md_intra_flow_debit_u { - mmr_t sh_xnni1_to_md_intra_flow_debit_regval; - struct { - mmr_t reserved_6 : 1; - mmr_t vc2_cap : 7; - mmr_t reserved_5 : 1; - mmr_t vc2_dyn : 7; - mmr_t reserved_4 : 9; - mmr_t vc0_cap : 7; - mmr_t reserved_3 : 1; - mmr_t vc0_dyn : 7; - mmr_t reserved_2 : 8; - mmr_t vc2_force_cred : 1; - mmr_t reserved_1 : 1; - mmr_t vc2_withhold : 6; - mmr_t vc0_force_cred : 1; - mmr_t reserved_0 : 1; - mmr_t vc0_withhold : 6; - } sh_xnni1_to_md_intra_flow_debit_s; -} sh_xnni1_to_md_intra_flow_debit_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI1_TO_IILB_INTRA_FLOW_DEBIT" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni1_to_iilb_intra_flow_debit_u { mmr_t sh_xnni1_to_iilb_intra_flow_debit_regval; struct { @@ -9632,34 +5197,11 @@ typedef union sh_xnni1_to_iilb_intra_flo mmr_t reserved_6 : 1; } sh_xnni1_to_iilb_intra_flow_debit_s; } sh_xnni1_to_iilb_intra_flow_debit_u_t; -#else -typedef union sh_xnni1_to_iilb_intra_flow_debit_u { - mmr_t sh_xnni1_to_iilb_intra_flow_debit_regval; - struct { - mmr_t reserved_6 : 1; - mmr_t vc2_cap : 7; - mmr_t reserved_5 : 1; - mmr_t vc2_dyn : 7; - mmr_t reserved_4 : 9; - mmr_t vc0_cap : 7; - mmr_t reserved_3 : 1; - mmr_t vc0_dyn : 7; - mmr_t reserved_2 : 8; - mmr_t vc2_force_cred : 1; - mmr_t reserved_1 : 1; - mmr_t vc2_withhold : 6; - mmr_t vc0_force_cred : 1; - mmr_t reserved_0 : 1; - mmr_t vc0_withhold : 6; - } sh_xnni1_to_iilb_intra_flow_debit_s; -} sh_xnni1_to_iilb_intra_flow_debit_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI1_FR_PI_INTRA_FLOW_CREDIT" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni1_fr_pi_intra_flow_credit_u { mmr_t sh_xnni1_fr_pi_intra_flow_credit_regval; struct { @@ -9677,31 +5219,11 @@ typedef union sh_xnni1_fr_pi_intra_flow_ mmr_t reserved_5 : 17; } sh_xnni1_fr_pi_intra_flow_credit_s; } sh_xnni1_fr_pi_intra_flow_credit_u_t; -#else -typedef union sh_xnni1_fr_pi_intra_flow_credit_u { - mmr_t sh_xnni1_fr_pi_intra_flow_credit_regval; - struct { - mmr_t reserved_5 : 17; - mmr_t vc2_cap : 7; - mmr_t reserved_4 : 1; - mmr_t vc2_dyn : 7; - mmr_t reserved_3 : 1; - mmr_t vc2_test : 7; - mmr_t reserved_2 : 1; - mmr_t vc0_cap : 7; - mmr_t reserved_1 : 1; - mmr_t vc0_dyn : 7; - mmr_t reserved_0 : 1; - mmr_t vc0_test : 7; - } sh_xnni1_fr_pi_intra_flow_credit_s; -} sh_xnni1_fr_pi_intra_flow_credit_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI1_FR_MD_INTRA_FLOW_CREDIT" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni1_fr_md_intra_flow_credit_u { mmr_t sh_xnni1_fr_md_intra_flow_credit_regval; struct { @@ -9719,31 +5241,11 @@ typedef union sh_xnni1_fr_md_intra_flow_ mmr_t reserved_5 : 17; } sh_xnni1_fr_md_intra_flow_credit_s; } sh_xnni1_fr_md_intra_flow_credit_u_t; -#else -typedef union sh_xnni1_fr_md_intra_flow_credit_u { - mmr_t sh_xnni1_fr_md_intra_flow_credit_regval; - struct { - mmr_t reserved_5 : 17; - mmr_t vc2_cap : 7; - mmr_t reserved_4 : 1; - mmr_t vc2_dyn : 7; - mmr_t reserved_3 : 1; - mmr_t vc2_test : 7; - mmr_t reserved_2 : 1; - mmr_t vc0_cap : 7; - mmr_t reserved_1 : 1; - mmr_t vc0_dyn : 7; - mmr_t reserved_0 : 1; - mmr_t vc0_test : 7; - } sh_xnni1_fr_md_intra_flow_credit_s; -} sh_xnni1_fr_md_intra_flow_credit_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI1_FR_IILB_INTRA_FLOW_CREDIT" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni1_fr_iilb_intra_flow_credit_u { mmr_t sh_xnni1_fr_iilb_intra_flow_credit_regval; struct { @@ -9761,31 +5263,11 @@ typedef union sh_xnni1_fr_iilb_intra_flo mmr_t reserved_5 : 17; } sh_xnni1_fr_iilb_intra_flow_credit_s; } sh_xnni1_fr_iilb_intra_flow_credit_u_t; -#else -typedef union sh_xnni1_fr_iilb_intra_flow_credit_u { - mmr_t sh_xnni1_fr_iilb_intra_flow_credit_regval; - struct { - mmr_t reserved_5 : 17; - mmr_t vc2_cap : 7; - mmr_t reserved_4 : 1; - mmr_t vc2_dyn : 7; - mmr_t reserved_3 : 1; - mmr_t vc2_test : 7; - mmr_t reserved_2 : 1; - mmr_t vc0_cap : 7; - mmr_t reserved_1 : 1; - mmr_t vc0_dyn : 7; - mmr_t reserved_0 : 1; - mmr_t vc0_test : 7; - } sh_xnni1_fr_iilb_intra_flow_credit_s; -} sh_xnni1_fr_iilb_intra_flow_credit_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI1_0_INTRANI_FLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni1_0_intrani_flow_u { mmr_t sh_xnni1_0_intrani_flow_regval; struct { @@ -9795,23 +5277,11 @@ typedef union sh_xnni1_0_intrani_flow_u mmr_t reserved_1 : 56; } sh_xnni1_0_intrani_flow_s; } sh_xnni1_0_intrani_flow_u_t; -#else -typedef union sh_xnni1_0_intrani_flow_u { - mmr_t sh_xnni1_0_intrani_flow_regval; - struct { - mmr_t reserved_1 : 56; - mmr_t debit_vc0_force_cred : 1; - mmr_t reserved_0 : 1; - mmr_t debit_vc0_withhold : 6; - } sh_xnni1_0_intrani_flow_s; -} sh_xnni1_0_intrani_flow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI1_1_INTRANI_FLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni1_1_intrani_flow_u { mmr_t sh_xnni1_1_intrani_flow_regval; struct { @@ -9821,23 +5291,11 @@ typedef union sh_xnni1_1_intrani_flow_u mmr_t reserved_1 : 56; } sh_xnni1_1_intrani_flow_s; } sh_xnni1_1_intrani_flow_u_t; -#else -typedef union sh_xnni1_1_intrani_flow_u { - mmr_t sh_xnni1_1_intrani_flow_regval; - struct { - mmr_t reserved_1 : 56; - mmr_t debit_vc1_force_cred : 1; - mmr_t reserved_0 : 1; - mmr_t debit_vc1_withhold : 6; - } sh_xnni1_1_intrani_flow_s; -} sh_xnni1_1_intrani_flow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI1_2_INTRANI_FLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni1_2_intrani_flow_u { mmr_t sh_xnni1_2_intrani_flow_regval; struct { @@ -9847,23 +5305,11 @@ typedef union sh_xnni1_2_intrani_flow_u mmr_t reserved_1 : 56; } sh_xnni1_2_intrani_flow_s; } sh_xnni1_2_intrani_flow_u_t; -#else -typedef union sh_xnni1_2_intrani_flow_u { - mmr_t sh_xnni1_2_intrani_flow_regval; - struct { - mmr_t reserved_1 : 56; - mmr_t debit_vc2_force_cred : 1; - mmr_t reserved_0 : 1; - mmr_t debit_vc2_withhold : 6; - } sh_xnni1_2_intrani_flow_s; -} sh_xnni1_2_intrani_flow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI1_3_INTRANI_FLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni1_3_intrani_flow_u { mmr_t sh_xnni1_3_intrani_flow_regval; struct { @@ -9873,23 +5319,11 @@ typedef union sh_xnni1_3_intrani_flow_u mmr_t reserved_1 : 56; } sh_xnni1_3_intrani_flow_s; } sh_xnni1_3_intrani_flow_u_t; -#else -typedef union sh_xnni1_3_intrani_flow_u { - mmr_t sh_xnni1_3_intrani_flow_regval; - struct { - mmr_t reserved_1 : 56; - mmr_t debit_vc3_force_cred : 1; - mmr_t reserved_0 : 1; - mmr_t debit_vc3_withhold : 6; - } sh_xnni1_3_intrani_flow_s; -} sh_xnni1_3_intrani_flow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI1_VCSWITCH_FLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni1_vcswitch_flow_u { mmr_t sh_xnni1_vcswitch_flow_regval; struct { @@ -9907,31 +5341,11 @@ typedef union sh_xnni1_vcswitch_flow_u { mmr_t reserved_4 : 29; } sh_xnni1_vcswitch_flow_s; } sh_xnni1_vcswitch_flow_u_t; -#else -typedef union sh_xnni1_vcswitch_flow_u { - mmr_t sh_xnni1_vcswitch_flow_regval; - struct { - mmr_t reserved_4 : 29; - mmr_t async_fifoes : 1; - mmr_t disable_sync_bypass_out : 1; - mmr_t disable_sync_bypass_in : 1; - mmr_t reserved_3 : 7; - mmr_t iilb_vcfifo_switch : 1; - mmr_t reserved_2 : 7; - mmr_t md_vcfifo_switch : 1; - mmr_t reserved_1 : 7; - mmr_t pi_vcfifo_switch : 1; - mmr_t reserved_0 : 7; - mmr_t ni_vcfifo_dateline_switch : 1; - } sh_xnni1_vcswitch_flow_s; -} sh_xnni1_vcswitch_flow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI1_TIMER_REG" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni1_timer_reg_u { mmr_t sh_xnni1_timer_reg_regval; struct { @@ -9941,23 +5355,11 @@ typedef union sh_xnni1_timer_reg_u { mmr_t reserved_1 : 31; } sh_xnni1_timer_reg_s; } sh_xnni1_timer_reg_u_t; -#else -typedef union sh_xnni1_timer_reg_u { - mmr_t sh_xnni1_timer_reg_regval; - struct { - mmr_t reserved_1 : 31; - mmr_t linkcleanup_reg : 1; - mmr_t reserved_0 : 8; - mmr_t timeout_reg : 24; - } sh_xnni1_timer_reg_s; -} sh_xnni1_timer_reg_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI1_FIFO02_FLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni1_fifo02_flow_u { mmr_t sh_xnni1_fifo02_flow_regval; struct { @@ -9975,31 +5377,11 @@ typedef union sh_xnni1_fifo02_flow_u { mmr_t reserved_5 : 20; } sh_xnni1_fifo02_flow_s; } sh_xnni1_fifo02_flow_u_t; -#else -typedef union sh_xnni1_fifo02_flow_u { - mmr_t sh_xnni1_fifo02_flow_regval; - struct { - mmr_t reserved_5 : 20; - mmr_t count_vc2_cap : 4; - mmr_t reserved_4 : 4; - mmr_t count_vc2_dyn : 4; - mmr_t reserved_3 : 4; - mmr_t count_vc2_limit : 4; - mmr_t reserved_2 : 4; - mmr_t count_vc0_cap : 4; - mmr_t reserved_1 : 4; - mmr_t count_vc0_dyn : 4; - mmr_t reserved_0 : 4; - mmr_t count_vc0_limit : 4; - } sh_xnni1_fifo02_flow_s; -} sh_xnni1_fifo02_flow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI1_FIFO13_FLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni1_fifo13_flow_u { mmr_t sh_xnni1_fifo13_flow_regval; struct { @@ -10017,31 +5399,11 @@ typedef union sh_xnni1_fifo13_flow_u { mmr_t reserved_5 : 20; } sh_xnni1_fifo13_flow_s; } sh_xnni1_fifo13_flow_u_t; -#else -typedef union sh_xnni1_fifo13_flow_u { - mmr_t sh_xnni1_fifo13_flow_regval; - struct { - mmr_t reserved_5 : 20; - mmr_t count_vc3_cap : 4; - mmr_t reserved_4 : 4; - mmr_t count_vc3_dyn : 4; - mmr_t reserved_3 : 4; - mmr_t count_vc3_limit : 4; - mmr_t reserved_2 : 4; - mmr_t count_vc1_cap : 4; - mmr_t reserved_1 : 4; - mmr_t count_vc1_dyn : 4; - mmr_t reserved_0 : 4; - mmr_t count_vc1_limit : 4; - } sh_xnni1_fifo13_flow_s; -} sh_xnni1_fifo13_flow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI1_NI_FLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni1_ni_flow_u { mmr_t sh_xnni1_ni_flow_regval; struct { @@ -10063,35 +5425,11 @@ typedef union sh_xnni1_ni_flow_u { mmr_t vc3_cap : 4; } sh_xnni1_ni_flow_s; } sh_xnni1_ni_flow_u_t; -#else -typedef union sh_xnni1_ni_flow_u { - mmr_t sh_xnni1_ni_flow_regval; - struct { - mmr_t vc3_cap : 4; - mmr_t vc3_dyn : 4; - mmr_t reserved_3 : 4; - mmr_t vc3_limit : 4; - mmr_t vc2_cap : 4; - mmr_t vc2_dyn : 4; - mmr_t reserved_2 : 4; - mmr_t vc2_limit : 4; - mmr_t vc1_cap : 4; - mmr_t vc1_dyn : 4; - mmr_t reserved_1 : 4; - mmr_t vc1_limit : 4; - mmr_t vc0_cap : 4; - mmr_t vc0_dyn : 4; - mmr_t reserved_0 : 4; - mmr_t vc0_limit : 4; - } sh_xnni1_ni_flow_s; -} sh_xnni1_ni_flow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI1_DEAD_FLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni1_dead_flow_u { mmr_t sh_xnni1_dead_flow_regval; struct { @@ -10113,35 +5451,11 @@ typedef union sh_xnni1_dead_flow_u { mmr_t vc3_cap : 4; } sh_xnni1_dead_flow_s; } sh_xnni1_dead_flow_u_t; -#else -typedef union sh_xnni1_dead_flow_u { - mmr_t sh_xnni1_dead_flow_regval; - struct { - mmr_t vc3_cap : 4; - mmr_t vc3_dyn : 4; - mmr_t reserved_3 : 4; - mmr_t vc3_limit : 4; - mmr_t vc2_cap : 4; - mmr_t vc2_dyn : 4; - mmr_t reserved_2 : 4; - mmr_t vc2_limit : 4; - mmr_t vc1_cap : 4; - mmr_t vc1_dyn : 4; - mmr_t reserved_1 : 4; - mmr_t vc1_limit : 4; - mmr_t vc0_cap : 4; - mmr_t vc0_dyn : 4; - mmr_t reserved_0 : 4; - mmr_t vc0_limit : 4; - } sh_xnni1_dead_flow_s; -} sh_xnni1_dead_flow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNNI1_INJECT_AGE" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnni1_inject_age_u { mmr_t sh_xnni1_inject_age_regval; struct { @@ -10150,23 +5464,12 @@ typedef union sh_xnni1_inject_age_u { mmr_t reserved_0 : 48; } sh_xnni1_inject_age_s; } sh_xnni1_inject_age_u_t; -#else -typedef union sh_xnni1_inject_age_u { - mmr_t sh_xnni1_inject_age_regval; - struct { - mmr_t reserved_0 : 48; - mmr_t reply_inject : 8; - mmr_t request_inject : 8; - } sh_xnni1_inject_age_s; -} sh_xnni1_inject_age_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_DEBUG_SEL" */ /* XN Debug Port Select */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_debug_sel_u { mmr_t sh_xn_debug_sel_regval; struct { @@ -10204,52 +5507,12 @@ typedef union sh_xn_debug_sel_u { mmr_t trigger_enable : 1; } sh_xn_debug_sel_s; } sh_xn_debug_sel_u_t; -#else -typedef union sh_xn_debug_sel_u { - mmr_t sh_xn_debug_sel_regval; - struct { - mmr_t trigger_enable : 1; - mmr_t nibble7_nibble_sel : 3; - mmr_t reserved_14 : 1; - mmr_t nibble7_rlm_sel : 3; - mmr_t reserved_13 : 1; - mmr_t nibble6_nibble_sel : 3; - mmr_t reserved_12 : 1; - mmr_t nibble6_rlm_sel : 3; - mmr_t reserved_11 : 1; - mmr_t nibble5_nibble_sel : 3; - mmr_t reserved_10 : 1; - mmr_t nibble5_rlm_sel : 3; - mmr_t reserved_9 : 1; - mmr_t nibble4_nibble_sel : 3; - mmr_t reserved_8 : 1; - mmr_t nibble4_rlm_sel : 3; - mmr_t reserved_7 : 1; - mmr_t nibble3_nibble_sel : 3; - mmr_t reserved_6 : 1; - mmr_t nibble3_rlm_sel : 3; - mmr_t reserved_5 : 1; - mmr_t nibble2_nibble_sel : 3; - mmr_t reserved_4 : 1; - mmr_t nibble2_rlm_sel : 3; - mmr_t reserved_3 : 1; - mmr_t nibble1_nibble_sel : 3; - mmr_t reserved_2 : 1; - mmr_t nibble1_rlm_sel : 3; - mmr_t reserved_1 : 1; - mmr_t nibble0_nibble_sel : 3; - mmr_t reserved_0 : 1; - mmr_t nibble0_rlm_sel : 3; - } sh_xn_debug_sel_s; -} sh_xn_debug_sel_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_DEBUG_TRIG_SEL" */ /* XN Debug trigger Select */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_debug_trig_sel_u { mmr_t sh_xn_debug_trig_sel_regval; struct { @@ -10287,52 +5550,12 @@ typedef union sh_xn_debug_trig_sel_u { mmr_t reserved_15 : 1; } sh_xn_debug_trig_sel_s; } sh_xn_debug_trig_sel_u_t; -#else -typedef union sh_xn_debug_trig_sel_u { - mmr_t sh_xn_debug_trig_sel_regval; - struct { - mmr_t reserved_15 : 1; - mmr_t trigger7_nibble_sel : 3; - mmr_t reserved_14 : 1; - mmr_t trigger7_rlm_sel : 3; - mmr_t reserved_13 : 1; - mmr_t trigger6_nibble_sel : 3; - mmr_t reserved_12 : 1; - mmr_t trigger6_rlm_sel : 3; - mmr_t reserved_11 : 1; - mmr_t trigger5_nibble_sel : 3; - mmr_t reserved_10 : 1; - mmr_t trigger5_rlm_sel : 3; - mmr_t reserved_9 : 1; - mmr_t trigger4_nibble_sel : 3; - mmr_t reserved_8 : 1; - mmr_t trigger4_rlm_sel : 3; - mmr_t reserved_7 : 1; - mmr_t trigger3_nibble_sel : 3; - mmr_t reserved_6 : 1; - mmr_t trigger3_rlm_sel : 3; - mmr_t reserved_5 : 1; - mmr_t trigger2_nibble_sel : 3; - mmr_t reserved_4 : 1; - mmr_t trigger2_rlm_sel : 3; - mmr_t reserved_3 : 1; - mmr_t trigger1_nibble_sel : 3; - mmr_t reserved_2 : 1; - mmr_t trigger1_rlm_sel : 3; - mmr_t reserved_1 : 1; - mmr_t trigger0_nibble_sel : 3; - mmr_t reserved_0 : 1; - mmr_t trigger0_rlm_sel : 3; - } sh_xn_debug_trig_sel_s; -} sh_xn_debug_trig_sel_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_TRIGGER_COMPARE" */ /* XN Debug Compare */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_trigger_compare_u { mmr_t sh_xn_trigger_compare_regval; struct { @@ -10340,22 +5563,12 @@ typedef union sh_xn_trigger_compare_u { mmr_t reserved_0 : 32; } sh_xn_trigger_compare_s; } sh_xn_trigger_compare_u_t; -#else -typedef union sh_xn_trigger_compare_u { - mmr_t sh_xn_trigger_compare_regval; - struct { - mmr_t reserved_0 : 32; - mmr_t mask : 32; - } sh_xn_trigger_compare_s; -} sh_xn_trigger_compare_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_TRIGGER_DATA" */ /* XN Debug Compare Data */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_trigger_data_u { mmr_t sh_xn_trigger_data_regval; struct { @@ -10363,22 +5576,12 @@ typedef union sh_xn_trigger_data_u { mmr_t reserved_0 : 32; } sh_xn_trigger_data_s; } sh_xn_trigger_data_u_t; -#else -typedef union sh_xn_trigger_data_u { - mmr_t sh_xn_trigger_data_regval; - struct { - mmr_t reserved_0 : 32; - mmr_t compare_pattern : 32; - } sh_xn_trigger_data_s; -} sh_xn_trigger_data_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_IILB_DEBUG_SEL" */ /* XN IILB Debug Port Select */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_iilb_debug_sel_u { mmr_t sh_xn_iilb_debug_sel_regval; struct { @@ -10416,52 +5619,12 @@ typedef union sh_xn_iilb_debug_sel_u { mmr_t reserved_15 : 1; } sh_xn_iilb_debug_sel_s; } sh_xn_iilb_debug_sel_u_t; -#else -typedef union sh_xn_iilb_debug_sel_u { - mmr_t sh_xn_iilb_debug_sel_regval; - struct { - mmr_t reserved_15 : 1; - mmr_t nibble7_nibble_sel : 3; - mmr_t reserved_14 : 1; - mmr_t nibble7_input_sel : 3; - mmr_t reserved_13 : 1; - mmr_t nibble6_nibble_sel : 3; - mmr_t reserved_12 : 1; - mmr_t nibble6_input_sel : 3; - mmr_t reserved_11 : 1; - mmr_t nibble5_nibble_sel : 3; - mmr_t reserved_10 : 1; - mmr_t nibble5_input_sel : 3; - mmr_t reserved_9 : 1; - mmr_t nibble4_nibble_sel : 3; - mmr_t reserved_8 : 1; - mmr_t nibble4_input_sel : 3; - mmr_t reserved_7 : 1; - mmr_t nibble3_nibble_sel : 3; - mmr_t reserved_6 : 1; - mmr_t nibble3_input_sel : 3; - mmr_t reserved_5 : 1; - mmr_t nibble2_nibble_sel : 3; - mmr_t reserved_4 : 1; - mmr_t nibble2_input_sel : 3; - mmr_t reserved_3 : 1; - mmr_t nibble1_nibble_sel : 3; - mmr_t reserved_2 : 1; - mmr_t nibble1_input_sel : 3; - mmr_t reserved_1 : 1; - mmr_t nibble0_nibble_sel : 3; - mmr_t reserved_0 : 1; - mmr_t nibble0_input_sel : 3; - } sh_xn_iilb_debug_sel_s; -} sh_xn_iilb_debug_sel_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_PI_DEBUG_SEL" */ /* XN PI Debug Port Select */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_pi_debug_sel_u { mmr_t sh_xn_pi_debug_sel_regval; struct { @@ -10499,52 +5662,12 @@ typedef union sh_xn_pi_debug_sel_u { mmr_t reserved_15 : 1; } sh_xn_pi_debug_sel_s; } sh_xn_pi_debug_sel_u_t; -#else -typedef union sh_xn_pi_debug_sel_u { - mmr_t sh_xn_pi_debug_sel_regval; - struct { - mmr_t reserved_15 : 1; - mmr_t nibble7_nibble_sel : 3; - mmr_t reserved_14 : 1; - mmr_t nibble7_input_sel : 3; - mmr_t reserved_13 : 1; - mmr_t nibble6_nibble_sel : 3; - mmr_t reserved_12 : 1; - mmr_t nibble6_input_sel : 3; - mmr_t reserved_11 : 1; - mmr_t nibble5_nibble_sel : 3; - mmr_t reserved_10 : 1; - mmr_t nibble5_input_sel : 3; - mmr_t reserved_9 : 1; - mmr_t nibble4_nibble_sel : 3; - mmr_t reserved_8 : 1; - mmr_t nibble4_input_sel : 3; - mmr_t reserved_7 : 1; - mmr_t nibble3_nibble_sel : 3; - mmr_t reserved_6 : 1; - mmr_t nibble3_input_sel : 3; - mmr_t reserved_5 : 1; - mmr_t nibble2_nibble_sel : 3; - mmr_t reserved_4 : 1; - mmr_t nibble2_input_sel : 3; - mmr_t reserved_3 : 1; - mmr_t nibble1_nibble_sel : 3; - mmr_t reserved_2 : 1; - mmr_t nibble1_input_sel : 3; - mmr_t reserved_1 : 1; - mmr_t nibble0_nibble_sel : 3; - mmr_t reserved_0 : 1; - mmr_t nibble0_input_sel : 3; - } sh_xn_pi_debug_sel_s; -} sh_xn_pi_debug_sel_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_MD_DEBUG_SEL" */ /* XN MD Debug Port Select */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_md_debug_sel_u { mmr_t sh_xn_md_debug_sel_regval; struct { @@ -10582,54 +5705,14 @@ typedef union sh_xn_md_debug_sel_u { mmr_t reserved_15 : 1; } sh_xn_md_debug_sel_s; } sh_xn_md_debug_sel_u_t; -#else -typedef union sh_xn_md_debug_sel_u { - mmr_t sh_xn_md_debug_sel_regval; - struct { - mmr_t reserved_15 : 1; - mmr_t nibble7_nibble_sel : 3; - mmr_t reserved_14 : 1; - mmr_t nibble7_input_sel : 3; - mmr_t reserved_13 : 1; - mmr_t nibble6_nibble_sel : 3; - mmr_t reserved_12 : 1; - mmr_t nibble6_input_sel : 3; - mmr_t reserved_11 : 1; - mmr_t nibble5_nibble_sel : 3; - mmr_t reserved_10 : 1; - mmr_t nibble5_input_sel : 3; - mmr_t reserved_9 : 1; - mmr_t nibble4_nibble_sel : 3; - mmr_t reserved_8 : 1; - mmr_t nibble4_input_sel : 3; - mmr_t reserved_7 : 1; - mmr_t nibble3_nibble_sel : 3; - mmr_t reserved_6 : 1; - mmr_t nibble3_input_sel : 3; - mmr_t reserved_5 : 1; - mmr_t nibble2_nibble_sel : 3; - mmr_t reserved_4 : 1; - mmr_t nibble2_input_sel : 3; - mmr_t reserved_3 : 1; - mmr_t nibble1_nibble_sel : 3; - mmr_t reserved_2 : 1; - mmr_t nibble1_input_sel : 3; - mmr_t reserved_1 : 1; - mmr_t nibble0_nibble_sel : 3; - mmr_t reserved_0 : 1; - mmr_t nibble0_input_sel : 3; - } sh_xn_md_debug_sel_s; -} sh_xn_md_debug_sel_u_t; -#endif - -/* ==================================================================== */ -/* Register "SH_XN_NI0_DEBUG_SEL" */ -/* XN NI0 Debug Port Select */ -/* ==================================================================== */ - -#ifdef LITTLE_ENDIAN -typedef union sh_xn_ni0_debug_sel_u { - mmr_t sh_xn_ni0_debug_sel_regval; + +/* ==================================================================== */ +/* Register "SH_XN_NI0_DEBUG_SEL" */ +/* XN NI0 Debug Port Select */ +/* ==================================================================== */ + +typedef union sh_xn_ni0_debug_sel_u { + mmr_t sh_xn_ni0_debug_sel_regval; struct { mmr_t nibble0_input_sel : 3; mmr_t reserved_0 : 1; @@ -10665,52 +5748,12 @@ typedef union sh_xn_ni0_debug_sel_u { mmr_t reserved_15 : 1; } sh_xn_ni0_debug_sel_s; } sh_xn_ni0_debug_sel_u_t; -#else -typedef union sh_xn_ni0_debug_sel_u { - mmr_t sh_xn_ni0_debug_sel_regval; - struct { - mmr_t reserved_15 : 1; - mmr_t nibble7_nibble_sel : 3; - mmr_t reserved_14 : 1; - mmr_t nibble7_input_sel : 3; - mmr_t reserved_13 : 1; - mmr_t nibble6_nibble_sel : 3; - mmr_t reserved_12 : 1; - mmr_t nibble6_input_sel : 3; - mmr_t reserved_11 : 1; - mmr_t nibble5_nibble_sel : 3; - mmr_t reserved_10 : 1; - mmr_t nibble5_input_sel : 3; - mmr_t reserved_9 : 1; - mmr_t nibble4_nibble_sel : 3; - mmr_t reserved_8 : 1; - mmr_t nibble4_input_sel : 3; - mmr_t reserved_7 : 1; - mmr_t nibble3_nibble_sel : 3; - mmr_t reserved_6 : 1; - mmr_t nibble3_input_sel : 3; - mmr_t reserved_5 : 1; - mmr_t nibble2_nibble_sel : 3; - mmr_t reserved_4 : 1; - mmr_t nibble2_input_sel : 3; - mmr_t reserved_3 : 1; - mmr_t nibble1_nibble_sel : 3; - mmr_t reserved_2 : 1; - mmr_t nibble1_input_sel : 3; - mmr_t reserved_1 : 1; - mmr_t nibble0_nibble_sel : 3; - mmr_t reserved_0 : 1; - mmr_t nibble0_input_sel : 3; - } sh_xn_ni0_debug_sel_s; -} sh_xn_ni0_debug_sel_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_NI1_DEBUG_SEL" */ /* XN NI1 Debug Port Select */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_ni1_debug_sel_u { mmr_t sh_xn_ni1_debug_sel_regval; struct { @@ -10748,829 +5791,456 @@ typedef union sh_xn_ni1_debug_sel_u { mmr_t reserved_15 : 1; } sh_xn_ni1_debug_sel_s; } sh_xn_ni1_debug_sel_u_t; -#else -typedef union sh_xn_ni1_debug_sel_u { - mmr_t sh_xn_ni1_debug_sel_regval; - struct { - mmr_t reserved_15 : 1; - mmr_t nibble7_nibble_sel : 3; - mmr_t reserved_14 : 1; - mmr_t nibble7_input_sel : 3; - mmr_t reserved_13 : 1; - mmr_t nibble6_nibble_sel : 3; - mmr_t reserved_12 : 1; - mmr_t nibble6_input_sel : 3; - mmr_t reserved_11 : 1; - mmr_t nibble5_nibble_sel : 3; - mmr_t reserved_10 : 1; - mmr_t nibble5_input_sel : 3; - mmr_t reserved_9 : 1; - mmr_t nibble4_nibble_sel : 3; - mmr_t reserved_8 : 1; - mmr_t nibble4_input_sel : 3; - mmr_t reserved_7 : 1; - mmr_t nibble3_nibble_sel : 3; - mmr_t reserved_6 : 1; - mmr_t nibble3_input_sel : 3; - mmr_t reserved_5 : 1; - mmr_t nibble2_nibble_sel : 3; - mmr_t reserved_4 : 1; - mmr_t nibble2_input_sel : 3; - mmr_t reserved_3 : 1; - mmr_t nibble1_nibble_sel : 3; - mmr_t reserved_2 : 1; - mmr_t nibble1_input_sel : 3; - mmr_t reserved_1 : 1; - mmr_t nibble0_nibble_sel : 3; - mmr_t reserved_0 : 1; - mmr_t nibble0_input_sel : 3; - } sh_xn_ni1_debug_sel_s; -} sh_xn_ni1_debug_sel_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_IILB_LB_CMP_EXP_DATA0" */ /* IILB compare LB input expected data0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_iilb_lb_cmp_exp_data0_u { - mmr_t sh_xn_iilb_lb_cmp_exp_data0_regval; - struct { - mmr_t data : 64; - } sh_xn_iilb_lb_cmp_exp_data0_s; -} sh_xn_iilb_lb_cmp_exp_data0_u_t; -#else typedef union sh_xn_iilb_lb_cmp_exp_data0_u { mmr_t sh_xn_iilb_lb_cmp_exp_data0_regval; struct { mmr_t data : 64; } sh_xn_iilb_lb_cmp_exp_data0_s; } sh_xn_iilb_lb_cmp_exp_data0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_IILB_LB_CMP_EXP_DATA1" */ /* IILB compare LB input expected data1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_iilb_lb_cmp_exp_data1_u { - mmr_t sh_xn_iilb_lb_cmp_exp_data1_regval; - struct { - mmr_t data : 64; - } sh_xn_iilb_lb_cmp_exp_data1_s; -} sh_xn_iilb_lb_cmp_exp_data1_u_t; -#else typedef union sh_xn_iilb_lb_cmp_exp_data1_u { mmr_t sh_xn_iilb_lb_cmp_exp_data1_regval; struct { mmr_t data : 64; } sh_xn_iilb_lb_cmp_exp_data1_s; } sh_xn_iilb_lb_cmp_exp_data1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_IILB_LB_CMP_ENABLE0" */ /* IILB compare LB input enable0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_iilb_lb_cmp_enable0_u { mmr_t sh_xn_iilb_lb_cmp_enable0_regval; struct { mmr_t enable : 64; } sh_xn_iilb_lb_cmp_enable0_s; } sh_xn_iilb_lb_cmp_enable0_u_t; -#else -typedef union sh_xn_iilb_lb_cmp_enable0_u { - mmr_t sh_xn_iilb_lb_cmp_enable0_regval; - struct { - mmr_t enable : 64; - } sh_xn_iilb_lb_cmp_enable0_s; -} sh_xn_iilb_lb_cmp_enable0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_IILB_LB_CMP_ENABLE1" */ /* IILB compare LB input enable1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_iilb_lb_cmp_enable1_u { - mmr_t sh_xn_iilb_lb_cmp_enable1_regval; - struct { - mmr_t enable : 64; - } sh_xn_iilb_lb_cmp_enable1_s; -} sh_xn_iilb_lb_cmp_enable1_u_t; -#else typedef union sh_xn_iilb_lb_cmp_enable1_u { mmr_t sh_xn_iilb_lb_cmp_enable1_regval; struct { mmr_t enable : 64; } sh_xn_iilb_lb_cmp_enable1_s; } sh_xn_iilb_lb_cmp_enable1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_IILB_II_CMP_EXP_DATA0" */ /* IILB compare II input expected data0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_iilb_ii_cmp_exp_data0_u { - mmr_t sh_xn_iilb_ii_cmp_exp_data0_regval; - struct { - mmr_t data : 64; - } sh_xn_iilb_ii_cmp_exp_data0_s; -} sh_xn_iilb_ii_cmp_exp_data0_u_t; -#else typedef union sh_xn_iilb_ii_cmp_exp_data0_u { mmr_t sh_xn_iilb_ii_cmp_exp_data0_regval; struct { mmr_t data : 64; } sh_xn_iilb_ii_cmp_exp_data0_s; } sh_xn_iilb_ii_cmp_exp_data0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_IILB_II_CMP_EXP_DATA1" */ /* IILB compare II input expected data1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_iilb_ii_cmp_exp_data1_u { - mmr_t sh_xn_iilb_ii_cmp_exp_data1_regval; - struct { - mmr_t data : 64; - } sh_xn_iilb_ii_cmp_exp_data1_s; -} sh_xn_iilb_ii_cmp_exp_data1_u_t; -#else typedef union sh_xn_iilb_ii_cmp_exp_data1_u { mmr_t sh_xn_iilb_ii_cmp_exp_data1_regval; struct { mmr_t data : 64; } sh_xn_iilb_ii_cmp_exp_data1_s; } sh_xn_iilb_ii_cmp_exp_data1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_IILB_II_CMP_ENABLE0" */ /* IILB compare II input enable0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_iilb_ii_cmp_enable0_u { mmr_t sh_xn_iilb_ii_cmp_enable0_regval; struct { mmr_t enable : 64; } sh_xn_iilb_ii_cmp_enable0_s; } sh_xn_iilb_ii_cmp_enable0_u_t; -#else -typedef union sh_xn_iilb_ii_cmp_enable0_u { - mmr_t sh_xn_iilb_ii_cmp_enable0_regval; - struct { - mmr_t enable : 64; - } sh_xn_iilb_ii_cmp_enable0_s; -} sh_xn_iilb_ii_cmp_enable0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_IILB_II_CMP_ENABLE1" */ /* IILB compare II input enable1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_iilb_ii_cmp_enable1_u { - mmr_t sh_xn_iilb_ii_cmp_enable1_regval; - struct { - mmr_t enable : 64; - } sh_xn_iilb_ii_cmp_enable1_s; -} sh_xn_iilb_ii_cmp_enable1_u_t; -#else typedef union sh_xn_iilb_ii_cmp_enable1_u { mmr_t sh_xn_iilb_ii_cmp_enable1_regval; struct { mmr_t enable : 64; } sh_xn_iilb_ii_cmp_enable1_s; } sh_xn_iilb_ii_cmp_enable1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_IILB_MD_CMP_EXP_DATA0" */ /* IILB compare MD input expected data0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_iilb_md_cmp_exp_data0_u { - mmr_t sh_xn_iilb_md_cmp_exp_data0_regval; - struct { - mmr_t data : 64; - } sh_xn_iilb_md_cmp_exp_data0_s; -} sh_xn_iilb_md_cmp_exp_data0_u_t; -#else typedef union sh_xn_iilb_md_cmp_exp_data0_u { mmr_t sh_xn_iilb_md_cmp_exp_data0_regval; struct { mmr_t data : 64; } sh_xn_iilb_md_cmp_exp_data0_s; } sh_xn_iilb_md_cmp_exp_data0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_IILB_MD_CMP_EXP_DATA1" */ /* IILB compare MD input expected data1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_iilb_md_cmp_exp_data1_u { - mmr_t sh_xn_iilb_md_cmp_exp_data1_regval; - struct { - mmr_t data : 64; - } sh_xn_iilb_md_cmp_exp_data1_s; -} sh_xn_iilb_md_cmp_exp_data1_u_t; -#else typedef union sh_xn_iilb_md_cmp_exp_data1_u { mmr_t sh_xn_iilb_md_cmp_exp_data1_regval; struct { mmr_t data : 64; } sh_xn_iilb_md_cmp_exp_data1_s; } sh_xn_iilb_md_cmp_exp_data1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_IILB_MD_CMP_ENABLE0" */ /* IILB compare MD input enable0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_iilb_md_cmp_enable0_u { mmr_t sh_xn_iilb_md_cmp_enable0_regval; struct { mmr_t enable : 64; } sh_xn_iilb_md_cmp_enable0_s; } sh_xn_iilb_md_cmp_enable0_u_t; -#else -typedef union sh_xn_iilb_md_cmp_enable0_u { - mmr_t sh_xn_iilb_md_cmp_enable0_regval; - struct { - mmr_t enable : 64; - } sh_xn_iilb_md_cmp_enable0_s; -} sh_xn_iilb_md_cmp_enable0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_IILB_MD_CMP_ENABLE1" */ /* IILB compare MD input enable1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_iilb_md_cmp_enable1_u { - mmr_t sh_xn_iilb_md_cmp_enable1_regval; - struct { - mmr_t enable : 64; - } sh_xn_iilb_md_cmp_enable1_s; -} sh_xn_iilb_md_cmp_enable1_u_t; -#else typedef union sh_xn_iilb_md_cmp_enable1_u { mmr_t sh_xn_iilb_md_cmp_enable1_regval; struct { mmr_t enable : 64; } sh_xn_iilb_md_cmp_enable1_s; } sh_xn_iilb_md_cmp_enable1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_IILB_PI_CMP_EXP_DATA0" */ /* IILB compare PI input expected data0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_iilb_pi_cmp_exp_data0_u { - mmr_t sh_xn_iilb_pi_cmp_exp_data0_regval; - struct { - mmr_t data : 64; - } sh_xn_iilb_pi_cmp_exp_data0_s; -} sh_xn_iilb_pi_cmp_exp_data0_u_t; -#else typedef union sh_xn_iilb_pi_cmp_exp_data0_u { mmr_t sh_xn_iilb_pi_cmp_exp_data0_regval; struct { mmr_t data : 64; } sh_xn_iilb_pi_cmp_exp_data0_s; } sh_xn_iilb_pi_cmp_exp_data0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_IILB_PI_CMP_EXP_DATA1" */ /* IILB compare PI input expected data1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_iilb_pi_cmp_exp_data1_u { - mmr_t sh_xn_iilb_pi_cmp_exp_data1_regval; - struct { - mmr_t data : 64; - } sh_xn_iilb_pi_cmp_exp_data1_s; -} sh_xn_iilb_pi_cmp_exp_data1_u_t; -#else typedef union sh_xn_iilb_pi_cmp_exp_data1_u { mmr_t sh_xn_iilb_pi_cmp_exp_data1_regval; struct { mmr_t data : 64; } sh_xn_iilb_pi_cmp_exp_data1_s; } sh_xn_iilb_pi_cmp_exp_data1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_IILB_PI_CMP_ENABLE0" */ /* IILB compare PI input enable0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_iilb_pi_cmp_enable0_u { mmr_t sh_xn_iilb_pi_cmp_enable0_regval; struct { mmr_t enable : 64; } sh_xn_iilb_pi_cmp_enable0_s; } sh_xn_iilb_pi_cmp_enable0_u_t; -#else -typedef union sh_xn_iilb_pi_cmp_enable0_u { - mmr_t sh_xn_iilb_pi_cmp_enable0_regval; - struct { - mmr_t enable : 64; - } sh_xn_iilb_pi_cmp_enable0_s; -} sh_xn_iilb_pi_cmp_enable0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_IILB_PI_CMP_ENABLE1" */ /* IILB compare PI input enable1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_iilb_pi_cmp_enable1_u { - mmr_t sh_xn_iilb_pi_cmp_enable1_regval; - struct { - mmr_t enable : 64; - } sh_xn_iilb_pi_cmp_enable1_s; -} sh_xn_iilb_pi_cmp_enable1_u_t; -#else typedef union sh_xn_iilb_pi_cmp_enable1_u { mmr_t sh_xn_iilb_pi_cmp_enable1_regval; struct { mmr_t enable : 64; } sh_xn_iilb_pi_cmp_enable1_s; } sh_xn_iilb_pi_cmp_enable1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_IILB_NI0_CMP_EXP_DATA0" */ /* IILB compare NI0 input expected data0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_iilb_ni0_cmp_exp_data0_u { - mmr_t sh_xn_iilb_ni0_cmp_exp_data0_regval; - struct { - mmr_t data : 64; - } sh_xn_iilb_ni0_cmp_exp_data0_s; -} sh_xn_iilb_ni0_cmp_exp_data0_u_t; -#else typedef union sh_xn_iilb_ni0_cmp_exp_data0_u { mmr_t sh_xn_iilb_ni0_cmp_exp_data0_regval; struct { mmr_t data : 64; } sh_xn_iilb_ni0_cmp_exp_data0_s; } sh_xn_iilb_ni0_cmp_exp_data0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_IILB_NI0_CMP_EXP_DATA1" */ /* IILB compare NI0 input expected data1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_iilb_ni0_cmp_exp_data1_u { - mmr_t sh_xn_iilb_ni0_cmp_exp_data1_regval; - struct { - mmr_t data : 64; - } sh_xn_iilb_ni0_cmp_exp_data1_s; -} sh_xn_iilb_ni0_cmp_exp_data1_u_t; -#else typedef union sh_xn_iilb_ni0_cmp_exp_data1_u { mmr_t sh_xn_iilb_ni0_cmp_exp_data1_regval; struct { mmr_t data : 64; } sh_xn_iilb_ni0_cmp_exp_data1_s; } sh_xn_iilb_ni0_cmp_exp_data1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_IILB_NI0_CMP_ENABLE0" */ /* IILB compare NI0 input enable0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_iilb_ni0_cmp_enable0_u { mmr_t sh_xn_iilb_ni0_cmp_enable0_regval; struct { mmr_t enable : 64; } sh_xn_iilb_ni0_cmp_enable0_s; } sh_xn_iilb_ni0_cmp_enable0_u_t; -#else -typedef union sh_xn_iilb_ni0_cmp_enable0_u { - mmr_t sh_xn_iilb_ni0_cmp_enable0_regval; - struct { - mmr_t enable : 64; - } sh_xn_iilb_ni0_cmp_enable0_s; -} sh_xn_iilb_ni0_cmp_enable0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_IILB_NI0_CMP_ENABLE1" */ /* IILB compare NI0 input enable1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_iilb_ni0_cmp_enable1_u { - mmr_t sh_xn_iilb_ni0_cmp_enable1_regval; - struct { - mmr_t enable : 64; - } sh_xn_iilb_ni0_cmp_enable1_s; -} sh_xn_iilb_ni0_cmp_enable1_u_t; -#else typedef union sh_xn_iilb_ni0_cmp_enable1_u { mmr_t sh_xn_iilb_ni0_cmp_enable1_regval; struct { mmr_t enable : 64; } sh_xn_iilb_ni0_cmp_enable1_s; } sh_xn_iilb_ni0_cmp_enable1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_IILB_NI1_CMP_EXP_DATA0" */ /* IILB compare NI1 input expected data0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_iilb_ni1_cmp_exp_data0_u { - mmr_t sh_xn_iilb_ni1_cmp_exp_data0_regval; - struct { - mmr_t data : 64; - } sh_xn_iilb_ni1_cmp_exp_data0_s; -} sh_xn_iilb_ni1_cmp_exp_data0_u_t; -#else typedef union sh_xn_iilb_ni1_cmp_exp_data0_u { mmr_t sh_xn_iilb_ni1_cmp_exp_data0_regval; struct { mmr_t data : 64; } sh_xn_iilb_ni1_cmp_exp_data0_s; } sh_xn_iilb_ni1_cmp_exp_data0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_IILB_NI1_CMP_EXP_DATA1" */ /* IILB compare NI1 input expected data1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_iilb_ni1_cmp_exp_data1_u { - mmr_t sh_xn_iilb_ni1_cmp_exp_data1_regval; - struct { - mmr_t data : 64; - } sh_xn_iilb_ni1_cmp_exp_data1_s; -} sh_xn_iilb_ni1_cmp_exp_data1_u_t; -#else typedef union sh_xn_iilb_ni1_cmp_exp_data1_u { mmr_t sh_xn_iilb_ni1_cmp_exp_data1_regval; struct { mmr_t data : 64; } sh_xn_iilb_ni1_cmp_exp_data1_s; } sh_xn_iilb_ni1_cmp_exp_data1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_IILB_NI1_CMP_ENABLE0" */ /* IILB compare NI1 input enable0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_iilb_ni1_cmp_enable0_u { mmr_t sh_xn_iilb_ni1_cmp_enable0_regval; struct { mmr_t enable : 64; } sh_xn_iilb_ni1_cmp_enable0_s; } sh_xn_iilb_ni1_cmp_enable0_u_t; -#else -typedef union sh_xn_iilb_ni1_cmp_enable0_u { - mmr_t sh_xn_iilb_ni1_cmp_enable0_regval; - struct { - mmr_t enable : 64; - } sh_xn_iilb_ni1_cmp_enable0_s; -} sh_xn_iilb_ni1_cmp_enable0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_IILB_NI1_CMP_ENABLE1" */ /* IILB compare NI1 input enable1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_iilb_ni1_cmp_enable1_u { - mmr_t sh_xn_iilb_ni1_cmp_enable1_regval; - struct { - mmr_t enable : 64; - } sh_xn_iilb_ni1_cmp_enable1_s; -} sh_xn_iilb_ni1_cmp_enable1_u_t; -#else typedef union sh_xn_iilb_ni1_cmp_enable1_u { mmr_t sh_xn_iilb_ni1_cmp_enable1_regval; struct { mmr_t enable : 64; } sh_xn_iilb_ni1_cmp_enable1_s; } sh_xn_iilb_ni1_cmp_enable1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_MD_IILB_CMP_EXP_DATA0" */ /* MD compare IILB input expected data0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_md_iilb_cmp_exp_data0_u { - mmr_t sh_xn_md_iilb_cmp_exp_data0_regval; - struct { - mmr_t data : 64; - } sh_xn_md_iilb_cmp_exp_data0_s; -} sh_xn_md_iilb_cmp_exp_data0_u_t; -#else typedef union sh_xn_md_iilb_cmp_exp_data0_u { mmr_t sh_xn_md_iilb_cmp_exp_data0_regval; struct { mmr_t data : 64; } sh_xn_md_iilb_cmp_exp_data0_s; } sh_xn_md_iilb_cmp_exp_data0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_MD_IILB_CMP_EXP_DATA1" */ /* MD compare IILB input expected data1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_md_iilb_cmp_exp_data1_u { - mmr_t sh_xn_md_iilb_cmp_exp_data1_regval; - struct { - mmr_t data : 64; - } sh_xn_md_iilb_cmp_exp_data1_s; -} sh_xn_md_iilb_cmp_exp_data1_u_t; -#else typedef union sh_xn_md_iilb_cmp_exp_data1_u { mmr_t sh_xn_md_iilb_cmp_exp_data1_regval; struct { mmr_t data : 64; } sh_xn_md_iilb_cmp_exp_data1_s; } sh_xn_md_iilb_cmp_exp_data1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_MD_IILB_CMP_ENABLE0" */ /* MD compare IILB input enable0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_md_iilb_cmp_enable0_u { mmr_t sh_xn_md_iilb_cmp_enable0_regval; struct { mmr_t enable : 64; } sh_xn_md_iilb_cmp_enable0_s; } sh_xn_md_iilb_cmp_enable0_u_t; -#else -typedef union sh_xn_md_iilb_cmp_enable0_u { - mmr_t sh_xn_md_iilb_cmp_enable0_regval; - struct { - mmr_t enable : 64; - } sh_xn_md_iilb_cmp_enable0_s; -} sh_xn_md_iilb_cmp_enable0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_MD_IILB_CMP_ENABLE1" */ /* MD compare IILB input enable1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_md_iilb_cmp_enable1_u { - mmr_t sh_xn_md_iilb_cmp_enable1_regval; - struct { - mmr_t enable : 64; - } sh_xn_md_iilb_cmp_enable1_s; -} sh_xn_md_iilb_cmp_enable1_u_t; -#else typedef union sh_xn_md_iilb_cmp_enable1_u { mmr_t sh_xn_md_iilb_cmp_enable1_regval; struct { mmr_t enable : 64; } sh_xn_md_iilb_cmp_enable1_s; } sh_xn_md_iilb_cmp_enable1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_MD_NI0_CMP_EXP_DATA0" */ /* MD compare NI0 input expected data0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_md_ni0_cmp_exp_data0_u { - mmr_t sh_xn_md_ni0_cmp_exp_data0_regval; - struct { - mmr_t data : 64; - } sh_xn_md_ni0_cmp_exp_data0_s; -} sh_xn_md_ni0_cmp_exp_data0_u_t; -#else typedef union sh_xn_md_ni0_cmp_exp_data0_u { mmr_t sh_xn_md_ni0_cmp_exp_data0_regval; struct { mmr_t data : 64; } sh_xn_md_ni0_cmp_exp_data0_s; } sh_xn_md_ni0_cmp_exp_data0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_MD_NI0_CMP_EXP_DATA1" */ /* MD compare NI0 input expected data1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_md_ni0_cmp_exp_data1_u { - mmr_t sh_xn_md_ni0_cmp_exp_data1_regval; - struct { - mmr_t data : 64; - } sh_xn_md_ni0_cmp_exp_data1_s; -} sh_xn_md_ni0_cmp_exp_data1_u_t; -#else typedef union sh_xn_md_ni0_cmp_exp_data1_u { mmr_t sh_xn_md_ni0_cmp_exp_data1_regval; struct { mmr_t data : 64; } sh_xn_md_ni0_cmp_exp_data1_s; } sh_xn_md_ni0_cmp_exp_data1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_MD_NI0_CMP_ENABLE0" */ /* MD compare NI0 input enable0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_md_ni0_cmp_enable0_u { mmr_t sh_xn_md_ni0_cmp_enable0_regval; struct { mmr_t enable : 64; } sh_xn_md_ni0_cmp_enable0_s; } sh_xn_md_ni0_cmp_enable0_u_t; -#else -typedef union sh_xn_md_ni0_cmp_enable0_u { - mmr_t sh_xn_md_ni0_cmp_enable0_regval; - struct { - mmr_t enable : 64; - } sh_xn_md_ni0_cmp_enable0_s; -} sh_xn_md_ni0_cmp_enable0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_MD_NI0_CMP_ENABLE1" */ /* MD compare NI0 input enable1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_md_ni0_cmp_enable1_u { - mmr_t sh_xn_md_ni0_cmp_enable1_regval; - struct { - mmr_t enable : 64; - } sh_xn_md_ni0_cmp_enable1_s; -} sh_xn_md_ni0_cmp_enable1_u_t; -#else typedef union sh_xn_md_ni0_cmp_enable1_u { mmr_t sh_xn_md_ni0_cmp_enable1_regval; struct { mmr_t enable : 64; } sh_xn_md_ni0_cmp_enable1_s; } sh_xn_md_ni0_cmp_enable1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_MD_NI1_CMP_EXP_DATA0" */ /* MD compare NI1 input expected data0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_md_ni1_cmp_exp_data0_u { - mmr_t sh_xn_md_ni1_cmp_exp_data0_regval; - struct { - mmr_t data : 64; - } sh_xn_md_ni1_cmp_exp_data0_s; -} sh_xn_md_ni1_cmp_exp_data0_u_t; -#else typedef union sh_xn_md_ni1_cmp_exp_data0_u { mmr_t sh_xn_md_ni1_cmp_exp_data0_regval; struct { mmr_t data : 64; } sh_xn_md_ni1_cmp_exp_data0_s; } sh_xn_md_ni1_cmp_exp_data0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_MD_NI1_CMP_EXP_DATA1" */ /* MD compare NI1 input expected data1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_md_ni1_cmp_exp_data1_u { - mmr_t sh_xn_md_ni1_cmp_exp_data1_regval; - struct { - mmr_t data : 64; - } sh_xn_md_ni1_cmp_exp_data1_s; -} sh_xn_md_ni1_cmp_exp_data1_u_t; -#else typedef union sh_xn_md_ni1_cmp_exp_data1_u { mmr_t sh_xn_md_ni1_cmp_exp_data1_regval; struct { mmr_t data : 64; } sh_xn_md_ni1_cmp_exp_data1_s; } sh_xn_md_ni1_cmp_exp_data1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_MD_NI1_CMP_ENABLE0" */ /* MD compare NI1 input enable0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_md_ni1_cmp_enable0_u { mmr_t sh_xn_md_ni1_cmp_enable0_regval; struct { mmr_t enable : 64; } sh_xn_md_ni1_cmp_enable0_s; } sh_xn_md_ni1_cmp_enable0_u_t; -#else -typedef union sh_xn_md_ni1_cmp_enable0_u { - mmr_t sh_xn_md_ni1_cmp_enable0_regval; - struct { - mmr_t enable : 64; - } sh_xn_md_ni1_cmp_enable0_s; -} sh_xn_md_ni1_cmp_enable0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_MD_NI1_CMP_ENABLE1" */ /* MD compare NI1 input enable1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_md_ni1_cmp_enable1_u { - mmr_t sh_xn_md_ni1_cmp_enable1_regval; - struct { - mmr_t enable : 64; - } sh_xn_md_ni1_cmp_enable1_s; -} sh_xn_md_ni1_cmp_enable1_u_t; -#else typedef union sh_xn_md_ni1_cmp_enable1_u { mmr_t sh_xn_md_ni1_cmp_enable1_regval; struct { mmr_t enable : 64; } sh_xn_md_ni1_cmp_enable1_s; } sh_xn_md_ni1_cmp_enable1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_MD_SIC_CMP_EXP_HDR0" */ /* MD compare SIC input expected header0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_md_sic_cmp_exp_hdr0_u { - mmr_t sh_xn_md_sic_cmp_exp_hdr0_regval; - struct { - mmr_t data : 64; - } sh_xn_md_sic_cmp_exp_hdr0_s; -} sh_xn_md_sic_cmp_exp_hdr0_u_t; -#else typedef union sh_xn_md_sic_cmp_exp_hdr0_u { mmr_t sh_xn_md_sic_cmp_exp_hdr0_regval; struct { mmr_t data : 64; } sh_xn_md_sic_cmp_exp_hdr0_s; } sh_xn_md_sic_cmp_exp_hdr0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_MD_SIC_CMP_EXP_HDR1" */ /* MD compare SIC input expected header1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_md_sic_cmp_exp_hdr1_u { mmr_t sh_xn_md_sic_cmp_exp_hdr1_regval; struct { @@ -11578,43 +6248,24 @@ typedef union sh_xn_md_sic_cmp_exp_hdr1_ mmr_t reserved_0 : 22; } sh_xn_md_sic_cmp_exp_hdr1_s; } sh_xn_md_sic_cmp_exp_hdr1_u_t; -#else -typedef union sh_xn_md_sic_cmp_exp_hdr1_u { - mmr_t sh_xn_md_sic_cmp_exp_hdr1_regval; - struct { - mmr_t reserved_0 : 22; - mmr_t data : 42; - } sh_xn_md_sic_cmp_exp_hdr1_s; -} sh_xn_md_sic_cmp_exp_hdr1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_MD_SIC_CMP_HDR_ENABLE0" */ /* MD compare SIC header enable0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_md_sic_cmp_hdr_enable0_u { - mmr_t sh_xn_md_sic_cmp_hdr_enable0_regval; - struct { - mmr_t enable : 64; - } sh_xn_md_sic_cmp_hdr_enable0_s; -} sh_xn_md_sic_cmp_hdr_enable0_u_t; -#else typedef union sh_xn_md_sic_cmp_hdr_enable0_u { mmr_t sh_xn_md_sic_cmp_hdr_enable0_regval; struct { mmr_t enable : 64; } sh_xn_md_sic_cmp_hdr_enable0_s; } sh_xn_md_sic_cmp_hdr_enable0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_MD_SIC_CMP_HDR_ENABLE1" */ /* MD compare SIC header enable1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_md_sic_cmp_hdr_enable1_u { mmr_t sh_xn_md_sic_cmp_hdr_enable1_regval; struct { @@ -11622,463 +6273,264 @@ typedef union sh_xn_md_sic_cmp_hdr_enabl mmr_t reserved_0 : 22; } sh_xn_md_sic_cmp_hdr_enable1_s; } sh_xn_md_sic_cmp_hdr_enable1_u_t; -#else -typedef union sh_xn_md_sic_cmp_hdr_enable1_u { - mmr_t sh_xn_md_sic_cmp_hdr_enable1_regval; - struct { - mmr_t reserved_0 : 22; - mmr_t enable : 42; - } sh_xn_md_sic_cmp_hdr_enable1_s; -} sh_xn_md_sic_cmp_hdr_enable1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_MD_SIC_CMP_DATA0" */ /* MD compare SIC data0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_md_sic_cmp_data0_u { - mmr_t sh_xn_md_sic_cmp_data0_regval; - struct { - mmr_t data0 : 64; - } sh_xn_md_sic_cmp_data0_s; -} sh_xn_md_sic_cmp_data0_u_t; -#else typedef union sh_xn_md_sic_cmp_data0_u { mmr_t sh_xn_md_sic_cmp_data0_regval; struct { mmr_t data0 : 64; } sh_xn_md_sic_cmp_data0_s; } sh_xn_md_sic_cmp_data0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_MD_SIC_CMP_DATA1" */ /* MD compare SIC data1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_md_sic_cmp_data1_u { - mmr_t sh_xn_md_sic_cmp_data1_regval; - struct { - mmr_t data1 : 64; - } sh_xn_md_sic_cmp_data1_s; -} sh_xn_md_sic_cmp_data1_u_t; -#else typedef union sh_xn_md_sic_cmp_data1_u { mmr_t sh_xn_md_sic_cmp_data1_regval; struct { mmr_t data1 : 64; } sh_xn_md_sic_cmp_data1_s; } sh_xn_md_sic_cmp_data1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_MD_SIC_CMP_DATA2" */ /* MD compare SIC data2 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_md_sic_cmp_data2_u { - mmr_t sh_xn_md_sic_cmp_data2_regval; - struct { - mmr_t data2 : 64; - } sh_xn_md_sic_cmp_data2_s; -} sh_xn_md_sic_cmp_data2_u_t; -#else typedef union sh_xn_md_sic_cmp_data2_u { mmr_t sh_xn_md_sic_cmp_data2_regval; struct { mmr_t data2 : 64; } sh_xn_md_sic_cmp_data2_s; } sh_xn_md_sic_cmp_data2_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_MD_SIC_CMP_DATA3" */ /* MD compare SIC data3 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_md_sic_cmp_data3_u { mmr_t sh_xn_md_sic_cmp_data3_regval; struct { mmr_t data3 : 64; } sh_xn_md_sic_cmp_data3_s; } sh_xn_md_sic_cmp_data3_u_t; -#else -typedef union sh_xn_md_sic_cmp_data3_u { - mmr_t sh_xn_md_sic_cmp_data3_regval; - struct { - mmr_t data3 : 64; - } sh_xn_md_sic_cmp_data3_s; -} sh_xn_md_sic_cmp_data3_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_MD_SIC_CMP_DATA_ENABLE0" */ /* MD enable compare SIC data0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_md_sic_cmp_data_enable0_u { - mmr_t sh_xn_md_sic_cmp_data_enable0_regval; - struct { - mmr_t data_enable0 : 64; - } sh_xn_md_sic_cmp_data_enable0_s; -} sh_xn_md_sic_cmp_data_enable0_u_t; -#else typedef union sh_xn_md_sic_cmp_data_enable0_u { mmr_t sh_xn_md_sic_cmp_data_enable0_regval; struct { mmr_t data_enable0 : 64; } sh_xn_md_sic_cmp_data_enable0_s; } sh_xn_md_sic_cmp_data_enable0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_MD_SIC_CMP_DATA_ENABLE1" */ /* MD enable compare SIC data1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_md_sic_cmp_data_enable1_u { - mmr_t sh_xn_md_sic_cmp_data_enable1_regval; - struct { - mmr_t data_enable1 : 64; - } sh_xn_md_sic_cmp_data_enable1_s; -} sh_xn_md_sic_cmp_data_enable1_u_t; -#else typedef union sh_xn_md_sic_cmp_data_enable1_u { mmr_t sh_xn_md_sic_cmp_data_enable1_regval; struct { mmr_t data_enable1 : 64; } sh_xn_md_sic_cmp_data_enable1_s; } sh_xn_md_sic_cmp_data_enable1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_MD_SIC_CMP_DATA_ENABLE2" */ /* MD enable compare SIC data2 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_md_sic_cmp_data_enable2_u { - mmr_t sh_xn_md_sic_cmp_data_enable2_regval; - struct { - mmr_t data_enable2 : 64; - } sh_xn_md_sic_cmp_data_enable2_s; -} sh_xn_md_sic_cmp_data_enable2_u_t; -#else typedef union sh_xn_md_sic_cmp_data_enable2_u { mmr_t sh_xn_md_sic_cmp_data_enable2_regval; struct { mmr_t data_enable2 : 64; } sh_xn_md_sic_cmp_data_enable2_s; } sh_xn_md_sic_cmp_data_enable2_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_MD_SIC_CMP_DATA_ENABLE3" */ /* MD enable compare SIC data3 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_md_sic_cmp_data_enable3_u { mmr_t sh_xn_md_sic_cmp_data_enable3_regval; struct { mmr_t data_enable3 : 64; } sh_xn_md_sic_cmp_data_enable3_s; } sh_xn_md_sic_cmp_data_enable3_u_t; -#else -typedef union sh_xn_md_sic_cmp_data_enable3_u { - mmr_t sh_xn_md_sic_cmp_data_enable3_regval; - struct { - mmr_t data_enable3 : 64; - } sh_xn_md_sic_cmp_data_enable3_s; -} sh_xn_md_sic_cmp_data_enable3_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_PI_IILB_CMP_EXP_DATA0" */ /* PI compare IILB input expected data0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_pi_iilb_cmp_exp_data0_u { - mmr_t sh_xn_pi_iilb_cmp_exp_data0_regval; - struct { - mmr_t data : 64; - } sh_xn_pi_iilb_cmp_exp_data0_s; -} sh_xn_pi_iilb_cmp_exp_data0_u_t; -#else typedef union sh_xn_pi_iilb_cmp_exp_data0_u { mmr_t sh_xn_pi_iilb_cmp_exp_data0_regval; struct { mmr_t data : 64; } sh_xn_pi_iilb_cmp_exp_data0_s; } sh_xn_pi_iilb_cmp_exp_data0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_PI_IILB_CMP_EXP_DATA1" */ /* PI compare IILB input expected data1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_pi_iilb_cmp_exp_data1_u { - mmr_t sh_xn_pi_iilb_cmp_exp_data1_regval; - struct { - mmr_t data : 64; - } sh_xn_pi_iilb_cmp_exp_data1_s; -} sh_xn_pi_iilb_cmp_exp_data1_u_t; -#else typedef union sh_xn_pi_iilb_cmp_exp_data1_u { mmr_t sh_xn_pi_iilb_cmp_exp_data1_regval; struct { mmr_t data : 64; } sh_xn_pi_iilb_cmp_exp_data1_s; } sh_xn_pi_iilb_cmp_exp_data1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_PI_IILB_CMP_ENABLE0" */ /* PI compare IILB input enable0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_pi_iilb_cmp_enable0_u { - mmr_t sh_xn_pi_iilb_cmp_enable0_regval; - struct { - mmr_t enable : 64; - } sh_xn_pi_iilb_cmp_enable0_s; -} sh_xn_pi_iilb_cmp_enable0_u_t; -#else typedef union sh_xn_pi_iilb_cmp_enable0_u { mmr_t sh_xn_pi_iilb_cmp_enable0_regval; struct { mmr_t enable : 64; } sh_xn_pi_iilb_cmp_enable0_s; } sh_xn_pi_iilb_cmp_enable0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_PI_IILB_CMP_ENABLE1" */ /* PI compare IILB input enable1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_pi_iilb_cmp_enable1_u { mmr_t sh_xn_pi_iilb_cmp_enable1_regval; struct { mmr_t enable : 64; } sh_xn_pi_iilb_cmp_enable1_s; } sh_xn_pi_iilb_cmp_enable1_u_t; -#else -typedef union sh_xn_pi_iilb_cmp_enable1_u { - mmr_t sh_xn_pi_iilb_cmp_enable1_regval; - struct { - mmr_t enable : 64; - } sh_xn_pi_iilb_cmp_enable1_s; -} sh_xn_pi_iilb_cmp_enable1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_PI_NI0_CMP_EXP_DATA0" */ /* PI compare NI0 input expected data0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_pi_ni0_cmp_exp_data0_u { - mmr_t sh_xn_pi_ni0_cmp_exp_data0_regval; - struct { - mmr_t data : 64; - } sh_xn_pi_ni0_cmp_exp_data0_s; -} sh_xn_pi_ni0_cmp_exp_data0_u_t; -#else typedef union sh_xn_pi_ni0_cmp_exp_data0_u { mmr_t sh_xn_pi_ni0_cmp_exp_data0_regval; struct { mmr_t data : 64; } sh_xn_pi_ni0_cmp_exp_data0_s; } sh_xn_pi_ni0_cmp_exp_data0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_PI_NI0_CMP_EXP_DATA1" */ /* PI compare NI0 input expected data1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_pi_ni0_cmp_exp_data1_u { - mmr_t sh_xn_pi_ni0_cmp_exp_data1_regval; - struct { - mmr_t data : 64; - } sh_xn_pi_ni0_cmp_exp_data1_s; -} sh_xn_pi_ni0_cmp_exp_data1_u_t; -#else typedef union sh_xn_pi_ni0_cmp_exp_data1_u { mmr_t sh_xn_pi_ni0_cmp_exp_data1_regval; struct { mmr_t data : 64; } sh_xn_pi_ni0_cmp_exp_data1_s; } sh_xn_pi_ni0_cmp_exp_data1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_PI_NI0_CMP_ENABLE0" */ /* PI compare NI0 input enable0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_pi_ni0_cmp_enable0_u { - mmr_t sh_xn_pi_ni0_cmp_enable0_regval; - struct { - mmr_t enable : 64; - } sh_xn_pi_ni0_cmp_enable0_s; -} sh_xn_pi_ni0_cmp_enable0_u_t; -#else typedef union sh_xn_pi_ni0_cmp_enable0_u { mmr_t sh_xn_pi_ni0_cmp_enable0_regval; struct { mmr_t enable : 64; } sh_xn_pi_ni0_cmp_enable0_s; } sh_xn_pi_ni0_cmp_enable0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_PI_NI0_CMP_ENABLE1" */ /* PI compare NI0 input enable1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_pi_ni0_cmp_enable1_u { mmr_t sh_xn_pi_ni0_cmp_enable1_regval; struct { mmr_t enable : 64; } sh_xn_pi_ni0_cmp_enable1_s; } sh_xn_pi_ni0_cmp_enable1_u_t; -#else -typedef union sh_xn_pi_ni0_cmp_enable1_u { - mmr_t sh_xn_pi_ni0_cmp_enable1_regval; - struct { - mmr_t enable : 64; - } sh_xn_pi_ni0_cmp_enable1_s; -} sh_xn_pi_ni0_cmp_enable1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_PI_NI1_CMP_EXP_DATA0" */ /* PI compare NI1 input expected data0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_pi_ni1_cmp_exp_data0_u { - mmr_t sh_xn_pi_ni1_cmp_exp_data0_regval; - struct { - mmr_t data : 64; - } sh_xn_pi_ni1_cmp_exp_data0_s; -} sh_xn_pi_ni1_cmp_exp_data0_u_t; -#else typedef union sh_xn_pi_ni1_cmp_exp_data0_u { mmr_t sh_xn_pi_ni1_cmp_exp_data0_regval; struct { mmr_t data : 64; } sh_xn_pi_ni1_cmp_exp_data0_s; } sh_xn_pi_ni1_cmp_exp_data0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_PI_NI1_CMP_EXP_DATA1" */ /* PI compare NI1 input expected data1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_pi_ni1_cmp_exp_data1_u { - mmr_t sh_xn_pi_ni1_cmp_exp_data1_regval; - struct { - mmr_t data : 64; - } sh_xn_pi_ni1_cmp_exp_data1_s; -} sh_xn_pi_ni1_cmp_exp_data1_u_t; -#else typedef union sh_xn_pi_ni1_cmp_exp_data1_u { mmr_t sh_xn_pi_ni1_cmp_exp_data1_regval; struct { mmr_t data : 64; } sh_xn_pi_ni1_cmp_exp_data1_s; } sh_xn_pi_ni1_cmp_exp_data1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_PI_NI1_CMP_ENABLE0" */ /* PI compare NI1 input enable0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_pi_ni1_cmp_enable0_u { - mmr_t sh_xn_pi_ni1_cmp_enable0_regval; - struct { - mmr_t enable : 64; - } sh_xn_pi_ni1_cmp_enable0_s; -} sh_xn_pi_ni1_cmp_enable0_u_t; -#else typedef union sh_xn_pi_ni1_cmp_enable0_u { mmr_t sh_xn_pi_ni1_cmp_enable0_regval; struct { mmr_t enable : 64; } sh_xn_pi_ni1_cmp_enable0_s; } sh_xn_pi_ni1_cmp_enable0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_PI_NI1_CMP_ENABLE1" */ /* PI compare NI1 input enable1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_pi_ni1_cmp_enable1_u { mmr_t sh_xn_pi_ni1_cmp_enable1_regval; struct { mmr_t enable : 64; } sh_xn_pi_ni1_cmp_enable1_s; } sh_xn_pi_ni1_cmp_enable1_u_t; -#else -typedef union sh_xn_pi_ni1_cmp_enable1_u { - mmr_t sh_xn_pi_ni1_cmp_enable1_regval; - struct { - mmr_t enable : 64; - } sh_xn_pi_ni1_cmp_enable1_s; -} sh_xn_pi_ni1_cmp_enable1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_PI_SIC_CMP_EXP_HDR0" */ /* PI compare SIC input expected header0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_pi_sic_cmp_exp_hdr0_u { - mmr_t sh_xn_pi_sic_cmp_exp_hdr0_regval; - struct { - mmr_t data : 64; - } sh_xn_pi_sic_cmp_exp_hdr0_s; -} sh_xn_pi_sic_cmp_exp_hdr0_u_t; -#else typedef union sh_xn_pi_sic_cmp_exp_hdr0_u { mmr_t sh_xn_pi_sic_cmp_exp_hdr0_regval; struct { mmr_t data : 64; } sh_xn_pi_sic_cmp_exp_hdr0_s; } sh_xn_pi_sic_cmp_exp_hdr0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_PI_SIC_CMP_EXP_HDR1" */ /* PI compare SIC input expected header1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_pi_sic_cmp_exp_hdr1_u { mmr_t sh_xn_pi_sic_cmp_exp_hdr1_regval; struct { @@ -12086,43 +6538,24 @@ typedef union sh_xn_pi_sic_cmp_exp_hdr1_ mmr_t reserved_0 : 22; } sh_xn_pi_sic_cmp_exp_hdr1_s; } sh_xn_pi_sic_cmp_exp_hdr1_u_t; -#else -typedef union sh_xn_pi_sic_cmp_exp_hdr1_u { - mmr_t sh_xn_pi_sic_cmp_exp_hdr1_regval; - struct { - mmr_t reserved_0 : 22; - mmr_t data : 42; - } sh_xn_pi_sic_cmp_exp_hdr1_s; -} sh_xn_pi_sic_cmp_exp_hdr1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_PI_SIC_CMP_HDR_ENABLE0" */ /* PI compare SIC header enable0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_pi_sic_cmp_hdr_enable0_u { - mmr_t sh_xn_pi_sic_cmp_hdr_enable0_regval; - struct { - mmr_t enable : 64; - } sh_xn_pi_sic_cmp_hdr_enable0_s; -} sh_xn_pi_sic_cmp_hdr_enable0_u_t; -#else typedef union sh_xn_pi_sic_cmp_hdr_enable0_u { mmr_t sh_xn_pi_sic_cmp_hdr_enable0_regval; struct { mmr_t enable : 64; } sh_xn_pi_sic_cmp_hdr_enable0_s; } sh_xn_pi_sic_cmp_hdr_enable0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_PI_SIC_CMP_HDR_ENABLE1" */ /* PI compare SIC header enable1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_pi_sic_cmp_hdr_enable1_u { mmr_t sh_xn_pi_sic_cmp_hdr_enable1_regval; struct { @@ -12130,1029 +6563,587 @@ typedef union sh_xn_pi_sic_cmp_hdr_enabl mmr_t reserved_0 : 22; } sh_xn_pi_sic_cmp_hdr_enable1_s; } sh_xn_pi_sic_cmp_hdr_enable1_u_t; -#else -typedef union sh_xn_pi_sic_cmp_hdr_enable1_u { - mmr_t sh_xn_pi_sic_cmp_hdr_enable1_regval; - struct { - mmr_t reserved_0 : 22; - mmr_t enable : 42; - } sh_xn_pi_sic_cmp_hdr_enable1_s; -} sh_xn_pi_sic_cmp_hdr_enable1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_PI_SIC_CMP_DATA0" */ /* PI compare SIC data0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_pi_sic_cmp_data0_u { mmr_t sh_xn_pi_sic_cmp_data0_regval; struct { mmr_t data0 : 64; } sh_xn_pi_sic_cmp_data0_s; } sh_xn_pi_sic_cmp_data0_u_t; -#else -typedef union sh_xn_pi_sic_cmp_data0_u { - mmr_t sh_xn_pi_sic_cmp_data0_regval; - struct { - mmr_t data0 : 64; - } sh_xn_pi_sic_cmp_data0_s; -} sh_xn_pi_sic_cmp_data0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_PI_SIC_CMP_DATA1" */ /* PI compare SIC data1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_pi_sic_cmp_data1_u { - mmr_t sh_xn_pi_sic_cmp_data1_regval; - struct { - mmr_t data1 : 64; - } sh_xn_pi_sic_cmp_data1_s; -} sh_xn_pi_sic_cmp_data1_u_t; -#else typedef union sh_xn_pi_sic_cmp_data1_u { mmr_t sh_xn_pi_sic_cmp_data1_regval; struct { mmr_t data1 : 64; } sh_xn_pi_sic_cmp_data1_s; } sh_xn_pi_sic_cmp_data1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_PI_SIC_CMP_DATA2" */ /* PI compare SIC data2 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_pi_sic_cmp_data2_u { - mmr_t sh_xn_pi_sic_cmp_data2_regval; - struct { - mmr_t data2 : 64; - } sh_xn_pi_sic_cmp_data2_s; -} sh_xn_pi_sic_cmp_data2_u_t; -#else typedef union sh_xn_pi_sic_cmp_data2_u { mmr_t sh_xn_pi_sic_cmp_data2_regval; struct { mmr_t data2 : 64; } sh_xn_pi_sic_cmp_data2_s; } sh_xn_pi_sic_cmp_data2_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_PI_SIC_CMP_DATA3" */ /* PI compare SIC data3 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_pi_sic_cmp_data3_u { - mmr_t sh_xn_pi_sic_cmp_data3_regval; - struct { - mmr_t data3 : 64; - } sh_xn_pi_sic_cmp_data3_s; -} sh_xn_pi_sic_cmp_data3_u_t; -#else typedef union sh_xn_pi_sic_cmp_data3_u { mmr_t sh_xn_pi_sic_cmp_data3_regval; struct { mmr_t data3 : 64; } sh_xn_pi_sic_cmp_data3_s; } sh_xn_pi_sic_cmp_data3_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_PI_SIC_CMP_DATA_ENABLE0" */ /* PI enable compare SIC data0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_pi_sic_cmp_data_enable0_u { mmr_t sh_xn_pi_sic_cmp_data_enable0_regval; struct { mmr_t data_enable0 : 64; } sh_xn_pi_sic_cmp_data_enable0_s; } sh_xn_pi_sic_cmp_data_enable0_u_t; -#else -typedef union sh_xn_pi_sic_cmp_data_enable0_u { - mmr_t sh_xn_pi_sic_cmp_data_enable0_regval; - struct { - mmr_t data_enable0 : 64; - } sh_xn_pi_sic_cmp_data_enable0_s; -} sh_xn_pi_sic_cmp_data_enable0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_PI_SIC_CMP_DATA_ENABLE1" */ /* PI enable compare SIC data1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_pi_sic_cmp_data_enable1_u { - mmr_t sh_xn_pi_sic_cmp_data_enable1_regval; - struct { - mmr_t data_enable1 : 64; - } sh_xn_pi_sic_cmp_data_enable1_s; -} sh_xn_pi_sic_cmp_data_enable1_u_t; -#else typedef union sh_xn_pi_sic_cmp_data_enable1_u { mmr_t sh_xn_pi_sic_cmp_data_enable1_regval; struct { mmr_t data_enable1 : 64; } sh_xn_pi_sic_cmp_data_enable1_s; } sh_xn_pi_sic_cmp_data_enable1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_PI_SIC_CMP_DATA_ENABLE2" */ /* PI enable compare SIC data2 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_pi_sic_cmp_data_enable2_u { - mmr_t sh_xn_pi_sic_cmp_data_enable2_regval; - struct { - mmr_t data_enable2 : 64; - } sh_xn_pi_sic_cmp_data_enable2_s; -} sh_xn_pi_sic_cmp_data_enable2_u_t; -#else typedef union sh_xn_pi_sic_cmp_data_enable2_u { mmr_t sh_xn_pi_sic_cmp_data_enable2_regval; struct { mmr_t data_enable2 : 64; } sh_xn_pi_sic_cmp_data_enable2_s; } sh_xn_pi_sic_cmp_data_enable2_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_PI_SIC_CMP_DATA_ENABLE3" */ /* PI enable compare SIC data3 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_pi_sic_cmp_data_enable3_u { - mmr_t sh_xn_pi_sic_cmp_data_enable3_regval; - struct { - mmr_t data_enable3 : 64; - } sh_xn_pi_sic_cmp_data_enable3_s; -} sh_xn_pi_sic_cmp_data_enable3_u_t; -#else typedef union sh_xn_pi_sic_cmp_data_enable3_u { mmr_t sh_xn_pi_sic_cmp_data_enable3_regval; struct { mmr_t data_enable3 : 64; } sh_xn_pi_sic_cmp_data_enable3_s; } sh_xn_pi_sic_cmp_data_enable3_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_NI0_IILB_CMP_EXP_DATA0" */ /* NI0 compare IILB input expected data0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_ni0_iilb_cmp_exp_data0_u { mmr_t sh_xn_ni0_iilb_cmp_exp_data0_regval; struct { mmr_t data : 64; } sh_xn_ni0_iilb_cmp_exp_data0_s; } sh_xn_ni0_iilb_cmp_exp_data0_u_t; -#else -typedef union sh_xn_ni0_iilb_cmp_exp_data0_u { - mmr_t sh_xn_ni0_iilb_cmp_exp_data0_regval; - struct { - mmr_t data : 64; - } sh_xn_ni0_iilb_cmp_exp_data0_s; -} sh_xn_ni0_iilb_cmp_exp_data0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_NI0_IILB_CMP_EXP_DATA1" */ /* NI0 compare IILB input expected data1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_ni0_iilb_cmp_exp_data1_u { - mmr_t sh_xn_ni0_iilb_cmp_exp_data1_regval; - struct { - mmr_t data : 64; - } sh_xn_ni0_iilb_cmp_exp_data1_s; -} sh_xn_ni0_iilb_cmp_exp_data1_u_t; -#else typedef union sh_xn_ni0_iilb_cmp_exp_data1_u { mmr_t sh_xn_ni0_iilb_cmp_exp_data1_regval; struct { mmr_t data : 64; } sh_xn_ni0_iilb_cmp_exp_data1_s; } sh_xn_ni0_iilb_cmp_exp_data1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_NI0_IILB_CMP_ENABLE0" */ /* NI0 compare IILB input enable0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_ni0_iilb_cmp_enable0_u { - mmr_t sh_xn_ni0_iilb_cmp_enable0_regval; - struct { - mmr_t enable : 64; - } sh_xn_ni0_iilb_cmp_enable0_s; -} sh_xn_ni0_iilb_cmp_enable0_u_t; -#else typedef union sh_xn_ni0_iilb_cmp_enable0_u { mmr_t sh_xn_ni0_iilb_cmp_enable0_regval; struct { mmr_t enable : 64; } sh_xn_ni0_iilb_cmp_enable0_s; } sh_xn_ni0_iilb_cmp_enable0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_NI0_IILB_CMP_ENABLE1" */ /* NI0 compare IILB input enable1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_ni0_iilb_cmp_enable1_u { - mmr_t sh_xn_ni0_iilb_cmp_enable1_regval; - struct { - mmr_t enable : 64; - } sh_xn_ni0_iilb_cmp_enable1_s; -} sh_xn_ni0_iilb_cmp_enable1_u_t; -#else typedef union sh_xn_ni0_iilb_cmp_enable1_u { mmr_t sh_xn_ni0_iilb_cmp_enable1_regval; struct { mmr_t enable : 64; } sh_xn_ni0_iilb_cmp_enable1_s; } sh_xn_ni0_iilb_cmp_enable1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_NI0_PI_CMP_EXP_DATA0" */ /* NI0 compare PI input expected data0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_ni0_pi_cmp_exp_data0_u { mmr_t sh_xn_ni0_pi_cmp_exp_data0_regval; struct { mmr_t data : 64; } sh_xn_ni0_pi_cmp_exp_data0_s; } sh_xn_ni0_pi_cmp_exp_data0_u_t; -#else -typedef union sh_xn_ni0_pi_cmp_exp_data0_u { - mmr_t sh_xn_ni0_pi_cmp_exp_data0_regval; - struct { - mmr_t data : 64; - } sh_xn_ni0_pi_cmp_exp_data0_s; -} sh_xn_ni0_pi_cmp_exp_data0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_NI0_PI_CMP_EXP_DATA1" */ /* NI0 compare PI input expected data1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_ni0_pi_cmp_exp_data1_u { - mmr_t sh_xn_ni0_pi_cmp_exp_data1_regval; - struct { - mmr_t data : 64; - } sh_xn_ni0_pi_cmp_exp_data1_s; -} sh_xn_ni0_pi_cmp_exp_data1_u_t; -#else typedef union sh_xn_ni0_pi_cmp_exp_data1_u { mmr_t sh_xn_ni0_pi_cmp_exp_data1_regval; struct { mmr_t data : 64; } sh_xn_ni0_pi_cmp_exp_data1_s; } sh_xn_ni0_pi_cmp_exp_data1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_NI0_PI_CMP_ENABLE0" */ /* NI0 compare PI input enable0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_ni0_pi_cmp_enable0_u { - mmr_t sh_xn_ni0_pi_cmp_enable0_regval; - struct { - mmr_t enable : 64; - } sh_xn_ni0_pi_cmp_enable0_s; -} sh_xn_ni0_pi_cmp_enable0_u_t; -#else typedef union sh_xn_ni0_pi_cmp_enable0_u { mmr_t sh_xn_ni0_pi_cmp_enable0_regval; struct { mmr_t enable : 64; } sh_xn_ni0_pi_cmp_enable0_s; } sh_xn_ni0_pi_cmp_enable0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_NI0_PI_CMP_ENABLE1" */ /* NI0 compare PI input enable1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_ni0_pi_cmp_enable1_u { - mmr_t sh_xn_ni0_pi_cmp_enable1_regval; - struct { - mmr_t enable : 64; - } sh_xn_ni0_pi_cmp_enable1_s; -} sh_xn_ni0_pi_cmp_enable1_u_t; -#else typedef union sh_xn_ni0_pi_cmp_enable1_u { mmr_t sh_xn_ni0_pi_cmp_enable1_regval; struct { mmr_t enable : 64; } sh_xn_ni0_pi_cmp_enable1_s; } sh_xn_ni0_pi_cmp_enable1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_NI0_MD_CMP_EXP_DATA0" */ /* NI0 compare MD input expected data0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_ni0_md_cmp_exp_data0_u { mmr_t sh_xn_ni0_md_cmp_exp_data0_regval; struct { mmr_t data : 64; } sh_xn_ni0_md_cmp_exp_data0_s; } sh_xn_ni0_md_cmp_exp_data0_u_t; -#else -typedef union sh_xn_ni0_md_cmp_exp_data0_u { - mmr_t sh_xn_ni0_md_cmp_exp_data0_regval; - struct { - mmr_t data : 64; - } sh_xn_ni0_md_cmp_exp_data0_s; -} sh_xn_ni0_md_cmp_exp_data0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_NI0_MD_CMP_EXP_DATA1" */ /* NI0 compare MD input expected data1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_ni0_md_cmp_exp_data1_u { - mmr_t sh_xn_ni0_md_cmp_exp_data1_regval; - struct { - mmr_t data : 64; - } sh_xn_ni0_md_cmp_exp_data1_s; -} sh_xn_ni0_md_cmp_exp_data1_u_t; -#else typedef union sh_xn_ni0_md_cmp_exp_data1_u { mmr_t sh_xn_ni0_md_cmp_exp_data1_regval; struct { mmr_t data : 64; } sh_xn_ni0_md_cmp_exp_data1_s; } sh_xn_ni0_md_cmp_exp_data1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_NI0_MD_CMP_ENABLE0" */ /* NI0 compare MD input enable0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_ni0_md_cmp_enable0_u { - mmr_t sh_xn_ni0_md_cmp_enable0_regval; - struct { - mmr_t enable : 64; - } sh_xn_ni0_md_cmp_enable0_s; -} sh_xn_ni0_md_cmp_enable0_u_t; -#else typedef union sh_xn_ni0_md_cmp_enable0_u { mmr_t sh_xn_ni0_md_cmp_enable0_regval; struct { mmr_t enable : 64; } sh_xn_ni0_md_cmp_enable0_s; } sh_xn_ni0_md_cmp_enable0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_NI0_MD_CMP_ENABLE1" */ /* NI0 compare MD input enable1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_ni0_md_cmp_enable1_u { - mmr_t sh_xn_ni0_md_cmp_enable1_regval; - struct { - mmr_t enable : 64; - } sh_xn_ni0_md_cmp_enable1_s; -} sh_xn_ni0_md_cmp_enable1_u_t; -#else typedef union sh_xn_ni0_md_cmp_enable1_u { mmr_t sh_xn_ni0_md_cmp_enable1_regval; struct { mmr_t enable : 64; } sh_xn_ni0_md_cmp_enable1_s; } sh_xn_ni0_md_cmp_enable1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_NI0_NI_CMP_EXP_DATA0" */ /* NI0 compare NI input expected data0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_ni0_ni_cmp_exp_data0_u { mmr_t sh_xn_ni0_ni_cmp_exp_data0_regval; struct { mmr_t data : 64; } sh_xn_ni0_ni_cmp_exp_data0_s; } sh_xn_ni0_ni_cmp_exp_data0_u_t; -#else -typedef union sh_xn_ni0_ni_cmp_exp_data0_u { - mmr_t sh_xn_ni0_ni_cmp_exp_data0_regval; - struct { - mmr_t data : 64; - } sh_xn_ni0_ni_cmp_exp_data0_s; -} sh_xn_ni0_ni_cmp_exp_data0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_NI0_NI_CMP_EXP_DATA1" */ /* NI0 compare NI input expected data1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_ni0_ni_cmp_exp_data1_u { - mmr_t sh_xn_ni0_ni_cmp_exp_data1_regval; - struct { - mmr_t data : 64; - } sh_xn_ni0_ni_cmp_exp_data1_s; -} sh_xn_ni0_ni_cmp_exp_data1_u_t; -#else typedef union sh_xn_ni0_ni_cmp_exp_data1_u { mmr_t sh_xn_ni0_ni_cmp_exp_data1_regval; struct { mmr_t data : 64; } sh_xn_ni0_ni_cmp_exp_data1_s; } sh_xn_ni0_ni_cmp_exp_data1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_NI0_NI_CMP_ENABLE0" */ /* NI0 compare NI input enable0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_ni0_ni_cmp_enable0_u { - mmr_t sh_xn_ni0_ni_cmp_enable0_regval; - struct { - mmr_t enable : 64; - } sh_xn_ni0_ni_cmp_enable0_s; -} sh_xn_ni0_ni_cmp_enable0_u_t; -#else typedef union sh_xn_ni0_ni_cmp_enable0_u { mmr_t sh_xn_ni0_ni_cmp_enable0_regval; struct { mmr_t enable : 64; } sh_xn_ni0_ni_cmp_enable0_s; } sh_xn_ni0_ni_cmp_enable0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_NI0_NI_CMP_ENABLE1" */ /* NI0 compare NI input enable1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_ni0_ni_cmp_enable1_u { - mmr_t sh_xn_ni0_ni_cmp_enable1_regval; - struct { - mmr_t enable : 64; - } sh_xn_ni0_ni_cmp_enable1_s; -} sh_xn_ni0_ni_cmp_enable1_u_t; -#else typedef union sh_xn_ni0_ni_cmp_enable1_u { mmr_t sh_xn_ni0_ni_cmp_enable1_regval; struct { mmr_t enable : 64; } sh_xn_ni0_ni_cmp_enable1_s; } sh_xn_ni0_ni_cmp_enable1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_NI0_LLP_CMP_EXP_DATA0" */ /* NI0 compare LLP input expected data0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_ni0_llp_cmp_exp_data0_u { mmr_t sh_xn_ni0_llp_cmp_exp_data0_regval; struct { mmr_t data : 64; } sh_xn_ni0_llp_cmp_exp_data0_s; } sh_xn_ni0_llp_cmp_exp_data0_u_t; -#else -typedef union sh_xn_ni0_llp_cmp_exp_data0_u { - mmr_t sh_xn_ni0_llp_cmp_exp_data0_regval; - struct { - mmr_t data : 64; - } sh_xn_ni0_llp_cmp_exp_data0_s; -} sh_xn_ni0_llp_cmp_exp_data0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_NI0_LLP_CMP_EXP_DATA1" */ /* NI0 compare LLP input expected data1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_ni0_llp_cmp_exp_data1_u { - mmr_t sh_xn_ni0_llp_cmp_exp_data1_regval; - struct { - mmr_t data : 64; - } sh_xn_ni0_llp_cmp_exp_data1_s; -} sh_xn_ni0_llp_cmp_exp_data1_u_t; -#else typedef union sh_xn_ni0_llp_cmp_exp_data1_u { mmr_t sh_xn_ni0_llp_cmp_exp_data1_regval; struct { mmr_t data : 64; } sh_xn_ni0_llp_cmp_exp_data1_s; } sh_xn_ni0_llp_cmp_exp_data1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_NI0_LLP_CMP_ENABLE0" */ /* NI0 compare LLP input enable0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_ni0_llp_cmp_enable0_u { - mmr_t sh_xn_ni0_llp_cmp_enable0_regval; - struct { - mmr_t enable : 64; - } sh_xn_ni0_llp_cmp_enable0_s; -} sh_xn_ni0_llp_cmp_enable0_u_t; -#else typedef union sh_xn_ni0_llp_cmp_enable0_u { mmr_t sh_xn_ni0_llp_cmp_enable0_regval; struct { mmr_t enable : 64; } sh_xn_ni0_llp_cmp_enable0_s; } sh_xn_ni0_llp_cmp_enable0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_NI0_LLP_CMP_ENABLE1" */ /* NI0 compare LLP input enable1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_ni0_llp_cmp_enable1_u { - mmr_t sh_xn_ni0_llp_cmp_enable1_regval; - struct { - mmr_t enable : 64; - } sh_xn_ni0_llp_cmp_enable1_s; -} sh_xn_ni0_llp_cmp_enable1_u_t; -#else typedef union sh_xn_ni0_llp_cmp_enable1_u { mmr_t sh_xn_ni0_llp_cmp_enable1_regval; struct { mmr_t enable : 64; } sh_xn_ni0_llp_cmp_enable1_s; } sh_xn_ni0_llp_cmp_enable1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_NI1_IILB_CMP_EXP_DATA0" */ /* NI1 compare IILB input expected data0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_ni1_iilb_cmp_exp_data0_u { mmr_t sh_xn_ni1_iilb_cmp_exp_data0_regval; struct { mmr_t data : 64; } sh_xn_ni1_iilb_cmp_exp_data0_s; } sh_xn_ni1_iilb_cmp_exp_data0_u_t; -#else -typedef union sh_xn_ni1_iilb_cmp_exp_data0_u { - mmr_t sh_xn_ni1_iilb_cmp_exp_data0_regval; - struct { - mmr_t data : 64; - } sh_xn_ni1_iilb_cmp_exp_data0_s; -} sh_xn_ni1_iilb_cmp_exp_data0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_NI1_IILB_CMP_EXP_DATA1" */ /* NI1 compare IILB input expected data1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_ni1_iilb_cmp_exp_data1_u { - mmr_t sh_xn_ni1_iilb_cmp_exp_data1_regval; - struct { - mmr_t data : 64; - } sh_xn_ni1_iilb_cmp_exp_data1_s; -} sh_xn_ni1_iilb_cmp_exp_data1_u_t; -#else typedef union sh_xn_ni1_iilb_cmp_exp_data1_u { mmr_t sh_xn_ni1_iilb_cmp_exp_data1_regval; struct { mmr_t data : 64; } sh_xn_ni1_iilb_cmp_exp_data1_s; } sh_xn_ni1_iilb_cmp_exp_data1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_NI1_IILB_CMP_ENABLE0" */ /* NI1 compare IILB input enable0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_ni1_iilb_cmp_enable0_u { - mmr_t sh_xn_ni1_iilb_cmp_enable0_regval; - struct { - mmr_t enable : 64; - } sh_xn_ni1_iilb_cmp_enable0_s; -} sh_xn_ni1_iilb_cmp_enable0_u_t; -#else typedef union sh_xn_ni1_iilb_cmp_enable0_u { mmr_t sh_xn_ni1_iilb_cmp_enable0_regval; struct { mmr_t enable : 64; } sh_xn_ni1_iilb_cmp_enable0_s; } sh_xn_ni1_iilb_cmp_enable0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_NI1_IILB_CMP_ENABLE1" */ /* NI1 compare IILB input enable1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_ni1_iilb_cmp_enable1_u { - mmr_t sh_xn_ni1_iilb_cmp_enable1_regval; - struct { - mmr_t enable : 64; - } sh_xn_ni1_iilb_cmp_enable1_s; -} sh_xn_ni1_iilb_cmp_enable1_u_t; -#else typedef union sh_xn_ni1_iilb_cmp_enable1_u { mmr_t sh_xn_ni1_iilb_cmp_enable1_regval; struct { mmr_t enable : 64; } sh_xn_ni1_iilb_cmp_enable1_s; } sh_xn_ni1_iilb_cmp_enable1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_NI1_PI_CMP_EXP_DATA0" */ /* NI1 compare PI input expected data0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_ni1_pi_cmp_exp_data0_u { mmr_t sh_xn_ni1_pi_cmp_exp_data0_regval; struct { mmr_t data : 64; } sh_xn_ni1_pi_cmp_exp_data0_s; } sh_xn_ni1_pi_cmp_exp_data0_u_t; -#else -typedef union sh_xn_ni1_pi_cmp_exp_data0_u { - mmr_t sh_xn_ni1_pi_cmp_exp_data0_regval; - struct { - mmr_t data : 64; - } sh_xn_ni1_pi_cmp_exp_data0_s; -} sh_xn_ni1_pi_cmp_exp_data0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_NI1_PI_CMP_EXP_DATA1" */ /* NI1 compare PI input expected data1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_ni1_pi_cmp_exp_data1_u { - mmr_t sh_xn_ni1_pi_cmp_exp_data1_regval; - struct { - mmr_t data : 64; - } sh_xn_ni1_pi_cmp_exp_data1_s; -} sh_xn_ni1_pi_cmp_exp_data1_u_t; -#else typedef union sh_xn_ni1_pi_cmp_exp_data1_u { mmr_t sh_xn_ni1_pi_cmp_exp_data1_regval; struct { mmr_t data : 64; } sh_xn_ni1_pi_cmp_exp_data1_s; } sh_xn_ni1_pi_cmp_exp_data1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_NI1_PI_CMP_ENABLE0" */ /* NI1 compare PI input enable0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_ni1_pi_cmp_enable0_u { - mmr_t sh_xn_ni1_pi_cmp_enable0_regval; - struct { - mmr_t enable : 64; - } sh_xn_ni1_pi_cmp_enable0_s; -} sh_xn_ni1_pi_cmp_enable0_u_t; -#else typedef union sh_xn_ni1_pi_cmp_enable0_u { mmr_t sh_xn_ni1_pi_cmp_enable0_regval; struct { mmr_t enable : 64; } sh_xn_ni1_pi_cmp_enable0_s; } sh_xn_ni1_pi_cmp_enable0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_NI1_PI_CMP_ENABLE1" */ /* NI1 compare PI input enable1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_ni1_pi_cmp_enable1_u { - mmr_t sh_xn_ni1_pi_cmp_enable1_regval; - struct { - mmr_t enable : 64; - } sh_xn_ni1_pi_cmp_enable1_s; -} sh_xn_ni1_pi_cmp_enable1_u_t; -#else typedef union sh_xn_ni1_pi_cmp_enable1_u { mmr_t sh_xn_ni1_pi_cmp_enable1_regval; struct { mmr_t enable : 64; } sh_xn_ni1_pi_cmp_enable1_s; } sh_xn_ni1_pi_cmp_enable1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_NI1_MD_CMP_EXP_DATA0" */ /* NI1 compare MD input expected data0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_ni1_md_cmp_exp_data0_u { mmr_t sh_xn_ni1_md_cmp_exp_data0_regval; struct { mmr_t data : 64; } sh_xn_ni1_md_cmp_exp_data0_s; } sh_xn_ni1_md_cmp_exp_data0_u_t; -#else -typedef union sh_xn_ni1_md_cmp_exp_data0_u { - mmr_t sh_xn_ni1_md_cmp_exp_data0_regval; - struct { - mmr_t data : 64; - } sh_xn_ni1_md_cmp_exp_data0_s; -} sh_xn_ni1_md_cmp_exp_data0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_NI1_MD_CMP_EXP_DATA1" */ /* NI1 compare MD input expected data1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_ni1_md_cmp_exp_data1_u { - mmr_t sh_xn_ni1_md_cmp_exp_data1_regval; - struct { - mmr_t data : 64; - } sh_xn_ni1_md_cmp_exp_data1_s; -} sh_xn_ni1_md_cmp_exp_data1_u_t; -#else typedef union sh_xn_ni1_md_cmp_exp_data1_u { mmr_t sh_xn_ni1_md_cmp_exp_data1_regval; struct { mmr_t data : 64; } sh_xn_ni1_md_cmp_exp_data1_s; } sh_xn_ni1_md_cmp_exp_data1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_NI1_MD_CMP_ENABLE0" */ /* NI1 compare MD input enable0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_ni1_md_cmp_enable0_u { - mmr_t sh_xn_ni1_md_cmp_enable0_regval; - struct { - mmr_t enable : 64; - } sh_xn_ni1_md_cmp_enable0_s; -} sh_xn_ni1_md_cmp_enable0_u_t; -#else typedef union sh_xn_ni1_md_cmp_enable0_u { mmr_t sh_xn_ni1_md_cmp_enable0_regval; struct { mmr_t enable : 64; } sh_xn_ni1_md_cmp_enable0_s; } sh_xn_ni1_md_cmp_enable0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_NI1_MD_CMP_ENABLE1" */ /* NI1 compare MD input enable1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_ni1_md_cmp_enable1_u { - mmr_t sh_xn_ni1_md_cmp_enable1_regval; - struct { - mmr_t enable : 64; - } sh_xn_ni1_md_cmp_enable1_s; -} sh_xn_ni1_md_cmp_enable1_u_t; -#else typedef union sh_xn_ni1_md_cmp_enable1_u { mmr_t sh_xn_ni1_md_cmp_enable1_regval; struct { mmr_t enable : 64; } sh_xn_ni1_md_cmp_enable1_s; } sh_xn_ni1_md_cmp_enable1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_NI1_NI_CMP_EXP_DATA0" */ /* NI1 compare NI input expected data0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_ni1_ni_cmp_exp_data0_u { mmr_t sh_xn_ni1_ni_cmp_exp_data0_regval; struct { mmr_t data : 64; } sh_xn_ni1_ni_cmp_exp_data0_s; } sh_xn_ni1_ni_cmp_exp_data0_u_t; -#else -typedef union sh_xn_ni1_ni_cmp_exp_data0_u { - mmr_t sh_xn_ni1_ni_cmp_exp_data0_regval; - struct { - mmr_t data : 64; - } sh_xn_ni1_ni_cmp_exp_data0_s; -} sh_xn_ni1_ni_cmp_exp_data0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_NI1_NI_CMP_EXP_DATA1" */ /* NI1 compare NI input expected data1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_ni1_ni_cmp_exp_data1_u { - mmr_t sh_xn_ni1_ni_cmp_exp_data1_regval; - struct { - mmr_t data : 64; - } sh_xn_ni1_ni_cmp_exp_data1_s; -} sh_xn_ni1_ni_cmp_exp_data1_u_t; -#else typedef union sh_xn_ni1_ni_cmp_exp_data1_u { mmr_t sh_xn_ni1_ni_cmp_exp_data1_regval; struct { mmr_t data : 64; } sh_xn_ni1_ni_cmp_exp_data1_s; } sh_xn_ni1_ni_cmp_exp_data1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_NI1_NI_CMP_ENABLE0" */ /* NI1 compare NI input enable0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_ni1_ni_cmp_enable0_u { - mmr_t sh_xn_ni1_ni_cmp_enable0_regval; - struct { - mmr_t enable : 64; - } sh_xn_ni1_ni_cmp_enable0_s; -} sh_xn_ni1_ni_cmp_enable0_u_t; -#else typedef union sh_xn_ni1_ni_cmp_enable0_u { mmr_t sh_xn_ni1_ni_cmp_enable0_regval; struct { mmr_t enable : 64; } sh_xn_ni1_ni_cmp_enable0_s; } sh_xn_ni1_ni_cmp_enable0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_NI1_NI_CMP_ENABLE1" */ /* NI1 compare NI input enable1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_ni1_ni_cmp_enable1_u { - mmr_t sh_xn_ni1_ni_cmp_enable1_regval; - struct { - mmr_t enable : 64; - } sh_xn_ni1_ni_cmp_enable1_s; -} sh_xn_ni1_ni_cmp_enable1_u_t; -#else typedef union sh_xn_ni1_ni_cmp_enable1_u { mmr_t sh_xn_ni1_ni_cmp_enable1_regval; struct { mmr_t enable : 64; } sh_xn_ni1_ni_cmp_enable1_s; } sh_xn_ni1_ni_cmp_enable1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_NI1_LLP_CMP_EXP_DATA0" */ /* NI1 compare LLP input expected data0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_ni1_llp_cmp_exp_data0_u { mmr_t sh_xn_ni1_llp_cmp_exp_data0_regval; struct { mmr_t data : 64; } sh_xn_ni1_llp_cmp_exp_data0_s; } sh_xn_ni1_llp_cmp_exp_data0_u_t; -#else -typedef union sh_xn_ni1_llp_cmp_exp_data0_u { - mmr_t sh_xn_ni1_llp_cmp_exp_data0_regval; - struct { - mmr_t data : 64; - } sh_xn_ni1_llp_cmp_exp_data0_s; -} sh_xn_ni1_llp_cmp_exp_data0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_NI1_LLP_CMP_EXP_DATA1" */ /* NI1 compare LLP input expected data1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_ni1_llp_cmp_exp_data1_u { - mmr_t sh_xn_ni1_llp_cmp_exp_data1_regval; - struct { - mmr_t data : 64; - } sh_xn_ni1_llp_cmp_exp_data1_s; -} sh_xn_ni1_llp_cmp_exp_data1_u_t; -#else typedef union sh_xn_ni1_llp_cmp_exp_data1_u { mmr_t sh_xn_ni1_llp_cmp_exp_data1_regval; struct { mmr_t data : 64; } sh_xn_ni1_llp_cmp_exp_data1_s; } sh_xn_ni1_llp_cmp_exp_data1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_NI1_LLP_CMP_ENABLE0" */ /* NI1 compare LLP input enable0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_ni1_llp_cmp_enable0_u { mmr_t sh_xn_ni1_llp_cmp_enable0_regval; struct { mmr_t enable : 64; } sh_xn_ni1_llp_cmp_enable0_s; } sh_xn_ni1_llp_cmp_enable0_u_t; -#else -typedef union sh_xn_ni1_llp_cmp_enable0_u { - mmr_t sh_xn_ni1_llp_cmp_enable0_regval; - struct { - mmr_t enable : 64; - } sh_xn_ni1_llp_cmp_enable0_s; -} sh_xn_ni1_llp_cmp_enable0_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_NI1_LLP_CMP_ENABLE1" */ /* NI1 compare LLP input enable1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_ni1_llp_cmp_enable1_u { - mmr_t sh_xn_ni1_llp_cmp_enable1_regval; - struct { - mmr_t enable : 64; - } sh_xn_ni1_llp_cmp_enable1_s; -} sh_xn_ni1_llp_cmp_enable1_u_t; -#else typedef union sh_xn_ni1_llp_cmp_enable1_u { mmr_t sh_xn_ni1_llp_cmp_enable1_regval; struct { mmr_t enable : 64; } sh_xn_ni1_llp_cmp_enable1_s; } sh_xn_ni1_llp_cmp_enable1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNPI_ECC_INJ_REG" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnpi_ecc_inj_reg_u { mmr_t sh_xnpi_ecc_inj_reg_regval; struct { @@ -13182,123 +7173,55 @@ typedef union sh_xnpi_ecc_inj_reg_u { mmr_t data_cb_cont3 : 1; } sh_xnpi_ecc_inj_reg_s; } sh_xnpi_ecc_inj_reg_u_t; -#else -typedef union sh_xnpi_ecc_inj_reg_u { - mmr_t sh_xnpi_ecc_inj_reg_regval; - struct { - mmr_t data_cb_cont3 : 1; - mmr_t data_cb_1shot3 : 1; - mmr_t data_cont3 : 1; - mmr_t data_1shot3 : 1; - mmr_t reserved_3 : 4; - mmr_t byte3 : 8; - mmr_t data_cb_cont2 : 1; - mmr_t data_cb_1shot2 : 1; - mmr_t data_cont2 : 1; - mmr_t data_1shot2 : 1; - mmr_t reserved_2 : 4; - mmr_t byte2 : 8; - mmr_t data_cb_cont1 : 1; - mmr_t data_cb_1shot1 : 1; - mmr_t data_cont1 : 1; - mmr_t data_1shot1 : 1; - mmr_t reserved_1 : 4; - mmr_t byte1 : 8; - mmr_t data_cb_cont0 : 1; - mmr_t data_cb_1shot0 : 1; - mmr_t data_cont0 : 1; - mmr_t data_1shot0 : 1; - mmr_t reserved_0 : 4; - mmr_t byte0 : 8; - } sh_xnpi_ecc_inj_reg_s; -} sh_xnpi_ecc_inj_reg_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNPI_ECC0_INJ_MASK_REG" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xnpi_ecc0_inj_mask_reg_u { - mmr_t sh_xnpi_ecc0_inj_mask_reg_regval; - struct { - mmr_t mask_ecc0 : 64; - } sh_xnpi_ecc0_inj_mask_reg_s; -} sh_xnpi_ecc0_inj_mask_reg_u_t; -#else typedef union sh_xnpi_ecc0_inj_mask_reg_u { mmr_t sh_xnpi_ecc0_inj_mask_reg_regval; struct { mmr_t mask_ecc0 : 64; } sh_xnpi_ecc0_inj_mask_reg_s; } sh_xnpi_ecc0_inj_mask_reg_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNPI_ECC1_INJ_MASK_REG" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xnpi_ecc1_inj_mask_reg_u { - mmr_t sh_xnpi_ecc1_inj_mask_reg_regval; - struct { - mmr_t mask_ecc1 : 64; - } sh_xnpi_ecc1_inj_mask_reg_s; -} sh_xnpi_ecc1_inj_mask_reg_u_t; -#else typedef union sh_xnpi_ecc1_inj_mask_reg_u { mmr_t sh_xnpi_ecc1_inj_mask_reg_regval; struct { mmr_t mask_ecc1 : 64; } sh_xnpi_ecc1_inj_mask_reg_s; } sh_xnpi_ecc1_inj_mask_reg_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNPI_ECC2_INJ_MASK_REG" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xnpi_ecc2_inj_mask_reg_u { - mmr_t sh_xnpi_ecc2_inj_mask_reg_regval; - struct { - mmr_t mask_ecc2 : 64; - } sh_xnpi_ecc2_inj_mask_reg_s; -} sh_xnpi_ecc2_inj_mask_reg_u_t; -#else typedef union sh_xnpi_ecc2_inj_mask_reg_u { mmr_t sh_xnpi_ecc2_inj_mask_reg_regval; struct { mmr_t mask_ecc2 : 64; } sh_xnpi_ecc2_inj_mask_reg_s; } sh_xnpi_ecc2_inj_mask_reg_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNPI_ECC3_INJ_MASK_REG" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xnpi_ecc3_inj_mask_reg_u { - mmr_t sh_xnpi_ecc3_inj_mask_reg_regval; - struct { - mmr_t mask_ecc3 : 64; - } sh_xnpi_ecc3_inj_mask_reg_s; -} sh_xnpi_ecc3_inj_mask_reg_u_t; -#else typedef union sh_xnpi_ecc3_inj_mask_reg_u { mmr_t sh_xnpi_ecc3_inj_mask_reg_regval; struct { mmr_t mask_ecc3 : 64; } sh_xnpi_ecc3_inj_mask_reg_s; } sh_xnpi_ecc3_inj_mask_reg_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNMD_ECC_INJ_REG" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnmd_ecc_inj_reg_u { mmr_t sh_xnmd_ecc_inj_reg_regval; struct { @@ -13328,123 +7251,55 @@ typedef union sh_xnmd_ecc_inj_reg_u { mmr_t data_cb_cont3 : 1; } sh_xnmd_ecc_inj_reg_s; } sh_xnmd_ecc_inj_reg_u_t; -#else -typedef union sh_xnmd_ecc_inj_reg_u { - mmr_t sh_xnmd_ecc_inj_reg_regval; - struct { - mmr_t data_cb_cont3 : 1; - mmr_t data_cb_1shot3 : 1; - mmr_t data_cont3 : 1; - mmr_t data_1shot3 : 1; - mmr_t reserved_3 : 4; - mmr_t byte3 : 8; - mmr_t data_cb_cont2 : 1; - mmr_t data_cb_1shot2 : 1; - mmr_t data_cont2 : 1; - mmr_t data_1shot2 : 1; - mmr_t reserved_2 : 4; - mmr_t byte2 : 8; - mmr_t data_cb_cont1 : 1; - mmr_t data_cb_1shot1 : 1; - mmr_t data_cont1 : 1; - mmr_t data_1shot1 : 1; - mmr_t reserved_1 : 4; - mmr_t byte1 : 8; - mmr_t data_cb_cont0 : 1; - mmr_t data_cb_1shot0 : 1; - mmr_t data_cont0 : 1; - mmr_t data_1shot0 : 1; - mmr_t reserved_0 : 4; - mmr_t byte0 : 8; - } sh_xnmd_ecc_inj_reg_s; -} sh_xnmd_ecc_inj_reg_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNMD_ECC0_INJ_MASK_REG" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xnmd_ecc0_inj_mask_reg_u { - mmr_t sh_xnmd_ecc0_inj_mask_reg_regval; - struct { - mmr_t mask_ecc0 : 64; - } sh_xnmd_ecc0_inj_mask_reg_s; -} sh_xnmd_ecc0_inj_mask_reg_u_t; -#else typedef union sh_xnmd_ecc0_inj_mask_reg_u { mmr_t sh_xnmd_ecc0_inj_mask_reg_regval; struct { mmr_t mask_ecc0 : 64; } sh_xnmd_ecc0_inj_mask_reg_s; } sh_xnmd_ecc0_inj_mask_reg_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNMD_ECC1_INJ_MASK_REG" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnmd_ecc1_inj_mask_reg_u { mmr_t sh_xnmd_ecc1_inj_mask_reg_regval; struct { mmr_t mask_ecc1 : 64; } sh_xnmd_ecc1_inj_mask_reg_s; } sh_xnmd_ecc1_inj_mask_reg_u_t; -#else -typedef union sh_xnmd_ecc1_inj_mask_reg_u { - mmr_t sh_xnmd_ecc1_inj_mask_reg_regval; - struct { - mmr_t mask_ecc1 : 64; - } sh_xnmd_ecc1_inj_mask_reg_s; -} sh_xnmd_ecc1_inj_mask_reg_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNMD_ECC2_INJ_MASK_REG" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xnmd_ecc2_inj_mask_reg_u { - mmr_t sh_xnmd_ecc2_inj_mask_reg_regval; - struct { - mmr_t mask_ecc2 : 64; - } sh_xnmd_ecc2_inj_mask_reg_s; -} sh_xnmd_ecc2_inj_mask_reg_u_t; -#else typedef union sh_xnmd_ecc2_inj_mask_reg_u { mmr_t sh_xnmd_ecc2_inj_mask_reg_regval; struct { mmr_t mask_ecc2 : 64; } sh_xnmd_ecc2_inj_mask_reg_s; } sh_xnmd_ecc2_inj_mask_reg_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNMD_ECC3_INJ_MASK_REG" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xnmd_ecc3_inj_mask_reg_u { - mmr_t sh_xnmd_ecc3_inj_mask_reg_regval; - struct { - mmr_t mask_ecc3 : 64; - } sh_xnmd_ecc3_inj_mask_reg_s; -} sh_xnmd_ecc3_inj_mask_reg_u_t; -#else typedef union sh_xnmd_ecc3_inj_mask_reg_u { mmr_t sh_xnmd_ecc3_inj_mask_reg_regval; struct { mmr_t mask_ecc3 : 64; } sh_xnmd_ecc3_inj_mask_reg_s; } sh_xnmd_ecc3_inj_mask_reg_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNMD_ECC_ERR_REPORT" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnmd_ecc_err_report_u { mmr_t sh_xnmd_ecc_err_report_regval; struct { @@ -13458,28 +7313,12 @@ typedef union sh_xnmd_ecc_err_report_u { mmr_t reserved_3 : 15; } sh_xnmd_ecc_err_report_s; } sh_xnmd_ecc_err_report_u_t; -#else -typedef union sh_xnmd_ecc_err_report_u { - mmr_t sh_xnmd_ecc_err_report_regval; - struct { - mmr_t reserved_3 : 15; - mmr_t ecc_disable3 : 1; - mmr_t reserved_2 : 15; - mmr_t ecc_disable2 : 1; - mmr_t reserved_1 : 15; - mmr_t ecc_disable1 : 1; - mmr_t reserved_0 : 15; - mmr_t ecc_disable0 : 1; - } sh_xnmd_ecc_err_report_s; -} sh_xnmd_ecc_err_report_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI0_ERROR_SUMMARY_1" */ /* ni0 Error Summary Bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ni0_error_summary_1_u { mmr_t sh_ni0_error_summary_1_regval; struct { @@ -13549,84 +7388,12 @@ typedef union sh_ni0_error_summary_1_u { mmr_t tail_timeout_ni_vc3 : 1; } sh_ni0_error_summary_1_s; } sh_ni0_error_summary_1_u_t; -#else -typedef union sh_ni0_error_summary_1_u { - mmr_t sh_ni0_error_summary_1_regval; - struct { - mmr_t tail_timeout_ni_vc3 : 1; - mmr_t tail_timeout_ni_vc2 : 1; - mmr_t tail_timeout_ni_vc1 : 1; - mmr_t tail_timeout_ni_vc0 : 1; - mmr_t tail_timeout_fifo13_vc3 : 1; - mmr_t tail_timeout_fifo13_vc1 : 1; - mmr_t tail_timeout_fifo02_vc2 : 1; - mmr_t tail_timeout_fifo02_vc0 : 1; - mmr_t overflow_ni_fifo_vc3_credit : 1; - mmr_t overflow_ni_fifo_vc2_credit : 1; - mmr_t overflow_ni_fifo_vc1_credit : 1; - mmr_t overflow_ni_fifo_vc0_credit : 1; - mmr_t overflow_md_fifo_vc2_credit : 1; - mmr_t overflow_md_fifo_vc0_credit : 1; - mmr_t overflow_iilb_fifo_vc2_credit : 1; - mmr_t overflow_iilb_fifo_vc0_credit : 1; - mmr_t overflow_pi_fifo_vc2_credit : 1; - mmr_t overflow_pi_fifo_vc0_credit : 1; - mmr_t overflow_md_fifo_vc2_push : 1; - mmr_t overflow_md_fifo_vc0_push : 1; - mmr_t overflow_iilb_fifo_vc2_push : 1; - mmr_t overflow_iilb_fifo_vc0_push : 1; - mmr_t overflow_pi_fifo_vc2_push : 1; - mmr_t overflow_pi_fifo_vc0_push : 1; - mmr_t overflow_ni_fifo_vc2_pop : 1; - mmr_t overflow_ni_fifo_vc0_pop : 1; - mmr_t overflow_md_fifo_vc2_pop : 1; - mmr_t overflow_md_fifo_vc0_pop : 1; - mmr_t overflow_iilb_fifo_vc2_pop : 1; - mmr_t overflow_iilb_fifo_vc0_pop : 1; - mmr_t overflow_pi_fifo_vc2_pop : 1; - mmr_t overflow_pi_fifo_vc0_pop : 1; - mmr_t overflow_ni_fifo_debit3 : 1; - mmr_t overflow_ni_fifo_debit2 : 1; - mmr_t overflow_ni_fifo_debit1 : 1; - mmr_t overflow_ni_fifo_debit0 : 1; - mmr_t overflow_md_fifo_debit2 : 1; - mmr_t overflow_md_fifo_debit0 : 1; - mmr_t overflow_iilb_fifo_debit2 : 1; - mmr_t overflow_iilb_fifo_debit0 : 1; - mmr_t overflow_pi_fifo_debit2 : 1; - mmr_t overflow_pi_fifo_debit0 : 1; - mmr_t overflow2_vc2_credit : 1; - mmr_t overflow1_vc2_credit : 1; - mmr_t overflow0_vc2_credit : 1; - mmr_t overflow2_vc0_credit : 1; - mmr_t overflow1_vc0_credit : 1; - mmr_t overflow0_vc0_credit : 1; - mmr_t overflow_fifo13_vc2_credit : 1; - mmr_t overflow_fifo13_vc0_credit : 1; - mmr_t overflow_fifo02_vc2_credit : 1; - mmr_t overflow_fifo02_vc0_credit : 1; - mmr_t overflow_fifo13_vc3_push : 1; - mmr_t overflow_fifo13_vc1_push : 1; - mmr_t overflow_fifo02_vc2_push : 1; - mmr_t overflow_fifo02_vc0_push : 1; - mmr_t overflow_fifo13_vc3_pop : 1; - mmr_t overflow_fifo13_vc1_pop : 1; - mmr_t overflow_fifo02_vc2_pop : 1; - mmr_t overflow_fifo02_vc0_pop : 1; - mmr_t overflow_fifo13_debit2 : 1; - mmr_t overflow_fifo13_debit0 : 1; - mmr_t overflow_fifo02_debit2 : 1; - mmr_t overflow_fifo02_debit0 : 1; - } sh_ni0_error_summary_1_s; -} sh_ni0_error_summary_1_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI0_ERROR_SUMMARY_2" */ /* ni0 Error Summary Bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ni0_error_summary_2_u { mmr_t sh_ni0_error_summary_2_regval; struct { @@ -13687,75 +7454,12 @@ typedef union sh_ni0_error_summary_2_u { mmr_t reserved_1 : 1; } sh_ni0_error_summary_2_s; } sh_ni0_error_summary_2_u_t; -#else -typedef union sh_ni0_error_summary_2_u { - mmr_t sh_ni0_error_summary_2_regval; - struct { - mmr_t reserved_1 : 1; - mmr_t retry_timeout_error : 1; - mmr_t lut_read_error : 1; - mmr_t chiplet_nomatch : 1; - mmr_t llp_deadlock_vc3 : 1; - mmr_t llp_deadlock_vc2 : 1; - mmr_t llp_deadlock_vc1 : 1; - mmr_t llp_deadlock_vc0 : 1; - mmr_t underflow_ni_fifo_vc3_credit : 1; - mmr_t underflow_ni_fifo_vc2_credit : 1; - mmr_t underflow_ni_fifo_vc1_credit : 1; - mmr_t underflow_ni_fifo_vc0_credit : 1; - mmr_t underflow_md_fifo_vc2_credit : 1; - mmr_t underflow_md_fifo_vc0_credit : 1; - mmr_t underflow_iilb_fifo_vc2_credit : 1; - mmr_t underflow_iilb_fifo_vc0_credit : 1; - mmr_t underflow_pi_fifo_vc2_credit : 1; - mmr_t underflow_pi_fifo_vc0_credit : 1; - mmr_t underflow_md_fifo_vc2_push : 1; - mmr_t underflow_md_fifo_vc0_push : 1; - mmr_t underflow_iilb_fifo_vc2_push : 1; - mmr_t underflow_iilb_fifo_vc0_push : 1; - mmr_t underflow_pi_fifo_vc2_push : 1; - mmr_t underflow_pi_fifo_vc0_push : 1; - mmr_t underflow_ni_fifo_vc2_pop : 1; - mmr_t underflow_ni_fifo_vc0_pop : 1; - mmr_t underflow_md_fifo_vc2_pop : 1; - mmr_t underflow_md_fifo_vc0_pop : 1; - mmr_t underflow_iilb_fifo_vc2_pop : 1; - mmr_t underflow_iilb_fifo_vc0_pop : 1; - mmr_t underflow_pi_fifo_vc2_pop : 1; - mmr_t underflow_pi_fifo_vc0_pop : 1; - mmr_t reserved_0 : 10; - mmr_t underflow2_vc2_credit : 1; - mmr_t underflow1_vc2_credit : 1; - mmr_t underflow0_vc2_credit : 1; - mmr_t underflow2_vc0_credit : 1; - mmr_t underflow1_vc0_credit : 1; - mmr_t underflow0_vc0_credit : 1; - mmr_t underflow_fifo13_vc2_credit : 1; - mmr_t underflow_fifo13_vc0_credit : 1; - mmr_t underflow_fifo02_vc2_credit : 1; - mmr_t underflow_fifo02_vc0_credit : 1; - mmr_t underflow_fifo13_vc3_push : 1; - mmr_t underflow_fifo13_vc1_push : 1; - mmr_t underflow_fifo02_vc2_push : 1; - mmr_t underflow_fifo02_vc0_push : 1; - mmr_t underflow_fifo13_vc3_pop : 1; - mmr_t underflow_fifo13_vc1_pop : 1; - mmr_t underflow_fifo02_vc2_pop : 1; - mmr_t underflow_fifo02_vc0_pop : 1; - mmr_t illegal_vciilb : 1; - mmr_t illegal_vcmd : 1; - mmr_t illegal_vcpi : 1; - mmr_t illegal_vcni : 1; - } sh_ni0_error_summary_2_s; -} sh_ni0_error_summary_2_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI0_ERROR_OVERFLOW_1" */ /* ni0 Error Overflow Bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ni0_error_overflow_1_u { mmr_t sh_ni0_error_overflow_1_regval; struct { @@ -13825,84 +7529,12 @@ typedef union sh_ni0_error_overflow_1_u mmr_t tail_timeout_ni_vc3 : 1; } sh_ni0_error_overflow_1_s; } sh_ni0_error_overflow_1_u_t; -#else -typedef union sh_ni0_error_overflow_1_u { - mmr_t sh_ni0_error_overflow_1_regval; - struct { - mmr_t tail_timeout_ni_vc3 : 1; - mmr_t tail_timeout_ni_vc2 : 1; - mmr_t tail_timeout_ni_vc1 : 1; - mmr_t tail_timeout_ni_vc0 : 1; - mmr_t tail_timeout_fifo13_vc3 : 1; - mmr_t tail_timeout_fifo13_vc1 : 1; - mmr_t tail_timeout_fifo02_vc2 : 1; - mmr_t tail_timeout_fifo02_vc0 : 1; - mmr_t overflow_ni_fifo_vc3_credit : 1; - mmr_t overflow_ni_fifo_vc2_credit : 1; - mmr_t overflow_ni_fifo_vc1_credit : 1; - mmr_t overflow_ni_fifo_vc0_credit : 1; - mmr_t overflow_md_fifo_vc2_credit : 1; - mmr_t overflow_md_fifo_vc0_credit : 1; - mmr_t overflow_iilb_fifo_vc2_credit : 1; - mmr_t overflow_iilb_fifo_vc0_credit : 1; - mmr_t overflow_pi_fifo_vc2_credit : 1; - mmr_t overflow_pi_fifo_vc0_credit : 1; - mmr_t overflow_md_fifo_vc2_push : 1; - mmr_t overflow_md_fifo_vc0_push : 1; - mmr_t overflow_iilb_fifo_vc2_push : 1; - mmr_t overflow_iilb_fifo_vc0_push : 1; - mmr_t overflow_pi_fifo_vc2_push : 1; - mmr_t overflow_pi_fifo_vc0_push : 1; - mmr_t overflow_ni_fifo_vc2_pop : 1; - mmr_t overflow_ni_fifo_vc0_pop : 1; - mmr_t overflow_md_fifo_vc2_pop : 1; - mmr_t overflow_md_fifo_vc0_pop : 1; - mmr_t overflow_iilb_fifo_vc2_pop : 1; - mmr_t overflow_iilb_fifo_vc0_pop : 1; - mmr_t overflow_pi_fifo_vc2_pop : 1; - mmr_t overflow_pi_fifo_vc0_pop : 1; - mmr_t overflow_ni_fifo_debit3 : 1; - mmr_t overflow_ni_fifo_debit2 : 1; - mmr_t overflow_ni_fifo_debit1 : 1; - mmr_t overflow_ni_fifo_debit0 : 1; - mmr_t overflow_md_fifo_debit2 : 1; - mmr_t overflow_md_fifo_debit0 : 1; - mmr_t overflow_iilb_fifo_debit2 : 1; - mmr_t overflow_iilb_fifo_debit0 : 1; - mmr_t overflow_pi_fifo_debit2 : 1; - mmr_t overflow_pi_fifo_debit0 : 1; - mmr_t overflow2_vc2_credit : 1; - mmr_t overflow1_vc2_credit : 1; - mmr_t overflow0_vc2_credit : 1; - mmr_t overflow2_vc0_credit : 1; - mmr_t overflow1_vc0_credit : 1; - mmr_t overflow0_vc0_credit : 1; - mmr_t overflow_fifo13_vc2_credit : 1; - mmr_t overflow_fifo13_vc0_credit : 1; - mmr_t overflow_fifo02_vc2_credit : 1; - mmr_t overflow_fifo02_vc0_credit : 1; - mmr_t overflow_fifo13_vc3_push : 1; - mmr_t overflow_fifo13_vc1_push : 1; - mmr_t overflow_fifo02_vc2_push : 1; - mmr_t overflow_fifo02_vc0_push : 1; - mmr_t overflow_fifo13_vc3_pop : 1; - mmr_t overflow_fifo13_vc1_pop : 1; - mmr_t overflow_fifo02_vc2_pop : 1; - mmr_t overflow_fifo02_vc0_pop : 1; - mmr_t overflow_fifo13_debit2 : 1; - mmr_t overflow_fifo13_debit0 : 1; - mmr_t overflow_fifo02_debit2 : 1; - mmr_t overflow_fifo02_debit0 : 1; - } sh_ni0_error_overflow_1_s; -} sh_ni0_error_overflow_1_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI0_ERROR_OVERFLOW_2" */ /* ni0 Error Overflow Bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ni0_error_overflow_2_u { mmr_t sh_ni0_error_overflow_2_regval; struct { @@ -13963,75 +7595,12 @@ typedef union sh_ni0_error_overflow_2_u mmr_t reserved_1 : 1; } sh_ni0_error_overflow_2_s; } sh_ni0_error_overflow_2_u_t; -#else -typedef union sh_ni0_error_overflow_2_u { - mmr_t sh_ni0_error_overflow_2_regval; - struct { - mmr_t reserved_1 : 1; - mmr_t retry_timeout_error : 1; - mmr_t lut_read_error : 1; - mmr_t chiplet_nomatch : 1; - mmr_t llp_deadlock_vc3 : 1; - mmr_t llp_deadlock_vc2 : 1; - mmr_t llp_deadlock_vc1 : 1; - mmr_t llp_deadlock_vc0 : 1; - mmr_t underflow_ni_fifo_vc3_credit : 1; - mmr_t underflow_ni_fifo_vc2_credit : 1; - mmr_t underflow_ni_fifo_vc1_credit : 1; - mmr_t underflow_ni_fifo_vc0_credit : 1; - mmr_t underflow_md_fifo_vc2_credit : 1; - mmr_t underflow_md_fifo_vc0_credit : 1; - mmr_t underflow_iilb_fifo_vc2_credit : 1; - mmr_t underflow_iilb_fifo_vc0_credit : 1; - mmr_t underflow_pi_fifo_vc2_credit : 1; - mmr_t underflow_pi_fifo_vc0_credit : 1; - mmr_t underflow_md_fifo_vc2_push : 1; - mmr_t underflow_md_fifo_vc0_push : 1; - mmr_t underflow_iilb_fifo_vc2_push : 1; - mmr_t underflow_iilb_fifo_vc0_push : 1; - mmr_t underflow_pi_fifo_vc2_push : 1; - mmr_t underflow_pi_fifo_vc0_push : 1; - mmr_t underflow_ni_fifo_vc2_pop : 1; - mmr_t underflow_ni_fifo_vc0_pop : 1; - mmr_t underflow_md_fifo_vc2_pop : 1; - mmr_t underflow_md_fifo_vc0_pop : 1; - mmr_t underflow_iilb_fifo_vc2_pop : 1; - mmr_t underflow_iilb_fifo_vc0_pop : 1; - mmr_t underflow_pi_fifo_vc2_pop : 1; - mmr_t underflow_pi_fifo_vc0_pop : 1; - mmr_t reserved_0 : 10; - mmr_t underflow2_vc2_credit : 1; - mmr_t underflow1_vc2_credit : 1; - mmr_t underflow0_vc2_credit : 1; - mmr_t underflow2_vc0_credit : 1; - mmr_t underflow1_vc0_credit : 1; - mmr_t underflow0_vc0_credit : 1; - mmr_t underflow_fifo13_vc2_credit : 1; - mmr_t underflow_fifo13_vc0_credit : 1; - mmr_t underflow_fifo02_vc2_credit : 1; - mmr_t underflow_fifo02_vc0_credit : 1; - mmr_t underflow_fifo13_vc3_push : 1; - mmr_t underflow_fifo13_vc1_push : 1; - mmr_t underflow_fifo02_vc2_push : 1; - mmr_t underflow_fifo02_vc0_push : 1; - mmr_t underflow_fifo13_vc3_pop : 1; - mmr_t underflow_fifo13_vc1_pop : 1; - mmr_t underflow_fifo02_vc2_pop : 1; - mmr_t underflow_fifo02_vc0_pop : 1; - mmr_t illegal_vciilb : 1; - mmr_t illegal_vcmd : 1; - mmr_t illegal_vcpi : 1; - mmr_t illegal_vcni : 1; - } sh_ni0_error_overflow_2_s; -} sh_ni0_error_overflow_2_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI0_ERROR_MASK_1" */ /* ni0 Error Mask Bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ni0_error_mask_1_u { mmr_t sh_ni0_error_mask_1_regval; struct { @@ -14101,84 +7670,12 @@ typedef union sh_ni0_error_mask_1_u { mmr_t tail_timeout_ni_vc3 : 1; } sh_ni0_error_mask_1_s; } sh_ni0_error_mask_1_u_t; -#else -typedef union sh_ni0_error_mask_1_u { - mmr_t sh_ni0_error_mask_1_regval; - struct { - mmr_t tail_timeout_ni_vc3 : 1; - mmr_t tail_timeout_ni_vc2 : 1; - mmr_t tail_timeout_ni_vc1 : 1; - mmr_t tail_timeout_ni_vc0 : 1; - mmr_t tail_timeout_fifo13_vc3 : 1; - mmr_t tail_timeout_fifo13_vc1 : 1; - mmr_t tail_timeout_fifo02_vc2 : 1; - mmr_t tail_timeout_fifo02_vc0 : 1; - mmr_t overflow_ni_fifo_vc3_credit : 1; - mmr_t overflow_ni_fifo_vc2_credit : 1; - mmr_t overflow_ni_fifo_vc1_credit : 1; - mmr_t overflow_ni_fifo_vc0_credit : 1; - mmr_t overflow_md_fifo_vc2_credit : 1; - mmr_t overflow_md_fifo_vc0_credit : 1; - mmr_t overflow_iilb_fifo_vc2_credit : 1; - mmr_t overflow_iilb_fifo_vc0_credit : 1; - mmr_t overflow_pi_fifo_vc2_credit : 1; - mmr_t overflow_pi_fifo_vc0_credit : 1; - mmr_t overflow_md_fifo_vc2_push : 1; - mmr_t overflow_md_fifo_vc0_push : 1; - mmr_t overflow_iilb_fifo_vc2_push : 1; - mmr_t overflow_iilb_fifo_vc0_push : 1; - mmr_t overflow_pi_fifo_vc2_push : 1; - mmr_t overflow_pi_fifo_vc0_push : 1; - mmr_t overflow_ni_fifo_vc2_pop : 1; - mmr_t overflow_ni_fifo_vc0_pop : 1; - mmr_t overflow_md_fifo_vc2_pop : 1; - mmr_t overflow_md_fifo_vc0_pop : 1; - mmr_t overflow_iilb_fifo_vc2_pop : 1; - mmr_t overflow_iilb_fifo_vc0_pop : 1; - mmr_t overflow_pi_fifo_vc2_pop : 1; - mmr_t overflow_pi_fifo_vc0_pop : 1; - mmr_t overflow_ni_fifo_debit3 : 1; - mmr_t overflow_ni_fifo_debit2 : 1; - mmr_t overflow_ni_fifo_debit1 : 1; - mmr_t overflow_ni_fifo_debit0 : 1; - mmr_t overflow_md_fifo_debit2 : 1; - mmr_t overflow_md_fifo_debit0 : 1; - mmr_t overflow_iilb_fifo_debit2 : 1; - mmr_t overflow_iilb_fifo_debit0 : 1; - mmr_t overflow_pi_fifo_debit2 : 1; - mmr_t overflow_pi_fifo_debit0 : 1; - mmr_t overflow2_vc2_credit : 1; - mmr_t overflow1_vc2_credit : 1; - mmr_t overflow0_vc2_credit : 1; - mmr_t overflow2_vc0_credit : 1; - mmr_t overflow1_vc0_credit : 1; - mmr_t overflow0_vc0_credit : 1; - mmr_t overflow_fifo13_vc2_credit : 1; - mmr_t overflow_fifo13_vc0_credit : 1; - mmr_t overflow_fifo02_vc2_credit : 1; - mmr_t overflow_fifo02_vc0_credit : 1; - mmr_t overflow_fifo13_vc3_push : 1; - mmr_t overflow_fifo13_vc1_push : 1; - mmr_t overflow_fifo02_vc2_push : 1; - mmr_t overflow_fifo02_vc0_push : 1; - mmr_t overflow_fifo13_vc3_pop : 1; - mmr_t overflow_fifo13_vc1_pop : 1; - mmr_t overflow_fifo02_vc2_pop : 1; - mmr_t overflow_fifo02_vc0_pop : 1; - mmr_t overflow_fifo13_debit2 : 1; - mmr_t overflow_fifo13_debit0 : 1; - mmr_t overflow_fifo02_debit2 : 1; - mmr_t overflow_fifo02_debit0 : 1; - } sh_ni0_error_mask_1_s; -} sh_ni0_error_mask_1_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI0_ERROR_MASK_2" */ /* ni0 Error Mask Bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ni0_error_mask_2_u { mmr_t sh_ni0_error_mask_2_regval; struct { @@ -14239,77 +7736,14 @@ typedef union sh_ni0_error_mask_2_u { mmr_t reserved_1 : 1; } sh_ni0_error_mask_2_s; } sh_ni0_error_mask_2_u_t; -#else -typedef union sh_ni0_error_mask_2_u { - mmr_t sh_ni0_error_mask_2_regval; - struct { - mmr_t reserved_1 : 1; - mmr_t retry_timeout_error : 1; - mmr_t lut_read_error : 1; - mmr_t chiplet_nomatch : 1; - mmr_t llp_deadlock_vc3 : 1; - mmr_t llp_deadlock_vc2 : 1; - mmr_t llp_deadlock_vc1 : 1; - mmr_t llp_deadlock_vc0 : 1; - mmr_t underflow_ni_fifo_vc3_credit : 1; - mmr_t underflow_ni_fifo_vc2_credit : 1; - mmr_t underflow_ni_fifo_vc1_credit : 1; - mmr_t underflow_ni_fifo_vc0_credit : 1; - mmr_t underflow_md_fifo_vc2_credit : 1; - mmr_t underflow_md_fifo_vc0_credit : 1; - mmr_t underflow_iilb_fifo_vc2_credit : 1; - mmr_t underflow_iilb_fifo_vc0_credit : 1; - mmr_t underflow_pi_fifo_vc2_credit : 1; - mmr_t underflow_pi_fifo_vc0_credit : 1; - mmr_t underflow_md_fifo_vc2_push : 1; - mmr_t underflow_md_fifo_vc0_push : 1; - mmr_t underflow_iilb_fifo_vc2_push : 1; - mmr_t underflow_iilb_fifo_vc0_push : 1; - mmr_t underflow_pi_fifo_vc2_push : 1; - mmr_t underflow_pi_fifo_vc0_push : 1; - mmr_t underflow_ni_fifo_vc2_pop : 1; - mmr_t underflow_ni_fifo_vc0_pop : 1; - mmr_t underflow_md_fifo_vc2_pop : 1; - mmr_t underflow_md_fifo_vc0_pop : 1; - mmr_t underflow_iilb_fifo_vc2_pop : 1; - mmr_t underflow_iilb_fifo_vc0_pop : 1; - mmr_t underflow_pi_fifo_vc2_pop : 1; - mmr_t underflow_pi_fifo_vc0_pop : 1; - mmr_t reserved_0 : 10; - mmr_t underflow2_vc2_credit : 1; - mmr_t underflow1_vc2_credit : 1; - mmr_t underflow0_vc2_credit : 1; - mmr_t underflow2_vc0_credit : 1; - mmr_t underflow1_vc0_credit : 1; - mmr_t underflow0_vc0_credit : 1; - mmr_t underflow_fifo13_vc2_credit : 1; - mmr_t underflow_fifo13_vc0_credit : 1; - mmr_t underflow_fifo02_vc2_credit : 1; - mmr_t underflow_fifo02_vc0_credit : 1; - mmr_t underflow_fifo13_vc3_push : 1; - mmr_t underflow_fifo13_vc1_push : 1; - mmr_t underflow_fifo02_vc2_push : 1; - mmr_t underflow_fifo02_vc0_push : 1; - mmr_t underflow_fifo13_vc3_pop : 1; - mmr_t underflow_fifo13_vc1_pop : 1; - mmr_t underflow_fifo02_vc2_pop : 1; - mmr_t underflow_fifo02_vc0_pop : 1; - mmr_t illegal_vciilb : 1; - mmr_t illegal_vcmd : 1; - mmr_t illegal_vcpi : 1; - mmr_t illegal_vcni : 1; - } sh_ni0_error_mask_2_s; -} sh_ni0_error_mask_2_u_t; -#endif - -/* ==================================================================== */ -/* Register "SH_NI0_FIRST_ERROR_1" */ -/* ni0 First Error Bits */ -/* ==================================================================== */ - -#ifdef LITTLE_ENDIAN -typedef union sh_ni0_first_error_1_u { - mmr_t sh_ni0_first_error_1_regval; + +/* ==================================================================== */ +/* Register "SH_NI0_FIRST_ERROR_1" */ +/* ni0 First Error Bits */ +/* ==================================================================== */ + +typedef union sh_ni0_first_error_1_u { + mmr_t sh_ni0_first_error_1_regval; struct { mmr_t overflow_fifo02_debit0 : 1; mmr_t overflow_fifo02_debit2 : 1; @@ -14377,84 +7811,12 @@ typedef union sh_ni0_first_error_1_u { mmr_t tail_timeout_ni_vc3 : 1; } sh_ni0_first_error_1_s; } sh_ni0_first_error_1_u_t; -#else -typedef union sh_ni0_first_error_1_u { - mmr_t sh_ni0_first_error_1_regval; - struct { - mmr_t tail_timeout_ni_vc3 : 1; - mmr_t tail_timeout_ni_vc2 : 1; - mmr_t tail_timeout_ni_vc1 : 1; - mmr_t tail_timeout_ni_vc0 : 1; - mmr_t tail_timeout_fifo13_vc3 : 1; - mmr_t tail_timeout_fifo13_vc1 : 1; - mmr_t tail_timeout_fifo02_vc2 : 1; - mmr_t tail_timeout_fifo02_vc0 : 1; - mmr_t overflow_ni_fifo_vc3_credit : 1; - mmr_t overflow_ni_fifo_vc2_credit : 1; - mmr_t overflow_ni_fifo_vc1_credit : 1; - mmr_t overflow_ni_fifo_vc0_credit : 1; - mmr_t overflow_md_fifo_vc2_credit : 1; - mmr_t overflow_md_fifo_vc0_credit : 1; - mmr_t overflow_iilb_fifo_vc2_credit : 1; - mmr_t overflow_iilb_fifo_vc0_credit : 1; - mmr_t overflow_pi_fifo_vc2_credit : 1; - mmr_t overflow_pi_fifo_vc0_credit : 1; - mmr_t overflow_md_fifo_vc2_push : 1; - mmr_t overflow_md_fifo_vc0_push : 1; - mmr_t overflow_iilb_fifo_vc2_push : 1; - mmr_t overflow_iilb_fifo_vc0_push : 1; - mmr_t overflow_pi_fifo_vc2_push : 1; - mmr_t overflow_pi_fifo_vc0_push : 1; - mmr_t overflow_ni_fifo_vc2_pop : 1; - mmr_t overflow_ni_fifo_vc0_pop : 1; - mmr_t overflow_md_fifo_vc2_pop : 1; - mmr_t overflow_md_fifo_vc0_pop : 1; - mmr_t overflow_iilb_fifo_vc2_pop : 1; - mmr_t overflow_iilb_fifo_vc0_pop : 1; - mmr_t overflow_pi_fifo_vc2_pop : 1; - mmr_t overflow_pi_fifo_vc0_pop : 1; - mmr_t overflow_ni_fifo_debit3 : 1; - mmr_t overflow_ni_fifo_debit2 : 1; - mmr_t overflow_ni_fifo_debit1 : 1; - mmr_t overflow_ni_fifo_debit0 : 1; - mmr_t overflow_md_fifo_debit2 : 1; - mmr_t overflow_md_fifo_debit0 : 1; - mmr_t overflow_iilb_fifo_debit2 : 1; - mmr_t overflow_iilb_fifo_debit0 : 1; - mmr_t overflow_pi_fifo_debit2 : 1; - mmr_t overflow_pi_fifo_debit0 : 1; - mmr_t overflow2_vc2_credit : 1; - mmr_t overflow1_vc2_credit : 1; - mmr_t overflow0_vc2_credit : 1; - mmr_t overflow2_vc0_credit : 1; - mmr_t overflow1_vc0_credit : 1; - mmr_t overflow0_vc0_credit : 1; - mmr_t overflow_fifo13_vc2_credit : 1; - mmr_t overflow_fifo13_vc0_credit : 1; - mmr_t overflow_fifo02_vc2_credit : 1; - mmr_t overflow_fifo02_vc0_credit : 1; - mmr_t overflow_fifo13_vc3_push : 1; - mmr_t overflow_fifo13_vc1_push : 1; - mmr_t overflow_fifo02_vc2_push : 1; - mmr_t overflow_fifo02_vc0_push : 1; - mmr_t overflow_fifo13_vc3_pop : 1; - mmr_t overflow_fifo13_vc1_pop : 1; - mmr_t overflow_fifo02_vc2_pop : 1; - mmr_t overflow_fifo02_vc0_pop : 1; - mmr_t overflow_fifo13_debit2 : 1; - mmr_t overflow_fifo13_debit0 : 1; - mmr_t overflow_fifo02_debit2 : 1; - mmr_t overflow_fifo02_debit0 : 1; - } sh_ni0_first_error_1_s; -} sh_ni0_first_error_1_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI0_FIRST_ERROR_2" */ /* ni0 First Error Bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ni0_first_error_2_u { mmr_t sh_ni0_first_error_2_regval; struct { @@ -14515,117 +7877,36 @@ typedef union sh_ni0_first_error_2_u { mmr_t reserved_1 : 1; } sh_ni0_first_error_2_s; } sh_ni0_first_error_2_u_t; -#else -typedef union sh_ni0_first_error_2_u { - mmr_t sh_ni0_first_error_2_regval; - struct { - mmr_t reserved_1 : 1; - mmr_t retry_timeout_error : 1; - mmr_t lut_read_error : 1; - mmr_t chiplet_nomatch : 1; - mmr_t llp_deadlock_vc3 : 1; - mmr_t llp_deadlock_vc2 : 1; - mmr_t llp_deadlock_vc1 : 1; - mmr_t llp_deadlock_vc0 : 1; - mmr_t underflow_ni_fifo_vc3_credit : 1; - mmr_t underflow_ni_fifo_vc2_credit : 1; - mmr_t underflow_ni_fifo_vc1_credit : 1; - mmr_t underflow_ni_fifo_vc0_credit : 1; - mmr_t underflow_md_fifo_vc2_credit : 1; - mmr_t underflow_md_fifo_vc0_credit : 1; - mmr_t underflow_iilb_fifo_vc2_credit : 1; - mmr_t underflow_iilb_fifo_vc0_credit : 1; - mmr_t underflow_pi_fifo_vc2_credit : 1; - mmr_t underflow_pi_fifo_vc0_credit : 1; - mmr_t underflow_md_fifo_vc2_push : 1; - mmr_t underflow_md_fifo_vc0_push : 1; - mmr_t underflow_iilb_fifo_vc2_push : 1; - mmr_t underflow_iilb_fifo_vc0_push : 1; - mmr_t underflow_pi_fifo_vc2_push : 1; - mmr_t underflow_pi_fifo_vc0_push : 1; - mmr_t underflow_ni_fifo_vc2_pop : 1; - mmr_t underflow_ni_fifo_vc0_pop : 1; - mmr_t underflow_md_fifo_vc2_pop : 1; - mmr_t underflow_md_fifo_vc0_pop : 1; - mmr_t underflow_iilb_fifo_vc2_pop : 1; - mmr_t underflow_iilb_fifo_vc0_pop : 1; - mmr_t underflow_pi_fifo_vc2_pop : 1; - mmr_t underflow_pi_fifo_vc0_pop : 1; - mmr_t reserved_0 : 10; - mmr_t underflow2_vc2_credit : 1; - mmr_t underflow1_vc2_credit : 1; - mmr_t underflow0_vc2_credit : 1; - mmr_t underflow2_vc0_credit : 1; - mmr_t underflow1_vc0_credit : 1; - mmr_t underflow0_vc0_credit : 1; - mmr_t underflow_fifo13_vc2_credit : 1; - mmr_t underflow_fifo13_vc0_credit : 1; - mmr_t underflow_fifo02_vc2_credit : 1; - mmr_t underflow_fifo02_vc0_credit : 1; - mmr_t underflow_fifo13_vc3_push : 1; - mmr_t underflow_fifo13_vc1_push : 1; - mmr_t underflow_fifo02_vc2_push : 1; - mmr_t underflow_fifo02_vc0_push : 1; - mmr_t underflow_fifo13_vc3_pop : 1; - mmr_t underflow_fifo13_vc1_pop : 1; - mmr_t underflow_fifo02_vc2_pop : 1; - mmr_t underflow_fifo02_vc0_pop : 1; - mmr_t illegal_vciilb : 1; - mmr_t illegal_vcmd : 1; - mmr_t illegal_vcpi : 1; - mmr_t illegal_vcni : 1; - } sh_ni0_first_error_2_s; -} sh_ni0_first_error_2_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI0_ERROR_DETAIL_1" */ /* ni0 Chiplet no match header bits 63:0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_ni0_error_detail_1_u { - mmr_t sh_ni0_error_detail_1_regval; - struct { - mmr_t header : 64; - } sh_ni0_error_detail_1_s; -} sh_ni0_error_detail_1_u_t; -#else typedef union sh_ni0_error_detail_1_u { mmr_t sh_ni0_error_detail_1_regval; struct { mmr_t header : 64; } sh_ni0_error_detail_1_s; } sh_ni0_error_detail_1_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI0_ERROR_DETAIL_2" */ /* ni0 Chiplet no match header bits 127:64 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_ni0_error_detail_2_u { - mmr_t sh_ni0_error_detail_2_regval; - struct { - mmr_t header : 64; - } sh_ni0_error_detail_2_s; -} sh_ni0_error_detail_2_u_t; -#else typedef union sh_ni0_error_detail_2_u { mmr_t sh_ni0_error_detail_2_regval; struct { mmr_t header : 64; } sh_ni0_error_detail_2_s; } sh_ni0_error_detail_2_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI1_ERROR_SUMMARY_1" */ /* ni1 Error Summary Bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ni1_error_summary_1_u { mmr_t sh_ni1_error_summary_1_regval; struct { @@ -14695,84 +7976,12 @@ typedef union sh_ni1_error_summary_1_u { mmr_t tail_timeout_ni_vc3 : 1; } sh_ni1_error_summary_1_s; } sh_ni1_error_summary_1_u_t; -#else -typedef union sh_ni1_error_summary_1_u { - mmr_t sh_ni1_error_summary_1_regval; - struct { - mmr_t tail_timeout_ni_vc3 : 1; - mmr_t tail_timeout_ni_vc2 : 1; - mmr_t tail_timeout_ni_vc1 : 1; - mmr_t tail_timeout_ni_vc0 : 1; - mmr_t tail_timeout_fifo13_vc3 : 1; - mmr_t tail_timeout_fifo13_vc1 : 1; - mmr_t tail_timeout_fifo02_vc2 : 1; - mmr_t tail_timeout_fifo02_vc0 : 1; - mmr_t overflow_ni_fifo_vc3_credit : 1; - mmr_t overflow_ni_fifo_vc2_credit : 1; - mmr_t overflow_ni_fifo_vc1_credit : 1; - mmr_t overflow_ni_fifo_vc0_credit : 1; - mmr_t overflow_md_fifo_vc2_credit : 1; - mmr_t overflow_md_fifo_vc0_credit : 1; - mmr_t overflow_iilb_fifo_vc2_credit : 1; - mmr_t overflow_iilb_fifo_vc0_credit : 1; - mmr_t overflow_pi_fifo_vc2_credit : 1; - mmr_t overflow_pi_fifo_vc0_credit : 1; - mmr_t overflow_md_fifo_vc2_push : 1; - mmr_t overflow_md_fifo_vc0_push : 1; - mmr_t overflow_iilb_fifo_vc2_push : 1; - mmr_t overflow_iilb_fifo_vc0_push : 1; - mmr_t overflow_pi_fifo_vc2_push : 1; - mmr_t overflow_pi_fifo_vc0_push : 1; - mmr_t overflow_ni_fifo_vc2_pop : 1; - mmr_t overflow_ni_fifo_vc0_pop : 1; - mmr_t overflow_md_fifo_vc2_pop : 1; - mmr_t overflow_md_fifo_vc0_pop : 1; - mmr_t overflow_iilb_fifo_vc2_pop : 1; - mmr_t overflow_iilb_fifo_vc0_pop : 1; - mmr_t overflow_pi_fifo_vc2_pop : 1; - mmr_t overflow_pi_fifo_vc0_pop : 1; - mmr_t overflow_ni_fifo_debit3 : 1; - mmr_t overflow_ni_fifo_debit2 : 1; - mmr_t overflow_ni_fifo_debit1 : 1; - mmr_t overflow_ni_fifo_debit0 : 1; - mmr_t overflow_md_fifo_debit2 : 1; - mmr_t overflow_md_fifo_debit0 : 1; - mmr_t overflow_iilb_fifo_debit2 : 1; - mmr_t overflow_iilb_fifo_debit0 : 1; - mmr_t overflow_pi_fifo_debit2 : 1; - mmr_t overflow_pi_fifo_debit0 : 1; - mmr_t overflow2_vc2_credit : 1; - mmr_t overflow1_vc2_credit : 1; - mmr_t overflow0_vc2_credit : 1; - mmr_t overflow2_vc0_credit : 1; - mmr_t overflow1_vc0_credit : 1; - mmr_t overflow0_vc0_credit : 1; - mmr_t overflow_fifo13_vc2_credit : 1; - mmr_t overflow_fifo13_vc0_credit : 1; - mmr_t overflow_fifo02_vc2_credit : 1; - mmr_t overflow_fifo02_vc0_credit : 1; - mmr_t overflow_fifo13_vc3_push : 1; - mmr_t overflow_fifo13_vc1_push : 1; - mmr_t overflow_fifo02_vc2_push : 1; - mmr_t overflow_fifo02_vc0_push : 1; - mmr_t overflow_fifo13_vc3_pop : 1; - mmr_t overflow_fifo13_vc1_pop : 1; - mmr_t overflow_fifo02_vc2_pop : 1; - mmr_t overflow_fifo02_vc0_pop : 1; - mmr_t overflow_fifo13_debit2 : 1; - mmr_t overflow_fifo13_debit0 : 1; - mmr_t overflow_fifo02_debit2 : 1; - mmr_t overflow_fifo02_debit0 : 1; - } sh_ni1_error_summary_1_s; -} sh_ni1_error_summary_1_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI1_ERROR_SUMMARY_2" */ /* ni1 Error Summary Bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ni1_error_summary_2_u { mmr_t sh_ni1_error_summary_2_regval; struct { @@ -14833,77 +8042,14 @@ typedef union sh_ni1_error_summary_2_u { mmr_t reserved_1 : 1; } sh_ni1_error_summary_2_s; } sh_ni1_error_summary_2_u_t; -#else -typedef union sh_ni1_error_summary_2_u { - mmr_t sh_ni1_error_summary_2_regval; - struct { - mmr_t reserved_1 : 1; - mmr_t retry_timeout_error : 1; - mmr_t lut_read_error : 1; - mmr_t chiplet_nomatch : 1; - mmr_t llp_deadlock_vc3 : 1; - mmr_t llp_deadlock_vc2 : 1; - mmr_t llp_deadlock_vc1 : 1; - mmr_t llp_deadlock_vc0 : 1; - mmr_t underflow_ni_fifo_vc3_credit : 1; - mmr_t underflow_ni_fifo_vc2_credit : 1; - mmr_t underflow_ni_fifo_vc1_credit : 1; - mmr_t underflow_ni_fifo_vc0_credit : 1; - mmr_t underflow_md_fifo_vc2_credit : 1; - mmr_t underflow_md_fifo_vc0_credit : 1; - mmr_t underflow_iilb_fifo_vc2_credit : 1; - mmr_t underflow_iilb_fifo_vc0_credit : 1; - mmr_t underflow_pi_fifo_vc2_credit : 1; - mmr_t underflow_pi_fifo_vc0_credit : 1; - mmr_t underflow_md_fifo_vc2_push : 1; - mmr_t underflow_md_fifo_vc0_push : 1; - mmr_t underflow_iilb_fifo_vc2_push : 1; - mmr_t underflow_iilb_fifo_vc0_push : 1; - mmr_t underflow_pi_fifo_vc2_push : 1; - mmr_t underflow_pi_fifo_vc0_push : 1; - mmr_t underflow_ni_fifo_vc2_pop : 1; - mmr_t underflow_ni_fifo_vc0_pop : 1; - mmr_t underflow_md_fifo_vc2_pop : 1; - mmr_t underflow_md_fifo_vc0_pop : 1; - mmr_t underflow_iilb_fifo_vc2_pop : 1; - mmr_t underflow_iilb_fifo_vc0_pop : 1; - mmr_t underflow_pi_fifo_vc2_pop : 1; - mmr_t underflow_pi_fifo_vc0_pop : 1; - mmr_t reserved_0 : 10; - mmr_t underflow2_vc2_credit : 1; - mmr_t underflow1_vc2_credit : 1; - mmr_t underflow0_vc2_credit : 1; - mmr_t underflow2_vc0_credit : 1; - mmr_t underflow1_vc0_credit : 1; - mmr_t underflow0_vc0_credit : 1; - mmr_t underflow_fifo13_vc2_credit : 1; - mmr_t underflow_fifo13_vc0_credit : 1; - mmr_t underflow_fifo02_vc2_credit : 1; - mmr_t underflow_fifo02_vc0_credit : 1; - mmr_t underflow_fifo13_vc3_push : 1; - mmr_t underflow_fifo13_vc1_push : 1; - mmr_t underflow_fifo02_vc2_push : 1; - mmr_t underflow_fifo02_vc0_push : 1; - mmr_t underflow_fifo13_vc3_pop : 1; - mmr_t underflow_fifo13_vc1_pop : 1; - mmr_t underflow_fifo02_vc2_pop : 1; - mmr_t underflow_fifo02_vc0_pop : 1; - mmr_t illegal_vciilb : 1; - mmr_t illegal_vcmd : 1; - mmr_t illegal_vcpi : 1; - mmr_t illegal_vcni : 1; - } sh_ni1_error_summary_2_s; -} sh_ni1_error_summary_2_u_t; -#endif - -/* ==================================================================== */ -/* Register "SH_NI1_ERROR_OVERFLOW_1" */ -/* ni1 Error Overflow Bits */ -/* ==================================================================== */ - -#ifdef LITTLE_ENDIAN -typedef union sh_ni1_error_overflow_1_u { - mmr_t sh_ni1_error_overflow_1_regval; + +/* ==================================================================== */ +/* Register "SH_NI1_ERROR_OVERFLOW_1" */ +/* ni1 Error Overflow Bits */ +/* ==================================================================== */ + +typedef union sh_ni1_error_overflow_1_u { + mmr_t sh_ni1_error_overflow_1_regval; struct { mmr_t overflow_fifo02_debit0 : 1; mmr_t overflow_fifo02_debit2 : 1; @@ -14971,84 +8117,12 @@ typedef union sh_ni1_error_overflow_1_u mmr_t tail_timeout_ni_vc3 : 1; } sh_ni1_error_overflow_1_s; } sh_ni1_error_overflow_1_u_t; -#else -typedef union sh_ni1_error_overflow_1_u { - mmr_t sh_ni1_error_overflow_1_regval; - struct { - mmr_t tail_timeout_ni_vc3 : 1; - mmr_t tail_timeout_ni_vc2 : 1; - mmr_t tail_timeout_ni_vc1 : 1; - mmr_t tail_timeout_ni_vc0 : 1; - mmr_t tail_timeout_fifo13_vc3 : 1; - mmr_t tail_timeout_fifo13_vc1 : 1; - mmr_t tail_timeout_fifo02_vc2 : 1; - mmr_t tail_timeout_fifo02_vc0 : 1; - mmr_t overflow_ni_fifo_vc3_credit : 1; - mmr_t overflow_ni_fifo_vc2_credit : 1; - mmr_t overflow_ni_fifo_vc1_credit : 1; - mmr_t overflow_ni_fifo_vc0_credit : 1; - mmr_t overflow_md_fifo_vc2_credit : 1; - mmr_t overflow_md_fifo_vc0_credit : 1; - mmr_t overflow_iilb_fifo_vc2_credit : 1; - mmr_t overflow_iilb_fifo_vc0_credit : 1; - mmr_t overflow_pi_fifo_vc2_credit : 1; - mmr_t overflow_pi_fifo_vc0_credit : 1; - mmr_t overflow_md_fifo_vc2_push : 1; - mmr_t overflow_md_fifo_vc0_push : 1; - mmr_t overflow_iilb_fifo_vc2_push : 1; - mmr_t overflow_iilb_fifo_vc0_push : 1; - mmr_t overflow_pi_fifo_vc2_push : 1; - mmr_t overflow_pi_fifo_vc0_push : 1; - mmr_t overflow_ni_fifo_vc2_pop : 1; - mmr_t overflow_ni_fifo_vc0_pop : 1; - mmr_t overflow_md_fifo_vc2_pop : 1; - mmr_t overflow_md_fifo_vc0_pop : 1; - mmr_t overflow_iilb_fifo_vc2_pop : 1; - mmr_t overflow_iilb_fifo_vc0_pop : 1; - mmr_t overflow_pi_fifo_vc2_pop : 1; - mmr_t overflow_pi_fifo_vc0_pop : 1; - mmr_t overflow_ni_fifo_debit3 : 1; - mmr_t overflow_ni_fifo_debit2 : 1; - mmr_t overflow_ni_fifo_debit1 : 1; - mmr_t overflow_ni_fifo_debit0 : 1; - mmr_t overflow_md_fifo_debit2 : 1; - mmr_t overflow_md_fifo_debit0 : 1; - mmr_t overflow_iilb_fifo_debit2 : 1; - mmr_t overflow_iilb_fifo_debit0 : 1; - mmr_t overflow_pi_fifo_debit2 : 1; - mmr_t overflow_pi_fifo_debit0 : 1; - mmr_t overflow2_vc2_credit : 1; - mmr_t overflow1_vc2_credit : 1; - mmr_t overflow0_vc2_credit : 1; - mmr_t overflow2_vc0_credit : 1; - mmr_t overflow1_vc0_credit : 1; - mmr_t overflow0_vc0_credit : 1; - mmr_t overflow_fifo13_vc2_credit : 1; - mmr_t overflow_fifo13_vc0_credit : 1; - mmr_t overflow_fifo02_vc2_credit : 1; - mmr_t overflow_fifo02_vc0_credit : 1; - mmr_t overflow_fifo13_vc3_push : 1; - mmr_t overflow_fifo13_vc1_push : 1; - mmr_t overflow_fifo02_vc2_push : 1; - mmr_t overflow_fifo02_vc0_push : 1; - mmr_t overflow_fifo13_vc3_pop : 1; - mmr_t overflow_fifo13_vc1_pop : 1; - mmr_t overflow_fifo02_vc2_pop : 1; - mmr_t overflow_fifo02_vc0_pop : 1; - mmr_t overflow_fifo13_debit2 : 1; - mmr_t overflow_fifo13_debit0 : 1; - mmr_t overflow_fifo02_debit2 : 1; - mmr_t overflow_fifo02_debit0 : 1; - } sh_ni1_error_overflow_1_s; -} sh_ni1_error_overflow_1_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI1_ERROR_OVERFLOW_2" */ /* ni1 Error Overflow Bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ni1_error_overflow_2_u { mmr_t sh_ni1_error_overflow_2_regval; struct { @@ -15109,75 +8183,12 @@ typedef union sh_ni1_error_overflow_2_u mmr_t reserved_1 : 1; } sh_ni1_error_overflow_2_s; } sh_ni1_error_overflow_2_u_t; -#else -typedef union sh_ni1_error_overflow_2_u { - mmr_t sh_ni1_error_overflow_2_regval; - struct { - mmr_t reserved_1 : 1; - mmr_t retry_timeout_error : 1; - mmr_t lut_read_error : 1; - mmr_t chiplet_nomatch : 1; - mmr_t llp_deadlock_vc3 : 1; - mmr_t llp_deadlock_vc2 : 1; - mmr_t llp_deadlock_vc1 : 1; - mmr_t llp_deadlock_vc0 : 1; - mmr_t underflow_ni_fifo_vc3_credit : 1; - mmr_t underflow_ni_fifo_vc2_credit : 1; - mmr_t underflow_ni_fifo_vc1_credit : 1; - mmr_t underflow_ni_fifo_vc0_credit : 1; - mmr_t underflow_md_fifo_vc2_credit : 1; - mmr_t underflow_md_fifo_vc0_credit : 1; - mmr_t underflow_iilb_fifo_vc2_credit : 1; - mmr_t underflow_iilb_fifo_vc0_credit : 1; - mmr_t underflow_pi_fifo_vc2_credit : 1; - mmr_t underflow_pi_fifo_vc0_credit : 1; - mmr_t underflow_md_fifo_vc2_push : 1; - mmr_t underflow_md_fifo_vc0_push : 1; - mmr_t underflow_iilb_fifo_vc2_push : 1; - mmr_t underflow_iilb_fifo_vc0_push : 1; - mmr_t underflow_pi_fifo_vc2_push : 1; - mmr_t underflow_pi_fifo_vc0_push : 1; - mmr_t underflow_ni_fifo_vc2_pop : 1; - mmr_t underflow_ni_fifo_vc0_pop : 1; - mmr_t underflow_md_fifo_vc2_pop : 1; - mmr_t underflow_md_fifo_vc0_pop : 1; - mmr_t underflow_iilb_fifo_vc2_pop : 1; - mmr_t underflow_iilb_fifo_vc0_pop : 1; - mmr_t underflow_pi_fifo_vc2_pop : 1; - mmr_t underflow_pi_fifo_vc0_pop : 1; - mmr_t reserved_0 : 10; - mmr_t underflow2_vc2_credit : 1; - mmr_t underflow1_vc2_credit : 1; - mmr_t underflow0_vc2_credit : 1; - mmr_t underflow2_vc0_credit : 1; - mmr_t underflow1_vc0_credit : 1; - mmr_t underflow0_vc0_credit : 1; - mmr_t underflow_fifo13_vc2_credit : 1; - mmr_t underflow_fifo13_vc0_credit : 1; - mmr_t underflow_fifo02_vc2_credit : 1; - mmr_t underflow_fifo02_vc0_credit : 1; - mmr_t underflow_fifo13_vc3_push : 1; - mmr_t underflow_fifo13_vc1_push : 1; - mmr_t underflow_fifo02_vc2_push : 1; - mmr_t underflow_fifo02_vc0_push : 1; - mmr_t underflow_fifo13_vc3_pop : 1; - mmr_t underflow_fifo13_vc1_pop : 1; - mmr_t underflow_fifo02_vc2_pop : 1; - mmr_t underflow_fifo02_vc0_pop : 1; - mmr_t illegal_vciilb : 1; - mmr_t illegal_vcmd : 1; - mmr_t illegal_vcpi : 1; - mmr_t illegal_vcni : 1; - } sh_ni1_error_overflow_2_s; -} sh_ni1_error_overflow_2_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI1_ERROR_MASK_1" */ /* ni1 Error Mask Bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ni1_error_mask_1_u { mmr_t sh_ni1_error_mask_1_regval; struct { @@ -15247,84 +8258,12 @@ typedef union sh_ni1_error_mask_1_u { mmr_t tail_timeout_ni_vc3 : 1; } sh_ni1_error_mask_1_s; } sh_ni1_error_mask_1_u_t; -#else -typedef union sh_ni1_error_mask_1_u { - mmr_t sh_ni1_error_mask_1_regval; - struct { - mmr_t tail_timeout_ni_vc3 : 1; - mmr_t tail_timeout_ni_vc2 : 1; - mmr_t tail_timeout_ni_vc1 : 1; - mmr_t tail_timeout_ni_vc0 : 1; - mmr_t tail_timeout_fifo13_vc3 : 1; - mmr_t tail_timeout_fifo13_vc1 : 1; - mmr_t tail_timeout_fifo02_vc2 : 1; - mmr_t tail_timeout_fifo02_vc0 : 1; - mmr_t overflow_ni_fifo_vc3_credit : 1; - mmr_t overflow_ni_fifo_vc2_credit : 1; - mmr_t overflow_ni_fifo_vc1_credit : 1; - mmr_t overflow_ni_fifo_vc0_credit : 1; - mmr_t overflow_md_fifo_vc2_credit : 1; - mmr_t overflow_md_fifo_vc0_credit : 1; - mmr_t overflow_iilb_fifo_vc2_credit : 1; - mmr_t overflow_iilb_fifo_vc0_credit : 1; - mmr_t overflow_pi_fifo_vc2_credit : 1; - mmr_t overflow_pi_fifo_vc0_credit : 1; - mmr_t overflow_md_fifo_vc2_push : 1; - mmr_t overflow_md_fifo_vc0_push : 1; - mmr_t overflow_iilb_fifo_vc2_push : 1; - mmr_t overflow_iilb_fifo_vc0_push : 1; - mmr_t overflow_pi_fifo_vc2_push : 1; - mmr_t overflow_pi_fifo_vc0_push : 1; - mmr_t overflow_ni_fifo_vc2_pop : 1; - mmr_t overflow_ni_fifo_vc0_pop : 1; - mmr_t overflow_md_fifo_vc2_pop : 1; - mmr_t overflow_md_fifo_vc0_pop : 1; - mmr_t overflow_iilb_fifo_vc2_pop : 1; - mmr_t overflow_iilb_fifo_vc0_pop : 1; - mmr_t overflow_pi_fifo_vc2_pop : 1; - mmr_t overflow_pi_fifo_vc0_pop : 1; - mmr_t overflow_ni_fifo_debit3 : 1; - mmr_t overflow_ni_fifo_debit2 : 1; - mmr_t overflow_ni_fifo_debit1 : 1; - mmr_t overflow_ni_fifo_debit0 : 1; - mmr_t overflow_md_fifo_debit2 : 1; - mmr_t overflow_md_fifo_debit0 : 1; - mmr_t overflow_iilb_fifo_debit2 : 1; - mmr_t overflow_iilb_fifo_debit0 : 1; - mmr_t overflow_pi_fifo_debit2 : 1; - mmr_t overflow_pi_fifo_debit0 : 1; - mmr_t overflow2_vc2_credit : 1; - mmr_t overflow1_vc2_credit : 1; - mmr_t overflow0_vc2_credit : 1; - mmr_t overflow2_vc0_credit : 1; - mmr_t overflow1_vc0_credit : 1; - mmr_t overflow0_vc0_credit : 1; - mmr_t overflow_fifo13_vc2_credit : 1; - mmr_t overflow_fifo13_vc0_credit : 1; - mmr_t overflow_fifo02_vc2_credit : 1; - mmr_t overflow_fifo02_vc0_credit : 1; - mmr_t overflow_fifo13_vc3_push : 1; - mmr_t overflow_fifo13_vc1_push : 1; - mmr_t overflow_fifo02_vc2_push : 1; - mmr_t overflow_fifo02_vc0_push : 1; - mmr_t overflow_fifo13_vc3_pop : 1; - mmr_t overflow_fifo13_vc1_pop : 1; - mmr_t overflow_fifo02_vc2_pop : 1; - mmr_t overflow_fifo02_vc0_pop : 1; - mmr_t overflow_fifo13_debit2 : 1; - mmr_t overflow_fifo13_debit0 : 1; - mmr_t overflow_fifo02_debit2 : 1; - mmr_t overflow_fifo02_debit0 : 1; - } sh_ni1_error_mask_1_s; -} sh_ni1_error_mask_1_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI1_ERROR_MASK_2" */ /* ni1 Error Mask Bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ni1_error_mask_2_u { mmr_t sh_ni1_error_mask_2_regval; struct { @@ -15385,77 +8324,14 @@ typedef union sh_ni1_error_mask_2_u { mmr_t reserved_1 : 1; } sh_ni1_error_mask_2_s; } sh_ni1_error_mask_2_u_t; -#else -typedef union sh_ni1_error_mask_2_u { - mmr_t sh_ni1_error_mask_2_regval; - struct { - mmr_t reserved_1 : 1; - mmr_t retry_timeout_error : 1; - mmr_t lut_read_error : 1; - mmr_t chiplet_nomatch : 1; - mmr_t llp_deadlock_vc3 : 1; - mmr_t llp_deadlock_vc2 : 1; - mmr_t llp_deadlock_vc1 : 1; - mmr_t llp_deadlock_vc0 : 1; - mmr_t underflow_ni_fifo_vc3_credit : 1; - mmr_t underflow_ni_fifo_vc2_credit : 1; - mmr_t underflow_ni_fifo_vc1_credit : 1; - mmr_t underflow_ni_fifo_vc0_credit : 1; - mmr_t underflow_md_fifo_vc2_credit : 1; - mmr_t underflow_md_fifo_vc0_credit : 1; - mmr_t underflow_iilb_fifo_vc2_credit : 1; - mmr_t underflow_iilb_fifo_vc0_credit : 1; - mmr_t underflow_pi_fifo_vc2_credit : 1; - mmr_t underflow_pi_fifo_vc0_credit : 1; - mmr_t underflow_md_fifo_vc2_push : 1; - mmr_t underflow_md_fifo_vc0_push : 1; - mmr_t underflow_iilb_fifo_vc2_push : 1; - mmr_t underflow_iilb_fifo_vc0_push : 1; - mmr_t underflow_pi_fifo_vc2_push : 1; - mmr_t underflow_pi_fifo_vc0_push : 1; - mmr_t underflow_ni_fifo_vc2_pop : 1; - mmr_t underflow_ni_fifo_vc0_pop : 1; - mmr_t underflow_md_fifo_vc2_pop : 1; - mmr_t underflow_md_fifo_vc0_pop : 1; - mmr_t underflow_iilb_fifo_vc2_pop : 1; - mmr_t underflow_iilb_fifo_vc0_pop : 1; - mmr_t underflow_pi_fifo_vc2_pop : 1; - mmr_t underflow_pi_fifo_vc0_pop : 1; - mmr_t reserved_0 : 10; - mmr_t underflow2_vc2_credit : 1; - mmr_t underflow1_vc2_credit : 1; - mmr_t underflow0_vc2_credit : 1; - mmr_t underflow2_vc0_credit : 1; - mmr_t underflow1_vc0_credit : 1; - mmr_t underflow0_vc0_credit : 1; - mmr_t underflow_fifo13_vc2_credit : 1; - mmr_t underflow_fifo13_vc0_credit : 1; - mmr_t underflow_fifo02_vc2_credit : 1; - mmr_t underflow_fifo02_vc0_credit : 1; - mmr_t underflow_fifo13_vc3_push : 1; - mmr_t underflow_fifo13_vc1_push : 1; - mmr_t underflow_fifo02_vc2_push : 1; - mmr_t underflow_fifo02_vc0_push : 1; - mmr_t underflow_fifo13_vc3_pop : 1; - mmr_t underflow_fifo13_vc1_pop : 1; - mmr_t underflow_fifo02_vc2_pop : 1; - mmr_t underflow_fifo02_vc0_pop : 1; - mmr_t illegal_vciilb : 1; - mmr_t illegal_vcmd : 1; - mmr_t illegal_vcpi : 1; - mmr_t illegal_vcni : 1; - } sh_ni1_error_mask_2_s; -} sh_ni1_error_mask_2_u_t; -#endif - -/* ==================================================================== */ -/* Register "SH_NI1_FIRST_ERROR_1" */ -/* ni1 First Error Bits */ -/* ==================================================================== */ - -#ifdef LITTLE_ENDIAN -typedef union sh_ni1_first_error_1_u { - mmr_t sh_ni1_first_error_1_regval; + +/* ==================================================================== */ +/* Register "SH_NI1_FIRST_ERROR_1" */ +/* ni1 First Error Bits */ +/* ==================================================================== */ + +typedef union sh_ni1_first_error_1_u { + mmr_t sh_ni1_first_error_1_regval; struct { mmr_t overflow_fifo02_debit0 : 1; mmr_t overflow_fifo02_debit2 : 1; @@ -15523,84 +8399,12 @@ typedef union sh_ni1_first_error_1_u { mmr_t tail_timeout_ni_vc3 : 1; } sh_ni1_first_error_1_s; } sh_ni1_first_error_1_u_t; -#else -typedef union sh_ni1_first_error_1_u { - mmr_t sh_ni1_first_error_1_regval; - struct { - mmr_t tail_timeout_ni_vc3 : 1; - mmr_t tail_timeout_ni_vc2 : 1; - mmr_t tail_timeout_ni_vc1 : 1; - mmr_t tail_timeout_ni_vc0 : 1; - mmr_t tail_timeout_fifo13_vc3 : 1; - mmr_t tail_timeout_fifo13_vc1 : 1; - mmr_t tail_timeout_fifo02_vc2 : 1; - mmr_t tail_timeout_fifo02_vc0 : 1; - mmr_t overflow_ni_fifo_vc3_credit : 1; - mmr_t overflow_ni_fifo_vc2_credit : 1; - mmr_t overflow_ni_fifo_vc1_credit : 1; - mmr_t overflow_ni_fifo_vc0_credit : 1; - mmr_t overflow_md_fifo_vc2_credit : 1; - mmr_t overflow_md_fifo_vc0_credit : 1; - mmr_t overflow_iilb_fifo_vc2_credit : 1; - mmr_t overflow_iilb_fifo_vc0_credit : 1; - mmr_t overflow_pi_fifo_vc2_credit : 1; - mmr_t overflow_pi_fifo_vc0_credit : 1; - mmr_t overflow_md_fifo_vc2_push : 1; - mmr_t overflow_md_fifo_vc0_push : 1; - mmr_t overflow_iilb_fifo_vc2_push : 1; - mmr_t overflow_iilb_fifo_vc0_push : 1; - mmr_t overflow_pi_fifo_vc2_push : 1; - mmr_t overflow_pi_fifo_vc0_push : 1; - mmr_t overflow_ni_fifo_vc2_pop : 1; - mmr_t overflow_ni_fifo_vc0_pop : 1; - mmr_t overflow_md_fifo_vc2_pop : 1; - mmr_t overflow_md_fifo_vc0_pop : 1; - mmr_t overflow_iilb_fifo_vc2_pop : 1; - mmr_t overflow_iilb_fifo_vc0_pop : 1; - mmr_t overflow_pi_fifo_vc2_pop : 1; - mmr_t overflow_pi_fifo_vc0_pop : 1; - mmr_t overflow_ni_fifo_debit3 : 1; - mmr_t overflow_ni_fifo_debit2 : 1; - mmr_t overflow_ni_fifo_debit1 : 1; - mmr_t overflow_ni_fifo_debit0 : 1; - mmr_t overflow_md_fifo_debit2 : 1; - mmr_t overflow_md_fifo_debit0 : 1; - mmr_t overflow_iilb_fifo_debit2 : 1; - mmr_t overflow_iilb_fifo_debit0 : 1; - mmr_t overflow_pi_fifo_debit2 : 1; - mmr_t overflow_pi_fifo_debit0 : 1; - mmr_t overflow2_vc2_credit : 1; - mmr_t overflow1_vc2_credit : 1; - mmr_t overflow0_vc2_credit : 1; - mmr_t overflow2_vc0_credit : 1; - mmr_t overflow1_vc0_credit : 1; - mmr_t overflow0_vc0_credit : 1; - mmr_t overflow_fifo13_vc2_credit : 1; - mmr_t overflow_fifo13_vc0_credit : 1; - mmr_t overflow_fifo02_vc2_credit : 1; - mmr_t overflow_fifo02_vc0_credit : 1; - mmr_t overflow_fifo13_vc3_push : 1; - mmr_t overflow_fifo13_vc1_push : 1; - mmr_t overflow_fifo02_vc2_push : 1; - mmr_t overflow_fifo02_vc0_push : 1; - mmr_t overflow_fifo13_vc3_pop : 1; - mmr_t overflow_fifo13_vc1_pop : 1; - mmr_t overflow_fifo02_vc2_pop : 1; - mmr_t overflow_fifo02_vc0_pop : 1; - mmr_t overflow_fifo13_debit2 : 1; - mmr_t overflow_fifo13_debit0 : 1; - mmr_t overflow_fifo02_debit2 : 1; - mmr_t overflow_fifo02_debit0 : 1; - } sh_ni1_first_error_1_s; -} sh_ni1_first_error_1_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI1_FIRST_ERROR_2" */ /* ni1 First Error Bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ni1_first_error_2_u { mmr_t sh_ni1_first_error_2_regval; struct { @@ -15661,117 +8465,36 @@ typedef union sh_ni1_first_error_2_u { mmr_t reserved_1 : 1; } sh_ni1_first_error_2_s; } sh_ni1_first_error_2_u_t; -#else -typedef union sh_ni1_first_error_2_u { - mmr_t sh_ni1_first_error_2_regval; - struct { - mmr_t reserved_1 : 1; - mmr_t retry_timeout_error : 1; - mmr_t lut_read_error : 1; - mmr_t chiplet_nomatch : 1; - mmr_t llp_deadlock_vc3 : 1; - mmr_t llp_deadlock_vc2 : 1; - mmr_t llp_deadlock_vc1 : 1; - mmr_t llp_deadlock_vc0 : 1; - mmr_t underflow_ni_fifo_vc3_credit : 1; - mmr_t underflow_ni_fifo_vc2_credit : 1; - mmr_t underflow_ni_fifo_vc1_credit : 1; - mmr_t underflow_ni_fifo_vc0_credit : 1; - mmr_t underflow_md_fifo_vc2_credit : 1; - mmr_t underflow_md_fifo_vc0_credit : 1; - mmr_t underflow_iilb_fifo_vc2_credit : 1; - mmr_t underflow_iilb_fifo_vc0_credit : 1; - mmr_t underflow_pi_fifo_vc2_credit : 1; - mmr_t underflow_pi_fifo_vc0_credit : 1; - mmr_t underflow_md_fifo_vc2_push : 1; - mmr_t underflow_md_fifo_vc0_push : 1; - mmr_t underflow_iilb_fifo_vc2_push : 1; - mmr_t underflow_iilb_fifo_vc0_push : 1; - mmr_t underflow_pi_fifo_vc2_push : 1; - mmr_t underflow_pi_fifo_vc0_push : 1; - mmr_t underflow_ni_fifo_vc2_pop : 1; - mmr_t underflow_ni_fifo_vc0_pop : 1; - mmr_t underflow_md_fifo_vc2_pop : 1; - mmr_t underflow_md_fifo_vc0_pop : 1; - mmr_t underflow_iilb_fifo_vc2_pop : 1; - mmr_t underflow_iilb_fifo_vc0_pop : 1; - mmr_t underflow_pi_fifo_vc2_pop : 1; - mmr_t underflow_pi_fifo_vc0_pop : 1; - mmr_t reserved_0 : 10; - mmr_t underflow2_vc2_credit : 1; - mmr_t underflow1_vc2_credit : 1; - mmr_t underflow0_vc2_credit : 1; - mmr_t underflow2_vc0_credit : 1; - mmr_t underflow1_vc0_credit : 1; - mmr_t underflow0_vc0_credit : 1; - mmr_t underflow_fifo13_vc2_credit : 1; - mmr_t underflow_fifo13_vc0_credit : 1; - mmr_t underflow_fifo02_vc2_credit : 1; - mmr_t underflow_fifo02_vc0_credit : 1; - mmr_t underflow_fifo13_vc3_push : 1; - mmr_t underflow_fifo13_vc1_push : 1; - mmr_t underflow_fifo02_vc2_push : 1; - mmr_t underflow_fifo02_vc0_push : 1; - mmr_t underflow_fifo13_vc3_pop : 1; - mmr_t underflow_fifo13_vc1_pop : 1; - mmr_t underflow_fifo02_vc2_pop : 1; - mmr_t underflow_fifo02_vc0_pop : 1; - mmr_t illegal_vciilb : 1; - mmr_t illegal_vcmd : 1; - mmr_t illegal_vcpi : 1; - mmr_t illegal_vcni : 1; - } sh_ni1_first_error_2_s; -} sh_ni1_first_error_2_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI1_ERROR_DETAIL_1" */ /* ni1 Chiplet no match header bits 63:0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_ni1_error_detail_1_u { - mmr_t sh_ni1_error_detail_1_regval; - struct { - mmr_t header : 64; - } sh_ni1_error_detail_1_s; -} sh_ni1_error_detail_1_u_t; -#else typedef union sh_ni1_error_detail_1_u { mmr_t sh_ni1_error_detail_1_regval; struct { mmr_t header : 64; } sh_ni1_error_detail_1_s; } sh_ni1_error_detail_1_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI1_ERROR_DETAIL_2" */ /* ni1 Chiplet no match header bits 127:64 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_ni1_error_detail_2_u { - mmr_t sh_ni1_error_detail_2_regval; - struct { - mmr_t header : 64; - } sh_ni1_error_detail_2_s; -} sh_ni1_error_detail_2_u_t; -#else typedef union sh_ni1_error_detail_2_u { mmr_t sh_ni1_error_detail_2_regval; struct { mmr_t header : 64; } sh_ni1_error_detail_2_s; } sh_ni1_error_detail_2_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_CORRECTED_DETAIL_1" */ /* Corrected error details */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_corrected_detail_1_u { mmr_t sh_xn_corrected_detail_1_regval; struct { @@ -15793,78 +8516,36 @@ typedef union sh_xn_corrected_detail_1_u mmr_t reserved_3 : 4; } sh_xn_corrected_detail_1_s; } sh_xn_corrected_detail_1_u_t; -#else -typedef union sh_xn_corrected_detail_1_u { - mmr_t sh_xn_corrected_detail_1_regval; - struct { - mmr_t reserved_3 : 4; - mmr_t ecc3_vc : 2; - mmr_t ecc3_wc : 2; - mmr_t ecc3_syndrome : 8; - mmr_t reserved_2 : 4; - mmr_t ecc2_vc : 2; - mmr_t ecc2_wc : 2; - mmr_t ecc2_syndrome : 8; - mmr_t reserved_1 : 4; - mmr_t ecc1_vc : 2; - mmr_t ecc1_wc : 2; - mmr_t ecc1_syndrome : 8; - mmr_t reserved_0 : 4; - mmr_t ecc0_vc : 2; - mmr_t ecc0_wc : 2; - mmr_t ecc0_syndrome : 8; - } sh_xn_corrected_detail_1_s; -} sh_xn_corrected_detail_1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_CORRECTED_DETAIL_2" */ /* Corrected error data */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_corrected_detail_2_u { - mmr_t sh_xn_corrected_detail_2_regval; - struct { - mmr_t data : 64; - } sh_xn_corrected_detail_2_s; -} sh_xn_corrected_detail_2_u_t; -#else typedef union sh_xn_corrected_detail_2_u { mmr_t sh_xn_corrected_detail_2_regval; struct { mmr_t data : 64; } sh_xn_corrected_detail_2_s; } sh_xn_corrected_detail_2_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_CORRECTED_DETAIL_3" */ /* Corrected error header0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_corrected_detail_3_u { - mmr_t sh_xn_corrected_detail_3_regval; - struct { - mmr_t header0 : 64; - } sh_xn_corrected_detail_3_s; -} sh_xn_corrected_detail_3_u_t; -#else typedef union sh_xn_corrected_detail_3_u { mmr_t sh_xn_corrected_detail_3_regval; struct { mmr_t header0 : 64; } sh_xn_corrected_detail_3_s; } sh_xn_corrected_detail_3_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_CORRECTED_DETAIL_4" */ /* Corrected error header1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_corrected_detail_4_u { mmr_t sh_xn_corrected_detail_4_regval; struct { @@ -15873,23 +8554,12 @@ typedef union sh_xn_corrected_detail_4_u mmr_t err_group : 2; } sh_xn_corrected_detail_4_s; } sh_xn_corrected_detail_4_u_t; -#else -typedef union sh_xn_corrected_detail_4_u { - mmr_t sh_xn_corrected_detail_4_regval; - struct { - mmr_t err_group : 2; - mmr_t reserved_0 : 20; - mmr_t header1 : 42; - } sh_xn_corrected_detail_4_s; -} sh_xn_corrected_detail_4_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_UNCORRECTED_DETAIL_1" */ /* Uncorrected error details */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_uncorrected_detail_1_u { mmr_t sh_xn_uncorrected_detail_1_regval; struct { @@ -15911,78 +8581,36 @@ typedef union sh_xn_uncorrected_detail_1 mmr_t reserved_3 : 4; } sh_xn_uncorrected_detail_1_s; } sh_xn_uncorrected_detail_1_u_t; -#else -typedef union sh_xn_uncorrected_detail_1_u { - mmr_t sh_xn_uncorrected_detail_1_regval; - struct { - mmr_t reserved_3 : 4; - mmr_t ecc3_vc : 2; - mmr_t ecc3_wc : 2; - mmr_t ecc3_syndrome : 8; - mmr_t reserved_2 : 4; - mmr_t ecc2_vc : 2; - mmr_t ecc2_wc : 2; - mmr_t ecc2_syndrome : 8; - mmr_t reserved_1 : 4; - mmr_t ecc1_vc : 2; - mmr_t ecc1_wc : 2; - mmr_t ecc1_syndrome : 8; - mmr_t reserved_0 : 4; - mmr_t ecc0_vc : 2; - mmr_t ecc0_wc : 2; - mmr_t ecc0_syndrome : 8; - } sh_xn_uncorrected_detail_1_s; -} sh_xn_uncorrected_detail_1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_UNCORRECTED_DETAIL_2" */ /* Uncorrected error data */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_uncorrected_detail_2_u { - mmr_t sh_xn_uncorrected_detail_2_regval; - struct { - mmr_t data : 64; - } sh_xn_uncorrected_detail_2_s; -} sh_xn_uncorrected_detail_2_u_t; -#else typedef union sh_xn_uncorrected_detail_2_u { mmr_t sh_xn_uncorrected_detail_2_regval; struct { mmr_t data : 64; } sh_xn_uncorrected_detail_2_s; } sh_xn_uncorrected_detail_2_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_UNCORRECTED_DETAIL_3" */ /* Uncorrected error header0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xn_uncorrected_detail_3_u { - mmr_t sh_xn_uncorrected_detail_3_regval; - struct { - mmr_t header0 : 64; - } sh_xn_uncorrected_detail_3_s; -} sh_xn_uncorrected_detail_3_u_t; -#else typedef union sh_xn_uncorrected_detail_3_u { mmr_t sh_xn_uncorrected_detail_3_regval; struct { mmr_t header0 : 64; } sh_xn_uncorrected_detail_3_s; } sh_xn_uncorrected_detail_3_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_UNCORRECTED_DETAIL_4" */ /* Uncorrected error header1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_uncorrected_detail_4_u { mmr_t sh_xn_uncorrected_detail_4_regval; struct { @@ -15991,23 +8619,12 @@ typedef union sh_xn_uncorrected_detail_4 mmr_t err_group : 2; } sh_xn_uncorrected_detail_4_s; } sh_xn_uncorrected_detail_4_u_t; -#else -typedef union sh_xn_uncorrected_detail_4_u { - mmr_t sh_xn_uncorrected_detail_4_regval; - struct { - mmr_t err_group : 2; - mmr_t reserved_0 : 20; - mmr_t header1 : 42; - } sh_xn_uncorrected_detail_4_s; -} sh_xn_uncorrected_detail_4_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNMD_ERROR_DETAIL_1" */ /* Look Up Table Address (md) */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnmd_error_detail_1_u { mmr_t sh_xnmd_error_detail_1_regval; struct { @@ -16015,22 +8632,12 @@ typedef union sh_xnmd_error_detail_1_u { mmr_t reserved_0 : 53; } sh_xnmd_error_detail_1_s; } sh_xnmd_error_detail_1_u_t; -#else -typedef union sh_xnmd_error_detail_1_u { - mmr_t sh_xnmd_error_detail_1_regval; - struct { - mmr_t reserved_0 : 53; - mmr_t lut_addr : 11; - } sh_xnmd_error_detail_1_s; -} sh_xnmd_error_detail_1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNPI_ERROR_DETAIL_1" */ /* Look Up Table Address (pi) */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnpi_error_detail_1_u { mmr_t sh_xnpi_error_detail_1_regval; struct { @@ -16038,64 +8645,36 @@ typedef union sh_xnpi_error_detail_1_u { mmr_t reserved_0 : 53; } sh_xnpi_error_detail_1_s; } sh_xnpi_error_detail_1_u_t; -#else -typedef union sh_xnpi_error_detail_1_u { - mmr_t sh_xnpi_error_detail_1_regval; - struct { - mmr_t reserved_0 : 53; - mmr_t lut_addr : 11; - } sh_xnpi_error_detail_1_s; -} sh_xnpi_error_detail_1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNIILB_ERROR_DETAIL_1" */ /* Chiplet NoMatch header [63:0] */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xniilb_error_detail_1_u { - mmr_t sh_xniilb_error_detail_1_regval; - struct { - mmr_t header : 64; - } sh_xniilb_error_detail_1_s; -} sh_xniilb_error_detail_1_u_t; -#else typedef union sh_xniilb_error_detail_1_u { mmr_t sh_xniilb_error_detail_1_regval; struct { mmr_t header : 64; } sh_xniilb_error_detail_1_s; } sh_xniilb_error_detail_1_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNIILB_ERROR_DETAIL_2" */ /* Chiplet NoMatch header [127:64] */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_xniilb_error_detail_2_u { - mmr_t sh_xniilb_error_detail_2_regval; - struct { - mmr_t header : 64; - } sh_xniilb_error_detail_2_s; -} sh_xniilb_error_detail_2_u_t; -#else typedef union sh_xniilb_error_detail_2_u { mmr_t sh_xniilb_error_detail_2_regval; struct { mmr_t header : 64; } sh_xniilb_error_detail_2_s; } sh_xniilb_error_detail_2_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNIILB_ERROR_DETAIL_3" */ /* Look Up Table Address (iilb) */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xniilb_error_detail_3_u { mmr_t sh_xniilb_error_detail_3_regval; struct { @@ -16103,22 +8682,12 @@ typedef union sh_xniilb_error_detail_3_u mmr_t reserved_0 : 53; } sh_xniilb_error_detail_3_s; } sh_xniilb_error_detail_3_u_t; -#else -typedef union sh_xniilb_error_detail_3_u { - mmr_t sh_xniilb_error_detail_3_regval; - struct { - mmr_t reserved_0 : 53; - mmr_t lut_addr : 11; - } sh_xniilb_error_detail_3_s; -} sh_xniilb_error_detail_3_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI0_ERROR_DETAIL_3" */ /* Look Up Table Address (ni0) */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ni0_error_detail_3_u { mmr_t sh_ni0_error_detail_3_regval; struct { @@ -16126,22 +8695,12 @@ typedef union sh_ni0_error_detail_3_u { mmr_t reserved_0 : 53; } sh_ni0_error_detail_3_s; } sh_ni0_error_detail_3_u_t; -#else -typedef union sh_ni0_error_detail_3_u { - mmr_t sh_ni0_error_detail_3_regval; - struct { - mmr_t reserved_0 : 53; - mmr_t lut_addr : 11; - } sh_ni0_error_detail_3_s; -} sh_ni0_error_detail_3_u_t; -#endif /* ==================================================================== */ /* Register "SH_NI1_ERROR_DETAIL_3" */ /* Look Up Table Address (ni1) */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ni1_error_detail_3_u { mmr_t sh_ni1_error_detail_3_regval; struct { @@ -16149,21 +8708,11 @@ typedef union sh_ni1_error_detail_3_u { mmr_t reserved_0 : 53; } sh_ni1_error_detail_3_s; } sh_ni1_error_detail_3_u_t; -#else -typedef union sh_ni1_error_detail_3_u { - mmr_t sh_ni1_error_detail_3_regval; - struct { - mmr_t reserved_0 : 53; - mmr_t lut_addr : 11; - } sh_ni1_error_detail_3_s; -} sh_ni1_error_detail_3_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_ERROR_SUMMARY" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_error_summary_u { mmr_t sh_xn_error_summary_regval; struct { @@ -16208,58 +8757,11 @@ typedef union sh_xn_error_summary_u { mmr_t reserved_0 : 26; } sh_xn_error_summary_s; } sh_xn_error_summary_u_t; -#else -typedef union sh_xn_error_summary_u { - mmr_t sh_xn_error_summary_regval; - struct { - mmr_t reserved_0 : 26; - mmr_t iilb_chiplet_or_lut : 1; - mmr_t iilb_fifo_underflow : 1; - mmr_t iilb_credit_underflow : 1; - mmr_t iilb_fifo_overflow : 1; - mmr_t iilb_credit_overflow : 1; - mmr_t iilb_debit_overflow : 1; - mmr_t xnpi_lut_error : 1; - mmr_t xnpi_uce_error : 1; - mmr_t xnpi_sbe_error : 1; - mmr_t xnpi_credit_underflow : 1; - mmr_t xnpi_data_buff_overflow : 1; - mmr_t xnpi_debit_overflow : 1; - mmr_t xnpi_credit_overflow : 1; - mmr_t xnmd_lut_error : 1; - mmr_t xnmd_uce_error : 1; - mmr_t xnmd_sbe_error : 1; - mmr_t xnmd_credit_underflow : 1; - mmr_t xnmd_data_buff_overflow : 1; - mmr_t xnmd_debit_overflow : 1; - mmr_t xnmd_credit_overflow : 1; - mmr_t ni1_pipe_error : 1; - mmr_t ni1_llp_error : 1; - mmr_t ni1_credit_underflow : 1; - mmr_t ni1_push_underflow : 1; - mmr_t ni1_pop_underflow : 1; - mmr_t ni1_debit_overflow : 1; - mmr_t ni1_credit_overflow : 1; - mmr_t ni1_push_overflow : 1; - mmr_t ni1_pop_overflow : 1; - mmr_t ni0_pipe_error : 1; - mmr_t ni0_llp_error : 1; - mmr_t ni0_credit_underflow : 1; - mmr_t ni0_push_underflow : 1; - mmr_t ni0_pop_underflow : 1; - mmr_t ni0_debit_overflow : 1; - mmr_t ni0_credit_overflow : 1; - mmr_t ni0_push_overflow : 1; - mmr_t ni0_pop_overflow : 1; - } sh_xn_error_summary_s; -} sh_xn_error_summary_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_ERROR_OVERFLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_error_overflow_u { mmr_t sh_xn_error_overflow_regval; struct { @@ -16304,58 +8806,11 @@ typedef union sh_xn_error_overflow_u { mmr_t reserved_0 : 26; } sh_xn_error_overflow_s; } sh_xn_error_overflow_u_t; -#else -typedef union sh_xn_error_overflow_u { - mmr_t sh_xn_error_overflow_regval; - struct { - mmr_t reserved_0 : 26; - mmr_t iilb_chiplet_or_lut : 1; - mmr_t iilb_fifo_underflow : 1; - mmr_t iilb_credit_underflow : 1; - mmr_t iilb_fifo_overflow : 1; - mmr_t iilb_credit_overflow : 1; - mmr_t iilb_debit_overflow : 1; - mmr_t xnpi_lut_error : 1; - mmr_t xnpi_uce_error : 1; - mmr_t xnpi_sbe_error : 1; - mmr_t xnpi_credit_underflow : 1; - mmr_t xnpi_data_buff_overflow : 1; - mmr_t xnpi_debit_overflow : 1; - mmr_t xnpi_credit_overflow : 1; - mmr_t xnmd_lut_error : 1; - mmr_t xnmd_uce_error : 1; - mmr_t xnmd_sbe_error : 1; - mmr_t xnmd_credit_underflow : 1; - mmr_t xnmd_data_buff_overflow : 1; - mmr_t xnmd_debit_overflow : 1; - mmr_t xnmd_credit_overflow : 1; - mmr_t ni1_pipe_error : 1; - mmr_t ni1_llp_error : 1; - mmr_t ni1_credit_underflow : 1; - mmr_t ni1_push_underflow : 1; - mmr_t ni1_pop_underflow : 1; - mmr_t ni1_debit_overflow : 1; - mmr_t ni1_credit_overflow : 1; - mmr_t ni1_push_overflow : 1; - mmr_t ni1_pop_overflow : 1; - mmr_t ni0_pipe_error : 1; - mmr_t ni0_llp_error : 1; - mmr_t ni0_credit_underflow : 1; - mmr_t ni0_push_underflow : 1; - mmr_t ni0_pop_underflow : 1; - mmr_t ni0_debit_overflow : 1; - mmr_t ni0_credit_overflow : 1; - mmr_t ni0_push_overflow : 1; - mmr_t ni0_pop_overflow : 1; - } sh_xn_error_overflow_s; -} sh_xn_error_overflow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_ERROR_MASK" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_error_mask_u { mmr_t sh_xn_error_mask_regval; struct { @@ -16400,58 +8855,11 @@ typedef union sh_xn_error_mask_u { mmr_t reserved_0 : 26; } sh_xn_error_mask_s; } sh_xn_error_mask_u_t; -#else -typedef union sh_xn_error_mask_u { - mmr_t sh_xn_error_mask_regval; - struct { - mmr_t reserved_0 : 26; - mmr_t iilb_chiplet_or_lut : 1; - mmr_t iilb_fifo_underflow : 1; - mmr_t iilb_credit_underflow : 1; - mmr_t iilb_fifo_overflow : 1; - mmr_t iilb_credit_overflow : 1; - mmr_t iilb_debit_overflow : 1; - mmr_t xnpi_lut_error : 1; - mmr_t xnpi_uce_error : 1; - mmr_t xnpi_sbe_error : 1; - mmr_t xnpi_credit_underflow : 1; - mmr_t xnpi_data_buff_overflow : 1; - mmr_t xnpi_debit_overflow : 1; - mmr_t xnpi_credit_overflow : 1; - mmr_t xnmd_lut_error : 1; - mmr_t xnmd_uce_error : 1; - mmr_t xnmd_sbe_error : 1; - mmr_t xnmd_credit_underflow : 1; - mmr_t xnmd_data_buff_overflow : 1; - mmr_t xnmd_debit_overflow : 1; - mmr_t xnmd_credit_overflow : 1; - mmr_t ni1_pipe_error : 1; - mmr_t ni1_llp_error : 1; - mmr_t ni1_credit_underflow : 1; - mmr_t ni1_push_underflow : 1; - mmr_t ni1_pop_underflow : 1; - mmr_t ni1_debit_overflow : 1; - mmr_t ni1_credit_overflow : 1; - mmr_t ni1_push_overflow : 1; - mmr_t ni1_pop_overflow : 1; - mmr_t ni0_pipe_error : 1; - mmr_t ni0_llp_error : 1; - mmr_t ni0_credit_underflow : 1; - mmr_t ni0_push_underflow : 1; - mmr_t ni0_pop_underflow : 1; - mmr_t ni0_debit_overflow : 1; - mmr_t ni0_credit_overflow : 1; - mmr_t ni0_push_overflow : 1; - mmr_t ni0_pop_overflow : 1; - } sh_xn_error_mask_s; -} sh_xn_error_mask_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_FIRST_ERROR" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_first_error_u { mmr_t sh_xn_first_error_regval; struct { @@ -16496,58 +8904,11 @@ typedef union sh_xn_first_error_u { mmr_t reserved_0 : 26; } sh_xn_first_error_s; } sh_xn_first_error_u_t; -#else -typedef union sh_xn_first_error_u { - mmr_t sh_xn_first_error_regval; - struct { - mmr_t reserved_0 : 26; - mmr_t iilb_chiplet_or_lut : 1; - mmr_t iilb_fifo_underflow : 1; - mmr_t iilb_credit_underflow : 1; - mmr_t iilb_fifo_overflow : 1; - mmr_t iilb_credit_overflow : 1; - mmr_t iilb_debit_overflow : 1; - mmr_t xnpi_lut_error : 1; - mmr_t xnpi_uce_error : 1; - mmr_t xnpi_sbe_error : 1; - mmr_t xnpi_credit_underflow : 1; - mmr_t xnpi_data_buff_overflow : 1; - mmr_t xnpi_debit_overflow : 1; - mmr_t xnpi_credit_overflow : 1; - mmr_t xnmd_lut_error : 1; - mmr_t xnmd_uce_error : 1; - mmr_t xnmd_sbe_error : 1; - mmr_t xnmd_credit_underflow : 1; - mmr_t xnmd_data_buff_overflow : 1; - mmr_t xnmd_debit_overflow : 1; - mmr_t xnmd_credit_overflow : 1; - mmr_t ni1_pipe_error : 1; - mmr_t ni1_llp_error : 1; - mmr_t ni1_credit_underflow : 1; - mmr_t ni1_push_underflow : 1; - mmr_t ni1_pop_underflow : 1; - mmr_t ni1_debit_overflow : 1; - mmr_t ni1_credit_overflow : 1; - mmr_t ni1_push_overflow : 1; - mmr_t ni1_pop_overflow : 1; - mmr_t ni0_pipe_error : 1; - mmr_t ni0_llp_error : 1; - mmr_t ni0_credit_underflow : 1; - mmr_t ni0_push_underflow : 1; - mmr_t ni0_pop_underflow : 1; - mmr_t ni0_debit_overflow : 1; - mmr_t ni0_credit_overflow : 1; - mmr_t ni0_push_overflow : 1; - mmr_t ni0_pop_overflow : 1; - } sh_xn_first_error_s; -} sh_xn_first_error_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNIILB_ERROR_SUMMARY" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xniilb_error_summary_u { mmr_t sh_xniilb_error_summary_regval; struct { @@ -16617,83 +8978,11 @@ typedef union sh_xniilb_error_summary_u mmr_t lut_read_error : 1; } sh_xniilb_error_summary_s; } sh_xniilb_error_summary_u_t; -#else -typedef union sh_xniilb_error_summary_u { - mmr_t sh_xniilb_error_summary_regval; - struct { - mmr_t lut_read_error : 1; - mmr_t chiplet_nomatch : 1; - mmr_t underflow_ni1_vc2_credit_out : 1; - mmr_t underflow_ni1_vc0_credit_out : 1; - mmr_t underflow_ni0_vc2_credit_out : 1; - mmr_t underflow_ni0_vc0_credit_out : 1; - mmr_t underflow_iilb_vc2_credit_out : 1; - mmr_t underflow_iilb_vc0_credit_out : 1; - mmr_t underflow_md_vc2_credit_out : 1; - mmr_t underflow_md_vc0_credit_out : 1; - mmr_t underflow_pi_vc2_credit_out : 1; - mmr_t underflow_pi_vc0_credit_out : 1; - mmr_t overflow_ni1_vc2_credit_out : 1; - mmr_t overflow_ni1_vc0_credit_out : 1; - mmr_t overflow_ni0_vc2_credit_out : 1; - mmr_t overflow_ni0_vc0_credit_out : 1; - mmr_t overflow_iilb_vc2_credit_out : 1; - mmr_t overflow_iilb_vc0_credit_out : 1; - mmr_t overflow_md_vc2_credit_out : 1; - mmr_t overflow_md_vc0_credit_out : 1; - mmr_t overflow_pi_vc2_credit_out : 1; - mmr_t overflow_pi_vc0_credit_out : 1; - mmr_t overflow_ni1_debit2 : 1; - mmr_t overflow_ni1_debit0 : 1; - mmr_t overflow_ni0_debit2 : 1; - mmr_t overflow_ni0_debit0 : 1; - mmr_t overflow_md_debit2 : 1; - mmr_t overflow_md_debit0 : 1; - mmr_t overflow_iilb_debit2 : 1; - mmr_t overflow_iilb_debit0 : 1; - mmr_t overflow_pi_debit2 : 1; - mmr_t overflow_pi_debit0 : 1; - mmr_t underflow_ni1_vc2_credit_in : 1; - mmr_t underflow_ni0_vc2_credit_in : 1; - mmr_t underflow_md_vc2_credit_in : 1; - mmr_t underflow_iilb_vc2_credit_in : 1; - mmr_t underflow_pi_vc2_credit_in : 1; - mmr_t underflow_ni1_vc0_credit_in : 1; - mmr_t underflow_ni0_vc0_credit_in : 1; - mmr_t underflow_md_vc0_credit_in : 1; - mmr_t underflow_iilb_vc0_credit_in : 1; - mmr_t underflow_pi_vc0_credit_in : 1; - mmr_t overflow_ni1_vc2_credit_in : 1; - mmr_t overflow_ni0_vc2_credit_in : 1; - mmr_t overflow_md_vc2_credit_in : 1; - mmr_t overflow_iilb_vc2_credit_in : 1; - mmr_t overflow_pi_vc2_credit_in : 1; - mmr_t overflow_ni1_vc0_credit_in : 1; - mmr_t overflow_ni0_vc0_credit_in : 1; - mmr_t overflow_md_vc0_credit_in : 1; - mmr_t overflow_iilb_vc0_credit_in : 1; - mmr_t overflow_pi_vc0_credit_in : 1; - mmr_t underflow_lb_vc2 : 1; - mmr_t underflow_lb_vc0 : 1; - mmr_t overflow_lb_vc2 : 1; - mmr_t overflow_lb_vc0 : 1; - mmr_t underflow_ii_vc2 : 1; - mmr_t underflow_ii_vc0 : 1; - mmr_t overflow_ii_vc2 : 1; - mmr_t overflow_ii_vc0 : 1; - mmr_t overflow_lb_debit2 : 1; - mmr_t overflow_lb_debit0 : 1; - mmr_t overflow_ii_debit2 : 1; - mmr_t overflow_ii_debit0 : 1; - } sh_xniilb_error_summary_s; -} sh_xniilb_error_summary_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNIILB_ERROR_OVERFLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xniilb_error_overflow_u { mmr_t sh_xniilb_error_overflow_regval; struct { @@ -16763,83 +9052,11 @@ typedef union sh_xniilb_error_overflow_u mmr_t lut_read_error : 1; } sh_xniilb_error_overflow_s; } sh_xniilb_error_overflow_u_t; -#else -typedef union sh_xniilb_error_overflow_u { - mmr_t sh_xniilb_error_overflow_regval; - struct { - mmr_t lut_read_error : 1; - mmr_t chiplet_nomatch : 1; - mmr_t underflow_ni1_vc2_credit_out : 1; - mmr_t underflow_ni1_vc0_credit_out : 1; - mmr_t underflow_ni0_vc2_credit_out : 1; - mmr_t underflow_ni0_vc0_credit_out : 1; - mmr_t underflow_iilb_vc2_credit_out : 1; - mmr_t underflow_iilb_vc0_credit_out : 1; - mmr_t underflow_md_vc2_credit_out : 1; - mmr_t underflow_md_vc0_credit_out : 1; - mmr_t underflow_pi_vc2_credit_out : 1; - mmr_t underflow_pi_vc0_credit_out : 1; - mmr_t overflow_ni1_vc2_credit_out : 1; - mmr_t overflow_ni1_vc0_credit_out : 1; - mmr_t overflow_ni0_vc2_credit_out : 1; - mmr_t overflow_ni0_vc0_credit_out : 1; - mmr_t overflow_iilb_vc2_credit_out : 1; - mmr_t overflow_iilb_vc0_credit_out : 1; - mmr_t overflow_md_vc2_credit_out : 1; - mmr_t overflow_md_vc0_credit_out : 1; - mmr_t overflow_pi_vc2_credit_out : 1; - mmr_t overflow_pi_vc0_credit_out : 1; - mmr_t overflow_ni1_debit2 : 1; - mmr_t overflow_ni1_debit0 : 1; - mmr_t overflow_ni0_debit2 : 1; - mmr_t overflow_ni0_debit0 : 1; - mmr_t overflow_md_debit2 : 1; - mmr_t overflow_md_debit0 : 1; - mmr_t overflow_iilb_debit2 : 1; - mmr_t overflow_iilb_debit0 : 1; - mmr_t overflow_pi_debit2 : 1; - mmr_t overflow_pi_debit0 : 1; - mmr_t underflow_ni1_vc2_credit_in : 1; - mmr_t underflow_ni0_vc2_credit_in : 1; - mmr_t underflow_md_vc2_credit_in : 1; - mmr_t underflow_iilb_vc2_credit_in : 1; - mmr_t underflow_pi_vc2_credit_in : 1; - mmr_t underflow_ni1_vc0_credit_in : 1; - mmr_t underflow_ni0_vc0_credit_in : 1; - mmr_t underflow_md_vc0_credit_in : 1; - mmr_t underflow_iilb_vc0_credit_in : 1; - mmr_t underflow_pi_vc0_credit_in : 1; - mmr_t overflow_ni1_vc2_credit_in : 1; - mmr_t overflow_ni0_vc2_credit_in : 1; - mmr_t overflow_md_vc2_credit_in : 1; - mmr_t overflow_iilb_vc2_credit_in : 1; - mmr_t overflow_pi_vc2_credit_in : 1; - mmr_t overflow_ni1_vc0_credit_in : 1; - mmr_t overflow_ni0_vc0_credit_in : 1; - mmr_t overflow_md_vc0_credit_in : 1; - mmr_t overflow_iilb_vc0_credit_in : 1; - mmr_t overflow_pi_vc0_credit_in : 1; - mmr_t underflow_lb_vc2 : 1; - mmr_t underflow_lb_vc0 : 1; - mmr_t overflow_lb_vc2 : 1; - mmr_t overflow_lb_vc0 : 1; - mmr_t underflow_ii_vc2 : 1; - mmr_t underflow_ii_vc0 : 1; - mmr_t overflow_ii_vc2 : 1; - mmr_t overflow_ii_vc0 : 1; - mmr_t overflow_lb_debit2 : 1; - mmr_t overflow_lb_debit0 : 1; - mmr_t overflow_ii_debit2 : 1; - mmr_t overflow_ii_debit0 : 1; - } sh_xniilb_error_overflow_s; -} sh_xniilb_error_overflow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNIILB_ERROR_MASK" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xniilb_error_mask_u { mmr_t sh_xniilb_error_mask_regval; struct { @@ -16909,83 +9126,11 @@ typedef union sh_xniilb_error_mask_u { mmr_t lut_read_error : 1; } sh_xniilb_error_mask_s; } sh_xniilb_error_mask_u_t; -#else -typedef union sh_xniilb_error_mask_u { - mmr_t sh_xniilb_error_mask_regval; - struct { - mmr_t lut_read_error : 1; - mmr_t chiplet_nomatch : 1; - mmr_t underflow_ni1_vc2_credit_out : 1; - mmr_t underflow_ni1_vc0_credit_out : 1; - mmr_t underflow_ni0_vc2_credit_out : 1; - mmr_t underflow_ni0_vc0_credit_out : 1; - mmr_t underflow_iilb_vc2_credit_out : 1; - mmr_t underflow_iilb_vc0_credit_out : 1; - mmr_t underflow_md_vc2_credit_out : 1; - mmr_t underflow_md_vc0_credit_out : 1; - mmr_t underflow_pi_vc2_credit_out : 1; - mmr_t underflow_pi_vc0_credit_out : 1; - mmr_t overflow_ni1_vc2_credit_out : 1; - mmr_t overflow_ni1_vc0_credit_out : 1; - mmr_t overflow_ni0_vc2_credit_out : 1; - mmr_t overflow_ni0_vc0_credit_out : 1; - mmr_t overflow_iilb_vc2_credit_out : 1; - mmr_t overflow_iilb_vc0_credit_out : 1; - mmr_t overflow_md_vc2_credit_out : 1; - mmr_t overflow_md_vc0_credit_out : 1; - mmr_t overflow_pi_vc2_credit_out : 1; - mmr_t overflow_pi_vc0_credit_out : 1; - mmr_t overflow_ni1_debit2 : 1; - mmr_t overflow_ni1_debit0 : 1; - mmr_t overflow_ni0_debit2 : 1; - mmr_t overflow_ni0_debit0 : 1; - mmr_t overflow_md_debit2 : 1; - mmr_t overflow_md_debit0 : 1; - mmr_t overflow_iilb_debit2 : 1; - mmr_t overflow_iilb_debit0 : 1; - mmr_t overflow_pi_debit2 : 1; - mmr_t overflow_pi_debit0 : 1; - mmr_t underflow_ni1_vc2_credit_in : 1; - mmr_t underflow_ni0_vc2_credit_in : 1; - mmr_t underflow_md_vc2_credit_in : 1; - mmr_t underflow_iilb_vc2_credit_in : 1; - mmr_t underflow_pi_vc2_credit_in : 1; - mmr_t underflow_ni1_vc0_credit_in : 1; - mmr_t underflow_ni0_vc0_credit_in : 1; - mmr_t underflow_md_vc0_credit_in : 1; - mmr_t underflow_iilb_vc0_credit_in : 1; - mmr_t underflow_pi_vc0_credit_in : 1; - mmr_t overflow_ni1_vc2_credit_in : 1; - mmr_t overflow_ni0_vc2_credit_in : 1; - mmr_t overflow_md_vc2_credit_in : 1; - mmr_t overflow_iilb_vc2_credit_in : 1; - mmr_t overflow_pi_vc2_credit_in : 1; - mmr_t overflow_ni1_vc0_credit_in : 1; - mmr_t overflow_ni0_vc0_credit_in : 1; - mmr_t overflow_md_vc0_credit_in : 1; - mmr_t overflow_iilb_vc0_credit_in : 1; - mmr_t overflow_pi_vc0_credit_in : 1; - mmr_t underflow_lb_vc2 : 1; - mmr_t underflow_lb_vc0 : 1; - mmr_t overflow_lb_vc2 : 1; - mmr_t overflow_lb_vc0 : 1; - mmr_t underflow_ii_vc2 : 1; - mmr_t underflow_ii_vc0 : 1; - mmr_t overflow_ii_vc2 : 1; - mmr_t overflow_ii_vc0 : 1; - mmr_t overflow_lb_debit2 : 1; - mmr_t overflow_lb_debit0 : 1; - mmr_t overflow_ii_debit2 : 1; - mmr_t overflow_ii_debit0 : 1; - } sh_xniilb_error_mask_s; -} sh_xniilb_error_mask_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNIILB_FIRST_ERROR" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xniilb_first_error_u { mmr_t sh_xniilb_first_error_regval; struct { @@ -17055,85 +9200,13 @@ typedef union sh_xniilb_first_error_u { mmr_t lut_read_error : 1; } sh_xniilb_first_error_s; } sh_xniilb_first_error_u_t; -#else -typedef union sh_xniilb_first_error_u { - mmr_t sh_xniilb_first_error_regval; - struct { - mmr_t lut_read_error : 1; - mmr_t chiplet_nomatch : 1; - mmr_t underflow_ni1_vc2_credit_out : 1; - mmr_t underflow_ni1_vc0_credit_out : 1; - mmr_t underflow_ni0_vc2_credit_out : 1; - mmr_t underflow_ni0_vc0_credit_out : 1; - mmr_t underflow_iilb_vc2_credit_out : 1; - mmr_t underflow_iilb_vc0_credit_out : 1; - mmr_t underflow_md_vc2_credit_out : 1; - mmr_t underflow_md_vc0_credit_out : 1; - mmr_t underflow_pi_vc2_credit_out : 1; - mmr_t underflow_pi_vc0_credit_out : 1; - mmr_t overflow_ni1_vc2_credit_out : 1; - mmr_t overflow_ni1_vc0_credit_out : 1; - mmr_t overflow_ni0_vc2_credit_out : 1; - mmr_t overflow_ni0_vc0_credit_out : 1; - mmr_t overflow_iilb_vc2_credit_out : 1; - mmr_t overflow_iilb_vc0_credit_out : 1; - mmr_t overflow_md_vc2_credit_out : 1; - mmr_t overflow_md_vc0_credit_out : 1; - mmr_t overflow_pi_vc2_credit_out : 1; - mmr_t overflow_pi_vc0_credit_out : 1; - mmr_t overflow_ni1_debit2 : 1; - mmr_t overflow_ni1_debit0 : 1; - mmr_t overflow_ni0_debit2 : 1; - mmr_t overflow_ni0_debit0 : 1; - mmr_t overflow_md_debit2 : 1; - mmr_t overflow_md_debit0 : 1; - mmr_t overflow_iilb_debit2 : 1; - mmr_t overflow_iilb_debit0 : 1; - mmr_t overflow_pi_debit2 : 1; - mmr_t overflow_pi_debit0 : 1; - mmr_t underflow_ni1_vc2_credit_in : 1; - mmr_t underflow_ni0_vc2_credit_in : 1; - mmr_t underflow_md_vc2_credit_in : 1; - mmr_t underflow_iilb_vc2_credit_in : 1; - mmr_t underflow_pi_vc2_credit_in : 1; - mmr_t underflow_ni1_vc0_credit_in : 1; - mmr_t underflow_ni0_vc0_credit_in : 1; - mmr_t underflow_md_vc0_credit_in : 1; - mmr_t underflow_iilb_vc0_credit_in : 1; - mmr_t underflow_pi_vc0_credit_in : 1; - mmr_t overflow_ni1_vc2_credit_in : 1; - mmr_t overflow_ni0_vc2_credit_in : 1; - mmr_t overflow_md_vc2_credit_in : 1; - mmr_t overflow_iilb_vc2_credit_in : 1; - mmr_t overflow_pi_vc2_credit_in : 1; - mmr_t overflow_ni1_vc0_credit_in : 1; - mmr_t overflow_ni0_vc0_credit_in : 1; - mmr_t overflow_md_vc0_credit_in : 1; - mmr_t overflow_iilb_vc0_credit_in : 1; - mmr_t overflow_pi_vc0_credit_in : 1; - mmr_t underflow_lb_vc2 : 1; - mmr_t underflow_lb_vc0 : 1; - mmr_t overflow_lb_vc2 : 1; - mmr_t overflow_lb_vc0 : 1; - mmr_t underflow_ii_vc2 : 1; - mmr_t underflow_ii_vc0 : 1; - mmr_t overflow_ii_vc2 : 1; - mmr_t overflow_ii_vc0 : 1; - mmr_t overflow_lb_debit2 : 1; - mmr_t overflow_lb_debit0 : 1; - mmr_t overflow_ii_debit2 : 1; - mmr_t overflow_ii_debit0 : 1; - } sh_xniilb_first_error_s; -} sh_xniilb_first_error_u_t; -#endif - -/* ==================================================================== */ -/* Register "SH_XNPI_ERROR_SUMMARY" */ -/* ==================================================================== */ - -#ifdef LITTLE_ENDIAN -typedef union sh_xnpi_error_summary_u { - mmr_t sh_xnpi_error_summary_regval; + +/* ==================================================================== */ +/* Register "SH_XNPI_ERROR_SUMMARY" */ +/* ==================================================================== */ + +typedef union sh_xnpi_error_summary_u { + mmr_t sh_xnpi_error_summary_regval; struct { mmr_t underflow_ni0_vc0 : 1; mmr_t overflow_ni0_vc0 : 1; @@ -17188,70 +9261,11 @@ typedef union sh_xnpi_error_summary_u { mmr_t reserved_0 : 14; } sh_xnpi_error_summary_s; } sh_xnpi_error_summary_u_t; -#else -typedef union sh_xnpi_error_summary_u { - mmr_t sh_xnpi_error_summary_regval; - struct { - mmr_t reserved_0 : 14; - mmr_t overflow_header_cancel_fifo : 1; - mmr_t overflow_iilb_vc2_credit : 1; - mmr_t underflow_iilb_vc2_credit : 1; - mmr_t overflow_iilb_vc0_credit : 1; - mmr_t underflow_iilb_vc0_credit : 1; - mmr_t overflow_ni1_vc2_credit : 1; - mmr_t underflow_ni1_vc2_credit : 1; - mmr_t overflow_ni1_vc0_credit : 1; - mmr_t underflow_ni1_vc0_credit : 1; - mmr_t overflow_ni0_vc2_credit : 1; - mmr_t underflow_ni0_vc2_credit : 1; - mmr_t overflow_ni0_vc0_credit : 1; - mmr_t underflow_ni0_vc0_credit : 1; - mmr_t overflow_iilb_debit2 : 1; - mmr_t overflow_iilb_debit0 : 1; - mmr_t overflow_ni1_debit2 : 1; - mmr_t overflow_ni1_debit0 : 1; - mmr_t overflow_ni0_debit2 : 1; - mmr_t overflow_ni0_debit0 : 1; - mmr_t overflow_sic_cntr2 : 1; - mmr_t underflow_sic_cntr2 : 1; - mmr_t overflow_sic_cntr0 : 1; - mmr_t underflow_sic_cntr0 : 1; - mmr_t uncor_error3 : 1; - mmr_t uncor_error2 : 1; - mmr_t uncor_error1 : 1; - mmr_t uncor_error0 : 1; - mmr_t single_bit_error3 : 1; - mmr_t single_bit_error2 : 1; - mmr_t single_bit_error1 : 1; - mmr_t single_bit_error0 : 1; - mmr_t lut_read_error : 1; - mmr_t overflow_databuff_vc2 : 1; - mmr_t overflow_databuff_vc0 : 1; - mmr_t overflow_vc2_credit : 1; - mmr_t underflow_vc2_credit : 1; - mmr_t overflow_vc0_credit : 1; - mmr_t underflow_vc0_credit : 1; - mmr_t overflow_iilb_vc2 : 1; - mmr_t underflow_iilb_vc2 : 1; - mmr_t overflow_iilb_vc0 : 1; - mmr_t underflow_iilb_vc0 : 1; - mmr_t overflow_ni1_vc2 : 1; - mmr_t underflow_ni1_vc2 : 1; - mmr_t overflow_ni1_vc0 : 1; - mmr_t underflow_ni1_vc0 : 1; - mmr_t overflow_ni0_vc2 : 1; - mmr_t underflow_ni0_vc2 : 1; - mmr_t overflow_ni0_vc0 : 1; - mmr_t underflow_ni0_vc0 : 1; - } sh_xnpi_error_summary_s; -} sh_xnpi_error_summary_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNPI_ERROR_OVERFLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnpi_error_overflow_u { mmr_t sh_xnpi_error_overflow_regval; struct { @@ -17308,70 +9322,11 @@ typedef union sh_xnpi_error_overflow_u { mmr_t reserved_0 : 14; } sh_xnpi_error_overflow_s; } sh_xnpi_error_overflow_u_t; -#else -typedef union sh_xnpi_error_overflow_u { - mmr_t sh_xnpi_error_overflow_regval; - struct { - mmr_t reserved_0 : 14; - mmr_t overflow_header_cancel_fifo : 1; - mmr_t overflow_iilb_vc2_credit : 1; - mmr_t underflow_iilb_vc2_credit : 1; - mmr_t overflow_iilb_vc0_credit : 1; - mmr_t underflow_iilb_vc0_credit : 1; - mmr_t overflow_ni1_vc2_credit : 1; - mmr_t underflow_ni1_vc2_credit : 1; - mmr_t overflow_ni1_vc0_credit : 1; - mmr_t underflow_ni1_vc0_credit : 1; - mmr_t overflow_ni0_vc2_credit : 1; - mmr_t underflow_ni0_vc2_credit : 1; - mmr_t overflow_ni0_vc0_credit : 1; - mmr_t underflow_ni0_vc0_credit : 1; - mmr_t overflow_iilb_debit2 : 1; - mmr_t overflow_iilb_debit0 : 1; - mmr_t overflow_ni1_debit2 : 1; - mmr_t overflow_ni1_debit0 : 1; - mmr_t overflow_ni0_debit2 : 1; - mmr_t overflow_ni0_debit0 : 1; - mmr_t overflow_sic_cntr2 : 1; - mmr_t underflow_sic_cntr2 : 1; - mmr_t overflow_sic_cntr0 : 1; - mmr_t underflow_sic_cntr0 : 1; - mmr_t uncor_error3 : 1; - mmr_t uncor_error2 : 1; - mmr_t uncor_error1 : 1; - mmr_t uncor_error0 : 1; - mmr_t single_bit_error3 : 1; - mmr_t single_bit_error2 : 1; - mmr_t single_bit_error1 : 1; - mmr_t single_bit_error0 : 1; - mmr_t lut_read_error : 1; - mmr_t overflow_databuff_vc2 : 1; - mmr_t overflow_databuff_vc0 : 1; - mmr_t overflow_vc2_credit : 1; - mmr_t underflow_vc2_credit : 1; - mmr_t overflow_vc0_credit : 1; - mmr_t underflow_vc0_credit : 1; - mmr_t overflow_iilb_vc2 : 1; - mmr_t underflow_iilb_vc2 : 1; - mmr_t overflow_iilb_vc0 : 1; - mmr_t underflow_iilb_vc0 : 1; - mmr_t overflow_ni1_vc2 : 1; - mmr_t underflow_ni1_vc2 : 1; - mmr_t overflow_ni1_vc0 : 1; - mmr_t underflow_ni1_vc0 : 1; - mmr_t overflow_ni0_vc2 : 1; - mmr_t underflow_ni0_vc2 : 1; - mmr_t overflow_ni0_vc0 : 1; - mmr_t underflow_ni0_vc0 : 1; - } sh_xnpi_error_overflow_s; -} sh_xnpi_error_overflow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNPI_ERROR_MASK" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnpi_error_mask_u { mmr_t sh_xnpi_error_mask_regval; struct { @@ -17428,70 +9383,11 @@ typedef union sh_xnpi_error_mask_u { mmr_t reserved_0 : 14; } sh_xnpi_error_mask_s; } sh_xnpi_error_mask_u_t; -#else -typedef union sh_xnpi_error_mask_u { - mmr_t sh_xnpi_error_mask_regval; - struct { - mmr_t reserved_0 : 14; - mmr_t overflow_header_cancel_fifo : 1; - mmr_t overflow_iilb_vc2_credit : 1; - mmr_t underflow_iilb_vc2_credit : 1; - mmr_t overflow_iilb_vc0_credit : 1; - mmr_t underflow_iilb_vc0_credit : 1; - mmr_t overflow_ni1_vc2_credit : 1; - mmr_t underflow_ni1_vc2_credit : 1; - mmr_t overflow_ni1_vc0_credit : 1; - mmr_t underflow_ni1_vc0_credit : 1; - mmr_t overflow_ni0_vc2_credit : 1; - mmr_t underflow_ni0_vc2_credit : 1; - mmr_t overflow_ni0_vc0_credit : 1; - mmr_t underflow_ni0_vc0_credit : 1; - mmr_t overflow_iilb_debit2 : 1; - mmr_t overflow_iilb_debit0 : 1; - mmr_t overflow_ni1_debit2 : 1; - mmr_t overflow_ni1_debit0 : 1; - mmr_t overflow_ni0_debit2 : 1; - mmr_t overflow_ni0_debit0 : 1; - mmr_t overflow_sic_cntr2 : 1; - mmr_t underflow_sic_cntr2 : 1; - mmr_t overflow_sic_cntr0 : 1; - mmr_t underflow_sic_cntr0 : 1; - mmr_t uncor_error3 : 1; - mmr_t uncor_error2 : 1; - mmr_t uncor_error1 : 1; - mmr_t uncor_error0 : 1; - mmr_t single_bit_error3 : 1; - mmr_t single_bit_error2 : 1; - mmr_t single_bit_error1 : 1; - mmr_t single_bit_error0 : 1; - mmr_t lut_read_error : 1; - mmr_t overflow_databuff_vc2 : 1; - mmr_t overflow_databuff_vc0 : 1; - mmr_t overflow_vc2_credit : 1; - mmr_t underflow_vc2_credit : 1; - mmr_t overflow_vc0_credit : 1; - mmr_t underflow_vc0_credit : 1; - mmr_t overflow_iilb_vc2 : 1; - mmr_t underflow_iilb_vc2 : 1; - mmr_t overflow_iilb_vc0 : 1; - mmr_t underflow_iilb_vc0 : 1; - mmr_t overflow_ni1_vc2 : 1; - mmr_t underflow_ni1_vc2 : 1; - mmr_t overflow_ni1_vc0 : 1; - mmr_t underflow_ni1_vc0 : 1; - mmr_t overflow_ni0_vc2 : 1; - mmr_t underflow_ni0_vc2 : 1; - mmr_t overflow_ni0_vc0 : 1; - mmr_t underflow_ni0_vc0 : 1; - } sh_xnpi_error_mask_s; -} sh_xnpi_error_mask_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNPI_FIRST_ERROR" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnpi_first_error_u { mmr_t sh_xnpi_first_error_regval; struct { @@ -17548,72 +9444,13 @@ typedef union sh_xnpi_first_error_u { mmr_t reserved_0 : 14; } sh_xnpi_first_error_s; } sh_xnpi_first_error_u_t; -#else -typedef union sh_xnpi_first_error_u { - mmr_t sh_xnpi_first_error_regval; - struct { - mmr_t reserved_0 : 14; - mmr_t overflow_header_cancel_fifo : 1; - mmr_t overflow_iilb_vc2_credit : 1; - mmr_t underflow_iilb_vc2_credit : 1; - mmr_t overflow_iilb_vc0_credit : 1; - mmr_t underflow_iilb_vc0_credit : 1; - mmr_t overflow_ni1_vc2_credit : 1; - mmr_t underflow_ni1_vc2_credit : 1; - mmr_t overflow_ni1_vc0_credit : 1; - mmr_t underflow_ni1_vc0_credit : 1; - mmr_t overflow_ni0_vc2_credit : 1; - mmr_t underflow_ni0_vc2_credit : 1; - mmr_t overflow_ni0_vc0_credit : 1; - mmr_t underflow_ni0_vc0_credit : 1; - mmr_t overflow_iilb_debit2 : 1; - mmr_t overflow_iilb_debit0 : 1; - mmr_t overflow_ni1_debit2 : 1; - mmr_t overflow_ni1_debit0 : 1; - mmr_t overflow_ni0_debit2 : 1; - mmr_t overflow_ni0_debit0 : 1; - mmr_t overflow_sic_cntr2 : 1; - mmr_t underflow_sic_cntr2 : 1; - mmr_t overflow_sic_cntr0 : 1; - mmr_t underflow_sic_cntr0 : 1; - mmr_t uncor_error3 : 1; - mmr_t uncor_error2 : 1; - mmr_t uncor_error1 : 1; - mmr_t uncor_error0 : 1; - mmr_t single_bit_error3 : 1; - mmr_t single_bit_error2 : 1; - mmr_t single_bit_error1 : 1; - mmr_t single_bit_error0 : 1; - mmr_t lut_read_error : 1; - mmr_t overflow_databuff_vc2 : 1; - mmr_t overflow_databuff_vc0 : 1; - mmr_t overflow_vc2_credit : 1; - mmr_t underflow_vc2_credit : 1; - mmr_t overflow_vc0_credit : 1; - mmr_t underflow_vc0_credit : 1; - mmr_t overflow_iilb_vc2 : 1; - mmr_t underflow_iilb_vc2 : 1; - mmr_t overflow_iilb_vc0 : 1; - mmr_t underflow_iilb_vc0 : 1; - mmr_t overflow_ni1_vc2 : 1; - mmr_t underflow_ni1_vc2 : 1; - mmr_t overflow_ni1_vc0 : 1; - mmr_t underflow_ni1_vc0 : 1; - mmr_t overflow_ni0_vc2 : 1; - mmr_t underflow_ni0_vc2 : 1; - mmr_t overflow_ni0_vc0 : 1; - mmr_t underflow_ni0_vc0 : 1; - } sh_xnpi_first_error_s; -} sh_xnpi_first_error_u_t; -#endif - -/* ==================================================================== */ -/* Register "SH_XNMD_ERROR_SUMMARY" */ -/* ==================================================================== */ - -#ifdef LITTLE_ENDIAN -typedef union sh_xnmd_error_summary_u { - mmr_t sh_xnmd_error_summary_regval; + +/* ==================================================================== */ +/* Register "SH_XNMD_ERROR_SUMMARY" */ +/* ==================================================================== */ + +typedef union sh_xnmd_error_summary_u { + mmr_t sh_xnmd_error_summary_regval; struct { mmr_t underflow_ni0_vc0 : 1; mmr_t overflow_ni0_vc0 : 1; @@ -17668,70 +9505,11 @@ typedef union sh_xnmd_error_summary_u { mmr_t reserved_0 : 14; } sh_xnmd_error_summary_s; } sh_xnmd_error_summary_u_t; -#else -typedef union sh_xnmd_error_summary_u { - mmr_t sh_xnmd_error_summary_regval; - struct { - mmr_t reserved_0 : 14; - mmr_t overflow_header_cancel_fifo : 1; - mmr_t overflow_iilb_vc2_credit : 1; - mmr_t underflow_iilb_vc2_credit : 1; - mmr_t overflow_iilb_vc0_credit : 1; - mmr_t underflow_iilb_vc0_credit : 1; - mmr_t overflow_ni1_vc2_credit : 1; - mmr_t underflow_ni1_vc2_credit : 1; - mmr_t overflow_ni1_vc0_credit : 1; - mmr_t underflow_ni1_vc0_credit : 1; - mmr_t overflow_ni0_vc2_credit : 1; - mmr_t underflow_ni0_vc2_credit : 1; - mmr_t overflow_ni0_vc0_credit : 1; - mmr_t underflow_ni0_vc0_credit : 1; - mmr_t overflow_iilb_debit2 : 1; - mmr_t overflow_iilb_debit0 : 1; - mmr_t overflow_ni1_debit2 : 1; - mmr_t overflow_ni1_debit0 : 1; - mmr_t overflow_ni0_debit2 : 1; - mmr_t overflow_ni0_debit0 : 1; - mmr_t overflow_sic_cntr2 : 1; - mmr_t underflow_sic_cntr2 : 1; - mmr_t overflow_sic_cntr0 : 1; - mmr_t underflow_sic_cntr0 : 1; - mmr_t uncor_error3 : 1; - mmr_t uncor_error2 : 1; - mmr_t uncor_error1 : 1; - mmr_t uncor_error0 : 1; - mmr_t single_bit_error3 : 1; - mmr_t single_bit_error2 : 1; - mmr_t single_bit_error1 : 1; - mmr_t single_bit_error0 : 1; - mmr_t lut_read_error : 1; - mmr_t overflow_databuff_vc2 : 1; - mmr_t overflow_databuff_vc0 : 1; - mmr_t overflow_vc2_credit : 1; - mmr_t underflow_vc2_credit : 1; - mmr_t overflow_vc0_credit : 1; - mmr_t underflow_vc0_credit : 1; - mmr_t overflow_iilb_vc2 : 1; - mmr_t underflow_iilb_vc2 : 1; - mmr_t overflow_iilb_vc0 : 1; - mmr_t underflow_iilb_vc0 : 1; - mmr_t overflow_ni1_vc2 : 1; - mmr_t underflow_ni1_vc2 : 1; - mmr_t overflow_ni1_vc0 : 1; - mmr_t underflow_ni1_vc0 : 1; - mmr_t overflow_ni0_vc2 : 1; - mmr_t underflow_ni0_vc2 : 1; - mmr_t overflow_ni0_vc0 : 1; - mmr_t underflow_ni0_vc0 : 1; - } sh_xnmd_error_summary_s; -} sh_xnmd_error_summary_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNMD_ERROR_OVERFLOW" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnmd_error_overflow_u { mmr_t sh_xnmd_error_overflow_regval; struct { @@ -17788,70 +9566,11 @@ typedef union sh_xnmd_error_overflow_u { mmr_t reserved_0 : 14; } sh_xnmd_error_overflow_s; } sh_xnmd_error_overflow_u_t; -#else -typedef union sh_xnmd_error_overflow_u { - mmr_t sh_xnmd_error_overflow_regval; - struct { - mmr_t reserved_0 : 14; - mmr_t overflow_header_cancel_fifo : 1; - mmr_t overflow_iilb_vc2_credit : 1; - mmr_t underflow_iilb_vc2_credit : 1; - mmr_t overflow_iilb_vc0_credit : 1; - mmr_t underflow_iilb_vc0_credit : 1; - mmr_t overflow_ni1_vc2_credit : 1; - mmr_t underflow_ni1_vc2_credit : 1; - mmr_t overflow_ni1_vc0_credit : 1; - mmr_t underflow_ni1_vc0_credit : 1; - mmr_t overflow_ni0_vc2_credit : 1; - mmr_t underflow_ni0_vc2_credit : 1; - mmr_t overflow_ni0_vc0_credit : 1; - mmr_t underflow_ni0_vc0_credit : 1; - mmr_t overflow_iilb_debit2 : 1; - mmr_t overflow_iilb_debit0 : 1; - mmr_t overflow_ni1_debit2 : 1; - mmr_t overflow_ni1_debit0 : 1; - mmr_t overflow_ni0_debit2 : 1; - mmr_t overflow_ni0_debit0 : 1; - mmr_t overflow_sic_cntr2 : 1; - mmr_t underflow_sic_cntr2 : 1; - mmr_t overflow_sic_cntr0 : 1; - mmr_t underflow_sic_cntr0 : 1; - mmr_t uncor_error3 : 1; - mmr_t uncor_error2 : 1; - mmr_t uncor_error1 : 1; - mmr_t uncor_error0 : 1; - mmr_t single_bit_error3 : 1; - mmr_t single_bit_error2 : 1; - mmr_t single_bit_error1 : 1; - mmr_t single_bit_error0 : 1; - mmr_t lut_read_error : 1; - mmr_t overflow_databuff_vc2 : 1; - mmr_t overflow_databuff_vc0 : 1; - mmr_t overflow_vc2_credit : 1; - mmr_t underflow_vc2_credit : 1; - mmr_t overflow_vc0_credit : 1; - mmr_t underflow_vc0_credit : 1; - mmr_t overflow_iilb_vc2 : 1; - mmr_t underflow_iilb_vc2 : 1; - mmr_t overflow_iilb_vc0 : 1; - mmr_t underflow_iilb_vc0 : 1; - mmr_t overflow_ni1_vc2 : 1; - mmr_t underflow_ni1_vc2 : 1; - mmr_t overflow_ni1_vc0 : 1; - mmr_t underflow_ni1_vc0 : 1; - mmr_t overflow_ni0_vc2 : 1; - mmr_t underflow_ni0_vc2 : 1; - mmr_t overflow_ni0_vc0 : 1; - mmr_t underflow_ni0_vc0 : 1; - } sh_xnmd_error_overflow_s; -} sh_xnmd_error_overflow_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNMD_ERROR_MASK" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnmd_error_mask_u { mmr_t sh_xnmd_error_mask_regval; struct { @@ -17908,70 +9627,11 @@ typedef union sh_xnmd_error_mask_u { mmr_t reserved_0 : 14; } sh_xnmd_error_mask_s; } sh_xnmd_error_mask_u_t; -#else -typedef union sh_xnmd_error_mask_u { - mmr_t sh_xnmd_error_mask_regval; - struct { - mmr_t reserved_0 : 14; - mmr_t overflow_header_cancel_fifo : 1; - mmr_t overflow_iilb_vc2_credit : 1; - mmr_t underflow_iilb_vc2_credit : 1; - mmr_t overflow_iilb_vc0_credit : 1; - mmr_t underflow_iilb_vc0_credit : 1; - mmr_t overflow_ni1_vc2_credit : 1; - mmr_t underflow_ni1_vc2_credit : 1; - mmr_t overflow_ni1_vc0_credit : 1; - mmr_t underflow_ni1_vc0_credit : 1; - mmr_t overflow_ni0_vc2_credit : 1; - mmr_t underflow_ni0_vc2_credit : 1; - mmr_t overflow_ni0_vc0_credit : 1; - mmr_t underflow_ni0_vc0_credit : 1; - mmr_t overflow_iilb_debit2 : 1; - mmr_t overflow_iilb_debit0 : 1; - mmr_t overflow_ni1_debit2 : 1; - mmr_t overflow_ni1_debit0 : 1; - mmr_t overflow_ni0_debit2 : 1; - mmr_t overflow_ni0_debit0 : 1; - mmr_t overflow_sic_cntr2 : 1; - mmr_t underflow_sic_cntr2 : 1; - mmr_t overflow_sic_cntr0 : 1; - mmr_t underflow_sic_cntr0 : 1; - mmr_t uncor_error3 : 1; - mmr_t uncor_error2 : 1; - mmr_t uncor_error1 : 1; - mmr_t uncor_error0 : 1; - mmr_t single_bit_error3 : 1; - mmr_t single_bit_error2 : 1; - mmr_t single_bit_error1 : 1; - mmr_t single_bit_error0 : 1; - mmr_t lut_read_error : 1; - mmr_t overflow_databuff_vc2 : 1; - mmr_t overflow_databuff_vc0 : 1; - mmr_t overflow_vc2_credit : 1; - mmr_t underflow_vc2_credit : 1; - mmr_t overflow_vc0_credit : 1; - mmr_t underflow_vc0_credit : 1; - mmr_t overflow_iilb_vc2 : 1; - mmr_t underflow_iilb_vc2 : 1; - mmr_t overflow_iilb_vc0 : 1; - mmr_t underflow_iilb_vc0 : 1; - mmr_t overflow_ni1_vc2 : 1; - mmr_t underflow_ni1_vc2 : 1; - mmr_t overflow_ni1_vc0 : 1; - mmr_t underflow_ni1_vc0 : 1; - mmr_t overflow_ni0_vc2 : 1; - mmr_t underflow_ni0_vc2 : 1; - mmr_t overflow_ni0_vc0 : 1; - mmr_t underflow_ni0_vc0 : 1; - } sh_xnmd_error_mask_s; -} sh_xnmd_error_mask_u_t; -#endif /* ==================================================================== */ /* Register "SH_XNMD_FIRST_ERROR" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xnmd_first_error_u { mmr_t sh_xnmd_first_error_regval; struct { @@ -17981,202 +9641,107 @@ typedef union sh_xnmd_first_error_u { mmr_t overflow_ni0_vc2 : 1; mmr_t underflow_ni1_vc0 : 1; mmr_t overflow_ni1_vc0 : 1; - mmr_t underflow_ni1_vc2 : 1; - mmr_t overflow_ni1_vc2 : 1; - mmr_t underflow_iilb_vc0 : 1; - mmr_t overflow_iilb_vc0 : 1; - mmr_t underflow_iilb_vc2 : 1; - mmr_t overflow_iilb_vc2 : 1; - mmr_t underflow_vc0_credit : 1; - mmr_t overflow_vc0_credit : 1; - mmr_t underflow_vc2_credit : 1; - mmr_t overflow_vc2_credit : 1; - mmr_t overflow_databuff_vc0 : 1; - mmr_t overflow_databuff_vc2 : 1; - mmr_t lut_read_error : 1; - mmr_t single_bit_error0 : 1; - mmr_t single_bit_error1 : 1; - mmr_t single_bit_error2 : 1; - mmr_t single_bit_error3 : 1; - mmr_t uncor_error0 : 1; - mmr_t uncor_error1 : 1; - mmr_t uncor_error2 : 1; - mmr_t uncor_error3 : 1; - mmr_t underflow_sic_cntr0 : 1; - mmr_t overflow_sic_cntr0 : 1; - mmr_t underflow_sic_cntr2 : 1; - mmr_t overflow_sic_cntr2 : 1; - mmr_t overflow_ni0_debit0 : 1; - mmr_t overflow_ni0_debit2 : 1; - mmr_t overflow_ni1_debit0 : 1; - mmr_t overflow_ni1_debit2 : 1; - mmr_t overflow_iilb_debit0 : 1; - mmr_t overflow_iilb_debit2 : 1; - mmr_t underflow_ni0_vc0_credit : 1; - mmr_t overflow_ni0_vc0_credit : 1; - mmr_t underflow_ni0_vc2_credit : 1; - mmr_t overflow_ni0_vc2_credit : 1; - mmr_t underflow_ni1_vc0_credit : 1; - mmr_t overflow_ni1_vc0_credit : 1; - mmr_t underflow_ni1_vc2_credit : 1; - mmr_t overflow_ni1_vc2_credit : 1; - mmr_t underflow_iilb_vc0_credit : 1; - mmr_t overflow_iilb_vc0_credit : 1; - mmr_t underflow_iilb_vc2_credit : 1; - mmr_t overflow_iilb_vc2_credit : 1; - mmr_t overflow_header_cancel_fifo : 1; - mmr_t reserved_0 : 14; - } sh_xnmd_first_error_s; -} sh_xnmd_first_error_u_t; -#else -typedef union sh_xnmd_first_error_u { - mmr_t sh_xnmd_first_error_regval; - struct { - mmr_t reserved_0 : 14; - mmr_t overflow_header_cancel_fifo : 1; - mmr_t overflow_iilb_vc2_credit : 1; - mmr_t underflow_iilb_vc2_credit : 1; - mmr_t overflow_iilb_vc0_credit : 1; - mmr_t underflow_iilb_vc0_credit : 1; - mmr_t overflow_ni1_vc2_credit : 1; - mmr_t underflow_ni1_vc2_credit : 1; - mmr_t overflow_ni1_vc0_credit : 1; - mmr_t underflow_ni1_vc0_credit : 1; - mmr_t overflow_ni0_vc2_credit : 1; - mmr_t underflow_ni0_vc2_credit : 1; - mmr_t overflow_ni0_vc0_credit : 1; - mmr_t underflow_ni0_vc0_credit : 1; - mmr_t overflow_iilb_debit2 : 1; - mmr_t overflow_iilb_debit0 : 1; - mmr_t overflow_ni1_debit2 : 1; - mmr_t overflow_ni1_debit0 : 1; - mmr_t overflow_ni0_debit2 : 1; - mmr_t overflow_ni0_debit0 : 1; - mmr_t overflow_sic_cntr2 : 1; - mmr_t underflow_sic_cntr2 : 1; - mmr_t overflow_sic_cntr0 : 1; - mmr_t underflow_sic_cntr0 : 1; - mmr_t uncor_error3 : 1; - mmr_t uncor_error2 : 1; - mmr_t uncor_error1 : 1; - mmr_t uncor_error0 : 1; - mmr_t single_bit_error3 : 1; - mmr_t single_bit_error2 : 1; - mmr_t single_bit_error1 : 1; - mmr_t single_bit_error0 : 1; - mmr_t lut_read_error : 1; - mmr_t overflow_databuff_vc2 : 1; - mmr_t overflow_databuff_vc0 : 1; - mmr_t overflow_vc2_credit : 1; - mmr_t underflow_vc2_credit : 1; - mmr_t overflow_vc0_credit : 1; - mmr_t underflow_vc0_credit : 1; - mmr_t overflow_iilb_vc2 : 1; - mmr_t underflow_iilb_vc2 : 1; - mmr_t overflow_iilb_vc0 : 1; - mmr_t underflow_iilb_vc0 : 1; - mmr_t overflow_ni1_vc2 : 1; - mmr_t underflow_ni1_vc2 : 1; - mmr_t overflow_ni1_vc0 : 1; - mmr_t underflow_ni1_vc0 : 1; - mmr_t overflow_ni0_vc2 : 1; - mmr_t underflow_ni0_vc2 : 1; - mmr_t overflow_ni0_vc0 : 1; - mmr_t underflow_ni0_vc0 : 1; + mmr_t underflow_ni1_vc2 : 1; + mmr_t overflow_ni1_vc2 : 1; + mmr_t underflow_iilb_vc0 : 1; + mmr_t overflow_iilb_vc0 : 1; + mmr_t underflow_iilb_vc2 : 1; + mmr_t overflow_iilb_vc2 : 1; + mmr_t underflow_vc0_credit : 1; + mmr_t overflow_vc0_credit : 1; + mmr_t underflow_vc2_credit : 1; + mmr_t overflow_vc2_credit : 1; + mmr_t overflow_databuff_vc0 : 1; + mmr_t overflow_databuff_vc2 : 1; + mmr_t lut_read_error : 1; + mmr_t single_bit_error0 : 1; + mmr_t single_bit_error1 : 1; + mmr_t single_bit_error2 : 1; + mmr_t single_bit_error3 : 1; + mmr_t uncor_error0 : 1; + mmr_t uncor_error1 : 1; + mmr_t uncor_error2 : 1; + mmr_t uncor_error3 : 1; + mmr_t underflow_sic_cntr0 : 1; + mmr_t overflow_sic_cntr0 : 1; + mmr_t underflow_sic_cntr2 : 1; + mmr_t overflow_sic_cntr2 : 1; + mmr_t overflow_ni0_debit0 : 1; + mmr_t overflow_ni0_debit2 : 1; + mmr_t overflow_ni1_debit0 : 1; + mmr_t overflow_ni1_debit2 : 1; + mmr_t overflow_iilb_debit0 : 1; + mmr_t overflow_iilb_debit2 : 1; + mmr_t underflow_ni0_vc0_credit : 1; + mmr_t overflow_ni0_vc0_credit : 1; + mmr_t underflow_ni0_vc2_credit : 1; + mmr_t overflow_ni0_vc2_credit : 1; + mmr_t underflow_ni1_vc0_credit : 1; + mmr_t overflow_ni1_vc0_credit : 1; + mmr_t underflow_ni1_vc2_credit : 1; + mmr_t overflow_ni1_vc2_credit : 1; + mmr_t underflow_iilb_vc0_credit : 1; + mmr_t overflow_iilb_vc0_credit : 1; + mmr_t underflow_iilb_vc2_credit : 1; + mmr_t overflow_iilb_vc2_credit : 1; + mmr_t overflow_header_cancel_fifo : 1; + mmr_t reserved_0 : 14; } sh_xnmd_first_error_s; } sh_xnmd_first_error_u_t; -#endif /* ==================================================================== */ /* Register "SH_AUTO_REPLY_ENABLE0" */ /* Automatic Maintenance Reply Enable 0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_auto_reply_enable0_u { - mmr_t sh_auto_reply_enable0_regval; - struct { - mmr_t enable0 : 64; - } sh_auto_reply_enable0_s; -} sh_auto_reply_enable0_u_t; -#else typedef union sh_auto_reply_enable0_u { mmr_t sh_auto_reply_enable0_regval; struct { mmr_t enable0 : 64; } sh_auto_reply_enable0_s; } sh_auto_reply_enable0_u_t; -#endif /* ==================================================================== */ /* Register "SH_AUTO_REPLY_ENABLE1" */ /* Automatic Maintenance Reply Enable 1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_auto_reply_enable1_u { - mmr_t sh_auto_reply_enable1_regval; - struct { - mmr_t enable1 : 64; - } sh_auto_reply_enable1_s; -} sh_auto_reply_enable1_u_t; -#else typedef union sh_auto_reply_enable1_u { mmr_t sh_auto_reply_enable1_regval; struct { mmr_t enable1 : 64; } sh_auto_reply_enable1_s; } sh_auto_reply_enable1_u_t; -#endif /* ==================================================================== */ /* Register "SH_AUTO_REPLY_HEADER0" */ /* Automatic Maintenance Reply Header 0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_auto_reply_header0_u { - mmr_t sh_auto_reply_header0_regval; - struct { - mmr_t header0 : 64; - } sh_auto_reply_header0_s; -} sh_auto_reply_header0_u_t; -#else typedef union sh_auto_reply_header0_u { mmr_t sh_auto_reply_header0_regval; struct { mmr_t header0 : 64; } sh_auto_reply_header0_s; } sh_auto_reply_header0_u_t; -#endif /* ==================================================================== */ /* Register "SH_AUTO_REPLY_HEADER1" */ /* Automatic Maintenance Reply Header 1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_auto_reply_header1_u { - mmr_t sh_auto_reply_header1_regval; - struct { - mmr_t header1 : 64; - } sh_auto_reply_header1_s; -} sh_auto_reply_header1_u_t; -#else typedef union sh_auto_reply_header1_u { mmr_t sh_auto_reply_header1_regval; struct { mmr_t header1 : 64; } sh_auto_reply_header1_s; } sh_auto_reply_header1_u_t; -#endif /* ==================================================================== */ /* Register "SH_ENABLE_RP_AUTO_REPLY" */ /* Enable Automatic Maintenance Reply From Reply Queue */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_enable_rp_auto_reply_u { mmr_t sh_enable_rp_auto_reply_regval; struct { @@ -18184,22 +9749,12 @@ typedef union sh_enable_rp_auto_reply_u mmr_t reserved_0 : 63; } sh_enable_rp_auto_reply_s; } sh_enable_rp_auto_reply_u_t; -#else -typedef union sh_enable_rp_auto_reply_u { - mmr_t sh_enable_rp_auto_reply_regval; - struct { - mmr_t reserved_0 : 63; - mmr_t enable : 1; - } sh_enable_rp_auto_reply_s; -} sh_enable_rp_auto_reply_u_t; -#endif /* ==================================================================== */ /* Register "SH_ENABLE_RQ_AUTO_REPLY" */ /* Enable Automatic Maintenance Reply From Request Queue */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_enable_rq_auto_reply_u { mmr_t sh_enable_rq_auto_reply_regval; struct { @@ -18207,22 +9762,12 @@ typedef union sh_enable_rq_auto_reply_u mmr_t reserved_0 : 63; } sh_enable_rq_auto_reply_s; } sh_enable_rq_auto_reply_u_t; -#else -typedef union sh_enable_rq_auto_reply_u { - mmr_t sh_enable_rq_auto_reply_regval; - struct { - mmr_t reserved_0 : 63; - mmr_t enable : 1; - } sh_enable_rq_auto_reply_s; -} sh_enable_rq_auto_reply_u_t; -#endif /* ==================================================================== */ /* Register "SH_REDIRECT_INVAL" */ /* Redirect invalidate to LB instead of PI */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_redirect_inval_u { mmr_t sh_redirect_inval_regval; struct { @@ -18230,22 +9775,12 @@ typedef union sh_redirect_inval_u { mmr_t reserved_0 : 63; } sh_redirect_inval_s; } sh_redirect_inval_u_t; -#else -typedef union sh_redirect_inval_u { - mmr_t sh_redirect_inval_regval; - struct { - mmr_t reserved_0 : 63; - mmr_t redirect : 1; - } sh_redirect_inval_s; -} sh_redirect_inval_u_t; -#endif /* ==================================================================== */ /* Register "SH_DIAG_MSG_CNTRL" */ /* Diagnostic Message Control Register */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_diag_msg_cntrl_u { mmr_t sh_diag_msg_cntrl_regval; struct { @@ -18258,447 +9793,252 @@ typedef union sh_diag_msg_cntrl_u { mmr_t busy : 1; } sh_diag_msg_cntrl_s; } sh_diag_msg_cntrl_u_t; -#else -typedef union sh_diag_msg_cntrl_u { - mmr_t sh_diag_msg_cntrl_regval; - struct { - mmr_t busy : 1; - mmr_t start : 1; - mmr_t reserved_0 : 48; - mmr_t port : 1; - mmr_t error_inject_enable : 1; - mmr_t error_inject_point : 6; - mmr_t msg_length : 6; - } sh_diag_msg_cntrl_s; -} sh_diag_msg_cntrl_u_t; -#endif /* ==================================================================== */ /* Register "SH_DIAG_MSG_DATA0L" */ /* Diagnostic Data, lower 64 bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_diag_msg_data0l_u { - mmr_t sh_diag_msg_data0l_regval; - struct { - mmr_t data_lower : 64; - } sh_diag_msg_data0l_s; -} sh_diag_msg_data0l_u_t; -#else typedef union sh_diag_msg_data0l_u { mmr_t sh_diag_msg_data0l_regval; struct { mmr_t data_lower : 64; } sh_diag_msg_data0l_s; } sh_diag_msg_data0l_u_t; -#endif /* ==================================================================== */ /* Register "SH_DIAG_MSG_DATA0U" */ /* Diagnostice Data, upper 64 bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_diag_msg_data0u_u { - mmr_t sh_diag_msg_data0u_regval; - struct { - mmr_t data_upper : 64; - } sh_diag_msg_data0u_s; -} sh_diag_msg_data0u_u_t; -#else typedef union sh_diag_msg_data0u_u { mmr_t sh_diag_msg_data0u_regval; struct { mmr_t data_upper : 64; } sh_diag_msg_data0u_s; } sh_diag_msg_data0u_u_t; -#endif /* ==================================================================== */ /* Register "SH_DIAG_MSG_DATA1L" */ /* Diagnostic Data, lower 64 bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_diag_msg_data1l_u { - mmr_t sh_diag_msg_data1l_regval; - struct { - mmr_t data_lower : 64; - } sh_diag_msg_data1l_s; -} sh_diag_msg_data1l_u_t; -#else typedef union sh_diag_msg_data1l_u { mmr_t sh_diag_msg_data1l_regval; struct { mmr_t data_lower : 64; } sh_diag_msg_data1l_s; } sh_diag_msg_data1l_u_t; -#endif /* ==================================================================== */ /* Register "SH_DIAG_MSG_DATA1U" */ /* Diagnostice Data, upper 64 bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_diag_msg_data1u_u { mmr_t sh_diag_msg_data1u_regval; struct { mmr_t data_upper : 64; } sh_diag_msg_data1u_s; } sh_diag_msg_data1u_u_t; -#else -typedef union sh_diag_msg_data1u_u { - mmr_t sh_diag_msg_data1u_regval; - struct { - mmr_t data_upper : 64; - } sh_diag_msg_data1u_s; -} sh_diag_msg_data1u_u_t; -#endif /* ==================================================================== */ /* Register "SH_DIAG_MSG_DATA2L" */ /* Diagnostic Data, lower 64 bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_diag_msg_data2l_u { - mmr_t sh_diag_msg_data2l_regval; - struct { - mmr_t data_lower : 64; - } sh_diag_msg_data2l_s; -} sh_diag_msg_data2l_u_t; -#else typedef union sh_diag_msg_data2l_u { mmr_t sh_diag_msg_data2l_regval; struct { mmr_t data_lower : 64; } sh_diag_msg_data2l_s; } sh_diag_msg_data2l_u_t; -#endif /* ==================================================================== */ /* Register "SH_DIAG_MSG_DATA2U" */ /* Diagnostice Data, upper 64 bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_diag_msg_data2u_u { - mmr_t sh_diag_msg_data2u_regval; - struct { - mmr_t data_upper : 64; - } sh_diag_msg_data2u_s; -} sh_diag_msg_data2u_u_t; -#else typedef union sh_diag_msg_data2u_u { mmr_t sh_diag_msg_data2u_regval; struct { mmr_t data_upper : 64; } sh_diag_msg_data2u_s; } sh_diag_msg_data2u_u_t; -#endif /* ==================================================================== */ /* Register "SH_DIAG_MSG_DATA3L" */ /* Diagnostic Data, lower 64 bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_diag_msg_data3l_u { - mmr_t sh_diag_msg_data3l_regval; - struct { - mmr_t data_lower : 64; - } sh_diag_msg_data3l_s; -} sh_diag_msg_data3l_u_t; -#else typedef union sh_diag_msg_data3l_u { mmr_t sh_diag_msg_data3l_regval; struct { mmr_t data_lower : 64; } sh_diag_msg_data3l_s; } sh_diag_msg_data3l_u_t; -#endif /* ==================================================================== */ /* Register "SH_DIAG_MSG_DATA3U" */ /* Diagnostice Data, upper 64 bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_diag_msg_data3u_u { mmr_t sh_diag_msg_data3u_regval; struct { mmr_t data_upper : 64; } sh_diag_msg_data3u_s; } sh_diag_msg_data3u_u_t; -#else -typedef union sh_diag_msg_data3u_u { - mmr_t sh_diag_msg_data3u_regval; - struct { - mmr_t data_upper : 64; - } sh_diag_msg_data3u_s; -} sh_diag_msg_data3u_u_t; -#endif /* ==================================================================== */ /* Register "SH_DIAG_MSG_DATA4L" */ /* Diagnostic Data, lower 64 bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_diag_msg_data4l_u { - mmr_t sh_diag_msg_data4l_regval; - struct { - mmr_t data_lower : 64; - } sh_diag_msg_data4l_s; -} sh_diag_msg_data4l_u_t; -#else typedef union sh_diag_msg_data4l_u { mmr_t sh_diag_msg_data4l_regval; struct { mmr_t data_lower : 64; } sh_diag_msg_data4l_s; } sh_diag_msg_data4l_u_t; -#endif /* ==================================================================== */ /* Register "SH_DIAG_MSG_DATA4U" */ /* Diagnostice Data, upper 64 bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_diag_msg_data4u_u { - mmr_t sh_diag_msg_data4u_regval; - struct { - mmr_t data_upper : 64; - } sh_diag_msg_data4u_s; -} sh_diag_msg_data4u_u_t; -#else typedef union sh_diag_msg_data4u_u { mmr_t sh_diag_msg_data4u_regval; struct { mmr_t data_upper : 64; } sh_diag_msg_data4u_s; } sh_diag_msg_data4u_u_t; -#endif /* ==================================================================== */ /* Register "SH_DIAG_MSG_DATA5L" */ /* Diagnostic Data, lower 64 bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_diag_msg_data5l_u { - mmr_t sh_diag_msg_data5l_regval; - struct { - mmr_t data_lower : 64; - } sh_diag_msg_data5l_s; -} sh_diag_msg_data5l_u_t; -#else typedef union sh_diag_msg_data5l_u { mmr_t sh_diag_msg_data5l_regval; struct { mmr_t data_lower : 64; } sh_diag_msg_data5l_s; } sh_diag_msg_data5l_u_t; -#endif /* ==================================================================== */ /* Register "SH_DIAG_MSG_DATA5U" */ /* Diagnostice Data, upper 64 bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_diag_msg_data5u_u { mmr_t sh_diag_msg_data5u_regval; struct { mmr_t data_upper : 64; } sh_diag_msg_data5u_s; } sh_diag_msg_data5u_u_t; -#else -typedef union sh_diag_msg_data5u_u { - mmr_t sh_diag_msg_data5u_regval; - struct { - mmr_t data_upper : 64; - } sh_diag_msg_data5u_s; -} sh_diag_msg_data5u_u_t; -#endif /* ==================================================================== */ /* Register "SH_DIAG_MSG_DATA6L" */ /* Diagnostic Data, lower 64 bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_diag_msg_data6l_u { - mmr_t sh_diag_msg_data6l_regval; - struct { - mmr_t data_lower : 64; - } sh_diag_msg_data6l_s; -} sh_diag_msg_data6l_u_t; -#else typedef union sh_diag_msg_data6l_u { mmr_t sh_diag_msg_data6l_regval; struct { mmr_t data_lower : 64; } sh_diag_msg_data6l_s; } sh_diag_msg_data6l_u_t; -#endif /* ==================================================================== */ /* Register "SH_DIAG_MSG_DATA6U" */ /* Diagnostice Data, upper 64 bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_diag_msg_data6u_u { - mmr_t sh_diag_msg_data6u_regval; - struct { - mmr_t data_upper : 64; - } sh_diag_msg_data6u_s; -} sh_diag_msg_data6u_u_t; -#else typedef union sh_diag_msg_data6u_u { mmr_t sh_diag_msg_data6u_regval; struct { mmr_t data_upper : 64; } sh_diag_msg_data6u_s; } sh_diag_msg_data6u_u_t; -#endif /* ==================================================================== */ /* Register "SH_DIAG_MSG_DATA7L" */ /* Diagnostic Data, lower 64 bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_diag_msg_data7l_u { - mmr_t sh_diag_msg_data7l_regval; - struct { - mmr_t data_lower : 64; - } sh_diag_msg_data7l_s; -} sh_diag_msg_data7l_u_t; -#else typedef union sh_diag_msg_data7l_u { mmr_t sh_diag_msg_data7l_regval; struct { mmr_t data_lower : 64; } sh_diag_msg_data7l_s; } sh_diag_msg_data7l_u_t; -#endif /* ==================================================================== */ /* Register "SH_DIAG_MSG_DATA7U" */ /* Diagnostice Data, upper 64 bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_diag_msg_data7u_u { mmr_t sh_diag_msg_data7u_regval; struct { mmr_t data_upper : 64; } sh_diag_msg_data7u_s; } sh_diag_msg_data7u_u_t; -#else -typedef union sh_diag_msg_data7u_u { - mmr_t sh_diag_msg_data7u_regval; - struct { - mmr_t data_upper : 64; - } sh_diag_msg_data7u_s; -} sh_diag_msg_data7u_u_t; -#endif /* ==================================================================== */ /* Register "SH_DIAG_MSG_DATA8L" */ /* Diagnostic Data, lower 64 bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_diag_msg_data8l_u { - mmr_t sh_diag_msg_data8l_regval; - struct { - mmr_t data_lower : 64; - } sh_diag_msg_data8l_s; -} sh_diag_msg_data8l_u_t; -#else typedef union sh_diag_msg_data8l_u { mmr_t sh_diag_msg_data8l_regval; struct { mmr_t data_lower : 64; } sh_diag_msg_data8l_s; } sh_diag_msg_data8l_u_t; -#endif /* ==================================================================== */ /* Register "SH_DIAG_MSG_DATA8U" */ /* Diagnostice Data, upper 64 bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_diag_msg_data8u_u { - mmr_t sh_diag_msg_data8u_regval; - struct { - mmr_t data_upper : 64; - } sh_diag_msg_data8u_s; -} sh_diag_msg_data8u_u_t; -#else typedef union sh_diag_msg_data8u_u { mmr_t sh_diag_msg_data8u_regval; struct { mmr_t data_upper : 64; } sh_diag_msg_data8u_s; } sh_diag_msg_data8u_u_t; -#endif /* ==================================================================== */ /* Register "SH_DIAG_MSG_HDR0" */ /* Diagnostice Data, lower 64 bits of header */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_diag_msg_hdr0_u { - mmr_t sh_diag_msg_hdr0_regval; - struct { - mmr_t header0 : 64; - } sh_diag_msg_hdr0_s; -} sh_diag_msg_hdr0_u_t; -#else typedef union sh_diag_msg_hdr0_u { mmr_t sh_diag_msg_hdr0_regval; struct { mmr_t header0 : 64; } sh_diag_msg_hdr0_s; } sh_diag_msg_hdr0_u_t; -#endif /* ==================================================================== */ /* Register "SH_DIAG_MSG_HDR1" */ /* Diagnostice Data, upper 64 bits of header */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_diag_msg_hdr1_u { mmr_t sh_diag_msg_hdr1_regval; struct { mmr_t header1 : 64; } sh_diag_msg_hdr1_s; } sh_diag_msg_hdr1_u_t; -#else -typedef union sh_diag_msg_hdr1_u { - mmr_t sh_diag_msg_hdr1_regval; - struct { - mmr_t header1 : 64; - } sh_diag_msg_hdr1_s; -} sh_diag_msg_hdr1_u_t; -#endif /* ==================================================================== */ /* Register "SH_DEBUG_SELECT" */ /* SHub Debug Port Select */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_debug_select_u { mmr_t sh_debug_select_regval; struct { @@ -18713,51 +10053,23 @@ typedef union sh_debug_select_u { mmr_t nibble4_nibble_sel : 3; mmr_t nibble4_chiplet_sel : 3; mmr_t nibble5_nibble_sel : 3; - mmr_t nibble5_chiplet_sel : 3; - mmr_t nibble6_nibble_sel : 3; - mmr_t nibble6_chiplet_sel : 3; - mmr_t nibble7_nibble_sel : 3; - mmr_t nibble7_chiplet_sel : 3; - mmr_t debug_ii_sel : 3; - mmr_t sel_ii : 9; - mmr_t reserved_0 : 3; - mmr_t trigger_enable : 1; - } sh_debug_select_s; -} sh_debug_select_u_t; -#else -typedef union sh_debug_select_u { - mmr_t sh_debug_select_regval; - struct { - mmr_t trigger_enable : 1; - mmr_t reserved_0 : 3; - mmr_t sel_ii : 9; - mmr_t debug_ii_sel : 3; - mmr_t nibble7_chiplet_sel : 3; - mmr_t nibble7_nibble_sel : 3; - mmr_t nibble6_chiplet_sel : 3; - mmr_t nibble6_nibble_sel : 3; - mmr_t nibble5_chiplet_sel : 3; - mmr_t nibble5_nibble_sel : 3; - mmr_t nibble4_chiplet_sel : 3; - mmr_t nibble4_nibble_sel : 3; - mmr_t nibble3_chiplet_sel : 3; - mmr_t nibble3_nibble_sel : 3; - mmr_t nibble2_chiplet_sel : 3; - mmr_t nibble2_nibble_sel : 3; - mmr_t nibble1_chiplet_sel : 3; - mmr_t nibble1_nibble_sel : 3; - mmr_t nibble0_chiplet_sel : 3; - mmr_t nibble0_nibble_sel : 3; + mmr_t nibble5_chiplet_sel : 3; + mmr_t nibble6_nibble_sel : 3; + mmr_t nibble6_chiplet_sel : 3; + mmr_t nibble7_nibble_sel : 3; + mmr_t nibble7_chiplet_sel : 3; + mmr_t debug_ii_sel : 3; + mmr_t sel_ii : 9; + mmr_t reserved_0 : 3; + mmr_t trigger_enable : 1; } sh_debug_select_s; } sh_debug_select_u_t; -#endif /* ==================================================================== */ /* Register "SH_TRIGGER_COMPARE_MASK" */ /* SHub Trigger Compare Mask */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_trigger_compare_mask_u { mmr_t sh_trigger_compare_mask_regval; struct { @@ -18765,22 +10077,12 @@ typedef union sh_trigger_compare_mask_u mmr_t reserved_0 : 32; } sh_trigger_compare_mask_s; } sh_trigger_compare_mask_u_t; -#else -typedef union sh_trigger_compare_mask_u { - mmr_t sh_trigger_compare_mask_regval; - struct { - mmr_t reserved_0 : 32; - mmr_t mask : 32; - } sh_trigger_compare_mask_s; -} sh_trigger_compare_mask_u_t; -#endif /* ==================================================================== */ /* Register "SH_TRIGGER_COMPARE_PATTERN" */ /* SHub Trigger Compare Pattern */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_trigger_compare_pattern_u { mmr_t sh_trigger_compare_pattern_regval; struct { @@ -18788,22 +10090,12 @@ typedef union sh_trigger_compare_pattern mmr_t reserved_0 : 32; } sh_trigger_compare_pattern_s; } sh_trigger_compare_pattern_u_t; -#else -typedef union sh_trigger_compare_pattern_u { - mmr_t sh_trigger_compare_pattern_regval; - struct { - mmr_t reserved_0 : 32; - mmr_t data : 32; - } sh_trigger_compare_pattern_s; -} sh_trigger_compare_pattern_u_t; -#endif /* ==================================================================== */ /* Register "SH_TRIGGER_SEL" */ /* Trigger select for SHUB debug port */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_trigger_sel_u { mmr_t sh_trigger_sel_regval; struct { @@ -18841,52 +10133,12 @@ typedef union sh_trigger_sel_u { mmr_t reserved_15 : 1; } sh_trigger_sel_s; } sh_trigger_sel_u_t; -#else -typedef union sh_trigger_sel_u { - mmr_t sh_trigger_sel_regval; - struct { - mmr_t reserved_15 : 1; - mmr_t nibble7_nibble_sel : 3; - mmr_t reserved_14 : 1; - mmr_t nibble7_input_sel : 3; - mmr_t reserved_13 : 1; - mmr_t nibble6_nibble_sel : 3; - mmr_t reserved_12 : 1; - mmr_t nibble6_input_sel : 3; - mmr_t reserved_11 : 1; - mmr_t nibble5_nibble_sel : 3; - mmr_t reserved_10 : 1; - mmr_t nibble5_input_sel : 3; - mmr_t reserved_9 : 1; - mmr_t nibble4_nibble_sel : 3; - mmr_t reserved_8 : 1; - mmr_t nibble4_input_sel : 3; - mmr_t reserved_7 : 1; - mmr_t nibble3_nibble_sel : 3; - mmr_t reserved_6 : 1; - mmr_t nibble3_input_sel : 3; - mmr_t reserved_5 : 1; - mmr_t nibble2_nibble_sel : 3; - mmr_t reserved_4 : 1; - mmr_t nibble2_input_sel : 3; - mmr_t reserved_3 : 1; - mmr_t nibble1_nibble_sel : 3; - mmr_t reserved_2 : 1; - mmr_t nibble1_input_sel : 3; - mmr_t reserved_1 : 1; - mmr_t nibble0_nibble_sel : 3; - mmr_t reserved_0 : 1; - mmr_t nibble0_input_sel : 3; - } sh_trigger_sel_s; -} sh_trigger_sel_u_t; -#endif /* ==================================================================== */ /* Register "SH_STOP_CLK_CONTROL" */ /* Stop Clock Control */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_stop_clk_control_u { mmr_t sh_stop_clk_control_regval; struct { @@ -18897,25 +10149,12 @@ typedef union sh_stop_clk_control_u { mmr_t reserved_0 : 56; } sh_stop_clk_control_s; } sh_stop_clk_control_u_t; -#else -typedef union sh_stop_clk_control_u { - mmr_t sh_stop_clk_control_regval; - struct { - mmr_t reserved_0 : 56; - mmr_t mode : 1; - mmr_t polarity : 1; - mmr_t event : 1; - mmr_t stimulus : 5; - } sh_stop_clk_control_s; -} sh_stop_clk_control_u_t; -#endif /* ==================================================================== */ /* Register "SH_STOP_CLK_DELAY_PHASE" */ /* Stop Clock Delay Phase */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_stop_clk_delay_phase_u { mmr_t sh_stop_clk_delay_phase_regval; struct { @@ -18923,43 +10162,24 @@ typedef union sh_stop_clk_delay_phase_u mmr_t reserved_0 : 56; } sh_stop_clk_delay_phase_s; } sh_stop_clk_delay_phase_u_t; -#else -typedef union sh_stop_clk_delay_phase_u { - mmr_t sh_stop_clk_delay_phase_regval; - struct { - mmr_t reserved_0 : 56; - mmr_t delay : 8; - } sh_stop_clk_delay_phase_s; -} sh_stop_clk_delay_phase_u_t; -#endif /* ==================================================================== */ /* Register "SH_TSF_ARM_MASK" */ /* Trigger sequencing facility arm mask */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_tsf_arm_mask_u { - mmr_t sh_tsf_arm_mask_regval; - struct { - mmr_t mask : 64; - } sh_tsf_arm_mask_s; -} sh_tsf_arm_mask_u_t; -#else typedef union sh_tsf_arm_mask_u { mmr_t sh_tsf_arm_mask_regval; struct { mmr_t mask : 64; } sh_tsf_arm_mask_s; } sh_tsf_arm_mask_u_t; -#endif /* ==================================================================== */ /* Register "SH_TSF_COUNTER_PRESETS" */ /* Trigger sequencing facility counter presets */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_tsf_counter_presets_u { mmr_t sh_tsf_counter_presets_regval; struct { @@ -18969,24 +10189,12 @@ typedef union sh_tsf_counter_presets_u { mmr_t count_8a : 8; } sh_tsf_counter_presets_s; } sh_tsf_counter_presets_u_t; -#else -typedef union sh_tsf_counter_presets_u { - mmr_t sh_tsf_counter_presets_regval; - struct { - mmr_t count_8a : 8; - mmr_t count_8b : 8; - mmr_t count_16 : 16; - mmr_t count_32 : 32; - } sh_tsf_counter_presets_s; -} sh_tsf_counter_presets_u_t; -#endif /* ==================================================================== */ /* Register "SH_TSF_DECREMENT_CTL" */ /* Trigger sequencing facility counter decrement control */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_tsf_decrement_ctl_u { mmr_t sh_tsf_decrement_ctl_regval; struct { @@ -18994,22 +10202,12 @@ typedef union sh_tsf_decrement_ctl_u { mmr_t reserved_0 : 48; } sh_tsf_decrement_ctl_s; } sh_tsf_decrement_ctl_u_t; -#else -typedef union sh_tsf_decrement_ctl_u { - mmr_t sh_tsf_decrement_ctl_regval; - struct { - mmr_t reserved_0 : 48; - mmr_t ctl : 16; - } sh_tsf_decrement_ctl_s; -} sh_tsf_decrement_ctl_u_t; -#endif /* ==================================================================== */ /* Register "SH_TSF_DIAG_MSG_CTL" */ /* Trigger sequencing facility diagnostic message control */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_tsf_diag_msg_ctl_u { mmr_t sh_tsf_diag_msg_ctl_regval; struct { @@ -19017,43 +10215,24 @@ typedef union sh_tsf_diag_msg_ctl_u { mmr_t reserved_0 : 56; } sh_tsf_diag_msg_ctl_s; } sh_tsf_diag_msg_ctl_u_t; -#else -typedef union sh_tsf_diag_msg_ctl_u { - mmr_t sh_tsf_diag_msg_ctl_regval; - struct { - mmr_t reserved_0 : 56; - mmr_t enable : 8; - } sh_tsf_diag_msg_ctl_s; -} sh_tsf_diag_msg_ctl_u_t; -#endif /* ==================================================================== */ /* Register "SH_TSF_DISARM_MASK" */ /* Trigger sequencing facility disarm mask */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_tsf_disarm_mask_u { - mmr_t sh_tsf_disarm_mask_regval; - struct { - mmr_t mask : 64; - } sh_tsf_disarm_mask_s; -} sh_tsf_disarm_mask_u_t; -#else typedef union sh_tsf_disarm_mask_u { mmr_t sh_tsf_disarm_mask_regval; struct { mmr_t mask : 64; } sh_tsf_disarm_mask_s; } sh_tsf_disarm_mask_u_t; -#endif /* ==================================================================== */ /* Register "SH_TSF_ENABLE_CTL" */ /* Trigger sequencing facility counter enable control */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_tsf_enable_ctl_u { mmr_t sh_tsf_enable_ctl_regval; struct { @@ -19061,22 +10240,12 @@ typedef union sh_tsf_enable_ctl_u { mmr_t reserved_0 : 48; } sh_tsf_enable_ctl_s; } sh_tsf_enable_ctl_u_t; -#else -typedef union sh_tsf_enable_ctl_u { - mmr_t sh_tsf_enable_ctl_regval; - struct { - mmr_t reserved_0 : 48; - mmr_t ctl : 16; - } sh_tsf_enable_ctl_s; -} sh_tsf_enable_ctl_u_t; -#endif /* ==================================================================== */ /* Register "SH_TSF_SOFTWARE_ARM" */ /* Trigger sequencing facility software arm */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_tsf_software_arm_u { mmr_t sh_tsf_software_arm_regval; struct { @@ -19091,29 +10260,12 @@ typedef union sh_tsf_software_arm_u { mmr_t reserved_0 : 56; } sh_tsf_software_arm_s; } sh_tsf_software_arm_u_t; -#else -typedef union sh_tsf_software_arm_u { - mmr_t sh_tsf_software_arm_regval; - struct { - mmr_t reserved_0 : 56; - mmr_t bit7 : 1; - mmr_t bit6 : 1; - mmr_t bit5 : 1; - mmr_t bit4 : 1; - mmr_t bit3 : 1; - mmr_t bit2 : 1; - mmr_t bit1 : 1; - mmr_t bit0 : 1; - } sh_tsf_software_arm_s; -} sh_tsf_software_arm_u_t; -#endif /* ==================================================================== */ /* Register "SH_TSF_SOFTWARE_DISARM" */ /* Trigger sequencing facility software disarm */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_tsf_software_disarm_u { mmr_t sh_tsf_software_disarm_regval; struct { @@ -19128,29 +10280,12 @@ typedef union sh_tsf_software_disarm_u { mmr_t reserved_0 : 56; } sh_tsf_software_disarm_s; } sh_tsf_software_disarm_u_t; -#else -typedef union sh_tsf_software_disarm_u { - mmr_t sh_tsf_software_disarm_regval; - struct { - mmr_t reserved_0 : 56; - mmr_t bit7 : 1; - mmr_t bit6 : 1; - mmr_t bit5 : 1; - mmr_t bit4 : 1; - mmr_t bit3 : 1; - mmr_t bit2 : 1; - mmr_t bit1 : 1; - mmr_t bit0 : 1; - } sh_tsf_software_disarm_s; -} sh_tsf_software_disarm_u_t; -#endif /* ==================================================================== */ /* Register "SH_TSF_SOFTWARE_TRIGGERED" */ /* Trigger sequencing facility software triggered */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_tsf_software_triggered_u { mmr_t sh_tsf_software_triggered_regval; struct { @@ -19165,71 +10300,36 @@ typedef union sh_tsf_software_triggered_ mmr_t reserved_0 : 56; } sh_tsf_software_triggered_s; } sh_tsf_software_triggered_u_t; -#else -typedef union sh_tsf_software_triggered_u { - mmr_t sh_tsf_software_triggered_regval; - struct { - mmr_t reserved_0 : 56; - mmr_t bit7 : 1; - mmr_t bit6 : 1; - mmr_t bit5 : 1; - mmr_t bit4 : 1; - mmr_t bit3 : 1; - mmr_t bit2 : 1; - mmr_t bit1 : 1; - mmr_t bit0 : 1; - } sh_tsf_software_triggered_s; -} sh_tsf_software_triggered_u_t; -#endif /* ==================================================================== */ /* Register "SH_TSF_TRIGGER_MASK" */ /* Trigger sequencing facility trigger mask */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_tsf_trigger_mask_u { - mmr_t sh_tsf_trigger_mask_regval; - struct { - mmr_t mask : 64; - } sh_tsf_trigger_mask_s; -} sh_tsf_trigger_mask_u_t; -#else typedef union sh_tsf_trigger_mask_u { mmr_t sh_tsf_trigger_mask_regval; struct { mmr_t mask : 64; } sh_tsf_trigger_mask_s; } sh_tsf_trigger_mask_u_t; -#endif /* ==================================================================== */ /* Register "SH_VEC_DATA" */ /* Vector Write Request Message Data */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_vec_data_u { - mmr_t sh_vec_data_regval; - struct { - mmr_t data : 64; - } sh_vec_data_s; -} sh_vec_data_u_t; -#else typedef union sh_vec_data_u { mmr_t sh_vec_data_regval; struct { mmr_t data : 64; } sh_vec_data_s; } sh_vec_data_u_t; -#endif /* ==================================================================== */ /* Register "SH_VEC_PARMS" */ /* Vector Message Parameters Register */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_vec_parms_u { mmr_t sh_vec_parms_regval; struct { @@ -19243,133 +10343,72 @@ typedef union sh_vec_parms_u { mmr_t busy : 1; } sh_vec_parms_s; } sh_vec_parms_u_t; -#else -typedef union sh_vec_parms_u { - mmr_t sh_vec_parms_regval; - struct { - mmr_t busy : 1; - mmr_t start : 1; - mmr_t reserved_1 : 16; - mmr_t pio_id : 11; - mmr_t address : 32; - mmr_t reserved_0 : 1; - mmr_t ni_port : 1; - mmr_t type : 1; - } sh_vec_parms_s; -} sh_vec_parms_u_t; -#endif /* ==================================================================== */ /* Register "SH_VEC_ROUTE" */ /* Vector Request Message Route */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_vec_route_u { - mmr_t sh_vec_route_regval; - struct { - mmr_t route : 64; - } sh_vec_route_s; -} sh_vec_route_u_t; -#else typedef union sh_vec_route_u { mmr_t sh_vec_route_regval; struct { mmr_t route : 64; } sh_vec_route_s; } sh_vec_route_u_t; -#endif /* ==================================================================== */ /* Register "SH_CPU_PERM" */ /* CPU MMR Access Permission Bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_cpu_perm_u { mmr_t sh_cpu_perm_regval; struct { mmr_t access_bits : 64; } sh_cpu_perm_s; } sh_cpu_perm_u_t; -#else -typedef union sh_cpu_perm_u { - mmr_t sh_cpu_perm_regval; - struct { - mmr_t access_bits : 64; - } sh_cpu_perm_s; -} sh_cpu_perm_u_t; -#endif /* ==================================================================== */ /* Register "SH_CPU_PERM_OVR" */ /* CPU MMR Access Permission Override */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_cpu_perm_ovr_u { - mmr_t sh_cpu_perm_ovr_regval; - struct { - mmr_t override : 64; - } sh_cpu_perm_ovr_s; -} sh_cpu_perm_ovr_u_t; -#else typedef union sh_cpu_perm_ovr_u { mmr_t sh_cpu_perm_ovr_regval; struct { mmr_t override : 64; } sh_cpu_perm_ovr_s; } sh_cpu_perm_ovr_u_t; -#endif /* ==================================================================== */ /* Register "SH_EXT_IO_PERM" */ /* External IO MMR Access Permission Bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_ext_io_perm_u { - mmr_t sh_ext_io_perm_regval; - struct { - mmr_t access_bits : 64; - } sh_ext_io_perm_s; -} sh_ext_io_perm_u_t; -#else typedef union sh_ext_io_perm_u { mmr_t sh_ext_io_perm_regval; struct { mmr_t access_bits : 64; } sh_ext_io_perm_s; } sh_ext_io_perm_u_t; -#endif /* ==================================================================== */ /* Register "SH_EXT_IOI_ACCESS" */ /* External IO Interrupt Access Permission Bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_ext_ioi_access_u { - mmr_t sh_ext_ioi_access_regval; - struct { - mmr_t access_bits : 64; - } sh_ext_ioi_access_s; -} sh_ext_ioi_access_u_t; -#else typedef union sh_ext_ioi_access_u { mmr_t sh_ext_ioi_access_regval; struct { mmr_t access_bits : 64; } sh_ext_ioi_access_s; } sh_ext_ioi_access_u_t; -#endif /* ==================================================================== */ /* Register "SH_GC_FIL_CTRL" */ /* SHub Global Clock Filter Control */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_gc_fil_ctrl_u { mmr_t sh_gc_fil_ctrl_regval; struct { @@ -19386,31 +10425,12 @@ typedef union sh_gc_fil_ctrl_u { mmr_t reserved_4 : 6; } sh_gc_fil_ctrl_s; } sh_gc_fil_ctrl_u_t; -#else -typedef union sh_gc_fil_ctrl_u { - mmr_t sh_gc_fil_ctrl_regval; - struct { - mmr_t reserved_4 : 6; - mmr_t error_counter : 10; - mmr_t reserved_3 : 2; - mmr_t dropout_thresh : 10; - mmr_t reserved_2 : 2; - mmr_t dropout_counter : 10; - mmr_t reserved_1 : 3; - mmr_t mask_enable : 1; - mmr_t mask_counter : 12; - mmr_t reserved_0 : 3; - mmr_t offset : 5; - } sh_gc_fil_ctrl_s; -} sh_gc_fil_ctrl_u_t; -#endif /* ==================================================================== */ /* Register "SH_GC_SRC_CTRL" */ /* SHub Global Clock Control */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_gc_src_ctrl_u { mmr_t sh_gc_src_ctrl_regval; struct { @@ -19426,116 +10446,61 @@ typedef union sh_gc_src_ctrl_u { mmr_t reserved_4 : 30; } sh_gc_src_ctrl_s; } sh_gc_src_ctrl_u_t; -#else -typedef union sh_gc_src_ctrl_u { - mmr_t sh_gc_src_ctrl_regval; - struct { - mmr_t reserved_4 : 30; - mmr_t source_sel : 2; - mmr_t reserved_3 : 3; - mmr_t toggle_bit : 1; - mmr_t reserved_2 : 2; - mmr_t counter : 10; - mmr_t reserved_1 : 2; - mmr_t max_count : 10; - mmr_t reserved_0 : 3; - mmr_t enable_counter : 1; - } sh_gc_src_ctrl_s; -} sh_gc_src_ctrl_u_t; -#endif /* ==================================================================== */ /* Register "SH_HARD_RESET" */ /* SHub Hard Reset */ -/* ==================================================================== */ - -#ifdef LITTLE_ENDIAN -typedef union sh_hard_reset_u { - mmr_t sh_hard_reset_regval; - struct { - mmr_t hard_reset : 1; - mmr_t reserved_0 : 63; - } sh_hard_reset_s; -} sh_hard_reset_u_t; -#else +/* ==================================================================== */ + typedef union sh_hard_reset_u { mmr_t sh_hard_reset_regval; struct { - mmr_t reserved_0 : 63; mmr_t hard_reset : 1; + mmr_t reserved_0 : 63; } sh_hard_reset_s; } sh_hard_reset_u_t; -#endif /* ==================================================================== */ /* Register "SH_IO_PERM" */ /* II MMR Access Permission Bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_io_perm_u { - mmr_t sh_io_perm_regval; - struct { - mmr_t access_bits : 64; - } sh_io_perm_s; -} sh_io_perm_u_t; -#else typedef union sh_io_perm_u { mmr_t sh_io_perm_regval; struct { mmr_t access_bits : 64; } sh_io_perm_s; } sh_io_perm_u_t; -#endif /* ==================================================================== */ /* Register "SH_IOI_ACCESS" */ /* II Interrupt Access Permission Bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_ioi_access_u { - mmr_t sh_ioi_access_regval; - struct { - mmr_t access_bits : 64; - } sh_ioi_access_s; -} sh_ioi_access_u_t; -#else typedef union sh_ioi_access_u { mmr_t sh_ioi_access_regval; struct { mmr_t access_bits : 64; } sh_ioi_access_s; } sh_ioi_access_u_t; -#endif /* ==================================================================== */ /* Register "SH_IPI_ACCESS" */ /* CPU interrupt Access Permission Bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ipi_access_u { mmr_t sh_ipi_access_regval; struct { mmr_t access_bits : 64; } sh_ipi_access_s; } sh_ipi_access_u_t; -#else -typedef union sh_ipi_access_u { - mmr_t sh_ipi_access_regval; - struct { - mmr_t access_bits : 64; - } sh_ipi_access_s; -} sh_ipi_access_u_t; -#endif /* ==================================================================== */ /* Register "SH_JTAG_CONFIG" */ /* SHub JTAG configuration */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_jtag_config_u { mmr_t sh_jtag_config_regval; struct { @@ -19559,38 +10524,12 @@ typedef union sh_jtag_config_u { mmr_t reserved_0 : 8; } sh_jtag_config_s; } sh_jtag_config_u_t; -#else -typedef union sh_jtag_config_u { - mmr_t sh_jtag_config_regval; - struct { - mmr_t reserved_0 : 8; - mmr_t gtl_config_re : 1; - mmr_t fsb_config_aux : 2; - mmr_t fsb_config_enable_bist : 1; - mmr_t fsb_config_output_tristate : 4; - mmr_t fsb_config_clock_ratio : 5; - mmr_t fsb_config_enable_bus_parking : 1; - mmr_t fsb_config_sample_binit : 1; - mmr_t fsb_config_ioq_depth : 1; - mmr_t jtag_mci_override : 1; - mmr_t jtag_mci_target : 14; - mmr_t jtag_mci_reset_delay : 4; - mmr_t wrt90_override : 1; - mmr_t wrt90_overrider : 1; - mmr_t wrt90_target : 14; - mmr_t ii_clk_sel : 2; - mmr_t ni_clk_sel : 1; - mmr_t md_clk_sel : 2; - } sh_jtag_config_s; -} sh_jtag_config_u_t; -#endif /* ==================================================================== */ /* Register "SH_SHUB_ID" */ /* SHub ID Number */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_shub_id_u { mmr_t sh_shub_id_regval; struct { @@ -19608,116 +10547,60 @@ typedef union sh_shub_id_u { mmr_t reserved_3 : 7; } sh_shub_id_s; } sh_shub_id_u_t; -#else -typedef union sh_shub_id_u { - mmr_t sh_shub_id_regval; - struct { - mmr_t reserved_3 : 7; - mmr_t ni_port : 1; - mmr_t reserved_2 : 3; - mmr_t nodes_per_bit : 5; - mmr_t reserved_1 : 2; - mmr_t sharing_mode : 2; - mmr_t reserved_0 : 1; - mmr_t node_id : 11; - mmr_t revision : 4; - mmr_t part_number : 16; - mmr_t manufacturer : 11; - mmr_t force1 : 1; - } sh_shub_id_s; -} sh_shub_id_u_t; -#endif /* ==================================================================== */ /* Register "SH_SHUBS_PRESENT0" */ /* Shubs 0 - 63 Present. Used for invalidate generation */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_shubs_present0_u { - mmr_t sh_shubs_present0_regval; - struct { - mmr_t shubs_present0 : 64; - } sh_shubs_present0_s; -} sh_shubs_present0_u_t; -#else typedef union sh_shubs_present0_u { mmr_t sh_shubs_present0_regval; struct { mmr_t shubs_present0 : 64; } sh_shubs_present0_s; } sh_shubs_present0_u_t; -#endif /* ==================================================================== */ /* Register "SH_SHUBS_PRESENT1" */ /* Shubs 64 - 127 Present. Used for invalidate generation */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_shubs_present1_u { - mmr_t sh_shubs_present1_regval; - struct { - mmr_t shubs_present1 : 64; - } sh_shubs_present1_s; -} sh_shubs_present1_u_t; -#else typedef union sh_shubs_present1_u { mmr_t sh_shubs_present1_regval; struct { mmr_t shubs_present1 : 64; } sh_shubs_present1_s; } sh_shubs_present1_u_t; -#endif /* ==================================================================== */ /* Register "SH_SHUBS_PRESENT2" */ /* Shubs 128 - 191 Present. Used for invalidate generation */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_shubs_present2_u { - mmr_t sh_shubs_present2_regval; - struct { - mmr_t shubs_present2 : 64; - } sh_shubs_present2_s; -} sh_shubs_present2_u_t; -#else typedef union sh_shubs_present2_u { mmr_t sh_shubs_present2_regval; struct { mmr_t shubs_present2 : 64; } sh_shubs_present2_s; } sh_shubs_present2_u_t; -#endif /* ==================================================================== */ /* Register "SH_SHUBS_PRESENT3" */ /* Shubs 192 - 255 Present. Used for invalidate generation */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_shubs_present3_u { mmr_t sh_shubs_present3_regval; struct { mmr_t shubs_present3 : 64; } sh_shubs_present3_s; } sh_shubs_present3_u_t; -#else -typedef union sh_shubs_present3_u { - mmr_t sh_shubs_present3_regval; - struct { - mmr_t shubs_present3 : 64; - } sh_shubs_present3_s; -} sh_shubs_present3_u_t; -#endif /* ==================================================================== */ /* Register "SH_SOFT_RESET" */ /* SHub Soft Reset */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_soft_reset_u { mmr_t sh_soft_reset_regval; struct { @@ -19725,22 +10608,12 @@ typedef union sh_soft_reset_u { mmr_t reserved_0 : 63; } sh_soft_reset_s; } sh_soft_reset_u_t; -#else -typedef union sh_soft_reset_u { - mmr_t sh_soft_reset_regval; - struct { - mmr_t reserved_0 : 63; - mmr_t soft_reset : 1; - } sh_soft_reset_s; -} sh_soft_reset_u_t; -#endif /* ==================================================================== */ /* Register "SH_FIRST_ERROR" */ /* Shub Global First Error Flags */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_first_error_u { mmr_t sh_first_error_regval; struct { @@ -19748,22 +10621,12 @@ typedef union sh_first_error_u { mmr_t reserved_0 : 45; } sh_first_error_s; } sh_first_error_u_t; -#else -typedef union sh_first_error_u { - mmr_t sh_first_error_regval; - struct { - mmr_t reserved_0 : 45; - mmr_t first_error : 19; - } sh_first_error_s; -} sh_first_error_u_t; -#endif /* ==================================================================== */ /* Register "SH_II_HW_TIME_STAMP" */ /* II hardware error time stamp */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ii_hw_time_stamp_u { mmr_t sh_ii_hw_time_stamp_regval; struct { @@ -19771,22 +10634,12 @@ typedef union sh_ii_hw_time_stamp_u { mmr_t valid : 1; } sh_ii_hw_time_stamp_s; } sh_ii_hw_time_stamp_u_t; -#else -typedef union sh_ii_hw_time_stamp_u { - mmr_t sh_ii_hw_time_stamp_regval; - struct { - mmr_t valid : 1; - mmr_t time : 63; - } sh_ii_hw_time_stamp_s; -} sh_ii_hw_time_stamp_u_t; -#endif /* ==================================================================== */ /* Register "SH_LB_HW_TIME_STAMP" */ /* LB hardware error time stamp */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_lb_hw_time_stamp_u { mmr_t sh_lb_hw_time_stamp_regval; struct { @@ -19794,22 +10647,12 @@ typedef union sh_lb_hw_time_stamp_u { mmr_t valid : 1; } sh_lb_hw_time_stamp_s; } sh_lb_hw_time_stamp_u_t; -#else -typedef union sh_lb_hw_time_stamp_u { - mmr_t sh_lb_hw_time_stamp_regval; - struct { - mmr_t valid : 1; - mmr_t time : 63; - } sh_lb_hw_time_stamp_s; -} sh_lb_hw_time_stamp_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_COR_TIME_STAMP" */ /* MD correctable error time stamp */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_cor_time_stamp_u { mmr_t sh_md_cor_time_stamp_regval; struct { @@ -19817,22 +10660,12 @@ typedef union sh_md_cor_time_stamp_u { mmr_t valid : 1; } sh_md_cor_time_stamp_s; } sh_md_cor_time_stamp_u_t; -#else -typedef union sh_md_cor_time_stamp_u { - mmr_t sh_md_cor_time_stamp_regval; - struct { - mmr_t valid : 1; - mmr_t time : 63; - } sh_md_cor_time_stamp_s; -} sh_md_cor_time_stamp_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_HW_TIME_STAMP" */ /* MD hardware error time stamp */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_hw_time_stamp_u { mmr_t sh_md_hw_time_stamp_regval; struct { @@ -19840,22 +10673,12 @@ typedef union sh_md_hw_time_stamp_u { mmr_t valid : 1; } sh_md_hw_time_stamp_s; } sh_md_hw_time_stamp_u_t; -#else -typedef union sh_md_hw_time_stamp_u { - mmr_t sh_md_hw_time_stamp_regval; - struct { - mmr_t valid : 1; - mmr_t time : 63; - } sh_md_hw_time_stamp_s; -} sh_md_hw_time_stamp_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_UNCOR_TIME_STAMP" */ /* MD uncorrectable error time stamp */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_uncor_time_stamp_u { mmr_t sh_md_uncor_time_stamp_regval; struct { @@ -19863,22 +10686,12 @@ typedef union sh_md_uncor_time_stamp_u { mmr_t valid : 1; } sh_md_uncor_time_stamp_s; } sh_md_uncor_time_stamp_u_t; -#else -typedef union sh_md_uncor_time_stamp_u { - mmr_t sh_md_uncor_time_stamp_regval; - struct { - mmr_t valid : 1; - mmr_t time : 63; - } sh_md_uncor_time_stamp_s; -} sh_md_uncor_time_stamp_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_COR_TIME_STAMP" */ /* PI correctable error time stamp */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_cor_time_stamp_u { mmr_t sh_pi_cor_time_stamp_regval; struct { @@ -19886,22 +10699,12 @@ typedef union sh_pi_cor_time_stamp_u { mmr_t valid : 1; } sh_pi_cor_time_stamp_s; } sh_pi_cor_time_stamp_u_t; -#else -typedef union sh_pi_cor_time_stamp_u { - mmr_t sh_pi_cor_time_stamp_regval; - struct { - mmr_t valid : 1; - mmr_t time : 63; - } sh_pi_cor_time_stamp_s; -} sh_pi_cor_time_stamp_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_HW_TIME_STAMP" */ /* PI hardware error time stamp */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_hw_time_stamp_u { mmr_t sh_pi_hw_time_stamp_regval; struct { @@ -19909,22 +10712,12 @@ typedef union sh_pi_hw_time_stamp_u { mmr_t valid : 1; } sh_pi_hw_time_stamp_s; } sh_pi_hw_time_stamp_u_t; -#else -typedef union sh_pi_hw_time_stamp_u { - mmr_t sh_pi_hw_time_stamp_regval; - struct { - mmr_t valid : 1; - mmr_t time : 63; - } sh_pi_hw_time_stamp_s; -} sh_pi_hw_time_stamp_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_UNCOR_TIME_STAMP" */ /* PI uncorrectable error time stamp */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_uncor_time_stamp_u { mmr_t sh_pi_uncor_time_stamp_regval; struct { @@ -19932,22 +10725,12 @@ typedef union sh_pi_uncor_time_stamp_u { mmr_t valid : 1; } sh_pi_uncor_time_stamp_s; } sh_pi_uncor_time_stamp_u_t; -#else -typedef union sh_pi_uncor_time_stamp_u { - mmr_t sh_pi_uncor_time_stamp_regval; - struct { - mmr_t valid : 1; - mmr_t time : 63; - } sh_pi_uncor_time_stamp_s; -} sh_pi_uncor_time_stamp_u_t; -#endif /* ==================================================================== */ /* Register "SH_PROC0_ADV_TIME_STAMP" */ /* Proc 0 advisory time stamp */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_proc0_adv_time_stamp_u { mmr_t sh_proc0_adv_time_stamp_regval; struct { @@ -19955,22 +10738,12 @@ typedef union sh_proc0_adv_time_stamp_u mmr_t valid : 1; } sh_proc0_adv_time_stamp_s; } sh_proc0_adv_time_stamp_u_t; -#else -typedef union sh_proc0_adv_time_stamp_u { - mmr_t sh_proc0_adv_time_stamp_regval; - struct { - mmr_t valid : 1; - mmr_t time : 63; - } sh_proc0_adv_time_stamp_s; -} sh_proc0_adv_time_stamp_u_t; -#endif /* ==================================================================== */ /* Register "SH_PROC0_ERR_TIME_STAMP" */ /* Proc 0 error time stamp */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_proc0_err_time_stamp_u { mmr_t sh_proc0_err_time_stamp_regval; struct { @@ -19978,22 +10751,12 @@ typedef union sh_proc0_err_time_stamp_u mmr_t valid : 1; } sh_proc0_err_time_stamp_s; } sh_proc0_err_time_stamp_u_t; -#else -typedef union sh_proc0_err_time_stamp_u { - mmr_t sh_proc0_err_time_stamp_regval; - struct { - mmr_t valid : 1; - mmr_t time : 63; - } sh_proc0_err_time_stamp_s; -} sh_proc0_err_time_stamp_u_t; -#endif /* ==================================================================== */ /* Register "SH_PROC1_ADV_TIME_STAMP" */ /* Proc 1 advisory time stamp */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_proc1_adv_time_stamp_u { mmr_t sh_proc1_adv_time_stamp_regval; struct { @@ -20001,22 +10764,12 @@ typedef union sh_proc1_adv_time_stamp_u mmr_t valid : 1; } sh_proc1_adv_time_stamp_s; } sh_proc1_adv_time_stamp_u_t; -#else -typedef union sh_proc1_adv_time_stamp_u { - mmr_t sh_proc1_adv_time_stamp_regval; - struct { - mmr_t valid : 1; - mmr_t time : 63; - } sh_proc1_adv_time_stamp_s; -} sh_proc1_adv_time_stamp_u_t; -#endif /* ==================================================================== */ /* Register "SH_PROC1_ERR_TIME_STAMP" */ /* Proc 1 error time stamp */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_proc1_err_time_stamp_u { mmr_t sh_proc1_err_time_stamp_regval; struct { @@ -20024,22 +10777,12 @@ typedef union sh_proc1_err_time_stamp_u mmr_t valid : 1; } sh_proc1_err_time_stamp_s; } sh_proc1_err_time_stamp_u_t; -#else -typedef union sh_proc1_err_time_stamp_u { - mmr_t sh_proc1_err_time_stamp_regval; - struct { - mmr_t valid : 1; - mmr_t time : 63; - } sh_proc1_err_time_stamp_s; -} sh_proc1_err_time_stamp_u_t; -#endif /* ==================================================================== */ /* Register "SH_PROC2_ADV_TIME_STAMP" */ /* Proc 2 advisory time stamp */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_proc2_adv_time_stamp_u { mmr_t sh_proc2_adv_time_stamp_regval; struct { @@ -20047,22 +10790,12 @@ typedef union sh_proc2_adv_time_stamp_u mmr_t valid : 1; } sh_proc2_adv_time_stamp_s; } sh_proc2_adv_time_stamp_u_t; -#else -typedef union sh_proc2_adv_time_stamp_u { - mmr_t sh_proc2_adv_time_stamp_regval; - struct { - mmr_t valid : 1; - mmr_t time : 63; - } sh_proc2_adv_time_stamp_s; -} sh_proc2_adv_time_stamp_u_t; -#endif /* ==================================================================== */ /* Register "SH_PROC2_ERR_TIME_STAMP" */ /* Proc 2 error time stamp */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_proc2_err_time_stamp_u { mmr_t sh_proc2_err_time_stamp_regval; struct { @@ -20070,22 +10803,12 @@ typedef union sh_proc2_err_time_stamp_u mmr_t valid : 1; } sh_proc2_err_time_stamp_s; } sh_proc2_err_time_stamp_u_t; -#else -typedef union sh_proc2_err_time_stamp_u { - mmr_t sh_proc2_err_time_stamp_regval; - struct { - mmr_t valid : 1; - mmr_t time : 63; - } sh_proc2_err_time_stamp_s; -} sh_proc2_err_time_stamp_u_t; -#endif /* ==================================================================== */ /* Register "SH_PROC3_ADV_TIME_STAMP" */ /* Proc 3 advisory time stamp */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_proc3_adv_time_stamp_u { mmr_t sh_proc3_adv_time_stamp_regval; struct { @@ -20093,22 +10816,12 @@ typedef union sh_proc3_adv_time_stamp_u mmr_t valid : 1; } sh_proc3_adv_time_stamp_s; } sh_proc3_adv_time_stamp_u_t; -#else -typedef union sh_proc3_adv_time_stamp_u { - mmr_t sh_proc3_adv_time_stamp_regval; - struct { - mmr_t valid : 1; - mmr_t time : 63; - } sh_proc3_adv_time_stamp_s; -} sh_proc3_adv_time_stamp_u_t; -#endif /* ==================================================================== */ /* Register "SH_PROC3_ERR_TIME_STAMP" */ /* Proc 3 error time stamp */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_proc3_err_time_stamp_u { mmr_t sh_proc3_err_time_stamp_regval; struct { @@ -20116,22 +10829,12 @@ typedef union sh_proc3_err_time_stamp_u mmr_t valid : 1; } sh_proc3_err_time_stamp_s; } sh_proc3_err_time_stamp_u_t; -#else -typedef union sh_proc3_err_time_stamp_u { - mmr_t sh_proc3_err_time_stamp_regval; - struct { - mmr_t valid : 1; - mmr_t time : 63; - } sh_proc3_err_time_stamp_s; -} sh_proc3_err_time_stamp_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_COR_TIME_STAMP" */ /* XN correctable error time stamp */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_cor_time_stamp_u { mmr_t sh_xn_cor_time_stamp_regval; struct { @@ -20139,22 +10842,12 @@ typedef union sh_xn_cor_time_stamp_u { mmr_t valid : 1; } sh_xn_cor_time_stamp_s; } sh_xn_cor_time_stamp_u_t; -#else -typedef union sh_xn_cor_time_stamp_u { - mmr_t sh_xn_cor_time_stamp_regval; - struct { - mmr_t valid : 1; - mmr_t time : 63; - } sh_xn_cor_time_stamp_s; -} sh_xn_cor_time_stamp_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_HW_TIME_STAMP" */ /* XN hardware error time stamp */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_hw_time_stamp_u { mmr_t sh_xn_hw_time_stamp_regval; struct { @@ -20162,22 +10855,12 @@ typedef union sh_xn_hw_time_stamp_u { mmr_t valid : 1; } sh_xn_hw_time_stamp_s; } sh_xn_hw_time_stamp_u_t; -#else -typedef union sh_xn_hw_time_stamp_u { - mmr_t sh_xn_hw_time_stamp_regval; - struct { - mmr_t valid : 1; - mmr_t time : 63; - } sh_xn_hw_time_stamp_s; -} sh_xn_hw_time_stamp_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_UNCOR_TIME_STAMP" */ /* XN uncorrectable error time stamp */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_uncor_time_stamp_u { mmr_t sh_xn_uncor_time_stamp_regval; struct { @@ -20185,22 +10868,12 @@ typedef union sh_xn_uncor_time_stamp_u { mmr_t valid : 1; } sh_xn_uncor_time_stamp_s; } sh_xn_uncor_time_stamp_u_t; -#else -typedef union sh_xn_uncor_time_stamp_u { - mmr_t sh_xn_uncor_time_stamp_regval; - struct { - mmr_t valid : 1; - mmr_t time : 63; - } sh_xn_uncor_time_stamp_s; -} sh_xn_uncor_time_stamp_u_t; -#endif /* ==================================================================== */ /* Register "SH_DEBUG_PORT" */ /* SHub Debug Port */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_debug_port_u { mmr_t sh_debug_port_regval; struct { @@ -20215,52 +10888,25 @@ typedef union sh_debug_port_u { mmr_t reserved_0 : 32; } sh_debug_port_s; } sh_debug_port_u_t; -#else -typedef union sh_debug_port_u { - mmr_t sh_debug_port_regval; - struct { - mmr_t reserved_0 : 32; - mmr_t debug_nibble7 : 4; - mmr_t debug_nibble6 : 4; - mmr_t debug_nibble5 : 4; - mmr_t debug_nibble4 : 4; - mmr_t debug_nibble3 : 4; - mmr_t debug_nibble2 : 4; - mmr_t debug_nibble1 : 4; - mmr_t debug_nibble0 : 4; - } sh_debug_port_s; -} sh_debug_port_u_t; -#endif /* ==================================================================== */ /* Register "SH_II_DEBUG_DATA" */ /* II Debug Data */ -/* ==================================================================== */ - -#ifdef LITTLE_ENDIAN -typedef union sh_ii_debug_data_u { - mmr_t sh_ii_debug_data_regval; - struct { - mmr_t ii_data : 32; - mmr_t reserved_0 : 32; - } sh_ii_debug_data_s; -} sh_ii_debug_data_u_t; -#else +/* ==================================================================== */ + typedef union sh_ii_debug_data_u { mmr_t sh_ii_debug_data_regval; struct { - mmr_t reserved_0 : 32; mmr_t ii_data : 32; + mmr_t reserved_0 : 32; } sh_ii_debug_data_s; } sh_ii_debug_data_u_t; -#endif /* ==================================================================== */ /* Register "SH_II_WRAP_DEBUG_DATA" */ /* SHub II Wrapper Debug Data */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ii_wrap_debug_data_u { mmr_t sh_ii_wrap_debug_data_regval; struct { @@ -20268,22 +10914,12 @@ typedef union sh_ii_wrap_debug_data_u { mmr_t reserved_0 : 32; } sh_ii_wrap_debug_data_s; } sh_ii_wrap_debug_data_u_t; -#else -typedef union sh_ii_wrap_debug_data_u { - mmr_t sh_ii_wrap_debug_data_regval; - struct { - mmr_t reserved_0 : 32; - mmr_t ii_wrap_data : 32; - } sh_ii_wrap_debug_data_s; -} sh_ii_wrap_debug_data_u_t; -#endif /* ==================================================================== */ /* Register "SH_LB_DEBUG_DATA" */ /* SHub LB Debug Data */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_lb_debug_data_u { mmr_t sh_lb_debug_data_regval; struct { @@ -20291,22 +10927,12 @@ typedef union sh_lb_debug_data_u { mmr_t reserved_0 : 32; } sh_lb_debug_data_s; } sh_lb_debug_data_u_t; -#else -typedef union sh_lb_debug_data_u { - mmr_t sh_lb_debug_data_regval; - struct { - mmr_t reserved_0 : 32; - mmr_t lb_data : 32; - } sh_lb_debug_data_s; -} sh_lb_debug_data_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DEBUG_DATA" */ /* SHub MD Debug Data */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_debug_data_u { mmr_t sh_md_debug_data_regval; struct { @@ -20314,22 +10940,12 @@ typedef union sh_md_debug_data_u { mmr_t reserved_0 : 32; } sh_md_debug_data_s; } sh_md_debug_data_u_t; -#else -typedef union sh_md_debug_data_u { - mmr_t sh_md_debug_data_regval; - struct { - mmr_t reserved_0 : 32; - mmr_t md_data : 32; - } sh_md_debug_data_s; -} sh_md_debug_data_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_DEBUG_DATA" */ /* SHub PI Debug Data */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_debug_data_u { mmr_t sh_pi_debug_data_regval; struct { @@ -20337,22 +10953,12 @@ typedef union sh_pi_debug_data_u { mmr_t reserved_0 : 32; } sh_pi_debug_data_s; } sh_pi_debug_data_u_t; -#else -typedef union sh_pi_debug_data_u { - mmr_t sh_pi_debug_data_regval; - struct { - mmr_t reserved_0 : 32; - mmr_t pi_data : 32; - } sh_pi_debug_data_s; -} sh_pi_debug_data_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_DEBUG_DATA" */ /* SHub XN Debug Data */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_debug_data_u { mmr_t sh_xn_debug_data_regval; struct { @@ -20360,22 +10966,12 @@ typedef union sh_xn_debug_data_u { mmr_t reserved_0 : 32; } sh_xn_debug_data_s; } sh_xn_debug_data_u_t; -#else -typedef union sh_xn_debug_data_u { - mmr_t sh_xn_debug_data_regval; - struct { - mmr_t reserved_0 : 32; - mmr_t xn_data : 32; - } sh_xn_debug_data_s; -} sh_xn_debug_data_u_t; -#endif /* ==================================================================== */ /* Register "SH_TSF_ARMED_STATE" */ /* Trigger sequencing facility arm state */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_tsf_armed_state_u { mmr_t sh_tsf_armed_state_regval; struct { @@ -20383,22 +10979,12 @@ typedef union sh_tsf_armed_state_u { mmr_t reserved_0 : 56; } sh_tsf_armed_state_s; } sh_tsf_armed_state_u_t; -#else -typedef union sh_tsf_armed_state_u { - mmr_t sh_tsf_armed_state_regval; - struct { - mmr_t reserved_0 : 56; - mmr_t state : 8; - } sh_tsf_armed_state_s; -} sh_tsf_armed_state_u_t; -#endif /* ==================================================================== */ /* Register "SH_TSF_COUNTER_VALUE" */ /* Trigger sequencing facility counter value */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_tsf_counter_value_u { mmr_t sh_tsf_counter_value_regval; struct { @@ -20408,24 +10994,12 @@ typedef union sh_tsf_counter_value_u { mmr_t count_8a : 8; } sh_tsf_counter_value_s; } sh_tsf_counter_value_u_t; -#else -typedef union sh_tsf_counter_value_u { - mmr_t sh_tsf_counter_value_regval; - struct { - mmr_t count_8a : 8; - mmr_t count_8b : 8; - mmr_t count_16 : 16; - mmr_t count_32 : 32; - } sh_tsf_counter_value_s; -} sh_tsf_counter_value_u_t; -#endif /* ==================================================================== */ /* Register "SH_TSF_TRIGGERED_STATE" */ /* Trigger sequencing facility triggered state */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_tsf_triggered_state_u { mmr_t sh_tsf_triggered_state_regval; struct { @@ -20433,64 +11007,36 @@ typedef union sh_tsf_triggered_state_u { mmr_t reserved_0 : 56; } sh_tsf_triggered_state_s; } sh_tsf_triggered_state_u_t; -#else -typedef union sh_tsf_triggered_state_u { - mmr_t sh_tsf_triggered_state_regval; - struct { - mmr_t reserved_0 : 56; - mmr_t state : 8; - } sh_tsf_triggered_state_s; -} sh_tsf_triggered_state_u_t; -#endif /* ==================================================================== */ /* Register "SH_VEC_RDDATA" */ /* Vector Reply Message Data */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_vec_rddata_u { - mmr_t sh_vec_rddata_regval; - struct { - mmr_t data : 64; - } sh_vec_rddata_s; -} sh_vec_rddata_u_t; -#else typedef union sh_vec_rddata_u { mmr_t sh_vec_rddata_regval; struct { mmr_t data : 64; } sh_vec_rddata_s; } sh_vec_rddata_u_t; -#endif /* ==================================================================== */ /* Register "SH_VEC_RETURN" */ /* Vector Reply Message Return Route */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_vec_return_u { - mmr_t sh_vec_return_regval; - struct { - mmr_t route : 64; - } sh_vec_return_s; -} sh_vec_return_u_t; -#else typedef union sh_vec_return_u { mmr_t sh_vec_return_regval; struct { mmr_t route : 64; } sh_vec_return_s; } sh_vec_return_u_t; -#endif /* ==================================================================== */ /* Register "SH_VEC_STATUS" */ /* Vector Reply Message Status */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_vec_status_u { mmr_t sh_vec_status_regval; struct { @@ -20503,27 +11049,12 @@ typedef union sh_vec_status_u { mmr_t status_valid : 1; } sh_vec_status_s; } sh_vec_status_u_t; -#else -typedef union sh_vec_status_u { - mmr_t sh_vec_status_regval; - struct { - mmr_t status_valid : 1; - mmr_t overrun : 1; - mmr_t reserved_0 : 2; - mmr_t source : 14; - mmr_t pio_id : 11; - mmr_t address : 32; - mmr_t type : 3; - } sh_vec_status_s; -} sh_vec_status_u_t; -#endif /* ==================================================================== */ /* Register "SH_PERFORMANCE_COUNT0_CONTROL" */ /* Performance Counter 0 Control */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_performance_count0_control_u { mmr_t sh_performance_count0_control_regval; struct { @@ -20541,32 +11072,12 @@ typedef union sh_performance_count0_cont mmr_t reserved_0 : 45; } sh_performance_count0_control_s; } sh_performance_count0_control_u_t; -#else -typedef union sh_performance_count0_control_u { - mmr_t sh_performance_count0_control_regval; - struct { - mmr_t reserved_0 : 45; - mmr_t peak_det_enable : 1; - mmr_t dec_enable : 1; - mmr_t inc_enable : 1; - mmr_t dn_mode : 1; - mmr_t dn_polarity : 1; - mmr_t dn_event : 1; - mmr_t dn_stimulus : 5; - mmr_t up_mode : 1; - mmr_t up_polarity : 1; - mmr_t up_event : 1; - mmr_t up_stimulus : 5; - } sh_performance_count0_control_s; -} sh_performance_count0_control_u_t; -#endif /* ==================================================================== */ /* Register "SH_PERFORMANCE_COUNT1_CONTROL" */ /* Performance Counter 1 Control */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_performance_count1_control_u { mmr_t sh_performance_count1_control_regval; struct { @@ -20584,32 +11095,12 @@ typedef union sh_performance_count1_cont mmr_t reserved_0 : 45; } sh_performance_count1_control_s; } sh_performance_count1_control_u_t; -#else -typedef union sh_performance_count1_control_u { - mmr_t sh_performance_count1_control_regval; - struct { - mmr_t reserved_0 : 45; - mmr_t peak_det_enable : 1; - mmr_t dec_enable : 1; - mmr_t inc_enable : 1; - mmr_t dn_mode : 1; - mmr_t dn_polarity : 1; - mmr_t dn_event : 1; - mmr_t dn_stimulus : 5; - mmr_t up_mode : 1; - mmr_t up_polarity : 1; - mmr_t up_event : 1; - mmr_t up_stimulus : 5; - } sh_performance_count1_control_s; -} sh_performance_count1_control_u_t; -#endif /* ==================================================================== */ /* Register "SH_PERFORMANCE_COUNT2_CONTROL" */ /* Performance Counter 2 Control */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_performance_count2_control_u { mmr_t sh_performance_count2_control_regval; struct { @@ -20627,32 +11118,12 @@ typedef union sh_performance_count2_cont mmr_t reserved_0 : 45; } sh_performance_count2_control_s; } sh_performance_count2_control_u_t; -#else -typedef union sh_performance_count2_control_u { - mmr_t sh_performance_count2_control_regval; - struct { - mmr_t reserved_0 : 45; - mmr_t peak_det_enable : 1; - mmr_t dec_enable : 1; - mmr_t inc_enable : 1; - mmr_t dn_mode : 1; - mmr_t dn_polarity : 1; - mmr_t dn_event : 1; - mmr_t dn_stimulus : 5; - mmr_t up_mode : 1; - mmr_t up_polarity : 1; - mmr_t up_event : 1; - mmr_t up_stimulus : 5; - } sh_performance_count2_control_s; -} sh_performance_count2_control_u_t; -#endif /* ==================================================================== */ /* Register "SH_PERFORMANCE_COUNT3_CONTROL" */ /* Performance Counter 3 Control */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_performance_count3_control_u { mmr_t sh_performance_count3_control_regval; struct { @@ -20670,32 +11141,12 @@ typedef union sh_performance_count3_cont mmr_t reserved_0 : 45; } sh_performance_count3_control_s; } sh_performance_count3_control_u_t; -#else -typedef union sh_performance_count3_control_u { - mmr_t sh_performance_count3_control_regval; - struct { - mmr_t reserved_0 : 45; - mmr_t peak_det_enable : 1; - mmr_t dec_enable : 1; - mmr_t inc_enable : 1; - mmr_t dn_mode : 1; - mmr_t dn_polarity : 1; - mmr_t dn_event : 1; - mmr_t dn_stimulus : 5; - mmr_t up_mode : 1; - mmr_t up_polarity : 1; - mmr_t up_event : 1; - mmr_t up_stimulus : 5; - } sh_performance_count3_control_s; -} sh_performance_count3_control_u_t; -#endif /* ==================================================================== */ /* Register "SH_PERFORMANCE_COUNT4_CONTROL" */ /* Performance Counter 4 Control */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_performance_count4_control_u { mmr_t sh_performance_count4_control_regval; struct { @@ -20713,32 +11164,12 @@ typedef union sh_performance_count4_cont mmr_t reserved_0 : 45; } sh_performance_count4_control_s; } sh_performance_count4_control_u_t; -#else -typedef union sh_performance_count4_control_u { - mmr_t sh_performance_count4_control_regval; - struct { - mmr_t reserved_0 : 45; - mmr_t peak_det_enable : 1; - mmr_t dec_enable : 1; - mmr_t inc_enable : 1; - mmr_t dn_mode : 1; - mmr_t dn_polarity : 1; - mmr_t dn_event : 1; - mmr_t dn_stimulus : 5; - mmr_t up_mode : 1; - mmr_t up_polarity : 1; - mmr_t up_event : 1; - mmr_t up_stimulus : 5; - } sh_performance_count4_control_s; -} sh_performance_count4_control_u_t; -#endif /* ==================================================================== */ /* Register "SH_PERFORMANCE_COUNT5_CONTROL" */ /* Performance Counter 5 Control */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_performance_count5_control_u { mmr_t sh_performance_count5_control_regval; struct { @@ -20756,32 +11187,12 @@ typedef union sh_performance_count5_cont mmr_t reserved_0 : 45; } sh_performance_count5_control_s; } sh_performance_count5_control_u_t; -#else -typedef union sh_performance_count5_control_u { - mmr_t sh_performance_count5_control_regval; - struct { - mmr_t reserved_0 : 45; - mmr_t peak_det_enable : 1; - mmr_t dec_enable : 1; - mmr_t inc_enable : 1; - mmr_t dn_mode : 1; - mmr_t dn_polarity : 1; - mmr_t dn_event : 1; - mmr_t dn_stimulus : 5; - mmr_t up_mode : 1; - mmr_t up_polarity : 1; - mmr_t up_event : 1; - mmr_t up_stimulus : 5; - } sh_performance_count5_control_s; -} sh_performance_count5_control_u_t; -#endif /* ==================================================================== */ /* Register "SH_PERFORMANCE_COUNT6_CONTROL" */ /* Performance Counter 6 Control */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_performance_count6_control_u { mmr_t sh_performance_count6_control_regval; struct { @@ -20799,32 +11210,12 @@ typedef union sh_performance_count6_cont mmr_t reserved_0 : 45; } sh_performance_count6_control_s; } sh_performance_count6_control_u_t; -#else -typedef union sh_performance_count6_control_u { - mmr_t sh_performance_count6_control_regval; - struct { - mmr_t reserved_0 : 45; - mmr_t peak_det_enable : 1; - mmr_t dec_enable : 1; - mmr_t inc_enable : 1; - mmr_t dn_mode : 1; - mmr_t dn_polarity : 1; - mmr_t dn_event : 1; - mmr_t dn_stimulus : 5; - mmr_t up_mode : 1; - mmr_t up_polarity : 1; - mmr_t up_event : 1; - mmr_t up_stimulus : 5; - } sh_performance_count6_control_s; -} sh_performance_count6_control_u_t; -#endif /* ==================================================================== */ /* Register "SH_PERFORMANCE_COUNT7_CONTROL" */ /* Performance Counter 7 Control */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_performance_count7_control_u { mmr_t sh_performance_count7_control_regval; struct { @@ -20842,32 +11233,12 @@ typedef union sh_performance_count7_cont mmr_t reserved_0 : 45; } sh_performance_count7_control_s; } sh_performance_count7_control_u_t; -#else -typedef union sh_performance_count7_control_u { - mmr_t sh_performance_count7_control_regval; - struct { - mmr_t reserved_0 : 45; - mmr_t peak_det_enable : 1; - mmr_t dec_enable : 1; - mmr_t inc_enable : 1; - mmr_t dn_mode : 1; - mmr_t dn_polarity : 1; - mmr_t dn_event : 1; - mmr_t dn_stimulus : 5; - mmr_t up_mode : 1; - mmr_t up_polarity : 1; - mmr_t up_event : 1; - mmr_t up_stimulus : 5; - } sh_performance_count7_control_s; -} sh_performance_count7_control_u_t; -#endif /* ==================================================================== */ /* Register "SH_PROFILE_DN_CONTROL" */ /* Profile Counter Down Control */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_profile_dn_control_u { mmr_t sh_profile_dn_control_regval; struct { @@ -20878,25 +11249,12 @@ typedef union sh_profile_dn_control_u { mmr_t reserved_0 : 56; } sh_profile_dn_control_s; } sh_profile_dn_control_u_t; -#else -typedef union sh_profile_dn_control_u { - mmr_t sh_profile_dn_control_regval; - struct { - mmr_t reserved_0 : 56; - mmr_t mode : 1; - mmr_t polarity : 1; - mmr_t event : 1; - mmr_t stimulus : 5; - } sh_profile_dn_control_s; -} sh_profile_dn_control_u_t; -#endif /* ==================================================================== */ /* Register "SH_PROFILE_PEAK_CONTROL" */ /* Profile Counter Peak Control */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_profile_peak_control_u { mmr_t sh_profile_peak_control_regval; struct { @@ -20908,26 +11266,12 @@ typedef union sh_profile_peak_control_u mmr_t reserved_2 : 57; } sh_profile_peak_control_s; } sh_profile_peak_control_u_t; -#else -typedef union sh_profile_peak_control_u { - mmr_t sh_profile_peak_control_regval; - struct { - mmr_t reserved_2 : 57; - mmr_t polarity : 1; - mmr_t event : 1; - mmr_t reserved_1 : 1; - mmr_t stimulus : 1; - mmr_t reserved_0 : 3; - } sh_profile_peak_control_s; -} sh_profile_peak_control_u_t; -#endif /* ==================================================================== */ /* Register "SH_PROFILE_RANGE" */ /* Profile Counter Range */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_profile_range_u { mmr_t sh_profile_range_regval; struct { @@ -20941,28 +11285,12 @@ typedef union sh_profile_range_u { mmr_t range7 : 8; } sh_profile_range_s; } sh_profile_range_u_t; -#else -typedef union sh_profile_range_u { - mmr_t sh_profile_range_regval; - struct { - mmr_t range7 : 8; - mmr_t range6 : 8; - mmr_t range5 : 8; - mmr_t range4 : 8; - mmr_t range3 : 8; - mmr_t range2 : 8; - mmr_t range1 : 8; - mmr_t range0 : 8; - } sh_profile_range_s; -} sh_profile_range_u_t; -#endif /* ==================================================================== */ /* Register "SH_PROFILE_UP_CONTROL" */ /* Profile Counter Up Control */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_profile_up_control_u { mmr_t sh_profile_up_control_regval; struct { @@ -20973,25 +11301,12 @@ typedef union sh_profile_up_control_u { mmr_t reserved_0 : 56; } sh_profile_up_control_s; } sh_profile_up_control_u_t; -#else -typedef union sh_profile_up_control_u { - mmr_t sh_profile_up_control_regval; - struct { - mmr_t reserved_0 : 56; - mmr_t mode : 1; - mmr_t polarity : 1; - mmr_t event : 1; - mmr_t stimulus : 5; - } sh_profile_up_control_s; -} sh_profile_up_control_u_t; -#endif /* ==================================================================== */ /* Register "SH_PERFORMANCE_COUNTER0" */ /* Performance Counter 0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_performance_counter0_u { mmr_t sh_performance_counter0_regval; struct { @@ -20999,22 +11314,12 @@ typedef union sh_performance_counter0_u mmr_t reserved_0 : 32; } sh_performance_counter0_s; } sh_performance_counter0_u_t; -#else -typedef union sh_performance_counter0_u { - mmr_t sh_performance_counter0_regval; - struct { - mmr_t reserved_0 : 32; - mmr_t count : 32; - } sh_performance_counter0_s; -} sh_performance_counter0_u_t; -#endif /* ==================================================================== */ /* Register "SH_PERFORMANCE_COUNTER1" */ /* Performance Counter 1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_performance_counter1_u { mmr_t sh_performance_counter1_regval; struct { @@ -21022,22 +11327,12 @@ typedef union sh_performance_counter1_u mmr_t reserved_0 : 32; } sh_performance_counter1_s; } sh_performance_counter1_u_t; -#else -typedef union sh_performance_counter1_u { - mmr_t sh_performance_counter1_regval; - struct { - mmr_t reserved_0 : 32; - mmr_t count : 32; - } sh_performance_counter1_s; -} sh_performance_counter1_u_t; -#endif /* ==================================================================== */ /* Register "SH_PERFORMANCE_COUNTER2" */ /* Performance Counter 2 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_performance_counter2_u { mmr_t sh_performance_counter2_regval; struct { @@ -21045,22 +11340,12 @@ typedef union sh_performance_counter2_u mmr_t reserved_0 : 32; } sh_performance_counter2_s; } sh_performance_counter2_u_t; -#else -typedef union sh_performance_counter2_u { - mmr_t sh_performance_counter2_regval; - struct { - mmr_t reserved_0 : 32; - mmr_t count : 32; - } sh_performance_counter2_s; -} sh_performance_counter2_u_t; -#endif /* ==================================================================== */ /* Register "SH_PERFORMANCE_COUNTER3" */ /* Performance Counter 3 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_performance_counter3_u { mmr_t sh_performance_counter3_regval; struct { @@ -21068,22 +11353,12 @@ typedef union sh_performance_counter3_u mmr_t reserved_0 : 32; } sh_performance_counter3_s; } sh_performance_counter3_u_t; -#else -typedef union sh_performance_counter3_u { - mmr_t sh_performance_counter3_regval; - struct { - mmr_t reserved_0 : 32; - mmr_t count : 32; - } sh_performance_counter3_s; -} sh_performance_counter3_u_t; -#endif /* ==================================================================== */ /* Register "SH_PERFORMANCE_COUNTER4" */ /* Performance Counter 4 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_performance_counter4_u { mmr_t sh_performance_counter4_regval; struct { @@ -21091,22 +11366,12 @@ typedef union sh_performance_counter4_u mmr_t reserved_0 : 32; } sh_performance_counter4_s; } sh_performance_counter4_u_t; -#else -typedef union sh_performance_counter4_u { - mmr_t sh_performance_counter4_regval; - struct { - mmr_t reserved_0 : 32; - mmr_t count : 32; - } sh_performance_counter4_s; -} sh_performance_counter4_u_t; -#endif /* ==================================================================== */ /* Register "SH_PERFORMANCE_COUNTER5" */ /* Performance Counter 5 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_performance_counter5_u { mmr_t sh_performance_counter5_regval; struct { @@ -21114,22 +11379,12 @@ typedef union sh_performance_counter5_u mmr_t reserved_0 : 32; } sh_performance_counter5_s; } sh_performance_counter5_u_t; -#else -typedef union sh_performance_counter5_u { - mmr_t sh_performance_counter5_regval; - struct { - mmr_t reserved_0 : 32; - mmr_t count : 32; - } sh_performance_counter5_s; -} sh_performance_counter5_u_t; -#endif /* ==================================================================== */ /* Register "SH_PERFORMANCE_COUNTER6" */ /* Performance Counter 6 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_performance_counter6_u { mmr_t sh_performance_counter6_regval; struct { @@ -21137,22 +11392,12 @@ typedef union sh_performance_counter6_u mmr_t reserved_0 : 32; } sh_performance_counter6_s; } sh_performance_counter6_u_t; -#else -typedef union sh_performance_counter6_u { - mmr_t sh_performance_counter6_regval; - struct { - mmr_t reserved_0 : 32; - mmr_t count : 32; - } sh_performance_counter6_s; -} sh_performance_counter6_u_t; -#endif /* ==================================================================== */ /* Register "SH_PERFORMANCE_COUNTER7" */ /* Performance Counter 7 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_performance_counter7_u { mmr_t sh_performance_counter7_regval; struct { @@ -21160,22 +11405,12 @@ typedef union sh_performance_counter7_u mmr_t reserved_0 : 32; } sh_performance_counter7_s; } sh_performance_counter7_u_t; -#else -typedef union sh_performance_counter7_u { - mmr_t sh_performance_counter7_regval; - struct { - mmr_t reserved_0 : 32; - mmr_t count : 32; - } sh_performance_counter7_s; -} sh_performance_counter7_u_t; -#endif /* ==================================================================== */ /* Register "SH_PROFILE_COUNTER" */ /* Profile Counter */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_profile_counter_u { mmr_t sh_profile_counter_regval; struct { @@ -21183,22 +11418,12 @@ typedef union sh_profile_counter_u { mmr_t reserved_0 : 56; } sh_profile_counter_s; } sh_profile_counter_u_t; -#else -typedef union sh_profile_counter_u { - mmr_t sh_profile_counter_regval; - struct { - mmr_t reserved_0 : 56; - mmr_t counter : 8; - } sh_profile_counter_s; -} sh_profile_counter_u_t; -#endif /* ==================================================================== */ /* Register "SH_PROFILE_PEAK" */ /* Profile Peak Counter */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_profile_peak_u { mmr_t sh_profile_peak_regval; struct { @@ -21206,22 +11431,12 @@ typedef union sh_profile_peak_u { mmr_t reserved_0 : 56; } sh_profile_peak_s; } sh_profile_peak_u_t; -#else -typedef union sh_profile_peak_u { - mmr_t sh_profile_peak_regval; - struct { - mmr_t reserved_0 : 56; - mmr_t counter : 8; - } sh_profile_peak_s; -} sh_profile_peak_u_t; -#endif /* ==================================================================== */ /* Register "SH_PTC_0" */ /* Puge Translation Cache Message Configuration Information */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ptc_0_u { mmr_t sh_ptc_0_regval; struct { @@ -21233,26 +11448,12 @@ typedef union sh_ptc_0_u { mmr_t start : 1; } sh_ptc_0_s; } sh_ptc_0_u_t; -#else -typedef union sh_ptc_0_u { - mmr_t sh_ptc_0_regval; - struct { - mmr_t start : 1; - mmr_t reserved_1 : 31; - mmr_t rid : 24; - mmr_t ps : 6; - mmr_t reserved_0 : 1; - mmr_t a : 1; - } sh_ptc_0_s; -} sh_ptc_0_u_t; -#endif /* ==================================================================== */ /* Register "SH_PTC_1" */ /* Puge Translation Cache Message Configuration Information */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ptc_1_u { mmr_t sh_ptc_1_regval; struct { @@ -21262,24 +11463,12 @@ typedef union sh_ptc_1_u { mmr_t start : 1; } sh_ptc_1_s; } sh_ptc_1_u_t; -#else -typedef union sh_ptc_1_u { - mmr_t sh_ptc_1_regval; - struct { - mmr_t start : 1; - mmr_t reserved_1 : 2; - mmr_t vpn : 49; - mmr_t reserved_0 : 12; - } sh_ptc_1_s; -} sh_ptc_1_u_t; -#endif /* ==================================================================== */ /* Register "SH_PTC_PARMS" */ /* PTC Time-out parmaeters */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_ptc_parms_u { mmr_t sh_ptc_parms_regval; struct { @@ -21288,23 +11477,12 @@ typedef union sh_ptc_parms_u { mmr_t reserved_0 : 28; } sh_ptc_parms_s; } sh_ptc_parms_u_t; -#else -typedef union sh_ptc_parms_u { - mmr_t sh_ptc_parms_regval; - struct { - mmr_t reserved_0 : 28; - mmr_t ptc_to_val : 12; - mmr_t ptc_to_wrap : 24; - } sh_ptc_parms_s; -} sh_ptc_parms_u_t; -#endif /* ==================================================================== */ /* Register "SH_INT_CMPA" */ /* RTC Compare Value for Processor A */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_int_cmpa_u { mmr_t sh_int_cmpa_regval; struct { @@ -21312,22 +11490,12 @@ typedef union sh_int_cmpa_u { mmr_t reserved_0 : 9; } sh_int_cmpa_s; } sh_int_cmpa_u_t; -#else -typedef union sh_int_cmpa_u { - mmr_t sh_int_cmpa_regval; - struct { - mmr_t reserved_0 : 9; - mmr_t real_time_cmpa : 55; - } sh_int_cmpa_s; -} sh_int_cmpa_u_t; -#endif /* ==================================================================== */ /* Register "SH_INT_CMPB" */ /* RTC Compare Value for Processor B */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_int_cmpb_u { mmr_t sh_int_cmpb_regval; struct { @@ -21335,22 +11503,12 @@ typedef union sh_int_cmpb_u { mmr_t reserved_0 : 9; } sh_int_cmpb_s; } sh_int_cmpb_u_t; -#else -typedef union sh_int_cmpb_u { - mmr_t sh_int_cmpb_regval; - struct { - mmr_t reserved_0 : 9; - mmr_t real_time_cmpb : 55; - } sh_int_cmpb_s; -} sh_int_cmpb_u_t; -#endif /* ==================================================================== */ /* Register "SH_INT_CMPC" */ /* RTC Compare Value for Processor C */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_int_cmpc_u { mmr_t sh_int_cmpc_regval; struct { @@ -21358,22 +11516,12 @@ typedef union sh_int_cmpc_u { mmr_t reserved_0 : 9; } sh_int_cmpc_s; } sh_int_cmpc_u_t; -#else -typedef union sh_int_cmpc_u { - mmr_t sh_int_cmpc_regval; - struct { - mmr_t reserved_0 : 9; - mmr_t real_time_cmpc : 55; - } sh_int_cmpc_s; -} sh_int_cmpc_u_t; -#endif /* ==================================================================== */ /* Register "SH_INT_CMPD" */ /* RTC Compare Value for Processor D */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_int_cmpd_u { mmr_t sh_int_cmpd_regval; struct { @@ -21381,22 +11529,12 @@ typedef union sh_int_cmpd_u { mmr_t reserved_0 : 9; } sh_int_cmpd_s; } sh_int_cmpd_u_t; -#else -typedef union sh_int_cmpd_u { - mmr_t sh_int_cmpd_regval; - struct { - mmr_t reserved_0 : 9; - mmr_t real_time_cmpd : 55; - } sh_int_cmpd_s; -} sh_int_cmpd_u_t; -#endif /* ==================================================================== */ /* Register "SH_INT_PROF" */ /* Profile Compare Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_int_prof_u { mmr_t sh_int_prof_regval; struct { @@ -21404,22 +11542,12 @@ typedef union sh_int_prof_u { mmr_t reserved_0 : 32; } sh_int_prof_s; } sh_int_prof_u_t; -#else -typedef union sh_int_prof_u { - mmr_t sh_int_prof_regval; - struct { - mmr_t reserved_0 : 32; - mmr_t profile_compare : 32; - } sh_int_prof_s; -} sh_int_prof_u_t; -#endif /* ==================================================================== */ /* Register "SH_RTC" */ /* Real-time Clock */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_rtc_u { mmr_t sh_rtc_regval; struct { @@ -21427,85 +11555,48 @@ typedef union sh_rtc_u { mmr_t reserved_0 : 9; } sh_rtc_s; } sh_rtc_u_t; -#else -typedef union sh_rtc_u { - mmr_t sh_rtc_regval; - struct { - mmr_t reserved_0 : 9; - mmr_t real_time_clock : 55; - } sh_rtc_s; -} sh_rtc_u_t; -#endif /* ==================================================================== */ /* Register "SH_SCRATCH0" */ /* Scratch Register 0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_scratch0_u { - mmr_t sh_scratch0_regval; - struct { - mmr_t scratch0 : 64; - } sh_scratch0_s; -} sh_scratch0_u_t; -#else typedef union sh_scratch0_u { mmr_t sh_scratch0_regval; struct { mmr_t scratch0 : 64; } sh_scratch0_s; } sh_scratch0_u_t; -#endif /* ==================================================================== */ /* Register "SH_SCRATCH1" */ /* Scratch Register 1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_scratch1_u { - mmr_t sh_scratch1_regval; - struct { - mmr_t scratch1 : 64; - } sh_scratch1_s; -} sh_scratch1_u_t; -#else typedef union sh_scratch1_u { mmr_t sh_scratch1_regval; struct { mmr_t scratch1 : 64; } sh_scratch1_s; } sh_scratch1_u_t; -#endif /* ==================================================================== */ /* Register "SH_SCRATCH2" */ /* Scratch Register 2 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_scratch2_u { - mmr_t sh_scratch2_regval; - struct { - mmr_t scratch2 : 64; - } sh_scratch2_s; -} sh_scratch2_u_t; -#else typedef union sh_scratch2_u { mmr_t sh_scratch2_regval; struct { mmr_t scratch2 : 64; } sh_scratch2_s; } sh_scratch2_u_t; -#endif /* ==================================================================== */ /* Register "SH_SCRATCH3" */ /* Scratch Register 3 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_scratch3_u { mmr_t sh_scratch3_regval; struct { @@ -21513,22 +11604,12 @@ typedef union sh_scratch3_u { mmr_t reserved_0 : 63; } sh_scratch3_s; } sh_scratch3_u_t; -#else -typedef union sh_scratch3_u { - mmr_t sh_scratch3_regval; - struct { - mmr_t reserved_0 : 63; - mmr_t scratch3 : 1; - } sh_scratch3_s; -} sh_scratch3_u_t; -#endif /* ==================================================================== */ /* Register "SH_SCRATCH4" */ /* Scratch Register 4 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_scratch4_u { mmr_t sh_scratch4_regval; struct { @@ -21536,22 +11617,12 @@ typedef union sh_scratch4_u { mmr_t reserved_0 : 63; } sh_scratch4_s; } sh_scratch4_u_t; -#else -typedef union sh_scratch4_u { - mmr_t sh_scratch4_regval; - struct { - mmr_t reserved_0 : 63; - mmr_t scratch4 : 1; - } sh_scratch4_s; -} sh_scratch4_u_t; -#endif /* ==================================================================== */ /* Register "SH_CRB_MESSAGE_CONTROL" */ /* Coherent Request Buffer Message Control */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_crb_message_control_u { mmr_t sh_crb_message_control_regval; struct { @@ -21572,35 +11643,12 @@ typedef union sh_crb_message_control_u { mmr_t ivack_throttle_control : 16; } sh_crb_message_control_s; } sh_crb_message_control_u_t; -#else -typedef union sh_crb_message_control_u { - mmr_t sh_crb_message_control_regval; - struct { - mmr_t ivack_throttle_control : 16; - mmr_t ivack_stall_count : 16; - mmr_t reserved_0 : 20; - mmr_t enable_ivack_consolidation : 1; - mmr_t suppress_bogus_writes : 1; - mmr_t wrb_attribute_mismatch_xb_enable : 1; - mmr_t rrb_attribute_mismatch_xb_enable : 1; - mmr_t irb_attribute_mismatch_fsb_enable : 1; - mmr_t wrb_attribute_mismatch_fsb_enable : 1; - mmr_t rrb_attribute_mismatch_fsb_enable : 1; - mmr_t message_color_enable : 1; - mmr_t message_color : 1; - mmr_t remote_speculative_message_enable : 1; - mmr_t local_speculative_message_enable : 1; - mmr_t system_coherence_enable : 1; - } sh_crb_message_control_s; -} sh_crb_message_control_u_t; -#endif /* ==================================================================== */ /* Register "SH_CRB_NACK_LIMIT" */ /* CRB Nack Limit */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_crb_nack_limit_u { mmr_t sh_crb_nack_limit_regval; struct { @@ -21610,24 +11658,12 @@ typedef union sh_crb_nack_limit_u { mmr_t enable : 1; } sh_crb_nack_limit_s; } sh_crb_nack_limit_u_t; -#else -typedef union sh_crb_nack_limit_u { - mmr_t sh_crb_nack_limit_regval; - struct { - mmr_t enable : 1; - mmr_t reserved_0 : 47; - mmr_t pri_freq : 4; - mmr_t limit : 12; - } sh_crb_nack_limit_s; -} sh_crb_nack_limit_u_t; -#endif /* ==================================================================== */ /* Register "SH_CRB_TIMEOUT_PRESCALE" */ /* Coherent Request Buffer Timeout Prescale */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_crb_timeout_prescale_u { mmr_t sh_crb_timeout_prescale_regval; struct { @@ -21635,22 +11671,12 @@ typedef union sh_crb_timeout_prescale_u mmr_t reserved_0 : 32; } sh_crb_timeout_prescale_s; } sh_crb_timeout_prescale_u_t; -#else -typedef union sh_crb_timeout_prescale_u { - mmr_t sh_crb_timeout_prescale_regval; - struct { - mmr_t reserved_0 : 32; - mmr_t scaling_factor : 32; - } sh_crb_timeout_prescale_s; -} sh_crb_timeout_prescale_u_t; -#endif /* ==================================================================== */ /* Register "SH_CRB_TIMEOUT_SKID" */ /* Coherent Request Buffer Timeout Skid Limit */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_crb_timeout_skid_u { mmr_t sh_crb_timeout_skid_regval; struct { @@ -21659,23 +11685,12 @@ typedef union sh_crb_timeout_skid_u { mmr_t reset_skid_count : 1; } sh_crb_timeout_skid_s; } sh_crb_timeout_skid_u_t; -#else -typedef union sh_crb_timeout_skid_u { - mmr_t sh_crb_timeout_skid_regval; - struct { - mmr_t reset_skid_count : 1; - mmr_t reserved_0 : 57; - mmr_t skid : 6; - } sh_crb_timeout_skid_s; -} sh_crb_timeout_skid_u_t; -#endif /* ==================================================================== */ /* Register "SH_MEMORY_WRITE_STATUS_0" */ /* Memory Write Status for CPU 0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_memory_write_status_0_u { mmr_t sh_memory_write_status_0_regval; struct { @@ -21683,22 +11698,12 @@ typedef union sh_memory_write_status_0_u mmr_t reserved_0 : 58; } sh_memory_write_status_0_s; } sh_memory_write_status_0_u_t; -#else -typedef union sh_memory_write_status_0_u { - mmr_t sh_memory_write_status_0_regval; - struct { - mmr_t reserved_0 : 58; - mmr_t pending_write_count : 6; - } sh_memory_write_status_0_s; -} sh_memory_write_status_0_u_t; -#endif /* ==================================================================== */ /* Register "SH_MEMORY_WRITE_STATUS_1" */ /* Memory Write Status for CPU 1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_memory_write_status_1_u { mmr_t sh_memory_write_status_1_regval; struct { @@ -21706,22 +11711,12 @@ typedef union sh_memory_write_status_1_u mmr_t reserved_0 : 58; } sh_memory_write_status_1_s; } sh_memory_write_status_1_u_t; -#else -typedef union sh_memory_write_status_1_u { - mmr_t sh_memory_write_status_1_regval; - struct { - mmr_t reserved_0 : 58; - mmr_t pending_write_count : 6; - } sh_memory_write_status_1_s; -} sh_memory_write_status_1_u_t; -#endif /* ==================================================================== */ /* Register "SH_PIO_WRITE_STATUS_0" */ /* PIO Write Status for CPU 0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pio_write_status_0_u { mmr_t sh_pio_write_status_0_regval; struct { @@ -21730,33 +11725,17 @@ typedef union sh_pio_write_status_0_u { mmr_t write_error : 1; mmr_t write_error_address : 47; mmr_t reserved_0 : 6; - mmr_t pending_write_count : 6; - mmr_t reserved_1 : 1; - mmr_t writes_ok : 1; - } sh_pio_write_status_0_s; -} sh_pio_write_status_0_u_t; -#else -typedef union sh_pio_write_status_0_u { - mmr_t sh_pio_write_status_0_regval; - struct { - mmr_t writes_ok : 1; - mmr_t reserved_1 : 1; - mmr_t pending_write_count : 6; - mmr_t reserved_0 : 6; - mmr_t write_error_address : 47; - mmr_t write_error : 1; - mmr_t write_deadlock : 1; - mmr_t multi_write_error : 1; + mmr_t pending_write_count : 6; + mmr_t reserved_1 : 1; + mmr_t writes_ok : 1; } sh_pio_write_status_0_s; } sh_pio_write_status_0_u_t; -#endif /* ==================================================================== */ /* Register "SH_PIO_WRITE_STATUS_1" */ /* PIO Write Status for CPU 1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pio_write_status_1_u { mmr_t sh_pio_write_status_1_regval; struct { @@ -21770,28 +11749,12 @@ typedef union sh_pio_write_status_1_u { mmr_t writes_ok : 1; } sh_pio_write_status_1_s; } sh_pio_write_status_1_u_t; -#else -typedef union sh_pio_write_status_1_u { - mmr_t sh_pio_write_status_1_regval; - struct { - mmr_t writes_ok : 1; - mmr_t reserved_1 : 1; - mmr_t pending_write_count : 6; - mmr_t reserved_0 : 6; - mmr_t write_error_address : 47; - mmr_t write_error : 1; - mmr_t write_deadlock : 1; - mmr_t multi_write_error : 1; - } sh_pio_write_status_1_s; -} sh_pio_write_status_1_u_t; -#endif /* ==================================================================== */ /* Register "SH_MEMORY_WRITE_STATUS_NON_USER_0" */ /* Memory Write Status for CPU 0. OS access only */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_memory_write_status_non_user_0_u { mmr_t sh_memory_write_status_non_user_0_regval; struct { @@ -21800,23 +11763,12 @@ typedef union sh_memory_write_status_non mmr_t clear : 1; } sh_memory_write_status_non_user_0_s; } sh_memory_write_status_non_user_0_u_t; -#else -typedef union sh_memory_write_status_non_user_0_u { - mmr_t sh_memory_write_status_non_user_0_regval; - struct { - mmr_t clear : 1; - mmr_t reserved_0 : 57; - mmr_t pending_write_count : 6; - } sh_memory_write_status_non_user_0_s; -} sh_memory_write_status_non_user_0_u_t; -#endif /* ==================================================================== */ /* Register "SH_MEMORY_WRITE_STATUS_NON_USER_1" */ /* Memory Write Status for CPU 1. OS access only */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_memory_write_status_non_user_1_u { mmr_t sh_memory_write_status_non_user_1_regval; struct { @@ -21825,23 +11777,12 @@ typedef union sh_memory_write_status_non mmr_t clear : 1; } sh_memory_write_status_non_user_1_s; } sh_memory_write_status_non_user_1_u_t; -#else -typedef union sh_memory_write_status_non_user_1_u { - mmr_t sh_memory_write_status_non_user_1_regval; - struct { - mmr_t clear : 1; - mmr_t reserved_0 : 57; - mmr_t pending_write_count : 6; - } sh_memory_write_status_non_user_1_s; -} sh_memory_write_status_non_user_1_u_t; -#endif /* ==================================================================== */ /* Register "SH_MMRBIST_ERR" */ /* Error capture for bist read errors */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_mmrbist_err_u { mmr_t sh_mmrbist_err_regval; struct { @@ -21853,26 +11794,12 @@ typedef union sh_mmrbist_err_u { mmr_t reserved_1 : 25; } sh_mmrbist_err_s; } sh_mmrbist_err_u_t; -#else -typedef union sh_mmrbist_err_u { - mmr_t sh_mmrbist_err_regval; - struct { - mmr_t reserved_1 : 25; - mmr_t cancelled : 1; - mmr_t multiple_detected : 1; - mmr_t detected : 1; - mmr_t reserved_0 : 3; - mmr_t addr : 33; - } sh_mmrbist_err_s; -} sh_mmrbist_err_u_t; -#endif /* ==================================================================== */ /* Register "SH_MISC_ERR_HDR_LOWER" */ /* Header capture register */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_misc_err_hdr_lower_u { mmr_t sh_misc_err_hdr_lower_regval; struct { @@ -21886,28 +11813,12 @@ typedef union sh_misc_err_hdr_lower_u { mmr_t valid : 1; } sh_misc_err_hdr_lower_s; } sh_misc_err_hdr_lower_u_t; -#else -typedef union sh_misc_err_hdr_lower_u { - mmr_t sh_misc_err_hdr_lower_regval; - struct { - mmr_t valid : 1; - mmr_t reserved_2 : 2; - mmr_t write : 1; - mmr_t reserved_1 : 2; - mmr_t src : 14; - mmr_t cmd : 8; - mmr_t addr : 33; - mmr_t reserved_0 : 3; - } sh_misc_err_hdr_lower_s; -} sh_misc_err_hdr_lower_u_t; -#endif /* ==================================================================== */ /* Register "SH_MISC_ERR_HDR_UPPER" */ /* Error header capture packet and protocol errors */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_misc_err_hdr_upper_u { mmr_t sh_misc_err_hdr_upper_regval; struct { @@ -21924,31 +11835,12 @@ typedef union sh_misc_err_hdr_upper_u { mmr_t reserved_1 : 35; } sh_misc_err_hdr_upper_s; } sh_misc_err_hdr_upper_u_t; -#else -typedef union sh_misc_err_hdr_upper_u { - mmr_t sh_misc_err_hdr_upper_regval; - struct { - mmr_t reserved_1 : 35; - mmr_t echo : 9; - mmr_t reserved_0 : 12; - mmr_t xn_pkt_size : 1; - mmr_t pi_pkt_size : 1; - mmr_t dir_acc : 1; - mmr_t rmw_cor : 1; - mmr_t rmw_uc : 1; - mmr_t nonexist_addr : 1; - mmr_t illegal_cmd : 1; - mmr_t dir_protocol : 1; - } sh_misc_err_hdr_upper_s; -} sh_misc_err_hdr_upper_u_t; -#endif /* ==================================================================== */ /* Register "SH_DIR_UC_ERR_HDR_LOWER" */ /* Header capture register */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_dir_uc_err_hdr_lower_u { mmr_t sh_dir_uc_err_hdr_lower_regval; struct { @@ -21962,28 +11854,12 @@ typedef union sh_dir_uc_err_hdr_lower_u mmr_t valid : 1; } sh_dir_uc_err_hdr_lower_s; } sh_dir_uc_err_hdr_lower_u_t; -#else -typedef union sh_dir_uc_err_hdr_lower_u { - mmr_t sh_dir_uc_err_hdr_lower_regval; - struct { - mmr_t valid : 1; - mmr_t reserved_2 : 2; - mmr_t write : 1; - mmr_t reserved_1 : 2; - mmr_t src : 14; - mmr_t cmd : 8; - mmr_t addr : 33; - mmr_t reserved_0 : 3; - } sh_dir_uc_err_hdr_lower_s; -} sh_dir_uc_err_hdr_lower_u_t; -#endif /* ==================================================================== */ /* Register "SH_DIR_UC_ERR_HDR_UPPER" */ /* Error header capture packet and protocol errors */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_dir_uc_err_hdr_upper_u { mmr_t sh_dir_uc_err_hdr_upper_regval; struct { @@ -21994,25 +11870,12 @@ typedef union sh_dir_uc_err_hdr_upper_u mmr_t reserved_2 : 35; } sh_dir_uc_err_hdr_upper_s; } sh_dir_uc_err_hdr_upper_u_t; -#else -typedef union sh_dir_uc_err_hdr_upper_u { - mmr_t sh_dir_uc_err_hdr_upper_regval; - struct { - mmr_t reserved_2 : 35; - mmr_t echo : 9; - mmr_t reserved_1 : 16; - mmr_t dir_uc : 1; - mmr_t reserved_0 : 3; - } sh_dir_uc_err_hdr_upper_s; -} sh_dir_uc_err_hdr_upper_u_t; -#endif /* ==================================================================== */ /* Register "SH_DIR_COR_ERR_HDR_LOWER" */ /* Header capture register */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_dir_cor_err_hdr_lower_u { mmr_t sh_dir_cor_err_hdr_lower_regval; struct { @@ -22026,28 +11889,12 @@ typedef union sh_dir_cor_err_hdr_lower_u mmr_t valid : 1; } sh_dir_cor_err_hdr_lower_s; } sh_dir_cor_err_hdr_lower_u_t; -#else -typedef union sh_dir_cor_err_hdr_lower_u { - mmr_t sh_dir_cor_err_hdr_lower_regval; - struct { - mmr_t valid : 1; - mmr_t reserved_2 : 2; - mmr_t write : 1; - mmr_t reserved_1 : 2; - mmr_t src : 14; - mmr_t cmd : 8; - mmr_t addr : 33; - mmr_t reserved_0 : 3; - } sh_dir_cor_err_hdr_lower_s; -} sh_dir_cor_err_hdr_lower_u_t; -#endif /* ==================================================================== */ /* Register "SH_DIR_COR_ERR_HDR_UPPER" */ /* Error header capture packet and protocol errors */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_dir_cor_err_hdr_upper_u { mmr_t sh_dir_cor_err_hdr_upper_regval; struct { @@ -22058,25 +11905,12 @@ typedef union sh_dir_cor_err_hdr_upper_u mmr_t reserved_2 : 35; } sh_dir_cor_err_hdr_upper_s; } sh_dir_cor_err_hdr_upper_u_t; -#else -typedef union sh_dir_cor_err_hdr_upper_u { - mmr_t sh_dir_cor_err_hdr_upper_regval; - struct { - mmr_t reserved_2 : 35; - mmr_t echo : 9; - mmr_t reserved_1 : 11; - mmr_t dir_cor : 1; - mmr_t reserved_0 : 8; - } sh_dir_cor_err_hdr_upper_s; -} sh_dir_cor_err_hdr_upper_u_t; -#endif /* ==================================================================== */ /* Register "SH_MEM_ERROR_SUMMARY" */ /* Memory error flags */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_mem_error_summary_u { mmr_t sh_mem_error_summary_regval; struct { @@ -22118,56 +11952,12 @@ typedef union sh_mem_error_summary_u { mmr_t reserved_5 : 29; } sh_mem_error_summary_s; } sh_mem_error_summary_u_t; -#else -typedef union sh_mem_error_summary_u { - mmr_t sh_mem_error_summary_regval; - struct { - mmr_t reserved_5 : 29; - mmr_t xn_pkt_size : 1; - mmr_t pi_pkt_size : 1; - mmr_t red_black_err_timeout : 1; - mmr_t xn_request_overflow : 1; - mmr_t pi_request_overflow : 1; - mmr_t xn_reply_overflow : 1; - mmr_t pi_reply_overflow : 1; - mmr_t reserved_4 : 1; - mmr_t dqrs_int_hw : 1; - mmr_t dqrs_int_cor : 1; - mmr_t dqrs_int_uc : 1; - mmr_t reserved_3 : 1; - mmr_t dqrp_int_hw : 1; - mmr_t dqrp_int_cor : 1; - mmr_t dqrp_int_uc : 1; - mmr_t reserved_2 : 1; - mmr_t dqls_int_hw : 1; - mmr_t dqls_int_cor : 1; - mmr_t dqls_int_uc : 1; - mmr_t reserved_1 : 1; - mmr_t dqlp_int_hw : 1; - mmr_t dqlp_int_cor : 1; - mmr_t dqlp_int_uc : 1; - mmr_t reserved_0 : 1; - mmr_t dir_acc : 1; - mmr_t acy_int_hw : 1; - mmr_t acx_int_hw : 1; - mmr_t dqrp_dir_cor : 1; - mmr_t dqrp_dir_uc : 1; - mmr_t dqlp_dir_cor : 1; - mmr_t dqlp_dir_uc : 1; - mmr_t dqrp_dir_perr : 1; - mmr_t dqlp_dir_perr : 1; - mmr_t nonexist_addr : 1; - mmr_t illegal_cmd : 1; - } sh_mem_error_summary_s; -} sh_mem_error_summary_u_t; -#endif /* ==================================================================== */ /* Register "SH_MEM_ERROR_OVERFLOW" */ /* Memory error flags */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_mem_error_overflow_u { mmr_t sh_mem_error_overflow_regval; struct { @@ -22209,56 +11999,12 @@ typedef union sh_mem_error_overflow_u { mmr_t reserved_5 : 29; } sh_mem_error_overflow_s; } sh_mem_error_overflow_u_t; -#else -typedef union sh_mem_error_overflow_u { - mmr_t sh_mem_error_overflow_regval; - struct { - mmr_t reserved_5 : 29; - mmr_t xn_pkt_size : 1; - mmr_t pi_pkt_size : 1; - mmr_t red_black_err_timeout : 1; - mmr_t xn_request_overflow : 1; - mmr_t pi_request_overflow : 1; - mmr_t xn_reply_overflow : 1; - mmr_t pi_reply_overflow : 1; - mmr_t reserved_4 : 1; - mmr_t dqrs_int_hw : 1; - mmr_t dqrs_int_cor : 1; - mmr_t dqrs_int_uc : 1; - mmr_t reserved_3 : 1; - mmr_t dqrp_int_hw : 1; - mmr_t dqrp_int_cor : 1; - mmr_t dqrp_int_uc : 1; - mmr_t reserved_2 : 1; - mmr_t dqls_int_hw : 1; - mmr_t dqls_int_cor : 1; - mmr_t dqls_int_uc : 1; - mmr_t reserved_1 : 1; - mmr_t dqlp_int_hw : 1; - mmr_t dqlp_int_cor : 1; - mmr_t dqlp_int_uc : 1; - mmr_t reserved_0 : 1; - mmr_t dir_acc : 1; - mmr_t acy_int_hw : 1; - mmr_t acx_int_hw : 1; - mmr_t dqrp_dir_cor : 1; - mmr_t dqrp_dir_uc : 1; - mmr_t dqlp_dir_cor : 1; - mmr_t dqlp_dir_uc : 1; - mmr_t dqrp_dir_perr : 1; - mmr_t dqlp_dir_perr : 1; - mmr_t nonexist_addr : 1; - mmr_t illegal_cmd : 1; - } sh_mem_error_overflow_s; -} sh_mem_error_overflow_u_t; -#endif /* ==================================================================== */ /* Register "SH_MEM_ERROR_MASK" */ /* Memory error flags */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_mem_error_mask_u { mmr_t sh_mem_error_mask_regval; struct { @@ -22283,73 +12029,29 @@ typedef union sh_mem_error_mask_u { mmr_t dqls_int_hw : 1; mmr_t reserved_2 : 1; mmr_t dqrp_int_uc : 1; - mmr_t dqrp_int_cor : 1; - mmr_t dqrp_int_hw : 1; - mmr_t reserved_3 : 1; - mmr_t dqrs_int_uc : 1; - mmr_t dqrs_int_cor : 1; - mmr_t dqrs_int_hw : 1; - mmr_t reserved_4 : 1; - mmr_t pi_reply_overflow : 1; - mmr_t xn_reply_overflow : 1; - mmr_t pi_request_overflow : 1; - mmr_t xn_request_overflow : 1; - mmr_t red_black_err_timeout : 1; - mmr_t pi_pkt_size : 1; - mmr_t xn_pkt_size : 1; - mmr_t reserved_5 : 29; - } sh_mem_error_mask_s; -} sh_mem_error_mask_u_t; -#else -typedef union sh_mem_error_mask_u { - mmr_t sh_mem_error_mask_regval; - struct { - mmr_t reserved_5 : 29; - mmr_t xn_pkt_size : 1; - mmr_t pi_pkt_size : 1; - mmr_t red_black_err_timeout : 1; - mmr_t xn_request_overflow : 1; - mmr_t pi_request_overflow : 1; - mmr_t xn_reply_overflow : 1; - mmr_t pi_reply_overflow : 1; - mmr_t reserved_4 : 1; - mmr_t dqrs_int_hw : 1; - mmr_t dqrs_int_cor : 1; - mmr_t dqrs_int_uc : 1; - mmr_t reserved_3 : 1; - mmr_t dqrp_int_hw : 1; - mmr_t dqrp_int_cor : 1; - mmr_t dqrp_int_uc : 1; - mmr_t reserved_2 : 1; - mmr_t dqls_int_hw : 1; - mmr_t dqls_int_cor : 1; - mmr_t dqls_int_uc : 1; - mmr_t reserved_1 : 1; - mmr_t dqlp_int_hw : 1; - mmr_t dqlp_int_cor : 1; - mmr_t dqlp_int_uc : 1; - mmr_t reserved_0 : 1; - mmr_t dir_acc : 1; - mmr_t acy_int_hw : 1; - mmr_t acx_int_hw : 1; - mmr_t dqrp_dir_cor : 1; - mmr_t dqrp_dir_uc : 1; - mmr_t dqlp_dir_cor : 1; - mmr_t dqlp_dir_uc : 1; - mmr_t dqrp_dir_perr : 1; - mmr_t dqlp_dir_perr : 1; - mmr_t nonexist_addr : 1; - mmr_t illegal_cmd : 1; + mmr_t dqrp_int_cor : 1; + mmr_t dqrp_int_hw : 1; + mmr_t reserved_3 : 1; + mmr_t dqrs_int_uc : 1; + mmr_t dqrs_int_cor : 1; + mmr_t dqrs_int_hw : 1; + mmr_t reserved_4 : 1; + mmr_t pi_reply_overflow : 1; + mmr_t xn_reply_overflow : 1; + mmr_t pi_request_overflow : 1; + mmr_t xn_request_overflow : 1; + mmr_t red_black_err_timeout : 1; + mmr_t pi_pkt_size : 1; + mmr_t xn_pkt_size : 1; + mmr_t reserved_5 : 29; } sh_mem_error_mask_s; } sh_mem_error_mask_u_t; -#endif /* ==================================================================== */ /* Register "SH_X_DIMM_CFG" */ /* AC Mem Config Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_x_dimm_cfg_u { mmr_t sh_x_dimm_cfg_regval; struct { @@ -22377,42 +12079,12 @@ typedef union sh_x_dimm_cfg_u { mmr_t reserved_4 : 28; } sh_x_dimm_cfg_s; } sh_x_dimm_cfg_u_t; -#else -typedef union sh_x_dimm_cfg_u { - mmr_t sh_x_dimm_cfg_regval; - struct { - mmr_t reserved_4 : 28; - mmr_t freq : 4; - mmr_t reserved_3 : 1; - mmr_t dimm3_cs : 2; - mmr_t dimm3_rev : 1; - mmr_t dimm3_2bk : 1; - mmr_t dimm3_size : 3; - mmr_t reserved_2 : 1; - mmr_t dimm2_cs : 2; - mmr_t dimm2_rev : 1; - mmr_t dimm2_2bk : 1; - mmr_t dimm2_size : 3; - mmr_t reserved_1 : 1; - mmr_t dimm1_cs : 2; - mmr_t dimm1_rev : 1; - mmr_t dimm1_2bk : 1; - mmr_t dimm1_size : 3; - mmr_t reserved_0 : 1; - mmr_t dimm0_cs : 2; - mmr_t dimm0_rev : 1; - mmr_t dimm0_2bk : 1; - mmr_t dimm0_size : 3; - } sh_x_dimm_cfg_s; -} sh_x_dimm_cfg_u_t; -#endif /* ==================================================================== */ /* Register "SH_Y_DIMM_CFG" */ /* AC Mem Config Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_y_dimm_cfg_u { mmr_t sh_y_dimm_cfg_regval; struct { @@ -22440,42 +12112,12 @@ typedef union sh_y_dimm_cfg_u { mmr_t reserved_4 : 28; } sh_y_dimm_cfg_s; } sh_y_dimm_cfg_u_t; -#else -typedef union sh_y_dimm_cfg_u { - mmr_t sh_y_dimm_cfg_regval; - struct { - mmr_t reserved_4 : 28; - mmr_t freq : 4; - mmr_t reserved_3 : 1; - mmr_t dimm3_cs : 2; - mmr_t dimm3_rev : 1; - mmr_t dimm3_2bk : 1; - mmr_t dimm3_size : 3; - mmr_t reserved_2 : 1; - mmr_t dimm2_cs : 2; - mmr_t dimm2_rev : 1; - mmr_t dimm2_2bk : 1; - mmr_t dimm2_size : 3; - mmr_t reserved_1 : 1; - mmr_t dimm1_cs : 2; - mmr_t dimm1_rev : 1; - mmr_t dimm1_2bk : 1; - mmr_t dimm1_size : 3; - mmr_t reserved_0 : 1; - mmr_t dimm0_cs : 2; - mmr_t dimm0_rev : 1; - mmr_t dimm0_2bk : 1; - mmr_t dimm0_size : 3; - } sh_y_dimm_cfg_s; -} sh_y_dimm_cfg_u_t; -#endif /* ==================================================================== */ /* Register "SH_JNR_DIMM_CFG" */ /* AC Mem Config Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_jnr_dimm_cfg_u { mmr_t sh_jnr_dimm_cfg_regval; struct { @@ -22503,42 +12145,12 @@ typedef union sh_jnr_dimm_cfg_u { mmr_t reserved_4 : 28; } sh_jnr_dimm_cfg_s; } sh_jnr_dimm_cfg_u_t; -#else -typedef union sh_jnr_dimm_cfg_u { - mmr_t sh_jnr_dimm_cfg_regval; - struct { - mmr_t reserved_4 : 28; - mmr_t freq : 4; - mmr_t reserved_3 : 1; - mmr_t dimm3_cs : 2; - mmr_t dimm3_rev : 1; - mmr_t dimm3_2bk : 1; - mmr_t dimm3_size : 3; - mmr_t reserved_2 : 1; - mmr_t dimm2_cs : 2; - mmr_t dimm2_rev : 1; - mmr_t dimm2_2bk : 1; - mmr_t dimm2_size : 3; - mmr_t reserved_1 : 1; - mmr_t dimm1_cs : 2; - mmr_t dimm1_rev : 1; - mmr_t dimm1_2bk : 1; - mmr_t dimm1_size : 3; - mmr_t reserved_0 : 1; - mmr_t dimm0_cs : 2; - mmr_t dimm0_rev : 1; - mmr_t dimm0_2bk : 1; - mmr_t dimm0_size : 3; - } sh_jnr_dimm_cfg_s; -} sh_jnr_dimm_cfg_u_t; -#endif /* ==================================================================== */ /* Register "SH_X_PHASE_CFG" */ /* AC Phase Config Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_x_phase_cfg_u { mmr_t sh_x_phase_cfg_regval; struct { @@ -22560,36 +12172,12 @@ typedef union sh_x_phase_cfg_u { mmr_t reserved_0 : 1; } sh_x_phase_cfg_s; } sh_x_phase_cfg_u_t; -#else -typedef union sh_x_phase_cfg_u { - mmr_t sh_x_phase_cfg_regval; - struct { - mmr_t reserved_0 : 1; - mmr_t dq_sel_a : 4; - mmr_t sel_a : 4; - mmr_t phe_bubble : 3; - mmr_t phd_bubble : 3; - mmr_t phc_bubble : 3; - mmr_t phb_bubble : 3; - mmr_t pha_bubble : 3; - mmr_t bubble_en : 5; - mmr_t add_cp : 5; - mmr_t hold_req : 5; - mmr_t hold : 5; - mmr_t dq_ld_b : 5; - mmr_t dq_ld_a : 5; - mmr_t ld_b : 5; - mmr_t ld_a : 5; - } sh_x_phase_cfg_s; -} sh_x_phase_cfg_u_t; -#endif /* ==================================================================== */ /* Register "SH_X_CFG" */ /* AC Config Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_x_cfg_u { mmr_t sh_x_cfg_regval; struct { @@ -22609,34 +12197,12 @@ typedef union sh_x_cfg_u { mmr_t clr_dir_cache : 1; } sh_x_cfg_s; } sh_x_cfg_u_t; -#else -typedef union sh_x_cfg_u { - mmr_t sh_x_cfg_regval; - struct { - mmr_t clr_dir_cache : 1; - mmr_t inv_cas_addr : 1; - mmr_t req_cntr_val : 6; - mmr_t req_cntr_dis : 1; - mmr_t trcd4_en : 1; - mmr_t trcd2_en : 1; - mmr_t sso_wt_en : 1; - mmr_t wt_bb_clr : 4; - mmr_t dc_bb_clr : 4; - mmr_t da_bb_clr : 4; - mmr_t ta_dlys : 32; - mmr_t dir_counter_init : 6; - mmr_t dirc_random_replacement : 1; - mmr_t mode_serial : 1; - } sh_x_cfg_s; -} sh_x_cfg_u_t; -#endif /* ==================================================================== */ /* Register "SH_X_DQCT_CFG" */ /* AC Config Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_x_dqct_cfg_u { mmr_t sh_x_dqct_cfg_regval; struct { @@ -22649,27 +12215,12 @@ typedef union sh_x_dqct_cfg_u { mmr_t reserved_0 : 40; } sh_x_dqct_cfg_s; } sh_x_dqct_cfg_u_t; -#else -typedef union sh_x_dqct_cfg_u { - mmr_t sh_x_dqct_cfg_regval; - struct { - mmr_t reserved_0 : 40; - mmr_t mdir_rd_sel : 4; - mmr_t dir_rd_sel : 4; - mmr_t dta_wt_sel : 4; - mmr_t dta_rd_sel : 4; - mmr_t wt_sel : 4; - mmr_t rd_sel : 4; - } sh_x_dqct_cfg_s; -} sh_x_dqct_cfg_u_t; -#endif /* ==================================================================== */ /* Register "SH_X_REFRESH_CONTROL" */ /* Refresh Control Register */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_x_refresh_control_u { mmr_t sh_x_refresh_control_regval; struct { @@ -22681,26 +12232,12 @@ typedef union sh_x_refresh_control_u { mmr_t reserved_0 : 36; } sh_x_refresh_control_s; } sh_x_refresh_control_u_t; -#else -typedef union sh_x_refresh_control_u { - mmr_t sh_x_refresh_control_regval; - struct { - mmr_t reserved_0 : 36; - mmr_t half_rate : 4; - mmr_t interleave : 1; - mmr_t hold : 6; - mmr_t interval : 9; - mmr_t enable : 8; - } sh_x_refresh_control_s; -} sh_x_refresh_control_u_t; -#endif /* ==================================================================== */ /* Register "SH_Y_PHASE_CFG" */ /* AC Phase Config Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_y_phase_cfg_u { mmr_t sh_y_phase_cfg_regval; struct { @@ -22722,36 +12259,12 @@ typedef union sh_y_phase_cfg_u { mmr_t reserved_0 : 1; } sh_y_phase_cfg_s; } sh_y_phase_cfg_u_t; -#else -typedef union sh_y_phase_cfg_u { - mmr_t sh_y_phase_cfg_regval; - struct { - mmr_t reserved_0 : 1; - mmr_t dq_sel_a : 4; - mmr_t sel_a : 4; - mmr_t phe_bubble : 3; - mmr_t phd_bubble : 3; - mmr_t phc_bubble : 3; - mmr_t phb_bubble : 3; - mmr_t pha_bubble : 3; - mmr_t bubble_en : 5; - mmr_t add_cp : 5; - mmr_t hold_req : 5; - mmr_t hold : 5; - mmr_t dq_ld_b : 5; - mmr_t dq_ld_a : 5; - mmr_t ld_b : 5; - mmr_t ld_a : 5; - } sh_y_phase_cfg_s; -} sh_y_phase_cfg_u_t; -#endif /* ==================================================================== */ /* Register "SH_Y_CFG" */ /* AC Config Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_y_cfg_u { mmr_t sh_y_cfg_regval; struct { @@ -22771,34 +12284,12 @@ typedef union sh_y_cfg_u { mmr_t clr_dir_cache : 1; } sh_y_cfg_s; } sh_y_cfg_u_t; -#else -typedef union sh_y_cfg_u { - mmr_t sh_y_cfg_regval; - struct { - mmr_t clr_dir_cache : 1; - mmr_t inv_cas_addr : 1; - mmr_t req_cntr_val : 6; - mmr_t req_cntr_dis : 1; - mmr_t trcd4_en : 1; - mmr_t trcd2_en : 1; - mmr_t sso_wt_en : 1; - mmr_t wt_bb_clr : 4; - mmr_t dc_bb_clr : 4; - mmr_t da_bb_clr : 4; - mmr_t ta_dlys : 32; - mmr_t dir_counter_init : 6; - mmr_t dirc_random_replacement : 1; - mmr_t mode_serial : 1; - } sh_y_cfg_s; -} sh_y_cfg_u_t; -#endif /* ==================================================================== */ /* Register "SH_Y_DQCT_CFG" */ /* AC Config Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_y_dqct_cfg_u { mmr_t sh_y_dqct_cfg_regval; struct { @@ -22811,27 +12302,12 @@ typedef union sh_y_dqct_cfg_u { mmr_t reserved_0 : 40; } sh_y_dqct_cfg_s; } sh_y_dqct_cfg_u_t; -#else -typedef union sh_y_dqct_cfg_u { - mmr_t sh_y_dqct_cfg_regval; - struct { - mmr_t reserved_0 : 40; - mmr_t mdir_rd_sel : 4; - mmr_t dir_rd_sel : 4; - mmr_t dta_wt_sel : 4; - mmr_t dta_rd_sel : 4; - mmr_t wt_sel : 4; - mmr_t rd_sel : 4; - } sh_y_dqct_cfg_s; -} sh_y_dqct_cfg_u_t; -#endif /* ==================================================================== */ /* Register "SH_Y_REFRESH_CONTROL" */ /* Refresh Control Register */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_y_refresh_control_u { mmr_t sh_y_refresh_control_regval; struct { @@ -22843,26 +12319,12 @@ typedef union sh_y_refresh_control_u { mmr_t reserved_0 : 36; } sh_y_refresh_control_s; } sh_y_refresh_control_u_t; -#else -typedef union sh_y_refresh_control_u { - mmr_t sh_y_refresh_control_regval; - struct { - mmr_t reserved_0 : 36; - mmr_t half_rate : 4; - mmr_t interleave : 1; - mmr_t hold : 6; - mmr_t interval : 9; - mmr_t enable : 8; - } sh_y_refresh_control_s; -} sh_y_refresh_control_u_t; -#endif /* ==================================================================== */ /* Register "SH_MEM_RED_BLACK" */ /* MD fairness watchdog timers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_mem_red_black_u { mmr_t sh_mem_red_black_regval; struct { @@ -22871,22 +12333,11 @@ typedef union sh_mem_red_black_u { mmr_t reserved_0 : 12; } sh_mem_red_black_s; } sh_mem_red_black_u_t; -#else -typedef union sh_mem_red_black_u { - mmr_t sh_mem_red_black_regval; - struct { - mmr_t reserved_0 : 12; - mmr_t err_time : 36; - mmr_t time : 16; - } sh_mem_red_black_s; -} sh_mem_red_black_u_t; -#endif /* ==================================================================== */ /* Register "SH_MISC_MEM_CFG" */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_misc_mem_cfg_u { mmr_t sh_misc_mem_cfg_regval; struct { @@ -22903,43 +12354,18 @@ typedef union sh_misc_mem_cfg_u { mmr_t reserved_2 : 3; mmr_t disabled_write_tnums : 5; mmr_t reserved_3 : 3; - mmr_t disabled_victims : 6; - mmr_t reserved_4 : 2; - mmr_t alternate_xn_rp_plane : 1; - mmr_t reserved_5 : 11; - } sh_misc_mem_cfg_s; -} sh_misc_mem_cfg_u_t; -#else -typedef union sh_misc_mem_cfg_u { - mmr_t sh_misc_mem_cfg_regval; - struct { - mmr_t reserved_5 : 11; - mmr_t alternate_xn_rp_plane : 1; - mmr_t reserved_4 : 2; - mmr_t disabled_victims : 6; - mmr_t reserved_3 : 3; - mmr_t disabled_write_tnums : 5; - mmr_t reserved_2 : 3; - mmr_t disabled_read_tnums : 5; - mmr_t throttle_cnt : 8; - mmr_t reserved_1 : 2; - mmr_t low_victim_buffer_threshold : 6; - mmr_t reserved_0 : 2; - mmr_t low_write_buffer_threshold : 6; - mmr_t xn_rd_same_as_pi : 1; - mmr_t jnr_bypass_enable : 1; - mmr_t spec_header_enable : 1; - mmr_t express_header_enable : 1; + mmr_t disabled_victims : 6; + mmr_t reserved_4 : 2; + mmr_t alternate_xn_rp_plane : 1; + mmr_t reserved_5 : 11; } sh_misc_mem_cfg_s; } sh_misc_mem_cfg_u_t; -#endif /* ==================================================================== */ /* Register "SH_PIO_RQ_CRD_CTL" */ /* pio_rq Credit Circulation Control */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pio_rq_crd_ctl_u { mmr_t sh_pio_rq_crd_ctl_regval; struct { @@ -22947,22 +12373,12 @@ typedef union sh_pio_rq_crd_ctl_u { mmr_t reserved_0 : 58; } sh_pio_rq_crd_ctl_s; } sh_pio_rq_crd_ctl_u_t; -#else -typedef union sh_pio_rq_crd_ctl_u { - mmr_t sh_pio_rq_crd_ctl_regval; - struct { - mmr_t reserved_0 : 58; - mmr_t depth : 6; - } sh_pio_rq_crd_ctl_s; -} sh_pio_rq_crd_ctl_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_MD_RQ_CRD_CTL" */ /* pi_md_rq Credit Circulation Control */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_md_rq_crd_ctl_u { mmr_t sh_pi_md_rq_crd_ctl_regval; struct { @@ -22970,22 +12386,12 @@ typedef union sh_pi_md_rq_crd_ctl_u { mmr_t reserved_0 : 58; } sh_pi_md_rq_crd_ctl_s; } sh_pi_md_rq_crd_ctl_u_t; -#else -typedef union sh_pi_md_rq_crd_ctl_u { - mmr_t sh_pi_md_rq_crd_ctl_regval; - struct { - mmr_t reserved_0 : 58; - mmr_t depth : 6; - } sh_pi_md_rq_crd_ctl_s; -} sh_pi_md_rq_crd_ctl_u_t; -#endif /* ==================================================================== */ /* Register "SH_PI_MD_RP_CRD_CTL" */ /* pi_md_rp Credit Circulation Control */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_pi_md_rp_crd_ctl_u { mmr_t sh_pi_md_rp_crd_ctl_regval; struct { @@ -22993,22 +12399,12 @@ typedef union sh_pi_md_rp_crd_ctl_u { mmr_t reserved_0 : 58; } sh_pi_md_rp_crd_ctl_s; } sh_pi_md_rp_crd_ctl_u_t; -#else -typedef union sh_pi_md_rp_crd_ctl_u { - mmr_t sh_pi_md_rp_crd_ctl_regval; - struct { - mmr_t reserved_0 : 58; - mmr_t depth : 6; - } sh_pi_md_rp_crd_ctl_s; -} sh_pi_md_rp_crd_ctl_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_MD_RQ_CRD_CTL" */ /* xn_md_rq Credit Circulation Control */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_md_rq_crd_ctl_u { mmr_t sh_xn_md_rq_crd_ctl_regval; struct { @@ -23016,22 +12412,12 @@ typedef union sh_xn_md_rq_crd_ctl_u { mmr_t reserved_0 : 58; } sh_xn_md_rq_crd_ctl_s; } sh_xn_md_rq_crd_ctl_u_t; -#else -typedef union sh_xn_md_rq_crd_ctl_u { - mmr_t sh_xn_md_rq_crd_ctl_regval; - struct { - mmr_t reserved_0 : 58; - mmr_t depth : 6; - } sh_xn_md_rq_crd_ctl_s; -} sh_xn_md_rq_crd_ctl_u_t; -#endif /* ==================================================================== */ /* Register "SH_XN_MD_RP_CRD_CTL" */ /* xn_md_rp Credit Circulation Control */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_xn_md_rp_crd_ctl_u { mmr_t sh_xn_md_rp_crd_ctl_regval; struct { @@ -23039,22 +12425,12 @@ typedef union sh_xn_md_rp_crd_ctl_u { mmr_t reserved_0 : 58; } sh_xn_md_rp_crd_ctl_s; } sh_xn_md_rp_crd_ctl_u_t; -#else -typedef union sh_xn_md_rp_crd_ctl_u { - mmr_t sh_xn_md_rp_crd_ctl_regval; - struct { - mmr_t reserved_0 : 58; - mmr_t depth : 6; - } sh_xn_md_rp_crd_ctl_s; -} sh_xn_md_rp_crd_ctl_u_t; -#endif /* ==================================================================== */ /* Register "SH_X_TAG0" */ /* AC tag Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_x_tag0_u { mmr_t sh_x_tag0_regval; struct { @@ -23062,22 +12438,12 @@ typedef union sh_x_tag0_u { mmr_t reserved_0 : 44; } sh_x_tag0_s; } sh_x_tag0_u_t; -#else -typedef union sh_x_tag0_u { - mmr_t sh_x_tag0_regval; - struct { - mmr_t reserved_0 : 44; - mmr_t tag : 20; - } sh_x_tag0_s; -} sh_x_tag0_u_t; -#endif /* ==================================================================== */ /* Register "SH_X_TAG1" */ /* AC tag Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_x_tag1_u { mmr_t sh_x_tag1_regval; struct { @@ -23085,22 +12451,12 @@ typedef union sh_x_tag1_u { mmr_t reserved_0 : 44; } sh_x_tag1_s; } sh_x_tag1_u_t; -#else -typedef union sh_x_tag1_u { - mmr_t sh_x_tag1_regval; - struct { - mmr_t reserved_0 : 44; - mmr_t tag : 20; - } sh_x_tag1_s; -} sh_x_tag1_u_t; -#endif /* ==================================================================== */ /* Register "SH_X_TAG2" */ /* AC tag Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_x_tag2_u { mmr_t sh_x_tag2_regval; struct { @@ -23108,22 +12464,12 @@ typedef union sh_x_tag2_u { mmr_t reserved_0 : 44; } sh_x_tag2_s; } sh_x_tag2_u_t; -#else -typedef union sh_x_tag2_u { - mmr_t sh_x_tag2_regval; - struct { - mmr_t reserved_0 : 44; - mmr_t tag : 20; - } sh_x_tag2_s; -} sh_x_tag2_u_t; -#endif /* ==================================================================== */ /* Register "SH_X_TAG3" */ /* AC tag Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_x_tag3_u { mmr_t sh_x_tag3_regval; struct { @@ -23131,22 +12477,12 @@ typedef union sh_x_tag3_u { mmr_t reserved_0 : 44; } sh_x_tag3_s; } sh_x_tag3_u_t; -#else -typedef union sh_x_tag3_u { - mmr_t sh_x_tag3_regval; - struct { - mmr_t reserved_0 : 44; - mmr_t tag : 20; - } sh_x_tag3_s; -} sh_x_tag3_u_t; -#endif /* ==================================================================== */ /* Register "SH_X_TAG4" */ /* AC tag Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_x_tag4_u { mmr_t sh_x_tag4_regval; struct { @@ -23154,22 +12490,12 @@ typedef union sh_x_tag4_u { mmr_t reserved_0 : 44; } sh_x_tag4_s; } sh_x_tag4_u_t; -#else -typedef union sh_x_tag4_u { - mmr_t sh_x_tag4_regval; - struct { - mmr_t reserved_0 : 44; - mmr_t tag : 20; - } sh_x_tag4_s; -} sh_x_tag4_u_t; -#endif /* ==================================================================== */ /* Register "SH_X_TAG5" */ /* AC tag Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_x_tag5_u { mmr_t sh_x_tag5_regval; struct { @@ -23177,22 +12503,12 @@ typedef union sh_x_tag5_u { mmr_t reserved_0 : 44; } sh_x_tag5_s; } sh_x_tag5_u_t; -#else -typedef union sh_x_tag5_u { - mmr_t sh_x_tag5_regval; - struct { - mmr_t reserved_0 : 44; - mmr_t tag : 20; - } sh_x_tag5_s; -} sh_x_tag5_u_t; -#endif /* ==================================================================== */ /* Register "SH_X_TAG6" */ /* AC tag Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_x_tag6_u { mmr_t sh_x_tag6_regval; struct { @@ -23200,22 +12516,12 @@ typedef union sh_x_tag6_u { mmr_t reserved_0 : 44; } sh_x_tag6_s; } sh_x_tag6_u_t; -#else -typedef union sh_x_tag6_u { - mmr_t sh_x_tag6_regval; - struct { - mmr_t reserved_0 : 44; - mmr_t tag : 20; - } sh_x_tag6_s; -} sh_x_tag6_u_t; -#endif /* ==================================================================== */ /* Register "SH_X_TAG7" */ /* AC tag Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_x_tag7_u { mmr_t sh_x_tag7_regval; struct { @@ -23223,22 +12529,12 @@ typedef union sh_x_tag7_u { mmr_t reserved_0 : 44; } sh_x_tag7_s; } sh_x_tag7_u_t; -#else -typedef union sh_x_tag7_u { - mmr_t sh_x_tag7_regval; - struct { - mmr_t reserved_0 : 44; - mmr_t tag : 20; - } sh_x_tag7_s; -} sh_x_tag7_u_t; -#endif /* ==================================================================== */ /* Register "SH_Y_TAG0" */ /* AC tag Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_y_tag0_u { mmr_t sh_y_tag0_regval; struct { @@ -23246,22 +12542,12 @@ typedef union sh_y_tag0_u { mmr_t reserved_0 : 44; } sh_y_tag0_s; } sh_y_tag0_u_t; -#else -typedef union sh_y_tag0_u { - mmr_t sh_y_tag0_regval; - struct { - mmr_t reserved_0 : 44; - mmr_t tag : 20; - } sh_y_tag0_s; -} sh_y_tag0_u_t; -#endif /* ==================================================================== */ /* Register "SH_Y_TAG1" */ /* AC tag Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_y_tag1_u { mmr_t sh_y_tag1_regval; struct { @@ -23269,22 +12555,12 @@ typedef union sh_y_tag1_u { mmr_t reserved_0 : 44; } sh_y_tag1_s; } sh_y_tag1_u_t; -#else -typedef union sh_y_tag1_u { - mmr_t sh_y_tag1_regval; - struct { - mmr_t reserved_0 : 44; - mmr_t tag : 20; - } sh_y_tag1_s; -} sh_y_tag1_u_t; -#endif /* ==================================================================== */ /* Register "SH_Y_TAG2" */ /* AC tag Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_y_tag2_u { mmr_t sh_y_tag2_regval; struct { @@ -23292,22 +12568,12 @@ typedef union sh_y_tag2_u { mmr_t reserved_0 : 44; } sh_y_tag2_s; } sh_y_tag2_u_t; -#else -typedef union sh_y_tag2_u { - mmr_t sh_y_tag2_regval; - struct { - mmr_t reserved_0 : 44; - mmr_t tag : 20; - } sh_y_tag2_s; -} sh_y_tag2_u_t; -#endif /* ==================================================================== */ /* Register "SH_Y_TAG3" */ /* AC tag Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_y_tag3_u { mmr_t sh_y_tag3_regval; struct { @@ -23315,22 +12581,12 @@ typedef union sh_y_tag3_u { mmr_t reserved_0 : 44; } sh_y_tag3_s; } sh_y_tag3_u_t; -#else -typedef union sh_y_tag3_u { - mmr_t sh_y_tag3_regval; - struct { - mmr_t reserved_0 : 44; - mmr_t tag : 20; - } sh_y_tag3_s; -} sh_y_tag3_u_t; -#endif /* ==================================================================== */ /* Register "SH_Y_TAG4" */ /* AC tag Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_y_tag4_u { mmr_t sh_y_tag4_regval; struct { @@ -23338,22 +12594,12 @@ typedef union sh_y_tag4_u { mmr_t reserved_0 : 44; } sh_y_tag4_s; } sh_y_tag4_u_t; -#else -typedef union sh_y_tag4_u { - mmr_t sh_y_tag4_regval; - struct { - mmr_t reserved_0 : 44; - mmr_t tag : 20; - } sh_y_tag4_s; -} sh_y_tag4_u_t; -#endif /* ==================================================================== */ /* Register "SH_Y_TAG5" */ /* AC tag Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_y_tag5_u { mmr_t sh_y_tag5_regval; struct { @@ -23361,22 +12607,12 @@ typedef union sh_y_tag5_u { mmr_t reserved_0 : 44; } sh_y_tag5_s; } sh_y_tag5_u_t; -#else -typedef union sh_y_tag5_u { - mmr_t sh_y_tag5_regval; - struct { - mmr_t reserved_0 : 44; - mmr_t tag : 20; - } sh_y_tag5_s; -} sh_y_tag5_u_t; -#endif /* ==================================================================== */ /* Register "SH_Y_TAG6" */ /* AC tag Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_y_tag6_u { mmr_t sh_y_tag6_regval; struct { @@ -23384,22 +12620,12 @@ typedef union sh_y_tag6_u { mmr_t reserved_0 : 44; } sh_y_tag6_s; } sh_y_tag6_u_t; -#else -typedef union sh_y_tag6_u { - mmr_t sh_y_tag6_regval; - struct { - mmr_t reserved_0 : 44; - mmr_t tag : 20; - } sh_y_tag6_s; -} sh_y_tag6_u_t; -#endif /* ==================================================================== */ /* Register "SH_Y_TAG7" */ /* AC tag Registers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_y_tag7_u { mmr_t sh_y_tag7_regval; struct { @@ -23407,22 +12633,12 @@ typedef union sh_y_tag7_u { mmr_t reserved_0 : 44; } sh_y_tag7_s; } sh_y_tag7_u_t; -#else -typedef union sh_y_tag7_u { - mmr_t sh_y_tag7_regval; - struct { - mmr_t reserved_0 : 44; - mmr_t tag : 20; - } sh_y_tag7_s; -} sh_y_tag7_u_t; -#endif /* ==================================================================== */ /* Register "SH_MMRBIST_BASE" */ /* mmr/bist base address */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_mmrbist_base_u { mmr_t sh_mmrbist_base_regval; struct { @@ -23431,23 +12647,12 @@ typedef union sh_mmrbist_base_u { mmr_t reserved_1 : 14; } sh_mmrbist_base_s; } sh_mmrbist_base_u_t; -#else -typedef union sh_mmrbist_base_u { - mmr_t sh_mmrbist_base_regval; - struct { - mmr_t reserved_1 : 14; - mmr_t dword_addr : 47; - mmr_t reserved_0 : 3; - } sh_mmrbist_base_s; -} sh_mmrbist_base_u_t; -#endif /* ==================================================================== */ /* Register "SH_MMRBIST_CTL" */ /* Bist base address */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_mmrbist_ctl_u { mmr_t sh_mmrbist_ctl_regval; struct { @@ -23463,30 +12668,12 @@ typedef union sh_mmrbist_ctl_u { mmr_t reserved_3 : 19; } sh_mmrbist_ctl_s; } sh_mmrbist_ctl_u_t; -#else -typedef union sh_mmrbist_ctl_u { - mmr_t sh_mmrbist_ctl_regval; - struct { - mmr_t reserved_3 : 19; - mmr_t reset_state : 1; - mmr_t reserved_2 : 1; - mmr_t mem_idle : 1; - mmr_t fail : 1; - mmr_t in_progress : 1; - mmr_t reserved_1 : 1; - mmr_t cmd : 7; - mmr_t reserved_0 : 1; - mmr_t block_length : 31; - } sh_mmrbist_ctl_s; -} sh_mmrbist_ctl_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DBUG_DATA_CFG" */ /* configuration for md debug data muxes */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dbug_data_cfg_u { mmr_t sh_md_dbug_data_cfg_regval; struct { @@ -23524,52 +12711,12 @@ typedef union sh_md_dbug_data_cfg_u { mmr_t reserved_15 : 1; } sh_md_dbug_data_cfg_s; } sh_md_dbug_data_cfg_u_t; -#else -typedef union sh_md_dbug_data_cfg_u { - mmr_t sh_md_dbug_data_cfg_regval; - struct { - mmr_t reserved_15 : 1; - mmr_t nibble7_nibble : 3; - mmr_t reserved_14 : 1; - mmr_t nibble7_chiplet : 3; - mmr_t reserved_13 : 1; - mmr_t nibble6_nibble : 3; - mmr_t reserved_12 : 1; - mmr_t nibble6_chiplet : 3; - mmr_t reserved_11 : 1; - mmr_t nibble5_nibble : 3; - mmr_t reserved_10 : 1; - mmr_t nibble5_chiplet : 3; - mmr_t reserved_9 : 1; - mmr_t nibble4_nibble : 3; - mmr_t reserved_8 : 1; - mmr_t nibble4_chiplet : 3; - mmr_t reserved_7 : 1; - mmr_t nibble3_nibble : 3; - mmr_t reserved_6 : 1; - mmr_t nibble3_chiplet : 3; - mmr_t reserved_5 : 1; - mmr_t nibble2_nibble : 3; - mmr_t reserved_4 : 1; - mmr_t nibble2_chiplet : 3; - mmr_t reserved_3 : 1; - mmr_t nibble1_nibble : 3; - mmr_t reserved_2 : 1; - mmr_t nibble1_chiplet : 3; - mmr_t reserved_1 : 1; - mmr_t nibble0_nibble : 3; - mmr_t reserved_0 : 1; - mmr_t nibble0_chiplet : 3; - } sh_md_dbug_data_cfg_s; -} sh_md_dbug_data_cfg_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DBUG_TRIGGER_CFG" */ /* configuration for md debug triggers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dbug_trigger_cfg_u { mmr_t sh_md_dbug_trigger_cfg_regval; struct { @@ -23607,75 +12754,25 @@ typedef union sh_md_dbug_trigger_cfg_u { mmr_t enable : 1; } sh_md_dbug_trigger_cfg_s; } sh_md_dbug_trigger_cfg_u_t; -#else -typedef union sh_md_dbug_trigger_cfg_u { - mmr_t sh_md_dbug_trigger_cfg_regval; - struct { - mmr_t enable : 1; - mmr_t nibble7_nibble : 3; - mmr_t reserved_14 : 1; - mmr_t nibble7_chiplet : 3; - mmr_t reserved_13 : 1; - mmr_t nibble6_nibble : 3; - mmr_t reserved_12 : 1; - mmr_t nibble6_chiplet : 3; - mmr_t reserved_11 : 1; - mmr_t nibble5_nibble : 3; - mmr_t reserved_10 : 1; - mmr_t nibble5_chiplet : 3; - mmr_t reserved_9 : 1; - mmr_t nibble4_nibble : 3; - mmr_t reserved_8 : 1; - mmr_t nibble4_chiplet : 3; - mmr_t reserved_7 : 1; - mmr_t nibble3_nibble : 3; - mmr_t reserved_6 : 1; - mmr_t nibble3_chiplet : 3; - mmr_t reserved_5 : 1; - mmr_t nibble2_nibble : 3; - mmr_t reserved_4 : 1; - mmr_t nibble2_chiplet : 3; - mmr_t reserved_3 : 1; - mmr_t nibble1_nibble : 3; - mmr_t reserved_2 : 1; - mmr_t nibble1_chiplet : 3; - mmr_t reserved_1 : 1; - mmr_t nibble0_nibble : 3; - mmr_t reserved_0 : 1; - mmr_t nibble0_chiplet : 3; - } sh_md_dbug_trigger_cfg_s; -} sh_md_dbug_trigger_cfg_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DBUG_COMPARE" */ /* md debug compare pattern and mask */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dbug_compare_u { mmr_t sh_md_dbug_compare_regval; struct { mmr_t pattern : 32; - mmr_t mask : 32; - } sh_md_dbug_compare_s; -} sh_md_dbug_compare_u_t; -#else -typedef union sh_md_dbug_compare_u { - mmr_t sh_md_dbug_compare_regval; - struct { - mmr_t mask : 32; - mmr_t pattern : 32; + mmr_t mask : 32; } sh_md_dbug_compare_s; } sh_md_dbug_compare_u_t; -#endif /* ==================================================================== */ /* Register "SH_X_MOD_DBUG_SEL" */ /* MD acx debug select */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_x_mod_dbug_sel_u { mmr_t sh_x_mod_dbug_sel_regval; struct { @@ -23689,28 +12786,12 @@ typedef union sh_x_mod_dbug_sel_u { mmr_t reserved_0 : 6; } sh_x_mod_dbug_sel_s; } sh_x_mod_dbug_sel_u_t; -#else -typedef union sh_x_mod_dbug_sel_u { - mmr_t sh_x_mod_dbug_sel_regval; - struct { - mmr_t reserved_0 : 6; - mmr_t dqr_sel : 6; - mmr_t dql_sel : 6; - mmr_t atr_sel : 11; - mmr_t atl_sel : 11; - mmr_t arb_sel : 8; - mmr_t wbq_sel : 8; - mmr_t tag_sel : 8; - } sh_x_mod_dbug_sel_s; -} sh_x_mod_dbug_sel_u_t; -#endif /* ==================================================================== */ /* Register "SH_X_DBUG_SEL" */ /* MD acx debug select */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_x_dbug_sel_u { mmr_t sh_x_dbug_sel_regval; struct { @@ -23718,22 +12799,12 @@ typedef union sh_x_dbug_sel_u { mmr_t reserved_0 : 40; } sh_x_dbug_sel_s; } sh_x_dbug_sel_u_t; -#else -typedef union sh_x_dbug_sel_u { - mmr_t sh_x_dbug_sel_regval; - struct { - mmr_t reserved_0 : 40; - mmr_t dbg_sel : 24; - } sh_x_dbug_sel_s; -} sh_x_dbug_sel_u_t; -#endif /* ==================================================================== */ /* Register "SH_X_LADDR_CMP" */ /* MD acx address compare */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_x_laddr_cmp_u { mmr_t sh_x_laddr_cmp_regval; struct { @@ -23743,24 +12814,12 @@ typedef union sh_x_laddr_cmp_u { mmr_t reserved_1 : 4; } sh_x_laddr_cmp_s; } sh_x_laddr_cmp_u_t; -#else -typedef union sh_x_laddr_cmp_u { - mmr_t sh_x_laddr_cmp_regval; - struct { - mmr_t reserved_1 : 4; - mmr_t mask_val : 28; - mmr_t reserved_0 : 4; - mmr_t cmp_val : 28; - } sh_x_laddr_cmp_s; -} sh_x_laddr_cmp_u_t; -#endif /* ==================================================================== */ /* Register "SH_X_RADDR_CMP" */ /* MD acx address compare */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_x_raddr_cmp_u { mmr_t sh_x_raddr_cmp_regval; struct { @@ -23770,24 +12829,12 @@ typedef union sh_x_raddr_cmp_u { mmr_t reserved_1 : 4; } sh_x_raddr_cmp_s; } sh_x_raddr_cmp_u_t; -#else -typedef union sh_x_raddr_cmp_u { - mmr_t sh_x_raddr_cmp_regval; - struct { - mmr_t reserved_1 : 4; - mmr_t mask_val : 28; - mmr_t reserved_0 : 4; - mmr_t cmp_val : 28; - } sh_x_raddr_cmp_s; -} sh_x_raddr_cmp_u_t; -#endif /* ==================================================================== */ /* Register "SH_X_TAG_CMP" */ /* MD acx tagmgr compare */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_x_tag_cmp_u { mmr_t sh_x_tag_cmp_regval; struct { @@ -23797,24 +12844,12 @@ typedef union sh_x_tag_cmp_u { mmr_t reserved_0 : 9; } sh_x_tag_cmp_s; } sh_x_tag_cmp_u_t; -#else -typedef union sh_x_tag_cmp_u { - mmr_t sh_x_tag_cmp_regval; - struct { - mmr_t reserved_0 : 9; - mmr_t src : 14; - mmr_t addr : 33; - mmr_t cmd : 8; - } sh_x_tag_cmp_s; -} sh_x_tag_cmp_u_t; -#endif /* ==================================================================== */ /* Register "SH_X_TAG_MASK" */ /* MD acx tagmgr mask */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_x_tag_mask_u { mmr_t sh_x_tag_mask_regval; struct { @@ -23824,24 +12859,12 @@ typedef union sh_x_tag_mask_u { mmr_t reserved_0 : 9; } sh_x_tag_mask_s; } sh_x_tag_mask_u_t; -#else -typedef union sh_x_tag_mask_u { - mmr_t sh_x_tag_mask_regval; - struct { - mmr_t reserved_0 : 9; - mmr_t src : 14; - mmr_t addr : 33; - mmr_t cmd : 8; - } sh_x_tag_mask_s; -} sh_x_tag_mask_u_t; -#endif /* ==================================================================== */ /* Register "SH_Y_MOD_DBUG_SEL" */ /* MD acy debug select */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_y_mod_dbug_sel_u { mmr_t sh_y_mod_dbug_sel_regval; struct { @@ -23855,28 +12878,12 @@ typedef union sh_y_mod_dbug_sel_u { mmr_t reserved_0 : 6; } sh_y_mod_dbug_sel_s; } sh_y_mod_dbug_sel_u_t; -#else -typedef union sh_y_mod_dbug_sel_u { - mmr_t sh_y_mod_dbug_sel_regval; - struct { - mmr_t reserved_0 : 6; - mmr_t dqr_sel : 6; - mmr_t dql_sel : 6; - mmr_t atr_sel : 11; - mmr_t atl_sel : 11; - mmr_t arb_sel : 8; - mmr_t wbq_sel : 8; - mmr_t tag_sel : 8; - } sh_y_mod_dbug_sel_s; -} sh_y_mod_dbug_sel_u_t; -#endif /* ==================================================================== */ /* Register "SH_Y_DBUG_SEL" */ /* MD acy debug select */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_y_dbug_sel_u { mmr_t sh_y_dbug_sel_regval; struct { @@ -23884,22 +12891,12 @@ typedef union sh_y_dbug_sel_u { mmr_t reserved_0 : 40; } sh_y_dbug_sel_s; } sh_y_dbug_sel_u_t; -#else -typedef union sh_y_dbug_sel_u { - mmr_t sh_y_dbug_sel_regval; - struct { - mmr_t reserved_0 : 40; - mmr_t dbg_sel : 24; - } sh_y_dbug_sel_s; -} sh_y_dbug_sel_u_t; -#endif /* ==================================================================== */ /* Register "SH_Y_LADDR_CMP" */ /* MD acy address compare */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_y_laddr_cmp_u { mmr_t sh_y_laddr_cmp_regval; struct { @@ -23909,24 +12906,12 @@ typedef union sh_y_laddr_cmp_u { mmr_t reserved_1 : 4; } sh_y_laddr_cmp_s; } sh_y_laddr_cmp_u_t; -#else -typedef union sh_y_laddr_cmp_u { - mmr_t sh_y_laddr_cmp_regval; - struct { - mmr_t reserved_1 : 4; - mmr_t mask_val : 28; - mmr_t reserved_0 : 4; - mmr_t cmp_val : 28; - } sh_y_laddr_cmp_s; -} sh_y_laddr_cmp_u_t; -#endif /* ==================================================================== */ /* Register "SH_Y_RADDR_CMP" */ /* MD acy address compare */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_y_raddr_cmp_u { mmr_t sh_y_raddr_cmp_regval; struct { @@ -23936,24 +12921,12 @@ typedef union sh_y_raddr_cmp_u { mmr_t reserved_1 : 4; } sh_y_raddr_cmp_s; } sh_y_raddr_cmp_u_t; -#else -typedef union sh_y_raddr_cmp_u { - mmr_t sh_y_raddr_cmp_regval; - struct { - mmr_t reserved_1 : 4; - mmr_t mask_val : 28; - mmr_t reserved_0 : 4; - mmr_t cmp_val : 28; - } sh_y_raddr_cmp_s; -} sh_y_raddr_cmp_u_t; -#endif /* ==================================================================== */ /* Register "SH_Y_TAG_CMP" */ /* MD acy tagmgr compare */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_y_tag_cmp_u { mmr_t sh_y_tag_cmp_regval; struct { @@ -23963,24 +12936,12 @@ typedef union sh_y_tag_cmp_u { mmr_t reserved_0 : 9; } sh_y_tag_cmp_s; } sh_y_tag_cmp_u_t; -#else -typedef union sh_y_tag_cmp_u { - mmr_t sh_y_tag_cmp_regval; - struct { - mmr_t reserved_0 : 9; - mmr_t src : 14; - mmr_t addr : 33; - mmr_t cmd : 8; - } sh_y_tag_cmp_s; -} sh_y_tag_cmp_u_t; -#endif /* ==================================================================== */ /* Register "SH_Y_TAG_MASK" */ /* MD acy tagmgr mask */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_y_tag_mask_u { mmr_t sh_y_tag_mask_regval; struct { @@ -23990,24 +12951,12 @@ typedef union sh_y_tag_mask_u { mmr_t reserved_0 : 9; } sh_y_tag_mask_s; } sh_y_tag_mask_u_t; -#else -typedef union sh_y_tag_mask_u { - mmr_t sh_y_tag_mask_regval; - struct { - mmr_t reserved_0 : 9; - mmr_t src : 14; - mmr_t addr : 33; - mmr_t cmd : 8; - } sh_y_tag_mask_s; -} sh_y_tag_mask_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_JNR_DBUG_DATA_CFG" */ /* configuration for md jnr debug data muxes */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_jnr_dbug_data_cfg_u { mmr_t sh_md_jnr_dbug_data_cfg_regval; struct { @@ -24029,36 +12978,12 @@ typedef union sh_md_jnr_dbug_data_cfg_u mmr_t reserved_7 : 33; } sh_md_jnr_dbug_data_cfg_s; } sh_md_jnr_dbug_data_cfg_u_t; -#else -typedef union sh_md_jnr_dbug_data_cfg_u { - mmr_t sh_md_jnr_dbug_data_cfg_regval; - struct { - mmr_t reserved_7 : 33; - mmr_t nibble7_sel : 3; - mmr_t reserved_6 : 1; - mmr_t nibble6_sel : 3; - mmr_t reserved_5 : 1; - mmr_t nibble5_sel : 3; - mmr_t reserved_4 : 1; - mmr_t nibble4_sel : 3; - mmr_t reserved_3 : 1; - mmr_t nibble3_sel : 3; - mmr_t reserved_2 : 1; - mmr_t nibble2_sel : 3; - mmr_t reserved_1 : 1; - mmr_t nibble1_sel : 3; - mmr_t reserved_0 : 1; - mmr_t nibble0_sel : 3; - } sh_md_jnr_dbug_data_cfg_s; -} sh_md_jnr_dbug_data_cfg_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_LAST_CREDIT" */ /* captures last credit values on reset */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_last_credit_u { mmr_t sh_md_last_credit_regval; struct { @@ -24074,30 +12999,12 @@ typedef union sh_md_last_credit_u { mmr_t reserved_4 : 26; } sh_md_last_credit_s; } sh_md_last_credit_u_t; -#else -typedef union sh_md_last_credit_u { - mmr_t sh_md_last_credit_regval; - struct { - mmr_t reserved_4 : 26; - mmr_t to_lb : 6; - mmr_t reserved_3 : 2; - mmr_t rp_to_xn : 6; - mmr_t reserved_2 : 2; - mmr_t rq_to_xn : 6; - mmr_t reserved_1 : 2; - mmr_t rp_to_pi : 6; - mmr_t reserved_0 : 2; - mmr_t rq_to_pi : 6; - } sh_md_last_credit_s; -} sh_md_last_credit_u_t; -#endif /* ==================================================================== */ /* Register "SH_MEM_CAPTURE_ADDR" */ /* Address capture address register */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_mem_capture_addr_u { mmr_t sh_mem_capture_addr_regval; struct { @@ -24107,24 +13014,12 @@ typedef union sh_mem_capture_addr_u { mmr_t reserved_1 : 20; } sh_mem_capture_addr_s; } sh_mem_capture_addr_u_t; -#else -typedef union sh_mem_capture_addr_u { - mmr_t sh_mem_capture_addr_regval; - struct { - mmr_t reserved_1 : 20; - mmr_t cmd : 8; - mmr_t addr : 33; - mmr_t reserved_0 : 3; - } sh_mem_capture_addr_s; -} sh_mem_capture_addr_u_t; -#endif /* ==================================================================== */ /* Register "SH_MEM_CAPTURE_MASK" */ /* Address capture mask register */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_mem_capture_mask_u { mmr_t sh_mem_capture_mask_regval; struct { @@ -24136,26 +13031,12 @@ typedef union sh_mem_capture_mask_u { mmr_t reserved_1 : 18; } sh_mem_capture_mask_s; } sh_mem_capture_mask_u_t; -#else -typedef union sh_mem_capture_mask_u { - mmr_t sh_mem_capture_mask_regval; - struct { - mmr_t reserved_1 : 18; - mmr_t enable_remote : 1; - mmr_t enable_local : 1; - mmr_t cmd : 8; - mmr_t addr : 33; - mmr_t reserved_0 : 3; - } sh_mem_capture_mask_s; -} sh_mem_capture_mask_u_t; -#endif /* ==================================================================== */ /* Register "SH_MEM_CAPTURE_HDR" */ /* Address capture header register */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_mem_capture_hdr_u { mmr_t sh_mem_capture_hdr_regval; struct { @@ -24166,25 +13047,12 @@ typedef union sh_mem_capture_hdr_u { mmr_t cntr : 6; } sh_mem_capture_hdr_s; } sh_mem_capture_hdr_u_t; -#else -typedef union sh_mem_capture_hdr_u { - mmr_t sh_mem_capture_hdr_regval; - struct { - mmr_t cntr : 6; - mmr_t src : 14; - mmr_t cmd : 8; - mmr_t addr : 33; - mmr_t reserved_0 : 3; - } sh_mem_capture_hdr_s; -} sh_mem_capture_hdr_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_DIR_CONFIG" */ /* DQ directory config register */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqlp_mmr_dir_config_u { mmr_t sh_md_dqlp_mmr_dir_config_regval; struct { @@ -24194,276 +13062,156 @@ typedef union sh_md_dqlp_mmr_dir_config_ mmr_t reserved_0 : 59; } sh_md_dqlp_mmr_dir_config_s; } sh_md_dqlp_mmr_dir_config_u_t; -#else -typedef union sh_md_dqlp_mmr_dir_config_u { - mmr_t sh_md_dqlp_mmr_dir_config_regval; - struct { - mmr_t reserved_0 : 59; - mmr_t en_dirpois : 1; - mmr_t en_direcc : 1; - mmr_t sys_size : 3; - } sh_md_dqlp_mmr_dir_config_s; -} sh_md_dqlp_mmr_dir_config_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_DIR_PRESVEC0" */ /* node [63:0] presence bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_md_dqlp_mmr_dir_presvec0_u { - mmr_t sh_md_dqlp_mmr_dir_presvec0_regval; - struct { - mmr_t vec : 64; - } sh_md_dqlp_mmr_dir_presvec0_s; -} sh_md_dqlp_mmr_dir_presvec0_u_t; -#else typedef union sh_md_dqlp_mmr_dir_presvec0_u { mmr_t sh_md_dqlp_mmr_dir_presvec0_regval; struct { mmr_t vec : 64; } sh_md_dqlp_mmr_dir_presvec0_s; } sh_md_dqlp_mmr_dir_presvec0_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_DIR_PRESVEC1" */ /* node [127:64] presence bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_md_dqlp_mmr_dir_presvec1_u { - mmr_t sh_md_dqlp_mmr_dir_presvec1_regval; - struct { - mmr_t vec : 64; - } sh_md_dqlp_mmr_dir_presvec1_s; -} sh_md_dqlp_mmr_dir_presvec1_u_t; -#else typedef union sh_md_dqlp_mmr_dir_presvec1_u { mmr_t sh_md_dqlp_mmr_dir_presvec1_regval; struct { mmr_t vec : 64; } sh_md_dqlp_mmr_dir_presvec1_s; } sh_md_dqlp_mmr_dir_presvec1_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_DIR_PRESVEC2" */ /* node [191:128] presence bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqlp_mmr_dir_presvec2_u { mmr_t sh_md_dqlp_mmr_dir_presvec2_regval; struct { mmr_t vec : 64; } sh_md_dqlp_mmr_dir_presvec2_s; } sh_md_dqlp_mmr_dir_presvec2_u_t; -#else -typedef union sh_md_dqlp_mmr_dir_presvec2_u { - mmr_t sh_md_dqlp_mmr_dir_presvec2_regval; - struct { - mmr_t vec : 64; - } sh_md_dqlp_mmr_dir_presvec2_s; -} sh_md_dqlp_mmr_dir_presvec2_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_DIR_PRESVEC3" */ /* node [255:192] presence bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_md_dqlp_mmr_dir_presvec3_u { - mmr_t sh_md_dqlp_mmr_dir_presvec3_regval; - struct { - mmr_t vec : 64; - } sh_md_dqlp_mmr_dir_presvec3_s; -} sh_md_dqlp_mmr_dir_presvec3_u_t; -#else typedef union sh_md_dqlp_mmr_dir_presvec3_u { mmr_t sh_md_dqlp_mmr_dir_presvec3_regval; struct { mmr_t vec : 64; } sh_md_dqlp_mmr_dir_presvec3_s; } sh_md_dqlp_mmr_dir_presvec3_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_DIR_LOCVEC0" */ /* local vector for acc=0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_md_dqlp_mmr_dir_locvec0_u { - mmr_t sh_md_dqlp_mmr_dir_locvec0_regval; - struct { - mmr_t vec : 64; - } sh_md_dqlp_mmr_dir_locvec0_s; -} sh_md_dqlp_mmr_dir_locvec0_u_t; -#else typedef union sh_md_dqlp_mmr_dir_locvec0_u { mmr_t sh_md_dqlp_mmr_dir_locvec0_regval; struct { mmr_t vec : 64; } sh_md_dqlp_mmr_dir_locvec0_s; } sh_md_dqlp_mmr_dir_locvec0_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_DIR_LOCVEC1" */ /* local vector for acc=1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_md_dqlp_mmr_dir_locvec1_u { - mmr_t sh_md_dqlp_mmr_dir_locvec1_regval; - struct { - mmr_t vec : 64; - } sh_md_dqlp_mmr_dir_locvec1_s; -} sh_md_dqlp_mmr_dir_locvec1_u_t; -#else typedef union sh_md_dqlp_mmr_dir_locvec1_u { mmr_t sh_md_dqlp_mmr_dir_locvec1_regval; struct { mmr_t vec : 64; } sh_md_dqlp_mmr_dir_locvec1_s; } sh_md_dqlp_mmr_dir_locvec1_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_DIR_LOCVEC2" */ /* local vector for acc=2 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqlp_mmr_dir_locvec2_u { mmr_t sh_md_dqlp_mmr_dir_locvec2_regval; struct { mmr_t vec : 64; } sh_md_dqlp_mmr_dir_locvec2_s; } sh_md_dqlp_mmr_dir_locvec2_u_t; -#else -typedef union sh_md_dqlp_mmr_dir_locvec2_u { - mmr_t sh_md_dqlp_mmr_dir_locvec2_regval; - struct { - mmr_t vec : 64; - } sh_md_dqlp_mmr_dir_locvec2_s; -} sh_md_dqlp_mmr_dir_locvec2_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_DIR_LOCVEC3" */ /* local vector for acc=3 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_md_dqlp_mmr_dir_locvec3_u { - mmr_t sh_md_dqlp_mmr_dir_locvec3_regval; - struct { - mmr_t vec : 64; - } sh_md_dqlp_mmr_dir_locvec3_s; -} sh_md_dqlp_mmr_dir_locvec3_u_t; -#else typedef union sh_md_dqlp_mmr_dir_locvec3_u { mmr_t sh_md_dqlp_mmr_dir_locvec3_regval; struct { mmr_t vec : 64; } sh_md_dqlp_mmr_dir_locvec3_s; } sh_md_dqlp_mmr_dir_locvec3_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_DIR_LOCVEC4" */ /* local vector for acc=4 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_md_dqlp_mmr_dir_locvec4_u { - mmr_t sh_md_dqlp_mmr_dir_locvec4_regval; - struct { - mmr_t vec : 64; - } sh_md_dqlp_mmr_dir_locvec4_s; -} sh_md_dqlp_mmr_dir_locvec4_u_t; -#else typedef union sh_md_dqlp_mmr_dir_locvec4_u { mmr_t sh_md_dqlp_mmr_dir_locvec4_regval; struct { mmr_t vec : 64; } sh_md_dqlp_mmr_dir_locvec4_s; } sh_md_dqlp_mmr_dir_locvec4_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_DIR_LOCVEC5" */ /* local vector for acc=5 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_md_dqlp_mmr_dir_locvec5_u { - mmr_t sh_md_dqlp_mmr_dir_locvec5_regval; - struct { - mmr_t vec : 64; - } sh_md_dqlp_mmr_dir_locvec5_s; -} sh_md_dqlp_mmr_dir_locvec5_u_t; -#else typedef union sh_md_dqlp_mmr_dir_locvec5_u { mmr_t sh_md_dqlp_mmr_dir_locvec5_regval; struct { mmr_t vec : 64; } sh_md_dqlp_mmr_dir_locvec5_s; } sh_md_dqlp_mmr_dir_locvec5_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_DIR_LOCVEC6" */ /* local vector for acc=6 */ -/* ==================================================================== */ - -#ifdef LITTLE_ENDIAN -typedef union sh_md_dqlp_mmr_dir_locvec6_u { - mmr_t sh_md_dqlp_mmr_dir_locvec6_regval; - struct { - mmr_t vec : 64; - } sh_md_dqlp_mmr_dir_locvec6_s; -} sh_md_dqlp_mmr_dir_locvec6_u_t; -#else +/* ==================================================================== */ + typedef union sh_md_dqlp_mmr_dir_locvec6_u { mmr_t sh_md_dqlp_mmr_dir_locvec6_regval; struct { mmr_t vec : 64; } sh_md_dqlp_mmr_dir_locvec6_s; } sh_md_dqlp_mmr_dir_locvec6_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_DIR_LOCVEC7" */ /* local vector for acc=7 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_md_dqlp_mmr_dir_locvec7_u { - mmr_t sh_md_dqlp_mmr_dir_locvec7_regval; - struct { - mmr_t vec : 64; - } sh_md_dqlp_mmr_dir_locvec7_s; -} sh_md_dqlp_mmr_dir_locvec7_u_t; -#else typedef union sh_md_dqlp_mmr_dir_locvec7_u { mmr_t sh_md_dqlp_mmr_dir_locvec7_regval; struct { mmr_t vec : 64; } sh_md_dqlp_mmr_dir_locvec7_s; } sh_md_dqlp_mmr_dir_locvec7_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_DIR_PRIVEC0" */ /* privilege vector for acc=0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqlp_mmr_dir_privec0_u { mmr_t sh_md_dqlp_mmr_dir_privec0_regval; struct { @@ -24472,23 +13220,12 @@ typedef union sh_md_dqlp_mmr_dir_privec0 mmr_t reserved_0 : 36; } sh_md_dqlp_mmr_dir_privec0_s; } sh_md_dqlp_mmr_dir_privec0_u_t; -#else -typedef union sh_md_dqlp_mmr_dir_privec0_u { - mmr_t sh_md_dqlp_mmr_dir_privec0_regval; - struct { - mmr_t reserved_0 : 36; - mmr_t out : 14; - mmr_t in : 14; - } sh_md_dqlp_mmr_dir_privec0_s; -} sh_md_dqlp_mmr_dir_privec0_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_DIR_PRIVEC1" */ /* privilege vector for acc=1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqlp_mmr_dir_privec1_u { mmr_t sh_md_dqlp_mmr_dir_privec1_regval; struct { @@ -24497,23 +13234,12 @@ typedef union sh_md_dqlp_mmr_dir_privec1 mmr_t reserved_0 : 36; } sh_md_dqlp_mmr_dir_privec1_s; } sh_md_dqlp_mmr_dir_privec1_u_t; -#else -typedef union sh_md_dqlp_mmr_dir_privec1_u { - mmr_t sh_md_dqlp_mmr_dir_privec1_regval; - struct { - mmr_t reserved_0 : 36; - mmr_t out : 14; - mmr_t in : 14; - } sh_md_dqlp_mmr_dir_privec1_s; -} sh_md_dqlp_mmr_dir_privec1_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_DIR_PRIVEC2" */ /* privilege vector for acc=2 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqlp_mmr_dir_privec2_u { mmr_t sh_md_dqlp_mmr_dir_privec2_regval; struct { @@ -24522,23 +13248,12 @@ typedef union sh_md_dqlp_mmr_dir_privec2 mmr_t reserved_0 : 36; } sh_md_dqlp_mmr_dir_privec2_s; } sh_md_dqlp_mmr_dir_privec2_u_t; -#else -typedef union sh_md_dqlp_mmr_dir_privec2_u { - mmr_t sh_md_dqlp_mmr_dir_privec2_regval; - struct { - mmr_t reserved_0 : 36; - mmr_t out : 14; - mmr_t in : 14; - } sh_md_dqlp_mmr_dir_privec2_s; -} sh_md_dqlp_mmr_dir_privec2_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_DIR_PRIVEC3" */ /* privilege vector for acc=3 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqlp_mmr_dir_privec3_u { mmr_t sh_md_dqlp_mmr_dir_privec3_regval; struct { @@ -24547,23 +13262,12 @@ typedef union sh_md_dqlp_mmr_dir_privec3 mmr_t reserved_0 : 36; } sh_md_dqlp_mmr_dir_privec3_s; } sh_md_dqlp_mmr_dir_privec3_u_t; -#else -typedef union sh_md_dqlp_mmr_dir_privec3_u { - mmr_t sh_md_dqlp_mmr_dir_privec3_regval; - struct { - mmr_t reserved_0 : 36; - mmr_t out : 14; - mmr_t in : 14; - } sh_md_dqlp_mmr_dir_privec3_s; -} sh_md_dqlp_mmr_dir_privec3_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_DIR_PRIVEC4" */ /* privilege vector for acc=4 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqlp_mmr_dir_privec4_u { mmr_t sh_md_dqlp_mmr_dir_privec4_regval; struct { @@ -24572,23 +13276,12 @@ typedef union sh_md_dqlp_mmr_dir_privec4 mmr_t reserved_0 : 36; } sh_md_dqlp_mmr_dir_privec4_s; } sh_md_dqlp_mmr_dir_privec4_u_t; -#else -typedef union sh_md_dqlp_mmr_dir_privec4_u { - mmr_t sh_md_dqlp_mmr_dir_privec4_regval; - struct { - mmr_t reserved_0 : 36; - mmr_t out : 14; - mmr_t in : 14; - } sh_md_dqlp_mmr_dir_privec4_s; -} sh_md_dqlp_mmr_dir_privec4_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_DIR_PRIVEC5" */ /* privilege vector for acc=5 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqlp_mmr_dir_privec5_u { mmr_t sh_md_dqlp_mmr_dir_privec5_regval; struct { @@ -24597,23 +13290,12 @@ typedef union sh_md_dqlp_mmr_dir_privec5 mmr_t reserved_0 : 36; } sh_md_dqlp_mmr_dir_privec5_s; } sh_md_dqlp_mmr_dir_privec5_u_t; -#else -typedef union sh_md_dqlp_mmr_dir_privec5_u { - mmr_t sh_md_dqlp_mmr_dir_privec5_regval; - struct { - mmr_t reserved_0 : 36; - mmr_t out : 14; - mmr_t in : 14; - } sh_md_dqlp_mmr_dir_privec5_s; -} sh_md_dqlp_mmr_dir_privec5_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_DIR_PRIVEC6" */ /* privilege vector for acc=6 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqlp_mmr_dir_privec6_u { mmr_t sh_md_dqlp_mmr_dir_privec6_regval; struct { @@ -24622,23 +13304,12 @@ typedef union sh_md_dqlp_mmr_dir_privec6 mmr_t reserved_0 : 36; } sh_md_dqlp_mmr_dir_privec6_s; } sh_md_dqlp_mmr_dir_privec6_u_t; -#else -typedef union sh_md_dqlp_mmr_dir_privec6_u { - mmr_t sh_md_dqlp_mmr_dir_privec6_regval; - struct { - mmr_t reserved_0 : 36; - mmr_t out : 14; - mmr_t in : 14; - } sh_md_dqlp_mmr_dir_privec6_s; -} sh_md_dqlp_mmr_dir_privec6_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_DIR_PRIVEC7" */ /* privilege vector for acc=7 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqlp_mmr_dir_privec7_u { mmr_t sh_md_dqlp_mmr_dir_privec7_regval; struct { @@ -24647,23 +13318,12 @@ typedef union sh_md_dqlp_mmr_dir_privec7 mmr_t reserved_0 : 36; } sh_md_dqlp_mmr_dir_privec7_s; } sh_md_dqlp_mmr_dir_privec7_u_t; -#else -typedef union sh_md_dqlp_mmr_dir_privec7_u { - mmr_t sh_md_dqlp_mmr_dir_privec7_regval; - struct { - mmr_t reserved_0 : 36; - mmr_t out : 14; - mmr_t in : 14; - } sh_md_dqlp_mmr_dir_privec7_s; -} sh_md_dqlp_mmr_dir_privec7_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_DIR_TIMER" */ /* MD SXRO timer */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqlp_mmr_dir_timer_u { mmr_t sh_md_dqlp_mmr_dir_timer_regval; struct { @@ -24673,24 +13333,12 @@ typedef union sh_md_dqlp_mmr_dir_timer_u mmr_t reserved_0 : 42; } sh_md_dqlp_mmr_dir_timer_s; } sh_md_dqlp_mmr_dir_timer_u_t; -#else -typedef union sh_md_dqlp_mmr_dir_timer_u { - mmr_t sh_md_dqlp_mmr_dir_timer_regval; - struct { - mmr_t reserved_0 : 42; - mmr_t timer_cur : 9; - mmr_t timer_en : 1; - mmr_t timer_div : 12; - } sh_md_dqlp_mmr_dir_timer_s; -} sh_md_dqlp_mmr_dir_timer_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_PIOWD_DIR_ENTRY" */ /* directory pio write data */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqlp_mmr_piowd_dir_entry_u { mmr_t sh_md_dqlp_mmr_piowd_dir_entry_regval; struct { @@ -24701,25 +13349,12 @@ typedef union sh_md_dqlp_mmr_piowd_dir_e mmr_t reserved_0 : 6; } sh_md_dqlp_mmr_piowd_dir_entry_s; } sh_md_dqlp_mmr_piowd_dir_entry_u_t; -#else -typedef union sh_md_dqlp_mmr_piowd_dir_entry_u { - mmr_t sh_md_dqlp_mmr_piowd_dir_entry_regval; - struct { - mmr_t reserved_0 : 6; - mmr_t acc : 3; - mmr_t pri : 3; - mmr_t dirb : 26; - mmr_t dira : 26; - } sh_md_dqlp_mmr_piowd_dir_entry_s; -} sh_md_dqlp_mmr_piowd_dir_entry_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_PIOWD_DIR_ECC" */ /* directory ecc register */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqlp_mmr_piowd_dir_ecc_u { mmr_t sh_md_dqlp_mmr_piowd_dir_ecc_regval; struct { @@ -24728,23 +13363,12 @@ typedef union sh_md_dqlp_mmr_piowd_dir_e mmr_t reserved_0 : 50; } sh_md_dqlp_mmr_piowd_dir_ecc_s; } sh_md_dqlp_mmr_piowd_dir_ecc_u_t; -#else -typedef union sh_md_dqlp_mmr_piowd_dir_ecc_u { - mmr_t sh_md_dqlp_mmr_piowd_dir_ecc_regval; - struct { - mmr_t reserved_0 : 50; - mmr_t eccb : 7; - mmr_t ecca : 7; - } sh_md_dqlp_mmr_piowd_dir_ecc_s; -} sh_md_dqlp_mmr_piowd_dir_ecc_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_XPIORD_XDIR_ENTRY" */ /* x directory pio read data */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqlp_mmr_xpiord_xdir_entry_u { mmr_t sh_md_dqlp_mmr_xpiord_xdir_entry_regval; struct { @@ -24757,27 +13381,12 @@ typedef union sh_md_dqlp_mmr_xpiord_xdir mmr_t reserved_0 : 4; } sh_md_dqlp_mmr_xpiord_xdir_entry_s; } sh_md_dqlp_mmr_xpiord_xdir_entry_u_t; -#else -typedef union sh_md_dqlp_mmr_xpiord_xdir_entry_u { - mmr_t sh_md_dqlp_mmr_xpiord_xdir_entry_regval; - struct { - mmr_t reserved_0 : 4; - mmr_t unc : 1; - mmr_t cor : 1; - mmr_t acc : 3; - mmr_t pri : 3; - mmr_t dirb : 26; - mmr_t dira : 26; - } sh_md_dqlp_mmr_xpiord_xdir_entry_s; -} sh_md_dqlp_mmr_xpiord_xdir_entry_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_XPIORD_XDIR_ECC" */ /* x directory ecc */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqlp_mmr_xpiord_xdir_ecc_u { mmr_t sh_md_dqlp_mmr_xpiord_xdir_ecc_regval; struct { @@ -24786,23 +13395,12 @@ typedef union sh_md_dqlp_mmr_xpiord_xdir mmr_t reserved_0 : 50; } sh_md_dqlp_mmr_xpiord_xdir_ecc_s; } sh_md_dqlp_mmr_xpiord_xdir_ecc_u_t; -#else -typedef union sh_md_dqlp_mmr_xpiord_xdir_ecc_u { - mmr_t sh_md_dqlp_mmr_xpiord_xdir_ecc_regval; - struct { - mmr_t reserved_0 : 50; - mmr_t eccb : 7; - mmr_t ecca : 7; - } sh_md_dqlp_mmr_xpiord_xdir_ecc_s; -} sh_md_dqlp_mmr_xpiord_xdir_ecc_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_YPIORD_YDIR_ENTRY" */ /* y directory pio read data */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqlp_mmr_ypiord_ydir_entry_u { mmr_t sh_md_dqlp_mmr_ypiord_ydir_entry_regval; struct { @@ -24815,27 +13413,12 @@ typedef union sh_md_dqlp_mmr_ypiord_ydir mmr_t reserved_0 : 4; } sh_md_dqlp_mmr_ypiord_ydir_entry_s; } sh_md_dqlp_mmr_ypiord_ydir_entry_u_t; -#else -typedef union sh_md_dqlp_mmr_ypiord_ydir_entry_u { - mmr_t sh_md_dqlp_mmr_ypiord_ydir_entry_regval; - struct { - mmr_t reserved_0 : 4; - mmr_t unc : 1; - mmr_t cor : 1; - mmr_t acc : 3; - mmr_t pri : 3; - mmr_t dirb : 26; - mmr_t dira : 26; - } sh_md_dqlp_mmr_ypiord_ydir_entry_s; -} sh_md_dqlp_mmr_ypiord_ydir_entry_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_YPIORD_YDIR_ECC" */ /* y directory ecc */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqlp_mmr_ypiord_ydir_ecc_u { mmr_t sh_md_dqlp_mmr_ypiord_ydir_ecc_regval; struct { @@ -24844,23 +13427,12 @@ typedef union sh_md_dqlp_mmr_ypiord_ydir mmr_t reserved_0 : 50; } sh_md_dqlp_mmr_ypiord_ydir_ecc_s; } sh_md_dqlp_mmr_ypiord_ydir_ecc_u_t; -#else -typedef union sh_md_dqlp_mmr_ypiord_ydir_ecc_u { - mmr_t sh_md_dqlp_mmr_ypiord_ydir_ecc_regval; - struct { - mmr_t reserved_0 : 50; - mmr_t eccb : 7; - mmr_t ecca : 7; - } sh_md_dqlp_mmr_ypiord_ydir_ecc_s; -} sh_md_dqlp_mmr_ypiord_ydir_ecc_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_XCERR1" */ /* correctable dir ecc group 1 error register */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqlp_mmr_xcerr1_u { mmr_t sh_md_dqlp_mmr_xcerr1_regval; struct { @@ -24871,25 +13443,12 @@ typedef union sh_md_dqlp_mmr_xcerr1_u { mmr_t reserved_0 : 25; } sh_md_dqlp_mmr_xcerr1_s; } sh_md_dqlp_mmr_xcerr1_u_t; -#else -typedef union sh_md_dqlp_mmr_xcerr1_u { - mmr_t sh_md_dqlp_mmr_xcerr1_regval; - struct { - mmr_t reserved_0 : 25; - mmr_t arm : 1; - mmr_t more : 1; - mmr_t val : 1; - mmr_t grp1 : 36; - } sh_md_dqlp_mmr_xcerr1_s; -} sh_md_dqlp_mmr_xcerr1_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_XCERR2" */ /* correctable dir ecc group 2 error register */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqlp_mmr_xcerr2_u { mmr_t sh_md_dqlp_mmr_xcerr2_regval; struct { @@ -24899,24 +13458,12 @@ typedef union sh_md_dqlp_mmr_xcerr2_u { mmr_t reserved_0 : 26; } sh_md_dqlp_mmr_xcerr2_s; } sh_md_dqlp_mmr_xcerr2_u_t; -#else -typedef union sh_md_dqlp_mmr_xcerr2_u { - mmr_t sh_md_dqlp_mmr_xcerr2_regval; - struct { - mmr_t reserved_0 : 26; - mmr_t more : 1; - mmr_t val : 1; - mmr_t grp2 : 36; - } sh_md_dqlp_mmr_xcerr2_s; -} sh_md_dqlp_mmr_xcerr2_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_XUERR1" */ /* uncorrectable dir ecc group 1 error register */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqlp_mmr_xuerr1_u { mmr_t sh_md_dqlp_mmr_xuerr1_regval; struct { @@ -24927,25 +13474,12 @@ typedef union sh_md_dqlp_mmr_xuerr1_u { mmr_t reserved_0 : 25; } sh_md_dqlp_mmr_xuerr1_s; } sh_md_dqlp_mmr_xuerr1_u_t; -#else -typedef union sh_md_dqlp_mmr_xuerr1_u { - mmr_t sh_md_dqlp_mmr_xuerr1_regval; - struct { - mmr_t reserved_0 : 25; - mmr_t arm : 1; - mmr_t more : 1; - mmr_t val : 1; - mmr_t grp1 : 36; - } sh_md_dqlp_mmr_xuerr1_s; -} sh_md_dqlp_mmr_xuerr1_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_XUERR2" */ /* uncorrectable dir ecc group 2 error register */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqlp_mmr_xuerr2_u { mmr_t sh_md_dqlp_mmr_xuerr2_regval; struct { @@ -24955,24 +13489,12 @@ typedef union sh_md_dqlp_mmr_xuerr2_u { mmr_t reserved_0 : 26; } sh_md_dqlp_mmr_xuerr2_s; } sh_md_dqlp_mmr_xuerr2_u_t; -#else -typedef union sh_md_dqlp_mmr_xuerr2_u { - mmr_t sh_md_dqlp_mmr_xuerr2_regval; - struct { - mmr_t reserved_0 : 26; - mmr_t more : 1; - mmr_t val : 1; - mmr_t grp2 : 36; - } sh_md_dqlp_mmr_xuerr2_s; -} sh_md_dqlp_mmr_xuerr2_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_XPERR" */ /* protocol error register */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqlp_mmr_xperr_u { mmr_t sh_md_dqlp_mmr_xperr_regval; struct { @@ -24990,32 +13512,12 @@ typedef union sh_md_dqlp_mmr_xperr_u { mmr_t reserved_0 : 1; } sh_md_dqlp_mmr_xperr_s; } sh_md_dqlp_mmr_xperr_u_t; -#else -typedef union sh_md_dqlp_mmr_xperr_u { - mmr_t sh_md_dqlp_mmr_xperr_regval; - struct { - mmr_t reserved_0 : 1; - mmr_t arm : 1; - mmr_t more : 1; - mmr_t val : 1; - mmr_t mybit : 8; - mmr_t unc : 1; - mmr_t cor : 1; - mmr_t priv : 1; - mmr_t prige : 1; - mmr_t src : 14; - mmr_t cmd : 8; - mmr_t dir : 26; - } sh_md_dqlp_mmr_xperr_s; -} sh_md_dqlp_mmr_xperr_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_YCERR1" */ /* correctable dir ecc group 1 error register */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqlp_mmr_ycerr1_u { mmr_t sh_md_dqlp_mmr_ycerr1_regval; struct { @@ -25026,25 +13528,12 @@ typedef union sh_md_dqlp_mmr_ycerr1_u { mmr_t reserved_0 : 25; } sh_md_dqlp_mmr_ycerr1_s; } sh_md_dqlp_mmr_ycerr1_u_t; -#else -typedef union sh_md_dqlp_mmr_ycerr1_u { - mmr_t sh_md_dqlp_mmr_ycerr1_regval; - struct { - mmr_t reserved_0 : 25; - mmr_t arm : 1; - mmr_t more : 1; - mmr_t val : 1; - mmr_t grp1 : 36; - } sh_md_dqlp_mmr_ycerr1_s; -} sh_md_dqlp_mmr_ycerr1_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_YCERR2" */ /* correctable dir ecc group 2 error register */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqlp_mmr_ycerr2_u { mmr_t sh_md_dqlp_mmr_ycerr2_regval; struct { @@ -25054,24 +13543,12 @@ typedef union sh_md_dqlp_mmr_ycerr2_u { mmr_t reserved_0 : 26; } sh_md_dqlp_mmr_ycerr2_s; } sh_md_dqlp_mmr_ycerr2_u_t; -#else -typedef union sh_md_dqlp_mmr_ycerr2_u { - mmr_t sh_md_dqlp_mmr_ycerr2_regval; - struct { - mmr_t reserved_0 : 26; - mmr_t more : 1; - mmr_t val : 1; - mmr_t grp2 : 36; - } sh_md_dqlp_mmr_ycerr2_s; -} sh_md_dqlp_mmr_ycerr2_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_YUERR1" */ /* uncorrectable dir ecc group 1 error register */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqlp_mmr_yuerr1_u { mmr_t sh_md_dqlp_mmr_yuerr1_regval; struct { @@ -25082,25 +13559,12 @@ typedef union sh_md_dqlp_mmr_yuerr1_u { mmr_t reserved_0 : 25; } sh_md_dqlp_mmr_yuerr1_s; } sh_md_dqlp_mmr_yuerr1_u_t; -#else -typedef union sh_md_dqlp_mmr_yuerr1_u { - mmr_t sh_md_dqlp_mmr_yuerr1_regval; - struct { - mmr_t reserved_0 : 25; - mmr_t arm : 1; - mmr_t more : 1; - mmr_t val : 1; - mmr_t grp1 : 36; - } sh_md_dqlp_mmr_yuerr1_s; -} sh_md_dqlp_mmr_yuerr1_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_YUERR2" */ /* uncorrectable dir ecc group 2 error register */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqlp_mmr_yuerr2_u { mmr_t sh_md_dqlp_mmr_yuerr2_regval; struct { @@ -25110,24 +13574,12 @@ typedef union sh_md_dqlp_mmr_yuerr2_u { mmr_t reserved_0 : 26; } sh_md_dqlp_mmr_yuerr2_s; } sh_md_dqlp_mmr_yuerr2_u_t; -#else -typedef union sh_md_dqlp_mmr_yuerr2_u { - mmr_t sh_md_dqlp_mmr_yuerr2_regval; - struct { - mmr_t reserved_0 : 26; - mmr_t more : 1; - mmr_t val : 1; - mmr_t grp2 : 36; - } sh_md_dqlp_mmr_yuerr2_s; -} sh_md_dqlp_mmr_yuerr2_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_YPERR" */ /* protocol error register */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqlp_mmr_yperr_u { mmr_t sh_md_dqlp_mmr_yperr_regval; struct { @@ -25136,41 +13588,21 @@ typedef union sh_md_dqlp_mmr_yperr_u { mmr_t src : 14; mmr_t prige : 1; mmr_t priv : 1; - mmr_t cor : 1; - mmr_t unc : 1; - mmr_t mybit : 8; - mmr_t val : 1; - mmr_t more : 1; - mmr_t arm : 1; - mmr_t reserved_0 : 1; - } sh_md_dqlp_mmr_yperr_s; -} sh_md_dqlp_mmr_yperr_u_t; -#else -typedef union sh_md_dqlp_mmr_yperr_u { - mmr_t sh_md_dqlp_mmr_yperr_regval; - struct { - mmr_t reserved_0 : 1; - mmr_t arm : 1; - mmr_t more : 1; - mmr_t val : 1; - mmr_t mybit : 8; - mmr_t unc : 1; - mmr_t cor : 1; - mmr_t priv : 1; - mmr_t prige : 1; - mmr_t src : 14; - mmr_t cmd : 8; - mmr_t dir : 26; + mmr_t cor : 1; + mmr_t unc : 1; + mmr_t mybit : 8; + mmr_t val : 1; + mmr_t more : 1; + mmr_t arm : 1; + mmr_t reserved_0 : 1; } sh_md_dqlp_mmr_yperr_s; } sh_md_dqlp_mmr_yperr_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_DIR_CMDTRIG" */ /* cmd triggers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqlp_mmr_dir_cmdtrig_u { mmr_t sh_md_dqlp_mmr_dir_cmdtrig_regval; struct { @@ -25181,25 +13613,12 @@ typedef union sh_md_dqlp_mmr_dir_cmdtrig mmr_t reserved_0 : 32; } sh_md_dqlp_mmr_dir_cmdtrig_s; } sh_md_dqlp_mmr_dir_cmdtrig_u_t; -#else -typedef union sh_md_dqlp_mmr_dir_cmdtrig_u { - mmr_t sh_md_dqlp_mmr_dir_cmdtrig_regval; - struct { - mmr_t reserved_0 : 32; - mmr_t cmd3 : 8; - mmr_t cmd2 : 8; - mmr_t cmd1 : 8; - mmr_t cmd0 : 8; - } sh_md_dqlp_mmr_dir_cmdtrig_s; -} sh_md_dqlp_mmr_dir_cmdtrig_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_DIR_TBLTRIG" */ /* dir table trigger */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqlp_mmr_dir_tbltrig_u { mmr_t sh_md_dqlp_mmr_dir_tbltrig_regval; struct { @@ -25212,27 +13631,12 @@ typedef union sh_md_dqlp_mmr_dir_tbltrig mmr_t reserved_0 : 22; } sh_md_dqlp_mmr_dir_tbltrig_s; } sh_md_dqlp_mmr_dir_tbltrig_u_t; -#else -typedef union sh_md_dqlp_mmr_dir_tbltrig_u { - mmr_t sh_md_dqlp_mmr_dir_tbltrig_regval; - struct { - mmr_t reserved_0 : 22; - mmr_t mybit : 8; - mmr_t dirst : 9; - mmr_t prige : 1; - mmr_t acc : 2; - mmr_t cmd : 8; - mmr_t src : 14; - } sh_md_dqlp_mmr_dir_tbltrig_s; -} sh_md_dqlp_mmr_dir_tbltrig_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_DIR_TBLMASK" */ /* dir table trigger mask */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqlp_mmr_dir_tblmask_u { mmr_t sh_md_dqlp_mmr_dir_tblmask_regval; struct { @@ -25245,27 +13649,12 @@ typedef union sh_md_dqlp_mmr_dir_tblmask mmr_t reserved_0 : 22; } sh_md_dqlp_mmr_dir_tblmask_s; } sh_md_dqlp_mmr_dir_tblmask_u_t; -#else -typedef union sh_md_dqlp_mmr_dir_tblmask_u { - mmr_t sh_md_dqlp_mmr_dir_tblmask_regval; - struct { - mmr_t reserved_0 : 22; - mmr_t mybit : 8; - mmr_t dirst : 9; - mmr_t prige : 1; - mmr_t acc : 2; - mmr_t cmd : 8; - mmr_t src : 14; - } sh_md_dqlp_mmr_dir_tblmask_s; -} sh_md_dqlp_mmr_dir_tblmask_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_XBIST_H" */ /* rising edge bist/fill pattern */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqlp_mmr_xbist_h_u { mmr_t sh_md_dqlp_mmr_xbist_h_regval; struct { @@ -25277,26 +13666,12 @@ typedef union sh_md_dqlp_mmr_xbist_h_u { mmr_t reserved_1 : 21; } sh_md_dqlp_mmr_xbist_h_s; } sh_md_dqlp_mmr_xbist_h_u_t; -#else -typedef union sh_md_dqlp_mmr_xbist_h_u { - mmr_t sh_md_dqlp_mmr_xbist_h_regval; - struct { - mmr_t reserved_1 : 21; - mmr_t arm : 1; - mmr_t rot : 1; - mmr_t inv : 1; - mmr_t reserved_0 : 8; - mmr_t pat : 32; - } sh_md_dqlp_mmr_xbist_h_s; -} sh_md_dqlp_mmr_xbist_h_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_XBIST_L" */ /* falling edge bist/fill pattern */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqlp_mmr_xbist_l_u { mmr_t sh_md_dqlp_mmr_xbist_l_regval; struct { @@ -25307,25 +13682,12 @@ typedef union sh_md_dqlp_mmr_xbist_l_u { mmr_t reserved_1 : 22; } sh_md_dqlp_mmr_xbist_l_s; } sh_md_dqlp_mmr_xbist_l_u_t; -#else -typedef union sh_md_dqlp_mmr_xbist_l_u { - mmr_t sh_md_dqlp_mmr_xbist_l_regval; - struct { - mmr_t reserved_1 : 22; - mmr_t rot : 1; - mmr_t inv : 1; - mmr_t reserved_0 : 8; - mmr_t pat : 32; - } sh_md_dqlp_mmr_xbist_l_s; -} sh_md_dqlp_mmr_xbist_l_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_XBIST_ERR_H" */ /* rising edge bist error pattern */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqlp_mmr_xbist_err_h_u { mmr_t sh_md_dqlp_mmr_xbist_err_h_regval; struct { @@ -25336,25 +13698,12 @@ typedef union sh_md_dqlp_mmr_xbist_err_h mmr_t reserved_1 : 22; } sh_md_dqlp_mmr_xbist_err_h_s; } sh_md_dqlp_mmr_xbist_err_h_u_t; -#else -typedef union sh_md_dqlp_mmr_xbist_err_h_u { - mmr_t sh_md_dqlp_mmr_xbist_err_h_regval; - struct { - mmr_t reserved_1 : 22; - mmr_t more : 1; - mmr_t val : 1; - mmr_t reserved_0 : 8; - mmr_t pat : 32; - } sh_md_dqlp_mmr_xbist_err_h_s; -} sh_md_dqlp_mmr_xbist_err_h_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_XBIST_ERR_L" */ /* falling edge bist error pattern */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqlp_mmr_xbist_err_l_u { mmr_t sh_md_dqlp_mmr_xbist_err_l_regval; struct { @@ -25365,25 +13714,12 @@ typedef union sh_md_dqlp_mmr_xbist_err_l mmr_t reserved_1 : 22; } sh_md_dqlp_mmr_xbist_err_l_s; } sh_md_dqlp_mmr_xbist_err_l_u_t; -#else -typedef union sh_md_dqlp_mmr_xbist_err_l_u { - mmr_t sh_md_dqlp_mmr_xbist_err_l_regval; - struct { - mmr_t reserved_1 : 22; - mmr_t more : 1; - mmr_t val : 1; - mmr_t reserved_0 : 8; - mmr_t pat : 32; - } sh_md_dqlp_mmr_xbist_err_l_s; -} sh_md_dqlp_mmr_xbist_err_l_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_YBIST_H" */ /* rising edge bist/fill pattern */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqlp_mmr_ybist_h_u { mmr_t sh_md_dqlp_mmr_ybist_h_regval; struct { @@ -25395,26 +13731,12 @@ typedef union sh_md_dqlp_mmr_ybist_h_u { mmr_t reserved_1 : 21; } sh_md_dqlp_mmr_ybist_h_s; } sh_md_dqlp_mmr_ybist_h_u_t; -#else -typedef union sh_md_dqlp_mmr_ybist_h_u { - mmr_t sh_md_dqlp_mmr_ybist_h_regval; - struct { - mmr_t reserved_1 : 21; - mmr_t arm : 1; - mmr_t rot : 1; - mmr_t inv : 1; - mmr_t reserved_0 : 8; - mmr_t pat : 32; - } sh_md_dqlp_mmr_ybist_h_s; -} sh_md_dqlp_mmr_ybist_h_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_YBIST_L" */ /* falling edge bist/fill pattern */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqlp_mmr_ybist_l_u { mmr_t sh_md_dqlp_mmr_ybist_l_regval; struct { @@ -25425,25 +13747,12 @@ typedef union sh_md_dqlp_mmr_ybist_l_u { mmr_t reserved_1 : 22; } sh_md_dqlp_mmr_ybist_l_s; } sh_md_dqlp_mmr_ybist_l_u_t; -#else -typedef union sh_md_dqlp_mmr_ybist_l_u { - mmr_t sh_md_dqlp_mmr_ybist_l_regval; - struct { - mmr_t reserved_1 : 22; - mmr_t rot : 1; - mmr_t inv : 1; - mmr_t reserved_0 : 8; - mmr_t pat : 32; - } sh_md_dqlp_mmr_ybist_l_s; -} sh_md_dqlp_mmr_ybist_l_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_YBIST_ERR_H" */ /* rising edge bist error pattern */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqlp_mmr_ybist_err_h_u { mmr_t sh_md_dqlp_mmr_ybist_err_h_regval; struct { @@ -25454,25 +13763,12 @@ typedef union sh_md_dqlp_mmr_ybist_err_h mmr_t reserved_1 : 22; } sh_md_dqlp_mmr_ybist_err_h_s; } sh_md_dqlp_mmr_ybist_err_h_u_t; -#else -typedef union sh_md_dqlp_mmr_ybist_err_h_u { - mmr_t sh_md_dqlp_mmr_ybist_err_h_regval; - struct { - mmr_t reserved_1 : 22; - mmr_t more : 1; - mmr_t val : 1; - mmr_t reserved_0 : 8; - mmr_t pat : 32; - } sh_md_dqlp_mmr_ybist_err_h_s; -} sh_md_dqlp_mmr_ybist_err_h_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLP_MMR_YBIST_ERR_L" */ /* falling edge bist error pattern */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqlp_mmr_ybist_err_l_u { mmr_t sh_md_dqlp_mmr_ybist_err_l_regval; struct { @@ -25483,25 +13779,12 @@ typedef union sh_md_dqlp_mmr_ybist_err_l mmr_t reserved_1 : 22; } sh_md_dqlp_mmr_ybist_err_l_s; } sh_md_dqlp_mmr_ybist_err_l_u_t; -#else -typedef union sh_md_dqlp_mmr_ybist_err_l_u { - mmr_t sh_md_dqlp_mmr_ybist_err_l_regval; - struct { - mmr_t reserved_1 : 22; - mmr_t more : 1; - mmr_t val : 1; - mmr_t reserved_0 : 8; - mmr_t pat : 32; - } sh_md_dqlp_mmr_ybist_err_l_s; -} sh_md_dqlp_mmr_ybist_err_l_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLS_MMR_XBIST_H" */ /* rising edge bist/fill pattern */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqls_mmr_xbist_h_u { mmr_t sh_md_dqls_mmr_xbist_h_regval; struct { @@ -25512,25 +13795,12 @@ typedef union sh_md_dqls_mmr_xbist_h_u { mmr_t reserved_0 : 21; } sh_md_dqls_mmr_xbist_h_s; } sh_md_dqls_mmr_xbist_h_u_t; -#else -typedef union sh_md_dqls_mmr_xbist_h_u { - mmr_t sh_md_dqls_mmr_xbist_h_regval; - struct { - mmr_t reserved_0 : 21; - mmr_t arm : 1; - mmr_t rot : 1; - mmr_t inv : 1; - mmr_t pat : 40; - } sh_md_dqls_mmr_xbist_h_s; -} sh_md_dqls_mmr_xbist_h_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLS_MMR_XBIST_L" */ /* falling edge bist/fill pattern */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqls_mmr_xbist_l_u { mmr_t sh_md_dqls_mmr_xbist_l_regval; struct { @@ -25540,24 +13810,12 @@ typedef union sh_md_dqls_mmr_xbist_l_u { mmr_t reserved_0 : 22; } sh_md_dqls_mmr_xbist_l_s; } sh_md_dqls_mmr_xbist_l_u_t; -#else -typedef union sh_md_dqls_mmr_xbist_l_u { - mmr_t sh_md_dqls_mmr_xbist_l_regval; - struct { - mmr_t reserved_0 : 22; - mmr_t rot : 1; - mmr_t inv : 1; - mmr_t pat : 40; - } sh_md_dqls_mmr_xbist_l_s; -} sh_md_dqls_mmr_xbist_l_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLS_MMR_XBIST_ERR_H" */ /* rising edge bist error pattern */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqls_mmr_xbist_err_h_u { mmr_t sh_md_dqls_mmr_xbist_err_h_regval; struct { @@ -25567,24 +13825,12 @@ typedef union sh_md_dqls_mmr_xbist_err_h mmr_t reserved_0 : 22; } sh_md_dqls_mmr_xbist_err_h_s; } sh_md_dqls_mmr_xbist_err_h_u_t; -#else -typedef union sh_md_dqls_mmr_xbist_err_h_u { - mmr_t sh_md_dqls_mmr_xbist_err_h_regval; - struct { - mmr_t reserved_0 : 22; - mmr_t more : 1; - mmr_t val : 1; - mmr_t pat : 40; - } sh_md_dqls_mmr_xbist_err_h_s; -} sh_md_dqls_mmr_xbist_err_h_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLS_MMR_XBIST_ERR_L" */ /* falling edge bist error pattern */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqls_mmr_xbist_err_l_u { mmr_t sh_md_dqls_mmr_xbist_err_l_regval; struct { @@ -25594,24 +13840,12 @@ typedef union sh_md_dqls_mmr_xbist_err_l mmr_t reserved_0 : 22; } sh_md_dqls_mmr_xbist_err_l_s; } sh_md_dqls_mmr_xbist_err_l_u_t; -#else -typedef union sh_md_dqls_mmr_xbist_err_l_u { - mmr_t sh_md_dqls_mmr_xbist_err_l_regval; - struct { - mmr_t reserved_0 : 22; - mmr_t more : 1; - mmr_t val : 1; - mmr_t pat : 40; - } sh_md_dqls_mmr_xbist_err_l_s; -} sh_md_dqls_mmr_xbist_err_l_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLS_MMR_YBIST_H" */ /* rising edge bist/fill pattern */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqls_mmr_ybist_h_u { mmr_t sh_md_dqls_mmr_ybist_h_regval; struct { @@ -25622,25 +13856,12 @@ typedef union sh_md_dqls_mmr_ybist_h_u { mmr_t reserved_0 : 21; } sh_md_dqls_mmr_ybist_h_s; } sh_md_dqls_mmr_ybist_h_u_t; -#else -typedef union sh_md_dqls_mmr_ybist_h_u { - mmr_t sh_md_dqls_mmr_ybist_h_regval; - struct { - mmr_t reserved_0 : 21; - mmr_t arm : 1; - mmr_t rot : 1; - mmr_t inv : 1; - mmr_t pat : 40; - } sh_md_dqls_mmr_ybist_h_s; -} sh_md_dqls_mmr_ybist_h_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLS_MMR_YBIST_L" */ /* falling edge bist/fill pattern */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqls_mmr_ybist_l_u { mmr_t sh_md_dqls_mmr_ybist_l_regval; struct { @@ -25650,24 +13871,12 @@ typedef union sh_md_dqls_mmr_ybist_l_u { mmr_t reserved_0 : 22; } sh_md_dqls_mmr_ybist_l_s; } sh_md_dqls_mmr_ybist_l_u_t; -#else -typedef union sh_md_dqls_mmr_ybist_l_u { - mmr_t sh_md_dqls_mmr_ybist_l_regval; - struct { - mmr_t reserved_0 : 22; - mmr_t rot : 1; - mmr_t inv : 1; - mmr_t pat : 40; - } sh_md_dqls_mmr_ybist_l_s; -} sh_md_dqls_mmr_ybist_l_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLS_MMR_YBIST_ERR_H" */ /* rising edge bist error pattern */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqls_mmr_ybist_err_h_u { mmr_t sh_md_dqls_mmr_ybist_err_h_regval; struct { @@ -25677,24 +13886,12 @@ typedef union sh_md_dqls_mmr_ybist_err_h mmr_t reserved_0 : 22; } sh_md_dqls_mmr_ybist_err_h_s; } sh_md_dqls_mmr_ybist_err_h_u_t; -#else -typedef union sh_md_dqls_mmr_ybist_err_h_u { - mmr_t sh_md_dqls_mmr_ybist_err_h_regval; - struct { - mmr_t reserved_0 : 22; - mmr_t more : 1; - mmr_t val : 1; - mmr_t pat : 40; - } sh_md_dqls_mmr_ybist_err_h_s; -} sh_md_dqls_mmr_ybist_err_h_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLS_MMR_YBIST_ERR_L" */ /* falling edge bist error pattern */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqls_mmr_ybist_err_l_u { mmr_t sh_md_dqls_mmr_ybist_err_l_regval; struct { @@ -25704,24 +13901,12 @@ typedef union sh_md_dqls_mmr_ybist_err_l mmr_t reserved_0 : 22; } sh_md_dqls_mmr_ybist_err_l_s; } sh_md_dqls_mmr_ybist_err_l_u_t; -#else -typedef union sh_md_dqls_mmr_ybist_err_l_u { - mmr_t sh_md_dqls_mmr_ybist_err_l_regval; - struct { - mmr_t reserved_0 : 22; - mmr_t more : 1; - mmr_t val : 1; - mmr_t pat : 40; - } sh_md_dqls_mmr_ybist_err_l_s; -} sh_md_dqls_mmr_ybist_err_l_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLS_MMR_JNR_DEBUG" */ /* joiner/fct debug configuration */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqls_mmr_jnr_debug_u { mmr_t sh_md_dqls_mmr_jnr_debug_regval; struct { @@ -25730,23 +13915,12 @@ typedef union sh_md_dqls_mmr_jnr_debug_u mmr_t reserved_0 : 62; } sh_md_dqls_mmr_jnr_debug_s; } sh_md_dqls_mmr_jnr_debug_u_t; -#else -typedef union sh_md_dqls_mmr_jnr_debug_u { - mmr_t sh_md_dqls_mmr_jnr_debug_regval; - struct { - mmr_t reserved_0 : 62; - mmr_t rw : 1; - mmr_t px : 1; - } sh_md_dqls_mmr_jnr_debug_s; -} sh_md_dqls_mmr_jnr_debug_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQLS_MMR_XAMOPW_ERR" */ /* amo/partial rmw ecc error register */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqls_mmr_xamopw_err_u { mmr_t sh_md_dqls_mmr_xamopw_err_regval; struct { @@ -25762,30 +13936,12 @@ typedef union sh_md_dqls_mmr_xamopw_err_ mmr_t reserved_2 : 31; } sh_md_dqls_mmr_xamopw_err_s; } sh_md_dqls_mmr_xamopw_err_u_t; -#else -typedef union sh_md_dqls_mmr_xamopw_err_u { - mmr_t sh_md_dqls_mmr_xamopw_err_regval; - struct { - mmr_t reserved_2 : 31; - mmr_t arm : 1; - mmr_t reserved_1 : 6; - mmr_t runc : 1; - mmr_t rcor : 1; - mmr_t rsyn : 8; - mmr_t reserved_0 : 6; - mmr_t sunc : 1; - mmr_t scor : 1; - mmr_t ssyn : 8; - } sh_md_dqls_mmr_xamopw_err_s; -} sh_md_dqls_mmr_xamopw_err_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_DIR_CONFIG" */ /* DQ directory config register */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrp_mmr_dir_config_u { mmr_t sh_md_dqrp_mmr_dir_config_regval; struct { @@ -25795,276 +13951,156 @@ typedef union sh_md_dqrp_mmr_dir_config_ mmr_t reserved_0 : 59; } sh_md_dqrp_mmr_dir_config_s; } sh_md_dqrp_mmr_dir_config_u_t; -#else -typedef union sh_md_dqrp_mmr_dir_config_u { - mmr_t sh_md_dqrp_mmr_dir_config_regval; - struct { - mmr_t reserved_0 : 59; - mmr_t en_dirpois : 1; - mmr_t en_direcc : 1; - mmr_t sys_size : 3; - } sh_md_dqrp_mmr_dir_config_s; -} sh_md_dqrp_mmr_dir_config_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_DIR_PRESVEC0" */ /* node [63:0] presence bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_md_dqrp_mmr_dir_presvec0_u { - mmr_t sh_md_dqrp_mmr_dir_presvec0_regval; - struct { - mmr_t vec : 64; - } sh_md_dqrp_mmr_dir_presvec0_s; -} sh_md_dqrp_mmr_dir_presvec0_u_t; -#else typedef union sh_md_dqrp_mmr_dir_presvec0_u { mmr_t sh_md_dqrp_mmr_dir_presvec0_regval; struct { mmr_t vec : 64; } sh_md_dqrp_mmr_dir_presvec0_s; } sh_md_dqrp_mmr_dir_presvec0_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_DIR_PRESVEC1" */ /* node [127:64] presence bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_md_dqrp_mmr_dir_presvec1_u { - mmr_t sh_md_dqrp_mmr_dir_presvec1_regval; - struct { - mmr_t vec : 64; - } sh_md_dqrp_mmr_dir_presvec1_s; -} sh_md_dqrp_mmr_dir_presvec1_u_t; -#else typedef union sh_md_dqrp_mmr_dir_presvec1_u { mmr_t sh_md_dqrp_mmr_dir_presvec1_regval; struct { mmr_t vec : 64; } sh_md_dqrp_mmr_dir_presvec1_s; } sh_md_dqrp_mmr_dir_presvec1_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_DIR_PRESVEC2" */ /* node [191:128] presence bits */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_md_dqrp_mmr_dir_presvec2_u { - mmr_t sh_md_dqrp_mmr_dir_presvec2_regval; - struct { - mmr_t vec : 64; - } sh_md_dqrp_mmr_dir_presvec2_s; -} sh_md_dqrp_mmr_dir_presvec2_u_t; -#else typedef union sh_md_dqrp_mmr_dir_presvec2_u { mmr_t sh_md_dqrp_mmr_dir_presvec2_regval; struct { mmr_t vec : 64; } sh_md_dqrp_mmr_dir_presvec2_s; } sh_md_dqrp_mmr_dir_presvec2_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_DIR_PRESVEC3" */ -/* node [255:192] presence bits */ -/* ==================================================================== */ - -#ifdef LITTLE_ENDIAN -typedef union sh_md_dqrp_mmr_dir_presvec3_u { - mmr_t sh_md_dqrp_mmr_dir_presvec3_regval; - struct { - mmr_t vec : 64; - } sh_md_dqrp_mmr_dir_presvec3_s; -} sh_md_dqrp_mmr_dir_presvec3_u_t; -#else +/* node [255:192] presence bits */ +/* ==================================================================== */ + typedef union sh_md_dqrp_mmr_dir_presvec3_u { mmr_t sh_md_dqrp_mmr_dir_presvec3_regval; struct { mmr_t vec : 64; } sh_md_dqrp_mmr_dir_presvec3_s; } sh_md_dqrp_mmr_dir_presvec3_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_DIR_LOCVEC0" */ /* local vector for acc=0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_md_dqrp_mmr_dir_locvec0_u { - mmr_t sh_md_dqrp_mmr_dir_locvec0_regval; - struct { - mmr_t vec : 64; - } sh_md_dqrp_mmr_dir_locvec0_s; -} sh_md_dqrp_mmr_dir_locvec0_u_t; -#else typedef union sh_md_dqrp_mmr_dir_locvec0_u { mmr_t sh_md_dqrp_mmr_dir_locvec0_regval; struct { mmr_t vec : 64; } sh_md_dqrp_mmr_dir_locvec0_s; } sh_md_dqrp_mmr_dir_locvec0_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_DIR_LOCVEC1" */ /* local vector for acc=1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_md_dqrp_mmr_dir_locvec1_u { - mmr_t sh_md_dqrp_mmr_dir_locvec1_regval; - struct { - mmr_t vec : 64; - } sh_md_dqrp_mmr_dir_locvec1_s; -} sh_md_dqrp_mmr_dir_locvec1_u_t; -#else typedef union sh_md_dqrp_mmr_dir_locvec1_u { mmr_t sh_md_dqrp_mmr_dir_locvec1_regval; struct { mmr_t vec : 64; } sh_md_dqrp_mmr_dir_locvec1_s; } sh_md_dqrp_mmr_dir_locvec1_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_DIR_LOCVEC2" */ /* local vector for acc=2 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_md_dqrp_mmr_dir_locvec2_u { - mmr_t sh_md_dqrp_mmr_dir_locvec2_regval; - struct { - mmr_t vec : 64; - } sh_md_dqrp_mmr_dir_locvec2_s; -} sh_md_dqrp_mmr_dir_locvec2_u_t; -#else typedef union sh_md_dqrp_mmr_dir_locvec2_u { mmr_t sh_md_dqrp_mmr_dir_locvec2_regval; struct { mmr_t vec : 64; } sh_md_dqrp_mmr_dir_locvec2_s; } sh_md_dqrp_mmr_dir_locvec2_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_DIR_LOCVEC3" */ /* local vector for acc=3 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_md_dqrp_mmr_dir_locvec3_u { - mmr_t sh_md_dqrp_mmr_dir_locvec3_regval; - struct { - mmr_t vec : 64; - } sh_md_dqrp_mmr_dir_locvec3_s; -} sh_md_dqrp_mmr_dir_locvec3_u_t; -#else typedef union sh_md_dqrp_mmr_dir_locvec3_u { mmr_t sh_md_dqrp_mmr_dir_locvec3_regval; struct { mmr_t vec : 64; } sh_md_dqrp_mmr_dir_locvec3_s; } sh_md_dqrp_mmr_dir_locvec3_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_DIR_LOCVEC4" */ /* local vector for acc=4 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_md_dqrp_mmr_dir_locvec4_u { - mmr_t sh_md_dqrp_mmr_dir_locvec4_regval; - struct { - mmr_t vec : 64; - } sh_md_dqrp_mmr_dir_locvec4_s; -} sh_md_dqrp_mmr_dir_locvec4_u_t; -#else typedef union sh_md_dqrp_mmr_dir_locvec4_u { mmr_t sh_md_dqrp_mmr_dir_locvec4_regval; struct { mmr_t vec : 64; } sh_md_dqrp_mmr_dir_locvec4_s; } sh_md_dqrp_mmr_dir_locvec4_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_DIR_LOCVEC5" */ /* local vector for acc=5 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_md_dqrp_mmr_dir_locvec5_u { - mmr_t sh_md_dqrp_mmr_dir_locvec5_regval; - struct { - mmr_t vec : 64; - } sh_md_dqrp_mmr_dir_locvec5_s; -} sh_md_dqrp_mmr_dir_locvec5_u_t; -#else typedef union sh_md_dqrp_mmr_dir_locvec5_u { mmr_t sh_md_dqrp_mmr_dir_locvec5_regval; struct { mmr_t vec : 64; } sh_md_dqrp_mmr_dir_locvec5_s; } sh_md_dqrp_mmr_dir_locvec5_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_DIR_LOCVEC6" */ /* local vector for acc=6 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_md_dqrp_mmr_dir_locvec6_u { - mmr_t sh_md_dqrp_mmr_dir_locvec6_regval; - struct { - mmr_t vec : 64; - } sh_md_dqrp_mmr_dir_locvec6_s; -} sh_md_dqrp_mmr_dir_locvec6_u_t; -#else typedef union sh_md_dqrp_mmr_dir_locvec6_u { mmr_t sh_md_dqrp_mmr_dir_locvec6_regval; struct { mmr_t vec : 64; } sh_md_dqrp_mmr_dir_locvec6_s; } sh_md_dqrp_mmr_dir_locvec6_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_DIR_LOCVEC7" */ /* local vector for acc=7 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_md_dqrp_mmr_dir_locvec7_u { - mmr_t sh_md_dqrp_mmr_dir_locvec7_regval; - struct { - mmr_t vec : 64; - } sh_md_dqrp_mmr_dir_locvec7_s; -} sh_md_dqrp_mmr_dir_locvec7_u_t; -#else typedef union sh_md_dqrp_mmr_dir_locvec7_u { mmr_t sh_md_dqrp_mmr_dir_locvec7_regval; struct { mmr_t vec : 64; } sh_md_dqrp_mmr_dir_locvec7_s; } sh_md_dqrp_mmr_dir_locvec7_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_DIR_PRIVEC0" */ /* privilege vector for acc=0 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrp_mmr_dir_privec0_u { mmr_t sh_md_dqrp_mmr_dir_privec0_regval; struct { @@ -26073,23 +14109,12 @@ typedef union sh_md_dqrp_mmr_dir_privec0 mmr_t reserved_0 : 36; } sh_md_dqrp_mmr_dir_privec0_s; } sh_md_dqrp_mmr_dir_privec0_u_t; -#else -typedef union sh_md_dqrp_mmr_dir_privec0_u { - mmr_t sh_md_dqrp_mmr_dir_privec0_regval; - struct { - mmr_t reserved_0 : 36; - mmr_t out : 14; - mmr_t in : 14; - } sh_md_dqrp_mmr_dir_privec0_s; -} sh_md_dqrp_mmr_dir_privec0_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_DIR_PRIVEC1" */ /* privilege vector for acc=1 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrp_mmr_dir_privec1_u { mmr_t sh_md_dqrp_mmr_dir_privec1_regval; struct { @@ -26098,23 +14123,12 @@ typedef union sh_md_dqrp_mmr_dir_privec1 mmr_t reserved_0 : 36; } sh_md_dqrp_mmr_dir_privec1_s; } sh_md_dqrp_mmr_dir_privec1_u_t; -#else -typedef union sh_md_dqrp_mmr_dir_privec1_u { - mmr_t sh_md_dqrp_mmr_dir_privec1_regval; - struct { - mmr_t reserved_0 : 36; - mmr_t out : 14; - mmr_t in : 14; - } sh_md_dqrp_mmr_dir_privec1_s; -} sh_md_dqrp_mmr_dir_privec1_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_DIR_PRIVEC2" */ /* privilege vector for acc=2 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrp_mmr_dir_privec2_u { mmr_t sh_md_dqrp_mmr_dir_privec2_regval; struct { @@ -26123,23 +14137,12 @@ typedef union sh_md_dqrp_mmr_dir_privec2 mmr_t reserved_0 : 36; } sh_md_dqrp_mmr_dir_privec2_s; } sh_md_dqrp_mmr_dir_privec2_u_t; -#else -typedef union sh_md_dqrp_mmr_dir_privec2_u { - mmr_t sh_md_dqrp_mmr_dir_privec2_regval; - struct { - mmr_t reserved_0 : 36; - mmr_t out : 14; - mmr_t in : 14; - } sh_md_dqrp_mmr_dir_privec2_s; -} sh_md_dqrp_mmr_dir_privec2_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_DIR_PRIVEC3" */ /* privilege vector for acc=3 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrp_mmr_dir_privec3_u { mmr_t sh_md_dqrp_mmr_dir_privec3_regval; struct { @@ -26148,23 +14151,12 @@ typedef union sh_md_dqrp_mmr_dir_privec3 mmr_t reserved_0 : 36; } sh_md_dqrp_mmr_dir_privec3_s; } sh_md_dqrp_mmr_dir_privec3_u_t; -#else -typedef union sh_md_dqrp_mmr_dir_privec3_u { - mmr_t sh_md_dqrp_mmr_dir_privec3_regval; - struct { - mmr_t reserved_0 : 36; - mmr_t out : 14; - mmr_t in : 14; - } sh_md_dqrp_mmr_dir_privec3_s; -} sh_md_dqrp_mmr_dir_privec3_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_DIR_PRIVEC4" */ /* privilege vector for acc=4 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrp_mmr_dir_privec4_u { mmr_t sh_md_dqrp_mmr_dir_privec4_regval; struct { @@ -26173,23 +14165,12 @@ typedef union sh_md_dqrp_mmr_dir_privec4 mmr_t reserved_0 : 36; } sh_md_dqrp_mmr_dir_privec4_s; } sh_md_dqrp_mmr_dir_privec4_u_t; -#else -typedef union sh_md_dqrp_mmr_dir_privec4_u { - mmr_t sh_md_dqrp_mmr_dir_privec4_regval; - struct { - mmr_t reserved_0 : 36; - mmr_t out : 14; - mmr_t in : 14; - } sh_md_dqrp_mmr_dir_privec4_s; -} sh_md_dqrp_mmr_dir_privec4_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_DIR_PRIVEC5" */ /* privilege vector for acc=5 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrp_mmr_dir_privec5_u { mmr_t sh_md_dqrp_mmr_dir_privec5_regval; struct { @@ -26198,23 +14179,12 @@ typedef union sh_md_dqrp_mmr_dir_privec5 mmr_t reserved_0 : 36; } sh_md_dqrp_mmr_dir_privec5_s; } sh_md_dqrp_mmr_dir_privec5_u_t; -#else -typedef union sh_md_dqrp_mmr_dir_privec5_u { - mmr_t sh_md_dqrp_mmr_dir_privec5_regval; - struct { - mmr_t reserved_0 : 36; - mmr_t out : 14; - mmr_t in : 14; - } sh_md_dqrp_mmr_dir_privec5_s; -} sh_md_dqrp_mmr_dir_privec5_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_DIR_PRIVEC6" */ /* privilege vector for acc=6 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrp_mmr_dir_privec6_u { mmr_t sh_md_dqrp_mmr_dir_privec6_regval; struct { @@ -26223,23 +14193,12 @@ typedef union sh_md_dqrp_mmr_dir_privec6 mmr_t reserved_0 : 36; } sh_md_dqrp_mmr_dir_privec6_s; } sh_md_dqrp_mmr_dir_privec6_u_t; -#else -typedef union sh_md_dqrp_mmr_dir_privec6_u { - mmr_t sh_md_dqrp_mmr_dir_privec6_regval; - struct { - mmr_t reserved_0 : 36; - mmr_t out : 14; - mmr_t in : 14; - } sh_md_dqrp_mmr_dir_privec6_s; -} sh_md_dqrp_mmr_dir_privec6_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_DIR_PRIVEC7" */ /* privilege vector for acc=7 */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrp_mmr_dir_privec7_u { mmr_t sh_md_dqrp_mmr_dir_privec7_regval; struct { @@ -26248,23 +14207,12 @@ typedef union sh_md_dqrp_mmr_dir_privec7 mmr_t reserved_0 : 36; } sh_md_dqrp_mmr_dir_privec7_s; } sh_md_dqrp_mmr_dir_privec7_u_t; -#else -typedef union sh_md_dqrp_mmr_dir_privec7_u { - mmr_t sh_md_dqrp_mmr_dir_privec7_regval; - struct { - mmr_t reserved_0 : 36; - mmr_t out : 14; - mmr_t in : 14; - } sh_md_dqrp_mmr_dir_privec7_s; -} sh_md_dqrp_mmr_dir_privec7_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_DIR_TIMER" */ /* MD SXRO timer */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrp_mmr_dir_timer_u { mmr_t sh_md_dqrp_mmr_dir_timer_regval; struct { @@ -26274,24 +14222,12 @@ typedef union sh_md_dqrp_mmr_dir_timer_u mmr_t reserved_0 : 42; } sh_md_dqrp_mmr_dir_timer_s; } sh_md_dqrp_mmr_dir_timer_u_t; -#else -typedef union sh_md_dqrp_mmr_dir_timer_u { - mmr_t sh_md_dqrp_mmr_dir_timer_regval; - struct { - mmr_t reserved_0 : 42; - mmr_t timer_cur : 9; - mmr_t timer_en : 1; - mmr_t timer_div : 12; - } sh_md_dqrp_mmr_dir_timer_s; -} sh_md_dqrp_mmr_dir_timer_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_PIOWD_DIR_ENTRY" */ /* directory pio write data */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrp_mmr_piowd_dir_entry_u { mmr_t sh_md_dqrp_mmr_piowd_dir_entry_regval; struct { @@ -26302,25 +14238,12 @@ typedef union sh_md_dqrp_mmr_piowd_dir_e mmr_t reserved_0 : 6; } sh_md_dqrp_mmr_piowd_dir_entry_s; } sh_md_dqrp_mmr_piowd_dir_entry_u_t; -#else -typedef union sh_md_dqrp_mmr_piowd_dir_entry_u { - mmr_t sh_md_dqrp_mmr_piowd_dir_entry_regval; - struct { - mmr_t reserved_0 : 6; - mmr_t acc : 3; - mmr_t pri : 3; - mmr_t dirb : 26; - mmr_t dira : 26; - } sh_md_dqrp_mmr_piowd_dir_entry_s; -} sh_md_dqrp_mmr_piowd_dir_entry_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_PIOWD_DIR_ECC" */ /* directory ecc register */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrp_mmr_piowd_dir_ecc_u { mmr_t sh_md_dqrp_mmr_piowd_dir_ecc_regval; struct { @@ -26329,23 +14252,12 @@ typedef union sh_md_dqrp_mmr_piowd_dir_e mmr_t reserved_0 : 50; } sh_md_dqrp_mmr_piowd_dir_ecc_s; } sh_md_dqrp_mmr_piowd_dir_ecc_u_t; -#else -typedef union sh_md_dqrp_mmr_piowd_dir_ecc_u { - mmr_t sh_md_dqrp_mmr_piowd_dir_ecc_regval; - struct { - mmr_t reserved_0 : 50; - mmr_t eccb : 7; - mmr_t ecca : 7; - } sh_md_dqrp_mmr_piowd_dir_ecc_s; -} sh_md_dqrp_mmr_piowd_dir_ecc_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_XPIORD_XDIR_ENTRY" */ /* x directory pio read data */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrp_mmr_xpiord_xdir_entry_u { mmr_t sh_md_dqrp_mmr_xpiord_xdir_entry_regval; struct { @@ -26358,27 +14270,12 @@ typedef union sh_md_dqrp_mmr_xpiord_xdir mmr_t reserved_0 : 4; } sh_md_dqrp_mmr_xpiord_xdir_entry_s; } sh_md_dqrp_mmr_xpiord_xdir_entry_u_t; -#else -typedef union sh_md_dqrp_mmr_xpiord_xdir_entry_u { - mmr_t sh_md_dqrp_mmr_xpiord_xdir_entry_regval; - struct { - mmr_t reserved_0 : 4; - mmr_t unc : 1; - mmr_t cor : 1; - mmr_t acc : 3; - mmr_t pri : 3; - mmr_t dirb : 26; - mmr_t dira : 26; - } sh_md_dqrp_mmr_xpiord_xdir_entry_s; -} sh_md_dqrp_mmr_xpiord_xdir_entry_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_XPIORD_XDIR_ECC" */ /* x directory ecc */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrp_mmr_xpiord_xdir_ecc_u { mmr_t sh_md_dqrp_mmr_xpiord_xdir_ecc_regval; struct { @@ -26387,23 +14284,12 @@ typedef union sh_md_dqrp_mmr_xpiord_xdir mmr_t reserved_0 : 50; } sh_md_dqrp_mmr_xpiord_xdir_ecc_s; } sh_md_dqrp_mmr_xpiord_xdir_ecc_u_t; -#else -typedef union sh_md_dqrp_mmr_xpiord_xdir_ecc_u { - mmr_t sh_md_dqrp_mmr_xpiord_xdir_ecc_regval; - struct { - mmr_t reserved_0 : 50; - mmr_t eccb : 7; - mmr_t ecca : 7; - } sh_md_dqrp_mmr_xpiord_xdir_ecc_s; -} sh_md_dqrp_mmr_xpiord_xdir_ecc_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_YPIORD_YDIR_ENTRY" */ /* y directory pio read data */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrp_mmr_ypiord_ydir_entry_u { mmr_t sh_md_dqrp_mmr_ypiord_ydir_entry_regval; struct { @@ -26416,27 +14302,12 @@ typedef union sh_md_dqrp_mmr_ypiord_ydir mmr_t reserved_0 : 4; } sh_md_dqrp_mmr_ypiord_ydir_entry_s; } sh_md_dqrp_mmr_ypiord_ydir_entry_u_t; -#else -typedef union sh_md_dqrp_mmr_ypiord_ydir_entry_u { - mmr_t sh_md_dqrp_mmr_ypiord_ydir_entry_regval; - struct { - mmr_t reserved_0 : 4; - mmr_t unc : 1; - mmr_t cor : 1; - mmr_t acc : 3; - mmr_t pri : 3; - mmr_t dirb : 26; - mmr_t dira : 26; - } sh_md_dqrp_mmr_ypiord_ydir_entry_s; -} sh_md_dqrp_mmr_ypiord_ydir_entry_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_YPIORD_YDIR_ECC" */ /* y directory ecc */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrp_mmr_ypiord_ydir_ecc_u { mmr_t sh_md_dqrp_mmr_ypiord_ydir_ecc_regval; struct { @@ -26445,23 +14316,12 @@ typedef union sh_md_dqrp_mmr_ypiord_ydir mmr_t reserved_0 : 50; } sh_md_dqrp_mmr_ypiord_ydir_ecc_s; } sh_md_dqrp_mmr_ypiord_ydir_ecc_u_t; -#else -typedef union sh_md_dqrp_mmr_ypiord_ydir_ecc_u { - mmr_t sh_md_dqrp_mmr_ypiord_ydir_ecc_regval; - struct { - mmr_t reserved_0 : 50; - mmr_t eccb : 7; - mmr_t ecca : 7; - } sh_md_dqrp_mmr_ypiord_ydir_ecc_s; -} sh_md_dqrp_mmr_ypiord_ydir_ecc_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_XCERR1" */ /* correctable dir ecc group 1 error register */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrp_mmr_xcerr1_u { mmr_t sh_md_dqrp_mmr_xcerr1_regval; struct { @@ -26472,25 +14332,12 @@ typedef union sh_md_dqrp_mmr_xcerr1_u { mmr_t reserved_0 : 25; } sh_md_dqrp_mmr_xcerr1_s; } sh_md_dqrp_mmr_xcerr1_u_t; -#else -typedef union sh_md_dqrp_mmr_xcerr1_u { - mmr_t sh_md_dqrp_mmr_xcerr1_regval; - struct { - mmr_t reserved_0 : 25; - mmr_t arm : 1; - mmr_t more : 1; - mmr_t val : 1; - mmr_t grp1 : 36; - } sh_md_dqrp_mmr_xcerr1_s; -} sh_md_dqrp_mmr_xcerr1_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_XCERR2" */ /* correctable dir ecc group 2 error register */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrp_mmr_xcerr2_u { mmr_t sh_md_dqrp_mmr_xcerr2_regval; struct { @@ -26500,24 +14347,12 @@ typedef union sh_md_dqrp_mmr_xcerr2_u { mmr_t reserved_0 : 26; } sh_md_dqrp_mmr_xcerr2_s; } sh_md_dqrp_mmr_xcerr2_u_t; -#else -typedef union sh_md_dqrp_mmr_xcerr2_u { - mmr_t sh_md_dqrp_mmr_xcerr2_regval; - struct { - mmr_t reserved_0 : 26; - mmr_t more : 1; - mmr_t val : 1; - mmr_t grp2 : 36; - } sh_md_dqrp_mmr_xcerr2_s; -} sh_md_dqrp_mmr_xcerr2_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_XUERR1" */ /* uncorrectable dir ecc group 1 error register */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrp_mmr_xuerr1_u { mmr_t sh_md_dqrp_mmr_xuerr1_regval; struct { @@ -26528,25 +14363,12 @@ typedef union sh_md_dqrp_mmr_xuerr1_u { mmr_t reserved_0 : 25; } sh_md_dqrp_mmr_xuerr1_s; } sh_md_dqrp_mmr_xuerr1_u_t; -#else -typedef union sh_md_dqrp_mmr_xuerr1_u { - mmr_t sh_md_dqrp_mmr_xuerr1_regval; - struct { - mmr_t reserved_0 : 25; - mmr_t arm : 1; - mmr_t more : 1; - mmr_t val : 1; - mmr_t grp1 : 36; - } sh_md_dqrp_mmr_xuerr1_s; -} sh_md_dqrp_mmr_xuerr1_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_XUERR2" */ /* uncorrectable dir ecc group 2 error register */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrp_mmr_xuerr2_u { mmr_t sh_md_dqrp_mmr_xuerr2_regval; struct { @@ -26556,24 +14378,12 @@ typedef union sh_md_dqrp_mmr_xuerr2_u { mmr_t reserved_0 : 26; } sh_md_dqrp_mmr_xuerr2_s; } sh_md_dqrp_mmr_xuerr2_u_t; -#else -typedef union sh_md_dqrp_mmr_xuerr2_u { - mmr_t sh_md_dqrp_mmr_xuerr2_regval; - struct { - mmr_t reserved_0 : 26; - mmr_t more : 1; - mmr_t val : 1; - mmr_t grp2 : 36; - } sh_md_dqrp_mmr_xuerr2_s; -} sh_md_dqrp_mmr_xuerr2_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_XPERR" */ /* protocol error register */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrp_mmr_xperr_u { mmr_t sh_md_dqrp_mmr_xperr_regval; struct { @@ -26591,32 +14401,12 @@ typedef union sh_md_dqrp_mmr_xperr_u { mmr_t reserved_0 : 1; } sh_md_dqrp_mmr_xperr_s; } sh_md_dqrp_mmr_xperr_u_t; -#else -typedef union sh_md_dqrp_mmr_xperr_u { - mmr_t sh_md_dqrp_mmr_xperr_regval; - struct { - mmr_t reserved_0 : 1; - mmr_t arm : 1; - mmr_t more : 1; - mmr_t val : 1; - mmr_t mybit : 8; - mmr_t unc : 1; - mmr_t cor : 1; - mmr_t priv : 1; - mmr_t prige : 1; - mmr_t src : 14; - mmr_t cmd : 8; - mmr_t dir : 26; - } sh_md_dqrp_mmr_xperr_s; -} sh_md_dqrp_mmr_xperr_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_YCERR1" */ /* correctable dir ecc group 1 error register */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrp_mmr_ycerr1_u { mmr_t sh_md_dqrp_mmr_ycerr1_regval; struct { @@ -26627,52 +14417,27 @@ typedef union sh_md_dqrp_mmr_ycerr1_u { mmr_t reserved_0 : 25; } sh_md_dqrp_mmr_ycerr1_s; } sh_md_dqrp_mmr_ycerr1_u_t; -#else -typedef union sh_md_dqrp_mmr_ycerr1_u { - mmr_t sh_md_dqrp_mmr_ycerr1_regval; - struct { - mmr_t reserved_0 : 25; - mmr_t arm : 1; - mmr_t more : 1; - mmr_t val : 1; - mmr_t grp1 : 36; - } sh_md_dqrp_mmr_ycerr1_s; -} sh_md_dqrp_mmr_ycerr1_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_YCERR2" */ /* correctable dir ecc group 2 error register */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN -typedef union sh_md_dqrp_mmr_ycerr2_u { - mmr_t sh_md_dqrp_mmr_ycerr2_regval; - struct { - mmr_t grp2 : 36; - mmr_t val : 1; - mmr_t more : 1; - mmr_t reserved_0 : 26; - } sh_md_dqrp_mmr_ycerr2_s; -} sh_md_dqrp_mmr_ycerr2_u_t; -#else typedef union sh_md_dqrp_mmr_ycerr2_u { mmr_t sh_md_dqrp_mmr_ycerr2_regval; struct { - mmr_t reserved_0 : 26; - mmr_t more : 1; - mmr_t val : 1; mmr_t grp2 : 36; + mmr_t val : 1; + mmr_t more : 1; + mmr_t reserved_0 : 26; } sh_md_dqrp_mmr_ycerr2_s; } sh_md_dqrp_mmr_ycerr2_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_YUERR1" */ /* uncorrectable dir ecc group 1 error register */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrp_mmr_yuerr1_u { mmr_t sh_md_dqrp_mmr_yuerr1_regval; struct { @@ -26683,25 +14448,12 @@ typedef union sh_md_dqrp_mmr_yuerr1_u { mmr_t reserved_0 : 25; } sh_md_dqrp_mmr_yuerr1_s; } sh_md_dqrp_mmr_yuerr1_u_t; -#else -typedef union sh_md_dqrp_mmr_yuerr1_u { - mmr_t sh_md_dqrp_mmr_yuerr1_regval; - struct { - mmr_t reserved_0 : 25; - mmr_t arm : 1; - mmr_t more : 1; - mmr_t val : 1; - mmr_t grp1 : 36; - } sh_md_dqrp_mmr_yuerr1_s; -} sh_md_dqrp_mmr_yuerr1_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_YUERR2" */ /* uncorrectable dir ecc group 2 error register */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrp_mmr_yuerr2_u { mmr_t sh_md_dqrp_mmr_yuerr2_regval; struct { @@ -26711,24 +14463,12 @@ typedef union sh_md_dqrp_mmr_yuerr2_u { mmr_t reserved_0 : 26; } sh_md_dqrp_mmr_yuerr2_s; } sh_md_dqrp_mmr_yuerr2_u_t; -#else -typedef union sh_md_dqrp_mmr_yuerr2_u { - mmr_t sh_md_dqrp_mmr_yuerr2_regval; - struct { - mmr_t reserved_0 : 26; - mmr_t more : 1; - mmr_t val : 1; - mmr_t grp2 : 36; - } sh_md_dqrp_mmr_yuerr2_s; -} sh_md_dqrp_mmr_yuerr2_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_YPERR" */ /* protocol error register */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrp_mmr_yperr_u { mmr_t sh_md_dqrp_mmr_yperr_regval; struct { @@ -26746,32 +14486,12 @@ typedef union sh_md_dqrp_mmr_yperr_u { mmr_t reserved_0 : 1; } sh_md_dqrp_mmr_yperr_s; } sh_md_dqrp_mmr_yperr_u_t; -#else -typedef union sh_md_dqrp_mmr_yperr_u { - mmr_t sh_md_dqrp_mmr_yperr_regval; - struct { - mmr_t reserved_0 : 1; - mmr_t arm : 1; - mmr_t more : 1; - mmr_t val : 1; - mmr_t mybit : 8; - mmr_t unc : 1; - mmr_t cor : 1; - mmr_t priv : 1; - mmr_t prige : 1; - mmr_t src : 14; - mmr_t cmd : 8; - mmr_t dir : 26; - } sh_md_dqrp_mmr_yperr_s; -} sh_md_dqrp_mmr_yperr_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_DIR_CMDTRIG" */ /* cmd triggers */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrp_mmr_dir_cmdtrig_u { mmr_t sh_md_dqrp_mmr_dir_cmdtrig_regval; struct { @@ -26782,25 +14502,12 @@ typedef union sh_md_dqrp_mmr_dir_cmdtrig mmr_t reserved_0 : 32; } sh_md_dqrp_mmr_dir_cmdtrig_s; } sh_md_dqrp_mmr_dir_cmdtrig_u_t; -#else -typedef union sh_md_dqrp_mmr_dir_cmdtrig_u { - mmr_t sh_md_dqrp_mmr_dir_cmdtrig_regval; - struct { - mmr_t reserved_0 : 32; - mmr_t cmd3 : 8; - mmr_t cmd2 : 8; - mmr_t cmd1 : 8; - mmr_t cmd0 : 8; - } sh_md_dqrp_mmr_dir_cmdtrig_s; -} sh_md_dqrp_mmr_dir_cmdtrig_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_DIR_TBLTRIG" */ /* dir table trigger */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrp_mmr_dir_tbltrig_u { mmr_t sh_md_dqrp_mmr_dir_tbltrig_regval; struct { @@ -26813,27 +14520,12 @@ typedef union sh_md_dqrp_mmr_dir_tbltrig mmr_t reserved_0 : 22; } sh_md_dqrp_mmr_dir_tbltrig_s; } sh_md_dqrp_mmr_dir_tbltrig_u_t; -#else -typedef union sh_md_dqrp_mmr_dir_tbltrig_u { - mmr_t sh_md_dqrp_mmr_dir_tbltrig_regval; - struct { - mmr_t reserved_0 : 22; - mmr_t mybit : 8; - mmr_t dirst : 9; - mmr_t prige : 1; - mmr_t acc : 2; - mmr_t cmd : 8; - mmr_t src : 14; - } sh_md_dqrp_mmr_dir_tbltrig_s; -} sh_md_dqrp_mmr_dir_tbltrig_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_DIR_TBLMASK" */ /* dir table trigger mask */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrp_mmr_dir_tblmask_u { mmr_t sh_md_dqrp_mmr_dir_tblmask_regval; struct { @@ -26846,27 +14538,12 @@ typedef union sh_md_dqrp_mmr_dir_tblmask mmr_t reserved_0 : 22; } sh_md_dqrp_mmr_dir_tblmask_s; } sh_md_dqrp_mmr_dir_tblmask_u_t; -#else -typedef union sh_md_dqrp_mmr_dir_tblmask_u { - mmr_t sh_md_dqrp_mmr_dir_tblmask_regval; - struct { - mmr_t reserved_0 : 22; - mmr_t mybit : 8; - mmr_t dirst : 9; - mmr_t prige : 1; - mmr_t acc : 2; - mmr_t cmd : 8; - mmr_t src : 14; - } sh_md_dqrp_mmr_dir_tblmask_s; -} sh_md_dqrp_mmr_dir_tblmask_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_XBIST_H" */ /* rising edge bist/fill pattern */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrp_mmr_xbist_h_u { mmr_t sh_md_dqrp_mmr_xbist_h_regval; struct { @@ -26878,26 +14555,12 @@ typedef union sh_md_dqrp_mmr_xbist_h_u { mmr_t reserved_1 : 21; } sh_md_dqrp_mmr_xbist_h_s; } sh_md_dqrp_mmr_xbist_h_u_t; -#else -typedef union sh_md_dqrp_mmr_xbist_h_u { - mmr_t sh_md_dqrp_mmr_xbist_h_regval; - struct { - mmr_t reserved_1 : 21; - mmr_t arm : 1; - mmr_t rot : 1; - mmr_t inv : 1; - mmr_t reserved_0 : 8; - mmr_t pat : 32; - } sh_md_dqrp_mmr_xbist_h_s; -} sh_md_dqrp_mmr_xbist_h_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_XBIST_L" */ /* falling edge bist/fill pattern */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrp_mmr_xbist_l_u { mmr_t sh_md_dqrp_mmr_xbist_l_regval; struct { @@ -26908,25 +14571,12 @@ typedef union sh_md_dqrp_mmr_xbist_l_u { mmr_t reserved_1 : 22; } sh_md_dqrp_mmr_xbist_l_s; } sh_md_dqrp_mmr_xbist_l_u_t; -#else -typedef union sh_md_dqrp_mmr_xbist_l_u { - mmr_t sh_md_dqrp_mmr_xbist_l_regval; - struct { - mmr_t reserved_1 : 22; - mmr_t rot : 1; - mmr_t inv : 1; - mmr_t reserved_0 : 8; - mmr_t pat : 32; - } sh_md_dqrp_mmr_xbist_l_s; -} sh_md_dqrp_mmr_xbist_l_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_XBIST_ERR_H" */ /* rising edge bist error pattern */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrp_mmr_xbist_err_h_u { mmr_t sh_md_dqrp_mmr_xbist_err_h_regval; struct { @@ -26937,25 +14587,12 @@ typedef union sh_md_dqrp_mmr_xbist_err_h mmr_t reserved_1 : 22; } sh_md_dqrp_mmr_xbist_err_h_s; } sh_md_dqrp_mmr_xbist_err_h_u_t; -#else -typedef union sh_md_dqrp_mmr_xbist_err_h_u { - mmr_t sh_md_dqrp_mmr_xbist_err_h_regval; - struct { - mmr_t reserved_1 : 22; - mmr_t more : 1; - mmr_t val : 1; - mmr_t reserved_0 : 8; - mmr_t pat : 32; - } sh_md_dqrp_mmr_xbist_err_h_s; -} sh_md_dqrp_mmr_xbist_err_h_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_XBIST_ERR_L" */ /* falling edge bist error pattern */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrp_mmr_xbist_err_l_u { mmr_t sh_md_dqrp_mmr_xbist_err_l_regval; struct { @@ -26966,25 +14603,12 @@ typedef union sh_md_dqrp_mmr_xbist_err_l mmr_t reserved_1 : 22; } sh_md_dqrp_mmr_xbist_err_l_s; } sh_md_dqrp_mmr_xbist_err_l_u_t; -#else -typedef union sh_md_dqrp_mmr_xbist_err_l_u { - mmr_t sh_md_dqrp_mmr_xbist_err_l_regval; - struct { - mmr_t reserved_1 : 22; - mmr_t more : 1; - mmr_t val : 1; - mmr_t reserved_0 : 8; - mmr_t pat : 32; - } sh_md_dqrp_mmr_xbist_err_l_s; -} sh_md_dqrp_mmr_xbist_err_l_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_YBIST_H" */ /* rising edge bist/fill pattern */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrp_mmr_ybist_h_u { mmr_t sh_md_dqrp_mmr_ybist_h_regval; struct { @@ -26996,26 +14620,12 @@ typedef union sh_md_dqrp_mmr_ybist_h_u { mmr_t reserved_1 : 21; } sh_md_dqrp_mmr_ybist_h_s; } sh_md_dqrp_mmr_ybist_h_u_t; -#else -typedef union sh_md_dqrp_mmr_ybist_h_u { - mmr_t sh_md_dqrp_mmr_ybist_h_regval; - struct { - mmr_t reserved_1 : 21; - mmr_t arm : 1; - mmr_t rot : 1; - mmr_t inv : 1; - mmr_t reserved_0 : 8; - mmr_t pat : 32; - } sh_md_dqrp_mmr_ybist_h_s; -} sh_md_dqrp_mmr_ybist_h_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_YBIST_L" */ /* falling edge bist/fill pattern */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrp_mmr_ybist_l_u { mmr_t sh_md_dqrp_mmr_ybist_l_regval; struct { @@ -27026,25 +14636,12 @@ typedef union sh_md_dqrp_mmr_ybist_l_u { mmr_t reserved_1 : 22; } sh_md_dqrp_mmr_ybist_l_s; } sh_md_dqrp_mmr_ybist_l_u_t; -#else -typedef union sh_md_dqrp_mmr_ybist_l_u { - mmr_t sh_md_dqrp_mmr_ybist_l_regval; - struct { - mmr_t reserved_1 : 22; - mmr_t rot : 1; - mmr_t inv : 1; - mmr_t reserved_0 : 8; - mmr_t pat : 32; - } sh_md_dqrp_mmr_ybist_l_s; -} sh_md_dqrp_mmr_ybist_l_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_YBIST_ERR_H" */ /* rising edge bist error pattern */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrp_mmr_ybist_err_h_u { mmr_t sh_md_dqrp_mmr_ybist_err_h_regval; struct { @@ -27055,25 +14652,12 @@ typedef union sh_md_dqrp_mmr_ybist_err_h mmr_t reserved_1 : 22; } sh_md_dqrp_mmr_ybist_err_h_s; } sh_md_dqrp_mmr_ybist_err_h_u_t; -#else -typedef union sh_md_dqrp_mmr_ybist_err_h_u { - mmr_t sh_md_dqrp_mmr_ybist_err_h_regval; - struct { - mmr_t reserved_1 : 22; - mmr_t more : 1; - mmr_t val : 1; - mmr_t reserved_0 : 8; - mmr_t pat : 32; - } sh_md_dqrp_mmr_ybist_err_h_s; -} sh_md_dqrp_mmr_ybist_err_h_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRP_MMR_YBIST_ERR_L" */ /* falling edge bist error pattern */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrp_mmr_ybist_err_l_u { mmr_t sh_md_dqrp_mmr_ybist_err_l_regval; struct { @@ -27084,25 +14668,12 @@ typedef union sh_md_dqrp_mmr_ybist_err_l mmr_t reserved_1 : 22; } sh_md_dqrp_mmr_ybist_err_l_s; } sh_md_dqrp_mmr_ybist_err_l_u_t; -#else -typedef union sh_md_dqrp_mmr_ybist_err_l_u { - mmr_t sh_md_dqrp_mmr_ybist_err_l_regval; - struct { - mmr_t reserved_1 : 22; - mmr_t more : 1; - mmr_t val : 1; - mmr_t reserved_0 : 8; - mmr_t pat : 32; - } sh_md_dqrp_mmr_ybist_err_l_s; -} sh_md_dqrp_mmr_ybist_err_l_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRS_MMR_XBIST_H" */ /* rising edge bist/fill pattern */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrs_mmr_xbist_h_u { mmr_t sh_md_dqrs_mmr_xbist_h_regval; struct { @@ -27113,25 +14684,12 @@ typedef union sh_md_dqrs_mmr_xbist_h_u { mmr_t reserved_0 : 21; } sh_md_dqrs_mmr_xbist_h_s; } sh_md_dqrs_mmr_xbist_h_u_t; -#else -typedef union sh_md_dqrs_mmr_xbist_h_u { - mmr_t sh_md_dqrs_mmr_xbist_h_regval; - struct { - mmr_t reserved_0 : 21; - mmr_t arm : 1; - mmr_t rot : 1; - mmr_t inv : 1; - mmr_t pat : 40; - } sh_md_dqrs_mmr_xbist_h_s; -} sh_md_dqrs_mmr_xbist_h_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRS_MMR_XBIST_L" */ /* falling edge bist/fill pattern */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrs_mmr_xbist_l_u { mmr_t sh_md_dqrs_mmr_xbist_l_regval; struct { @@ -27141,24 +14699,12 @@ typedef union sh_md_dqrs_mmr_xbist_l_u { mmr_t reserved_0 : 22; } sh_md_dqrs_mmr_xbist_l_s; } sh_md_dqrs_mmr_xbist_l_u_t; -#else -typedef union sh_md_dqrs_mmr_xbist_l_u { - mmr_t sh_md_dqrs_mmr_xbist_l_regval; - struct { - mmr_t reserved_0 : 22; - mmr_t rot : 1; - mmr_t inv : 1; - mmr_t pat : 40; - } sh_md_dqrs_mmr_xbist_l_s; -} sh_md_dqrs_mmr_xbist_l_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRS_MMR_XBIST_ERR_H" */ /* rising edge bist error pattern */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrs_mmr_xbist_err_h_u { mmr_t sh_md_dqrs_mmr_xbist_err_h_regval; struct { @@ -27168,24 +14714,12 @@ typedef union sh_md_dqrs_mmr_xbist_err_h mmr_t reserved_0 : 22; } sh_md_dqrs_mmr_xbist_err_h_s; } sh_md_dqrs_mmr_xbist_err_h_u_t; -#else -typedef union sh_md_dqrs_mmr_xbist_err_h_u { - mmr_t sh_md_dqrs_mmr_xbist_err_h_regval; - struct { - mmr_t reserved_0 : 22; - mmr_t more : 1; - mmr_t val : 1; - mmr_t pat : 40; - } sh_md_dqrs_mmr_xbist_err_h_s; -} sh_md_dqrs_mmr_xbist_err_h_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRS_MMR_XBIST_ERR_L" */ /* falling edge bist error pattern */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrs_mmr_xbist_err_l_u { mmr_t sh_md_dqrs_mmr_xbist_err_l_regval; struct { @@ -27195,24 +14729,12 @@ typedef union sh_md_dqrs_mmr_xbist_err_l mmr_t reserved_0 : 22; } sh_md_dqrs_mmr_xbist_err_l_s; } sh_md_dqrs_mmr_xbist_err_l_u_t; -#else -typedef union sh_md_dqrs_mmr_xbist_err_l_u { - mmr_t sh_md_dqrs_mmr_xbist_err_l_regval; - struct { - mmr_t reserved_0 : 22; - mmr_t more : 1; - mmr_t val : 1; - mmr_t pat : 40; - } sh_md_dqrs_mmr_xbist_err_l_s; -} sh_md_dqrs_mmr_xbist_err_l_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRS_MMR_YBIST_H" */ /* rising edge bist/fill pattern */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrs_mmr_ybist_h_u { mmr_t sh_md_dqrs_mmr_ybist_h_regval; struct { @@ -27223,25 +14745,12 @@ typedef union sh_md_dqrs_mmr_ybist_h_u { mmr_t reserved_0 : 21; } sh_md_dqrs_mmr_ybist_h_s; } sh_md_dqrs_mmr_ybist_h_u_t; -#else -typedef union sh_md_dqrs_mmr_ybist_h_u { - mmr_t sh_md_dqrs_mmr_ybist_h_regval; - struct { - mmr_t reserved_0 : 21; - mmr_t arm : 1; - mmr_t rot : 1; - mmr_t inv : 1; - mmr_t pat : 40; - } sh_md_dqrs_mmr_ybist_h_s; -} sh_md_dqrs_mmr_ybist_h_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRS_MMR_YBIST_L" */ /* falling edge bist/fill pattern */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrs_mmr_ybist_l_u { mmr_t sh_md_dqrs_mmr_ybist_l_regval; struct { @@ -27251,24 +14760,12 @@ typedef union sh_md_dqrs_mmr_ybist_l_u { mmr_t reserved_0 : 22; } sh_md_dqrs_mmr_ybist_l_s; } sh_md_dqrs_mmr_ybist_l_u_t; -#else -typedef union sh_md_dqrs_mmr_ybist_l_u { - mmr_t sh_md_dqrs_mmr_ybist_l_regval; - struct { - mmr_t reserved_0 : 22; - mmr_t rot : 1; - mmr_t inv : 1; - mmr_t pat : 40; - } sh_md_dqrs_mmr_ybist_l_s; -} sh_md_dqrs_mmr_ybist_l_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRS_MMR_YBIST_ERR_H" */ /* rising edge bist error pattern */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrs_mmr_ybist_err_h_u { mmr_t sh_md_dqrs_mmr_ybist_err_h_regval; struct { @@ -27278,24 +14775,12 @@ typedef union sh_md_dqrs_mmr_ybist_err_h mmr_t reserved_0 : 22; } sh_md_dqrs_mmr_ybist_err_h_s; } sh_md_dqrs_mmr_ybist_err_h_u_t; -#else -typedef union sh_md_dqrs_mmr_ybist_err_h_u { - mmr_t sh_md_dqrs_mmr_ybist_err_h_regval; - struct { - mmr_t reserved_0 : 22; - mmr_t more : 1; - mmr_t val : 1; - mmr_t pat : 40; - } sh_md_dqrs_mmr_ybist_err_h_s; -} sh_md_dqrs_mmr_ybist_err_h_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRS_MMR_YBIST_ERR_L" */ /* falling edge bist error pattern */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrs_mmr_ybist_err_l_u { mmr_t sh_md_dqrs_mmr_ybist_err_l_regval; struct { @@ -27305,24 +14790,12 @@ typedef union sh_md_dqrs_mmr_ybist_err_l mmr_t reserved_0 : 22; } sh_md_dqrs_mmr_ybist_err_l_s; } sh_md_dqrs_mmr_ybist_err_l_u_t; -#else -typedef union sh_md_dqrs_mmr_ybist_err_l_u { - mmr_t sh_md_dqrs_mmr_ybist_err_l_regval; - struct { - mmr_t reserved_0 : 22; - mmr_t more : 1; - mmr_t val : 1; - mmr_t pat : 40; - } sh_md_dqrs_mmr_ybist_err_l_s; -} sh_md_dqrs_mmr_ybist_err_l_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRS_MMR_JNR_DEBUG" */ /* joiner/fct debug configuration */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrs_mmr_jnr_debug_u { mmr_t sh_md_dqrs_mmr_jnr_debug_regval; struct { @@ -27331,23 +14804,12 @@ typedef union sh_md_dqrs_mmr_jnr_debug_u mmr_t reserved_0 : 62; } sh_md_dqrs_mmr_jnr_debug_s; } sh_md_dqrs_mmr_jnr_debug_u_t; -#else -typedef union sh_md_dqrs_mmr_jnr_debug_u { - mmr_t sh_md_dqrs_mmr_jnr_debug_regval; - struct { - mmr_t reserved_0 : 62; - mmr_t rw : 1; - mmr_t px : 1; - } sh_md_dqrs_mmr_jnr_debug_s; -} sh_md_dqrs_mmr_jnr_debug_u_t; -#endif /* ==================================================================== */ /* Register "SH_MD_DQRS_MMR_YAMOPW_ERR" */ /* amo/partial rmw ecc error register */ /* ==================================================================== */ -#ifdef LITTLE_ENDIAN typedef union sh_md_dqrs_mmr_yamopw_err_u { mmr_t sh_md_dqrs_mmr_yamopw_err_regval; struct { @@ -27363,23 +14825,5 @@ typedef union sh_md_dqrs_mmr_yamopw_err_ mmr_t reserved_2 : 31; } sh_md_dqrs_mmr_yamopw_err_s; } sh_md_dqrs_mmr_yamopw_err_u_t; -#else -typedef union sh_md_dqrs_mmr_yamopw_err_u { - mmr_t sh_md_dqrs_mmr_yamopw_err_regval; - struct { - mmr_t reserved_2 : 31; - mmr_t arm : 1; - mmr_t reserved_1 : 6; - mmr_t runc : 1; - mmr_t rcor : 1; - mmr_t rsyn : 8; - mmr_t reserved_0 : 6; - mmr_t sunc : 1; - mmr_t scor : 1; - mmr_t ssyn : 8; - } sh_md_dqrs_mmr_yamopw_err_s; -} sh_md_dqrs_mmr_yamopw_err_u_t; -#endif - #endif /* _ASM_IA64_SN_SN2_SHUB_MMR_T_H */ diff -prauN linux-2.6.0-test5/include/asm-ia64/spinlock.h wli-2.6.0-test5-bk12-25/include/asm-ia64/spinlock.h --- linux-2.6.0-test5/include/asm-ia64/spinlock.h 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ia64/spinlock.h 2003-09-25 19:16:12.000000000 -0700 @@ -24,6 +24,7 @@ typedef struct { #define SPIN_LOCK_UNLOCKED (spinlock_t) { 0 } #define spin_lock_init(x) ((x)->lock = 0) +#ifdef ASM_SUPPORTED /* * Try to get the lock. If we fail to get the lock, make a non-standard call to * ia64_spinlock_contention(). We do not use a normal call because that would force all @@ -85,6 +86,21 @@ _raw_spin_lock (spinlock_t *lock) # endif /* CONFIG_MCKINLEY */ #endif } +#else /* !ASM_SUPPORTED */ +# define _raw_spin_lock(x) \ +do { \ + __u32 *ia64_spinlock_ptr = (__u32 *) (x); \ + __u64 ia64_spinlock_val; \ + ia64_spinlock_val = ia64_cmpxchg4_acq(ia64_spinlock_ptr, 1, 0); \ + if (unlikely(ia64_spinlock_val)) { \ + do { \ + while (*ia64_spinlock_ptr) \ + ia64_barrier(); \ + ia64_spinlock_val = ia64_cmpxchg4_acq(ia64_spinlock_ptr, 1, 0); \ + } while (ia64_spinlock_val); \ + } \ +} while (0) +#endif /* !ASM_SUPPORTED */ #define spin_is_locked(x) ((x)->lock != 0) #define _raw_spin_unlock(x) do { barrier(); ((spinlock_t *) x)->lock = 0; } while (0) @@ -117,22 +133,19 @@ do { \ ia64_fetchadd(-1, (int *) __read_lock_ptr, rel); \ } while (0) +#ifdef ASM_SUPPORTED #define _raw_write_lock(rw) \ do { \ __asm__ __volatile__ ( \ "mov ar.ccv = r0\n" \ - "dep r29 = -1, r0, 31, 1\n" \ - ";;\n" \ + "dep r29 = -1, r0, 31, 1;;\n" \ "1:\n" \ - "ld4 r2 = [%0]\n" \ - ";;\n" \ + "ld4 r2 = [%0];;\n" \ "cmp4.eq p0,p7 = r0,r2\n" \ "(p7) br.cond.spnt.few 1b \n" \ - "cmpxchg4.acq r2 = [%0], r29, ar.ccv\n" \ - ";;\n" \ + "cmpxchg4.acq r2 = [%0], r29, ar.ccv;;\n" \ "cmp4.eq p0,p7 = r0, r2\n" \ - "(p7) br.cond.spnt.few 1b\n" \ - ";;\n" \ + "(p7) br.cond.spnt.few 1b;;\n" \ :: "r"(rw) : "ar.ccv", "p7", "r2", "r29", "memory"); \ } while(0) @@ -142,13 +155,35 @@ do { \ \ __asm__ __volatile__ ( \ "mov ar.ccv = r0\n" \ - "dep r29 = -1, r0, 31, 1\n" \ - ";;\n" \ + "dep r29 = -1, r0, 31, 1;;\n" \ "cmpxchg4.acq %0 = [%1], r29, ar.ccv\n" \ : "=r"(result) : "r"(rw) : "ar.ccv", "r29", "memory"); \ (result == 0); \ }) +#else /* !ASM_SUPPORTED */ + +#define _raw_write_lock(l) \ +({ \ + __u64 ia64_val, ia64_set_val = ia64_dep_mi(-1, 0, 31, 1); \ + __u32 *ia64_write_lock_ptr = (__u32 *) (l); \ + do { \ + while (*ia64_write_lock_ptr) \ + ia64_barrier(); \ + ia64_val = ia64_cmpxchg4_acq(ia64_write_lock_ptr, ia64_set_val, 0); \ + } while (ia64_val); \ +}) + +#define _raw_write_trylock(rw) \ +({ \ + __u64 ia64_val; \ + __u64 ia64_set_val = ia64_dep_mi(-1, 0, 31,1); \ + ia64_val = ia64_cmpxchg4_acq((__u32 *)(rw), ia64_set_val, 0); \ + (ia64_val == 0); \ +}) + +#endif /* !ASM_SUPPORTED */ + #define _raw_write_unlock(x) \ ({ \ smp_mb__before_clear_bit(); /* need barrier before releasing lock... */ \ diff -prauN linux-2.6.0-test5/include/asm-ia64/uaccess.h wli-2.6.0-test5-bk12-25/include/asm-ia64/uaccess.h --- linux-2.6.0-test5/include/asm-ia64/uaccess.h 2003-09-08 12:50:00.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ia64/uaccess.h 2003-09-25 19:16:12.000000000 -0700 @@ -33,6 +33,7 @@ #include #include +#include #include /* @@ -86,6 +87,8 @@ verify_area (int type, const void *addr, #define __put_user(x,ptr) __put_user_nocheck((__typeof__(*(ptr)))(x),(ptr),sizeof(*(ptr))) #define __get_user(x,ptr) __get_user_nocheck((x),(ptr),sizeof(*(ptr))) +#ifdef ASM_SUPPORTED + extern void __get_user_unknown (void); #define __get_user_nocheck(x,ptr,size) \ @@ -217,6 +220,90 @@ extern void __put_user_unknown (void); "[1:]" \ : "=r"(__pu_err) : "m"(__m(addr)), "rO"(x), "0"(__pu_err)) +#else /* !ASM_SUPPORTED */ + +#define RELOC_TYPE 2 /* ip-rel */ + +#define __put_user_xx(val, addr, size, err) \ + __st_user("__ex_table", (unsigned long) addr, size, RELOC_TYPE, (unsigned long) (val)); \ + (err) = ia64_getreg(_IA64_REG_R8); + +#define __get_user_xx(val, addr, size, err) \ + __ld_user("__ex_table", (unsigned long) addr, size, RELOC_TYPE); \ + (err) = ia64_getreg(_IA64_REG_R8); \ + (val) = ia64_getreg(_IA64_REG_R9); + +extern void __get_user_unknown (void); + +#define __get_user_nocheck(x, ptr, size) \ +({ \ + register long __gu_err = 0; \ + register long __gu_val = 0; \ + const __typeof__(*(ptr)) *__gu_addr = (ptr); \ + switch (size) { \ + case 1: case 2: case 4: case 8: \ + __get_user_xx(__gu_val, __gu_addr, size, __gu_err); \ + break; \ + default: \ + __get_user_unknown(); \ + break; \ + } \ + (x) = (__typeof__(*(ptr))) __gu_val; \ + __gu_err; \ +}) + +#define __get_user_check(x,ptr,size,segment) \ +({ \ + register long __gu_err = -EFAULT; \ + register long __gu_val = 0; \ + const __typeof__(*(ptr)) *__gu_addr = (ptr); \ + if (__access_ok((long) __gu_addr, size, segment)) { \ + switch (size) { \ + case 1: case 2: case 4: case 8: \ + __get_user_xx(__gu_val, __gu_addr, size, __gu_err); \ + break; \ + default: \ + __get_user_unknown(); break; \ + } \ + } \ + (x) = (__typeof__(*(ptr))) __gu_val; \ + __gu_err; \ +}) + +extern void __put_user_unknown (void); + +#define __put_user_nocheck(x, ptr, size) \ +({ \ + int __pu_err = 0; \ + __typeof__(*(ptr)) *__pu_addr = (ptr); \ + switch (size) { \ + case 1: case 2: case 4: case 8: \ + __put_user_xx(x, __pu_addr, size, __pu_err); \ + break; \ + default: \ + __put_user_unknown(); break; \ + } \ + __pu_err; \ +}) + +#define __put_user_check(x,ptr,size,segment) \ +({ \ + register long __pu_err = -EFAULT; \ + __typeof__(*(ptr)) *__pu_addr = (ptr); \ + if (__access_ok((long)__pu_addr,size,segment)) { \ + switch (size) { \ + case 1: case 2: case 4: case 8: \ + __put_user_xx(x,__pu_addr, size, __pu_err); \ + break; \ + default: \ + __put_user_unknown(); break; \ + } \ + } \ + __pu_err; \ +}) + +#endif /* !ASM_SUPPORTED */ + /* * Complex access routines */ diff -prauN linux-2.6.0-test5/include/asm-ia64/unistd.h wli-2.6.0-test5-bk12-25/include/asm-ia64/unistd.h --- linux-2.6.0-test5/include/asm-ia64/unistd.h 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ia64/unistd.h 2003-09-25 19:16:12.000000000 -0700 @@ -248,7 +248,6 @@ #define __NR_sys_clock_nanosleep 1256 #define __NR_sys_fstatfs64 1257 #define __NR_sys_statfs64 1258 -#define __NR_fadvises64_64 1259 #ifdef __KERNEL__ diff -prauN linux-2.6.0-test5/include/asm-m68k/motorola_pgalloc.h wli-2.6.0-test5-bk12-25/include/asm-m68k/motorola_pgalloc.h --- linux-2.6.0-test5/include/asm-m68k/motorola_pgalloc.h 2003-09-08 12:50:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-m68k/motorola_pgalloc.h 2003-09-25 20:03:31.000000000 -0700 @@ -63,19 +63,28 @@ static inline void __pte_free_tlb(struct } -static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address) +static inline pmd_t *pmd_alloc_one_kernel(struct mm_struct *mm, unsigned long address) { return get_pointer_table(); } -static inline int pmd_free(pmd_t *pmd) +static inline struct page *pmd_alloc_one_kernel(struct mm_struct *mm, unsigned long addr) { - return free_pointer_table(pmd); + pmd_t *pmd = pmd_alloc_one_kernel(mm, addr); + if (pmd) + return virt_to_page(pmd); + else + return NULL; } -static inline int __pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmd) +static inline int pmd_free(struct page *pmd) { - return free_pointer_table(pmd); + return free_pointer_table(page_address(pmd)); +} + +static inline int __pmd_free_tlb(struct mmu_gather *tlb, struct page *pmd) +{ + return free_pointer_table(page_address(pmd)); } @@ -100,9 +109,9 @@ static inline void pmd_populate(struct m pmd_set(pmd, page_address(page)); } -static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, pmd_t *pmd) +static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, struct page *pmd) { - pgd_set(pgd, pmd); + pgd_set(pgd, page_address(pmd)); } #endif /* _MOTOROLA_PGALLOC_H */ diff -prauN linux-2.6.0-test5/include/asm-m68k/motorola_pgtable.h wli-2.6.0-test5-bk12-25/include/asm-m68k/motorola_pgtable.h --- linux-2.6.0-test5/include/asm-m68k/motorola_pgtable.h 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-m68k/motorola_pgtable.h 2003-09-25 20:03:31.000000000 -0700 @@ -116,6 +116,7 @@ extern inline void pgd_set(pgd_t * pgdp, #define __pte_page(pte) ((unsigned long)__va(pte_val(pte) & PAGE_MASK)) #define __pmd_page(pmd) ((unsigned long)__va(pmd_val(pmd) & _TABLE_MASK)) #define __pgd_page(pgd) ((unsigned long)__va(pgd_val(pgd) & _TABLE_MASK)) +#define pgd_page(pgd) virt_to_page(__pgd_page(pgd)) #define pte_none(pte) (!pte_val(pte)) @@ -204,6 +205,12 @@ extern inline pmd_t * pmd_offset(pgd_t * return (pmd_t *)__pgd_page(*dir) + ((address >> PMD_SHIFT) & (PTRS_PER_PMD-1)); } +#define pmd_offset_kernel(pgd, addr) pmd_offset(pgd, addr) +#define pmd_offset_map(pgd, addr) pmd_offset(pgd, addr) +#define pmd_offset_map_nested(pgd, addr) pmd_offset(pgd, addr) +#define pmd_unmap(pmd) do { } while (0) +#define pmd_unmap_nested(pmd) do { } while (0) + /* Find an entry in the third-level page table.. */ extern inline pte_t * pte_offset_kernel(pmd_t * pmdp, unsigned long address) { diff -prauN linux-2.6.0-test5/include/asm-m68k/posix_types.h wli-2.6.0-test5-bk12-25/include/asm-m68k/posix_types.h --- linux-2.6.0-test5/include/asm-m68k/posix_types.h 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-m68k/posix_types.h 2003-09-25 19:16:12.000000000 -0700 @@ -7,7 +7,6 @@ * assume GCC is being used. */ -typedef unsigned short __kernel_dev_t; typedef unsigned long __kernel_ino_t; typedef unsigned short __kernel_mode_t; typedef unsigned short __kernel_nlink_t; diff -prauN linux-2.6.0-test5/include/asm-m68k/processor.h wli-2.6.0-test5-bk12-25/include/asm-m68k/processor.h --- linux-2.6.0-test5/include/asm-m68k/processor.h 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-m68k/processor.h 2003-09-25 19:16:12.000000000 -0700 @@ -56,7 +56,6 @@ extern inline void wrusp(unsigned long u /* * Bus types */ -#define EISA_bus 0 #define MCA_bus 0 struct task_work { diff -prauN linux-2.6.0-test5/include/asm-m68k/signal.h wli-2.6.0-test5-bk12-25/include/asm-m68k/signal.h --- linux-2.6.0-test5/include/asm-m68k/signal.h 2003-09-08 12:49:54.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-m68k/signal.h 2003-09-25 19:16:12.000000000 -0700 @@ -68,7 +68,7 @@ typedef unsigned long sigset_t; /* These should not be considered constants from userland. */ #define SIGRTMIN 32 -#define SIGRTMAX (_NSIG-1) +#define SIGRTMAX _NSIG /* * SA_FLAGS values: diff -prauN linux-2.6.0-test5/include/asm-m68k/sun3_pgalloc.h wli-2.6.0-test5-bk12-25/include/asm-m68k/sun3_pgalloc.h --- linux-2.6.0-test5/include/asm-m68k/sun3_pgalloc.h 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-m68k/sun3_pgalloc.h 2003-09-25 20:03:31.000000000 -0700 @@ -18,7 +18,8 @@ extern const char bad_pmd_string[]; -#define pmd_alloc_one(mm,address) ({ BUG(); ((pmd_t *)2); }) +#define pmd_alloc_one(mm,address) ({ BUG(); ((struct page *)2); }) +#define pmd_alloc_one_kernel(mm,address) ({ BUG(); ((pmd_t *)2); }) static inline void pte_free_kernel(pte_t * pte) diff -prauN linux-2.6.0-test5/include/asm-m68knommu/pgtable.h wli-2.6.0-test5-bk12-25/include/asm-m68knommu/pgtable.h --- linux-2.6.0-test5/include/asm-m68knommu/pgtable.h 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-m68knommu/pgtable.h 2003-09-25 20:03:31.000000000 -0700 @@ -21,7 +21,12 @@ typedef pte_t *pte_addr_t; #define pgd_bad(pgd) (0) #define pgd_clear(pgdp) #define kern_addr_valid(addr) (1) -#define pmd_offset(a, b) ((void *)0) +#define pmd_offset(a, b) ((void *)0) +#define pmd_offset_kernel(a, b) pmd_offset(a, b) +#define pmd_offset_map(a, b) pmd_offset(a, b) +#define pmd_offset_map_nested(a, b) pmd_offset(a, b) +#define pmd_unmap(pmd) do { } while (0) +#define pmd_unmap_nested(pmd) do { } while (0) #define PAGE_NONE __pgprot(0) #define PAGE_SHARED __pgprot(0) diff -prauN linux-2.6.0-test5/include/asm-m68knommu/processor.h wli-2.6.0-test5-bk12-25/include/asm-m68knommu/processor.h --- linux-2.6.0-test5/include/asm-m68knommu/processor.h 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-m68knommu/processor.h 2003-09-25 19:16:12.000000000 -0700 @@ -58,7 +58,6 @@ extern inline void wrusp(unsigned long u /* * Bus types */ -#define EISA_bus 0 #define MCA_bus 0 /* diff -prauN linux-2.6.0-test5/include/asm-m68knommu/signal.h wli-2.6.0-test5-bk12-25/include/asm-m68knommu/signal.h --- linux-2.6.0-test5/include/asm-m68knommu/signal.h 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-m68knommu/signal.h 2003-09-25 19:16:12.000000000 -0700 @@ -68,7 +68,7 @@ typedef unsigned long sigset_t; /* These should not be considered constants from userland. */ #define SIGRTMIN 32 -#define SIGRTMAX (_NSIG-1) +#define SIGRTMAX _NSIG /* * SA_FLAGS values: diff -prauN linux-2.6.0-test5/include/asm-mips/pgalloc.h wli-2.6.0-test5-bk12-25/include/asm-mips/pgalloc.h --- linux-2.6.0-test5/include/asm-mips/pgalloc.h 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-mips/pgalloc.h 2003-09-25 20:03:31.000000000 -0700 @@ -95,7 +95,8 @@ static inline void pte_free(struct page * allocating and freeing a pmd is trivial: the 1-entry pmd is * inside the pgd, so has no extra memory associated with it. */ -#define pmd_alloc_one(mm, addr) ({ BUG(); ((pmd_t *)2); }) +#define pmd_alloc_one(mm, addr) ({ BUG(); ((struct page *)2); }) +#define pmd_alloc_one_kernel(mm, addr) ({ BUG(); ((pmd_t *)2); }) #define pmd_free(x) do { } while (0) #endif diff -prauN linux-2.6.0-test5/include/asm-mips/pgtable-32.h wli-2.6.0-test5-bk12-25/include/asm-mips/pgtable-32.h --- linux-2.6.0-test5/include/asm-mips/pgtable-32.h 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-mips/pgtable-32.h 2003-09-25 20:03:31.000000000 -0700 @@ -181,6 +181,12 @@ static inline pmd_t *pmd_offset(pgd_t *d return (pmd_t *) dir; } +#define pmd_offset_kernel(pgd, addr) pmd_offset(pgd, addr) +#define pmd_offset_map(pgd, addr) pmd_offset(pgd, addr) +#define pmd_offset_map_nested(pgd, addr) pmd_offset(pgd, addr) +#define pmd_unmap(pmd) do { } while (0) +#define pmd_unmap_nested(pmd) do { } while (0) + /* Find an entry in the third-level page table.. */ #define __pte_offset(address) \ (((address) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)) diff -prauN linux-2.6.0-test5/include/asm-mips/pgtable-64.h wli-2.6.0-test5-bk12-25/include/asm-mips/pgtable-64.h --- linux-2.6.0-test5/include/asm-mips/pgtable-64.h 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-mips/pgtable-64.h 2003-09-25 20:03:31.000000000 -0700 @@ -162,10 +162,16 @@ static inline unsigned long pgd_page(pgd /* Find an entry in the second-level page table.. */ static inline pmd_t *pmd_offset(pgd_t * dir, unsigned long address) { - return (pmd_t *) pgd_page(*dir) + + return (pmd_t *)page_address(pgd_page(*dir)) + ((address >> PMD_SHIFT) & (PTRS_PER_PMD - 1)); } +#define pmd_offset_kernel(pgd, addr) pmd_offset(pgd, addr) +#define pmd_offset_map(pgd, addr) pmd_offset(pgd, addr) +#define pmd_offset_map_nested(pgd, addr) pmd_offset(pgd, addr) +#define pmd_unmap(pmd) do { } while (0) +#define pmd_unmap_nested(pmd) do { } while (0) + /* Find an entry in the third-level page table.. */ #define __pte_offset(address) \ (((address) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)) diff -prauN linux-2.6.0-test5/include/asm-mips/posix_types.h wli-2.6.0-test5-bk12-25/include/asm-mips/posix_types.h --- linux-2.6.0-test5/include/asm-mips/posix_types.h 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-mips/posix_types.h 2003-09-25 19:16:12.000000000 -0700 @@ -17,7 +17,6 @@ * assume GCC is being used. */ -typedef unsigned int __kernel_dev_t; typedef unsigned long __kernel_ino_t; typedef unsigned int __kernel_mode_t; #if (_MIPS_SZLONG == 32) diff -prauN linux-2.6.0-test5/include/asm-mips/processor.h wli-2.6.0-test5-bk12-25/include/asm-mips/processor.h --- linux-2.6.0-test5/include/asm-mips/processor.h 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-mips/processor.h 2003-09-25 19:16:12.000000000 -0700 @@ -135,12 +135,6 @@ extern unsigned int vced_count, vcei_cou /* * Bus types (default is ISA, but people can check others with these..) */ -#ifdef CONFIG_EISA -extern int EISA_bus; -#else -#define EISA_bus (0) -#endif - #define MCA_bus 0 #define MCA_bus__is_a_macro /* for versions in ksyms.c */ diff -prauN linux-2.6.0-test5/include/asm-mips/signal.h wli-2.6.0-test5-bk12-25/include/asm-mips/signal.h --- linux-2.6.0-test5/include/asm-mips/signal.h 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-mips/signal.h 2003-09-25 19:16:12.000000000 -0700 @@ -59,7 +59,7 @@ typedef unsigned long old_sigset_t; /* /* These should not be considered constants from userland. */ #define SIGRTMIN 32 -#define SIGRTMAX (_NSIG-1) +#define SIGRTMAX _NSIG /* * SA_FLAGS values: diff -prauN linux-2.6.0-test5/include/asm-mips/softirq.h wli-2.6.0-test5-bk12-25/include/asm-mips/softirq.h --- linux-2.6.0-test5/include/asm-mips/softirq.h 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-mips/softirq.h 1969-12-31 16:00:00.000000000 -0800 @@ -1,20 +0,0 @@ -#ifndef __ASM_SOFTIRQ_H -#define __ASM_SOFTIRQ_H - -#include -#include - -#define local_bh_disable() \ - do { preempt_count() += SOFTIRQ_OFFSET; barrier(); } while (0) -#define __local_bh_enable() \ - do { barrier(); preempt_count() -= SOFTIRQ_OFFSET; } while (0) - -#define local_bh_enable() \ -do { \ - __local_bh_enable(); \ - if (unlikely(!in_interrupt() && softirq_pending(smp_processor_id()))) \ - do_softirq(); \ - preempt_check_resched(); \ -} while (0) - -#endif /* __ASM_SOFTIRQ_H */ diff -prauN linux-2.6.0-test5/include/asm-mips/stat.h wli-2.6.0-test5-bk12-25/include/asm-mips/stat.h --- linux-2.6.0-test5/include/asm-mips/stat.h 2003-09-08 12:50:41.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-mips/stat.h 2003-09-25 19:16:12.000000000 -0700 @@ -16,14 +16,14 @@ #if (_MIPS_SIM == _MIPS_SIM_ABI32) || (_MIPS_SIM == _MIPS_SIM_NABI32) struct stat { - dev_t st_dev; + unsigned st_dev; long st_pad1[3]; /* Reserved for network id */ ino_t st_ino; mode_t st_mode; nlink_t st_nlink; uid_t st_uid; gid_t st_gid; - dev_t st_rdev; + unsigned st_rdev; long st_pad2[2]; off_t st_size; long st_pad3; @@ -90,7 +90,7 @@ struct stat64 { /* The memory layout is the same as of struct stat64 of the 32-bit kernel. */ struct stat { - dev_t st_dev; + unsigned int st_dev; unsigned int st_pad0[3]; /* Reserved for st_dev expansion */ unsigned long st_ino; @@ -101,7 +101,7 @@ struct stat { uid_t st_uid; gid_t st_gid; - dev_t st_rdev; + unsigned int st_rdev; unsigned int st_pad1[3]; /* Reserved for st_rdev expansion */ off_t st_size; diff -prauN linux-2.6.0-test5/include/asm-parisc/atomic.h wli-2.6.0-test5-bk12-25/include/asm-parisc/atomic.h --- linux-2.6.0-test5/include/asm-parisc/atomic.h 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-parisc/atomic.h 2003-09-25 19:16:12.000000000 -0700 @@ -49,27 +49,14 @@ extern spinlock_t __atomic_hash[ATOMIC_H * Cache-line alignment would conflict with, for example, linux/module.h */ -typedef struct { - volatile int counter; -} atomic_t; +typedef struct { volatile long counter; } atomic_t; -/* -** xchg/cmpxchg moved from asm/system.h - ggg -*/ - -#if 1 /* This should get optimized out since it's never called. ** Or get a link error if xchg is used "wrong". */ extern void __xchg_called_with_bad_pointer(void); -#else -static inline void __xchg_called_with_bad_pointer(void) -{ - extern void panic(const char * fmt, ...); - panic("xchg called with bad pointer"); -} -#endif + /* __xchg32/64 defined in arch/parisc/lib/bitops.c */ extern unsigned long __xchg8(char, char *); diff -prauN linux-2.6.0-test5/include/asm-parisc/bitops.h wli-2.6.0-test5-bk12-25/include/asm-parisc/bitops.h --- linux-2.6.0-test5/include/asm-parisc/bitops.h 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-parisc/bitops.h 2003-09-25 19:16:12.000000000 -0700 @@ -203,55 +203,102 @@ static __inline__ int test_bit(int nr, c return !!(*addr & mask); } -extern __inline__ unsigned long ffz(unsigned long word) -{ - unsigned long result; - - result = 0; - while (word & 1) { - result++; - word >>= 1; - } - - return result; -} - #ifdef __KERNEL__ /** - * __ffs - find first bit in word. + * __ffs - find first bit in word. returns 0 to "BITS_PER_LONG-1". * @word: The word to search * - * Undefined if no bit exists, so code should check against 0 first. + * __ffs() return is undefined if no bit is set. + * + * 32-bit fast __ffs by LaMont Jones "lamont At hp com". + * 64-bit enhancement by Grant Grundler "grundler At parisc-linux org". + * (with help from willy/jejb to get the semantics right) + * + * This algorithm avoids branches by making use of nullification. + * One side effect of "extr" instructions is it sets PSW[N] bit. + * How PSW[N] (nullify next insn) gets set is determined by the + * "condition" field (eg "<>" or "TR" below) in the extr* insn. + * Only the 1st and one of either the 2cd or 3rd insn will get executed. + * Each set of 3 insn will get executed in 2 cycles on PA8x00 vs 16 or so + * cycles for each mispredicted branch. */ -static __inline__ unsigned long __ffs(unsigned long word) + +static __inline__ unsigned long __ffs(unsigned long x) { - unsigned long result = 0; + unsigned long ret; - while (!(word & 1UL)) { - result++; - word >>= 1; - } - return result; + __asm__( +#if BITS_PER_LONG > 32 + " ldi 63,%1\n" + " extrd,u,*<> %0,63,32,%%r0\n" + " extrd,u,*TR %0,31,32,%0\n" + " addi -32,%1,%1\n" +#else + " ldi 31,%1\n" +#endif + " extru,<> %0,31,16,%%r0\n" + " extru,TR %0,15,16,%0\n" + " addi -16,%1,%1\n" + " extru,<> %0,31,8,%%r0\n" + " extru,TR %0,23,8,%0\n" + " addi -8,%1,%1\n" + " extru,<> %0,31,4,%%r0\n" + " extru,TR %0,27,4,%0\n" + " addi -4,%1,%1\n" + " extru,<> %0,31,2,%%r0\n" + " extru,TR %0,29,2,%0\n" + " addi -2,%1,%1\n" + " extru,= %0,31,1,%%r0\n" + " addi -1,%1,%1\n" + : "+r" (x), "=r" (ret) ); + return ret; } +/* Undefined if no bit is zero. */ +#define ffz(x) __ffs(~x) + /* - * ffs: find first bit set. This is defined the same way as - * the libc and compiler builtin ffs routines, therefore - * differs in spirit from the above ffz (man ffs). + * ffs: find first bit set. returns 1 to BITS_PER_LONG or 0 (if none set) + * This is defined the same way as the libc and compiler builtin + * ffs routines, therefore differs in spirit from the above ffz (man ffs). */ static __inline__ int ffs(int x) { - if (!x) - return 0; - return __ffs((unsigned long)x); + return x ? (__ffs((unsigned long)x) + 1) : 0; } /* - * fls: find last bit set. + * fls: find last (most significant) bit set. + * fls(0) = 0, fls(1) = 1, fls(0x80000000) = 32. */ -#define fls(x) generic_fls(x) +static __inline__ int fls(int x) +{ + int ret; + if (!x) + return 0; + + __asm__( + " ldi 1,%1\n" + " extru,<> %0,15,16,%%r0\n" + " zdep,TR %0,15,16,%0\n" /* xxxx0000 */ + " addi 16,%1,%1\n" + " extru,<> %0,7,8,%%r0\n" + " zdep,TR %0,23,24,%0\n" /* xx000000 */ + " addi 8,%1,%1\n" + " extru,<> %0,3,4,%%r0\n" + " zdep,TR %0,27,28,%0\n" /* x0000000 */ + " addi 4,%1,%1\n" + " extru,<> %0,1,2,%%r0\n" + " zdep,TR %0,29,30,%0\n" /* y0000000 (y&3 = 0 */ + " addi 2,%1,%1\n" + " extru,= %0,0,1,%%r0\n" + " addi 1,%1,%1\n" /* if y & 8, add 1 */ + : "+r" (x), "=r" (ret) ); + + return ret; +} /* * hweightN: returns the hamming weight (i.e. the number diff -prauN linux-2.6.0-test5/include/asm-parisc/byteorder.h wli-2.6.0-test5-bk12-25/include/asm-parisc/byteorder.h --- linux-2.6.0-test5/include/asm-parisc/byteorder.h 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-parisc/byteorder.h 2003-09-25 19:16:12.000000000 -0700 @@ -5,6 +5,25 @@ #ifdef __GNUC__ +static __inline__ __const__ __u16 ___arch__swab16(__u16 x) +{ + __asm__("dep %0, 15, 8, %0\n\t" /* deposit 00ab -> 0bab */ + "shd %%r0, %0, 8, %0" /* shift 000000ab -> 00ba */ + : "=r" (x) + : "0" (x)); + return x; +} + +static __inline__ __const__ __u32 ___arch__swab24(__u32 x) +{ + __asm__("shd %0, %0, 8, %0\n\t" /* shift xabcxabc -> cxab */ + "dep %0, 15, 8, %0\n\t" /* deposit cxab -> cbab */ + "shd %%r0, %0, 8, %0" /* shift 0000cbab -> 0cba */ + : "=r" (x) + : "0" (x)); + return x; +} + static __inline__ __const__ __u32 ___arch__swab32(__u32 x) { unsigned int temp; @@ -39,34 +58,21 @@ static __inline__ __const__ __u64 ___arc return x; } #define __arch__swab64(x) ___arch__swab64(x) -#else +#define __BYTEORDER_HAS_U64__ +#elif !defined(__STRICT_ANSI__) static __inline__ __const__ __u64 ___arch__swab64(__u64 x) { - __u32 t1 = (__u32) x; - __u32 t2 = (__u32) ((x) >> 32); - ___arch__swab32(t1); - ___arch__swab32(t2); - return (((__u64) t1 << 32) + ((__u64) t2)); + __u32 t1 = ___arch__swab32((__u32) x); + __u32 t2 = ___arch__swab32((__u32) (x >> 32)); + return (((__u64) t1 << 32) | t2); } +#define __arch__swab64(x) ___arch__swab64(x) +#define __BYTEORDER_HAS_U64__ #endif - -static __inline__ __const__ __u16 ___arch__swab16(__u16 x) -{ - __asm__("dep %0, 15, 8, %0\n\t" /* deposit 00ab -> 0bab */ - "shd %r0, %0, 8, %0" /* shift 000000ab -> 00ba */ - : "=r" (x) - : "0" (x)); - return x; -} - -#define __arch__swab32(x) ___arch__swab32(x) #define __arch__swab16(x) ___arch__swab16(x) - -#if !defined(__STRICT_ANSI__) || defined(__KERNEL__) -# define __BYTEORDER_HAS_U64__ -# define __SWAB_64_THRU_32__ -#endif +#define __arch__swab24(x) ___arch__swab24(x) +#define __arch__swab32(x) ___arch__swab32(x) #endif /* __GNUC__ */ diff -prauN linux-2.6.0-test5/include/asm-parisc/cacheflush.h wli-2.6.0-test5-bk12-25/include/asm-parisc/cacheflush.h --- linux-2.6.0-test5/include/asm-parisc/cacheflush.h 2003-09-08 12:50:33.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-parisc/cacheflush.h 2003-09-28 23:04:08.000000000 -0700 @@ -66,7 +66,7 @@ extern void __flush_dcache_page(struct p static inline void flush_dcache_page(struct page *page) { - if (page->mapping && list_empty(&page->mapping->i_mmap) && + if (page_mapping(page) && list_empty(&page_mapping(page)->i_mmap) && list_empty(&page->mapping->i_mmap_shared)) { set_bit(PG_dcache_dirty, &page->flags); } else { @@ -78,8 +78,9 @@ static inline void flush_dcache_page(str #define flush_icache_range(s,e) do { flush_kernel_dcache_range_asm(s,e); flush_kernel_icache_range_asm(s,e); } while (0) -#define flush_icache_user_range(vma, page, addr, len) \ - flush_icache_page((vma), (page)) +#define flush_icache_user_range(vma, page, addr, len) do { \ + flush_user_dcache_range(addr, addr + len); \ + flush_user_icache_range(addr, addr + len); } while (0) static inline void flush_cache_range(struct vm_area_struct *vma, unsigned long start, unsigned long end) diff -prauN linux-2.6.0-test5/include/asm-parisc/elf.h wli-2.6.0-test5-bk12-25/include/asm-parisc/elf.h --- linux-2.6.0-test5/include/asm-parisc/elf.h 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-parisc/elf.h 2003-09-25 19:16:12.000000000 -0700 @@ -283,6 +283,7 @@ struct pt_regs; /* forward declaration.. */ #define ELF_DATA ELFDATA2MSB #define ELF_ARCH EM_PARISC +#define ELF_OSABI ELFOSABI_LINUX /* %r23 is set by ld.so to a pointer to a function which might be registered using atexit. This provides a mean for the dynamic diff -prauN linux-2.6.0-test5/include/asm-parisc/hil.h wli-2.6.0-test5-bk12-25/include/asm-parisc/hil.h --- linux-2.6.0-test5/include/asm-parisc/hil.h 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-parisc/hil.h 1969-12-31 16:00:00.000000000 -0800 @@ -1,26 +0,0 @@ -#ifndef _ASM_HIL_H -#define _ASM_HIL_H - -/* - * linux/asm-parisc/hil.h - * - * (c) 1999 Matthew Wilcox - */ - -extern unsigned long hil_base; /* declared in drivers/parisc/hil.c */ -extern unsigned int hil_irq; - -#define HILBASE hil_base /* 0xf0821000 (old) or 0xf0201000 (new) */ -#define HIL_DATA 0x800 -#define HIL_CMD 0x801 - -#define HIL_IRQ hil_irq - -#define hil_busy() (gsc_readb(HILBASE + HIL_CMD) & HIL_BUSY) -#define hil_data_available() (gsc_readb(HILBASE + HIL_CMD) & HIL_DATA_RDY) -#define hil_status() (gsc_readb(HILBASE + HIL_CMD)) -#define hil_command(x) do { gsc_writeb((x), HILBASE + HIL_CMD); } while (0) -#define hil_read_data() (gsc_readb(HILBASE + HIL_DATA)) -#define hil_write_data(x) do { gsc_writeb((x), HILBASE + HIL_DATA); } while (0) - -#endif diff -prauN linux-2.6.0-test5/include/asm-parisc/io.h wli-2.6.0-test5-bk12-25/include/asm-parisc/io.h --- linux-2.6.0-test5/include/asm-parisc/io.h 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-parisc/io.h 2003-09-25 19:16:12.000000000 -0700 @@ -291,4 +291,11 @@ extern void outsl (unsigned long port, c #define dma_cache_wback(_start,_size) do { flush_kernel_dcache_range(_start,_size); } while (0) #define dma_cache_wback_inv(_start,_size) do { flush_kernel_dcache_range(_start,_size); } while (0) +/* PA machines have an MM I/O space from 0xf0000000-0xffffffff in 32 + * bit mode and from 0xfffffffff0000000-0xfffffffffffffff in 64 bit + * mode (essentially just sign extending. This macro takes in a 32 + * bit I/O address (still with the leading f) and outputs the correct + * value for either 32 or 64 bit mode */ +#define F_EXTEND(x) ((unsigned long)((x) | (0xffffffff00000000ULL))) + #endif diff -prauN linux-2.6.0-test5/include/asm-parisc/local.h wli-2.6.0-test5-bk12-25/include/asm-parisc/local.h --- linux-2.6.0-test5/include/asm-parisc/local.h 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/include/asm-parisc/local.h 2003-09-25 19:16:12.000000000 -0700 @@ -0,0 +1,40 @@ +#ifndef _ARCH_PARISC_LOCAL_H +#define _ARCH_PARISC_LOCAL_H + +#include +#include + +typedef atomic_t local_t; + +#define LOCAL_INIT(i) ATOMIC_INIT(i) +#define local_read(v) atomic_read(v) +#define local_set(v,i) atomic_set(v,i) + +#define local_inc(v) atomic_inc(v) +#define local_dec(v) atomic_dec(v) +#define local_add(i, v) atomic_add(i, v) +#define local_sub(i, v) atomic_sub(i, v) + +#define __local_inc(v) ((v)->counter++) +#define __local_dec(v) ((v)->counter--) +#define __local_add(i,v) ((v)->counter+=(i)) +#define __local_sub(i,v) ((v)->counter-=(i)) + +/* Use these for per-cpu local_t variables: on some archs they are + * much more efficient than these naive implementations. Note they take + * a variable, not an address. + */ +#define cpu_local_read(v) local_read(&__get_cpu_var(v)) +#define cpu_local_set(v, i) local_set(&__get_cpu_var(v), (i)) + +#define cpu_local_inc(v) local_inc(&__get_cpu_var(v)) +#define cpu_local_dec(v) local_dec(&__get_cpu_var(v)) +#define cpu_local_add(i, v) local_add((i), &__get_cpu_var(v)) +#define cpu_local_sub(i, v) local_sub((i), &__get_cpu_var(v)) + +#define __cpu_local_inc(v) __local_inc(&__get_cpu_var(v)) +#define __cpu_local_dec(v) __local_dec(&__get_cpu_var(v)) +#define __cpu_local_add(i, v) __local_add((i), &__get_cpu_var(v)) +#define __cpu_local_sub(i, v) __local_sub((i), &__get_cpu_var(v)) + +#endif /* _ARCH_PARISC_LOCAL_H */ diff -prauN linux-2.6.0-test5/include/asm-parisc/pgalloc.h wli-2.6.0-test5-bk12-25/include/asm-parisc/pgalloc.h --- linux-2.6.0-test5/include/asm-parisc/pgalloc.h 2003-09-08 12:50:33.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-parisc/pgalloc.h 2003-09-25 20:03:31.000000000 -0700 @@ -28,12 +28,12 @@ static inline void pgd_free(pgd_t *pgd) /* Three Level Page Table Support for pmd's */ -static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, pmd_t *pmd) +static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, struct page *pmd) { - pgd_val(*pgd) = _PAGE_TABLE + __pa((unsigned long)pmd); + pgd_val(*pgd) = _PAGE_TABLE + __pa(page_address(pmd)); } -static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address) +static inline pmd_t *pmd_alloc_one_kernel(struct mm_struct *mm, unsigned long addr) { pmd_t *pmd = (pmd_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT); if (pmd) @@ -41,9 +41,18 @@ static inline pmd_t *pmd_alloc_one(struc return pmd; } -static inline void pmd_free(pmd_t *pmd) +static inline struct page *pmd_alloc_one(struct mm_struct *mm, unsigned long addr) { - free_page((unsigned long)pmd); + pmd_t *pmd = pmd_alloc_one_kernel(mm, addr); + if (pmd) + return virt_to_page(pmd); + else + return NULL; +} + +static inline void pmd_free(struct page *pmd) +{ + __free_page(pmd); } #else @@ -55,7 +64,8 @@ static inline void pmd_free(pmd_t *pmd) * inside the pgd, so has no extra memory associated with it. */ -#define pmd_alloc_one(mm, addr) ({ BUG(); ((pmd_t *)2); }) +#define pmd_alloc_one(mm, addr) ({ BUG(); ((struct page *)2); }) +#define pmd_alloc_one_kernel(mm, addr) pmd_alloc_one(mm, addr) #define pmd_free(x) do { } while (0) #define pgd_populate(mm, pmd, pte) BUG() diff -prauN linux-2.6.0-test5/include/asm-parisc/pgtable.h wli-2.6.0-test5-bk12-25/include/asm-parisc/pgtable.h --- linux-2.6.0-test5/include/asm-parisc/pgtable.h 2003-09-08 12:50:23.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-parisc/pgtable.h 2003-09-25 20:03:31.000000000 -0700 @@ -242,7 +242,8 @@ extern unsigned long *empty_zero_page; #ifdef __LP64__ -#define pgd_page(pgd) ((unsigned long) __va(pgd_val(pgd) & PAGE_MASK)) +#define __pgd_page(pgd) ((unsigned long) __va(pgd_val(pgd) & PAGE_MASK)) +#define pgd_page(pgd) virt_to_page(__pgd_page(pgd)) /* For 64 bit we have three level tables */ @@ -339,11 +340,17 @@ extern inline pte_t pte_modify(pte_t pte #ifdef __LP64__ #define pmd_offset(dir,address) \ -((pmd_t *) pgd_page(*(dir)) + (((address)>>PMD_SHIFT) & (PTRS_PER_PMD-1))) +((pmd_t *)__pgd_page(*(dir)) + (((address)>>PMD_SHIFT) & (PTRS_PER_PMD-1))) #else #define pmd_offset(dir,addr) ((pmd_t *) dir) #endif +#define pmd_offset_kernel(pgd, addr) pmd_offset(pgd, addr) +#define pmd_offset_map(pgd, addr) pmd_offset(pgd, addr) +#define pmd_offset_map_nested(pgd, addr) pmd_offset(pgd, addr) +#define pmd_unmap(pmd) do { } while (0) +#define pmd_unmap_nested(pmd) do { } while (0) + /* Find an entry in the third-level page table.. */ #define pte_index(address) (((address) >> PAGE_SHIFT) & (PTRS_PER_PTE-1)) #define pte_offset_kernel(pmd, address) \ diff -prauN linux-2.6.0-test5/include/asm-parisc/posix_types.h wli-2.6.0-test5-bk12-25/include/asm-parisc/posix_types.h --- linux-2.6.0-test5/include/asm-parisc/posix_types.h 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-parisc/posix_types.h 2003-09-25 19:16:12.000000000 -0700 @@ -6,7 +6,6 @@ * be a little careful about namespace pollution etc. Also, we cannot * assume GCC is being used. */ -typedef unsigned int __kernel_dev_t; typedef unsigned long __kernel_ino_t; typedef unsigned short __kernel_mode_t; typedef unsigned short __kernel_nlink_t; diff -prauN linux-2.6.0-test5/include/asm-parisc/processor.h wli-2.6.0-test5-bk12-25/include/asm-parisc/processor.h --- linux-2.6.0-test5/include/asm-parisc/processor.h 2003-09-08 12:50:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-parisc/processor.h 2003-09-25 19:16:12.000000000 -0700 @@ -101,12 +101,6 @@ extern struct cpuinfo_parisc cpu_data[NR #define CPU_HVERSION ((boot_cpu_data.hversion >> 4) & 0x0FFF) -#ifdef CONFIG_EISA -extern int EISA_bus; -#else -#define EISA_bus 0 -#endif - #define MCA_bus 0 #define MCA_bus__is_a_macro /* for versions in ksyms.c */ diff -prauN linux-2.6.0-test5/include/asm-parisc/sections.h wli-2.6.0-test5-bk12-25/include/asm-parisc/sections.h --- linux-2.6.0-test5/include/asm-parisc/sections.h 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/include/asm-parisc/sections.h 2003-09-25 19:16:12.000000000 -0700 @@ -0,0 +1,7 @@ +#ifndef _PARISC_SECTIONS_H +#define _PARISC_SECTIONS_H + +/* nothing to see, move along */ +#include + +#endif diff -prauN linux-2.6.0-test5/include/asm-parisc/signal.h wli-2.6.0-test5-bk12-25/include/asm-parisc/signal.h --- linux-2.6.0-test5/include/asm-parisc/signal.h 2003-09-08 12:50:32.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-parisc/signal.h 2003-09-25 19:16:12.000000000 -0700 @@ -42,7 +42,7 @@ /* These should not be considered constants from userland. */ #define SIGRTMIN 37 -#define SIGRTMAX (_NSIG-1) /* it's 44 under HP/UX */ +#define SIGRTMAX _NSIG /* it's 44 under HP/UX */ /* * SA_FLAGS values: diff -prauN linux-2.6.0-test5/include/asm-parisc/stat.h wli-2.6.0-test5-bk12-25/include/asm-parisc/stat.h --- linux-2.6.0-test5/include/asm-parisc/stat.h 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-parisc/stat.h 2003-09-25 19:16:12.000000000 -0700 @@ -4,13 +4,13 @@ #include struct stat { - dev_t st_dev; /* dev_t is 32 bits on parisc */ + unsigned int st_dev; /* dev_t is 32 bits on parisc */ ino_t st_ino; /* 32 bits */ mode_t st_mode; /* 16 bits */ nlink_t st_nlink; /* 16 bits */ unsigned short st_reserved1; /* old st_uid */ unsigned short st_reserved2; /* old st_gid */ - dev_t st_rdev; + unsigned int st_rdev; off_t st_size; time_t st_atime; unsigned int st_atime_nsec; @@ -21,12 +21,12 @@ struct stat { int st_blksize; int st_blocks; unsigned int __unused1; /* ACL stuff */ - dev_t __unused2; /* network */ + unsigned int __unused2; /* network */ ino_t __unused3; /* network */ unsigned int __unused4; /* cnodes */ unsigned short __unused5; /* netsite */ short st_fstype; - dev_t st_realdev; + unsigned int st_realdev; unsigned short st_basemode; unsigned short st_spareshort; uid_t st_uid; @@ -39,13 +39,13 @@ struct stat { typedef __kernel_off64_t off64_t; struct hpux_stat64 { - dev_t st_dev; /* dev_t is 32 bits on parisc */ + unsigned int st_dev; /* dev_t is 32 bits on parisc */ ino_t st_ino; /* 32 bits */ mode_t st_mode; /* 16 bits */ nlink_t st_nlink; /* 16 bits */ unsigned short st_reserved1; /* old st_uid */ unsigned short st_reserved2; /* old st_gid */ - dev_t st_rdev; + unsigned int st_rdev; off64_t st_size; time_t st_atime; unsigned int st_spare1; @@ -56,12 +56,12 @@ struct hpux_stat64 { int st_blksize; __u64 st_blocks; unsigned int __unused1; /* ACL stuff */ - dev_t __unused2; /* network */ + unsigned int __unused2; /* network */ ino_t __unused3; /* network */ unsigned int __unused4; /* cnodes */ unsigned short __unused5; /* netsite */ short st_fstype; - dev_t st_realdev; + unsigned int st_realdev; unsigned short st_basemode; unsigned short st_spareshort; uid_t st_uid; diff -prauN linux-2.6.0-test5/include/asm-parisc/uaccess.h wli-2.6.0-test5-bk12-25/include/asm-parisc/uaccess.h --- linux-2.6.0-test5/include/asm-parisc/uaccess.h 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-parisc/uaccess.h 2003-09-25 19:16:12.000000000 -0700 @@ -28,6 +28,11 @@ * that put_user is the same as __put_user, etc. */ +extern int __get_kernel_bad(void); +extern int __get_user_bad(void); +extern int __put_kernel_bad(void); +extern int __put_user_bad(void); + #define access_ok(type,addr,size) (1) #define verify_area(type,addr,size) (0) @@ -35,8 +40,8 @@ #define get_user __get_user #if BITS_PER_LONG == 32 -#define LDD_KERNEL(ptr) BUG() -#define LDD_USER(ptr) BUG() +#define LDD_KERNEL(ptr) __get_kernel_bad(); +#define LDD_USER(ptr) __get_user_bad(); #define STD_KERNEL(x, ptr) __put_kernel_asm64((u32)x,ptr) #define STD_USER(x, ptr) __put_user_asm64((u32)x,ptr) #else @@ -72,7 +77,7 @@ struct exception_table_entry { case 2: __get_kernel_asm("ldh",ptr); break; \ case 4: __get_kernel_asm("ldw",ptr); break; \ case 8: LDD_KERNEL(ptr); break; \ - default: BUG(); break; \ + default: __get_kernel_bad(); break; \ } \ } \ else { \ @@ -81,7 +86,7 @@ struct exception_table_entry { case 2: __get_user_asm("ldh",ptr); break; \ case 4: __get_user_asm("ldw",ptr); break; \ case 8: LDD_USER(ptr); break; \ - default: BUG(); break; \ + default: __get_user_bad(); break; \ } \ } \ \ @@ -141,7 +146,7 @@ struct exception_table_entry { case 2: __put_kernel_asm("sth",x,ptr); break; \ case 4: __put_kernel_asm("stw",x,ptr); break; \ case 8: STD_KERNEL(x,ptr); break; \ - default: BUG(); break; \ + default: __put_kernel_bad(); break; \ } \ } \ else { \ @@ -150,7 +155,7 @@ struct exception_table_entry { case 2: __put_user_asm("sth",x,ptr); break; \ case 4: __put_user_asm("stw",x,ptr); break; \ case 8: STD_USER(x,ptr); break; \ - default: BUG(); break; \ + default: __put_user_bad(); break; \ } \ } \ \ diff -prauN linux-2.6.0-test5/include/asm-ppc/a.out.h wli-2.6.0-test5-bk12-25/include/asm-ppc/a.out.h --- linux-2.6.0-test5/include/asm-ppc/a.out.h 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/a.out.h 2003-09-25 19:16:12.000000000 -0700 @@ -1,7 +1,7 @@ #ifndef __PPC_A_OUT_H__ #define __PPC_A_OUT_H__ -/* grabbed from the intel stuff */ +/* grabbed from the intel stuff */ #define STACK_TOP TASK_SIZE diff -prauN linux-2.6.0-test5/include/asm-ppc/agp.h wli-2.6.0-test5-bk12-25/include/asm-ppc/agp.h --- linux-2.6.0-test5/include/asm-ppc/agp.h 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/agp.h 2003-09-25 19:16:12.000000000 -0700 @@ -5,9 +5,9 @@ /* nothing much needed here */ -#define map_page_into_agp(page) -#define unmap_page_from_agp(page) -#define flush_agp_mappings() +#define map_page_into_agp(page) +#define unmap_page_from_agp(page) +#define flush_agp_mappings() #define flush_agp_cache() mb() #endif diff -prauN linux-2.6.0-test5/include/asm-ppc/atomic.h wli-2.6.0-test5-bk12-25/include/asm-ppc/atomic.h --- linux-2.6.0-test5/include/asm-ppc/atomic.h 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/atomic.h 2003-09-25 19:16:12.000000000 -0700 @@ -2,7 +2,7 @@ * PowerPC atomic operations */ -#ifndef _ASM_PPC_ATOMIC_H_ +#ifndef _ASM_PPC_ATOMIC_H_ #define _ASM_PPC_ATOMIC_H_ typedef struct { volatile int counter; } atomic_t; diff -prauN linux-2.6.0-test5/include/asm-ppc/backlight.h wli-2.6.0-test5-bk12-25/include/asm-ppc/backlight.h --- linux-2.6.0-test5/include/asm-ppc/backlight.h 2003-09-08 12:50:28.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/backlight.h 2003-09-25 19:16:12.000000000 -0700 @@ -1,8 +1,8 @@ /* * Routines for handling backlight control on PowerBooks - * + * * For now, implementation resides in arch/ppc/kernel/pmac_support.c - * + * */ #ifdef __KERNEL__ #ifndef __ASM_PPC_BACKLIGHT_H diff -prauN linux-2.6.0-test5/include/asm-ppc/bitops.h wli-2.6.0-test5-bk12-25/include/asm-ppc/bitops.h --- linux-2.6.0-test5/include/asm-ppc/bitops.h 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/bitops.h 2003-09-25 19:16:12.000000000 -0700 @@ -276,7 +276,7 @@ static __inline__ int fls(unsigned int x * Find the first bit set in a 140-bit bitmap. * The first 100 bits are unlikely to be set. */ -static inline int sched_find_first_bit(unsigned long *b) +static inline int sched_find_first_bit(const unsigned long *b) { if (unlikely(b[0])) return __ffs(b[0]); @@ -295,7 +295,7 @@ static inline int sched_find_first_bit(u * @offset: The bitnumber to start searching at * @size: The maximum size to search */ -static __inline__ unsigned long find_next_bit(unsigned long *addr, +static __inline__ unsigned long find_next_bit(const unsigned long *addr, unsigned long size, unsigned long offset) { unsigned int *p = ((unsigned int *) addr) + (offset >> 5); @@ -352,7 +352,7 @@ found_middle: #define find_first_zero_bit(addr, size) \ find_next_zero_bit((addr), (size), 0) -static __inline__ unsigned long find_next_zero_bit(unsigned long * addr, +static __inline__ unsigned long find_next_zero_bit(const unsigned long *addr, unsigned long size, unsigned long offset) { unsigned int * p = ((unsigned int *) addr) + (offset >> 5); @@ -411,7 +411,7 @@ static __inline__ int ext2_test_bit(int #define ext2_find_first_zero_bit(addr, size) \ ext2_find_next_zero_bit((addr), (size), 0) -static __inline__ unsigned long ext2_find_next_zero_bit(void *addr, +static __inline__ unsigned long ext2_find_next_zero_bit(const void *addr, unsigned long size, unsigned long offset) { unsigned int *p = ((unsigned int *) addr) + (offset >> 5); diff -prauN linux-2.6.0-test5/include/asm-ppc/bootx.h wli-2.6.0-test5-bk12-25/include/asm-ppc/bootx.h --- linux-2.6.0-test5/include/asm-ppc/bootx.h 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/bootx.h 2003-09-25 19:16:12.000000000 -0700 @@ -66,7 +66,7 @@ typedef struct boot_infos __u32 version; /* backward compatible down to version: */ __u32 compatible_version; - + /* NEW (vers. 2) this holds the current _logical_ base addr of the frame buffer (for use by early boot message) */ __u8* logicalDisplayBase; @@ -76,7 +76,7 @@ typedef struct boot_infos /* NEW (vers. 4) Detected hw architecture */ __u32 architecture; - + /* The device tree (internal addresses relative to the beginning of the tree, * device tree offset relative to the beginning of this structure). * On pre-PCI macintosh (BOOT_ARCH_PCI bit set to 0 in architecture), this @@ -84,7 +84,7 @@ typedef struct boot_infos */ __u32 deviceTreeOffset; /* Device tree offset */ __u32 deviceTreeSize; /* Size of the device tree */ - + /* Some infos about the current MacOS display */ __u32 dispDeviceRect[4]; /* left,top,right,bottom */ __u32 dispDeviceDepth; /* (8, 16 or 32) */ @@ -98,23 +98,23 @@ typedef struct boot_infos /* Optional pointer to boot ramdisk (offset from this structure) */ __u32 ramDisk; __u32 ramDiskSize; /* size of ramdisk image */ - + /* Kernel command line arguments (offset from this structure) */ __u32 kernelParamsOffset; - + /* ALL BELOW NEW (vers. 4) */ - + /* This defines the physical memory. Valid with BOOT_ARCH_NUBUS flag (non-PCI) only. On PCI, memory is contiguous and it's size is in the device-tree. */ boot_info_map_entry_t physMemoryMap[MAX_MEM_MAP_SIZE]; /* Where the phys memory is */ __u32 physMemoryMapSize; /* How many entries in map */ - - + + /* The framebuffer size (optional, currently 0) */ __u32 frameBufferSize; /* Represents a max size, can be 0. */ - + /* NEW (vers. 5) */ /* Total params size (args + colormap + device tree + ramdisk) */ diff -prauN linux-2.6.0-test5/include/asm-ppc/checksum.h wli-2.6.0-test5-bk12-25/include/asm-ppc/checksum.h --- linux-2.6.0-test5/include/asm-ppc/checksum.h 2003-09-08 12:49:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/checksum.h 2003-09-25 19:16:12.000000000 -0700 @@ -37,7 +37,7 @@ extern unsigned int csum_partial_copy_ge /* FIXME: this needs to be written to really do no check -- Cort */ #define csum_partial_copy_nocheck(src, dst, len, sum) \ - csum_partial_copy_generic((src), (dst), (len), (sum), 0, 0) + csum_partial_copy_generic((src), (dst), (len), (sum), 0, 0) /* * turns a 32-bit partial checksum (e.g. from csum_partial) into a @@ -73,7 +73,7 @@ static inline unsigned long csum_tcpudp_ unsigned long daddr, unsigned short len, unsigned short proto, - unsigned int sum) + unsigned int sum) { __asm__("\n\ addc %0,%0,%1 \n\ diff -prauN linux-2.6.0-test5/include/asm-ppc/commproc.h wli-2.6.0-test5-bk12-25/include/asm-ppc/commproc.h --- linux-2.6.0-test5/include/asm-ppc/commproc.h 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/commproc.h 2003-09-25 19:16:12.000000000 -0700 @@ -552,7 +552,7 @@ typedef struct iic { } iic_t; #define BD_IIC_START ((ushort)0x0400) - + /* SPI parameter RAM. */ typedef struct spi { @@ -673,7 +673,7 @@ typedef struct risc_timer_pram { #define CICR_IEN ((uint)0x00000080) /* Int. enable */ #define CICR_SPS ((uint)0x00000001) /* SCC Spread */ -extern void cpm_install_handler(int vec, +extern void cpm_install_handler(int vec, void (*handler)(void *, struct pt_regs *regs), void *dev_id); extern void cpm_free_handler(int vec); diff -prauN linux-2.6.0-test5/include/asm-ppc/gt64260.h wli-2.6.0-test5-bk12-25/include/asm-ppc/gt64260.h --- linux-2.6.0-test5/include/asm-ppc/gt64260.h 2003-09-08 12:49:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/gt64260.h 2003-09-25 19:16:12.000000000 -0700 @@ -1,6 +1,6 @@ /* * include/asm-ppc/gt64260.h - * + * * Prototypes, etc. for the Marvell/Galileo GT64260 host bridge routines. * * Author: Mark A. Greer @@ -206,7 +206,7 @@ extern inline void gt_modify(uint32_t of gt_write(offs, reg); } #endif -#define gt_set_bits(offs, bits) gt_modify(offs, ~0, bits) +#define gt_set_bits(offs, bits) gt_modify(offs, ~0, bits) #define gt_clr_bits(offs, bits) gt_modify(offs, 0, bits) diff -prauN linux-2.6.0-test5/include/asm-ppc/gt64260_defs.h wli-2.6.0-test5-bk12-25/include/asm-ppc/gt64260_defs.h --- linux-2.6.0-test5/include/asm-ppc/gt64260_defs.h 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/gt64260_defs.h 2003-09-25 19:16:12.000000000 -0700 @@ -1,6 +1,6 @@ /* * include/asm-ppc/gt64260_defs.h - * + * * Register definitions for the Marvell/Galileo GT64260 host bridge. * * Author: Mark A. Greer diff -prauN linux-2.6.0-test5/include/asm-ppc/hardirq.h wli-2.6.0-test5-bk12-25/include/asm-ppc/hardirq.h --- linux-2.6.0-test5/include/asm-ppc/hardirq.h 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/hardirq.h 2003-09-25 19:16:12.000000000 -0700 @@ -7,9 +7,9 @@ #include #include -/* The __last_jiffy_stamp field is needed to ensure that no decrementer - * interrupt is lost on SMP machines. Since on most CPUs it is in the same - * cache line as local_irq_count, it is cheap to access and is also used on UP +/* The __last_jiffy_stamp field is needed to ensure that no decrementer + * interrupt is lost on SMP machines. Since on most CPUs it is in the same + * cache line as local_irq_count, it is cheap to access and is also used on UP * for uniformity. */ typedef struct { diff -prauN linux-2.6.0-test5/include/asm-ppc/highmem.h wli-2.6.0-test5-bk12-25/include/asm-ppc/highmem.h --- linux-2.6.0-test5/include/asm-ppc/highmem.h 2003-09-08 12:50:33.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/highmem.h 2003-09-25 19:16:12.000000000 -0700 @@ -10,7 +10,7 @@ * Gerhard.Wichert@pdb.siemens.de * * - * Redesigned the x86 32-bit VM architecture to deal with + * Redesigned the x86 32-bit VM architecture to deal with * up to 16 Terrabyte physical memory. With current x86 CPUs * we now support up to 64 Gigabytes physical RAM. * @@ -26,6 +26,7 @@ #include #include #include +#include /* undef for production */ #define HIGHMEM_DEBUG 1 @@ -41,8 +42,8 @@ extern void kmap_init(void) __init; * easily, subsequent pte tables have to be allocated in one physical * chunk of RAM. */ -#define PKMAP_BASE CONFIG_HIGHMEM_START -#define LAST_PKMAP 1024 +#define PKMAP_BASE CONFIG_HIGHMEM_START +#define LAST_PKMAP (1 << PTE_SHIFT) #define LAST_PKMAP_MASK (LAST_PKMAP-1) #define PKMAP_NR(virt) ((virt-PKMAP_BASE) >> PAGE_SHIFT) #define PKMAP_ADDR(nr) (PKMAP_BASE + ((nr) << PAGE_SHIFT)) diff -prauN linux-2.6.0-test5/include/asm-ppc/ibm44x.h wli-2.6.0-test5-bk12-25/include/asm-ppc/ibm44x.h --- linux-2.6.0-test5/include/asm-ppc/ibm44x.h 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/ibm44x.h 2003-09-25 19:16:12.000000000 -0700 @@ -84,11 +84,11 @@ typedef struct board_info { /* * DCRN definitions - */ + */ #ifdef CONFIG_440GX /* SDRs */ -#define DCRN_SDR_CONFIG_ADDR 0xe +#define DCRN_SDR_CONFIG_ADDR 0xe #define DCRN_SDR_CONFIG_DATA 0xf #define DCRN_SDR_PFC0 0x4100 #define DCRN_SDR_PFC1 0x4101 @@ -107,7 +107,7 @@ typedef struct board_info { #define DCRN_SDR_MFR_E0RXFH 0x00001000 #define DCRN_SDR_MFR_E1TXFL 0x00000800 #define DCRN_SDR_MFR_E1TXFH 0x00000400 -#define DCRN_SDR_MFR_E1RXFL 0x00000200 +#define DCRN_SDR_MFR_E1RXFL 0x00000200 #define DCRN_SDR_MFR_E1RXFH 0x00000100 #define DCRN_SDR_MFR_E2TXFL 0x00000080 #define DCRN_SDR_MFR_E2TXFH 0x00000040 @@ -166,14 +166,14 @@ typedef struct board_info { #define DCRN_MALRXCARR(base) (base + 0x11) /* Rx Channel Active Reset */ #define DCRN_MALRXEOBISR(base) (base + 0x12) /* Rx End of Buffer Interrupt Status */ #define DCRN_MALRXDEIR(base) (base + 0x13) /* Rx Descriptor Error Interrupt */ -#define DCRN_MALTXCTP0R(base) (base + 0x20) /* Channel Tx 0 Channel Table Pointer */ +#define DCRN_MALTXCTP0R(base) (base + 0x20) /* Channel Tx 0 Channel Table Pointer */ #define DCRN_MALTXCTP1R(base) (base + 0x21) /* Channel Tx 1 Channel Table Pointer */ #define DCRN_MALTXCTP2R(base) (base + 0x22) /* Channel Tx 2 Channel Table Pointer */ #define DCRN_MALTXCTP3R(base) (base + 0x23) /* Channel Tx 3 Channel Table Pointer */ -#define DCRN_MALRXCTP0R(base) (base + 0x40) /* Channel Rx 0 Channel Table Pointer */ -#define DCRN_MALRXCTP1R(base) (base + 0x41) /* Channel Rx 1 Channel Table Pointer */ -#define DCRN_MALRCBS0(base) (base + 0x60) /* Channel Rx 0 Channel Buffer Size */ -#define DCRN_MALRCBS1(base) (base + 0x61) /* Channel Rx 1 Channel Buffer Size */ +#define DCRN_MALRXCTP0R(base) (base + 0x40) /* Channel Rx 0 Channel Table Pointer */ +#define DCRN_MALRXCTP1R(base) (base + 0x41) /* Channel Rx 1 Channel Table Pointer */ +#define DCRN_MALRCBS0(base) (base + 0x60) /* Channel Rx 0 Channel Buffer Size */ +#define DCRN_MALRCBS1(base) (base + 0x61) /* Channel Rx 1 Channel Buffer Size */ /* Compatibility DCRN's */ #define DCRN_MALRXCTP2R(base) ((base) + 0x42) /* Channel Rx 2 Channel Table Pointer */ diff -prauN linux-2.6.0-test5/include/asm-ppc/ioctl.h wli-2.6.0-test5-bk12-25/include/asm-ppc/ioctl.h --- linux-2.6.0-test5/include/asm-ppc/ioctl.h 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/ioctl.h 2003-09-25 19:16:12.000000000 -0700 @@ -37,11 +37,21 @@ ((nr) << _IOC_NRSHIFT) | \ ((size) << _IOC_SIZESHIFT)) +/* provoke compile error for invalid uses of size argument */ +extern int __invalid_size_argument_for_IOC; +#define _IOC_TYPECHECK(t) \ + ((sizeof(t) == sizeof(t[1]) && \ + sizeof(t) < (1 << _IOC_SIZEBITS)) ? \ + sizeof(t) : __invalid_size_argument_for_IOC) + /* used to create numbers */ #define _IO(type,nr) _IOC(_IOC_NONE,(type),(nr),0) -#define _IOR(type,nr,size) _IOC(_IOC_READ,(type),(nr),sizeof(size)) -#define _IOW(type,nr,size) _IOC(_IOC_WRITE,(type),(nr),sizeof(size)) -#define _IOWR(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),sizeof(size)) +#define _IOR(type,nr,size) _IOC(_IOC_READ,(type),(nr),(_IOC_TYPECHECK(size))) +#define _IOW(type,nr,size) _IOC(_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size))) +#define _IOWR(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size))) +#define _IOR_BAD(type,nr,size) _IOC(_IOC_READ,(type),(nr),sizeof(size)) +#define _IOW_BAD(type,nr,size) _IOC(_IOC_WRITE,(type),(nr),sizeof(size)) +#define _IOWR_BAD(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),sizeof(size)) /* used to decode them.. */ #define _IOC_DIR(nr) (((nr) >> _IOC_DIRSHIFT) & _IOC_DIRMASK) diff -prauN linux-2.6.0-test5/include/asm-ppc/ipc.h wli-2.6.0-test5-bk12-25/include/asm-ppc/ipc.h --- linux-2.6.0-test5/include/asm-ppc/ipc.h 2003-09-08 12:50:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/ipc.h 2003-09-25 19:16:12.000000000 -0700 @@ -1,7 +1,7 @@ #ifndef __PPC_IPC_H__ #define __PPC_IPC_H__ -/* +/* * These are used to wrap system calls on PowerPC. * * See arch/ppc/kernel/syscalls.c for ugly details.. diff -prauN linux-2.6.0-test5/include/asm-ppc/irq.h wli-2.6.0-test5-bk12-25/include/asm-ppc/irq.h --- linux-2.6.0-test5/include/asm-ppc/irq.h 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/irq.h 2003-09-25 19:16:12.000000000 -0700 @@ -48,7 +48,7 @@ extern void enable_irq(unsigned int); * */ -#define NR_AIC_IRQS 32 +#define NR_AIC_IRQS 32 #define NR_IRQS (NR_AIC_IRQS + NR_BOARD_IRQS) #elif !defined (CONFIG_403) @@ -89,7 +89,7 @@ irq_canonicalize(int irq) * possible level sensitive interrupts assigned and generated internally * from such devices as CPM, PCMCIA, RTC, PIT, TimeBase and Decrementer. * There are eight external interrupts (IRQs) that can be configured - * as either level or edge sensitive. + * as either level or edge sensitive. * * On some implementations, there is also the possibility of an 8259 * through the PCI and PCI-ISA bridges. diff -prauN linux-2.6.0-test5/include/asm-ppc/m48t35.h wli-2.6.0-test5-bk12-25/include/asm-ppc/m48t35.h --- linux-2.6.0-test5/include/asm-ppc/m48t35.h 2003-09-08 12:49:50.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/m48t35.h 2003-09-25 19:16:12.000000000 -0700 @@ -10,15 +10,15 @@ #define __PPC_M48T35_H /* RTC offsets */ -#define M48T35_RTC_FLAGS (-8) /* the negative regs are really T37 only */ +#define M48T35_RTC_FLAGS (-8) /* the negative regs are really T37 only */ #define M48T35_RTC_CENTURY (-7) -#define M48T35_RTC_AL_SEC (-6) -#define M48T35_RTC_AL_MIN (-5) -#define M48T35_RTC_AL_HRS (-4) -#define M48T35_RTC_AL_DOM (-3) +#define M48T35_RTC_AL_SEC (-6) +#define M48T35_RTC_AL_MIN (-5) +#define M48T35_RTC_AL_HRS (-4) +#define M48T35_RTC_AL_DOM (-3) #define M48T35_RTC_INTERRUPT (-2) #define M48T35_RTC_WATCHDOG (-1) -#define M48T35_RTC_CONTROL 0 /* T35 starts here */ +#define M48T35_RTC_CONTROL 0 /* T35 starts here */ #define M48T35_RTC_SECONDS 1 #define M48T35_RTC_MINUTES 2 #define M48T35_RTC_HOURS 3 @@ -27,7 +27,7 @@ #define M48T35_RTC_MONTH 6 #define M48T35_RTC_YEAR 7 -/* this way help us know which bits go with which regs */ +/* this way help us know which bits go with which regs */ #define M48T35_RTC_FLAGS_BL 0x10 #define M48T35_RTC_FLAGS_AF 0x40 #define M48T35_RTC_FLAGS_WDF 0x80 @@ -43,18 +43,18 @@ #define M48T35_RTC_CONTROL_WRITE 0x80 #define M48T35_RTC_CONTROL_READ 0x40 -#define M48T35_RTC_CONTROL_CAL_SIGN 0x20 +#define M48T35_RTC_CONTROL_CAL_SIGN 0x20 #define M48T35_RTC_CONTROL_CAL_VALUE 0x1f #define M48T35_RTC_CONTROL_LOCKED (M48T35_RTC_WRITE|M48T35_RTC_READ) #define M48T35_RTC_CONTROL_CALIBRATION (M48T35_RTC_CONTROL_CAL_SIGN|M48T35_RTC_CONTROL_CAL_VALUE) #define M48T35_RTC_SECONDS_SEC_1 0x0f -#define M48T35_RTC_SECONDS_SEC_10 0x70 +#define M48T35_RTC_SECONDS_SEC_10 0x70 #define M48T35_RTC_SECONDS_ST 0x80 #define M48T35_RTC_SECONDS_SEC_ALL (M48T35_RTC_SECONDS_SEC_1|M48T35_RTC_SECONDS_SEC_10) #define M48T35_RTC_MINUTES_MIN_1 0x0f -#define M48T35_RTC_MINUTES_MIN_10 0x70 +#define M48T35_RTC_MINUTES_MIN_10 0x70 #define M48T35_RTC_MINUTES_MIN_ALL (M48T35_RTC_MINUTES_MIN_1|M48T35_RTC_MINUTES_MIN_10) #define M48T35_RTC_HOURS_HRS_1 0x0f diff -prauN linux-2.6.0-test5/include/asm-ppc/macio.h wli-2.6.0-test5-bk12-25/include/asm-ppc/macio.h --- linux-2.6.0-test5/include/asm-ppc/macio.h 2003-09-08 12:49:54.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/macio.h 2003-09-25 19:16:12.000000000 -0700 @@ -17,7 +17,7 @@ struct macio_chip; * within a MacIO ASIC. It's typically provided by a macio_pci_asic * PCI device, but could be provided differently as well (nubus * machines using a fake OF tree). - * + * * The pdev field can be NULL on non-PCI machines */ struct macio_bus @@ -26,7 +26,7 @@ struct macio_bus int index; /* macio chip index in system */ #ifdef CONFIG_PCI struct pci_dev *pdev; /* PCI device hosting this bus */ -#endif +#endif }; /* diff -prauN linux-2.6.0-test5/include/asm-ppc/md.h wli-2.6.0-test5-bk12-25/include/asm-ppc/md.h --- linux-2.6.0-test5/include/asm-ppc/md.h 2003-09-08 12:50:20.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/md.h 2003-09-25 19:16:12.000000000 -0700 @@ -1,8 +1,8 @@ /* - * md.h: High speed xor_block operation for RAID4/5 + * md.h: High speed xor_block operation for RAID4/5 * */ - + #ifdef __KERNEL__ #ifndef __ASM_MD_H #define __ASM_MD_H diff -prauN linux-2.6.0-test5/include/asm-ppc/mmu.h wli-2.6.0-test5-bk12-25/include/asm-ppc/mmu.h --- linux-2.6.0-test5/include/asm-ppc/mmu.h 2003-09-08 12:50:27.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/mmu.h 2003-09-25 19:16:12.000000000 -0700 @@ -50,7 +50,7 @@ typedef struct _PTE { unsigned long g:1; /* Guarded */ unsigned long :1; /* Unused */ unsigned long pp:2; /* Page protection */ -} PTE; +} PTE; /* Values for PP (assumes Ks=0, Kp=1) */ #define PP_RWXX 0 /* Supervisor read/write, User none */ @@ -90,7 +90,7 @@ typedef struct _BATU { /* Upper part of unsigned long bl:11; /* Block size mask */ unsigned long vs:1; /* Supervisor valid */ unsigned long vp:1; /* User valid */ -} BATU; +} BATU; typedef struct _P601_BATL { /* Lower part of BAT for 601 processor */ unsigned long brpn:15; /* Real page index (physical address) */ @@ -299,7 +299,7 @@ typedef struct _P601_BAT { #define TLB_LO 1 #define TLB_HI 0 - + #define TLB_DATA TLB_LO #define TLB_TAG TLB_HI @@ -319,7 +319,7 @@ typedef struct _P601_BAT { #define TLB_VALID 0x00000040 /* Entry is valid */ /* Data portion */ - + #define TLB_RPN_MASK 0xFFFFFC00 /* Real Page Number */ #define TLB_PERM_MASK 0x00000300 #define TLB_EX 0x00000200 /* Instruction execution allowed */ @@ -335,7 +335,7 @@ typedef struct _P601_BAT { /* * PPC440 support */ -#define PPC44x_MMUCR_TID 0x000000ff +#define PPC44x_MMUCR_TID 0x000000ff #define PPC44x_MMUCR_STS 0x00010000 #define PPC44x_TLB_PAGEID 0 diff -prauN linux-2.6.0-test5/include/asm-ppc/mpc10x.h wli-2.6.0-test5-bk12-25/include/asm-ppc/mpc10x.h --- linux-2.6.0-test5/include/asm-ppc/mpc10x.h 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/mpc10x.h 2003-09-25 19:16:12.000000000 -0700 @@ -1,6 +1,6 @@ /* * arch/ppc/kernel/mpc10x.h - * + * * Common routines for the Motorola SPS MPC106/8240/107 Host bridge/Mem * ctlr/EPIC/etc. * diff -prauN linux-2.6.0-test5/include/asm-ppc/mpc8xx.h wli-2.6.0-test5-bk12-25/include/asm-ppc/mpc8xx.h --- linux-2.6.0-test5/include/asm-ppc/mpc8xx.h 2003-09-08 12:50:23.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/mpc8xx.h 2003-09-25 19:16:12.000000000 -0700 @@ -98,7 +98,7 @@ extern unsigned char __res[]; struct pt_regs; extern int request_8xxirq(unsigned int irq, void (*handler)(int, void *, struct pt_regs *), - unsigned long flags, + unsigned long flags, const char *device, void *dev_id); #endif /* !__ASSEMBLY__ */ diff -prauN linux-2.6.0-test5/include/asm-ppc/msgbuf.h wli-2.6.0-test5-bk12-25/include/asm-ppc/msgbuf.h --- linux-2.6.0-test5/include/asm-ppc/msgbuf.h 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/msgbuf.h 2003-09-25 19:16:12.000000000 -0700 @@ -1,7 +1,7 @@ #ifndef _PPC_MSGBUF_H #define _PPC_MSGBUF_H -/* +/* * The msqid64_ds structure for the PPC architecture. */ diff -prauN linux-2.6.0-test5/include/asm-ppc/ocp_ids.h wli-2.6.0-test5-bk12-25/include/asm-ppc/ocp_ids.h --- linux-2.6.0-test5/include/asm-ppc/ocp_ids.h 2003-09-08 12:50:23.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/ocp_ids.h 2003-09-25 19:16:12.000000000 -0700 @@ -1,7 +1,7 @@ /* * FILE NAME: ocp_ids.h * - * BRIEF MODULE DESCRIPTION: + * BRIEF MODULE DESCRIPTION: * OCP device ids based on the ideas from PCI * * Maintained by: Armin @@ -60,40 +60,40 @@ #define OCP_FUNC_RTC 0x0021 /* Serial 0x0030 - 0x006F*/ -#define OCP_FUNC_16550 0x0031 +#define OCP_FUNC_16550 0x0031 #define OCP_FUNC_SSP 0x0032 /* sync serial port */ #define OCP_FUNC_SCP 0x0033 /* serial controller port */ #define OCP_FUNC_SCC 0x0034 /* serial contoller */ #define OCP_FUNC_SCI 0x0035 /* Smart card */ -#define OCP_FUNC_IIC 0x0040 -#define OCP_FUNC_USB 0x0050 -#define OCP_FUNC_IR 0x0060 +#define OCP_FUNC_IIC 0x0040 +#define OCP_FUNC_USB 0x0050 +#define OCP_FUNC_IR 0x0060 /* Memory devices 0x0090 - 0x009F */ #define OCP_FUNC_SDRAM 0x0091 #define OCP_FUNC_DMA 0x0092 /* Display 0x00A0 - 0x00AF */ -#define OCP_FUNC_VIDEO 0x00A0 +#define OCP_FUNC_VIDEO 0x00A0 #define OCP_FUNC_LED 0x00A1 #define OCP_FUNC_LCD 0x00A2 /* Sound 0x00B0 - 0x00BF */ -#define OCP_FUNC_AUDIO 0x00B0 +#define OCP_FUNC_AUDIO 0x00B0 /* Mass Storage 0x00C0 - 0xxCF */ -#define OCP_FUNC_IDE 0x00C0 +#define OCP_FUNC_IDE 0x00C0 /* Misc 0x00D0 - 0x00DF*/ -#define OCP_FUNC_GPIO 0x00D0 +#define OCP_FUNC_GPIO 0x00D0 #define OCP_FUNC_ZMII 0x00D1 /* Network 0x0200 - 0x02FF */ -#define OCP_FUNC_EMAC 0x0200 +#define OCP_FUNC_EMAC 0x0200 /* Bridge devices 0xE00 - 0xEFF */ -#define OCP_FUNC_HOST 0x0E00 -#define OCP_FUNC_DCR 0x0E01 +#define OCP_FUNC_HOST 0x0E00 +#define OCP_FUNC_DCR 0x0E01 #define OCP_FUNC_OPB 0x0E02 #define OCP_FUNC_PHY 0x0E03 #define OCP_FUNC_EXT 0x0E04 diff -prauN linux-2.6.0-test5/include/asm-ppc/of_device.h wli-2.6.0-test5-bk12-25/include/asm-ppc/of_device.h --- linux-2.6.0-test5/include/asm-ppc/of_device.h 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/of_device.h 2003-09-25 19:16:12.000000000 -0700 @@ -4,14 +4,14 @@ #include #include -/* +/* * The of_platform_bus_type is a bus type used by drivers that do not * attach to a macio or similar bus but still use OF probing * mecanism */ extern struct bus_type of_platform_bus_type; -/* +/* * The of_device is a kind of "base class" that is a superset of * struct device for use by devices attached to an OF node and * probed using OF properties diff -prauN linux-2.6.0-test5/include/asm-ppc/ohare.h wli-2.6.0-test5-bk12-25/include/asm-ppc/ohare.h --- linux-2.6.0-test5/include/asm-ppc/ohare.h 2003-09-08 12:49:54.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/ohare.h 2003-09-25 19:16:12.000000000 -0700 @@ -2,7 +2,7 @@ * ohare.h: definitions for using the "O'Hare" I/O controller chip. * * Copyright (C) 1997 Paul Mackerras. - * + * * BenH: Changed to match those of heathrow (but not all of them). Please * check if I didn't break anything (especially the media bay). */ diff -prauN linux-2.6.0-test5/include/asm-ppc/open_pic.h wli-2.6.0-test5-bk12-25/include/asm-ppc/open_pic.h --- linux-2.6.0-test5/include/asm-ppc/open_pic.h 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/open_pic.h 2003-09-25 19:16:12.000000000 -0700 @@ -6,7 +6,7 @@ * This file is subject to the terms and conditions of the GNU General Public * License. See the file COPYING in the main directory of this archive * for more details. - * + * */ #ifndef _PPC_KERNEL_OPEN_PIC_H @@ -54,9 +54,9 @@ extern void smp_openpic_message_pass(int extern inline int openpic_to_irq(int irq) { - /* IRQ 0 usually means 'disabled'.. don't mess with it - * exceptions to this (sandpoint maybe?) - * shouldn't use openpic_to_irq + /* IRQ 0 usually means 'disabled'.. don't mess with it + * exceptions to this (sandpoint maybe?) + * shouldn't use openpic_to_irq */ if (irq != 0){ return irq += NUM_8259_INTERRUPTS; diff -prauN linux-2.6.0-test5/include/asm-ppc/page.h wli-2.6.0-test5-bk12-25/include/asm-ppc/page.h --- linux-2.6.0-test5/include/asm-ppc/page.h 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/page.h 2003-09-25 19:16:12.000000000 -0700 @@ -106,27 +106,27 @@ extern unsigned long ppc_memoffset; #if defined(CONFIG_APUS) && !defined(MODULE) /* map phys->virtual and virtual->phys for RAM pages */ static inline unsigned long ___pa(unsigned long v) -{ +{ unsigned long p; - asm volatile ("1: addis %0, %1, %2;" + asm volatile ("1: addis %0, %1, %2;" ".section \".vtop_fixup\",\"aw\";" ".align 1;" ".long 1b;" ".previous;" - : "=r" (p) + : "=r" (p) : "b" (v), "K" (((-PAGE_OFFSET) >> 16) & 0xffff)); return p; } static inline void* ___va(unsigned long p) -{ +{ unsigned long v; - asm volatile ("1: addis %0, %1, %2;" + asm volatile ("1: addis %0, %1, %2;" ".section \".ptov_fixup\",\"aw\";" ".align 1;" ".long 1b;" ".previous;" - : "=r" (v) + : "=r" (v) : "b" (p), "K" (((PAGE_OFFSET) >> 16) & 0xffff)); return (void*) v; diff -prauN linux-2.6.0-test5/include/asm-ppc/pci-bridge.h wli-2.6.0-test5-bk12-25/include/asm-ppc/pci-bridge.h --- linux-2.6.0-test5/include/asm-ppc/pci-bridge.h 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/pci-bridge.h 2003-09-25 19:16:12.000000000 -0700 @@ -47,10 +47,10 @@ struct pci_controller { int first_busno; int last_busno; int bus_offset; - + void *io_base_virt; unsigned long io_base_phys; - + /* Some machines (PReP) have a non 1:1 mapping of * the PCI memory space in the CPU bus space */ @@ -107,7 +107,7 @@ extern unsigned char common_swizzle(stru * break this piece out separately. */ static inline unsigned char bridge_swizzle(unsigned char pin, - unsigned char idsel) + unsigned char idsel) { return (((pin-1) + idsel) % 4) + 1; } diff -prauN linux-2.6.0-test5/include/asm-ppc/pci.h wli-2.6.0-test5-bk12-25/include/asm-ppc/pci.h --- linux-2.6.0-test5/include/asm-ppc/pci.h 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/pci.h 2003-09-25 19:16:12.000000000 -0700 @@ -46,13 +46,13 @@ extern unsigned long pci_resource_to_bus * The PCI bus bridge can translate addresses issued by the processor(s) * into a different address on the PCI bus. On 32-bit cpus, we assume * this mapping is 1-1, but on 64-bit systems it often isn't. - * + * * Obsolete ! Drivers should now use pci_resource_to_bus */ extern unsigned long phys_to_bus(unsigned long pa); extern unsigned long pci_phys_to_bus(unsigned long pa, int busnr); extern unsigned long pci_bus_to_phys(unsigned int ba, int busnr); - + /* * Dynamic DMA Mapping stuff * Originally stolen from i386 by ajoshi and updated by paulus @@ -64,7 +64,7 @@ extern unsigned long pci_bus_to_phys(uns * this boolean for bounce buffer decisions. */ #define PCI_DMA_BUS_IS_PHYS (1) - + /* Allocate and map kernel buffer using consistent mode DMA for a device. * hwdev should be valid struct pci_dev pointer for PCI devices, * NULL for PCI-like buses (ISA, EISA). diff -prauN linux-2.6.0-test5/include/asm-ppc/pgalloc.h wli-2.6.0-test5-bk12-25/include/asm-ppc/pgalloc.h --- linux-2.6.0-test5/include/asm-ppc/pgalloc.h 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/pgalloc.h 2003-09-25 20:03:31.000000000 -0700 @@ -15,7 +15,8 @@ extern void pgd_free(pgd_t *pgd); * We don't have any real pmd's, and this code never triggers because * the pgd will always be present.. */ -#define pmd_alloc_one(mm,address) ({ BUG(); ((pmd_t *)2); }) +#define pmd_alloc_one(mm,address) ({ BUG(); ((struct page *)2); }) +#define pmd_alloc_one_kernel(mm,addr) ({ BUG(); ((pmd_t *)2); }) #define pmd_free(x) do { } while (0) #define __pmd_free_tlb(tlb,x) do { } while (0) #define pgd_populate(mm, pmd, pte) BUG() diff -prauN linux-2.6.0-test5/include/asm-ppc/pgtable.h wli-2.6.0-test5-bk12-25/include/asm-ppc/pgtable.h --- linux-2.6.0-test5/include/asm-ppc/pgtable.h 2003-09-08 12:49:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/pgtable.h 2003-09-25 20:03:31.000000000 -0700 @@ -427,8 +427,9 @@ static inline int pgd_bad(pgd_t pgd) { static inline int pgd_present(pgd_t pgd) { return 1; } #define pgd_clear(xp) do { } while (0) -#define pgd_page(pgd) \ +#define __pgd_page(pgd) \ ((unsigned long) __va(pgd_val(pgd) & PAGE_MASK)) +#define pgd_page(pgd) virt_to_page(__pgd_page(pgd)) /* * The following only work if pte_present() is true. @@ -484,7 +485,7 @@ static inline unsigned long pte_update(p unsigned long set) { unsigned long old, tmp; - + __asm__ __volatile__("\ 1: lwarx %0,0,%3\n\ andc %1,%0,%4\n\ @@ -562,7 +563,7 @@ static inline void ptep_mkdirty(pte_t *p #define pmd_page(pmd) \ (mem_map + (__pa(pmd_val(pmd)) >> PAGE_SHIFT)) #endif - + /* to find an entry in a kernel page-table-directory */ #define pgd_offset_k(address) pgd_offset(&init_mm, address) @@ -576,6 +577,12 @@ static inline pmd_t * pmd_offset(pgd_t * return (pmd_t *) dir; } +#define pmd_offset_kernel(pgd, addr) pmd_offset(pgd, addr) +#define pmd_offset_map(pgd, addr) pmd_offset(pgd, addr) +#define pmd_offset_map_nested(pgd, addr) pmd_offset(pgd, addr) +#define pmd_unmap(pmd) do { } while (0) +#define pmd_unmap_nested(pmd) do { } while (0) + /* Find an entry in the third-level page table.. */ #define pte_index(address) \ (((address) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)) @@ -644,7 +651,7 @@ extern unsigned long kernel_map(unsigned int nocacheflag, unsigned long *memavailp ); /* - * Set cache mode of (kernel space) address range. + * Set cache mode of (kernel space) address range. */ extern void kernel_set_cachemode (unsigned long address, unsigned long size, unsigned int cmode); @@ -652,7 +659,7 @@ extern void kernel_set_cachemode (unsign /* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ #define kern_addr_valid(addr) (1) -#define io_remap_page_range remap_page_range +#define io_remap_page_range remap_page_range /* * No page table caches to initialise diff -prauN linux-2.6.0-test5/include/asm-ppc/pmac_feature.h wli-2.6.0-test5-bk12-25/include/asm-ppc/pmac_feature.h --- linux-2.6.0-test5/include/asm-ppc/pmac_feature.h 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/pmac_feature.h 2003-09-25 19:16:12.000000000 -0700 @@ -1,27 +1,27 @@ /* * Definition of platform feature hooks for PowerMacs - * + * * This file is subject to the terms and conditions of the GNU General Public * License. See the file "COPYING" in the main directory of this archive * for more details. * * Copyright (C) 1998 Paul Mackerras & * Ben. Herrenschmidt. - * - * + * + * * Note: I removed media-bay details from the feature stuff, I beleive it's * not worth it, the media-bay driver can directly use the mac-io * ASIC registers. - * + * * Implementation note: Currently, none of these functions will block. * However, they may internally protect themselves with a spinlock * for way too long. Be prepared for at least some of these to block * in the future. - * + * * Unless specifically defined, the result code is assumed to be an * error when negative, 0 is the default success result. Some functions * may return additional positive result values. - * + * * To keep implementation simple, all feature calls are assumed to have * the prototype parameters (struct device_node* node, int value). * When either is not used, pass 0. @@ -35,9 +35,9 @@ /* * Known Mac motherboard models - * + * * Please, report any error here to benh@kernel.crashing.org, thanks ! - * + * * Note that I don't fully maintain this list for Core99 & MacRISC2 * and I'm considering removing all NewWorld entries from it and * entirely rely on the model string. @@ -76,7 +76,7 @@ #define PMAC_TYPE_UNKNOWN_PADDINGTON 0x4f /* Unknown but paddington based */ /* Core99 machines based on UniNorth 1.0 and 1.5 - * + * * Note: A single entry here may cover several actual models according * to the device-tree. (Sawtooth is most tower G4s, FW_IMAC is most * FireWire based iMacs, etc...). Those machines are too similar to be @@ -99,7 +99,7 @@ /* MacRisc2 with UniNorth 2.0 */ #define PMAC_TYPE_RACKMAC 0x80 /* XServe */ -#define PMAC_TYPE_WINDTUNNEL 0x81 +#define PMAC_TYPE_WINDTUNNEL 0x81 /* MacRISC2 machines based on the Pangea chipset */ @@ -123,7 +123,7 @@ /* * Feature calls supported on pmac - * + * */ /* @@ -203,7 +203,7 @@ static inline int pmac_call_feature(int #define PMAC_FTR_SOUND_CHIP_ENABLE PMAC_FTR_DEF(9) /* -- add various tweaks related to sound routing -- */ - + /* PMAC_FTR_AIRPORT_ENABLE (struct device_node* node, 0, int value) * enable/disable the airport card */ @@ -238,7 +238,7 @@ static inline int pmac_call_feature(int #define PMAC_FTR_SLEEP_STATE PMAC_FTR_DEF(15) /* PMAC_FTR_GET_MB_INFO (NULL, selector, 0) - * + * * returns some motherboard infos. * selector: 0 - model id * 1 - model flags (capabilities) @@ -275,7 +275,7 @@ extern void pmac_feature_init(void); * on the data structures or constants below in a normal driver * */ - + #define MAX_MACIO_CHIPS 2 enum { diff -prauN linux-2.6.0-test5/include/asm-ppc/posix_types.h wli-2.6.0-test5-bk12-25/include/asm-ppc/posix_types.h --- linux-2.6.0-test5/include/asm-ppc/posix_types.h 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/posix_types.h 2003-09-25 19:16:12.000000000 -0700 @@ -7,7 +7,6 @@ * assume GCC is being used. */ -typedef unsigned int __kernel_dev_t; typedef unsigned long __kernel_ino_t; typedef unsigned int __kernel_mode_t; typedef unsigned short __kernel_nlink_t; @@ -75,7 +74,7 @@ static __inline__ void __FD_CLR(unsigned #undef __FD_ISSET static __inline__ int __FD_ISSET(unsigned long fd, __kernel_fd_set *p) -{ +{ unsigned long _tmp = fd / __NFDBITS; unsigned long _rem = fd % __NFDBITS; return (p->fds_bits[_tmp] & (1UL<<_rem)) != 0; diff -prauN linux-2.6.0-test5/include/asm-ppc/ppc405_dma.h wli-2.6.0-test5-bk12-25/include/asm-ppc/ppc405_dma.h --- linux-2.6.0-test5/include/asm-ppc/ppc405_dma.h 2003-09-08 12:50:00.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/ppc405_dma.h 2003-09-25 19:16:12.000000000 -0700 @@ -36,7 +36,7 @@ extern unsigned long ISA_DMA_THRESHOLD; #define dma_inb inb -/* +/* * Function return status codes * These values are used to indicate whether or not the function * call was successful, or a bad/invalid parameter was passed. @@ -79,7 +79,7 @@ extern unsigned long ISA_DMA_THRESHOLD; #define DMA_MODE_MM_DEVATDST (SET_DMA_TM(TM_D_MM)) -/* +/* * DMA Polarity Configuration Register */ #define DMAReq0_ActiveLow (1<<31) @@ -113,14 +113,14 @@ extern unsigned long ISA_DMA_THRESHOLD; #define DMA_CS3 (1<<28) #define DMA_TS0 (1<<27) /* End of Transfer has been requested */ -#define DMA_TS1 (1<<26) -#define DMA_TS2 (1<<25) -#define DMA_TS3 (1<<24) +#define DMA_TS1 (1<<26) +#define DMA_TS2 (1<<25) +#define DMA_TS3 (1<<24) #define DMA_CH0_ERR (1<<23) /* DMA Chanel 0 Error */ -#define DMA_CH1_ERR (1<<22) -#define DMA_CH2_ERR (1<<21) -#define DMA_CH3_ERR (1<<20) +#define DMA_CH1_ERR (1<<22) +#define DMA_CH2_ERR (1<<21) +#define DMA_CH3_ERR (1<<20) #define DMA_IN_DMA_REQ0 (1<<19) /* Internal DMA Request is pending */ #define DMA_IN_DMA_REQ1 (1<<18) @@ -133,14 +133,14 @@ extern unsigned long ISA_DMA_THRESHOLD; #define DMA_EXT_DMA_REQ3 (1<<12) #define DMA_CH0_BUSY (1<<11) /* DMA Channel 0 Busy */ -#define DMA_CH1_BUSY (1<<10) -#define DMA_CH2_BUSY (1<<9) -#define DMA_CH3_BUSY (1<<8) +#define DMA_CH1_BUSY (1<<10) +#define DMA_CH2_BUSY (1<<9) +#define DMA_CH3_BUSY (1<<8) #define DMA_SG0 (1<<7) /* DMA Channel 0 Scatter/Gather in progress */ -#define DMA_SG1 (1<<6) -#define DMA_SG2 (1<<5) -#define DMA_SG3 (1<<4) +#define DMA_SG1 (1<<6) +#define DMA_SG2 (1<<5) +#define DMA_SG3 (1<<4) @@ -155,7 +155,7 @@ extern unsigned long ISA_DMA_THRESHOLD; #define SET_DMA_CIE_ENABLE(x) (((x)&0x1)<<30) #define GET_DMA_CIE_ENABLE(x) (((x)&DMA_CIE_ENABLE)>>30) -#define DMA_TD (1<<29) +#define DMA_TD (1<<29) #define SET_DMA_TD(x) (((x)&0x1)<<29) #define GET_DMA_TD(x) (((x)&DMA_TD)>>29) @@ -212,7 +212,7 @@ extern unsigned long ISA_DMA_THRESHOLD; #define SET_DMA_PRIORITY(x) (((x)&0x3)<<6) /* DMA Channel Priority */ #define DMA_PRIORITY_MASK SET_DMA_PRIORITY(3) -#define PRIORITY_LOW 0 +#define PRIORITY_LOW 0 #define PRIORITY_MID_LOW 1 #define PRIORITY_MID_HIGH 2 #define PRIORITY_HIGH 3 @@ -241,13 +241,13 @@ extern unsigned long ISA_DMA_THRESHOLD; #define SSG2_ENABLE (1<<29) #define SSG3_ENABLE (1<<28) #define SSG0_MASK_ENABLE (1<<15) /* Enable writing to SSG0 bit */ -#define SSG1_MASK_ENABLE (1<<14) -#define SSG2_MASK_ENABLE (1<<13) -#define SSG3_MASK_ENABLE (1<<12) +#define SSG1_MASK_ENABLE (1<<14) +#define SSG2_MASK_ENABLE (1<<13) +#define SSG3_MASK_ENABLE (1<<12) /* - * DMA Scatter/Gather Descriptor Bit fields + * DMA Scatter/Gather Descriptor Bit fields */ #define SG_LINK (1<<31) /* Link */ #define SG_TCI_ENABLE (1<<29) /* Enable Terminal Count Interrupt */ @@ -262,7 +262,7 @@ typedef uint32_t sgl_handle_t; typedef struct { - /* + /* * Valid polarity settings: * DMAReq0_ActiveLow * DMAAck0_ActiveLow @@ -271,18 +271,18 @@ typedef struct { * DMAReq1_ActiveLow * DMAAck1_ActiveLow * EOT1_ActiveLow - * + * * DMAReq2_ActiveLow * DMAAck2_ActiveLow * EOT2_ActiveLow * - * DMAReq3_ActiveLow + * DMAReq3_ActiveLow * DMAAck3_ActiveLow * EOT3_ActiveLow */ unsigned int polarity; - char buffer_enable; /* Boolean: buffer enable */ + char buffer_enable; /* Boolean: buffer enable */ char tce_enable; /* Boolean: terminal count enable */ char etd_output; /* Boolean: eot pin is a tc output */ char pce; /* Boolean: parity check enable */ @@ -423,7 +423,7 @@ static __inline__ int enable_405gp_dma(u case 0: if (p_dma_ch->mode == DMA_MODE_READ) { /* peripheral to memory */ - mtdcr(DCRN_DMASA0, NULL); + mtdcr(DCRN_DMASA0, NULL); mtdcr(DCRN_DMADA0, p_dma_ch->addr); } else if (p_dma_ch->mode == DMA_MODE_WRITE) { @@ -438,8 +438,8 @@ static __inline__ int enable_405gp_dma(u mtdcr(DCRN_DMACR0, control); break; case 1: - if (p_dma_ch->mode == DMA_MODE_READ) { - mtdcr(DCRN_DMASA1, NULL); + if (p_dma_ch->mode == DMA_MODE_READ) { + mtdcr(DCRN_DMASA1, NULL); mtdcr(DCRN_DMADA1, p_dma_ch->addr); } else if (p_dma_ch->mode == DMA_MODE_WRITE) { mtdcr(DCRN_DMASA1, p_dma_ch->addr); @@ -451,10 +451,10 @@ static __inline__ int enable_405gp_dma(u mtdcr(DCRN_DMACR1, control); break; case 2: - if (p_dma_ch->mode == DMA_MODE_READ) { - mtdcr(DCRN_DMASA2, NULL); + if (p_dma_ch->mode == DMA_MODE_READ) { + mtdcr(DCRN_DMASA2, NULL); mtdcr(DCRN_DMADA2, p_dma_ch->addr); - } else if (p_dma_ch->mode == DMA_MODE_WRITE) { + } else if (p_dma_ch->mode == DMA_MODE_WRITE) { mtdcr(DCRN_DMASA2, p_dma_ch->addr); mtdcr(DCRN_DMADA2, NULL); } @@ -464,8 +464,8 @@ static __inline__ int enable_405gp_dma(u mtdcr(DCRN_DMACR2, control); break; case 3: - if (p_dma_ch->mode == DMA_MODE_READ) { - mtdcr(DCRN_DMASA3, NULL); + if (p_dma_ch->mode == DMA_MODE_READ) { + mtdcr(DCRN_DMASA3, NULL); mtdcr(DCRN_DMADA3, p_dma_ch->addr); } else if (p_dma_ch->mode == DMA_MODE_WRITE) { mtdcr(DCRN_DMASA3, p_dma_ch->addr); @@ -529,7 +529,7 @@ static __inline__ void disable_405gp_dma * * Valid mode values are: * - * DMA_MODE_READ peripheral to memory + * DMA_MODE_READ peripheral to memory * DMA_MODE_WRITE memory to peripheral * DMA_MODE_MM memory to memory * DMA_MODE_MM_DEVATSRC device-paced memory to memory, device at src @@ -569,8 +569,8 @@ static __inline__ int set_405gp_dma_mode * where each transfer is equal to the bus width. Thus, count * MUST be a multiple of the bus width. */ -static __inline__ void -set_405gp_dma_count(unsigned int dmanr, unsigned int count) +static __inline__ void +set_405gp_dma_count(unsigned int dmanr, unsigned int count) { ppc_dma_ch_t *p_dma_ch = &dma_channels[dmanr]; @@ -697,21 +697,21 @@ static __inline__ void set_405gp_dma_add printk("Warning: set_dma_addr addr 0x%x bus width %d\n", addr, p_dma_ch->pwidth); } -#endif +#endif /* save dma address and program it later after we know the xfer mode */ - p_dma_ch->addr = addr; + p_dma_ch->addr = addr; } /* - * Sets both DMA addresses for a memory to memory transfer. + * Sets both DMA addresses for a memory to memory transfer. * For memory to peripheral or peripheral to memory transfers * the function set_dma_addr() should be used instead. */ -static __inline__ void +static __inline__ void set_405gp_dma_addr2(unsigned int dmanr, dma_addr_t src_dma_addr, dma_addr_t dst_dma_addr) { @@ -746,7 +746,7 @@ set_405gp_dma_addr2(unsigned int dmanr, return; } if (error) - printk("Warning: set_dma_addr2 src 0x%x dst 0x%x bus width %d\n", + printk("Warning: set_dma_addr2 src 0x%x dst 0x%x bus width %d\n", src_dma_addr, dst_dma_addr, p_dma_ch->pwidth); } #endif @@ -780,12 +780,12 @@ set_405gp_dma_addr2(unsigned int dmanr, /* * Enables the channel interrupt. * - * If performing a scatter/gatter transfer, this function + * If performing a scatter/gatter transfer, this function * MUST be called before calling alloc_dma_handle() and building - * the sgl list. Otherwise, interrupts will not be enabled, if + * the sgl list. Otherwise, interrupts will not be enabled, if * they were previously disabled. */ -static __inline__ int +static __inline__ int enable_405gp_dma_interrupt(unsigned int dmanr) { unsigned int control; @@ -827,12 +827,12 @@ enable_405gp_dma_interrupt(unsigned int /* * Disables the channel interrupt. * - * If performing a scatter/gatter transfer, this function + * If performing a scatter/gatter transfer, this function * MUST be called before calling alloc_dma_handle() and building - * the sgl list. Otherwise, interrupts will not be disabled, if + * the sgl list. Otherwise, interrupts will not be disabled, if * they were previously enabled. */ -static __inline__ int +static __inline__ int disable_405gp_dma_interrupt(unsigned int dmanr) { unsigned int control; @@ -873,8 +873,8 @@ disable_405gp_dma_interrupt(unsigned int #ifdef DCRNCAP_DMA_SG /* - * Add a new sgl descriptor to the end of a scatter/gather list - * which was created by alloc_dma_handle(). + * Add a new sgl descriptor to the end of a scatter/gather list + * which was created by alloc_dma_handle(). * * For a memory to memory transfer, both dma addresses must be * valid. For a peripheral to memory transfer, one of the addresses @@ -882,13 +882,13 @@ disable_405gp_dma_interrupt(unsigned int * memory to peripheral: set dst_addr to NULL, * peripheral to memory: set src_addr to NULL. */ -static __inline__ int +static __inline__ int add_405gp_dma_sgl(sgl_handle_t handle, dma_addr_t src_addr, dma_addr_t dst_addr, unsigned int count) { sgl_list_info_t *psgl = (sgl_list_info_t *)handle; ppc_dma_ch_t *p_dma_ch; - + if (!handle) { #ifdef DEBUG_405DMA printk("add_dma_sgl: null handle\n"); @@ -930,7 +930,7 @@ add_405gp_dma_sgl(sgl_handle_t handle, d return DMA_STATUS_GENERAL_ERROR; } if (error) - printk("Alignment warning: add_dma_sgl src 0x%x dst 0x%x count 0x%x bus width var %d\n", + printk("Alignment warning: add_dma_sgl src 0x%x dst 0x%x count 0x%x bus width var %d\n", src_addr, dst_addr, count, p_dma_ch->pwidth); } @@ -1023,7 +1023,7 @@ static __inline__ void enable_405gp_dma_ pnext = psgl->phead; while (pnext) { - printk("dma descriptor at 0x%x, dma addr 0x%x\n", + printk("dma descriptor at 0x%x, dma addr 0x%x\n", (unsigned)pnext, (unsigned)virt_to_bus(pnext)); printk("control 0x%x src 0x%x dst 0x%x c_count 0x%x, next 0x%x\n", (unsigned)pnext->control, (unsigned)pnext->src_addr, @@ -1099,7 +1099,7 @@ static __inline__ void disable_405gp_dma * * An sgl transfer must NOT be active when this function is called. */ -static __inline__ int +static __inline__ int get_405gp_dma_sgl_residue(sgl_handle_t handle, dma_addr_t *src_addr, dma_addr_t *dst_addr) { @@ -1170,7 +1170,7 @@ get_405gp_dma_sgl_residue(sgl_handle_t h */ pnext++; - while ((pnext != psgl->ptail) && + while ((pnext != psgl->ptail) && ((unsigned)pnext < ((unsigned)psgl + SGL_LIST_SIZE)) ) { count_left += pnext->control_count & SG_COUNT_MASK; @@ -1188,7 +1188,7 @@ get_405gp_dma_sgl_residue(sgl_handle_t h /* success */ p_dma_ch = &dma_channels[psgl->dmanr]; return (count_left << p_dma_ch->shift); /* count in bytes */ - + } else { /* this shouldn't happen */ #ifdef DEBUG_405DMA @@ -1215,7 +1215,7 @@ error: * * This function should only be called when the DMA is not active. */ -static __inline__ int +static __inline__ int delete_405gp_dma_sgl_element(sgl_handle_t handle, dma_addr_t *src_dma_addr, dma_addr_t *dst_dma_addr) { diff -prauN linux-2.6.0-test5/include/asm-ppc/ppc_asm.h wli-2.6.0-test5-bk12-25/include/asm-ppc/ppc_asm.h --- linux-2.6.0-test5/include/asm-ppc/ppc_asm.h 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/ppc_asm.h 2003-09-25 19:16:12.000000000 -0700 @@ -47,16 +47,16 @@ #define REST_32FPRS(n, base) REST_16FPRS(n, base); REST_16FPRS(n+16, base) #define SAVE_VR(n,b,base) li b,THREAD_VR0+(16*(n)); stvx n,b,base -#define SAVE_2VR(n,b,base) SAVE_VR(n,b,base); SAVE_VR(n+1,b,base) -#define SAVE_4VR(n,b,base) SAVE_2VR(n,b,base); SAVE_2VR(n+2,b,base) -#define SAVE_8VR(n,b,base) SAVE_4VR(n,b,base); SAVE_4VR(n+4,b,base) +#define SAVE_2VR(n,b,base) SAVE_VR(n,b,base); SAVE_VR(n+1,b,base) +#define SAVE_4VR(n,b,base) SAVE_2VR(n,b,base); SAVE_2VR(n+2,b,base) +#define SAVE_8VR(n,b,base) SAVE_4VR(n,b,base); SAVE_4VR(n+4,b,base) #define SAVE_16VR(n,b,base) SAVE_8VR(n,b,base); SAVE_8VR(n+8,b,base) #define SAVE_32VR(n,b,base) SAVE_16VR(n,b,base); SAVE_16VR(n+16,b,base) #define REST_VR(n,b,base) li b,THREAD_VR0+(16*(n)); lvx n,b,base -#define REST_2VR(n,b,base) REST_VR(n,b,base); REST_VR(n+1,b,base) -#define REST_4VR(n,b,base) REST_2VR(n,b,base); REST_2VR(n+2,b,base) -#define REST_8VR(n,b,base) REST_4VR(n,b,base); REST_4VR(n+4,b,base) -#define REST_16VR(n,b,base) REST_8VR(n,b,base); REST_8VR(n+8,b,base) +#define REST_2VR(n,b,base) REST_VR(n,b,base); REST_VR(n+1,b,base) +#define REST_4VR(n,b,base) REST_2VR(n,b,base); REST_2VR(n+2,b,base) +#define REST_8VR(n,b,base) REST_4VR(n,b,base); REST_4VR(n+4,b,base) +#define REST_16VR(n,b,base) REST_8VR(n,b,base); REST_8VR(n+8,b,base) #define REST_32VR(n,b,base) REST_16VR(n,b,base); REST_16VR(n+16,b,base) #ifdef CONFIG_PPC601_SYNC_FIX diff -prauN linux-2.6.0-test5/include/asm-ppc/pplus.h wli-2.6.0-test5-bk12-25/include/asm-ppc/pplus.h --- linux-2.6.0-test5/include/asm-ppc/pplus.h 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/pplus.h 2003-09-25 19:16:12.000000000 -0700 @@ -1,6 +1,6 @@ /* * include/asm-ppc/pplus.h - * + * * Definitions for Motorola MCG Falcon/Raven & HAWK North Bridge & Memory ctlr. * * Author: Mark A. Greer diff -prauN linux-2.6.0-test5/include/asm-ppc/processor.h wli-2.6.0-test5-bk12-25/include/asm-ppc/processor.h --- linux-2.6.0-test5/include/asm-ppc/processor.h 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/processor.h 2003-09-25 19:16:12.000000000 -0700 @@ -190,8 +190,8 @@ #define DBCR0_IA34T 0x00004000 /* Instr Addr 3-4 range Toggle */ #define DBCR0_FT 0x00000001 /* Freeze Timers on debug event */ #ifndef CONFIG_BOOKE -#define SPRN_DBCR1 0x3BD /* Debug Control Register 1 */ -#define SPRN_DBSR 0x3F0 /* Debug Status Register */ +#define SPRN_DBCR1 0x3BD /* Debug Control Register 1 */ +#define SPRN_DBSR 0x3F0 /* Debug Status Register */ #define DBSR_IC 0x80000000 /* Instruction Completion */ #define DBSR_BT 0x40000000 /* Branch taken */ #define DBSR_TIE 0x10000000 /* Trap Instruction debug Event */ @@ -803,7 +803,6 @@ extern long kernel_thread(int (*fn)(void /* * Bus types */ -#define EISA_bus 0 #define MCA_bus 0 #define MCA_bus__is_a_macro @@ -848,6 +847,7 @@ struct thread_struct { /* AltiVec status */ vector128 vscr __attribute((aligned(16))); unsigned long vrsave; + int used_vr; /* set if process has used altivec */ #endif /* CONFIG_ALTIVEC */ }; diff -prauN linux-2.6.0-test5/include/asm-ppc/prom.h wli-2.6.0-test5-bk12-25/include/asm-ppc/prom.h --- linux-2.6.0-test5/include/asm-ppc/prom.h 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/prom.h 2003-09-25 19:16:12.000000000 -0700 @@ -109,7 +109,7 @@ extern int call_rtas(const char *service unsigned long *outputs, ...); /* - * PCI <-> OF matching functions + * PCI <-> OF matching functions */ struct pci_bus; struct pci_dev; diff -prauN linux-2.6.0-test5/include/asm-ppc/rtc.h wli-2.6.0-test5-bk12-25/include/asm-ppc/rtc.h --- linux-2.6.0-test5/include/asm-ppc/rtc.h 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/rtc.h 2003-09-25 19:16:12.000000000 -0700 @@ -1,4 +1,4 @@ -/* +/* * inclue/asm-ppc/rtc.h * * Author: Tom Rini diff -prauN linux-2.6.0-test5/include/asm-ppc/sembuf.h wli-2.6.0-test5-bk12-25/include/asm-ppc/sembuf.h --- linux-2.6.0-test5/include/asm-ppc/sembuf.h 2003-09-08 12:50:28.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/sembuf.h 2003-09-25 19:16:12.000000000 -0700 @@ -1,7 +1,7 @@ #ifndef _PPC_SEMBUF_H #define _PPC_SEMBUF_H -/* +/* * The semid64_ds structure for PPC architecture. */ diff -prauN linux-2.6.0-test5/include/asm-ppc/shmbuf.h wli-2.6.0-test5-bk12-25/include/asm-ppc/shmbuf.h --- linux-2.6.0-test5/include/asm-ppc/shmbuf.h 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/shmbuf.h 2003-09-25 19:16:12.000000000 -0700 @@ -1,7 +1,7 @@ #ifndef _PPC_SHMBUF_H #define _PPC_SHMBUF_H -/* +/* * The shmid64_ds structure for PPC architecture. */ diff -prauN linux-2.6.0-test5/include/asm-ppc/signal.h wli-2.6.0-test5-bk12-25/include/asm-ppc/signal.h --- linux-2.6.0-test5/include/asm-ppc/signal.h 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/signal.h 2003-09-25 19:16:12.000000000 -0700 @@ -61,7 +61,7 @@ typedef struct { /* These should not be considered constants from userland. */ #define SIGRTMIN 32 -#define SIGRTMAX (_NSIG-1) +#define SIGRTMAX _NSIG /* * SA_FLAGS values: @@ -91,7 +91,7 @@ typedef struct { #define SA_RESTORER 0x04000000 -/* +/* * sigaltstack controls */ #define SS_ONSTACK 1 diff -prauN linux-2.6.0-test5/include/asm-ppc/stat.h wli-2.6.0-test5-bk12-25/include/asm-ppc/stat.h --- linux-2.6.0-test5/include/asm-ppc/stat.h 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/stat.h 2003-09-25 19:16:12.000000000 -0700 @@ -22,13 +22,13 @@ struct __old_kernel_stat { #define STAT_HAVE_NSEC 1 struct stat { - dev_t st_dev; + unsigned st_dev; ino_t st_ino; mode_t st_mode; nlink_t st_nlink; uid_t st_uid; gid_t st_gid; - dev_t st_rdev; + unsigned st_rdev; off_t st_size; unsigned long st_blksize; unsigned long st_blocks; diff -prauN linux-2.6.0-test5/include/asm-ppc/termios.h wli-2.6.0-test5-bk12-25/include/asm-ppc/termios.h --- linux-2.6.0-test5/include/asm-ppc/termios.h 2003-09-08 12:50:44.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/termios.h 2003-09-25 19:16:12.000000000 -0700 @@ -151,7 +151,7 @@ struct termio { #ifdef __KERNEL__ /* ^C ^\ del ^U ^D 1 0 0 0 0 ^W ^R ^Z ^Q ^S ^V ^U */ -#define INIT_C_CC "\003\034\177\025\004\001\000\000\000\000\027\022\032\021\023\026\025" +#define INIT_C_CC "\003\034\177\025\004\001\000\000\000\000\027\022\032\021\023\026\025" #endif /* __KERNEL__ */ /* modem lines */ diff -prauN linux-2.6.0-test5/include/asm-ppc/time.h wli-2.6.0-test5-bk12-25/include/asm-ppc/time.h --- linux-2.6.0-test5/include/asm-ppc/time.h 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/time.h 2003-09-25 19:16:12.000000000 -0700 @@ -97,6 +97,13 @@ extern __inline__ unsigned long get_rtcl return rtcl; } +extern __inline__ unsigned long get_rtcu(void) +{ + unsigned long rtcu; + asm volatile("mfrtcu %0" : "=r" (rtcu)); + return rtcu; +} + extern __inline__ unsigned get_native_tbl(void) { if (__USE_RTC()) return get_rtcl(); @@ -140,6 +147,7 @@ extern __inline__ unsigned binary_tbl(vo #endif /* Use mulhwu to scale processor timebase to timeval */ +/* Specifically, this computes (x * y) / 2^32. -- paulus */ #define mulhwu(x,y) \ ({unsigned z; asm ("mulhwu %0,%1,%2" : "=r" (z) : "r" (x), "r" (y)); z;}) diff -prauN linux-2.6.0-test5/include/asm-ppc/ucontext.h wli-2.6.0-test5-bk12-25/include/asm-ppc/ucontext.h --- linux-2.6.0-test5/include/asm-ppc/ucontext.h 2003-09-08 12:50:09.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/ucontext.h 2003-09-25 19:16:12.000000000 -0700 @@ -1,14 +1,28 @@ #ifndef _ASMPPC_UCONTEXT_H #define _ASMPPC_UCONTEXT_H -/* Copied from i386. */ +#include +#include + +struct mcontext { + elf_gregset_t mc_gregs; + elf_fpregset_t mc_fregs; + unsigned long mc_pad[2]; + elf_vrregset_t mc_vregs __attribute__((__aligned__(16))); +}; struct ucontext { - unsigned long uc_flags; - struct ucontext *uc_link; - stack_t uc_stack; - struct sigcontext uc_mcontext; - sigset_t uc_sigmask; /* mask last for extensibility */ + unsigned long uc_flags; + struct ucontext *uc_link; + stack_t uc_stack; + int uc_pad[7]; + struct mcontext *uc_regs; /* backward compat */ + sigset_t uc_oldsigmask; /* backward compat */ + int uc_pad2; + sigset_t uc_sigmask; + /* glibc has 1024-bit signal masks, ours are 64-bit */ + int uc_maskext[30]; + struct mcontext uc_mcontext; }; #endif /* !_ASMPPC_UCONTEXT_H */ diff -prauN linux-2.6.0-test5/include/asm-ppc/unaligned.h wli-2.6.0-test5-bk12-25/include/asm-ppc/unaligned.h --- linux-2.6.0-test5/include/asm-ppc/unaligned.h 2003-09-08 12:50:17.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/unaligned.h 2003-09-25 19:16:12.000000000 -0700 @@ -3,7 +3,7 @@ #define __PPC_UNALIGNED_H /* - * The PowerPC can do unaligned accesses itself in big endian mode. + * The PowerPC can do unaligned accesses itself in big endian mode. * * The strange macros are there to make sure these can't * be misused in a way that makes them not work on other diff -prauN linux-2.6.0-test5/include/asm-ppc/uninorth.h wli-2.6.0-test5-bk12-25/include/asm-ppc/uninorth.h --- linux-2.6.0-test5/include/asm-ppc/uninorth.h 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc/uninorth.h 2003-09-25 19:16:12.000000000 -0700 @@ -9,7 +9,7 @@ /* * Uni-N config space reg. definitions - * + * * (Little endian) */ @@ -32,13 +32,13 @@ /* My understanding of UniNorth AGP as of UniNorth rev 1.0x, * revision 1.5 (x4 AGP) may need further changes. - * + * * AGP_BASE register contains the base address of the AGP aperture on * the AGP bus. It doesn't seem to be visible to the CPU as of UniNorth 1.x, * even if decoding of this address range is enabled in the address select * register. Apparently, the only supported bases are 256Mb multiples * (high 4 bits of that register). - * + * * GART_BASE register appear to contain the physical address of the GART * in system memory in the high address bits (page aligned), and the * GART size in the low order bits (number of GART pages) @@ -47,39 +47,39 @@ * This word contains, in little-endian format (!!!), the physical address * of the page in the high bits, and what appears to be an "enable" bit * in the LSB bit (0) that must be set to 1 when the entry is valid. - * + * * Obviously, the GART is not cache coherent and so any change to it * must be flushed to memory (or maybe just make the GART space non * cachable). AGP memory itself doens't seem to be cache coherent neither. - * + * * In order to invalidate the GART (which is probably necessary to inval * the bridge internal TLBs), the following sequence has to be written, * in order, to the GART_CTRL register: - * + * * UNI_N_CFG_GART_ENABLE | UNI_N_CFG_GART_INVAL * UNI_N_CFG_GART_ENABLE * UNI_N_CFG_GART_ENABLE | UNI_N_CFG_GART_2xRESET * UNI_N_CFG_GART_ENABLE - * + * * As far as AGP "features" are concerned, it looks like fast write may * not be supported but this has to be confirmed. - * + * * Turning on AGP seem to require a double invalidate operation, one before * setting the AGP command register, on after. - * + * * Turning off AGP seems to require the following sequence: first wait * for the AGP to be idle by reading the internal status register, then * write in that order to the GART_CTRL register: - * + * * UNI_N_CFG_GART_ENABLE | UNI_N_CFG_GART_INVAL * 0 * UNI_N_CFG_GART_2xRESET * 0 */ -/* +/* * Uni-N memory mapped reg. definitions - * + * * Those registers are Big-Endian !! * * Their meaning come from either Darwin and/or from experiments I made with @@ -89,7 +89,7 @@ /* Version of the UniNorth chip */ #define UNI_N_VERSION 0x0000 /* Known versions: 3,7 and 8 */ - + /* This register is used to enable/disable various clocks */ #define UNI_N_CLOCK_CNTL 0x0020 #define UNI_N_CLOCK_CNTL_PCI 0x00000001 /* PCI2 clock control */ diff -prauN linux-2.6.0-test5/include/asm-ppc64/hvcall.h wli-2.6.0-test5-bk12-25/include/asm-ppc64/hvcall.h --- linux-2.6.0-test5/include/asm-ppc64/hvcall.h 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc64/hvcall.h 2003-09-25 19:16:12.000000000 -0700 @@ -59,9 +59,6 @@ #define H_XIRR 0x74 #define H_PERFMON 0x7c -#define HSC ".long 0x44000022\n" -#define H_ENTER_r3 "li 3, 0x08\n" - /* plpar_hcall() -- Generic call interface using above opcodes * * The actual call interface is a hypervisor call instruction with diff -prauN linux-2.6.0-test5/include/asm-ppc64/ioctl.h wli-2.6.0-test5-bk12-25/include/asm-ppc64/ioctl.h --- linux-2.6.0-test5/include/asm-ppc64/ioctl.h 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc64/ioctl.h 2003-09-25 19:16:12.000000000 -0700 @@ -42,11 +42,21 @@ ((nr) << _IOC_NRSHIFT) | \ ((size) << _IOC_SIZESHIFT)) +/* provoke compile error for invalid uses of size argument */ +extern int __invalid_size_argument_for_IOC; +#define _IOC_TYPECHECK(t) \ + ((sizeof(t) == sizeof(t[1]) && \ + sizeof(t) < (1 << _IOC_SIZEBITS)) ? \ + sizeof(t) : __invalid_size_argument_for_IOC) + /* used to create numbers */ #define _IO(type,nr) _IOC(_IOC_NONE,(type),(nr),0) -#define _IOR(type,nr,size) _IOC(_IOC_READ,(type),(nr),sizeof(size)) -#define _IOW(type,nr,size) _IOC(_IOC_WRITE,(type),(nr),sizeof(size)) -#define _IOWR(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),sizeof(size)) +#define _IOR(type,nr,size) _IOC(_IOC_READ,(type),(nr),(_IOC_TYPECHECK(size))) +#define _IOW(type,nr,size) _IOC(_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size))) +#define _IOWR(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size))) +#define _IOR_BAD(type,nr,size) _IOC(_IOC_READ,(type),(nr),sizeof(size)) +#define _IOW_BAD(type,nr,size) _IOC(_IOC_WRITE,(type),(nr),sizeof(size)) +#define _IOWR_BAD(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),sizeof(size)) /* used to decode them.. */ #define _IOC_DIR(nr) (((nr) >> _IOC_DIRSHIFT) & _IOC_DIRMASK) diff -prauN linux-2.6.0-test5/include/asm-ppc64/local.h wli-2.6.0-test5-bk12-25/include/asm-ppc64/local.h --- linux-2.6.0-test5/include/asm-ppc64/local.h 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc64/local.h 2003-09-25 19:16:12.000000000 -0700 @@ -0,0 +1 @@ +#include diff -prauN linux-2.6.0-test5/include/asm-ppc64/mmu.h wli-2.6.0-test5-bk12-25/include/asm-ppc64/mmu.h --- linux-2.6.0-test5/include/asm-ppc64/mmu.h 2003-09-08 12:50:16.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc64/mmu.h 2003-09-25 19:16:12.000000000 -0700 @@ -18,6 +18,12 @@ /* Default "unsigned long" context */ typedef unsigned long mm_context_t; +#ifdef CONFIG_HUGETLB_PAGE +#define CONTEXT_LOW_HPAGES (1UL<<63) +#else +#define CONTEXT_LOW_HPAGES 0 +#endif + /* * Define the size of the cache used for segment table entries. The first * entry is used as a cache pointer, therefore the actual number of entries diff -prauN linux-2.6.0-test5/include/asm-ppc64/mmu_context.h wli-2.6.0-test5-bk12-25/include/asm-ppc64/mmu_context.h --- linux-2.6.0-test5/include/asm-ppc64/mmu_context.h 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc64/mmu_context.h 2003-09-25 19:16:12.000000000 -0700 @@ -127,7 +127,8 @@ destroy_context(struct mm_struct *mm) #endif mmu_context_queue.size++; - mmu_context_queue.elements[index] = mm->context; + mmu_context_queue.elements[index] = + mm->context & ~CONTEXT_LOW_HPAGES; spin_unlock_irqrestore(&mmu_context_queue.lock, flags); } @@ -189,6 +190,8 @@ get_vsid( unsigned long context, unsigne { unsigned long ordinal, vsid; + context &= ~CONTEXT_LOW_HPAGES; + ordinal = (((ea >> 28) & 0x1fffff) * LAST_USER_CONTEXT) | context; vsid = (ordinal * VSID_RANDOMIZER) & VSID_MASK; diff -prauN linux-2.6.0-test5/include/asm-ppc64/mmzone.h wli-2.6.0-test5-bk12-25/include/asm-ppc64/mmzone.h --- linux-2.6.0-test5/include/asm-ppc64/mmzone.h 2003-09-08 12:50:32.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc64/mmzone.h 2003-09-25 19:16:12.000000000 -0700 @@ -20,7 +20,7 @@ extern struct pglist_data node_data[]; extern int numa_cpu_lookup_table[]; extern int numa_memory_lookup_table[]; -extern unsigned long numa_cpumask_lookup_table[]; +extern cpumask_t numa_cpumask_lookup_table[]; extern int nr_cpus_in_node[]; #define MAX_MEMORY (1UL << 41) diff -prauN linux-2.6.0-test5/include/asm-ppc64/paca.h wli-2.6.0-test5-bk12-25/include/asm-ppc64/paca.h --- linux-2.6.0-test5/include/asm-ppc64/paca.h 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc64/paca.h 2003-09-25 19:16:12.000000000 -0700 @@ -63,7 +63,7 @@ struct paca_struct { u16 xPacaIndex; /* Logical processor number 0x18 */ u16 active; /* Is this cpu active? 0x1a */ u32 default_decr; /* Default decrementer value 0x1c */ - u64 xHrdIntStack; /* Stack for hardware interrupts 0x20 */ + u64 unused1; u64 xKsave; /* Saved Kernel stack addr or zero 0x28 */ u64 pvr; /* Processor version register 0x30 */ u8 *exception_sp; /* 0x38 */ @@ -73,7 +73,7 @@ struct paca_struct { STAB xStab_data; /* Segment table information 0x50,0x58,0x60 */ u8 xSegments[STAB_CACHE_SIZE]; /* Cache of used stab entries 0x68,0x70 */ u8 xProcEnabled; /* 1=soft enabled 0x78 */ - u8 xHrdIntCount; /* Count of active hardware interrupts 0x79 */ + u8 unused2; u8 prof_enabled; /* 1=iSeries profiling enabled 0x7A */ u8 stab_cache_pointer; u8 resv1[4]; /* 0x7B-0x7F */ diff -prauN linux-2.6.0-test5/include/asm-ppc64/page.h wli-2.6.0-test5-bk12-25/include/asm-ppc64/page.h --- linux-2.6.0-test5/include/asm-ppc64/page.h 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc64/page.h 2003-09-25 19:16:13.000000000 -0700 @@ -22,6 +22,39 @@ #define PAGE_MASK (~(PAGE_SIZE-1)) #define PAGE_OFFSET_MASK (PAGE_SIZE-1) +#ifdef CONFIG_HUGETLB_PAGE + +#define HPAGE_SHIFT 24 +#define HPAGE_SIZE ((1UL) << HPAGE_SHIFT) +#define HPAGE_MASK (~(HPAGE_SIZE - 1)) +#define HUGETLB_PAGE_ORDER (HPAGE_SHIFT - PAGE_SHIFT) + +/* For 64-bit processes the hugepage range is 1T-1.5T */ +#define TASK_HPAGE_BASE (0x0000010000000000UL) +#define TASK_HPAGE_END (0x0000018000000000UL) +/* For 32-bit processes the hugepage range is 2-3G */ +#define TASK_HPAGE_BASE_32 (0x80000000UL) +#define TASK_HPAGE_END_32 (0xc0000000UL) + +#define ARCH_HAS_HUGEPAGE_ONLY_RANGE +#define is_hugepage_only_range(addr, len) \ + ( ((addr > (TASK_HPAGE_BASE-len)) && (addr < TASK_HPAGE_END)) || \ + ((current->mm->context & CONTEXT_LOW_HPAGES) && \ + (addr > (TASK_HPAGE_BASE_32-len)) && (addr < TASK_HPAGE_END_32)) ) +#define HAVE_ARCH_HUGETLB_UNMAPPED_AREA + +#define in_hugepage_area(context, addr) \ + ((cur_cpu_spec->cpu_features & CPU_FTR_16M_PAGE) && \ + ((((addr) >= TASK_HPAGE_BASE) && ((addr) < TASK_HPAGE_END)) || \ + (((context) & CONTEXT_LOW_HPAGES) && \ + (((addr) >= TASK_HPAGE_BASE_32) && ((addr) < TASK_HPAGE_END_32))))) + +#else /* !CONFIG_HUGETLB_PAGE */ + +#define in_hugepage_area(mm, addr) 0 + +#endif /* !CONFIG_HUGETLB_PAGE */ + #define SID_SHIFT 28 #define SID_MASK 0xfffffffff #define GET_ESID(x) (((x) >> SID_SHIFT) & SID_MASK) diff -prauN linux-2.6.0-test5/include/asm-ppc64/pgalloc.h wli-2.6.0-test5-bk12-25/include/asm-ppc64/pgalloc.h --- linux-2.6.0-test5/include/asm-ppc64/pgalloc.h 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc64/pgalloc.h 2003-09-25 20:03:31.000000000 -0700 @@ -26,10 +26,10 @@ pgd_free(pgd_t *pgd) free_page((unsigned long)pgd); } -#define pgd_populate(MM, PGD, PMD) pgd_set(PGD, PMD) +#define pgd_populate(MM, PGD, PMD) pgd_set(PGD, page_address(PMD)) static inline pmd_t * -pmd_alloc_one(struct mm_struct *mm, unsigned long addr) +pmd_alloc_one_kernel(struct mm_struct *mm, unsigned long addr) { pmd_t *pmd; @@ -39,10 +39,19 @@ pmd_alloc_one(struct mm_struct *mm, unsi return pmd; } +static inline struct page *pmd_alloc_one(struct mm_struct *mm, unsigned long addr) +{ + pmd_t *pmd = pmd_alloc_one_kernel(mm, addr); + if (pmd) + return virt_to_page(pmd); + else + return NULL; +} + static inline void -pmd_free(pmd_t *pmd) +pmd_free(struct page *pmd) { - free_page((unsigned long)pmd); + __free_page(pmd); } #define __pmd_free_tlb(tlb, pmd) pmd_free(pmd) diff -prauN linux-2.6.0-test5/include/asm-ppc64/pgtable.h wli-2.6.0-test5-bk12-25/include/asm-ppc64/pgtable.h --- linux-2.6.0-test5/include/asm-ppc64/pgtable.h 2003-09-08 12:50:32.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc64/pgtable.h 2003-09-25 20:03:31.000000000 -0700 @@ -149,6 +149,25 @@ extern unsigned long empty_zero_page[PAG /* shift to put page number into pte */ #define PTE_SHIFT (16) +/* We allow 2^41 bytes of real memory, so we need 29 bits in the PMD + * to give the PTE page number. The bottom two bits are for flags. */ +#define PMD_TO_PTEPAGE_SHIFT (2) + +#ifdef CONFIG_HUGETLB_PAGE +#define _PMD_HUGEPAGE 0x00000001U +#define HUGEPTE_BATCH_SIZE (1<<(HPAGE_SHIFT-PMD_SHIFT)) + +int hash_huge_page(struct mm_struct *mm, unsigned long access, + unsigned long ea, unsigned long vsid, int local); + +#define HAVE_ARCH_UNMAPPED_AREA +#else + +#define hash_huge_page(mm,a,ea,vsid,local) -1 +#define _PMD_HUGEPAGE 0 + +#endif + #ifndef __ASSEMBLY__ /* @@ -178,19 +197,24 @@ extern unsigned long empty_zero_page[PAG #define pte_pfn(x) ((unsigned long)((pte_val(x) >> PTE_SHIFT))) #define pte_page(x) pfn_to_page(pte_pfn(x)) -#define pmd_set(pmdp, ptep) (pmd_val(*(pmdp)) = (__ba_to_bpn(ptep))) +#define pmd_set(pmdp, ptep) \ + (pmd_val(*(pmdp)) = (__ba_to_bpn(ptep) << PMD_TO_PTEPAGE_SHIFT)) #define pmd_none(pmd) (!pmd_val(pmd)) -#define pmd_bad(pmd) ((pmd_val(pmd)) == 0) -#define pmd_present(pmd) ((pmd_val(pmd)) != 0) +#define pmd_hugepage(pmd) (!!(pmd_val(pmd) & _PMD_HUGEPAGE)) +#define pmd_bad(pmd) (((pmd_val(pmd)) == 0) || pmd_hugepage(pmd)) +#define pmd_present(pmd) ((!pmd_hugepage(pmd)) \ + && (pmd_val(pmd) & ~_PMD_HUGEPAGE) != 0) #define pmd_clear(pmdp) (pmd_val(*(pmdp)) = 0) -#define pmd_page_kernel(pmd) (__bpn_to_ba(pmd_val(pmd))) +#define pmd_page_kernel(pmd) \ + (__bpn_to_ba(pmd_val(pmd) >> PMD_TO_PTEPAGE_SHIFT)) #define pmd_page(pmd) virt_to_page(pmd_page_kernel(pmd)) #define pgd_set(pgdp, pmdp) (pgd_val(*(pgdp)) = (__ba_to_bpn(pmdp))) #define pgd_none(pgd) (!pgd_val(pgd)) #define pgd_bad(pgd) ((pgd_val(pgd)) == 0) #define pgd_present(pgd) (pgd_val(pgd) != 0UL) #define pgd_clear(pgdp) (pgd_val(*(pgdp)) = 0UL) -#define pgd_page(pgd) (__bpn_to_ba(pgd_val(pgd))) +#define __pgd_page(pgd) (__bpn_to_ba(pgd_val(pgd))) +#define pgd_page(pgd) virt_to_page(__pgd_page(pgd)) /* * Find an entry in a page-table-directory. We combine the address region @@ -203,12 +227,18 @@ extern unsigned long empty_zero_page[PAG /* Find an entry in the second-level page table.. */ #define pmd_offset(dir,addr) \ - ((pmd_t *) pgd_page(*(dir)) + (((addr) >> PMD_SHIFT) & (PTRS_PER_PMD - 1))) + ((pmd_t *)__pgd_page(*(dir)) + (((addr) >> PMD_SHIFT) & (PTRS_PER_PMD - 1))) /* Find an entry in the third-level page table.. */ #define pte_offset_kernel(dir,addr) \ ((pte_t *) pmd_page_kernel(*(dir)) + (((addr) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))) +#define pmd_offset_kernel(pgd, addr) pmd_offset(pgd, addr) +#define pmd_offset_map(pgd, addr) pmd_offset(pgd, addr) +#define pmd_offset_map_nested(pgd, addr) pmd_offset(pgd, addr) +#define pmd_unmap(pmd) do { } while (0) +#define pmd_unmap_nested(pmd) do { } while (0) + #define pte_offset_map(dir,addr) pte_offset_kernel((dir), (addr)) #define pte_offset_map_nested(dir,addr) pte_offset_kernel((dir), (addr)) #define pte_unmap(pte) do { } while(0) diff -prauN linux-2.6.0-test5/include/asm-ppc64/posix_types.h wli-2.6.0-test5-bk12-25/include/asm-ppc64/posix_types.h --- linux-2.6.0-test5/include/asm-ppc64/posix_types.h 2003-09-08 12:50:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc64/posix_types.h 2003-09-25 19:16:13.000000000 -0700 @@ -12,7 +12,6 @@ * 2 of the License, or (at your option) any later version. */ -typedef unsigned long __kernel_dev_t; typedef unsigned long __kernel_ino_t; typedef unsigned long __kernel_nlink_t; typedef unsigned int __kernel_mode_t; diff -prauN linux-2.6.0-test5/include/asm-ppc64/processor.h wli-2.6.0-test5-bk12-25/include/asm-ppc64/processor.h --- linux-2.6.0-test5/include/asm-ppc64/processor.h 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc64/processor.h 2003-09-25 19:16:13.000000000 -0700 @@ -612,8 +612,6 @@ extern long kernel_thread(int (*fn)(void /* * Bus types */ -#define EISA_bus 0 -#define EISA_bus__is_a_macro /* for versions in ksyms.c */ #define MCA_bus 0 #define MCA_bus__is_a_macro /* for versions in ksyms.c */ diff -prauN linux-2.6.0-test5/include/asm-ppc64/prom.h wli-2.6.0-test5-bk12-25/include/asm-ppc64/prom.h --- linux-2.6.0-test5/include/asm-ppc64/prom.h 2003-09-08 12:50:43.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc64/prom.h 2003-09-25 19:16:13.000000000 -0700 @@ -183,8 +183,6 @@ extern struct device_node *find_type_dev extern struct device_node *find_path_device(const char *path); extern struct device_node *find_compatible_devices(const char *type, const char *compat); -extern struct device_node *find_pci_device_OFnode(unsigned char bus, - unsigned char dev_fn); extern struct device_node *find_all_nodes(void); extern int device_is_compatible(struct device_node *device, const char *); extern int machine_is_compatible(const char *compat); diff -prauN linux-2.6.0-test5/include/asm-ppc64/rtas.h wli-2.6.0-test5-bk12-25/include/asm-ppc64/rtas.h --- linux-2.6.0-test5/include/asm-ppc64/rtas.h 2003-09-08 12:50:40.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc64/rtas.h 2003-09-25 19:16:13.000000000 -0700 @@ -166,6 +166,13 @@ extern void rtas_restart(char *cmd); extern void rtas_power_off(void); extern void rtas_halt(void); +/* Given an RTAS status code of 9900..9905 compute the hinted delay */ +unsigned int rtas_extended_busy_delay_time(int status); +static inline int rtas_is_extended_busy(int status) +{ + return status >= 9900 && status <= 9909; +} + /* Some RTAS ops require a data buffer and that buffer must be < 4G. * Rather than having a memory allocator, just use this buffer * (get the lock first), make the RTAS call. Copy the data instead diff -prauN linux-2.6.0-test5/include/asm-ppc64/rwsem.h wli-2.6.0-test5-bk12-25/include/asm-ppc64/rwsem.h --- linux-2.6.0-test5/include/asm-ppc64/rwsem.h 2003-09-08 12:50:33.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc64/rwsem.h 2003-09-25 19:16:13.000000000 -0700 @@ -1,5 +1,5 @@ /* - * include/asm-ppc/rwsem.h: R/W semaphores for PPC using the stuff + * include/asm-ppc64/rwsem.h: R/W semaphores for PPC using the stuff * in lib/rwsem.c. Adapted largely from include/asm-i386/rwsem.h * by Paul Mackerras . * @@ -74,9 +74,7 @@ static inline void init_rwsem(struct rw_ */ static inline void __down_read(struct rw_semaphore *sem) { - if (atomic_inc_return((atomic_t *)(&sem->count)) > 0) - smp_wmb(); - else + if (unlikely(atomic_inc_return((atomic_t *)(&sem->count)) <= 0)) rwsem_down_read_failed(sem); } @@ -87,7 +85,6 @@ static inline int __down_read_trylock(st while ((tmp = sem->count) >= 0) { if (tmp == cmpxchg(&sem->count, tmp, tmp + RWSEM_ACTIVE_READ_BIAS)) { - smp_wmb(); return 1; } } @@ -103,9 +100,7 @@ static inline void __down_write(struct r tmp = atomic_add_return(RWSEM_ACTIVE_WRITE_BIAS, (atomic_t *)(&sem->count)); - if (tmp == RWSEM_ACTIVE_WRITE_BIAS) - smp_wmb(); - else + if (unlikely(tmp != RWSEM_ACTIVE_WRITE_BIAS)) rwsem_down_write_failed(sem); } @@ -115,7 +110,6 @@ static inline int __down_write_trylock(s tmp = cmpxchg(&sem->count, RWSEM_UNLOCKED_VALUE, RWSEM_ACTIVE_WRITE_BIAS); - smp_wmb(); return tmp == RWSEM_UNLOCKED_VALUE; } @@ -126,9 +120,8 @@ static inline void __up_read(struct rw_s { int tmp; - smp_wmb(); tmp = atomic_dec_return((atomic_t *)(&sem->count)); - if (tmp < -1 && (tmp & RWSEM_ACTIVE_MASK) == 0) + if (unlikely(tmp < -1 && (tmp & RWSEM_ACTIVE_MASK) == 0)) rwsem_wake(sem); } @@ -137,9 +130,8 @@ static inline void __up_read(struct rw_s */ static inline void __up_write(struct rw_semaphore *sem) { - smp_wmb(); - if (atomic_sub_return(RWSEM_ACTIVE_WRITE_BIAS, - (atomic_t *)(&sem->count)) < 0) + if (unlikely(atomic_sub_return(RWSEM_ACTIVE_WRITE_BIAS, + (atomic_t *)(&sem->count)) < 0)) rwsem_wake(sem); } @@ -158,7 +150,6 @@ static inline void __downgrade_write(str { int tmp; - smp_wmb(); tmp = atomic_add_return(-RWSEM_WAITING_BIAS, (atomic_t *)(&sem->count)); if (tmp < 0) rwsem_downgrade_wake(sem); @@ -169,7 +160,6 @@ static inline void __downgrade_write(str */ static inline int rwsem_atomic_update(int delta, struct rw_semaphore *sem) { - smp_mb(); return atomic_add_return(delta, (atomic_t *)(&sem->count)); } diff -prauN linux-2.6.0-test5/include/asm-ppc64/semaphore.h wli-2.6.0-test5-bk12-25/include/asm-ppc64/semaphore.h --- linux-2.6.0-test5/include/asm-ppc64/semaphore.h 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc64/semaphore.h 2003-09-25 19:16:13.000000000 -0700 @@ -82,9 +82,8 @@ static inline void down(struct semaphore /* * Try to get the semaphore, take the slow path if we fail. */ - if (atomic_dec_return(&sem->count) < 0) + if (unlikely(atomic_dec_return(&sem->count) < 0)) __down(sem); - smp_wmb(); } static inline int down_interruptible(struct semaphore * sem) @@ -96,23 +95,18 @@ static inline int down_interruptible(str #endif might_sleep(); - if (atomic_dec_return(&sem->count) < 0) + if (unlikely(atomic_dec_return(&sem->count) < 0)) ret = __down_interruptible(sem); - smp_wmb(); return ret; } static inline int down_trylock(struct semaphore * sem) { - int ret; - #ifdef WAITQUEUE_DEBUG CHECK_MAGIC(sem->__magic); #endif - ret = atomic_dec_if_positive(&sem->count) < 0; - smp_wmb(); - return ret; + return atomic_dec_if_positive(&sem->count) < 0; } static inline void up(struct semaphore * sem) @@ -121,8 +115,7 @@ static inline void up(struct semaphore * CHECK_MAGIC(sem->__magic); #endif - smp_wmb(); - if (atomic_inc_return(&sem->count) <= 0) + if (unlikely(atomic_inc_return(&sem->count) <= 0)) __up(sem); } diff -prauN linux-2.6.0-test5/include/asm-ppc64/serial.h wli-2.6.0-test5-bk12-25/include/asm-ppc64/serial.h --- linux-2.6.0-test5/include/asm-ppc64/serial.h 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc64/serial.h 2003-09-25 19:16:13.000000000 -0700 @@ -26,11 +26,9 @@ /* Standard COM flags (except for COM4, because of the 8514 problem) */ #ifdef CONFIG_SERIAL_DETECT_IRQ -#define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST | ASYNC_AUTO_IRQ) -#define STD_COM4_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_AUTO_IRQ) +#define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_AUTO_IRQ) #else -#define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST) -#define STD_COM4_FLAGS ASYNC_BOOT_AUTOCONF +#define STD_COM_FLAGS ASYNC_BOOT_AUTOCONF #endif #ifdef CONFIG_SERIAL_MANY_PORTS @@ -60,8 +58,8 @@ /* UART CLK PORT IRQ FLAGS */ \ { 0, BASE_BAUD, 0x3F8, 4, STD_COM_FLAGS }, /* ttyS0 */ \ { 0, BASE_BAUD, 0x2F8, 3, STD_COM_FLAGS }, /* ttyS1 */ \ - { 0, BASE_BAUD, 0x3E8, 4, STD_COM_FLAGS }, /* ttyS2 */ \ - { 0, BASE_BAUD, 0x2E8, 3, STD_COM4_FLAGS }, /* ttyS3 */ + { 0, BASE_BAUD, 0x890, 0xf, STD_COM_FLAGS }, /* ttyS2 */ \ + { 0, BASE_BAUD, 0x898, 0xe, STD_COM_FLAGS }, /* ttyS3 */ #ifdef CONFIG_SERIAL_MANY_PORTS diff -prauN linux-2.6.0-test5/include/asm-ppc64/signal.h wli-2.6.0-test5-bk12-25/include/asm-ppc64/signal.h --- linux-2.6.0-test5/include/asm-ppc64/signal.h 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc64/signal.h 2003-09-25 19:16:13.000000000 -0700 @@ -57,7 +57,7 @@ typedef struct { /* These should not be considered constants from userland. */ #define SIGRTMIN 32 -#define SIGRTMAX (_NSIG-1) +#define SIGRTMAX _NSIG /* * SA_FLAGS values: diff -prauN linux-2.6.0-test5/include/asm-ppc64/stat.h wli-2.6.0-test5-bk12-25/include/asm-ppc64/stat.h --- linux-2.6.0-test5/include/asm-ppc64/stat.h 2003-09-08 12:50:42.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc64/stat.h 2003-09-25 19:16:13.000000000 -0700 @@ -11,13 +11,13 @@ #include struct stat { - dev_t st_dev; + unsigned long st_dev; ino_t st_ino; nlink_t st_nlink; mode_t st_mode; uid_t st_uid; gid_t st_gid; - dev_t st_rdev; + unsigned long st_rdev; off_t st_size; unsigned long st_blksize; unsigned long st_blocks; diff -prauN linux-2.6.0-test5/include/asm-ppc64/topology.h wli-2.6.0-test5-bk12-25/include/asm-ppc64/topology.h --- linux-2.6.0-test5/include/asm-ppc64/topology.h 2003-09-08 12:50:37.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc64/topology.h 2003-09-25 19:16:13.000000000 -0700 @@ -24,14 +24,16 @@ static inline int cpu_to_node(int cpu) #define parent_node(node) (node) -static inline unsigned long node_to_cpumask(int node) +static inline cpumask_t node_to_cpumask(int node) { return numa_cpumask_lookup_table[node]; } static inline int node_to_first_cpu(int node) { - return __ffs(node_to_cpumask(node)); + cpumask_t tmp; + tmp = node_to_cpumask(node); + return first_cpu(tmp); } #define node_to_memblk(node) (node) diff -prauN linux-2.6.0-test5/include/asm-ppc64/uaccess.h wli-2.6.0-test5-bk12-25/include/asm-ppc64/uaccess.h --- linux-2.6.0-test5/include/asm-ppc64/uaccess.h 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-ppc64/uaccess.h 2003-09-25 19:16:13.000000000 -0700 @@ -132,6 +132,7 @@ extern long __put_user_bad(void); #define __put_user_size(x,ptr,size,retval,errret) \ do { \ + might_sleep(); \ retval = 0; \ switch (size) { \ case 1: __put_user_asm(x,ptr,retval,"stb",errret); break; \ @@ -185,6 +186,7 @@ extern long __get_user_bad(void); #define __get_user_size(x,ptr,size,retval,errret) \ do { \ + might_sleep(); \ retval = 0; \ switch (size) { \ case 1: __get_user_asm(x,ptr,retval,"lbz",errret); break; \ @@ -220,6 +222,7 @@ extern unsigned long __copy_tofrom_user( static inline unsigned long __copy_from_user(void *to, const void __user *from, unsigned long n) { + might_sleep(); if (__builtin_constant_p(n)) { unsigned long ret; @@ -244,6 +247,7 @@ __copy_from_user(void *to, const void __ static inline unsigned long __copy_to_user(void __user *to, const void *from, unsigned long n) { + might_sleep(); if (__builtin_constant_p(n)) { unsigned long ret; @@ -289,6 +293,7 @@ copy_to_user(void *to, const void *from, static inline unsigned long copy_in_user(void *to, const void *from, unsigned long n) { + might_sleep(); if (likely(access_ok(VERIFY_READ, from, n) && access_ok(VERIFY_WRITE, to, n))) n =__copy_tofrom_user(to, from, n); @@ -300,6 +305,7 @@ extern unsigned long __clear_user(void * static inline unsigned long clear_user(void *addr, unsigned long size) { + might_sleep(); if (likely(access_ok(VERIFY_WRITE, addr, size))) size = __clear_user(addr, size); return size; @@ -310,6 +316,7 @@ extern int __strncpy_from_user(char *dst static inline long strncpy_from_user(char *dst, const char *src, long count) { + might_sleep(); if (likely(access_ok(VERIFY_READ, src, 1))) return __strncpy_from_user(dst, src, count); return -EFAULT; @@ -329,6 +336,7 @@ extern int __strnlen_user(const char *st */ static inline int strnlen_user(const char *str, long len) { + might_sleep(); if (likely(access_ok(VERIFY_READ, str, 1))) return __strnlen_user(str, len); return 0; diff -prauN linux-2.6.0-test5/include/asm-s390/pgalloc.h wli-2.6.0-test5-bk12-25/include/asm-s390/pgalloc.h --- linux-2.6.0-test5/include/asm-s390/pgalloc.h 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-s390/pgalloc.h 2003-09-25 20:03:31.000000000 -0700 @@ -61,12 +61,13 @@ static inline void pgd_free(pgd_t *pgd) * We use pmd cache only on s390x, so these are dummy routines. This * code never triggers because the pgd will always be present. */ -#define pmd_alloc_one(mm,address) ({ BUG(); ((pmd_t *)2); }) +#define pmd_alloc_one(mm,address) ({ BUG(); ((struct page *)2); }) +#define pmd_alloc_one_kernel(mm,addr) ({ BUG(); ((pmd_t *)2); }) #define pmd_free(x) do { } while (0) #define __pmd_free_tlb(tlb,x) do { } while (0) #define pgd_populate(mm, pmd, pte) BUG() #else /* __s390x__ */ -static inline pmd_t * pmd_alloc_one(struct mm_struct *mm, unsigned long vmaddr) +static inline pmd_t * pmd_alloc_one_kernel(struct mm_struct *mm, unsigned long vmaddr) { pmd_t *pmd; int i; @@ -79,16 +80,25 @@ static inline pmd_t * pmd_alloc_one(stru return pmd; } -static inline void pmd_free (pmd_t *pmd) +static inline struct page *pmd_alloc_one(struct mm_struct *mm, unsigned long addr) { - free_pages((unsigned long) pmd, 2); + pmd_t *pmd = pmd_alloc_one_kernel(mm, addr); + if (pmd) + return virt_to_page(pmd); + else + return NULL; +} + +static inline void pmd_free(struct page *pmd) +{ + __free_pages(pmd, 2); } #define __pmd_free_tlb(tlb,pmd) pmd_free(pmd) -static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, pmd_t *pmd) +static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, struct page *pmd) { - pgd_val(*pgd) = _PGD_ENTRY | __pa(pmd); + pgd_val(*pgd) = _PGD_ENTRY | __pa(page_address(pmd)); } #endif /* __s390x__ */ diff -prauN linux-2.6.0-test5/include/asm-s390/pgtable.h wli-2.6.0-test5-bk12-25/include/asm-s390/pgtable.h --- linux-2.6.0-test5/include/asm-s390/pgtable.h 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-s390/pgtable.h 2003-09-25 20:03:31.000000000 -0700 @@ -613,6 +613,7 @@ static inline pte_t mk_pte_phys(unsigned /* to find an entry in a page-table-directory */ #define pgd_index(address) ((address >> PGDIR_SHIFT) & (PTRS_PER_PGD-1)) #define pgd_offset(mm, address) ((mm)->pgd+pgd_index(address)) +#define pgd_page(pgd) virt_to_page(pgd_page_kernel(pgd)) /* to find an entry in a kernel page-table-directory */ #define pgd_offset_k(address) pgd_offset(&init_mm, address) @@ -634,6 +635,12 @@ extern inline pmd_t * pmd_offset(pgd_t * #endif /* __s390x__ */ +#define pmd_offset_kernel(pgd, addr) pmd_offset(pgd, addr) +#define pmd_offset_map(pgd, addr) pmd_offset(pgd, addr) +#define pmd_offset_map_nested(pgd, addr) pmd_offset(pgd, addr) +#define pmd_unmap(pmd) do { } while (0) +#define pmd_unmap_nested(pmd) do { } while (0) + /* Find an entry in the third-level page table.. */ #define pte_index(address) (((address) >> PAGE_SHIFT) & (PTRS_PER_PTE-1)) #define pte_offset_kernel(pmd, address) \ diff -prauN linux-2.6.0-test5/include/asm-s390/posix_types.h wli-2.6.0-test5-bk12-25/include/asm-s390/posix_types.h --- linux-2.6.0-test5/include/asm-s390/posix_types.h 2003-09-08 12:49:50.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-s390/posix_types.h 2003-09-25 19:16:13.000000000 -0700 @@ -34,7 +34,6 @@ typedef long long __kernel_loff_t; #ifndef __s390x__ -typedef unsigned short __kernel_dev_t; typedef unsigned long __kernel_ino_t; typedef unsigned short __kernel_mode_t; typedef unsigned short __kernel_nlink_t; @@ -51,7 +50,6 @@ typedef unsigned short __kernel_old_dev_ #else /* __s390x__ */ -typedef unsigned int __kernel_dev_t; typedef unsigned int __kernel_ino_t; typedef unsigned int __kernel_mode_t; typedef unsigned int __kernel_nlink_t; diff -prauN linux-2.6.0-test5/include/asm-s390/signal.h wli-2.6.0-test5-bk12-25/include/asm-s390/signal.h --- linux-2.6.0-test5/include/asm-s390/signal.h 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-s390/signal.h 2003-09-25 19:16:13.000000000 -0700 @@ -78,7 +78,7 @@ typedef unsigned long sigset_t; /* These should not be considered constants from userland. */ #define SIGRTMIN 32 -#define SIGRTMAX (_NSIG-1) +#define SIGRTMAX _NSIG /* * SA_FLAGS values: diff -prauN linux-2.6.0-test5/include/asm-sh/pgalloc.h wli-2.6.0-test5-bk12-25/include/asm-sh/pgalloc.h --- linux-2.6.0-test5/include/asm-sh/pgalloc.h 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-sh/pgalloc.h 2003-09-28 23:04:08.000000000 -0700 @@ -94,7 +94,8 @@ static inline void pte_free(struct page * inside the pgd, so has no extra memory associated with it. */ -#define pmd_alloc_one(mm, addr) ({ BUG(); ((pmd_t *)2); }) +#define pmd_alloc_one_kernel(mm, addr) ({ BUG(); ((pmd_t *)2); }) +#define pmd_alloc_one(mm, addr) ({ BUG(); ((struct page *)2); }) #define pmd_free(x) do { } while (0) #define __pmd_free_tlb(tlb,x) do { } while (0) #define pgd_populate(mm, pmd, pte) BUG() @@ -115,8 +116,8 @@ static inline pte_t ptep_get_and_clear(p unsigned long pfn = pte_pfn(pte); if (pfn_valid(pfn)) { page = pfn_to_page(pfn); - if (!page->mapping - || list_empty(&page->mapping->i_mmap_shared)) + if (!page_mapping(page) + || list_empty(&page_mapping(page)->i_mmap_shared)) __clear_bit(PG_mapped, &page->flags); } } diff -prauN linux-2.6.0-test5/include/asm-sh/pgtable-2level.h wli-2.6.0-test5-bk12-25/include/asm-sh/pgtable-2level.h --- linux-2.6.0-test5/include/asm-sh/pgtable-2level.h 2003-09-08 12:50:33.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-sh/pgtable-2level.h 2003-09-25 20:03:31.000000000 -0700 @@ -48,14 +48,21 @@ static inline void pgd_clear (pgd_t * pg #define set_pmd(pmdptr, pmdval) (*(pmdptr) = pmdval) #define set_pgd(pgdptr, pgdval) (*(pgdptr) = pgdval) -#define pgd_page(pgd) \ +#define __pgd_page(pgd) \ ((unsigned long) __va(pgd_val(pgd) & PAGE_MASK)) +#define pgd_page(pgd) virt_to_page(__pgd_page(pgd)) static inline pmd_t * pmd_offset(pgd_t * dir, unsigned long address) { return (pmd_t *) dir; } +#define pmd_offset_kernel(pgd, addr) pmd_offset(pgd, addr) +#define pmd_offset_map(pgd, addr) pmd_offset(pgd, addr) +#define pmd_offset_map_nested(pgd, addr) pmd_offset(pgd, addr) +#define pmd_unmap(pmd) do { } while (0) +#define pmd_unmap_nested(pmd) do { } while (0) + #define pte_pfn(x) ((unsigned long)(((x).pte >> PAGE_SHIFT))) #define pfn_pte(pfn, prot) __pte(((pfn) << PAGE_SHIFT) | pgprot_val(prot)) #define pfn_pmd(pfn, prot) __pmd(((pfn) << PAGE_SHIFT) | pgprot_val(prot)) diff -prauN linux-2.6.0-test5/include/asm-sh/posix_types.h wli-2.6.0-test5-bk12-25/include/asm-sh/posix_types.h --- linux-2.6.0-test5/include/asm-sh/posix_types.h 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-sh/posix_types.h 2003-09-25 19:16:13.000000000 -0700 @@ -7,7 +7,6 @@ * assume GCC is being used. */ -typedef unsigned short __kernel_dev_t; typedef unsigned long __kernel_ino_t; typedef unsigned short __kernel_mode_t; typedef unsigned short __kernel_nlink_t; diff -prauN linux-2.6.0-test5/include/asm-sh/processor.h wli-2.6.0-test5-bk12-25/include/asm-sh/processor.h --- linux-2.6.0-test5/include/asm-sh/processor.h 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-sh/processor.h 2003-09-25 19:16:13.000000000 -0700 @@ -169,8 +169,6 @@ extern int kernel_thread(int (*fn)(void /* * Bus types */ -#define EISA_bus 0 -#define EISA_bus__is_a_macro /* for versions in ksyms.c */ #define MCA_bus 0 #define MCA_bus__is_a_macro /* for versions in ksyms.c */ diff -prauN linux-2.6.0-test5/include/asm-sh/signal.h wli-2.6.0-test5-bk12-25/include/asm-sh/signal.h --- linux-2.6.0-test5/include/asm-sh/signal.h 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-sh/signal.h 2003-09-25 19:16:13.000000000 -0700 @@ -57,7 +57,7 @@ typedef struct { /* These should not be considered constants from userland. */ #define SIGRTMIN 32 -#define SIGRTMAX (_NSIG-1) +#define SIGRTMAX _NSIG /* * SA_FLAGS values: diff -prauN linux-2.6.0-test5/include/asm-sparc/atomic.h wli-2.6.0-test5-bk12-25/include/asm-sparc/atomic.h --- linux-2.6.0-test5/include/asm-sparc/atomic.h 2003-09-08 12:50:09.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-sparc/atomic.h 2003-09-25 19:16:13.000000000 -0700 @@ -33,9 +33,9 @@ typedef struct { volatile int counter; } * 31 8 7 0 */ -#define ATOMIC_INIT(i) { (i << 8) } +#define ATOMIC_INIT(i) { ((i) << 8) } -static __inline__ int atomic_read(atomic_t *v) +static __inline__ int atomic_read(const atomic_t *v) { int ret = v->counter; diff -prauN linux-2.6.0-test5/include/asm-sparc/pgalloc.h wli-2.6.0-test5-bk12-25/include/asm-sparc/pgalloc.h --- linux-2.6.0-test5/include/asm-sparc/pgalloc.h 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-sparc/pgalloc.h 2003-09-25 20:03:31.000000000 -0700 @@ -38,15 +38,24 @@ BTFIXUPDEF_CALL(void, free_pgd_fast, pgd BTFIXUPDEF_CALL(void, pgd_set, pgd_t *, pmd_t *) #define pgd_set(pgdp,pmdp) BTFIXUP_CALL(pgd_set)(pgdp,pmdp) -#define pgd_populate(MM, PGD, PMD) pgd_set(PGD, PMD) +#define pgd_populate(MM, PGD, PMD) pgd_set(PGD, page_address(PMD)) -BTFIXUPDEF_CALL(pmd_t *, pmd_alloc_one, struct mm_struct *, unsigned long) -#define pmd_alloc_one(mm, address) BTFIXUP_CALL(pmd_alloc_one)(mm, address) +BTFIXUPDEF_CALL(pmd_t *, __pmd_alloc_one, struct mm_struct *, unsigned long) +#define pmd_alloc_one_kernel(mm, address) BTFIXUP_CALL(__pmd_alloc_one)(mm, address) + +static inline struct page *pmd_alloc_one(struct mm_struct *mm, unsigned long addr) +{ + pmd_t *pmd = pmd_alloc_one_kernel(mm, addr); + if (pmd) + return virt_to_page(pmd); + else + return NULL; +} BTFIXUPDEF_CALL(void, free_pmd_fast, pmd_t *) #define free_pmd_fast(pmd) BTFIXUP_CALL(free_pmd_fast)(pmd) -#define pmd_free(pmd) free_pmd_fast(pmd) +#define pmd_free(pmd) free_pmd_fast(page_address(pmd)) #define __pmd_free_tlb(tlb, pmd) pmd_free(pmd) BTFIXUPDEF_CALL(void, pmd_populate, pmd_t *, struct page *) diff -prauN linux-2.6.0-test5/include/asm-sparc/pgtable.h wli-2.6.0-test5-bk12-25/include/asm-sparc/pgtable.h --- linux-2.6.0-test5/include/asm-sparc/pgtable.h 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-sparc/pgtable.h 2003-09-25 20:03:31.000000000 -0700 @@ -202,10 +202,11 @@ extern unsigned long empty_zero_page; /* */ BTFIXUPDEF_CALL_CONST(struct page *, pmd_page, pmd_t) -BTFIXUPDEF_CALL_CONST(unsigned long, pgd_page, pgd_t) +BTFIXUPDEF_CALL_CONST(unsigned long, __pgd_page, pgd_t) #define pmd_page(pmd) BTFIXUP_CALL(pmd_page)(pmd) -#define pgd_page(pgd) BTFIXUP_CALL(pgd_page)(pgd) +#define __pgd_page(pgd) BTFIXUP_CALL(__pgd_page)(pgd) +#define pgd_page(pgd) virt_to_page(__pgd_page(pgd)) BTFIXUPDEF_SETHI(none_mask) BTFIXUPDEF_CALL_CONST(int, pte_present, pte_t) @@ -352,6 +353,11 @@ extern __inline__ pte_t pte_modify(pte_t /* Find an entry in the second-level page table.. */ BTFIXUPDEF_CALL(pmd_t *, pmd_offset, pgd_t *, unsigned long) #define pmd_offset(dir,addr) BTFIXUP_CALL(pmd_offset)(dir,addr) +#define pmd_offset_kernel(pgd, addr) pmd_offset(pgd, addr) +#define pmd_offset_map(pgd, addr) pmd_offset(pgd, addr) +#define pmd_offset_map_nested(pgd, addr) pmd_offset(pgd, addr) +#define pmd_unmap(pmd) do { } while (0) +#define pmd_unmap_nested(pmd) do { } while (0) /* Find an entry in the third-level page table.. */ BTFIXUPDEF_CALL(pte_t *, pte_offset_kernel, pmd_t *, unsigned long) diff -prauN linux-2.6.0-test5/include/asm-sparc/posix_types.h wli-2.6.0-test5-bk12-25/include/asm-sparc/posix_types.h --- linux-2.6.0-test5/include/asm-sparc/posix_types.h 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-sparc/posix_types.h 2003-09-25 19:16:13.000000000 -0700 @@ -17,7 +17,6 @@ typedef int __kernel_ typedef unsigned short __kernel_ipc_pid_t; typedef unsigned short __kernel_uid_t; typedef unsigned short __kernel_gid_t; -typedef unsigned short __kernel_dev_t; typedef unsigned long __kernel_ino_t; typedef unsigned short __kernel_mode_t; typedef unsigned short __kernel_umode_t; diff -prauN linux-2.6.0-test5/include/asm-sparc/processor.h wli-2.6.0-test5-bk12-25/include/asm-sparc/processor.h --- linux-2.6.0-test5/include/asm-sparc/processor.h 2003-09-08 12:50:43.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-sparc/processor.h 2003-09-25 19:16:13.000000000 -0700 @@ -27,7 +27,6 @@ /* * Bus types */ -#define EISA_bus 0 #define MCA_bus 0 #define MCA_bus__is_a_macro /* for versions in ksyms.c */ diff -prauN linux-2.6.0-test5/include/asm-sparc/sfp-machine.h wli-2.6.0-test5-bk12-25/include/asm-sparc/sfp-machine.h --- linux-2.6.0-test5/include/asm-sparc/sfp-machine.h 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-sparc/sfp-machine.h 2003-09-25 19:16:13.000000000 -0700 @@ -77,9 +77,9 @@ /* Some assembly to speed things up. */ #define __FP_FRAC_ADD_3(r2,r1,r0,x2,x1,x0,y2,y1,y0) \ - __asm__ ("addcc %r7,%8,%2 - addxcc %r5,%6,%1 - addx %r3,%4,%0" \ + __asm__ ("addcc %r7,%8,%2\n\t" \ + "addxcc %r5,%6,%1\n\t" \ + "addx %r3,%4,%0\n" \ : "=r" ((USItype)(r2)), \ "=&r" ((USItype)(r1)), \ "=&r" ((USItype)(r0)) \ @@ -92,9 +92,9 @@ : "cc") #define __FP_FRAC_SUB_3(r2,r1,r0,x2,x1,x0,y2,y1,y0) \ - __asm__ ("subcc %r7,%8,%2 - subxcc %r5,%6,%1 - subx %r3,%4,%0" \ + __asm__ ("subcc %r7,%8,%2\n\t" \ + "subxcc %r5,%6,%1\n\t" \ + "subx %r3,%4,%0\n" \ : "=r" ((USItype)(r2)), \ "=&r" ((USItype)(r1)), \ "=&r" ((USItype)(r0)) \ @@ -111,11 +111,11 @@ /* We need to fool gcc, as we need to pass more than 10 \ input/outputs. */ \ register USItype _t1 __asm__ ("g1"), _t2 __asm__ ("g2"); \ - __asm__ __volatile__ (" - addcc %r8,%9,%1 - addxcc %r6,%7,%0 - addxcc %r4,%5,%%g2 - addx %r2,%3,%%g1" \ + __asm__ __volatile__ ( \ + "addcc %r8,%9,%1\n\t" \ + "addxcc %r6,%7,%0\n\t" \ + "addxcc %r4,%5,%%g2\n\t" \ + "addx %r2,%3,%%g1\n\t" \ : "=&r" ((USItype)(r1)), \ "=&r" ((USItype)(r0)) \ : "%rJ" ((USItype)(x3)), \ @@ -136,11 +136,11 @@ /* We need to fool gcc, as we need to pass more than 10 \ input/outputs. */ \ register USItype _t1 __asm__ ("g1"), _t2 __asm__ ("g2"); \ - __asm__ __volatile__ (" - subcc %r8,%9,%1 - subxcc %r6,%7,%0 - subxcc %r4,%5,%%g2 - subx %r2,%3,%%g1" \ + __asm__ __volatile__ ( \ + "subcc %r8,%9,%1\n\t" \ + "subxcc %r6,%7,%0\n\t" \ + "subxcc %r4,%5,%%g2\n\t" \ + "subx %r2,%3,%%g1\n\t" \ : "=&r" ((USItype)(r1)), \ "=&r" ((USItype)(r0)) \ : "%rJ" ((USItype)(x3)), \ @@ -161,10 +161,10 @@ #define __FP_FRAC_DEC_4(x3,x2,x1,x0,y3,y2,y1,y0) __FP_FRAC_SUB_4(x3,x2,x1,x0,x3,x2,x1,x0,y3,y2,y1,y0) #define __FP_FRAC_ADDI_4(x3,x2,x1,x0,i) \ - __asm__ ("addcc %3,%4,%3 - addxcc %2,%%g0,%2 - addxcc %1,%%g0,%1 - addx %0,%%g0,%0" \ + __asm__ ("addcc %3,%4,%3\n\t" \ + "addxcc %2,%%g0,%2\n\t" \ + "addxcc %1,%%g0,%1\n\t" \ + "addx %0,%%g0,%0\n\t" \ : "=&r" ((USItype)(x3)), \ "=&r" ((USItype)(x2)), \ "=&r" ((USItype)(x1)), \ diff -prauN linux-2.6.0-test5/include/asm-sparc/signal.h wli-2.6.0-test5-bk12-25/include/asm-sparc/signal.h --- linux-2.6.0-test5/include/asm-sparc/signal.h 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-sparc/signal.h 2003-09-25 19:16:13.000000000 -0700 @@ -89,7 +89,7 @@ #define _NSIG_WORDS (__NEW_NSIG / _NSIG_BPW) #define SIGRTMIN 32 -#define SIGRTMAX (__NEW_NSIG - 1) +#define SIGRTMAX __NEW_NSIG #if defined(__KERNEL__) || defined(__WANT_POSIX1B_SIGNALS__) #define _NSIG __NEW_NSIG diff -prauN linux-2.6.0-test5/include/asm-sparc64/bugs.h wli-2.6.0-test5-bk12-25/include/asm-sparc64/bugs.h --- linux-2.6.0-test5/include/asm-sparc64/bugs.h 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-sparc64/bugs.h 2003-09-25 19:16:13.000000000 -0700 @@ -4,4 +4,13 @@ * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu) */ -static void check_bugs(void) { } +#include + +extern unsigned long loops_per_jiffy; + +static void check_bugs(void) +{ +#ifndef CONFIG_SMP + cpu_data(0).udelay_val = loops_per_jiffy; +#endif +} diff -prauN linux-2.6.0-test5/include/asm-sparc64/delay.h wli-2.6.0-test5-bk12-25/include/asm-sparc64/delay.h --- linux-2.6.0-test5/include/asm-sparc64/delay.h 2003-09-08 12:50:14.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-sparc64/delay.h 2003-09-25 19:16:13.000000000 -0700 @@ -13,12 +13,6 @@ #ifndef __ASSEMBLY__ -#ifdef CONFIG_SMP -#include -#else -extern unsigned long loops_per_jiffy; -#endif - static __inline__ void __delay(unsigned long loops) { __asm__ __volatile__( diff -prauN linux-2.6.0-test5/include/asm-sparc64/pgalloc.h wli-2.6.0-test5-bk12-25/include/asm-sparc64/pgalloc.h --- linux-2.6.0-test5/include/asm-sparc64/pgalloc.h 2003-09-08 12:50:32.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-sparc64/pgalloc.h 2003-09-25 20:03:31.000000000 -0700 @@ -133,7 +133,7 @@ static __inline__ void free_pgd_slow(pgd #define DCACHE_COLOR(address) 0 #endif -#define pgd_populate(MM, PGD, PMD) pgd_set(PGD, PMD) +#define pgd_populate(MM, PGD, PMD) pgd_set(PGD, page_address(PMD)) static __inline__ pmd_t *pmd_alloc_one_fast(struct mm_struct *mm, unsigned long address) { @@ -154,7 +154,7 @@ static __inline__ pmd_t *pmd_alloc_one_f return (pmd_t *)ret; } -static __inline__ pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address) +static __inline__ pmd_t *pmd_alloc_one_kernel(struct mm_struct *mm, unsigned long address) { pmd_t *pmd; @@ -167,6 +167,15 @@ static __inline__ pmd_t *pmd_alloc_one(s return pmd; } +static inline struct page *pmd_alloc_one(struct mm_struct *mm, unsigned long addr) +{ + pmd_t *pmd = pmd_alloc_one_kernel(mm, addr); + if (pmd) + return virt_to_page(pmd); + else + return NULL; +} + static __inline__ void free_pmd_fast(pmd_t *pmd) { unsigned long color = DCACHE_COLOR((unsigned long)pmd); @@ -223,7 +232,7 @@ static __inline__ void free_pte_slow(pte #define pte_free_kernel(pte) free_pte_fast(pte) #define pte_free(pte) free_pte_fast(page_address(pte)) -#define pmd_free(pmd) free_pmd_fast(pmd) +#define pmd_free(pmd) free_pmd_fast(page_address(pmd)) #define pgd_free(pgd) free_pgd_fast(pgd) #define pgd_alloc(mm) get_pgd_fast() diff -prauN linux-2.6.0-test5/include/asm-sparc64/pgtable.h wli-2.6.0-test5-bk12-25/include/asm-sparc64/pgtable.h --- linux-2.6.0-test5/include/asm-sparc64/pgtable.h 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-sparc64/pgtable.h 2003-09-25 20:03:31.000000000 -0700 @@ -228,7 +228,8 @@ static inline pte_t pte_modify(pte_t ori (pgd_val(*(pgdp)) = (__pa((unsigned long) (pmdp)) >> 11UL)) #define __pmd_page(pmd) ((unsigned long) __va((pmd_val(pmd)<<11UL))) #define pmd_page(pmd) virt_to_page((void *)__pmd_page(pmd)) -#define pgd_page(pgd) ((unsigned long) __va((pgd_val(pgd)<<11UL))) +#define __pgd_page(pgd) ((unsigned long) __va((pgd_val(pgd)<<11UL))) +#define pgd_page(pgd) virt_to_page(__pgd_page(pgd)) #define pte_none(pte) (!pte_val(pte)) #define pte_present(pte) (pte_val(pte) & _PAGE_PRESENT) #define pte_clear(pte) (pte_val(*(pte)) = 0UL) @@ -270,8 +271,13 @@ static inline pte_t pte_modify(pte_t ori #define pgd_offset_k(address) pgd_offset(&init_mm, address) /* Find an entry in the second-level page table.. */ -#define pmd_offset(dir, address) ((pmd_t *) pgd_page(*(dir)) + \ +#define pmd_offset(dir, address) ((pmd_t *)__pgd_page(*(dir)) + \ ((address >> PMD_SHIFT) & (REAL_PTRS_PER_PMD-1))) +#define pmd_offset_kernel(pgd, addr) pmd_offset(pgd, addr) +#define pmd_offset_map(pgd, addr) pmd_offset(pgd, addr) +#define pmd_offset_map_nested(pgd, addr) pmd_offset(pgd, addr) +#define pmd_unmap(pmd) do { } while (0) +#define pmd_unmap_nested(pmd) do { } while (0) /* Find an entry in the third-level page table.. */ #define pte_index(dir, address) ((pte_t *) __pmd_page(*(dir)) + \ diff -prauN linux-2.6.0-test5/include/asm-sparc64/posix_types.h wli-2.6.0-test5-bk12-25/include/asm-sparc64/posix_types.h --- linux-2.6.0-test5/include/asm-sparc64/posix_types.h 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-sparc64/posix_types.h 2003-09-25 19:16:13.000000000 -0700 @@ -16,7 +16,6 @@ typedef int __kernel_ typedef int __kernel_ipc_pid_t; typedef unsigned int __kernel_uid_t; typedef unsigned int __kernel_gid_t; -typedef unsigned int __kernel_dev_t; typedef unsigned long __kernel_ino_t; typedef unsigned int __kernel_mode_t; typedef unsigned short __kernel_umode_t; diff -prauN linux-2.6.0-test5/include/asm-sparc64/processor.h wli-2.6.0-test5-bk12-25/include/asm-sparc64/processor.h --- linux-2.6.0-test5/include/asm-sparc64/processor.h 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-sparc64/processor.h 2003-09-25 19:16:13.000000000 -0700 @@ -22,7 +22,6 @@ #include /* Bus types */ -#define EISA_bus 0 #define MCA_bus 0 #define MCA_bus__is_a_macro /* for versions in ksyms.c */ diff -prauN linux-2.6.0-test5/include/asm-sparc64/signal.h wli-2.6.0-test5-bk12-25/include/asm-sparc64/signal.h --- linux-2.6.0-test5/include/asm-sparc64/signal.h 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-sparc64/signal.h 2003-09-25 19:16:13.000000000 -0700 @@ -89,7 +89,7 @@ #define _NSIG_WORDS (__NEW_NSIG / _NSIG_BPW) #define SIGRTMIN 32 -#define SIGRTMAX (__NEW_NSIG - 1) +#define SIGRTMAX __NEW_NSIG #if defined(__KERNEL__) || defined(__WANT_POSIX1B_SIGNALS__) #define _NSIG __NEW_NSIG diff -prauN linux-2.6.0-test5/include/asm-sparc64/stat.h wli-2.6.0-test5-bk12-25/include/asm-sparc64/stat.h --- linux-2.6.0-test5/include/asm-sparc64/stat.h 2003-09-08 12:50:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-sparc64/stat.h 2003-09-25 19:16:13.000000000 -0700 @@ -5,13 +5,13 @@ #include struct stat { - dev_t st_dev; + unsigned st_dev; ino_t st_ino; mode_t st_mode; short st_nlink; uid_t st_uid; gid_t st_gid; - dev_t st_rdev; + unsigned st_rdev; off_t st_size; time_t st_atime; time_t st_mtime; diff -prauN linux-2.6.0-test5/include/asm-sparc64/vga.h wli-2.6.0-test5-bk12-25/include/asm-sparc64/vga.h --- linux-2.6.0-test5/include/asm-sparc64/vga.h 2003-09-08 12:49:56.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-sparc64/vga.h 2003-09-25 19:16:13.000000000 -0700 @@ -13,18 +13,16 @@ static inline void scr_writew(u16 val, u16 *addr) { - if ((long) addr < 0) - *addr = val; - else - writew(val, (unsigned long) addr); + BUG_ON((long) addr >= 0); + + *addr = val; } static inline u16 scr_readw(const u16 *addr) { - if ((long) addr < 0) - return *addr; - else - return readw((unsigned long) addr); + BUG_ON((long) addr >= 0); + + return *addr; } #define VGA_MAP_MEM(x) (x) diff -prauN linux-2.6.0-test5/include/asm-um/pgalloc.h wli-2.6.0-test5-bk12-25/include/asm-um/pgalloc.h --- linux-2.6.0-test5/include/asm-um/pgalloc.h 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-um/pgalloc.h 2003-09-25 20:03:31.000000000 -0700 @@ -42,7 +42,8 @@ static inline void pte_free(struct page * inside the pgd, so has no extra memory associated with it. */ -#define pmd_alloc_one(mm, addr) ({ BUG(); ((pmd_t *)2); }) +#define pmd_alloc_one(mm, addr) ({ BUG(); ((struct page *)2); }) +#define pmd_alloc_one_kernel(mm, addr) ({ BUG(); ((pmd_t *)2); }) #define pmd_free(x) do { } while (0) #define __pmd_free_tlb(tlb,x) do { } while (0) #define pgd_populate(mm, pmd, pte) BUG() diff -prauN linux-2.6.0-test5/include/asm-um/pgtable.h wli-2.6.0-test5-bk12-25/include/asm-um/pgtable.h --- linux-2.6.0-test5/include/asm-um/pgtable.h 2003-09-08 12:51:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-um/pgtable.h 2003-09-25 20:03:31.000000000 -0700 @@ -374,6 +374,12 @@ static inline pmd_t * pmd_offset(pgd_t * return (pmd_t *) dir; } +#define pmd_offset_kernel(pgd, addr) pmd_offset(pgd, addr) +#define pmd_offset_map(pgd, addr) pmd_offset(pgd, addr) +#define pmd_offset_map_nested(pgd, addr) pmd_offset(pgd, addr) +#define pmd_unmap(pgd, addr) do { } while (0) +#define pmd_unmap_nested(pgd, addr) do { } while (0) + /* Find an entry in the third-level page table.. */ #define pte_index(address) (((address) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)) #define pte_offset_kernel(dir, address) \ diff -prauN linux-2.6.0-test5/include/asm-v850/pgtable.h wli-2.6.0-test5-bk12-25/include/asm-v850/pgtable.h --- linux-2.6.0-test5/include/asm-v850/pgtable.h 2003-09-08 12:50:16.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-v850/pgtable.h 2003-09-25 20:03:31.000000000 -0700 @@ -13,6 +13,11 @@ typedef pte_t *pte_addr_t; #define pgd_clear(pgdp) ((void)0) #define pmd_offset(a, b) ((void *)0) +#define pmd_offset_kernel(pgd, addr) pmd_offset(pgd, addr) +#define pmd_offset_map(pgd, addr) pmd_offset(pgd, addr) +#define pmd_offset_map_nested(pgd, addr) pmd_offset(pgd, addr) +#define pmd_unmap(pmd) do { } while (0) +#define pmd_unmap_nested(pmd) do { } while (0) #define kern_addr_valid(addr) (1) diff -prauN linux-2.6.0-test5/include/asm-v850/posix_types.h wli-2.6.0-test5-bk12-25/include/asm-v850/posix_types.h --- linux-2.6.0-test5/include/asm-v850/posix_types.h 2003-09-08 12:50:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-v850/posix_types.h 2003-09-25 19:16:13.000000000 -0700 @@ -14,7 +14,6 @@ #ifndef __V850_POSIX_TYPES_H__ #define __V850_POSIX_TYPES_H__ -typedef unsigned int __kernel_dev_t; typedef unsigned long __kernel_ino_t; typedef unsigned long long __kernel_ino64_t; typedef unsigned int __kernel_mode_t; diff -prauN linux-2.6.0-test5/include/asm-v850/processor.h wli-2.6.0-test5-bk12-25/include/asm-v850/processor.h --- linux-2.6.0-test5/include/asm-v850/processor.h 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-v850/processor.h 2003-09-25 19:16:13.000000000 -0700 @@ -52,8 +52,6 @@ /* * Bus types */ -#define EISA_bus 0 -#define EISA_bus__is_a_macro /* for versions in ksyms.c */ #define MCA_bus 0 #define MCA_bus__is_a_macro /* for versions in ksyms.c */ diff -prauN linux-2.6.0-test5/include/asm-v850/signal.h wli-2.6.0-test5-bk12-25/include/asm-v850/signal.h --- linux-2.6.0-test5/include/asm-v850/signal.h 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-v850/signal.h 2003-09-25 19:16:13.000000000 -0700 @@ -71,7 +71,7 @@ typedef unsigned long sigset_t; /* These should not be considered constants from userland. */ #define SIGRTMIN 32 -#define SIGRTMAX (_NSIG-1) +#define SIGRTMAX _NSIG /* * SA_FLAGS values: diff -prauN linux-2.6.0-test5/include/asm-x86_64/desc.h wli-2.6.0-test5-bk12-25/include/asm-x86_64/desc.h --- linux-2.6.0-test5/include/asm-x86_64/desc.h 2003-09-08 12:50:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-x86_64/desc.h 2003-09-25 19:16:13.000000000 -0700 @@ -149,6 +149,8 @@ static inline void set_seg_base(unsigned #define LDT_entry_a(info) \ ((((info)->base_addr & 0x0000ffff) << 16) | ((info)->limit & 0x0ffff)) +/* Don't allow setting of the lm bit. It is useless anyways because + 64bit system calls require __USER_CS. */ #define LDT_entry_b(info) \ (((info)->base_addr & 0xff000000) | \ (((info)->base_addr & 0x00ff0000) >> 16) | \ @@ -159,7 +161,7 @@ static inline void set_seg_base(unsigned ((info)->seg_32bit << 22) | \ ((info)->limit_in_pages << 23) | \ ((info)->useable << 20) | \ - ((info)->lm << 21) | \ + /* ((info)->lm << 21) | */ \ 0x7000) #define LDT_empty(info) (\ diff -prauN linux-2.6.0-test5/include/asm-x86_64/dwarf2.h wli-2.6.0-test5-bk12-25/include/asm-x86_64/dwarf2.h --- linux-2.6.0-test5/include/asm-x86_64/dwarf2.h 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/include/asm-x86_64/dwarf2.h 2003-09-25 19:16:13.000000000 -0700 @@ -0,0 +1,50 @@ +#ifndef _DWARF2_H +#define _DWARF2_H 1 + +#include + +#ifndef __ASSEMBLY__ +#warning "asm/dwarf2.h should be only included in pure assembly files" +#endif + +/* + Macros for dwarf2 CFI unwind table entries. + See "as.info" for details on these pseudo ops. Unfortunately + they are only supported in very new binutils, so define them + away for older version. + */ + +#ifdef CONFIG_CFI_BINUTILS + +#define CFI_STARTPROC .cfi_startproc +#define CFI_ENDPROC .cfi_endproc +#define CFI_DEF_CFA .cfi_def_cfa +#define CFI_DEF_CFA_REGISTER .cfi_def_cfa_register +#define CFI_DEF_CFA_OFFSET .cfi_def_cfa_offset +#define CFI_ADJUST_CFA_OFFSET .cfi_adjust_cfa_offset +#define CFI_OFFSET .cfi_offset +#define CFI_REL_OFFSET .cfi_rel_offset + +#else + +#ifdef __ASSEMBLY__ + .macro nothing + .endm + .macro nothing1 a + .endm + .macro nothing2 a,b + .endm +#endif + +#define CFI_STARTPROC nothing +#define CFI_ENDPROC nothing +#define CFI_DEF_CFA nothing2 +#define CFI_DEF_CFA_REGISTER nothing1 +#define CFI_DEF_CFA_OFFSET nothing1 +#define CFI_ADJUST_CFA_OFFSET nothing1 +#define CFI_OFFSET nothing2 +#define CFI_REL_OFFSET nothing2 + +#endif + +#endif diff -prauN linux-2.6.0-test5/include/asm-x86_64/kdebug.h wli-2.6.0-test5-bk12-25/include/asm-x86_64/kdebug.h --- linux-2.6.0-test5/include/asm-x86_64/kdebug.h 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-x86_64/kdebug.h 2003-09-25 19:16:13.000000000 -0700 @@ -39,6 +39,12 @@ static inline int notify_die(enum die_va return notifier_call_chain(&die_chain, val, &args); } -int printk_address(unsigned long address); +extern int printk_address(unsigned long address); +extern void die(const char *,struct pt_regs *,long); +extern void __die(const char *,struct pt_regs *,long); +extern void show_registers(struct pt_regs *regs); +extern void dump_pagetable(unsigned long); +extern void oops_begin(void); +extern void oops_end(void); #endif diff -prauN linux-2.6.0-test5/include/asm-x86_64/pgalloc.h wli-2.6.0-test5-bk12-25/include/asm-x86_64/pgalloc.h --- linux-2.6.0-test5/include/asm-x86_64/pgalloc.h 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-x86_64/pgalloc.h 2003-09-25 20:03:31.000000000 -0700 @@ -10,7 +10,7 @@ #define pmd_populate_kernel(mm, pmd, pte) \ set_pmd(pmd, __pmd(_PAGE_TABLE | __pa(pte))) #define pgd_populate(mm, pgd, pmd) \ - set_pgd(pgd, __pgd(_PAGE_TABLE | __pa(pmd))) + set_pgd(pgd, __pgd(_PAGE_TABLE | __pa(page_address(pmd)))) static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, struct page *pte) { @@ -22,18 +22,25 @@ extern __inline__ pmd_t *get_pmd(void) return (pmd_t *)get_zeroed_page(GFP_KERNEL); } -extern __inline__ void pmd_free(pmd_t *pmd) +extern __inline__ void pmd_free(struct page *pmd) { - if ((unsigned long)pmd & (PAGE_SIZE-1)) - BUG(); - free_page((unsigned long)pmd); + __free_page(pmd); } -static inline pmd_t *pmd_alloc_one (struct mm_struct *mm, unsigned long addr) +static inline pmd_t *pmd_alloc_one_kernel(struct mm_struct *mm, unsigned long addr) { return (pmd_t *)get_zeroed_page(GFP_KERNEL|__GFP_REPEAT); } +static inline struct page *pmd_alloc_one(struct mm_struct *mm, unsigned long addr) +{ + pmd_t *pmd = pmd_alloc_one_kernel(mm, addr); + if (pmd) + return virt_to_page(pmd); + else + return NULL; +} + static inline pgd_t *pgd_alloc (struct mm_struct *mm) { return (pgd_t *)get_zeroed_page(GFP_KERNEL|__GFP_REPEAT); diff -prauN linux-2.6.0-test5/include/asm-x86_64/pgtable.h wli-2.6.0-test5-bk12-25/include/asm-x86_64/pgtable.h --- linux-2.6.0-test5/include/asm-x86_64/pgtable.h 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-x86_64/pgtable.h 2003-09-25 20:03:31.000000000 -0700 @@ -98,8 +98,9 @@ static inline void set_pml4(pml4_t *dst, pml4_val(*dst) = pml4_val(val); } -#define pgd_page(pgd) \ +#define __pgd_page(pgd) \ ((unsigned long) __va(pgd_val(pgd) & PHYSICAL_PAGE_MASK)) +#define pgd_page(pgd) virt_to_page(__pgd_page(pgd)) #define ptep_get_and_clear(xp) __pte(xchg(&(xp)->pte, 0)) #define pte_same(a, b) ((a).pte == (b).pte) @@ -332,8 +333,13 @@ static inline pgd_t *current_pgd_offset_ #define pmd_page(pmd) (pfn_to_page(pmd_val(pmd) >> PAGE_SHIFT)) #define pmd_index(address) (((address) >> PMD_SHIFT) & (PTRS_PER_PMD-1)) -#define pmd_offset(dir, address) ((pmd_t *) pgd_page(*(dir)) + \ +#define pmd_offset(dir, address) ((pmd_t *)__pgd_page(*(dir)) + \ pmd_index(address)) +#define pmd_offset_kernel(pgd, addr) pmd_offset(pgd, addr) +#define pmd_offset_map(pgd, addr) pmd_offset(pgd, addr) +#define pmd_offset_map_nested(pgd, addr) pmd_offset(pgd, addr) +#define pmd_unmap(pmd) do { } while (0) +#define pmd_unmap_nested(pmd) do { } while (0) #define pmd_none(x) (!pmd_val(x)) #define pmd_present(x) (pmd_val(x) & _PAGE_PRESENT) #define pmd_clear(xp) do { set_pmd(xp, __pmd(0)); } while (0) diff -prauN linux-2.6.0-test5/include/asm-x86_64/posix_types.h wli-2.6.0-test5-bk12-25/include/asm-x86_64/posix_types.h --- linux-2.6.0-test5/include/asm-x86_64/posix_types.h 2003-09-08 12:50:40.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-x86_64/posix_types.h 2003-09-25 19:16:13.000000000 -0700 @@ -7,7 +7,6 @@ * assume GCC is being used. */ -typedef unsigned long __kernel_dev_t; typedef unsigned long __kernel_ino_t; typedef unsigned int __kernel_mode_t; typedef unsigned long __kernel_nlink_t; diff -prauN linux-2.6.0-test5/include/asm-x86_64/processor.h wli-2.6.0-test5-bk12-25/include/asm-x86_64/processor.h --- linux-2.6.0-test5/include/asm-x86_64/processor.h 2003-09-08 12:50:38.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-x86_64/processor.h 2003-09-25 19:16:13.000000000 -0700 @@ -160,7 +160,6 @@ static inline void clear_in_cr4 (unsigne /* * Bus types */ -#define EISA_bus 0 #define MCA_bus 0 #define MCA_bus__is_a_macro diff -prauN linux-2.6.0-test5/include/asm-x86_64/siginfo.h wli-2.6.0-test5-bk12-25/include/asm-x86_64/siginfo.h --- linux-2.6.0-test5/include/asm-x86_64/siginfo.h 2003-09-08 12:51:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-x86_64/siginfo.h 2003-09-25 19:16:13.000000000 -0700 @@ -5,6 +5,8 @@ #define __ARCH_SI_BAND_T long +#define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE/sizeof(int)) - 4) + #include #endif diff -prauN linux-2.6.0-test5/include/asm-x86_64/signal.h wli-2.6.0-test5-bk12-25/include/asm-x86_64/signal.h --- linux-2.6.0-test5/include/asm-x86_64/signal.h 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-x86_64/signal.h 2003-09-25 19:16:13.000000000 -0700 @@ -77,7 +77,7 @@ typedef unsigned long sigset_t; /* These should not be considered constants from userland. */ #define SIGRTMIN 32 -#define SIGRTMAX (_NSIG-1) +#define SIGRTMAX _NSIG /* * SA_FLAGS values: diff -prauN linux-2.6.0-test5/include/asm-x86_64/uaccess.h wli-2.6.0-test5-bk12-25/include/asm-x86_64/uaccess.h --- linux-2.6.0-test5/include/asm-x86_64/uaccess.h 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/asm-x86_64/uaccess.h 2003-09-25 19:16:13.000000000 -0700 @@ -147,7 +147,7 @@ extern void __put_user_bad(void); ({ \ int __pu_err = -EFAULT; \ __typeof__(*(ptr)) *__pu_addr = (ptr); \ - if (access_ok(VERIFY_WRITE,__pu_addr,size)) \ + if (likely(access_ok(VERIFY_WRITE,__pu_addr,size))) \ __put_user_size((x),__pu_addr,(size),__pu_err); \ __pu_err; \ }) @@ -255,12 +255,12 @@ static inline int __copy_from_user(void return ret; case 10: __get_user_asm(*(u64*)dst,(u64*)src,ret,"q","","=r",16); - if (ret) return ret; + if (unlikely(ret)) return ret; __get_user_asm(*(u16*)(8+(char*)dst),(u16*)(8+(char*)src),ret,"w","w","=r",2); return ret; case 16: __get_user_asm(*(u64*)dst,(u64*)src,ret,"q","","=r",16); - if (ret) return ret; + if (unlikely(ret)) return ret; __get_user_asm(*(u64*)(8+(char*)dst),(u64*)(8+(char*)src),ret,"q","","=r",8); return ret; default: @@ -284,13 +284,13 @@ static inline int __copy_to_user(void *d return ret; case 10: __put_user_asm(*(u64*)src,(u64*)dst,ret,"q","","ir",10); - if (ret) return ret; + if (unlikely(ret)) return ret; asm("":::"memory"); __put_user_asm(4[(u16*)src],4+(u16*)dst,ret,"w","w","ir",2); return ret; case 16: __put_user_asm(*(u64*)src,(u64*)dst,ret,"q","","ir",16); - if (ret) return ret; + if (unlikely(ret)) return ret; asm("":::"memory"); __put_user_asm(1[(u64*)src],1+(u64*)dst,ret,"q","","ir",8); return ret; @@ -309,14 +309,14 @@ static inline int __copy_in_user(void *d case 1: { u8 tmp; __get_user_asm(tmp,(u8 *)src,ret,"b","b","=q",1); - if (!ret) + if (likely(!ret)) __put_user_asm(tmp,(u8 *)dst,ret,"b","b","iq",1); return ret; } case 2: { u16 tmp; __get_user_asm(tmp,(u16 *)src,ret,"w","w","=r",2); - if (!ret) + if (likely(!ret)) __put_user_asm(tmp,(u16 *)dst,ret,"w","w","ir",2); return ret; } @@ -324,14 +324,14 @@ static inline int __copy_in_user(void *d case 4: { u32 tmp; __get_user_asm(tmp,(u32 *)src,ret,"l","k","=r",4); - if (!ret) + if (likely(!ret)) __put_user_asm(tmp,(u32 *)dst,ret,"l","k","ir",4); return ret; } case 8: { u64 tmp; __get_user_asm(tmp,(u64 *)src,ret,"q","","=r",8); - if (!ret) + if (likely(!ret)) __put_user_asm(tmp,(u64 *)dst,ret,"q","","ir",8); return ret; } diff -prauN linux-2.6.0-test5/include/linux/atmclip.h wli-2.6.0-test5-bk12-25/include/linux/atmclip.h --- linux-2.6.0-test5/include/linux/atmclip.h 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/atmclip.h 2003-09-25 19:16:13.000000000 -0700 @@ -18,8 +18,4 @@ #define SIOCMKCLIP _IO('a',ATMIOC_CLIP) /* create IP interface */ -#ifdef __KERNEL__ -extern const unsigned char llc_oui[6]; -#endif - #endif diff -prauN linux-2.6.0-test5/include/linux/bio.h wli-2.6.0-test5-bk12-25/include/linux/bio.h --- linux-2.6.0-test5/include/linux/bio.h 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/bio.h 2003-09-25 19:16:13.000000000 -0700 @@ -20,7 +20,6 @@ #ifndef __LINUX_BIO_H #define __LINUX_BIO_H -#include #include #include diff -prauN linux-2.6.0-test5/include/linux/blkdev.h wli-2.6.0-test5-bk12-25/include/linux/blkdev.h --- linux-2.6.0-test5/include/linux/blkdev.h 2003-09-08 12:49:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/blkdev.h 2003-09-25 19:16:13.000000000 -0700 @@ -262,6 +262,7 @@ struct blk_queue_tag { int busy; /* current depth */ int max_depth; /* what we will send to device */ int real_max_depth; /* what the array can hold */ + atomic_t refcnt; /* map can be shared */ }; struct request_queue @@ -579,7 +580,7 @@ request_queue_t *blk_alloc_queue(int); extern int blk_queue_start_tag(request_queue_t *, struct request *); extern struct request *blk_queue_find_tag(request_queue_t *, int); extern void blk_queue_end_tag(request_queue_t *, struct request *); -extern int blk_queue_init_tags(request_queue_t *, int); +extern int blk_queue_init_tags(request_queue_t *, int, struct blk_queue_tag *); extern void blk_queue_free_tags(request_queue_t *); extern int blk_queue_resize_tags(request_queue_t *, int); extern void blk_queue_invalidate_tags(request_queue_t *); diff -prauN linux-2.6.0-test5/include/linux/coda.h wli-2.6.0-test5-bk12-25/include/linux/coda.h --- linux-2.6.0-test5/include/linux/coda.h 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/coda.h 2003-09-25 19:16:13.000000000 -0700 @@ -59,7 +59,7 @@ Mellon the rights to redistribute these #ifndef _CODA_HEADER_ #define _CODA_HEADER_ - +#include /* Catch new _KERNEL defn for NetBSD and DJGPP/__CYGWIN32__ */ #if defined(__NetBSD__) || \ @@ -163,11 +163,11 @@ typedef unsigned int u_int32_t; #ifndef _VENUS_DIRENT_T_ #define _VENUS_DIRENT_T_ 1 struct venus_dirent { - unsigned long d_fileno; /* file number of entry */ - unsigned short d_reclen; /* length of this record */ - unsigned char d_type; /* file type, see below */ - unsigned char d_namlen; /* length of string in d_name */ - char d_name[CODA_MAXNAMLEN + 1];/* name must be no longer than this */ + u_int32_t d_fileno; /* file number of entry */ + u_int16_t d_reclen; /* length of this record */ + u_int8_t d_type; /* file type, see below */ + u_int8_t d_namlen; /* length of string in d_name */ + char d_name[CODA_MAXNAMLEN + 1];/* name must be no longer than this */ }; #undef DIRSIZ #define DIRSIZ(dp) ((sizeof (struct venus_dirent) - (CODA_MAXNAMLEN+1)) + \ @@ -194,54 +194,42 @@ struct venus_dirent { #endif -#ifndef _FID_T_ -#define _FID_T_ 1 -typedef u_long VolumeId; -typedef u_long VnodeId; -typedef u_long Unique_t; -typedef u_long FileVersion; -#endif - -#ifndef _VICEFID_T_ -#define _VICEFID_T_ 1 -typedef struct ViceFid { - VolumeId Volume; - VnodeId Vnode; - Unique_t Unique; -} ViceFid; -#endif /* VICEFID */ +#ifndef _VUID_T_ +#define _VUID_T_ +typedef u_int32_t vuid_t; +typedef u_int32_t vgid_t; +#endif /*_VUID_T_ */ +#ifdef CODA_FS_OLD_API +struct CodaFid { + u_int32_t opaque[3]; +}; -#ifdef __linux__ -static __inline__ ino_t coda_f2i(struct ViceFid *fid) +static __inline__ ino_t coda_f2i(struct CodaFid *fid) { if ( ! fid ) return 0; - if (fid->Vnode == 0xfffffffe || fid->Vnode == 0xffffffff) - return ((fid->Volume << 20) | (fid->Unique & 0xfffff)); + if (fid->opaque[1] == 0xfffffffe || fid->opaque[1] == 0xffffffff) + return ((fid->opaque[0] << 20) | (fid->opaque[2] & 0xfffff)); else - return (fid->Unique + (fid->Vnode<<10) + (fid->Volume<<20)); + return (fid->opaque[2] + (fid->opaque[1]<<10) + (fid->opaque[0]<<20)); } - -#else -#define coda_f2i(fid)\ - ((fid) ? ((fid)->Unique + ((fid)->Vnode<<10) + ((fid)->Volume<<20)) : 0) -#endif - - -#ifndef _VUID_T_ -#define _VUID_T_ -typedef u_int32_t vuid_t; -typedef u_int32_t vgid_t; -#endif /*_VUID_T_ */ -#ifndef _CODACRED_T_ -#define _CODACRED_T_ struct coda_cred { vuid_t cr_uid, cr_euid, cr_suid, cr_fsuid; /* Real, efftve, set, fs uid*/ - vgid_t cr_groupid, cr_egid, cr_sgid, cr_fsgid; /* same for groups */ + vgid_t cr_groupid, cr_egid, cr_sgid, cr_fsgid; /* same for groups */ }; -#endif + +#else /* not defined(CODA_FS_OLD_API) */ + +struct CodaFid { + u_int32_t opaque[4]; +}; + +#define coda_f2i(fid)\ + (fid ? (fid->opaque[3] ^ (fid->opaque[2]<<10) ^ (fid->opaque[1]<<20) ^ fid->opaque[0]) : 0) + +#endif #ifndef _VENUS_VATTR_T_ #define _VENUS_VATTR_T_ @@ -330,31 +318,41 @@ struct coda_statfs { #define CODA_KERNEL_VERSION 0 /* don't care about kernel version number */ #define CODA_KERNEL_VERSION 1 /* The old venus 4.6 compatible interface */ #endif -#define CODA_KERNEL_VERSION 2 /* venus_lookup gets an extra parameter */ +#ifdef CODA_FS_OLD_API +#define CODA_KERNEL_VERSION 2 /* venus_lookup got an extra parameter */ +#else +#define CODA_KERNEL_VERSION 3 /* 128-bit file identifiers */ +#endif /* * Venus <-> Coda RPC arguments */ struct coda_in_hdr { - unsigned long opcode; - unsigned long unique; /* Keep multiple outstanding msgs distinct */ - u_short pid; /* Common to all */ - u_short pgid; /* Common to all */ - u_short sid; /* Common to all */ - struct coda_cred cred; /* Common to all */ + u_int32_t opcode; + u_int32_t unique; /* Keep multiple outstanding msgs distinct */ +#ifdef CODA_FS_OLD_API + u_int16_t pid; /* Common to all */ + u_int16_t pgid; /* Common to all */ + u_int16_t sid; /* Common to all */ + struct coda_cred cred; /* Common to all */ +#else + pid_t pid; + pid_t pgid; + vuid_t uid; +#endif }; /* Really important that opcode and unique are 1st two fields! */ struct coda_out_hdr { - unsigned long opcode; - unsigned long unique; - unsigned long result; + u_int32_t opcode; + u_int32_t unique; + u_int32_t result; }; /* coda_root: NO_IN */ struct coda_root_out { struct coda_out_hdr oh; - ViceFid VFid; + struct CodaFid VFid; }; struct coda_root_in { @@ -364,7 +362,7 @@ struct coda_root_in { /* coda_open: */ struct coda_open_in { struct coda_in_hdr ih; - ViceFid VFid; + struct CodaFid VFid; int flags; }; @@ -378,7 +376,7 @@ struct coda_open_out { /* coda_store: */ struct coda_store_in { struct coda_in_hdr ih; - ViceFid VFid; + struct CodaFid VFid; int flags; }; @@ -389,7 +387,7 @@ struct coda_store_out { /* coda_release: */ struct coda_release_in { struct coda_in_hdr ih; - ViceFid VFid; + struct CodaFid VFid; int flags; }; @@ -400,7 +398,7 @@ struct coda_release_out { /* coda_close: */ struct coda_close_in { struct coda_in_hdr ih; - ViceFid VFid; + struct CodaFid VFid; int flags; }; @@ -411,7 +409,7 @@ struct coda_close_out { /* coda_ioctl: */ struct coda_ioctl_in { struct coda_in_hdr ih; - ViceFid VFid; + struct CodaFid VFid; int cmd; int len; int rwflag; @@ -428,7 +426,7 @@ struct coda_ioctl_out { /* coda_getattr: */ struct coda_getattr_in { struct coda_in_hdr ih; - ViceFid VFid; + struct CodaFid VFid; }; struct coda_getattr_out { @@ -440,7 +438,7 @@ struct coda_getattr_out { /* coda_setattr: NO_OUT */ struct coda_setattr_in { struct coda_in_hdr ih; - ViceFid VFid; + struct CodaFid VFid; struct coda_vattr attr; }; @@ -451,7 +449,7 @@ struct coda_setattr_out { /* coda_access: NO_OUT */ struct coda_access_in { struct coda_in_hdr ih; - ViceFid VFid; + struct CodaFid VFid; int flags; }; @@ -467,14 +465,14 @@ struct coda_access_out { /* coda_lookup: */ struct coda_lookup_in { struct coda_in_hdr ih; - ViceFid VFid; + struct CodaFid VFid; int name; /* Place holder for data. */ int flags; }; struct coda_lookup_out { struct coda_out_hdr oh; - ViceFid VFid; + struct CodaFid VFid; int vtype; }; @@ -482,7 +480,7 @@ struct coda_lookup_out { /* coda_create: */ struct coda_create_in { struct coda_in_hdr ih; - ViceFid VFid; + struct CodaFid VFid; struct coda_vattr attr; int excl; int mode; @@ -491,7 +489,7 @@ struct coda_create_in { struct coda_create_out { struct coda_out_hdr oh; - ViceFid VFid; + struct CodaFid VFid; struct coda_vattr attr; }; @@ -499,7 +497,7 @@ struct coda_create_out { /* coda_remove: NO_OUT */ struct coda_remove_in { struct coda_in_hdr ih; - ViceFid VFid; + struct CodaFid VFid; int name; /* Place holder for data. */ }; @@ -510,8 +508,8 @@ struct coda_remove_out { /* coda_link: NO_OUT */ struct coda_link_in { struct coda_in_hdr ih; - ViceFid sourceFid; /* cnode to link *to* */ - ViceFid destFid; /* Directory in which to place link */ + struct CodaFid sourceFid; /* cnode to link *to* */ + struct CodaFid destFid; /* Directory in which to place link */ int tname; /* Place holder for data. */ }; @@ -523,9 +521,9 @@ struct coda_link_out { /* coda_rename: NO_OUT */ struct coda_rename_in { struct coda_in_hdr ih; - ViceFid sourceFid; + struct CodaFid sourceFid; int srcname; - ViceFid destFid; + struct CodaFid destFid; int destname; }; @@ -536,14 +534,14 @@ struct coda_rename_out { /* coda_mkdir: */ struct coda_mkdir_in { struct coda_in_hdr ih; - ViceFid VFid; + struct CodaFid VFid; struct coda_vattr attr; int name; /* Place holder for data. */ }; struct coda_mkdir_out { struct coda_out_hdr oh; - ViceFid VFid; + struct CodaFid VFid; struct coda_vattr attr; }; @@ -551,7 +549,7 @@ struct coda_mkdir_out { /* coda_rmdir: NO_OUT */ struct coda_rmdir_in { struct coda_in_hdr ih; - ViceFid VFid; + struct CodaFid VFid; int name; /* Place holder for data. */ }; @@ -562,7 +560,7 @@ struct coda_rmdir_out { /* coda_symlink: NO_OUT */ struct coda_symlink_in { struct coda_in_hdr ih; - ViceFid VFid; /* Directory to put symlink in */ + struct CodaFid VFid; /* Directory to put symlink in */ int srcname; struct coda_vattr attr; int tname; @@ -575,7 +573,7 @@ struct coda_symlink_out { /* coda_readlink: */ struct coda_readlink_in { struct coda_in_hdr ih; - ViceFid VFid; + struct CodaFid VFid; }; struct coda_readlink_out { @@ -588,7 +586,7 @@ struct coda_readlink_out { /* coda_fsync: NO_OUT */ struct coda_fsync_in { struct coda_in_hdr ih; - ViceFid VFid; + struct CodaFid VFid; }; struct coda_fsync_out { @@ -598,12 +596,12 @@ struct coda_fsync_out { /* coda_vget: */ struct coda_vget_in { struct coda_in_hdr ih; - ViceFid VFid; + struct CodaFid VFid; }; struct coda_vget_out { struct coda_out_hdr oh; - ViceFid VFid; + struct CodaFid VFid; int vtype; }; @@ -616,50 +614,46 @@ struct coda_vget_out { /* CODA_PURGEUSER is a venus->kernel call */ struct coda_purgeuser_out { struct coda_out_hdr oh; +#ifdef CODA_FS_OLD_API struct coda_cred cred; +#else + vuid_t uid; +#endif }; /* coda_zapfile: */ /* CODA_ZAPFILE is a venus->kernel call */ struct coda_zapfile_out { struct coda_out_hdr oh; - ViceFid CodaFid; + struct CodaFid CodaFid; }; /* coda_zapdir: */ /* CODA_ZAPDIR is a venus->kernel call */ struct coda_zapdir_out { struct coda_out_hdr oh; - ViceFid CodaFid; -}; - -/* coda_zapnode: */ -/* CODA_ZAPVNODE is a venus->kernel call */ -struct coda_zapvnode_out { - struct coda_out_hdr oh; - struct coda_cred cred; - ViceFid VFid; + struct CodaFid CodaFid; }; /* coda_purgefid: */ /* CODA_PURGEFID is a venus->kernel call */ struct coda_purgefid_out { struct coda_out_hdr oh; - ViceFid CodaFid; + struct CodaFid CodaFid; }; /* coda_replace: */ /* CODA_REPLACE is a venus->kernel call */ struct coda_replace_out { /* coda_replace is a venus->kernel call */ struct coda_out_hdr oh; - ViceFid NewFid; - ViceFid OldFid; + struct CodaFid NewFid; + struct CodaFid OldFid; }; /* coda_open_by_fd: */ struct coda_open_by_fd_in { struct coda_in_hdr ih; - ViceFid VFid; + struct CodaFid VFid; int flags; }; @@ -675,7 +669,7 @@ struct coda_open_by_fd_out { /* coda_open_by_path: */ struct coda_open_by_path_in { struct coda_in_hdr ih; - ViceFid VFid; + struct CodaFid VFid; int flags; }; @@ -741,7 +735,6 @@ union outputArgs { struct coda_purgeuser_out coda_purgeuser; struct coda_zapfile_out coda_zapfile; struct coda_zapdir_out coda_zapdir; - struct coda_zapvnode_out coda_zapvnode; struct coda_purgefid_out coda_purgefid; struct coda_replace_out coda_replace; struct coda_open_by_fd_out coda_open_by_fd; @@ -755,7 +748,6 @@ union coda_downcalls { struct coda_purgeuser_out purgeuser; struct coda_zapfile_out zapfile; struct coda_zapdir_out zapdir; - struct coda_zapvnode_out zapvnode; struct coda_purgefid_out purgefid; struct coda_replace_out replace; }; @@ -778,18 +770,9 @@ struct PioctlData { struct ViceIoctl vi; }; -#define CODA_CONTROL ".CONTROL" -#define CODA_CONTROLLEN 8 -#define CTL_VOL -1 -#define CTL_VNO -1 -#define CTL_UNI -1 -#define CTL_INO -1 -#define CTL_FILE "/coda/.CONTROL" - - -#define IS_CTL_FID(fidp) ((fidp)->Volume == CTL_VOL &&\ - (fidp)->Vnode == CTL_VNO &&\ - (fidp)->Unique == CTL_UNI) +#define CODA_CONTROL ".CONTROL" +#define CODA_CONTROLLEN 8 +#define CTL_INO -1 /* Data passed to mount */ diff -prauN linux-2.6.0-test5/include/linux/coda_cache.h wli-2.6.0-test5-bk12-25/include/linux/coda_cache.h --- linux-2.6.0-test5/include/linux/coda_cache.h 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/coda_cache.h 2003-09-25 19:16:13.000000000 -0700 @@ -13,7 +13,7 @@ /* credential cache */ void coda_cache_enter(struct inode *inode, int mask); void coda_cache_clear_inode(struct inode *); -void coda_cache_clear_all(struct super_block *sb, struct coda_cred *cred); +void coda_cache_clear_all(struct super_block *sb); int coda_cache_check(struct inode *inode, int mask); /* for downcalls and attributes and lookups */ diff -prauN linux-2.6.0-test5/include/linux/coda_fs_i.h wli-2.6.0-test5-bk12-25/include/linux/coda_fs_i.h --- linux-2.6.0-test5/include/linux/coda_fs_i.h 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/coda_fs_i.h 2003-09-25 19:16:13.000000000 -0700 @@ -17,11 +17,12 @@ * coda fs inode data */ struct coda_inode_info { - struct ViceFid c_fid; /* Coda identifier */ + struct CodaFid c_fid; /* Coda identifier */ u_short c_flags; /* flags (see below) */ struct list_head c_cilist; /* list of all coda inodes */ unsigned int c_mapcount; /* nr of times this inode is mapped */ - struct coda_cred c_cached_cred; /* credentials of cached perms */ + unsigned int c_cached_epoch; /* epoch for cached permissions */ + vuid_t c_uid; /* fsuid for cached permissions */ unsigned int c_cached_perm; /* cached access permissions */ struct inode vfs_inode; }; @@ -34,7 +35,6 @@ struct coda_file_info { int cfi_magic; /* magic number */ struct file *cfi_container; /* container file for this cnode */ unsigned int cfi_mapcount; /* nr of times this file is mapped */ - struct coda_cred cfi_cred; /* credentials of opener */ }; #define CODA_FTOC(file) ((struct coda_file_info *)((file)->private_data)) @@ -45,11 +45,11 @@ struct coda_file_info { #define C_DYING 0x4 /* from venus (which died) */ #define C_PURGE 0x8 -int coda_cnode_make(struct inode **, struct ViceFid *, struct super_block *); -struct inode *coda_iget(struct super_block *sb, struct ViceFid *fid, struct coda_vattr *attr); +int coda_cnode_make(struct inode **, struct CodaFid *, struct super_block *); +struct inode *coda_iget(struct super_block *sb, struct CodaFid *fid, struct coda_vattr *attr); int coda_cnode_makectl(struct inode **inode, struct super_block *sb); -struct inode *coda_fid_to_inode(ViceFid *fid, struct super_block *sb); -void coda_replace_fid(struct inode *, ViceFid *, ViceFid *); +struct inode *coda_fid_to_inode(struct CodaFid *fid, struct super_block *sb); +void coda_replace_fid(struct inode *, struct CodaFid *, struct CodaFid *); #endif #endif diff -prauN linux-2.6.0-test5/include/linux/coda_linux.h wli-2.6.0-test5-bk12-25/include/linux/coda_linux.h --- linux-2.6.0-test5/include/linux/coda_linux.h 2003-09-08 12:49:54.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/coda_linux.h 2003-09-25 19:16:13.000000000 -0700 @@ -42,26 +42,21 @@ int coda_permission(struct inode *inode, int coda_revalidate_inode(struct dentry *); int coda_getattr(struct vfsmount *, struct dentry *, struct kstat *); int coda_setattr(struct dentry *, struct iattr *); -int coda_isnullfid(ViceFid *fid); /* global variables */ extern int coda_fake_statfs; /* this file: heloers */ -static __inline__ struct ViceFid *coda_i2f(struct inode *); +static __inline__ struct CodaFid *coda_i2f(struct inode *); static __inline__ char *coda_i2s(struct inode *); static __inline__ void coda_flag_inode(struct inode *, int flag); -char *coda_f2s(ViceFid *f); +char *coda_f2s(struct CodaFid *f); int coda_isroot(struct inode *i); int coda_iscontrol(const char *name, size_t length); -void coda_load_creds(struct coda_cred *cred); void coda_vattr_to_iattr(struct inode *, struct coda_vattr *); void coda_iattr_to_vattr(struct iattr *, struct coda_vattr *); unsigned short coda_flags_to_cflags(unsigned short); -void print_vattr( struct coda_vattr *attr ); -int coda_cred_ok(struct coda_cred *cred); -int coda_cred_eq(struct coda_cred *cred1, struct coda_cred *cred2); /* sysctl.h */ void coda_sysctl_init(void); @@ -88,7 +83,7 @@ static inline struct coda_inode_info *IT return list_entry(inode, struct coda_inode_info, vfs_inode); } -static __inline__ struct ViceFid *coda_i2f(struct inode *inode) +static __inline__ struct CodaFid *coda_i2f(struct inode *inode) { return &(ITOC(inode)->c_fid); } diff -prauN linux-2.6.0-test5/include/linux/coda_psdev.h wli-2.6.0-test5-bk12-25/include/linux/coda_psdev.h --- linux-2.6.0-test5/include/linux/coda_psdev.h 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/coda_psdev.h 2003-09-25 19:16:13.000000000 -0700 @@ -6,13 +6,11 @@ #define CODA_SUPER_MAGIC 0x73757245 -struct statfs; +struct kstatfs; struct coda_sb_info { - struct venus_comm * sbi_vcomm; - struct super_block *sbi_sb; - struct list_head sbi_cihead; + struct venus_comm *sbi_vcomm; }; /* communication pending/processing queues */ @@ -33,46 +31,45 @@ static inline struct coda_sb_info *coda_ /* upcalls */ -int venus_rootfid(struct super_block *sb, ViceFid *fidp); -int venus_getattr(struct super_block *sb, struct ViceFid *fid, - struct coda_vattr *attr); -int venus_setattr(struct super_block *, struct ViceFid *, - struct coda_vattr *); -int venus_lookup(struct super_block *sb, struct ViceFid *fid, - const char *name, int length, int *type, - struct ViceFid *resfid); -int venus_store(struct super_block *sb, struct ViceFid *fid, int flags, - struct coda_cred *); -int venus_release(struct super_block *sb, struct ViceFid *fid, int flags); -int venus_close(struct super_block *sb, struct ViceFid *fid, int flags, - struct coda_cred *); -int venus_open(struct super_block *sb, struct ViceFid *fid, - int flags, struct file **f); -int venus_mkdir(struct super_block *sb, struct ViceFid *dirfid, +int venus_rootfid(struct super_block *sb, struct CodaFid *fidp); +int venus_getattr(struct super_block *sb, struct CodaFid *fid, + struct coda_vattr *attr); +int venus_setattr(struct super_block *, struct CodaFid *, struct coda_vattr *); +int venus_lookup(struct super_block *sb, struct CodaFid *fid, + const char *name, int length, int *type, + struct CodaFid *resfid); +int venus_store(struct super_block *sb, struct CodaFid *fid, int flags, + vuid_t uid); +int venus_release(struct super_block *sb, struct CodaFid *fid, int flags); +int venus_close(struct super_block *sb, struct CodaFid *fid, int flags, + vuid_t uid); +int venus_open(struct super_block *sb, struct CodaFid *fid, int flags, + struct file **f); +int venus_mkdir(struct super_block *sb, struct CodaFid *dirfid, const char *name, int length, - struct ViceFid *newfid, struct coda_vattr *attrs); -int venus_create(struct super_block *sb, struct ViceFid *dirfid, + struct CodaFid *newfid, struct coda_vattr *attrs); +int venus_create(struct super_block *sb, struct CodaFid *dirfid, const char *name, int length, int excl, int mode, dev_t rdev, - struct ViceFid *newfid, struct coda_vattr *attrs) ; -int venus_rmdir(struct super_block *sb, struct ViceFid *dirfid, + struct CodaFid *newfid, struct coda_vattr *attrs) ; +int venus_rmdir(struct super_block *sb, struct CodaFid *dirfid, const char *name, int length); -int venus_remove(struct super_block *sb, struct ViceFid *dirfid, +int venus_remove(struct super_block *sb, struct CodaFid *dirfid, const char *name, int length); -int venus_readlink(struct super_block *sb, struct ViceFid *fid, +int venus_readlink(struct super_block *sb, struct CodaFid *fid, char *buffer, int *length); -int venus_rename(struct super_block *, struct ViceFid *new_fid, - struct ViceFid *old_fid, size_t old_length, +int venus_rename(struct super_block *, struct CodaFid *new_fid, + struct CodaFid *old_fid, size_t old_length, size_t new_length, const char *old_name, const char *new_name); -int venus_link(struct super_block *sb, struct ViceFid *fid, - struct ViceFid *dirfid, const char *name, int len ); -int venus_symlink(struct super_block *sb, struct ViceFid *fid, +int venus_link(struct super_block *sb, struct CodaFid *fid, + struct CodaFid *dirfid, const char *name, int len ); +int venus_symlink(struct super_block *sb, struct CodaFid *fid, const char *name, int len, const char *symname, int symlen); -int venus_access(struct super_block *sb, struct ViceFid *fid, int mask); -int venus_pioctl(struct super_block *sb, struct ViceFid *fid, +int venus_access(struct super_block *sb, struct CodaFid *fid, int mask); +int venus_pioctl(struct super_block *sb, struct CodaFid *fid, unsigned int cmd, struct PioctlData *data); int coda_downcall(int opcode, union outputArgs *out, struct super_block *sb); -int venus_fsync(struct super_block *sb, struct ViceFid *fid); +int venus_fsync(struct super_block *sb, struct CodaFid *fid); int venus_statfs(struct super_block *sb, struct kstatfs *sfs); diff -prauN linux-2.6.0-test5/include/linux/compiler-gcc+.h wli-2.6.0-test5-bk12-25/include/linux/compiler-gcc+.h --- linux-2.6.0-test5/include/linux/compiler-gcc+.h 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/include/linux/compiler-gcc+.h 2003-09-25 19:16:13.000000000 -0700 @@ -0,0 +1,14 @@ +/* Never include this file directly. Include instead. */ + +/* + * These definitions are for Ueber-GCC: always newer than the latest + * version and hence sporting everything plus a kitchen-sink. + */ +#include + +#define inline __inline__ __attribute__((always_inline)) +#define __inline__ __inline__ __attribute__((always_inline)) +#define __inline __inline__ __attribute__((always_inline)) +#define __deprecated __attribute__((deprecated)) +#define __attribute_used__ __attribute__((__used__)) +#define __attribute_pure__ __attribute__((pure)) diff -prauN linux-2.6.0-test5/include/linux/compiler-gcc.h wli-2.6.0-test5-bk12-25/include/linux/compiler-gcc.h --- linux-2.6.0-test5/include/linux/compiler-gcc.h 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/include/linux/compiler-gcc.h 2003-09-25 19:16:13.000000000 -0700 @@ -0,0 +1,17 @@ +/* Never include this file directly. Include instead. */ + +/* + * Common definitions for all gcc versions go here. + */ + + +/* Optimization barrier */ +/* The "volatile" is due to gcc bugs */ +#define barrier() __asm__ __volatile__("": : :"memory") + +/* This macro obfuscates arithmetic on a variable address so that gcc + shouldn't recognize the original var, and make assumptions about it */ +#define RELOC_HIDE(ptr, off) \ + ({ unsigned long __ptr; \ + __asm__ ("" : "=g"(__ptr) : "0"(ptr)); \ + (typeof(ptr)) (__ptr + (off)); }) diff -prauN linux-2.6.0-test5/include/linux/compiler-gcc2.h wli-2.6.0-test5-bk12-25/include/linux/compiler-gcc2.h --- linux-2.6.0-test5/include/linux/compiler-gcc2.h 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/include/linux/compiler-gcc2.h 2003-09-25 19:16:13.000000000 -0700 @@ -0,0 +1,23 @@ +/* Never include this file directly. Include instead. */ + +/* These definitions are for GCC v2.x. */ + +/* Somewhere in the middle of the GCC 2.96 development cycle, we implemented + a mechanism by which the user can annotate likely branch directions and + expect the blocks to be reordered appropriately. Define __builtin_expect + to nothing for earlier compilers. */ +#include + +#if __GNUC_MINOR__ < 96 +# define __builtin_expect(x, expected_value) (x) +#endif + +#define __attribute_used__ __attribute__((__unused__)) + +/* + * The attribute `pure' is not implemented in GCC versions earlier + * than 2.96. + */ +#if __GNUC_MINOR__ >= 96 +# define __attribute_pure__ __attribute__((pure)) +#endif diff -prauN linux-2.6.0-test5/include/linux/compiler-gcc3.h wli-2.6.0-test5-bk12-25/include/linux/compiler-gcc3.h --- linux-2.6.0-test5/include/linux/compiler-gcc3.h 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/include/linux/compiler-gcc3.h 2003-09-25 19:16:13.000000000 -0700 @@ -0,0 +1,22 @@ +/* Never include this file directly. Include instead. */ + +/* These definitions are for GCC v3.x. */ +#include + +#if __GNUC_MINOR__ >= 1 +# define inline __inline__ __attribute__((always_inline)) +# define __inline__ __inline__ __attribute__((always_inline)) +# define __inline __inline__ __attribute__((always_inline)) +#endif + +#if __GNUC_MINOR__ > 0 +# define __deprecated __attribute__((deprecated)) +#endif + +#if __GNUC_MINOR__ >= 3 +# define __attribute_used__ __attribute__((__used__)) +#else +# define __attribute_used__ __attribute__((__unused__)) +#endif + +#define __attribute_pure__ __attribute__((pure)) diff -prauN linux-2.6.0-test5/include/linux/compiler-intel.h wli-2.6.0-test5-bk12-25/include/linux/compiler-intel.h --- linux-2.6.0-test5/include/linux/compiler-intel.h 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/include/linux/compiler-intel.h 2003-09-25 19:16:13.000000000 -0700 @@ -0,0 +1,24 @@ +/* Never include this file directly. Include instead. */ + +#ifdef __ECC + +/* Some compiler specific definitions are overwritten here + * for Intel ECC compiler + */ + +#include + +/* Intel ECC compiler doesn't support gcc specific asm stmts. + * It uses intrinsics to do the equivalent things. + */ +#undef barrier +#undef RELOC_HIDE + +#define barrier() __memory_barrier() + +#define RELOC_HIDE(ptr, off) \ + ({ unsigned long __ptr; \ + __ptr = (unsigned long) (ptr); \ + (typeof(ptr)) (__ptr + (off)); }) + +#endif diff -prauN linux-2.6.0-test5/include/linux/compiler.h wli-2.6.0-test5-bk12-25/include/linux/compiler.h --- linux-2.6.0-test5/include/linux/compiler.h 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/compiler.h 2003-09-25 19:16:13.000000000 -0700 @@ -2,28 +2,36 @@ #define __LINUX_COMPILER_H #ifdef __CHECKER__ - #define __user __attribute__((noderef, address_space(1))) - #define __kernel /* default address space */ +# define __user __attribute__((noderef, address_space(1))) +# define __kernel /* default address space */ #else - #define __user - #define __kernel +# define __user +# define __kernel #endif -#if (__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) -#define inline __inline__ __attribute__((always_inline)) -#define __inline__ __inline__ __attribute__((always_inline)) -#define __inline __inline__ __attribute__((always_inline)) +#if __GNUC__ > 3 +# include /* catch-all for GCC 4, 5, etc. */ +#elif __GNUC__ == 3 +# include +#elif __GNUC__ == 2 +# include +#else +# error Sorry, your compiler is too old/not recognized. #endif -/* Somewhere in the middle of the GCC 2.96 development cycle, we implemented - a mechanism by which the user can annotate likely branch directions and - expect the blocks to be reordered appropriately. Define __builtin_expect - to nothing for earlier compilers. */ - -#if __GNUC__ == 2 && __GNUC_MINOR__ < 96 -#define __builtin_expect(x, expected_value) (x) +/* Intel compiler defines __GNUC__. So we will overwrite implementations + * coming from above header files here + */ +#ifdef __INTEL_COMPILER +# include #endif +/* + * Generic compiler-dependent macros required for kernel + * build go below this comment. Actual compiler/compiler version + * specific implementations come from the above header files + */ + #define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x), 0) @@ -33,10 +41,8 @@ * Usage is: * int __deprecated foo(void) */ -#if ( __GNUC__ == 3 && __GNUC_MINOR__ > 0 ) || __GNUC__ > 3 -#define __deprecated __attribute__((deprecated)) -#else -#define __deprecated +#ifndef __deprecated +# define __deprecated /* unimplemented */ #endif /* @@ -50,10 +56,8 @@ * In prior versions of gcc, such functions and data would be emitted, but * would be warned about except with attribute((unused)). */ -#if __GNUC__ == 3 && __GNUC_MINOR__ >= 3 || __GNUC__ > 3 -#define __attribute_used__ __attribute__((__used__)) -#else -#define __attribute_used__ __attribute__((__unused__)) +#ifndef __attribute_used__ +# define __attribute_used__ /* unimplemented */ #endif /* @@ -65,19 +69,21 @@ * elimination and loop optimization just as an arithmetic operator * would be. * [...] - * The attribute `pure' is not implemented in GCC versions earlier - * than 2.96. */ -#if (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || __GNUC__ > 2 -#define __attribute_pure__ __attribute__((pure)) -#else -#define __attribute_pure__ /* unimplemented */ +#ifndef __attribute_pure__ +# define __attribute_pure__ /* unimplemented */ +#endif + +/* Optimization barrier */ +#ifndef barrier +# define barrier() __memory_barrier() #endif -/* This macro obfuscates arithmetic on a variable address so that gcc - shouldn't recognize the original var, and make assumptions about it */ -#define RELOC_HIDE(ptr, off) \ +#ifndef RELOC_HIDE +# define RELOC_HIDE(ptr, off) \ ({ unsigned long __ptr; \ - __asm__ ("" : "=g"(__ptr) : "0"(ptr)); \ + __ptr = (unsigned long) (ptr); \ (typeof(ptr)) (__ptr + (off)); }) +#endif + #endif /* __LINUX_COMPILER_H */ diff -prauN linux-2.6.0-test5/include/linux/console.h wli-2.6.0-test5-bk12-25/include/linux/console.h --- linux-2.6.0-test5/include/linux/console.h 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/console.h 2003-09-25 19:16:13.000000000 -0700 @@ -15,7 +15,6 @@ #define _LINUX_CONSOLE_H_ 1 #include -#include #include struct vc_data; diff -prauN linux-2.6.0-test5/include/linux/cpufreq.h wli-2.6.0-test5-bk12-25/include/linux/cpufreq.h --- linux-2.6.0-test5/include/linux/cpufreq.h 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/cpufreq.h 2003-09-25 19:16:13.000000000 -0700 @@ -60,6 +60,13 @@ struct cpufreq_cpuinfo { unsigned int transition_latency; /* in 10^(-9) s */ }; +struct cpufreq_real_policy { + unsigned int min; /* in kHz */ + unsigned int max; /* in kHz */ + unsigned int policy; /* see above */ + struct cpufreq_governor *governor; /* see below */ +}; + struct cpufreq_policy { unsigned int cpu; /* cpu nr */ struct cpufreq_cpuinfo cpuinfo;/* see above */ @@ -74,6 +81,8 @@ struct cpufreq_policy { struct semaphore lock; /* CPU ->setpolicy or ->target may only be called once a time */ + struct cpufreq_real_policy user_policy; + struct kobject kobj; struct completion kobj_unregister; }; @@ -217,6 +226,7 @@ struct freq_attr { *********************************************************************/ int cpufreq_set_policy(struct cpufreq_policy *policy); int cpufreq_get_policy(struct cpufreq_policy *policy, unsigned int cpu); +int cpufreq_update_policy(unsigned int cpu); /* the proc_intf.c needs this */ int cpufreq_parse_governor (char *str_governor, unsigned int *policy, struct cpufreq_governor **governor); @@ -290,7 +300,7 @@ enum { #ifdef CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE extern struct cpufreq_governor cpufreq_gov_performance; #define CPUFREQ_DEFAULT_GOVERNOR &cpufreq_gov_performance -#elif CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE +#elif defined(CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE) extern struct cpufreq_governor cpufreq_gov_userspace; #define CPUFREQ_DEFAULT_GOVERNOR &cpufreq_gov_userspace #endif diff -prauN linux-2.6.0-test5/include/linux/devfs_fs_kernel.h wli-2.6.0-test5-bk12-25/include/linux/devfs_fs_kernel.h --- linux-2.6.0-test5/include/linux/devfs_fs_kernel.h 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/devfs_fs_kernel.h 2003-09-25 19:16:13.000000000 -0700 @@ -4,7 +4,6 @@ #include #include #include -#include #include #include diff -prauN linux-2.6.0-test5/include/linux/dm-ioctl-v1.h wli-2.6.0-test5-bk12-25/include/linux/dm-ioctl-v1.h --- linux-2.6.0-test5/include/linux/dm-ioctl-v1.h 2003-09-08 12:50:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/dm-ioctl-v1.h 2003-09-25 19:16:13.000000000 -0700 @@ -50,7 +50,7 @@ struct dm_ioctl { uint32_t open_count; /* out */ uint32_t flags; /* in/out */ - __kernel_dev_t dev; /* in/out */ + __kernel_old_dev_t dev; /* in/out */ char name[DM_NAME_LEN]; /* device name */ char uuid[DM_UUID_LEN]; /* unique identifier for @@ -87,7 +87,7 @@ struct dm_target_spec { struct dm_target_deps { uint32_t count; - __kernel_dev_t dev[0]; /* out */ + __kernel_old_dev_t dev[0]; /* out */ }; /* diff -prauN linux-2.6.0-test5/include/linux/eisa.h wli-2.6.0-test5-bk12-25/include/linux/eisa.h --- linux-2.6.0-test5/include/linux/eisa.h 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/eisa.h 2003-09-25 19:16:13.000000000 -0700 @@ -1,6 +1,19 @@ #ifndef _LINUX_EISA_H #define _LINUX_EISA_H +#include +#include + +#ifdef CONFIG_EISA +# ifdef CONFIG_EISA_ALWAYS +# define EISA_bus 1 +# else + extern int EISA_bus; +# endif +#else +# define EISA_bus 0 +#endif + #define EISA_SIG_LEN 8 #define EISA_MAX_SLOTS 8 diff -prauN linux-2.6.0-test5/include/linux/elevator.h wli-2.6.0-test5-bk12-25/include/linux/elevator.h --- linux-2.6.0-test5/include/linux/elevator.h 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/elevator.h 2003-09-25 19:16:13.000000000 -0700 @@ -15,7 +15,6 @@ typedef int (elevator_queue_empty_fn) (r typedef void (elevator_remove_req_fn) (request_queue_t *, struct request *); typedef void (elevator_requeue_req_fn) (request_queue_t *, struct request *); typedef struct request *(elevator_request_list_fn) (request_queue_t *, struct request *); -typedef struct list_head *(elevator_get_sort_head_fn) (request_queue_t *, struct request *); typedef void (elevator_completed_req_fn) (request_queue_t *, struct request *); typedef int (elevator_may_queue_fn) (request_queue_t *, int); diff -prauN linux-2.6.0-test5/include/linux/elf.h wli-2.6.0-test5-bk12-25/include/linux/elf.h --- linux-2.6.0-test5/include/linux/elf.h 2003-09-08 12:49:54.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/elf.h 2003-09-25 19:16:13.000000000 -0700 @@ -360,7 +360,8 @@ typedef struct elf64_shdr { #define EI_CLASS 4 #define EI_DATA 5 #define EI_VERSION 6 -#define EI_PAD 7 +#define EI_OSABI 7 +#define EI_PAD 8 #define ELFMAG0 0x7f /* EI_MAG */ #define ELFMAG1 'E' @@ -382,6 +383,13 @@ typedef struct elf64_shdr { #define EV_CURRENT 1 #define EV_NUM 2 +#define ELFOSABI_NONE 0 +#define ELFOSABI_LINUX 3 + +#ifndef ELF_OSABI +#define ELF_OSABI ELFOSABI_NONE +#endif + /* Notes used in ET_CORE */ #define NT_PRSTATUS 1 #define NT_PRFPREG 2 diff -prauN linux-2.6.0-test5/include/linux/eventpoll.h wli-2.6.0-test5-bk12-25/include/linux/eventpoll.h --- linux-2.6.0-test5/include/linux/eventpoll.h 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/eventpoll.h 2003-09-25 19:16:13.000000000 -0700 @@ -48,9 +48,10 @@ struct file; /* Kernel space functions implementing the user space "epoll" API */ asmlinkage long sys_epoll_create(int size); -asmlinkage long sys_epoll_ctl(int epfd, int op, int fd, struct epoll_event *event); -asmlinkage long sys_epoll_wait(int epfd, struct epoll_event *events, int maxevents, - int timeout); +asmlinkage long sys_epoll_ctl(int epfd, int op, int fd, + struct epoll_event __user *event); +asmlinkage long sys_epoll_wait(int epfd, struct epoll_event __user *events, + int maxevents, int timeout); #ifdef CONFIG_EPOLL diff -prauN linux-2.6.0-test5/include/linux/fs.h wli-2.6.0-test5-bk12-25/include/linux/fs.h --- linux-2.6.0-test5/include/linux/fs.h 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/fs.h 2003-09-28 22:48:27.000000000 -0700 @@ -19,6 +19,8 @@ #include #include #include +#include +#include #include struct iovec; @@ -315,11 +317,29 @@ struct address_space_operations { loff_t offset, unsigned long nr_segs); }; +#if NR_CPUS > 8 +typedef rwlock_t mapping_rwlock_t; +#define mapping_rdlock(lock) read_lock(lock) +#define mapping_rdunlock(lock) read_unlock(lock) +#define mapping_wrlock(lock) write_lock(lock) +#define mapping_wrunlock(lock) write_unlock(lock) +#define mapping_rwlock_init(lock) rwlock_init(lock) +#define MAPPING_RW_LOCK_UNLOCKED RW_LOCK_UNLOCKED +#else +typedef spinlock_t mapping_rwlock_t; +#define mapping_rdlock(lock) spin_lock(lock) +#define mapping_rdunlock(lock) spin_unlock(lock) +#define mapping_wrlock(lock) spin_lock(lock) +#define mapping_wrunlock(lock) spin_unlock(lock) +#define mapping_rwlock_init(lock) spin_lock_init(lock) +#define MAPPING_RW_LOCK_UNLOCKED SPIN_LOCK_UNLOCKED +#endif + struct backing_dev_info; struct address_space { struct inode *host; /* owner: inode, block_device */ struct radix_tree_root page_tree; /* radix tree of all pages */ - spinlock_t page_lock; /* and spinlock protecting it */ + mapping_rwlock_t page_lock; /* and spinlock protecting it */ struct list_head clean_pages; /* list of clean pages */ struct list_head dirty_pages; /* list of dirty pages */ struct list_head locked_pages; /* list of locked pages */ @@ -328,7 +348,7 @@ struct address_space { struct address_space_operations *a_ops; /* methods */ struct list_head i_mmap; /* list of private mappings */ struct list_head i_mmap_shared; /* list of shared mappings */ - struct semaphore i_shared_sem; /* protect both above lists */ + spinlock_t i_shared_lock; /* protect both above lists */ atomic_t truncate_count; /* Cover race condition with truncate */ unsigned long dirtied_when; /* jiffies of first page dirtying */ unsigned long flags; /* error bits/gfp mask */ @@ -1392,9 +1412,6 @@ struct tree_descr { char *name; struct f extern int simple_fill_super(struct super_block *, int, struct tree_descr *); extern int simple_pin_fs(char *name, struct vfsmount **mount, int *count); extern void simple_release_fs(struct vfsmount **mount, int *count); -extern int old_valid_dev(dev_t); -extern u16 old_encode_dev(dev_t); -extern dev_t old_decode_dev(u16); extern int inode_change_ok(struct inode *, struct iattr *); extern int inode_setattr(struct inode *, struct iattr *); diff -prauN linux-2.6.0-test5/include/linux/ftape.h wli-2.6.0-test5-bk12-25/include/linux/ftape.h --- linux-2.6.0-test5/include/linux/ftape.h 2003-09-08 12:50:14.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/ftape.h 2003-09-25 19:16:13.000000000 -0700 @@ -199,8 +199,6 @@ typedef union { #define ABS(a) ((a) < 0 ? -(a) : (a)) #define NR_ITEMS(x) (int)(sizeof(x)/ sizeof(*x)) -extern int ftape_init(void); - #endif /* __KERNEL__ */ #endif diff -prauN linux-2.6.0-test5/include/linux/gfp.h wli-2.6.0-test5-bk12-25/include/linux/gfp.h --- linux-2.6.0-test5/include/linux/gfp.h 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/gfp.h 2003-09-25 20:26:41.000000000 -0700 @@ -79,6 +79,7 @@ static inline struct page * alloc_pages_ extern unsigned long FASTCALL(__get_free_pages(unsigned int gfp_mask, unsigned int order)); extern unsigned long FASTCALL(get_zeroed_page(unsigned int gfp_mask)); +void free_pages_bulk(struct zone *zone, struct page *page, unsigned int order); #define __get_free_page(gfp_mask) \ __get_free_pages((gfp_mask),0) diff -prauN linux-2.6.0-test5/include/linux/hugetlb.h wli-2.6.0-test5-bk12-25/include/linux/hugetlb.h --- linux-2.6.0-test5/include/linux/hugetlb.h 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/hugetlb.h 2003-09-28 21:47:08.000000000 -0700 @@ -41,6 +41,11 @@ mark_mm_hugetlb(struct mm_struct *mm, st #define is_hugepage_only_range(addr, len) 0 #endif +#define vm_account_huge_inc(vma, pte, addr) \ + vm_account(vma, pte, addr, HPAGE_SIZE/PAGE_SIZE) +#define vm_account_huge_dec(vma, pte, addr) \ + vm_account(vma, pte, addr, -(HPAGE_SIZE/PAGE_SIZE)) + #else /* !CONFIG_HUGETLB_PAGE */ static inline int is_vm_hugetlb_page(struct vm_area_struct *vma) @@ -98,6 +103,8 @@ static inline struct hugetlbfs_sb_info * extern struct file_operations hugetlbfs_file_operations; extern struct vm_operations_struct hugetlb_vm_ops; struct file *hugetlb_zero_setup(size_t); +int hugetlb_get_quota(struct address_space *mapping); +void hugetlb_put_quota(struct address_space *mapping); static inline int is_file_hugepages(struct file *file) { diff -prauN linux-2.6.0-test5/include/linux/i2c-id.h wli-2.6.0-test5-bk12-25/include/linux/i2c-id.h --- linux-2.6.0-test5/include/linux/i2c-id.h 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/i2c-id.h 2003-09-25 19:16:13.000000000 -0700 @@ -100,7 +100,7 @@ #define I2C_DRIVERID_STM41T00 52 /* real time clock */ #define I2C_DRIVERID_UDA1342 53 /* UDA1342 audio codec */ #define I2C_DRIVERID_ADV7170 54 /* video encoder */ - +#define I2C_DRIVERID_RADEON 55 /* I2C bus on Radeon boards */ #define I2C_DRIVERID_EXP0 0xF0 /* experimental use id's */ diff -prauN linux-2.6.0-test5/include/linux/i2c.h wli-2.6.0-test5-bk12-25/include/linux/i2c.h --- linux-2.6.0-test5/include/linux/i2c.h 2003-09-08 12:49:54.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/i2c.h 2003-09-25 19:16:13.000000000 -0700 @@ -28,9 +28,6 @@ #ifndef _LINUX_I2C_H #define _LINUX_I2C_H -#define I2C_DATE "20021208" -#define I2C_VERSION "2.7.0" - #include #include #include @@ -146,6 +143,8 @@ struct i2c_driver { extern struct bus_type i2c_bus_type; +#define I2C_NAME_SIZE 50 + /* * i2c_client identifies a single device (i.e. chip) that is connected to an * i2c bus. The behaviour is defined by the routines of the driver. This @@ -166,7 +165,7 @@ struct i2c_client { /* to the client */ struct device dev; /* the device structure */ struct list_head list; - char name[DEVICE_NAME_SIZE]; + char name[I2C_NAME_SIZE]; struct completion released; }; #define to_i2c_client(d) container_of(d, struct i2c_client, dev) @@ -253,7 +252,7 @@ struct i2c_adapter { int nr; struct list_head clients; struct list_head list; - char name[DEVICE_NAME_SIZE]; + char name[I2C_NAME_SIZE]; struct completion dev_released; struct completion class_dev_released; }; diff -prauN linux-2.6.0-test5/include/linux/if_frad.h wli-2.6.0-test5-bk12-25/include/linux/if_frad.h --- linux-2.6.0-test5/include/linux/if_frad.h 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/if_frad.h 2003-09-25 19:16:13.000000000 -0700 @@ -191,9 +191,6 @@ struct frad_local int buffer; /* current buffer for S508 firmware */ }; -int register_frad(const char *name); -int unregister_frad(const char *name); - extern void dlci_ioctl_set(int (*hook)(unsigned int, void *)); #endif /* __KERNEL__ */ diff -prauN linux-2.6.0-test5/include/linux/input.h wli-2.6.0-test5-bk12-25/include/linux/input.h --- linux-2.6.0-test5/include/linux/input.h 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/input.h 2003-09-25 19:16:13.000000000 -0700 @@ -751,7 +751,7 @@ struct ff_effect { #define LONG(x) ((x)/BITS_PER_LONG) #define INPUT_KEYCODE(dev, scancode) ((dev->keycodesize == 1) ? ((u8*)dev->keycode)[scancode] : \ - ((dev->keycodesize == 1) ? ((u16*)dev->keycode)[scancode] : (((u32*)dev->keycode)[scancode]))) + ((dev->keycodesize == 2) ? ((u16*)dev->keycode)[scancode] : (((u32*)dev->keycode)[scancode]))) #define init_input_dev(dev) do { INIT_LIST_HEAD(&((dev)->h_list)); INIT_LIST_HEAD(&((dev)->node)); } while (0) diff -prauN linux-2.6.0-test5/include/linux/interrupt.h wli-2.6.0-test5-bk12-25/include/linux/interrupt.h --- linux-2.6.0-test5/include/linux/interrupt.h 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/interrupt.h 2003-09-25 19:16:13.000000000 -0700 @@ -3,6 +3,7 @@ #define _LINUX_INTERRUPT_H #include +#include #include #include #include diff -prauN linux-2.6.0-test5/include/linux/ipv6.h wli-2.6.0-test5-bk12-25/include/linux/ipv6.h --- linux-2.6.0-test5/include/linux/ipv6.h 2003-09-08 12:50:17.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/ipv6.h 2003-09-25 19:16:13.000000000 -0700 @@ -122,6 +122,52 @@ struct ipv6hdr { struct in6_addr daddr; }; +/* + * This structure contains configuration options per IPv6 link. + */ +struct ipv6_devconf { + __s32 forwarding; + __s32 hop_limit; + __s32 mtu6; + __s32 accept_ra; + __s32 accept_redirects; + __s32 autoconf; + __s32 dad_transmits; + __s32 rtr_solicits; + __s32 rtr_solicit_interval; + __s32 rtr_solicit_delay; +#ifdef CONFIG_IPV6_PRIVACY + __s32 use_tempaddr; + __s32 temp_valid_lft; + __s32 temp_prefered_lft; + __s32 regen_max_retry; + __s32 max_desync_factor; +#endif + void *sysctl; +}; + +/* index values for the variables in ipv6_devconf */ +enum { + DEVCONF_FORWARDING = 0, + DEVCONF_HOPLIMIT, + DEVCONF_MTU6, + DEVCONF_ACCEPT_RA, + DEVCONF_ACCEPT_REDIRECTS, + DEVCONF_AUTOCONF, + DEVCONF_DAD_TRANSMITS, + DEVCONF_RTR_SOLICITS, + DEVCONF_RTR_SOLICIT_INTERVAL, + DEVCONF_RTR_SOLICIT_DELAY, +#ifdef CONFIG_IPV6_PRIVACY + DEVCONF_USE_TEMPADDR, + DEVCONF_TEMP_VALID_LFT, + DEVCONF_TEMP_PREFERED_LFT, + DEVCONF_REGEN_MAX_RETRY, + DEVCONF_MAX_DESYNC_FACTOR, +#endif + DEVCONF_MAX +}; + #ifdef __KERNEL__ #include /* struct sockaddr_in6 */ #include diff -prauN linux-2.6.0-test5/include/linux/kdev_t.h wli-2.6.0-test5-bk12-25/include/linux/kdev_t.h --- linux-2.6.0-test5/include/linux/kdev_t.h 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/kdev_t.h 2003-09-25 19:16:13.000000000 -0700 @@ -1,8 +1,7 @@ #ifndef _LINUX_KDEV_T_H #define _LINUX_KDEV_T_H #ifdef __KERNEL__ -/* These are for user-level "dev_t" */ -#define MINORBITS 8 +#define MINORBITS 20 #define MINORMASK ((1U << MINORBITS) - 1) #define MAJOR(dev) ((unsigned int) ((dev) >> MINORBITS)) @@ -18,6 +17,77 @@ buffer; \ }) +/* acceptable for old filesystems */ +static inline int old_valid_dev(dev_t dev) +{ + return MAJOR(dev) < 256 && MINOR(dev) < 256; +} + +static inline u16 old_encode_dev(dev_t dev) +{ + return (MAJOR(dev) << 8) | MINOR(dev); +} + +static inline dev_t old_decode_dev(u16 val) +{ + return MKDEV((val >> 8) & 255, val & 255); +} + +static inline int new_valid_dev(dev_t dev) +{ + return 1; +} + +static inline u32 new_encode_dev(dev_t dev) +{ + unsigned major = MAJOR(dev); + unsigned minor = MINOR(dev); + return (minor & 0xff) | (major << 8) | ((minor & ~0xff) << 12); +} + +static inline dev_t new_decode_dev(u32 dev) +{ + unsigned major = (dev & 0xfff00) >> 8; + unsigned minor = (dev & 0xff) | ((dev >> 12) & 0xfff00); + return MKDEV(major, minor); +} + +static inline int huge_valid_dev(dev_t dev) +{ + return 1; +} + +static inline u64 huge_encode_dev(dev_t dev) +{ + return new_encode_dev(dev); +} + +static inline dev_t huge_decode_dev(u64 dev) +{ + return new_decode_dev(dev); +} + +static inline int sysv_valid_dev(dev_t dev) +{ + return MAJOR(dev) < (1<<14) && MINOR(dev) < (1<<18); +} + +static inline u32 sysv_encode_dev(dev_t dev) +{ + return MINOR(dev) | (MAJOR(dev) << 18); +} + +static inline unsigned sysv_major(u32 dev) +{ + return (dev >> 18) & 0x3fff; +} + +static inline unsigned sysv_minor(u32 dev) +{ + return dev & 0x3ffff; +} + + #else /* __KERNEL__ */ /* diff -prauN linux-2.6.0-test5/include/linux/kernel.h wli-2.6.0-test5-bk12-25/include/linux/kernel.h --- linux-2.6.0-test5/include/linux/kernel.h 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/kernel.h 2003-09-25 19:16:13.000000000 -0700 @@ -15,10 +15,6 @@ #include #include -/* Optimization barrier */ -/* The "volatile" is due to gcc bugs */ -#define barrier() __asm__ __volatile__("": : :"memory") - #define INT_MAX ((int)(~0U>>1)) #define INT_MIN (-INT_MAX - 1) #define UINT_MAX (~0U) diff -prauN linux-2.6.0-test5/include/linux/llc.h wli-2.6.0-test5-bk12-25/include/linux/llc.h --- linux-2.6.0-test5/include/linux/llc.h 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/llc.h 2003-09-25 19:16:13.000000000 -0700 @@ -79,13 +79,5 @@ enum llc_sockopts { #define LLC_SAP_DYN_TRIES 4 #define llc_ui_skb_cb(__skb) ((struct sockaddr_llc *)&((__skb)->cb[0])) - -#ifdef CONFIG_LLC_UI -extern int llc_ui_init(void); -extern void llc_ui_exit(void); -#else -#define llc_ui_init() -#define llc_ui_exit() -#endif #endif /* __KERNEL__ */ #endif /* __LINUX_LLC_H */ diff -prauN linux-2.6.0-test5/include/linux/major.h wli-2.6.0-test5-bk12-25/include/linux/major.h --- linux-2.6.0-test5/include/linux/major.h 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/major.h 2003-09-25 19:16:13.000000000 -0700 @@ -160,34 +160,4 @@ #define IBM_TTY3270_MAJOR 227 #define IBM_FS3270_MAJOR 228 -/* - * Tests for SCSI devices. - */ - -#define SCSI_DISK_MAJOR(M) ((M) == SCSI_DISK0_MAJOR || \ - ((M) >= SCSI_DISK1_MAJOR && (M) <= SCSI_DISK7_MAJOR) || \ - ((M) >= SCSI_DISK8_MAJOR && (M) <= SCSI_DISK15_MAJOR)) - -#define SCSI_BLK_MAJOR(M) \ - (SCSI_DISK_MAJOR(M) \ - || (M) == SCSI_CDROM_MAJOR) - -static __inline__ int scsi_blk_major(int m) { - return SCSI_BLK_MAJOR(m); -} - -/* - * Tests for IDE devices - */ -#define IDE_DISK_MAJOR(M) ((M) == IDE0_MAJOR || (M) == IDE1_MAJOR || \ - (M) == IDE2_MAJOR || (M) == IDE3_MAJOR || \ - (M) == IDE4_MAJOR || (M) == IDE5_MAJOR || \ - (M) == IDE6_MAJOR || (M) == IDE7_MAJOR || \ - (M) == IDE8_MAJOR || (M) == IDE9_MAJOR) - -static __inline__ int ide_blk_major(int m) -{ - return IDE_DISK_MAJOR(m); -} - #endif diff -prauN linux-2.6.0-test5/include/linux/miscdevice.h wli-2.6.0-test5-bk12-25/include/linux/miscdevice.h --- linux-2.6.0-test5/include/linux/miscdevice.h 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/miscdevice.h 2003-09-25 19:16:13.000000000 -0700 @@ -36,14 +36,12 @@ #define TUN_MINOR 200 -extern int misc_init(void); - struct miscdevice { int minor; const char *name; struct file_operations *fops; - struct miscdevice * next, * prev; + struct list_head list; char devfs_name[64]; }; diff -prauN linux-2.6.0-test5/include/linux/mm.h wli-2.6.0-test5-bk12-25/include/linux/mm.h --- linux-2.6.0-test5/include/linux/mm.h 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/mm.h 2003-09-29 01:17:14.000000000 -0700 @@ -12,6 +12,7 @@ #include #include #include +#include #ifndef CONFIG_DISCONTIGMEM /* Don't use mapnrs, do it properly */ extern unsigned long max_mapnr; @@ -77,6 +78,7 @@ struct vm_area_struct { units, *not* PAGE_CACHE_SIZE */ struct file * vm_file; /* File we map to (can be NULL). */ void * vm_private_data; /* was vm_pte (shared mem) */ + struct rcu_head rcu; }; /* @@ -111,6 +113,7 @@ struct vm_area_struct { #define VM_ACCOUNT 0x00100000 /* Is a VM accounted object */ #define VM_HUGETLB 0x00400000 /* Huge TLB Page VM */ #define VM_NONLINEAR 0x00800000 /* Is non-linear (remap_file_pages) */ +#define VM_DEAD 0x01000000 /* vma is dead, don't touch */ #ifndef VM_STACK_DEFAULT_FLAGS /* arch can override this */ #define VM_STACK_DEFAULT_FLAGS VM_DATA_DEFAULT_FLAGS @@ -147,8 +150,6 @@ struct vm_operations_struct { int (*populate)(struct vm_area_struct * area, unsigned long address, unsigned long len, pgprot_t prot, unsigned long pgoff, int nonblock); }; -/* forward declaration; pte_chain is meant to be internal to rmap.c */ -struct pte_chain; struct mmu_gather; struct inode; @@ -172,15 +173,12 @@ struct page { updated asynchronously */ atomic_t count; /* Usage count, see below. */ struct list_head list; /* ->mapping has some page lists. */ - struct address_space *mapping; /* The inode (or ...) we belong to. */ + unsigned long __mapping; /* The inode (or ...) we belong to. */ unsigned long index; /* Our offset within mapping. */ struct list_head lru; /* Pageout list, eg. active_list; protected by zone->lru_lock !! */ - union { - struct pte_chain *chain;/* Reverse pte mapping pointer. - * protected by PG_chainlock */ - pte_addr_t direct; - } pte; + atomic_t mapcount; + struct rmap_chain *chain; unsigned long private; /* mapping-private opaque data */ /* @@ -376,13 +374,41 @@ void page_address_init(void); #endif /* + * On an anonymous page mapped into a user virutal memory area, + * page->mapping points to its anonmm, not to a struct address_space. + * + * Please note that, confusingly, page_mapping() refers to the inode + * struct address_space which maps the page from disk, where page_mapped() + * refers to whether it's mapped into a user virtual address space. + */ +static inline struct address_space *page_mapping(struct page *page) +{ + if (PageAnon(page)) + return NULL; + else + return (struct address_space *)page->__mapping; +} + +struct anon; +static inline struct anon *page_anon(struct page *page) +{ + BUG_ON(!PageAnon(page)); + return (struct anon *)page->__mapping; +} + +static inline void set_page_mapping(struct page *page, void *ptr) +{ + page->__mapping = (unsigned long)ptr; +} + +/* * Return true if this page is mapped into pagetables. Subtle: test pte.direct * rather than pte.chain. Because sometimes pte.direct is 64-bit, and .chain * is only 32-bit. */ static inline int page_mapped(struct page *page) { - return page->pte.direct != 0; + return atomic_read(&page->mapcount) != 0; } /* @@ -429,24 +455,29 @@ extern void invalidate_mmap_range(struct loff_t const holelen); extern int vmtruncate(struct inode * inode, loff_t offset); extern pmd_t *FASTCALL(__pmd_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address)); +pmd_t *FASTCALL(__pmd_alloc_kernel(struct mm_struct *mm, pgd_t *pmd, unsigned long address)); extern pte_t *FASTCALL(pte_alloc_kernel(struct mm_struct *mm, pmd_t *pmd, unsigned long address)); -extern pte_t *FASTCALL(pte_alloc_map(struct mm_struct *mm, pmd_t *pmd, unsigned long address)); +pte_t *FASTCALL(pte_alloc_map(struct mm_struct *mm, pgd_t *pgd, pmd_t **pmd, unsigned long address)); extern int install_page(struct mm_struct *mm, struct vm_area_struct *vma, unsigned long addr, struct page *page, pgprot_t prot); +extern int install_file_pte(struct mm_struct *mm, struct vm_area_struct *vma, unsigned long addr, unsigned long pgoff, pgprot_t prot); extern int handle_mm_fault(struct mm_struct *mm,struct vm_area_struct *vma, unsigned long address, int write_access); extern int make_pages_present(unsigned long addr, unsigned long end); extern int access_process_vm(struct task_struct *tsk, unsigned long addr, void *buf, int len, int write); extern long sys_remap_file_pages(unsigned long start, unsigned long size, unsigned long prot, unsigned long pgoff, unsigned long nonblock); extern long sys_fadvise64_64(int fd, loff_t offset, loff_t len, int advice); -void put_dirty_page(struct task_struct *tsk, struct page *page, - unsigned long address, pgprot_t prot); +void put_dirty_page(task_t *task, struct vm_area_struct *vma, + struct page *page, unsigned long address, pgprot_t prot); int get_user_pages(struct task_struct *tsk, struct mm_struct *mm, unsigned long start, int len, int write, int force, struct page **pages, struct vm_area_struct **vmas); -int __set_page_dirty_buffers(struct page *page); -int __set_page_dirty_nobuffers(struct page *page); +int set_page_dirty(struct page *page); +int set_page_dirty_buffers(struct page *page); +int set_page_dirty_nobuffers(struct page *page); int set_page_dirty_lock(struct page *page); +void free_vma(struct vm_area_struct *); + /* * Prototype to add a shrinker callback for ageable caches. * @@ -471,33 +502,15 @@ extern struct shrinker *set_shrinker(int extern void remove_shrinker(struct shrinker *shrinker); /* - * If the mapping doesn't provide a set_page_dirty a_op, then - * just fall through and assume that it wants buffer_heads. - * FIXME: make the method unconditional. - */ -static inline int set_page_dirty(struct page *page) -{ - if (page->mapping) { - int (*spd)(struct page *); - - spd = page->mapping->a_ops->set_page_dirty; - if (spd) - return (*spd)(page); - } - return __set_page_dirty_buffers(page); -} - -/* * On a two-level page table, this ends up being trivial. Thus the * inlining and the symmetry break with pte_alloc_map() that does all * of this out-of-line. */ -static inline pmd_t *pmd_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address) -{ - if (pgd_none(*pgd)) - return __pmd_alloc(mm, pgd, address); - return pmd_offset(pgd, address); -} +#define pmd_alloc_map(mm, pgd, addr) \ + (pgd_none(*(pgd))? __pmd_alloc(mm,pgd,addr): pmd_offset_map(pgd,addr)) + +#define pmd_alloc_kernel(mm, pgd, addr) \ + (pgd_none(*(pgd))? __pmd_alloc_kernel(mm,pgd,addr): pmd_offset_kernel(pgd,addr)) extern void free_area_init(unsigned long * zones_size); extern void free_area_init_node(int nid, pg_data_t *pgdat, struct page *pmap, @@ -621,6 +634,75 @@ kernel_map_pages(struct page *page, int { } #endif + + static inline void vm_account(struct vm_area_struct *vma, pte_t pte, + unsigned long addr, long adjustment) + { + struct mm_struct *mm = vma->vm_mm; + unsigned long pfn; + struct page *page; + + if (!pte_present(pte)) + return; + + pfn = pte_pfn(pte); + if (!pfn_valid(pfn)) + goto out; + + page = pfn_to_page(pfn); + if (PageReserved(page)) + goto out; + + if (vma->vm_flags & VM_EXECUTABLE) + mm->text += adjustment; + else if (vma->vm_flags & (VM_STACK_FLAGS & (VM_GROWSUP | VM_GROWSDOWN))) { + mm->data += adjustment; + mm->stack += adjustment; + } else if (addr >= TASK_UNMAPPED_BASE) + mm->lib += adjustment; + else + mm->data += adjustment; + + if (page_mapping(page)) + mm->shared += adjustment; + + out: + if (pte_write(pte)) + mm->dirty += adjustment; + } + + #define vm_account_inc(vma, pte, addr) vm_account(vma, pte, addr, +1) + #define vm_account_dec(vma, pte, addr) vm_account(vma, pte, addr, -1) + + static inline void vm_ptep_set_wrprotect(struct mm_struct *mm, pte_t *pte) + { + if (pte_write(*pte)) + mm->dirty--; + ptep_set_wrprotect(pte); + } + + static inline void vm_set_pte(struct vm_area_struct *vma, pte_t *dst, + pte_t val, unsigned long addr) + { + vm_account_inc(vma, val, addr); + set_pte(dst, val); + } + + static inline pte_t vm_ptep_get_and_clear(struct vm_area_struct *vma, + pte_t *pte, unsigned long addr) + { + pte_t val = ptep_get_and_clear(pte); + vm_account_dec(vma, val, addr); + return val; + } + + static inline void vm_pte_clear(struct vm_area_struct *vma, pte_t *pte, + unsigned long addr) + { + pte_t val = *pte; + pte_clear(pte); + vm_account_dec(vma, val, addr); + } #endif /* __KERNEL__ */ #endif /* _LINUX_MM_H */ diff -prauN linux-2.6.0-test5/include/linux/mmzone.h wli-2.6.0-test5-bk12-25/include/linux/mmzone.h --- linux-2.6.0-test5/include/linux/mmzone.h 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/mmzone.h 2003-09-25 20:17:49.000000000 -0700 @@ -26,8 +26,8 @@ #endif struct free_area { - struct list_head free_list; - unsigned long *map; + struct list_head free_list, deferred_pages; + unsigned long *map, globally_free, active, locally_free; }; struct pglist_data; diff -prauN linux-2.6.0-test5/include/linux/netdevice.h wli-2.6.0-test5-bk12-25/include/linux/netdevice.h --- linux-2.6.0-test5/include/linux/netdevice.h 2003-09-08 12:50:31.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/netdevice.h 2003-09-25 19:16:13.000000000 -0700 @@ -28,8 +28,6 @@ #include #include #include -#include -#include #include #include @@ -37,6 +35,8 @@ #ifdef __KERNEL__ #include +#include +#include struct divert_blk; struct vlan_group; @@ -502,7 +502,11 @@ extern struct net_device *dev_getbyhw extern void dev_add_pack(struct packet_type *pt); extern void dev_remove_pack(struct packet_type *pt); extern void __dev_remove_pack(struct packet_type *pt); -extern int dev_get(const char *name); +extern int __dev_get(const char *name); +static inline int __deprecated dev_get(const char *name) +{ + return __dev_get(name); +} extern struct net_device *dev_get_by_flags(unsigned short flags, unsigned short mask); extern struct net_device *__dev_get_by_flags(unsigned short flags, diff -prauN linux-2.6.0-test5/include/linux/netfilter_ipv4/ipt_physdev.h wli-2.6.0-test5-bk12-25/include/linux/netfilter_ipv4/ipt_physdev.h --- linux-2.6.0-test5/include/linux/netfilter_ipv4/ipt_physdev.h 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/netfilter_ipv4/ipt_physdev.h 2003-09-25 19:16:13.000000000 -0700 @@ -13,12 +13,12 @@ #define IPT_PHYSDEV_OP_MASK (0x20 - 1) struct ipt_physdev_info { - u_int8_t invert; - u_int8_t bitmask; char physindev[IFNAMSIZ]; char in_mask[IFNAMSIZ]; char physoutdev[IFNAMSIZ]; char out_mask[IFNAMSIZ]; + u_int8_t invert; + u_int8_t bitmask; }; #endif /*_IPT_PHYSDEV_H*/ diff -prauN linux-2.6.0-test5/include/linux/nfs4.h wli-2.6.0-test5-bk12-25/include/linux/nfs4.h --- linux-2.6.0-test5/include/linux/nfs4.h 2003-09-08 12:50:04.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/nfs4.h 2003-09-25 19:16:13.000000000 -0700 @@ -134,6 +134,15 @@ enum open_delegation_type4 { NFS4_OPEN_DELEGATE_WRITE = 2 }; +enum lock_type4 { + NFS4_UNLOCK_LT = 0, + NFS4_READ_LT = 1, + NFS4_WRITE_LT = 2, + NFS4_READW_LT = 3, + NFS4_WRITEW_LT = 4 +}; + + /* Mandatory Attributes */ #define FATTR4_WORD0_SUPPORTED_ATTRS (1) #define FATTR4_WORD0_TYPE (1 << 1) diff -prauN linux-2.6.0-test5/include/linux/nfsd/export.h wli-2.6.0-test5-bk12-25/include/linux/nfsd/export.h --- linux-2.6.0-test5/include/linux/nfsd/export.h 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/nfsd/export.h 2003-09-25 19:16:13.000000000 -0700 @@ -65,7 +65,7 @@ struct svc_expkey { struct auth_domain * ek_client; int ek_fsidtype; - u32 ek_fsid[2]; + u32 ek_fsid[3]; struct svc_export * ek_export; }; diff -prauN linux-2.6.0-test5/include/linux/nfsd/nfsd.h wli-2.6.0-test5-bk12-25/include/linux/nfsd/nfsd.h --- linux-2.6.0-test5/include/linux/nfsd/nfsd.h 2003-09-08 12:50:37.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/nfsd/nfsd.h 2003-09-25 19:16:14.000000000 -0700 @@ -15,6 +15,7 @@ #include #include #include +#include #include #include @@ -172,6 +173,8 @@ void nfsd_lockd_shutdown(void); #define nfserr_serverfault __constant_htonl(NFSERR_SERVERFAULT) #define nfserr_badtype __constant_htonl(NFSERR_BADTYPE) #define nfserr_jukebox __constant_htonl(NFSERR_JUKEBOX) +#define nfserr_denied __constant_htonl(NFSERR_DENIED) +#define nfserr_deadlock __constant_htonl(NFSERR_DEADLOCK) #define nfserr_expired __constant_htonl(NFSERR_EXPIRED) #define nfserr_bad_cookie __constant_htonl(NFSERR_BAD_COOKIE) #define nfserr_same __constant_htonl(NFSERR_SAME) @@ -207,6 +210,17 @@ void nfsd_lockd_shutdown(void); */ extern struct timeval nfssvc_boot; +static inline int is_fsid(struct svc_fh *fh, struct knfsd_fh *reffh) +{ + if (fh->fh_export->ex_flags & NFSEXP_FSID) { + struct vfsmount *mnt = fh->fh_export->ex_mnt; + if (!old_valid_dev(mnt->mnt_sb->s_dev) || + (reffh->fh_version == 1 && reffh->fh_fsid_type == 1)) + return 1; + } + return 0; +} + #ifdef CONFIG_NFSD_V4 diff -prauN linux-2.6.0-test5/include/linux/nfsd/nfsfh.h wli-2.6.0-test5-bk12-25/include/linux/nfsd/nfsfh.h --- linux-2.6.0-test5/include/linux/nfsd/nfsfh.h 2003-09-08 12:50:09.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/nfsd/nfsfh.h 2003-09-25 19:16:14.000000000 -0700 @@ -117,26 +117,6 @@ struct knfsd_fh { #ifdef __KERNEL__ -/* - * Conversion macros for the filehandle fields. - * - * Keep the device numbers in "backwards compatible - * format", ie the low 16 bits contain the low 8 bits - * of the 20-bit minor and the 12-bit major number. - * - * The high 16 bits contain the rest (4 bits major - * and 12 bits minor), - */ - -static inline dev_t u32_to_dev_t(__u32 udev) -{ - unsigned int minor, major; - - minor = (udev & 0xff) | ((udev >> 8) & 0xfff00); - major = ((udev >> 8) & 0xff) | ((udev >> 20) & 0xf00); - return MKDEV(major, minor); -} - static inline __u32 ino_t_to_u32(ino_t ino) { return (__u32) ino; @@ -196,6 +176,12 @@ static inline void mk_fsid_v1(u32 *fsidv fsidv[0] = fsid; } +static inline void mk_fsid_v2(u32 *fsidv, dev_t dev, ino_t ino) +{ + fsidv[0] = htonl(MAJOR(dev)); + fsidv[1] = htonl(MINOR(dev)); + fsidv[2] = ino_t_to_u32(ino); +} /* * Shorthand for dprintk()'s diff -prauN linux-2.6.0-test5/include/linux/nfsd/state.h wli-2.6.0-test5-bk12-25/include/linux/nfsd/state.h --- linux-2.6.0-test5/include/linux/nfsd/state.h 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/nfsd/state.h 2003-09-25 19:16:14.000000000 -0700 @@ -95,22 +95,52 @@ update_stateid(stateid_t *stateid) stateid->si_generation++; } +/* A reasonable value for REPLAY_ISIZE was estimated as follows: + * The OPEN response, typically the largest, requires + * 4(status) + 8(stateid) + 20(changeinfo) + 4(rflags) + 8(verifier) + + * 4(deleg. type) + 8(deleg. stateid) + 4(deleg. recall flag) + + * 20(deleg. space limit) + ~32(deleg. ace) = 112 bytes + */ + +#define NFSD4_REPLAY_ISIZE 112 + +/* + * Replay buffer, where the result of the last seqid-mutating operation + * is cached. + */ +struct nfs4_replay { + u32 rp_status; + unsigned int rp_buflen; + char *rp_buf; + unsigned intrp_allocated; + char rp_ibuf[NFSD4_REPLAY_ISIZE]; +}; + /* -* nfs4_stateowner can either be an open_owner, or (eventually) a lock_owner +* nfs4_stateowner can either be an open_owner, or a lock_owner * -* o so_peropenstate list is used to ensure no dangling nfs4_stateid -* reverences when we release a stateowner. +* so_idhash: stateid_hashtbl[] for open owner, lockstateid_hashtbl[] +* for lock_owner +* so_strhash: ownerstr_hashtbl[] for open_owner, lock_ownerstr_hashtbl[] +* for lock_owner +* so_perclient: nfs4_client->cl_perclient entry - used when nfs4_client +* struct is reaped. +* so_perfilestate: heads the list of nfs4_stateid (either open or lock) +* and is used to ensure no dangling nfs4_stateid references when we +* release a stateowner. */ struct nfs4_stateowner { struct list_head so_idhash; /* hash by so_id */ struct list_head so_strhash; /* hash by op_name */ struct list_head so_perclient; /* nfs4_client->cl_perclient */ - struct list_head so_peropenstate; /* list: nfs4_stateid */ + struct list_head so_perfilestate; /* list: nfs4_stateid */ + int so_is_open_owner; /* 1=openowner,0=lockowner */ u32 so_id; struct nfs4_client * so_client; u32 so_seqid; struct xdr_netobj so_owner; /* open owner name */ int so_confirmed; /* successful OPEN_CONFIRM? */ + struct nfs4_replay so_replay; }; /* @@ -123,19 +153,25 @@ struct nfs4_file { struct list_head fi_perfile; /* list: nfs4_stateid */ struct inode *fi_inode; u32 fi_id; /* used with stateowner->so_id - * for openstateid_hashtbl hash */ + * for stateid_hashtbl hash */ }; /* * nfs4_stateid can either be an open stateid or (eventually) a lock stateid * * (open)nfs4_stateid: one per (open)nfs4_stateowner, nfs4_file +* +* st_hash: stateid_hashtbl[] entry or lockstateid_hashtbl entry +* st_perfile: file_hashtbl[] entry. +* st_perfile_state: nfs4_stateowner->so_perfilestate +* st_share_access: used only for open stateid +* st_share_deny: used only for open stateid */ struct nfs4_stateid { - struct list_head st_hash; /* openstateid_hashtbl[]*/ - struct list_head st_perfile; /* file_hashtbl[]*/ - struct list_head st_peropenstate; /* nfs4_stateowner->so_peropenstate */ + struct list_head st_hash; + struct list_head st_perfile; + struct list_head st_perfilestate; struct nfs4_stateowner * st_stateowner; struct nfs4_file * st_file; stateid_t st_stateid; @@ -148,6 +184,9 @@ struct nfs4_stateid { /* flags for preprocess_seqid_op() */ #define CHECK_FH 0x00000001 #define CONFIRM 0x00000002 +#define OPEN_STATE 0x00000004 +#define LOCK_STATE 0x00000008 +#define RDWR_STATE 0x00000010 #define seqid_mutating_err(err) \ (((err) != nfserr_stale_clientid) && \ @@ -161,6 +200,6 @@ extern int nfs4_preprocess_stateid_op(st stateid_t *stateid, int flags, struct nfs4_stateid **stpp); extern int nfs4_share_conflict(struct svc_fh *current_fh, unsigned int deny_type); -extern void nfsd4_lock_state(void); -extern void nfsd4_unlock_state(void); +extern void nfs4_lock_state(void); +extern void nfs4_unlock_state(void); #endif /* NFSD4_STATE_H */ diff -prauN linux-2.6.0-test5/include/linux/nfsd/xdr4.h wli-2.6.0-test5-bk12-25/include/linux/nfsd/xdr4.h --- linux-2.6.0-test5/include/linux/nfsd/xdr4.h 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/nfsd/xdr4.h 2003-09-25 19:16:14.000000000 -0700 @@ -40,6 +40,7 @@ #define _LINUX_NFSD_XDR4_H #define NFSD4_MAX_TAGLEN 128 +#define XDR_LEN(n) (((n) + 3) & ~3) typedef u32 delegation_zero_t; typedef u32 delegation_boot_t; @@ -111,6 +112,78 @@ struct nfsd4_link { struct nfsd4_change_info li_cinfo; /* response */ }; +struct nfsd4_lock_denied { + struct nfs4_stateowner *ld_sop; + u64 ld_start; + u64 ld_length; + u32 ld_type; +}; + +struct nfsd4_lock { + /* request */ + u32 lk_type; + u32 lk_reclaim; /* boolean */ + u64 lk_offset; + u64 lk_length; + u32 lk_is_new; + union { + struct { + u32 open_seqid; + stateid_t open_stateid; + u32 lock_seqid; + clientid_t clientid; + struct xdr_netobj owner; + } new; + struct { + stateid_t lock_stateid; + u32 lock_seqid; + } old; + } v; + + /* response */ + union { + struct { + stateid_t stateid; + } ok; + struct nfsd4_lock_denied denied; + } u; + + struct nfs4_stateowner *lk_stateowner; +}; +#define lk_new_open_seqid v.new.open_seqid +#define lk_new_open_stateid v.new.open_stateid +#define lk_new_lock_seqid v.new.lock_seqid +#define lk_new_clientid v.new.clientid +#define lk_new_owner v.new.owner +#define lk_old_lock_stateid v.old.lock_stateid +#define lk_old_lock_seqid v.old.lock_seqid + +#define lk_rflags u.ok.rflags +#define lk_resp_stateid u.ok.stateid +#define lk_denied u.denied + + +struct nfsd4_lockt { + u32 lt_type; + clientid_t lt_clientid; + struct xdr_netobj lt_owner; + u64 lt_offset; + u64 lt_length; + struct nfs4_stateowner * lt_stateowner; + struct nfsd4_lock_denied lt_denied; +}; + + +struct nfsd4_locku { + u32 lu_type; + u32 lu_seqid; + stateid_t lu_stateid; + u64 lu_offset; + u64 lu_length; + struct nfs4_stateowner *lu_stateowner; +}; + + struct nfsd4_lookup { u32 lo_len; /* request */ char * lo_name; /* request */ @@ -266,6 +339,9 @@ struct nfsd4_op { struct nfsd4_getattr getattr; struct svc_fh * getfh; struct nfsd4_link link; + struct nfsd4_lock lock; + struct nfsd4_lockt lockt; + struct nfsd4_locku locku; struct nfsd4_lookup lookup; struct nfsd4_verify nverify; struct nfsd4_open open; @@ -284,6 +360,7 @@ struct nfsd4_op { struct nfsd4_verify verify; struct nfsd4_write write; } u; + struct nfs4_replay * replay; }; struct nfsd4_compoundargs { @@ -339,6 +416,7 @@ int nfs4svc_decode_compoundargs(struct s int nfs4svc_encode_compoundres(struct svc_rqst *, u32 *, struct nfsd4_compoundres *); void nfsd4_encode_operation(struct nfsd4_compoundres *, struct nfsd4_op *); +void nfsd4_encode_replay(struct nfsd4_compoundres *resp, struct nfsd4_op *op); int nfsd4_encode_fattr(struct svc_fh *fhp, struct svc_export *exp, struct dentry *dentry, u32 *buffer, int *countp, u32 *bmval); @@ -355,6 +433,12 @@ extern int nfsd4_close(struct svc_rqst struct nfsd4_close *close); extern int nfsd4_open_downgrade(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_open_downgrade *od); +extern int nfsd4_lock(struct svc_rqst *rqstp, struct svc_fh *current_fh, + struct nfsd4_lock *lock); +extern int nfsd4_lockt(struct svc_rqst *rqstp, struct svc_fh *current_fh, + struct nfsd4_lockt *lockt); +extern int nfsd4_locku(struct svc_rqst *rqstp, struct svc_fh *current_fh, + struct nfsd4_locku *locku); #endif /* diff -prauN linux-2.6.0-test5/include/linux/nls.h wli-2.6.0-test5-bk12-25/include/linux/nls.h --- linux-2.6.0-test5/include/linux/nls.h 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/nls.h 2003-09-25 19:16:14.000000000 -0700 @@ -8,6 +8,7 @@ typedef __u16 wchar_t; struct nls_table { char *charset; + char *alias; int (*uni2char) (wchar_t uni, unsigned char *out, int boundlen); int (*char2uni) (const unsigned char *rawstring, int boundlen, wchar_t *uni); @@ -32,5 +33,7 @@ extern int utf8_mbstowcs(wchar_t *, cons extern int utf8_wctomb(__u8 *, wchar_t, int); extern int utf8_wcstombs(__u8 *, const wchar_t *, int); +#define MODULE_ALIAS_NLS(name) MODULE_ALIAS("nls_" __stringify(name)) + #endif /* _LINUX_NLS_H */ diff -prauN linux-2.6.0-test5/include/linux/page-flags.h wli-2.6.0-test5-bk12-25/include/linux/page-flags.h --- linux-2.6.0-test5/include/linux/page-flags.h 2003-09-08 12:50:17.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/page-flags.h 2003-09-29 01:17:14.000000000 -0700 @@ -69,12 +69,13 @@ #define PG_private 12 /* Has something at ->private */ #define PG_writeback 13 /* Page is under writeback */ #define PG_nosave 14 /* Used for system suspend/resume */ -#define PG_chainlock 15 /* lock bit for ->pte_chain */ +#define PG_rmaplock 15 /* lock bit for ->pte_chain */ -#define PG_direct 16 /* ->pte_chain points directly at pte */ -#define PG_mappedtodisk 17 /* Has blocks allocated on-disk */ -#define PG_reclaim 18 /* To be reclaimed asap */ -#define PG_compound 19 /* Part of a compound page */ +#define PG_mappedtodisk 16 /* Has blocks allocated on-disk */ +#define PG_reclaim 17 /* To be reclaimed asap */ +#define PG_compound 18 /* Part of a compound page */ +#define PG_anon 19 /* Anonymous page */ +#define PG_swapcache 20 /* Swap page; swp_entry_t in ->private */ /* @@ -87,6 +88,7 @@ struct page_state { unsigned long nr_unstable; /* NFS unstable pages */ unsigned long nr_page_table_pages;/* Pages used for pagetables */ unsigned long nr_mapped; /* mapped into pagetables */ + unsigned long nr_swapcache; /* in swapcache */ unsigned long nr_slab; /* In slab */ #define GET_PAGE_STATE_LAST nr_slab @@ -250,12 +252,6 @@ extern void get_full_page_state(struct p #define ClearPageNosave(page) clear_bit(PG_nosave, &(page)->flags) #define TestClearPageNosave(page) test_and_clear_bit(PG_nosave, &(page)->flags) -#define PageDirect(page) test_bit(PG_direct, &(page)->flags) -#define SetPageDirect(page) set_bit(PG_direct, &(page)->flags) -#define TestSetPageDirect(page) test_and_set_bit(PG_direct, &(page)->flags) -#define ClearPageDirect(page) clear_bit(PG_direct, &(page)->flags) -#define TestClearPageDirect(page) test_and_clear_bit(PG_direct, &(page)->flags) - #define PageMappedToDisk(page) test_bit(PG_mappedtodisk, &(page)->flags) #define SetPageMappedToDisk(page) set_bit(PG_mappedtodisk, &(page)->flags) #define ClearPageMappedToDisk(page) clear_bit(PG_mappedtodisk, &(page)->flags) @@ -269,15 +265,16 @@ extern void get_full_page_state(struct p #define SetPageCompound(page) set_bit(PG_compound, &(page)->flags) #define ClearPageCompound(page) clear_bit(PG_compound, &(page)->flags) -/* - * The PageSwapCache predicate doesn't use a PG_flag at this time, - * but it may again do so one day. - */ +#define PageAnon(page) test_bit(PG_anon, &(page)->flags) +#define SetPageAnon(page) set_bit(PG_anon, &(page)->flags) +#define ClearPageAnon(page) clear_bit(PG_anon, &(page)->flags) + #ifdef CONFIG_SWAP -extern struct address_space swapper_space; -#define PageSwapCache(page) ((page)->mapping == &swapper_space) +#define PageSwapCache(page) test_bit(PG_swapcache, &(page)->flags) +#define SetPageSwapCache(page) set_bit(PG_swapcache, &(page)->flags) +#define ClearPageSwapCache(page) clear_bit(PG_swapcache, &(page)->flags) #else -#define PageSwapCache(page) 0 +#define PageSwapCache(page) 0 #endif struct page; /* forward declaration */ diff -prauN linux-2.6.0-test5/include/linux/pagemap.h wli-2.6.0-test5-bk12-25/include/linux/pagemap.h --- linux-2.6.0-test5/include/linux/pagemap.h 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/pagemap.h 2003-09-28 23:04:08.000000000 -0700 @@ -139,17 +139,6 @@ static inline unsigned long get_page_cac return atomic_read(&nr_pagecache); } -static inline void ___add_to_page_cache(struct page *page, - struct address_space *mapping, unsigned long index) -{ - list_add(&page->list, &mapping->clean_pages); - page->mapping = mapping; - page->index = index; - - mapping->nrpages++; - pagecache_acct(1); -} - extern void FASTCALL(__lock_page(struct page *page)); extern void FASTCALL(unlock_page(struct page *page)); diff -prauN linux-2.6.0-test5/include/linux/pagevec.h wli-2.6.0-test5-bk12-25/include/linux/pagevec.h --- linux-2.6.0-test5/include/linux/pagevec.h 2003-09-08 12:50:41.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/pagevec.h 2003-09-29 13:42:28.000000000 -0700 @@ -4,8 +4,15 @@ * In many places it is efficient to batch an operation up against multiple * pages. A pagevec is a multipage container which is used for that. */ +#include -#define PAGEVEC_SIZE 16 +#define __MIN_PVEC_SIZE 16 +#define __MAX_PVEC_SIZE 1024 +#define __PVEC_MIN(x,y) ((x) < (y) ? (x) : (y)) +#define __PVEC_MAX(x,y) ((x) > (y) ? (x) : (y)) +#define __PVEC_SIZE (4*NR_CPUS) +#define __PAGEVEC_SIZE __PVEC_MIN(__PVEC_SIZE, __MAX_PVEC_SIZE) +#define PAGEVEC_SIZE __PVEC_MAX(__PAGEVEC_SIZE, __MIN_PVEC_SIZE) struct page; struct address_space; diff -prauN linux-2.6.0-test5/include/linux/pci-dynids.h wli-2.6.0-test5-bk12-25/include/linux/pci-dynids.h --- linux-2.6.0-test5/include/linux/pci-dynids.h 2003-09-08 12:50:20.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/pci-dynids.h 2003-09-25 19:16:14.000000000 -0700 @@ -1,6 +1,6 @@ /* * PCI defines and function prototypes - * Copyright 2003 Dell Computer Corporation + * Copyright 2003 Dell Inc. * by Matt Domsch */ diff -prauN linux-2.6.0-test5/include/linux/pid.h wli-2.6.0-test5-bk12-25/include/linux/pid.h --- linux-2.6.0-test5/include/linux/pid.h 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/pid.h 2003-09-25 20:52:36.000000000 -0700 @@ -47,6 +47,7 @@ extern void FASTCALL(detach_pid(struct t * held. */ extern struct pid *FASTCALL(find_pid(enum pid_type, int)); +int find_next_tgid(int); extern int alloc_pidmap(void); extern void FASTCALL(free_pidmap(int)); diff -prauN linux-2.6.0-test5/include/linux/pnpbios.h wli-2.6.0-test5-bk12-25/include/linux/pnpbios.h --- linux-2.6.0-test5/include/linux/pnpbios.h 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/pnpbios.h 2003-09-25 19:16:14.000000000 -0700 @@ -26,7 +26,7 @@ #ifdef __KERNEL__ #include -#include +#include /* * Return codes @@ -131,13 +131,7 @@ struct pnp_bios_node { #ifdef CONFIG_PNPBIOS /* non-exported */ -extern int pnpbios_dont_use_current_config; extern struct pnp_dev_node_info node_info; -extern void *pnpbios_kmalloc(size_t size, int f); -extern int pnpbios_init (void); -extern int pnpbios_interface_attach_device(struct pnp_bios_node * node); -extern int pnpbios_proc_init (void); -extern void pnpbios_proc_exit (void); extern int pnp_bios_dev_node_info (struct pnp_dev_node_info *data); extern int pnp_bios_get_dev_node (u8 *nodenum, char config, struct pnp_bios_node *data); diff -prauN linux-2.6.0-test5/include/linux/proc_fs.h wli-2.6.0-test5-bk12-25/include/linux/proc_fs.h --- linux-2.6.0-test5/include/linux/proc_fs.h 2003-09-08 12:49:50.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/proc_fs.h 2003-09-25 19:16:14.000000000 -0700 @@ -185,9 +185,10 @@ static inline void proc_net_remove(const #else #define proc_root_driver NULL -#define proc_net_fops_create(name,mode,fops) do {} while(0) -static inline struct proc_dir_entry *proc_net_create(const char *name, mode_t mode, - get_info_t *get_info) {return NULL;} +#define proc_net NULL + +#define proc_net_fops_create(name, mode, fops) ({ (void)(mode), NULL; }) +#define proc_net_create(name, mode, info) ({ (void)(mode), NULL; }) static inline void proc_net_remove(const char *name) {} static inline struct dentry *proc_pid_unhash(struct task_struct *p) { return NULL; } diff -prauN linux-2.6.0-test5/include/linux/raid/md_k.h wli-2.6.0-test5-bk12-25/include/linux/raid/md_k.h --- linux-2.6.0-test5/include/linux/raid/md_k.h 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/raid/md_k.h 2003-09-25 19:16:14.000000000 -0700 @@ -64,11 +64,7 @@ static inline int level_to_pers (int lev typedef struct mddev_s mddev_t; typedef struct mdk_rdev_s mdk_rdev_t; -#if (MINORBITS != 8) -#error MD does not handle bigger kdev yet -#endif - -#define MAX_MD_DEVS (1< - -struct pte_chain; -extern kmem_cache_t *pte_chain_cache; - -#define pte_chain_lock(page) bit_spin_lock(PG_chainlock, &page->flags) -#define pte_chain_unlock(page) bit_spin_unlock(PG_chainlock, &page->flags) - -struct pte_chain *pte_chain_alloc(int gfp_flags); -void __pte_chain_free(struct pte_chain *pte_chain); - -static inline void pte_chain_free(struct pte_chain *pte_chain) -{ - if (pte_chain) - __pte_chain_free(pte_chain); -} diff -prauN linux-2.6.0-test5/include/linux/rmap.h wli-2.6.0-test5-bk12-25/include/linux/rmap.h --- linux-2.6.0-test5/include/linux/rmap.h 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/include/linux/rmap.h 2003-09-29 13:40:17.000000000 -0700 @@ -0,0 +1,163 @@ +/* + * include/linux/rmap.h + * + * Locking primitives for exclusive access to a page's reverse-mapping + * pte chain. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +struct anon { + atomic_t count; + spinlock_t lock; + struct list_head list; + struct rcu_head rcu; +}; + +#ifdef CONFIG_MMU + +int FASTCALL(rmap_get_cpu(void)); +void FASTCALL(page_turn_rmap(struct page *, struct vm_area_struct *)); +void FASTCALL(page_move_rmap(struct page *, struct vm_area_struct *, unsigned long, unsigned long)); +void FASTCALL(add_rmap_address(struct page *, unsigned long)); +void FASTCALL(clear_page_chained(struct page *page)); + +/* + * Called from mm/vmscan.c to handle pageout + */ +int FASTCALL(page_referenced(struct page *)); +int FASTCALL(try_to_unmap(struct page *)); + +void init_rmap(void); +int exec_rmap(struct mm_struct *); +void dup_rmap(struct mm_struct *, struct mm_struct *); +void exit_rmap(struct mm_struct *); + +/* + * Return values of try_to_unmap(): + */ +#define SWAP_SUCCESS 0 +#define SWAP_AGAIN 1 +#define SWAP_FAIL 2 + +#else /* !CONFIG_MMU */ +#define page_referenced(page) TestClearPageReferenced(page) +#define init_rmap() do { } while (0) +#define exec_rmap(mm) ({ 0; }) +#define dup_rmap(new, old) ({ 0; }) +#define exit_rmap(mm) do { } while (0) +#define try_to_unmap(page) ({ SWAP_FAIL; }) +#endif /* CONFIG_MMU */ + +#define NOADDR (~0UL) + +static inline void rmap_lock(struct page *page) +{ + bit_spin_lock(PG_rmaplock, &page->flags); +} + +static inline void rmap_unlock(struct page *page) +{ + bit_spin_unlock(PG_rmaplock, &page->flags); +} + +#define NRSLOT ((L1_CACHE_BYTES - sizeof(unsigned long))/sizeof(unsigned long)) + +struct rmap_chain { + unsigned long slot[NRSLOT]; /* first contains count, then */ + struct rmap_chain *next; /* user virtual addresses */ +}; + +static inline void page_dup_rmap(struct page *page) +{ + atomic_inc(&page->mapcount); +} + +static inline void clear_page_anon(struct page *page) +{ + set_page_mapping(page, NULL); + ClearPageAnon(page); +} + +/** + * page_remove_rmap - take down reverse mapping to a page + * @page: page to remove mapping from + * + * For general use: Remove the reverse mapping from the page. + * after that the caller can clear the page table entry and free + * the page. Caller needs to hold the mm->page_table_lock. + */ +static inline void page_remove_rmap(struct page *page) +{ + if (!atomic_dec_and_test(&page->mapcount)) + return; + + rmap_lock(page); + dec_page_state(nr_mapped); + if (PageAnon(page)) + clear_page_anon(page); + if (page->chain) + clear_page_chained(page); + rmap_unlock(page); +} + +static inline unsigned long vma_address(struct page *page, struct vm_area_struct *vma) +{ + unsigned long pgoff, address; + pgoff = page->index << (PAGE_CACHE_SHIFT - PAGE_SHIFT); + address = vma->vm_start + ((pgoff - vma->vm_pgoff) << PAGE_SHIFT); + if (address < vma->vm_start || address >= vma->vm_end) + return NOADDR; + else + return address; +} + +/** + * page_add_rmap - add reverse mapping entry to a page + * @page: the page to add the mapping to + * @vma: the vma into which this page is being mapped + * @address: the virtual address at which the page is being mapped + * @anon: is this an anonymous (not file-backed) page? + * + * Add a new pte reverse mapping to a page. + * The caller needs to hold the mm->page_table_lock. + */ +static inline void page_add_rmap(struct page *page, struct vm_area_struct *vma, + unsigned long address, int anon) +{ + if (!pfn_valid(page_to_pfn(page)) || PageReserved(page)) + return; + + address &= PAGE_MASK; + + rmap_lock(page); + + if (!page_mapped(page)) + inc_page_state(nr_mapped); + + atomic_inc(&page->mapcount); + + if (page->__mapping) { + if (anon) { + BUG_ON(!PageAnon(page)); + if (address != page->index) + add_rmap_address(page, address); + } else { + BUG_ON(PageAnon(page)); + if (address != vma_address(page, vma)) + add_rmap_address(page, address); + } + } else if (anon) { + SetPageAnon(page); + set_page_mapping(page, vma->vm_mm->anon); + page->index = address; + } + rmap_unlock(page); +} diff -prauN linux-2.6.0-test5/include/linux/rtnetlink.h wli-2.6.0-test5-bk12-25/include/linux/rtnetlink.h --- linux-2.6.0-test5/include/linux/rtnetlink.h 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/rtnetlink.h 2003-09-25 19:16:14.000000000 -0700 @@ -508,10 +508,12 @@ enum #define IFLA_MASTER IFLA_MASTER IFLA_WIRELESS, /* Wireless Extension event - see wireless.h */ #define IFLA_WIRELESS IFLA_WIRELESS + IFLA_PROTINFO, /* Protocol specific information for a link */ +#define IFLA_PROTINFO IFLA_PROTINFO }; -#define IFLA_MAX IFLA_WIRELESS +#define IFLA_MAX IFLA_PROTINFO #define IFLA_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifinfomsg)))) #define IFLA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifinfomsg)) @@ -545,6 +547,18 @@ enum for IPIP tunnels, when route to endpoint is allowed to change) */ +/* Subtype attributes for IFLA_PROTINFO */ +enum +{ + IFLA_INET6_UNSPEC, + IFLA_INET6_FLAGS, /* link flags */ + IFLA_INET6_CONF, /* sysctl parameters */ + IFLA_INET6_STATS, /* statistics */ + IFLA_INET6_MCAST, /* MC things. What of them? */ +}; + +#define IFLA_INET6_MAX IFLA_INET6_MCAST + /***************************************************************** * Traffic control messages. ****/ @@ -604,7 +618,7 @@ enum #include -static __inline__ int rtattr_strcmp(struct rtattr *rta, char *str) +static __inline__ int rtattr_strcmp(const struct rtattr *rta, const char *str) { int len = strlen(str) + 1; return len > rta->rta_len || memcmp(RTA_DATA(rta), str, len); @@ -628,8 +642,9 @@ extern int rtnetlink_put_metrics(struct extern void __rta_fill(struct sk_buff *skb, int attrtype, int attrlen, const void *data); #define RTA_PUT(skb, attrtype, attrlen, data) \ -({ if (skb_tailroom(skb) < (int)RTA_SPACE(attrlen)) goto rtattr_failure; \ - __rta_fill(skb, attrtype, attrlen, data); }) +({ if (unlikely(skb_tailroom(skb) < (int)RTA_SPACE(attrlen))) \ + goto rtattr_failure; \ + __rta_fill(skb, attrtype, attrlen, data); }) static inline struct rtattr * __rta_reserve(struct sk_buff *skb, int attrtype, int attrlen) @@ -644,8 +659,9 @@ __rta_reserve(struct sk_buff *skb, int a } #define __RTA_PUT(skb, attrtype, attrlen) \ -({ if (skb_tailroom(skb) < (int)RTA_SPACE(attrlen)) goto rtattr_failure; \ - __rta_reserve(skb, attrtype, attrlen); }) +({ if (unlikely(skb_tailroom(skb) < (int)RTA_SPACE(attrlen))) \ + goto rtattr_failure; \ + __rta_reserve(skb, attrtype, attrlen); }) extern void rtmsg_ifinfo(int type, struct net_device *dev, unsigned change); @@ -667,11 +683,21 @@ extern void rtnl_lock(void); extern void rtnl_unlock(void); extern void rtnetlink_init(void); -#define ASSERT_RTNL() do { if (down_trylock(&rtnl_sem) == 0) { up(&rtnl_sem); \ -printk("RTNL: assertion failed at " __FILE__ "(%d)\n", __LINE__); } \ - } while(0) -#define BUG_TRAP(x) if (!(x)) { printk("KERNEL: assertion (" #x ") failed at " __FILE__ "(%d)\n", __LINE__); } - +#define ASSERT_RTNL() do { \ + if (unlikely(down_trylock(&rtnl_sem) == 0)) { \ + up(&rtnl_sem); \ + printk(KERN_ERR "RTNL: assertion failed at %s (%d)\n", \ + __FILE__, __LINE__); \ + dump_stack(); \ + } \ +} while(0) + +#define BUG_TRAP(x) do { \ + if (unlikely(!(x))) { \ + printk(KERN_ERR "KERNEL: assertion (%s) failed at %s (%d)\n", \ + #x, __FILE__ , __LINE__); \ + } \ +} while(0) #endif /* __KERNEL__ */ diff -prauN linux-2.6.0-test5/include/linux/sched.h wli-2.6.0-test5-bk12-25/include/linux/sched.h --- linux-2.6.0-test5/include/linux/sched.h 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/sched.h 2003-09-29 00:29:01.000000000 -0700 @@ -29,6 +29,7 @@ #include #include #include +#include struct exec_domain; @@ -198,11 +199,14 @@ struct mm_struct { * together off init_mm.mmlist, and are protected * by mmlist_lock */ + struct anon *anon; /* set of forks between execs */ + struct list_head anon_list; /* chain of mm's against anon */ unsigned long start_code, end_code, start_data, end_data; unsigned long start_brk, brk, start_stack; unsigned long arg_start, arg_end, env_start, env_end; unsigned long rss, total_vm, locked_vm; + unsigned long shared, text, lib, data, dirty, stack; unsigned long def_flags; cpumask_t cpu_vm_mask; unsigned long swap_address; @@ -223,6 +227,7 @@ struct mm_struct { struct kioctx *ioctx_list; struct kioctx default_kioctx; + struct rcu_head rcu; }; extern int mmlist_nr; @@ -281,7 +286,9 @@ struct signal_struct { #define MAX_RT_PRIO MAX_USER_RT_PRIO #define MAX_PRIO (MAX_RT_PRIO + 40) - + +#define rt_task(p) ((p)->prio < MAX_RT_PRIO) + /* * Some day this will be a full-fledged user tracking system.. */ @@ -340,7 +347,9 @@ struct task_struct { prio_array_t *array; unsigned long sleep_avg; - unsigned long last_run; + long interactive_credit; + unsigned long long timestamp; + int activated; unsigned long policy; cpumask_t cpus_allowed; @@ -360,7 +369,7 @@ struct task_struct { unsigned long personality; int did_exec:1; pid_t pid; - pid_t pgrp; + pid_t __pgrp; /* Accessed via process_group() */ pid_t tty_old_pgrp; pid_t session; pid_t tgid; @@ -375,7 +384,7 @@ struct task_struct { struct task_struct *parent; /* parent process */ struct list_head children; /* list of my children */ struct list_head sibling; /* linkage in my parent's children list */ - struct task_struct *group_leader; + struct task_struct *group_leader; /* threadgroup leader */ /* PID/PID hash table linkage. */ struct pid_link pids[PIDTYPE_MAX]; @@ -461,6 +470,11 @@ struct task_struct { siginfo_t *last_siginfo; /* For ptrace use. */ }; +static inline pid_t process_group(struct task_struct *tsk) +{ + return tsk->group_leader->__pgrp; +} + extern void __put_task_struct(struct task_struct *tsk); #define get_task_struct(tsk) do { atomic_inc(&(tsk)->usage); } while(0) #define put_task_struct(tsk) \ @@ -499,6 +513,8 @@ static inline int set_cpus_allowed(task_ } #endif +extern unsigned long long sched_clock(void); + #ifdef CONFIG_NUMA extern void sched_balance_exec(void); extern void node_nr_running_init(void); diff -prauN linux-2.6.0-test5/include/linux/seq_file.h wli-2.6.0-test5-bk12-25/include/linux/seq_file.h --- linux-2.6.0-test5/include/linux/seq_file.h 2003-09-08 12:50:43.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/seq_file.h 2003-09-25 19:16:14.000000000 -0700 @@ -65,5 +65,8 @@ int seq_path(struct seq_file *, struct v int single_open(struct file *, int (*)(struct seq_file *, void *), void *); int single_release(struct inode *, struct file *); int seq_release_private(struct inode *, struct file *); + +#define SEQ_START_TOKEN ((void *)1) + #endif #endif diff -prauN linux-2.6.0-test5/include/linux/serial_core.h wli-2.6.0-test5-bk12-25/include/linux/serial_core.h --- linux-2.6.0-test5/include/linux/serial_core.h 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/serial_core.h 2003-09-25 19:16:14.000000000 -0700 @@ -67,6 +67,12 @@ #define PORT_PC9861 45 #define PORT_PC9801_101 46 +/* DZ */ +#define PORT_DZ 47 + +/* Parisc type numbers. */ +#define PORT_MUX 48 + /* Macintosh Zilog type numbers */ #define PORT_MAC_ZILOG 50 /* m68k : not yet implemented */ #define PORT_PMAC_ZILOG 51 @@ -319,8 +325,8 @@ int uart_remove_one_port(struct uart_dri /* * Power Management */ -int uart_suspend_port(struct uart_driver *reg, struct uart_port *port, u32 level); -int uart_resume_port(struct uart_driver *reg, struct uart_port *port, u32 level); +int uart_suspend_port(struct uart_driver *reg, struct uart_port *port); +int uart_resume_port(struct uart_driver *reg, struct uart_port *port); #define uart_circ_empty(circ) ((circ)->head == (circ)->tail) #define uart_circ_clear(circ) ((circ)->head = (circ)->tail = 0) diff -prauN linux-2.6.0-test5/include/linux/serio.h wli-2.6.0-test5-bk12-25/include/linux/serio.h --- linux-2.6.0-test5/include/linux/serio.h 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/serio.h 2003-09-25 19:16:14.000000000 -0700 @@ -65,7 +65,9 @@ void serio_rescan(struct serio *serio); irqreturn_t serio_interrupt(struct serio *serio, unsigned char data, unsigned int flags, struct pt_regs *regs); void serio_register_port(struct serio *serio); +void serio_register_slave_port(struct serio *serio); void serio_unregister_port(struct serio *serio); +void serio_unregister_slave_port(struct serio *serio); void serio_register_device(struct serio_dev *dev); void serio_unregister_device(struct serio_dev *dev); @@ -104,6 +106,7 @@ static __inline__ void serio_cleanup(str #define SERIO_RS232 0x02000000UL #define SERIO_HIL_MLC 0x03000000UL #define SERIO_PC9800 0x04000000UL +#define SERIO_PS_PSTHRU 0x05000000UL #define SERIO_PROTO 0xFFUL #define SERIO_MSC 0x01 diff -prauN linux-2.6.0-test5/include/linux/skbuff.h wli-2.6.0-test5-bk12-25/include/linux/skbuff.h --- linux-2.6.0-test5/include/linux/skbuff.h 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/skbuff.h 2003-09-25 19:16:14.000000000 -0700 @@ -306,7 +306,7 @@ extern void skb_under_panic(struct * * Returns true if the queue is empty, false otherwise. */ -static inline int skb_queue_empty(struct sk_buff_head *list) +static inline int skb_queue_empty(const struct sk_buff_head *list) { return list->next == (struct sk_buff *)list; } @@ -357,7 +357,7 @@ static inline void kfree_skb_fast(struct * one of multiple shared copies of the buffer. Cloned buffers are * shared data so must not be written to under normal circumstances. */ -static inline int skb_cloned(struct sk_buff *skb) +static inline int skb_cloned(const struct sk_buff *skb) { return skb->cloned && atomic_read(&skb_shinfo(skb)->dataref) != 1; } @@ -369,7 +369,7 @@ static inline int skb_cloned(struct sk_b * Returns true if more than one person has a reference to this * buffer. */ -static inline int skb_shared(struct sk_buff *skb) +static inline int skb_shared(const struct sk_buff *skb) { return atomic_read(&skb->users) != 1; } @@ -477,7 +477,7 @@ static inline struct sk_buff *skb_peek_t * * Return the length of an &sk_buff queue. */ -static inline __u32 skb_queue_len(struct sk_buff_head *list_) +static inline __u32 skb_queue_len(const struct sk_buff_head *list_) { return list_->qlen; } diff -prauN linux-2.6.0-test5/include/linux/smb_mount.h wli-2.6.0-test5-bk12-25/include/linux/smb_mount.h --- linux-2.6.0-test5/include/linux/smb_mount.h 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/smb_mount.h 2003-09-25 19:16:14.000000000 -0700 @@ -43,11 +43,11 @@ struct smb_mount_data { struct smb_mount_data_kernel { int version; - __kernel_uid_t mounted_uid; /* Who may umount() this filesystem? */ - __kernel_uid_t uid; - __kernel_gid_t gid; - __kernel_mode_t file_mode; - __kernel_mode_t dir_mode; + uid_t mounted_uid; /* Who may umount() this filesystem? */ + uid_t uid; + gid_t gid; + mode_t file_mode; + mode_t dir_mode; u32 flags; diff -prauN linux-2.6.0-test5/include/linux/swap.h wli-2.6.0-test5-bk12-25/include/linux/swap.h --- linux-2.6.0-test5/include/linux/swap.h 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/swap.h 2003-09-28 23:04:08.000000000 -0700 @@ -3,7 +3,6 @@ #include #include -#include #include #include #include @@ -77,7 +76,6 @@ struct reclaim_state { #ifdef __KERNEL__ struct address_space; -struct pte_chain; struct sysinfo; struct writeback_control; struct zone; @@ -163,6 +161,7 @@ extern unsigned int nr_free_pages(void); extern unsigned int nr_free_pages_pgdat(pg_data_t *pgdat); extern unsigned int nr_free_buffer_pages(void); extern unsigned int nr_free_pagecache_pages(void); +unsigned long nr_deferred_pages(void); /* linux/mm/swap.c */ extern void FASTCALL(lru_cache_add(struct page *)); @@ -178,25 +177,8 @@ extern int try_to_free_pages(struct zone extern int shrink_all_memory(int); extern int vm_swappiness; -/* linux/mm/rmap.c */ -#ifdef CONFIG_MMU -int FASTCALL(page_referenced(struct page *)); -struct pte_chain *FASTCALL(page_add_rmap(struct page *, pte_t *, - struct pte_chain *)); -void FASTCALL(page_remove_rmap(struct page *, pte_t *)); -int FASTCALL(try_to_unmap(struct page *)); - /* linux/mm/shmem.c */ -extern int shmem_unuse(swp_entry_t entry, struct page *page); -#else -#define page_referenced(page) TestClearPageReferenced(page) -#define try_to_unmap(page) SWAP_FAIL -#endif /* CONFIG_MMU */ - -/* return values of try_to_unmap */ -#define SWAP_SUCCESS 0 -#define SWAP_AGAIN 1 -#define SWAP_FAIL 2 +int shmem_unuse(swp_entry_t entry, struct page *page); #ifdef CONFIG_SWAP /* linux/mm/page_io.c */ @@ -206,7 +188,6 @@ extern int rw_swap_page_sync(int, swp_en /* linux/mm/swap_state.c */ extern struct address_space swapper_space; -#define total_swapcache_pages swapper_space.nrpages extern void show_swap_cache_info(void); extern int add_to_swap(struct page *); extern void __delete_from_swap_cache(struct page *); @@ -245,7 +226,6 @@ extern spinlock_t swaplock; #else /* CONFIG_SWAP */ #define total_swap_pages 0 -#define total_swapcache_pages 0UL #define si_swapinfo(val) \ do { (val)->freeswap = (val)->totalswap = 0; } while (0) diff -prauN linux-2.6.0-test5/include/linux/tty.h wli-2.6.0-test5-bk12-25/include/linux/tty.h --- linux-2.6.0-test5/include/linux/tty.h 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/tty.h 2003-09-25 19:16:14.000000000 -0700 @@ -264,7 +264,6 @@ struct tty_struct { char name[64]; int pgrp; int session; - dev_t device; unsigned long flags; int count; struct winsize winsize; @@ -348,24 +347,7 @@ extern int fg_console, last_console, wan extern int kmsg_redirect; extern void console_init(void); - -extern int lp_init(void); -extern int pty_init(void); -extern void tty_init(void); -extern int mxser_init(void); -extern int moxa_init(void); -extern int ip2_init(void); -extern int pcxe_init(void); -extern int pc_init(void); extern int vcs_init(void); -extern int rp_init(void); -extern int cy_init(void); -extern int stl_init(void); -extern int stli_init(void); -extern int specialix_init(void); -extern int espserial_init(void); -extern int macserial_init(void); -extern int a2232board_init(void); extern int tty_paranoia_check(struct tty_struct *tty, struct inode *inode, const char *routine); @@ -420,5 +402,10 @@ extern void console_print(const char *); extern int vt_ioctl(struct tty_struct *tty, struct file * file, unsigned int cmd, unsigned long arg); +static inline dev_t tty_devnum(struct tty_struct *tty) +{ + return MKDEV(tty->driver->major, tty->driver->minor_start) + tty->index; +} + #endif /* __KERNEL__ */ #endif diff -prauN linux-2.6.0-test5/include/linux/types.h wli-2.6.0-test5-bk12-25/include/linux/types.h --- linux-2.6.0-test5/include/linux/types.h 2003-09-08 12:50:23.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/types.h 2003-09-25 19:16:14.000000000 -0700 @@ -17,6 +17,8 @@ #ifndef __KERNEL_STRICT_NAMES +typedef __u32 __kernel_dev_t; + typedef __kernel_fd_set fd_set; typedef __kernel_dev_t dev_t; typedef __kernel_ino_t ino_t; diff -prauN linux-2.6.0-test5/include/linux/usb.h wli-2.6.0-test5-bk12-25/include/linux/usb.h --- linux-2.6.0-test5/include/linux/usb.h 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/usb.h 2003-09-25 19:16:14.000000000 -0700 @@ -80,7 +80,6 @@ struct usb_host_interface { * @act_altsetting: index of current altsetting. this number is always * less than num_altsetting. after the device is configured, each * interface uses its default setting of zero. - * @max_altsetting: the max number of altsettings for this interface. * @driver: the USB driver that is bound to this interface. * @minor: the minor number assigned to this interface, if this * interface is bound to a driver that uses the USB major number. @@ -118,7 +117,6 @@ struct usb_interface { unsigned act_altsetting; /* active alternate setting */ unsigned num_altsetting; /* number of alternate settings */ - unsigned max_altsetting; /* total memory allocated */ struct usb_driver *driver; /* driver */ int minor; /* minor number this interface is bound to */ diff -prauN linux-2.6.0-test5/include/linux/usb_gadget.h wli-2.6.0-test5-bk12-25/include/linux/usb_gadget.h --- linux-2.6.0-test5/include/linux/usb_gadget.h 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/usb_gadget.h 2003-09-25 19:16:14.000000000 -0700 @@ -72,9 +72,9 @@ struct usb_request { unsigned length; dma_addr_t dma; - unsigned no_interrupt : 1, - zero : 1, - short_not_ok : 1; + unsigned no_interrupt:1; + unsigned zero:1; + unsigned short_not_ok:1; void (*complete)(struct usb_ep *ep, struct usb_request *req); @@ -122,9 +122,11 @@ struct usb_ep_ops { /** * struct usb_ep - device side representation of USB endpoint * @name:identifier for the endpoint, such as "ep-a" or "ep9in-bulk" + * @ops: Function pointers used to access hardware-specific operations. * @ep_list:the gadget's ep_list holds all of its endpoints - * @maxpacket:the maximum packet size used on this endpoint, as - * configured when the endpoint was enabled. + * @maxpacket:The maximum packet size used on this endpoint. The initial + * value can sometimes be reduced (hardware allowing), according to + * the endpoint descriptor used to configure the endpoint. * @driver_data:for use by the gadget driver. all other fields are * read-only to gadget drivers. * @@ -138,7 +140,7 @@ struct usb_ep { const char *name; const struct usb_ep_ops *ops; struct list_head ep_list; - unsigned maxpacket : 16; + unsigned maxpacket:16; }; /*-------------------------------------------------------------------------*/ @@ -443,18 +445,21 @@ struct usb_gadget_ops { /** * struct usb_gadget - represents a usb slave device + * @ops: Function pointers used to access hardware-specific operations. * @ep0: Endpoint zero, used when reading or writing responses to * driver setup() requests * @ep_list: List of other endpoints supported by the device. * @speed: Speed of current connection to USB host. * @name: Identifies the controller hardware type. Used in diagnostics * and sometimes configuration. + * @dev: Driver model state for this abstract device. * * Gadgets have a mostly-portable "gadget driver" implementing device - * functions, handling all usb configurations and interfaces. They - * also have a hardware-specific driver (accessed through ops vectors), - * which insulates the gadget driver from hardware details and packages - * the hardware endpoints through generic i/o queues. + * functions, handling all usb configurations and interfaces. Gadget + * drivers talk to hardware-specific code indirectly, through ops vectors. + * That insulates the gadget driver from hardware details, and packages + * the hardware endpoints through generic i/o queues. The "usb_gadget" + * and "usb_ep" interfaces provide that insulation from the hardware. * * Except for the driver data, all fields in this structure are * read-only to the gadget driver. That driver data is part of the @@ -469,10 +474,6 @@ struct usb_gadget { struct list_head ep_list; /* of usb_ep */ enum usb_device_speed speed; const char *name; - - /* use this to allocate dma-coherent buffers or set up - * dma mappings. or print diagnostics, etc. - */ struct device dev; }; @@ -576,6 +577,7 @@ usb_gadget_clear_selfpowered (struct usb * Called in a context that permits sleeping. * @suspend: Invoked on USB suspend. May be called in_interrupt. * @resume: Invoked on USB resume. May be called in_interrupt. + * @driver: Driver model state for this driver. * * Devices are disabled till a gadget driver successfully bind()s, which * means the driver will handle setup() requests needed to enumerate (and diff -prauN linux-2.6.0-test5/include/linux/writeback.h wli-2.6.0-test5-bk12-25/include/linux/writeback.h --- linux-2.6.0-test5/include/linux/writeback.h 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/linux/writeback.h 2003-09-25 19:16:14.000000000 -0700 @@ -80,11 +80,10 @@ extern int dirty_expire_centisecs; struct ctl_table; struct file; -int dirty_writeback_centisecs_handler(struct ctl_table *, int, struct file *, - void *, size_t *); +int dirty_writeback_centisecs_handler(struct ctl_table *, int, struct file *, + void __user *, size_t *); void page_writeback_init(void); -void balance_dirty_pages(struct address_space *mapping); void balance_dirty_pages_ratelimited(struct address_space *mapping); int pdflush_operation(void (*fn)(unsigned long), unsigned long arg0); int do_writepages(struct address_space *mapping, struct writeback_control *wbc); diff -prauN linux-2.6.0-test5/include/net/atmclip.h wli-2.6.0-test5-bk12-25/include/net/atmclip.h --- linux-2.6.0-test5/include/net/atmclip.h 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/net/atmclip.h 2003-09-25 19:16:14.000000000 -0700 @@ -67,7 +67,15 @@ struct atm_clip_ops { }; void atm_clip_ops_set(struct atm_clip_ops *); +#if defined(CONFIG_ATM_CLIP) || defined(CONFIG_ATM_CLIP_MODULE) int try_atm_clip_ops(void); +#else +static inline int try_atm_clip_ops(void) +{ + return 0; +} +#endif + extern struct neigh_table *clip_tbl_hook; extern struct atm_clip_ops *atm_clip_ops; diff -prauN linux-2.6.0-test5/include/net/bluetooth/bluetooth.h wli-2.6.0-test5-bk12-25/include/net/bluetooth/bluetooth.h --- linux-2.6.0-test5/include/net/bluetooth/bluetooth.h 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/net/bluetooth/bluetooth.h 2003-09-25 19:16:14.000000000 -0700 @@ -131,7 +131,7 @@ void bt_sock_link(struct bt_sock_list *l void bt_sock_unlink(struct bt_sock_list *l, struct sock *s); int bt_sock_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, int len, int flags); uint bt_sock_poll(struct file * file, struct socket *sock, poll_table *wait); -int bt_sock_w4_connect(struct sock *sk, int flags); +int bt_sock_wait_state(struct sock *sk, int state, unsigned long timeo); void bt_accept_enqueue(struct sock *parent, struct sock *sk); struct sock *bt_accept_dequeue(struct sock *parent, struct socket *newsock); diff -prauN linux-2.6.0-test5/include/net/bluetooth/hci.h wli-2.6.0-test5-bk12-25/include/net/bluetooth/hci.h --- linux-2.6.0-test5/include/net/bluetooth/hci.h 2003-09-08 12:50:27.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/net/bluetooth/hci.h 2003-09-25 19:16:14.000000000 -0700 @@ -304,6 +304,8 @@ struct hci_cp_inquiry { __u8 num_rsp; } __attribute__ ((packed)); +#define OCF_INQUIRY_CANCEL 0x0002 + #define OCF_LINK_KEY_REPLY 0x000B #define OCF_LINK_KEY_NEG_REPLY 0x000C struct hci_cp_link_key_reply { diff -prauN linux-2.6.0-test5/include/net/bluetooth/l2cap.h wli-2.6.0-test5-bk12-25/include/net/bluetooth/l2cap.h --- linux-2.6.0-test5/include/net/bluetooth/l2cap.h 2003-09-08 12:49:55.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/net/bluetooth/l2cap.h 2003-09-25 19:16:14.000000000 -0700 @@ -220,6 +220,7 @@ struct l2cap_pinfo { __u32 link_mode; __u8 conf_state; + __u8 conf_retry; __u16 conf_mtu; __u8 ident; @@ -234,6 +235,7 @@ struct l2cap_pinfo { #define L2CAP_CONF_REQ_SENT 0x01 #define L2CAP_CONF_INPUT_DONE 0x02 #define L2CAP_CONF_OUTPUT_DONE 0x04 +#define L2CAP_CONF_MAX_RETRIES 2 void l2cap_load(void); diff -prauN linux-2.6.0-test5/include/net/if_inet6.h wli-2.6.0-test5-bk12-25/include/net/if_inet6.h --- linux-2.6.0-test5/include/net/if_inet6.h 2003-09-08 12:50:33.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/net/if_inet6.h 2003-09-25 19:16:14.000000000 -0700 @@ -16,7 +16,12 @@ #define _NET_IF_INET6_H #include +#include +/* inet6_dev.if_flags */ + +#define IF_RA_OTHERCONF 0x80 +#define IF_RA_MANAGED 0x40 #define IF_RA_RCVD 0x20 #define IF_RS_SENT 0x10 @@ -132,28 +137,6 @@ struct ifacaddr6 #define IFA_SITE IPV6_ADDR_SITELOCAL #define IFA_GLOBAL 0x0000U -struct ipv6_devconf -{ - int forwarding; - int hop_limit; - int mtu6; - int accept_ra; - int accept_redirects; - int autoconf; - int dad_transmits; - int rtr_solicits; - int rtr_solicit_interval; - int rtr_solicit_delay; -#ifdef CONFIG_IPV6_PRIVACY - int use_tempaddr; - int temp_valid_lft; - int temp_prefered_lft; - int regen_max_retry; - int max_desync_factor; -#endif - void *sysctl; -}; - struct ipv6_devstat { struct proc_dir_entry *proc_dir_entry; DEFINE_SNMP_STAT(struct icmpv6_mib, icmpv6); diff -prauN linux-2.6.0-test5/include/net/llc.h wli-2.6.0-test5-bk12-25/include/net/llc.h --- linux-2.6.0-test5/include/net/llc.h 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/include/net/llc.h 2003-09-25 19:16:14.000000000 -0700 @@ -0,0 +1,91 @@ +#ifndef LLC_H +#define LLC_H +/* + * Copyright (c) 1997 by Procom Technology, Inc. + * 2001-2003 by Arnaldo Carvalho de Melo + * + * This program can be redistributed or modified under the terms of the + * GNU General Public License as published by the Free Software Foundation. + * This program is distributed without any warranty or implied warranty + * of merchantability or fitness for a particular purpose. + * + * See the GNU General Public License for more details. + */ + +#include +#include +#include +#include + +struct net_device; +struct packet_type; +struct sk_buff; + +struct llc_addr { + unsigned char lsap; + unsigned char mac[IFHWADDRLEN]; +}; + +#define LLC_SAP_STATE_INACTIVE 1 +#define LLC_SAP_STATE_ACTIVE 2 + +/** + * struct llc_sap - Defines the SAP component + * + * @station - station this sap belongs to + * @state - sap state + * @p_bit - only lowest-order bit used + * @f_bit - only lowest-order bit used + * @laddr - SAP value in this 'lsap' + * @node - entry in station sap_list + * @sk_list - LLC sockets this one manages + */ +struct llc_sap { + unsigned char state; + unsigned char p_bit; + unsigned char f_bit; + int (*rcv_func)(struct sk_buff *skb, + struct net_device *dev, + struct packet_type *pt); + struct llc_addr laddr; + struct list_head node; + struct { + rwlock_t lock; + struct hlist_head list; + } sk_list; +}; + +#define LLC_DEST_INVALID 0 /* Invalid LLC PDU type */ +#define LLC_DEST_SAP 1 /* Type 1 goes here */ +#define LLC_DEST_CONN 2 /* Type 2 goes here */ + +extern struct list_head llc_sap_list; +extern rwlock_t llc_sap_list_lock; +extern unsigned char llc_station_mac_sa[ETH_ALEN]; + +extern int llc_rcv(struct sk_buff *skb, struct net_device *dev, + struct packet_type *pt); + +extern int llc_mac_hdr_init(struct sk_buff *skb, + unsigned char *sa, unsigned char *da); + +extern void llc_add_pack(int type, void (*handler)(struct llc_sap *sap, + struct sk_buff *skb)); +extern void llc_remove_pack(int type); + +extern void llc_set_station_handler(void (*handler)(struct sk_buff *skb)); + +extern struct llc_sap *llc_sap_open(unsigned char lsap, + int (*rcv)(struct sk_buff *skb, + struct net_device *dev, + struct packet_type *pt)); +extern void llc_sap_close(struct llc_sap *sap); + +extern struct llc_sap *llc_sap_find(unsigned char sap_value); + +extern int llc_build_and_send_ui_pkt(struct llc_sap *sap, struct sk_buff *skb, + unsigned char *dmac, unsigned char dsap); + +extern int llc_station_init(void); +extern void llc_station_exit(void); +#endif /* LLC_H */ diff -prauN linux-2.6.0-test5/include/net/llc_actn.h wli-2.6.0-test5-bk12-25/include/net/llc_actn.h --- linux-2.6.0-test5/include/net/llc_actn.h 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/net/llc_actn.h 1969-12-31 16:00:00.000000000 -0800 @@ -1,49 +0,0 @@ -#ifndef LLC_ACTN_H -#define LLC_ACTN_H -/* - * Copyright (c) 1997 by Procom Technology,Inc. - * 2001 by Arnaldo Carvalho de Melo - * - * This program can be redistributed or modified under the terms of the - * GNU General Public License as published by the Free Software Foundation. - * This program is distributed without any warranty or implied warranty - * of merchantability or fitness for a particular purpose. - * - * See the GNU General Public License for more details. - */ -/* Station component state transition actions */ -#define LLC_STATION_AC_START_ACK_TMR 1 -#define LLC_STATION_AC_SET_RETRY_CNT_0 2 -#define LLC_STATION_AC_INC_RETRY_CNT_BY_1 3 -#define LLC_STATION_AC_SET_XID_R_CNT_0 4 -#define LLC_STATION_AC_INC_XID_R_CNT_BY_1 5 -#define LLC_STATION_AC_SEND_NULL_DSAP_XID_C 6 -#define LLC_STATION_AC_SEND_XID_R 7 -#define LLC_STATION_AC_SEND_TEST_R 8 -#define LLC_STATION_AC_REPORT_STATUS 9 - -/* All station state event action functions look like this */ -typedef int (*llc_station_action_t)(struct llc_station *station, - struct sk_buff *skb); -extern int llc_station_ac_start_ack_timer(struct llc_station *station, - struct sk_buff *skb); -extern int llc_station_ac_set_retry_cnt_0(struct llc_station *station, - struct sk_buff *skb); -extern int llc_station_ac_inc_retry_cnt_by_1(struct llc_station *station, - struct sk_buff *skb); -extern int llc_station_ac_set_xid_r_cnt_0(struct llc_station *station, - struct sk_buff *skb); -extern int llc_station_ac_inc_xid_r_cnt_by_1(struct llc_station *station, - struct sk_buff *skb); -extern int llc_station_ac_send_null_dsap_xid_c(struct llc_station *station, - struct sk_buff *skb); -extern int llc_station_ac_send_xid_r(struct llc_station *station, - struct sk_buff *skb); -extern int llc_station_ac_send_test_r(struct llc_station *station, - struct sk_buff *skb); -extern int llc_station_ac_report_status(struct llc_station *station, - struct sk_buff *skb); -extern int llc_station_ac_report_status(struct llc_station *station, - struct sk_buff *skb); -extern void llc_station_ack_tmr_cb(unsigned long timeout_data); -#endif /* LLC_ACTN_H */ diff -prauN linux-2.6.0-test5/include/net/llc_conn.h wli-2.6.0-test5-bk12-25/include/net/llc_conn.h --- linux-2.6.0-test5/include/net/llc_conn.h 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/net/llc_conn.h 2003-09-25 19:16:14.000000000 -0700 @@ -15,6 +15,14 @@ #include #include +#define LLC_EVENT 1 +#define LLC_PACKET 2 + +#define LLC_P_TIME 2 +#define LLC_ACK_TIME 1 +#define LLC_REJ_TIME 3 +#define LLC_BUSY_TIME 3 + struct llc_timer { struct timer_list timer; u16 expire; /* timer expire time */ @@ -69,6 +77,16 @@ struct llc_opt { #define llc_sk(__sk) ((struct llc_opt *)(__sk)->sk_protinfo) +static __inline__ void llc_set_backlog_type(struct sk_buff *skb, char type) +{ + skb->cb[sizeof(skb->cb) - 1] = type; +} + +static __inline__ char llc_backlog_type(struct sk_buff *skb) +{ + return skb->cb[sizeof(skb->cb) - 1]; +} + extern struct sock *llc_sk_alloc(int family, int priority); extern void llc_sk_free(struct sock *sk); @@ -90,9 +108,10 @@ extern struct sock *llc_lookup_establish struct llc_addr *laddr); extern struct sock *llc_lookup_listener(struct llc_sap *sap, struct llc_addr *laddr); -extern struct sock *llc_lookup_dgram(struct llc_sap *sap, - struct llc_addr *laddr); -extern void llc_save_primitive(struct sk_buff* skb, u8 prim); +extern void llc_sap_add_socket(struct llc_sap *sap, struct sock *sk); +extern void llc_sap_remove_socket(struct llc_sap *sap, struct sock *sk); + extern u8 llc_data_accept_state(u8 state); extern void llc_build_offset_table(void); +extern int llc_release_sockets(struct llc_sap *sap); #endif /* LLC_CONN_H */ diff -prauN linux-2.6.0-test5/include/net/llc_evnt.h wli-2.6.0-test5-bk12-25/include/net/llc_evnt.h --- linux-2.6.0-test5/include/net/llc_evnt.h 2003-09-08 12:50:17.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/net/llc_evnt.h 1969-12-31 16:00:00.000000000 -0800 @@ -1,70 +0,0 @@ -#ifndef LLC_EVNT_H -#define LLC_EVNT_H -/* - * Copyright (c) 1997 by Procom Technology,Inc. - * 2001 by Arnaldo Carvalho de Melo - * - * This program can be redistributed or modified under the terms of the - * GNU General Public License as published by the Free Software Foundation. - * This program is distributed without any warranty or implied warranty - * of merchantability or fitness for a particular purpose. - * - * See the GNU General Public License for more details. - */ -/* Station component state transition events */ -/* Types of events (possible values in 'ev->type') */ -#define LLC_STATION_EV_TYPE_SIMPLE 1 -#define LLC_STATION_EV_TYPE_CONDITION 2 -#define LLC_STATION_EV_TYPE_PRIM 3 -#define LLC_STATION_EV_TYPE_PDU 4 /* command/response PDU */ -#define LLC_STATION_EV_TYPE_ACK_TMR 5 -#define LLC_STATION_EV_TYPE_RPT_STATUS 6 - -/* Events */ -#define LLC_STATION_EV_ENABLE_WITH_DUP_ADDR_CHECK 1 -#define LLC_STATION_EV_ENABLE_WITHOUT_DUP_ADDR_CHECK 2 -#define LLC_STATION_EV_ACK_TMR_EXP_LT_RETRY_CNT_MAX_RETRY 3 -#define LLC_STATION_EV_ACK_TMR_EXP_EQ_RETRY_CNT_MAX_RETRY 4 -#define LLC_STATION_EV_RX_NULL_DSAP_XID_C 5 -#define LLC_STATION_EV_RX_NULL_DSAP_0_XID_R_XID_R_CNT_EQ 6 -#define LLC_STATION_EV_RX_NULL_DSAP_1_XID_R_XID_R_CNT_EQ 7 -#define LLC_STATION_EV_RX_NULL_DSAP_TEST_C 8 -#define LLC_STATION_EV_DISABLE_REQ 9 - -struct llc_station_state_ev { - u8 type; - u8 prim; - u8 prim_type; - u8 reason; - struct list_head node; /* node in station->ev_q.list */ -}; - -static __inline__ struct llc_station_state_ev * - llc_station_ev(struct sk_buff *skb) -{ - return (struct llc_station_state_ev *)skb->cb; -} - -typedef int (*llc_station_ev_t)(struct llc_station *station, - struct sk_buff *skb); - -extern int llc_stat_ev_enable_with_dup_addr_check(struct llc_station *station, - struct sk_buff *skb); -extern int llc_stat_ev_enable_without_dup_addr_check(struct llc_station *station, - struct sk_buff *skb); -extern int llc_stat_ev_ack_tmr_exp_lt_retry_cnt_max_retry(struct llc_station * - station, - struct sk_buff *skb); -extern int llc_stat_ev_ack_tmr_exp_eq_retry_cnt_max_retry(struct llc_station *station, - struct sk_buff *skb); -extern int llc_stat_ev_rx_null_dsap_xid_c(struct llc_station *station, - struct sk_buff *skb); -extern int llc_stat_ev_rx_null_dsap_0_xid_r_xid_r_cnt_eq(struct llc_station *station, - struct sk_buff *skb); -extern int llc_stat_ev_rx_null_dsap_1_xid_r_xid_r_cnt_eq(struct llc_station *station, - struct sk_buff *skb); -extern int llc_stat_ev_rx_null_dsap_test_c(struct llc_station *station, - struct sk_buff *skb); -extern int llc_stat_ev_disable_req(struct llc_station *station, - struct sk_buff *skb); -#endif /* LLC_EVNT_H */ diff -prauN linux-2.6.0-test5/include/net/llc_if.h wli-2.6.0-test5-bk12-25/include/net/llc_if.h --- linux-2.6.0-test5/include/net/llc_if.h 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/net/llc_if.h 2003-09-25 19:16:14.000000000 -0700 @@ -16,6 +16,7 @@ #include #include #include +#include #define LLC_DATAUNIT_PRIM 1 #define LLC_CONN_PRIM 2 @@ -60,29 +61,41 @@ #define LLC_STATUS_CONFLICT 7 /* disconnect conn */ #define LLC_STATUS_RESET_DONE 8 /* */ -/* Structures and types */ -/* SAP/MAC Address pair */ -struct llc_addr { - u8 lsap; - u8 mac[IFHWADDRLEN]; -}; - -struct llc_sap; - -extern struct llc_sap *llc_sap_open(u8 lsap, - int (*func)(struct sk_buff *skb, - struct net_device *dev, - struct packet_type *pt)); -extern void llc_sap_close(struct llc_sap *sap); +extern u8 llc_mac_null_var[IFHWADDRLEN]; + +/** + * llc_mac_null - determines if a address is a null mac address + * @mac: Mac address to test if null. + * + * Determines if a given address is a null mac address. Returns 0 if the + * address is not a null mac, 1 if the address is a null mac. + */ +static __inline__ int llc_mac_null(u8 *mac) +{ + return !memcmp(mac, llc_mac_null_var, IFHWADDRLEN); +} + +static __inline__ int llc_addrany(struct llc_addr *addr) +{ + return llc_mac_null(addr->mac) && !addr->lsap; +} + +/** + * llc_mac_match - determines if two mac addresses are the same + * @mac1: First mac address to compare. + * @mac2: Second mac address to compare. + * + * Determines if two given mac address are the same. Returns 0 if there + * is not a complete match up to len, 1 if a complete match up to len is + * found. + */ +static __inline__ int llc_mac_match(u8 *mac1, u8 *mac2) +{ + return !memcmp(mac1, mac2, IFHWADDRLEN); +} extern int llc_establish_connection(struct sock *sk, u8 *lmac, u8 *dmac, u8 dsap); extern int llc_build_and_send_pkt(struct sock *sk, struct sk_buff *skb); -extern void llc_build_and_send_ui_pkt(struct llc_sap *sap, struct sk_buff *skb, - u8 *dmac, u8 dsap); -extern void llc_build_and_send_xid_pkt(struct llc_sap *sap, struct sk_buff *skb, - u8 *dmac, u8 dsap); -extern void llc_build_and_send_test_pkt(struct llc_sap *sap, struct sk_buff *skb, - u8 *dmac, u8 dsap); extern int llc_send_disc(struct sock *sk); #endif /* LLC_IF_H */ diff -prauN linux-2.6.0-test5/include/net/llc_mac.h wli-2.6.0-test5-bk12-25/include/net/llc_mac.h --- linux-2.6.0-test5/include/net/llc_mac.h 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/net/llc_mac.h 1969-12-31 16:00:00.000000000 -0800 @@ -1,61 +0,0 @@ -#ifndef LLC_MAC_H -#define LLC_MAC_H -/* - * Copyright (c) 1997 by Procom Technology, Inc. - * 2001, 2002 by Arnaldo Carvalho de Melo - * - * This program can be redistributed or modified under the terms of the - * GNU General Public License as published by the Free Software Foundation. - * This program is distributed without any warranty or implied warranty - * of merchantability or fitness for a particular purpose. - * - * See the GNU General Public License for more details. - */ -extern int llc_rcv(struct sk_buff *skb, struct net_device *dev, - struct packet_type *pt); -extern u16 lan_hdrs_init(struct sk_buff *skb, u8 *sa, u8 *da); -extern int llc_conn_rcv(struct sock *sk, struct sk_buff *skb); - -static __inline__ void llc_set_backlog_type(struct sk_buff *skb, char type) -{ - skb->cb[sizeof(skb->cb) - 1] = type; -} - -static __inline__ char llc_backlog_type(struct sk_buff *skb) -{ - return skb->cb[sizeof(skb->cb) - 1]; -} - -extern u8 llc_mac_null_var[IFHWADDRLEN]; - -/** - * llc_mac_null - determines if a address is a null mac address - * @mac: Mac address to test if null. - * - * Determines if a given address is a null mac address. Returns 0 if the - * address is not a null mac, 1 if the address is a null mac. - */ -static __inline__ int llc_mac_null(u8 *mac) -{ - return !memcmp(mac, llc_mac_null_var, IFHWADDRLEN); -} - -static __inline__ int llc_addrany(struct llc_addr *addr) -{ - return llc_mac_null(addr->mac) && !addr->lsap; -} - -/** - * llc_mac_match - determines if two mac addresses are the same - * @mac1: First mac address to compare. - * @mac2: Second mac address to compare. - * - * Determines if two given mac address are the same. Returns 0 if there - * is not a complete match up to len, 1 if a complete match up to len is - * found. - */ -static __inline__ int llc_mac_match(u8 *mac1, u8 *mac2) -{ - return !memcmp(mac1, mac2, IFHWADDRLEN); -} -#endif /* LLC_MAC_H */ diff -prauN linux-2.6.0-test5/include/net/llc_main.h wli-2.6.0-test5-bk12-25/include/net/llc_main.h --- linux-2.6.0-test5/include/net/llc_main.h 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/net/llc_main.h 1969-12-31 16:00:00.000000000 -0800 @@ -1,67 +0,0 @@ -#ifndef LLC_MAIN_H -#define LLC_MAIN_H -/* - * Copyright (c) 1997 by Procom Technology, Inc. - * 2001 by Arnaldo Carvalho de Melo - * - * This program can be redistributed or modified under the terms of the - * GNU General Public License as published by the Free Software Foundation. - * This program is distributed without any warranty or implied warranty - * of merchantability or fitness for a particular purpose. - * - * See the GNU General Public License for more details. - */ -#define LLC_EVENT 1 -#define LLC_PACKET 2 -#define LLC_TYPE_1 1 -#define LLC_TYPE_2 2 -#define LLC_P_TIME 2 -#define LLC_ACK_TIME 1 -#define LLC_REJ_TIME 3 -#define LLC_BUSY_TIME 3 -#define LLC_DEST_INVALID 0 /* Invalid LLC PDU type */ -#define LLC_DEST_SAP 1 /* Type 1 goes here */ -#define LLC_DEST_CONN 2 /* Type 2 goes here */ - -/** - * struct llc_station - LLC station component - * - * SAP and connection resource manager, one per adapter. - * - * @state - state of station - * @xid_r_count - XID response PDU counter - * @mac_sa - MAC source address - * @sap_list - list of related SAPs - * @ev_q - events entering state mach. - * @mac_pdu_q - PDUs ready to send to MAC - */ -struct llc_station { - u8 state; - u8 xid_r_count; - struct timer_list ack_timer; - u8 retry_count; - u8 maximum_retry; - u8 mac_sa[6]; - struct { - rwlock_t lock; - struct list_head list; - } sap_list; - struct { - struct sk_buff_head list; - spinlock_t lock; - } ev_q; - struct sk_buff_head mac_pdu_q; -}; - -extern struct llc_sap *llc_sap_alloc(void); -extern void llc_sap_save(struct llc_sap *sap); -extern void llc_free_sap(struct llc_sap *sap); -extern struct llc_sap *llc_sap_find(u8 lsap); -extern void llc_station_state_process(struct llc_station *station, - struct sk_buff *skb); -extern void llc_station_send_pdu(struct llc_station *station, - struct sk_buff *skb); -extern struct sk_buff *llc_alloc_frame(void); - -extern struct llc_station llc_main_station; -#endif /* LLC_MAIN_H */ diff -prauN linux-2.6.0-test5/include/net/llc_pdu.h wli-2.6.0-test5-bk12-25/include/net/llc_pdu.h --- linux-2.6.0-test5/include/net/llc_pdu.h 2003-09-08 12:50:19.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/net/llc_pdu.h 2003-09-25 19:16:14.000000000 -0700 @@ -2,7 +2,7 @@ #define LLC_PDU_H /* * Copyright (c) 1997 by Procom Technology,Inc. - * 2001 by Arnaldo Carvalho de Melo + * 2001-2003 by Arnaldo Carvalho de Melo * * This program can be redistributed or modified under the terms of the * GNU General Public License as published by the Free Software Foundation. @@ -11,7 +11,10 @@ * * See the GNU General Public License for more details. */ -/* LLC PDU structure */ + +#include +#include + /* Lengths of frame formats */ #define LLC_PDU_LEN_I 4 /* header and 2 control bytes */ #define LLC_PDU_LEN_S 4 @@ -198,7 +201,7 @@ struct llc_pdu_sn { u8 ctrl_2; }; -static __inline__ struct llc_pdu_sn *llc_pdu_sn_hdr(struct sk_buff *skb) +static inline struct llc_pdu_sn *llc_pdu_sn_hdr(struct sk_buff *skb) { return (struct llc_pdu_sn *)skb->nh.raw; } @@ -210,16 +213,146 @@ struct llc_pdu_un { u8 ctrl_1; }; -static __inline__ struct llc_pdu_un *llc_pdu_un_hdr(struct sk_buff *skb) +static inline struct llc_pdu_un *llc_pdu_un_hdr(struct sk_buff *skb) { return (struct llc_pdu_un *)skb->nh.raw; } -static __inline__ void *llc_set_pdu_hdr(struct sk_buff *skb, void *ptr) +static inline void *llc_set_pdu_hdr(struct sk_buff *skb, void *ptr) { return skb->nh.raw = ptr; } +/** + * llc_pdu_header_init - initializes pdu header + * @skb: input skb that header must be set into it. + * @type: type of PDU (U, I or S). + * @ssap: source sap. + * @dsap: destination sap. + * @cr: command/response bit (0 or 1). + * + * This function sets DSAP, SSAP and command/Response bit in LLC header. + */ +static inline void llc_pdu_header_init(struct sk_buff *skb, u8 type, + u8 ssap, u8 dsap, u8 cr) +{ + const int hlen = type == LLC_PDU_TYPE_U ? 3 : 4; + struct llc_pdu_un *pdu = llc_set_pdu_hdr(skb, skb_push(skb, hlen)); + pdu->dsap = dsap; + pdu->ssap = ssap; + pdu->ssap |= cr; +} + +/** + * llc_pdu_decode_sa - extracs source address (MAC) of input frame + * @skb: input skb that source address must be extracted from it. + * @sa: pointer to source address (6 byte array). + * + * This function extracts source address(MAC) of input frame. + */ +static inline void llc_pdu_decode_sa(struct sk_buff *skb, u8 *sa) +{ + if (skb->protocol == ntohs(ETH_P_802_2)) + memcpy(sa, ((struct ethhdr *)skb->mac.raw)->h_source, ETH_ALEN); + else if (skb->protocol == ntohs(ETH_P_TR_802_2)) + memcpy(sa, ((struct trh_hdr *)skb->mac.raw)->saddr, ETH_ALEN); +} + +/** + * llc_pdu_decode_da - extracts dest address of input frame + * @skb: input skb that destination address must be extracted from it + * @sa: pointer to destination address (6 byte array). + * + * This function extracts destination address(MAC) of input frame. + */ +static inline void llc_pdu_decode_da(struct sk_buff *skb, u8 *da) +{ + if (skb->protocol == ntohs(ETH_P_802_2)) + memcpy(da, ((struct ethhdr *)skb->mac.raw)->h_dest, ETH_ALEN); + else if (skb->protocol == ntohs(ETH_P_TR_802_2)) + memcpy(da, ((struct trh_hdr *)skb->mac.raw)->daddr, ETH_ALEN); +} + +/** + * llc_pdu_decode_ssap - extracts source SAP of input frame + * @skb: input skb that source SAP must be extracted from it. + * @ssap: source SAP (output argument). + * + * This function extracts source SAP of input frame. Right bit of SSAP is + * command/response bit. + */ +static inline void llc_pdu_decode_ssap(struct sk_buff *skb, u8 *ssap) +{ + *ssap = llc_pdu_un_hdr(skb)->ssap & 0xFE; +} + +/** + * llc_pdu_decode_dsap - extracts dest SAP of input frame + * @skb: input skb that destination SAP must be extracted from it. + * @dsap: destination SAP (output argument). + * + * This function extracts destination SAP of input frame. right bit of + * DSAP designates individual/group SAP. + */ +static inline void llc_pdu_decode_dsap(struct sk_buff *skb, u8 *dsap) +{ + *dsap = llc_pdu_un_hdr(skb)->dsap & 0xFE; +} + +/** + * llc_pdu_init_as_ui_cmd - sets LLC header as UI PDU + * @skb: input skb that header must be set into it. + * + * This function sets third byte of LLC header as a UI PDU. + */ +static inline void llc_pdu_init_as_ui_cmd(struct sk_buff *skb) +{ + struct llc_pdu_un *pdu = llc_pdu_un_hdr(skb); + + pdu->ctrl_1 = LLC_PDU_TYPE_U; + pdu->ctrl_1 |= LLC_1_PDU_CMD_UI; +} + +/** + * llc_pdu_init_as_test_cmd - sets PDU as TEST + * @skb - Address of the skb to build + * + * Sets a PDU as TEST + */ +static inline void llc_pdu_init_as_test_cmd(struct sk_buff *skb) +{ + struct llc_pdu_un *pdu = llc_pdu_un_hdr(skb); + + pdu->ctrl_1 = LLC_PDU_TYPE_U; + pdu->ctrl_1 |= LLC_1_PDU_CMD_TEST; + pdu->ctrl_1 |= LLC_U_PF_BIT_MASK; +} + +/** + * llc_pdu_init_as_test_rsp - build TEST response PDU + * @skb: Address of the skb to build + * @ev_skb: The received TEST command PDU frame + * + * Builds a pdu frame as a TEST response. + */ +static inline void llc_pdu_init_as_test_rsp(struct sk_buff *skb, + struct sk_buff *ev_skb) +{ + struct llc_pdu_un *pdu = llc_pdu_un_hdr(skb); + + pdu->ctrl_1 = LLC_PDU_TYPE_U; + pdu->ctrl_1 |= LLC_1_PDU_CMD_TEST; + pdu->ctrl_1 |= LLC_U_PF_BIT_MASK; + if (ev_skb->protocol == ntohs(ETH_P_802_2)) { + struct llc_pdu_un *ev_pdu = llc_pdu_un_hdr(ev_skb); + int dsize; + + dsize = ntohs(((struct ethhdr *)ev_skb->mac.raw)->h_proto) - 3; + memcpy(((u8 *)pdu) + 3, ((u8 *)ev_pdu) + 3, dsize); + skb_put(skb, dsize); + } +} + /* LLC Type 1 XID command/response information fields format */ struct llc_xid_info { u8 fmt_id; /* always 0x18 for LLC */ @@ -227,6 +360,54 @@ struct llc_xid_info { u8 rw; /* sender receive window */ }; +/** + * llc_pdu_init_as_xid_cmd - sets bytes 3, 4 & 5 of LLC header as XID + * @skb: input skb that header must be set into it. + * + * This function sets third,fourth,fifth and sixth bytes of LLC header as + * a XID PDU. + */ +static inline void llc_pdu_init_as_xid_cmd(struct sk_buff *skb, + u8 svcs_supported, u8 rx_window) +{ + struct llc_xid_info *xid_info; + struct llc_pdu_un *pdu = llc_pdu_un_hdr(skb); + + pdu->ctrl_1 = LLC_PDU_TYPE_U; + pdu->ctrl_1 |= LLC_1_PDU_CMD_XID; + pdu->ctrl_1 |= LLC_U_PF_BIT_MASK; + xid_info = (struct llc_xid_info *)(((u8 *)&pdu->ctrl_1) + 1); + xid_info->fmt_id = LLC_XID_FMT_ID; /* 0x81 */ + xid_info->type = svcs_supported; + xid_info->rw = rx_window << 1; /* size of receive window */ + skb_put(skb, 3); +} + +/** + * llc_pdu_init_as_xid_rsp - builds XID response PDU + * @skb: Address of the skb to build + * @svcs_supported: The class of the LLC (I or II) + * @rx_window: The size of the receive window of the LLC + * + * Builds a pdu frame as an XID response. + */ +static inline void llc_pdu_init_as_xid_rsp(struct sk_buff *skb, + u8 svcs_supported, u8 rx_window) +{ + struct llc_xid_info *xid_info; + struct llc_pdu_un *pdu = llc_pdu_un_hdr(skb); + + pdu->ctrl_1 = LLC_PDU_TYPE_U; + pdu->ctrl_1 |= LLC_1_PDU_CMD_XID; + pdu->ctrl_1 |= LLC_U_PF_BIT_MASK; + + xid_info = (struct llc_xid_info *)(((u8 *)&pdu->ctrl_1) + 1); + xid_info->fmt_id = LLC_XID_FMT_ID; + xid_info->type = svcs_supported; + xid_info->rw = rx_window << 1; + skb_put(skb, 3); +} + /* LLC Type 2 FRMR response information field format */ struct llc_frmr_info { u16 rej_pdu_ctrl; /* bits 1-8 if U-PDU */ @@ -239,17 +420,6 @@ extern void llc_pdu_set_cmd_rsp(struct s extern void llc_pdu_set_pf_bit(struct sk_buff *skb, u8 bit_value); extern void llc_pdu_decode_pf_bit(struct sk_buff *skb, u8 *pf_bit); extern void llc_pdu_decode_cr_bit(struct sk_buff *skb, u8 *cr_bit); -extern void llc_pdu_decode_sa(struct sk_buff *skb, u8 *sa); -extern void llc_pdu_decode_da(struct sk_buff *skb, u8 *ds); -extern void llc_pdu_decode_dsap(struct sk_buff *skb, u8 *dsap); -extern void llc_pdu_decode_ssap(struct sk_buff *skb, u8 *ssap); -extern void llc_decode_pdu_type(struct sk_buff *skb, u8 *destination); -extern void llc_pdu_header_init(struct sk_buff *skb, u8 pdu_type, u8 ssap, - u8 dsap, u8 cr); -extern void llc_pdu_init_as_ui_cmd(struct sk_buff *skb); -extern void llc_pdu_init_as_xid_cmd(struct sk_buff *skb, u8 svcs_supported, - u8 rx_window); -extern void llc_pdu_init_as_test_cmd(struct sk_buff *skb); extern void llc_pdu_init_as_disc_cmd(struct sk_buff *skb, u8 p_bit); extern void llc_pdu_init_as_i_cmd(struct sk_buff *skb, u8 p_bit, u8 ns, u8 nr); extern void llc_pdu_init_as_rej_cmd(struct sk_buff *skb, u8 p_bit, u8 nr); @@ -257,10 +427,6 @@ extern void llc_pdu_init_as_rnr_cmd(stru extern void llc_pdu_init_as_rr_cmd(struct sk_buff *skb, u8 p_bit, u8 nr); extern void llc_pdu_init_as_sabme_cmd(struct sk_buff *skb, u8 p_bit); extern void llc_pdu_init_as_dm_rsp(struct sk_buff *skb, u8 f_bit); -extern void llc_pdu_init_as_xid_rsp(struct sk_buff *skb, u8 svcs_supported, - u8 rx_window); -extern void llc_pdu_init_as_test_rsp(struct sk_buff *skb, - struct sk_buff *ev_skb); extern void llc_pdu_init_as_frmr_rsp(struct sk_buff *skb, struct llc_pdu_sn *prev_pdu, u8 f_bit, u8 vs, u8 vr, u8 vzyxw); diff -prauN linux-2.6.0-test5/include/net/llc_s_st.h wli-2.6.0-test5-bk12-25/include/net/llc_s_st.h --- linux-2.6.0-test5/include/net/llc_s_st.h 2003-09-08 12:51:00.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/net/llc_s_st.h 2003-09-25 19:16:14.000000000 -0700 @@ -11,10 +11,7 @@ * * See the GNU General Public License for more details. */ -/* Defines SAP component states */ -#define LLC_SAP_STATE_INACTIVE 1 -#define LLC_SAP_STATE_ACTIVE 2 #define LLC_NR_SAP_STATES 2 /* size of state table */ /* structures and types */ diff -prauN linux-2.6.0-test5/include/net/llc_sap.h wli-2.6.0-test5-bk12-25/include/net/llc_sap.h --- linux-2.6.0-test5/include/net/llc_sap.h 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/net/llc_sap.h 2003-09-25 19:16:14.000000000 -0700 @@ -2,7 +2,7 @@ #define LLC_SAP_H /* * Copyright (c) 1997 by Procom Technology,Inc. - * 2001 by Arnaldo Carvalho de Melo + * 2001-2003 by Arnaldo Carvalho de Melo * * This program can be redistributed or modified under the terms of the * GNU General Public License as published by the Free Software Foundation. @@ -11,37 +11,20 @@ * * See the GNU General Public License for more details. */ -#include -#include -/** - * struct llc_sap - Defines the SAP component - * - * @station - station this sap belongs to - * @state - sap state - * @p_bit - only lowest-order bit used - * @f_bit - only lowest-order bit used - * @laddr - SAP value in this 'lsap' - * @node - entry in station sap_list - * @sk_list - LLC sockets this one manages - */ -struct llc_sap { - struct llc_station *station; - u8 state; - u8 p_bit; - u8 f_bit; - int (*rcv_func)(struct sk_buff *skb, - struct net_device *dev, - struct packet_type *pt); - struct llc_addr laddr; - struct list_head node; - struct { - rwlock_t lock; - struct hlist_head list; - } sk_list; -}; +struct llc_sap; +struct sk_buff; -extern void llc_sap_assign_sock(struct llc_sap *sap, struct sock *sk); -extern void llc_sap_unassign_sock(struct llc_sap *sap, struct sock *sk); extern void llc_sap_state_process(struct llc_sap *sap, struct sk_buff *skb); extern void llc_sap_rtn_pdu(struct llc_sap *sap, struct sk_buff *skb); +extern void llc_save_primitive(struct sk_buff* skb, unsigned char prim); +extern struct sk_buff *llc_alloc_frame(void); + +extern void llc_build_and_send_test_pkt(struct llc_sap *sap, + struct sk_buff *skb, + unsigned char *dmac, + unsigned char dsap); +extern void llc_build_and_send_xid_pkt(struct llc_sap *sap, + struct sk_buff *skb, + unsigned char *dmac, + unsigned char dsap); #endif /* LLC_SAP_H */ diff -prauN linux-2.6.0-test5/include/net/llc_stat.h wli-2.6.0-test5-bk12-25/include/net/llc_stat.h --- linux-2.6.0-test5/include/net/llc_stat.h 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/net/llc_stat.h 1969-12-31 16:00:00.000000000 -0800 @@ -1,35 +0,0 @@ -#ifndef LLC_STAT_H -#define LLC_STAT_H -/* - * Copyright (c) 1997 by Procom Technology,Inc. - * 2001 by Arnaldo Carvalho de Melo - * - * This program can be redistributed or modified under the terms of the - * GNU General Public License as published by the Free Software Foundation. - * This program is distributed without any warranty or implied warranty - * of merchantability or fitness for a particular purpose. - * - * See the GNU General Public License for more details. - */ -/* Station component state table */ -/* Station component states */ -#define LLC_STATION_STATE_DOWN 1 /* initial state */ -#define LLC_STATION_STATE_DUP_ADDR_CHK 2 -#define LLC_STATION_STATE_UP 3 - -#define LLC_NBR_STATION_STATES 3 /* size of state table */ - -/* Station component state table structure */ -struct llc_station_state_trans { - llc_station_ev_t ev; - u8 next_state; - llc_station_action_t *ev_actions; -}; - -struct llc_station_state { - u8 curr_state; - struct llc_station_state_trans **transitions; -}; - -extern struct llc_station_state llc_station_state_table[LLC_NBR_STATION_STATES]; -#endif /* LLC_STAT_H */ diff -prauN linux-2.6.0-test5/include/net/rose.h wli-2.6.0-test5-bk12-25/include/net/rose.h --- linux-2.6.0-test5/include/net/rose.h 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/net/rose.h 2003-09-25 19:16:14.000000000 -0700 @@ -140,9 +140,6 @@ typedef struct { #define rose_sk(__sk) ((rose_cb *)(__sk)->sk_protinfo) -/* Magic value indicating first entry in /proc (ie header) */ -#define ROSE_PROC_START ((void *) 1) - /* af_rose.c */ extern ax25_address rose_callsign; extern int sysctl_rose_restart_request_timeout; diff -prauN linux-2.6.0-test5/include/net/syncppp.h wli-2.6.0-test5-bk12-25/include/net/syncppp.h --- linux-2.6.0-test5/include/net/syncppp.h 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/net/syncppp.h 2003-09-25 19:16:14.000000000 -0700 @@ -57,8 +57,11 @@ struct ppp_device struct sppp sppp; /* Synchronous PPP */ }; -#define sppp_of(dev) \ - (&((struct ppp_device *)(*(unsigned long *)((dev)->priv)))->sppp) +static inline struct sppp *sppp_of(struct net_device *dev) +{ + struct ppp_device *ppp = dev->priv; + return &ppp->sppp; +} #define PP_KEEPALIVE 0x01 /* use keepalive protocol */ #define PP_CISCO 0x02 /* use Cisco protocol instead of PPP */ diff -prauN linux-2.6.0-test5/include/pcmcia/ss.h wli-2.6.0-test5-bk12-25/include/pcmcia/ss.h --- linux-2.6.0-test5/include/pcmcia/ss.h 2003-09-08 12:50:32.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/pcmcia/ss.h 2003-09-25 19:16:14.000000000 -0700 @@ -78,7 +78,6 @@ extern socket_state_t dead_socket; #define SS_DMA_MODE 0x0080 #define SS_SPKR_ENA 0x0100 #define SS_OUTPUT_ENA 0x0200 -#define SS_DEBOUNCED 0x0400 /* Tell driver that the debounce delay has ended */ /* Flags for I/O port and memory windows */ #define MAP_ACTIVE 0x01 @@ -176,7 +175,6 @@ struct pcmcia_socket { u_short functions; u_short lock_count; client_handle_t clients; - u_int real_clients; pccard_mem_map cis_mem; u_char *cis_virt; struct config_t *config; @@ -249,7 +247,7 @@ extern void pcmcia_unregister_socket(str extern struct class pcmcia_socket_class; /* socket drivers are expected to use these callbacks in their .drv struct */ -extern int pcmcia_socket_dev_suspend(struct device *dev, u32 state, u32 level); -extern int pcmcia_socket_dev_resume(struct device *dev, u32 level); +extern int pcmcia_socket_dev_suspend(struct device *dev, u32 state); +extern int pcmcia_socket_dev_resume(struct device *dev); #endif /* _LINUX_SS_H */ diff -prauN linux-2.6.0-test5/include/rxrpc/call.h wli-2.6.0-test5-bk12-25/include/rxrpc/call.h --- linux-2.6.0-test5/include/rxrpc/call.h 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/rxrpc/call.h 2003-09-25 19:16:14.000000000 -0700 @@ -67,8 +67,8 @@ struct rxrpc_call wait_queue_head_t waitq; /* wait queue for events to happen */ struct list_head link; /* general internal list link */ struct list_head call_link; /* master call list link */ - u32 chan_ix; /* connection channel index (net order) */ - u32 call_id; /* call ID on connection (net order) */ + uint32_t chan_ix; /* connection channel index (net order) */ + uint32_t call_id; /* call ID on connection (net order) */ unsigned long cjif; /* jiffies at call creation */ unsigned long flags; /* control flags */ #define RXRPC_CALL_ACKS_TIMO 0x00000001 /* ACKS timeout reached */ @@ -103,7 +103,7 @@ struct rxrpc_call char ackr_dfr_perm; /* request for deferred ACKs permitted */ rxrpc_seq_t ackr_dfr_seq; /* seqno for deferred ACK */ struct rxrpc_ackpacket ackr; /* pending normal ACK packet */ - u8 ackr_array[RXRPC_CALL_ACK_WINDOW_SIZE]; /* ACK records */ + uint8_t ackr_array[RXRPC_CALL_ACK_WINDOW_SIZE]; /* ACK records */ /* presentation layer */ char app_last_rcv; /* T if received last packet from remote end */ @@ -131,14 +131,14 @@ struct rxrpc_call struct list_head app_attn_link; /* application attention list linkage */ size_t app_mark; /* trigger callback when app_ready_qty>=app_mark */ char app_async_read; /* T if in async-read mode */ - u8 *app_read_buf; /* application async read buffer (app_mark size) */ - u8 *app_scr_alloc; /* application scratch allocation pointer */ + uint8_t *app_read_buf; /* application async read buffer (app_mark size) */ + uint8_t *app_scr_alloc; /* application scratch allocation pointer */ void *app_scr_ptr; /* application pointer into scratch buffer */ #define RXRPC_APP_MARK_EOF 0xFFFFFFFFU /* mark at end of input */ /* application scratch buffer */ - u8 app_scratch[0] __attribute__((aligned(sizeof(long)))); + uint8_t app_scratch[0] __attribute__((aligned(sizeof(long)))); }; #define RXRPC_CALL_SCRATCH_SIZE (PAGE_SIZE - sizeof(struct rxrpc_call)) @@ -206,7 +206,7 @@ extern int rxrpc_call_read_data(struct r extern int rxrpc_call_write_data(struct rxrpc_call *call, size_t sioc, struct iovec siov[], - u8 rxhdr_flags, + uint8_t rxhdr_flags, int alloc_flags, int dup_data, size_t *size_sent); diff -prauN linux-2.6.0-test5/include/rxrpc/connection.h wli-2.6.0-test5-bk12-25/include/rxrpc/connection.h --- linux-2.6.0-test5/include/rxrpc/connection.h 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/rxrpc/connection.h 2003-09-25 19:16:14.000000000 -0700 @@ -34,6 +34,7 @@ struct rxrpc_connection struct list_head link; /* link in peer's list */ struct list_head proc_link; /* link in proc list */ struct list_head err_link; /* link in ICMP error processing list */ + struct list_head id_link; /* link in ID grant list */ struct sockaddr_in addr; /* remote address */ struct rxrpc_call *channels[4]; /* channels (active calls) */ wait_queue_head_t chanwait; /* wait for channel to become available */ @@ -44,19 +45,19 @@ struct rxrpc_connection rxrpc_serial_t serial_counter; /* packet serial number counter */ /* the following should all be in net order */ - u32 in_epoch; /* peer's epoch */ - u32 out_epoch; /* my epoch */ - u32 conn_id; /* connection ID, appropriately shifted */ - u16 service_id; /* service ID */ - u8 security_ix; /* security ID */ - u8 in_clientflag; /* RXRPC_CLIENT_INITIATED if we are server */ - u8 out_clientflag; /* RXRPC_CLIENT_INITIATED if we are client */ + uint32_t in_epoch; /* peer's epoch */ + uint32_t out_epoch; /* my epoch */ + uint32_t conn_id; /* connection ID, appropriately shifted */ + uint16_t service_id; /* service ID */ + uint8_t security_ix; /* security ID */ + uint8_t in_clientflag; /* RXRPC_CLIENT_INITIATED if we are server */ + uint8_t out_clientflag; /* RXRPC_CLIENT_INITIATED if we are client */ }; extern int rxrpc_create_connection(struct rxrpc_transport *trans, - u16 port, - u32 addr, - unsigned short service_id, + uint16_t port, + uint32_t addr, + uint16_t service_id, void *security, struct rxrpc_connection **_conn); diff -prauN linux-2.6.0-test5/include/rxrpc/message.h wli-2.6.0-test5-bk12-25/include/rxrpc/message.h --- linux-2.6.0-test5/include/rxrpc/message.h 2003-09-08 12:49:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/rxrpc/message.h 2003-09-25 19:16:14.000000000 -0700 @@ -9,8 +9,8 @@ * 2 of the License, or (at your option) any later version. */ -#ifndef _H_3AD3363A_3A9C_11D6_83D8_0002B3163499 -#define _H_3AD3363A_3A9C_11D6_83D8_0002B3163499 +#ifndef _LINUX_RXRPC_MESSAGE_H +#define _LINUX_RXRPC_MESSAGE_H #include @@ -61,7 +61,7 @@ static inline void rxrpc_put_message(str extern int rxrpc_conn_newmsg(struct rxrpc_connection *conn, struct rxrpc_call *call, - u8 type, + uint8_t type, int count, struct iovec diov[], int alloc_flags, @@ -69,4 +69,4 @@ extern int rxrpc_conn_newmsg(struct rxrp extern int rxrpc_conn_sendmsg(struct rxrpc_connection *conn, struct rxrpc_message *msg); -#endif /* _H_3AD3363A_3A9C_11D6_83D8_0002B3163499 */ +#endif /* _LINUX_RXRPC_MESSAGE_H */ diff -prauN linux-2.6.0-test5/include/rxrpc/packet.h wli-2.6.0-test5-bk12-25/include/rxrpc/packet.h --- linux-2.6.0-test5/include/rxrpc/packet.h 2003-09-08 12:49:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/rxrpc/packet.h 2003-09-25 19:16:14.000000000 -0700 @@ -27,21 +27,21 @@ extern size_t RXRPC_MAX_PACKET_SIZE; */ struct rxrpc_header { - u32 epoch; /* client boot timestamp */ + uint32_t epoch; /* client boot timestamp */ - u32 cid; /* connection and channel ID */ + uint32_t cid; /* connection and channel ID */ #define RXRPC_MAXCALLS 4 /* max active calls per conn */ #define RXRPC_CHANNELMASK (RXRPC_MAXCALLS-1) /* mask for channel ID */ #define RXRPC_CIDMASK (~RXRPC_CHANNELMASK) /* mask for connection ID */ #define RXRPC_CIDSHIFT 2 /* shift for connection ID */ - u32 callNumber; /* call ID (0 for connection-level packets) */ + uint32_t callNumber; /* call ID (0 for connection-level packets) */ #define RXRPC_PROCESS_MAXCALLS (1<<2) /* maximum number of active calls per conn (power of 2) */ - u32 seq; /* sequence number of pkt in call stream */ - u32 serial; /* serial number of pkt sent to network */ + uint32_t seq; /* sequence number of pkt in call stream */ + uint32_t serial; /* serial number of pkt sent to network */ - u8 type; /* packet type */ + uint8_t type; /* packet type */ #define RXRPC_PACKET_TYPE_DATA 1 /* data */ #define RXRPC_PACKET_TYPE_ACK 2 /* ACK */ #define RXRPC_PACKET_TYPE_BUSY 3 /* call reject */ @@ -52,7 +52,7 @@ struct rxrpc_header #define RXRPC_PACKET_TYPE_DEBUG 8 /* debug info request */ #define RXRPC_N_PACKET_TYPES 9 /* number of packet types (incl type 0) */ - u8 flags; /* packet flags */ + uint8_t flags; /* packet flags */ #define RXRPC_CLIENT_INITIATED 0x01 /* signifies a packet generated by a client */ #define RXRPC_REQUEST_ACK 0x02 /* request an unconditional ACK of this packet */ #define RXRPC_LAST_PACKET 0x04 /* the last packet from this side for this call */ @@ -60,10 +60,10 @@ struct rxrpc_header #define RXRPC_JUMBO_PACKET 0x20 /* [DATA] this is a jumbo packet */ #define RXRPC_SLOW_START_OK 0x20 /* [ACK] slow start supported */ - u8 userStatus; /* app-layer defined status */ - u8 securityIndex; /* security protocol ID */ - u16 _rsvd; /* reserved (used by kerberos security as cksum) */ - u16 serviceId; /* service ID */ + uint8_t userStatus; /* app-layer defined status */ + uint8_t securityIndex; /* security protocol ID */ + uint16_t _rsvd; /* reserved (used by kerberos security as cksum) */ + uint16_t serviceId; /* service ID */ } __attribute__((packed)); @@ -83,9 +83,9 @@ extern const char *rxrpc_pkts[]; */ struct rxrpc_jumbo_header { - u8 flags; /* packet flags (as per rxrpc_header) */ - u8 pad; - u16 _rsvd; /* reserved (used by kerberos security as cksum) */ + uint8_t flags; /* packet flags (as per rxrpc_header) */ + uint8_t pad; + uint16_t _rsvd; /* reserved (used by kerberos security as cksum) */ }; #define RXRPC_JUMBO_DATALEN 1412 /* non-terminal jumbo packet data length */ @@ -97,13 +97,14 @@ struct rxrpc_jumbo_header */ struct rxrpc_ackpacket { - u16 bufferSpace; /* number of packet buffers available */ - u16 maxSkew; /* diff between serno being ACK'd and highest serial no received */ - u32 firstPacket; /* sequence no of first ACK'd packet in attached list */ - u32 previousPacket; /* sequence no of previous packet received */ - u32 serial; /* serial no of packet that prompted this ACK */ + uint16_t bufferSpace; /* number of packet buffers available */ + uint16_t maxSkew; /* diff between serno being ACK'd and highest serial no + * received */ + uint32_t firstPacket; /* sequence no of first ACK'd packet in attached list */ + uint32_t previousPacket; /* sequence no of previous packet received */ + uint32_t serial; /* serial no of packet that prompted this ACK */ - u8 reason; /* reason for ACK */ + uint8_t reason; /* reason for ACK */ #define RXRPC_ACK_REQUESTED 1 /* ACK was requested on packet */ #define RXRPC_ACK_DUPLICATE 2 /* duplicate packet received */ #define RXRPC_ACK_OUT_OF_SEQUENCE 3 /* out of sequence packet received */ @@ -114,10 +115,10 @@ struct rxrpc_ackpacket #define RXRPC_ACK_DELAY 8 /* nothing happened since received packet */ #define RXRPC_ACK_IDLE 9 /* ACK due to fully received ACK window */ - u8 nAcks; /* number of ACKs */ + uint8_t nAcks; /* number of ACKs */ #define RXRPC_MAXACKS 255 - u8 acks[0]; /* list of ACK/NAKs */ + uint8_t acks[0]; /* list of ACK/NAKs */ #define RXRPC_ACK_TYPE_NACK 0 #define RXRPC_ACK_TYPE_ACK 1 diff -prauN linux-2.6.0-test5/include/rxrpc/peer.h wli-2.6.0-test5-bk12-25/include/rxrpc/peer.h --- linux-2.6.0-test5/include/rxrpc/peer.h 2003-09-08 12:50:17.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/rxrpc/peer.h 2003-09-25 19:16:14.000000000 -0700 @@ -42,7 +42,10 @@ struct rxrpc_peer struct rxrpc_timer timeout; /* timeout for grave destruction */ struct list_head link; /* link in transport's peer list */ struct list_head proc_link; /* link in /proc list */ - rwlock_t conn_lock; /* lock for connections */ + rwlock_t conn_idlock; /* lock for connection IDs */ + struct list_head conn_idlist; /* list of connections granted IDs */ + uint32_t conn_idcounter; /* connection ID counter */ + rwlock_t conn_lock; /* lock for active/dead connections */ struct list_head conn_active; /* active connections to/from this peer */ struct list_head conn_graveyard; /* graveyard for inactive connections */ spinlock_t conn_gylock; /* lock for conn_graveyard */ diff -prauN linux-2.6.0-test5/include/rxrpc/rxrpc.h wli-2.6.0-test5-bk12-25/include/rxrpc/rxrpc.h --- linux-2.6.0-test5/include/rxrpc/rxrpc.h 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/rxrpc/rxrpc.h 2003-09-25 19:16:14.000000000 -0700 @@ -14,7 +14,7 @@ #ifdef __KERNEL__ -extern u32 rxrpc_epoch; +extern uint32_t rxrpc_epoch; extern int rxrpc_ktrace; extern int rxrpc_kdebug; diff -prauN linux-2.6.0-test5/include/rxrpc/transport.h wli-2.6.0-test5-bk12-25/include/rxrpc/transport.h --- linux-2.6.0-test5/include/rxrpc/transport.h 2003-09-08 12:50:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/rxrpc/transport.h 2003-09-25 19:16:14.000000000 -0700 @@ -85,10 +85,11 @@ extern int rxrpc_create_transport(unsign static inline void rxrpc_get_transport(struct rxrpc_transport *trans) { - if (atomic_read(&trans->usage)<=0) + if (atomic_read(&trans->usage) <= 0) BUG(); atomic_inc(&trans->usage); - //printk("rxrpc_get_transport(%p{u=%d})\n",trans,atomic_read(&trans->usage)); + //printk("rxrpc_get_transport(%p{u=%d})\n", + // trans, atomic_read(&trans->usage)); } extern void rxrpc_put_transport(struct rxrpc_transport *trans); @@ -99,11 +100,6 @@ extern int rxrpc_add_service(struct rxrp extern void rxrpc_del_service(struct rxrpc_transport *trans, struct rxrpc_service *srv); -#if 0 -extern int rxrpc_trans_add_connection(struct rxrpc_transport *trans, - struct rxrpc_connection *conn); -#endif - extern void rxrpc_trans_receive_packet(struct rxrpc_transport *trans); extern int rxrpc_trans_immediate_abort(struct rxrpc_transport *trans, diff -prauN linux-2.6.0-test5/include/rxrpc/types.h wli-2.6.0-test5-bk12-25/include/rxrpc/types.h --- linux-2.6.0-test5/include/rxrpc/types.h 2003-09-08 12:50:00.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/rxrpc/types.h 2003-09-25 19:16:14.000000000 -0700 @@ -19,8 +19,8 @@ #include #include -typedef unsigned rxrpc_seq_t; /* Rx message sequence number */ -typedef unsigned rxrpc_serial_t; /* Rx message serial number */ +typedef uint32_t rxrpc_seq_t; /* Rx message sequence number */ +typedef uint32_t rxrpc_serial_t; /* Rx message serial number */ struct rxrpc_call; struct rxrpc_connection; diff -prauN linux-2.6.0-test5/include/scsi/scsi_tcq.h wli-2.6.0-test5-bk12-25/include/scsi/scsi_tcq.h --- linux-2.6.0-test5/include/scsi/scsi_tcq.h 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/include/scsi/scsi_tcq.h 2003-09-25 19:16:14.000000000 -0700 @@ -27,7 +27,7 @@ static inline void scsi_activate_tcq(str { if (sdev->tagged_supported) { if (!blk_queue_tagged(sdev->request_queue)) - blk_queue_init_tags(sdev->request_queue, depth); + blk_queue_init_tags(sdev->request_queue, depth, NULL); scsi_adjust_queue_depth(sdev, MSG_ORDERED_TAG, depth); } } diff -prauN linux-2.6.0-test5/init/Kconfig wli-2.6.0-test5-bk12-25/init/Kconfig --- linux-2.6.0-test5/init/Kconfig 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/init/Kconfig 2003-09-25 19:16:14.000000000 -0700 @@ -143,24 +143,24 @@ config IKCONFIG This option enables the complete Linux kernel ".config" file contents, information on compiler used to build the kernel, kernel running when this kernel was built and kernel version - from Makefile to be saved in kernel. It provides documentation + from Makefile to be saved in the kernel. It provides documentation of which kernel options are used in a running kernel or in an on-disk kernel. This information can be extracted from the kernel image file with the script scripts/extract-ikconfig and used as input to rebuild the current kernel or to build another kernel. It can also be extracted from a running kernel by reading - /proc/ikconfig/config and /proc/ikconfig/built_with, if enabled. - /proc/ikconfig/config will list the configuration that was used - to build the kernel and /proc/ikconfig/built_with will list + /proc/config.gz and /proc/config_built_with, if enabled (below). + /proc/config.gz will list the configuration that was used + to build the kernel and /proc/config_built_with will list information on the compiler and host machine that was used to build the kernel. config IKCONFIG_PROC - bool "Enable access to .config through /proc/ikconfig" + bool "Enable access to .config through /proc/config.gz" depends on IKCONFIG && PROC_FS ---help--- This option enables access to kernel configuration file and build - information through /proc/ikconfig. + information through /proc/config.gz. menuconfig EMBEDDED @@ -204,15 +204,22 @@ menu "Loadable module support" config MODULES bool "Enable loadable module support" help - Kernel modules are small pieces of compiled code which can be - inserted in or removed from the running kernel, using the programs - insmod and rmmod. This is described in the file - , including the fact that you have - to say "make modules" in order to compile the modules that you chose - during kernel configuration. Modules can be device drivers, file - systems, binary executable formats, and so on. If you think that you - may want to make use of modules with this kernel in the future, then - say Y here. If unsure, say Y. + Kernel modules are small pieces of compiled code which can + be inserted in the running kernel, rather than being + permanently built into the kernel. You use the "modprobe" + tool to add (and sometimes remove) them. If you say Y here, + many parts of the kernel can be built as modules (by + answering M instead of Y where indicated): this is most + useful for infrequently used options which are not required + for booting. For more information, see the man pages for + modprobe, lsmod, modinfo, insmod and rmmod. + + If you say Y here, you will need to run "make + modules_install" to put the modules under /lib/modules/ + where modprobe can find them (you may need to be root to do + this). + + If unsure, say Y. config MODULE_UNLOAD bool "Module unloading" @@ -251,21 +258,18 @@ config MODVERSIONS compiled for different kernels, by adding enough information to the modules to (hopefully) spot any changes which would make them incompatible with the kernel you are running. If - you say Y here, you will need a copy of genksyms. If unsure, say N. config KMOD - bool "Kernel module loader" + bool "Automatic kernel module loading" depends on MODULES help - Normally when you have selected some drivers and/or file systems to - be created as loadable modules, you also have the responsibility to - load the corresponding modules (using the programs insmod or - modprobe) before you can use them. If you say Y here however, the - kernel will be able to load modules for itself: when a part of the - kernel needs a module, it runs modprobe with the appropriate - arguments, thereby loading the module if it is available. (This is a - replacement for kerneld.) Say Y here and read about configuring it - in . + Normally when you have selected some parts of the kernel to + be created as kernel modules, you must load them (using the + "modprobe" command) before you can use them. If you say Y + here, some parts of the kernel will be able to load modules + automatically: when a part of the kernel needs a module, it + runs modprobe with the appropriate arguments, thereby + loading the module if it is available. If unsure, say Y. endmenu diff -prauN linux-2.6.0-test5/init/do_mounts.c wli-2.6.0-test5-bk12-25/init/do_mounts.c --- linux-2.6.0-test5/init/do_mounts.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/init/do_mounts.c 2003-09-25 19:16:14.000000000 -0700 @@ -76,11 +76,13 @@ static dev_t __init try_name(char *name, * Try the %u:%u format -- see print_dev_t() */ res = MKDEV(maj, min); + if (maj != MAJOR(res) || min != MINOR(res)) + goto fail; } else { /* * Nope. Try old-style "0321" */ - res = (dev_t)simple_strtoul(buf, &s, 16); + res = new_decode_dev(simple_strtoul(buf, &s, 16)); if (*s) goto fail; } @@ -107,7 +109,7 @@ static dev_t __init try_name(char *name, if (part < range) return res + part; fail: - return (dev_t) 0; + return 0; } /* @@ -145,8 +147,10 @@ dev_t name_to_dev_t(char *name) if (sscanf(name, "%u:%u", &maj, &min) == 2) { res = MKDEV(maj, min); + if (maj != MAJOR(res) || min != MINOR(res)) + goto fail; } else { - res = (dev_t)simple_strtoul(name, &p, 16); + res = new_decode_dev(simple_strtoul(name, &p, 16)); if (*p) goto fail; } @@ -187,7 +191,7 @@ out: sys_rmdir("/sys"); return res; fail: - res = (dev_t) 0; + res = 0; goto done; } diff -prauN linux-2.6.0-test5/init/do_mounts.h wli-2.6.0-test5-bk12-25/init/do_mounts.h --- linux-2.6.0-test5/init/do_mounts.h 2003-09-08 12:50:09.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/init/do_mounts.h 2003-09-25 19:16:14.000000000 -0700 @@ -10,7 +10,7 @@ #include asmlinkage long sys_unlink(const char *name); -asmlinkage long sys_mknod(const char *name, int mode, dev_t dev); +asmlinkage long sys_mknod(const char *name, int mode, unsigned dev); asmlinkage long sys_newstat(char * filename, struct stat * statbuf); asmlinkage long sys_ioctl(int fd, int cmd, unsigned long arg); asmlinkage long sys_mkdir(const char *name, int mode); @@ -43,11 +43,36 @@ static inline void umount_devfs(const ch static inline int create_dev(char *name, dev_t dev, char *devfs_name) { sys_unlink(name); - return sys_mknod(name, S_IFBLK|0600, dev); + return sys_mknod(name, S_IFBLK|0600, new_encode_dev(dev)); } #endif +#if BITS_PER_LONG == 32 +asmlinkage long sys_stat64(char *name, struct stat64 *stat); +static inline u32 bstat(char *name) +{ + struct stat64 stat; + if (sys_stat64(name, &stat) != 0) + return 0; + if (!S_ISBLK(stat.st_mode)) + return 0; + if (stat.st_rdev != (u32)stat.st_rdev) + return 0; + return stat.st_rdev; +} +#else +static inline u32 bstat(char *name) +{ + struct stat stat; + if (sys_newstat(name, &stat) != 0) + return 0; + if (!S_ISBLK(stat.st_mode)) + return 0; + return stat.st_rdev; +} +#endif + #ifdef CONFIG_BLK_DEV_RAM int __init rd_load_disk(int n); diff -prauN linux-2.6.0-test5/init/do_mounts_devfs.c wli-2.6.0-test5-bk12-25/init/do_mounts_devfs.c --- linux-2.6.0-test5/init/do_mounts_devfs.c 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/init/do_mounts_devfs.c 2003-09-25 19:16:14.000000000 -0700 @@ -78,9 +78,8 @@ static void * __init read_dir(char *path /* * recursively scan , looking for a device node of type */ -static int __init find_in_devfs(char *path, dev_t dev) +static int __init find_in_devfs(char *path, unsigned dev) { - struct stat buf; char *end = path + strlen(path); int rest = path + 64 - end; int size; @@ -96,11 +95,7 @@ static int __init find_in_devfs(char *pa switch (d->d_type) { case DT_BLK: sprintf(end, "/%s", d->d_name); - if (sys_newstat(path, &buf) < 0) - break; - if (!S_ISBLK(buf.st_mode)) - break; - if (buf.st_rdev != dev) + if (bstat(path) != dev) break; kfree(p); return 0; @@ -140,7 +135,7 @@ int __init create_dev(char *name, dev_t if (!dev) return -1; strcpy(path, "/dev"); - if (find_in_devfs(path, dev) < 0) + if (find_in_devfs(path, new_encode_dev(dev)) < 0) return -1; return sys_symlink(path + 5, name); } diff -prauN linux-2.6.0-test5/init/do_mounts_initrd.c wli-2.6.0-test5-bk12-25/init/do_mounts_initrd.c --- linux-2.6.0-test5/init/do_mounts_initrd.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/init/do_mounts_initrd.c 2003-09-25 19:16:14.000000000 -0700 @@ -40,7 +40,7 @@ static void __init handle_initrd(void) int error; int i, pid; - real_root_dev = ROOT_DEV; + real_root_dev = new_encode_dev(ROOT_DEV); create_dev("/dev/root.old", Root_RAM0, NULL); /* mount initrd on rootfs' /root */ mount_block_root("/dev/root.old", root_mountflags & ~MS_RDONLY); @@ -69,12 +69,12 @@ static void __init handle_initrd(void) close(root_fd); umount_devfs("/old/dev"); - if (real_root_dev == Root_RAM0) { + if (new_decode_dev(real_root_dev) == Root_RAM0) { sys_chdir("/old"); return; } - ROOT_DEV = real_root_dev; + ROOT_DEV = new_decode_dev(real_root_dev); mount_root(); printk(KERN_NOTICE "Trying to move old root to /initrd ... "); diff -prauN linux-2.6.0-test5/init/do_mounts_md.c wli-2.6.0-test5-bk12-25/init/do_mounts_md.c --- linux-2.6.0-test5/init/do_mounts_md.c 2003-09-08 12:50:28.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/init/do_mounts_md.c 2003-09-25 19:16:14.000000000 -0700 @@ -124,7 +124,7 @@ static void __init md_setup_drive(void) for (i = 0; i < MD_SB_DISKS && devname != 0; i++) { char *p; char comp_name[64]; - struct stat buf; + u32 rdev; p = strchr(devname, ','); if (p) @@ -134,9 +134,9 @@ static void __init md_setup_drive(void) if (strncmp(devname, "/dev/", 5) == 0) devname += 5; snprintf(comp_name, 63, "/dev/%s", devname); - if (sys_newstat(comp_name, &buf) == 0 && - S_ISBLK(buf.st_mode)) - dev = buf.st_rdev; + rdev = bstat(comp_name); + if (rdev) + dev = new_decode_dev(rdev); if (!dev) { printk(KERN_WARNING "md: Unknown device name: %s\n", devname); break; diff -prauN linux-2.6.0-test5/init/do_mounts_rd.c wli-2.6.0-test5-bk12-25/init/do_mounts_rd.c --- linux-2.6.0-test5/init/do_mounts_rd.c 2003-09-08 12:50:17.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/init/do_mounts_rd.c 2003-09-25 19:16:14.000000000 -0700 @@ -332,7 +332,7 @@ static int __init fill_inbuf(void) insize = read(crd_infd, inbuf, INBUFSIZ); if (insize == 0) { - error("RAMDISK: ran out of compressed data\n"); + error("RAMDISK: ran out of compressed data"); return -1; } @@ -369,7 +369,7 @@ static void __init flush_window(void) static void __init error(char *x) { - printk(KERN_ERR "%s", x); + printk(KERN_ERR "%s\n", x); exit_code = 1; unzip_error = 1; } diff -prauN linux-2.6.0-test5/init/initramfs.c wli-2.6.0-test5-bk12-25/init/initramfs.c --- linux-2.6.0-test5/init/initramfs.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/init/initramfs.c 2003-09-25 19:16:14.000000000 -0700 @@ -24,7 +24,7 @@ static void __init free(void *where) } asmlinkage long sys_mkdir(char *name, int mode); -asmlinkage long sys_mknod(char *name, int mode, dev_t dev); +asmlinkage long sys_mknod(char *name, int mode, unsigned dev); asmlinkage long sys_symlink(char *old, char *new); asmlinkage long sys_link(char *old, char *new); asmlinkage long sys_write(int fd, const char *buf, size_t size); @@ -92,7 +92,7 @@ static __initdata mode_t mode; static __initdata unsigned long body_len, name_len; static __initdata uid_t uid; static __initdata gid_t gid; -static __initdata dev_t rdev; +static __initdata unsigned rdev; static void __init parse_header(char *s) { @@ -113,7 +113,7 @@ static void __init parse_header(char *s) body_len = parsed[6]; major = parsed[7]; minor = parsed[8]; - rdev = MKDEV(parsed[9], parsed[10]); + rdev = new_encode_dev(MKDEV(parsed[9], parsed[10])); name_len = parsed[11]; } @@ -248,7 +248,6 @@ static int __init do_name(void) next_state = Reset; return 0; } - printk(KERN_INFO "-> %s\n", collected); if (S_ISREG(mode)) { if (maybe_link() >= 0) { wfd = sys_open(collected, O_WRONLY|O_CREAT, mode); @@ -261,11 +260,13 @@ static int __init do_name(void) } else if (S_ISDIR(mode)) { sys_mkdir(collected, mode); sys_chown(collected, uid, gid); + sys_chmod(collected, mode); } else if (S_ISBLK(mode) || S_ISCHR(mode) || S_ISFIFO(mode) || S_ISSOCK(mode)) { if (maybe_link() == 0) { sys_mknod(collected, mode, rdev); sys_chown(collected, uid, gid); + sys_chmod(collected, mode); } } else panic("populate_root: bogus mode: %o\n", mode); diff -prauN linux-2.6.0-test5/init/main.c wli-2.6.0-test5-bk12-25/init/main.c --- linux-2.6.0-test5/init/main.c 2003-09-08 12:49:54.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/init/main.c 2003-09-28 23:22:21.000000000 -0700 @@ -79,7 +79,6 @@ extern void signals_init(void); extern void buffer_init(void); extern void pidhash_init(void); extern void pidmap_init(void); -extern void pte_chain_init(void); extern void radix_tree_init(void); extern void free_initmem(void); extern void populate_rootfs(void); @@ -435,7 +434,6 @@ asmlinkage void __init start_kernel(void calibrate_delay(); pidmap_init(); pgtable_cache_init(); - pte_chain_init(); fork_init(num_physpages); proc_caches_init(); buffer_init(); @@ -542,12 +540,16 @@ static void do_pre_smp_initcalls(void) spawn_ksoftirqd(); } +static void run_init_process(char *init_filename) +{ + argv_init[0] = init_filename; + execve(init_filename, argv_init, envp_init); +} + extern void prepare_namespace(void); static int init(void * unused) { - static char * argv_sh[] = { "sh", NULL, }; - lock_kernel(); /* * Tell the world that we're going to be the grim @@ -592,10 +594,12 @@ static int init(void * unused) */ if (execute_command) - execve(execute_command,argv_init,envp_init); - execve("/sbin/init",argv_init,envp_init); - execve("/etc/init",argv_init,envp_init); - execve("/bin/init",argv_init,envp_init); - execve("/bin/sh",argv_sh,envp_init); + run_init_process(execute_command); + + run_init_process("/sbin/init"); + run_init_process("/etc/init"); + run_init_process("/bin/init"); + run_init_process("/bin/sh"); + panic("No init found. Try passing init= option to kernel."); } diff -prauN linux-2.6.0-test5/ipc/sem.c wli-2.6.0-test5-bk12-25/ipc/sem.c --- linux-2.6.0-test5/ipc/sem.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/ipc/sem.c 2003-09-25 19:16:14.000000000 -0700 @@ -1038,8 +1038,10 @@ retry_undos: * allocated an undo structure, it was invalidated by an RMID * and now a new array with received the same id. Check and retry. */ - if (un && un->semid == -1) + if (un && un->semid == -1) { + sem_unlock(sma); goto retry_undos; + } error = -EFBIG; if (max >= sma->sem_nsems) goto out_unlock_free; diff -prauN linux-2.6.0-test5/ipc/shm.c wli-2.6.0-test5-bk12-25/ipc/shm.c --- linux-2.6.0-test5/ipc/shm.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/ipc/shm.c 2003-09-28 21:59:32.000000000 -0700 @@ -380,9 +380,9 @@ static void shm_get_stat(unsigned long * if (is_file_hugepages(shp->shm_file)) { struct address_space *mapping = inode->i_mapping; - spin_lock(&mapping->page_lock); + mapping_wrlock(&mapping->page_lock); *rss += (HPAGE_SIZE/PAGE_SIZE)*mapping->nrpages; - spin_unlock(&mapping->page_lock); + mapping_wrunlock(&mapping->page_lock); } else { struct shmem_inode_info *info = SHMEM_I(inode); spin_lock(&info->lock); diff -prauN linux-2.6.0-test5/kernel/Makefile wli-2.6.0-test5-bk12-25/kernel/Makefile --- linux-2.6.0-test5/kernel/Makefile 2003-09-08 12:49:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/kernel/Makefile 2003-09-25 19:16:14.000000000 -0700 @@ -18,6 +18,7 @@ obj-$(CONFIG_PM) += power/ obj-$(CONFIG_BSD_PROCESS_ACCT) += acct.o obj-$(CONFIG_COMPAT) += compat.o obj-$(CONFIG_IKCONFIG) += configs.o +obj-$(CONFIG_IKCONFIG_PROC) += configs.o ifneq ($(CONFIG_IA64),y) # According to Alan Modra , the -fno-omit-frame-pointer is @@ -28,12 +29,32 @@ ifneq ($(CONFIG_IA64),y) CFLAGS_sched.o := $(PROFILING) -fno-omit-frame-pointer endif +# configs.o uses generated files - dependecies must be listed explicitly +$(obj)/configs.o: $(obj)/ikconfig.h + +ifdef CONFIG_IKCONFIG_PROC +$(obj)/configs.o: $(obj)/config_data.h +endif + +# ikconfig.h contains all the selected config entries - generated +# from top-level Makefile and .config. Info from ikconfig.h can +# be extracted from the kernel binary. + quiet_cmd_ikconfig = IKCFG $@ cmd_ikconfig = $(CONFIG_SHELL) $< .config $(srctree)/Makefile > $@ targets += ikconfig.h - $(obj)/ikconfig.h: scripts/mkconfigs .config Makefile FORCE $(call if_changed,ikconfig) -$(obj)/configs.o: $(obj)/ikconfig.h +# config_data.h contains the same information as ikconfig.h but gzipped. +# Info from config_data can be extracted from /proc/config* +targets += config_data.gz +$(obj)/config_data.gz: .config FORCE + $(call if_changed,gzip) + +quiet_cmd_ikconfiggz = IKCFG $@ + cmd_ikconfiggz = cat $< | scripts/bin2c kernel_config_data > $@ +targets += config_data.h +$(obj)/config_data.h: $(obj)/config_data.gz FORCE + $(call if_changed,ikconfiggz) diff -prauN linux-2.6.0-test5/kernel/acct.c wli-2.6.0-test5-bk12-25/kernel/acct.c --- linux-2.6.0-test5/kernel/acct.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/kernel/acct.c 2003-09-25 19:16:14.000000000 -0700 @@ -340,9 +340,10 @@ static void do_acct_process(long exitcod ac.ac_btime = xtime.tv_sec - elapsed; ac.ac_utime = encode_comp_t(current->utime); ac.ac_stime = encode_comp_t(current->stime); + /* we really need to bite the bullet and change layout */ ac.ac_uid = current->uid; ac.ac_gid = current->gid; - ac.ac_tty = current->tty ? current->tty->device : 0; + ac.ac_tty = current->tty ? old_encode_dev(tty_devnum(current->tty)) : 0; ac.ac_flag = 0; if (current->flags & PF_FORKNOEXEC) diff -prauN linux-2.6.0-test5/kernel/configs.c wli-2.6.0-test5-bk12-25/kernel/configs.c --- linux-2.6.0-test5/kernel/configs.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/kernel/configs.c 2003-09-25 19:16:14.000000000 -0700 @@ -23,141 +23,85 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#include #include #include #include #include #include -#include -#include #include /**************************************************/ /* the actual current config file */ +/* This one is for extraction from the kernel binary file image. */ #include "ikconfig.h" #ifdef CONFIG_IKCONFIG_PROC +/* This is the data that can be read from /proc/config.gz. */ +#include "config_data.h" + /**************************************************/ /* globals and useful constants */ -static const char IKCONFIG_NAME[] = "ikconfig"; -static const char IKCONFIG_VERSION[] = "0.6"; - -static int ikconfig_size; -static struct proc_dir_entry *ikconfig_dir; +static const char IKCONFIG_VERSION[] __initdata = "0.7"; static ssize_t -ikconfig_read(struct file *file, char __user *buf, - size_t len, loff_t *offset) +ikconfig_read_current(struct file *file, char __user *buf, + size_t len, loff_t * offset) { loff_t pos = *offset; ssize_t count; - - if (pos >= ikconfig_size) + + if (pos >= kernel_config_data_size) return 0; - count = min(len, (size_t)(ikconfig_size - pos)); - if(copy_to_user(buf, ikconfig_config + pos, count)) + count = min(len, (size_t)(kernel_config_data_size - pos)); + if(copy_to_user(buf, kernel_config_data + pos, count)) return -EFAULT; *offset += count; return count; } -static struct file_operations config_fops = { +static struct file_operations ikconfig_file_ops = { .owner = THIS_MODULE, - .read = ikconfig_read, + .read = ikconfig_read_current, }; /***************************************************/ -/* built_with_show: let people read the info */ -/* we have on the tools used to build this kernel */ - -static int builtwith_show(struct seq_file *seq, void *v) -{ - seq_printf(seq, - "Kernel: %s\nCompiler: %s\nVersion_in_Makefile: %s\n", - ikconfig_built_with, LINUX_COMPILER, UTS_RELEASE); - return 0; -} - -static int built_with_open(struct inode *inode, struct file *file) -{ - return single_open(file, builtwith_show, PDE(inode)->data); -} - -static struct file_operations builtwith_fops = { - .owner = THIS_MODULE, - .open = built_with_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; - -/***************************************************/ /* ikconfig_init: start up everything we need to */ -int __init -ikconfig_init(void) +static int __init ikconfig_init(void) { struct proc_dir_entry *entry; - printk(KERN_INFO "ikconfig %s with /proc/ikconfig\n", + printk(KERN_INFO "ikconfig %s with /proc/config*\n", IKCONFIG_VERSION); - /* create the ikconfig directory */ - ikconfig_dir = proc_mkdir(IKCONFIG_NAME, NULL); - if (ikconfig_dir == NULL) - goto leave; - ikconfig_dir->owner = THIS_MODULE; - /* create the current config file */ - entry = create_proc_entry("config", S_IFREG | S_IRUGO, ikconfig_dir); + entry = create_proc_entry("config.gz", S_IFREG | S_IRUGO, + &proc_root); if (!entry) - goto leave2; + return -ENOMEM; - entry->proc_fops = &config_fops; - entry->size = ikconfig_size = strlen(ikconfig_config); - - /* create the "built with" file */ - entry = create_proc_entry("built_with", S_IFREG | S_IRUGO, - ikconfig_dir); - if (!entry) - goto leave3; - entry->proc_fops = &builtwith_fops; + entry->proc_fops = &ikconfig_file_ops; + entry->size = kernel_config_data_size; return 0; - -leave3: - /* remove the file from proc */ - remove_proc_entry("config", ikconfig_dir); - -leave2: - /* remove the ikconfig directory */ - remove_proc_entry(IKCONFIG_NAME, NULL); - -leave: - return -ENOMEM; } /***************************************************/ -/* cleanup_ikconfig: clean up our mess */ +/* ikconfig_cleanup: clean up our mess */ -static void -cleanup_ikconfig(void) +static void __exit ikconfig_cleanup(void) { - /* remove the files */ - remove_proc_entry("config", ikconfig_dir); - remove_proc_entry("built_with", ikconfig_dir); - - /* remove the ikconfig directory */ - remove_proc_entry(IKCONFIG_NAME, NULL); + remove_proc_entry("config.gz", &proc_root); } module_init(ikconfig_init); -module_exit(cleanup_ikconfig); +module_exit(ikconfig_cleanup); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Randy Dunlap"); diff -prauN linux-2.6.0-test5/kernel/exit.c wli-2.6.0-test5-bk12-25/kernel/exit.c --- linux-2.6.0-test5/kernel/exit.c 2003-09-08 12:50:23.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/kernel/exit.c 2003-09-25 19:16:14.000000000 -0700 @@ -152,7 +152,7 @@ static int will_become_orphaned_pgrp(int || p->state >= TASK_ZOMBIE || p->real_parent->pid == 1) continue; - if (p->real_parent->pgrp != pgrp + if (process_group(p->real_parent) != pgrp && p->real_parent->session == p->session) { ret = 0; break; @@ -247,9 +247,9 @@ void __set_special_pids(pid_t session, p curr->session = session; attach_pid(curr, PIDTYPE_SID, session); } - if (curr->pgrp != pgrp) { + if (process_group(curr) != pgrp) { detach_pid(curr, PIDTYPE_PGID); - curr->pgrp = pgrp; + curr->group_leader->__pgrp = pgrp; attach_pid(curr, PIDTYPE_PGID, pgrp); } } @@ -508,9 +508,9 @@ static inline void reparent_thread(task_ * than we are, and it was the only connection * outside, so the child pgrp is now orphaned. */ - if ((p->pgrp != father->pgrp) && + if ((process_group(p) != process_group(father)) && (p->session == father->session)) { - int pgrp = p->pgrp; + int pgrp = process_group(p); if (will_become_orphaned_pgrp(pgrp, NULL) && has_stopped_jobs(pgrp)) { __kill_pg_info(SIGHUP, (void *)1, pgrp); @@ -618,12 +618,12 @@ static void exit_notify(struct task_stru t = tsk->real_parent; - if ((t->pgrp != tsk->pgrp) && + if ((process_group(t) != process_group(tsk)) && (t->session == tsk->session) && - will_become_orphaned_pgrp(tsk->pgrp, tsk) && - has_stopped_jobs(tsk->pgrp)) { - __kill_pg_info(SIGHUP, (void *)1, tsk->pgrp); - __kill_pg_info(SIGCONT, (void *)1, tsk->pgrp); + will_become_orphaned_pgrp(process_group(tsk), tsk) && + has_stopped_jobs(process_group(tsk))) { + __kill_pg_info(SIGHUP, (void *)1, process_group(tsk)); + __kill_pg_info(SIGCONT, (void *)1, process_group(tsk)); } /* Let father know we died @@ -813,10 +813,10 @@ static int eligible_child(pid_t pid, int if (p->pid != pid) return 0; } else if (!pid) { - if (p->pgrp != current->pgrp) + if (process_group(p) != process_group(current)) return 0; } else if (pid != -1) { - if (p->pgrp != -pid) + if (process_group(p) != -pid) return 0; } diff -prauN linux-2.6.0-test5/kernel/fork.c wli-2.6.0-test5-bk12-25/kernel/fork.c --- linux-2.6.0-test5/kernel/fork.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/kernel/fork.c 2003-09-29 00:29:01.000000000 -0700 @@ -30,6 +30,7 @@ #include #include #include +#include #include #include @@ -274,9 +275,9 @@ static inline int dup_mmap(struct mm_str atomic_dec(&inode->i_writecount); /* insert tmp into the share list, just after mpnt */ - down(&inode->i_mapping->i_shared_sem); - list_add_tail(&tmp->shared, &mpnt->shared); - up(&inode->i_mapping->i_shared_sem); + spin_lock(&inode->i_mapping->i_shared_lock); + list_add_tail_rcu(&tmp->shared, &mpnt->shared); + spin_unlock(&inode->i_mapping->i_shared_lock); } /* @@ -305,7 +306,7 @@ out: return retval; fail_nomem: retval = -ENOMEM; - fail: +fail: vm_unacct_memory(charge); goto out; } @@ -330,8 +331,21 @@ static inline void mm_free_pgd(struct mm spinlock_t mmlist_lock __cacheline_aligned_in_smp = SPIN_LOCK_UNLOCKED; int mmlist_nr; +/* SLAB cache for mm_struct structures (tsk->mm) */ +static kmem_cache_t *mm_cachep; + #define allocate_mm() (kmem_cache_alloc(mm_cachep, SLAB_KERNEL)) -#define free_mm(mm) (kmem_cache_free(mm_cachep, (mm))) + +static void __free_mm(void *mm) +{ + kmem_cache_free(mm_cachep, mm); +} + +void free_mm(struct mm_struct *mm) +{ + INIT_RCU_HEAD(&mm->rcu); + call_rcu(&mm->rcu, __free_mm, mm); +} #include @@ -346,6 +360,7 @@ static struct mm_struct * mm_init(struct mm->ioctx_list = NULL; mm->default_kioctx = (struct kioctx)INIT_KIOCTX(mm->default_kioctx, *mm); mm->free_area_cache = TASK_UNMAPPED_BASE; + mm->shared = mm->text = mm->lib = mm->data = mm->dirty = mm->stack = 0; if (likely(!mm_alloc_pgd(mm))) { mm->def_flags = 0; @@ -363,11 +378,15 @@ struct mm_struct * mm_alloc(void) struct mm_struct * mm; mm = allocate_mm(); - if (mm) { - memset(mm, 0, sizeof(*mm)); - return mm_init(mm); + if (!mm) + return NULL; + memset(mm, 0, sizeof(*mm)); + if (exec_rmap(mm)) { + mm_free_pgd(mm); + free_mm(mm); + return NULL; } - return NULL; + return mm_init(mm); } /* @@ -394,6 +413,7 @@ void mmput(struct mm_struct *mm) spin_unlock(&mmlist_lock); exit_aio(mm); exit_mmap(mm); + exit_rmap(mm); mmdrop(mm); } } @@ -498,8 +518,10 @@ static int copy_mm(unsigned long clone_f if (!mm_init(mm)) goto fail_nomem; + dup_rmap(mm, oldmm); + if (init_new_context(tsk,mm)) - goto free_pt; + goto fail_nocontext; retval = dup_mmap(mm, oldmm); if (retval) @@ -514,6 +536,15 @@ free_pt: mmput(mm); fail_nomem: return retval; + +fail_nocontext: + /* + * If init_new_context() failed, we cannot use mmput() to free the mm + * because it calls destroy_context() + */ + mm_free_pgd(mm); + free_mm(mm); + return retval; } static inline struct fs_struct *__copy_fs_struct(struct fs_struct *old) @@ -766,6 +797,14 @@ struct task_struct *copy_process(unsigne return ERR_PTR(-EINVAL); /* + * Shared signal handlers imply shared VM. By way of the above, + * thread groups also imply shared VM. Blocking this case allows + * for various simplifications in other code. + */ + if ((clone_flags & CLONE_SIGHAND) && !(clone_flags & CLONE_VM)) + return ERR_PTR(-EINVAL); + + /* * CLONE_DETACHED must match CLONE_THREAD: it's a historical * thing. */ @@ -925,7 +964,7 @@ struct task_struct *copy_process(unsigne */ p->first_time_slice = 1; current->time_slice >>= 1; - p->last_run = jiffies; + p->timestamp = sched_clock(); if (!current->time_slice) { /* * This case is rare, it happens when the parent has only @@ -1004,7 +1043,7 @@ struct task_struct *copy_process(unsigne attach_pid(p, PIDTYPE_PID, p->pid); if (thread_group_leader(p)) { attach_pid(p, PIDTYPE_TGID, p->tgid); - attach_pid(p, PIDTYPE_PGID, p->pgrp); + attach_pid(p, PIDTYPE_PGID, process_group(p)); attach_pid(p, PIDTYPE_SID, p->session); if (p->pid) __get_cpu_var(process_counts)++; @@ -1152,8 +1191,7 @@ kmem_cache_t *fs_cachep; /* SLAB cache for vm_area_struct structures */ kmem_cache_t *vm_area_cachep; -/* SLAB cache for mm_struct structures (tsk->mm) */ -kmem_cache_t *mm_cachep; +void init_rmap(void); void __init proc_caches_init(void) { @@ -1192,4 +1230,6 @@ void __init proc_caches_init(void) SLAB_HWCACHE_ALIGN, NULL, NULL); if(!mm_cachep) panic("vma_init: Cannot alloc mm_struct SLAB cache"); + + init_rmap(); } diff -prauN linux-2.6.0-test5/kernel/futex.c wli-2.6.0-test5-bk12-25/kernel/futex.c --- linux-2.6.0-test5/kernel/futex.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/kernel/futex.c 2003-09-25 19:16:14.000000000 -0700 @@ -33,7 +33,7 @@ #include #include #include -#include +#include #include #include #include @@ -44,6 +44,7 @@ /* * Futexes are matched on equal values of this key. * The key type depends on whether it's a shared or private mapping. + * Don't rearrange members without looking at hash_futex(). */ union futex_key { struct { @@ -79,9 +80,15 @@ struct futex_q { struct file *filp; }; -/* The key for the hash is the address + index + offset within page */ -static struct list_head futex_queues[1<both.word - + (unsigned long) key->both.ptr - + key->both.offset, FUTEX_HASHBITS)]; + u32 hash = jhash2((u32*)&key->both.word, + (sizeof(key->both.word)+sizeof(key->both.ptr))/4, + key->both.offset); + return &futex_queues[hash & ((1 << FUTEX_HASHBITS)-1)]; } /* @@ -214,6 +222,7 @@ static int get_futex_key(unsigned long u static int futex_wake(unsigned long uaddr, int num) { struct list_head *i, *next, *head; + struct futex_hash_bucket *bh; union futex_key key; int ret; @@ -223,9 +232,10 @@ static int futex_wake(unsigned long uadd if (unlikely(ret != 0)) goto out; - head = hash_futex(&key); + bh = hash_futex(&key); + spin_lock(&bh->lock); + head = &bh->chain; - spin_lock(&futex_lock); list_for_each_safe(i, next, head) { struct futex_q *this = list_entry(i, struct futex_q, list); @@ -239,7 +249,7 @@ static int futex_wake(unsigned long uadd break; } } - spin_unlock(&futex_lock); + spin_unlock(&bh->lock); out: up_read(¤t->mm->mmap_sem); @@ -254,6 +264,7 @@ static int futex_requeue(unsigned long u int nr_wake, int nr_requeue) { struct list_head *i, *next, *head1, *head2; + struct futex_hash_bucket *bh1, *bh2; union futex_key key1, key2; int ret; @@ -266,10 +277,19 @@ static int futex_requeue(unsigned long u if (unlikely(ret != 0)) goto out; - head1 = hash_futex(&key1); - head2 = hash_futex(&key2); + bh1 = hash_futex(&key1); + bh2 = hash_futex(&key2); + if (bh1 < bh2) { + spin_lock(&bh1->lock); + spin_lock(&bh2->lock); + } else { + spin_lock(&bh2->lock); + if (bh1 > bh2) + spin_lock(&bh1->lock); + } + head1 = &bh1->chain; + head2 = &bh2->chain; - spin_lock(&futex_lock); list_for_each_safe(i, next, head1) { struct futex_q *this = list_entry(i, struct futex_q, list); @@ -291,8 +311,14 @@ static int futex_requeue(unsigned long u } } } - spin_unlock(&futex_lock); - + if (bh1 < bh2) { + spin_unlock(&bh2->lock); + spin_unlock(&bh1->lock); + } else { + if (bh1 > bh2) + spin_unlock(&bh1->lock); + spin_unlock(&bh2->lock); + } out: up_read(¤t->mm->mmap_sem); return ret; @@ -301,28 +327,30 @@ out: static inline void queue_me(struct futex_q *q, union futex_key *key, int fd, struct file *filp) { - struct list_head *head = hash_futex(key); + struct futex_hash_bucket *bh = hash_futex(key); + struct list_head *head = &bh->chain; q->key = *key; q->fd = fd; q->filp = filp; - spin_lock(&futex_lock); + spin_lock(&bh->lock); list_add_tail(&q->list, head); - spin_unlock(&futex_lock); + spin_unlock(&bh->lock); } /* Return 1 if we were still queued (ie. 0 means we were woken) */ static inline int unqueue_me(struct futex_q *q) { + struct futex_hash_bucket *bh = hash_futex(&q->key); int ret = 0; - spin_lock(&futex_lock); + spin_lock(&bh->lock); if (!list_empty(&q->list)) { list_del(&q->list); ret = 1; } - spin_unlock(&futex_lock); + spin_unlock(&bh->lock); return ret; } @@ -332,8 +360,8 @@ static int futex_wait(unsigned long uadd int ret, curval; union futex_key key; struct futex_q q; + struct futex_hash_bucket *bh = NULL; - try_again: init_waitqueue_head(&q.waiters); down_read(¤t->mm->mmap_sem); @@ -367,25 +395,26 @@ static int futex_wait(unsigned long uadd /* * There might have been scheduling since the queue_me(), as we * cannot hold a spinlock across the get_user() in case it - * faults. So we cannot just set TASK_INTERRUPTIBLE state when + * faults, and we cannot just set TASK_INTERRUPTIBLE state when * queueing ourselves into the futex hash. This code thus has to - * rely on the futex_wake() code doing a wakeup after removing - * the waiter from the list. + * rely on the futex_wake() code removing us from hash when it + * wakes us up. */ add_wait_queue(&q.waiters, &wait); - spin_lock(&futex_lock); + bh = hash_futex(&key); + spin_lock(&bh->lock); set_current_state(TASK_INTERRUPTIBLE); if (unlikely(list_empty(&q.list))) { /* * We were woken already. */ - spin_unlock(&futex_lock); + spin_unlock(&bh->lock); set_current_state(TASK_RUNNING); return 0; } - spin_unlock(&futex_lock); + spin_unlock(&bh->lock); time = schedule_timeout(time); set_current_state(TASK_RUNNING); @@ -394,26 +423,17 @@ static int futex_wait(unsigned long uadd * we are the only user of it. */ - /* - * Were we woken or interrupted for a valid reason? - */ - ret = unqueue_me(&q); - if (ret == 0) + /* If we were woken (and unqueued), we succeeded, whatever. */ + if (!unqueue_me(&q)) return 0; if (time == 0) return -ETIMEDOUT; - if (signal_pending(current)) - return -EINTR; - - /* - * No, it was a spurious wakeup. Try again. Should never happen. :) - */ - goto try_again; + /* A spurious wakeup should never happen. */ + WARN_ON(!signal_pending(current)); + return -EINTR; out_unqueue: - /* - * Were we unqueued anyway? - */ + /* If we were woken (and unqueued), we succeeded, whatever. */ if (!unqueue_me(&q)) ret = 0; out_release_sem: @@ -435,13 +455,14 @@ static unsigned int futex_poll(struct fi struct poll_table_struct *wait) { struct futex_q *q = filp->private_data; + struct futex_hash_bucket *bh = hash_futex(&q->key); int ret = 0; poll_wait(filp, &q->waiters, wait); - spin_lock(&futex_lock); + spin_lock(&bh->lock); if (list_empty(&q->list)) ret = POLLIN | POLLRDNORM; - spin_unlock(&futex_lock); + spin_unlock(&bh->lock); return ret; } @@ -587,8 +608,10 @@ static int __init init(void) register_filesystem(&futex_fs_type); futex_mnt = kern_mount(&futex_fs_type); - for (i = 0; i < ARRAY_SIZE(futex_queues); i++) - INIT_LIST_HEAD(&futex_queues[i]); + for (i = 0; i < ARRAY_SIZE(futex_queues); i++) { + INIT_LIST_HEAD(&futex_queues[i].chain); + futex_queues[i].lock = SPIN_LOCK_UNLOCKED; + } return 0; } __initcall(init); diff -prauN linux-2.6.0-test5/kernel/ksyms.c wli-2.6.0-test5-bk12-25/kernel/ksyms.c --- linux-2.6.0-test5/kernel/ksyms.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/kernel/ksyms.c 2003-09-25 19:16:15.000000000 -0700 @@ -348,8 +348,6 @@ EXPORT_SYMBOL(lock_page); EXPORT_SYMBOL(unlock_page); /* device registration */ -EXPORT_SYMBOL(register_chrdev); -EXPORT_SYMBOL(unregister_chrdev); EXPORT_SYMBOL(register_blkdev); EXPORT_SYMBOL(unregister_blkdev); EXPORT_SYMBOL(tty_register_driver); diff -prauN linux-2.6.0-test5/kernel/pid.c wli-2.6.0-test5-bk12-25/kernel/pid.c --- linux-2.6.0-test5/kernel/pid.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/kernel/pid.c 2003-09-25 20:56:24.000000000 -0700 @@ -172,13 +172,22 @@ int attach_pid(task_t *task, enum pid_ty if (pid) atomic_inc(&pid->count); else { + struct list_head *elem, *bucket; + pid = &task->pids[type].pid; pid->nr = nr; atomic_set(&pid->count, 1); INIT_LIST_HEAD(&pid->task_list); pid->task = task; get_task_struct(task); - list_add(&pid->hash_chain, &pid_hash[type][pid_hashfn(nr)]); + bucket = &pid_hash[type][pid_hashfn(nr)]; + __list_for_each(elem, bucket) { + struct pid *walk; + walk = list_entry(elem, struct pid, hash_chain); + if (walk->nr > nr) + break; + } + list_add_tail(&pid->hash_chain, elem); } list_add_tail(&task->pids[type].pid_chain, &pid->task_list); task->pids[type].pidptr = pid; @@ -221,6 +230,42 @@ void detach_pid(task_t *task, enum pid_t free_pidmap(nr); } +/** + * find_next_tgid - Returns the pid of next task. + * @pid: Starting point for the search. + * + * Returns the pid number of the task that follows behind + * "pid". The function works even if the input pid value + * is not valid anymore. + */ +int find_next_tgid(int tgid) +{ + struct list_head *elem, *bucket; + + if (!tgid) { + bucket = &pid_hash[PIDTYPE_TGID][0]; + } else { + bucket = &pid_hash[PIDTYPE_TGID][pid_hashfn(tgid)]; + } + read_lock(&tasklist_lock); +next_chain: + __list_for_each(elem, bucket) { + struct pid *walk; + walk = list_entry(elem, struct pid, hash_chain); + if (walk->nr > tgid) { + tgid = walk->nr; + read_unlock(&tasklist_lock); + return tgid; + } + } + tgid = 0; + bucket++; + if (bucket < &pid_hash[PIDTYPE_TGID][1<pid); attach_pid(thread, PIDTYPE_TGID, thread->tgid); - attach_pid(thread, PIDTYPE_PGID, thread->pgrp); + attach_pid(thread, PIDTYPE_PGID, leader->__pgrp); attach_pid(thread, PIDTYPE_SID, thread->session); list_add_tail(&thread->tasks, &init_task.tasks); attach_pid(leader, PIDTYPE_PID, leader->pid); attach_pid(leader, PIDTYPE_TGID, leader->tgid); - attach_pid(leader, PIDTYPE_PGID, leader->pgrp); + attach_pid(leader, PIDTYPE_PGID, leader->__pgrp); attach_pid(leader, PIDTYPE_SID, leader->session); } diff -prauN linux-2.6.0-test5/kernel/posix-timers.c wli-2.6.0-test5-bk12-25/kernel/posix-timers.c --- linux-2.6.0-test5/kernel/posix-timers.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/kernel/posix-timers.c 2003-09-25 19:16:15.000000000 -0700 @@ -344,6 +344,7 @@ static inline struct task_struct * good_ return NULL; if ((event->sigev_notify & ~SIGEV_NONE & MIPS_SIGEV) && + event->sigev_signo && ((unsigned) (event->sigev_signo > SIGRTMAX))) return NULL; diff -prauN linux-2.6.0-test5/kernel/resource.c wli-2.6.0-test5-bk12-25/kernel/resource.c --- linux-2.6.0-test5/kernel/resource.c 2003-09-08 12:50:11.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/kernel/resource.c 2003-09-25 19:16:15.000000000 -0700 @@ -38,75 +38,91 @@ static rwlock_t resource_lock = RW_LOCK_ #ifdef CONFIG_PROC_FS -#define MAX_IORES_LEVEL 5 +enum { MAX_IORES_LEVEL = 5 }; -/* - * do_resource_list(): - * for reports of /proc/ioports and /proc/iomem; - * do current entry, then children, then siblings; - */ -static int do_resource_list(struct seq_file *m, struct resource *res, const char *fmt, int level) +static void *r_next(struct seq_file *m, void *v, loff_t *pos) { - while (res) { - const char *name; - - name = res->name ? res->name : ""; - if (level > MAX_IORES_LEVEL) - level = MAX_IORES_LEVEL; - seq_printf (m, fmt + 2 * MAX_IORES_LEVEL - 2 * level, - res->start, res->end, name); - - if (res->child) - do_resource_list(m, res->child, fmt, level + 1); + struct resource *p = v; + (*pos)++; + if (p->child) + return p->child; + while (!p->sibling && p->parent) + p = p->parent; + return p->sibling; +} - res = res->sibling; - } +static void *r_start(struct seq_file *m, loff_t *pos) +{ + struct resource *p = m->private; + loff_t l = 0; + read_lock(&resource_lock); + for (p = p->child; p && l < *pos; p = r_next(m, p, &l)) + ; + return p; +} - return 0; +static void r_stop(struct seq_file *m, void *v) +{ + read_unlock(&resource_lock); } -static int ioresources_show(struct seq_file *m, void *v) +static int r_show(struct seq_file *m, void *v) { struct resource *root = m->private; - char *fmt; - int retval; + struct resource *r = v, *p; + int width = root->end < 0x10000 ? 4 : 8; + int depth; - fmt = root->end < 0x10000 - ? " %04lx-%04lx : %s\n" - : " %08lx-%08lx : %s\n"; - read_lock(&resource_lock); - retval = do_resource_list(m, root->child, fmt, 0); - read_unlock(&resource_lock); - return retval; + for (depth = 0, p = r; depth < MAX_IORES_LEVEL; depth++, p = p->parent) + if (p->parent == root) + break; + seq_printf(m, "%*s%0*lx-%0*lx : %s\n", + depth * 2, "", + width, r->start, + width, r->end, + r->name ? r->name : ""); + return 0; } -static int ioresources_open(struct file *file, struct resource *root) +struct seq_operations resource_op = { + .start = r_start, + .next = r_next, + .stop = r_stop, + .show = r_show, +}; + +static int ioports_open(struct inode *inode, struct file *file) { - return single_open(file, ioresources_show, root); + int res = seq_open(file, &resource_op); + if (!res) { + struct seq_file *m = file->private_data; + m->private = &ioport_resource; + } + return res; } -static int ioports_open(struct inode *inode, struct file *file) +static int iomem_open(struct inode *inode, struct file *file) { - return ioresources_open(file, &ioport_resource); + int res = seq_open(file, &resource_op); + if (!res) { + struct seq_file *m = file->private_data; + m->private = &iomem_resource; + } + return res; } static struct file_operations proc_ioports_operations = { .open = ioports_open, .read = seq_read, .llseek = seq_lseek, - .release = single_release, + .release = seq_release, }; -static int iomem_open(struct inode *inode, struct file *file) -{ - return ioresources_open(file, &iomem_resource); -} - static struct file_operations proc_iomem_operations = { .open = iomem_open, .read = seq_read, .llseek = seq_lseek, - .release = single_release, + .release = seq_release, }; static int __init ioresources_init(void) diff -prauN linux-2.6.0-test5/kernel/sched.c wli-2.6.0-test5-bk12-25/kernel/sched.c --- linux-2.6.0-test5/kernel/sched.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/kernel/sched.c 2003-09-25 19:16:15.000000000 -0700 @@ -14,6 +14,7 @@ * an array-switch method of distributing timeslices * and per-CPU runqueues. Cleanups and useful suggestions * by Davide Libenzi, preemptible kernel bits by Robert Love. + * 2003-09-03 Interactivity tuning by Con Kolivas. */ #include @@ -58,6 +59,14 @@ #define USER_PRIO(p) ((p)-MAX_RT_PRIO) #define TASK_USER_PRIO(p) USER_PRIO((p)->static_prio) #define MAX_USER_PRIO (USER_PRIO(MAX_PRIO)) +#define AVG_TIMESLICE (MIN_TIMESLICE + ((MAX_TIMESLICE - MIN_TIMESLICE) *\ + (MAX_PRIO-1-NICE_TO_PRIO(0))/(MAX_USER_PRIO - 1))) + +/* + * Some helpers for converting nanosecond timing to jiffy resolution + */ +#define NS_TO_JIFFIES(TIME) ((TIME) / (1000000000 / HZ)) +#define JIFFIES_TO_NS(TIME) ((TIME) * (1000000000 / HZ)) /* * These are the 'tuning knobs' of the scheduler: @@ -68,14 +77,18 @@ */ #define MIN_TIMESLICE ( 10 * HZ / 1000) #define MAX_TIMESLICE (200 * HZ / 1000) -#define CHILD_PENALTY 50 +#define ON_RUNQUEUE_WEIGHT 30 +#define CHILD_PENALTY 95 #define PARENT_PENALTY 100 #define EXIT_WEIGHT 3 #define PRIO_BONUS_RATIO 25 +#define MAX_BONUS (MAX_USER_PRIO * PRIO_BONUS_RATIO / 100) #define INTERACTIVE_DELTA 2 -#define MAX_SLEEP_AVG (10*HZ) -#define STARVATION_LIMIT (10*HZ) +#define MAX_SLEEP_AVG (AVG_TIMESLICE * MAX_BONUS) +#define STARVATION_LIMIT (MAX_SLEEP_AVG) +#define NS_MAX_SLEEP_AVG (JIFFIES_TO_NS(MAX_SLEEP_AVG)) #define NODE_THRESHOLD 125 +#define CREDIT_LIMIT 100 /* * If a task is 'interactive' then we reinsert it in the active @@ -105,6 +118,19 @@ * too hard. */ +#define CURRENT_BONUS(p) \ + (NS_TO_JIFFIES((p)->sleep_avg) * MAX_BONUS / \ + MAX_SLEEP_AVG) + +#ifdef CONFIG_SMP +#define TIMESLICE_GRANULARITY(p) (MIN_TIMESLICE * \ + (1 << (((MAX_BONUS - CURRENT_BONUS(p)) ? : 1) - 1)) * \ + num_online_cpus()) +#else +#define TIMESLICE_GRANULARITY(p) (MIN_TIMESLICE * \ + (1 << (((MAX_BONUS - CURRENT_BONUS(p)) ? : 1) - 1))) +#endif + #define SCALE(v1,v1_max,v2_max) \ (v1) * (v2_max) / (v1_max) @@ -115,6 +141,19 @@ #define TASK_INTERACTIVE(p) \ ((p)->prio <= (p)->static_prio - DELTA(p)) +#define JUST_INTERACTIVE_SLEEP(p) \ + (JIFFIES_TO_NS(MAX_SLEEP_AVG * \ + (MAX_BONUS / 2 + DELTA((p)) + 1) / MAX_BONUS - 1)) + +#define HIGH_CREDIT(p) \ + ((p)->interactive_credit > CREDIT_LIMIT) + +#define LOW_CREDIT(p) \ + ((p)->interactive_credit < -CREDIT_LIMIT) + +#define TASK_PREEMPTS_CURR(p, rq) \ + ((p)->prio < (rq)->curr->prio) + /* * BASE_TIMESLICE scales user-nice values [ -20 ... 19 ] * to time slice values. @@ -179,7 +218,6 @@ static DEFINE_PER_CPU(struct runqueue, r #define this_rq() (&__get_cpu_var(runqueues)) #define task_rq(p) cpu_rq(task_cpu(p)) #define cpu_curr(cpu) (cpu_rq(cpu)->curr) -#define rt_task(p) ((p)->prio < MAX_RT_PRIO) /* * Default context-switch locking: @@ -319,8 +357,7 @@ static int effective_prio(task_t *p) if (rt_task(p)) return p->prio; - bonus = MAX_USER_PRIO*PRIO_BONUS_RATIO*p->sleep_avg/MAX_SLEEP_AVG/100 - - MAX_USER_PRIO*PRIO_BONUS_RATIO/100/2; + bonus = CURRENT_BONUS(p) - MAX_BONUS / 2; prio = p->static_prio - bonus; if (prio < MAX_RT_PRIO) @@ -339,6 +376,82 @@ static inline void __activate_task(task_ nr_running_inc(rq); } +static void recalc_task_prio(task_t *p, unsigned long long now) +{ + unsigned long long __sleep_time = now - p->timestamp; + unsigned long sleep_time; + + if (__sleep_time > NS_MAX_SLEEP_AVG) + sleep_time = NS_MAX_SLEEP_AVG; + else + sleep_time = (unsigned long)__sleep_time; + + if (likely(sleep_time > 0)) { + /* + * User tasks that sleep a long time are categorised as + * idle and will get just interactive status to stay active & + * prevent them suddenly becoming cpu hogs and starving + * other processes. + */ + if (p->mm && p->activated != -1 && + sleep_time > JUST_INTERACTIVE_SLEEP(p)){ + p->sleep_avg = JIFFIES_TO_NS(MAX_SLEEP_AVG - + AVG_TIMESLICE); + if (!HIGH_CREDIT(p)) + p->interactive_credit++; + } else { + /* + * The lower the sleep avg a task has the more + * rapidly it will rise with sleep time. + */ + sleep_time *= (MAX_BONUS - CURRENT_BONUS(p)) ? : 1; + + /* + * Tasks with low interactive_credit are limited to + * one timeslice worth of sleep avg bonus. + */ + if (LOW_CREDIT(p) && + sleep_time > JIFFIES_TO_NS(task_timeslice(p))) + sleep_time = + JIFFIES_TO_NS(task_timeslice(p)); + + /* + * Non high_credit tasks waking from uninterruptible + * sleep are limited in their sleep_avg rise as they + * are likely to be cpu hogs waiting on I/O + */ + if (p->activated == -1 && !HIGH_CREDIT(p) && p->mm){ + if (p->sleep_avg >= JUST_INTERACTIVE_SLEEP(p)) + sleep_time = 0; + else if (p->sleep_avg + sleep_time >= + JUST_INTERACTIVE_SLEEP(p)){ + p->sleep_avg = + JUST_INTERACTIVE_SLEEP(p); + sleep_time = 0; + } + } + + /* + * This code gives a bonus to interactive tasks. + * + * The boost works by updating the 'average sleep time' + * value here, based on ->timestamp. The more time a task + * spends sleeping, the higher the average gets - and the + * higher the priority boost gets as well. + */ + p->sleep_avg += sleep_time; + + if (p->sleep_avg > NS_MAX_SLEEP_AVG){ + p->sleep_avg = NS_MAX_SLEEP_AVG; + if (!HIGH_CREDIT(p)) + p->interactive_credit++; + } + } + } + + p->prio = effective_prio(p); +} + /* * activate_task - move a task to the runqueue and do priority recalculation * @@ -347,34 +460,33 @@ static inline void __activate_task(task_ */ static inline void activate_task(task_t *p, runqueue_t *rq) { - long sleep_time = jiffies - p->last_run - 1; + unsigned long long now = sched_clock(); - if (sleep_time > 0) { - int sleep_avg; + recalc_task_prio(p, now); + /* + * This checks to make sure it's not an uninterruptible task + * that is now waking up. + */ + if (!p->activated){ /* - * This code gives a bonus to interactive tasks. - * - * The boost works by updating the 'average sleep time' - * value here, based on ->last_run. The more time a task - * spends sleeping, the higher the average gets - and the - * higher the priority boost gets as well. + * Tasks which were woken up by interrupts (ie. hw events) + * are most likely of interactive nature. So we give them + * the credit of extending their sleep time to the period + * of time they spend on the runqueue, waiting for execution + * on a CPU, first time around: */ - sleep_avg = p->sleep_avg + sleep_time; - + if (in_interrupt()) + p->activated = 2; + else /* - * 'Overflow' bonus ticks go to the waker as well, so the - * ticks are not lost. This has the effect of further - * boosting tasks that are related to maximum-interactive - * tasks. + * Normal first-time wakeups get a credit too for on-runqueue + * time, but it will be weighted down: */ - if (sleep_avg > MAX_SLEEP_AVG) - sleep_avg = MAX_SLEEP_AVG; - if (p->sleep_avg != sleep_avg) { - p->sleep_avg = sleep_avg; - p->prio = effective_prio(p); + p->activated = 1; } - } + p->timestamp = now; + __activate_task(p, rq); } @@ -495,13 +607,19 @@ repeat_lock_task: task_rq_unlock(rq, &flags); goto repeat_lock_task; } - if (old_state == TASK_UNINTERRUPTIBLE) + if (old_state == TASK_UNINTERRUPTIBLE){ rq->nr_uninterruptible--; + /* + * Tasks on involuntary sleep don't earn + * sleep_avg beyond just interactive state. + */ + p->activated = -1; + } if (sync) __activate_task(p, rq); else { activate_task(p, rq); - if (p->prio < rq->curr->prio) + if (TASK_PREEMPTS_CURR(p, rq)) resched_task(rq->curr); } success = 1; @@ -550,8 +668,14 @@ void wake_up_forked_process(task_t * p) * and children as well, to keep max-interactive tasks * from forking tasks that are max-interactive. */ - current->sleep_avg = current->sleep_avg * PARENT_PENALTY / 100; - p->sleep_avg = p->sleep_avg * CHILD_PENALTY / 100; + current->sleep_avg = JIFFIES_TO_NS(CURRENT_BONUS(current) * + PARENT_PENALTY / 100 * MAX_SLEEP_AVG / MAX_BONUS); + + p->sleep_avg = JIFFIES_TO_NS(CURRENT_BONUS(p) * + CHILD_PENALTY / 100 * MAX_SLEEP_AVG / MAX_BONUS); + + p->interactive_credit = 0; + p->prio = effective_prio(p); set_task_cpu(p, smp_processor_id()); @@ -592,8 +716,9 @@ void sched_exit(task_t * p) * the sleep_avg of the parent as well. */ if (p->sleep_avg < p->parent->sleep_avg) - p->parent->sleep_avg = (p->parent->sleep_avg * EXIT_WEIGHT + - p->sleep_avg) / (EXIT_WEIGHT + 1); + p->parent->sleep_avg = p->parent->sleep_avg / + (EXIT_WEIGHT + 1) * EXIT_WEIGHT + p->sleep_avg / + (EXIT_WEIGHT + 1); } /** @@ -959,10 +1084,10 @@ static inline runqueue_t *find_busiest_q if (likely(!busiest)) goto out; - *imbalance = (max_load - nr_running) / 2; + *imbalance = max_load - nr_running; /* It needs an at least ~25% imbalance to trigger balancing. */ - if (!idle && (*imbalance < (max_load + 3)/4)) { + if (!idle && ((*imbalance)*4 < max_load)) { busiest = NULL; goto out; } @@ -972,7 +1097,7 @@ static inline runqueue_t *find_busiest_q * Make sure nothing changed since we checked the * runqueue length. */ - if (busiest->nr_running <= nr_running + 1) { + if (busiest->nr_running <= nr_running) { spin_unlock(&busiest->lock); busiest = NULL; } @@ -995,13 +1120,31 @@ static inline void pull_task(runqueue_t * Note that idle threads have a prio of MAX_PRIO, for this test * to be always true for them. */ - if (p->prio < this_rq->curr->prio) + if (TASK_PREEMPTS_CURR(p, this_rq)) set_need_resched(); - else { - if (p->prio == this_rq->curr->prio && - p->time_slice > this_rq->curr->time_slice) - set_need_resched(); - } +} + +/* + * Previously: + * + * #define CAN_MIGRATE_TASK(p,rq,this_cpu) \ + * ((!idle || (NS_TO_JIFFIES(now - (p)->timestamp) > \ + * cache_decay_ticks)) && !task_running(rq, p) && \ + * cpu_isset(this_cpu, (p)->cpus_allowed)) + */ + +static inline int +can_migrate_task(task_t *tsk, runqueue_t *rq, int this_cpu, int idle) +{ + unsigned long delta = sched_clock() - tsk->timestamp; + + if (!idle && (delta <= JIFFIES_TO_NS(cache_decay_ticks))) + return 0; + if (task_running(rq, tsk)) + return 0; + if (!cpu_isset(this_cpu, tsk->cpus_allowed)) + return 0; + return 1; } /* @@ -1025,6 +1168,12 @@ static void load_balance(runqueue_t *thi goto out; /* + * We only want to steal a number of tasks equal to 1/2 the imbalance, + * otherwise we'll just shift the imbalance to the new queue: + */ + imbalance /= 2; + + /* * We first consider expired tasks. Those will likely not be * executed in the near future, and they are most likely to * be cache-cold, thus switching CPUs has the least effect @@ -1063,14 +1212,9 @@ skip_queue: * 3) are cache-hot on their current CPU. */ -#define CAN_MIGRATE_TASK(p,rq,this_cpu) \ - ((!idle || (jiffies - (p)->last_run > cache_decay_ticks)) && \ - !task_running(rq, p) && \ - cpu_isset(this_cpu, (p)->cpus_allowed)) - curr = curr->prev; - if (!CAN_MIGRATE_TASK(tmp, busiest, this_cpu)) { + if (!can_migrate_task(tmp, busiest, this_cpu, idle)) { if (curr != head) goto skip_queue; idx++; @@ -1232,14 +1376,11 @@ void scheduler_tick(int user_ticks, int spin_lock(&rq->lock); /* * The task was running during this tick - update the - * time slice counter and the sleep average. Note: we - * do not update a thread's priority until it either - * goes to sleep or uses up its timeslice. This makes - * it possible for interactive tasks to use up their - * timeslices at their highest priority levels. + * time slice counter. Note: we do not update a thread's + * priority until it either goes to sleep or uses up its + * timeslice. This makes it possible for interactive tasks + * to use up their timeslices at their highest priority levels. */ - if (p->sleep_avg) - p->sleep_avg--; if (unlikely(rt_task(p))) { /* * RR tasks need a special form of timeslice management. @@ -1263,12 +1404,39 @@ void scheduler_tick(int user_ticks, int p->time_slice = task_timeslice(p); p->first_time_slice = 0; + if (!rq->expired_timestamp) + rq->expired_timestamp = jiffies; if (!TASK_INTERACTIVE(p) || EXPIRED_STARVING(rq)) { - if (!rq->expired_timestamp) - rq->expired_timestamp = jiffies; enqueue_task(p, rq->expired); } else enqueue_task(p, rq->active); + } else { + /* + * Prevent a too long timeslice allowing a task to monopolize + * the CPU. We do this by splitting up the timeslice into + * smaller pieces. + * + * Note: this does not mean the task's timeslices expire or + * get lost in any way, they just might be preempted by + * another task of equal priority. (one with higher + * priority would have preempted this task already.) We + * requeue this task to the end of the list on this priority + * level, which is in essence a round-robin of tasks with + * equal priority. + * + * This only applies to tasks in the interactive + * delta range with at least TIMESLICE_GRANULARITY to requeue. + */ + if (TASK_INTERACTIVE(p) && !((task_timeslice(p) - + p->time_slice) % TIMESLICE_GRANULARITY(p)) && + (p->time_slice >= TIMESLICE_GRANULARITY(p)) && + (p->array == rq->active)) { + + dequeue_task(p, rq->active); + set_tsk_need_resched(p); + p->prio = effective_prio(p); + enqueue_task(p, rq->active); + } } out_unlock: spin_unlock(&rq->lock); @@ -1287,6 +1455,8 @@ asmlinkage void schedule(void) runqueue_t *rq; prio_array_t *array; struct list_head *queue; + unsigned long long now; + unsigned long run_time; int idx; /* @@ -1307,7 +1477,20 @@ need_resched: rq = this_rq(); release_kernel_lock(prev); - prev->last_run = jiffies; + now = sched_clock(); + if (likely(now - prev->timestamp < NS_MAX_SLEEP_AVG)) + run_time = now - prev->timestamp; + else + run_time = NS_MAX_SLEEP_AVG; + + /* + * Tasks with interactive credits get charged less run_time + * at high sleep_avg to delay them losing their interactive + * status + */ + if (HIGH_CREDIT(prev)) + run_time /= (CURRENT_BONUS(prev) ? : 1); + spin_lock_irq(&rq->lock); /* @@ -1357,12 +1540,33 @@ pick_next_task: queue = array->queue + idx; next = list_entry(queue->next, task_t, run_list); + if (next->activated > 0) { + unsigned long long delta = now - next->timestamp; + + if (next->activated == 1) + delta = delta * (ON_RUNQUEUE_WEIGHT * 128 / 100) / 128; + + array = next->array; + dequeue_task(next, array); + recalc_task_prio(next, next->timestamp + delta); + enqueue_task(next, array); + } + next->activated = 0; switch_tasks: prefetch(next); clear_tsk_need_resched(prev); RCU_qsctr(task_cpu(prev))++; + prev->sleep_avg -= run_time; + if ((long)prev->sleep_avg <= 0){ + prev->sleep_avg = 0; + if (!(HIGH_CREDIT(prev) || LOW_CREDIT(prev))) + prev->interactive_credit--; + } + prev->timestamp = now; + if (likely(prev != next)) { + next->timestamp = now; rq->nr_switches++; rq->curr = next; @@ -1602,6 +1806,7 @@ void set_user_nice(task_t *p, long nice) unsigned long flags; prio_array_t *array; runqueue_t *rq; + int old_prio, new_prio, delta; if (TASK_NICE(p) == nice || nice < -20 || nice > 19) return; @@ -1610,6 +1815,12 @@ void set_user_nice(task_t *p, long nice) * the task might be in the middle of scheduling on another CPU. */ rq = task_rq_lock(p, &flags); + /* + * The RT priorities are set via setscheduler(), but we still + * allow the 'normal' nice value to be set - but as expected + * it wont have any effect on scheduling until the task is + * not SCHED_NORMAL: + */ if (rt_task(p)) { p->static_prio = NICE_TO_PRIO(nice); goto out_unlock; @@ -1617,16 +1828,20 @@ void set_user_nice(task_t *p, long nice) array = p->array; if (array) dequeue_task(p, array); + + old_prio = p->prio; + new_prio = NICE_TO_PRIO(nice); + delta = new_prio - old_prio; p->static_prio = NICE_TO_PRIO(nice); - p->prio = NICE_TO_PRIO(nice); + p->prio += delta; + if (array) { enqueue_task(p, array); /* - * If the task is running and lowered its priority, - * or increased its priority then reschedule its CPU: + * If the task increased its priority or is running and + * lowered its priority, then reschedule its CPU: */ - if ((NICE_TO_PRIO(nice) < p->static_prio) || - task_running(rq, p)) + if (delta < 0 || (delta > 0 && task_running(rq, p))) resched_task(rq->curr); } out_unlock: @@ -2383,6 +2598,12 @@ static void move_task_away(struct task_s local_irq_restore(flags); } +typedef struct { + int cpu; + struct completion startup_done; + task_t *task; +} migration_startup_t; + /* * migration_thread - this is a highprio system thread that performs * thread migration by bumping thread off CPU then 'pushing' onto @@ -2392,20 +2613,21 @@ static int migration_thread(void * data) { /* Marking "param" __user is ok, since we do a set_fs(KERNEL_DS); */ struct sched_param __user param = { .sched_priority = MAX_RT_PRIO-1 }; - int cpu = (long) data; + migration_startup_t *startup = data; + int cpu = startup->cpu; runqueue_t *rq; int ret; + startup->task = current; + complete(&startup->startup_done); + set_current_state(TASK_UNINTERRUPTIBLE); + schedule(); + + BUG_ON(smp_processor_id() != cpu); + daemonize("migration/%d", cpu); set_fs(KERNEL_DS); - /* - * Either we are running on the right CPU, or there's a a - * migration thread on this CPU, guaranteed (we're started - * serially). - */ - set_cpus_allowed(current, cpumask_of_cpu(cpu)); - ret = setscheduler(0, SCHED_FIFO, ¶m); rq = this_rq(); @@ -2441,13 +2663,30 @@ static int migration_call(struct notifie unsigned long action, void *hcpu) { + long cpu = (long) hcpu; + migration_startup_t startup; + switch (action) { case CPU_ONLINE: - printk("Starting migration thread for cpu %li\n", - (long)hcpu); - kernel_thread(migration_thread, hcpu, CLONE_KERNEL); - while (!cpu_rq((long)hcpu)->migration_thread) + + printk("Starting migration thread for cpu %li\n", cpu); + + startup.cpu = cpu; + startup.task = NULL; + init_completion(&startup.startup_done); + + kernel_thread(migration_thread, &startup, CLONE_KERNEL); + wait_for_completion(&startup.startup_done); + wait_task_inactive(startup.task); + + startup.task->thread_info->cpu = cpu; + startup.task->cpus_allowed = cpumask_of_cpu(cpu); + + wake_up_process(startup.task); + + while (!cpu_rq(cpu)->migration_thread) yield(); + break; } return NOTIFY_OK; @@ -2570,6 +2809,8 @@ void __might_sleep(char *file, int line) prev_jiffy = jiffies; printk(KERN_ERR "Debug: sleeping function called from invalid" " context at %s:%d\n", file, line); + printk("in_atomic():%d, irqs_disabled():%d\n", + in_atomic(), irqs_disabled()); dump_stack(); } #endif diff -prauN linux-2.6.0-test5/kernel/signal.c wli-2.6.0-test5-bk12-25/kernel/signal.c --- linux-2.6.0-test5/kernel/signal.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/kernel/signal.c 2003-09-25 19:16:15.000000000 -0700 @@ -1139,7 +1139,7 @@ kill_proc_info(int sig, struct siginfo * static int kill_something_info(int sig, struct siginfo *info, int pid) { if (!pid) { - return kill_pg_info(sig, info, current->pgrp); + return kill_pg_info(sig, info, process_group(current)); } else if (pid == -1) { int retval = 0, count = 0; struct task_struct * p; @@ -1798,7 +1798,7 @@ relock: /* signals can be posted during this window */ - if (is_orphaned_pgrp(current->pgrp)) + if (is_orphaned_pgrp(process_group(current))) goto relock; spin_lock_irq(¤t->sighand->siglock); diff -prauN linux-2.6.0-test5/kernel/softirq.c wli-2.6.0-test5-bk12-25/kernel/softirq.c --- linux-2.6.0-test5/kernel/softirq.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/kernel/softirq.c 2003-09-25 19:16:15.000000000 -0700 @@ -9,8 +9,6 @@ #include #include #include -#include -#include #include #include #include @@ -59,11 +57,22 @@ static inline void wakeup_softirqd(void) wake_up_process(tsk); } +/* + * We restart softirq processing MAX_SOFTIRQ_RESTART times, + * and we fall back to softirqd after that. + * + * This number has been established via experimentation. + * The two things to balance is latency against fairness - + * we want to handle softirqs as soon as possible, but they + * should not be able to lock up the box. + */ +#define MAX_SOFTIRQ_RESTART 10 + asmlinkage void do_softirq(void) { + int max_restart = MAX_SOFTIRQ_RESTART; __u32 pending; unsigned long flags; - __u32 mask; if (in_interrupt()) return; @@ -75,7 +84,6 @@ asmlinkage void do_softirq(void) if (pending) { struct softirq_action *h; - mask = ~pending; local_bh_disable(); restart: /* Reset the pending bitmask before enabling irqs */ @@ -95,10 +103,8 @@ restart: local_irq_disable(); pending = local_softirq_pending(); - if (pending & mask) { - mask &= ~pending; + if (pending && --max_restart) goto restart; - } if (pending) wakeup_softirqd(); __local_bh_enable(); diff -prauN linux-2.6.0-test5/kernel/sys.c wli-2.6.0-test5-bk12-25/kernel/sys.c --- linux-2.6.0-test5/kernel/sys.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/kernel/sys.c 2003-09-25 19:16:15.000000000 -0700 @@ -290,7 +290,7 @@ asmlinkage long sys_setpriority(int whic break; case PRIO_PGRP: if (!who) - who = current->pgrp; + who = process_group(current); for_each_task_pid(who, PIDTYPE_PGID, p, l, pid) error = set_one_prio(p, niceval, error); break; @@ -346,7 +346,7 @@ asmlinkage long sys_getpriority(int whic break; case PRIO_PGRP: if (!who) - who = current->pgrp; + who = process_group(current); for_each_task_pid(who, PIDTYPE_PGID, p, l, pid) { niceval = 20 - task_nice(p); if (niceval > retval) @@ -979,11 +979,12 @@ ok_pgid: if (err) goto out; - if (p->pgrp != pgid) { + if (process_group(p) != pgid) { detach_pid(p, PIDTYPE_PGID); - p->pgrp = pgid; + p->group_leader->__pgrp = pgid; attach_pid(p, PIDTYPE_PGID, pgid); } + err = 0; out: /* All paths lead to here, thus we are safe. -DaveM */ @@ -994,7 +995,7 @@ out: asmlinkage long sys_getpgid(pid_t pid) { if (!pid) { - return current->pgrp; + return process_group(current); } else { int retval; struct task_struct *p; @@ -1006,7 +1007,7 @@ asmlinkage long sys_getpgid(pid_t pid) if (p) { retval = security_task_getpgid(p); if (!retval) - retval = p->pgrp; + retval = process_group(p); } read_unlock(&tasklist_lock); return retval; @@ -1016,7 +1017,7 @@ asmlinkage long sys_getpgid(pid_t pid) asmlinkage long sys_getpgrp(void) { /* SMP - assuming writes are word atomic this is fine */ - return current->pgrp; + return process_group(current); } asmlinkage long sys_getsid(pid_t pid) @@ -1059,7 +1060,7 @@ asmlinkage long sys_setsid(void) __set_special_pids(current->pid, current->pid); current->tty = NULL; current->tty_old_pgrp = 0; - err = current->pgrp; + err = process_group(current); out: write_unlock_irq(&tasklist_lock); return err; diff -prauN linux-2.6.0-test5/kernel/sysctl.c wli-2.6.0-test5-bk12-25/kernel/sysctl.c --- linux-2.6.0-test5/kernel/sysctl.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/kernel/sysctl.c 2003-09-25 19:16:15.000000000 -0700 @@ -643,7 +643,7 @@ static ctl_table vm_table[] = { .data = &dirty_writeback_centisecs, .maxlen = sizeof(dirty_writeback_centisecs), .mode = 0644, - .proc_handler = dirty_writeback_centisecs_handler, + .proc_handler = &dirty_writeback_centisecs_handler, }, { .ctl_name = VM_DIRTY_EXPIRE_CS, diff -prauN linux-2.6.0-test5/lib/inflate.c wli-2.6.0-test5-bk12-25/lib/inflate.c --- linux-2.6.0-test5/lib/inflate.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/lib/inflate.c 2003-09-25 19:16:15.000000000 -0700 @@ -871,7 +871,7 @@ DEBG("dyn5a "); { DEBG("dyn5b "); if (i == 1) { - error(" incomplete literal tree\n"); + error("incomplete literal tree"); huft_free(tl); } return i; /* incomplete code set */ @@ -882,7 +882,7 @@ DEBG("dyn5c "); { DEBG("dyn5d "); if (i == 1) { - error(" incomplete distance tree\n"); + error("incomplete distance tree"); #ifdef PKZIP_BUG_WORKAROUND i = 0; } @@ -1097,15 +1097,15 @@ static int gunzip(void) flags = (uch)get_byte(); if ((flags & ENCRYPTED) != 0) { - error("Input is encrypted\n"); + error("Input is encrypted"); return -1; } if ((flags & CONTINUATION) != 0) { - error("Multi part input\n"); + error("Multi part input"); return -1; } if ((flags & RESERVED) != 0) { - error("Input has invalid flags\n"); + error("Input has invalid flags"); return -1; } (ulg)get_byte(); /* Get timestamp */ diff -prauN linux-2.6.0-test5/mm/fadvise.c wli-2.6.0-test5-bk12-25/mm/fadvise.c --- linux-2.6.0-test5/mm/fadvise.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/mm/fadvise.c 2003-09-25 19:16:15.000000000 -0700 @@ -20,7 +20,7 @@ * POSIX_FADV_WILLNEED could set PG_Referenced, and POSIX_FADV_NOREUSE could * deactivate the pages and clear PG_Referenced. */ -long sys_fadvise64_64(int fd, loff_t offset, loff_t len, int advice) +asmlinkage long sys_fadvise64_64(int fd, loff_t offset, loff_t len, int advice) { struct file *file = fget(fd); struct inode *inode; @@ -80,7 +80,7 @@ out: return ret; } -long sys_fadvise64(int fd, loff_t offset, size_t len, int advice) +asmlinkage long sys_fadvise64(int fd, loff_t offset, size_t len, int advice) { return sys_fadvise64_64(fd, offset, len, advice); } diff -prauN linux-2.6.0-test5/mm/filemap.c wli-2.6.0-test5-bk12-25/mm/filemap.c --- linux-2.6.0-test5/mm/filemap.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/mm/filemap.c 2003-09-28 23:04:08.000000000 -0700 @@ -55,14 +55,14 @@ /* * Lock ordering: * - * ->i_shared_sem (vmtruncate) - * ->private_lock (__free_pte->__set_page_dirty_buffers) + * ->i_shared_lock (vmtruncate) + * ->private_lock (__free_pte->set_page_dirty_buffers) * ->swap_list_lock * ->swap_device_lock (exclusive_swap_page, others) * ->mapping->page_lock * * ->mmap_sem - * ->i_shared_sem (various places) + * ->i_shared_lock (various places) * * ->mmap_sem * ->lock_page (access_process_vm) @@ -70,6 +70,9 @@ * ->mmap_sem * ->i_sem (msync) * + * ->lock_page + * ->i_shared_lock (page_convert_anon) + * * ->inode_lock * ->sb_lock (fs/fs-writeback.c) * ->mapping->page_lock (__sync_single_inode) @@ -88,11 +91,11 @@ */ void __remove_from_page_cache(struct page *page) { - struct address_space *mapping = page->mapping; + struct address_space *mapping = page_mapping(page); radix_tree_delete(&mapping->page_tree, page->index); list_del(&page->list); - page->mapping = NULL; + set_page_mapping(page, NULL); mapping->nrpages--; pagecache_acct(-1); @@ -100,22 +103,24 @@ void __remove_from_page_cache(struct pag void remove_from_page_cache(struct page *page) { - struct address_space *mapping = page->mapping; + struct address_space *mapping = page_mapping(page); - if (unlikely(!PageLocked(page))) - PAGE_BUG(page); + BUG_ON(!PageLocked(page)); - spin_lock(&mapping->page_lock); + mapping_wrlock(&mapping->page_lock); __remove_from_page_cache(page); - spin_unlock(&mapping->page_lock); + mapping_wrunlock(&mapping->page_lock); + page_cache_release(page); } static inline int sync_page(struct page *page) { - struct address_space *mapping = page->mapping; + struct address_space *mapping = page_mapping(page); if (mapping && mapping->a_ops && mapping->a_ops->sync_page) return mapping->a_ops->sync_page(page); + if (PageSwapCache(page)) + blk_run_queues(); return 0; } @@ -139,9 +144,9 @@ static int __filemap_fdatawrite(struct a if (mapping->backing_dev_info->memory_backed) return 0; - spin_lock(&mapping->page_lock); + mapping_wrlock(&mapping->page_lock); list_splice_init(&mapping->dirty_pages, &mapping->io_pages); - spin_unlock(&mapping->page_lock); + mapping_wrunlock(&mapping->page_lock); ret = do_writepages(mapping, &wbc); return ret; } @@ -172,7 +177,7 @@ int filemap_fdatawait(struct address_spa restart: progress = 0; - spin_lock(&mapping->page_lock); + mapping_wrlock(&mapping->page_lock); while (!list_empty(&mapping->locked_pages)) { struct page *page; @@ -186,7 +191,7 @@ restart: if (!PageWriteback(page)) { if (++progress > 32) { if (need_resched()) { - spin_unlock(&mapping->page_lock); + mapping_wrunlock(&mapping->page_lock); __cond_resched(); goto restart; } @@ -196,16 +201,16 @@ restart: progress = 0; page_cache_get(page); - spin_unlock(&mapping->page_lock); + mapping_wrunlock(&mapping->page_lock); wait_on_page_writeback(page); if (PageError(page)) ret = -EIO; page_cache_release(page); - spin_lock(&mapping->page_lock); + mapping_wrlock(&mapping->page_lock); } - spin_unlock(&mapping->page_lock); + mapping_wrunlock(&mapping->page_lock); /* Check for outstanding write errors */ if (test_and_clear_bit(AS_ENOSPC, &mapping->flags)) @@ -220,16 +225,9 @@ restart: * This adds a page to the page cache, starting out as locked, unreferenced, * not uptodate and with no errors. * - * This function is used for two things: adding newly allocated pagecache - * pages and for moving existing anon pages into swapcache. - * - * In the case of pagecache pages, the page is new, so we can just run - * SetPageLocked() against it. The other page state flags were set by - * rmqueue() - * - * In the case of swapcache, try_to_swap_out() has already locked the page, so - * SetPageLocked() is ugly-but-OK there too. The required page state has been - * set up by swap_out_add_to_swap_cache(). + * This function is used to add newly allocated pagecache pages; + * the page is new, so we can just run SetPageLocked() against it. + * The other page state flags were set by rmqueue(). * * This function does not add the page to the LRU. The caller must do that. */ @@ -240,15 +238,19 @@ int add_to_page_cache(struct page *page, if (error == 0) { page_cache_get(page); - spin_lock(&mapping->page_lock); + mapping_wrlock(&mapping->page_lock); error = radix_tree_insert(&mapping->page_tree, offset, page); if (!error) { SetPageLocked(page); - ___add_to_page_cache(page, mapping, offset); + list_add(&page->list, &mapping->clean_pages); + set_page_mapping(page, mapping); + page->index = offset; + mapping->nrpages++; + pagecache_acct(+1); } else { page_cache_release(page); } - spin_unlock(&mapping->page_lock); + mapping_wrunlock(&mapping->page_lock); radix_tree_preload_end(); } return error; @@ -377,11 +379,11 @@ struct page * find_get_page(struct addre * We scan the hash list read-only. Addition to and removal from * the hash-list needs a held write-lock. */ - spin_lock(&mapping->page_lock); + mapping_rdlock(&mapping->page_lock); page = radix_tree_lookup(&mapping->page_tree, offset); if (page) page_cache_get(page); - spin_unlock(&mapping->page_lock); + mapping_rdunlock(&mapping->page_lock); return page; } @@ -392,11 +394,11 @@ struct page *find_trylock_page(struct ad { struct page *page; - spin_lock(&mapping->page_lock); + mapping_rdlock(&mapping->page_lock); page = radix_tree_lookup(&mapping->page_tree, offset); if (page && TestSetPageLocked(page)) page = NULL; - spin_unlock(&mapping->page_lock); + mapping_rdunlock(&mapping->page_lock); return page; } @@ -416,25 +418,25 @@ struct page *find_lock_page(struct addre { struct page *page; - spin_lock(&mapping->page_lock); + mapping_rdlock(&mapping->page_lock); repeat: page = radix_tree_lookup(&mapping->page_tree, offset); if (page) { page_cache_get(page); if (TestSetPageLocked(page)) { - spin_unlock(&mapping->page_lock); + mapping_rdunlock(&mapping->page_lock); lock_page(page); - spin_lock(&mapping->page_lock); + mapping_rdlock(&mapping->page_lock); /* Has the page been truncated while we slept? */ - if (page->mapping != mapping || page->index != offset) { + if (page_mapping(page) != mapping || page->index != offset) { unlock_page(page); page_cache_release(page); goto repeat; } } } - spin_unlock(&mapping->page_lock); + mapping_rdunlock(&mapping->page_lock); return page; } @@ -504,12 +506,12 @@ unsigned int find_get_pages(struct addre unsigned int i; unsigned int ret; - spin_lock(&mapping->page_lock); + mapping_rdlock(&mapping->page_lock); ret = radix_tree_gang_lookup(&mapping->page_tree, (void **)pages, start, nr_pages); for (i = 0; i < ret; i++) page_cache_get(pages[i]); - spin_unlock(&mapping->page_lock); + mapping_rdunlock(&mapping->page_lock); return ret; } @@ -637,8 +639,8 @@ page_not_up_to_date: /* Get exclusive access to the page ... */ lock_page(page); - /* Did it get unhashed before we got the lock? */ - if (!page->mapping) { + /* Did it get removed from the radix tree before we got the lock? */ + if (!page_mapping(page)) { unlock_page(page); page_cache_release(page); continue; @@ -1072,8 +1074,8 @@ page_not_uptodate: inc_page_state(pgmajfault); lock_page(page); - /* Did it get unhashed while we waited for it? */ - if (!page->mapping) { + /* Did it get removed from the radix tree while we waited for it? */ + if (!page_mapping(page)) { unlock_page(page); page_cache_release(page); goto retry_all; @@ -1100,7 +1102,7 @@ page_not_uptodate: lock_page(page); /* Somebody truncated the page on us? */ - if (!page->mapping) { + if (!page_mapping(page)) { unlock_page(page); page_cache_release(page); goto retry_all; @@ -1179,8 +1181,8 @@ no_cached_page: page_not_uptodate: lock_page(page); - /* Did it get unhashed while we waited for it? */ - if (!page->mapping) { + /* Did it get removed from the radix tree while we waited for it? */ + if (!page_mapping(page)) { unlock_page(page); goto err; } @@ -1206,7 +1208,7 @@ page_not_uptodate: lock_page(page); /* Somebody truncated the page on us? */ - if (!page->mapping) { + if (!page_mapping(page)) { unlock_page(page); goto err; } @@ -1266,6 +1268,20 @@ repeat: page_cache_release(page); return err; } + } else { + /* + * If a nonlinear mapping then store the file page offset + * in the pte. + */ + unsigned long pgidx; + pgidx = (addr - vma->vm_start) >> PAGE_SHIFT; + pgidx += vma->vm_pgoff; + pgidx >>= PAGE_CACHE_SHIFT - PAGE_SHIFT; + if (pgoff != pgidx) { + err = install_file_pte(mm, vma, addr, pgoff, prot); + if (err) + return err; + } } len -= PAGE_SIZE; @@ -1374,7 +1390,7 @@ retry: goto out; lock_page(page); - if (!page->mapping) { + if (!page_mapping(page)) { unlock_page(page); page_cache_release(page); goto retry; @@ -1435,9 +1451,9 @@ void remove_suid(struct dentry *dentry) if (!(mode & S_IXGRP)) mode &= S_ISUID; - /* was any of the uid bits set? */ + /* were any of the uid bits set? */ if (mode && !capable(CAP_FSETID)) { - newattrs.ia_valid = ATTR_KILL_SUID | ATTR_KILL_SGID; + newattrs.ia_valid = ATTR_KILL_SUID|ATTR_KILL_SGID|ATTR_FORCE; notify_change(dentry, &newattrs); } } diff -prauN linux-2.6.0-test5/mm/fremap.c wli-2.6.0-test5-bk12-25/mm/fremap.c --- linux-2.6.0-test5/mm/fremap.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/mm/fremap.c 2003-09-29 00:30:06.000000000 -0700 @@ -12,13 +12,16 @@ #include #include #include -#include +#include #include #include #include #include +/* + * This is never done to an anonymous page so page->mapping is never altered. + */ static inline int zap_pte(struct mm_struct *mm, struct vm_area_struct *vma, unsigned long addr, pte_t *ptep) { @@ -30,13 +33,13 @@ static inline int zap_pte(struct mm_stru unsigned long pfn = pte_pfn(pte); flush_cache_page(vma, addr); - pte = ptep_get_and_clear(ptep); + pte = vm_ptep_get_and_clear(vma, ptep, addr); if (pfn_valid(pfn)) { struct page *page = pfn_to_page(pfn); if (!PageReserved(page)) { if (pte_dirty(pte)) set_page_dirty(page); - page_remove_rmap(page, ptep); + page_remove_rmap(page); page_cache_release(page); mm->rss--; } @@ -45,7 +48,7 @@ static inline int zap_pte(struct mm_stru } else { if (!pte_file(pte)) free_swap_and_cache(pte_to_swp_entry(pte)); - pte_clear(ptep); + vm_pte_clear(vma, ptep, addr); return 0; } } @@ -61,19 +64,19 @@ int install_page(struct mm_struct *mm, s pte_t *pte; pgd_t *pgd; pmd_t *pmd; - struct pte_chain *pte_chain; + pte_t pte_val; - pte_chain = pte_chain_alloc(GFP_KERNEL); - if (!pte_chain) - goto err; pgd = pgd_offset(mm, addr); + if (!rmap_get_cpu()) + goto err; spin_lock(&mm->page_table_lock); + put_cpu(); - pmd = pmd_alloc(mm, pgd, addr); + pmd = pmd_alloc_map(mm, pgd, addr); if (!pmd) goto err_unlock; - pte = pte_alloc_map(mm, pmd, addr); + pte = pte_alloc_map(mm, pgd, &pmd, addr); if (!pte) goto err_unlock; @@ -81,25 +84,70 @@ int install_page(struct mm_struct *mm, s mm->rss++; flush_icache_page(vma, page); - set_pte(pte, mk_pte(page, prot)); - pte_chain = page_add_rmap(page, pte, pte_chain); + vm_set_pte(vma, pte, mk_pte(page, prot), addr); + if (!PageReserved(page)) + page_add_rmap(page, vma, addr, 0); + pte_val = *pte; pte_unmap(pte); + pmd_unmap(pmd); if (flush) flush_tlb_page(vma, addr); - update_mmu_cache(vma, addr, *pte); + update_mmu_cache(vma, addr, pte_val); spin_unlock(&mm->page_table_lock); - pte_chain_free(pte_chain); return 0; err_unlock: spin_unlock(&mm->page_table_lock); - pte_chain_free(pte_chain); err: return err; } EXPORT_SYMBOL(install_page); +/* + * Install a file pte to a given virtual memory address, release any + * previously existing mapping. + */ +int install_file_pte(struct mm_struct *mm, struct vm_area_struct *vma, + unsigned long addr, unsigned long pgoff, pgprot_t prot) +{ + int err = -ENOMEM, flush; + pte_t *pte; + pgd_t *pgd; + pmd_t *pmd; + pte_t pte_val; + + pgd = pgd_offset(mm, addr); + spin_lock(&mm->page_table_lock); + + pmd = pmd_alloc_map(mm, pgd, addr); + if (!pmd) + goto err_unlock; + + pte = pte_alloc_map(mm, pgd, &pmd, addr); + if (!pte) { + pmd_unmap(pmd); + goto err_unlock; + } + + flush = zap_pte(mm, vma, addr, pte); + + set_pte(pte, pgoff_to_pte(pgoff)); + pte_val = *pte; + pte_unmap(pte); + pmd_unmap(pmd); + if (flush) + flush_tlb_page(vma, addr); + update_mmu_cache(vma, addr, pte_val); + spin_unlock(&mm->page_table_lock); + return 0; + +err_unlock: + spin_unlock(&mm->page_table_lock); + return err; +} + + /*** * sys_remap_file_pages - remap arbitrary pages of a shared backing store * file within an existing vma. diff -prauN linux-2.6.0-test5/mm/memory.c wli-2.6.0-test5-bk12-25/mm/memory.c --- linux-2.6.0-test5/mm/memory.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/mm/memory.c 2003-09-29 13:42:28.000000000 -0700 @@ -43,11 +43,10 @@ #include #include #include -#include +#include #include #include -#include #include #include #include @@ -96,7 +95,7 @@ static inline void free_one_pmd(struct m } page = pmd_page(*dir); pmd_clear(dir); - pgtable_remove_rmap(page); + dec_page_state(nr_page_table_pages); pte_free_tlb(tlb, page); } @@ -104,6 +103,7 @@ static inline void free_one_pgd(struct m { int j; pmd_t * pmd; + struct page *page; if (pgd_none(*dir)) return; @@ -112,11 +112,13 @@ static inline void free_one_pgd(struct m pgd_clear(dir); return; } - pmd = pmd_offset(dir, 0); + page = pgd_page(*dir); + pmd = pmd_offset_map(dir, 0); pgd_clear(dir); for (j = 0; j < PTRS_PER_PMD ; j++) free_one_pmd(tlb, pmd+j); - pmd_free_tlb(tlb, pmd); + pmd_unmap(pmd); + pmd_free_tlb(tlb, page); } /* @@ -136,30 +138,38 @@ void clear_page_tables(struct mmu_gather } while (--nr); } -pte_t * pte_alloc_map(struct mm_struct *mm, pmd_t *pmd, unsigned long address) +/* + * error return happens with pmd unmapped + */ +pte_t *pte_alloc_map(struct mm_struct *mm, pgd_t *pgd, pmd_t **pmd, unsigned long addr) { - if (!pmd_present(*pmd)) { + if (!pmd_present(**pmd)) { struct page *new; + pmd_unmap(*pmd); spin_unlock(&mm->page_table_lock); - new = pte_alloc_one(mm, address); + new = pte_alloc_one(mm, addr); spin_lock(&mm->page_table_lock); - if (!new) + if (!new) { + *pmd = NULL; return NULL; + } + + *pmd = pmd_offset_map(pgd, addr); /* * Because we dropped the lock, we should re-check the * entry, as somebody else could have populated it.. */ - if (pmd_present(*pmd)) { + if (pmd_present(**pmd)) { pte_free(new); goto out; } - pgtable_add_rmap(new, mm, address); - pmd_populate(mm, pmd, new); + inc_page_state(nr_page_table_pages); + pmd_populate(mm, *pmd, new); } out: - return pte_offset_map(pmd, address); + return pte_offset_map(*pmd, addr); } pte_t * pte_alloc_kernel(struct mm_struct *mm, pmd_t *pmd, unsigned long address) @@ -181,7 +191,7 @@ pte_t * pte_alloc_kernel(struct mm_struc pte_free_kernel(new); goto out; } - pgtable_add_rmap(virt_to_page(new), mm, address); + inc_page_state(nr_page_table_pages); pmd_populate_kernel(mm, pmd, new); } out: @@ -199,7 +209,7 @@ out: * variable count and make things faster. -jj * * dst->page_table_lock is held on entry and exit, - * but may be dropped within pmd_alloc() and pte_alloc_map(). + * but may be dropped within pmd_alloc_map() and pte_alloc_map(). */ int copy_page_range(struct mm_struct *dst, struct mm_struct *src, struct vm_area_struct *vma) @@ -208,20 +218,10 @@ int copy_page_range(struct mm_struct *ds unsigned long address = vma->vm_start; unsigned long end = vma->vm_end; unsigned long cow; - struct pte_chain *pte_chain = NULL; if (is_vm_hugetlb_page(vma)) return copy_hugetlb_page_range(dst, src, vma); - pte_chain = pte_chain_alloc(GFP_ATOMIC); - if (!pte_chain) { - spin_unlock(&dst->page_table_lock); - pte_chain = pte_chain_alloc(GFP_KERNEL); - spin_lock(&dst->page_table_lock); - if (!pte_chain) - goto nomem; - } - cow = (vma->vm_flags & (VM_SHARED | VM_MAYWRITE)) == VM_MAYWRITE; src_pgd = pgd_offset(src, address)-1; dst_pgd = pgd_offset(dst, address)-1; @@ -244,11 +244,10 @@ skip_copy_pmd_range: address = (address continue; } - src_pmd = pmd_offset(src_pgd, address); - dst_pmd = pmd_alloc(dst, dst_pgd, address); + dst_pmd = pmd_alloc_map(dst, dst_pgd, address); if (!dst_pmd) goto nomem; - + src_pmd = pmd_offset_map_nested(src_pgd, address); do { pte_t * src_pte, * dst_pte; @@ -261,15 +260,20 @@ skip_copy_pmd_range: address = (address pmd_clear(src_pmd); skip_copy_pte_range: address = (address + PMD_SIZE) & PMD_MASK; - if (address >= end) + if (address >= end) { + pmd_unmap(dst_pmd); + pmd_unmap_nested(src_pmd); goto out; + } goto cont_copy_pmd_range; } - dst_pte = pte_alloc_map(dst, dst_pmd, address); + pmd_unmap_nested(src_pmd); + dst_pte = pte_alloc_map(dst, dst_pgd, &dst_pmd, address); if (!dst_pte) goto nomem; spin_lock(&src->page_table_lock); + src_pmd = pmd_offset_map_nested(src_pgd, address); src_pte = pte_offset_map_nested(src_pmd, address); do { pte_t pte = *src_pte; @@ -284,8 +288,7 @@ skip_copy_pte_range: if (!pte_present(pte)) { if (!pte_file(pte)) swap_duplicate(pte_to_swp_entry(pte)); - set_pte(dst_pte, pte); - goto cont_copy_pte_range_noset; + goto cont_copy_pte_range; } pfn = pte_pfn(pte); /* the pte points outside of valid memory, the @@ -293,13 +296,13 @@ skip_copy_pte_range: * and not mapped via rmap - duplicate the * mapping as is. */ - page = NULL; - if (pfn_valid(pfn)) - page = pfn_to_page(pfn); - - if (!page || PageReserved(page)) { - set_pte(dst_pte, pte); - goto cont_copy_pte_range_noset; + if (!pfn_valid(pfn)) { + page = NULL; + goto cont_copy_pte_range; + } else { + page = pfn_to_page(pfn); + if (PageReserved(page)) + goto cont_copy_pte_range; } /* @@ -307,7 +310,7 @@ skip_copy_pte_range: * in the parent and the child */ if (cow) { - ptep_set_wrprotect(src_pte); + vm_ptep_set_wrprotect(src, src_pte); pte = *src_pte; } @@ -320,35 +323,14 @@ skip_copy_pte_range: pte = pte_mkold(pte); get_page(page); dst->rss++; - - set_pte(dst_pte, pte); - pte_chain = page_add_rmap(page, dst_pte, - pte_chain); - if (pte_chain) - goto cont_copy_pte_range_noset; - pte_chain = pte_chain_alloc(GFP_ATOMIC); - if (pte_chain) - goto cont_copy_pte_range_noset; - - /* - * pte_chain allocation failed, and we need to - * run page reclaim. - */ - pte_unmap_nested(src_pte); - pte_unmap(dst_pte); - spin_unlock(&src->page_table_lock); - spin_unlock(&dst->page_table_lock); - pte_chain = pte_chain_alloc(GFP_KERNEL); - spin_lock(&dst->page_table_lock); - if (!pte_chain) - goto nomem; - spin_lock(&src->page_table_lock); - dst_pte = pte_offset_map(dst_pmd, address); - src_pte = pte_offset_map_nested(src_pmd, - address); + page_dup_rmap(page); +cont_copy_pte_range: + vm_set_pte(vma, dst_pte, pte, address); cont_copy_pte_range_noset: address += PAGE_SIZE; if (address >= end) { + pmd_unmap(dst_pmd); + pmd_unmap_nested(src_pmd); pte_unmap_nested(src_pte); pte_unmap(dst_pte); goto out_unlock; @@ -364,19 +346,19 @@ cont_copy_pmd_range: src_pmd++; dst_pmd++; } while ((unsigned long)src_pmd & PMD_TABLE_MASK); + pmd_unmap_nested(src_pmd-1); + pmd_unmap(dst_pmd-1); } out_unlock: spin_unlock(&src->page_table_lock); out: - pte_chain_free(pte_chain); return 0; nomem: - pte_chain_free(pte_chain); return -ENOMEM; } static void -zap_pte_range(struct mmu_gather *tlb, pmd_t * pmd, +zap_pte_range(struct mmu_gather *tlb, struct vm_area_struct *vma, pmd_t *pmd, unsigned long address, unsigned long size) { unsigned long offset; @@ -401,32 +383,32 @@ zap_pte_range(struct mmu_gather *tlb, pm if (pte_present(pte)) { unsigned long pfn = pte_pfn(pte); - pte = ptep_get_and_clear(ptep); + pte = vm_ptep_get_and_clear(vma, ptep, address + offset); tlb_remove_tlb_entry(tlb, ptep, address+offset); if (pfn_valid(pfn)) { struct page *page = pfn_to_page(pfn); if (!PageReserved(page)) { if (pte_dirty(pte)) set_page_dirty(page); - if (page->mapping && pte_young(pte) && + if (page_mapping(page) && pte_young(pte) && !PageSwapCache(page)) mark_page_accessed(page); tlb->freed++; - page_remove_rmap(page, ptep); + page_remove_rmap(page); tlb_remove_page(tlb, page); } } } else { if (!pte_file(pte)) free_swap_and_cache(pte_to_swp_entry(pte)); - pte_clear(ptep); + vm_pte_clear(vma, ptep, address); } } pte_unmap(ptep-1); } static void -zap_pmd_range(struct mmu_gather *tlb, pgd_t * dir, +zap_pmd_range(struct mmu_gather *tlb, struct vm_area_struct *vma, pgd_t *dir, unsigned long address, unsigned long size) { pmd_t * pmd; @@ -439,15 +421,16 @@ zap_pmd_range(struct mmu_gather *tlb, pg pgd_clear(dir); return; } - pmd = pmd_offset(dir, address); + pmd = pmd_offset_map(dir, address); end = address + size; if (end > ((address + PGDIR_SIZE) & PGDIR_MASK)) end = ((address + PGDIR_SIZE) & PGDIR_MASK); do { - zap_pte_range(tlb, pmd, address, end - address); + zap_pte_range(tlb, vma, pmd, address, end - address); address = (address + PMD_SIZE) & PMD_MASK; pmd++; } while (address < end); + pmd_unmap(pmd - 1); } void unmap_page_range(struct mmu_gather *tlb, struct vm_area_struct *vma, @@ -465,7 +448,7 @@ void unmap_page_range(struct mmu_gather dir = pgd_offset(vma->vm_mm, address); tlb_start_vma(tlb, vma); do { - zap_pmd_range(tlb, dir, address, end - address); + zap_pmd_range(tlb, vma, dir, address, end - address); address = (address + PGDIR_SIZE) & PGDIR_MASK; dir++; } while (address && (address < end)); @@ -629,20 +612,27 @@ follow_page(struct mm_struct *mm, unsign if (pgd_none(*pgd) || pgd_bad(*pgd)) goto out; - pmd = pmd_offset(pgd, address); + pmd = pmd_offset_map(pgd, address); if (pmd_none(*pmd)) - goto out; - if (pmd_huge(*pmd)) - return follow_huge_pmd(mm, address, pmd, write); - if (pmd_bad(*pmd)) - goto out; + goto out_unmap; + if (pmd_bad(*pmd)) { + pmd_ERROR(*pmd); + pmd_clear(pmd); + goto out_unmap; + } + if (pmd_huge(*pmd)) { + struct page *page = follow_huge_pmd(mm, address, pmd, write); + pmd_unmap(pmd); + return page; + } ptep = pte_offset_map(pmd, address); if (!ptep) - goto out; + goto out_unmap; pte = *ptep; pte_unmap(ptep); + pmd_unmap(pmd); if (pte_present(pte)) { if (!write || (pte_write(pte) && pte_dirty(pte))) { pfn = pte_pfn(pte); @@ -657,6 +647,9 @@ follow_page(struct mm_struct *mm, unsign out: return NULL; +out_unmap: + pmd_unmap(pmd); + goto out; } /* @@ -715,7 +708,7 @@ int get_user_pages(struct task_struct *t pgd = pgd_offset_k(pg); if (!pgd) return i ? : -EFAULT; - pmd = pmd_offset(pgd, pg); + pmd = pmd_offset_kernel(pgd, pg); if (!pmd) return i ? : -EFAULT; pte = pte_offset_kernel(pmd, pg); @@ -789,8 +782,8 @@ out: return i; } -static void zeromap_pte_range(pte_t * pte, unsigned long address, - unsigned long size, pgprot_t prot) +static void zeromap_pte_range(struct vm_area_struct *vma, pte_t *pte, + unsigned long address, unsigned long size, pgprot_t prot) { unsigned long end; @@ -801,14 +794,14 @@ static void zeromap_pte_range(pte_t * pt do { pte_t zero_pte = pte_wrprotect(mk_pte(ZERO_PAGE(address), prot)); BUG_ON(!pte_none(*pte)); - set_pte(pte, zero_pte); + vm_set_pte(vma, pte, zero_pte, address); address += PAGE_SIZE; pte++; } while (address && (address < end)); } -static inline int zeromap_pmd_range(struct mm_struct *mm, pmd_t * pmd, unsigned long address, - unsigned long size, pgprot_t prot) +static inline int zeromap_pmd_range(struct vm_area_struct *vma, pgd_t *pgd, + pmd_t **pmd, unsigned long address, unsigned long size, pgprot_t prot) { unsigned long base, end; @@ -818,13 +811,13 @@ static inline int zeromap_pmd_range(stru if (end > PGDIR_SIZE) end = PGDIR_SIZE; do { - pte_t * pte = pte_alloc_map(mm, pmd, base + address); + pte_t *pte = pte_alloc_map(vma->vm_mm, pgd, pmd, base + address); if (!pte) return -ENOMEM; - zeromap_pte_range(pte, base + address, end - address, prot); + zeromap_pte_range(vma, pte, base + address, end - address, prot); pte_unmap(pte); address = (address + PMD_SIZE) & PMD_MASK; - pmd++; + (*pmd)++; } while (address && (address < end)); return 0; } @@ -844,13 +837,14 @@ int zeromap_page_range(struct vm_area_st spin_lock(&mm->page_table_lock); do { - pmd_t *pmd = pmd_alloc(mm, dir, address); + pmd_t *pmd = pmd_alloc_map(mm, dir, address); error = -ENOMEM; if (!pmd) break; - error = zeromap_pmd_range(mm, pmd, address, end - address, prot); + error = zeromap_pmd_range(vma, dir, &pmd, address, end - address, prot); if (error) break; + pmd_unmap(pmd - 1); address = (address + PGDIR_SIZE) & PGDIR_MASK; dir++; } while (address && (address < end)); @@ -864,8 +858,9 @@ int zeromap_page_range(struct vm_area_st * mappings are removed. any references to nonexistent pages results * in null mappings (currently treated as "copy-on-access") */ -static inline void remap_pte_range(pte_t * pte, unsigned long address, unsigned long size, - unsigned long phys_addr, pgprot_t prot) +static inline void remap_pte_range(struct vm_area_struct *vma, pte_t *pte, + unsigned long address, unsigned long size, + unsigned long phys_addr, pgprot_t prot) { unsigned long end; unsigned long pfn; @@ -878,15 +873,16 @@ static inline void remap_pte_range(pte_t do { BUG_ON(!pte_none(*pte)); if (!pfn_valid(pfn) || PageReserved(pfn_to_page(pfn))) - set_pte(pte, pfn_pte(pfn, prot)); + vm_set_pte(vma, pte, pfn_pte(pfn, prot), address); address += PAGE_SIZE; pfn++; pte++; } while (address && (address < end)); } -static inline int remap_pmd_range(struct mm_struct *mm, pmd_t * pmd, unsigned long address, unsigned long size, - unsigned long phys_addr, pgprot_t prot) +static inline int remap_pmd_range(struct vm_area_struct *vma, pgd_t *pgd, + pmd_t **pmd, unsigned long address, unsigned long size, + unsigned long phys_addr, pgprot_t prot) { unsigned long base, end; @@ -897,13 +893,13 @@ static inline int remap_pmd_range(struct end = PGDIR_SIZE; phys_addr -= address; do { - pte_t * pte = pte_alloc_map(mm, pmd, base + address); + pte_t *pte = pte_alloc_map(vma->vm_mm, pgd, pmd, base + address); if (!pte) return -ENOMEM; - remap_pte_range(pte, base + address, end - address, address + phys_addr, prot); + remap_pte_range(vma, pte, base + address, end - address, address + phys_addr, prot); pte_unmap(pte); address = (address + PMD_SIZE) & PMD_MASK; - pmd++; + (*pmd)++; } while (address && (address < end)); return 0; } @@ -925,13 +921,14 @@ int remap_page_range(struct vm_area_stru spin_lock(&mm->page_table_lock); do { - pmd_t *pmd = pmd_alloc(mm, dir, from); + pmd_t *pmd = pmd_alloc_map(mm, dir, from); error = -ENOMEM; if (!pmd) break; - error = remap_pmd_range(mm, pmd, from, end - from, phys_addr + from, prot); + error = remap_pmd_range(vma, dir, &pmd, from, end - from, phys_addr + from, prot); if (error) break; + pmd_unmap(pmd - 1); from = (from + PGDIR_SIZE) & PGDIR_MASK; dir++; } while (from && (from < end)); @@ -948,9 +945,10 @@ int remap_page_range(struct vm_area_stru * * We hold the mm semaphore for reading and vma->vm_mm->page_table_lock */ -static inline void establish_pte(struct vm_area_struct * vma, unsigned long address, pte_t *page_table, pte_t entry) +static inline void establish_pte(struct vm_area_struct *vma, + unsigned long address, pte_t *page_table, pte_t entry) { - set_pte(page_table, entry); + vm_set_pte(vma, page_table, entry, address); flush_tlb_page(vma, address); update_mmu_cache(vma, address, entry); } @@ -958,8 +956,9 @@ static inline void establish_pte(struct /* * We hold the mm semaphore for reading and vma->vm_mm->page_table_lock */ -static inline void break_cow(struct vm_area_struct * vma, struct page * new_page, unsigned long address, - pte_t *page_table) +static inline void break_cow(struct vm_area_struct *vma, + struct page *new_page, unsigned long address, + pte_t *page_table) { flush_cache_page(vma, address); establish_pte(vma, address, page_table, pte_mkwrite(pte_mkdirty(mk_pte(new_page, vma->vm_page_prot)))); @@ -990,7 +989,6 @@ static int do_wp_page(struct mm_struct * { struct page *old_page, *new_page; unsigned long pfn = pte_pfn(pte); - struct pte_chain *pte_chain = NULL; int ret; if (unlikely(!pfn_valid(pfn))) { @@ -1000,6 +998,7 @@ static int do_wp_page(struct mm_struct * * data, but for the moment just pretend this is OOM. */ pte_unmap(page_table); + pmd_unmap(pmd); printk(KERN_ERR "do_wp_page: bogus page at address %08lx\n", address); goto oom; @@ -1008,17 +1007,22 @@ static int do_wp_page(struct mm_struct * if (!TestSetPageLocked(old_page)) { int reuse = can_share_swap_page(old_page); - unlock_page(old_page); - if (reuse) { + if (!reuse) + unlock_page(old_page); + else { flush_cache_page(vma, address); establish_pte(vma, address, page_table, pte_mkyoung(pte_mkdirty(pte_mkwrite(pte)))); + page_turn_rmap(old_page, vma); pte_unmap(page_table); + pmd_unmap(pmd); ret = VM_FAULT_MINOR; + unlock_page(old_page); goto out; } } pte_unmap(page_table); + pmd_unmap(pmd); /* * Ok, we need to copy. Oh, well.. @@ -1026,9 +1030,6 @@ static int do_wp_page(struct mm_struct * page_cache_get(old_page); spin_unlock(&mm->page_table_lock); - pte_chain = pte_chain_alloc(GFP_KERNEL); - if (!pte_chain) - goto no_mem; new_page = alloc_page(GFP_HIGHUSER); if (!new_page) goto no_mem; @@ -1038,32 +1039,37 @@ static int do_wp_page(struct mm_struct * * Re-check the pte - we dropped the lock */ spin_lock(&mm->page_table_lock); + pmd = pmd_offset_map(pgd_offset(mm, address), address); page_table = pte_offset_map(pmd, address); if (pte_same(*page_table, pte)) { if (PageReserved(old_page)) ++mm->rss; - page_remove_rmap(old_page, page_table); + else + /* should be file-backed, ->__mapping not modified */ + page_remove_rmap(old_page); break_cow(vma, new_page, address, page_table); - pte_chain = page_add_rmap(new_page, page_table, pte_chain); + + /* we have a unique reference, so PG_locked need not be held */ + page_add_rmap(new_page, vma, address, 1); lru_cache_add_active(new_page); /* Free the old page.. */ new_page = old_page; } pte_unmap(page_table); + pmd_unmap(pmd); page_cache_release(new_page); page_cache_release(old_page); ret = VM_FAULT_MINOR; - goto out; +out: + spin_unlock(&mm->page_table_lock); + return ret; no_mem: page_cache_release(old_page); oom: ret = VM_FAULT_OOM; -out: - spin_unlock(&mm->page_table_lock); - pte_chain_free(pte_chain); - return ret; + goto out; } /* @@ -1087,17 +1093,30 @@ invalidate_mmap_range_list(struct list_h hea = hba + hlen - 1; /* avoid overflow. */ if (hea < hba) hea = ULONG_MAX; - list_for_each(curr, head) { + list_for_each_rcu(curr, head) { + struct mmu_gather *tlb; + unsigned long start, end; + vp = list_entry(curr, struct vm_area_struct, shared); + + if (vp->vm_flags & VM_DEAD) + continue; + vba = vp->vm_pgoff; vea = vba + ((vp->vm_end - vp->vm_start) >> PAGE_SHIFT) - 1; if (hea < vba || vea < hba) continue; /* Mapping disjoint from hole. */ zba = (hba <= vba) ? vba : hba; zea = (vea <= hea) ? vea : hea; - zap_page_range(vp, - ((zba - vba) << PAGE_SHIFT) + vp->vm_start, - (zea - zba + 1) << PAGE_SHIFT); + + start = vp->vm_start + ((zba - vba) << PAGE_SHIFT); + end = start + ((zea - zba + 1) << PAGE_SHIFT); + + spin_lock(&vp->vm_mm->page_table_lock); + tlb = tlb_gather_mmu(vp->vm_mm, 0); + unmap_page_range(tlb, vp, start, end); + tlb_finish_mmu(tlb, start, end); + spin_unlock(&vp->vm_mm->page_table_lock); } } @@ -1129,14 +1148,14 @@ void invalidate_mmap_range(struct addres if (holeend & ~(long long)ULONG_MAX) hlen = ULONG_MAX - hba + 1; } - down(&mapping->i_shared_sem); + rcu_read_lock(); /* Protect against page fault */ atomic_inc(&mapping->truncate_count); if (unlikely(!list_empty(&mapping->i_mmap))) invalidate_mmap_range_list(&mapping->i_mmap, hba, hlen); if (unlikely(!list_empty(&mapping->i_mmap_shared))) invalidate_mmap_range_list(&mapping->i_mmap_shared, hba, hlen); - up(&mapping->i_shared_sem); + rcu_read_unlock(); } EXPORT_SYMBOL_GPL(invalidate_mmap_range); @@ -1217,9 +1236,9 @@ static int do_swap_page(struct mm_struct swp_entry_t entry = pte_to_swp_entry(orig_pte); pte_t pte; int ret = VM_FAULT_MINOR; - struct pte_chain *pte_chain = NULL; pte_unmap(page_table); + pmd_unmap(pmd); spin_unlock(&mm->page_table_lock); page = lookup_swap_cache(entry); if (!page) { @@ -1231,12 +1250,14 @@ static int do_swap_page(struct mm_struct * we released the page table lock. */ spin_lock(&mm->page_table_lock); + pmd = pmd_offset_map(pgd_offset(mm, address), address); page_table = pte_offset_map(pmd, address); if (pte_same(*page_table, orig_pte)) ret = VM_FAULT_OOM; else ret = VM_FAULT_MINOR; pte_unmap(page_table); + pmd_unmap(pmd); spin_unlock(&mm->page_table_lock); goto out; } @@ -1247,26 +1268,27 @@ static int do_swap_page(struct mm_struct } mark_page_accessed(page); - pte_chain = pte_chain_alloc(GFP_KERNEL); - if (!pte_chain) { - ret = -ENOMEM; - goto out; - } lock_page(page); + if (!rmap_get_cpu()) { + ret = VM_FAULT_OOM; + goto outrel; + } + spin_lock(&mm->page_table_lock); + put_cpu(); + pmd = pmd_offset_map(pgd_offset(mm, address), address); + page_table = pte_offset_map(pmd, address); + /* * Back out if somebody else faulted in this pte while we * released the page table lock. */ - spin_lock(&mm->page_table_lock); - page_table = pte_offset_map(pmd, address); if (!pte_same(*page_table, orig_pte)) { pte_unmap(page_table); + pmd_unmap(pmd); spin_unlock(&mm->page_table_lock); - unlock_page(page); - page_cache_release(page); ret = VM_FAULT_MINOR; - goto out; + goto outrel; } /* The page isn't present yet, go ahead with the fault. */ @@ -1279,19 +1301,23 @@ static int do_swap_page(struct mm_struct pte = mk_pte(page, vma->vm_page_prot); if (write_access && can_share_swap_page(page)) pte = pte_mkdirty(pte_mkwrite(pte)); - unlock_page(page); flush_icache_page(vma, page); - set_pte(page_table, pte); - pte_chain = page_add_rmap(page, page_table, pte_chain); + vm_set_pte(vma, page_table, pte, address); + page_add_rmap(page, vma, address, 1); + unlock_page(page); /* No need to invalidate - it was non-present before */ update_mmu_cache(vma, address, pte); + pmd_unmap(pmd); pte_unmap(page_table); spin_unlock(&mm->page_table_lock); out: - pte_chain_free(pte_chain); return ret; +outrel: + unlock_page(page); + page_cache_release(page); + goto out; } /* @@ -1306,20 +1332,8 @@ do_anonymous_page(struct mm_struct *mm, { pte_t entry; struct page * page = ZERO_PAGE(addr); - struct pte_chain *pte_chain; int ret; - pte_chain = pte_chain_alloc(GFP_ATOMIC); - if (!pte_chain) { - pte_unmap(page_table); - spin_unlock(&mm->page_table_lock); - pte_chain = pte_chain_alloc(GFP_KERNEL); - if (!pte_chain) - goto no_mem; - spin_lock(&mm->page_table_lock); - page_table = pte_offset_map(pmd, addr); - } - /* Read-only mapping of ZERO_PAGE. */ entry = pte_wrprotect(mk_pte(ZERO_PAGE(addr), vma->vm_page_prot)); @@ -1327,6 +1341,7 @@ do_anonymous_page(struct mm_struct *mm, if (write_access) { /* Allocate our own private page. */ pte_unmap(page_table); + pmd_unmap(pmd); spin_unlock(&mm->page_table_lock); page = alloc_page(GFP_HIGHUSER); @@ -1335,9 +1350,11 @@ do_anonymous_page(struct mm_struct *mm, clear_user_highpage(page, addr); spin_lock(&mm->page_table_lock); + pmd = pmd_offset_map(pgd_offset(mm, addr), addr); page_table = pte_offset_map(pmd, addr); if (!pte_none(*page_table)) { + pmd_unmap(pmd); pte_unmap(page_table); page_cache_release(page); spin_unlock(&mm->page_table_lock); @@ -1346,26 +1363,26 @@ do_anonymous_page(struct mm_struct *mm, } mm->rss++; entry = pte_mkwrite(pte_mkdirty(mk_pte(page, vma->vm_page_prot))); + } + + vm_set_pte(vma, page_table, entry, addr); + if (write_access) { + page_add_rmap(page, vma, addr, 1); lru_cache_add_active(page); mark_page_accessed(page); } - - set_pte(page_table, entry); - /* ignores ZERO_PAGE */ - pte_chain = page_add_rmap(page, page_table, pte_chain); + pmd_unmap(pmd); pte_unmap(page_table); /* No need to invalidate - it was non-present before */ update_mmu_cache(vma, addr, entry); spin_unlock(&mm->page_table_lock); ret = VM_FAULT_MINOR; - goto out; - -no_mem: - ret = VM_FAULT_OOM; out: - pte_chain_free(pte_chain); return ret; +no_mem: + ret = VM_FAULT_OOM; + goto out; } /* @@ -1387,14 +1404,14 @@ do_no_page(struct mm_struct *mm, struct struct page * new_page; struct address_space *mapping = NULL; pte_t entry; - struct pte_chain *pte_chain; int sequence = 0; - int ret; + int ret, anon = 0; if (!vma->vm_ops || !vma->vm_ops->nopage) return do_anonymous_page(mm, vma, page_table, pmd, write_access, address); pte_unmap(page_table); + pmd_unmap(pmd); spin_unlock(&mm->page_table_lock); if (vma->vm_file) { @@ -1411,26 +1428,25 @@ retry: if (new_page == NOPAGE_OOM) return VM_FAULT_OOM; - pte_chain = pte_chain_alloc(GFP_KERNEL); - if (!pte_chain) - goto oom; - /* * Should we do an early C-O-W break? */ - if (write_access && !(vma->vm_flags & VM_SHARED)) { + if ((write_access || page_zone(new_page)->zone_pgdat->node_id != numa_node_id()) && !(vma->vm_flags & VM_SHARED)) { struct page * page = alloc_page(GFP_HIGHUSER); - if (!page) { - page_cache_release(new_page); + if (!page) goto oom; - } + /* start with refcount 1 */ copy_user_highpage(page, new_page, address); page_cache_release(new_page); - lru_cache_add_active(page); + anon = 1; new_page = page; } + if (!rmap_get_cpu()) + goto oom; spin_lock(&mm->page_table_lock); + put_cpu(); + /* * For a file-backed vma, someone could have truncated or otherwise * invalidated this page. If invalidate_mmap_range got called, @@ -1443,6 +1459,7 @@ retry: page_cache_release(new_page); goto retry; } + pmd = pmd_offset_map(pgd_offset(mm, address), address); page_table = pte_offset_map(pmd, address); /* @@ -1463,12 +1480,29 @@ retry: entry = mk_pte(new_page, vma->vm_page_prot); if (write_access) entry = pte_mkwrite(pte_mkdirty(entry)); - set_pte(page_table, entry); - pte_chain = page_add_rmap(new_page, page_table, pte_chain); + vm_set_pte(vma, page_table, entry, address); + + /* + * PG_locked not held for the anon case, but we have a + * unique reference, and ->__mapping is untouched when file-backed + */ + if (!PageReserved(new_page)) + page_add_rmap(new_page, vma, address, anon); + + /* kswapd can find us now, but we're already prepped */ + if (anon) + lru_cache_add_active(new_page); pte_unmap(page_table); + pmd_unmap(pmd); } else { /* One of our sibling threads was faster, back out. */ pte_unmap(page_table); + pmd_unmap(pmd); + /* + * In the anon case, we never hit the LRU, so we free instantly, + * where in mainline the LRU retains a reference. In the file- + * backed case, we merely release a reference acquired earlier. + */ page_cache_release(new_page); spin_unlock(&mm->page_table_lock); ret = VM_FAULT_MINOR; @@ -1479,12 +1513,12 @@ retry: update_mmu_cache(vma, address, entry); spin_unlock(&mm->page_table_lock); ret = VM_FAULT_MAJOR; - goto out; -oom: - ret = VM_FAULT_OOM; out: - pte_chain_free(pte_chain); return ret; +oom: + page_cache_release(new_page); + ret = VM_FAULT_OOM; + goto out; } /* @@ -1505,13 +1539,14 @@ static int do_file_page(struct mm_struct */ if (!vma->vm_ops || !vma->vm_ops->populate || (write_access && !(vma->vm_flags & VM_SHARED))) { - pte_clear(pte); + vm_pte_clear(vma, pte, address); return do_no_page(mm, vma, address, write_access, pte, pmd); } pgoff = pte_to_pgoff(*pte); pte_unmap(pte); + pmd_unmap(pmd); spin_unlock(&mm->page_table_lock); err = vma->vm_ops->populate(vma, address & PAGE_MASK, PAGE_SIZE, vma->vm_page_prot, pgoff, 0); @@ -1572,6 +1607,7 @@ static inline int handle_pte_fault(struc entry = pte_mkyoung(entry); establish_pte(vma, address, pte, entry); pte_unmap(pte); + pmd_unmap(pmd); spin_unlock(&mm->page_table_lock); return VM_FAULT_MINOR; } @@ -1598,10 +1634,10 @@ int handle_mm_fault(struct mm_struct *mm * and the SMP-safe atomic PTE updates. */ spin_lock(&mm->page_table_lock); - pmd = pmd_alloc(mm, pgd, address); + pmd = pmd_alloc_map(mm, pgd, address); if (pmd) { - pte_t * pte = pte_alloc_map(mm, pmd, address); + pte_t *pte = pte_alloc_map(mm, pgd, &pmd, address); if (pte) return handle_pte_fault(mm, vma, address, write_access, pte, pmd); } @@ -1620,10 +1656,33 @@ int handle_mm_fault(struct mm_struct *mm */ pmd_t *__pmd_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address) { + struct page *page; + + spin_unlock(&mm->page_table_lock); + page = pmd_alloc_one(mm, address); + spin_lock(&mm->page_table_lock); + if (!page) + return NULL; + + /* + * Because we dropped the lock, we should re-check the + * entry, as somebody else could have populated it.. + */ + if (pgd_present(*pgd)) { + pmd_free(page); + goto out; + } + pgd_populate(mm, pgd, page); +out: + return pmd_offset_map(pgd, address); +} + +pmd_t *__pmd_alloc_kernel(struct mm_struct *mm, pgd_t *pgd, unsigned long address) +{ pmd_t *new; spin_unlock(&mm->page_table_lock); - new = pmd_alloc_one(mm, address); + new = pmd_alloc_one_kernel(mm, address); spin_lock(&mm->page_table_lock); if (!new) return NULL; @@ -1633,12 +1692,12 @@ pmd_t *__pmd_alloc(struct mm_struct *mm, * entry, as somebody else could have populated it.. */ if (pgd_present(*pgd)) { - pmd_free(new); + pmd_free(virt_to_page(new)); goto out; } - pgd_populate(mm, pgd, new); + pgd_populate(mm, pgd, virt_to_page(new)); out: - return pmd_offset(pgd, address); + return pmd_offset_kernel(pgd, address); } int make_pages_present(unsigned long addr, unsigned long end) @@ -1655,6 +1714,8 @@ int make_pages_present(unsigned long add len = (end+PAGE_SIZE-1)/PAGE_SIZE-addr/PAGE_SIZE; ret = get_user_pages(current, current->mm, addr, len, write, 0, NULL, NULL); + if (ret < 0) + return ret; return ret == len ? 0 : -1; } @@ -1670,7 +1731,7 @@ struct page * vmalloc_to_page(void * vma pte_t *ptep, pte; if (!pgd_none(*pgd)) { - pmd = pmd_offset(pgd, addr); + pmd = pmd_offset_map(pgd, addr); if (!pmd_none(*pmd)) { preempt_disable(); ptep = pte_offset_map(pmd, addr); @@ -1680,6 +1741,7 @@ struct page * vmalloc_to_page(void * vma pte_unmap(ptep); preempt_enable(); } + pmd_unmap(pmd); } return page; } diff -prauN linux-2.6.0-test5/mm/mlock.c wli-2.6.0-test5-bk12-25/mm/mlock.c --- linux-2.6.0-test5/mm/mlock.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/mm/mlock.c 2003-09-25 19:16:15.000000000 -0700 @@ -13,21 +13,24 @@ static int mlock_fixup(struct vm_area_st unsigned long start, unsigned long end, unsigned int newflags) { struct mm_struct * mm = vma->vm_mm; - int pages, error; + int pages; + int ret = 0; if (newflags == vma->vm_flags) - return 0; + goto out; if (start != vma->vm_start) { - error = split_vma(mm, vma, start, 1); - if (error) - return -EAGAIN; + if (split_vma(mm, vma, start, 1)) { + ret = -EAGAIN; + goto out; + } } if (end != vma->vm_end) { - error = split_vma(mm, vma, end, 0); - if (error) - return -EAGAIN; + if (split_vma(mm, vma, end, 0)) { + ret = -EAGAIN; + goto out; + } } spin_lock(&mm->page_table_lock); @@ -40,11 +43,12 @@ static int mlock_fixup(struct vm_area_st pages = (end - start) >> PAGE_SHIFT; if (newflags & VM_LOCKED) { pages = -pages; - make_pages_present(start, end); + ret = make_pages_present(start, end); } vma->vm_mm->locked_vm -= pages; - return 0; +out: + return ret; } static int do_mlock(unsigned long start, size_t len, int on) diff -prauN linux-2.6.0-test5/mm/mmap.c wli-2.6.0-test5-bk12-25/mm/mmap.c --- linux-2.6.0-test5/mm/mmap.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/mm/mmap.c 2003-09-29 13:42:28.000000000 -0700 @@ -58,8 +58,19 @@ EXPORT_SYMBOL(sysctl_overcommit_memory); EXPORT_SYMBOL(sysctl_overcommit_ratio); EXPORT_SYMBOL(vm_committed_space); +static void __free_vma(void *vma) +{ + kmem_cache_free(vm_area_cachep, vma); +} + +void free_vma(struct vm_area_struct *vma) +{ + INIT_LIST_HEAD(&vma->rcu.list); + call_rcu(&vma->rcu, __free_vma, vma); +} + /* - * Requires inode->i_mapping->i_shared_sem + * Requires inode->i_mapping->i_shared_lock */ static inline void __remove_shared_vm_struct(struct vm_area_struct *vma, struct inode *inode) @@ -67,7 +78,8 @@ __remove_shared_vm_struct(struct vm_area if (inode) { if (vma->vm_flags & VM_DENYWRITE) atomic_inc(&inode->i_writecount); - list_del_init(&vma->shared); + vma->vm_flags |= VM_DEAD; + list_del_rcu(&vma->shared); } } @@ -81,9 +93,9 @@ static void remove_shared_vm_struct(stru if (file) { struct inode *inode = file->f_dentry->d_inode; - down(&inode->i_mapping->i_shared_sem); + spin_lock(&inode->i_mapping->i_shared_lock); __remove_shared_vm_struct(vma, inode); - up(&inode->i_mapping->i_shared_sem); + spin_unlock(&inode->i_mapping->i_shared_lock); } } @@ -241,9 +253,9 @@ static inline void __vma_link_file(struc atomic_dec(&inode->i_writecount); if (vma->vm_flags & VM_SHARED) - list_add_tail(&vma->shared, &mapping->i_mmap_shared); + list_add_tail_rcu(&vma->shared, &mapping->i_mmap_shared); else - list_add_tail(&vma->shared, &mapping->i_mmap); + list_add_tail_rcu(&vma->shared, &mapping->i_mmap); } } @@ -267,12 +279,12 @@ static void vma_link(struct mm_struct *m mapping = vma->vm_file->f_dentry->d_inode->i_mapping; if (mapping) - down(&mapping->i_shared_sem); + spin_lock(&mapping->i_shared_lock); spin_lock(&mm->page_table_lock); __vma_link(mm, vma, prev, rb_link, rb_parent); spin_unlock(&mm->page_table_lock); if (mapping) - up(&mapping->i_shared_sem); + spin_unlock(&mapping->i_shared_lock); mark_mm_hugetlb(mm, vma); mm->map_count++; @@ -299,6 +311,28 @@ static inline int is_mergeable_vma(struc return 1; } +static void move_vma_start(struct vm_area_struct *vma, unsigned long addr) +{ + spinlock_t *lock = &vma->vm_mm->page_table_lock; + struct inode *inode = NULL; + + if (vma->vm_file) { + inode = vma->vm_file->f_dentry->d_inode; + spin_lock(&inode->i_mapping->i_shared_lock); + } + spin_lock(lock); + if (inode) + __remove_shared_vm_struct(vma, inode); + /* If no vm_file, perhaps we should always keep vm_pgoff at 0?? */ + vma->vm_pgoff += (long)(addr - vma->vm_start) >> PAGE_SHIFT; + vma->vm_start = addr; + if (inode) { + __vma_link_file(vma); + spin_unlock(&inode->i_mapping->i_shared_lock); + } + spin_unlock(lock); +} + /* * Return true if we can merge this (vm_flags,file,vm_pgoff,size) * in front of (at a lower virtual address and file offset than) the vma. @@ -351,8 +385,6 @@ static int vma_merge(struct mm_struct *m unsigned long end, unsigned long vm_flags, struct file *file, unsigned long pgoff) { - spinlock_t * lock = &mm->page_table_lock; - /* * We later require that vma->vm_flags == vm_flags, so this tests * vma->vm_flags & VM_SPECIAL, too. @@ -372,12 +404,13 @@ static int vma_merge(struct mm_struct *m is_mergeable_vma(prev, file, vm_flags) && can_vma_merge_after(prev, vm_flags, file, pgoff)) { struct vm_area_struct *next; + spinlock_t *lock = &mm->page_table_lock; struct inode *inode = file ? file->f_dentry->d_inode : NULL; int need_up = 0; if (unlikely(file && prev->vm_next && prev->vm_next->vm_file == file)) { - down(&inode->i_mapping->i_shared_sem); + spin_lock(&inode->i_mapping->i_shared_lock); need_up = 1; } spin_lock(lock); @@ -395,17 +428,17 @@ static int vma_merge(struct mm_struct *m __remove_shared_vm_struct(next, inode); spin_unlock(lock); if (need_up) - up(&inode->i_mapping->i_shared_sem); + spin_unlock(&inode->i_mapping->i_shared_lock); if (file) fput(file); mm->map_count--; - kmem_cache_free(vm_area_cachep, next); + free_vma(next); return 1; } spin_unlock(lock); if (need_up) - up(&inode->i_mapping->i_shared_sem); + spin_unlock(&inode->i_mapping->i_shared_lock); return 1; } @@ -419,10 +452,7 @@ static int vma_merge(struct mm_struct *m pgoff, (end - addr) >> PAGE_SHIFT)) return 0; if (end == prev->vm_start) { - spin_lock(lock); - prev->vm_start = addr; - prev->vm_pgoff -= (end - addr) >> PAGE_SHIFT; - spin_unlock(lock); + move_vma_start(prev, addr); return 1; } } @@ -649,20 +679,26 @@ munmap_back: atomic_inc(&inode->i_writecount); fput(file); } - kmem_cache_free(vm_area_cachep, vma); + free_vma(vma); } out: mm->total_vm += len >> PAGE_SHIFT; - if (vm_flags & VM_LOCKED) { - mm->locked_vm += len >> PAGE_SHIFT; - make_pages_present(addr, addr + len); - } - if (flags & MAP_POPULATE) { + if (flags & (MAP_POPULATE|MAP_EXECUTABLE)) { up_write(&mm->mmap_sem); sys_remap_file_pages(addr, len, prot, pgoff, flags & MAP_NONBLOCK); down_write(&mm->mmap_sem); } + + /* prefault the stack and locked mappings */ + if ((vm_flags & VM_LOCKED) || + ((vm_flags & (VM_WRITE|VM_MAYWRITE)) == VM_MAYWRITE && + vma->vm_end - vma->vm_start <= + min(16*PAGE_SIZE, current->rlim[RLIMIT_STACK].rlim_cur))) { + if (vm_flags & VM_LOCKED) + mm->locked_vm += len >> PAGE_SHIFT; + make_pages_present(addr, addr + len); + } return addr; unmap_and_free_vma: @@ -674,7 +710,7 @@ unmap_and_free_vma: /* Undo any partial mapping done by a device driver. */ zap_page_range(vma, vma->vm_start, vma->vm_end - vma->vm_start); free_vma: - kmem_cache_free(vm_area_cachep, vma); + free_vma(vma); unacct_error: if (charged) vm_unacct_memory(charged); @@ -1061,7 +1097,7 @@ static void unmap_vma(struct mm_struct * area->vm_ops->close(area); if (area->vm_file) fput(area->vm_file); - kmem_cache_free(vm_area_cachep, area); + free_vma(area); } /* @@ -1151,8 +1187,7 @@ int split_vma(struct mm_struct * mm, str if (new_below) { new->vm_end = addr; - vma->vm_start = addr; - vma->vm_pgoff += ((addr - new->vm_start) >> PAGE_SHIFT); + move_vma_start(vma, addr); } else { vma->vm_end = addr; new->vm_start = addr; @@ -1269,6 +1304,9 @@ unsigned long do_brk(unsigned long addr, if (!len) return addr; + if ((addr + len) > TASK_SIZE || (addr + len) < addr) + return -EINVAL; + /* * mlock MCL_FUTURE? */ @@ -1400,7 +1438,7 @@ void exit_mmap(struct mm_struct *mm) } if (vma->vm_file) fput(vma->vm_file); - kmem_cache_free(vm_area_cachep, vma); + free_vma(vma); vma = next; } } diff -prauN linux-2.6.0-test5/mm/mprotect.c wli-2.6.0-test5-bk12-25/mm/mprotect.c --- linux-2.6.0-test5/mm/mprotect.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/mm/mprotect.c 2003-09-28 22:48:27.000000000 -0700 @@ -24,11 +24,11 @@ #include static inline void -change_pte_range(pmd_t *pmd, unsigned long address, - unsigned long size, pgprot_t newprot) +change_pte_range(struct vm_area_struct *vma, pmd_t *pmd, + unsigned long address, unsigned long size, pgprot_t newprot) { pte_t * pte; - unsigned long end; + unsigned long start, end; if (pmd_none(*pmd)) return; @@ -38,6 +38,7 @@ change_pte_range(pmd_t *pmd, unsigned lo return; } pte = pte_offset_map(pmd, address); + start = address & PMD_MASK; address &= ~PMD_MASK; end = address + size; if (end > PMD_SIZE) @@ -50,8 +51,8 @@ change_pte_range(pmd_t *pmd, unsigned lo * bits by wiping the pte and then setting the new pte * into place. */ - entry = ptep_get_and_clear(pte); - set_pte(pte, pte_modify(entry, newprot)); + entry = vm_ptep_get_and_clear(vma, pte, address + start); + vm_set_pte(vma, pte, pte_modify(entry, newprot), start + address); } address += PAGE_SIZE; pte++; @@ -60,11 +61,11 @@ change_pte_range(pmd_t *pmd, unsigned lo } static inline void -change_pmd_range(pgd_t *pgd, unsigned long address, - unsigned long size, pgprot_t newprot) +change_pmd_range(struct vm_area_struct *vma, pgd_t *pgd, + unsigned long address, unsigned long size, pgprot_t newprot) { pmd_t * pmd; - unsigned long end; + unsigned long start, end; if (pgd_none(*pgd)) return; @@ -73,16 +74,18 @@ change_pmd_range(pgd_t *pgd, unsigned lo pgd_clear(pgd); return; } - pmd = pmd_offset(pgd, address); + pmd = pmd_offset_map(pgd, address); + start = address & PGDIR_MASK; address &= ~PGDIR_MASK; end = address + size; if (end > PGDIR_SIZE) end = PGDIR_SIZE; do { - change_pte_range(pmd, address, end - address, newprot); + change_pte_range(vma, pmd, start + address, end - address, newprot); address = (address + PMD_SIZE) & PMD_MASK; pmd++; } while (address && (address < end)); + pmd_unmap(pmd - 1); } static void @@ -98,7 +101,7 @@ change_protection(struct vm_area_struct BUG(); spin_lock(¤t->mm->page_table_lock); do { - change_pmd_range(dir, start, end - start, newprot); + change_pmd_range(vma, dir, start, end - start, newprot); start = (start + PGDIR_SIZE) & PGDIR_MASK; dir++; } while (start && (start < end)); @@ -135,7 +138,7 @@ mprotect_attempt_merge(struct vm_area_st __vma_unlink(mm, vma, prev); spin_unlock(&mm->page_table_lock); - kmem_cache_free(vm_area_cachep, vma); + free_vma(vma); mm->map_count--; return 1; } @@ -300,7 +303,7 @@ sys_mprotect(unsigned long start, size_t __vma_unlink(prev->vm_mm, next, prev); spin_unlock(&prev->vm_mm->page_table_lock); - kmem_cache_free(vm_area_cachep, next); + free_vma(next); prev->vm_mm->map_count--; } out: diff -prauN linux-2.6.0-test5/mm/mremap.c wli-2.6.0-test5-bk12-25/mm/mremap.c --- linux-2.6.0-test5/mm/mremap.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/mm/mremap.c 2003-09-29 00:29:01.000000000 -0700 @@ -15,7 +15,7 @@ #include #include #include -#include +#include #include #include @@ -38,7 +38,7 @@ static pte_t *get_one_pte_map_nested(str goto end; } - pmd = pmd_offset(pgd, addr); + pmd = pmd_offset_map_nested(pgd, addr); if (pmd_none(*pmd)) goto end; if (pmd_bad(*pmd)) { @@ -53,6 +53,7 @@ static pte_t *get_one_pte_map_nested(str pte = NULL; } end: + pmd_unmap_nested(pmd); return pte; } @@ -60,50 +61,51 @@ static inline int page_table_present(str { pgd_t *pgd; pmd_t *pmd; + int ret; pgd = pgd_offset(mm, addr); if (pgd_none(*pgd)) return 0; - pmd = pmd_offset(pgd, addr); - return pmd_present(*pmd); + pmd = pmd_offset_map(pgd, addr); + ret = pmd_present(*pmd); + pmd_unmap(pmd); + return ret != 0; } static inline pte_t *alloc_one_pte_map(struct mm_struct *mm, unsigned long addr) { + pgd_t *pgd; pmd_t *pmd; pte_t *pte = NULL; - pmd = pmd_alloc(mm, pgd_offset(mm, addr), addr); + pgd = pgd_offset(mm, addr); + pmd = pmd_alloc_map(mm, pgd, addr); if (pmd) - pte = pte_alloc_map(mm, pmd, addr); + pte = pte_alloc_map(mm, pgd, &pmd, addr); + pmd_unmap(pmd); return pte; } static int -copy_one_pte(struct mm_struct *mm, pte_t *src, pte_t *dst, - struct pte_chain **pte_chainp) +copy_one_pte(struct vm_area_struct *vma, pte_t *src, pte_t *dst, + unsigned long old_addr, unsigned long new_addr) { - int error = 0; - pte_t pte; - struct page *page = NULL; - - if (pte_present(*src)) - page = pte_page(*src); - if (!pte_none(*src)) { - if (page) - page_remove_rmap(page, src); - pte = ptep_get_and_clear(src); - if (!dst) { - /* No dest? We must put it back. */ - dst = src; - error++; + pte_t pte; + if (!dst) + return -1; + pte = vm_ptep_get_and_clear(vma, src, old_addr); + vm_set_pte(vma, dst, pte, new_addr); + if (pte_present(pte)) { + unsigned long pfn = pte_pfn(pte); + if (pfn_valid(pfn)) { + struct page *page = pfn_to_page(pfn); + if (!PageReserved(page)) + page_move_rmap(page, vma, old_addr, new_addr); + } } - set_pte(dst, pte); - if (page) - *pte_chainp = page_add_rmap(page, dst, *pte_chainp); } - return error; + return 0; } static int @@ -111,16 +113,16 @@ move_one_page(struct vm_area_struct *vma unsigned long new_addr) { struct mm_struct *mm = vma->vm_mm; - int error = 0; pte_t *src, *dst; - struct pte_chain *pte_chain; + int error = 0; - pte_chain = pte_chain_alloc(GFP_KERNEL); - if (!pte_chain) { + if (!rmap_get_cpu()) { error = -ENOMEM; goto out; } + spin_lock(&mm->page_table_lock); + put_cpu(); src = get_one_pte_map_nested(mm, old_addr); if (src) { /* @@ -135,13 +137,12 @@ move_one_page(struct vm_area_struct *vma dst = alloc_one_pte_map(mm, new_addr); if (src == NULL) src = get_one_pte_map_nested(mm, old_addr); - error = copy_one_pte(mm, src, dst, &pte_chain); + error = copy_one_pte(vma, src, dst, old_addr, new_addr); pte_unmap_nested(src); pte_unmap(dst); } flush_tlb_page(vma, old_addr); spin_unlock(&mm->page_table_lock); - pte_chain_free(pte_chain); out: return error; } @@ -210,7 +211,7 @@ static unsigned long move_vma(struct vm_ if (vma == next) vma = prev; mm->map_count--; - kmem_cache_free(vm_area_cachep, next); + free_vma(next); } } else if (next->vm_start == new_addr + new_len && can_vma_merge(next, vma->vm_flags) && @@ -286,7 +287,7 @@ static unsigned long move_vma(struct vm_ return new_addr; } if (allocated_vma) - kmem_cache_free(vm_area_cachep, new_vma); + free_vma(new_vma); out: return -ENOMEM; } diff -prauN linux-2.6.0-test5/mm/msync.c wli-2.6.0-test5-bk12-25/mm/msync.c --- linux-2.6.0-test5/mm/msync.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/mm/msync.c 2003-09-25 20:03:31.000000000 -0700 @@ -82,7 +82,7 @@ static inline int filemap_sync_pmd_range pgd_clear(pgd); return 0; } - pmd = pmd_offset(pgd, address); + pmd = pmd_offset_map(pgd, address); if ((address & PGDIR_MASK) != (end & PGDIR_MASK)) end = (address & PGDIR_MASK) + PGDIR_SIZE; error = 0; @@ -91,6 +91,7 @@ static inline int filemap_sync_pmd_range address = (address + PMD_SIZE) & PMD_MASK; pmd++; } while (address && (address < end)); + pmd_unmap(pmd - 1); return error; } diff -prauN linux-2.6.0-test5/mm/nommu.c wli-2.6.0-test5-bk12-25/mm/nommu.c --- linux-2.6.0-test5/mm/nommu.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/mm/nommu.c 2003-09-28 23:22:21.000000000 -0700 @@ -562,7 +562,3 @@ unsigned long get_unmapped_area(struct f { return -ENOMEM; } - -void pte_chain_init(void) -{ -} diff -prauN linux-2.6.0-test5/mm/page-writeback.c wli-2.6.0-test5-bk12-25/mm/page-writeback.c --- linux-2.6.0-test5/mm/page-writeback.c 2003-09-08 12:50:16.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/mm/page-writeback.c 2003-09-28 23:04:08.000000000 -0700 @@ -111,6 +111,7 @@ get_dirty_limits(struct page_state *ps, int unmapped_ratio; long background; long dirty; + struct task_struct *tsk; get_page_state(ps); @@ -129,7 +130,8 @@ get_dirty_limits(struct page_state *ps, background = (background_ratio * total_pages) / 100; dirty = (dirty_ratio * total_pages) / 100; - if (current->flags & PF_LESS_THROTTLE) { + tsk = current; + if (tsk->flags & PF_LESS_THROTTLE || rt_task(tsk)) { background += background / 4; dirty += dirty / 4; } @@ -144,7 +146,7 @@ get_dirty_limits(struct page_state *ps, * If we're over `background_thresh' then pdflush is woken to perform some * writeout. */ -void balance_dirty_pages(struct address_space *mapping) +static void balance_dirty_pages(struct address_space *mapping) { struct page_state ps; long nr_reclaimable; @@ -219,6 +221,10 @@ void balance_dirty_pages_ratelimited(str if (dirty_exceeded) ratelimit = 8; + /* + * Check the rate limiting. Also, we do not want to throttle real-time + * tasks in balance_dirty_pages(). Period. + */ if (get_cpu_var(ratelimits)++ >= ratelimit) { __get_cpu_var(ratelimits) = 0; put_cpu_var(ratelimits); @@ -451,7 +457,7 @@ int do_writepages(struct address_space * */ int write_one_page(struct page *page, int wait) { - struct address_space *mapping = page->mapping; + struct address_space *mapping = page_mapping(page); int ret = 0; struct writeback_control wbc = { .sync_mode = WB_SYNC_ALL, @@ -463,12 +469,12 @@ int write_one_page(struct page *page, in if (wait) wait_on_page_writeback(page); - spin_lock(&mapping->page_lock); + mapping_wrlock(&mapping->page_lock); list_del(&page->list); if (test_clear_page_dirty(page)) { list_add(&page->list, &mapping->locked_pages); page_cache_get(page); - spin_unlock(&mapping->page_lock); + mapping_wrunlock(&mapping->page_lock); ret = mapping->a_ops->writepage(page, &wbc); if (ret == 0 && wait) { wait_on_page_writeback(page); @@ -478,7 +484,7 @@ int write_one_page(struct page *page, in page_cache_release(page); } else { list_add(&page->list, &mapping->clean_pages); - spin_unlock(&mapping->page_lock); + mapping_wrunlock(&mapping->page_lock); unlock_page(page); } return ret; @@ -490,31 +496,31 @@ EXPORT_SYMBOL(write_one_page); * and move it to the dirty_pages list. Also perform space reservation if * required. * - * __set_page_dirty_nobuffers() may return -ENOSPC. But if it does, the page + * set_page_dirty_nobuffers() may return -ENOSPC. But if it does, the page * is still safe, as long as it actually manages to find some blocks at * writeback time. * * This is also used when a single buffer is being dirtied: we want to set the * page dirty in that case, but not all the buffers. This is a "bottom-up" - * dirtying, whereas __set_page_dirty_buffers() is a "top-down" dirtying. + * dirtying, whereas set_page_dirty_buffers() is a "top-down" dirtying. */ -int __set_page_dirty_nobuffers(struct page *page) +int set_page_dirty_nobuffers(struct page *page) { int ret = 0; if (!TestSetPageDirty(page)) { - struct address_space *mapping = page->mapping; + struct address_space *mapping = page_mapping(page); if (mapping) { - spin_lock(&mapping->page_lock); - if (page->mapping) { /* Race with truncate? */ - BUG_ON(page->mapping != mapping); + mapping_wrlock(&mapping->page_lock); + if (page_mapping(page)) { /* Race with truncate? */ + BUG_ON(page_mapping(page) != mapping); if (!mapping->backing_dev_info->memory_backed) inc_page_state(nr_dirty); list_del(&page->list); list_add(&page->list, &mapping->dirty_pages); } - spin_unlock(&mapping->page_lock); + mapping_wrunlock(&mapping->page_lock); if (!PageSwapCache(page)) __mark_inode_dirty(mapping->host, I_DIRTY_PAGES); @@ -522,7 +528,28 @@ int __set_page_dirty_nobuffers(struct pa } return ret; } -EXPORT_SYMBOL(__set_page_dirty_nobuffers); +EXPORT_SYMBOL(set_page_dirty_nobuffers); + +/* + * If the mapping doesn't provide a set_page_dirty() a_op, then + * just fall through and assume that it wants bh's. + */ +int set_page_dirty(struct page *page) +{ + struct address_space *mapping = page_mapping(page); + int (*spd)(struct page *); + + if (!mapping) { + SetPageDirty(page); + return 0; + } + spd = mapping->a_ops->set_page_dirty; + if (spd) + return (*spd)(page); + else + return set_page_dirty_buffers(page); +} +EXPORT_SYMBOL(set_page_dirty); /* * set_page_dirty() is racy if the caller has no reference against @@ -551,7 +578,7 @@ int set_page_dirty_lock(struct page *pag int test_clear_page_dirty(struct page *page) { if (TestClearPageDirty(page)) { - struct address_space *mapping = page->mapping; + struct address_space *mapping = page_mapping(page); if (mapping && !mapping->backing_dev_info->memory_backed) dec_page_state(nr_dirty); diff -prauN linux-2.6.0-test5/mm/page_alloc.c wli-2.6.0-test5-bk12-25/mm/page_alloc.c --- linux-2.6.0-test5/mm/page_alloc.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/mm/page_alloc.c 2003-09-29 13:42:28.000000000 -0700 @@ -74,7 +74,7 @@ static void bad_page(const char *functio { printk("Bad page state at %s\n", function); printk("flags:0x%08lx mapping:%p mapped:%d count:%d\n", - page->flags, page->mapping, + page->flags, (void *)page->__mapping, page_mapped(page), page_count(page)); printk("Backtrace:\n"); dump_stack(); @@ -84,9 +84,12 @@ static void bad_page(const char *functio 1 << PG_lru | 1 << PG_active | 1 << PG_dirty | + 1 << PG_rmaplock | + 1 << PG_anon | + 1 << PG_swapcache | 1 << PG_writeback); set_page_count(page, 0); - page->mapping = NULL; + set_page_mapping(page, NULL); } #ifndef CONFIG_HUGETLB_PAGE @@ -168,7 +171,7 @@ static void destroy_compound_page(struct * -- wli */ -static inline void __free_pages_bulk (struct page *page, struct page *base, +static inline void buddy_free(struct page *page, struct page *base, struct zone *zone, struct free_area *area, unsigned long mask, unsigned int order) { @@ -181,7 +184,6 @@ static inline void __free_pages_bulk (st BUG(); index = page_idx >> (1 + order); - zone->free_pages -= mask; while (mask + (1 << (MAX_ORDER-1))) { struct page *buddy1, *buddy2; @@ -202,17 +204,45 @@ static inline void __free_pages_bulk (st BUG_ON(bad_range(zone, buddy2)); list_del(&buddy1->list); mask <<= 1; + area->globally_free--; area++; index >>= 1; page_idx &= mask; } list_add(&(base + page_idx)->list, &area->free_list); + area->globally_free++; +} + +static inline void __free_pages_bulk(struct page *page, struct page *base, + struct zone *zone, struct free_area *area, unsigned long mask, + unsigned int order) +{ + switch (area->active - area->locally_free) { + case 0: + if (!list_empty(&area->deferred_pages)) { + struct page *defer = list_entry(area->deferred_pages.next, struct page, list); + list_del(&defer->list); + area->locally_free--; + buddy_free(defer, base, zone, area, mask, order); + } + /* fall through */ + case 1: + buddy_free(page, base, zone, area, mask, order); + break; + default: + list_add(&page->list, &area->deferred_pages); + area->locally_free++; + break; + } + if (area->active) + area->active--; + zone->free_pages += 1 << order; } static inline void free_pages_check(const char *function, struct page *page) { if ( page_mapped(page) || - page->mapping != NULL || + page->__mapping != 0 || page_count(page) != 0 || (page->flags & ( 1 << PG_lru | @@ -220,6 +250,8 @@ static inline void free_pages_check(cons 1 << PG_locked | 1 << PG_active | 1 << PG_reclaim | + 1 << PG_rmaplock | + 1 << PG_anon | 1 << PG_slab | 1 << PG_writeback ))) bad_page(function, page); @@ -238,41 +270,78 @@ static inline void free_pages_check(cons * And clear the zone's pages_scanned counter, to hold off the "all pages are * pinned" detection logic. */ -static int -free_pages_bulk(struct zone *zone, int count, - struct list_head *list, unsigned int order) +void free_pages_bulk(struct zone *zone, struct page *page, unsigned int order) { - unsigned long mask, flags; + unsigned long mask, flags, count; struct free_area *area; - struct page *base, *page = NULL; - int ret = 0; + struct page *base, *save; + LIST_HEAD(tmp); + count = page->private; mask = (~0UL) << order; base = zone->zone_mem_map; area = zone->free_area + order; spin_lock_irqsave(&zone->lock, flags); zone->all_unreclaimable = 0; zone->pages_scanned = 0; - while (!list_empty(list) && count--) { - page = list_entry(list->prev, struct page, list); - /* have to delete it as __free_pages_bulk list manipulates */ - list_del(&page->list); - __free_pages_bulk(page, base, zone, area, mask, order); - ret++; + + if (order || area->active - area->locally_free <= 2*count) { + list_splice(&page->list, &tmp); + list_add(&page->list, &tmp); + page->private = 0; + } + + if (order) { + list_for_each_entry_safe(page, save, &tmp, list) { + list_del(&page->list); + __free_pages_bulk(page, base, zone, area, mask, order); + } + } else if (area->active - area->locally_free <= 2*count) { + /* + * This is a somewhat ad hoc approach to dealing with + * the interaction of gang allocation and the deferred + * coalescing heuristics. + */ + if (area->active - area->locally_free < count) { + int local = 0; + + while (local < count && area->locally_free) { + struct page *follow, *head = + list_entry(area->deferred_pages.next, struct page, lru); + list_del(&head->lru); + list_for_each_entry_safe(follow, save, &head->list, list) { + list_del(&follow->list); + buddy_free(follow, base, zone, area, mask, 0); + } + local += head->private; + area->locally_free -= head->private; + head->private = 0; + buddy_free(head, base, zone, area, mask, 0); + } + } + list_for_each_entry_safe(page, save, &tmp, list) { + list_del(&page->list); + buddy_free(page, base, zone, area, mask, order); + } + } else { + area->locally_free += count; + list_add(&page->lru, &area->deferred_pages); + } + if (!order) { + zone->free_pages += count; + area->active -= min(area->active, count); } spin_unlock_irqrestore(&zone->lock, flags); - return ret; } void __free_pages_ok(struct page *page, unsigned int order) { - LIST_HEAD(list); - mod_page_state(pgfree, 1 << order); free_pages_check(__FUNCTION__, page); - list_add(&page->list, &list); kernel_map_pages(page, 1<private = 1; + INIT_LIST_HEAD(&page->list); + free_pages_bulk(page_zone(page), page, order); } #define MARK_USED(index, order, area) \ @@ -285,10 +354,10 @@ expand(struct zone *zone, struct page *p unsigned long size = 1 << high; while (high > low) { - BUG_ON(bad_range(zone, page)); area--; high--; size >>= 1; + area->globally_free++; list_add(&page->list, &area->free_list); MARK_USED(index, high, area); index += size; @@ -318,7 +387,7 @@ static inline void set_page_refs(struct */ static void prep_new_page(struct page *page, int order) { - if (page->mapping || page_mapped(page) || + if (page->__mapping || page_mapped(page) || (page->flags & ( 1 << PG_private | 1 << PG_locked | @@ -326,6 +395,9 @@ static void prep_new_page(struct page *p 1 << PG_active | 1 << PG_dirty | 1 << PG_reclaim | + 1 << PG_rmaplock | + 1 << PG_anon | + 1 << PG_swapcache | 1 << PG_writeback ))) bad_page(__FUNCTION__, page); @@ -340,7 +412,7 @@ static void prep_new_page(struct page *p * Do the hard work of removing an element from the buddy allocator. * Call me with the zone->lock already held. */ -static struct page *__rmqueue(struct zone *zone, unsigned int order) +static struct page *buddy_alloc(struct zone *zone, unsigned int order) { struct free_area * area; unsigned int current_order; @@ -354,16 +426,144 @@ static struct page *__rmqueue(struct zon page = list_entry(area->free_list.next, struct page, list); list_del(&page->list); + area->globally_free--; index = page - zone->zone_mem_map; if (current_order != MAX_ORDER-1) MARK_USED(index, current_order, area); - zone->free_pages -= 1UL << order; return expand(zone, page, index, order, current_order, area); } return NULL; } +/* + * This is bad; some way to avoid putting singleton pages on the + * deferred lists should be worked out at some point. + */ +static void split_pages(struct zone *zone, struct page *page, int page_order, int deferred_order) +{ + int split_order = deferred_order - 1; + unsigned long split_offset = 1UL << split_order; + struct page *split_page; + + while (split_order >= page_order) { + split_page = &page[split_offset]; + if (split_order) + list_add(&split_page->list, + &zone->free_area[split_order].deferred_pages); + else if (!zone->free_area[split_order].locally_free) { + INIT_LIST_HEAD(&split_page->list); + split_page->private = 1; + list_add(&split_page->lru, + &zone->free_area[split_order].deferred_pages); + } else { + struct page *head; + head = list_entry(zone->free_area[split_order].deferred_pages.next, struct page, lru); + head->private++; + list_add(&split_page->list, &head->list); + } + zone->free_area[split_order].locally_free++; + --split_order; + split_offset >>= 1; + } +} + +#define COALESCE_BATCH 256 +static inline struct page *steal_deferred_page(struct zone *zone, int order) +{ + struct page *page; + struct list_head *elem; + struct free_area *area = zone->free_area; + int found_order, k; + + if (zone->free_pages < (1 << order)) + return NULL; + + /* the range of found_order precludes order 0 */ + for (found_order = order + 1; found_order < MAX_ORDER; ++found_order) + if (!list_empty(&area[found_order].deferred_pages)) { + elem = area[found_order].deferred_pages.next; + page = list_entry(elem, struct page, list); + list_del(elem); + area[found_order].locally_free--; + split_pages(zone, page, order, found_order); + return page; + } + + for (found_order = order - 1; found_order >= 0; --found_order) { + for (k = 0; k < COALESCE_BATCH; ++k) { + unsigned long mask = (~0UL) << found_order; + if (list_empty(&area[found_order].deferred_pages)) + break; + elem = area[found_order].deferred_pages.next; + if (found_order) { + page = list_entry(elem, struct page, list); + list_del(elem); + area[found_order].locally_free--; + buddy_free(page, zone->zone_mem_map, zone, &area[found_order], mask, found_order); + } else { + LIST_HEAD(tmp); + struct page *save; + + page = list_entry(elem, struct page, lru); + list_del(elem); + area[found_order].locally_free -= page->private; + page->private = 0; + list_splice(&page->list, &tmp); + list_add(&page->list, &tmp); + list_for_each_entry_safe(page, save, &tmp, list) { + list_del(&page->list); + buddy_free(page, zone->zone_mem_map, zone, &area[found_order], mask, found_order); + } + } + } + page = buddy_alloc(zone, order); + if (page) + return page; + } + return buddy_alloc(zone, order); +} + +static inline int __rmqueue(struct zone *zone, unsigned int order, struct list_head *list) +{ + struct free_area *area = &zone->free_area[order]; + struct page *page; + int count; + + if (!list_empty(&area->deferred_pages)) { + if (order) { + page = list_entry(area->deferred_pages.next, struct page, list); + list_del(&page->list); + count = 1; + } else { + page = list_entry(area->deferred_pages.next, struct page, lru); + list_del(&page->lru); + count = page->private; + page->private = 0; + list_splice(&page->list, list); + } + + area->locally_free -= count; + area->active += count; + zone->free_pages -= count << order; + } else { + page = buddy_alloc(zone, order); + if (page) + count = 1; + else { + page = steal_deferred_page(zone, order); + if (page) + count = 1; + else + return 0; + } + area->active += count; + zone->free_pages -= count << order; + } + list_add(&page->list, list); + return count; +} + /* * Obtain a specified number of elements from the buddy allocator, all under * a single hold of the lock, for efficiency. Add them to the supplied list. @@ -373,17 +573,14 @@ static int rmqueue_bulk(struct zone *zon unsigned long count, struct list_head *list) { unsigned long flags; - int i; - int allocated = 0; - struct page *page; + int i, j, allocated = 0; spin_lock_irqsave(&zone->lock, flags); - for (i = 0; i < count; ++i) { - page = __rmqueue(zone, order); - if (page == NULL) + for (i = 0; i < count && allocated < count; ++i) { + j = __rmqueue(zone, order, list); + if (!j) break; - allocated++; - list_add_tail(&page->list, list); + allocated += j; } spin_unlock_irqrestore(&zone->lock, flags); return allocated; @@ -428,10 +625,14 @@ void drain_local_pages(void) pset = &zone->pageset[smp_processor_id()]; for (i = 0; i < ARRAY_SIZE(pset->pcp); i++) { struct per_cpu_pages *pcp; + struct page *page, *save; pcp = &pset->pcp[i]; - pcp->count -= free_pages_bulk(zone, pcp->count, - &pcp->list, 0); + list_for_each_entry_safe(page, save, &pcp->list, lru) { + list_del(&page->lru); + pcp->count -= page->private; + free_pages_bulk(zone, page, 0); + } } } local_irq_restore(flags); @@ -447,15 +648,28 @@ static void free_hot_cold_page(struct pa struct zone *zone = page_zone(page); struct per_cpu_pages *pcp; unsigned long flags; + struct page *head; kernel_map_pages(page, 1, 0); inc_page_state(pgfree); free_pages_check(__FUNCTION__, page); pcp = &zone->pageset[get_cpu()].pcp[cold]; local_irq_save(flags); - if (pcp->count >= pcp->high) - pcp->count -= free_pages_bulk(zone, pcp->batch, &pcp->list, 0); - list_add(&page->list, &pcp->list); + while (pcp->count >= pcp->high) { + struct page *free = list_entry(pcp->list.prev, struct page, lru); + list_del(&free->lru); + pcp->count -= free->private; + free_pages_bulk(zone, free, 0); + } + head = list_entry(pcp->list.next, struct page, lru); + if (!list_empty(&pcp->list) && head->private < pcp->batch) { + list_add(&page->list, &head->list); + head->private++; + } else { + INIT_LIST_HEAD(&page->list); + list_add(&page->lru, &pcp->list); + page->private = 1; + } pcp->count++; local_irq_restore(flags); put_cpu(); @@ -480,31 +694,75 @@ void free_cold_page(struct page *page) static struct page *buffered_rmqueue(struct zone *zone, int order, int cold) { unsigned long flags; - struct page *page = NULL; + struct page *head, *page = NULL; + struct per_cpu_pages *pcp = NULL; if (order == 0) { - struct per_cpu_pages *pcp; - pcp = &zone->pageset[get_cpu()].pcp[cold]; local_irq_save(flags); - if (pcp->count <= pcp->low) - pcp->count += rmqueue_bulk(zone, 0, - pcp->batch, &pcp->list); + if (pcp->count <= pcp->low) { + LIST_HEAD(tmp); + int k; + + k = rmqueue_bulk(zone, 0, pcp->batch, &tmp); + if (k) { + pcp->count += k; + head = list_entry(tmp.next, struct page, list); + list_del_init(&head->list); + head->private = k; + list_splice(&tmp, &head->list); + list_add(&head->lru, &pcp->list); + } + } if (pcp->count) { - page = list_entry(pcp->list.next, struct page, list); - list_del(&page->list); + head = list_entry(pcp->list.next, struct page, lru); + if (head->private == 1) { + list_del(&head->lru); + page = head; + page->private = 0; + } else { + page = list_entry(head->list.next, struct page,list); + list_del(&page->list); + head->private--; + } pcp->count--; } local_irq_restore(flags); put_cpu(); } - if (page == NULL) { + if (unlikely(!page)) { + LIST_HEAD(tmp); + int count; + + if (!order) + pcp = &zone->pageset[get_cpu()].pcp[cold]; + spin_lock_irqsave(&zone->lock, flags); - page = __rmqueue(zone, order); - spin_unlock_irqrestore(&zone->lock, flags); + count = __rmqueue(zone, order, &tmp); + spin_unlock(&zone->lock); + + if (!list_empty(&tmp)) + page = list_entry(tmp.next, struct page, list); + + if (!order && count > 1) { + struct page *head; + + list_del(&page->list); + pcp->count += count - 1; + head = list_entry(tmp.next, struct page, list); + list_del_init(&head->list); + head->private = count - 1; + list_splice(&tmp, &head->list); + list_add(&head->lru, &pcp->list); + } + + local_irq_restore(flags); + if (order && page) prep_compound_page(page, order); + else if (!order) + put_cpu(); } if (page != NULL) { @@ -520,7 +778,8 @@ static struct page *buffered_rmqueue(str * * Herein lies the mysterious "incremental min". That's the * - * min += z->pages_low; + * local_low = z->pages_low; + * min += local_low; * * thing. The intent here is to provide additional protection to low zones for * allocation requests which _could_ use higher zones. So a GFP_HIGHMEM @@ -538,10 +797,11 @@ __alloc_pages(unsigned int gfp_mask, uns unsigned long min; struct zone **zones, *classzone; struct page *page; + struct reclaim_state reclaim_state; + struct task_struct *p = current; int i; int cold; int do_retry; - struct reclaim_state reclaim_state; might_sleep_if(wait); @@ -558,8 +818,17 @@ __alloc_pages(unsigned int gfp_mask, uns min = 1UL << order; for (i = 0; zones[i] != NULL; i++) { struct zone *z = zones[i]; + unsigned long local_low; + + /* + * This is the fabled 'incremental min'. We let real-time tasks + * dip their real-time paws a little deeper into reserves. + */ + local_low = z->pages_low; + if (rt_task(p)) + local_low >>= 1; + min += local_low; - min += z->pages_low; if (z->free_pages >= min || (!wait && z->free_pages >= z->pages_high)) { page = buffered_rmqueue(z, order, cold); @@ -582,6 +851,8 @@ __alloc_pages(unsigned int gfp_mask, uns local_min = z->pages_min; if (gfp_mask & __GFP_HIGH) local_min >>= 2; + if (rt_task(p)) + local_min >>= 1; min += local_min; if (z->free_pages >= min || (!wait && z->free_pages >= z->pages_high)) { @@ -595,7 +866,7 @@ __alloc_pages(unsigned int gfp_mask, uns /* here we're in the low on memory slow path */ rebalance: - if ((current->flags & (PF_MEMALLOC | PF_MEMDIE)) && !in_interrupt()) { + if ((p->flags & (PF_MEMALLOC | PF_MEMDIE)) && !in_interrupt()) { /* go through the zonelist yet again, ignoring mins */ for (i = 0; zones[i] != NULL; i++) { struct zone *z = zones[i]; @@ -611,14 +882,14 @@ rebalance: if (!wait) goto nopage; - current->flags |= PF_MEMALLOC; + p->flags |= PF_MEMALLOC; reclaim_state.reclaimed_slab = 0; - current->reclaim_state = &reclaim_state; + p->reclaim_state = &reclaim_state; try_to_free_pages(classzone, gfp_mask, order); - current->reclaim_state = NULL; - current->flags &= ~PF_MEMALLOC; + p->reclaim_state = NULL; + p->flags &= ~PF_MEMALLOC; /* go through the zonelist yet one more time */ min = 1UL << order; @@ -658,7 +929,7 @@ nopage: if (!(gfp_mask & __GFP_NOWARN)) { printk("%s: page allocation failure." " order:%d, mode:0x%x\n", - current->comm, order, gfp_mask); + p->comm, order, gfp_mask); } return NULL; got_pg: @@ -821,6 +1092,17 @@ static void show_node(struct zone *zone) #define show_node(zone) do { } while (0) #endif +unsigned long nr_deferred_pages(void) +{ + struct zone *zone; + unsigned long order, pages = 0; + + for_each_zone(zone) + for (order = 0; order < MAX_ORDER; ++order) + pages += zone->free_area[order].locally_free << order; + return pages; +} + /* * Accumulate the page_state information across all CPUs. * The result is unavoidably approximate - it can change @@ -992,8 +1274,7 @@ void show_free_areas(void) } for_each_zone(zone) { - struct list_head *elem; - unsigned long nr, flags, order, total = 0; + unsigned long order, total = 0; show_node(zone); printk("%s: ", zone->name); @@ -1002,16 +1283,20 @@ void show_free_areas(void) continue; } - spin_lock_irqsave(&zone->lock, flags); + printk("buddy: "); for (order = 0; order < MAX_ORDER; order++) { - nr = 0; - list_for_each(elem, &zone->free_area[order].free_list) - ++nr; - total += nr << order; - printk("%lu*%lukB ", nr, K(1UL) << order); + printk("%lu*%lukB ", zone->free_area[order].globally_free, K(1UL) << order); + total += zone->free_area[order].globally_free << order; } - spin_unlock_irqrestore(&zone->lock, flags); - printk("= %lukB\n", K(total)); + printk("\ndefer: "); + for (order = 0; order < MAX_ORDER; order++) { + printk("%lu*%lukB ", zone->free_area[order].locally_free, K(1UL) << order); + total += zone->free_area[order].locally_free << order; + } + printk("\nactive: "); + for (order = 0; order < MAX_ORDER; order++) + printk("%lu*%lukB ", zone->free_area[order].active, K(1UL) << order); + printk("\n= %lukB\n", K(total)); } show_swap_cache_info(); @@ -1119,7 +1404,7 @@ static inline unsigned long wait_table_s * on IO we've got bigger problems than wait queue collision. * Limit the size of the wait table to a reasonable size. */ - size = min(size, 4096UL); + size = min(size, 1UL << (16 + fls(NR_CPUS))); return max(size, 4UL); } @@ -1248,7 +1533,7 @@ static void __init free_area_init_core(s batch = zone->present_pages / 1024; if (batch * PAGE_SIZE > 256 * 1024) batch = (256 * 1024) / PAGE_SIZE; - batch /= 4; /* We effectively *= 4 below */ + batch *= 4; /* We effectively *= 4 below */ if (batch < 1) batch = 1; @@ -1308,8 +1593,11 @@ static void __init free_area_init_core(s for (i = 0; ; i++) { unsigned long bitmap_size; - + INIT_LIST_HEAD(&zone->free_area[i].deferred_pages); INIT_LIST_HEAD(&zone->free_area[i].free_list); + zone->free_area[i].globally_free = 0; + zone->free_area[i].locally_free = 0; + zone->free_area[i].active = 0; if (i == MAX_ORDER-1) { zone->free_area[i].map = NULL; break; @@ -1415,24 +1703,22 @@ static int frag_show(struct seq_file *m, pg_data_t *pgdat = (pg_data_t *)arg; struct zone *zone; struct zone *node_zones = pgdat->node_zones; - unsigned long flags; int order; for (zone = node_zones; zone - node_zones < MAX_NR_ZONES; ++zone) { if (!zone->present_pages) continue; - spin_lock_irqsave(&zone->lock, flags); - seq_printf(m, "Node %d, zone %8s ", pgdat->node_id, zone->name); - for (order = 0; order < MAX_ORDER; ++order) { - unsigned long nr_bufs = 0; - struct list_head *elem; - - list_for_each(elem, &(zone->free_area[order].free_list)) - ++nr_bufs; - seq_printf(m, "%6lu ", nr_bufs); - } - spin_unlock_irqrestore(&zone->lock, flags); + seq_printf(m, "Node %d, zone %8s\n", pgdat->node_id, zone->name); + seq_puts(m, "buddy: "); + for (order = 0; order < MAX_ORDER; ++order) + seq_printf(m, "%6lu ", zone->free_area[order].globally_free); + seq_puts(m, "\ndefer: "); + for (order = 0; order < MAX_ORDER; ++order) + seq_printf(m, "%6lu ", zone->free_area[order].locally_free); + seq_puts(m, "\nactive: "); + for (order = 0; order < MAX_ORDER; ++order) + seq_printf(m, "%6lu ", zone->free_area[order].active); seq_putc(m, '\n'); } return 0; @@ -1451,6 +1737,7 @@ static char *vmstat_text[] = { "nr_unstable", "nr_page_table_pages", "nr_mapped", + "nr_swapcache", "nr_slab", "pgpgin", diff -prauN linux-2.6.0-test5/mm/page_io.c wli-2.6.0-test5-bk12-25/mm/page_io.c --- linux-2.6.0-test5/mm/page_io.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/mm/page_io.c 2003-09-28 23:04:08.000000000 -0700 @@ -16,8 +16,6 @@ #include #include #include -#include /* for block_sync_page() */ -#include #include #include @@ -32,7 +30,7 @@ get_swap_bio(int gfp_flags, struct page swp_entry_t entry; BUG_ON(!PageSwapCache(page)); - entry.val = page->index; + entry.val = page->private; sis = get_swap_info_struct(swp_type(entry)); bio->bi_sector = map_swap_page(sis, swp_offset(entry)) * @@ -130,13 +128,6 @@ out: return ret; } -struct address_space_operations swap_aops = { - .writepage = swap_writepage, - .readpage = swap_readpage, - .sync_page = block_sync_page, - .set_page_dirty = __set_page_dirty_nobuffers, -}; - /* * A scruffy utility function to read or write an arbitrary swap page * and wait on the I/O. @@ -150,9 +141,8 @@ int rw_swap_page_sync(int rw, swp_entry_ lock_page(page); - BUG_ON(page->mapping); - page->mapping = &swapper_space; - page->index = entry.val; + SetPageSwapCache(page); + page->private = entry.val; if (rw == READ) { ret = swap_readpage(NULL, page); @@ -161,7 +151,7 @@ int rw_swap_page_sync(int rw, swp_entry_ ret = swap_writepage(page, &swap_wbc); wait_on_page_writeback(page); } - page->mapping = NULL; + ClearPageSwapCache(page); if (ret == 0 && (!PageUptodate(page) || PageError(page))) ret = -EIO; return ret; diff -prauN linux-2.6.0-test5/mm/readahead.c wli-2.6.0-test5-bk12-25/mm/readahead.c --- linux-2.6.0-test5/mm/readahead.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/mm/readahead.c 2003-09-28 21:59:32.000000000 -0700 @@ -222,7 +222,7 @@ __do_page_cache_readahead(struct address /* * Preallocate as many pages as we will need. */ - spin_lock(&mapping->page_lock); + mapping_rdlock(&mapping->page_lock); for (page_idx = 0; page_idx < nr_to_read; page_idx++) { unsigned long page_offset = offset + page_idx; @@ -233,16 +233,16 @@ __do_page_cache_readahead(struct address if (page) continue; - spin_unlock(&mapping->page_lock); + mapping_rdunlock(&mapping->page_lock); page = page_cache_alloc_cold(mapping); - spin_lock(&mapping->page_lock); + mapping_rdlock(&mapping->page_lock); if (!page) break; page->index = page_offset; list_add(&page->list, &page_pool); ret++; } - spin_unlock(&mapping->page_lock); + mapping_rdunlock(&mapping->page_lock); /* * Now start the IO. We ignore I/O errors - if the page is not diff -prauN linux-2.6.0-test5/mm/rmap.c wli-2.6.0-test5-bk12-25/mm/rmap.c --- linux-2.6.0-test5/mm/rmap.c 2003-09-08 12:50:28.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/mm/rmap.c 2003-09-29 13:40:17.000000000 -0700 @@ -5,527 +5,634 @@ * Released under the General Public License (GPL). * * - * Simple, low overhead pte-based reverse mapping scheme. - * This is kept modular because we may want to experiment - * with object-based reverse mapping schemes. Please try - * to keep this thing as modular as possible. + * Simple, low overhead reverse mapping scheme. + * Please try to keep this thing as modular as possible. */ /* * Locking: - * - the page->pte.chain is protected by the PG_chainlock bit, + * - the page->rmap field is protected by the PG_rmaplock bit, * which nests within the the mm->page_table_lock, * which nests within the page lock. * - because swapout locking is opposite to the locking order * in the page fault path, the swapout path uses trylocks * on the mm->page_table_lock */ + #include #include #include #include #include #include -#include +#include #include #include - -#include -#include -#include +#include +#include #include /* #define DEBUG_RMAP */ /* - * Shared pages have a chain of pte_chain structures, used to locate - * all the mappings to this page. We only need a pointer to the pte - * here, the page struct for the page table page contains the process - * it belongs to and the offset within that process. - * - * We use an array of pte pointers in this structure to minimise cache misses - * while traversing reverse maps. + * struct addresser: for next_rmap_address to dole out user addresses + * one by one to page_referenced() or try_to_unmap() */ -#define NRPTE ((L1_CACHE_BYTES - sizeof(unsigned long))/sizeof(pte_addr_t)) +struct addresser { + unsigned long address, count; + struct rmap_chain *chain; + int index; +}; -/* - * next_and_idx encodes both the address of the next pte_chain and the - * offset of the highest-index used pte in ptes[]. - */ -struct pte_chain { - unsigned long next_and_idx; - pte_addr_t ptes[NRPTE]; -} ____cacheline_aligned; +static kmem_cache_t *rmap_chain_cache; + +static DEFINE_PER_CPU(struct rmap_chain *, rmap_chain) = NULL; -kmem_cache_t *pte_chain_cache; +kmem_cache_t *anon_cache; -static inline struct pte_chain *pte_chain_next(struct pte_chain *pte_chain) +static void anon_ctor(void *arg, kmem_cache_t *cache, unsigned long unused) { - return (struct pte_chain *)(pte_chain->next_and_idx & ~NRPTE); + struct anon *anon = (struct anon *)arg; + atomic_set(&anon->count, 1); + anon->lock = SPIN_LOCK_UNLOCKED; + INIT_LIST_HEAD(&anon->list); + INIT_RCU_HEAD(&anon->rcu); } -static inline struct pte_chain *pte_chain_ptr(unsigned long pte_chain_addr) +static void rmap_chain_ctor(void *arg, kmem_cache_t *cache, unsigned long flags) { - return (struct pte_chain *)(pte_chain_addr & ~NRPTE); + int i; + struct rmap_chain *chain = (struct rmap_chain *)arg; + + for (i = 0; i < NRSLOT; ++i) + chain->slot[i] = NOADDR; + chain->next = NULL; } -static inline int pte_chain_idx(struct pte_chain *pte_chain) +static inline void rmap_chain_dtor(struct rmap_chain *chain) { - return pte_chain->next_and_idx & NRPTE; + int i; + for (i = 0; i < NRSLOT; ++i) + if (chain->slot[i] != NOADDR) + chain->slot[i] = NOADDR; + if (chain->next) + chain->next = NULL; } -static inline unsigned long -pte_chain_encode(struct pte_chain *pte_chain, int idx) +void __init init_rmap(void) { - return (unsigned long)pte_chain | idx; + anon_cache = kmem_cache_create("anon", sizeof(struct anon), 0, 0, anon_ctor, NULL); + if (!anon_cache) + panic("init_rmap: Cannot alloc anon slab cache\n"); + rmap_chain_cache = kmem_cache_create("rmap_chain", sizeof(struct rmap_chain), 0, 0, rmap_chain_ctor, NULL); } -/* - * pte_chain list management policy: - * - * - If a page has a pte_chain list then it is shared by at least two processes, - * because a single sharing uses PageDirect. (Well, this isn't true yet, - * coz this code doesn't collapse singletons back to PageDirect on the remove - * path). - * - A pte_chain list has free space only in the head member - all succeeding - * members are 100% full. - * - If the head element has free space, it occurs in its leading slots. - * - All free space in the pte_chain is at the start of the head member. - * - Insertion into the pte_chain puts a pte pointer in the last free slot of - * the head member. - * - Removal from a pte chain moves the head pte of the head member onto the - * victim pte and frees the head member if it became empty. - */ +int exec_rmap(struct mm_struct *mm) +{ + struct anon *anon = kmem_cache_alloc(anon_cache, GFP_KERNEL); + if (!anon) + return -ENOMEM; + mm->anon = anon; + /* unique reference; no locking required */ + list_add_rcu(&mm->anon_list, &anon->list); + return 0; +} -/** - ** VM stuff below this comment - **/ +void dup_rmap(struct mm_struct *new, struct mm_struct *old) +{ + struct anon *anon = old->anon; + atomic_inc(&anon->count); + new->anon = anon; + spin_lock(&anon->lock); + list_add_tail_rcu(&new->anon_list, &anon->list); + spin_unlock(&anon->lock); +} -/** - * page_referenced - test if the page was referenced - * @page: the page to test - * - * Quick test_and_clear_referenced for all mappings to a page, - * returns the number of processes which referenced the page. - * Caller needs to hold the pte_chain_lock. - * - * If the page has a single-entry pte_chain, collapse that back to a PageDirect - * representation. This way, it's only done under memory pressure. - */ -int page_referenced(struct page * page) +static void free_anon(void *__anon) { - struct pte_chain *pc; - int referenced = 0; + struct anon *anon = (struct anon *)__anon; + INIT_LIST_HEAD(&anon->list); + atomic_set(&anon->count, 1); + kmem_cache_free(anon_cache, anon); +} - if (TestClearPageReferenced(page)) - referenced++; +void exit_rmap(struct mm_struct *mm) +{ + struct anon *anon = mm->anon; - if (PageDirect(page)) { - pte_t *pte = rmap_ptep_map(page->pte.direct); - if (ptep_test_and_clear_young(pte)) - referenced++; - rmap_ptep_unmap(pte); - } else { - int nr_chains = 0; + mm->anon = NULL; + spin_lock(&anon->lock); + list_del_rcu(&mm->anon_list); + spin_unlock(&anon->lock); + + if (!atomic_dec_and_test(&anon->count)) + return; + + call_rcu(&anon->rcu, free_anon, anon); +} + +/** + ** Functions for manipulating struct rmap_chain. + **/ - /* Check all the page tables mapping this page. */ - for (pc = page->pte.chain; pc; pc = pte_chain_next(pc)) { - int i; - - for (i = NRPTE-1; i >= 0; i--) { - pte_addr_t pte_paddr = pc->ptes[i]; - pte_t *p; - - if (!pte_paddr) - break; - p = rmap_ptep_map(pte_paddr); - if (ptep_test_and_clear_young(p)) - referenced++; - rmap_ptep_unmap(p); - nr_chains++; +/* + * Boolean rmap_get_cpu() ensures the cpu has an rmap_chain cached + * in case it is needed later while lock is held. It is never needed + * when page_add_rmap() is adding a freshly allocated anon page. + * caller does put_cpu() once ->page_table_lock prevents preemption. + */ +int rmap_get_cpu(void) +{ + struct rmap_chain **cache, *chain; + might_sleep(); + cache = &per_cpu(rmap_chain, get_cpu()); + if (*cache) + return 1; + put_cpu(); + chain = kmem_cache_alloc(rmap_chain_cache, GFP_KERNEL); + cache = &per_cpu(rmap_chain, get_cpu()); + if (*cache) + kmem_cache_free(rmap_chain_cache, chain); + else if (chain) + *cache = chain; + else { + put_cpu(); + return 0; + } + return 1; +} + +static struct rmap_chain *get_rmap_chain(void) +{ + struct rmap_chain **cache, *chain; + int i; + + /* + * ->page_table_lock and rmap_lock are held, no need to get_cpu() + */ + cache = &per_cpu(rmap_chain, smp_processor_id()); + chain = *cache; + *cache = NULL; + for (i = 0; i < NRSLOT; ++i) + chain->slot[i] = NOADDR; + chain->next = NULL; + return chain; +} + +void add_rmap_address(struct page *page, unsigned long address) +{ + struct rmap_chain *chain = page->chain; + int i = 0; + + if (!chain) + page->chain = get_rmap_chain(); + else { + /* + * Check lest duplicates arise, and find a free slot at the end + */ + for (chain = page->chain; ; chain = chain->next) { + for (i = 0; i < NRSLOT; ++i) { + if (chain->slot[i] == NOADDR) + goto set; + else if (chain->slot[i] == address) + return; } + if (!chain->next) + chain->next = get_rmap_chain(); } - if (nr_chains == 1) { - pc = page->pte.chain; - page->pte.direct = pc->ptes[NRPTE-1]; - SetPageDirect(page); - pc->ptes[NRPTE-1] = 0; - __pte_chain_free(pc); + } +set: + chain->slot[i] = address; +} + +static int +next_rmap_address(struct page *page, struct vm_area_struct *vma, + struct addresser *addresser) +{ + /* bootstrap it */ + if (addresser->address == NOADDR) { + /* set chain and index for next call */ + addresser->chain = page->chain; + addresser->index = 0; + if (vma) { + addresser->address = vma_address(page, vma); + if (addresser->address != NOADDR) + return 1; + } else { + addresser->address = page->index; + return 1; } } - return referenced; + while (addresser->chain) { + if (addresser->index >= NRSLOT) + addresser->index = 0; + addresser->address = + addresser->chain->slot[addresser->index]; + if (addresser->address == NOADDR) + break; + addresser->index++; + if (addresser->index >= NRSLOT) + addresser->chain = addresser->chain->next; + if (!vma || addresser->address != vma_address(page, vma)) + return 1; + } + return 0; } -/** - * page_add_rmap - add reverse mapping entry to a page - * @page: the page to add the mapping to - * @ptep: the page table entry mapping this page - * - * Add a new pte reverse mapping to a page. - * The caller needs to hold the mm->page_table_lock. - */ -struct pte_chain * -page_add_rmap(struct page *page, pte_t *ptep, struct pte_chain *pte_chain) +void clear_page_chained(struct page *page) { - pte_addr_t pte_paddr = ptep_to_paddr(ptep); - struct pte_chain *cur_pte_chain; + struct rmap_chain *chain = page->chain; - if (!pfn_valid(page_to_pfn(page)) || PageReserved(page)) - return pte_chain; + /* + * This is only called when mapcount goes to 0, which + * means it's possible for a page to accumulate a large + * chain of stale addresses. But normally try_to_unmap_one() + * will bring the count to 0 and free them all here. + */ + do { + struct rmap_chain *next = chain->next; + rmap_chain_dtor(chain); + kmem_cache_free(rmap_chain_cache, chain); + chain = next; + } while (chain); +} - pte_chain_lock(page); +/** + ** Subfunctions of page_referenced(): page_referenced_one() called + ** repeatedly from page_referenced_obj(); + **/ - if (page->pte.direct == 0) { - page->pte.direct = pte_paddr; - SetPageDirect(page); - inc_page_state(nr_mapped); - goto out; - } +static inline int page_referenced_one(struct page *page, struct mm_struct *mm, + struct addresser *addresser) +{ + pgd_t *pgd; + pmd_t *pmd; + pte_t *pte; + int referenced = 0; - if (PageDirect(page)) { - /* Convert a direct pointer into a pte_chain */ - ClearPageDirect(page); - pte_chain->ptes[NRPTE-1] = page->pte.direct; - pte_chain->ptes[NRPTE-2] = pte_paddr; - pte_chain->next_and_idx = pte_chain_encode(NULL, NRPTE-2); - page->pte.direct = 0; - page->pte.chain = pte_chain; - pte_chain = NULL; /* We consumed it */ + if (!spin_trylock(&mm->page_table_lock)) { + referenced = 1; goto out; } - cur_pte_chain = page->pte.chain; - if (cur_pte_chain->ptes[0]) { /* It's full */ - pte_chain->next_and_idx = pte_chain_encode(cur_pte_chain, - NRPTE - 1); - page->pte.chain = pte_chain; - pte_chain->ptes[NRPTE-1] = pte_paddr; - pte_chain = NULL; /* We consumed it */ + pgd = pgd_offset(mm, addresser->address); + if (!pgd_present(*pgd)) + goto out_unlock; + + pmd = pmd_offset_map(pgd, addresser->address); + if (!pmd) goto out; - } - cur_pte_chain->ptes[pte_chain_idx(cur_pte_chain) - 1] = pte_paddr; - cur_pte_chain->next_and_idx--; + + if (!pmd_present(*pmd)) + goto out_unmap_pmd; + + pte = pte_offset_map(pmd, addresser->address); + if (!pte_present(*pte)) + goto out_unmap_pte; + + if (page_to_pfn(page) != pte_pfn(*pte)) + goto out_unmap_pte; + + referenced = ptep_test_and_clear_young(pte); + addresser->count--; + +out_unmap_pmd: + pmd_unmap(pmd); +out_unmap_pte: + pte_unmap(pte); +out_unlock: + spin_unlock(&mm->page_table_lock); out: - pte_chain_unlock(page); - return pte_chain; + return referenced; } -/** - * page_remove_rmap - take down reverse mapping to a page - * @page: page to remove mapping from - * @ptep: page table entry to remove - * - * Removes the reverse mapping from the pte_chain of the page, - * after that the caller can clear the page table entry and free - * the page. - * Caller needs to hold the mm->page_table_lock. - */ -void page_remove_rmap(struct page *page, pte_t *ptep) +static inline int +page_referenced_anon(struct page *page, struct addresser *addresser) { - pte_addr_t pte_paddr = ptep_to_paddr(ptep); - struct pte_chain *pc; + struct mm_struct *mm; + struct anon *anon; + int referenced = 0; - if (!pfn_valid(page_to_pfn(page)) || PageReserved(page)) - return; + rcu_read_lock(); /* anon->lock */ - pte_chain_lock(page); + anon = page_anon(page); + if (!anon) + goto out; - if (!page_mapped(page)) - goto out_unlock; /* remap_page_range() from a driver? */ + list_for_each_entry_rcu(mm, &anon->list, anon_list) { + if (!mm->anon || !mm->rss) + continue; + addresser->address = NOADDR; + while (next_rmap_address(page, NULL, addresser)) { + referenced += page_referenced_one(page, mm, addresser); + if (!addresser->count) + goto out; + } + } +out: + rcu_read_unlock(); /* anon->lock */ + return referenced; +} - if (PageDirect(page)) { - if (page->pte.direct == pte_paddr) { - page->pte.direct = 0; - ClearPageDirect(page); - goto out; +static inline int page_referenced_obj(struct page *page, struct addresser *addresser) +{ + struct address_space *mapping = page_mapping(page); + struct vm_area_struct *vma; + int referenced = 0; + + /* bail if it's a Morton page */ + if (!mapping) + return 0; + + rcu_read_lock(); /* mapping->i_shared_lock */ + list_for_each_entry_rcu(vma, &mapping->i_mmap, shared) { + if (vma->vm_flags & VM_DEAD) + continue; + if (!vma->vm_mm->rss) + continue; + addresser->address = NOADDR; + while (next_rmap_address(page, vma, addresser)) { + referenced += page_referenced_one(page, vma->vm_mm, addresser); + if (!addresser->count) + goto out; } - } else { - struct pte_chain *start = page->pte.chain; - struct pte_chain *next; - int victim_i = -1; - - for (pc = start; pc; pc = next) { - int i; - - next = pte_chain_next(pc); - if (next) - prefetch(next); - for (i = pte_chain_idx(pc); i < NRPTE; i++) { - pte_addr_t pa = pc->ptes[i]; - - if (victim_i == -1) - victim_i = i; - if (pa != pte_paddr) - continue; - pc->ptes[i] = start->ptes[victim_i]; - start->ptes[victim_i] = 0; - if (victim_i == NRPTE-1) { - /* Emptied a pte_chain */ - page->pte.chain = pte_chain_next(start); - __pte_chain_free(start); - } else { - start->next_and_idx++; - } + } + + list_for_each_entry_rcu(vma, &mapping->i_mmap_shared, shared) { + if (vma->vm_flags & VM_DEAD) + continue; + if (!vma->vm_mm->rss) + continue; + addresser->address = NOADDR; + while (next_rmap_address(page, vma, addresser)) { + referenced += page_referenced_one(page, vma->vm_mm, addresser); + if (!addresser->count) goto out; - } } } out: - if (!page_mapped(page)) - dec_page_state(nr_mapped); -out_unlock: - pte_chain_unlock(page); - return; + rcu_read_unlock(); /* mapping->i_shared_lock */ + return referenced; } /** - * try_to_unmap_one - worker function for try_to_unmap - * @page: page to unmap - * @ptep: page table entry to unmap from page + * page_referenced - test if the page was referenced + * @page: the page to test * - * Internal helper function for try_to_unmap, called for each page - * table entry mapping a page. Because locking order here is opposite - * to the locking order used by the page fault path, we use trylocks. - * Locking: - * page lock shrink_list(), trylock - * pte_chain_lock shrink_list() - * mm->page_table_lock try_to_unmap_one(), trylock + * returns the number of ptes which referenced the page. + * Caller needs to hold the rmap_lock. */ -static int FASTCALL(try_to_unmap_one(struct page *, pte_addr_t)); -static int try_to_unmap_one(struct page * page, pte_addr_t paddr) +int page_referenced(struct page * page) { - pte_t *ptep = rmap_ptep_map(paddr); - unsigned long address = ptep_to_address(ptep); - struct mm_struct * mm = ptep_to_mm(ptep); - struct vm_area_struct * vma; - pte_t pte; - int ret; + int referenced = !!TestClearPageReferenced(page); + struct addresser addresser; + + addresser.count = atomic_read(&page->mapcount); + if (!addresser.count || !page->__mapping) + return 0; + else if (PageAnon(page)) + referenced += page_referenced_anon(page, &addresser); + else + referenced += page_referenced_obj(page, &addresser); + return referenced; +} + +void page_turn_rmap(struct page *page, struct vm_area_struct *vma) +{ + struct anon *old, *new; + old = page_anon(page); + new = vma->vm_mm->anon; + + BUG_ON(!PageAnon(page)); + BUG_ON(atomic_read(&page->mapcount) != 1); + + if (old == new) + return; + + rmap_lock(page); + set_page_mapping(page, new); + rmap_unlock(page); +} + +void page_move_rmap(struct page *page, struct vm_area_struct *vma, + unsigned long old, unsigned long new) +{ + if (!page_mapped(page) || !page->__mapping) + return; + + rmap_lock(page); + + if (PageAnon(page)) { + /* + * Don't check atomic_read(&page->mapcount) == 1 here + * because the mapcount could be 1 but the page + * could still have a chain, and our new address + * in that chain. + */ + if (atomic_read(&page->mapcount) == 1) + page->index = new; + else if (new != page->index) + add_rmap_address(page, new); + } else { + /* + * Just in case things are nonlinear. + */ + if (old != vma_address(page, vma)) + add_rmap_address(page, new); + } - if (!mm) - BUG(); + rmap_unlock(page); +} + +static int try_to_unmap_one(struct page *page, struct mm_struct *mm, + struct addresser *addresser, struct vm_area_struct *vma) +{ + pgd_t *pgd; + pmd_t *pmd; + pte_t *pte; + pte_t pteval; + unsigned long address = addresser->address; + int ret = SWAP_AGAIN; /* * We need the page_table_lock to protect us from page faults, * munmap, fork, etc... */ - if (!spin_trylock(&mm->page_table_lock)) { - rmap_ptep_unmap(ptep); - return SWAP_AGAIN; - } - + if (!spin_trylock(&mm->page_table_lock)) + goto out; - /* During mremap, it's possible pages are not in a VMA. */ - vma = find_vma(mm, address); - if (!vma) { + /* If the page is mlock()'d, we can't unmap it. */ + if (!vma) + vma = find_vma(mm, address); + if (!vma || (vma->vm_flags & VM_LOCKED)) { ret = SWAP_FAIL; goto out_unlock; } - /* The page is mlock()d, we cannot swap it out. */ - if (vma->vm_flags & VM_LOCKED) { - ret = SWAP_FAIL; + pgd = pgd_offset(mm, address); + if (!pgd_present(*pgd)) goto out_unlock; - } + pmd = pmd_offset_map(pgd, address); + if (!pmd_present(*pmd)) + goto out_unmap_pmd; + pte = pte_offset_map(pmd, address); + if (!pte_present(*pte)) + goto out_unmap_pte; + + if (page_to_pfn(page) != pte_pfn(*pte)) + goto out_unmap_pte; + + addresser->count--; /* Nuke the page table entry. */ flush_cache_page(vma, address); - pte = ptep_get_and_clear(ptep); + pteval = vm_ptep_get_and_clear(vma, pte, address); flush_tlb_page(vma, address); - if (PageSwapCache(page)) { + if (PageAnon(page)) { /* * Store the swap location in the pte. * See handle_pte_fault() ... */ - swp_entry_t entry = { .val = page->index }; + swp_entry_t entry = { .val = page->private }; + BUG_ON(!PageSwapCache(page)); swap_duplicate(entry); - set_pte(ptep, swp_entry_to_pte(entry)); - BUG_ON(pte_file(*ptep)); + vm_set_pte(vma, pte, swp_entry_to_pte(entry), address); + BUG_ON(pte_file(*pte)); } else { - unsigned long pgidx; /* - * If a nonlinear mapping then store the file page offset - * in the pte. + * If a nonlinear mapping from sys_remap_file_pages(), + * then store the file page offset in the pte. */ - pgidx = (address - vma->vm_start) >> PAGE_SHIFT; - pgidx += vma->vm_pgoff; - pgidx >>= PAGE_CACHE_SHIFT - PAGE_SHIFT; - if (page->index != pgidx) { - set_pte(ptep, pgoff_to_pte(page->index)); - BUG_ON(!pte_file(*ptep)); + if (address != vma_address(page, vma)) { + vm_set_pte(vma, pte, pgoff_to_pte(page->index), address); + BUG_ON(!pte_file(*pte)); } } /* Move the dirty bit to the physical page now the pte is gone. */ - if (pte_dirty(pte)) + if (pte_dirty(pteval)) set_page_dirty(page); - mm->rss--; + BUG_ON(!atomic_read(&page->mapcount)); + if (atomic_dec_and_test(&page->mapcount)) + if (page->chain) + clear_page_chained(page); page_cache_release(page); - ret = SWAP_SUCCESS; + mm->rss--; +out_unmap_pmd: + pmd_unmap(pmd); +out_unmap_pte: + pte_unmap(pte); out_unlock: - rmap_ptep_unmap(ptep); spin_unlock(&mm->page_table_lock); +out: return ret; } -/** - * try_to_unmap - try to remove all page table mappings to a page - * @page: the page to get unmapped - * - * Tries to remove all the page table entries which are mapping this - * page, used in the pageout path. Caller must hold the page lock - * and its pte chain lock. Return values are: - * - * SWAP_SUCCESS - we succeeded in removing all mappings - * SWAP_AGAIN - we missed a trylock, try again later - * SWAP_FAIL - the page is unswappable - */ -int try_to_unmap(struct page * page) +static inline int try_to_unmap_anon(struct page *page, struct addresser *addresser) { - struct pte_chain *pc, *next_pc, *start; - int ret = SWAP_SUCCESS; - int victim_i = -1; - - /* This page should not be on the pageout lists. */ - if (PageReserved(page)) - BUG(); - if (!PageLocked(page)) - BUG(); - /* We need backing store to swap out a page. */ - if (!page->mapping) - BUG(); - - if (PageDirect(page)) { - ret = try_to_unmap_one(page, page->pte.direct); - if (ret == SWAP_SUCCESS) { - page->pte.direct = 0; - ClearPageDirect(page); - } + struct mm_struct *mm; + struct anon *anon; + int ret = SWAP_AGAIN; + + rcu_read_lock(); /* anon->lock */ + + anon = page_anon(page); + if (!anon) goto out; - } - start = page->pte.chain; - for (pc = start; pc; pc = next_pc) { - int i; - - next_pc = pte_chain_next(pc); - if (next_pc) - prefetch(next_pc); - for (i = pte_chain_idx(pc); i < NRPTE; i++) { - pte_addr_t pte_paddr = pc->ptes[i]; - - if (!pte_paddr) - continue; - if (victim_i == -1) - victim_i = i; - - switch (try_to_unmap_one(page, pte_paddr)) { - case SWAP_SUCCESS: - /* - * Release a slot. If we're releasing the - * first pte in the first pte_chain then - * pc->ptes[i] and start->ptes[victim_i] both - * refer to the same thing. It works out. - */ - pc->ptes[i] = start->ptes[victim_i]; - start->ptes[victim_i] = 0; - victim_i++; - if (victim_i == NRPTE) { - page->pte.chain = pte_chain_next(start); - __pte_chain_free(start); - start = page->pte.chain; - victim_i = 0; - } else { - start->next_and_idx++; - } - break; - case SWAP_AGAIN: - /* Skip this pte, remembering status. */ - ret = SWAP_AGAIN; - continue; - case SWAP_FAIL: - ret = SWAP_FAIL; + list_for_each_entry_rcu(mm, &anon->list, anon_list) { + if (!mm->anon) + continue; + addresser->address = NOADDR; + while (next_rmap_address(page, NULL, addresser)) { + ret = try_to_unmap_one(page, mm, addresser, NULL); + if (ret == SWAP_FAIL || !addresser->count) goto out; - } } } out: - if (!page_mapped(page)) - dec_page_state(nr_mapped); + rcu_read_unlock(); /* anon->lock */ return ret; } -/** - ** No more VM stuff below this comment, only pte_chain helper - ** functions. - **/ - -static void pte_chain_ctor(void *p, kmem_cache_t *cachep, unsigned long flags) +static inline int try_to_unmap_obj(struct page *page, struct addresser *addresser) { - struct pte_chain *pc = p; + struct address_space *mapping; + struct vm_area_struct *vma; + int ret = SWAP_AGAIN; + + mapping = page_mapping(page); + + /* bail if it's a Morton page */ + if (!mapping) + return SWAP_FAIL; + + rcu_read_lock(); /* mapping->i_shared_lock */ + + list_for_each_entry_rcu(vma, &mapping->i_mmap, shared) { + if (vma->vm_flags & VM_DEAD) + continue; + if (!vma->vm_mm->rss) + continue; + addresser->address = NOADDR; + while (next_rmap_address(page, vma, addresser)) { + ret = try_to_unmap_one(page, vma->vm_mm, addresser, vma); + if (ret == SWAP_FAIL || !addresser->count) + goto out; + } + } - memset(pc, 0, sizeof(*pc)); + list_for_each_entry_rcu(vma, &mapping->i_mmap_shared, shared) { + if (vma->vm_flags & VM_DEAD) + continue; + if (!vma->vm_mm->rss) + continue; + addresser->address = NOADDR; + while (next_rmap_address(page, vma, addresser)) { + ret = try_to_unmap_one(page, vma->vm_mm, addresser, vma); + if (ret == SWAP_FAIL || !addresser->count) + goto out; + } + } +out: + rcu_read_unlock(); /* mapping->i_shared_lock */ + return ret; } -DEFINE_PER_CPU(struct pte_chain *, local_pte_chain) = 0; - /** - * __pte_chain_free - free pte_chain structure - * @pte_chain: pte_chain struct to free - */ -void __pte_chain_free(struct pte_chain *pte_chain) -{ - struct pte_chain **pte_chainp; - - pte_chainp = &get_cpu_var(local_pte_chain); - if (pte_chain->next_and_idx) - pte_chain->next_and_idx = 0; - if (*pte_chainp) - kmem_cache_free(pte_chain_cache, *pte_chainp); - *pte_chainp = pte_chain; - put_cpu_var(local_pte_chain); -} - -/* - * pte_chain_alloc(): allocate a pte_chain structure for use by page_add_rmap(). + * try_to_unmap - try to remove all page table mappings to a page + * @page: the page to get unmapped + * + * Tries to remove all the page table entries which are mapping this + * page, used in the pageout path. Caller must hold the page lock + * and its pte chain lock. Return values are: * - * The caller of page_add_rmap() must perform the allocation because - * page_add_rmap() is invariably called under spinlock. Often, page_add_rmap() - * will not actually use the pte_chain, because there is space available in one - * of the existing pte_chains which are attached to the page. So the case of - * allocating and then freeing a single pte_chain is specially optimised here, - * with a one-deep per-cpu cache. + * SWAP_SUCCESS - we succeeded in removing all mappings + * SWAP_AGAIN - we missed a trylock, try again later + * SWAP_FAIL - the page is unswappable */ -struct pte_chain *pte_chain_alloc(int gfp_flags) +int try_to_unmap(struct page *page) { - struct pte_chain *ret; - struct pte_chain **pte_chainp; - - might_sleep_if(gfp_flags & __GFP_WAIT); + struct addresser addresser; + int ret; - pte_chainp = &get_cpu_var(local_pte_chain); - if (*pte_chainp) { - ret = *pte_chainp; - *pte_chainp = NULL; - put_cpu_var(local_pte_chain); - } else { - put_cpu_var(local_pte_chain); - ret = kmem_cache_alloc(pte_chain_cache, gfp_flags); + BUG_ON(PageReserved(page)); + BUG_ON(!PageLocked(page)); + BUG_ON(!page_mapped(page)); + + addresser.count = atomic_read(&page->mapcount); + if (PageAnon(page)) + ret = try_to_unmap_anon(page, &addresser); + else + ret = try_to_unmap_obj(page, &addresser); + if (!page_mapped(page)) { + dec_page_state(nr_mapped); + if (PageAnon(page)) + clear_page_anon(page); + ret = SWAP_SUCCESS; } return ret; } - -void __init pte_chain_init(void) -{ - pte_chain_cache = kmem_cache_create( "pte_chain", - sizeof(struct pte_chain), - 0, - SLAB_MUST_HWCACHE_ALIGN, - pte_chain_ctor, - NULL); - - if (!pte_chain_cache) - panic("failed to create pte_chain cache!\n"); -} diff -prauN linux-2.6.0-test5/mm/shmem.c wli-2.6.0-test5-bk12-25/mm/shmem.c --- linux-2.6.0-test5/mm/shmem.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/mm/shmem.c 2003-09-28 23:04:08.000000000 -0700 @@ -694,7 +694,7 @@ static int shmem_writepage(struct page * BUG_ON(!PageLocked(page)); BUG_ON(page_mapped(page)); - mapping = page->mapping; + mapping = page_mapping(page); index = page->index; inode = mapping->host; info = SHMEM_I(inode); @@ -984,7 +984,22 @@ static int shmem_populate(struct vm_area page_cache_release(page); return err; } + } else if (nonblock) { + /* + * If a nonlinear mapping then store the file page + * offset in the pte. + */ + unsigned long pgidx; + pgidx = (addr - vma->vm_start) >> PAGE_SHIFT; + pgidx += vma->vm_pgoff; + pgidx >>= PAGE_CACHE_SHIFT - PAGE_SHIFT; + if (pgoff != pgidx) { + err = install_file_pte(mm, vma, addr, pgoff, prot); + if (err) + return err; + } } + len -= PAGE_SIZE; addr += PAGE_SIZE; pgoff++; @@ -1108,7 +1123,7 @@ static struct inode_operations shmem_sym static int shmem_prepare_write(struct file *file, struct page *page, unsigned offset, unsigned to) { - struct inode *inode = page->mapping->host; + struct inode *inode = page_mapping(page)->host; return shmem_getpage(inode, page->index, &page, SGP_WRITE); } @@ -1764,7 +1779,7 @@ static void destroy_inodecache(void) static struct address_space_operations shmem_aops = { .writepage = shmem_writepage, - .set_page_dirty = __set_page_dirty_nobuffers, + .set_page_dirty = set_page_dirty_nobuffers, #ifdef CONFIG_TMPFS .prepare_write = shmem_prepare_write, .commit_write = simple_commit_write, diff -prauN linux-2.6.0-test5/mm/slab.c wli-2.6.0-test5-bk12-25/mm/slab.c --- linux-2.6.0-test5/mm/slab.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/mm/slab.c 2003-09-25 20:03:31.000000000 -0700 @@ -153,8 +153,9 @@ * is less than 512 (PAGE_SIZE<<3), but greater than 256. */ -#define BUFCTL_END 0xffffFFFF -#define SLAB_LIMIT 0xffffFFFE +#define BUFCTL_END 0xffffFFFF +#define BUFCTL_FREE 0xffffFFFE +#define SLAB_LIMIT 0xffffFFFD typedef unsigned int kmem_bufctl_t; /* Max number of objs-per-slab for caches which use off-slab slabs. @@ -293,6 +294,10 @@ struct kmem_cache_s { atomic_t freehit; atomic_t freemiss; #endif +#if DEBUG + int dbghead; + int reallen; +#endif }; #define CFLGS_OFF_SLAB (0x80000000UL) @@ -356,32 +361,68 @@ struct kmem_cache_s { #define POISON_AFTER 0x6b /* for use-after-free poisoning */ #define POISON_END 0xa5 /* end-byte of poisoning */ +/* memory layout of objects: + * 0 : objp + * 0 .. cachep->dbghead - BYTES_PER_WORD - 1: padding. This ensures that + * the end of an object is aligned with the end of the real + * allocation. Catches writes behind the end of the allocation. + * cachep->dbghead - BYTES_PER_WORD .. cachep->dbghead - 1: + * redzone word. + * cachep->dbghead: The real object. + * cachep->objsize - 2* BYTES_PER_WORD: redzone word [BYTES_PER_WORD long] + * cachep->objsize - 1* BYTES_PER_WORD: last caller address [BYTES_PER_WORD long] + */ static inline int obj_dbghead(kmem_cache_t *cachep) { - if (cachep->flags & SLAB_RED_ZONE) - return BYTES_PER_WORD; - return 0; + return cachep->dbghead; } -static inline int obj_dbglen(kmem_cache_t *cachep) +static inline int obj_reallen(kmem_cache_t *cachep) { - int len = 0; + return cachep->reallen; +} - if (cachep->flags & SLAB_RED_ZONE) { - len += 2*BYTES_PER_WORD; - } - if (cachep->flags & SLAB_STORE_USER) { - len += BYTES_PER_WORD; - } - return len; +static unsigned long *dbg_redzone1(kmem_cache_t *cachep, void *objp) +{ + BUG_ON(!(cachep->flags & SLAB_RED_ZONE)); + return (unsigned long*) (objp+obj_dbghead(cachep)-BYTES_PER_WORD); +} + +static unsigned long *dbg_redzone2(kmem_cache_t *cachep, void *objp) +{ + BUG_ON(!(cachep->flags & SLAB_RED_ZONE)); + if (cachep->flags & SLAB_STORE_USER) + return (unsigned long*) (objp+cachep->objsize-2*BYTES_PER_WORD); + return (unsigned long*) (objp+cachep->objsize-BYTES_PER_WORD); +} + +static void **dbg_userword(kmem_cache_t *cachep, void *objp) +{ + BUG_ON(!(cachep->flags & SLAB_STORE_USER)); + return (void**)(objp+cachep->objsize-BYTES_PER_WORD); } #else static inline int obj_dbghead(kmem_cache_t *cachep) { return 0; } -static inline int obj_dbglen(kmem_cache_t *cachep) +static inline int obj_reallen(kmem_cache_t *cachep) +{ + return cachep->objsize; +} +static inline unsigned long *dbg_redzone1(kmem_cache_t *cachep, void *objp) +{ + BUG(); + return 0; +} +static inline unsigned long *dbg_redzone2(kmem_cache_t *cachep, void *objp) { + BUG(); + return 0; +} +static inline void **dbg_userword(kmem_cache_t *cachep, void *objp) +{ + BUG(); return 0; } #endif @@ -804,7 +845,7 @@ static inline void kmem_freepages (kmem_ #ifdef CONFIG_DEBUG_PAGEALLOC static void store_stackinfo(kmem_cache_t *cachep, unsigned long *addr, unsigned long caller) { - int size = cachep->objsize-obj_dbglen(cachep); + int size = obj_reallen(cachep); addr = (unsigned long *)&((char*)addr)[obj_dbghead(cachep)]; @@ -836,7 +877,7 @@ static void store_stackinfo(kmem_cache_t static void poison_obj(kmem_cache_t *cachep, void *addr, unsigned char val) { - int size = cachep->objsize-obj_dbglen(cachep); + int size = obj_reallen(cachep); addr = &((char*)addr)[obj_dbghead(cachep)]; memset(addr, val, size); @@ -858,47 +899,42 @@ static void *scan_poisoned_obj(unsigned return NULL; } -static void check_poison_obj(kmem_cache_t *cachep, void *addr) +static void check_poison_obj(kmem_cache_t *cachep, void *objp) { void *end; - int size = cachep->objsize-obj_dbglen(cachep); + void *realobj; + int size = obj_reallen(cachep); - addr = &((char*)addr)[obj_dbghead(cachep)]; + realobj = objp+obj_dbghead(cachep); - end = scan_poisoned_obj(addr, size); + end = scan_poisoned_obj(realobj, size); if (end) { int s; printk(KERN_ERR "Slab corruption: start=%p, expend=%p, " - "problemat=%p\n", addr, addr+size-1, end); + "problemat=%p\n", realobj, realobj+size-1, end); if (cachep->flags & SLAB_STORE_USER) { - void *pc; - - if (cachep->flags & SLAB_RED_ZONE) - pc = *(void**)(addr+size+BYTES_PER_WORD); - else - pc = *(void**)(addr+size); - printk(KERN_ERR "Last user: [<%p>]", pc); - print_symbol("(%s)", (unsigned long)pc); + printk(KERN_ERR "Last user: [<%p>]", *dbg_userword(cachep, objp)); + print_symbol("(%s)", (unsigned long)*dbg_userword(cachep, objp)); printk("\n"); } printk(KERN_ERR "Data: "); for (s = 0; s < size; s++) { - if (((char*)addr)[s] == POISON_BEFORE) + if (((char*)realobj)[s] == POISON_BEFORE) printk("."); - else if (((char*)addr)[s] == POISON_AFTER) + else if (((char*)realobj)[s] == POISON_AFTER) printk("*"); else - printk("%02X ", ((unsigned char*)addr)[s]); + printk("%02X ", ((unsigned char*)realobj)[s]); } printk("\n"); printk(KERN_ERR "Next: "); for (; s < size + 32; s++) { - if (((char*)addr)[s] == POISON_BEFORE) + if (((char*)realobj)[s] == POISON_BEFORE) printk("."); - else if (((char*)addr)[s] == POISON_AFTER) + else if (((char*)realobj)[s] == POISON_AFTER) printk("*"); else - printk("%02X ", ((unsigned char*)addr)[s]); + printk("%02X ", ((unsigned char*)realobj)[s]); } printk("\n"); slab_error(cachep, "object was modified after freeing"); @@ -916,7 +952,6 @@ static void slab_destroy (kmem_cache_t * int i; for (i = 0; i < cachep->num; i++) { void *objp = slabp->s_mem + cachep->objsize * i; - int objlen = cachep->objsize; if (cachep->flags & SLAB_POISON) { #ifdef CONFIG_DEBUG_PAGEALLOC @@ -928,21 +963,16 @@ static void slab_destroy (kmem_cache_t * check_poison_obj(cachep, objp); #endif } - if (cachep->flags & SLAB_STORE_USER) - objlen -= BYTES_PER_WORD; - if (cachep->flags & SLAB_RED_ZONE) { - if (*((unsigned long*)(objp)) != RED_INACTIVE) + if (*dbg_redzone1(cachep, objp) != RED_INACTIVE) slab_error(cachep, "start of a freed object " "was overwritten"); - if (*((unsigned long*)(objp + objlen - BYTES_PER_WORD)) - != RED_INACTIVE) + if (*dbg_redzone2(cachep, objp) != RED_INACTIVE) slab_error(cachep, "end of a freed object " "was overwritten"); - objp += BYTES_PER_WORD; } if (cachep->dtor && !(cachep->flags & SLAB_POISON)) - (cachep->dtor)(objp, cachep, 0); + (cachep->dtor)(objp+obj_dbghead(cachep), cachep, 0); } #else if (cachep->dtor) { @@ -1013,6 +1043,7 @@ kmem_cache_create (const char *name, siz BUG(); #if DEBUG + WARN_ON(strchr(name, ' ')); /* It confuses parsers */ if ((flags & SLAB_DEBUG_INITIAL) && !ctor) { /* No constructor, but inital state check requested */ printk("%sNo con, but init state check requested - %s\n", func_nm, name); @@ -1020,10 +1051,6 @@ kmem_cache_create (const char *name, siz } #if FORCED_DEBUG -#ifdef CONFIG_DEBUG_PAGEALLOC - if (size < PAGE_SIZE-3*BYTES_PER_WORD && size > 128) - size = PAGE_SIZE-3*BYTES_PER_WORD; -#endif /* * Enable redzoning and last user accounting, except * - for caches with forced alignment: redzoning would violate the @@ -1054,6 +1081,9 @@ kmem_cache_create (const char *name, siz goto opps; memset(cachep, 0, sizeof(kmem_cache_t)); +#if DEBUG + cachep->reallen = size; +#endif /* Check that size is in terms of words. This is needed to avoid * unaligned accesses for some archs when redzoning is used, and makes * sure any on-slab bufctl's are also correctly aligned. @@ -1071,12 +1101,20 @@ kmem_cache_create (const char *name, siz * when redzoning. */ flags &= ~SLAB_HWCACHE_ALIGN; - size += 2*BYTES_PER_WORD; /* words for redzone */ + /* add space for red zone words */ + cachep->dbghead += BYTES_PER_WORD; + size += 2*BYTES_PER_WORD; } if (flags & SLAB_STORE_USER) { flags &= ~SLAB_HWCACHE_ALIGN; - size += BYTES_PER_WORD; /* word for kfree caller address */ + size += BYTES_PER_WORD; /* add space */ } +#if FORCED_DEBUG && defined(CONFIG_DEBUG_PAGEALLOC) + if (size > 128 && cachep->reallen > L1_CACHE_BYTES && size < PAGE_SIZE) { + cachep->dbghead += PAGE_SIZE - size; + size = PAGE_SIZE; + } +#endif #endif align = BYTES_PER_WORD; if (flags & SLAB_HWCACHE_ALIGN) @@ -1444,20 +1482,15 @@ static void cache_init_objs (kmem_cache_ for (i = 0; i < cachep->num; i++) { void* objp = slabp->s_mem+cachep->objsize*i; #if DEBUG - int objlen = cachep->objsize; /* need to poison the objs? */ if (cachep->flags & SLAB_POISON) poison_obj(cachep, objp, POISON_BEFORE); - if (cachep->flags & SLAB_STORE_USER) { - objlen -= BYTES_PER_WORD; - ((unsigned long*)(objp+objlen))[0] = 0; - } + if (cachep->flags & SLAB_STORE_USER) + *dbg_userword(cachep, objp) = NULL; if (cachep->flags & SLAB_RED_ZONE) { - *((unsigned long*)(objp)) = RED_INACTIVE; - objp += BYTES_PER_WORD; - objlen -= 2* BYTES_PER_WORD; - *((unsigned long*)(objp + objlen)) = RED_INACTIVE; + *dbg_redzone1(cachep, objp) = RED_INACTIVE; + *dbg_redzone2(cachep, objp) = RED_INACTIVE; } /* * Constructors are not allowed to allocate memory from @@ -1465,14 +1498,13 @@ static void cache_init_objs (kmem_cache_ * Otherwise, deadlock. They must also be threaded. */ if (cachep->ctor && !(cachep->flags & SLAB_POISON)) - cachep->ctor(objp, cachep, ctor_flags); + cachep->ctor(objp+obj_dbghead(cachep), cachep, ctor_flags); if (cachep->flags & SLAB_RED_ZONE) { - if (*((unsigned long*)(objp + objlen)) != RED_INACTIVE) + if (*dbg_redzone2(cachep, objp) != RED_INACTIVE) slab_error(cachep, "constructor overwrote the" " end of an object"); - objp -= BYTES_PER_WORD; - if (*((unsigned long*)(objp)) != RED_INACTIVE) + if (*dbg_redzone1(cachep, objp) != RED_INACTIVE) slab_error(cachep, "constructor overwrote the" " start of an object"); } @@ -1623,9 +1655,9 @@ static inline void *cache_free_debugchec #if DEBUG struct page *page; unsigned int objnr; - int objlen = cachep->objsize; struct slab *slabp; + objp -= obj_dbghead(cachep); kfree_debugcheck(objp); page = virt_to_page(objp); @@ -1638,21 +1670,18 @@ static inline void *cache_free_debugchec } slabp = GET_PAGE_SLAB(page); - if (cachep->flags & SLAB_STORE_USER) { - objlen -= BYTES_PER_WORD; - } if (cachep->flags & SLAB_RED_ZONE) { - objp -= BYTES_PER_WORD; - if (xchg((unsigned long *)objp, RED_INACTIVE) != RED_ACTIVE) - slab_error(cachep, "double free, or memory before" - " object was overwritten"); - if (xchg((unsigned long *)(objp+objlen-BYTES_PER_WORD), RED_INACTIVE) != RED_ACTIVE) - slab_error(cachep, "double free, or memory after " + if (*dbg_redzone1(cachep, objp) != RED_ACTIVE || *dbg_redzone2(cachep, objp) != RED_ACTIVE) { + slab_error(cachep, "double free, or memory outside" " object was overwritten"); + printk(KERN_ERR "%p: redzone 1: 0x%lx, redzone 2: 0x%lx.\n", + objp, *dbg_redzone1(cachep, objp), *dbg_redzone2(cachep, objp)); + } + *dbg_redzone1(cachep, objp) = RED_INACTIVE; + *dbg_redzone2(cachep, objp) = RED_INACTIVE; } - if (cachep->flags & SLAB_STORE_USER) { - *((void**)(objp+objlen)) = caller; - } + if (cachep->flags & SLAB_STORE_USER) + *dbg_userword(cachep, objp) = caller; objnr = (objp-slabp->s_mem)/cachep->objsize; @@ -1699,40 +1728,23 @@ static inline void check_slabp(kmem_cach /* Check slab's freelist to see if this obj is there. */ for (i = slabp->free; i != BUFCTL_END; i = slab_bufctl(slabp)[i]) { entries++; - BUG_ON(entries > cachep->num); - BUG_ON(i < 0 || i >= cachep->num); + if (entries > cachep->num || i < 0 || i >= cachep->num) + goto bad; } - BUG_ON(entries != cachep->num - slabp->inuse); -#endif -} - -static inline void * cache_alloc_one_tail (kmem_cache_t *cachep, - struct slab *slabp) -{ - void *objp; - - check_spinlock_acquired(cachep); - - STATS_INC_ALLOCED(cachep); - STATS_INC_ACTIVE(cachep); - STATS_SET_HIGH(cachep); - - /* get obj pointer */ - slabp->inuse++; - objp = slabp->s_mem + slabp->free*cachep->objsize; - slabp->free=slab_bufctl(slabp)[slabp->free]; - - return objp; -} - -static inline void cache_alloc_listfixup(struct kmem_list3 *l3, struct slab *slabp) -{ - list_del(&slabp->list); - if (slabp->free == BUFCTL_END) { - list_add(&slabp->list, &l3->slabs_full); - } else { - list_add(&slabp->list, &l3->slabs_partial); + if (entries != cachep->num - slabp->inuse) { + int i; +bad: + printk(KERN_ERR "slab: Internal list corruption detected in cache '%s'(%d), slabp %p(%d). Hexdump:\n", + cachep->name, cachep->num, slabp, slabp->inuse); + for (i=0;inum*sizeof(kmem_bufctl_t);i++) { + if ((i%16)==0) + printk("\n%03x:", i); + printk(" %02x", ((unsigned char*)slabp)[i]); + } + printk("\n"); + BUG(); } +#endif } static void* cache_alloc_refill(kmem_cache_t* cachep, int flags) @@ -1783,11 +1795,31 @@ retry: slabp = list_entry(entry, struct slab, list); check_slabp(cachep, slabp); - while (slabp->inuse < cachep->num && batchcount--) - ac_entry(ac)[ac->avail++] = - cache_alloc_one_tail(cachep, slabp); + check_spinlock_acquired(cachep); + while (slabp->inuse < cachep->num && batchcount--) { + kmem_bufctl_t next; + STATS_INC_ALLOCED(cachep); + STATS_INC_ACTIVE(cachep); + STATS_SET_HIGH(cachep); + + /* get obj pointer */ + ac_entry(ac)[ac->avail++] = slabp->s_mem + slabp->free*cachep->objsize; + + slabp->inuse++; + next = slab_bufctl(slabp)[slabp->free]; +#if DEBUG + slab_bufctl(slabp)[slabp->free] = BUFCTL_FREE; +#endif + slabp->free = next; + } check_slabp(cachep, slabp); - cache_alloc_listfixup(l3, slabp); + + /* move slabp to correct slabp list: */ + list_del(&slabp->list); + if (slabp->free == BUFCTL_END) + list_add(&slabp->list, &l3->slabs_full); + else + list_add(&slabp->list, &l3->slabs_partial); } must_grow: @@ -1825,8 +1857,6 @@ cache_alloc_debugcheck_after(kmem_cache_ unsigned long flags, void *objp, void *caller) { #if DEBUG - int objlen = cachep->objsize; - if (!objp) return objp; if (cachep->flags & SLAB_POISON) { @@ -1840,24 +1870,20 @@ cache_alloc_debugcheck_after(kmem_cache_ #endif poison_obj(cachep, objp, POISON_BEFORE); } - if (cachep->flags & SLAB_STORE_USER) { - objlen -= BYTES_PER_WORD; - *((void **)(objp+objlen)) = caller; - } + if (cachep->flags & SLAB_STORE_USER) + *dbg_userword(cachep, objp) = caller; if (cachep->flags & SLAB_RED_ZONE) { - /* Set alloc red-zone, and check old one. */ - if (xchg((unsigned long *)objp, RED_ACTIVE) != RED_INACTIVE) { - slab_error(cachep, "memory before object was " - "overwritten"); - } - if (xchg((unsigned long *)(objp+objlen - BYTES_PER_WORD), - RED_ACTIVE) != RED_INACTIVE) { - slab_error(cachep, "memory after object was " - "overwritten"); + if (*dbg_redzone1(cachep, objp) != RED_INACTIVE || *dbg_redzone2(cachep, objp) != RED_INACTIVE) { + slab_error(cachep, "double free, or memory outside" + " object was overwritten"); + printk(KERN_ERR "%p: redzone 1: 0x%lx, redzone 2: 0x%lx.\n", + objp, *dbg_redzone1(cachep, objp), *dbg_redzone2(cachep, objp)); } - objp += BYTES_PER_WORD; + *dbg_redzone1(cachep, objp) = RED_ACTIVE; + *dbg_redzone2(cachep, objp) = RED_ACTIVE; } + objp += obj_dbghead(cachep); if (cachep->ctor && cachep->flags & SLAB_POISON) { unsigned long ctor_flags = SLAB_CTOR_CONSTRUCTOR; @@ -1917,6 +1943,13 @@ static void free_block(kmem_cache_t *cac list_del(&slabp->list); objnr = (objp - slabp->s_mem) / cachep->objsize; check_slabp(cachep, slabp); +#if DEBUG + if (slab_bufctl(slabp)[objnr] != BUFCTL_FREE) { + printk(KERN_ERR "slab: double free detected in cache '%s', objp %p.\n", + cachep->name, objp); + BUG(); + } +#endif slab_bufctl(slabp)[objnr] = slabp->free; slabp->free = objnr; STATS_DEC_ACTIVE(cachep); @@ -2175,7 +2208,7 @@ free_percpu(const void *objp) unsigned int kmem_cache_size(kmem_cache_t *cachep) { - return cachep->objsize-obj_dbglen(cachep); + return obj_reallen(cachep); } kmem_cache_t * kmem_find_general_cachep (size_t size, int gfpflags) @@ -2723,7 +2756,7 @@ void ptrinfo(unsigned long addr) printk("No pgd.\n"); break; } - pmd = pmd_offset(pgd, addr); + pmd = pmd_offset_kernel(pgd, addr); if (pmd_none(*pmd)) { printk("No pmd.\n"); break; @@ -2763,12 +2796,17 @@ void ptrinfo(unsigned long addr) if (objnr >= c->num) { printk("Bad obj number.\n"); } else { - kernel_map_pages(virt_to_page(objp), c->objsize/PAGE_SIZE, 1); + kernel_map_pages(virt_to_page(objp), + c->objsize/PAGE_SIZE, 1); - printk("redzone: %lxh/%lxh/%lxh.\n", - ((unsigned long*)objp)[0], - ((unsigned long*)(objp+c->objsize))[-2], - ((unsigned long*)(objp+c->objsize))[-1]); + if (c->flags & SLAB_RED_ZONE) + printk("redzone: 0x%lx/0x%lx.\n", + *dbg_redzone1(c, objp), + *dbg_redzone2(c, objp)); + + if (c->flags & SLAB_STORE_USER) + printk("Last user: %p.\n", + *dbg_userword(c, objp)); } spin_unlock_irqrestore(&c->spinlock, flags); diff -prauN linux-2.6.0-test5/mm/swap_state.c wli-2.6.0-test5-bk12-25/mm/swap_state.c --- linux-2.6.0-test5/mm/swap_state.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/mm/swap_state.c 2003-09-28 23:04:08.000000000 -0700 @@ -21,23 +21,16 @@ static struct backing_dev_info swap_back .memory_backed = 1, /* Does not contribute to dirty memory */ }; -extern struct address_space_operations swap_aops; +static struct address_space_operations swap_aops = { + .writepage = swap_writepage, + .readpage = swap_readpage, +}; struct address_space swapper_space = { .page_tree = RADIX_TREE_INIT(GFP_ATOMIC), - .page_lock = SPIN_LOCK_UNLOCKED, - .clean_pages = LIST_HEAD_INIT(swapper_space.clean_pages), - .dirty_pages = LIST_HEAD_INIT(swapper_space.dirty_pages), - .io_pages = LIST_HEAD_INIT(swapper_space.io_pages), - .locked_pages = LIST_HEAD_INIT(swapper_space.locked_pages), + .page_lock = MAPPING_RW_LOCK_UNLOCKED, .a_ops = &swap_aops, .backing_dev_info = &swap_backing_dev_info, - .i_mmap = LIST_HEAD_INIT(swapper_space.i_mmap), - .i_mmap_shared = LIST_HEAD_INIT(swapper_space.i_mmap_shared), - .i_shared_sem = __MUTEX_INITIALIZER(swapper_space.i_shared_sem), - .truncate_count = ATOMIC_INIT(0), - .private_lock = SPIN_LOCK_UNLOCKED, - .private_list = LIST_HEAD_INIT(swapper_space.private_list), }; #define INC_CACHE_INFO(x) do { swap_cache_info.x++; } while (0) @@ -59,30 +52,50 @@ void show_swap_cache_info(void) swap_cache_info.noent_race, swap_cache_info.exist_race); } +static int __add_to_swap_cache(struct page *page, swp_entry_t entry) +{ + int error; + + BUG_ON(PageSwapCache(page)); + BUG_ON(PagePrivate(page)); + error = radix_tree_preload(GFP_ATOMIC); + if (error) + return error; + + page_cache_get(page); + mapping_wrlock(&swapper_space.page_lock); + error = radix_tree_insert(&swapper_space.page_tree, entry.val, page); + if (error) + page_cache_release(page); + else { + SetPageLocked(page); + SetPageSwapCache(page); + page->private = entry.val; + inc_page_state(nr_swapcache); + } + mapping_wrunlock(&swapper_space.page_lock); + radix_tree_preload_end(); + return error; +} + static int add_to_swap_cache(struct page *page, swp_entry_t entry) { int error; - if (page->mapping) - BUG(); if (!swap_duplicate(entry)) { INC_CACHE_INFO(noent_race); return -ENOENT; } - error = add_to_page_cache(page, &swapper_space, entry.val, GFP_KERNEL); + error = __add_to_swap_cache(page, entry); /* * Anon pages are already on the LRU, we don't run lru_cache_add here. */ - if (error != 0) { + if (error) { swap_free(entry); if (error == -EEXIST) INC_CACHE_INFO(exist_race); return error; } - if (!PageLocked(page)) - BUG(); - if (!PageSwapCache(page)) - BUG(); INC_CACHE_INFO(add_total); return 0; } @@ -96,7 +109,9 @@ void __delete_from_swap_cache(struct pag BUG_ON(!PageLocked(page)); BUG_ON(!PageSwapCache(page)); BUG_ON(PageWriteback(page)); - __remove_from_page_cache(page); + radix_tree_delete(&swapper_space.page_tree, page->private); + ClearPageSwapCache(page); + dec_page_state(nr_swapcache); INC_CACHE_INFO(del_total); } @@ -140,8 +155,7 @@ int add_to_swap(struct page * page) /* * Add it to the swap cache and mark it dirty */ - err = add_to_page_cache(page, &swapper_space, - entry.val, GFP_ATOMIC); + err = __add_to_swap_cache(page, entry); if (pf_flags & PF_MEMALLOC) current->flags |= PF_MEMALLOC; @@ -149,8 +163,7 @@ int add_to_swap(struct page * page) switch (err) { case 0: /* Success */ SetPageUptodate(page); - ClearPageDirty(page); - set_page_dirty(page); + SetPageDirty(page); INC_CACHE_INFO(add_total); return 1; case -EEXIST: @@ -176,15 +189,16 @@ void delete_from_swap_cache(struct page { swp_entry_t entry; + BUG_ON(!PageSwapCache(page)); BUG_ON(!PageLocked(page)); BUG_ON(PageWriteback(page)); BUG_ON(PagePrivate(page)); - entry.val = page->index; + entry.val = page->private; - spin_lock(&swapper_space.page_lock); + mapping_wrlock(&swapper_space.page_lock); __delete_from_swap_cache(page); - spin_unlock(&swapper_space.page_lock); + mapping_wrunlock(&swapper_space.page_lock); swap_free(entry); page_cache_release(page); @@ -192,27 +206,10 @@ void delete_from_swap_cache(struct page int move_to_swap_cache(struct page *page, swp_entry_t entry) { - struct address_space *mapping = page->mapping; - int err; - - spin_lock(&swapper_space.page_lock); - spin_lock(&mapping->page_lock); - - err = radix_tree_insert(&swapper_space.page_tree, entry.val, page); - if (!err) { - __remove_from_page_cache(page); - ___add_to_page_cache(page, &swapper_space, entry.val); - } - - spin_unlock(&mapping->page_lock); - spin_unlock(&swapper_space.page_lock); - + int err = __add_to_swap_cache(page, entry); if (!err) { - if (!swap_duplicate(entry)) - BUG(); - /* shift page from clean_pages to dirty_pages list */ - BUG_ON(PageDirty(page)); - set_page_dirty(page); + BUG_ON(!swap_duplicate(entry)); + SetPageDirty(page); INC_CACHE_INFO(add_total); } else if (err == -EEXIST) INC_CACHE_INFO(exist_race); @@ -222,29 +219,13 @@ int move_to_swap_cache(struct page *page int move_from_swap_cache(struct page *page, unsigned long index, struct address_space *mapping) { - swp_entry_t entry; - int err; - - BUG_ON(!PageLocked(page)); - BUG_ON(PageWriteback(page)); - BUG_ON(PagePrivate(page)); - - entry.val = page->index; - - spin_lock(&swapper_space.page_lock); - spin_lock(&mapping->page_lock); - - err = radix_tree_insert(&mapping->page_tree, index, page); - if (!err) { - __delete_from_swap_cache(page); - ___add_to_page_cache(page, mapping, index); + int err = add_to_page_cache(page, mapping, index, GFP_ATOMIC); + if (err == -EEXIST) { + INC_CACHE_INFO(exist_race); + err = 0; } - - spin_unlock(&mapping->page_lock); - spin_unlock(&swapper_space.page_lock); - if (!err) { - swap_free(entry); + delete_from_swap_cache(page); /* shift page from clean_pages to dirty_pages list */ ClearPageDirty(page); set_page_dirty(page); @@ -308,11 +289,17 @@ void free_pages_and_swap_cache(struct pa * lock getting page table operations atomic even if we drop the page * lock before returning. */ -struct page * lookup_swap_cache(swp_entry_t entry) +struct page *lookup_swap_cache(swp_entry_t entry) { - struct page *found; + struct page *page; - found = find_get_page(&swapper_space, entry.val); + mapping_rdlock(&swapper_space.page_lock); + page = radix_tree_lookup(&swapper_space.page_tree, entry.val); + if (page) { + page_cache_get(page); + INC_CACHE_INFO(find_success); + } + mapping_rdunlock(&swapper_space.page_lock); /* * Unsafe to assert PageSwapCache and mapping on page found: * if SMP nothing prevents swapoff from deleting this page from @@ -320,9 +307,7 @@ struct page * lookup_swap_cache(swp_entr * that, but no need to change: we _have_ got the right page. */ INC_CACHE_INFO(find_total); - if (found) - INC_CACHE_INFO(find_success); - return found; + return page; } /* @@ -331,7 +316,7 @@ struct page * lookup_swap_cache(swp_entr * A failure return means that either the page allocation failed or that * the swap entry is no longer in use. */ -struct page * read_swap_cache_async(swp_entry_t entry) +struct page *read_swap_cache_async(swp_entry_t entry) { struct page *found_page, *new_page = NULL; int err; @@ -343,7 +328,11 @@ struct page * read_swap_cache_async(swp_ * that would confuse statistics: use find_get_page() * directly. */ - found_page = find_get_page(&swapper_space, entry.val); + mapping_rdlock(&swapper_space.page_lock); + found_page = radix_tree_lookup(&swapper_space.page_tree, entry.val); + if (found_page) + page_cache_get(found_page); + mapping_rdunlock(&swapper_space.page_lock); if (found_page) break; diff -prauN linux-2.6.0-test5/mm/swapfile.c wli-2.6.0-test5-bk12-25/mm/swapfile.c --- linux-2.6.0-test5/mm/swapfile.c 2003-09-08 12:49:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/mm/swapfile.c 2003-09-29 00:29:01.000000000 -0700 @@ -21,7 +21,7 @@ #include #include #include -#include +#include #include #include @@ -247,16 +247,16 @@ static int exclusive_swap_page(struct pa struct swap_info_struct * p; swp_entry_t entry; - entry.val = page->index; + entry.val = page->private; p = swap_info_get(entry); if (p) { /* Is the only swap cache user the cache itself? */ if (p->swap_map[swp_offset(entry)] == 1) { /* Recheck the page count with the pagecache lock held.. */ - spin_lock(&swapper_space.page_lock); + mapping_rdlock(&swapper_space.page_lock); if (page_count(page) - !!PagePrivate(page) == 2) retval = 1; - spin_unlock(&swapper_space.page_lock); + mapping_rdunlock(&swapper_space.page_lock); } swap_info_put(p); } @@ -315,7 +315,7 @@ int remove_exclusive_swap_page(struct pa if (page_count(page) != 2) /* 2: us + cache */ return 0; - entry.val = page->index; + entry.val = page->private; p = swap_info_get(entry); if (!p) return 0; @@ -324,13 +324,13 @@ int remove_exclusive_swap_page(struct pa retval = 0; if (p->swap_map[swp_offset(entry)] == 1) { /* Recheck the page count with the pagecache lock held.. */ - spin_lock(&swapper_space.page_lock); + mapping_wrlock(&swapper_space.page_lock); if ((page_count(page) == 2) && !PageWriteback(page)) { __delete_from_swap_cache(page); SetPageDirty(page); retval = 1; } - spin_unlock(&swapper_space.page_lock); + mapping_wrunlock(&swapper_space.page_lock); } swap_info_put(p); @@ -353,8 +353,13 @@ void free_swap_and_cache(swp_entry_t ent p = swap_info_get(entry); if (p) { - if (swap_entry_free(p, swp_offset(entry)) == 1) - page = find_trylock_page(&swapper_space, entry.val); + if (swap_entry_free(p, swp_offset(entry)) == 1) { + mapping_rdlock(&swapper_space.page_lock); + page = radix_tree_lookup(&swapper_space.page_tree, entry.val); + if (page && TestSetPageLocked(page)) + page = NULL; + mapping_rdunlock(&swapper_space.page_lock); + } swap_info_put(p); } if (page) { @@ -383,21 +388,21 @@ void free_swap_and_cache(swp_entry_t ent * what to do if a write is requested later. */ /* vma->vm_mm->page_table_lock is held */ -static void +static inline void unuse_pte(struct vm_area_struct *vma, unsigned long address, pte_t *dir, - swp_entry_t entry, struct page *page, struct pte_chain **pte_chainp) + swp_entry_t entry, struct page *page) { - vma->vm_mm->rss++; get_page(page); - set_pte(dir, pte_mkold(mk_pte(page, vma->vm_page_prot))); - *pte_chainp = page_add_rmap(page, dir, *pte_chainp); + vm_set_pte(vma, dir, pte_mkold(mk_pte(page, vma->vm_page_prot)), address); + vma->vm_mm->rss++; + page_add_rmap(page, vma, address, 1); swap_free(entry); } /* vma->vm_mm->page_table_lock is held */ static int unuse_pmd(struct vm_area_struct * vma, pmd_t *dir, unsigned long address, unsigned long size, unsigned long offset, - swp_entry_t entry, struct page *page, struct pte_chain **pte_chainp) + swp_entry_t entry, struct page *page) { pte_t * pte; unsigned long end; @@ -422,8 +427,7 @@ static int unuse_pmd(struct vm_area_stru * Test inline before going to call unuse_pte. */ if (unlikely(pte_same(*pte, swp_pte))) { - unuse_pte(vma, offset + address, pte, - entry, page, pte_chainp); + unuse_pte(vma, offset + address, pte, entry, page); pte_unmap(pte); return 1; } @@ -437,7 +441,7 @@ static int unuse_pmd(struct vm_area_stru /* vma->vm_mm->page_table_lock is held */ static int unuse_pgd(struct vm_area_struct * vma, pgd_t *dir, unsigned long address, unsigned long size, - swp_entry_t entry, struct page *page, struct pte_chain **pte_chainp) + swp_entry_t entry, struct page *page) { pmd_t * pmd; unsigned long offset, end; @@ -449,7 +453,7 @@ static int unuse_pgd(struct vm_area_stru pgd_clear(dir); return 0; } - pmd = pmd_offset(dir, address); + pmd = pmd_offset_map(dir, address); offset = address & PGDIR_MASK; address &= ~PGDIR_MASK; end = address + size; @@ -458,26 +462,25 @@ static int unuse_pgd(struct vm_area_stru if (address >= end) BUG(); do { - if (unuse_pmd(vma, pmd, address, end - address, - offset, entry, page, pte_chainp)) + if (unuse_pmd(vma, pmd, address, end - address, offset, entry, page)) return 1; address = (address + PMD_SIZE) & PMD_MASK; pmd++; } while (address && (address < end)); + pmd_unmap(pmd - 1); return 0; } /* vma->vm_mm->page_table_lock is held */ static int unuse_vma(struct vm_area_struct * vma, pgd_t *pgdir, - swp_entry_t entry, struct page *page, struct pte_chain **pte_chainp) + swp_entry_t entry, struct page *page) { unsigned long start = vma->vm_start, end = vma->vm_end; if (start >= end) BUG(); do { - if (unuse_pgd(vma, pgdir, start, end - start, - entry, page, pte_chainp)) + if (unuse_pgd(vma, pgdir, start, end - start, entry, page)) return 1; start = (start + PGDIR_SIZE) & PGDIR_MASK; pgdir++; @@ -489,23 +492,20 @@ static int unuse_process(struct mm_struc swp_entry_t entry, struct page* page) { struct vm_area_struct* vma; - struct pte_chain *pte_chain; - - pte_chain = pte_chain_alloc(GFP_KERNEL); - if (!pte_chain) - return -ENOMEM; /* * Go through process' page directory. */ + if (!rmap_get_cpu()) + return -ENOMEM; spin_lock(&mm->page_table_lock); + put_cpu(); for (vma = mm->mmap; vma; vma = vma->vm_next) { pgd_t * pgd = pgd_offset(mm, vma->vm_start); - if (unuse_vma(vma, pgd, entry, page, &pte_chain)) + if (unuse_vma(vma, pgd, entry, page)) break; } spin_unlock(&mm->page_table_lock); - pte_chain_free(pte_chain); return 0; } @@ -653,8 +653,14 @@ static int try_to_unuse(unsigned int typ if (swcount > 1) { if (start_mm == &init_mm) shmem = shmem_unuse(entry, page); - else + else { retval = unuse_process(start_mm, entry, page); + if (retval) { + unlock_page(page); + page_cache_release(page); + break; + } + } } if (*swap_map > 1) { int set_start_mm = (*swap_map >= swcount); @@ -677,9 +683,7 @@ static int try_to_unuse(unsigned int typ cond_resched(); swcount = *swap_map; - if (swcount <= 1) - ; - else if (mm == &init_mm) { + if (mm == &init_mm) { set_start_mm = 1; shmem = shmem_unuse(entry, page); } else @@ -995,9 +999,10 @@ int page_queue_congested(struct page *pa BUG_ON(!PageLocked(page)); /* It pins the swap_info_struct */ - bdi = page->mapping->backing_dev_info; - if (PageSwapCache(page)) { - swp_entry_t entry = { .val = page->index }; + if (!PageSwapCache(page)) + bdi = page_mapping(page)->backing_dev_info; + else { + swp_entry_t entry = { .val = page->private }; struct swap_info_struct *sis; sis = get_swap_info_struct(swp_type(entry)); diff -prauN linux-2.6.0-test5/mm/truncate.c wli-2.6.0-test5-bk12-25/mm/truncate.c --- linux-2.6.0-test5/mm/truncate.c 2003-09-08 12:50:32.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/mm/truncate.c 2003-09-28 23:04:08.000000000 -0700 @@ -18,7 +18,7 @@ static int do_invalidatepage(struct page *page, unsigned long offset) { int (*invalidatepage)(struct page *, unsigned long); - invalidatepage = page->mapping->a_ops->invalidatepage; + invalidatepage = page_mapping(page)->a_ops->invalidatepage; if (invalidatepage == NULL) invalidatepage = block_invalidatepage; return (*invalidatepage)(page, offset); @@ -36,7 +36,7 @@ static inline void truncate_partial_page * becomes anonymous. It will be left on the LRU and may even be mapped into * user pagetables if we're racing with filemap_nopage(). * - * We need to bale out if page->mapping is no longer equal to the original + * We need to bale out if page_mapping(page) is no longer equal to the original * mapping. This happens a) when the VM reclaimed the page while we waited on * its lock, b) when a concurrent invalidate_inode_pages got there first and * c) when tmpfs swizzles a page between a tmpfs inode and swapper_space. @@ -44,7 +44,7 @@ static inline void truncate_partial_page static void truncate_complete_page(struct address_space *mapping, struct page *page) { - if (page->mapping != mapping) + if (page_mapping(page) != mapping) return; if (PagePrivate(page)) @@ -54,32 +54,31 @@ truncate_complete_page(struct address_sp ClearPageUptodate(page); ClearPageMappedToDisk(page); remove_from_page_cache(page); - page_cache_release(page); /* pagecache ref */ } /* * This is for invalidate_inode_pages(). That function can be called at * any time, and is not supposed to throw away dirty pages. But pages can * be marked dirty at any time too. So we re-check the dirtiness inside - * ->page_lock. That provides exclusion against the __set_page_dirty + * ->page_lock. That provides exclusion against the set_page_dirty * functions. */ static int invalidate_complete_page(struct address_space *mapping, struct page *page) { - if (page->mapping != mapping) + if (page_mapping(page) != mapping) return 0; if (PagePrivate(page) && !try_to_release_page(page, 0)) return 0; - spin_lock(&mapping->page_lock); + mapping_wrlock(&mapping->page_lock); if (PageDirty(page)) { - spin_unlock(&mapping->page_lock); + mapping_wrunlock(&mapping->page_lock); return 0; } __remove_from_page_cache(page); - spin_unlock(&mapping->page_lock); + mapping_wrunlock(&mapping->page_lock); ClearPageUptodate(page); page_cache_release(page); /* pagecache ref */ return 1; @@ -250,7 +249,7 @@ void invalidate_inode_pages2(struct addr struct page *page = pvec.pages[i]; lock_page(page); - if (page->mapping == mapping) { /* truncate race? */ + if (page_mapping(page) == mapping) { /* truncate race? */ wait_on_page_writeback(page); next = page->index + 1; if (page_mapped(page)) diff -prauN linux-2.6.0-test5/mm/vmalloc.c wli-2.6.0-test5-bk12-25/mm/vmalloc.c --- linux-2.6.0-test5/mm/vmalloc.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/mm/vmalloc.c 2003-09-25 20:03:31.000000000 -0700 @@ -70,7 +70,7 @@ static void unmap_area_pmd(pgd_t *dir, u return; } - pmd = pmd_offset(dir, address); + pmd = pmd_offset_kernel(dir, address); address &= ~PGDIR_MASK; end = address + size; if (end > PGDIR_SIZE) @@ -159,7 +159,7 @@ int map_vm_area(struct vm_struct *area, dir = pgd_offset_k(address); spin_lock(&init_mm.page_table_lock); do { - pmd_t *pmd = pmd_alloc(&init_mm, dir, address); + pmd_t *pmd = pmd_alloc_kernel(&init_mm, dir, address); if (!pmd) { err = -ENOMEM; break; diff -prauN linux-2.6.0-test5/mm/vmscan.c wli-2.6.0-test5-bk12-25/mm/vmscan.c --- linux-2.6.0-test5/mm/vmscan.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/mm/vmscan.c 2003-09-28 23:22:21.000000000 -0700 @@ -27,7 +27,7 @@ #include #include #include -#include +#include #include #include @@ -172,23 +172,23 @@ static int shrink_slab(long scanned, uns return 0; } -/* Must be called with page's pte_chain_lock held. */ +/* Must be called with page's rmap_lock held. */ static inline int page_mapping_inuse(struct page *page) { - struct address_space *mapping = page->mapping; + struct address_space *mapping; /* Page is in somebody's page tables. */ if (page_mapped(page)) return 1; - /* XXX: does this happen ? */ - if (!mapping) - return 0; - /* Be more reluctant to reclaim swapcache than pagecache */ if (PageSwapCache(page)) return 1; + mapping = page_mapping(page); + if (!mapping) + return 0; + /* File is mmap'd by somebody. */ if (!list_empty(&mapping->i_mmap)) return 1; @@ -232,7 +232,7 @@ static void handle_write_error(struct ad struct page *page, int error) { lock_page(page); - if (page->mapping == mapping) { + if (page_mapping(page) == mapping) { if (error == -ENOSPC) set_bit(AS_ENOSPC, &mapping->flags); else @@ -279,15 +279,15 @@ shrink_list(struct list_head *page_list, if (PageWriteback(page)) goto keep_locked; - pte_chain_lock(page); + rmap_lock(page); referenced = page_referenced(page); if (referenced && page_mapping_inuse(page)) { /* In active use or really unfreeable. Activate it. */ - pte_chain_unlock(page); + rmap_unlock(page); goto activate_locked; } - mapping = page->mapping; + mapping = page_mapping(page); #ifdef CONFIG_SWAP /* @@ -296,12 +296,14 @@ shrink_list(struct list_head *page_list, * * XXX: implement swap clustering ? */ - if (page_mapped(page) && !mapping && !PagePrivate(page)) { - pte_chain_unlock(page); + if (PageSwapCache(page)) + mapping = &swapper_space; + else if (PageAnon(page)) { + rmap_unlock(page); if (!add_to_swap(page)) goto activate_locked; - pte_chain_lock(page); - mapping = page->mapping; + rmap_lock(page); + mapping = &swapper_space; } #endif /* CONFIG_SWAP */ @@ -312,16 +314,16 @@ shrink_list(struct list_head *page_list, if (page_mapped(page) && mapping) { switch (try_to_unmap(page)) { case SWAP_FAIL: - pte_chain_unlock(page); + rmap_unlock(page); goto activate_locked; case SWAP_AGAIN: - pte_chain_unlock(page); + rmap_unlock(page); goto keep_locked; case SWAP_SUCCESS: ; /* try to free the page below */ } } - pte_chain_unlock(page); + rmap_unlock(page); /* * If the page is dirty, only perform writeback if that write @@ -353,7 +355,7 @@ shrink_list(struct list_head *page_list, goto keep_locked; if (!may_write_to_queue(mapping->backing_dev_info)) goto keep_locked; - spin_lock(&mapping->page_lock); + mapping_wrlock(&mapping->page_lock); if (test_clear_page_dirty(page)) { int res; struct writeback_control wbc = { @@ -363,8 +365,9 @@ shrink_list(struct list_head *page_list, .for_reclaim = 1, }; - list_move(&page->list, &mapping->locked_pages); - spin_unlock(&mapping->page_lock); + if (!PageSwapCache(page)) + list_move(&page->list, &mapping->locked_pages); + mapping_wrunlock(&mapping->page_lock); SetPageReclaim(page); res = mapping->a_ops->writepage(page, &wbc); @@ -380,7 +383,7 @@ shrink_list(struct list_head *page_list, } goto keep; } - spin_unlock(&mapping->page_lock); + mapping_wrunlock(&mapping->page_lock); } /* @@ -397,7 +400,7 @@ shrink_list(struct list_head *page_list, * try_to_release_page() will discover that cleanness and will * drop the buffers and mark the page clean - it can be freed. * - * Rarely, pages can have buffers and no ->mapping. These are + * Rarely, pages can have buffers and no page_mapping(). These are * the pages which were not successfully invalidated in * truncate_complete_page(). We try to drop those buffers here * and if that worked, and the page is no longer mapped into @@ -414,7 +417,7 @@ shrink_list(struct list_head *page_list, if (!mapping) goto keep_locked; /* truncate got there first */ - spin_lock(&mapping->page_lock); + mapping_wrlock(&mapping->page_lock); /* * The non-racy check for busy page. It is critical to check @@ -422,15 +425,15 @@ shrink_list(struct list_head *page_list, * not in use by anybody. (pagecache + us == 2) */ if (page_count(page) != 2 || PageDirty(page)) { - spin_unlock(&mapping->page_lock); + mapping_wrunlock(&mapping->page_lock); goto keep_locked; } #ifdef CONFIG_SWAP if (PageSwapCache(page)) { - swp_entry_t swap = { .val = page->index }; + swp_entry_t swap = { .val = page->private }; __delete_from_swap_cache(page); - spin_unlock(&mapping->page_lock); + mapping_wrunlock(&mapping->page_lock); swap_free(swap); __put_page(page); /* The pagecache ref */ goto free_it; @@ -438,7 +441,7 @@ shrink_list(struct list_head *page_list, #endif /* CONFIG_SWAP */ __remove_from_page_cache(page); - spin_unlock(&mapping->page_lock); + mapping_wrunlock(&mapping->page_lock); __put_page(page); free_it: @@ -658,13 +661,13 @@ refill_inactive_zone(struct zone *zone, page = list_entry(l_hold.prev, struct page, lru); list_del(&page->lru); if (page_mapped(page)) { - pte_chain_lock(page); + rmap_lock(page); if (page_mapped(page) && page_referenced(page)) { - pte_chain_unlock(page); + rmap_unlock(page); list_add(&page->lru, &l_active); continue; } - pte_chain_unlock(page); + rmap_unlock(page); if (!reclaim_mapped) { list_add(&page->lru, &l_active); continue; @@ -674,7 +677,7 @@ refill_inactive_zone(struct zone *zone, * FIXME: need to consider page_count(page) here if/when we * reap orphaned pages via the LRU (Daniel's locking stuff) */ - if (total_swap_pages == 0 && !page->mapping && + if (total_swap_pages == 0 && !page_mapping(page) && !PagePrivate(page)) { list_add(&page->lru, &l_active); continue; @@ -832,6 +835,10 @@ shrink_caches(struct zone *classzone, in } return ret; } + +#ifndef HAVE_ARCH_PAGETABLE_CACHE +#define shrink_pagetable_cache(gfp_mask) do { } while (0) +#endif /* * This is the main entry point to direct page reclaim. @@ -885,6 +892,9 @@ int try_to_free_pages(struct zone *cz, */ wakeup_bdflush(total_scanned); + /* shoot down some pagetable caches before napping */ + shrink_pagetable_cache(gfp_mask); + /* Take a nap, wait for some writeback to complete */ blk_congestion_wait(WRITE, HZ/10); if (cz - cz->zone_pgdat->node_zones < ZONE_HIGHMEM) { @@ -976,8 +986,10 @@ static int balance_pgdat(pg_data_t *pgda } if (all_zones_ok) break; - if (to_free > 0) + if (to_free > 0) { + shrink_pagetable_cache(GFP_HIGHUSER); blk_congestion_wait(WRITE, HZ/10); + } } for (i = 0; i < pgdat->nr_zones; i++) { diff -prauN linux-2.6.0-test5/net/802/p8022.c wli-2.6.0-test5-bk12-25/net/802/p8022.c --- linux-2.6.0-test5/net/802/p8022.c 2003-09-08 12:49:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/802/p8022.c 2003-09-25 19:16:15.000000000 -0700 @@ -22,8 +22,8 @@ #include #include #include +#include #include -#include static int p8022_request(struct datalink_proto *dl, struct sk_buff *skb, unsigned char *dest) diff -prauN linux-2.6.0-test5/net/802/psnap.c wli-2.6.0-test5-bk12-25/net/802/psnap.c --- linux-2.6.0-test5/net/802/psnap.c 2003-09-08 12:50:43.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/802/psnap.c 2003-09-25 19:16:15.000000000 -0700 @@ -15,9 +15,8 @@ #include #include #include +#include #include -#include -#include #include #include #include diff -prauN linux-2.6.0-test5/net/802/tr.c wli-2.6.0-test5-bk12-25/net/802/tr.c --- linux-2.6.0-test5/net/802/tr.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/802/tr.c 2003-09-25 19:16:15.000000000 -0700 @@ -464,8 +464,6 @@ static void rif_check_expire(unsigned lo */ #ifdef CONFIG_PROC_FS -/* Magic token to indicate first entry (header line) */ -#define RIF_PROC_START ((void *)1) static struct rif_cache_s *rif_get_idx(loff_t pos) { @@ -487,7 +485,7 @@ static void *rif_seq_start(struct seq_fi { spin_lock_bh(&rif_lock); - return *pos ? rif_get_idx(*pos - 1) : RIF_PROC_START; + return *pos ? rif_get_idx(*pos - 1) : SEQ_START_TOKEN; } static void *rif_seq_next(struct seq_file *seq, void *v, loff_t *pos) @@ -497,7 +495,7 @@ static void *rif_seq_next(struct seq_fil ++*pos; - if (v == RIF_PROC_START) { + if (v == SEQ_START_TOKEN) { i = -1; goto scan; } @@ -524,7 +522,7 @@ static int rif_seq_show(struct seq_file int j, rcf_len, segment, brdgnmb; struct rif_cache_s *entry = v; - if (v == RIF_PROC_START) + if (v == SEQ_START_TOKEN) seq_puts(seq, "if TR address TTL rcf routing segments\n"); else { diff -prauN linux-2.6.0-test5/net/8021q/vlanproc.c wli-2.6.0-test5-bk12-25/net/8021q/vlanproc.c --- linux-2.6.0-test5/net/8021q/vlanproc.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/8021q/vlanproc.c 2003-09-25 19:16:15.000000000 -0700 @@ -46,10 +46,6 @@ static void *vlan_seq_next(struct seq_fi static void vlan_seq_stop(struct seq_file *seq, void *); static int vlandev_seq_show(struct seq_file *seq, void *v); -/* Miscellaneous */ -#define SEQ_START_TOKEN ((void *) 1) - - /* * Global Data */ diff -prauN linux-2.6.0-test5/net/Kconfig wli-2.6.0-test5-bk12-25/net/Kconfig --- linux-2.6.0-test5/net/Kconfig 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/Kconfig 2003-09-25 19:16:15.000000000 -0700 @@ -31,12 +31,9 @@ config PACKET protocol implemented in the kernel, e.g. tcpdump. If you want them to work, choose Y. - This driver is also available as a module called af_packet ( = - code which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read ; if you use modprobe - or kmod, you may also want to add "alias net-pf-17 af_packet" to - /etc/modules.conf. + To compile this driver as a module, choose M here: the module will + be called af_packet. If you use modprobe or kmod, you may also + want to add "alias net-pf-17 af_packet" to /etc/modules.conf. If unsure, say Y. @@ -69,10 +66,7 @@ config UNIX an embedded system or something similar, you therefore definitely want to say Y here. - However, the socket support is also available as a module ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . The module will be + To compile this driver as a module, choose M here: the module will be called unix. If you try building this as a module and you have said Y to "Kernel module loader support" above, be sure to add 'alias net-pf-1 unix' to your /etc/modules.conf file. Note that @@ -140,10 +134,8 @@ config IPV6 given in . You will still be able to do regular IPv4 networking as well. - This protocol support is also available as a module ( = code which - can be inserted in and removed from the running kernel whenever you - want). The module will be called ipv6. If you want to compile it - as a module, say M here and read . + To compile this protocol support as a module, choose M here: the + module will be called ipv6. It is safe to say N here for now. @@ -197,9 +189,7 @@ config BRIDGE Enabling arptables support when bridging will let arptables see bridged ARP traffic in the arptables FORWARD chain. - If you want to compile this code as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module + To compile this code as a module, choose M here: the module will be called bridge. If unsure, say N. @@ -370,24 +360,11 @@ config ATM_BR2684_IPFILTER config VLAN_8021Q tristate "802.1Q VLAN Support" -config LLC - tristate "ANSI/IEEE 802.2 - aka LLC (IPX, Appletalk, Token Ring)" - help - This is a Logical Link Layer protocol used for Appletalk, IPX, - Token Ring devices, the linux-sna.org project and in the future by - NetBEUI. It originally came from Procom Inc. that released the code - for 2.0.36 and was heavily modified to work with 2.{4,5}. - Select this if you want to have support for those protocols or if - you want to have the sockets interface for LLC. - - -config LLC_UI - bool "LLC sockets interface" - depends on LLC +source "net/llc/Kconfig" config IPX tristate "The IPX protocol" - depends on LLC + select LLC ---help--- This is support for the Novell networking protocol, IPX, commonly used for local networks of Windows machines. You need it if you @@ -413,18 +390,16 @@ config IPX General information about how to connect Linux, Windows machines and Macs is on the WWW at . - The IPX driver would enlarge your kernel by about 16 KB. This driver - is also available as a module ( = code which can be inserted in and - removed from the running kernel whenever you want). The module will - be called ipx. If you want to compile it as a module, say M here - and read . Unless you want to - integrate your Linux box with a local Novell network, say N. + The IPX driver would enlarge your kernel by about 16 KB. To compile + this driver as a module, choose M here: the module will be called ipx. + Unless you want to integrate your Linux box with a local Novell + network, say N. source "net/ipx/Kconfig" config ATALK tristate "Appletalk protocol support" - depends on LLC + select LLC ---help--- AppleTalk is the protocol that Apple computers can use to communicate on a network. If your Linux box is connected to such a network and you @@ -443,14 +418,11 @@ config ATALK , contains valuable information as well. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module is called appletalk. If you want to compile it as a - module, say M here and read . You - almost certainly want to compile it as a module so you can restart - your AppleTalk stack without rebooting your machine. I hear that - the GNU boycott of Apple is over, so even politically correct people - are allowed to say Y here. + To compile this driver as a module, choose M here: the module will be + called appletalk. You almost certainly want to compile it as a + module so you can restart your AppleTalk stack without rebooting + your machine. I hear that the GNU boycott of Apple is over, so + even politically correct people are allowed to say Y here. source "drivers/net/appletalk/Kconfig" @@ -479,13 +451,10 @@ config X25 using the X.21 protocol (not yet supported by Linux) or one can do X.25 over a standard telephone line using an ordinary modem (say Y to "X.25 async driver" below) or over Ethernet using an ordinary - Ethernet card and either the 802.2 LLC protocol (say Y to "802.2 - LLC" below) or LAPB over Ethernet (say Y to "LAPB Data Link Driver" - and "LAPB over Ethernet driver" below). - - If you want to compile this driver as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read . The module + Ethernet card and the LAPB over Ethernet (say Y to "LAPB Data Link + Driver" and "LAPB over Ethernet driver" below). + + To compile this driver as a module, choose M here: the module will be called x25. If unsure, say N. config LAPB @@ -504,9 +473,7 @@ config LAPB for technical details. - If you want to compile this driver as a module though ( = code which - can be inserted in and removed from the running kernel whenever you - want), say M here and read . The + To compile this driver as a module, choose M here: the module will be called lapb. If unsure, say N. config NET_DIVERT @@ -550,10 +517,8 @@ config ECONET to send Econet/AUN traffic over a UDP Ethernet connection or over a native Econet network card. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called econet. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the module + will be called econet. config ECONET_AUNUDP bool "AUN over UDP" @@ -591,10 +556,8 @@ config WAN_ROUTER Read for more information. - The WAN routing support is also available as a module called - wanrouter ( = code which can be inserted in and removed from the - running kernel whenever you want). If you want to compile it as a - module, say M here and read . + To compile WAN routing support as a module, choose M here: the + module will be called wanrouter. If unsure, say N. @@ -692,10 +655,8 @@ config NET_PKTGEN Documentation on how to use the packet generaor can be found at . - This code is also available as a module called pktgen ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this code as a module, choose M here: the + module will be called pktgen. endmenu diff -prauN linux-2.6.0-test5/net/appletalk/aarp.c wli-2.6.0-test5-bk12-25/net/appletalk/aarp.c --- linux-2.6.0-test5/net/appletalk/aarp.c 2003-09-08 12:50:32.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/appletalk/aarp.c 2003-09-25 19:16:15.000000000 -0700 @@ -941,7 +941,7 @@ static void *aarp_seq_start(struct seq_f iter->table = resolved; iter->bucket = 0; - return *pos ? iter_next(iter, pos) : ((void *)1); + return *pos ? iter_next(iter, pos) : SEQ_START_TOKEN; } static void *aarp_seq_next(struct seq_file *seq, void *v, loff_t *pos) @@ -952,7 +952,7 @@ static void *aarp_seq_next(struct seq_fi ++*pos; /* first line after header */ - if (v == ((void *)1)) + if (v == SEQ_START_TOKEN) entry = iter_next(iter, NULL); /* next entry in current bucket */ @@ -987,7 +987,7 @@ static int aarp_seq_show(struct seq_file struct aarp_entry *entry = v; unsigned long now = jiffies; - if (v == ((void *)1)) + if (v == SEQ_START_TOKEN) seq_puts(seq, "Address Interface Hardware Address" " Expires LastSend Retry Status\n"); diff -prauN linux-2.6.0-test5/net/appletalk/atalk_proc.c wli-2.6.0-test5-bk12-25/net/appletalk/atalk_proc.c --- linux-2.6.0-test5/net/appletalk/atalk_proc.c 2003-09-08 12:50:23.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/appletalk/atalk_proc.c 2003-09-25 19:16:15.000000000 -0700 @@ -33,7 +33,7 @@ static void *atalk_seq_interface_start(s loff_t l = *pos; read_lock_bh(&atalk_interfaces_lock); - return l ? atalk_get_interface_idx(--l) : (void *)1; + return l ? atalk_get_interface_idx(--l) : SEQ_START_TOKEN; } static void *atalk_seq_interface_next(struct seq_file *seq, void *v, loff_t *pos) @@ -41,7 +41,7 @@ static void *atalk_seq_interface_next(st struct atalk_iface *i; ++*pos; - if (v == (void *)1) { + if (v == SEQ_START_TOKEN) { i = NULL; if (atalk_interfaces) i = atalk_interfaces; @@ -62,7 +62,7 @@ static int atalk_seq_interface_show(stru { struct atalk_iface *iface; - if (v == (void *)1) { + if (v == SEQ_START_TOKEN) { seq_puts(seq, "Interface Address Networks " "Status\n"); goto out; @@ -92,7 +92,7 @@ static void *atalk_seq_route_start(struc loff_t l = *pos; read_lock_bh(&atalk_routes_lock); - return l ? atalk_get_route_idx(--l) : (void *)1; + return l ? atalk_get_route_idx(--l) : SEQ_START_TOKEN; } static void *atalk_seq_route_next(struct seq_file *seq, void *v, loff_t *pos) @@ -100,7 +100,7 @@ static void *atalk_seq_route_next(struct struct atalk_route *r; ++*pos; - if (v == (void *)1) { + if (v == SEQ_START_TOKEN) { r = NULL; if (atalk_routes) r = atalk_routes; @@ -121,7 +121,7 @@ static int atalk_seq_route_show(struct s { struct atalk_route *rt; - if (v == (void *)1) { + if (v == SEQ_START_TOKEN) { seq_puts(seq, "Target Router Flags Dev\n"); goto out; } @@ -160,7 +160,7 @@ static void *atalk_seq_socket_start(stru loff_t l = *pos; read_lock_bh(&atalk_sockets_lock); - return l ? atalk_get_socket_idx(--l) : (void *)1; + return l ? atalk_get_socket_idx(--l) : SEQ_START_TOKEN; } static void *atalk_seq_socket_next(struct seq_file *seq, void *v, loff_t *pos) @@ -168,7 +168,7 @@ static void *atalk_seq_socket_next(struc struct sock *i; ++*pos; - if (v == (void *)1) { + if (v == SEQ_START_TOKEN) { i = sk_head(&atalk_sockets); goto out; } @@ -187,7 +187,7 @@ static int atalk_seq_socket_show(struct struct sock *s; struct atalk_sock *at; - if (v == (void *)1) { + if (v == SEQ_START_TOKEN) { seq_printf(seq, "Type Local_addr Remote_addr Tx_queue " "Rx_queue St UID\n"); goto out; diff -prauN linux-2.6.0-test5/net/atm/br2684.c wli-2.6.0-test5-bk12-25/net/atm/br2684.c --- linux-2.6.0-test5/net/atm/br2684.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/atm/br2684.c 2003-09-25 19:16:15.000000000 -0700 @@ -732,9 +732,10 @@ static int br2684_seq_show(struct seq_fi #ifdef CONFIG_ATM_BR2684_IPFILTER #define b1(var, byte) ((u8 *) &brvcc->filter.var)[byte] #define bs(var) b1(var, 0), b1(var, 1), b1(var, 2), b1(var, 3) - if (brvcc->filter.netmask != 0 && pos-- == 0) - return sprintf(buf, " filter=%d.%d.%d.%d/" - "%d.%d.%d.%d\n", bs(prefix), bs(netmask)); + if (brvcc->filter.netmask != 0) + seq_printf(seq, " filter=%d.%d.%d.%d/" + "%d.%d.%d.%d\n", + bs(prefix), bs(netmask)); #undef bs #undef b1 #endif /* CONFIG_ATM_BR2684_IPFILTER */ diff -prauN linux-2.6.0-test5/net/atm/clip.c wli-2.6.0-test5-bk12-25/net/atm/clip.c --- linux-2.6.0-test5/net/atm/clip.c 2003-09-08 12:50:37.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/atm/clip.c 2003-09-25 19:16:15.000000000 -0700 @@ -93,6 +93,7 @@ static void unlink_clip_vcc(struct clip_ printk(KERN_CRIT "!clip_vcc->entry (clip_vcc %p)\n",clip_vcc); return; } + spin_lock_bh(&entry->neigh->dev->xmit_lock); /* block clip_start_xmit() */ entry->neigh->used = jiffies; for (walk = &entry->vccs; *walk; walk = &(*walk)->next) if (*walk == clip_vcc) { @@ -102,17 +103,20 @@ static void unlink_clip_vcc(struct clip_ clip_vcc->entry = NULL; if (clip_vcc->xoff) netif_wake_queue(entry->neigh->dev); - if (entry->vccs) return; + if (entry->vccs) + goto out; entry->expires = jiffies-1; /* force resolution or expiration */ error = neigh_update(entry->neigh,NULL,NUD_NONE,0,0); if (error) printk(KERN_CRIT "unlink_clip_vcc: " "neigh_update failed with %d\n",error); - return; + goto out; } printk(KERN_CRIT "ATMARP: unlink_clip_vcc failed (entry %p, vcc " "0x%p)\n",entry,clip_vcc); +out: + spin_unlock_bh(&entry->neigh->dev->xmit_lock); } @@ -189,6 +193,13 @@ static int clip_arp_rcv(struct sk_buff * return 0; } +static const unsigned char llc_oui[] = { + 0xaa, /* DSAP: non-ISO */ + 0xaa, /* SSAP: non-ISO */ + 0x03, /* Ctrl: Unnumbered Information Command PDU */ + 0x00, /* OUI: EtherType */ + 0x00, + 0x00 }; static void clip_push(struct atm_vcc *vcc,struct sk_buff *skb) { diff -prauN linux-2.6.0-test5/net/atm/ipcommon.c wli-2.6.0-test5-bk12-25/net/atm/ipcommon.c --- linux-2.6.0-test5/net/atm/ipcommon.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/atm/ipcommon.c 2003-09-25 19:16:15.000000000 -0700 @@ -22,15 +22,6 @@ #endif -const unsigned char llc_oui[] = { - 0xaa, /* DSAP: non-ISO */ - 0xaa, /* SSAP: non-ISO */ - 0x03, /* Ctrl: Unnumbered Information Command PDU */ - 0x00, /* OUI: EtherType */ - 0x00, - 0x00 }; - - /* * skb_migrate appends the list at "from" to "to", emptying "from" in the * process. skb_migrate is atomic with respect to all other skb operations on @@ -67,5 +58,4 @@ void skb_migrate(struct sk_buff_head *fr } -EXPORT_SYMBOL(llc_oui); EXPORT_SYMBOL(skb_migrate); diff -prauN linux-2.6.0-test5/net/atm/proc.c wli-2.6.0-test5-bk12-25/net/atm/proc.c --- linux-2.6.0-test5/net/atm/proc.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/atm/proc.c 2003-09-25 19:16:15.000000000 -0700 @@ -1,21 +1,13 @@ -/* net/atm/proc.c - ATM /proc interface */ - -/* Written 1995-2000 by Werner Almesberger, EPFL LRC/ICA */ - -/* - * The mechanism used here isn't designed for speed but rather for convenience - * of implementation. We only return one entry per read system call, so we can - * be reasonably sure not to overrun the page and race conditions may lead to - * the addition or omission of some lines but never to any corruption of a - * line's internal structure. +/* net/atm/proc.c - ATM /proc interface + * + * Written 1995-2000 by Werner Almesberger, EPFL LRC/ICA * - * Making the whole thing slightly more efficient is left as an exercise to the - * reader. (Suggestions: wrapper which loops to get several entries per system - * call; or make --left slightly more clever to avoid O(n^2) characteristics.) - * I find it fast enough on my unloaded 266 MHz Pentium 2 :-) + * seq_file api usage by romieu@fr.zoreil.com + * + * Evaluating the efficiency of the whole thing if left as an exercise to + * the reader. */ - #include #include /* for EXPORT_SYMBOL */ #include @@ -24,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -39,10 +32,8 @@ #include "common.h" /* atm_proc_init prototype */ #include "signaling.h" /* to get sigd - ugly too */ -#if defined(CONFIG_ATM_CLIP) || defined(CONFIG_ATM_CLIP_MODULE) #include #include "ipcommon.h" -#endif #if defined(CONFIG_ATM_LANE) || defined(CONFIG_ATM_LANE_MODULE) #include "lec.h" @@ -51,119 +42,202 @@ static ssize_t proc_dev_atm_read(struct file *file,char *buf,size_t count, loff_t *pos); -static ssize_t proc_spec_atm_read(struct file *file,char *buf,size_t count, - loff_t *pos); -static struct file_operations proc_dev_atm_operations = { +static struct file_operations proc_atm_dev_ops = { .owner = THIS_MODULE, .read = proc_dev_atm_read, }; -static struct file_operations proc_spec_atm_operations = { - .owner = THIS_MODULE, - .read = proc_spec_atm_read, -}; - -static void add_stats(char *buf,const char *aal, +static void add_stats(struct seq_file *seq, const char *aal, const struct k_atm_aal_stats *stats) { - sprintf(strchr(buf,0),"%s ( %d %d %d %d %d )",aal, + seq_printf(seq, "%s ( %d %d %d %d %d )", aal, atomic_read(&stats->tx),atomic_read(&stats->tx_err), atomic_read(&stats->rx),atomic_read(&stats->rx_err), atomic_read(&stats->rx_drop)); } - -static void atm_dev_info(const struct atm_dev *dev,char *buf) +static void atm_dev_info(struct seq_file *seq, const struct atm_dev *dev) { - int off,i; + int i; - off = sprintf(buf,"%3d %-8s",dev->number,dev->type); + seq_printf(seq, "%3d %-8s", dev->number, dev->type); for (i = 0; i < ESI_LEN; i++) - off += sprintf(buf+off,"%02x",dev->esi[i]); - strcat(buf," "); - add_stats(buf,"0",&dev->stats.aal0); - strcat(buf," "); - add_stats(buf,"5",&dev->stats.aal5); - sprintf(strchr(buf,0), "\t[%d]", atomic_read(&dev->refcnt)); - strcat(buf,"\n"); + seq_printf(seq, "%02x", dev->esi[i]); + seq_puts(seq, " "); + add_stats(seq, "0", &dev->stats.aal0); + seq_puts(seq, " "); + add_stats(seq, "5", &dev->stats.aal5); + seq_printf(seq, "\t[%d]", atomic_read(&dev->refcnt)); + seq_putc(seq, '\n'); } - #if defined(CONFIG_ATM_CLIP) || defined(CONFIG_ATM_CLIP_MODULE) - -static int svc_addr(char *buf,struct sockaddr_atmsvc *addr) +static void svc_addr(struct seq_file *seq, struct sockaddr_atmsvc *addr) { static int code[] = { 1,2,10,6,1,0 }; static int e164[] = { 1,8,4,6,1,0 }; - int *fields; - int len,i,j,pos; - len = 0; if (*addr->sas_addr.pub) { - strcpy(buf,addr->sas_addr.pub); - len = strlen(addr->sas_addr.pub); - buf += len; - if (*addr->sas_addr.prv) { - *buf++ = '+'; - len++; - } + seq_printf(seq, "%s", addr->sas_addr.pub); + if (*addr->sas_addr.prv) + seq_putc(seq, '+'); + } else if (!*addr->sas_addr.prv) { + seq_printf(seq, "%s", "(none)"); + return; } - else if (!*addr->sas_addr.prv) { - strcpy(buf,"(none)"); - return strlen(buf); - } if (*addr->sas_addr.prv) { - len += 44; - pos = 0; - fields = *addr->sas_addr.prv == ATM_AFI_E164 ? e164 : code; + unsigned char *prv = addr->sas_addr.prv; + int *fields; + int i, j; + + fields = *prv == ATM_AFI_E164 ? e164 : code; for (i = 0; fields[i]; i++) { - for (j = fields[i]; j; j--) { - sprintf(buf,"%02X",addr->sas_addr.prv[pos++]); - buf += 2; - } - if (fields[i+1]) *buf++ = '.'; + for (j = fields[i]; j; j--) + seq_printf(seq, "%02X", *prv++); + if (fields[i+1]) + seq_putc(seq, '.'); } } - return len; } - -static void atmarp_info(struct net_device *dev,struct atmarp_entry *entry, - struct clip_vcc *clip_vcc,char *buf) +static void atmarp_info(struct seq_file *seq, struct net_device *dev, + struct atmarp_entry *entry, struct clip_vcc *clip_vcc) { - unsigned char *ip; - int svc,off,ip_len; + char buf[17]; + int svc, off; svc = !clip_vcc || clip_vcc->vcc->sk->sk_family == AF_ATMSVC; - off = sprintf(buf,"%-6s%-4s%-4s%5ld ",dev->name,svc ? "SVC" : "PVC", + seq_printf(seq, "%-6s%-4s%-4s%5ld ", dev->name, svc ? "SVC" : "PVC", !clip_vcc || clip_vcc->encap ? "LLC" : "NULL", - (jiffies-(clip_vcc ? clip_vcc->last_use : entry->neigh->used))/ - HZ); - ip = (unsigned char *) &entry->ip; - ip_len = sprintf(buf+off,"%d.%d.%d.%d",ip[0],ip[1],ip[2],ip[3]); - off += ip_len; - while (ip_len++ < 16) buf[off++] = ' '; - if (!clip_vcc) + (jiffies-(clip_vcc ? clip_vcc->last_use : entry->neigh->used))/HZ); + + off = snprintf(buf, sizeof(buf) - 1, "%d.%d.%d.%d", NIPQUAD(entry->ip)); + while (off < 16) + buf[off++] = ' '; + buf[off] = '\0'; + seq_printf(seq, "%s", buf); + + if (!clip_vcc) { if (time_before(jiffies, entry->expires)) - strcpy(buf+off,"(resolving)\n"); - else sprintf(buf+off,"(expired, ref %d)\n", - atomic_read(&entry->neigh->refcnt)); - else if (!svc) - sprintf(buf+off,"%d.%d.%d\n",clip_vcc->vcc->dev->number, - clip_vcc->vcc->vpi,clip_vcc->vcc->vci); - else { - off += svc_addr(buf+off,&clip_vcc->vcc->remote); - strcpy(buf+off,"\n"); - } + seq_printf(seq, "(resolving)\n"); + else + seq_printf(seq, "(expired, ref %d)\n", + atomic_read(&entry->neigh->refcnt)); + } else if (!svc) { + seq_printf(seq, "%d.%d.%d\n", clip_vcc->vcc->dev->number, + clip_vcc->vcc->vpi, clip_vcc->vcc->vci); + } else { + svc_addr(seq, &clip_vcc->vcc->remote); + seq_putc(seq, '\n'); + } +} + +#endif /* CONFIG_ATM_CLIP */ + +struct vcc_state { + struct sock *sk; + int family; + int clip_info; +}; + +static inline int compare_family(struct sock *sk, int family) +{ + struct atm_vcc *vcc = atm_sk(sk); + + return !family || (vcc->sk->sk_family == family); } +static int __vcc_walk(struct sock **sock, int family, loff_t l) +{ + struct sock *sk = *sock; + if (sk == (void *)1) { + sk = hlist_empty(&vcc_sklist) ? NULL : __sk_head(&vcc_sklist); + l--; + } + for (; sk; sk = sk_next(sk)) { + l -= compare_family(sk, family); + if (l < 0) + goto out; + } + sk = (void *)1; +out: + *sock = sk; + return (l < 0); +} + +static inline void *vcc_walk(struct vcc_state *state, loff_t l) +{ + return __vcc_walk(&state->sk, state->family, l) ? + state : NULL; +} + +static int __vcc_seq_open(struct inode *inode, struct file *file, + int family, struct seq_operations *ops) +{ + struct vcc_state *state; + struct seq_file *seq; + int rc = -ENOMEM; + + state = kmalloc(sizeof(*state), GFP_KERNEL); + if (!state) + goto out; + + rc = seq_open(file, ops); + if (rc) + goto out_kfree; + + state->family = family; + state->clip_info = try_atm_clip_ops(); + + seq = file->private_data; + seq->private = state; +out: + return rc; +out_kfree: + kfree(state); + goto out; +} + +static int vcc_seq_release(struct inode *inode, struct file *file) +{ +#if defined(CONFIG_ATM_CLIP) || defined(CONFIG_ATM_CLIP_MODULE) + struct seq_file *seq = file->private_data; + struct vcc_state *state = seq->private; + + if (state->clip_info) + module_put(atm_clip_ops->owner); #endif + return seq_release_private(inode, file); +} +static void *vcc_seq_start(struct seq_file *seq, loff_t *pos) +{ + struct vcc_state *state = seq->private; + loff_t left = *pos; + + read_lock(&vcc_sklist_lock); + state->sk = (void *)1; + return left ? vcc_walk(state, left) : (void *)1; +} -static void pvc_info(struct atm_vcc *vcc, char *buf, int clip_info) +static void vcc_seq_stop(struct seq_file *seq, void *v) +{ + read_unlock(&vcc_sklist_lock); +} + +static void *vcc_seq_next(struct seq_file *seq, void *v, loff_t *pos) +{ + struct vcc_state *state = seq->private; + + v = vcc_walk(state, 1); + *pos += !!PTR_ERR(v); + return v; +} + +static void pvc_info(struct seq_file *seq, struct atm_vcc *vcc, int clip_info) { static const char *class_name[] = { "off","UBR","CBR","VBR","ABR" }; static const char *aal_name[] = { @@ -171,9 +245,8 @@ static void pvc_info(struct atm_vcc *vcc "???", "5", "???", "???", /* 4- 7 */ "???", "???", "???", "???", /* 8-11 */ "???", "0", "???", "???"}; /* 12-15 */ - int off; - off = sprintf(buf,"%3d %3d %5d %-3s %7d %-5s %7d %-6s", + seq_printf(seq, "%3d %3d %5d %-3s %7d %-5s %7d %-6s", vcc->dev->number,vcc->vpi,vcc->vci, vcc->qos.aal >= sizeof(aal_name)/sizeof(aal_name[0]) ? "err" : aal_name[vcc->qos.aal],vcc->qos.rxtp.min_pcr, @@ -185,18 +258,14 @@ static void pvc_info(struct atm_vcc *vcc struct net_device *dev; dev = clip_vcc->entry ? clip_vcc->entry->neigh->dev : NULL; - off += sprintf(buf+off,"CLIP, Itf:%s, Encap:", + seq_printf(seq, "CLIP, Itf:%s, Encap:", dev ? dev->name : "none?"); - if (clip_vcc->encap) - off += sprintf(buf+off,"LLC/SNAP"); - else - off += sprintf(buf+off,"None"); + seq_printf(seq, "%s", clip_vcc->encap ? "LLC/SNAP" : "None"); } #endif - strcpy(buf+off,"\n"); + seq_putc(seq, '\n'); } - static const char *vcc_state(struct atm_vcc *vcc) { static const char *map[] = { ATM_VS2TXT_MAP }; @@ -204,337 +273,592 @@ static const char *vcc_state(struct atm_ return map[ATM_VF2VS(vcc->flags)]; } - -static void vc_info(struct atm_vcc *vcc,char *buf) +static void vcc_info(struct seq_file *seq, struct atm_vcc *vcc) { - char *here; - - here = buf+sprintf(buf,"%p ",vcc); - if (!vcc->dev) here += sprintf(here,"Unassigned "); - else here += sprintf(here,"%3d %3d %5d ",vcc->dev->number,vcc->vpi, - vcc->vci); + seq_printf(seq, "%p ", vcc); + if (!vcc->dev) + seq_printf(seq, "Unassigned "); + else + seq_printf(seq, "%3d %3d %5d ", vcc->dev->number, vcc->vpi, + vcc->vci); switch (vcc->sk->sk_family) { case AF_ATMPVC: - here += sprintf(here,"PVC"); + seq_printf(seq, "PVC"); break; case AF_ATMSVC: - here += sprintf(here,"SVC"); + seq_printf(seq, "SVC"); break; default: - here += sprintf(here, "%3d", vcc->sk->sk_family); + seq_printf(seq, "%3d", vcc->sk->sk_family); } - here += sprintf(here," %04lx %5d %7d/%7d %7d/%7d\n",vcc->flags, - vcc->sk->sk_err, - atomic_read(&vcc->sk->sk_wmem_alloc), vcc->sk->sk_sndbuf, - atomic_read(&vcc->sk->sk_rmem_alloc), vcc->sk->sk_rcvbuf); + seq_printf(seq, " %04lx %5d %7d/%7d %7d/%7d\n", vcc->flags, vcc->sk->sk_err, + atomic_read(&vcc->sk->sk_wmem_alloc),vcc->sk->sk_sndbuf, + atomic_read(&vcc->sk->sk_rmem_alloc),vcc->sk->sk_rcvbuf); } - -static void svc_info(struct atm_vcc *vcc,char *buf) +static void svc_info(struct seq_file *seq, struct atm_vcc *vcc) { - char *here; - int i; - if (!vcc->dev) - sprintf(buf,sizeof(void *) == 4 ? "N/A@%p%10s" : "N/A@%p%2s", - vcc,""); - else sprintf(buf,"%3d %3d %5d ",vcc->dev->number,vcc->vpi, - vcc->vci); - here = strchr(buf,0); - here += sprintf(here,"%-10s ",vcc_state(vcc)); - here += sprintf(here,"%s%s",vcc->remote.sas_addr.pub, + seq_printf(seq, sizeof(void *) == 4 ? + "N/A@%p%10s" : "N/A@%p%2s", vcc, ""); + else + seq_printf(seq, "%3d %3d %5d ", + vcc->dev->number, vcc->vpi, vcc->vci); + seq_printf(seq, "%-10s ", vcc_state(vcc)); + seq_printf(seq, "%s%s", vcc->remote.sas_addr.pub, *vcc->remote.sas_addr.pub && *vcc->remote.sas_addr.prv ? "+" : ""); - if (*vcc->remote.sas_addr.prv) + if (*vcc->remote.sas_addr.prv) { + int i; + for (i = 0; i < ATM_ESA_LEN; i++) - here += sprintf(here,"%02x", - vcc->remote.sas_addr.prv[i]); - strcat(here,"\n"); + seq_printf(seq, "%02x", vcc->remote.sas_addr.prv[i]); + } + seq_putc(seq, '\n'); } - #if defined(CONFIG_ATM_LANE) || defined(CONFIG_ATM_LANE_MODULE) -static char* -lec_arp_get_status_string(unsigned char status) +static char* lec_arp_get_status_string(unsigned char status) { - switch(status) { - case ESI_UNKNOWN: - return "ESI_UNKNOWN "; - case ESI_ARP_PENDING: - return "ESI_ARP_PENDING "; - case ESI_VC_PENDING: - return "ESI_VC_PENDING "; - case ESI_FLUSH_PENDING: - return "ESI_FLUSH_PENDING "; - case ESI_FORWARD_DIRECT: - return "ESI_FORWARD_DIRECT"; - default: - return " "; - } + static char *lec_arp_status_string[] = { + "ESI_UNKNOWN ", + "ESI_ARP_PENDING ", + "ESI_VC_PENDING ", + " ", + "ESI_FLUSH_PENDING ", + "ESI_FORWARD_DIRECT", + "" + }; + + if (status > ESI_FORWARD_DIRECT) + status = ESI_FORWARD_DIRECT + 1; + return lec_arp_status_string[status]; } -static void -lec_info(struct lec_arp_table *entry, char *buf) +static void lec_info(struct seq_file *seq, struct lec_arp_table *entry) { - int j, offset=0; + int i; - for(j=0;jmac_addr[j]); - } - offset+=sprintf(buf+offset, " "); - for(j=0;jatm_addr[j]); - } - offset+=sprintf(buf+offset, " %s %4.4x", - lec_arp_get_status_string(entry->status), - entry->flags&0xffff); - if (entry->vcc) { - offset+=sprintf(buf+offset, "%3d %3d ", entry->vcc->vpi, - entry->vcc->vci); - } else - offset+=sprintf(buf+offset, " "); - if (entry->recv_vcc) { - offset+=sprintf(buf+offset, " %3d %3d", - entry->recv_vcc->vpi, entry->recv_vcc->vci); + for (i = 0; i < ETH_ALEN; i++) + seq_printf(seq, "%2.2x", entry->mac_addr[i] & 0xff); + seq_printf(seq, " "); + for (i = 0; i < ATM_ESA_LEN; i++) + seq_printf(seq, "%2.2x", entry->atm_addr[i] & 0xff); + seq_printf(seq, " %s %4.4x", lec_arp_get_status_string(entry->status), + entry->flags & 0xffff); + if (entry->vcc) + seq_printf(seq, "%3d %3d ", entry->vcc->vpi, entry->vcc->vci); + else + seq_printf(seq, " "); + if (entry->recv_vcc) { + seq_printf(seq, " %3d %3d", entry->recv_vcc->vpi, + entry->recv_vcc->vci); } - - sprintf(buf+offset,"\n"); + seq_putc(seq, '\n'); } -#endif +#endif /* CONFIG_ATM_LANE */ -static int atm_devices_info(loff_t pos,char *buf) +static int atm_dev_seq_show(struct seq_file *seq, void *v) { - struct atm_dev *dev; - struct list_head *p; - int left; + static char atm_dev_banner[] = + "Itf Type ESI/\"MAC\"addr " + "AAL(TX,err,RX,err,drop) ... [refcnt]\n"; + + if (v == (void *)1) + seq_puts(seq, atm_dev_banner); + else { + struct atm_dev *dev = list_entry(v, struct atm_dev, dev_list); - if (!pos) { - return sprintf(buf,"Itf Type ESI/\"MAC\"addr " - "AAL(TX,err,RX,err,drop) ... [refcnt]\n"); - } - left = pos-1; - spin_lock(&atm_dev_lock); - list_for_each(p, &atm_devs) { - dev = list_entry(p, struct atm_dev, dev_list); - if (left-- == 0) { - atm_dev_info(dev,buf); - spin_unlock(&atm_dev_lock); - return strlen(buf); - } + atm_dev_info(seq, dev); + } + return 0; +} + +static struct seq_operations atm_dev_seq_ops = { + .start = atm_dev_seq_start, + .next = atm_dev_seq_next, + .stop = atm_dev_seq_stop, + .show = atm_dev_seq_show, +}; + +static int atm_dev_seq_open(struct inode *inode, struct file *file) +{ + return seq_open(file, &atm_dev_seq_ops); +} + +static struct file_operations devices_seq_fops = { + .open = atm_dev_seq_open, + .read = seq_read, + .llseek = seq_lseek, + .release = seq_release, +}; + +static int pvc_seq_show(struct seq_file *seq, void *v) +{ + static char atm_pvc_banner[] = + "Itf VPI VCI AAL RX(PCR,Class) TX(PCR,Class)\n"; + + if (v == (void *)1) + seq_puts(seq, atm_pvc_banner); + else { + struct vcc_state *state = seq->private; + struct atm_vcc *vcc = atm_sk(state->sk); + + pvc_info(seq, vcc, state->clip_info); } - spin_unlock(&atm_dev_lock); return 0; } -/* - * FIXME: it isn't safe to walk the VCC list without turning off interrupts. - * What is really needed is some lock on the devices. Ditto for ATMARP. - */ +static struct seq_operations pvc_seq_ops = { + .start = vcc_seq_start, + .next = vcc_seq_next, + .stop = vcc_seq_stop, + .show = pvc_seq_show, +}; -static int atm_pvc_info(loff_t pos,char *buf) +static int pvc_seq_open(struct inode *inode, struct file *file) { - struct hlist_node *node; - struct sock *s; - struct atm_vcc *vcc; - int left, clip_info = 0; - - if (!pos) { - return sprintf(buf,"Itf VPI VCI AAL RX(PCR,Class) " - "TX(PCR,Class)\n"); + return __vcc_seq_open(inode, file, PF_ATMPVC, &pvc_seq_ops); +} + +static struct file_operations pvc_seq_fops = { + .open = pvc_seq_open, + .read = seq_read, + .llseek = seq_lseek, + .release = vcc_seq_release, +}; + +static int vcc_seq_show(struct seq_file *seq, void *v) +{ + if (v == (void *)1) { + seq_printf(seq, sizeof(void *) == 4 ? "%-8s%s" : "%-16s%s", + "Address ", "Itf VPI VCI Fam Flags Reply " + "Send buffer Recv buffer\n"); + } else { + struct vcc_state *state = seq->private; + struct atm_vcc *vcc = atm_sk(state->sk); + + vcc_info(seq, vcc); + } + return 0; +} + +static struct seq_operations vcc_seq_ops = { + .start = vcc_seq_start, + .next = vcc_seq_next, + .stop = vcc_seq_stop, + .show = vcc_seq_show, +}; + +static int vcc_seq_open(struct inode *inode, struct file *file) +{ + return __vcc_seq_open(inode, file, 0, &vcc_seq_ops); +} + +static struct file_operations vcc_seq_fops = { + .open = vcc_seq_open, + .read = seq_read, + .llseek = seq_lseek, + .release = vcc_seq_release, +}; + +static int svc_seq_show(struct seq_file *seq, void *v) +{ + static char atm_svc_banner[] = + "Itf VPI VCI State Remote\n"; + + if (v == (void *)1) + seq_puts(seq, atm_svc_banner); + else { + struct vcc_state *state = seq->private; + struct atm_vcc *vcc = atm_sk(state->sk); + + svc_info(seq, vcc); } - left = pos-1; -#if defined(CONFIG_ATM_CLIP) || defined(CONFIG_ATM_CLIP_MODULE) - if (try_atm_clip_ops()) - clip_info = 1; -#endif - read_lock(&vcc_sklist_lock); - sk_for_each(s, node, &vcc_sklist) { - vcc = atm_sk(s); - if (vcc->sk->sk_family == PF_ATMPVC && vcc->dev && !left--) { - pvc_info(vcc,buf,clip_info); - read_unlock(&vcc_sklist_lock); + return 0; +} + +static struct seq_operations svc_seq_ops = { + .start = vcc_seq_start, + .next = vcc_seq_next, + .stop = vcc_seq_stop, + .show = svc_seq_show, +}; + +static int svc_seq_open(struct inode *inode, struct file *file) +{ + return __vcc_seq_open(inode, file, PF_ATMSVC, &svc_seq_ops); +} + +static struct file_operations svc_seq_fops = { + .open = svc_seq_open, + .read = seq_read, + .llseek = seq_lseek, + .release = vcc_seq_release, +}; + #if defined(CONFIG_ATM_CLIP) || defined(CONFIG_ATM_CLIP_MODULE) - if (clip_info) - module_put(atm_clip_ops->owner); -#endif - return strlen(buf); - } + +struct arp_state { + int bucket; + struct neighbour *n; + struct clip_vcc *vcc; +}; + +static void *arp_vcc_walk(struct arp_state *state, + struct atmarp_entry *e, loff_t *l) +{ + struct clip_vcc *vcc = state->vcc; + + if (!vcc) + vcc = e->vccs; + if (vcc == (void *)1) { + vcc = e->vccs; + --*l; + } + for (; vcc; vcc = vcc->next) { + if (--*l < 0) + break; } - read_unlock(&vcc_sklist_lock); -#if defined(CONFIG_ATM_CLIP) || defined(CONFIG_ATM_CLIP_MODULE) - if (clip_info) - module_put(atm_clip_ops->owner); -#endif - return 0; + state->vcc = vcc; + return (*l < 0) ? state : NULL; } + +static void *arp_get_idx(struct arp_state *state, loff_t l) +{ + void *v = NULL; + for (; state->bucket <= NEIGH_HASHMASK; state->bucket++) { + for (; state->n; state->n = state->n->next) { + v = arp_vcc_walk(state, NEIGH2ENTRY(state->n), &l); + if (v) + goto done; + } + state->n = clip_tbl_hook->hash_buckets[state->bucket + 1]; + } +done: + return v; +} -static int atm_vc_info(loff_t pos,char *buf) +static void *arp_seq_start(struct seq_file *seq, loff_t *pos) { - struct atm_vcc *vcc; - struct hlist_node *node; - struct sock *s; - int left; - - if (!pos) - return sprintf(buf,sizeof(void *) == 4 ? "%-8s%s" : "%-16s%s", - "Address"," Itf VPI VCI Fam Flags Reply Send buffer" - " Recv buffer\n"); - left = pos-1; - read_lock(&vcc_sklist_lock); - sk_for_each(s, node, &vcc_sklist) { - vcc = atm_sk(s); - if (!left--) { - vc_info(vcc,buf); - read_unlock(&vcc_sklist_lock); - return strlen(buf); - } + struct arp_state *state = seq->private; + void *ret = (void *)1; + + if (!clip_tbl_hook) { + state->bucket = -1; + goto out; } - read_unlock(&vcc_sklist_lock); - return 0; + read_lock_bh(&clip_tbl_hook->lock); + state->bucket = 0; + state->n = clip_tbl_hook->hash_buckets[0]; + state->vcc = (void *)1; + if (*pos) + ret = arp_get_idx(state, *pos); +out: + return ret; } +static void arp_seq_stop(struct seq_file *seq, void *v) +{ + struct arp_state *state = seq->private; -static int atm_svc_info(loff_t pos,char *buf) + if (state->bucket != -1) + read_unlock_bh(&clip_tbl_hook->lock); +} + +static void *arp_seq_next(struct seq_file *seq, void *v, loff_t *pos) { - struct hlist_node *node; - struct sock *s; - struct atm_vcc *vcc; - int left; - - if (!pos) - return sprintf(buf,"Itf VPI VCI State Remote\n"); - left = pos-1; - read_lock(&vcc_sklist_lock); - sk_for_each(s, node, &vcc_sklist) { - vcc = atm_sk(s); - if (vcc->sk->sk_family == PF_ATMSVC && !left--) { - svc_info(vcc,buf); - read_unlock(&vcc_sklist_lock); - return strlen(buf); - } - } - read_unlock(&vcc_sklist_lock); + struct arp_state *state = seq->private; - return 0; + v = arp_get_idx(state, 1); + *pos += !!PTR_ERR(v); + return v; } -#if defined(CONFIG_ATM_CLIP) || defined(CONFIG_ATM_CLIP_MODULE) -static int atm_arp_info(loff_t pos,char *buf) +static int arp_seq_show(struct seq_file *seq, void *v) { - struct neighbour *n; - int i,count; + static char atm_arp_banner[] = + "IPitf TypeEncp Idle IP address ATM address\n"; + + if (v == (void *)1) + seq_puts(seq, atm_arp_banner); + else { + struct arp_state *state = seq->private; + struct neighbour *n = state->n; + struct clip_vcc *vcc = state->vcc; - if (!pos) { - return sprintf(buf,"IPitf TypeEncp Idle IP address " - "ATM address\n"); + atmarp_info(seq, n->dev, NEIGH2ENTRY(n), vcc); } + return 0; +} + +static struct seq_operations arp_seq_ops = { + .start = arp_seq_start, + .next = arp_seq_next, + .stop = arp_seq_stop, + .show = arp_seq_show, +}; + +static int arp_seq_open(struct inode *inode, struct file *file) +{ + struct arp_state *state; + struct seq_file *seq; + int rc = -EAGAIN; + if (!try_atm_clip_ops()) - return 0; - count = pos; - read_lock_bh(&clip_tbl_hook->lock); - for (i = 0; i <= NEIGH_HASHMASK; i++) - for (n = clip_tbl_hook->hash_buckets[i]; n; n = n->next) { - struct atmarp_entry *entry = NEIGH2ENTRY(n); - struct clip_vcc *vcc; - - if (!entry->vccs) { - if (--count) continue; - atmarp_info(n->dev,entry,NULL,buf); - read_unlock_bh(&clip_tbl_hook->lock); - module_put(atm_clip_ops->owner); - return strlen(buf); - } - for (vcc = entry->vccs; vcc; - vcc = vcc->next) { - if (--count) continue; - atmarp_info(n->dev,entry,vcc,buf); - read_unlock_bh(&clip_tbl_hook->lock); - module_put(atm_clip_ops->owner); - return strlen(buf); - } - } - read_unlock_bh(&clip_tbl_hook->lock); + goto out; + + state = kmalloc(sizeof(*state), GFP_KERNEL); + if (!state) { + rc = -ENOMEM; + goto out_put; + } + + rc = seq_open(file, &arp_seq_ops); + if (rc) + goto out_kfree; + + seq = file->private_data; + seq->private = state; +out: + return rc; + +out_put: module_put(atm_clip_ops->owner); - return 0; +out_kfree: + kfree(state); + goto out; } -#endif -#if defined(CONFIG_ATM_LANE) || defined(CONFIG_ATM_LANE_MODULE) -static int atm_lec_info(loff_t pos,char *buf) +static int arp_seq_release(struct inode *inode, struct file *file) { + module_put(atm_clip_ops->owner); + return seq_release_private(inode, file); +} + +static struct file_operations arp_seq_fops = { + .open = arp_seq_open, + .read = seq_read, + .llseek = seq_lseek, + .release = arp_seq_release, +}; + +#endif /* CONFIG_ATM_CLIP */ + +#if defined(CONFIG_ATM_LANE) || defined(CONFIG_ATM_LANE_MODULE) + +struct lec_state { unsigned long flags; - struct lec_priv *priv; + struct lec_priv *locked; struct lec_arp_table *entry; - int i, count, d, e; struct net_device *dev; + int itf; + int arp_table; + int misc_table; +}; + +static void *lec_tbl_walk(struct lec_state *state, struct lec_arp_table *tbl, + loff_t *l) +{ + struct lec_arp_table *e = state->entry; - if (!pos) { - return sprintf(buf,"Itf MAC ATM destination" - " Status Flags " - "VPI/VCI Recv VPI/VCI\n"); + if (!e) + e = tbl; + if (e == (void *)1) { + e = tbl; + --*l; } - if (!try_atm_lane_ops()) - return 0; /* the lane module is not there yet */ + for (; e; e = e->next) { + if (--*l < 0) + break; + } + state->entry = e; + return (*l < 0) ? state : NULL; +} - count = pos; - for(d = 0; d < MAX_LEC_ITF; d++) { - dev = atm_lane_ops->get_lec(d); - if (!dev || !(priv = (struct lec_priv *) dev->priv)) - continue; - spin_lock_irqsave(&priv->lec_arp_lock, flags); - for(i = 0; i < LEC_ARP_TABLE_SIZE; i++) { - for(entry = priv->lec_arp_tables[i]; entry; entry = entry->next) { - if (--count) - continue; - e = sprintf(buf,"%s ", dev->name); - lec_info(entry, buf+e); - spin_unlock_irqrestore(&priv->lec_arp_lock, flags); - dev_put(dev); - module_put(atm_lane_ops->owner); - return strlen(buf); - } - } - for(entry = priv->lec_arp_empty_ones; entry; entry = entry->next) { - if (--count) - continue; - e = sprintf(buf,"%s ", dev->name); - lec_info(entry, buf+e); - spin_unlock_irqrestore(&priv->lec_arp_lock, flags); - dev_put(dev); - module_put(atm_lane_ops->owner); - return strlen(buf); - } - for(entry = priv->lec_no_forward; entry; entry=entry->next) { - if (--count) - continue; - e = sprintf(buf,"%s ", dev->name); - lec_info(entry, buf+e); - spin_unlock_irqrestore(&priv->lec_arp_lock, flags); - dev_put(dev); - module_put(atm_lane_ops->owner); - return strlen(buf); - } - for(entry = priv->mcast_fwds; entry; entry = entry->next) { - if (--count) - continue; - e = sprintf(buf,"%s ", dev->name); - lec_info(entry, buf+e); - spin_unlock_irqrestore(&priv->lec_arp_lock, flags); - dev_put(dev); - module_put(atm_lane_ops->owner); - return strlen(buf); - } - spin_unlock_irqrestore(&priv->lec_arp_lock, flags); +static void *lec_arp_walk(struct lec_state *state, loff_t *l, + struct lec_priv *priv) +{ + void *v = NULL; + int p; + + for (p = state->arp_table; p < LEC_ARP_TABLE_SIZE; p++) { + v = lec_tbl_walk(state, priv->lec_arp_tables[p], l); + if (v) + break; + } + state->arp_table = p; + return v; +} + +static void *lec_misc_walk(struct lec_state *state, loff_t *l, + struct lec_priv *priv) +{ + struct lec_arp_table *lec_misc_tables[] = { + priv->lec_arp_empty_ones, + priv->lec_no_forward, + priv->mcast_fwds + }; + void *v = NULL; + int q; + + for (q = state->misc_table; q < ARRAY_SIZE(lec_misc_tables); q++) { + v = lec_tbl_walk(state, lec_misc_tables[q], l); + if (v) + break; + } + state->misc_table = q; + return v; +} + +static void *lec_priv_walk(struct lec_state *state, loff_t *l, + struct lec_priv *priv) +{ + if (!state->locked) { + state->locked = priv; + spin_lock_irqsave(&priv->lec_arp_lock, state->flags); + } + if (!lec_arp_walk(state, l, priv) && + !lec_misc_walk(state, l, priv)) { + spin_unlock_irqrestore(&priv->lec_arp_lock, state->flags); + state->locked = NULL; + /* Partial state reset for the next time we get called */ + state->arp_table = state->misc_table = 0; + } + return state->locked; +} + +static void *lec_itf_walk(struct lec_state *state, loff_t *l) +{ + struct net_device *dev; + void *v; + + dev = state->dev ? state->dev : atm_lane_ops->get_lec(state->itf); + v = (dev && dev->priv) ? lec_priv_walk(state, l, dev->priv) : NULL; + if (!v && dev) { dev_put(dev); + /* Partial state reset for the next time we get called */ + dev = NULL; + } + state->dev = dev; + return v; +} + +static void *lec_get_idx(struct lec_state *state, loff_t l) +{ + void *v = NULL; + + for (; state->itf < MAX_LEC_ITF; state->itf++) { + v = lec_itf_walk(state, &l); + if (v) + break; + } + return v; +} + +static void *lec_seq_start(struct seq_file *seq, loff_t *pos) +{ + struct lec_state *state = seq->private; + + state->itf = 0; + state->dev = NULL; + state->locked = NULL; + state->arp_table = 0; + state->misc_table = 0; + state->entry = (void *)1; + + return *pos ? lec_get_idx(state, *pos) : (void*)1; +} + +static void lec_seq_stop(struct seq_file *seq, void *v) +{ + struct lec_state *state = seq->private; + + if (state->dev) { + spin_unlock_irqrestore(&state->locked->lec_arp_lock, + state->flags); + dev_put(state->dev); + } +} + +static void *lec_seq_next(struct seq_file *seq, void *v, loff_t *pos) +{ + struct lec_state *state = seq->private; + + v = lec_get_idx(state, 1); + *pos += !!PTR_ERR(v); + return v; +} + +static int lec_seq_show(struct seq_file *seq, void *v) +{ + static char lec_banner[] = "Itf MAC ATM destination" + " Status Flags " + "VPI/VCI Recv VPI/VCI\n"; + + if (v == (void *)1) + seq_puts(seq, lec_banner); + else { + struct lec_state *state = seq->private; + struct net_device *dev = state->dev; + + seq_printf(seq, "%s ", dev->name); + lec_info(seq, state->entry); } - module_put(atm_lane_ops->owner); return 0; } -#endif +static struct seq_operations lec_seq_ops = { + .start = lec_seq_start, + .next = lec_seq_next, + .stop = lec_seq_stop, + .show = lec_seq_show, +}; + +static int lec_seq_open(struct inode *inode, struct file *file) +{ + struct lec_state *state; + struct seq_file *seq; + int rc = -EAGAIN; + + if (!try_atm_lane_ops()) + goto out; + + state = kmalloc(sizeof(*state), GFP_KERNEL); + if (!state) { + rc = -ENOMEM; + goto out; + } + + rc = seq_open(file, &lec_seq_ops); + if (rc) + goto out_kfree; + seq = file->private_data; + seq->private = state; +out: + return rc; +out_kfree: + kfree(state); + goto out; +} + +static int lec_seq_release(struct inode *inode, struct file *file) +{ + module_put(atm_lane_ops->owner); + return seq_release_private(inode, file); +} + +static struct file_operations lec_seq_fops = { + .open = lec_seq_open, + .read = seq_read, + .llseek = seq_lseek, + .release = lec_seq_release, +}; + +#endif /* CONFIG_ATM_LANE */ static ssize_t proc_dev_atm_read(struct file *file,char *buf,size_t count, loff_t *pos) @@ -562,28 +886,6 @@ static ssize_t proc_dev_atm_read(struct } -static ssize_t proc_spec_atm_read(struct file *file,char *buf,size_t count, - loff_t *pos) -{ - unsigned long page; - int length; - int (*info)(loff_t,char *); - info = PDE(file->f_dentry->d_inode)->data; - - if (count == 0) return 0; - page = get_zeroed_page(GFP_KERNEL); - if (!page) return -ENOMEM; - length = (*info)(*pos,(char *) page); - if (length > count) length = -EINVAL; - if (length >= 0) { - if (copy_to_user(buf,(char *) page,length)) length = -EFAULT; - (*pos)++; - } - free_page(page); - return length; -} - - struct proc_dir_entry *atm_proc_root; EXPORT_SYMBOL(atm_proc_root); @@ -604,19 +906,19 @@ int atm_proc_dev_register(struct atm_dev dev->proc_name = kmalloc(strlen(dev->type) + digits + 2, GFP_KERNEL); if (!dev->proc_name) - goto fail1; + goto err_out; sprintf(dev->proc_name,"%s:%d",dev->type, dev->number); dev->proc_entry = create_proc_entry(dev->proc_name, 0, atm_proc_root); if (!dev->proc_entry) - goto fail0; + goto err_free_name; dev->proc_entry->data = dev; - dev->proc_entry->proc_fops = &proc_dev_atm_operations; + dev->proc_entry->proc_fops = &proc_atm_dev_ops; dev->proc_entry->owner = THIS_MODULE; return 0; -fail0: +err_free_name: kfree(dev->proc_name); -fail1: +err_out: return error; } @@ -630,57 +932,65 @@ void atm_proc_dev_deregister(struct atm_ kfree(dev->proc_name); } +static struct atm_proc_entry { + char *name; + struct file_operations *proc_fops; + struct proc_dir_entry *dirent; +} atm_proc_ents[] = { + { .name = "devices", .proc_fops = &devices_seq_fops }, + { .name = "pvc", .proc_fops = &pvc_seq_fops }, + { .name = "svc", .proc_fops = &svc_seq_fops }, + { .name = "vc", .proc_fops = &vcc_seq_fops }, +#if defined(CONFIG_ATM_CLIP) || defined(CONFIG_ATM_CLIP_MODULE) + { .name = "arp", .proc_fops = &arp_seq_fops }, +#endif +#if defined(CONFIG_ATM_LANE) || defined(CONFIG_ATM_LANE_MODULE) + { .name = "lec", .proc_fops = &lec_seq_fops }, +#endif + { .name = NULL, .proc_fops = NULL } +}; + +static void atm_proc_dirs_remove(void) +{ + static struct atm_proc_entry *e; -#define CREATE_ENTRY(name) \ - name = create_proc_entry(#name,0,atm_proc_root); \ - if (!name) goto cleanup; \ - name->data = atm_##name##_info; \ - name->proc_fops = &proc_spec_atm_operations; \ - name->owner = THIS_MODULE - -static struct proc_dir_entry *devices = NULL, *pvc = NULL, - *svc = NULL, *arp = NULL, *lec = NULL, *vc = NULL; - -static void atm_proc_cleanup(void) -{ - if (devices) - remove_proc_entry("devices",atm_proc_root); - if (pvc) - remove_proc_entry("pvc",atm_proc_root); - if (svc) - remove_proc_entry("svc",atm_proc_root); - if (arp) - remove_proc_entry("arp",atm_proc_root); - if (lec) - remove_proc_entry("lec",atm_proc_root); - if (vc) - remove_proc_entry("vc",atm_proc_root); - remove_proc_entry("net/atm",NULL); + for (e = atm_proc_ents; e->name; e++) { + if (e->dirent) + remove_proc_entry(e->name, atm_proc_root); + } + remove_proc_entry("net/atm", NULL); } int __init atm_proc_init(void) { + static struct atm_proc_entry *e; + int ret; + atm_proc_root = proc_mkdir("net/atm",NULL); if (!atm_proc_root) - return -ENOMEM; - CREATE_ENTRY(devices); - CREATE_ENTRY(pvc); - CREATE_ENTRY(svc); - CREATE_ENTRY(vc); -#if defined(CONFIG_ATM_CLIP) || defined(CONFIG_ATM_CLIP_MODULE) - CREATE_ENTRY(arp); -#endif -#if defined(CONFIG_ATM_LANE) || defined(CONFIG_ATM_LANE_MODULE) - CREATE_ENTRY(lec); -#endif - return 0; - -cleanup: - atm_proc_cleanup(); - return -ENOMEM; + goto err_out; + for (e = atm_proc_ents; e->name; e++) { + struct proc_dir_entry *dirent; + + dirent = create_proc_entry(e->name, S_IRUGO, atm_proc_root); + if (!dirent) + goto err_out_remove; + dirent->proc_fops = e->proc_fops; + dirent->owner = THIS_MODULE; + e->dirent = dirent; + } + ret = 0; +out: + return ret; + +err_out_remove: + atm_proc_dirs_remove(); +err_out: + ret = -ENOMEM; + goto out; } -void atm_proc_exit(void) +void __exit atm_proc_exit(void) { - atm_proc_cleanup(); + atm_proc_dirs_remove(); } diff -prauN linux-2.6.0-test5/net/atm/resources.c wli-2.6.0-test5-bk12-25/net/atm/resources.c --- linux-2.6.0-test5/net/atm/resources.c 2003-09-08 12:50:31.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/atm/resources.c 2003-09-25 19:16:15.000000000 -0700 @@ -30,7 +30,7 @@ static struct atm_dev *__alloc_atm_dev(c { struct atm_dev *dev; - dev = kmalloc(sizeof(*dev), GFP_ATOMIC); + dev = kmalloc(sizeof(*dev), GFP_KERNEL); if (!dev) return NULL; memset(dev, 0, sizeof(*dev)); @@ -395,6 +395,35 @@ done: return error; } +static __inline__ void *dev_get_idx(loff_t left) +{ + struct list_head *p; + + list_for_each(p, &atm_devs) { + if (!--left) + break; + } + return (p != &atm_devs) ? p : NULL; +} + +void *atm_dev_seq_start(struct seq_file *seq, loff_t *pos) +{ + spin_lock(&atm_dev_lock); + return *pos ? dev_get_idx(*pos) : (void *) 1; +} + +void atm_dev_seq_stop(struct seq_file *seq, void *v) +{ + spin_unlock(&atm_dev_lock); +} + +void *atm_dev_seq_next(struct seq_file *seq, void *v, loff_t *pos) +{ + ++*pos; + v = (v == (void *)1) ? atm_devs.next : ((struct list_head *)v)->next; + return (v == &atm_devs) ? NULL : v; +} + EXPORT_SYMBOL(atm_dev_register); EXPORT_SYMBOL(atm_dev_deregister); diff -prauN linux-2.6.0-test5/net/atm/resources.h wli-2.6.0-test5-bk12-25/net/atm/resources.h --- linux-2.6.0-test5/net/atm/resources.h 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/atm/resources.h 2003-09-25 19:16:15.000000000 -0700 @@ -21,6 +21,11 @@ int atm_dev_ioctl(unsigned int cmd, unsi #include +void *atm_dev_seq_start(struct seq_file *seq, loff_t *pos); +void atm_dev_seq_stop(struct seq_file *seq, void *v); +void *atm_dev_seq_next(struct seq_file *seq, void *v, loff_t *pos); + + int atm_proc_dev_register(struct atm_dev *dev); void atm_proc_dev_deregister(struct atm_dev *dev); diff -prauN linux-2.6.0-test5/net/ax25/Kconfig wli-2.6.0-test5-bk12-25/net/ax25/Kconfig --- linux-2.6.0-test5/net/ax25/Kconfig 2003-09-08 12:50:23.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ax25/Kconfig 2003-09-25 19:16:15.000000000 -0700 @@ -48,10 +48,8 @@ config AX25 general is on the WWW at . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called ax25. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called ax25. config AX25_DAMA_SLAVE bool "AX.25 DAMA Slave support" @@ -81,10 +79,8 @@ config NETROM information about digital amateur radio in general is on the WWW at . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called netrom. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called netrom. config ROSE tristate "Amateur Radio X.25 PLP (Rose)" @@ -102,10 +98,8 @@ config ROSE information about digital amateur radio in general is on the WWW at . - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called rose. If you want to compile it as a - module, say M here and read . + To compile this driver as a module, choose M here: the + module will be called rose. menu "AX.25 network device drivers" diff -prauN linux-2.6.0-test5/net/ax25/ax25_route.c wli-2.6.0-test5-bk12-25/net/ax25/ax25_route.c --- linux-2.6.0-test5/net/ax25/ax25_route.c 2003-09-08 12:50:16.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ax25/ax25_route.c 2003-09-25 19:16:15.000000000 -0700 @@ -281,8 +281,6 @@ int ax25_rt_ioctl(unsigned int cmd, void #ifdef CONFIG_PROC_FS -#define AX25_PROC_START ((void *)1) - static void *ax25_rt_seq_start(struct seq_file *seq, loff_t *pos) { struct ax25_route *ax25_rt; @@ -290,7 +288,7 @@ static void *ax25_rt_seq_start(struct se read_lock(&ax25_route_lock); if (*pos == 0) - return AX25_PROC_START; + return SEQ_START_TOKEN; for (ax25_rt = ax25_route_list; ax25_rt != NULL; ax25_rt = ax25_rt->next) { if (i == *pos) @@ -304,7 +302,7 @@ static void *ax25_rt_seq_start(struct se static void *ax25_rt_seq_next(struct seq_file *seq, void *v, loff_t *pos) { ++*pos; - return (v == AX25_PROC_START) ? ax25_route_list : + return (v == SEQ_START_TOKEN) ? ax25_route_list : ((struct ax25_route *) v)->next; } @@ -315,7 +313,7 @@ static void ax25_rt_seq_stop(struct seq_ static int ax25_rt_seq_show(struct seq_file *seq, void *v) { - if (v == AX25_PROC_START) + if (v == SEQ_START_TOKEN) seq_puts(seq, "callsign dev mode digipeaters\n"); else { struct ax25_route *ax25_rt = v; diff -prauN linux-2.6.0-test5/net/ax25/ax25_uid.c wli-2.6.0-test5-bk12-25/net/ax25/ax25_uid.c --- linux-2.6.0-test5/net/ax25/ax25_uid.c 2003-09-08 12:49:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ax25/ax25_uid.c 2003-09-25 19:16:15.000000000 -0700 @@ -144,8 +144,6 @@ int ax25_uid_ioctl(int cmd, struct socka #ifdef CONFIG_PROC_FS -#define AX25_PROC_START ((void *)1) - static void *ax25_uid_seq_start(struct seq_file *seq, loff_t *pos) { struct ax25_uid_assoc *pt; @@ -153,7 +151,7 @@ static void *ax25_uid_seq_start(struct s read_lock(&ax25_uid_lock); if (*pos == 0) - return AX25_PROC_START; + return SEQ_START_TOKEN; for (pt = ax25_uid_list; pt != NULL; pt = pt->next) { if (i == *pos) @@ -166,7 +164,7 @@ static void *ax25_uid_seq_start(struct s static void *ax25_uid_seq_next(struct seq_file *seq, void *v, loff_t *pos) { ++*pos; - return (v == AX25_PROC_START) ? ax25_uid_list : + return (v == SEQ_START_TOKEN) ? ax25_uid_list : ((struct ax25_uid_assoc *) v)->next; } @@ -177,7 +175,7 @@ static void ax25_uid_seq_stop(struct seq static int ax25_uid_seq_show(struct seq_file *seq, void *v) { - if (v == AX25_PROC_START) + if (v == SEQ_START_TOKEN) seq_printf(seq, "Policy: %d\n", ax25_uid_policy); else { struct ax25_uid_assoc *pt = v; diff -prauN linux-2.6.0-test5/net/bluetooth/af_bluetooth.c wli-2.6.0-test5-bk12-25/net/bluetooth/af_bluetooth.c --- linux-2.6.0-test5/net/bluetooth/af_bluetooth.c 2003-09-08 12:49:55.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/bluetooth/af_bluetooth.c 2003-09-25 19:16:15.000000000 -0700 @@ -27,7 +27,7 @@ * * $Id: af_bluetooth.c,v 1.3 2002/04/17 17:37:15 maxk Exp $ */ -#define VERSION "2.2" +#define VERSION "2.3" #include #include @@ -130,7 +130,6 @@ struct sock *bt_sock_alloc(struct socket } sock_init_data(sock, sk); - sk_set_owner(sk, THIS_MODULE); INIT_LIST_HEAD(&bt_sk(sk)->accept_q); sk->sk_zapped = 0; @@ -273,39 +272,35 @@ unsigned int bt_sock_poll(struct file * return mask; } -int bt_sock_w4_connect(struct sock *sk, int flags) +int bt_sock_wait_state(struct sock *sk, int state, unsigned long timeo) { DECLARE_WAITQUEUE(wait, current); - long timeo = sock_sndtimeo(sk, flags & O_NONBLOCK); int err = 0; BT_DBG("sk %p", sk); add_wait_queue(sk->sk_sleep, &wait); - while (sk->sk_state != BT_CONNECTED) { + while (sk->sk_state != state) { set_current_state(TASK_INTERRUPTIBLE); + if (!timeo) { err = -EAGAIN; break; } + if (signal_pending(current)) { + err = sock_intr_errno(timeo); + break; + } + release_sock(sk); timeo = schedule_timeout(timeo); lock_sock(sk); - err = 0; - if (sk->sk_state == BT_CONNECTED) - break; - if (sk->sk_err) { err = sock_error(sk); break; } - - if (signal_pending(current)) { - err = sock_intr_errno(timeo); - break; - } } set_current_state(TASK_RUNNING); remove_wait_queue(sk->sk_sleep, &wait); diff -prauN linux-2.6.0-test5/net/bluetooth/bnep/bnep.h wli-2.6.0-test5-bk12-25/net/bluetooth/bnep/bnep.h --- linux-2.6.0-test5/net/bluetooth/bnep/bnep.h 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/bluetooth/bnep/bnep.h 2003-09-25 19:16:15.000000000 -0700 @@ -168,11 +168,11 @@ struct bnep_session { u64 mc_filter; struct socket *sock; - struct net_device dev; + struct net_device *dev; struct net_device_stats stats; }; -int bnep_net_init(struct net_device *dev); +void bnep_net_setup(struct net_device *dev); int bnep_sock_init(void); int bnep_sock_cleanup(void); diff -prauN linux-2.6.0-test5/net/bluetooth/bnep/core.c wli-2.6.0-test5-bk12-25/net/bluetooth/bnep/core.c --- linux-2.6.0-test5/net/bluetooth/bnep/core.c 2003-09-08 12:50:16.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/bluetooth/bnep/core.c 2003-09-25 19:16:15.000000000 -0700 @@ -180,7 +180,7 @@ static int bnep_ctrl_set_mcfilter(struct s->mc_filter = 0; /* Always send broadcast */ - set_bit(bnep_mc_hash(s->dev.broadcast), (ulong *) &s->mc_filter); + set_bit(bnep_mc_hash(s->dev->broadcast), (ulong *) &s->mc_filter); /* Add address ranges to the multicast hash */ for (; n > 0; n--) { @@ -293,7 +293,7 @@ static u8 __bnep_rx_hlen[] = { static inline int bnep_rx_frame(struct bnep_session *s, struct sk_buff *skb) { - struct net_device *dev = &s->dev; + struct net_device *dev = s->dev; struct sk_buff *nskb; u8 type; @@ -451,7 +451,7 @@ send: static int bnep_session(void *arg) { struct bnep_session *s = arg; - struct net_device *dev = &s->dev; + struct net_device *dev = s->dev; struct sock *sk = s->sock->sk; struct sk_buff *skb; wait_queue_t wait; @@ -501,7 +501,7 @@ static int bnep_session(void *arg) __bnep_unlink_session(s); up_write(&bnep_session_sem); - kfree(s); + kfree(dev); return 0; } @@ -517,10 +517,13 @@ int bnep_add_connection(struct bnep_conn baswap((void *) dst, &bt_sk(sock->sk)->dst); baswap((void *) src, &bt_sk(sock->sk)->src); - s = kmalloc(sizeof(struct bnep_session), GFP_KERNEL); - if (!s) - return -ENOMEM; - memset(s, 0, sizeof(struct bnep_session)); + /* session struct allocated as private part of net_device */ + dev = alloc_netdev(sizeof(struct bnep_session), + (*req->device) ? req->device : "bnep%d", + bnep_net_setup); + if (!dev) + return ENOMEM; + down_write(&bnep_session_sem); @@ -530,20 +533,15 @@ int bnep_add_connection(struct bnep_conn goto failed; } - dev = &s->dev; - - if (*req->device) - strcpy(dev->name, req->device); - else - strcpy(dev->name, "bnep%d"); + s = dev->priv; - memset(dev->broadcast, 0xff, ETH_ALEN); - /* This is rx header therefore addresses are swapped. * ie eh.h_dest is our local address. */ memcpy(s->eh.h_dest, &src, ETH_ALEN); memcpy(s->eh.h_source, &dst, ETH_ALEN); + memcpy(dev->dev_addr, s->eh.h_dest, ETH_ALEN); + s->dev = dev; s->sock = sock; s->role = req->role; s->state = BT_CONNECTED; @@ -569,8 +567,6 @@ int bnep_add_connection(struct bnep_conn s->proto_filter[2].end = htons(0x86DD); #endif - dev->init = bnep_net_init; - dev->priv = s; err = register_netdev(dev); if (err) { goto failed; @@ -578,7 +574,7 @@ int bnep_add_connection(struct bnep_conn __bnep_link_session(s); - err = kernel_thread(bnep_session, s, CLONE_FS | CLONE_FILES | CLONE_SIGHAND); + err = kernel_thread(bnep_session, s, CLONE_KERNEL); if (err < 0) { /* Session thread start failed, gotta cleanup. */ unregister_netdev(dev); @@ -592,7 +588,7 @@ int bnep_add_connection(struct bnep_conn failed: up_write(&bnep_session_sem); - kfree(s); + kfree(dev); return err; } @@ -624,7 +620,7 @@ int bnep_del_connection(struct bnep_conn static void __bnep_copy_ci(struct bnep_conninfo *ci, struct bnep_session *s) { memcpy(ci->dst, s->eh.h_source, ETH_ALEN); - strcpy(ci->device, s->dev.name); + strcpy(ci->device, s->dev->name); ci->flags = s->flags; ci->state = s->state; ci->role = s->role; diff -prauN linux-2.6.0-test5/net/bluetooth/bnep/netdev.c wli-2.6.0-test5-bk12-25/net/bluetooth/bnep/netdev.c --- linux-2.6.0-test5/net/bluetooth/bnep/netdev.c 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/bluetooth/bnep/netdev.c 2003-09-25 19:16:15.000000000 -0700 @@ -226,11 +226,10 @@ static int bnep_net_xmit(struct sk_buff return 0; } -int bnep_net_init(struct net_device *dev) +void bnep_net_setup(struct net_device *dev) { - struct bnep_session *s = dev->priv; - memcpy(dev->dev_addr, s->eh.h_dest, ETH_ALEN); + memset(dev->broadcast, 0xff, ETH_ALEN); dev->addr_len = ETH_ALEN; ether_setup(dev); @@ -245,6 +244,4 @@ int bnep_net_init(struct net_device *dev dev->watchdog_timeo = HZ * 2; dev->tx_timeout = bnep_net_timeout; - - return 0; } diff -prauN linux-2.6.0-test5/net/bluetooth/bnep/sock.c wli-2.6.0-test5-bk12-25/net/bluetooth/bnep/sock.c --- linux-2.6.0-test5/net/bluetooth/bnep/sock.c 2003-09-08 12:50:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/bluetooth/bnep/sock.c 2003-09-25 19:16:15.000000000 -0700 @@ -175,6 +175,9 @@ static int bnep_sock_create(struct socke if (!(sk = bt_sock_alloc(sock, PF_BLUETOOTH, 0, GFP_KERNEL))) return -ENOMEM; + + sk_set_owner(sk, THIS_MODULE); + sock->ops = &bnep_sock_ops; sock->state = SS_UNCONNECTED; @@ -186,6 +189,7 @@ static int bnep_sock_create(struct socke static struct net_proto_family bnep_sock_family_ops = { .family = PF_BLUETOOTH, + .owner = THIS_MODULE, .create = bnep_sock_create }; diff -prauN linux-2.6.0-test5/net/bluetooth/hci_core.c wli-2.6.0-test5-bk12-25/net/bluetooth/hci_core.c --- linux-2.6.0-test5/net/bluetooth/hci_core.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/bluetooth/hci_core.c 2003-09-25 19:16:15.000000000 -0700 @@ -394,7 +394,7 @@ int hci_inquiry(unsigned long arg) { struct hci_inquiry_req ir; struct hci_dev *hdev; - int err = 0, do_inquiry = 0; + int err = 0, do_inquiry = 0, max_rsp; long timeo; __u8 *buf, *ptr; @@ -417,16 +417,19 @@ int hci_inquiry(unsigned long arg) if (do_inquiry && (err = hci_request(hdev, hci_inq_req, (unsigned long)&ir, timeo)) < 0) goto done; + /* for unlimited number of responses we will use buffer with 255 entries */ + max_rsp = (ir.num_rsp == 0) ? 255 : ir.num_rsp; + /* cache_dump can't sleep. Therefore we allocate temp buffer and then * copy it to the user space. */ - if (!(buf = kmalloc(sizeof(struct inquiry_info) * ir.num_rsp, GFP_KERNEL))) { + if (!(buf = kmalloc(sizeof(struct inquiry_info) * max_rsp, GFP_KERNEL))) { err = -ENOMEM; goto done; } hci_dev_lock_bh(hdev); - ir.num_rsp = inquiry_cache_dump(hdev, ir.num_rsp, buf); + ir.num_rsp = inquiry_cache_dump(hdev, max_rsp, buf); hci_dev_unlock_bh(hdev); BT_DBG("num_rsp %d", ir.num_rsp); diff -prauN linux-2.6.0-test5/net/bluetooth/hci_event.c wli-2.6.0-test5-bk12-25/net/bluetooth/hci_event.c --- linux-2.6.0-test5/net/bluetooth/hci_event.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/bluetooth/hci_event.c 2003-09-25 19:16:15.000000000 -0700 @@ -62,9 +62,22 @@ /* Command Complete OGF LINK_CTL */ static void hci_cc_link_ctl(struct hci_dev *hdev, __u16 ocf, struct sk_buff *skb) { + __u8 status; + BT_DBG("%s ocf 0x%x", hdev->name, ocf); switch (ocf) { + case OCF_INQUIRY_CANCEL: + status = *((__u8 *) skb->data); + + if (status) { + BT_DBG("%s Inquiry cancel error: status 0x%x", hdev->name, status); + } else { + clear_bit(HCI_INQUIRY, &hdev->flags); + hci_req_complete(hdev, status); + } + break; + default: BT_DBG("%s Command complete: ogf LINK_CTL ocf %x", hdev->name, ocf); break; diff -prauN linux-2.6.0-test5/net/bluetooth/hci_sock.c wli-2.6.0-test5-bk12-25/net/bluetooth/hci_sock.c --- linux-2.6.0-test5/net/bluetooth/hci_sock.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/bluetooth/hci_sock.c 2003-09-25 19:16:15.000000000 -0700 @@ -75,7 +75,7 @@ static struct hci_sec_filter hci_sec_fil /* OGF_LINK_POLICY */ { 0x1200, 0x0, 0x0, 0x0 }, /* OGF_HOST_CTL */ - { 0x80100000, 0x2a, 0x0, 0x0 }, + { 0x80100000, 0x202a, 0x0, 0x0 }, /* OGF_INFO_PARAM */ { 0x22a, 0x0, 0x0, 0x0 }, /* OGF_STATUS_PARAM */ @@ -587,6 +587,8 @@ static int hci_sock_create(struct socket if (!sk) return -ENOMEM; + sk_set_owner(sk, THIS_MODULE); + sock->state = SS_UNCONNECTED; sk->sk_state = BT_OPEN; diff -prauN linux-2.6.0-test5/net/bluetooth/l2cap.c wli-2.6.0-test5-bk12-25/net/bluetooth/l2cap.c --- linux-2.6.0-test5/net/bluetooth/l2cap.c 2003-09-08 12:50:16.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/bluetooth/l2cap.c 2003-09-25 19:16:15.000000000 -0700 @@ -289,7 +289,7 @@ static void __l2cap_sock_close(struct so struct l2cap_disconn_req req; sk->sk_state = BT_DISCONN; - l2cap_sock_set_timer(sk, HZ * 5); + l2cap_sock_set_timer(sk, sk->sk_sndtimeo); req.dcid = __cpu_to_le16(l2cap_pi(sk)->dcid); req.scid = __cpu_to_le16(l2cap_pi(sk)->scid); @@ -314,11 +314,9 @@ static void __l2cap_sock_close(struct so static void l2cap_sock_close(struct sock *sk) { l2cap_sock_clear_timer(sk); - lock_sock(sk); __l2cap_sock_close(sk, ECONNRESET); release_sock(sk); - l2cap_sock_kill(sk); } @@ -530,8 +528,8 @@ static int l2cap_sock_connect(struct soc goto done; wait: - err = bt_sock_w4_connect(sk, flags); - + err = bt_sock_wait_state(sk, BT_CONNECTED, + sock_sndtimeo(sk, flags & O_NONBLOCK)); done: release_sock(sk); return err; @@ -831,32 +829,39 @@ static int l2cap_sock_getsockopt(struct static int l2cap_sock_shutdown(struct socket *sock, int how) { struct sock *sk = sock->sk; + int err = 0; BT_DBG("sock %p, sk %p", sock, sk); if (!sk) return 0; - l2cap_sock_clear_timer(sk); - lock_sock(sk); - sk->sk_shutdown = SHUTDOWN_MASK; - __l2cap_sock_close(sk, ECONNRESET); - release_sock(sk); + if (!sk->sk_shutdown) { + sk->sk_shutdown = SHUTDOWN_MASK; + l2cap_sock_clear_timer(sk); + __l2cap_sock_close(sk, 0); - return 0; + if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime) + err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime); + } + release_sock(sk); + return err; } static int l2cap_sock_release(struct socket *sock) { struct sock *sk = sock->sk; + int err; BT_DBG("sock %p, sk %p", sock, sk); if (!sk) return 0; + err = l2cap_sock_shutdown(sock, 2); + sock_orphan(sk); - l2cap_sock_close(sk); - return 0; + l2cap_sock_kill(sk); + return err; } /* ---- L2CAP channels ---- */ @@ -980,9 +985,11 @@ static void l2cap_chan_del(struct sock * hci_conn_put(conn->hcon); } - sk->sk_state = BT_CLOSED; - sk->sk_err = err; + sk->sk_state = BT_CLOSED; sk->sk_zapped = 1; + + if (err) + sk->sk_err = err; if (parent) parent->sk_data_ready(parent, 0); @@ -1518,18 +1525,35 @@ static inline int l2cap_config_rsp(struc if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, scid))) return -ENOENT; - if (result) { - struct l2cap_disconn_req req; + switch (result) { + case L2CAP_CONF_SUCCESS: + break; - /* They didn't like our options. Well... we do not negotiate. - * Close channel. - */ + case L2CAP_CONF_UNACCEPT: + if (++l2cap_pi(sk)->conf_retry < L2CAP_CONF_MAX_RETRIES) { + char req[128]; + /* + It does not make sense to adjust L2CAP parameters + that are currently defined in the spec. We simply + resend config request that we sent earlier. It is + stupid :) but it helps qualification testing + which expects at least some response from us. + */ + l2cap_send_req(conn, L2CAP_CONF_REQ, + l2cap_build_conf_req(sk, req), req); + goto done; + } + + default: sk->sk_state = BT_DISCONN; + sk->sk_err = ECONNRESET; l2cap_sock_set_timer(sk, HZ * 5); - - req.dcid = __cpu_to_le16(l2cap_pi(sk)->dcid); - req.scid = __cpu_to_le16(l2cap_pi(sk)->scid); - l2cap_send_req(conn, L2CAP_DISCONN_REQ, sizeof(req), &req); + { + struct l2cap_disconn_req req; + req.dcid = __cpu_to_le16(l2cap_pi(sk)->dcid); + req.scid = __cpu_to_le16(l2cap_pi(sk)->scid); + l2cap_send_req(conn, L2CAP_DISCONN_REQ, sizeof(req), &req); + } goto done; } @@ -1590,7 +1614,7 @@ static inline int l2cap_disconnect_rsp(s if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, scid))) return 0; - l2cap_chan_del(sk, ECONNABORTED); + l2cap_chan_del(sk, 0); bh_unlock_sock(sk); l2cap_sock_kill(sk); diff -prauN linux-2.6.0-test5/net/bluetooth/rfcomm/core.c wli-2.6.0-test5-bk12-25/net/bluetooth/rfcomm/core.c --- linux-2.6.0-test5/net/bluetooth/rfcomm/core.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/bluetooth/rfcomm/core.c 2003-09-25 19:16:15.000000000 -0700 @@ -280,13 +280,13 @@ static struct rfcomm_dlc *rfcomm_dlc_get static int __rfcomm_dlc_open(struct rfcomm_dlc *d, bdaddr_t *src, bdaddr_t *dst, u8 channel) { struct rfcomm_session *s; - u8 dlci = __dlci(0, channel); int err = 0; + u8 dlci; - BT_DBG("dlc %p state %ld %s %s channel %d dlci %d", - d, d->state, batostr(src), batostr(dst), channel, dlci); + BT_DBG("dlc %p state %ld %s %s channel %d", + d, d->state, batostr(src), batostr(dst), channel); - if (dlci < 1 || dlci > 62) + if (channel < 1 || channel > 30) return -EINVAL; if (d->state != BT_OPEN && d->state != BT_CLOSED) @@ -299,6 +299,8 @@ static int __rfcomm_dlc_open(struct rfco return err; } + dlci = __dlci(!s->initiator, channel); + /* Check if DLCI already exists */ if (rfcomm_dlc_get(s, dlci)) return -EBUSY; @@ -715,7 +717,7 @@ static int rfcomm_send_nsc(struct rfcomm hdr->len = __len8(sizeof(*mcc) + 1); mcc = (void *) ptr; ptr += sizeof(*mcc); - mcc->type = __mcc_type(s->initiator, RFCOMM_NSC); + mcc->type = __mcc_type(cr, RFCOMM_NSC); mcc->len = __len8(1); /* Type that we didn't like */ @@ -741,7 +743,7 @@ static int rfcomm_send_pn(struct rfcomm_ hdr->len = __len8(sizeof(*mcc) + sizeof(*pn)); mcc = (void *) ptr; ptr += sizeof(*mcc); - mcc->type = __mcc_type(s->initiator, RFCOMM_PN); + mcc->type = __mcc_type(cr, RFCOMM_PN); mcc->len = __len8(sizeof(*pn)); pn = (void *) ptr; ptr += sizeof(*pn); @@ -850,7 +852,51 @@ static int rfcomm_send_msc(struct rfcomm msc = (void *) ptr; ptr += sizeof(*msc); msc->dlci = __addr(1, dlci); - msc->v24_sig = v24_sig; + msc->v24_sig = v24_sig | 0x01; + + *ptr = __fcs(buf); ptr++; + + return rfcomm_send_frame(s, buf, ptr - buf); +} + +static int rfcomm_send_fcoff(struct rfcomm_session *s, int cr) +{ + struct rfcomm_hdr *hdr; + struct rfcomm_mcc *mcc; + u8 buf[16], *ptr = buf; + + BT_DBG("%p cr %d", s, cr); + + hdr = (void *) ptr; ptr += sizeof(*hdr); + hdr->addr = __addr(s->initiator, 0); + hdr->ctrl = __ctrl(RFCOMM_UIH, 0); + hdr->len = __len8(sizeof(*mcc)); + + mcc = (void *) ptr; ptr += sizeof(*mcc); + mcc->type = __mcc_type(cr, RFCOMM_FCOFF); + mcc->len = __len8(0); + + *ptr = __fcs(buf); ptr++; + + return rfcomm_send_frame(s, buf, ptr - buf); +} + +static int rfcomm_send_fcon(struct rfcomm_session *s, int cr) +{ + struct rfcomm_hdr *hdr; + struct rfcomm_mcc *mcc; + u8 buf[16], *ptr = buf; + + BT_DBG("%p cr %d", s, cr); + + hdr = (void *) ptr; ptr += sizeof(*hdr); + hdr->addr = __addr(s->initiator, 0); + hdr->ctrl = __ctrl(RFCOMM_UIH, 0); + hdr->len = __len8(sizeof(*mcc)); + + mcc = (void *) ptr; ptr += sizeof(*mcc); + mcc->type = __mcc_type(cr, RFCOMM_FCON); + mcc->len = __len8(0); *ptr = __fcs(buf); ptr++; @@ -1085,6 +1131,8 @@ static int rfcomm_recv_sabm(struct rfcom d->state = BT_CONNECTED; d->state_change(d, 0); rfcomm_dlc_unlock(d); + + rfcomm_send_msc(s, 1, dlci, d->v24_sig); } else { rfcomm_send_dm(s, dlci); } @@ -1207,6 +1255,14 @@ static int rfcomm_recv_rpn(struct rfcomm } /* check for sane values: ignore/accept bit_rate, 8 bits, 1 stop bit, no parity, no flow control lines, normal XON/XOFF chars */ + if (rpn->param_mask & RFCOMM_RPN_PM_BITRATE) { + bit_rate = rpn->bit_rate; + if (bit_rate != RFCOMM_RPN_BR_115200) { + BT_DBG("RPN bit rate mismatch 0x%x", bit_rate); + bit_rate = RFCOMM_RPN_BR_115200; + rpn_mask ^= RFCOMM_RPN_PM_BITRATE; + } + } if (rpn->param_mask & RFCOMM_RPN_PM_DATA) { data_bits = __get_rpn_data_bits(rpn->line_settings); if (data_bits != RFCOMM_RPN_DATA_8) { @@ -1232,22 +1288,25 @@ static int rfcomm_recv_rpn(struct rfcomm } } if (rpn->param_mask & RFCOMM_RPN_PM_FLOW) { - if (rpn->flow_ctrl != RFCOMM_RPN_FLOW_NONE) { - BT_DBG("RPN flow ctrl mismatch 0x%x", rpn->flow_ctrl); + flow_ctrl = rpn->flow_ctrl; + if (flow_ctrl != RFCOMM_RPN_FLOW_NONE) { + BT_DBG("RPN flow ctrl mismatch 0x%x", flow_ctrl); flow_ctrl = RFCOMM_RPN_FLOW_NONE; rpn_mask ^= RFCOMM_RPN_PM_FLOW; } } if (rpn->param_mask & RFCOMM_RPN_PM_XON) { - if (rpn->xon_char != RFCOMM_RPN_XON_CHAR) { - BT_DBG("RPN XON char mismatch 0x%x", rpn->xon_char); + xon_char = rpn->xon_char; + if (xon_char != RFCOMM_RPN_XON_CHAR) { + BT_DBG("RPN XON char mismatch 0x%x", xon_char); xon_char = RFCOMM_RPN_XON_CHAR; rpn_mask ^= RFCOMM_RPN_PM_XON; } } if (rpn->param_mask & RFCOMM_RPN_PM_XOFF) { - if (rpn->xoff_char != RFCOMM_RPN_XOFF_CHAR) { - BT_DBG("RPN XOFF char mismatch 0x%x", rpn->xoff_char); + xoff_char = rpn->xoff_char; + if (xoff_char != RFCOMM_RPN_XOFF_CHAR) { + BT_DBG("RPN XOFF char mismatch 0x%x", xoff_char); xoff_char = RFCOMM_RPN_XOFF_CHAR; rpn_mask ^= RFCOMM_RPN_PM_XOFF; } @@ -1343,6 +1402,20 @@ static int rfcomm_recv_mcc(struct rfcomm rfcomm_recv_msc(s, cr, skb); break; + case RFCOMM_FCOFF: + if (cr) { + set_bit(RFCOMM_TX_THROTTLED, &s->flags); + rfcomm_send_fcoff(s, 0); + } + break; + + case RFCOMM_FCON: + if (cr) { + clear_bit(RFCOMM_TX_THROTTLED, &s->flags); + rfcomm_send_fcon(s, 0); + } + break; + case RFCOMM_TEST: if (cr) rfcomm_send_test(s, 0, skb->data, skb->len); @@ -1533,6 +1606,9 @@ static inline void rfcomm_process_dlcs(s continue; } + if (test_bit(RFCOMM_TX_THROTTLED, &s->flags)) + continue; + if ((d->state == BT_CONNECTED || d->state == BT_DISCONN) && d->mscex == RFCOMM_MSCEX_OK) rfcomm_process_tx(d); @@ -1881,7 +1957,7 @@ int __init rfcomm_init(void) { l2cap_load(); - kernel_thread(rfcomm_run, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND); + kernel_thread(rfcomm_run, NULL, CLONE_KERNEL); BT_INFO("RFCOMM ver %s", VERSION); diff -prauN linux-2.6.0-test5/net/bluetooth/rfcomm/sock.c wli-2.6.0-test5-bk12-25/net/bluetooth/rfcomm/sock.c --- linux-2.6.0-test5/net/bluetooth/rfcomm/sock.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/bluetooth/rfcomm/sock.c 2003-09-25 19:16:15.000000000 -0700 @@ -192,8 +192,10 @@ static void rfcomm_sock_cleanup_listen(s BT_DBG("parent %p", parent); /* Close not yet accepted dlcs */ - while ((sk = bt_accept_dequeue(parent, NULL))) + while ((sk = bt_accept_dequeue(parent, NULL))) { rfcomm_sock_close(sk); + rfcomm_sock_kill(sk); + } parent->sk_state = BT_CLOSED; parent->sk_zapped = 1; @@ -215,15 +217,10 @@ static void rfcomm_sock_kill(struct sock sock_put(sk); } -/* Close socket. - * Must be called on unlocked socket. - */ -static void rfcomm_sock_close(struct sock *sk) +static void __rfcomm_sock_close(struct sock *sk) { struct rfcomm_dlc *d = rfcomm_pi(sk)->dlc; - lock_sock(sk); - BT_DBG("sk %p state %d socket %p", sk, sk->sk_state, sk->sk_socket); switch (sk->sk_state) { @@ -240,11 +237,17 @@ static void rfcomm_sock_close(struct soc default: sk->sk_zapped = 1; break; - }; + } +} +/* Close socket. + * Must be called on unlocked socket. + */ +static void rfcomm_sock_close(struct sock *sk) +{ + lock_sock(sk); + __rfcomm_sock_close(sk); release_sock(sk); - - rfcomm_sock_kill(sk); } static void rfcomm_sock_init(struct sock *sk, struct sock *parent) @@ -374,7 +377,8 @@ static int rfcomm_sock_connect(struct so err = rfcomm_dlc_open(d, &bt_sk(sk)->src, &sa->rc_bdaddr, sa->rc_channel); if (!err) - err = bt_sock_w4_connect(sk, flags); + err = bt_sock_wait_state(sk, BT_CONNECTED, + sock_sndtimeo(sk, flags & O_NONBLOCK)); release_sock(sk); return err; @@ -558,9 +562,6 @@ static int rfcomm_sock_recvmsg(struct ki int target, err = 0, copied = 0; long timeo; - if (sk->sk_state != BT_CONNECTED) - return -EINVAL; - if (flags & MSG_OOB) return -EOPNOTSUPP; @@ -635,23 +636,6 @@ out: return copied ? : err; } -static int rfcomm_sock_shutdown(struct socket *sock, int how) -{ - struct sock *sk = sock->sk; - - BT_DBG("sock %p, sk %p", sock, sk); - - if (!sk) return 0; - - lock_sock(sk); - sk->sk_shutdown = SHUTDOWN_MASK; - if (sk->sk_state == BT_CONNECTED) - rfcomm_dlc_close(rfcomm_pi(sk)->dlc, 0); - release_sock(sk); - - return 0; -} - static int rfcomm_sock_setsockopt(struct socket *sock, int level, int optname, char *optval, int optlen) { struct sock *sk = sock->sk; @@ -710,19 +694,42 @@ static int rfcomm_sock_ioctl(struct sock return err; } +static int rfcomm_sock_shutdown(struct socket *sock, int how) +{ + struct sock *sk = sock->sk; + int err = 0; + + BT_DBG("sock %p, sk %p", sock, sk); + + if (!sk) return 0; + + lock_sock(sk); + if (!sk->sk_shutdown) { + sk->sk_shutdown = SHUTDOWN_MASK; + __rfcomm_sock_close(sk); + + if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime) + err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime); + } + release_sock(sk); + return err; +} + static int rfcomm_sock_release(struct socket *sock) { struct sock *sk = sock->sk; + int err; BT_DBG("sock %p, sk %p", sock, sk); if (!sk) return 0; - sock_orphan(sk); - rfcomm_sock_close(sk); + err = rfcomm_sock_shutdown(sock, 2); - return 0; + sock_orphan(sk); + rfcomm_sock_kill(sk); + return err; } /* ---- RFCOMM core layer callbacks ---- diff -prauN linux-2.6.0-test5/net/bluetooth/rfcomm/tty.c wli-2.6.0-test5-bk12-25/net/bluetooth/rfcomm/tty.c --- linux-2.6.0-test5/net/bluetooth/rfcomm/tty.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/bluetooth/rfcomm/tty.c 2003-09-25 19:16:15.000000000 -0700 @@ -668,40 +668,8 @@ static int rfcomm_tty_write_room(struct return room; } -static int rfcomm_tty_set_modem_status(uint cmd, struct rfcomm_dlc *dlc, uint status) -{ - u8 v24_sig, mask; - - BT_DBG("dlc %p cmd 0x%02x", dlc, cmd); - - if (cmd == TIOCMSET) - v24_sig = 0; - else - rfcomm_dlc_get_modem_status(dlc, &v24_sig); - - mask = ((status & TIOCM_DSR) ? RFCOMM_V24_RTC : 0) | - ((status & TIOCM_DTR) ? RFCOMM_V24_RTC : 0) | - ((status & TIOCM_RTS) ? RFCOMM_V24_RTR : 0) | - ((status & TIOCM_CTS) ? RFCOMM_V24_RTR : 0) | - ((status & TIOCM_RI) ? RFCOMM_V24_IC : 0) | - ((status & TIOCM_CD) ? RFCOMM_V24_DV : 0); - - if (cmd == TIOCMBIC) - v24_sig &= ~mask; - else - v24_sig |= mask; - - rfcomm_dlc_set_modem_status(dlc, v24_sig); - return 0; -} - static int rfcomm_tty_ioctl(struct tty_struct *tty, struct file *filp, unsigned int cmd, unsigned long arg) { - struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data; - struct rfcomm_dlc *dlc = dev->dlc; - uint status; - int err; - BT_DBG("tty %p cmd 0x%02x", tty, cmd); switch (cmd) { @@ -713,18 +681,6 @@ static int rfcomm_tty_ioctl(struct tty_s BT_DBG("TCSETS is not supported"); return -ENOIOCTLCMD; - case TIOCMGET: - BT_DBG("TIOCMGET"); - - return put_user(dev->modem_status, (unsigned int *)arg); - - case TIOCMSET: /* Turns on and off the lines as specified by the mask */ - case TIOCMBIS: /* Turns on the lines as specified by the mask */ - case TIOCMBIC: /* Turns off the lines as specified by the mask */ - if ((err = get_user(status, (unsigned int *)arg))) - return err; - return rfcomm_tty_set_modem_status(cmd, dlc, status); - case TIOCMIWAIT: BT_DBG("TIOCMIWAIT"); break; @@ -851,6 +807,48 @@ static int rfcomm_tty_read_proc(char *bu return 0; } +static int rfcomm_tty_tiocmget(struct tty_struct *tty, struct file *filp) +{ + struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data; + + BT_DBG("tty %p dev %p", tty, dev); + + return dev->modem_status; +} + +static int rfcomm_tty_tiocmset(struct tty_struct *tty, struct file *filp, unsigned int set, unsigned int clear) +{ + struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data; + struct rfcomm_dlc *dlc = dev->dlc; + u8 v24_sig; + + BT_DBG("tty %p dev %p set 0x%02x clear 0x%02x", tty, dev, set, clear); + + rfcomm_dlc_get_modem_status(dlc, &v24_sig); + + if (set & TIOCM_DSR || set & TIOCM_DTR) + v24_sig |= RFCOMM_V24_RTC; + if (set & TIOCM_RTS || set & TIOCM_CTS) + v24_sig |= RFCOMM_V24_RTR; + if (set & TIOCM_RI) + v24_sig |= RFCOMM_V24_IC; + if (set & TIOCM_CD) + v24_sig |= RFCOMM_V24_DV; + + if (clear & TIOCM_DSR || clear & TIOCM_DTR) + v24_sig &= ~RFCOMM_V24_RTC; + if (clear & TIOCM_RTS || clear & TIOCM_CTS) + v24_sig &= ~RFCOMM_V24_RTR; + if (clear & TIOCM_RI) + v24_sig &= ~RFCOMM_V24_IC; + if (clear & TIOCM_CD) + v24_sig &= ~RFCOMM_V24_DV; + + rfcomm_dlc_set_modem_status(dlc, v24_sig); + + return 0; +} + /* ---- TTY structure ---- */ static struct tty_driver *rfcomm_tty_driver; @@ -870,6 +868,8 @@ static struct tty_operations rfcomm_ops .hangup = rfcomm_tty_hangup, .wait_until_sent = rfcomm_tty_wait_until_sent, .read_proc = rfcomm_tty_read_proc, + .tiocmget = rfcomm_tty_tiocmget, + .tiocmset = rfcomm_tty_tiocmset, }; int rfcomm_init_ttys(void) @@ -878,18 +878,17 @@ int rfcomm_init_ttys(void) if (!rfcomm_tty_driver) return -1; - rfcomm_tty_driver->owner = THIS_MODULE, - rfcomm_tty_driver->driver_name = "rfcomm", - rfcomm_tty_driver->devfs_name = "bluetooth/rfcomm/", - rfcomm_tty_driver->name = "rfcomm", - rfcomm_tty_driver->major = RFCOMM_TTY_MAJOR, - rfcomm_tty_driver->minor_start = RFCOMM_TTY_MINOR, - rfcomm_tty_driver->type = TTY_DRIVER_TYPE_SERIAL, - rfcomm_tty_driver->subtype = SERIAL_TYPE_NORMAL, - rfcomm_tty_driver->flags = TTY_DRIVER_REAL_RAW, - rfcomm_tty_driver->init_termios = tty_std_termios; - rfcomm_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL; - rfcomm_tty_driver->flags = TTY_DRIVER_REAL_RAW; + rfcomm_tty_driver->owner = THIS_MODULE; + rfcomm_tty_driver->driver_name = "rfcomm"; + rfcomm_tty_driver->devfs_name = "bluetooth/rfcomm/"; + rfcomm_tty_driver->name = "rfcomm"; + rfcomm_tty_driver->major = RFCOMM_TTY_MAJOR; + rfcomm_tty_driver->minor_start = RFCOMM_TTY_MINOR; + rfcomm_tty_driver->type = TTY_DRIVER_TYPE_SERIAL; + rfcomm_tty_driver->subtype = SERIAL_TYPE_NORMAL; + rfcomm_tty_driver->flags = TTY_DRIVER_REAL_RAW; + rfcomm_tty_driver->init_termios = tty_std_termios; + rfcomm_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL; tty_set_operations(rfcomm_tty_driver, &rfcomm_ops); if (tty_register_driver(rfcomm_tty_driver)) { diff -prauN linux-2.6.0-test5/net/bluetooth/sco.c wli-2.6.0-test5-bk12-25/net/bluetooth/sco.c --- linux-2.6.0-test5/net/bluetooth/sco.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/bluetooth/sco.c 2003-09-25 19:16:15.000000000 -0700 @@ -353,8 +353,10 @@ static void sco_sock_cleanup_listen(stru BT_DBG("parent %p", parent); /* Close not yet accepted channels */ - while ((sk = bt_accept_dequeue(parent, NULL))) + while ((sk = bt_accept_dequeue(parent, NULL))) { sco_sock_close(sk); + sco_sock_kill(sk); + } parent->sk_state = BT_CLOSED; parent->sk_zapped = 1; @@ -523,7 +525,8 @@ static int sco_sock_connect(struct socke if ((err = sco_connect(sk))) goto done; - err = bt_sock_w4_connect(sk, flags); + err = bt_sock_wait_state(sk, BT_CONNECTED, + sock_sndtimeo(sk, flags & O_NONBLOCK)); done: release_sock(sk); @@ -727,16 +730,24 @@ int sco_sock_getsockopt(struct socket *s static int sco_sock_release(struct socket *sock) { struct sock *sk = sock->sk; + int err = 0; BT_DBG("sock %p, sk %p", sock, sk); if (!sk) return 0; - - sock_orphan(sk); + sco_sock_close(sk); - return 0; + if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime) { + lock_sock(sk); + err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime); + release_sock(sk); + } + + sock_orphan(sk); + sco_sock_kill(sk); + return err; } static void __sco_chan_add(struct sco_conn *conn, struct sock *sk, struct sock *parent) diff -prauN linux-2.6.0-test5/net/bluetooth/syms.c wli-2.6.0-test5-bk12-25/net/bluetooth/syms.c --- linux-2.6.0-test5/net/bluetooth/syms.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/bluetooth/syms.c 2003-09-25 19:16:15.000000000 -0700 @@ -77,6 +77,6 @@ EXPORT_SYMBOL(bt_sock_recvmsg); EXPORT_SYMBOL(bt_sock_poll); EXPORT_SYMBOL(bt_accept_enqueue); EXPORT_SYMBOL(bt_accept_dequeue); -EXPORT_SYMBOL(bt_sock_w4_connect); +EXPORT_SYMBOL(bt_sock_wait_state); EXPORT_SYMBOL(proc_bt); diff -prauN linux-2.6.0-test5/net/bridge/br_forward.c wli-2.6.0-test5-bk12-25/net/bridge/br_forward.c --- linux-2.6.0-test5/net/bridge/br_forward.c 2003-09-08 12:50:00.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/bridge/br_forward.c 2003-09-25 19:16:15.000000000 -0700 @@ -69,6 +69,7 @@ static void __br_forward(const struct ne indev = skb->dev; skb->dev = to->dev; + skb->ip_summed = CHECKSUM_NONE; NF_HOOK(PF_BRIDGE, NF_BR_FORWARD, skb, indev, skb->dev, br_forward_finish); diff -prauN linux-2.6.0-test5/net/bridge/netfilter/Kconfig wli-2.6.0-test5-bk12-25/net/bridge/netfilter/Kconfig --- linux-2.6.0-test5/net/bridge/netfilter/Kconfig 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/bridge/netfilter/Kconfig 2003-09-25 19:16:15.000000000 -0700 @@ -23,8 +23,7 @@ config BRIDGE_EBT_BROUTE brouter. See the man page for ebtables(8) and examples on the ebtables website. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config BRIDGE_EBT_T_FILTER tristate "ebt: filter table support" @@ -34,8 +33,7 @@ config BRIDGE_EBT_T_FILTER local input, forwarding and local output. See the man page for ebtables(8). - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config BRIDGE_EBT_T_NAT tristate "ebt: nat table support" @@ -45,8 +43,7 @@ config BRIDGE_EBT_T_NAT source address (MAC SNAT) or the MAC destination address (MAC DNAT). See the man page for ebtables(8). - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. # # matches # @@ -56,8 +53,7 @@ config BRIDGE_EBT_802_3 help This option adds matching support for 802.3 Ethernet frames. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config BRIDGE_EBT_ARP tristate "ebt: ARP filter support" @@ -66,8 +62,7 @@ config BRIDGE_EBT_ARP This option adds the ARP match, which allows ARP and RARP header field filtering. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config BRIDGE_EBT_IP tristate "ebt: IP filter support" @@ -76,8 +71,7 @@ config BRIDGE_EBT_IP This option adds the IP match, which allows basic IP header field filtering. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config BRIDGE_EBT_MARK tristate "ebt: mark filter support" @@ -88,8 +82,7 @@ config BRIDGE_EBT_MARK This value is the same as the one used in the iptables mark match and target. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config BRIDGE_EBT_PKTTYPE tristate "ebt: packet type filter support" @@ -100,8 +93,7 @@ config BRIDGE_EBT_PKTTYPE the generic networking code): broadcast, multicast, for this host alone or for another host. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config BRIDGE_EBT_STP tristate "ebt: STP filter support" @@ -110,8 +102,7 @@ config BRIDGE_EBT_STP This option adds the Spanning Tree Protocol match, which allows STP header field filtering. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config BRIDGE_EBT_VLAN tristate "ebt: 802.1Q VLAN filter support" @@ -120,8 +111,7 @@ config BRIDGE_EBT_VLAN This option adds the 802.1Q vlan match, which allows the filtering of 802.1Q vlan fields. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. # # targets # @@ -132,8 +122,7 @@ config BRIDGE_EBT_ARPREPLY This option adds the arp reply target, which allows automatically sending arp replies to arp requests. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config BRIDGE_EBT_DNAT tristate "ebt: dnat target support" @@ -142,8 +131,7 @@ config BRIDGE_EBT_DNAT This option adds the MAC DNAT target, which allows altering the MAC destination address of frames. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config BRIDGE_EBT_MARK_T tristate "ebt: mark target support" @@ -154,8 +142,7 @@ config BRIDGE_EBT_MARK_T This value is the same as the one used in the iptables mark match and target. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config BRIDGE_EBT_REDIRECT tristate "ebt: redirect target support" @@ -164,8 +151,7 @@ config BRIDGE_EBT_REDIRECT This option adds the MAC redirect target, which allows altering the MAC destination address of a frame to that of the device it arrived on. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config BRIDGE_EBT_SNAT tristate "ebt: snat target support" @@ -174,8 +160,7 @@ config BRIDGE_EBT_SNAT This option adds the MAC SNAT target, which allows altering the MAC source address of frames. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. # # watchers # @@ -186,7 +171,6 @@ config BRIDGE_EBT_LOG This option adds the log target, that you can use in any rule in any ebtables table. It records the frame header to the syslog. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. endmenu diff -prauN linux-2.6.0-test5/net/core/dev.c wli-2.6.0-test5-bk12-25/net/core/dev.c --- linux-2.6.0-test5/net/core/dev.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/core/dev.c 2003-09-25 19:16:15.000000000 -0700 @@ -470,10 +470,10 @@ struct net_device *dev_get_by_name(const * to be sure the name is not allocated or removed during the test the * caller must hold the rtnl semaphore. * - * This function primarily exists for back compatibility with older + * This function exists only for back compatibility with older * drivers. */ -int dev_get(const char *name) +int __dev_get(const char *name) { struct net_device *dev; @@ -698,7 +698,13 @@ void netdev_state_change(struct net_devi void dev_load(const char *name) { - if (!dev_get(name) && capable(CAP_SYS_MODULE)) + struct net_device *dev; + + read_lock(&dev_base_lock); + dev = __dev_get_by_name(name); + read_unlock(&dev_base_lock); + + if (!dev && capable(CAP_SYS_MODULE)) request_module("%s", name); } @@ -841,7 +847,11 @@ int dev_close(struct net_device *dev) * engine, but this requires more changes in devices. */ smp_mb__after_clear_bit(); /* Commit netif_running(). */ - netif_poll_disable(dev); + while (test_bit(__LINK_STATE_RX_SCHED, &dev->state)) { + /* No hurry. */ + current->state = TASK_INTERRUPTIBLE; + schedule_timeout(1); + } /* * Call the device specific close. This cannot fail. @@ -1840,13 +1850,13 @@ static __inline__ struct net_device *dev void *dev_seq_start(struct seq_file *seq, loff_t *pos) { read_lock(&dev_base_lock); - return *pos ? dev_get_idx(*pos - 1) : (void *)1; + return *pos ? dev_get_idx(*pos - 1) : SEQ_START_TOKEN; } void *dev_seq_next(struct seq_file *seq, void *v, loff_t *pos) { ++*pos; - return v == (void *)1 ? dev_base : ((struct net_device *)v)->next; + return v == SEQ_START_TOKEN ? dev_base : ((struct net_device *)v)->next; } void dev_seq_stop(struct seq_file *seq, void *v) @@ -1886,7 +1896,7 @@ static void dev_seq_printf_stats(struct */ static int dev_seq_show(struct seq_file *seq, void *v) { - if (v == (void *)1) + if (v == SEQ_START_TOKEN) seq_puts(seq, "Inter-| Receive " " | Transmit\n" " face |bytes packets errs drop fifo frame " @@ -1990,26 +2000,21 @@ extern int wireless_proc_init(void); static int __init dev_proc_init(void) { - struct proc_dir_entry *p; int rc = -ENOMEM; - p = create_proc_entry("dev", S_IRUGO, proc_net); - if (!p) + if (!proc_net_fops_create("dev", S_IRUGO, &dev_seq_fops)) goto out; - p->proc_fops = &dev_seq_fops; - p = create_proc_entry("softnet_stat", S_IRUGO, proc_net); - if (!p) + if (!proc_net_fops_create("softnet_stat", S_IRUGO, &softnet_seq_fops)) goto out_dev; - p->proc_fops = &softnet_seq_fops; if (wireless_proc_init()) goto out_softnet; rc = 0; out: return rc; out_softnet: - remove_proc_entry("softnet_stat", proc_net); + proc_net_remove("softnet_stat"); out_dev: - remove_proc_entry("dev", proc_net); + proc_net_remove("dev"); goto out; } #else @@ -2755,7 +2760,6 @@ static void netdev_wait_allrefs(struct n current->state = TASK_INTERRUPTIBLE; schedule_timeout(HZ / 4); - current->state = TASK_RUNNING; if (time_after(jiffies, warning_time + 10 * HZ)) { printk(KERN_EMERG "unregister_netdevice: " diff -prauN linux-2.6.0-test5/net/core/wireless.c wli-2.6.0-test5-bk12-25/net/core/wireless.c --- linux-2.6.0-test5/net/core/wireless.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/core/wireless.c 2003-09-25 19:16:15.000000000 -0700 @@ -458,7 +458,7 @@ static __inline__ void wireless_seq_prin */ static int wireless_seq_show(struct seq_file *seq, void *v) { - if (v == (void *)1) + if (v == SEQ_START_TOKEN) seq_printf(seq, "Inter-| sta-| Quality | Discarded " "packets | Missed | WE\n" " face | tus | link level noise | nwid " @@ -495,15 +495,10 @@ static struct file_operations wireless_s int __init wireless_proc_init(void) { - struct proc_dir_entry *p; - int rc = 0; + if (!proc_net_fops_create("wireless", S_IRUGO, &wireless_seq_fops)) + return -ENOMEM; - p = create_proc_entry("wireless", S_IRUGO, proc_net); - if (p) - p->proc_fops = &wireless_seq_fops; - else - rc = -ENOMEM; - return rc; + return 0; } #endif /* CONFIG_PROC_FS */ diff -prauN linux-2.6.0-test5/net/decnet/af_decnet.c wli-2.6.0-test5-bk12-25/net/decnet/af_decnet.c --- linux-2.6.0-test5/net/decnet/af_decnet.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/decnet/af_decnet.c 2003-09-25 19:16:16.000000000 -0700 @@ -2146,14 +2146,14 @@ static void *dn_socket_get_idx(struct se static void *dn_socket_seq_start(struct seq_file *seq, loff_t *pos) { - return *pos ? dn_socket_get_idx(seq, *pos - 1) : (void*)1; + return *pos ? dn_socket_get_idx(seq, *pos - 1) : SEQ_START_TOKEN; } static void *dn_socket_seq_next(struct seq_file *seq, void *v, loff_t *pos) { void *rc; - if (v == (void*)1) { + if (v == SEQ_START_TOKEN) { rc = dn_socket_get_idx(seq, 0); goto out; } @@ -2169,7 +2169,7 @@ out: static void dn_socket_seq_stop(struct seq_file *seq, void *v) { - if (v && v != (void*)1) + if (v && v != SEQ_START_TOKEN) read_unlock_bh(&dn_hash_lock); } @@ -2269,7 +2269,7 @@ static inline void dn_socket_format_entr static int dn_socket_seq_show(struct seq_file *seq, void *v) { - if (v == (void*)1) { + if (v == SEQ_START_TOKEN) { seq_puts(seq, "Local Remote\n"); } else { dn_socket_format_entry(seq, v); diff -prauN linux-2.6.0-test5/net/decnet/dn_dev.c wli-2.6.0-test5-bk12-25/net/decnet/dn_dev.c --- linux-2.6.0-test5/net/decnet/dn_dev.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/decnet/dn_dev.c 2003-09-25 19:16:16.000000000 -0700 @@ -1365,7 +1365,7 @@ static void *dn_dev_seq_start(struct seq read_unlock(&dev_base_lock); return dev; } - return (void*)1; + return SEQ_START_TOKEN; } static void *dn_dev_seq_next(struct seq_file *seq, void *v, loff_t *pos) @@ -1373,7 +1373,7 @@ static void *dn_dev_seq_next(struct seq_ struct net_device *dev = v; loff_t one = 1; - if (v == (void*)1) { + if (v == SEQ_START_TOKEN) { dev = dn_dev_seq_start(seq, &one); } else { dev = dn_dev_get_next(seq, dev); @@ -1386,7 +1386,7 @@ static void *dn_dev_seq_next(struct seq_ static void dn_dev_seq_stop(struct seq_file *seq, void *v) { - if (v && v != (void*)1) + if (v && v != SEQ_START_TOKEN) read_unlock(&dev_base_lock); } @@ -1406,7 +1406,7 @@ static char *dn_type2asc(char type) static int dn_dev_seq_show(struct seq_file *seq, void *v) { - if (v == (void*)1) + if (v == SEQ_START_TOKEN) seq_puts(seq, "Name Flags T1 Timer1 T3 Timer3 BlkSize Pri State DevType Router Peer\n"); else { struct net_device *dev = v; diff -prauN linux-2.6.0-test5/net/decnet/dn_neigh.c wli-2.6.0-test5-bk12-25/net/decnet/dn_neigh.c --- linux-2.6.0-test5/net/decnet/dn_neigh.c 2003-09-08 12:50:16.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/decnet/dn_neigh.c 2003-09-25 19:16:16.000000000 -0700 @@ -604,7 +604,7 @@ static void *dn_neigh_get_idx(struct seq static void *dn_neigh_seq_start(struct seq_file *seq, loff_t *pos) { - return *pos ? dn_neigh_get_idx(seq, *pos - 1) : (void*)1; + return *pos ? dn_neigh_get_idx(seq, *pos - 1) : SEQ_START_TOKEN; } static void *dn_neigh_seq_next(struct seq_file *seq, void *v, loff_t *pos) @@ -612,7 +612,7 @@ static void *dn_neigh_seq_next(struct se void *rc; - if (v == (void*)1) { + if (v == SEQ_START_TOKEN) { rc = dn_neigh_get_idx(seq, 0); goto out; } @@ -628,7 +628,7 @@ out: static void dn_neigh_seq_stop(struct seq_file *seq, void *v) { - if (v && v != (void*)1) + if (v && v != SEQ_START_TOKEN) read_unlock_bh(&dn_neigh_table.lock); } @@ -653,7 +653,7 @@ static inline void dn_neigh_format_entry static int dn_neigh_seq_show(struct seq_file *seq, void *v) { - if (v == (void*)1) { + if (v == SEQ_START_TOKEN) { seq_puts(seq, "Addr Flags State Use Blksize Dev\n"); } else { dn_neigh_format_entry(seq, v); diff -prauN linux-2.6.0-test5/net/ipv4/arp.c wli-2.6.0-test5-bk12-25/net/ipv4/arp.c --- linux-2.6.0-test5/net/ipv4/arp.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv4/arp.c 2003-09-25 19:16:16.000000000 -0700 @@ -1275,7 +1275,7 @@ static void *arp_get_idx(struct seq_file static void *arp_seq_start(struct seq_file *seq, loff_t *pos) { - return *pos ? arp_get_idx(seq, *pos - 1) : (void *)1; + return *pos ? arp_get_idx(seq, *pos - 1) : SEQ_START_TOKEN; } static void *arp_seq_next(struct seq_file *seq, void *v, loff_t *pos) @@ -1283,7 +1283,7 @@ static void *arp_seq_next(struct seq_fil void *rc; struct arp_iter_state* state; - if (v == (void *)1) { + if (v == SEQ_START_TOKEN) { rc = arp_get_idx(seq, 0); goto out; } @@ -1306,7 +1306,7 @@ static void arp_seq_stop(struct seq_file { struct arp_iter_state* state = seq->private; - if (!state->is_pneigh && v != (void *)1) + if (!state->is_pneigh && v != SEQ_START_TOKEN) read_unlock_bh(&arp_tbl.lock); } @@ -1359,7 +1359,7 @@ static __inline__ void arp_format_pneigh static int arp_seq_show(struct seq_file *seq, void *v) { - if (v == (void *)1) + if (v == SEQ_START_TOKEN) seq_puts(seq, "IP address HW type Flags " "HW address Mask Device\n"); else { @@ -1416,14 +1416,9 @@ static struct file_operations arp_seq_fo static int __init arp_proc_init(void) { - int rc = 0; - struct proc_dir_entry *p = create_proc_entry("arp", S_IRUGO, proc_net); - - if (p) - p->proc_fops = &arp_seq_fops; - else - rc = -ENOMEM; - return rc; + if (!proc_net_fops_create("arp", S_IRUGO, &arp_seq_fops)) + return -ENOMEM; + return 0; } #else /* CONFIG_PROC_FS */ diff -prauN linux-2.6.0-test5/net/ipv4/fib_hash.c wli-2.6.0-test5-bk12-25/net/ipv4/fib_hash.c --- linux-2.6.0-test5/net/ipv4/fib_hash.c 2003-09-08 12:50:04.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv4/fib_hash.c 2003-09-25 19:16:16.000000000 -0700 @@ -979,14 +979,14 @@ static void *fib_seq_start(struct seq_fi read_lock(&fib_hash_lock); if (ip_fib_main_table) - v = *pos ? fib_get_next(seq) : (void *)1; + v = *pos ? fib_get_next(seq) : SEQ_START_TOKEN; return v; } static void *fib_seq_next(struct seq_file *seq, void *v, loff_t *pos) { ++*pos; - return v == (void *)1 ? fib_get_first(seq) : fib_get_next(seq); + return v == SEQ_START_TOKEN ? fib_get_first(seq) : fib_get_next(seq); } static void fib_seq_stop(struct seq_file *seq, void *v) @@ -1025,7 +1025,7 @@ static int fib_seq_show(struct seq_file struct fib_node *f; struct fib_info *fi; - if (v == (void *)1) { + if (v == SEQ_START_TOKEN) { seq_printf(seq, "%-127s\n", "Iface\tDestination\tGateway " "\tFlags\tRefCnt\tUse\tMetric\tMask\t\tMTU" "\tWindow\tIRTT"); @@ -1096,19 +1096,13 @@ static struct file_operations fib_seq_fo int __init fib_proc_init(void) { - struct proc_dir_entry *p; - int rc = 0; - - p = create_proc_entry("route", S_IRUGO, proc_net); - if (p) - p->proc_fops = &fib_seq_fops; - else - rc = -ENOMEM; - return rc; + if (!proc_net_fops_create("route", S_IRUGO, &fib_seq_fops)) + return -ENOMEM; + return 0; } void __init fib_proc_exit(void) { - remove_proc_entry("route", proc_net); + proc_net_remove("route"); } #endif /* CONFIG_PROC_FS */ diff -prauN linux-2.6.0-test5/net/ipv4/icmp.c wli-2.6.0-test5-bk12-25/net/ipv4/icmp.c --- linux-2.6.0-test5/net/ipv4/icmp.c 2003-09-08 12:50:29.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv4/icmp.c 2003-09-25 19:16:16.000000000 -0700 @@ -669,7 +669,7 @@ static void icmp_unreach(struct sk_buff printk(KERN_WARNING "%u.%u.%u.%u sent an invalid ICMP " "type %u, code %u " "error to a broadcast: %u.%u.%u.%u on %s\n", - NIPQUAD(iph->saddr), + NIPQUAD(skb->nh.iph->saddr), icmph->type, icmph->code, NIPQUAD(iph->daddr), skb->dev->name); diff -prauN linux-2.6.0-test5/net/ipv4/igmp.c wli-2.6.0-test5-bk12-25/net/ipv4/igmp.c --- linux-2.6.0-test5/net/ipv4/igmp.c 2003-09-08 12:50:40.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv4/igmp.c 2003-09-25 19:16:16.000000000 -0700 @@ -280,8 +280,10 @@ static struct sk_buff *igmpv3_newpack(st .nl_u = { .ip4_u = { .daddr = IGMPV3_ALL_MCR } }, .proto = IPPROTO_IGMP }; - if (ip_route_output_key(&rt, &fl)) + if (ip_route_output_key(&rt, &fl)) { + kfree_skb(skb); return 0; + } } if (rt->rt_src == 0) { ip_rt_put(rt); @@ -2162,13 +2164,13 @@ static struct ip_mc_list *igmp_mc_get_id static void *igmp_mc_seq_start(struct seq_file *seq, loff_t *pos) { read_lock(&dev_base_lock); - return *pos ? igmp_mc_get_idx(seq, *pos) : (void *)1; + return *pos ? igmp_mc_get_idx(seq, *pos - 1) : SEQ_START_TOKEN; } static void *igmp_mc_seq_next(struct seq_file *seq, void *v, loff_t *pos) { struct ip_mc_list *im; - if (v == (void *)1) + if (v == SEQ_START_TOKEN) im = igmp_mc_get_first(seq); else im = igmp_mc_get_next(seq, v); @@ -2190,7 +2192,7 @@ static void igmp_mc_seq_stop(struct seq_ static int igmp_mc_seq_show(struct seq_file *seq, void *v) { - if (v == (void *)1) + if (v == SEQ_START_TOKEN) seq_printf(seq, "Idx\tDevice : Count Querier\tGroup Users Timer\tReporter\n"); else { @@ -2337,13 +2339,13 @@ static struct ip_sf_list *igmp_mcf_get_i static void *igmp_mcf_seq_start(struct seq_file *seq, loff_t *pos) { read_lock(&dev_base_lock); - return *pos ? igmp_mcf_get_idx(seq, *pos) : (void *)1; + return *pos ? igmp_mcf_get_idx(seq, *pos - 1) : SEQ_START_TOKEN; } static void *igmp_mcf_seq_next(struct seq_file *seq, void *v, loff_t *pos) { struct ip_sf_list *psf; - if (v == (void *)1) + if (v == SEQ_START_TOKEN) psf = igmp_mcf_get_first(seq); else psf = igmp_mcf_get_next(seq, v); @@ -2372,7 +2374,7 @@ static int igmp_mcf_seq_show(struct seq_ struct ip_sf_list *psf = (struct ip_sf_list *)v; struct igmp_mcf_iter_state *state = igmp_mcf_seq_private(seq); - if (v == (void *)1) { + if (v == SEQ_START_TOKEN) { seq_printf(seq, "%3s %6s " "%10s %10s %6s %6s\n", "Idx", @@ -2430,15 +2432,8 @@ static struct file_operations igmp_mcf_s int __init igmp_mc_proc_init(void) { - struct proc_dir_entry *p; - - p = create_proc_entry("igmp", S_IRUGO, proc_net); - if (p) - p->proc_fops = &igmp_mc_seq_fops; - - p = create_proc_entry("mcfilter", S_IRUGO, proc_net); - if (p) - p->proc_fops = &igmp_mcf_seq_fops; + proc_net_fops_create("igmp", S_IRUGO, &igmp_mc_seq_fops); + proc_net_fops_create("mcfilter", S_IRUGO, &igmp_mcf_seq_fops); return 0; } #endif diff -prauN linux-2.6.0-test5/net/ipv4/ip_input.c wli-2.6.0-test5-bk12-25/net/ipv4/ip_input.c --- linux-2.6.0-test5/net/ipv4/ip_input.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv4/ip_input.c 2003-09-25 19:16:16.000000000 -0700 @@ -201,6 +201,7 @@ static inline int ip_local_deliver_finis #ifdef CONFIG_NETFILTER_DEBUG nf_debug_ip_local_deliver(skb); + skb->nf_debug = 0; #endif /*CONFIG_NETFILTER_DEBUG*/ __skb_pull(skb, ihl); diff -prauN linux-2.6.0-test5/net/ipv4/ipconfig.c wli-2.6.0-test5-bk12-25/net/ipv4/ipconfig.c --- linux-2.6.0-test5/net/ipv4/ipconfig.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv4/ipconfig.c 2003-09-25 19:16:16.000000000 -0700 @@ -50,6 +50,7 @@ #include #include #include +#include #include #include #include @@ -1092,43 +1093,45 @@ static int __init ic_dynamic(void) #ifdef CONFIG_PROC_FS -static int pnp_get_info(char *buffer, char **start, - off_t offset, int length) +static int pnp_seq_show(struct seq_file *seq, void *v) { - int len; - int i; + int i; if (ic_proto_used & IC_PROTO) - sprintf(buffer, "#PROTO: %s\n", - (ic_proto_used & IC_RARP) ? "RARP" - : (ic_proto_used & IC_USE_DHCP) ? "DHCP" : "BOOTP"); + seq_printf(seq, "#PROTO: %s\n", + (ic_proto_used & IC_RARP) ? "RARP" + : (ic_proto_used & IC_USE_DHCP) ? "DHCP" : "BOOTP"); else - strcpy(buffer, "#MANUAL\n"); - len = strlen(buffer); + seq_puts(seq, "#MANUAL\n"); if (ic_domain[0]) - len += sprintf(buffer + len, - "domain %s\n", ic_domain); + seq_printf(seq, + "domain %s\n", ic_domain); for (i = 0; i < CONF_NAMESERVERS_MAX; i++) { if (ic_nameservers[i] != INADDR_NONE) - len += sprintf(buffer + len, - "nameserver %u.%u.%u.%u\n", - NIPQUAD(ic_nameservers[i])); + seq_printf(seq, + "nameserver %u.%u.%u.%u\n", + NIPQUAD(ic_nameservers[i])); } if (ic_servaddr != INADDR_NONE) - len += sprintf(buffer + len, - "bootserver %u.%u.%u.%u\n", - NIPQUAD(ic_servaddr)); - - if (offset > len) - offset = len; - *start = buffer + offset; - - if (offset + length > len) - length = len - offset; - return length; + seq_printf(seq, + "bootserver %u.%u.%u.%u\n", + NIPQUAD(ic_servaddr)); + return 0; } +static int pnp_seq_open(struct inode *indoe, struct file *file) +{ + return single_open(file, pnp_seq_show, NULL); +} + +static struct file_operations pnp_seq_fops = { + .owner = THIS_MODULE, + .open = pnp_seq_open, + .read = seq_read, + .llseek = seq_lseek, + .release = single_release, +}; #endif /* CONFIG_PROC_FS */ /* @@ -1140,7 +1143,7 @@ static int __init ip_auto_config(void) unsigned long jiff; #ifdef CONFIG_PROC_FS - proc_net_create("pnp", 0, pnp_get_info); + proc_net_fops_create("pnp", S_IRUGO, &pnp_seq_fops); #endif /* CONFIG_PROC_FS */ if (!ic_enable) @@ -1153,7 +1156,7 @@ static int __init ip_auto_config(void) /* Give hardware a chance to settle */ jiff = jiffies + CONF_PRE_OPEN; while (time_before(jiffies, jiff)) - ; + cpu_relax(); /* Setup all network devices */ if (ic_open_devs() < 0) @@ -1162,7 +1165,7 @@ static int __init ip_auto_config(void) /* Give drivers a chance to settle */ jiff = jiffies + CONF_POST_OPEN; while (time_before(jiffies, jiff)) - ; + cpu_relax(); /* * If the config information is insufficient (e.g., our IP address or diff -prauN linux-2.6.0-test5/net/ipv4/ipvs/Kconfig wli-2.6.0-test5-bk12-25/net/ipv4/ipvs/Kconfig --- linux-2.6.0-test5/net/ipv4/ipvs/Kconfig 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv4/ipvs/Kconfig 2003-09-25 19:16:16.000000000 -0700 @@ -23,9 +23,8 @@ config IP_VS following URL: http://www.linuxvirtualserver.org/ - If you want to compile it in kernel, say Y. If you want to compile - it as a module, say M here and read Documentation/modules.txt. If - unsure, say N. + If you want to compile it in kernel, say Y. To compile it as a + module, choose M here. If unsure, say N. config IP_VS_DEBUG bool "IP virtual server debugging" @@ -103,9 +102,8 @@ config IP_VS_RR The robin-robin scheduling algorithm simply directs network connections to different real servers in a round-robin manner. - If you want to compile it in kernel, say Y. If you want to compile - it as a module, say M here and read Documentation/modules.txt. If - unsure, say N. + If you want to compile it in kernel, say Y. To compile it as a + module, choose M here. If unsure, say N. config IP_VS_WRR tristate "weighted round-robin scheduling" @@ -118,9 +116,8 @@ config IP_VS_WRR with higher weights get more connections than those with less weights and servers with equal weights get equal connections. - If you want to compile it in kernel, say Y. If you want to compile - it as a module, say M here and read Documentation/modules.txt. If - unsure, say N. + If you want to compile it in kernel, say Y. To compile it as a + module, choose M here. If unsure, say N. config IP_VS_LC tristate "least-connection scheduling scheduling" @@ -130,9 +127,8 @@ config IP_VS_LC connections to the server with the least number of active connections. - If you want to compile it in kernel, say Y. If you want to compile - it as a module, say M here and read Documentation/modules.txt. If - unsure, say N. + If you want to compile it in kernel, say Y. To compile it as a + module, choose M here. If unsure, say N. config IP_VS_WLC tristate "weighted least-connection scheduling" @@ -142,9 +138,8 @@ config IP_VS_WLC connections to the server with the least active connections normalized by the server weight. - If you want to compile it in kernel, say Y. If you want to compile - it as a module, say M here and read Documentation/modules.txt. If - unsure, say N. + If you want to compile it in kernel, say Y. To compile it as a + module, choose M here. If unsure, say N. config IP_VS_LBLC tristate "locality-based least-connection scheduling" @@ -158,9 +153,8 @@ config IP_VS_LBLC and there is a server in its half load, then allocate the weighted least-connection server to this IP address. - If you want to compile it in kernel, say Y. If you want to compile - it as a module, say M here and read Documentation/modules.txt. If - unsure, say N. + If you want to compile it in kernel, say Y. To compile it as a + module, choose M here. If unsure, say N. config IP_VS_LBLCR tristate "locality-based least-connection with replication scheduling" @@ -178,9 +172,8 @@ config IP_VS_LBLCR modified for the specified time, the most loaded node is removed from the server set, in order to avoid high degree of replication. - If you want to compile it in kernel, say Y. If you want to compile - it as a module, say M here and read Documentation/modules.txt. If - unsure, say N. + If you want to compile it in kernel, say Y. To compile it as a + module, choose M here. If unsure, say N. config IP_VS_DH tristate "destination hashing scheduling" @@ -190,9 +183,8 @@ config IP_VS_DH connections to the servers through looking up a statically assigned hash table by their destination IP addresses. - If you want to compile it in kernel, say Y. If you want to compile - it as a module, say M here and read Documentation/modules.txt. If - unsure, say N. + If you want to compile it in kernel, say Y. To compile it as a + module, choose M here. If unsure, say N. config IP_VS_SH tristate "source hashing scheduling" @@ -202,9 +194,8 @@ config IP_VS_SH connections to the servers through looking up a statically assigned hash table by their source IP addresses. - If you want to compile it in kernel, say Y. If you want to compile - it as a module, say M here and read Documentation/modules.txt. If - unsure, say N. + If you want to compile it in kernel, say Y. To compile it as a + module, choose M here. If unsure, say N. config IP_VS_SED tristate "shortest expected delay scheduling" @@ -217,9 +208,8 @@ config IP_VS_SED on the the ith server and Ui is the fixed service rate (weight) of the ith server. - If you want to compile it in kernel, say Y. If you want to compile - it as a module, say M here and read Documentation/modules.txt. If - unsure, say N. + If you want to compile it in kernel, say Y. To compile it as a + module, choose M here. If unsure, say N. config IP_VS_NQ tristate "never queue scheduling" @@ -232,9 +222,8 @@ config IP_VS_NQ that minimize its expected delay (The Shortest Expected Delay scheduling algorithm). - If you want to compile it in kernel, say Y. If you want to compile - it as a module, say M here and read Documentation/modules.txt. If - unsure, say N. + If you want to compile it in kernel, say Y. To compile it as a + module, choose M here. If unsure, say N. comment 'IPVS application helper' depends on IP_VS @@ -250,8 +239,7 @@ config IP_VS_FTP required for tracking the connection and mangling it back to that of virtual service. - If you want to compile it in kernel, say Y. If you want to compile - it as a module, say M here and read Documentation/modules.txt. If - unsure, say N. + If you want to compile it in kernel, say Y. To compile it as a + module, choose M here. If unsure, say N. endmenu diff -prauN linux-2.6.0-test5/net/ipv4/ipvs/ip_vs_app.c wli-2.6.0-test5-bk12-25/net/ipv4/ipvs/ip_vs_app.c --- linux-2.6.0-test5/net/ipv4/ipvs/ip_vs_app.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv4/ipvs/ip_vs_app.c 2003-09-25 19:16:16.000000000 -0700 @@ -35,6 +35,7 @@ #include #include #include +#include #include @@ -213,13 +214,11 @@ int register_ip_vs_app(struct ip_vs_app */ void unregister_ip_vs_app(struct ip_vs_app *app) { - struct ip_vs_app *inc; - struct list_head *l = &app->incs_list; + struct ip_vs_app *inc, *nxt; down(&__ip_vs_app_mutex); - while (l->next != l) { - inc = list_entry(l->next, struct ip_vs_app, a_list); + list_for_each_entry_safe(inc, nxt, &app->incs_list, a_list) { ip_vs_app_inc_release(inc); } @@ -238,13 +237,11 @@ void unregister_ip_vs_app(struct ip_vs_a */ struct ip_vs_app *ip_vs_app_get_by_name(char *appname) { - struct list_head *p; struct ip_vs_app *app, *a = NULL; down(&__ip_vs_app_mutex); - list_for_each (p, &ip_vs_app_list) { - app = list_entry(p, struct ip_vs_app, a_list); + list_for_each_entry(ent, &ip_vs_app_list, a_list) { if (strcmp(app->name, appname)) continue; @@ -480,55 +477,99 @@ int ip_vs_app_pkt_in(struct ip_vs_conn * } +#ifdef CONFIG_PROC_FS /* * /proc/net/ip_vs_app entry function */ -static int -ip_vs_app_getinfo(char *buffer, char **start, off_t offset, int length) + +static struct ip_vs_app *ip_vs_app_idx(loff_t pos) { - off_t pos=0; - int len=0; - char temp[64]; struct ip_vs_app *app, *inc; - struct list_head *e, *i; - pos = 64; - if (pos > offset) { - len += sprintf(buffer+len, "%-63s\n", - "prot port usecnt name"); + list_for_each_entry(app, &ip_vs_app_list, a_list) { + list_for_each_entry(inc, &app->incs_list, a_list) { + if (pos-- == 0) + return inc; + } } + return NULL; + +} +static void *ip_vs_app_seq_start(struct seq_file *seq, loff_t *pos) +{ down(&__ip_vs_app_mutex); - list_for_each (e, &ip_vs_app_list) { - app = list_entry(e, struct ip_vs_app, a_list); - list_for_each (i, &app->incs_list) { - inc = list_entry(i, struct ip_vs_app, a_list); + + return *pos ? ip_vs_app_idx(*pos - 1) : SEQ_START_TOKEN; +} + +static void *ip_vs_app_seq_next(struct seq_file *seq, void *v, loff_t *pos) +{ + struct ip_vs_app *inc, *app; + struct list_head *e; + + ++*pos; + if (v == SEQ_START_TOKEN) + return ip_vs_app_idx(0); + + inc = v; + app = inc->app; + + if ((e = inc->a_list.next) != &app->incs_list) + return list_entry(e, struct ip_vs_app, a_list); - pos += 64; - if (pos <= offset) - continue; - sprintf(temp, "%-3s %-7u %-6d %-17s", - ip_vs_proto_name(inc->protocol), - ntohs(inc->port), - atomic_read(&inc->usecnt), - inc->name); - len += sprintf(buffer+len, "%-63s\n", temp); - if (pos >= offset+length) - goto done; + /* go on to next application */ + for (e = app->a_list.next; e != &ip_vs_app_list; e = e->next) { + app = list_entry(e, struct ip_vs_app, a_list); + list_for_each_entry(inc, &app->incs_list, a_list) { + return inc; } } - done: + return NULL; +} + +static void ip_vs_app_seq_stop(struct seq_file *seq, void *v) +{ up(&__ip_vs_app_mutex); +} - *start = buffer+len-(pos-offset); /* Start of wanted data */ - len = pos-offset; - if (len > length) - len = length; - if (len < 0) - len = 0; - return len; +static int ip_vs_app_seq_show(struct seq_file *seq, void *v) +{ + if (v == SEQ_START_TOKEN) + seq_puts(seq, "prot port usecnt name\n"); + else { + const struct ip_vs_app *inc = v; + + seq_printf(seq, "%-3s %-7u %-6d %-17s\n", + ip_vs_proto_name(inc->protocol), + ntohs(inc->port), + atomic_read(&inc->usecnt), + inc->name); + } + return 0; } +static struct seq_operations ip_vs_app_seq_ops = { + .start = ip_vs_app_seq_start, + .next = ip_vs_app_seq_next, + .stop = ip_vs_app_seq_stop, + .show = ip_vs_app_seq_show, +}; + +static int ip_vs_app_open(struct inode *inode, struct file *file) +{ + return seq_open(file, &ip_vs_app_seq_ops); +} + +static struct file_operations ip_vs_app_fops = { + .owner = THIS_MODULE, + .open = ip_vs_app_open, + .read = seq_read, + .llseek = seq_lseek, + .release = seq_release, +}; +#endif + /* * Replace a segment of data with a new segment @@ -577,7 +618,7 @@ int ip_vs_skb_replace(struct sk_buff *sk int ip_vs_app_init(void) { /* we will replace it with proc_net_ipvs_create() soon */ - proc_net_create("ip_vs_app", 0, ip_vs_app_getinfo); + proc_net_fops_create("ip_vs_app", 0, &ip_vs_app_fops); return 0; } diff -prauN linux-2.6.0-test5/net/ipv4/ipvs/ip_vs_conn.c wli-2.6.0-test5-bk12-25/net/ipv4/ipvs/ip_vs_conn.c --- linux-2.6.0-test5/net/ipv4/ipvs/ip_vs_conn.c 2003-09-08 12:50:27.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv4/ipvs/ip_vs_conn.c 2003-09-25 19:16:16.000000000 -0700 @@ -30,6 +30,7 @@ #include #include #include /* for proc_net_* */ +#include #include #include @@ -188,15 +189,12 @@ static inline struct ip_vs_conn *__ip_vs { unsigned hash; struct ip_vs_conn *cp; - struct list_head *l,*e; hash = ip_vs_conn_hashkey(protocol, s_addr, s_port); - l = &ip_vs_conn_tab[hash]; ct_read_lock(hash); - for (e=l->next; e!=l; e=e->next) { - cp = list_entry(e, struct ip_vs_conn, c_list); + list_for_each_entry(cp, &ip_vs_conn_tab[hash], c_list) { if (s_addr==cp->caddr && s_port==cp->cport && d_port==cp->vport && d_addr==cp->vaddr && protocol==cp->protocol) { @@ -242,18 +240,15 @@ struct ip_vs_conn *ip_vs_conn_out_get { unsigned hash; struct ip_vs_conn *cp, *ret=NULL; - struct list_head *l,*e; /* * Check for "full" addressed entries */ hash = ip_vs_conn_hashkey(protocol, d_addr, d_port); - l = &ip_vs_conn_tab[hash]; ct_read_lock(hash); - for (e=l->next; e!=l; e=e->next) { - cp = list_entry(e, struct ip_vs_conn, c_list); + list_for_each_entry(cp, &ip_vs_conn_tab[hash], c_list) { if (d_addr == cp->caddr && d_port == cp->cport && s_port == cp->dport && s_addr == cp->daddr && protocol == cp->protocol) { @@ -615,61 +610,112 @@ ip_vs_conn_new(int proto, __u32 caddr, _ /* * /proc/net/ip_vs_conn entries */ -static int -ip_vs_conn_getinfo(char *buffer, char **start, off_t offset, int length) +#ifdef CONFIG_PROC_FS + +static void *ip_vs_conn_array(struct seq_file *seq, loff_t pos) { - off_t pos=0; - int idx, len=0; - char temp[70]; + int idx; struct ip_vs_conn *cp; - struct list_head *l, *e; - - pos = 128; - if (pos > offset) { - len += sprintf(buffer+len, "%-127s\n", - "Pro FromIP FPrt ToIP TPrt DestIP DPrt State Expires"); + + for(idx = 0; idx < IP_VS_CONN_TAB_SIZE; idx++) { + ct_read_lock_bh(idx); + list_for_each_entry(cp, &ip_vs_conn_tab[idx], c_list) { + if (pos-- == 0) { + seq->private = &ip_vs_conn_tab[idx]; + return cp; + } + } + ct_read_unlock_bh(idx); } - for(idx = 0; idx < IP_VS_CONN_TAB_SIZE; idx++) { - /* - * Lock is actually only need in next loop - * we are called from uspace: must stop bh. - */ + return NULL; +} + +static void *ip_vs_conn_seq_start(struct seq_file *seq, loff_t *pos) +{ + seq->private = NULL; + return *pos ? ip_vs_conn_array(seq, *pos - 1) :SEQ_START_TOKEN; +} + +static void *ip_vs_conn_seq_next(struct seq_file *seq, void *v, loff_t *pos) +{ + struct ip_vs_conn *cp = v; + struct list_head *e, *l = seq->private; + int idx; + + ++*pos; + if (v == SEQ_START_TOKEN) + return ip_vs_conn_array(seq, 0); + + /* more on same hash chain? */ + if ((e = cp->c_list.next) != l) + return list_entry(e, struct ip_vs_conn, c_list); + + idx = l - ip_vs_conn_tab; + ct_read_unlock_bh(idx); + + while (++idx < IP_VS_CONN_TAB_SIZE) { ct_read_lock_bh(idx); + list_for_each_entry(cp, &ip_vs_conn_tab[idx], c_list) { + seq->private = &ip_vs_conn_tab[idx]; + return cp; + } + ct_read_unlock_bh(idx); + } + seq->private = NULL; + return NULL; +} - l = &ip_vs_conn_tab[idx]; - for (e=l->next; e!=l; e=e->next) { - cp = list_entry(e, struct ip_vs_conn, c_list); - pos += 128; - if (pos <= offset) - continue; - sprintf(temp, - "%-3s %08X %04X %08X %04X %08X %04X %-11s %7lu", +static void ip_vs_conn_seq_stop(struct seq_file *seq, void *v) +{ + struct list_head *l = seq->private; + + if (l) + ct_read_unlock(l - ip_vs_conn_tab); +} + +static int ip_vs_conn_seq_show(struct seq_file *seq, void *v) +{ + + if (v == SEQ_START_TOKEN) + seq_puts(seq, + "Pro FromIP FPrt ToIP TPrt DestIP DPrt State Expires\n"); + else { + const struct ip_vs_conn *cp = v; + + seq_printf(seq, + "%-3s %08X %04X %08X %04X %08X %04X %-11s %7lu\n", ip_vs_proto_name(cp->protocol), ntohl(cp->caddr), ntohs(cp->cport), ntohl(cp->vaddr), ntohs(cp->vport), ntohl(cp->daddr), ntohs(cp->dport), ip_vs_state_name(cp->protocol, cp->state), (cp->timer.expires-jiffies)/HZ); - len += sprintf(buffer+len, "%-127s\n", temp); - if (pos >= offset+length) { - ct_read_unlock_bh(idx); - goto done; - } - } - ct_read_unlock_bh(idx); } - - done: - *start = buffer+len-(pos-offset); /* Start of wanted data */ - len = pos-offset; - if (len > length) - len = length; - if (len < 0) - len = 0; - return len; + return 0; } +static struct seq_operations ip_vs_conn_seq_ops = { + .start = ip_vs_conn_seq_start, + .next = ip_vs_conn_seq_next, + .stop = ip_vs_conn_seq_stop, + .show = ip_vs_conn_seq_show, +}; + +static int ip_vs_conn_open(struct inode *inode, struct file *file) +{ + return seq_open(file, &ip_vs_conn_seq_ops); +} + +static struct file_operations ip_vs_conn_fops = { + .owner = THIS_MODULE, + .open = ip_vs_conn_open, + .read = seq_read, + .llseek = seq_lseek, + .release = seq_release, +}; +#endif + /* * Randomly drop connection entries before running out of memory @@ -687,7 +733,7 @@ static inline int todrop_entry(struct ip /* if the conn entry hasn't lasted for 60 seconds, don't drop it. This will leave enough time for normal connection to get through. */ - if (cp->timeout+jiffies-cp->timer.expires < 60*HZ) + if (time_before(cp->timeout + jiffies, cp->timer.expires + 60*HZ)) return 0; /* Don't drop the entry if its number of incoming packets is not @@ -707,7 +753,6 @@ void ip_vs_random_dropentry(void) { int idx; struct ip_vs_conn *cp; - struct list_head *l,*e; struct ip_vs_conn *ct; /* @@ -721,9 +766,7 @@ void ip_vs_random_dropentry(void) */ ct_write_lock(hash); - l = &ip_vs_conn_tab[hash]; - for (e=l->next; e!=l; e=e->next) { - cp = list_entry(e, struct ip_vs_conn, c_list); + list_for_each_entry(cp, &ip_vs_conn_tab[hash], c_list) { if (!cp->cport && !(cp->flags & IP_VS_CONN_F_NO_CPORT)) /* connection template */ continue; @@ -775,7 +818,6 @@ static void ip_vs_conn_flush(void) { int idx; struct ip_vs_conn *cp; - struct list_head *l,*e; struct ip_vs_conn *ct; flush_again: @@ -785,9 +827,7 @@ static void ip_vs_conn_flush(void) */ ct_write_lock_bh(idx); - l = &ip_vs_conn_tab[idx]; - for (e=l->next; e!=l; e=e->next) { - cp = list_entry(e, struct ip_vs_conn, c_list); + list_for_each_entry(cp, &ip_vs_conn_tab[idx], c_list) { atomic_inc(&cp->refcnt); ct_write_unlock(idx); @@ -848,7 +888,7 @@ int ip_vs_conn_init(void) __ip_vs_conntbl_lock_array[idx].l = RW_LOCK_UNLOCKED; } - proc_net_create("ip_vs_conn", 0, ip_vs_conn_getinfo); + proc_net_fops_create("ip_vs_conn", 0, &ip_vs_conn_fops); /* calculate the random value for connection hash */ get_random_bytes(&ip_vs_conn_rnd, sizeof(ip_vs_conn_rnd)); diff -prauN linux-2.6.0-test5/net/ipv4/ipvs/ip_vs_ctl.c wli-2.6.0-test5-bk12-25/net/ipv4/ipvs/ip_vs_ctl.c --- linux-2.6.0-test5/net/ipv4/ipvs/ip_vs_ctl.c 2003-09-08 12:50:27.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv4/ipvs/ip_vs_ctl.c 2003-09-25 19:16:16.000000000 -0700 @@ -31,6 +31,8 @@ #include #include #include +#include +#include #include #include @@ -46,7 +48,7 @@ static DECLARE_MUTEX(__ip_vs_mutex); /* lock for service table */ -rwlock_t __ip_vs_svc_lock = RW_LOCK_UNLOCKED; +static rwlock_t __ip_vs_svc_lock = RW_LOCK_UNLOCKED; /* lock for table with the real services */ static rwlock_t __ip_vs_rs_lock = RW_LOCK_UNLOCKED; @@ -361,14 +363,11 @@ __ip_vs_service_get(__u16 protocol, __u3 { unsigned hash; struct ip_vs_service *svc; - struct list_head *l,*e; /* Check for "full" addressed entries */ hash = ip_vs_svc_hashkey(protocol, vaddr, vport); - l = &ip_vs_svc_table[hash]; - for (e=l->next; e!=l; e=e->next) { - svc = list_entry(e, struct ip_vs_service, s_list); + list_for_each_entry(svc, &ip_vs_svc_table[hash], s_list){ if ((svc->addr == vaddr) && (svc->port == vport) && (svc->protocol == protocol)) { @@ -389,14 +388,11 @@ static __inline__ struct ip_vs_service * { unsigned hash; struct ip_vs_service *svc; - struct list_head *l,*e; /* Check for fwmark addressed entries */ hash = ip_vs_svc_fwm_hashkey(fwmark); - l = &ip_vs_svc_fwm_table[hash]; - for (e=l->next; e!=l; e=e->next) { - svc = list_entry(e, struct ip_vs_service, f_list); + list_for_each_entry(svc, &ip_vs_svc_fwm_table[hash], f_list) { if (svc->fwmark == fwmark) { /* HIT */ atomic_inc(&svc->usecnt); @@ -533,7 +529,6 @@ ip_vs_lookup_real_service(__u16 protocol { unsigned hash; struct ip_vs_dest *dest; - struct list_head *l,*e; /* * Check for "full" addressed entries @@ -541,11 +536,8 @@ ip_vs_lookup_real_service(__u16 protocol */ hash = ip_vs_rs_hashkey(daddr, dport); - l = &ip_vs_rtable[hash]; - read_lock(&__ip_vs_rs_lock); - for (e=l->next; e!=l; e=e->next) { - dest = list_entry(e, struct ip_vs_dest, d_list); + list_for_each_entry(dest, &ip_vs_rtable[hash], d_list) { if ((dest->addr == daddr) && (dest->port == dport) && ((dest->protocol == protocol) || @@ -567,14 +559,11 @@ static struct ip_vs_dest * ip_vs_lookup_dest(struct ip_vs_service *svc, __u32 daddr, __u16 dport) { struct ip_vs_dest *dest; - struct list_head *l, *e; /* * Find the destination for the given service */ - l = &svc->destinations; - for (e=l->next; e!=l; e=e->next) { - dest = list_entry(e, struct ip_vs_dest, n_list); + list_for_each_entry(dest, &svc->destinations, n_list) { if ((dest->addr == daddr) && (dest->port == dport)) { /* HIT */ return dest; @@ -598,16 +587,12 @@ ip_vs_lookup_dest(struct ip_vs_service * static struct ip_vs_dest * ip_vs_trash_get_dest(struct ip_vs_service *svc, __u32 daddr, __u16 dport) { - struct ip_vs_dest *dest; - struct list_head *l, *e; + struct ip_vs_dest *dest, *nxt; /* * Find the destination in trash */ - l = &ip_vs_dest_trash; - - for (e=l->next; e!=l; e=e->next) { - dest = list_entry(e, struct ip_vs_dest, n_list); + list_for_each_entry_safe(dest, nxt, &ip_vs_dest_trash, n_list) { IP_VS_DBG(3, "Destination %u/%u.%u.%u.%u:%u still in trash, " "refcnt=%d\n", dest->vfwmark, @@ -632,7 +617,6 @@ ip_vs_trash_get_dest(struct ip_vs_servic "from trash\n", dest->vfwmark, NIPQUAD(dest->addr), ntohs(dest->port)); - e = e->prev; list_del(&dest->n_list); ip_vs_dst_reset(dest); __ip_vs_unbind_svc(dest); @@ -655,13 +639,9 @@ ip_vs_trash_get_dest(struct ip_vs_servic */ static void ip_vs_trash_cleanup(void) { - struct ip_vs_dest *dest; - struct list_head *l; - - l = &ip_vs_dest_trash; + struct ip_vs_dest *dest, *nxt; - while (l->next != l) { - dest = list_entry(l->next, struct ip_vs_dest, n_list); + list_for_each_entry_safe(dest, nxt, &ip_vs_dest_trash, n_list) { list_del(&dest->n_list); ip_vs_dst_reset(dest); __ip_vs_unbind_svc(dest); @@ -1196,8 +1176,7 @@ ip_vs_edit_service(struct ip_vs_service */ static void __ip_vs_del_service(struct ip_vs_service *svc) { - struct list_head *l; - struct ip_vs_dest *dest; + struct ip_vs_dest *dest, *nxt; struct ip_vs_scheduler *old_sched; ip_vs_num_services--; @@ -1218,9 +1197,7 @@ static void __ip_vs_del_service(struct i /* * Unlink the whole destination list */ - l = &svc->destinations; - while (l->next != l) { - dest = list_entry(l->next, struct ip_vs_dest, n_list); + list_for_each_entry_safe(dest, nxt, &svc->destinations, n_list) { __ip_vs_unlink_dest(svc, dest, 0); __ip_vs_del_dest(dest); } @@ -1277,16 +1254,13 @@ static int ip_vs_del_service(struct ip_v static int ip_vs_flush(void) { int idx; - struct ip_vs_service *svc; - struct list_head *l; + struct ip_vs_service *svc, *nxt; /* * Flush the service table hashed by */ for(idx = 0; idx < IP_VS_SVC_TAB_SIZE; idx++) { - l = &ip_vs_svc_table[idx]; - while (l->next != l) { - svc = list_entry(l->next,struct ip_vs_service,s_list); + list_for_each_entry_safe(svc, nxt, &ip_vs_svc_table[idx], s_list) { write_lock_bh(&__ip_vs_svc_lock); ip_vs_svc_unhash(svc); /* @@ -1302,9 +1276,8 @@ static int ip_vs_flush(void) * Flush the service table hashed by fwmark */ for(idx = 0; idx < IP_VS_SVC_TAB_SIZE; idx++) { - l = &ip_vs_svc_fwm_table[idx]; - while (l->next != l) { - svc = list_entry(l->next,struct ip_vs_service,f_list); + list_for_each_entry_safe(svc, nxt, + &ip_vs_svc_fwm_table[idx], f_list) { write_lock_bh(&__ip_vs_svc_lock); ip_vs_svc_unhash(svc); /* @@ -1334,12 +1307,10 @@ ip_vs_zero_stats(struct ip_vs_stats *sta static int ip_vs_zero_service(struct ip_vs_service *svc) { - struct list_head *l; struct ip_vs_dest *dest; write_lock_bh(&__ip_vs_svc_lock); - list_for_each (l, &svc->destinations) { - dest = list_entry(l, struct ip_vs_dest, n_list); + list_for_each_entry(dest, &svc->destinations, n_list) { ip_vs_zero_stats(&dest->stats); } ip_vs_zero_stats(&svc->stats); @@ -1350,19 +1321,16 @@ static int ip_vs_zero_service(struct ip_ static int ip_vs_zero_all(void) { int idx; - struct list_head *l; struct ip_vs_service *svc; for(idx = 0; idx < IP_VS_SVC_TAB_SIZE; idx++) { - list_for_each (l, &ip_vs_svc_table[idx]) { - svc = list_entry(l, struct ip_vs_service, s_list); + list_for_each_entry(svc, &ip_vs_svc_table[idx], s_list) { ip_vs_zero_service(svc); } } for(idx = 0; idx < IP_VS_SVC_TAB_SIZE; idx++) { - list_for_each (l, &ip_vs_svc_fwm_table[idx]) { - svc = list_entry(l, struct ip_vs_service, f_list); + list_for_each_entry(svc, &ip_vs_svc_fwm_table[idx], f_list) { ip_vs_zero_service(svc); } } @@ -1507,207 +1475,253 @@ static struct ip_vs_sysctl_table ipv4_vs {0}} }; +#ifdef CONFIG_PROC_FS + +struct ip_vs_iter { + struct list_head *table; + int bucket; +}; /* * Write the contents of the VS rule table to a PROCfs file. * (It is kept just for backward compatibility) */ -static inline char *ip_vs_fwd_name(unsigned flags) +static inline const char *ip_vs_fwd_name(unsigned flags) { - char *fwd; - switch (flags & IP_VS_CONN_F_FWD_MASK) { case IP_VS_CONN_F_LOCALNODE: - fwd = "Local"; - break; + return "Local"; case IP_VS_CONN_F_TUNNEL: - fwd = "Tunnel"; - break; + return "Tunnel"; case IP_VS_CONN_F_DROUTE: - fwd = "Route"; - break; + return "Route"; default: - fwd = "Masq"; + return "Masq"; } - return fwd; } -static inline int sprintf_dest(char *str, struct ip_vs_dest *dest) -{ - return sprintf(str, " -> %08X:%04X %-7s %-6d %-10d %-10d", - ntohl(dest->addr), ntohs(dest->port), - ip_vs_fwd_name(atomic_read(&dest->conn_flags)), - atomic_read(&dest->weight), - atomic_read(&dest->activeconns), - atomic_read(&dest->inactconns)); -} -static int ip_vs_get_info(char *buf, char **start, off_t offset, int length) +/* Get the Nth entry in the two lists */ +static struct ip_vs_service *ip_vs_info_array(struct seq_file *seq, loff_t pos) { - int len=0; - off_t pos=0; - char temp[64], temp2[32]; + struct ip_vs_iter *iter = seq->private; int idx; struct ip_vs_service *svc; - struct ip_vs_dest *dest; - struct list_head *l, *e, *p, *q; - /* - * Note: since the length of the buffer is usually the multiple - * of 512, it is good to use fixed record of the divisor of 512, - * so that records won't be truncated at buffer boundary. - */ - pos = 192; - if (pos > offset) { - sprintf(temp, - "IP Virtual Server version %d.%d.%d (size=%d)", - NVERSION(IP_VS_VERSION_CODE), IP_VS_CONN_TAB_SIZE); - len += sprintf(buf+len, "%-63s\n", temp); - len += sprintf(buf+len, "%-63s\n", - "Prot LocalAddress:Port Scheduler Flags"); - len += sprintf(buf+len, "%-63s\n", - " -> RemoteAddress:Port Forward Weight ActiveConn InActConn"); - } - - read_lock_bh(&__ip_vs_svc_lock); - - /* print the service table hashed by */ + /* look in hash by protocol */ for (idx = 0; idx < IP_VS_SVC_TAB_SIZE; idx++) { - l = &ip_vs_svc_table[idx]; - for (e=l->next; e!=l; e=e->next) { - svc = list_entry(e, struct ip_vs_service, s_list); - pos += 64; - if (pos > offset) { - if (svc->flags & IP_VS_SVC_F_PERSISTENT) - sprintf(temp2, "persistent %d %08X", - svc->timeout, - ntohl(svc->netmask)); - else - temp2[0] = '\0'; - - sprintf(temp, "%s %08X:%04X %s %s", - ip_vs_proto_name(svc->protocol), - ntohl(svc->addr), - ntohs(svc->port), - svc->scheduler->name, temp2); - len += sprintf(buf+len, "%-63s\n", temp); - if (len >= length) - goto done; - } - - p = &svc->destinations; - for (q=p->next; q!=p; q=q->next) { - dest = list_entry(q, struct ip_vs_dest, n_list); - pos += 64; - if (pos <= offset) - continue; - sprintf_dest(temp, dest); - len += sprintf(buf+len, "%-63s\n", temp); - if (len >= length) - goto done; + list_for_each_entry(svc, &ip_vs_svc_table[idx], s_list) { + if (pos-- == 0){ + iter->table = ip_vs_svc_table; + iter->bucket = idx; + return svc; } } } - /* print the service table hashed by fwmark */ + /* keep looking in fwmark */ for (idx = 0; idx < IP_VS_SVC_TAB_SIZE; idx++) { - l = &ip_vs_svc_fwm_table[idx]; - for (e=l->next; e!=l; e=e->next) { - svc = list_entry(e, struct ip_vs_service, f_list); - pos += 64; - if (pos > offset) { - if (svc->flags & IP_VS_SVC_F_PERSISTENT) - sprintf(temp2, "persistent %d %08X", - svc->timeout, - ntohl(svc->netmask)); - else - temp2[0] = '\0'; - - sprintf(temp, "FWM %08X %s %s", - svc->fwmark, - svc->scheduler->name, temp2); - len += sprintf(buf+len, "%-63s\n", temp); - if (len >= length) - goto done; + list_for_each_entry(svc, &ip_vs_svc_fwm_table[idx], f_list) { + if (pos-- == 0) { + iter->table = ip_vs_svc_fwm_table; + iter->bucket = idx; + return svc; } + } + } + + return NULL; +} - p = &svc->destinations; - for (q=p->next; q!=p; q=q->next) { - dest = list_entry(q, struct ip_vs_dest, n_list); - pos += 64; - if (pos <= offset) - continue; - sprintf_dest(temp, dest); - len += sprintf(buf+len, "%-63s\n", temp); - if (len >= length) - goto done; +static void *ip_vs_info_seq_start(struct seq_file *seq, loff_t *pos) +{ + + read_lock_bh(&__ip_vs_svc_lock); + return *pos ? ip_vs_info_array(seq, *pos - 1) : SEQ_START_TOKEN; +} + + +static void *ip_vs_info_seq_next(struct seq_file *seq, void *v, loff_t *pos) +{ + struct list_head *e; + struct ip_vs_iter *iter; + struct ip_vs_service *svc; + + ++*pos; + if (v == SEQ_START_TOKEN) + return ip_vs_info_array(seq,0); + + svc = v; + iter = seq->private; + + if (iter->table == ip_vs_svc_table) { + /* next service in table hashed by protocol */ + if ((e = svc->s_list.next) != &ip_vs_svc_table[iter->bucket]) + return list_entry(e, struct ip_vs_service, s_list); + + + while (++iter->bucket < IP_VS_SVC_TAB_SIZE) { + list_for_each_entry(svc,&ip_vs_svc_table[iter->bucket], + s_list) { + return svc; } } + + iter->table = ip_vs_svc_fwm_table; + iter->bucket = -1; + goto scan_fwmark; } - done: + /* next service in hashed by fwmark */ + if ((e = svc->f_list.next) != &ip_vs_svc_fwm_table[iter->bucket]) + return list_entry(e, struct ip_vs_service, f_list); + + scan_fwmark: + while (++iter->bucket < IP_VS_SVC_TAB_SIZE) { + list_for_each_entry(svc, &ip_vs_svc_fwm_table[iter->bucket], + f_list) + return svc; + } + + return NULL; +} + +static void ip_vs_info_seq_stop(struct seq_file *seq, void *v) +{ read_unlock_bh(&__ip_vs_svc_lock); +} + - *start = buf+len-(pos-offset); /* Start of wanted data */ - len = pos-offset; - if (len > length) - len = length; - if (len < 0) - len = 0; - return len; +static int ip_vs_info_seq_show(struct seq_file *seq, void *v) +{ + if (v == SEQ_START_TOKEN) { + seq_printf(seq, + "IP Virtual Server version %d.%d.%d (size=%d)\n", + NVERSION(IP_VS_VERSION_CODE), IP_VS_CONN_TAB_SIZE); + seq_puts(seq, + "Prot LocalAddress:Port Scheduler Flags\n"); + seq_puts(seq, + " -> RemoteAddress:Port Forward Weight ActiveConn InActConn\n"); + } else { + const struct ip_vs_service *svc = v; + const struct ip_vs_iter *iter = seq->private; + const struct ip_vs_dest *dest; + + if (iter->table == ip_vs_svc_table) + seq_printf(seq, "%s %08X:%04X %s ", + ip_vs_proto_name(svc->protocol), + ntohl(svc->addr), + ntohs(svc->port), + svc->scheduler->name); + else + seq_printf(seq, "FWM %08X %s ", + svc->fwmark, svc->scheduler->name); + + if (svc->flags & IP_VS_SVC_F_PERSISTENT) + seq_printf(seq, "persistent %d %08X\n", + svc->timeout, + ntohl(svc->netmask)); + else + seq_putc(seq, '\n'); + + list_for_each_entry(dest, &svc->destinations, n_list) { + seq_printf(seq, + " -> %08X:%04X %-7s %-6d %-10d %-10d\n", + ntohl(dest->addr), ntohs(dest->port), + ip_vs_fwd_name(atomic_read(&dest->conn_flags)), + atomic_read(&dest->weight), + atomic_read(&dest->activeconns), + atomic_read(&dest->inactconns)); + } + } + return 0; } +static struct seq_operations ip_vs_info_seq_ops = { + .start = ip_vs_info_seq_start, + .next = ip_vs_info_seq_next, + .stop = ip_vs_info_seq_stop, + .show = ip_vs_info_seq_show, +}; + +static int ip_vs_info_open(struct inode *inode, struct file *file) +{ + struct seq_file *seq; + int rc = -ENOMEM; + struct ip_vs_iter *s = kmalloc(sizeof(*s), GFP_KERNEL); + + if (!s) + goto out; + + rc = seq_open(file, &ip_vs_info_seq_ops); + if (rc) + goto out_kfree; + + seq = file->private_data; + seq->private = s; + memset(s, 0, sizeof(*s)); +out: + return rc; +out_kfree: + kfree(s); + goto out; +} + +static struct file_operations ip_vs_info_fops = { + .owner = THIS_MODULE, + .open = ip_vs_info_open, + .read = seq_read, + .llseek = seq_lseek, + .release = seq_release_private, +}; + +#endif struct ip_vs_stats ip_vs_stats; -static int -ip_vs_stats_get_info(char *buf, char **start, off_t offset, int length) +#ifdef CONFIG_PROC_FS +static int ip_vs_stats_show(struct seq_file *seq, void *v) { - int len=0; - off_t pos=0; - char temp[64]; - - pos += 320; - if (pos > offset) { - len += sprintf(buf+len, "%-63s\n%-63s\n", -/* 01234567 01234567 01234567 0123456701234567 0123456701234567 */ - " Total Incoming Outgoing Incoming Outgoing", - " Conns Packets Packets Bytes Bytes"); - - spin_lock_bh(&ip_vs_stats.lock); - sprintf(temp, "%8X %8X %8X %8X%08X %8X%08X", - ip_vs_stats.conns, - ip_vs_stats.inpkts, - ip_vs_stats.outpkts, - (__u32)(ip_vs_stats.inbytes>>32), - (__u32)ip_vs_stats.inbytes, - (__u32)(ip_vs_stats.outbytes>>32), - (__u32)ip_vs_stats.outbytes); - len += sprintf(buf+len, "%-62s\n\n", temp); - - len += sprintf(buf+len, "%-63s\n", -/* 01234567 01234567 01234567 0123456701234567 0123456701234567 */ - " Conns/s Pkts/s Pkts/s Bytes/s Bytes/s"); - sprintf(temp, "%8X %8X %8X %16X %16X", + +/* 01234567 01234567 01234567 0123456701234567 0123456701234567 */ + seq_puts(seq, + " Total Incoming Outgoing Incoming Outgoing\n"); + seq_printf(seq, + " Conns Packets Packets Bytes Bytes\n"); + + spin_lock_bh(&ip_vs_stats.lock); + seq_printf(seq, "%8X %8X %8X %16LX %16LX\n\n", ip_vs_stats.conns, + ip_vs_stats.inpkts, ip_vs_stats.outpkts, + ip_vs_stats.inbytes, ip_vs_stats.outbytes); + +/* 01234567 01234567 01234567 0123456701234567 0123456701234567 */ + seq_puts(seq, + " Conns/s Pkts/s Pkts/s Bytes/s Bytes/s\n"); + seq_printf(seq,"%8X %8X %8X %16X %16X\n", ip_vs_stats.cps, ip_vs_stats.inpps, ip_vs_stats.outpps, ip_vs_stats.inbps, ip_vs_stats.outbps); - len += sprintf(buf+len, "%-63s\n", temp); + spin_unlock_bh(&ip_vs_stats.lock); - spin_unlock_bh(&ip_vs_stats.lock); - } + return 0; +} - *start = buf+len-(pos-offset); /* Start of wanted data */ - len = pos-offset; - if (len > length) - len = length; - if (len < 0) - len = 0; - return len; +static int ip_vs_stats_seq_open(struct inode *inode, struct file *file) +{ + return single_open(file, ip_vs_stats_show, NULL); } +static struct file_operations ip_vs_stats_fops = { + .owner = THIS_MODULE, + .open = ip_vs_stats_seq_open, + .read = seq_read, + .llseek = seq_lseek, + .release = single_release, +}; + +#endif /* * Set timeout values for tcp tcpfin udp in the timeout_table. @@ -1912,19 +1926,17 @@ ip_vs_copy_service(struct ip_vs_service_ static inline int __ip_vs_get_service_entries(const struct ip_vs_get_services *get, - struct ip_vs_get_services *uptr) + struct ip_vs_get_services __user *uptr) { int idx, count=0; struct ip_vs_service *svc; - struct list_head *l; struct ip_vs_service_entry entry; int ret = 0; for (idx = 0; idx < IP_VS_SVC_TAB_SIZE; idx++) { - list_for_each (l, &ip_vs_svc_table[idx]) { + list_for_each_entry(svc, &ip_vs_svc_table[idx], s_list) { if (count >= get->num_services) goto out; - svc = list_entry(l, struct ip_vs_service, s_list); ip_vs_copy_service(&entry, svc); if (copy_to_user(&uptr->entrytable[count], &entry, sizeof(entry))) { @@ -1936,10 +1948,9 @@ __ip_vs_get_service_entries(const struct } for (idx = 0; idx < IP_VS_SVC_TAB_SIZE; idx++) { - list_for_each (l, &ip_vs_svc_fwm_table[idx]) { + list_for_each_entry(svc, &ip_vs_svc_fwm_table[idx], f_list) { if (count >= get->num_services) goto out; - svc = list_entry(l, struct ip_vs_service, f_list); ip_vs_copy_service(&entry, svc); if (copy_to_user(&uptr->entrytable[count], &entry, sizeof(entry))) { @@ -1955,7 +1966,7 @@ __ip_vs_get_service_entries(const struct static inline int __ip_vs_get_dest_entries(const struct ip_vs_get_dests *get, - struct ip_vs_get_dests *uptr) + struct ip_vs_get_dests __user *uptr) { struct ip_vs_service *svc; int ret = 0; @@ -1968,14 +1979,12 @@ __ip_vs_get_dest_entries(const struct ip if (svc) { int count = 0; struct ip_vs_dest *dest; - struct list_head *l, *e; struct ip_vs_dest_entry entry; - l = &svc->destinations; - for (e=l->next; e!=l; e=e->next) { + list_for_each_entry(dest, &svc->destinations, n_list) { if (count >= get->num_dests) break; - dest = list_entry(e, struct ip_vs_dest, n_list); + entry.addr = dest->addr; entry.port = dest->port; entry.conn_flags = atomic_read(&dest->conn_flags); @@ -2034,7 +2043,7 @@ static unsigned char get_arglen[GET_CMDI }; static int -do_ip_vs_get_ctl(struct sock *sk, int cmd, void *user, int *len) +do_ip_vs_get_ctl(struct sock *sk, int cmd, void __user *user, int *len) { unsigned char arg[128]; int ret = 0; @@ -2195,8 +2204,8 @@ int ip_vs_control_init(void) return ret; } - proc_net_create("ip_vs", 0, ip_vs_get_info); - proc_net_create("ip_vs_stats", 0, ip_vs_stats_get_info); + proc_net_fops_create("ip_vs", 0, &ip_vs_info_fops); + proc_net_fops_create("ip_vs_stats",0, &ip_vs_stats_fops); ipv4_vs_table.sysctl_header = register_sysctl_table(ipv4_vs_table.root_dir, 0); diff -prauN linux-2.6.0-test5/net/ipv4/ipvs/ip_vs_lblc.c wli-2.6.0-test5-bk12-25/net/ipv4/ipvs/ip_vs_lblc.c --- linux-2.6.0-test5/net/ipv4/ipvs/ip_vs_lblc.c 2003-09-08 12:50:23.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv4/ipvs/ip_vs_lblc.c 2003-09-25 19:16:16.000000000 -0700 @@ -246,15 +246,12 @@ ip_vs_lblc_get(struct ip_vs_lblc_table * { unsigned hash; struct ip_vs_lblc_entry *en; - struct list_head *l,*e; hash = ip_vs_lblc_hashkey(addr); - l = &tbl->bucket[hash]; read_lock(&tbl->lock); - for (e=l->next; e!=l; e=e->next) { - en = list_entry(e, struct ip_vs_lblc_entry, list); + list_for_each_entry(en, &tbl->bucket[hash], list) { if (en->addr == addr) { /* HIT */ read_unlock(&tbl->lock); @@ -274,14 +271,11 @@ ip_vs_lblc_get(struct ip_vs_lblc_table * static void ip_vs_lblc_flush(struct ip_vs_lblc_table *tbl) { int i; - struct list_head *l; - struct ip_vs_lblc_entry *en; + struct ip_vs_lblc_entry *en, *nxt; for (i=0; ilock); - for (l=&tbl->bucket[i]; l->next!=l; ) { - en = list_entry(l->next, - struct ip_vs_lblc_entry, list); + list_for_each_entry_safe(en, nxt, &tbl->bucket[i], list) { ip_vs_lblc_free(en); atomic_dec(&tbl->entries); } @@ -294,21 +288,17 @@ static inline void ip_vs_lblc_full_check { unsigned long now = jiffies; int i, j; - struct list_head *l, *e; - struct ip_vs_lblc_entry *en; + struct ip_vs_lblc_entry *en, *nxt; for (i=0, j=tbl->rover; ibucket[j]; + write_lock(&tbl->lock); - while (e->next != l) { - en = list_entry(e->next, - struct ip_vs_lblc_entry, list); - if ((now - en->lastuse) < - sysctl_ip_vs_lblc_expiration) { - e = e->next; + list_for_each_entry_safe(en, nxt, &tbl->bucket[j], list) { + if (time_before(now, + en->lastuse + sysctl_ip_vs_lblc_expiration)) continue; - } + ip_vs_lblc_free(en); atomic_dec(&tbl->entries); } @@ -335,8 +325,7 @@ static void ip_vs_lblc_check_expire(unsi unsigned long now = jiffies; int goal; int i, j; - struct list_head *l, *e; - struct ip_vs_lblc_entry *en; + struct ip_vs_lblc_entry *en, *nxt; tbl = (struct ip_vs_lblc_table *)data; @@ -358,15 +347,12 @@ static void ip_vs_lblc_check_expire(unsi for (i=0, j=tbl->rover; ibucket[j]; + write_lock(&tbl->lock); - while (e->next != l) { - en = list_entry(e->next, - struct ip_vs_lblc_entry, list); - if ((now - en->lastuse) < ENTRY_TIMEOUT) { - e = e->next; + list_for_each_entry_safe(en, nxt, &tbl->bucket[j], list) { + if (time_before(now, en->lastuse + ENTRY_TIMEOUT)) continue; - } + ip_vs_lblc_free(en); atomic_dec(&tbl->entries); goal--; @@ -452,7 +438,6 @@ static int ip_vs_lblc_update_svc(struct static inline struct ip_vs_dest * __ip_vs_wlc_schedule(struct ip_vs_service *svc, struct iphdr *iph) { - register struct list_head *l, *e; struct ip_vs_dest *dest, *least; int loh, doh; @@ -473,10 +458,7 @@ __ip_vs_wlc_schedule(struct ip_vs_servic * The server with weight=0 is quiesced and will not receive any * new connection. */ - - l = &svc->destinations; - for (e=l->next; e!=l; e=e->next) { - least = list_entry(e, struct ip_vs_dest, n_list); + list_for_each_entry(least, &svc->destinations, n_list) { if (least->flags & IP_VS_DEST_F_OVERLOAD) continue; if (atomic_read(&least->weight) > 0) { @@ -491,9 +473,7 @@ __ip_vs_wlc_schedule(struct ip_vs_servic * Find the destination with the least load. */ nextstage: - for (e=e->next; e!=l; e=e->next) { - dest = list_entry(e, struct ip_vs_dest, n_list); - + list_for_each_entry(dest, &svc->destinations, n_list) { if (dest->flags & IP_VS_DEST_F_OVERLOAD) continue; @@ -525,12 +505,9 @@ static inline int is_overloaded(struct ip_vs_dest *dest, struct ip_vs_service *svc) { if (atomic_read(&dest->activeconns) > atomic_read(&dest->weight)) { - register struct list_head *l, *e; struct ip_vs_dest *d; - l = &svc->destinations; - for (e=l->next; e!=l; e=e->next) { - d = list_entry(e, struct ip_vs_dest, n_list); + list_for_each_entry(d, &svc->destinations, n_list) { if (atomic_read(&d->activeconns)*2 < atomic_read(&d->weight)) { return 1; diff -prauN linux-2.6.0-test5/net/ipv4/ipvs/ip_vs_lblcr.c wli-2.6.0-test5-bk12-25/net/ipv4/ipvs/ip_vs_lblcr.c --- linux-2.6.0-test5/net/ipv4/ipvs/ip_vs_lblcr.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv4/ipvs/ip_vs_lblcr.c 2003-09-25 19:16:16.000000000 -0700 @@ -432,15 +432,12 @@ ip_vs_lblcr_get(struct ip_vs_lblcr_table { unsigned hash; struct ip_vs_lblcr_entry *en; - struct list_head *l,*e; hash = ip_vs_lblcr_hashkey(addr); - l = &tbl->bucket[hash]; read_lock(&tbl->lock); - for (e=l->next; e!=l; e=e->next) { - en = list_entry(e, struct ip_vs_lblcr_entry, list); + list_for_each_entry(en, &tbl->bucket[hash], list) { if (en->addr == addr) { /* HIT */ read_unlock(&tbl->lock); @@ -460,14 +457,11 @@ ip_vs_lblcr_get(struct ip_vs_lblcr_table static void ip_vs_lblcr_flush(struct ip_vs_lblcr_table *tbl) { int i; - struct list_head *l; - struct ip_vs_lblcr_entry *en; + struct ip_vs_lblcr_entry *en, *nxt; for (i=0; ilock); - for (l=&tbl->bucket[i]; l->next!=l; ) { - en = list_entry(l->next, - struct ip_vs_lblcr_entry, list); + list_for_each_entry_safe(en, nxt, &tbl->bucket[i], list) { ip_vs_lblcr_free(en); atomic_dec(&tbl->entries); } @@ -480,21 +474,17 @@ static inline void ip_vs_lblcr_full_chec { unsigned long now = jiffies; int i, j; - struct list_head *l, *e; - struct ip_vs_lblcr_entry *en; + struct ip_vs_lblcr_entry *en, *nxt; for (i=0, j=tbl->rover; ibucket[j]; + write_lock(&tbl->lock); - while (e->next != l) { - en = list_entry(e->next, - struct ip_vs_lblcr_entry, list); - if ((now - en->lastuse) < - sysctl_ip_vs_lblcr_expiration) { - e = e->next; + list_for_each_entry_safe(en, nxt, &tbl->bucket[j], list) { + if (time_after(en->lastuse+sysctl_ip_vs_lblcr_expiration, + now)) continue; - } + ip_vs_lblcr_free(en); atomic_dec(&tbl->entries); } @@ -521,8 +511,7 @@ static void ip_vs_lblcr_check_expire(uns unsigned long now = jiffies; int goal; int i, j; - struct list_head *l, *e; - struct ip_vs_lblcr_entry *en; + struct ip_vs_lblcr_entry *en, *nxt; tbl = (struct ip_vs_lblcr_table *)data; @@ -544,15 +533,12 @@ static void ip_vs_lblcr_check_expire(uns for (i=0, j=tbl->rover; ibucket[j]; + write_lock(&tbl->lock); - while (e->next != l) { - en = list_entry(e->next, - struct ip_vs_lblcr_entry, list); - if ((now - en->lastuse) < ENTRY_TIMEOUT) { - e = e->next; + list_for_each_entry_safe(en, nxt, &tbl->bucket[j], list) { + if (time_before(now, en->lastuse+ENTRY_TIMEOUT)) continue; - } + ip_vs_lblcr_free(en); atomic_dec(&tbl->entries); goal--; @@ -583,7 +569,6 @@ ip_vs_lblcr_getinfo(char *buffer, char * struct ip_vs_lblcr_table *tbl; unsigned long now = jiffies; int i; - struct list_head *l, *e; struct ip_vs_lblcr_entry *en; tbl = lblcr_table_list; @@ -593,13 +578,11 @@ ip_vs_lblcr_getinfo(char *buffer, char * len += size; for (i=0; ibucket[i]; read_lock_bh(&tbl->lock); - for (e=l->next; e!=l; e=e->next) { + list_for_each_entry(en, &tbl->bucket[i], list) { char tbuf[16]; struct ip_vs_dest_list *d; - en = list_entry(e, struct ip_vs_lblcr_entry, list); sprintf(tbuf, "%u.%u.%u.%u", NIPQUAD(en->addr)); size = sprintf(buffer+len, "%8lu %-16s ", now-en->lastuse, tbuf); @@ -708,7 +691,6 @@ static int ip_vs_lblcr_update_svc(struct static inline struct ip_vs_dest * __ip_vs_wlc_schedule(struct ip_vs_service *svc, struct iphdr *iph) { - register struct list_head *l, *e; struct ip_vs_dest *dest, *least; int loh, doh; @@ -729,10 +711,7 @@ __ip_vs_wlc_schedule(struct ip_vs_servic * The server with weight=0 is quiesced and will not receive any * new connection. */ - - l = &svc->destinations; - for (e=l->next; e!=l; e=e->next) { - least = list_entry(e, struct ip_vs_dest, n_list); + list_for_each_entry(least, &svc->destinations, n_list) { if (least->flags & IP_VS_DEST_F_OVERLOAD) continue; @@ -748,8 +727,7 @@ __ip_vs_wlc_schedule(struct ip_vs_servic * Find the destination with the least load. */ nextstage: - for (e=e->next; e!=l; e=e->next) { - dest = list_entry(e, struct ip_vs_dest, n_list); + list_for_each_entry(dest, &svc->destinations, n_list) { if (dest->flags & IP_VS_DEST_F_OVERLOAD) continue; @@ -781,12 +759,9 @@ static inline int is_overloaded(struct ip_vs_dest *dest, struct ip_vs_service *svc) { if (atomic_read(&dest->activeconns) > atomic_read(&dest->weight)) { - register struct list_head *l, *e; struct ip_vs_dest *d; - l = &svc->destinations; - for (e=l->next; e!=l; e=e->next) { - d = list_entry(e, struct ip_vs_dest, n_list); + list_for_each_entry(d, &svc->destinations, n_list) { if (atomic_read(&d->activeconns)*2 < atomic_read(&d->weight)) { return 1; diff -prauN linux-2.6.0-test5/net/ipv4/ipvs/ip_vs_lc.c wli-2.6.0-test5-bk12-25/net/ipv4/ipvs/ip_vs_lc.c --- linux-2.6.0-test5/net/ipv4/ipvs/ip_vs_lc.c 2003-09-08 12:50:30.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv4/ipvs/ip_vs_lc.c 2003-09-25 19:16:16.000000000 -0700 @@ -65,7 +65,6 @@ ip_vs_lc_dest_overhead(struct ip_vs_dest static struct ip_vs_dest * ip_vs_lc_schedule(struct ip_vs_service *svc, struct iphdr *iph) { - struct list_head *l, *e; struct ip_vs_dest *dest, *least; unsigned int loh, doh; @@ -80,9 +79,7 @@ ip_vs_lc_schedule(struct ip_vs_service * * served, but no new connection is assigned to the server. */ - l = &svc->destinations; - for (e=l->next; e!=l; e=e->next) { - least = list_entry (e, struct ip_vs_dest, n_list); + list_for_each_entry(least, &svc->destinations, n_list) { if (least->flags & IP_VS_DEST_F_OVERLOAD) continue; if (atomic_read(&least->weight) > 0) { @@ -96,8 +93,7 @@ ip_vs_lc_schedule(struct ip_vs_service * * Find the destination with the least load. */ nextstage: - for (e=e->next; e!=l; e=e->next) { - dest = list_entry(e, struct ip_vs_dest, n_list); + list_for_each_entry(dest, &svc->destinations, n_list) { if ((dest->flags & IP_VS_DEST_F_OVERLOAD) || atomic_read(&dest->weight) == 0) continue; diff -prauN linux-2.6.0-test5/net/ipv4/ipvs/ip_vs_nq.c wli-2.6.0-test5-bk12-25/net/ipv4/ipvs/ip_vs_nq.c --- linux-2.6.0-test5/net/ipv4/ipvs/ip_vs_nq.c 2003-09-08 12:50:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv4/ipvs/ip_vs_nq.c 2003-09-25 19:16:16.000000000 -0700 @@ -81,7 +81,6 @@ ip_vs_nq_dest_overhead(struct ip_vs_dest static struct ip_vs_dest * ip_vs_nq_schedule(struct ip_vs_service *svc, struct iphdr *iph) { - register struct list_head *l, *e; struct ip_vs_dest *dest, *least; unsigned int loh, doh; @@ -100,9 +99,7 @@ ip_vs_nq_schedule(struct ip_vs_service * * new connections. */ - l = &svc->destinations; - for (e=l->next; e!=l; e=e->next) { - least = list_entry(e, struct ip_vs_dest, n_list); + list_for_each_entry(least, &svc->destinations, n_list) { if (!(least->flags & IP_VS_DEST_F_OVERLOAD) && atomic_read(&least->weight) > 0) { loh = ip_vs_nq_dest_overhead(least); @@ -120,8 +117,7 @@ ip_vs_nq_schedule(struct ip_vs_service * * Find the destination with the least load. */ nextstage: - for (e=e->next; e!=l; e=e->next) { - dest = list_entry(e, struct ip_vs_dest, n_list); + list_for_each_entry(dest, &svc->destinations, n_list) { if (dest->flags & IP_VS_DEST_F_OVERLOAD) continue; diff -prauN linux-2.6.0-test5/net/ipv4/ipvs/ip_vs_proto_tcp.c wli-2.6.0-test5-bk12-25/net/ipv4/ipvs/ip_vs_proto_tcp.c --- linux-2.6.0-test5/net/ipv4/ipvs/ip_vs_proto_tcp.c 2003-09-08 12:49:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv4/ipvs/ip_vs_proto_tcp.c 2003-09-25 19:16:16.000000000 -0700 @@ -479,22 +479,19 @@ static inline __u16 tcp_app_hashkey(__u1 static int tcp_register_app(struct ip_vs_app *inc) { struct ip_vs_app *i; - struct list_head *t, *p; __u16 hash, port = inc->port; int ret = 0; hash = tcp_app_hashkey(port); - t = &tcp_apps[hash]; spin_lock_bh(&tcp_app_lock); - for (p = t->next; p != t; p = p->next) { - i = list_entry(p, struct ip_vs_app, p_list); + list_for_each_entry(i, &tcp_apps[hash], p_list) { if (i->port == port) { ret = -EEXIST; goto out; } } - list_add(&inc->p_list, t); + list_add(&inc->p_list, &tcp_apps[hash]); atomic_inc(&ip_vs_protocol_tcp.appcnt); out: @@ -516,7 +513,6 @@ tcp_unregister_app(struct ip_vs_app *inc static int tcp_app_conn_bind(struct ip_vs_conn *cp) { - struct list_head *t, *p; int hash; struct ip_vs_app *inc; int result = 0; @@ -527,11 +523,9 @@ tcp_app_conn_bind(struct ip_vs_conn *cp) /* Lookup application incarnations and bind the right one */ hash = tcp_app_hashkey(cp->vport); - t = &tcp_apps[hash]; spin_lock(&tcp_app_lock); - for (p = t->next; p != t; p = p->next) { - inc = list_entry(p, struct ip_vs_app, p_list); + list_for_each_entry(inc, &tcp_apps[hash], p_list) { if (inc->port == cp->vport) { if (unlikely(!ip_vs_app_inc_get(inc))) break; diff -prauN linux-2.6.0-test5/net/ipv4/ipvs/ip_vs_proto_udp.c wli-2.6.0-test5-bk12-25/net/ipv4/ipvs/ip_vs_proto_udp.c --- linux-2.6.0-test5/net/ipv4/ipvs/ip_vs_proto_udp.c 2003-09-08 12:50:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv4/ipvs/ip_vs_proto_udp.c 2003-09-25 19:16:16.000000000 -0700 @@ -245,22 +245,20 @@ static inline __u16 udp_app_hashkey(__u1 static int udp_register_app(struct ip_vs_app *inc) { struct ip_vs_app *i; - struct list_head *t, *p; __u16 hash, port = inc->port; int ret = 0; hash = udp_app_hashkey(port); - t = &udp_apps[hash]; + spin_lock_bh(&udp_app_lock); - for (p = t->next; p != t; p = p->next) { - i = list_entry(p, struct ip_vs_app, p_list); + list_for_each_entry(i, &udp_apps[hash], p_list) { if (i->port == port) { ret = -EEXIST; goto out; } } - list_add(&inc->p_list, t); + list_add(&inc->p_list, &udp_apps[hash]); atomic_inc(&ip_vs_protocol_udp.appcnt); out: @@ -281,7 +279,6 @@ udp_unregister_app(struct ip_vs_app *inc static int udp_app_conn_bind(struct ip_vs_conn *cp) { - struct list_head *t, *p; int hash; struct ip_vs_app *inc; int result = 0; @@ -292,11 +289,9 @@ static int udp_app_conn_bind(struct ip_v /* Lookup application incarnations and bind the right one */ hash = udp_app_hashkey(cp->vport); - t = &udp_apps[hash]; spin_lock(&udp_app_lock); - for (p = t->next; p != t; p = p->next) { - inc = list_entry(p, struct ip_vs_app, p_list); + list_for_each_entry(inc, &udp_apps[hash], p_list) { if (inc->port == cp->vport) { if (unlikely(!ip_vs_app_inc_get(inc))) break; diff -prauN linux-2.6.0-test5/net/ipv4/ipvs/ip_vs_rr.c wli-2.6.0-test5-bk12-25/net/ipv4/ipvs/ip_vs_rr.c --- linux-2.6.0-test5/net/ipv4/ipvs/ip_vs_rr.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv4/ipvs/ip_vs_rr.c 2003-09-25 19:16:16.000000000 -0700 @@ -57,7 +57,7 @@ static int ip_vs_rr_update_svc(struct ip static struct ip_vs_dest * ip_vs_rr_schedule(struct ip_vs_service *svc, struct iphdr *iph) { - register struct list_head *p, *q; + struct list_head *p, *q; struct ip_vs_dest *dest; IP_VS_DBG(6, "ip_vs_rr_schedule(): Scheduling...\n"); diff -prauN linux-2.6.0-test5/net/ipv4/ipvs/ip_vs_sched.c wli-2.6.0-test5-bk12-25/net/ipv4/ipvs/ip_vs_sched.c --- linux-2.6.0-test5/net/ipv4/ipvs/ip_vs_sched.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv4/ipvs/ip_vs_sched.c 2003-09-25 19:16:16.000000000 -0700 @@ -106,18 +106,13 @@ int ip_vs_unbind_scheduler(struct ip_vs_ static struct ip_vs_scheduler *ip_vs_sched_getbyname(const char *sched_name) { struct ip_vs_scheduler *sched; - struct list_head *l, *e; IP_VS_DBG(2, "ip_vs_sched_getbyname(): sched_name \"%s\"\n", sched_name); - l = &ip_vs_schedulers; - read_lock_bh(&__ip_vs_sched_lock); - for (e=l->next; e!=l; e=e->next) { - sched = list_entry(e, struct ip_vs_scheduler, n_list); - + list_for_each_entry(sched, &ip_vs_schedulers, n_list) { /* * Test and get the modules atomically */ diff -prauN linux-2.6.0-test5/net/ipv4/ipvs/ip_vs_sed.c wli-2.6.0-test5-bk12-25/net/ipv4/ipvs/ip_vs_sed.c --- linux-2.6.0-test5/net/ipv4/ipvs/ip_vs_sed.c 2003-09-08 12:50:32.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv4/ipvs/ip_vs_sed.c 2003-09-25 19:16:16.000000000 -0700 @@ -85,7 +85,6 @@ ip_vs_sed_dest_overhead(struct ip_vs_des static struct ip_vs_dest * ip_vs_sed_schedule(struct ip_vs_service *svc, struct iphdr *iph) { - register struct list_head *l, *e; struct ip_vs_dest *dest, *least; unsigned int loh, doh; @@ -104,9 +103,7 @@ ip_vs_sed_schedule(struct ip_vs_service * new connections. */ - l = &svc->destinations; - for (e=l->next; e!=l; e=e->next) { - least = list_entry(e, struct ip_vs_dest, n_list); + list_for_each_entry(least, &svc->destinations, n_list) { if (!(least->flags & IP_VS_DEST_F_OVERLOAD) && atomic_read(&least->weight) > 0) { loh = ip_vs_sed_dest_overhead(least); @@ -119,9 +116,7 @@ ip_vs_sed_schedule(struct ip_vs_service * Find the destination with the least load. */ nextstage: - for (e=e->next; e!=l; e=e->next) { - dest = list_entry(e, struct ip_vs_dest, n_list); - + list_for_each_entry(dest, &svc->destinations, n_list) { if (dest->flags & IP_VS_DEST_F_OVERLOAD) continue; doh = ip_vs_sed_dest_overhead(dest); diff -prauN linux-2.6.0-test5/net/ipv4/ipvs/ip_vs_sync.c wli-2.6.0-test5-bk12-25/net/ipv4/ipvs/ip_vs_sync.c --- linux-2.6.0-test5/net/ipv4/ipvs/ip_vs_sync.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv4/ipvs/ip_vs_sync.c 2003-09-25 19:16:16.000000000 -0700 @@ -206,8 +206,8 @@ get_curr_sync_buff(unsigned long time) struct ip_vs_sync_buff *sb; spin_lock_bh(&curr_sb_lock); - if (curr_sb && - (jiffies - curr_sb->firstuse > time || time == 0)) { + if (curr_sb && (time == 0 || + time_before(jiffies - curr_sb->firstuse, time))) { sb = curr_sb; curr_sb = NULL; } else diff -prauN linux-2.6.0-test5/net/ipv4/ipvs/ip_vs_wlc.c wli-2.6.0-test5-bk12-25/net/ipv4/ipvs/ip_vs_wlc.c --- linux-2.6.0-test5/net/ipv4/ipvs/ip_vs_wlc.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv4/ipvs/ip_vs_wlc.c 2003-09-25 19:16:16.000000000 -0700 @@ -73,7 +73,6 @@ ip_vs_wlc_dest_overhead(struct ip_vs_des static struct ip_vs_dest * ip_vs_wlc_schedule(struct ip_vs_service *svc, struct iphdr *iph) { - register struct list_head *l, *e; struct ip_vs_dest *dest, *least; unsigned int loh, doh; @@ -92,9 +91,7 @@ ip_vs_wlc_schedule(struct ip_vs_service * new connections. */ - l = &svc->destinations; - for (e=l->next; e!=l; e=e->next) { - least = list_entry(e, struct ip_vs_dest, n_list); + list_for_each_entry(least, &svc->destinations, n_list) { if (!(least->flags & IP_VS_DEST_F_OVERLOAD) && atomic_read(&least->weight) > 0) { loh = ip_vs_wlc_dest_overhead(least); @@ -107,9 +104,7 @@ ip_vs_wlc_schedule(struct ip_vs_service * Find the destination with the least load. */ nextstage: - for (e=e->next; e!=l; e=e->next) { - dest = list_entry(e, struct ip_vs_dest, n_list); - + list_for_each_entry(dest, &svc->destinations, n_list) { if (dest->flags & IP_VS_DEST_F_OVERLOAD) continue; doh = ip_vs_wlc_dest_overhead(dest); diff -prauN linux-2.6.0-test5/net/ipv4/ipvs/ip_vs_wrr.c wli-2.6.0-test5-bk12-25/net/ipv4/ipvs/ip_vs_wrr.c --- linux-2.6.0-test5/net/ipv4/ipvs/ip_vs_wrr.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv4/ipvs/ip_vs_wrr.c 2003-09-25 19:16:16.000000000 -0700 @@ -56,25 +56,22 @@ static int gcd(int a, int b) static int ip_vs_wrr_gcd_weight(struct ip_vs_service *svc) { - register struct list_head *l, *e; struct ip_vs_dest *dest; int weight; int g = 1; - l = &svc->destinations; - for (e=l->next; e!=l; e=e->next) { - dest = list_entry(e, struct ip_vs_dest, n_list); + list_for_each_entry(dest, &svc->destinations, n_list) { weight = atomic_read(&dest->weight); if (weight > 0) { g = weight; - break; + goto search_gcd; } } - if (e == l) - return g; - for (e=e->next; e!=l; e=e->next) { - dest = list_entry(e, struct ip_vs_dest, n_list); + return g; + + search_gcd: + list_for_each_entry(dest, &svc->destinations, n_list) { weight = atomic_read(&dest->weight); if (weight > 0) g = gcd(weight, g); @@ -89,13 +86,10 @@ static int ip_vs_wrr_gcd_weight(struct i */ static int ip_vs_wrr_max_weight(struct ip_vs_service *svc) { - register struct list_head *l, *e; struct ip_vs_dest *dest; int weight = 0; - l = &svc->destinations; - for (e=l->next; e!=l; e=e->next) { - dest = list_entry(e, struct ip_vs_dest, n_list); + list_for_each_entry(dest, &svc->destinations, n_list) { if (atomic_read(&dest->weight) > weight) weight = atomic_read(&dest->weight); } diff -prauN linux-2.6.0-test5/net/ipv4/netfilter/Kconfig wli-2.6.0-test5-bk12-25/net/ipv4/netfilter/Kconfig --- linux-2.6.0-test5/net/ipv4/netfilter/Kconfig 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv4/netfilter/Kconfig 2003-09-25 19:16:16.000000000 -0700 @@ -17,8 +17,7 @@ config IP_NF_CONNTRACK enhance packet filtering (see `Connection state match support' below). - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP_NF_FTP tristate "FTP protocol support" @@ -28,8 +27,7 @@ config IP_NF_FTP required for tracking them, and doing masquerading and other forms of Network Address Translation on them. - If you want to compile it as a module, say M here and read - . If unsure, say `Y'. + To compile it as a module, choose M here. If unsure, say Y. config IP_NF_IRC tristate "IRC protocol support" @@ -44,8 +42,7 @@ config IP_NF_IRC chats. Note that you do NOT need this extension to get files or have others initiate chats, or everything else in IRC. - If you want to compile it as a module, say M here and read - . If unsure, say `Y'. + To compile it as a module, choose M here. If unsure, say Y. config IP_NF_TFTP tristate "TFTP protocol support" @@ -56,8 +53,7 @@ config IP_NF_TFTP If you are using a tftp client behind -j SNAT or -j MASQUERADING you will need this. - If you want to compile it as a module, say M here and read - . If unsure, say `Y'. + To compile it as a module, choose M here. If unsure, say Y. config IP_NF_AMANDA tristate "Amanda backup protocol support" @@ -70,8 +66,7 @@ config IP_NF_AMANDA Amanda requires for communication of the backup data, messages and index. - If you want to compile it as a module, say M here and read - . If unsure, say `Y'. + To compile it as a module, choose M here. If unsure, say Y. config IP_NF_QUEUE tristate "Userspace queueing via NETLINK" @@ -79,8 +74,7 @@ config IP_NF_QUEUE Netfilter has the ability to queue packets to user space: the netlink device can be used to access them using this driver. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP_NF_IPTABLES tristate "IP tables support (required for filtering/masq/NAT)" @@ -90,8 +84,7 @@ config IP_NF_IPTABLES etc) subsystems now use this: say `Y' or `M' here if you want to use either of those. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. # The simple matches. config IP_NF_MATCH_LIMIT @@ -102,8 +95,7 @@ config IP_NF_MATCH_LIMIT matched: mainly useful in combination with the LOG target ("LOG target support", below) and to avoid some Denial of Service attacks. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP_NF_MATCH_IPRANGE tristate "IP range match support" @@ -112,8 +104,7 @@ config IP_NF_MATCH_IPRANGE This option makes possible to match IP addresses against IP address ranges. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP_NF_MATCH_MAC tristate "MAC address match support" @@ -122,8 +113,7 @@ config IP_NF_MATCH_MAC MAC matching allows you to match packets based on the source Ethernet address of the packet. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP_NF_MATCH_PKTTYPE tristate "Packet type match support" @@ -135,8 +125,7 @@ config IP_NF_MATCH_PKTTYPE Typical usage: iptables -A INPUT -m pkttype --pkt-type broadcast -j LOG - If you want to compile it as a module, say M here and read - Documentation/modules.txt. If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP_NF_MATCH_MARK tristate "netfilter MARK match support" @@ -146,8 +135,7 @@ config IP_NF_MATCH_MARK `nfmark' value in the packet. This can be set by the MARK target (see below). - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP_NF_MATCH_MULTIPORT tristate "Multiple port match support" @@ -157,8 +145,7 @@ config IP_NF_MATCH_MULTIPORT a series of source or destination ports: normally a rule can only match a single range of ports. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP_NF_MATCH_TOS tristate "TOS match support" @@ -167,8 +154,7 @@ config IP_NF_MATCH_TOS TOS matching allows you to match packets based on the Type Of Service fields of the IP packet. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP_NF_MATCH_RECENT tristate "recent match support" @@ -180,8 +166,7 @@ config IP_NF_MATCH_RECENT Short options are available by using 'iptables -m recent -h' Official Website: - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP_NF_MATCH_ECN tristate "ECN match support" @@ -190,8 +175,7 @@ config IP_NF_MATCH_ECN This option adds a `ECN' match, which allows you to match against the IPv4 and TCP header ECN fields. - If you want to compile it as a module, say M here and read - Documentation/modules.txt. If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP_NF_MATCH_DSCP tristate "DSCP match support" @@ -202,8 +186,7 @@ config IP_NF_MATCH_DSCP The DSCP codepoint can have any value between 0x0 and 0x4f. - If you want to compile it as a module, say M here and read - Documentation/modules.txt. If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP_NF_MATCH_AH_ESP tristate "AH/ESP match support" @@ -212,8 +195,7 @@ config IP_NF_MATCH_AH_ESP These two match extensions (`ah' and `esp') allow you to match a range of SPIs inside AH or ESP headers of IPSec packets. - If you want to compile it as a module, say M here and read - Documentation/modules.txt. If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP_NF_MATCH_LENGTH tristate "LENGTH match support" @@ -222,8 +204,7 @@ config IP_NF_MATCH_LENGTH This option allows you to match the length of a packet against a specific value or range of values. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP_NF_MATCH_TTL tristate "TTL match support" @@ -232,8 +213,7 @@ config IP_NF_MATCH_TTL This adds CONFIG_IP_NF_MATCH_TTL option, which enabled the user to match packets by their TTL value. - If you want to compile it as a module, say M here and read - Documentation/modules.txt. If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP_NF_MATCH_TCPMSS tristate "tcpmss match support" @@ -243,8 +223,7 @@ config IP_NF_MATCH_TCPMSS MSS value of TCP SYN packets, which control the maximum packet size for that connection. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP_NF_MATCH_HELPER tristate "Helper match support" @@ -253,8 +232,7 @@ config IP_NF_MATCH_HELPER Helper matching allows you to match packets in dynamic connections tracked by a conntrack-helper, ie. ip_conntrack_ftp - If you want to compile it as a module, say M here and read - Documentation/modules.txt. If unsure, say `Y'. + To compile it as a module, choose M here. If unsure, say Y. config IP_NF_MATCH_STATE tristate "Connection state match support" @@ -264,8 +242,7 @@ config IP_NF_MATCH_STATE relationship to a tracked connection (ie. previous packets). This is a powerful tool for packet classification. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP_NF_MATCH_CONNTRACK tristate "Connection tracking match support" @@ -277,8 +254,7 @@ config IP_NF_MATCH_CONNTRACK useful in complex configurations, such as NAT gateways with multiple internet links or tunnels. - If you want to compile it as a module, say M here and read - Documentation/modules.txt. If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP_NF_MATCH_OWNER tristate "Owner match support" @@ -287,8 +263,7 @@ config IP_NF_MATCH_OWNER Packet owner matching allows you to match locally-generated packets based on who created them: the user, group, process or session. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP_NF_MATCH_PHYSDEV tristate "Physdev match support" @@ -297,8 +272,7 @@ config IP_NF_MATCH_PHYSDEV Physdev packet matching matches against the physical bridge ports the IP packet arrived on or will leave by. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. # The targets config IP_NF_FILTER @@ -309,8 +283,7 @@ config IP_NF_FILTER rules for simple packet filtering at local input, forwarding and local output. See the man page for iptables(8). - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP_NF_TARGET_REJECT tristate "REJECT target support" @@ -320,8 +293,7 @@ config IP_NF_TARGET_REJECT error should be issued in response to an incoming packet, rather than silently being dropped. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP_NF_NAT tristate "Full NAT" @@ -331,8 +303,7 @@ config IP_NF_NAT forms of full Network Address Port Translation. It is controlled by the `nat' table in iptables: see the man page for iptables(8). - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP_NF_NAT_NEEDED bool @@ -349,8 +320,7 @@ config IP_NF_TARGET_MASQUERADE only useful for dialup accounts with dynamic IP address (ie. your IP address will be different on next dialup). - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP_NF_TARGET_REDIRECT tristate "REDIRECT target support" @@ -361,8 +331,7 @@ config IP_NF_TARGET_REDIRECT come to the local machine instead of passing through. This is useful for transparent proxies. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP_NF_TARGET_NETMAP tristate "NETMAP target support" @@ -373,8 +342,7 @@ config IP_NF_TARGET_NETMAP address part intact. It is similar to Fast NAT, except that Netfilter's connection tracking doesn't work well with Fast NAT. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP_NF_TARGET_SAME tristate "SAME target support" @@ -383,8 +351,7 @@ config IP_NF_TARGET_SAME This option adds a `SAME' target, which works like the standard SNAT target, but attempts to give clients the same IP for all connections. - If you want to compile it as a module, say M here and read - Documentation/modules.txt. If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP_NF_NAT_LOCAL bool "NAT of local connections (READ HELP)" @@ -413,8 +380,7 @@ config IP_NF_NAT_SNMP_BASIC This is the "basic" form of SNMP-ALG, as described in RFC 2962 - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP_NF_NAT_IRC tristate @@ -450,8 +416,7 @@ config IP_NF_MANGLE iptables(8). This table is used for various packet alterations which can effect how the packet is routed. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP_NF_TARGET_TOS tristate "TOS target support" @@ -461,8 +426,7 @@ config IP_NF_TARGET_TOS the `mangle' table which alter the Type Of Service field of an IP packet prior to routing. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP_NF_TARGET_ECN tristate "ECN target support" @@ -476,8 +440,7 @@ config IP_NF_TARGET_ECN existing ECN blackholes on the internet, but don't want to disable ECN support in general. - If you want to compile it as a module, say M here and read - Documentation/modules.txt. If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP_NF_TARGET_DSCP tristate "DSCP target support" @@ -488,8 +451,7 @@ config IP_NF_TARGET_DSCP The DSCP codepoint can have any value between 0x0 and 0x4f. - If you want to compile it as a module, say M here and read - Documentation/modules.txt. If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP_NF_TARGET_MARK tristate "MARK target support" @@ -502,8 +464,7 @@ config IP_NF_TARGET_MARK key') and can also be used by other subsystems to change their behavior. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP_NF_TARGET_CLASSIFY tristate "CLASSIFY target support" @@ -515,8 +476,7 @@ config IP_NF_TARGET_CLASSIFY atm, cbq, dsmark, pfifo_fast, htb, prio - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP_NF_TARGET_LOG tristate "LOG target support" @@ -525,8 +485,7 @@ config IP_NF_TARGET_LOG This option adds a `LOG' target, which allows you to create rules in any iptables table which records the packet header to the syslog. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP_NF_TARGET_ULOG tristate "ULOG target support" @@ -540,8 +499,7 @@ config IP_NF_TARGET_ULOG The apropriate userspace logging daemon (ulogd) may be obtained from http://www.gnumonks.org/projects/ulogd - If you want to compile it as a module, say M here and read - Documentation/modules.txt. If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP_NF_TARGET_TCPMSS tristate "TCPMSS target support" @@ -567,8 +525,7 @@ config IP_NF_TARGET_TCPMSS iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN \ -j TCPMSS --clamp-mss-to-pmtu - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP_NF_ARPTABLES tristate "ARP tables support" @@ -595,8 +552,7 @@ config IP_NF_COMPAT_IPCHAINS `Packet filtering'). With this enabled, you should be able to use the ipchains tool exactly as in 2.2 kernels. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP_NF_COMPAT_IPFWADM tristate "ipfwadm (2.0-style) support" @@ -608,8 +564,7 @@ config IP_NF_COMPAT_IPFWADM `Packet filtering'). With this enabled, you should be able to use the ipfwadm tool exactly as in 2.0 kernels. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. endmenu diff -prauN linux-2.6.0-test5/net/ipv4/netfilter/ip_nat_amanda.c wli-2.6.0-test5-bk12-25/net/ipv4/netfilter/ip_nat_amanda.c --- linux-2.6.0-test5/net/ipv4/netfilter/ip_nat_amanda.c 2003-09-08 12:49:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv4/netfilter/ip_nat_amanda.c 2003-09-25 19:16:16.000000000 -0700 @@ -101,7 +101,7 @@ static int amanda_data_fixup(struct ip_c struct ip_conntrack_expect *exp = expect; struct ip_ct_amanda_expect *ct_amanda_info = &exp->help.exp_amanda_info; struct ip_conntrack_tuple t = exp->tuple; - int port; + u_int16_t port; MUST_BE_LOCKED(&ip_amanda_lock); @@ -115,7 +115,7 @@ static int amanda_data_fixup(struct ip_c writable */ t.dst.ip = newip; - for (port = ct_amanda_info->port + 10; port != 0; port++) { + for (port = ct_amanda_info->port; port != 0; port++) { t.dst.u.tcp.port = htons(port); if (ip_conntrack_change_expect(exp, &t) == 0) break; diff -prauN linux-2.6.0-test5/net/ipv4/netfilter/ip_nat_irc.c wli-2.6.0-test5-bk12-25/net/ipv4/netfilter/ip_nat_irc.c --- linux-2.6.0-test5/net/ipv4/netfilter/ip_nat_irc.c 2003-09-08 12:50:43.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv4/netfilter/ip_nat_irc.c 2003-09-25 19:16:16.000000000 -0700 @@ -99,7 +99,7 @@ static int irc_data_fixup(const struct i struct ip_conntrack_tuple t; struct iphdr *iph = (*pskb)->nh.iph; struct tcphdr *tcph = (void *) iph + iph->ihl * 4; - int port; + u_int16_t port; /* "4294967296 65635 " */ char buffer[18]; diff -prauN linux-2.6.0-test5/net/ipv4/netfilter/ip_nat_snmp_basic.c wli-2.6.0-test5-bk12-25/net/ipv4/netfilter/ip_nat_snmp_basic.c --- linux-2.6.0-test5/net/ipv4/netfilter/ip_nat_snmp_basic.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv4/netfilter/ip_nat_snmp_basic.c 2003-09-25 19:16:16.000000000 -0700 @@ -51,9 +51,9 @@ #include #include #include +#include #include #include -#include MODULE_LICENSE("GPL"); MODULE_AUTHOR("James Morris "); diff -prauN linux-2.6.0-test5/net/ipv4/netfilter/ip_nat_tftp.c wli-2.6.0-test5-bk12-25/net/ipv4/netfilter/ip_nat_tftp.c --- linux-2.6.0-test5/net/ipv4/netfilter/ip_nat_tftp.c 2003-09-08 12:49:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv4/netfilter/ip_nat_tftp.c 2003-09-25 19:16:16.000000000 -0700 @@ -30,7 +30,7 @@ #include MODULE_AUTHOR("Magnus Boden "); -MODULE_DESCRIPTION("tfpt NAT helper"); +MODULE_DESCRIPTION("tftp NAT helper"); MODULE_LICENSE("GPL"); #define MAX_PORTS 8 diff -prauN linux-2.6.0-test5/net/ipv4/netfilter/ipt_MASQUERADE.c wli-2.6.0-test5-bk12-25/net/ipv4/netfilter/ipt_MASQUERADE.c --- linux-2.6.0-test5/net/ipv4/netfilter/ipt_MASQUERADE.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv4/netfilter/ipt_MASQUERADE.c 2003-09-25 19:16:16.000000000 -0700 @@ -130,57 +130,35 @@ masquerade_target(struct sk_buff **pskb, } static inline int -device_cmp(const struct ip_conntrack *i, void *ifindex) +device_cmp(const struct ip_conntrack *i, void *_ina) { - int ret; + int ret = 0; + struct in_ifaddr *ina = _ina; READ_LOCK(&masq_lock); - ret = (i->nat.masq_index == (int)(long)ifindex); + /* If it's masquerading out this interface with a different address, + or we don't know the new address of this interface. */ + if (i->nat.masq_index == ina->ifa_dev->dev->ifindex + && i->tuplehash[IP_CT_DIR_REPLY].tuple.dst.ip != ina->ifa_address) + ret = 1; READ_UNLOCK(&masq_lock); return ret; } -static int masq_device_event(struct notifier_block *this, - unsigned long event, - void *ptr) -{ - struct net_device *dev = ptr; - - if (event == NETDEV_DOWN) { - /* Device was downed. Search entire table for - conntracks which were associated with that device, - and forget them. */ - IP_NF_ASSERT(dev->ifindex != 0); - - ip_ct_selective_cleanup(device_cmp, (void *)(long)dev->ifindex); - } - - return NOTIFY_DONE; -} - static int masq_inet_event(struct notifier_block *this, unsigned long event, void *ptr) { - struct net_device *dev = ((struct in_ifaddr *)ptr)->ifa_dev->dev; - - if (event == NETDEV_DOWN) { - /* IP address was deleted. Search entire table for - conntracks which were associated with that device, - and forget them. */ - IP_NF_ASSERT(dev->ifindex != 0); - - ip_ct_selective_cleanup(device_cmp, (void *)(long)dev->ifindex); - } + /* For some configurations, interfaces often come back with + * the same address. If not, clean up old conntrack + * entries. */ + if (event == NETDEV_UP) + ip_ct_selective_cleanup(device_cmp, ptr); return NOTIFY_DONE; } -static struct notifier_block masq_dev_notifier = { - .notifier_call = masq_device_event, -}; - static struct notifier_block masq_inet_notifier = { .notifier_call = masq_inet_event, }; @@ -198,12 +176,9 @@ static int __init init(void) ret = ipt_register_target(&masquerade); - if (ret == 0) { - /* Register for device down reports */ - register_netdevice_notifier(&masq_dev_notifier); + if (ret == 0) /* Register IP address change reports */ register_inetaddr_notifier(&masq_inet_notifier); - } return ret; } @@ -211,7 +186,6 @@ static int __init init(void) static void __exit fini(void) { ipt_unregister_target(&masquerade); - unregister_netdevice_notifier(&masq_dev_notifier); unregister_inetaddr_notifier(&masq_inet_notifier); } diff -prauN linux-2.6.0-test5/net/ipv4/netfilter/ipt_REJECT.c wli-2.6.0-test5-bk12-25/net/ipv4/netfilter/ipt_REJECT.c --- linux-2.6.0-test5/net/ipv4/netfilter/ipt_REJECT.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv4/netfilter/ipt_REJECT.c 2003-09-25 19:16:16.000000000 -0700 @@ -84,45 +84,34 @@ static inline struct rtable *route_rever static void send_reset(struct sk_buff *oldskb, int local) { struct sk_buff *nskb; - struct tcphdr *otcph, *tcph; + struct tcphdr otcph, *tcph; struct rtable *rt; - unsigned int otcplen; u_int16_t tmp_port; u_int32_t tmp_addr; int needs_ack; int hh_len; - /* IP header checks: fragment, too short. */ - if (oldskb->nh.iph->frag_off & htons(IP_OFFSET) - || oldskb->len < (oldskb->nh.iph->ihl<<2) + sizeof(struct tcphdr)) + /* IP header checks: fragment. */ + if (oldskb->nh.iph->frag_off & htons(IP_OFFSET)) return; - otcph = (struct tcphdr *)((u_int32_t*)oldskb->nh.iph + oldskb->nh.iph->ihl); - otcplen = oldskb->len - oldskb->nh.iph->ihl*4; - if (skb_copy_bits(oldskb, oldskb->nh.iph->ihl*4, - otcph, sizeof(*otcph)) < 0) - return; + &otcph, sizeof(otcph)) < 0) + return; /* No RST for RST. */ - if (otcph->rst) - return; - - /* Check checksum. */ - if (tcp_v4_check(otcph, otcplen, oldskb->nh.iph->saddr, - oldskb->nh.iph->daddr, - csum_partial((char *)otcph, otcplen, 0)) != 0) + if (otcph.rst) return; + /* FIXME: Check checksum --RR */ if ((rt = route_reverse(oldskb, local)) == NULL) return; hh_len = (rt->u.dst.dev->hard_header_len + 15)&~15; - /* Copy skb (even if skb is about to be dropped, we can't just - clone it because there may be other things, such as tcpdump, - interested in it). We also need to expand headroom in case - hh_len of incoming interface < hh_len of outgoing interface */ + /* We need a linear, writeable skb. We also need to expand + headroom in case hh_len of incoming interface < hh_len of + outgoing interface */ nskb = skb_copy_expand(oldskb, hh_len, skb_tailroom(oldskb), GFP_ATOMIC); if (!nskb) { @@ -163,12 +152,13 @@ static void send_reset(struct sk_buff *o if (tcph->ack) { needs_ack = 0; - tcph->seq = otcph->ack_seq; + tcph->seq = otcph.ack_seq; tcph->ack_seq = 0; } else { needs_ack = 1; - tcph->ack_seq = htonl(ntohl(otcph->seq) + otcph->syn + otcph->fin - + otcplen - (otcph->doff<<2)); + tcph->ack_seq = htonl(ntohl(otcph.seq) + otcph.syn + otcph.fin + + oldskb->len - oldskb->nh.iph->ihl*4 + - (otcph.doff<<2)); tcph->seq = 0; } diff -prauN linux-2.6.0-test5/net/ipv4/netfilter/ipt_physdev.c wli-2.6.0-test5-bk12-25/net/ipv4/netfilter/ipt_physdev.c --- linux-2.6.0-test5/net/ipv4/netfilter/ipt_physdev.c 2003-09-08 12:49:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv4/netfilter/ipt_physdev.c 2003-09-25 19:16:16.000000000 -0700 @@ -23,7 +23,7 @@ match(const struct sk_buff *skb, int i; static const char nulldevname[IFNAMSIZ]; const struct ipt_physdev_info *info = matchinfo; - unsigned long ret; + unsigned int ret; const char *indev, *outdev; struct nf_bridge_info *nf_bridge; @@ -65,10 +65,10 @@ match(const struct sk_buff *skb, if (!(info->bitmask & IPT_PHYSDEV_OP_IN)) goto match_outdev; indev = nf_bridge->physindev ? nf_bridge->physindev->name : nulldevname; - for (i = 0, ret = 0; i < IFNAMSIZ/sizeof(unsigned long); i++) { - ret |= (((const unsigned long *)indev)[i] - ^ ((const unsigned long *)info->physindev)[i]) - & ((const unsigned long *)info->in_mask)[i]; + for (i = 0, ret = 0; i < IFNAMSIZ/sizeof(unsigned int); i++) { + ret |= (((const unsigned int *)indev)[i] + ^ ((const unsigned int *)info->physindev)[i]) + & ((const unsigned int *)info->in_mask)[i]; } if ((ret == 0) ^ !(info->invert & IPT_PHYSDEV_OP_IN)) @@ -79,10 +79,10 @@ match_outdev: return MATCH; outdev = nf_bridge->physoutdev ? nf_bridge->physoutdev->name : nulldevname; - for (i = 0, ret = 0; i < IFNAMSIZ/sizeof(unsigned long); i++) { - ret |= (((const unsigned long *)outdev)[i] - ^ ((const unsigned long *)info->physoutdev)[i]) - & ((const unsigned long *)info->out_mask)[i]; + for (i = 0, ret = 0; i < IFNAMSIZ/sizeof(unsigned int); i++) { + ret |= (((const unsigned int *)outdev)[i] + ^ ((const unsigned int *)info->physoutdev)[i]) + & ((const unsigned int *)info->out_mask)[i]; } return (ret != 0) ^ !(info->invert & IPT_PHYSDEV_OP_OUT); diff -prauN linux-2.6.0-test5/net/ipv4/proc.c wli-2.6.0-test5-bk12-25/net/ipv4/proc.c --- linux-2.6.0-test5/net/ipv4/proc.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv4/proc.c 2003-09-25 19:16:16.000000000 -0700 @@ -238,28 +238,21 @@ static struct file_operations netstat_se int __init ip_misc_proc_init(void) { int rc = 0; - struct proc_dir_entry *p; - p = create_proc_entry("netstat", S_IRUGO, proc_net); - if (!p) + if (!proc_net_fops_create("netstat", S_IRUGO, &netstat_seq_fops)) goto out_netstat; - p->proc_fops = &netstat_seq_fops; - p = create_proc_entry("snmp", S_IRUGO, proc_net); - if (!p) + if (!proc_net_fops_create("snmp", S_IRUGO, &snmp_seq_fops)) goto out_snmp; - p->proc_fops = &snmp_seq_fops; - p = create_proc_entry("sockstat", S_IRUGO, proc_net); - if (!p) + if (!proc_net_fops_create("sockstat", S_IRUGO, &sockstat_seq_fops)) goto out_sockstat; - p->proc_fops = &sockstat_seq_fops; out: return rc; out_sockstat: - remove_proc_entry("snmp", proc_net); + proc_net_remove("snmp"); out_snmp: - remove_proc_entry("netstat", proc_net); + proc_net_remove("netstat"); out_netstat: rc = -ENOMEM; goto out; diff -prauN linux-2.6.0-test5/net/ipv4/raw.c wli-2.6.0-test5-bk12-25/net/ipv4/raw.c --- linux-2.6.0-test5/net/ipv4/raw.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv4/raw.c 2003-09-25 19:16:16.000000000 -0700 @@ -736,14 +736,14 @@ static struct sock *raw_get_idx(struct s static void *raw_seq_start(struct seq_file *seq, loff_t *pos) { read_lock(&raw_v4_lock); - return *pos ? raw_get_idx(seq, *pos) : (void *)1; + return *pos ? raw_get_idx(seq, *pos - 1) : SEQ_START_TOKEN; } static void *raw_seq_next(struct seq_file *seq, void *v, loff_t *pos) { struct sock *sk; - if (v == (void *)1) + if (v == SEQ_START_TOKEN) sk = raw_get_first(seq); else sk = raw_get_next(seq, v); @@ -778,7 +778,7 @@ static int raw_seq_show(struct seq_file { char tmpbuf[129]; - if (v == (void *)1) + if (v == SEQ_START_TOKEN) seq_printf(seq, "%-127s\n", " sl local_address rem_address st tx_queue " "rx_queue tr tm->when retrnsmt uid timeout " @@ -831,19 +831,13 @@ static struct file_operations raw_seq_fo int __init raw_proc_init(void) { - struct proc_dir_entry *p; - int rc = 0; - - p = create_proc_entry("raw", S_IRUGO, proc_net); - if (p) - p->proc_fops = &raw_seq_fops; - else - rc = -ENOMEM; - return rc; + if (!proc_net_fops_create("raw", S_IRUGO, &raw_seq_fops)) + return -ENOMEM; + return 0; } void __init raw_proc_exit(void) { - remove_proc_entry("raw", proc_net); + proc_net_remove("raw"); } #endif /* CONFIG_PROC_FS */ diff -prauN linux-2.6.0-test5/net/ipv4/route.c wli-2.6.0-test5-bk12-25/net/ipv4/route.c --- linux-2.6.0-test5/net/ipv4/route.c 2003-09-08 12:50:41.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv4/route.c 2003-09-25 19:16:16.000000000 -0700 @@ -259,14 +259,14 @@ static struct rtable *rt_cache_get_idx(s static void *rt_cache_seq_start(struct seq_file *seq, loff_t *pos) { - return *pos ? rt_cache_get_idx(seq, *pos) : (void *)1; + return *pos ? rt_cache_get_idx(seq, *pos - 1) : SEQ_START_TOKEN; } static void *rt_cache_seq_next(struct seq_file *seq, void *v, loff_t *pos) { struct rtable *r = NULL; - if (v == (void *)1) + if (v == SEQ_START_TOKEN) r = rt_cache_get_first(seq); else r = rt_cache_get_next(seq, v); @@ -276,13 +276,13 @@ static void *rt_cache_seq_next(struct se static void rt_cache_seq_stop(struct seq_file *seq, void *v) { - if (v && v != (void *)1) + if (v && v != SEQ_START_TOKEN) rcu_read_unlock(); } static int rt_cache_seq_show(struct seq_file *seq, void *v) { - if (v == (void *)1) + if (v == SEQ_START_TOKEN) seq_printf(seq, "%-127s\n", "Iface\tDestination\tGateway \tFlags\t\tRefCnt\tUse\t" "Metric\tSource\t\tMTU\tWindow\tIRTT\tTOS\tHHRef\t" diff -prauN linux-2.6.0-test5/net/ipv4/tcp_diag.c wli-2.6.0-test5-bk12-25/net/ipv4/tcp_diag.c --- linux-2.6.0-test5/net/ipv4/tcp_diag.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv4/tcp_diag.c 2003-09-25 19:16:16.000000000 -0700 @@ -213,7 +213,7 @@ extern struct sock *tcp_v6_lookup(struct int dif); #endif -static int tcpdiag_get_exact(struct sk_buff *in_skb, struct nlmsghdr *nlh) +static int tcpdiag_get_exact(struct sk_buff *in_skb, const struct nlmsghdr *nlh) { int err; struct sock *sk; @@ -272,7 +272,7 @@ out: return err; } -int bitstring_match(u32 *a1, u32 *a2, int bits) +static int bitstring_match(const u32 *a1, const u32 *a2, int bits) { int words = bits >> 5; @@ -299,12 +299,12 @@ int bitstring_match(u32 *a1, u32 *a2, in } -int tcpdiag_bc_run(char *bc, int len, struct sock *sk) +static int tcpdiag_bc_run(const void *bc, int len, struct sock *sk) { while (len > 0) { int yes = 1; struct inet_opt *inet = inet_sk(sk); - struct tcpdiag_bc_op *op = (struct tcpdiag_bc_op*)bc; + const struct tcpdiag_bc_op *op = bc; switch (op->code) { case TCPDIAG_BC_NOP: @@ -385,10 +385,10 @@ int tcpdiag_bc_run(char *bc, int len, st return (len == 0); } -int valid_cc(char *bc, int len, int cc) +static int valid_cc(const void *bc, int len, int cc) { while (len >= 0) { - struct tcpdiag_bc_op *op = (struct tcpdiag_bc_op*)bc; + const struct tcpdiag_bc_op *op = bc; if (cc > len) return 0; @@ -402,9 +402,9 @@ int valid_cc(char *bc, int len, int cc) return 0; } -int tcpdiag_bc_audit(char *bytecode, int bytecode_len) +static int tcpdiag_bc_audit(const void *bytecode, int bytecode_len) { - char *bc = bytecode; + const unsigned char *bc = bytecode; int len = bytecode_len; while (len > 0) { @@ -442,7 +442,7 @@ int tcpdiag_bc_audit(char *bytecode, int } -int tcpdiag_dump(struct sk_buff *skb, struct netlink_callback *cb) +static int tcpdiag_dump(struct sk_buff *skb, struct netlink_callback *cb) { int i, num; int s_i, s_num; diff -prauN linux-2.6.0-test5/net/ipv4/tcp_ipv4.c wli-2.6.0-test5-bk12-25/net/ipv4/tcp_ipv4.c --- linux-2.6.0-test5/net/ipv4/tcp_ipv4.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv4/tcp_ipv4.c 2003-09-25 19:16:16.000000000 -0700 @@ -2351,7 +2351,7 @@ static void *tcp_get_idx(struct seq_file static void *tcp_seq_start(struct seq_file *seq, loff_t *pos) { - return *pos ? tcp_get_idx(seq, *pos - 1) : (void *)1; + return *pos ? tcp_get_idx(seq, *pos - 1) : SEQ_START_TOKEN; } static void *tcp_seq_next(struct seq_file *seq, void *v, loff_t *pos) @@ -2359,7 +2359,7 @@ static void *tcp_seq_next(struct seq_fil void *rc = NULL; struct tcp_iter_state* st; - if (v == (void *)1) { + if (v == SEQ_START_TOKEN) { rc = tcp_get_idx(seq, 0); goto out; } @@ -2397,7 +2397,7 @@ static void tcp_seq_stop(struct seq_file read_unlock_bh(&tp->syn_wait_lock); } case TCP_SEQ_STATE_LISTENING: - if (v != (void *)1) + if (v != SEQ_START_TOKEN) tcp_listen_unlock(); break; case TCP_SEQ_STATE_TIME_WAIT: @@ -2413,11 +2413,15 @@ static int tcp_seq_open(struct inode *in { struct tcp_seq_afinfo *afinfo = PDE(inode)->data; struct seq_file *seq; - int rc = -ENOMEM; - struct tcp_iter_state *s = kmalloc(sizeof(*s), GFP_KERNEL); + struct tcp_iter_state *s; + int rc; + if (unlikely(afinfo == NULL)) + return -EINVAL; + + s = kmalloc(sizeof(*s), GFP_KERNEL); if (!s) - goto out; + return -ENOMEM; memset(s, 0, sizeof(*s)); s->family = afinfo->family; s->seq_ops.start = tcp_seq_start; @@ -2450,11 +2454,10 @@ int tcp_proc_register(struct tcp_seq_afi afinfo->seq_fops->llseek = seq_lseek; afinfo->seq_fops->release = seq_release_private; - p = create_proc_entry(afinfo->name, S_IRUGO, proc_net); - if (p) { + p = proc_net_fops_create(afinfo->name, S_IRUGO, afinfo->seq_fops); + if (p) p->data = afinfo; - p->proc_fops = afinfo->seq_fops; - } else + else rc = -ENOMEM; return rc; } @@ -2463,7 +2466,7 @@ void tcp_proc_unregister(struct tcp_seq_ { if (!afinfo) return; - remove_proc_entry(afinfo->name, proc_net); + proc_net_remove(afinfo->name); memset(afinfo->seq_fops, 0, sizeof(*afinfo->seq_fops)); } @@ -2559,7 +2562,7 @@ static int tcp4_seq_show(struct seq_file struct tcp_iter_state* st; char tmpbuf[TMPSZ + 1]; - if (v == (void *)1) { + if (v == SEQ_START_TOKEN) { seq_printf(seq, "%-*s\n", TMPSZ - 1, " sl local_address rem_address st tx_queue " "rx_queue tr tm->when retrnsmt uid timeout " diff -prauN linux-2.6.0-test5/net/ipv4/udp.c wli-2.6.0-test5-bk12-25/net/ipv4/udp.c --- linux-2.6.0-test5/net/ipv4/udp.c 2003-09-08 12:49:54.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv4/udp.c 2003-09-25 19:16:16.000000000 -0700 @@ -384,6 +384,7 @@ static void udp_flush_pending_frames(str struct udp_opt *up = udp_sk(sk); if (up->pending) { + up->len = 0; up->pending = 0; ip_flush_pending_frames(sk); } @@ -1460,11 +1461,10 @@ int udp_proc_register(struct udp_seq_afi afinfo->seq_fops->llseek = seq_lseek; afinfo->seq_fops->release = seq_release_private; - p = create_proc_entry(afinfo->name, S_IRUGO, proc_net); - if (p) { + p = proc_net_fops_create(afinfo->name, S_IRUGO, afinfo->seq_fops); + if (p) p->data = afinfo; - p->proc_fops = afinfo->seq_fops; - } else + else rc = -ENOMEM; return rc; } @@ -1473,7 +1473,7 @@ void udp_proc_unregister(struct udp_seq_ { if (!afinfo) return; - remove_proc_entry(afinfo->name, proc_net); + proc_net_remove(afinfo->name); memset(afinfo->seq_fops, 0, sizeof(*afinfo->seq_fops)); } @@ -1497,7 +1497,7 @@ static void udp4_format_sock(struct sock static int udp4_seq_show(struct seq_file *seq, void *v) { - if (v == (void *)1) + if (v == SEQ_START_TOKEN) seq_printf(seq, "%-127s\n", " sl local_address rem_address st tx_queue " "rx_queue tr tm->when retrnsmt uid timeout " diff -prauN linux-2.6.0-test5/net/ipv6/addrconf.c wli-2.6.0-test5-bk12-25/net/ipv6/addrconf.c --- linux-2.6.0-test5/net/ipv6/addrconf.c 2003-09-08 12:50:29.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv6/addrconf.c 2003-09-25 19:16:16.000000000 -0700 @@ -2149,59 +2149,65 @@ struct if6_iter_state { int bucket; }; -static inline struct inet6_ifaddr *if6_get_bucket(struct seq_file *seq, loff_t *pos) +static struct inet6_ifaddr *if6_get_first(struct seq_file *seq) { - int i; struct inet6_ifaddr *ifa = NULL; - loff_t l = *pos; struct if6_iter_state *state = seq->private; - for (; state->bucket < IN6_ADDR_HSIZE; ++state->bucket) - for (i = 0, ifa = inet6_addr_lst[state->bucket]; ifa; ++i, ifa=ifa->lst_next) { - if (l--) - continue; - *pos = i; - goto out; - } -out: + for (state->bucket = 0; state->bucket < IN6_ADDR_HSIZE; ++state->bucket) { + ifa = inet6_addr_lst[state->bucket]; + if (ifa) + break; + } return ifa; } +static struct inet6_ifaddr *if6_get_next(struct seq_file *seq, struct inet6_ifaddr *ifa) +{ + struct if6_iter_state *state = seq->private; + + ifa = ifa->lst_next; +try_again: + if (!ifa && ++state->bucket < IN6_ADDR_HSIZE) { + ifa = inet6_addr_lst[state->bucket]; + goto try_again; + } + return ifa; +} + +static struct inet6_ifaddr *if6_get_idx(struct seq_file *seq, loff_t pos) +{ + struct inet6_ifaddr *ifa = if6_get_first(seq); + + if (ifa) + while(pos && (ifa = if6_get_next(seq, ifa)) != NULL) + --pos; + return pos ? NULL : ifa; +} + static void *if6_seq_start(struct seq_file *seq, loff_t *pos) { read_lock_bh(&addrconf_hash_lock); - return *pos ? if6_get_bucket(seq, pos) : (void *)1; + return if6_get_idx(seq, *pos); } static void *if6_seq_next(struct seq_file *seq, void *v, loff_t *pos) { struct inet6_ifaddr *ifa; - struct if6_iter_state *state; - - if (v == (void *)1) { - ifa = if6_get_bucket(seq, pos); - goto out; - } - - state = seq->private; - ifa = v; - ifa = ifa->lst_next; - if (ifa) - goto out; - - if (++state->bucket >= IN6_ADDR_HSIZE) - goto out; - - *pos = 0; - ifa = if6_get_bucket(seq, pos); -out: + ifa = if6_get_next(seq, v); ++*pos; return ifa; } -static inline void if6_iface_seq_show(struct seq_file *seq, struct inet6_ifaddr *ifp) +static void if6_seq_stop(struct seq_file *seq, void *v) +{ + read_unlock_bh(&addrconf_hash_lock); +} + +static int if6_seq_show(struct seq_file *seq, void *v) { + struct inet6_ifaddr *ifp = (struct inet6_ifaddr *)v; seq_printf(seq, "%04x%04x%04x%04x%04x%04x%04x%04x %02x %02x %02x %02x %8s\n", NIP6(ifp->addr), @@ -2210,22 +2216,9 @@ static inline void if6_iface_seq_show(st ifp->scope, ifp->flags, ifp->idev->dev->name); -} - -static int if6_seq_show(struct seq_file *seq, void *v) -{ - if (v == (void *)1) - return 0; - else - if6_iface_seq_show(seq, v); return 0; } -static void if6_seq_stop(struct seq_file *seq, void *v) -{ - read_unlock_bh(&addrconf_hash_lock); -} - static struct seq_operations if6_seq_ops = { .start = if6_seq_start, .next = if6_seq_next, @@ -2266,16 +2259,11 @@ static struct file_operations if6_fops = int __init if6_proc_init(void) { - struct proc_dir_entry *p; - int rc = 0; - - p = create_proc_entry("if_inet6", S_IRUGO, proc_net); - if (p) - p->proc_fops = &if6_fops; - else - rc = -ENOMEM; - return rc; + if (!proc_net_fops_create("if_inet6", S_IRUGO, &if6_fops)) + return -ENOMEM; + return 0; } + void if6_proc_exit(void) { proc_net_remove("if_inet6"); @@ -2529,7 +2517,109 @@ static void inet6_ifa_notify(int event, netlink_broadcast(rtnl, skb, 0, RTMGRP_IPV6_IFADDR, GFP_ATOMIC); } +static void inline ipv6_store_devconf(struct ipv6_devconf *cnf, + __s32 *array, int bytes) +{ + memset(array, 0, bytes); + array[DEVCONF_FORWARDING] = cnf->forwarding; + array[DEVCONF_HOPLIMIT] = cnf->hop_limit; + array[DEVCONF_MTU6] = cnf->mtu6; + array[DEVCONF_ACCEPT_RA] = cnf->accept_ra; + array[DEVCONF_ACCEPT_REDIRECTS] = cnf->accept_redirects; + array[DEVCONF_AUTOCONF] = cnf->autoconf; + array[DEVCONF_DAD_TRANSMITS] = cnf->dad_transmits; + array[DEVCONF_RTR_SOLICITS] = cnf->rtr_solicits; + array[DEVCONF_RTR_SOLICIT_INTERVAL] = cnf->rtr_solicit_interval; + array[DEVCONF_RTR_SOLICIT_DELAY] = cnf->rtr_solicit_delay; +#ifdef CONFIG_IPV6_PRIVACY + array[DEVCONF_USE_TEMPADDR] = cnf->use_tempaddr; + array[DEVCONF_TEMP_VALID_LFT] = cnf->temp_valid_lft; + array[DEVCONF_TEMP_PREFERED_LFT] = cnf->temp_prefered_lft; + array[DEVCONF_REGEN_MAX_RETRY] = cnf->regen_max_retry; + array[DEVCONF_MAX_DESYNC_FACTOR] = cnf->max_desync_factor; +#endif +} + +static int inet6_fill_ifinfo(struct sk_buff *skb, struct net_device *dev, + struct inet6_dev *idev, + int type, u32 pid, u32 seq) +{ + __s32 *array = NULL; + struct ifinfomsg *r; + struct nlmsghdr *nlh; + unsigned char *b = skb->tail; + struct rtattr *subattr; + + nlh = NLMSG_PUT(skb, pid, seq, type, sizeof(*r)); + if (pid) nlh->nlmsg_flags |= NLM_F_MULTI; + r = NLMSG_DATA(nlh); + r->ifi_family = AF_INET6; + r->ifi_type = dev->type; + r->ifi_index = dev->ifindex; + r->ifi_flags = dev->flags; + r->ifi_change = 0; + if (!netif_running(dev) || !netif_carrier_ok(dev)) + r->ifi_flags &= ~IFF_RUNNING; + else + r->ifi_flags |= IFF_RUNNING; + + RTA_PUT(skb, IFLA_IFNAME, strlen(dev->name)+1, dev->name); + + subattr = (struct rtattr*)skb->tail; + + RTA_PUT(skb, IFLA_PROTINFO, 0, NULL); + + /* return the device flags */ + RTA_PUT(skb, IFLA_INET6_FLAGS, sizeof(__u32), &idev->if_flags); + + /* return the device sysctl params */ + if ((array = kmalloc(DEVCONF_MAX * sizeof(*array), GFP_ATOMIC)) == NULL) + goto rtattr_failure; + ipv6_store_devconf(&idev->cnf, array, DEVCONF_MAX * sizeof(*array)); + RTA_PUT(skb, IFLA_INET6_CONF, DEVCONF_MAX * sizeof(*array), array); + + /* XXX - Statistics/MC not implemented */ + subattr->rta_len = skb->tail - (u8*)subattr; + + nlh->nlmsg_len = skb->tail - b; + kfree(array); + return skb->len; + +nlmsg_failure: +rtattr_failure: + if (array) + kfree(array); + skb_trim(skb, b - skb->data); + return -1; +} + +static int inet6_dump_ifinfo(struct sk_buff *skb, struct netlink_callback *cb) +{ + int idx, err; + int s_idx = cb->args[0]; + struct net_device *dev; + struct inet6_dev *idev; + + read_lock(&dev_base_lock); + for (dev=dev_base, idx=0; dev; dev = dev->next, idx++) { + if (idx < s_idx) + continue; + if ((idev = in6_dev_get(dev)) == NULL) + continue; + err = inet6_fill_ifinfo(skb, dev, idev, RTM_NEWLINK, + NETLINK_CB(cb->skb).pid, cb->nlh->nlmsg_seq); + in6_dev_put(idev); + if (err <= 0) + break; + } + read_unlock(&dev_base_lock); + cb->args[0] = idx; + + return skb->len; +} + static struct rtnetlink_link inet6_rtnetlink_table[RTM_MAX - RTM_BASE + 1] = { + [RTM_GETLINK - RTM_BASE] = { .dumpit = inet6_dump_ifinfo, }, [RTM_NEWADDR - RTM_BASE] = { .doit = inet6_rtm_newaddr, }, [RTM_DELADDR - RTM_BASE] = { .doit = inet6_rtm_deladdr, }, [RTM_GETADDR - RTM_BASE] = { .dumpit = inet6_dump_ifaddr, }, diff -prauN linux-2.6.0-test5/net/ipv6/anycast.c wli-2.6.0-test5-bk12-25/net/ipv6/anycast.c --- linux-2.6.0-test5/net/ipv6/anycast.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv6/anycast.c 2003-09-25 19:16:16.000000000 -0700 @@ -505,7 +505,7 @@ static struct ifacaddr6 *ac6_get_idx(str static void *ac6_seq_start(struct seq_file *seq, loff_t *pos) { read_lock(&dev_base_lock); - return *pos ? ac6_get_idx(seq, *pos) : ac6_get_first(seq); + return ac6_get_idx(seq, *pos); } static void *ac6_seq_next(struct seq_file *seq, void *v, loff_t *pos) @@ -581,11 +581,9 @@ static struct file_operations ac6_seq_fo int __init ac6_proc_init(void) { - struct proc_dir_entry *p; + if (!proc_net_fops_create("anycast6", S_IRUGO, &ac6_seq_fops)) + return -ENOMEM; - p = create_proc_entry("anycast6", S_IRUGO, proc_net); - if (p) - p->proc_fops = &ac6_seq_fops; return 0; } diff -prauN linux-2.6.0-test5/net/ipv6/ip6_flowlabel.c wli-2.6.0-test5-bk12-25/net/ipv6/ip6_flowlabel.c --- linux-2.6.0-test5/net/ipv6/ip6_flowlabel.c 2003-09-08 12:49:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv6/ip6_flowlabel.c 2003-09-25 19:16:16.000000000 -0700 @@ -603,14 +603,14 @@ static struct ip6_flowlabel *ip6fl_get_i static void *ip6fl_seq_start(struct seq_file *seq, loff_t *pos) { read_lock_bh(&ip6_fl_lock); - return *pos ? ip6fl_get_idx(seq, *pos) : (void *)1; + return *pos ? ip6fl_get_idx(seq, *pos - 1) : SEQ_START_TOKEN; } static void *ip6fl_seq_next(struct seq_file *seq, void *v, loff_t *pos) { struct ip6_flowlabel *fl; - if (v == (void *)1) + if (v == SEQ_START_TOKEN) fl = ip6fl_get_first(seq); else fl = ip6fl_get_next(seq, v); @@ -644,7 +644,7 @@ static void ip6fl_fl_seq_show(struct seq static int ip6fl_seq_show(struct seq_file *seq, void *v) { - if (v == (void *)1) + if (v == SEQ_START_TOKEN) seq_printf(seq, "Label S Owner Users Linger Expires " "Dst Opt\n"); else @@ -695,12 +695,7 @@ static struct file_operations ip6fl_seq_ void ip6_flowlabel_init() { #ifdef CONFIG_PROC_FS - struct proc_dir_entry *p; -#endif -#ifdef CONFIG_PROC_FS - p = create_proc_entry("ip6_flowlabel", S_IRUGO, proc_net); - if (p) - p->proc_fops = &ip6fl_seq_fops; + proc_net_fops_create("ip6_flowlabel", S_IRUGO, &ip6fl_seq_fops); #endif } diff -prauN linux-2.6.0-test5/net/ipv6/mcast.c wli-2.6.0-test5-bk12-25/net/ipv6/mcast.c --- linux-2.6.0-test5/net/ipv6/mcast.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv6/mcast.c 2003-09-25 19:16:17.000000000 -0700 @@ -2119,7 +2119,7 @@ static struct ifmcaddr6 *igmp6_mc_get_id static void *igmp6_mc_seq_start(struct seq_file *seq, loff_t *pos) { read_lock(&dev_base_lock); - return *pos ? igmp6_mc_get_idx(seq, *pos) : igmp6_mc_get_first(seq); + return igmp6_mc_get_idx(seq, *pos); } static void *igmp6_mc_seq_next(struct seq_file *seq, void *v, loff_t *pos) @@ -2278,13 +2278,13 @@ static struct ip6_sf_list *igmp6_mcf_get static void *igmp6_mcf_seq_start(struct seq_file *seq, loff_t *pos) { read_lock(&dev_base_lock); - return *pos ? igmp6_mcf_get_idx(seq, *pos) : (void *)1; + return *pos ? igmp6_mcf_get_idx(seq, *pos - 1) : SEQ_START_TOKEN; } static void *igmp6_mcf_seq_next(struct seq_file *seq, void *v, loff_t *pos) { struct ip6_sf_list *psf; - if (v == (void *)1) + if (v == SEQ_START_TOKEN) psf = igmp6_mcf_get_first(seq); else psf = igmp6_mcf_get_next(seq, v); @@ -2313,7 +2313,7 @@ static int igmp6_mcf_seq_show(struct seq struct ip6_sf_list *psf = (struct ip6_sf_list *)v; struct igmp6_mcf_iter_state *state = igmp6_mcf_seq_private(seq); - if (v == (void *)1) { + if (v == SEQ_START_TOKEN) { seq_printf(seq, "%3s %6s " "%32s %32s %6s %6s\n", "Idx", @@ -2378,9 +2378,6 @@ int __init igmp6_init(struct net_proto_f struct ipv6_pinfo *np; struct sock *sk; int err; -#ifdef CONFIG_PROC_FS - struct proc_dir_entry *p; -#endif err = sock_create(PF_INET6, SOCK_RAW, IPPROTO_ICMPV6, &igmp6_socket); if (err < 0) { @@ -2399,12 +2396,8 @@ int __init igmp6_init(struct net_proto_f np->hop_limit = 1; #ifdef CONFIG_PROC_FS - p = create_proc_entry("igmp6", S_IRUGO, proc_net); - if (p) - p->proc_fops = &igmp6_mc_seq_fops; - p = create_proc_entry("mcfilter6", S_IRUGO, proc_net); - if (p) - p->proc_fops = &igmp6_mcf_seq_fops; + proc_net_fops_create("igmp6", S_IRUGO, &igmp6_mc_seq_fops); + proc_net_fops_create("mcfilter6", S_IRUGO, &igmp6_mcf_seq_fops); #endif return 0; @@ -2414,6 +2407,7 @@ void igmp6_cleanup(void) { sock_release(igmp6_socket); igmp6_socket = NULL; /* for safety */ + #ifdef CONFIG_PROC_FS proc_net_remove("mcfilter6"); proc_net_remove("igmp6"); diff -prauN linux-2.6.0-test5/net/ipv6/ndisc.c wli-2.6.0-test5-bk12-25/net/ipv6/ndisc.c --- linux-2.6.0-test5/net/ipv6/ndisc.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv6/ndisc.c 2003-09-25 19:16:17.000000000 -0700 @@ -1044,6 +1044,17 @@ static void ndisc_router_discovery(struc in6_dev->if_flags |= IF_RA_RCVD; } + /* + * Remember the managed/otherconf flags from most recently + * received RA message (RFC 2462) -- yoshfuji + */ + in6_dev->if_flags = (in6_dev->if_flags & ~(IF_RA_MANAGED | + IF_RA_OTHERCONF)) | + (ra_msg->icmph.icmp6_addrconf_managed ? + IF_RA_MANAGED : 0) | + (ra_msg->icmph.icmp6_addrconf_other ? + IF_RA_OTHERCONF : 0); + lifetime = ntohs(ra_msg->icmph.icmp6_rt_lifetime); rt = rt6_get_dflt_router(&skb->nh.ipv6h->saddr, skb->dev); diff -prauN linux-2.6.0-test5/net/ipv6/netfilter/Kconfig wli-2.6.0-test5-bk12-25/net/ipv6/netfilter/Kconfig --- linux-2.6.0-test5/net/ipv6/netfilter/Kconfig 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv6/netfilter/Kconfig 2003-09-25 19:16:17.000000000 -0700 @@ -24,8 +24,7 @@ config IP6_NF_QUEUE Universidad Politecnica de Alcala de Henares email: fanton@it.uc3m.es - If you want to compile it as a module, say M here and read - Documentation/modules.txt. If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP6_NF_IPTABLES tristate "IP6 tables support (required for filtering/masq/NAT)" @@ -35,8 +34,7 @@ config IP6_NF_IPTABLES for IPv6 use this, but connection tracking is going to follow. Say 'Y' or 'M' here if you want to use either of those. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. # The simple matches. config IP6_NF_MATCH_LIMIT @@ -47,8 +45,7 @@ config IP6_NF_MATCH_LIMIT matched: mainly useful in combination with the LOG target ("LOG target support", below) and to avoid some Denial of Service attacks. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP6_NF_MATCH_MAC tristate "MAC address match support" @@ -57,8 +54,7 @@ config IP6_NF_MATCH_MAC mac matching allows you to match packets based on the source Ethernet address of the packet. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP6_NF_MATCH_RT tristate "Routing header match support" @@ -67,8 +63,7 @@ config IP6_NF_MATCH_RT rt matching allows you to match packets based on the routing header of the packet. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP6_NF_MATCH_OPTS tristate "Hop-by-hop and Dst opts header match support" @@ -77,8 +72,7 @@ config IP6_NF_MATCH_OPTS This allows one to match packets based on the hop-by-hop and destination options headers of a packet. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP6_NF_MATCH_FRAG tristate "Fragmentation header match support" @@ -87,8 +81,7 @@ config IP6_NF_MATCH_FRAG frag matching allows you to match packets based on the fragmentation header of the packet. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP6_NF_MATCH_HL tristate "HL match support" @@ -97,8 +90,7 @@ config IP6_NF_MATCH_HL HL matching allows you to match packets based on the hop limit of the packet. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP6_NF_MATCH_MULTIPORT tristate "Multiple port match support" @@ -108,8 +100,7 @@ config IP6_NF_MATCH_MULTIPORT a series of source or destination ports: normally a rule can only match a single range of ports. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP6_NF_MATCH_OWNER tristate "Owner match support" @@ -118,8 +109,7 @@ config IP6_NF_MATCH_OWNER Packet owner matching allows you to match locally-generated packets based on who created them: the user, group, process or session. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. # dep_tristate ' MAC address match support' CONFIG_IP6_NF_MATCH_MAC $CONFIG_IP6_NF_IPTABLES config IP6_NF_MATCH_MARK @@ -130,8 +120,7 @@ config IP6_NF_MATCH_MARK `nfmark' value in the packet. This can be set by the MARK target (see below). - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP6_NF_MATCH_IPV6HEADER tristate "IPv6 Extension Headers Match" @@ -140,8 +129,7 @@ config IP6_NF_MATCH_IPV6HEADER This module allows one to match packets based upon the ipv6 extension headers. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP6_NF_MATCH_AHESP tristate "AH/ESP match support" @@ -149,8 +137,7 @@ config IP6_NF_MATCH_AHESP help This module allows one to match AH and ESP packets. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP6_NF_MATCH_LENGTH tristate "Packet Length match support" @@ -159,8 +146,7 @@ config IP6_NF_MATCH_LENGTH This option allows you to match the length of a packet against a specific value or range of values. - If you want to compile it as a module, say M here and read - Documentation/modules.txt. If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP6_NF_MATCH_EUI64 tristate "EUI64 address check" @@ -170,8 +156,7 @@ config IP6_NF_MATCH_EUI64 Compares the last 64 bits with the EUI64 (delivered from the MAC address) address - If you want to compile it as a module, say M here and read - Documentation/modules.txt. If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. # dep_tristate ' Multiple port match support' CONFIG_IP6_NF_MATCH_MULTIPORT $CONFIG_IP6_NF_IPTABLES # dep_tristate ' TOS match support' CONFIG_IP6_NF_MATCH_TOS $CONFIG_IP6_NF_IPTABLES @@ -191,8 +176,7 @@ config IP6_NF_FILTER rules for simple packet filtering at local input, forwarding and local output. See the man page for iptables(8). - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. config IP6_NF_TARGET_LOG tristate "LOG target support" @@ -201,8 +185,7 @@ config IP6_NF_TARGET_LOG This option adds a `LOG' target, which allows you to create rules in any iptables table which records the packet header to the syslog. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. # if [ "$CONFIG_IP6_NF_FILTER" != "n" ]; then # dep_tristate ' REJECT target support' CONFIG_IP6_NF_TARGET_REJECT $CONFIG_IP6_NF_FILTER @@ -218,8 +201,7 @@ config IP6_NF_MANGLE iptables(8). This table is used for various packet alterations which can effect how the packet is routed. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. # dep_tristate ' TOS target support' CONFIG_IP6_NF_TARGET_TOS $CONFIG_IP_NF_MANGLE config IP6_NF_TARGET_MARK @@ -233,8 +215,7 @@ config IP6_NF_TARGET_MARK key') and can also be used by other subsystems to change their behavior. - If you want to compile it as a module, say M here and read - . If unsure, say `N'. + To compile it as a module, choose M here. If unsure, say N. #dep_tristate ' LOG target support' CONFIG_IP6_NF_TARGET_LOG $CONFIG_IP6_NF_IPTABLES endmenu diff -prauN linux-2.6.0-test5/net/ipv6/proc.c wli-2.6.0-test5-bk12-25/net/ipv6/proc.c --- linux-2.6.0-test5/net/ipv6/proc.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv6/proc.c 2003-09-25 19:16:17.000000000 -0700 @@ -32,7 +32,6 @@ #ifdef CONFIG_PROC_FS static struct proc_dir_entry *proc_net_devsnmp6; -#endif static int fold_prot_inuse(struct proto *proto) { @@ -58,7 +57,6 @@ static int sockstat6_seq_show(struct seq return 0; } - struct snmp6_item { char *name; @@ -221,9 +219,7 @@ static struct file_operations snmp6_seq_ int snmp6_register_dev(struct inet6_dev *idev) { int err = -ENOMEM; -#ifdef CONFIG_PROC_FS struct proc_dir_entry *p; -#endif if (!idev || !idev->dev) return -EINVAL; @@ -232,7 +228,6 @@ int snmp6_register_dev(struct inet6_dev __alignof__(struct icmpv6_mib)) < 0) goto err_icmp; -#ifdef CONFIG_PROC_FS if (!proc_net_devsnmp6) { err = -ENOENT; goto err_proc; @@ -244,27 +239,22 @@ int snmp6_register_dev(struct inet6_dev p->proc_fops = &snmp6_seq_fops; idev->stats.proc_dir_entry = p; -#endif return 0; -#ifdef CONFIG_PROC_FS err_proc: snmp6_mib_free((void **)idev->stats.icmpv6); -#endif err_icmp: return err; } int snmp6_unregister_dev(struct inet6_dev *idev) { -#ifdef CONFIG_PROC_FS if (!proc_net_devsnmp6) return -ENOENT; if (!idev || !idev->stats.proc_dir_entry) return -EINVAL; remove_proc_entry(idev->stats.proc_dir_entry->name, proc_net_devsnmp6); -#endif snmp6_mib_free((void **)idev->stats.icmpv6); return 0; @@ -273,21 +263,16 @@ int snmp6_unregister_dev(struct inet6_de int __init ipv6_misc_proc_init(void) { int rc = 0; - struct proc_dir_entry *p; - p = create_proc_entry("snmp6", S_IRUGO, proc_net); - if (!p) + if (!proc_net_fops_create("snmp6", S_IRUGO, &snmp6_seq_fops)) goto proc_snmp6_fail; - else - p->proc_fops = &snmp6_seq_fops; + proc_net_devsnmp6 = proc_mkdir("dev_snmp6", proc_net); if (!proc_net_devsnmp6) goto proc_dev_snmp6_fail; - p = create_proc_entry("sockstat6", S_IRUGO, proc_net); - if (!p) + + if (!proc_net_fops_create("sockstat6", S_IRUGO, &sockstat6_seq_fops)) goto proc_sockstat6_fail; - else - p->proc_fops = &sockstat6_seq_fops; out: return rc; @@ -307,3 +292,31 @@ void ipv6_misc_proc_exit(void) proc_net_remove("snmp6"); } +#else /* CONFIG_PROC_FS */ + + +int snmp6_register_dev(struct inet6_dev *idev) +{ + int err = -ENOMEM; + + if (!idev || !idev->dev) + return -EINVAL; + + if (snmp6_mib_init((void **)idev->stats.icmpv6, sizeof(struct icmpv6_mib), + __alignof__(struct icmpv6_mib)) < 0) + goto err_icmp; + + return 0; + +err_icmp: + return err; +} + +int snmp6_unregister_dev(struct inet6_dev *idev) +{ + snmp6_mib_free((void **)idev->stats.icmpv6); + return 0; +} + +#endif + diff -prauN linux-2.6.0-test5/net/ipv6/raw.c wli-2.6.0-test5-bk12-25/net/ipv6/raw.c --- linux-2.6.0-test5/net/ipv6/raw.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv6/raw.c 2003-09-25 19:16:17.000000000 -0700 @@ -961,14 +961,14 @@ static struct sock *raw6_get_idx(struct static void *raw6_seq_start(struct seq_file *seq, loff_t *pos) { read_lock(&raw_v6_lock); - return *pos ? raw6_get_idx(seq, *pos) : (void *)1; + return *pos ? raw6_get_idx(seq, *pos - 1) : SEQ_START_TOKEN; } static void *raw6_seq_next(struct seq_file *seq, void *v, loff_t *pos) { struct sock *sk; - if (v == (void *)1) + if (v == SEQ_START_TOKEN) sk = raw6_get_first(seq); else sk = raw6_get_next(seq, v); @@ -1010,7 +1010,7 @@ static void raw6_sock_seq_show(struct se static int raw6_seq_show(struct seq_file *seq, void *v) { - if (v == (void *)1) + if (v == SEQ_START_TOKEN) seq_printf(seq, " sl " "local_address " @@ -1059,12 +1059,8 @@ static struct file_operations raw6_seq_f int __init raw6_proc_init(void) { - struct proc_dir_entry *p = create_proc_entry("raw6", S_IRUGO, proc_net); - - if (!p) + if (!proc_net_fops_create("raw6", S_IRUGO, &raw6_seq_fops)) return -ENOMEM; - p->proc_fops = &raw6_seq_fops; - return 0; } diff -prauN linux-2.6.0-test5/net/ipv6/tcp_ipv6.c wli-2.6.0-test5-bk12-25/net/ipv6/tcp_ipv6.c --- linux-2.6.0-test5/net/ipv6/tcp_ipv6.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv6/tcp_ipv6.c 2003-09-25 19:16:17.000000000 -0700 @@ -2023,11 +2023,12 @@ static void get_timewait6_sock(struct se atomic_read(&tw->tw_refcnt), tw); } +#ifdef CONFIG_PROC_FS static int tcp6_seq_show(struct seq_file *seq, void *v) { struct tcp_iter_state *st; - if (v == (void *)1) { + if (v == SEQ_START_TOKEN) { seq_printf(seq, " sl " "local_address " @@ -2072,6 +2073,7 @@ void tcp6_proc_exit(void) { tcp_proc_unregister(&tcp6_seq_afinfo); } +#endif struct proto tcpv6_prot = { .name = "TCPv6", diff -prauN linux-2.6.0-test5/net/ipv6/udp.c wli-2.6.0-test5-bk12-25/net/ipv6/udp.c --- linux-2.6.0-test5/net/ipv6/udp.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipv6/udp.c 2003-09-25 19:16:17.000000000 -0700 @@ -704,6 +704,7 @@ static void udp_v6_flush_pending_frames( struct udp_opt *up = udp_sk(sk); if (up->pending) { + up->len = 0; up->pending = 0; ip6_flush_pending_frames(sk); } @@ -1113,7 +1114,7 @@ static void udp6_sock_seq_show(struct se static int udp6_seq_show(struct seq_file *seq, void *v) { - if (v == (void *)1) + if (v == SEQ_START_TOKEN) seq_printf(seq, " sl " "local_address " diff -prauN linux-2.6.0-test5/net/ipx/ipx_proc.c wli-2.6.0-test5-bk12-25/net/ipx/ipx_proc.c --- linux-2.6.0-test5/net/ipx/ipx_proc.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/ipx/ipx_proc.c 2003-09-25 19:16:17.000000000 -0700 @@ -39,7 +39,7 @@ static void *ipx_seq_interface_start(str loff_t l = *pos; spin_lock_bh(&ipx_interfaces_lock); - return l ? ipx_get_interface_idx(--l) : (void *)1; + return l ? ipx_get_interface_idx(--l) : SEQ_START_TOKEN; } static void *ipx_seq_interface_next(struct seq_file *seq, void *v, loff_t *pos) @@ -47,7 +47,7 @@ static void *ipx_seq_interface_next(stru struct ipx_interface *i; ++*pos; - if (v == (void *)1) + if (v == SEQ_START_TOKEN) i = ipx_interfaces_head(); else i = ipx_interfaces_next(v); @@ -63,7 +63,7 @@ static int ipx_seq_interface_show(struct { struct ipx_interface *i; - if (v == (void *)1) { + if (v == SEQ_START_TOKEN) { seq_puts(seq, "Network Node_Address Primary Device " "Frame_Type"); #ifdef IPX_REFCNT_DEBUG @@ -123,7 +123,7 @@ static void *ipx_seq_route_start(struct { loff_t l = *pos; read_lock_bh(&ipx_routes_lock); - return l ? ipx_get_route_idx(--l) : (void *)1; + return l ? ipx_get_route_idx(--l) : SEQ_START_TOKEN; } static void *ipx_seq_route_next(struct seq_file *seq, void *v, loff_t *pos) @@ -131,7 +131,7 @@ static void *ipx_seq_route_next(struct s struct ipx_route *r; ++*pos; - if (v == (void *)1) + if (v == SEQ_START_TOKEN) r = ipx_routes_head(); else r = ipx_routes_next(v); @@ -147,7 +147,7 @@ static int ipx_seq_route_show(struct seq { struct ipx_route *rt; - if (v == (void *)1) { + if (v == SEQ_START_TOKEN) { seq_puts(seq, "Network Router_Net Router_Node\n"); goto out; } @@ -195,7 +195,7 @@ static void *ipx_seq_socket_start(struct loff_t l = *pos; spin_lock_bh(&ipx_interfaces_lock); - return l ? ipx_get_socket_idx(--l) : (void *)1; + return l ? ipx_get_socket_idx(--l) : SEQ_START_TOKEN; } static void *ipx_seq_socket_next(struct seq_file *seq, void *v, loff_t *pos) @@ -205,7 +205,7 @@ static void *ipx_seq_socket_next(struct struct ipx_opt *ipxs; ++*pos; - if (v == (void *)1) { + if (v == SEQ_START_TOKEN) { sk = NULL; i = ipx_interfaces_head(); if (!i) @@ -245,7 +245,7 @@ static int ipx_seq_socket_show(struct se struct sock *s; struct ipx_opt *ipxs; - if (v == (void *)1) { + if (v == SEQ_START_TOKEN) { #ifdef CONFIG_IPX_INTERN seq_puts(seq, "Local_Address " "Remote_Address Tx_Queue " diff -prauN linux-2.6.0-test5/net/irda/discovery.c wli-2.6.0-test5-bk12-25/net/irda/discovery.c --- linux-2.6.0-test5/net/irda/discovery.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/irda/discovery.c 2003-09-25 19:16:17.000000000 -0700 @@ -32,6 +32,7 @@ #include #include +#include #include #include @@ -349,70 +350,131 @@ __u32 irlmp_find_device(hashbin_t *cache return 0; } -/* - * Function proc_discovery_read (buf, start, offset, len, unused) - * - * Print discovery information in /proc file system - * - */ -int discovery_proc_read(char *buf, char **start, off_t offset, int length, - int unused) -{ - discovery_t *discovery; +#ifdef CONFIG_PROC_FS +struct discovery_iter_state { unsigned long flags; - hashbin_t *cachelog = irlmp->cachelog; - int len = 0; +}; - if (!irlmp) - return len; +static inline discovery_t *discovery_seq_idx(loff_t pos) - len = sprintf(buf, "IrLMP: Discovery log:\n\n"); - - spin_lock_irqsave(&cachelog->hb_spinlock, flags); +{ + discovery_t *discovery; - discovery = (discovery_t *) hashbin_get_first(cachelog); - while (( discovery != NULL) && (len < length)) { - len += sprintf(buf+len, "nickname: %s,", discovery->data.info); + for (discovery = (discovery_t *) hashbin_get_first(irlmp->cachelog); + discovery != NULL; + discovery = (discovery_t *) hashbin_get_next(irlmp->cachelog)) { + if (pos-- == 0) + break; + } - len += sprintf(buf+len, " hint: 0x%02x%02x", - discovery->data.hints[0], - discovery->data.hints[1]); + return discovery; +} + +static void *discovery_seq_start(struct seq_file *seq, loff_t *pos) +{ + struct discovery_iter_state *iter = seq->private; + + spin_lock_irqsave(&irlmp->cachelog->hb_spinlock, iter->flags); + return *pos ? discovery_seq_idx(*pos - 1) : SEQ_START_TOKEN; +} + +static void *discovery_seq_next(struct seq_file *seq, void *v, loff_t *pos) +{ + ++*pos; + return (v == SEQ_START_TOKEN) + ? (void *) hashbin_get_first(irlmp->cachelog) + : (void *) hashbin_get_next(irlmp->cachelog); +} + +static void discovery_seq_stop(struct seq_file *seq, void *v) +{ + struct discovery_iter_state *iter = seq->private; + spin_unlock_irqrestore(&irlmp->cachelog->hb_spinlock, iter->flags); +} + +static int discovery_seq_show(struct seq_file *seq, void *v) +{ + if (v == SEQ_START_TOKEN) + seq_puts(seq, "IrLMP: Discovery log:\n\n"); + else { + const discovery_t *discovery = v; + + seq_printf(seq, "nickname: %s, hint: 0x%02x%02x", + discovery->data.info, + discovery->data.hints[0], + discovery->data.hints[1]); #if 0 if ( discovery->data.hints[0] & HINT_PNP) - len += sprintf( buf+len, "PnP Compatible "); + seq_puts(seq, "PnP Compatible "); if ( discovery->data.hints[0] & HINT_PDA) - len += sprintf( buf+len, "PDA/Palmtop "); + seq_puts(seq, "PDA/Palmtop "); if ( discovery->data.hints[0] & HINT_COMPUTER) - len += sprintf( buf+len, "Computer "); + seq_puts(seq, "Computer "); if ( discovery->data.hints[0] & HINT_PRINTER) - len += sprintf( buf+len, "Printer "); + seq_puts(seq, "Printer "); if ( discovery->data.hints[0] & HINT_MODEM) - len += sprintf( buf+len, "Modem "); + seq_puts(seq, "Modem "); if ( discovery->data.hints[0] & HINT_FAX) - len += sprintf( buf+len, "Fax "); + seq_puts(seq, "Fax "); if ( discovery->data.hints[0] & HINT_LAN) - len += sprintf( buf+len, "LAN Access "); + seq_puts(seq, "LAN Access "); if ( discovery->data.hints[1] & HINT_TELEPHONY) - len += sprintf( buf+len, "Telephony "); + seq_puts(seq, "Telephony "); if ( discovery->data.hints[1] & HINT_FILE_SERVER) - len += sprintf( buf+len, "File Server "); + seq_puts(seq, "File Server "); if ( discovery->data.hints[1] & HINT_COMM) - len += sprintf( buf+len, "IrCOMM "); + seq_puts(seq, "IrCOMM "); if ( discovery->data.hints[1] & HINT_OBEX) - len += sprintf( buf+len, "IrOBEX "); + seq_puts(seq, "IrOBEX "); #endif - len += sprintf(buf+len, ", saddr: 0x%08x", - discovery->data.saddr); - - len += sprintf(buf+len, ", daddr: 0x%08x\n", + seq_printf(seq,", saddr: 0x%08x, daddr: 0x%08x\n\n", + discovery->data.saddr, discovery->data.daddr); - len += sprintf(buf+len, "\n"); - - discovery = (discovery_t *) hashbin_get_next(cachelog); + seq_putc(seq, '\n'); } - spin_unlock_irqrestore(&cachelog->hb_spinlock, flags); + return 0; +} - return len; +static struct seq_operations discovery_seq_ops = { + .start = discovery_seq_start, + .next = discovery_seq_next, + .stop = discovery_seq_stop, + .show = discovery_seq_show, +}; + +static int discovery_seq_open(struct inode *inode, struct file *file) +{ + struct seq_file *seq; + int rc = -ENOMEM; + struct discovery_iter_state *s; + + ASSERT(irlmp != NULL, return -EINVAL;); + + s = kmalloc(sizeof(*s), GFP_KERNEL); + if (!s) + goto out; + + rc = seq_open(file, &discovery_seq_ops); + if (rc) + goto out_kfree; + + seq = file->private_data; + seq->private = s; + memset(s, 0, sizeof(*s)); +out: + return rc; +out_kfree: + kfree(s); + goto out; } + +struct file_operations discovery_seq_fops = { + .owner = THIS_MODULE, + .open = discovery_seq_open, + .read = seq_read, + .llseek = seq_lseek, + .release = seq_release_private, +}; +#endif diff -prauN linux-2.6.0-test5/net/irda/ircomm/ircomm_core.c wli-2.6.0-test5-bk12-25/net/irda/ircomm/ircomm_core.c --- linux-2.6.0-test5/net/irda/ircomm/ircomm_core.c 2003-09-08 12:49:50.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/irda/ircomm/ircomm_core.c 2003-09-25 19:16:17.000000000 -0700 @@ -33,6 +33,7 @@ #include #include #include +#include #include #include @@ -53,9 +54,16 @@ static void ircomm_control_indication(st struct sk_buff *skb, int clen); #ifdef CONFIG_PROC_FS -static int ircomm_proc_read(char *buf, char **start, off_t offset, int len); - extern struct proc_dir_entry *proc_irda; +static int ircomm_seq_open(struct inode *, struct file *); + +static struct file_operations ircomm_proc_fops = { + .owner = THIS_MODULE, + .open = ircomm_seq_open, + .read = seq_read, + .llseek = seq_lseek, + .release = seq_release_private, +}; #endif /* CONFIG_PROC_FS */ hashbin_t *ircomm = NULL; @@ -69,7 +77,11 @@ int __init ircomm_init(void) } #ifdef CONFIG_PROC_FS - create_proc_info_entry("ircomm", 0, proc_irda, ircomm_proc_read); + { struct proc_dir_entry *ent; + ent = create_proc_entry("ircomm", 0, proc_irda); + if (ent) + ent->proc_fops = &ircomm_proc_fops; + } #endif /* CONFIG_PROC_FS */ MESSAGE("IrCOMM protocol (Dag Brattli)\n"); @@ -496,49 +508,98 @@ void ircomm_flow_request(struct ircomm_c EXPORT_SYMBOL(ircomm_flow_request); #ifdef CONFIG_PROC_FS -/* - * Function ircomm_proc_read (buf, start, offset, len, unused) - * - * - * - */ -int ircomm_proc_read(char *buf, char **start, off_t offset, int len) -{ - struct ircomm_cb *self; +struct ircomm_iter_state { unsigned long flags; - - len = 0; +}; + +static void *ircomm_seq_start(struct seq_file *seq, loff_t *pos) +{ + struct ircomm_iter_state *iter = seq->private; + struct ircomm_cb *self; + loff_t off = 0; + + spin_lock_irqsave(&ircomm->hb_spinlock, iter->flags); + + for (self = (struct ircomm_cb *) hashbin_get_first(ircomm); + self != NULL; + self = (struct ircomm_cb *) hashbin_get_next(ircomm)) { + if (off++ == *pos) + break; + + } + return self; +} + +static void *ircomm_seq_next(struct seq_file *seq, void *v, loff_t *pos) +{ + ++*pos; - spin_lock_irqsave(&ircomm->hb_spinlock, flags); + return (void *) hashbin_get_next(ircomm); +} + +static void ircomm_seq_stop(struct seq_file *seq, void *v) +{ + struct ircomm_iter_state *iter = seq->private; + spin_unlock_irqrestore(&ircomm->hb_spinlock, iter->flags); +} - self = (struct ircomm_cb *) hashbin_get_first(ircomm); - while (self != NULL) { - ASSERT(self->magic == IRCOMM_MAGIC, break;); - - if(self->line < 0x10) - len += sprintf(buf+len, "ircomm%d", self->line); - else - len += sprintf(buf+len, "irlpt%d", self->line - 0x10); - len += sprintf(buf+len, " state: %s, ", - ircomm_state[ self->state]); - len += sprintf(buf+len, - "slsap_sel: %#02x, dlsap_sel: %#02x, mode:", - self->slsap_sel, self->dlsap_sel); - if(self->service_type & IRCOMM_3_WIRE_RAW) - len += sprintf(buf+len, " 3-wire-raw"); - if(self->service_type & IRCOMM_3_WIRE) - len += sprintf(buf+len, " 3-wire"); - if(self->service_type & IRCOMM_9_WIRE) - len += sprintf(buf+len, " 9-wire"); - if(self->service_type & IRCOMM_CENTRONICS) - len += sprintf(buf+len, " Centronics"); - len += sprintf(buf+len, "\n"); - - self = (struct ircomm_cb *) hashbin_get_next(ircomm); - } - spin_unlock_irqrestore(&ircomm->hb_spinlock, flags); +static int ircomm_seq_show(struct seq_file *seq, void *v) +{ + const struct ircomm_cb *self = v; + + ASSERT(self->magic == IRCOMM_MAGIC, return -EINVAL; ); + + if(self->line < 0x10) + seq_printf(seq, "ircomm%d", self->line); + else + seq_printf(seq, "irlpt%d", self->line - 0x10); + + seq_printf(seq, + " state: %s, slsap_sel: %#02x, dlsap_sel: %#02x, mode:", + ircomm_state[ self->state], + self->slsap_sel, self->dlsap_sel); + + if(self->service_type & IRCOMM_3_WIRE_RAW) + seq_printf(seq, " 3-wire-raw"); + if(self->service_type & IRCOMM_3_WIRE) + seq_printf(seq, " 3-wire"); + if(self->service_type & IRCOMM_9_WIRE) + seq_printf(seq, " 9-wire"); + if(self->service_type & IRCOMM_CENTRONICS) + seq_printf(seq, " Centronics"); + seq_putc(seq, '\n'); + + return 0; +} + +static struct seq_operations ircomm_seq_ops = { + .start = ircomm_seq_start, + .next = ircomm_seq_next, + .stop = ircomm_seq_stop, + .show = ircomm_seq_show, +}; + +static int ircomm_seq_open(struct inode *inode, struct file *file) +{ + struct seq_file *seq; + int rc = -ENOMEM; + struct ircomm_iter_state *s = kmalloc(sizeof(*s), GFP_KERNEL); + + if (!s) + goto out; - return len; + rc = seq_open(file, &ircomm_seq_ops); + if (rc) + goto out_kfree; + + seq = file->private_data; + seq->private = s; + memset(s, 0, sizeof(*s)); +out: + return rc; +out_kfree: + kfree(s); + goto out; } #endif /* CONFIG_PROC_FS */ diff -prauN linux-2.6.0-test5/net/irda/iriap.c wli-2.6.0-test5-bk12-25/net/irda/iriap.c --- linux-2.6.0-test5/net/irda/iriap.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/irda/iriap.c 2003-09-25 19:16:17.000000000 -0700 @@ -29,6 +29,7 @@ #include #include #include +#include #include #include @@ -970,35 +971,67 @@ void iriap_watchdog_timer_expired(void * #ifdef CONFIG_PROC_FS -static char *ias_value_types[] = { +static const char *ias_value_types[] = { "IAS_MISSING", "IAS_INTEGER", "IAS_OCT_SEQ", "IAS_STRING" }; -int irias_proc_read(char *buf, char **start, off_t offset, int len) +struct irias_iter_state { + unsigned long flags; +}; + +static inline struct ias_object *irias_seq_idx(loff_t pos) { struct ias_object *obj; - struct ias_attrib *attrib; - unsigned long flags; - ASSERT( irias_objects != NULL, return 0;); + for (obj = (struct ias_object *) hashbin_get_first(irias_objects); + obj; obj = (struct ias_object *) hashbin_get_next(irias_objects)) { + if (pos-- == 0) + break; + } + + return obj; +} - len = 0; +static void *irias_seq_start(struct seq_file *seq, loff_t *pos) +{ + struct irias_iter_state *iter = seq->private; - len += sprintf(buf+len, "LM-IAS Objects:\n"); + spin_lock_irqsave(&irias_objects->hb_spinlock, iter->flags); - spin_lock_irqsave(&irias_objects->hb_spinlock, flags); + return *pos ? irias_seq_idx(*pos - 1) : SEQ_START_TOKEN; +} + +static void *irias_seq_next(struct seq_file *seq, void *v, loff_t *pos) +{ + ++*pos; + + return (v == SEQ_START_TOKEN) + ? (void *) hashbin_get_first(irias_objects) + : (void *) hashbin_get_next(irias_objects); +} - /* List all irias_objects */ - obj = (struct ias_object *) hashbin_get_first(irias_objects); - while ( obj != NULL) { - ASSERT(obj->magic == IAS_OBJECT_MAGIC, return 0;); +static void irias_seq_stop(struct seq_file *seq, void *v) +{ + struct irias_iter_state *iter = seq->private; - len += sprintf(buf+len, "name: %s, ", obj->name); - len += sprintf(buf+len, "id=%d", obj->id); - len += sprintf(buf+len, "\n"); + spin_unlock_irqrestore(&irias_objects->hb_spinlock, iter->flags); +} + +static int irias_seq_show(struct seq_file *seq, void *v) +{ + if (v == SEQ_START_TOKEN) + seq_puts(seq, "LM-IAS Objects:\n"); + else { + struct ias_object *obj = v; + struct ias_attrib *attrib; + + ASSERT(obj->magic == IAS_OBJECT_MAGIC, return -EINVAL;); + + seq_printf(seq, "name: %s, id=%d\n", + obj->name, obj->id); /* Careful for priority inversions here ! * All other uses of attrib spinlock are independent of @@ -1006,48 +1039,83 @@ int irias_proc_read(char *buf, char **st spin_lock(&obj->attribs->hb_spinlock); /* List all attributes for this object */ - attrib = (struct ias_attrib *) - hashbin_get_first(obj->attribs); - while (attrib != NULL) { - ASSERT(attrib->magic == IAS_ATTRIB_MAGIC, return 0;); - - len += sprintf(buf+len, " - Attribute name: \"%s\", ", - attrib->name); - len += sprintf(buf+len, "value[%s]: ", - ias_value_types[attrib->value->type]); + for (attrib = (struct ias_attrib *) hashbin_get_first(obj->attribs); + attrib != NULL; + attrib = (struct ias_attrib *) hashbin_get_next(obj->attribs)) { + + ASSERT(attrib->magic == IAS_ATTRIB_MAGIC, break; ); + + seq_printf(seq, " - Attribute name: \"%s\", ", + attrib->name); + seq_printf(seq, "value[%s]: ", + ias_value_types[attrib->value->type]); switch (attrib->value->type) { case IAS_INTEGER: - len += sprintf(buf+len, "%d\n", - attrib->value->t.integer); + seq_printf(seq, "%d\n", + attrib->value->t.integer); break; case IAS_STRING: - len += sprintf(buf+len, "\"%s\"\n", - attrib->value->t.string); + seq_printf(seq, "\"%s\"\n", + attrib->value->t.string); break; case IAS_OCT_SEQ: - len += sprintf(buf+len, "octet sequence (%d bytes)\n", attrib->value->len); + seq_printf(seq, "octet sequence (%d bytes)\n", + attrib->value->len); break; case IAS_MISSING: - len += sprintf(buf+len, "missing\n"); + seq_puts(seq, "missing\n"); break; default: - IRDA_DEBUG(0, "%s(), Unknown value type!\n", - __FUNCTION__); - return -1; + seq_printf(seq, "type %d?\n", + attrib->value->type); } - len += sprintf(buf+len, "\n"); + seq_putc(seq, '\n'); - attrib = (struct ias_attrib *) - hashbin_get_next(obj->attribs); } spin_unlock(&obj->attribs->hb_spinlock); - - obj = (struct ias_object *) hashbin_get_next(irias_objects); } - spin_unlock_irqrestore(&irias_objects->hb_spinlock, flags); - return len; + return 0; +} + +static struct seq_operations irias_seq_ops = { + .start = irias_seq_start, + .next = irias_seq_next, + .stop = irias_seq_stop, + .show = irias_seq_show, +}; + +static int irias_seq_open(struct inode *inode, struct file *file) +{ + struct seq_file *seq; + int rc = -ENOMEM; + struct irias_iter_state *s; + + ASSERT( irias_objects != NULL, return -EINVAL;); + s = kmalloc(sizeof(*s), GFP_KERNEL); + if (!s) + goto out; + + rc = seq_open(file, &irias_seq_ops); + if (rc) + goto out_kfree; + seq = file->private_data; + seq->private = s; + memset(s, 0, sizeof(*s)); +out: + return rc; +out_kfree: + kfree(s); + goto out; } +struct file_operations irias_seq_fops = { + .owner = THIS_MODULE, + .open = irias_seq_open, + .read = seq_read, + .llseek = seq_lseek, + .release = seq_release_private, +}; + #endif /* PROC_FS */ diff -prauN linux-2.6.0-test5/net/irda/irlan/Kconfig wli-2.6.0-test5-bk12-25/net/irda/irlan/Kconfig --- linux-2.6.0-test5/net/irda/irlan/Kconfig 2003-09-08 12:49:56.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/irda/irlan/Kconfig 2003-09-25 19:16:17.000000000 -0700 @@ -2,10 +2,10 @@ config IRLAN tristate "IrLAN protocol" depends on IRDA help - Say Y here if you want to build support for the IrLAN protocol. If - you want to compile it as a module (irlan), say M here and read - . IrLAN emulates an Ethernet and - makes it possible to put up a wireless LAN using infrared beams. + Say Y here if you want to build support for the IrLAN protocol. + To compile it as a module, choose M here: the module will be called + irlan. IrLAN emulates an Ethernet and makes it possible to put up + a wireless LAN using infrared beams. The IrLAN protocol can be used to talk with infrared access points like the HP NetbeamIR, or the ESI JetEye NET. You can also connect diff -prauN linux-2.6.0-test5/net/irda/irlan/irlan_common.c wli-2.6.0-test5-bk12-25/net/irda/irlan/irlan_common.c --- linux-2.6.0-test5/net/irda/irlan/irlan_common.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/irda/irlan/irlan_common.c 2003-09-25 19:16:17.000000000 -0700 @@ -1068,7 +1068,6 @@ int irlan_extract_param(__u8 *buf, char } #ifdef CONFIG_PROC_FS -#define IRLAN_PROC_START_TOKEN ((void *)1) /* * Start of reading /proc entries. @@ -1083,7 +1082,7 @@ static void *irlan_seq_start(struct seq_ rcu_read_lock(); if (*pos == 0) - return IRLAN_PROC_START_TOKEN; + return SEQ_START_TOKEN; list_for_each_entry(self, &irlans, dev_list) { if (*pos == i) @@ -1099,7 +1098,7 @@ static void *irlan_seq_next(struct seq_f struct list_head *nxt; ++*pos; - if (v == IRLAN_PROC_START_TOKEN) + if (v == SEQ_START_TOKEN) nxt = irlans.next; else nxt = ((struct irlan_cb *)v)->dev_list.next; @@ -1120,7 +1119,7 @@ static void irlan_seq_stop(struct seq_fi */ static int irlan_seq_show(struct seq_file *seq, void *v) { - if (v == IRLAN_PROC_START_TOKEN) + if (v == SEQ_START_TOKEN) seq_puts(seq, "IrLAN instances:\n"); else { struct irlan_cb *self = v; diff -prauN linux-2.6.0-test5/net/irda/irlap.c wli-2.6.0-test5-bk12-25/net/irda/irlap.c --- linux-2.6.0-test5/net/irda/irlap.c 2003-09-08 12:50:28.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/irda/irlap.c 2003-09-25 19:16:17.000000000 -0700 @@ -37,6 +37,7 @@ #include #include #include +#include #include #include @@ -72,11 +73,6 @@ static char *lap_reasons[] = { }; #endif /* CONFIG_IRDA_DEBUG */ -#ifdef CONFIG_PROC_FS -int irlap_proc_read(char *, char **, off_t, int); - -#endif /* CONFIG_PROC_FS */ - int __init irlap_init(void) { /* Check if the compiler did its job properly. @@ -1096,100 +1092,163 @@ void irlap_apply_connection_parameters(s } #ifdef CONFIG_PROC_FS -/* - * Function irlap_proc_read (buf, start, offset, len, unused) - * - * Give some info to the /proc file system - * - */ -int irlap_proc_read(char *buf, char **start, off_t offset, int len) +struct irlap_iter_state { + int id; + unsigned long flags; +}; + +static void *irlap_seq_start(struct seq_file *seq, loff_t *pos) { + struct irlap_iter_state *iter = seq->private; struct irlap_cb *self; - unsigned long flags; - int i = 0; - spin_lock_irqsave(&irlap->hb_spinlock, flags); + /* Protect our access to the tsap list */ + spin_lock_irqsave(&irlap->hb_spinlock, iter->flags); + iter->id = 0; + + for (self = (struct irlap_cb *) hashbin_get_first(irlap); + self; self = (struct irlap_cb *) hashbin_get_next(irlap)) { + if (iter->id == *pos) + break; + ++iter->id; + } + + return self; +} + +static void *irlap_seq_next(struct seq_file *seq, void *v, loff_t *pos) +{ + struct irlap_iter_state *iter = seq->private; + + ++*pos; + ++iter->id; + return (void *) hashbin_get_next(irlap); +} - len = 0; +static void irlap_seq_stop(struct seq_file *seq, void *v) +{ + struct irlap_iter_state *iter = seq->private; + spin_unlock_irqrestore(&irlap->hb_spinlock, iter->flags); +} - self = (struct irlap_cb *) hashbin_get_first(irlap); - while (self != NULL) { - ASSERT(self != NULL, break;); - ASSERT(self->magic == LAP_MAGIC, break;); +static int irlap_seq_show(struct seq_file *seq, void *v) +{ + const struct irlap_iter_state *iter = seq->private; + const struct irlap_cb *self = v; + + ASSERT(self->magic == LAP_MAGIC, return -EINVAL;); - len += sprintf(buf+len, "irlap%d ", i++); - len += sprintf(buf+len, "state: %s\n", - irlap_state[self->state]); + seq_printf(seq, "irlap%d ", iter->id); + seq_printf(seq, "state: %s\n", + irlap_state[self->state]); - len += sprintf(buf+len, " device name: %s, ", - (self->netdev) ? self->netdev->name : "bug"); - len += sprintf(buf+len, "hardware name: %s\n", self->hw_name); + seq_printf(seq, " device name: %s, ", + (self->netdev) ? self->netdev->name : "bug"); + seq_printf(seq, "hardware name: %s\n", self->hw_name); - len += sprintf(buf+len, " caddr: %#02x, ", self->caddr); - len += sprintf(buf+len, "saddr: %#08x, ", self->saddr); - len += sprintf(buf+len, "daddr: %#08x\n", self->daddr); + seq_printf(seq, " caddr: %#02x, ", self->caddr); + seq_printf(seq, "saddr: %#08x, ", self->saddr); + seq_printf(seq, "daddr: %#08x\n", self->daddr); - len += sprintf(buf+len, " win size: %d, ", - self->window_size); - len += sprintf(buf+len, "win: %d, ", self->window); + seq_printf(seq, " win size: %d, ", + self->window_size); + seq_printf(seq, "win: %d, ", self->window); #ifdef CONFIG_IRDA_DYNAMIC_WINDOW - len += sprintf(buf+len, "line capacity: %d, ", - self->line_capacity); - len += sprintf(buf+len, "bytes left: %d\n", self->bytes_left); + seq_printf(seq, "line capacity: %d, ", + self->line_capacity); + seq_printf(seq, "bytes left: %d\n", self->bytes_left); #endif /* CONFIG_IRDA_DYNAMIC_WINDOW */ - len += sprintf(buf+len, " tx queue len: %d ", - skb_queue_len(&self->txq)); - len += sprintf(buf+len, "win queue len: %d ", - skb_queue_len(&self->wx_list)); - len += sprintf(buf+len, "rbusy: %s", self->remote_busy ? - "TRUE" : "FALSE"); - len += sprintf(buf+len, " mbusy: %s\n", self->media_busy ? - "TRUE" : "FALSE"); - - len += sprintf(buf+len, " retrans: %d ", self->retry_count); - len += sprintf(buf+len, "vs: %d ", self->vs); - len += sprintf(buf+len, "vr: %d ", self->vr); - len += sprintf(buf+len, "va: %d\n", self->va); - - len += sprintf(buf+len, " qos\tbps\tmaxtt\tdsize\twinsize\taddbofs\tmintt\tldisc\tcomp\n"); - - len += sprintf(buf+len, " tx\t%d\t", - self->qos_tx.baud_rate.value); - len += sprintf(buf+len, "%d\t", - self->qos_tx.max_turn_time.value); - len += sprintf(buf+len, "%d\t", - self->qos_tx.data_size.value); - len += sprintf(buf+len, "%d\t", - self->qos_tx.window_size.value); - len += sprintf(buf+len, "%d\t", - self->qos_tx.additional_bofs.value); - len += sprintf(buf+len, "%d\t", - self->qos_tx.min_turn_time.value); - len += sprintf(buf+len, "%d\t", - self->qos_tx.link_disc_time.value); - len += sprintf(buf+len, "\n"); - - len += sprintf(buf+len, " rx\t%d\t", - self->qos_rx.baud_rate.value); - len += sprintf(buf+len, "%d\t", - self->qos_rx.max_turn_time.value); - len += sprintf(buf+len, "%d\t", - self->qos_rx.data_size.value); - len += sprintf(buf+len, "%d\t", - self->qos_rx.window_size.value); - len += sprintf(buf+len, "%d\t", - self->qos_rx.additional_bofs.value); - len += sprintf(buf+len, "%d\t", - self->qos_rx.min_turn_time.value); - len += sprintf(buf+len, "%d\t", - self->qos_rx.link_disc_time.value); - len += sprintf(buf+len, "\n"); + seq_printf(seq, " tx queue len: %d ", + skb_queue_len(&self->txq)); + seq_printf(seq, "win queue len: %d ", + skb_queue_len(&self->wx_list)); + seq_printf(seq, "rbusy: %s", self->remote_busy ? + "TRUE" : "FALSE"); + seq_printf(seq, " mbusy: %s\n", self->media_busy ? + "TRUE" : "FALSE"); + + seq_printf(seq, " retrans: %d ", self->retry_count); + seq_printf(seq, "vs: %d ", self->vs); + seq_printf(seq, "vr: %d ", self->vr); + seq_printf(seq, "va: %d\n", self->va); + + seq_printf(seq, " qos\tbps\tmaxtt\tdsize\twinsize\taddbofs\tmintt\tldisc\tcomp\n"); + + seq_printf(seq, " tx\t%d\t", + self->qos_tx.baud_rate.value); + seq_printf(seq, "%d\t", + self->qos_tx.max_turn_time.value); + seq_printf(seq, "%d\t", + self->qos_tx.data_size.value); + seq_printf(seq, "%d\t", + self->qos_tx.window_size.value); + seq_printf(seq, "%d\t", + self->qos_tx.additional_bofs.value); + seq_printf(seq, "%d\t", + self->qos_tx.min_turn_time.value); + seq_printf(seq, "%d\t", + self->qos_tx.link_disc_time.value); + seq_printf(seq, "\n"); + + seq_printf(seq, " rx\t%d\t", + self->qos_rx.baud_rate.value); + seq_printf(seq, "%d\t", + self->qos_rx.max_turn_time.value); + seq_printf(seq, "%d\t", + self->qos_rx.data_size.value); + seq_printf(seq, "%d\t", + self->qos_rx.window_size.value); + seq_printf(seq, "%d\t", + self->qos_rx.additional_bofs.value); + seq_printf(seq, "%d\t", + self->qos_rx.min_turn_time.value); + seq_printf(seq, "%d\n", + self->qos_rx.link_disc_time.value); + + return 0; +} + +static struct seq_operations irlap_seq_ops = { + .start = irlap_seq_start, + .next = irlap_seq_next, + .stop = irlap_seq_stop, + .show = irlap_seq_show, +}; + +static int irlap_seq_open(struct inode *inode, struct file *file) +{ + struct seq_file *seq; + int rc = -ENOMEM; + struct irlap_iter_state *s = kmalloc(sizeof(*s), GFP_KERNEL); + + if (!s) + goto out; - self = (struct irlap_cb *) hashbin_get_next(irlap); + if (irlap == NULL) { + rc = -EINVAL; + goto out_kfree; } - spin_unlock_irqrestore(&irlap->hb_spinlock, flags); - return len; -} + rc = seq_open(file, &irlap_seq_ops); + if (rc) + goto out_kfree; + + seq = file->private_data; + seq->private = s; + memset(s, 0, sizeof(*s)); +out: + return rc; +out_kfree: + kfree(s); + goto out; +} + +struct file_operations irlap_seq_fops = { + .owner = THIS_MODULE, + .open = irlap_seq_open, + .read = seq_read, + .llseek = seq_lseek, + .release = seq_release_private, +}; #endif /* CONFIG_PROC_FS */ diff -prauN linux-2.6.0-test5/net/irda/irlap_frame.c wli-2.6.0-test5-bk12-25/net/irda/irlap_frame.c --- linux-2.6.0-test5/net/irda/irlap_frame.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/irda/irlap_frame.c 2003-09-25 19:16:17.000000000 -0700 @@ -159,9 +159,9 @@ static void irlap_recv_snrm_cmd(struct i { struct snrm_frame *frame; - frame = (struct snrm_frame *) skb->data; + if (pskb_may_pull(skb,sizeof(struct snrm_frame))) { + frame = (struct snrm_frame *) skb->data; - if (skb->len >= sizeof(struct snrm_frame)) { /* Copy the new connection address ignoring the C/R bit */ info->caddr = frame->ncaddr & 0xFE; @@ -402,6 +402,11 @@ static void irlap_recv_discovery_xid_rsp ASSERT(self != NULL, return;); ASSERT(self->magic == LAP_MAGIC, return;); + if (!pskb_may_pull(skb, sizeof(struct xid_frame))) { + ERROR("%s: frame to short!\n", __FUNCTION__); + return; + } + xid = (struct xid_frame *) skb->data; info->daddr = le32_to_cpu(xid->saddr); @@ -469,6 +474,11 @@ static void irlap_recv_discovery_xid_cmd __u8 *discovery_info; char *text; + if (!pskb_may_pull(skb, sizeof(struct xid_frame))) { + ERROR("%s: frame to short!\n", __FUNCTION__); + return; + } + xid = (struct xid_frame *) skb->data; info->daddr = le32_to_cpu(xid->saddr); @@ -507,7 +517,8 @@ static void irlap_recv_discovery_xid_cmd */ if (info->s == 0xff) { /* Check if things are sane at this point... */ - if((discovery_info == NULL) || (skb->len < 3)) { + if((discovery_info == NULL) || + !pskb_may_pull(skb, 3)) { ERROR("%s: discovery frame to short!\n", __FUNCTION__); return; } @@ -1150,6 +1161,11 @@ static void irlap_recv_frmr_frame(struct ASSERT(skb != NULL, return;); ASSERT(info != NULL, return;); + if (!pskb_may_pull(skb, 4)) { + ERROR("%s: frame to short!\n", __FUNCTION__); + return; + } + frame = skb->data; info->nr = frame[2] >> 5; /* Next to receive */ @@ -1234,6 +1250,10 @@ static void irlap_recv_test_frame(struct IRDA_DEBUG(2, "%s()\n", __FUNCTION__); + if (!pskb_may_pull(skb, sizeof(*frame))) { + ERROR("%s: frame to short!\n", __FUNCTION__); + return; + } frame = (struct test_frame *) skb->data; /* Broadcast frames must carry saddr and daddr fields */ @@ -1302,15 +1322,9 @@ int irlap_driver_rcv(struct sk_buff *skb dev_kfree_skb(skb); return -1; } - if (skb_is_nonlinear(skb)) - if (skb_linearize(skb, GFP_ATOMIC) != 0) { - ERROR("%s: can't linearize skb!\n", __FUNCTION__); - dev_kfree_skb(skb); - return -1; - } /* Check if frame is large enough for parsing */ - if (skb->len < 2) { + if (!pskb_may_pull(skb, 2)) { ERROR("%s: frame to short!\n", __FUNCTION__); dev_kfree_skb(skb); return -1; diff -prauN linux-2.6.0-test5/net/irda/irlmp.c wli-2.6.0-test5-bk12-25/net/irda/irlmp.c --- linux-2.6.0-test5/net/irda/irlmp.c 2003-09-08 12:50:27.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/irda/irlmp.c 2003-09-25 19:16:17.000000000 -0700 @@ -33,6 +33,7 @@ #include #include #include +#include #include #include @@ -63,9 +64,6 @@ char *lmp_reasons[] = { }; __u8 *irlmp_hint_to_service(__u8 *hint); -#ifdef CONFIG_PROC_FS -int irlmp_proc_read(char *buf, char **start, off_t offst, int len); -#endif /* * Function irlmp_init (void) @@ -1780,81 +1778,190 @@ __u32 irlmp_get_daddr(struct lsap_cb *se } #ifdef CONFIG_PROC_FS -/* - * Function irlmp_proc_read (buf, start, offset, len, unused) - * - * Give some info to the /proc file system - * - */ -int irlmp_proc_read(char *buf, char **start, off_t offset, int len) -{ - struct lsap_cb *self; - struct lap_cb *lap; + +struct irlmp_iter_state { unsigned long flags; + hashbin_t *hashbin; +}; - ASSERT(irlmp != NULL, return 0;); +#define LSAP_START_TOKEN ((void *)1) +#define LINK_START_TOKEN ((void *)2) - len = 0; +static void *irlmp_seq_hb_idx(struct irlmp_iter_state *iter, + hashbin_t *bin, loff_t *off) +{ + void *element; - len += sprintf( buf+len, "Unconnected LSAPs:\n"); - spin_lock_irqsave(&irlmp->unconnected_lsaps->hb_spinlock, flags); - self = (struct lsap_cb *) hashbin_get_first( irlmp->unconnected_lsaps); - while (self != NULL) { - ASSERT(self->magic == LMP_LSAP_MAGIC, break;); - len += sprintf(buf+len, "lsap state: %s, ", - irlsap_state[ self->lsap_state]); - len += sprintf(buf+len, - "slsap_sel: %#02x, dlsap_sel: %#02x, ", - self->slsap_sel, self->dlsap_sel); - len += sprintf(buf+len, "(%s)", self->notify.name); - len += sprintf(buf+len, "\n"); + spin_lock_irqsave(&bin->hb_spinlock, iter->flags); + for (element = hashbin_get_first(bin); + element != NULL; + element = hashbin_get_next(bin)) { + if (!off || *off-- == 0) { + /* NB: hashbin left locked */ + iter->hashbin = bin; + return element; + } + } + spin_unlock_irqrestore(&bin->hb_spinlock, iter->flags); + return NULL; +} + + +static void *irlmp_seq_start(struct seq_file *seq, loff_t *pos) +{ + struct irlmp_iter_state *iter = seq->private; + void *v; + loff_t off = *pos; + + iter->hashbin = NULL; + if (off-- == 0) + return LSAP_START_TOKEN; + + v = irlmp_seq_hb_idx(iter, irlmp->unconnected_lsaps, &off); + if (v) + return v; - self = (struct lsap_cb *) hashbin_get_next( - irlmp->unconnected_lsaps); + if (off-- == 0) + return LINK_START_TOKEN; + + return irlmp_seq_hb_idx(iter, irlmp->links, &off); +} + +static void *irlmp_seq_next(struct seq_file *seq, void *v, loff_t *pos) +{ + struct irlmp_iter_state *iter = seq->private; + + ++*pos; + + if (v == LSAP_START_TOKEN) { + v = irlmp_seq_hb_idx(iter, irlmp->unconnected_lsaps, NULL); + return v ? v : LINK_START_TOKEN; } - spin_unlock_irqrestore(&irlmp->unconnected_lsaps->hb_spinlock, flags); - len += sprintf(buf+len, "\nRegistred Link Layers:\n"); - spin_lock_irqsave(&irlmp->links->hb_spinlock, flags); - lap = (struct lap_cb *) hashbin_get_first(irlmp->links); - while (lap != NULL) { - len += sprintf(buf+len, "lap state: %s, ", - irlmp_state[lap->lap_state]); + if (v == LINK_START_TOKEN) + return irlmp_seq_hb_idx(iter, irlmp->links, NULL); + + ASSERT( iter->hashbin != NULL, return NULL; ); + + v = hashbin_get_next(iter->hashbin); + if (v) + return v; + + spin_unlock_irqrestore(&iter->hashbin->hb_spinlock, iter->flags); + + if (iter->hashbin == irlmp->unconnected_lsaps) { + iter->hashbin = NULL; + return LINK_START_TOKEN; + } + return NULL; +} + +static void irlmp_seq_stop(struct seq_file *seq, void *v) +{ + struct irlmp_iter_state *iter = seq->private; + + if (iter->hashbin) + spin_unlock_irqrestore(&iter->hashbin->hb_spinlock, iter->flags); + +} + +static int irlmp_seq_show(struct seq_file *seq, void *v) +{ + const struct irlmp_iter_state *iter = seq->private; + struct lsap_cb *self = v; + + if (v == LSAP_START_TOKEN) + seq_puts(seq, "Unconnected LSAPs:\n"); + else if (v == LINK_START_TOKEN) + seq_puts(seq, "\nRegistered Link Layers:\n"); + else if (iter->hashbin == irlmp->unconnected_lsaps) { + self = v; + ASSERT(self->magic == LMP_LSAP_MAGIC, return -EINVAL; ); + seq_printf(seq, "lsap state: %s, ", + irlsap_state[ self->lsap_state]); + seq_printf(seq, + "slsap_sel: %#02x, dlsap_sel: %#02x, ", + self->slsap_sel, self->dlsap_sel); + seq_printf(seq, "(%s)", self->notify.name); + seq_printf(seq, "\n"); + } else if (iter->hashbin == irlmp->links) { + struct lap_cb *lap = v; - len += sprintf(buf+len, "saddr: %#08x, daddr: %#08x, ", - lap->saddr, lap->daddr); - len += sprintf(buf+len, "num lsaps: %d", - HASHBIN_GET_SIZE(lap->lsaps)); - len += sprintf(buf+len, "\n"); + seq_printf(seq, "lap state: %s, ", + irlmp_state[lap->lap_state]); + + seq_printf(seq, "saddr: %#08x, daddr: %#08x, ", + lap->saddr, lap->daddr); + seq_printf(seq, "num lsaps: %d", + HASHBIN_GET_SIZE(lap->lsaps)); + seq_printf(seq, "\n"); /* Careful for priority inversions here ! * All other uses of attrib spinlock are independent of * the object spinlock, so we are safe. Jean II */ spin_lock(&lap->lsaps->hb_spinlock); - len += sprintf(buf+len, "\n Connected LSAPs:\n"); - self = (struct lsap_cb *) hashbin_get_first(lap->lsaps); - while (self != NULL) { + seq_printf(seq, "\n Connected LSAPs:\n"); + for (self = (struct lsap_cb *) hashbin_get_first(lap->lsaps); + self != NULL; + self = (struct lsap_cb *)hashbin_get_next(lap->lsaps)) { ASSERT(self->magic == LMP_LSAP_MAGIC, break;); - len += sprintf(buf+len, " lsap state: %s, ", - irlsap_state[ self->lsap_state]); - len += sprintf(buf+len, - "slsap_sel: %#02x, dlsap_sel: %#02x, ", - self->slsap_sel, self->dlsap_sel); - len += sprintf(buf+len, "(%s)", self->notify.name); - len += sprintf(buf+len, "\n"); + seq_printf(seq, " lsap state: %s, ", + irlsap_state[ self->lsap_state]); + seq_printf(seq, + "slsap_sel: %#02x, dlsap_sel: %#02x, ", + self->slsap_sel, self->dlsap_sel); + seq_printf(seq, "(%s)", self->notify.name); + seq_putc(seq, '\n'); - self = (struct lsap_cb *) hashbin_get_next( - lap->lsaps); } spin_unlock(&lap->lsaps->hb_spinlock); - len += sprintf(buf+len, "\n"); - - lap = (struct lap_cb *) hashbin_get_next(irlmp->links); - } - spin_unlock_irqrestore(&irlmp->links->hb_spinlock, flags); + seq_putc(seq, '\n'); + } else + return -EINVAL; - return len; + return 0; } +static struct seq_operations irlmp_seq_ops = { + .start = irlmp_seq_start, + .next = irlmp_seq_next, + .stop = irlmp_seq_stop, + .show = irlmp_seq_show, +}; + +static int irlmp_seq_open(struct inode *inode, struct file *file) +{ + struct seq_file *seq; + int rc = -ENOMEM; + struct irlmp_iter_state *s; + + ASSERT(irlmp != NULL, return -EINVAL;); + + s = kmalloc(sizeof(*s), GFP_KERNEL); + if (!s) + goto out; + + rc = seq_open(file, &irlmp_seq_ops); + if (rc) + goto out_kfree; + + seq = file->private_data; + seq->private = s; + memset(s, 0, sizeof(*s)); +out: + return rc; +out_kfree: + kfree(s); + goto out; +} + +struct file_operations irlmp_seq_fops = { + .owner = THIS_MODULE, + .open = irlmp_seq_open, + .read = seq_read, + .llseek = seq_lseek, + .release = seq_release_private, +}; + #endif /* PROC_FS */ diff -prauN linux-2.6.0-test5/net/irda/irproc.c wli-2.6.0-test5-bk12-25/net/irda/irproc.c --- linux-2.6.0-test5/net/irda/irproc.c 2003-09-08 12:49:50.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/irda/irproc.c 2003-09-25 19:16:17.000000000 -0700 @@ -25,6 +25,7 @@ #include #include +#include #include #include @@ -32,25 +33,25 @@ #include #include -extern int irlap_proc_read(char *buf, char **start, off_t offset, int len); -extern int irlmp_proc_read(char *buf, char **start, off_t offset, int len); -extern int irttp_proc_read(char *buf, char **start, off_t offset, int len); -extern int irias_proc_read(char *buf, char **start, off_t offset, int len); -extern int discovery_proc_read(char *buf, char **start, off_t offset, int len); +extern struct file_operations discovery_seq_fops; +extern struct file_operations irlap_seq_fops; +extern struct file_operations irlmp_seq_fops; +extern struct file_operations irttp_seq_fops; +extern struct file_operations irias_seq_fops; struct irda_entry { - char *name; - int (*fn)(char*, char**, off_t, int); + const char *name; + struct file_operations *fops; }; struct proc_dir_entry *proc_irda; -static struct irda_entry dir[] = { - {"discovery", discovery_proc_read}, - {"irttp", irttp_proc_read}, - {"irlmp", irlmp_proc_read}, - {"irlap", irlap_proc_read}, - {"irias", irias_proc_read}, +static struct irda_entry irda_dirs[] = { + {"discovery", &discovery_seq_fops}, + {"irttp", &irttp_seq_fops}, + {"irlmp", &irlmp_seq_fops}, + {"irlap", &irlap_seq_fops}, + {"irias", &irias_seq_fops}, }; /* @@ -64,15 +65,15 @@ void __init irda_proc_register(void) int i; struct proc_dir_entry *d; - proc_irda = proc_mkdir("net/irda", NULL); + proc_irda = proc_mkdir("irda", proc_net); if (proc_irda == NULL) return; proc_irda->owner = THIS_MODULE; - for (i=0; iowner = THIS_MODULE; + for (i=0; iproc_fops = irda_dirs[i].fops; } } @@ -87,10 +88,10 @@ void __exit irda_proc_unregister(void) int i; if (proc_irda) { - for (i=0; i #include #include +#include #include #include @@ -1767,71 +1768,127 @@ void irttp_run_rx_queue(struct tsap_cb * } #ifdef CONFIG_PROC_FS -/* - * Function irttp_proc_read (buf, start, offset, len, unused) - * - * Give some info to the /proc file system - */ -int irttp_proc_read(char *buf, char **start, off_t offset, int len) -{ - struct tsap_cb *self; +struct irttp_iter_state { + int id; unsigned long flags; - int i = 0; - - ASSERT(irttp != NULL, return 0;); +}; - len = 0; +static void *irttp_seq_start(struct seq_file *seq, loff_t *pos) +{ + struct irttp_iter_state *iter = seq->private; + struct tsap_cb *self; /* Protect our access to the tsap list */ - spin_lock_irqsave(&irttp->tsaps->hb_spinlock, flags); + spin_lock_irqsave(&irttp->tsaps->hb_spinlock, iter->flags); + iter->id = 0; - self = (struct tsap_cb *) hashbin_get_first(irttp->tsaps); - while (self != NULL) { - if (!self || self->magic != TTP_TSAP_MAGIC) + for (self = (struct tsap_cb *) hashbin_get_first(irttp->tsaps); + self != NULL; + self = (struct tsap_cb *) hashbin_get_next(irttp->tsaps)) { + if (iter->id == *pos) break; + ++iter->id; + } + + return self; +} + +static void *irttp_seq_next(struct seq_file *seq, void *v, loff_t *pos) +{ + struct irttp_iter_state *iter = seq->private; - len += sprintf(buf+len, "TSAP %d, ", i++); - len += sprintf(buf+len, "stsap_sel: %02x, ", - self->stsap_sel); - len += sprintf(buf+len, "dtsap_sel: %02x\n", - self->dtsap_sel); - len += sprintf(buf+len, " connected: %s, ", - self->connected? "TRUE":"FALSE"); - len += sprintf(buf+len, "avail credit: %d, ", - self->avail_credit); - len += sprintf(buf+len, "remote credit: %d, ", - self->remote_credit); - len += sprintf(buf+len, "send credit: %d\n", - self->send_credit); - len += sprintf(buf+len, " tx packets: %ld, ", - self->stats.tx_packets); - len += sprintf(buf+len, "rx packets: %ld, ", - self->stats.rx_packets); - len += sprintf(buf+len, "tx_queue len: %d ", - skb_queue_len(&self->tx_queue)); - len += sprintf(buf+len, "rx_queue len: %d\n", - skb_queue_len(&self->rx_queue)); - len += sprintf(buf+len, " tx_sdu_busy: %s, ", - self->tx_sdu_busy? "TRUE":"FALSE"); - len += sprintf(buf+len, "rx_sdu_busy: %s\n", - self->rx_sdu_busy? "TRUE":"FALSE"); - len += sprintf(buf+len, " max_seg_size: %d, ", - self->max_seg_size); - len += sprintf(buf+len, "tx_max_sdu_size: %d, ", - self->tx_max_sdu_size); - len += sprintf(buf+len, "rx_max_sdu_size: %d\n", - self->rx_max_sdu_size); + ++*pos; + ++iter->id; + return (void *) hashbin_get_next(irttp->tsaps); +} - len += sprintf(buf+len, " Used by (%s)\n", - self->notify.name); +static void irttp_seq_stop(struct seq_file *seq, void *v) +{ + struct irttp_iter_state *iter = seq->private; + spin_unlock_irqrestore(&irttp->tsaps->hb_spinlock, iter->flags); +} - len += sprintf(buf+len, "\n"); +static int irttp_seq_show(struct seq_file *seq, void *v) +{ + const struct irttp_iter_state *iter = seq->private; + const struct tsap_cb *self = v; - self = (struct tsap_cb *) hashbin_get_next(irttp->tsaps); - } - spin_unlock_irqrestore(&irttp->tsaps->hb_spinlock, flags); + seq_printf(seq, "TSAP %d, ", iter->id); + seq_printf(seq, "stsap_sel: %02x, ", + self->stsap_sel); + seq_printf(seq, "dtsap_sel: %02x\n", + self->dtsap_sel); + seq_printf(seq, " connected: %s, ", + self->connected? "TRUE":"FALSE"); + seq_printf(seq, "avail credit: %d, ", + self->avail_credit); + seq_printf(seq, "remote credit: %d, ", + self->remote_credit); + seq_printf(seq, "send credit: %d\n", + self->send_credit); + seq_printf(seq, " tx packets: %ld, ", + self->stats.tx_packets); + seq_printf(seq, "rx packets: %ld, ", + self->stats.rx_packets); + seq_printf(seq, "tx_queue len: %d ", + skb_queue_len(&self->tx_queue)); + seq_printf(seq, "rx_queue len: %d\n", + skb_queue_len(&self->rx_queue)); + seq_printf(seq, " tx_sdu_busy: %s, ", + self->tx_sdu_busy? "TRUE":"FALSE"); + seq_printf(seq, "rx_sdu_busy: %s\n", + self->rx_sdu_busy? "TRUE":"FALSE"); + seq_printf(seq, " max_seg_size: %d, ", + self->max_seg_size); + seq_printf(seq, "tx_max_sdu_size: %d, ", + self->tx_max_sdu_size); + seq_printf(seq, "rx_max_sdu_size: %d\n", + self->rx_max_sdu_size); - return len; + seq_printf(seq, " Used by (%s)\n\n", + self->notify.name); + return 0; } +static struct seq_operations irttp_seq_ops = { + .start = irttp_seq_start, + .next = irttp_seq_next, + .stop = irttp_seq_stop, + .show = irttp_seq_show, +}; + +static int irttp_seq_open(struct inode *inode, struct file *file) +{ + struct seq_file *seq; + int rc = -ENOMEM; + struct irttp_iter_state *s; + + ASSERT(irttp != NULL, return -EINVAL;); + + s = kmalloc(sizeof(*s), GFP_KERNEL); + if (!s) + goto out; + + rc = seq_open(file, &irttp_seq_ops); + if (rc) + goto out_kfree; + + seq = file->private_data; + seq->private = s; + memset(s, 0, sizeof(*s)); +out: + return rc; +out_kfree: + kfree(s); + goto out; +} + +struct file_operations irttp_seq_fops = { + .owner = THIS_MODULE, + .open = irttp_seq_open, + .read = seq_read, + .llseek = seq_lseek, + .release = seq_release_private, +}; + #endif /* PROC_FS */ diff -prauN linux-2.6.0-test5/net/llc/Kconfig wli-2.6.0-test5-bk12-25/net/llc/Kconfig --- linux-2.6.0-test5/net/llc/Kconfig 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/net/llc/Kconfig 2003-09-25 19:16:17.000000000 -0700 @@ -0,0 +1,10 @@ +config LLC + tristate + depends on NET + +config LLC2 + tristate "ANSI/IEEE 802.2 LLC type 2 Support" + select LLC + help + This is a Logical Link Layer type 2, connection oriented support. + Select this if you want to have support for PF_LLC sockets. diff -prauN linux-2.6.0-test5/net/llc/Makefile wli-2.6.0-test5-bk12-25/net/llc/Makefile --- linux-2.6.0-test5/net/llc/Makefile 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/llc/Makefile 2003-09-25 19:16:17.000000000 -0700 @@ -2,7 +2,7 @@ # Makefile for the Linux 802.2 LLC (fully-functional) layer. # # Copyright (c) 1997 by Procom Technology,Inc. -# 2001, 2002 by Arnaldo Carvalho de Melo +# 2001-2003 by Arnaldo Carvalho de Melo # # This program can be redistributed or modified under the terms of the # GNU General Public License as published by the Free Software Foundation. @@ -14,7 +14,11 @@ obj-$(CONFIG_LLC) += llc.o -llc-y := llc_if.o llc_c_ev.o llc_c_ac.o llc_mac.o llc_sap.o llc_s_st.o \ - llc_main.o llc_s_ac.o llc_conn.o llc_c_st.o llc_stat.o llc_actn.o \ - llc_s_ev.o llc_evnt.o llc_pdu.o llc_proc.o -llc-$(CONFIG_LLC_UI) += af_llc.o +llc-y := llc_core.o llc_input.o llc_output.o + +obj-$(CONFIG_LLC2) += llc2.o + +llc2-y := llc_if.o llc_c_ev.o llc_c_ac.o llc_conn.o llc_c_st.o llc_pdu.o \ + llc_sap.o llc_s_ac.o llc_s_ev.o llc_s_st.o af_llc.o llc_station.o + +llc2-$(CONFIG_PROC_FS) += llc_proc.o diff -prauN linux-2.6.0-test5/net/llc/af_llc.c wli-2.6.0-test5-bk12-25/net/llc/af_llc.c --- linux-2.6.0-test5/net/llc/af_llc.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/llc/af_llc.c 2003-09-25 19:16:17.000000000 -0700 @@ -24,13 +24,13 @@ #include #include #include +#include +#include +#include #include #include #include -#include -#include -#include -#include +#include /* remember: uninitialized global data is zeroed because its in .bss */ static u16 llc_ui_sap_last_autoport = LLC_SAP_DYN_START; @@ -182,10 +182,12 @@ static int llc_ui_release(struct socket if (!llc_send_disc(sk)) llc_ui_wait_for_disc(sk, sk->sk_rcvtimeo); if (!sk->sk_zapped) - llc_sap_unassign_sock(llc->sap, sk); + llc_sap_remove_socket(llc->sap, sk); release_sock(sk); - if (llc->sap && hlist_empty(&llc->sap->sk_list.list)) + if (llc->sap && hlist_empty(&llc->sap->sk_list.list)) { + llc_release_sockets(llc->sap); llc_sap_close(llc->sap); + } sock_put(sk); llc_sk_free(sk); out: @@ -303,7 +305,7 @@ static int llc_ui_autobind(struct socket memcpy(llc->daddr.mac, addr->sllc_dmac, IFHWADDRLEN); memcpy(&llc->addr, addr, sizeof(llc->addr)); /* assign new connection to its SAP */ - llc_sap_assign_sock(sap, sk); + llc_sap_add_socket(sap, sk); rc = sk->sk_zapped = 0; out: return rc; @@ -1042,14 +1044,38 @@ static struct proto_ops llc_ui_ops = { .sendpage = sock_no_sendpage, }; -int __init llc_ui_init(void) +extern void llc_sap_handler(struct llc_sap *sap, struct sk_buff *skb); +extern void llc_conn_handler(struct llc_sap *sap, struct sk_buff *skb); + +static int __init llc2_init(void) { + int rc; + + llc_build_offset_table(); + llc_station_init(); llc_ui_sap_last_autoport = LLC_SAP_DYN_START; - sock_register(&llc_ui_family_ops); - return 0; + rc = llc_proc_init(); + if (!rc) { + sock_register(&llc_ui_family_ops); + llc_add_pack(LLC_DEST_SAP, llc_sap_handler); + llc_add_pack(LLC_DEST_CONN, llc_conn_handler); + } + return rc; } -void __exit llc_ui_exit(void) +static void __exit llc2_exit(void) { + llc_station_exit(); + llc_remove_pack(LLC_DEST_SAP); + llc_remove_pack(LLC_DEST_CONN); sock_unregister(PF_LLC); + llc_proc_exit(); } + +module_init(llc2_init); +module_exit(llc2_exit); + +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Procom 1997, Jay Schullist 2001, Arnaldo C. Melo 2001-2003"); +MODULE_DESCRIPTION("IEEE 802.2 PF_LLC support"); +MODULE_ALIAS_NETPROTO(PF_LLC); diff -prauN linux-2.6.0-test5/net/llc/llc_actn.c wli-2.6.0-test5-bk12-25/net/llc/llc_actn.c --- linux-2.6.0-test5/net/llc/llc_actn.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/llc/llc_actn.c 1969-12-31 16:00:00.000000000 -0800 @@ -1,138 +0,0 @@ -/* - * llc_actn.c - Implementation of actions of station component of LLC - * - * Description : - * Functions in this module are implementation of station component actions. - * Details of actions can be found in IEEE-802.2 standard document. - * All functions have one station and one event as input argument. All of - * them return 0 On success and 1 otherwise. - * - * Copyright (c) 1997 by Procom Technology, Inc. - * 2001-2003 by Arnaldo Carvalho de Melo - * - * This program can be redistributed or modified under the terms of the - * GNU General Public License as published by the Free Software Foundation. - * This program is distributed without any warranty or implied warranty - * of merchantability or fitness for a particular purpose. - * - * See the GNU General Public License for more details. - */ -#include -#include -#include -#include -#include -#include - -int llc_station_ac_start_ack_timer(struct llc_station *station, - struct sk_buff *skb) -{ - mod_timer(&station->ack_timer, jiffies + LLC_ACK_TIME * HZ); - return 0; -} - -int llc_station_ac_set_retry_cnt_0(struct llc_station *station, - struct sk_buff *skb) -{ - station->retry_count = 0; - return 0; -} - -int llc_station_ac_inc_retry_cnt_by_1(struct llc_station *station, - struct sk_buff *skb) -{ - station->retry_count++; - return 0; -} - -int llc_station_ac_set_xid_r_cnt_0(struct llc_station *station, - struct sk_buff *skb) -{ - station->xid_r_count = 0; - return 0; -} - -int llc_station_ac_inc_xid_r_cnt_by_1(struct llc_station *station, - struct sk_buff *skb) -{ - station->xid_r_count++; - return 0; -} - -int llc_station_ac_send_null_dsap_xid_c(struct llc_station *station, - struct sk_buff *skb) -{ - int rc = 1; - struct sk_buff *nskb = llc_alloc_frame(); - - if (!nskb) - goto out; - rc = 0; - llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, 0, 0, LLC_PDU_CMD); - llc_pdu_init_as_xid_cmd(nskb, LLC_XID_NULL_CLASS_2, 127); - lan_hdrs_init(nskb, station->mac_sa, station->mac_sa); - llc_station_send_pdu(station, nskb); -out: - return rc; -} - -int llc_station_ac_send_xid_r(struct llc_station *station, - struct sk_buff *skb) -{ - u8 mac_da[ETH_ALEN], dsap; - int rc = 1; - struct sk_buff* nskb = llc_alloc_frame(); - - if (!nskb) - goto out; - rc = 0; - nskb->dev = skb->dev; - llc_pdu_decode_sa(skb, mac_da); - llc_pdu_decode_ssap(skb, &dsap); - llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, 0, dsap, LLC_PDU_RSP); - llc_pdu_init_as_xid_rsp(nskb, LLC_XID_NULL_CLASS_2, 127); - lan_hdrs_init(nskb, station->mac_sa, mac_da); - llc_station_send_pdu(station, nskb); -out: - return rc; -} - -int llc_station_ac_send_test_r(struct llc_station *station, - struct sk_buff *skb) -{ - u8 mac_da[ETH_ALEN], dsap; - int rc = 1; - struct sk_buff *nskb = llc_alloc_frame(); - - if (!nskb) - goto out; - rc = 0; - nskb->dev = skb->dev; - llc_pdu_decode_sa(skb, mac_da); - llc_pdu_decode_ssap(skb, &dsap); - llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, 0, dsap, LLC_PDU_RSP); - llc_pdu_init_as_test_rsp(nskb, skb); - lan_hdrs_init(nskb, station->mac_sa, mac_da); - llc_station_send_pdu(station, nskb); -out: - return rc; -} - -int llc_station_ac_report_status(struct llc_station *station, - struct sk_buff *skb) -{ - return 0; -} - -void llc_station_ack_tmr_cb(unsigned long timeout_data) -{ - struct llc_station *station = (struct llc_station *)timeout_data; - struct sk_buff *skb = alloc_skb(0, GFP_ATOMIC); - - if (skb) { - struct llc_station_state_ev *ev = llc_station_ev(skb); - - ev->type = LLC_STATION_EV_TYPE_ACK_TMR; - llc_station_state_process(station, skb); - } -} diff -prauN linux-2.6.0-test5/net/llc/llc_c_ac.c wli-2.6.0-test5-bk12-25/net/llc/llc_c_ac.c --- linux-2.6.0-test5/net/llc/llc_c_ac.c 2003-09-08 12:50:38.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/llc/llc_c_ac.c 2003-09-25 19:16:17.000000000 -0700 @@ -21,12 +21,13 @@ #include #include #include -#include #include #include #include #include -#include +#include + +#include "llc_output.h" static int llc_conn_ac_inc_vs_by_1(struct sock *sk, struct sk_buff *skb); static void llc_process_tmr_ev(struct sock *sk, struct sk_buff *skb); @@ -52,7 +53,7 @@ int llc_conn_ac_clear_remote_busy(struct int llc_conn_ac_conn_ind(struct sock *sk, struct sk_buff *skb) { - int rc = 1; + int rc = -ENOTCONN; u8 dsap; struct llc_sap *sap; @@ -97,28 +98,24 @@ int llc_conn_ac_disc_ind(struct sock *sk { struct llc_conn_state_ev *ev = llc_conn_ev(skb); u8 reason = 0; - int rc = 1; + int rc = 0; if (ev->type == LLC_CONN_EV_TYPE_PDU) { struct llc_pdu_un *pdu = llc_pdu_un_hdr(skb); if (LLC_PDU_IS_RSP(pdu) && LLC_PDU_TYPE_IS_U(pdu) && - LLC_U_PDU_RSP(pdu) == LLC_2_PDU_RSP_DM) { + LLC_U_PDU_RSP(pdu) == LLC_2_PDU_RSP_DM) reason = LLC_DISC_REASON_RX_DM_RSP_PDU; - rc = 0; - } else if (LLC_PDU_IS_CMD(pdu) && + else if (LLC_PDU_IS_CMD(pdu) && LLC_PDU_TYPE_IS_U(pdu) && - LLC_U_PDU_CMD(pdu) == LLC_2_PDU_CMD_DISC) { + LLC_U_PDU_CMD(pdu) == LLC_2_PDU_CMD_DISC) reason = LLC_DISC_REASON_RX_DISC_CMD_PDU; - rc = 0; - } - } else if (ev->type == LLC_CONN_EV_TYPE_ACK_TMR) { + } else if (ev->type == LLC_CONN_EV_TYPE_ACK_TMR) reason = LLC_DISC_REASON_ACK_TMR_EXP; - rc = 0; - } else { + else { reason = 0; - rc = 1; + rc = -EINVAL; } if (!rc) { ev->reason = reason; @@ -217,29 +214,33 @@ int llc_conn_ac_stop_rej_tmr_if_data_fla int llc_conn_ac_send_disc_cmd_p_set_x(struct sock *sk, struct sk_buff *skb) { - int rc = 1; + int rc = -ENOBUFS; struct sk_buff *nskb = llc_alloc_frame(); if (nskb) { - u8 p_bit = 1; struct llc_opt *llc = llc_sk(sk); struct llc_sap *sap = llc->sap; nskb->dev = llc->dev; llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, llc->daddr.lsap, LLC_PDU_CMD); - llc_pdu_init_as_disc_cmd(nskb, p_bit); - lan_hdrs_init(nskb, llc->dev->dev_addr, llc->daddr.mac); - rc = 0; - llc_conn_send_pdu(sk, nskb); - } - llc_conn_ac_set_p_flag_1(sk, skb); - return rc; + llc_pdu_init_as_disc_cmd(nskb, 1); + rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); + if (rc) + goto free; + llc_conn_send_pdu(sk, nskb); + llc_conn_ac_set_p_flag_1(sk, skb); + } +out: + return rc; +free: + kfree_skb(nskb); + goto out; } int llc_conn_ac_send_dm_rsp_f_set_p(struct sock *sk, struct sk_buff *skb) { - int rc = 1; + int rc = -ENOBUFS; struct sk_buff *nskb = llc_alloc_frame(); if (nskb) { @@ -252,16 +253,21 @@ int llc_conn_ac_send_dm_rsp_f_set_p(stru llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, llc->daddr.lsap, LLC_PDU_RSP); llc_pdu_init_as_dm_rsp(nskb, f_bit); - lan_hdrs_init(nskb, llc->dev->dev_addr, llc->daddr.mac); - rc = 0; + rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); + if (rc) + goto free; llc_conn_send_pdu(sk, nskb); } +out: return rc; +free: + kfree_skb(nskb); + goto out; } int llc_conn_ac_send_dm_rsp_f_set_1(struct sock *sk, struct sk_buff *skb) { - int rc = 1; + int rc = -ENOBUFS; struct sk_buff *nskb = llc_alloc_frame(); if (nskb) { @@ -273,16 +279,21 @@ int llc_conn_ac_send_dm_rsp_f_set_1(stru llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, llc->daddr.lsap, LLC_PDU_RSP); llc_pdu_init_as_dm_rsp(nskb, f_bit); - lan_hdrs_init(nskb, llc->dev->dev_addr, llc->daddr.mac); - rc = 0; + rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); + if (rc) + goto free; llc_conn_send_pdu(sk, nskb); } +out: return rc; +free: + kfree_skb(nskb); + goto out; } int llc_conn_ac_send_dm_rsp_f_set_f_flag(struct sock *sk, struct sk_buff *skb) { - int rc = 1; + int rc = -ENOBUFS; struct sk_buff *nskb = llc_alloc_frame(); if (nskb) { @@ -294,17 +305,22 @@ int llc_conn_ac_send_dm_rsp_f_set_f_flag llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, llc->daddr.lsap, LLC_PDU_RSP); llc_pdu_init_as_dm_rsp(nskb, f_bit); - lan_hdrs_init(nskb, llc->dev->dev_addr, llc->daddr.mac); - rc = 0; + rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); + if (rc) + goto free; llc_conn_send_pdu(sk, nskb); } +out: return rc; +free: + kfree_skb(nskb); + goto out; } int llc_conn_ac_send_frmr_rsp_f_set_x(struct sock *sk, struct sk_buff *skb) { u8 f_bit; - int rc = 1; + int rc = -ENOBUFS; struct sk_buff *nskb; struct llc_pdu_sn *pdu = llc_pdu_sn_hdr(skb); struct llc_opt *llc = llc_sk(sk); @@ -323,16 +339,21 @@ int llc_conn_ac_send_frmr_rsp_f_set_x(st llc->daddr.lsap, LLC_PDU_RSP); llc_pdu_init_as_frmr_rsp(nskb, pdu, f_bit, llc->vS, llc->vR, INCORRECT); - lan_hdrs_init(nskb, llc->dev->dev_addr, llc->daddr.mac); - rc = 0; + rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); + if (rc) + goto free; llc_conn_send_pdu(sk, nskb); } +out: return rc; +free: + kfree_skb(nskb); + goto out; } int llc_conn_ac_resend_frmr_rsp_f_set_0(struct sock *sk, struct sk_buff *skb) { - int rc = 1; + int rc = -ENOBUFS; struct sk_buff *nskb = llc_alloc_frame(); if (nskb) { @@ -346,17 +367,22 @@ int llc_conn_ac_resend_frmr_rsp_f_set_0( llc->daddr.lsap, LLC_PDU_RSP); llc_pdu_init_as_frmr_rsp(nskb, pdu, f_bit, llc->vS, llc->vR, INCORRECT); - lan_hdrs_init(nskb, llc->dev->dev_addr, llc->daddr.mac); - rc = 0; + rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); + if (rc) + goto free; llc_conn_send_pdu(sk, nskb); } +out: return rc; +free: + kfree_skb(nskb); + goto out; } int llc_conn_ac_resend_frmr_rsp_f_set_p(struct sock *sk, struct sk_buff *skb) { u8 f_bit; - int rc = 1; + int rc = -ENOBUFS; struct sk_buff *nskb; llc_pdu_decode_pf_bit(skb, &f_bit); @@ -371,41 +397,50 @@ int llc_conn_ac_resend_frmr_rsp_f_set_p( llc->daddr.lsap, LLC_PDU_RSP); llc_pdu_init_as_frmr_rsp(nskb, pdu, f_bit, llc->vS, llc->vR, INCORRECT); - lan_hdrs_init(nskb, llc->dev->dev_addr, llc->daddr.mac); - rc = 0; + rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); + if (rc) + goto free; llc_conn_send_pdu(sk, nskb); } +out: return rc; +free: + kfree_skb(nskb); + goto out; } int llc_conn_ac_send_i_cmd_p_set_1(struct sock *sk, struct sk_buff *skb) { - u8 p_bit = 1; + int rc; struct llc_opt *llc = llc_sk(sk); struct llc_sap *sap = llc->sap; llc_pdu_header_init(skb, LLC_PDU_TYPE_I, sap->laddr.lsap, llc->daddr.lsap, LLC_PDU_CMD); - llc_pdu_init_as_i_cmd(skb, p_bit, llc->vS, llc->vR); - lan_hdrs_init(skb, llc->dev->dev_addr, llc->daddr.mac); - llc_conn_send_pdu(sk, skb); - llc_conn_ac_inc_vs_by_1(sk, skb); - return 0; + llc_pdu_init_as_i_cmd(skb, 1, llc->vS, llc->vR); + rc = llc_mac_hdr_init(skb, llc->dev->dev_addr, llc->daddr.mac); + if (!rc) { + llc_conn_send_pdu(sk, skb); + llc_conn_ac_inc_vs_by_1(sk, skb); + } + return rc; } int llc_conn_ac_send_i_cmd_p_set_0(struct sock *sk, struct sk_buff *skb) { - u8 p_bit = 0; + int rc; struct llc_opt *llc = llc_sk(sk); struct llc_sap *sap = llc->sap; llc_pdu_header_init(skb, LLC_PDU_TYPE_I, sap->laddr.lsap, llc->daddr.lsap, LLC_PDU_CMD); - llc_pdu_init_as_i_cmd(skb, p_bit, llc->vS, llc->vR); - lan_hdrs_init(skb, llc->dev->dev_addr, llc->daddr.mac); - llc_conn_send_pdu(sk, skb); - llc_conn_ac_inc_vs_by_1(sk, skb); - return 0; + llc_pdu_init_as_i_cmd(skb, 0, llc->vS, llc->vR); + rc = llc_mac_hdr_init(skb, llc->dev->dev_addr, llc->daddr.mac); + if (!rc) { + llc_conn_send_pdu(sk, skb); + llc_conn_ac_inc_vs_by_1(sk, skb); + } + return rc; } int llc_conn_ac_resend_i_cmd_p_set_1(struct sock *sk, struct sk_buff *skb) @@ -431,16 +466,18 @@ int llc_conn_ac_resend_i_cmd_p_set_1_or_ int llc_conn_ac_send_i_xxx_x_set_0(struct sock *sk, struct sk_buff *skb) { - u8 p_bit = 0; + int rc; struct llc_opt *llc = llc_sk(sk); struct llc_sap *sap = llc->sap; llc_pdu_header_init(skb, LLC_PDU_TYPE_I, sap->laddr.lsap, llc->daddr.lsap, LLC_PDU_CMD); - llc_pdu_init_as_i_cmd(skb, p_bit, llc->vS, llc->vR); - lan_hdrs_init(skb, llc->dev->dev_addr, llc->daddr.mac); - llc_conn_send_pdu(sk, skb); - llc_conn_ac_inc_vs_by_1(sk, skb); + llc_pdu_init_as_i_cmd(skb, 0, llc->vS, llc->vR); + rc = llc_mac_hdr_init(skb, llc->dev->dev_addr, llc->daddr.mac); + if (!rc) { + llc_conn_send_pdu(sk, skb); + llc_conn_ac_inc_vs_by_1(sk, skb); + } return 0; } @@ -457,9 +494,8 @@ int llc_conn_ac_resend_i_xxx_x_set_0_or_ struct sk_buff *skb) { u8 nr; - u8 f_bit = 0; struct llc_pdu_sn *pdu = llc_pdu_sn_hdr(skb); - int rc = 1; + int rc = -ENOBUFS; struct sk_buff *nskb = llc_alloc_frame(); if (nskb) { @@ -469,15 +505,17 @@ int llc_conn_ac_resend_i_xxx_x_set_0_or_ nskb->dev = llc->dev; llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, llc->daddr.lsap, LLC_PDU_RSP); - llc_pdu_init_as_rr_rsp(nskb, f_bit, llc->vR); - lan_hdrs_init(nskb, llc->dev->dev_addr, llc->daddr.mac); - rc = 0; - llc_conn_send_pdu(sk, nskb); + llc_pdu_init_as_rr_rsp(nskb, 0, llc->vR); + rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); + if (!rc) + llc_conn_send_pdu(sk, nskb); + else + kfree_skb(skb); } if (rc) { nr = LLC_I_GET_NR(pdu); rc = 0; - llc_conn_resend_i_pdu_as_cmd(sk, nr, f_bit); + llc_conn_resend_i_pdu_as_cmd(sk, nr, 0); } return rc; } @@ -493,28 +531,32 @@ int llc_conn_ac_resend_i_rsp_f_set_1(str int llc_conn_ac_send_rej_cmd_p_set_1(struct sock *sk, struct sk_buff *skb) { - int rc = 1; + int rc = -ENOBUFS; struct sk_buff *nskb = llc_alloc_frame(); if (nskb) { struct llc_opt *llc = llc_sk(sk); struct llc_sap *sap = llc->sap; - u8 p_bit = 1; nskb->dev = llc->dev; llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, llc->daddr.lsap, LLC_PDU_CMD); - llc_pdu_init_as_rej_cmd(nskb, p_bit, llc->vR); - lan_hdrs_init(nskb, llc->dev->dev_addr, llc->daddr.mac); - rc = 0; + llc_pdu_init_as_rej_cmd(nskb, 1, llc->vR); + rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); + if (rc) + goto free; llc_conn_send_pdu(sk, nskb); } +out: return rc; +free: + kfree_skb(nskb); + goto out; } int llc_conn_ac_send_rej_rsp_f_set_1(struct sock *sk, struct sk_buff *skb) { - int rc = 1; + int rc = -ENOBUFS; struct sk_buff *nskb = llc_alloc_frame(); if (nskb) { @@ -526,16 +568,21 @@ int llc_conn_ac_send_rej_rsp_f_set_1(str llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, llc->daddr.lsap, LLC_PDU_RSP); llc_pdu_init_as_rej_rsp(nskb, f_bit, llc->vR); - lan_hdrs_init(nskb, llc->dev->dev_addr, llc->daddr.mac); - rc = 0; + rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); + if (rc) + goto free; llc_conn_send_pdu(sk, nskb); } +out: return rc; +free: + kfree_skb(nskb); + goto out; } int llc_conn_ac_send_rej_xxx_x_set_0(struct sock *sk, struct sk_buff *skb) { - int rc = 1; + int rc = -ENOBUFS; struct sk_buff *nskb = llc_alloc_frame(); if (nskb) { @@ -547,37 +594,46 @@ int llc_conn_ac_send_rej_xxx_x_set_0(str llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, llc->daddr.lsap, LLC_PDU_RSP); llc_pdu_init_as_rej_rsp(nskb, f_bit, llc->vR); - lan_hdrs_init(nskb, llc->dev->dev_addr, llc->daddr.mac); - rc = 0; + rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); + if (rc) + goto free; llc_conn_send_pdu(sk, nskb); } +out: return rc; +free: + kfree_skb(nskb); + goto out; } int llc_conn_ac_send_rnr_cmd_p_set_1(struct sock *sk, struct sk_buff *skb) { - int rc = 1; + int rc = -ENOBUFS; struct sk_buff *nskb = llc_alloc_frame(); if (nskb) { struct llc_opt *llc = llc_sk(sk); struct llc_sap *sap = llc->sap; - u8 p_bit = 1; nskb->dev = llc->dev; llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, llc->daddr.lsap, LLC_PDU_CMD); - llc_pdu_init_as_rnr_cmd(nskb, p_bit, llc->vR); - lan_hdrs_init(nskb, llc->dev->dev_addr, llc->daddr.mac); - rc = 0; + llc_pdu_init_as_rnr_cmd(nskb, 1, llc->vR); + rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); + if (rc) + goto free; llc_conn_send_pdu(sk, nskb); } +out: return rc; +free: + kfree_skb(nskb); + goto out; } int llc_conn_ac_send_rnr_rsp_f_set_1(struct sock *sk, struct sk_buff *skb) { - int rc = 1; + int rc = -ENOBUFS; struct sk_buff *nskb = llc_alloc_frame(); if (nskb) { @@ -589,16 +645,21 @@ int llc_conn_ac_send_rnr_rsp_f_set_1(str llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, llc->daddr.lsap, LLC_PDU_RSP); llc_pdu_init_as_rnr_rsp(nskb, f_bit, llc->vR); - lan_hdrs_init(nskb, llc->dev->dev_addr, llc->daddr.mac); - rc = 0; + rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); + if (rc) + goto free; llc_conn_send_pdu(sk, nskb); } +out: return rc; +free: + kfree_skb(nskb); + goto out; } int llc_conn_ac_send_rnr_xxx_x_set_0(struct sock *sk, struct sk_buff *skb) { - int rc = 1; + int rc = -ENOBUFS; struct sk_buff *nskb = llc_alloc_frame(); if (nskb) { @@ -610,11 +671,16 @@ int llc_conn_ac_send_rnr_xxx_x_set_0(str llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, llc->daddr.lsap, LLC_PDU_RSP); llc_pdu_init_as_rnr_rsp(nskb, f_bit, llc->vR); - lan_hdrs_init(nskb, llc->dev->dev_addr, llc->daddr.mac); - rc = 0; + rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); + if (rc) + goto free; llc_conn_send_pdu(sk, nskb); } +out: return rc; +free: + kfree_skb(nskb); + goto out; } int llc_conn_ac_set_remote_busy(struct sock *sk, struct sk_buff *skb) @@ -631,70 +697,82 @@ int llc_conn_ac_set_remote_busy(struct s int llc_conn_ac_opt_send_rnr_xxx_x_set_0(struct sock *sk, struct sk_buff *skb) { - int rc = 1; + int rc = -ENOBUFS; struct sk_buff *nskb = llc_alloc_frame(); if (nskb) { struct llc_opt *llc = llc_sk(sk); struct llc_sap *sap = llc->sap; - u8 f_bit = 0; nskb->dev = llc->dev; llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, llc->daddr.lsap, LLC_PDU_RSP); - llc_pdu_init_as_rnr_rsp(nskb, f_bit, llc->vR); - lan_hdrs_init(nskb, llc->dev->dev_addr, llc->daddr.mac); - rc = 0; + llc_pdu_init_as_rnr_rsp(nskb, 0, llc->vR); + rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); + if (rc) + goto free; llc_conn_send_pdu(sk, nskb); } +out: return rc; +free: + kfree_skb(nskb); + goto out; } int llc_conn_ac_send_rr_cmd_p_set_1(struct sock *sk, struct sk_buff *skb) { - int rc = 1; + int rc = -ENOBUFS; struct sk_buff *nskb = llc_alloc_frame(); if (nskb) { - u8 p_bit = 1; struct llc_opt *llc = llc_sk(sk); struct llc_sap *sap = llc->sap; nskb->dev = llc->dev; llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, llc->daddr.lsap, LLC_PDU_CMD); - llc_pdu_init_as_rr_cmd(nskb, p_bit, llc->vR); - lan_hdrs_init(nskb, llc->dev->dev_addr, llc->daddr.mac); - rc = 0; + llc_pdu_init_as_rr_cmd(nskb, 1, llc->vR); + rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); + if (rc) + goto free; llc_conn_send_pdu(sk, nskb); } +out: return rc; +free: + kfree_skb(nskb); + goto out; } int llc_conn_ac_send_ack_cmd_p_set_1(struct sock *sk, struct sk_buff *skb) { - int rc = 1; + int rc = -ENOBUFS; struct sk_buff *nskb = llc_alloc_frame(); if (nskb) { - u8 p_bit = 1; struct llc_opt *llc = llc_sk(sk); struct llc_sap *sap = llc->sap; nskb->dev = llc->dev; llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, llc->daddr.lsap, LLC_PDU_CMD); - llc_pdu_init_as_rr_cmd(nskb, p_bit, llc->vR); - lan_hdrs_init(nskb, llc->dev->dev_addr, llc->daddr.mac); - rc = 0; + llc_pdu_init_as_rr_cmd(nskb, 1, llc->vR); + rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); + if (rc) + goto free; llc_conn_send_pdu(sk, nskb); } +out: return rc; +free: + kfree_skb(nskb); + goto out; } int llc_conn_ac_send_rr_rsp_f_set_1(struct sock *sk, struct sk_buff *skb) { - int rc = 1; + int rc = -ENOBUFS; struct sk_buff *nskb = llc_alloc_frame(); if (nskb) { @@ -706,16 +784,21 @@ int llc_conn_ac_send_rr_rsp_f_set_1(stru llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, llc->daddr.lsap, LLC_PDU_RSP); llc_pdu_init_as_rr_rsp(nskb, f_bit, llc->vR); - lan_hdrs_init(nskb, llc->dev->dev_addr, llc->daddr.mac); - rc = 0; + rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); + if (rc) + goto free; llc_conn_send_pdu(sk, nskb); } +out: return rc; +free: + kfree_skb(nskb); + goto out; } int llc_conn_ac_send_ack_rsp_f_set_1(struct sock *sk, struct sk_buff *skb) { - int rc = 1; + int rc = -ENOBUFS; struct sk_buff *nskb = llc_alloc_frame(); if (nskb) { @@ -727,53 +810,66 @@ int llc_conn_ac_send_ack_rsp_f_set_1(str llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, llc->daddr.lsap, LLC_PDU_RSP); llc_pdu_init_as_rr_rsp(nskb, f_bit, llc->vR); - lan_hdrs_init(nskb, llc->dev->dev_addr, llc->daddr.mac); - rc = 0; + rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); + if (rc) + goto free; llc_conn_send_pdu(sk, nskb); } +out: return rc; +free: + kfree_skb(nskb); + goto out; } int llc_conn_ac_send_rr_xxx_x_set_0(struct sock *sk, struct sk_buff *skb) { - int rc = 1; + int rc = -ENOBUFS; struct sk_buff *nskb = llc_alloc_frame(); if (nskb) { struct llc_opt *llc = llc_sk(sk); struct llc_sap *sap = llc->sap; - u8 f_bit = 0; nskb->dev = llc->dev; llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, llc->daddr.lsap, LLC_PDU_RSP); - llc_pdu_init_as_rr_rsp(nskb, f_bit, llc->vR); - lan_hdrs_init(nskb, llc->dev->dev_addr, llc->daddr.mac); - rc = 0; + llc_pdu_init_as_rr_rsp(nskb, 0, llc->vR); + rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); + if (rc) + goto free; llc_conn_send_pdu(sk, nskb); } +out: return rc; +free: + kfree_skb(nskb); + goto out; } int llc_conn_ac_send_ack_xxx_x_set_0(struct sock *sk, struct sk_buff *skb) { - int rc = 1; + int rc = -ENOBUFS; struct sk_buff *nskb = llc_alloc_frame(); if (nskb) { struct llc_opt *llc = llc_sk(sk); struct llc_sap *sap = llc->sap; - u8 f_bit = 0; nskb->dev = llc->dev; llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, llc->daddr.lsap, LLC_PDU_RSP); - llc_pdu_init_as_rr_rsp(nskb, f_bit, llc->vR); - lan_hdrs_init(nskb, llc->dev->dev_addr, llc->daddr.mac); - rc = 0; + llc_pdu_init_as_rr_rsp(nskb, 0, llc->vR); + rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); + if (rc) + goto free; llc_conn_send_pdu(sk, nskb); } +out: return rc; +free: + kfree_skb(nskb); + goto out; } void llc_conn_set_p_flag(struct sock *sk, u8 value) @@ -788,10 +884,9 @@ void llc_conn_set_p_flag(struct sock *sk int llc_conn_ac_send_sabme_cmd_p_set_x(struct sock *sk, struct sk_buff *skb) { - int rc = 1; + int rc = -ENOBUFS; struct sk_buff *nskb = llc_alloc_frame(); struct llc_opt *llc = llc_sk(sk); - u8 p_bit = 1; if (nskb) { struct llc_sap *sap = llc->sap; @@ -802,41 +897,49 @@ int llc_conn_ac_send_sabme_cmd_p_set_x(s nskb->dev = llc->dev; llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, llc->daddr.lsap, LLC_PDU_CMD); - llc_pdu_init_as_sabme_cmd(nskb, p_bit); - lan_hdrs_init(nskb, llc->dev->dev_addr, dmac); - rc = 0; - llc_conn_send_pdu(sk, nskb); - } - llc_conn_set_p_flag(sk, p_bit); - - return rc; + llc_pdu_init_as_sabme_cmd(nskb, 1); + rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, dmac); + if (rc) + goto free; + llc_conn_send_pdu(sk, nskb); + llc_conn_set_p_flag(sk, 1); + } +out: + return rc; +free: + kfree_skb(nskb); + goto out; } int llc_conn_ac_send_ua_rsp_f_set_f_flag(struct sock *sk, struct sk_buff *skb) { - int rc = 1; + int rc = -ENOBUFS; struct sk_buff *nskb = llc_alloc_frame(); if (nskb) { struct llc_opt *llc = llc_sk(sk); struct llc_sap *sap = llc->sap; - u8 f_bit = llc->f_flag; nskb->dev = llc->dev; llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, llc->daddr.lsap, LLC_PDU_RSP); - llc_pdu_init_as_ua_rsp(nskb, f_bit); - lan_hdrs_init(nskb, llc->dev->dev_addr, llc->daddr.mac); - rc = 0; + llc_pdu_init_as_ua_rsp(nskb, llc->f_flag); + rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); + if (rc) + goto free; llc_conn_send_pdu(sk, nskb); } +out: return rc; +free: + kfree_skb(nskb); + goto out; } int llc_conn_ac_send_ua_rsp_f_set_p(struct sock *sk, struct sk_buff *skb) { u8 f_bit; - int rc = 1; + int rc = -ENOBUFS; struct sk_buff *nskb = llc_alloc_frame(); llc_pdu_decode_pf_bit(skb, &f_bit); @@ -848,11 +951,16 @@ int llc_conn_ac_send_ua_rsp_f_set_p(stru llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, llc->daddr.lsap, LLC_PDU_RSP); llc_pdu_init_as_ua_rsp(nskb, f_bit); - lan_hdrs_init(nskb, llc->dev->dev_addr, llc->daddr.mac); - rc = 0; + rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); + if (rc) + goto free; llc_conn_send_pdu(sk, nskb); } +out: return rc; +free: + kfree_skb(nskb); + goto out; } int llc_conn_ac_set_s_flag_0(struct sock *sk, struct sk_buff *skb) @@ -935,17 +1043,19 @@ int llc_conn_ac_rst_sendack_flag(struct */ int llc_conn_ac_send_i_rsp_f_set_ackpf(struct sock *sk, struct sk_buff *skb) { + int rc; struct llc_opt *llc = llc_sk(sk); - u8 p_bit = llc->ack_pf; struct llc_sap *sap = llc->sap; llc_pdu_header_init(skb, LLC_PDU_TYPE_I, sap->laddr.lsap, llc->daddr.lsap, LLC_PDU_RSP); - llc_pdu_init_as_i_cmd(skb, p_bit, llc->vS, llc->vR); - lan_hdrs_init(skb, llc->dev->dev_addr, llc->daddr.mac); - llc_conn_send_pdu(sk, skb); - llc_conn_ac_inc_vs_by_1(sk, skb); - return 0; + llc_pdu_init_as_i_cmd(skb, llc->ack_pf, llc->vS, llc->vR); + rc = llc_mac_hdr_init(skb, llc->dev->dev_addr, llc->daddr.mac); + if (!rc) { + llc_conn_send_pdu(sk, skb); + llc_conn_ac_inc_vs_by_1(sk, skb); + } + return rc; } /** @@ -983,23 +1093,27 @@ int llc_conn_ac_send_i_as_ack(struct soc */ int llc_conn_ac_send_rr_rsp_f_set_ackpf(struct sock *sk, struct sk_buff *skb) { - int rc = 1; + int rc = -ENOBUFS; struct sk_buff *nskb = llc_alloc_frame(); if (nskb) { struct llc_opt *llc = llc_sk(sk); struct llc_sap *sap = llc->sap; - u8 f_bit = llc->ack_pf; nskb->dev = llc->dev; llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap, llc->daddr.lsap, LLC_PDU_RSP); - llc_pdu_init_as_rr_rsp(nskb, f_bit, llc->vR); - lan_hdrs_init(nskb, llc->dev->dev_addr, llc->daddr.mac); - rc = 0; + llc_pdu_init_as_rr_rsp(nskb, llc->ack_pf, llc->vR); + rc = llc_mac_hdr_init(nskb, llc->dev->dev_addr, llc->daddr.mac); + if (rc) + goto free; llc_conn_send_pdu(sk, nskb); } +out: return rc; +free: + kfree_skb(nskb); + goto out; } /** @@ -1193,7 +1307,6 @@ int llc_conn_ac_upd_nr_received(struct s { int acked; u16 unacked = 0; - u8 fbit; struct llc_pdu_sn *pdu = llc_pdu_sn_hdr(skb); struct llc_opt *llc = llc_sk(sk); @@ -1215,8 +1328,10 @@ int llc_conn_ac_upd_nr_received(struct s mod_timer(&llc->ack_timer.timer, jiffies + llc->ack_timer.expire * HZ); } else if (llc->failed_data_req) { - llc_pdu_decode_pf_bit(skb, &fbit); - if (fbit == 1) { + u8 f_bit; + + llc_pdu_decode_pf_bit(skb, &f_bit); + if (f_bit == 1) { llc->failed_data_req = 0; llc_conn_ac_data_confirm(sk, skb); } diff -prauN linux-2.6.0-test5/net/llc/llc_conn.c wli-2.6.0-test5-bk12-25/net/llc/llc_conn.c --- linux-2.6.0-test5/net/llc/llc_conn.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/llc/llc_conn.c 2003-09-25 19:16:17.000000000 -0700 @@ -11,21 +11,22 @@ * * See the GNU General Public License for more details. */ -#include -#include + #include -#include #include #include #include #include -#include #include #include #include -#include #include -#include + +#if 0 +#define dprintk(args...) printk(KERN_DEBUG args) +#else +#define dprintk(args...) +#endif static int llc_find_offset(int state, int ev_type); static void llc_conn_send_pdus(struct sock *sk); @@ -39,22 +40,6 @@ static struct llc_conn_state_trans *llc_ /* Offset table on connection states transition diagram */ static int llc_offset_table[NBR_CONN_STATES][NBR_CONN_EV]; -void llc_save_primitive(struct sk_buff* skb, u8 prim) -{ - struct sockaddr_llc *addr = llc_ui_skb_cb(skb); - - /* save primitive for use by the user. */ - addr->sllc_family = skb->sk->sk_family; - addr->sllc_arphrd = skb->dev->type; - addr->sllc_test = prim == LLC_TEST_PRIM; - addr->sllc_xid = prim == LLC_XID_PRIM; - addr->sllc_ua = prim == LLC_DATAUNIT_PRIM; - llc_pdu_decode_sa(skb, addr->sllc_smac); - llc_pdu_decode_da(skb, addr->sllc_dmac); - llc_pdu_decode_dsap(skb, &addr->sllc_dsap); - llc_pdu_decode_ssap(skb, &addr->sllc_ssap); -} - /** * llc_conn_state_process - sends event to connection state machine * @sk: connection @@ -541,35 +526,6 @@ found: } /** - * llc_lookup_dgram - Finds dgram socket for the local sap/mac - * @sap: SAP - * @laddr: address of local LLC (MAC + SAP) - * - * Search socket list of the SAP and finds connection using the local - * mac, and local sap. Returns pointer for socket found, %NULL otherwise. - */ -struct sock *llc_lookup_dgram(struct llc_sap *sap, struct llc_addr *laddr) -{ - struct sock *rc; - struct hlist_node *node; - - read_lock_bh(&sap->sk_list.lock); - sk_for_each(rc, node, &sap->sk_list.list) { - struct llc_opt *llc = llc_sk(rc); - - if (rc->sk_type == SOCK_DGRAM && - llc->laddr.lsap == laddr->lsap && - llc_mac_match(llc->laddr.mac, laddr->mac)) { - sock_hold(rc); - goto found; - } - } - rc = NULL; -found: - read_unlock_bh(&sap->sk_list.lock); - return rc; -} -/** * llc_data_accept_state - designates if in this state data can be sent. * @state: state of connection. * @@ -651,3 +607,323 @@ static int llc_find_offset(int state, in } return rc; } + +/** + * llc_sap_add_socket - adds a socket to a SAP + * @sap: SAP + * @sk: socket + * + * This function adds a socket to sk_list of a SAP. + */ +void llc_sap_add_socket(struct llc_sap *sap, struct sock *sk) +{ + write_lock_bh(&sap->sk_list.lock); + llc_sk(sk)->sap = sap; + sk_add_node(sk, &sap->sk_list.list); + write_unlock_bh(&sap->sk_list.lock); +} + +/** + * llc_sap_remove_socket - removes a socket from SAP + * @sap: SAP + * @sk: socket + * + * This function removes a connection from sk_list.list of a SAP if + * the connection was in this list. + */ +void llc_sap_remove_socket(struct llc_sap *sap, struct sock *sk) +{ + write_lock_bh(&sap->sk_list.lock); + sk_del_node_init(sk); + write_unlock_bh(&sap->sk_list.lock); +} + +/** + * llc_conn_rcv - sends received pdus to the connection state machine + * @sk: current connection structure. + * @skb: received frame. + * + * Sends received pdus to the connection state machine. + */ +static int llc_conn_rcv(struct sock* sk, struct sk_buff *skb) +{ + struct llc_conn_state_ev *ev = llc_conn_ev(skb); + struct llc_opt *llc = llc_sk(sk); + + if (!llc->dev) + llc->dev = skb->dev; + ev->type = LLC_CONN_EV_TYPE_PDU; + ev->reason = 0; + return llc_conn_state_process(sk, skb); +} + +void llc_conn_handler(struct llc_sap *sap, struct sk_buff *skb) +{ + struct llc_addr saddr, daddr; + struct sock *sk; + + llc_pdu_decode_sa(skb, saddr.mac); + llc_pdu_decode_ssap(skb, &saddr.lsap); + llc_pdu_decode_da(skb, daddr.mac); + llc_pdu_decode_dsap(skb, &daddr.lsap); + + sk = llc_lookup_established(sap, &saddr, &daddr); + if (!sk) { + /* + * Didn't find an active connection; verify if there + * is a listening socket for this llc addr + */ + struct llc_opt *llc; + struct sock *parent = llc_lookup_listener(sap, &daddr); + + if (!parent) { + dprintk("llc_lookup_listener failed!\n"); + goto drop; + } + + sk = llc_sk_alloc(parent->sk_family, GFP_ATOMIC); + if (!sk) { + sock_put(parent); + goto drop; + } + llc = llc_sk(sk); + memcpy(&llc->laddr, &daddr, sizeof(llc->laddr)); + memcpy(&llc->daddr, &saddr, sizeof(llc->daddr)); + llc_sap_add_socket(sap, sk); + sock_hold(sk); + sock_put(parent); + skb->sk = parent; + } else + skb->sk = sk; + bh_lock_sock(sk); + if (!sock_owned_by_user(sk)) + llc_conn_rcv(sk, skb); + else { + dprintk("%s: adding to backlog...\n", __FUNCTION__); + llc_set_backlog_type(skb, LLC_PACKET); + sk_add_backlog(sk, skb); + } + bh_unlock_sock(sk); + sock_put(sk); + return; +drop: + kfree_skb(skb); +} + +#undef LLC_REFCNT_DEBUG +#ifdef LLC_REFCNT_DEBUG +static atomic_t llc_sock_nr; +#endif + +/** + * llc_release_sockets - releases all sockets in a sap + * @sap: sap to release its sockets + * + * Releases all connections of a sap. Returns 0 if all actions complete + * successfully, nonzero otherwise + */ +int llc_release_sockets(struct llc_sap *sap) +{ + int rc = 0; + struct sock *sk; + struct hlist_node *node; + + write_lock_bh(&sap->sk_list.lock); + + sk_for_each(sk, node, &sap->sk_list.list) { + llc_sk(sk)->state = LLC_CONN_STATE_TEMP; + + if (llc_send_disc(sk)) + rc = 1; + } + + write_unlock_bh(&sap->sk_list.lock); + return rc; +} + +/** + * llc_backlog_rcv - Processes rx frames and expired timers. + * @sk: LLC sock (p8022 connection) + * @skb: queued rx frame or event + * + * This function processes frames that has received and timers that has + * expired during sending an I pdu (refer to data_req_handler). frames + * queue by llc_rcv function (llc_mac.c) and timers queue by timer + * callback functions(llc_c_ac.c). + */ +static int llc_backlog_rcv(struct sock *sk, struct sk_buff *skb) +{ + int rc = 0; + struct llc_opt *llc = llc_sk(sk); + + if (llc_backlog_type(skb) == LLC_PACKET) { + if (llc->state > 1) /* not closed */ + rc = llc_conn_rcv(sk, skb); + else + goto out_kfree_skb; + } else if (llc_backlog_type(skb) == LLC_EVENT) { + /* timer expiration event */ + if (llc->state > 1) /* not closed */ + rc = llc_conn_state_process(sk, skb); + else + goto out_kfree_skb; + } else { + printk(KERN_ERR "%s: invalid skb in backlog\n", __FUNCTION__); + goto out_kfree_skb; + } +out: + return rc; +out_kfree_skb: + kfree_skb(skb); + goto out; +} + +/** + * llc_sk_init - Initializes a socket with default llc values. + * @sk: socket to initialize. + * + * Initializes a socket with default llc values. + */ +int llc_sk_init(struct sock* sk) +{ + struct llc_opt *llc = kmalloc(sizeof(*llc), GFP_ATOMIC); + int rc = -ENOMEM; + + if (!llc) + goto out; + memset(llc, 0, sizeof(*llc)); + rc = 0; + + llc->sk = sk; + llc->state = LLC_CONN_STATE_ADM; + llc->inc_cntr = llc->dec_cntr = 2; + llc->dec_step = llc->connect_step = 1; + + init_timer(&llc->ack_timer.timer); + llc->ack_timer.expire = LLC_ACK_TIME; + llc->ack_timer.timer.data = (unsigned long)sk; + llc->ack_timer.timer.function = llc_conn_ack_tmr_cb; + + init_timer(&llc->pf_cycle_timer.timer); + llc->pf_cycle_timer.expire = LLC_P_TIME; + llc->pf_cycle_timer.timer.data = (unsigned long)sk; + llc->pf_cycle_timer.timer.function = llc_conn_pf_cycle_tmr_cb; + + init_timer(&llc->rej_sent_timer.timer); + llc->rej_sent_timer.expire = LLC_REJ_TIME; + llc->rej_sent_timer.timer.data = (unsigned long)sk; + llc->rej_sent_timer.timer.function = llc_conn_rej_tmr_cb; + + init_timer(&llc->busy_state_timer.timer); + llc->busy_state_timer.expire = LLC_BUSY_TIME; + llc->busy_state_timer.timer.data = (unsigned long)sk; + llc->busy_state_timer.timer.function = llc_conn_busy_tmr_cb; + + llc->n2 = 2; /* max retransmit */ + llc->k = 2; /* tx win size, will adjust dynam */ + llc->rw = 128; /* rx win size (opt and equal to + * tx_win of remote LLC) */ + skb_queue_head_init(&llc->pdu_unack_q); + sk->sk_backlog_rcv = llc_backlog_rcv; + llc_sk(sk) = llc; +out: + return rc; +} + +/** + * llc_sk_alloc - Allocates LLC sock + * @family: upper layer protocol family + * @priority: for allocation (%GFP_KERNEL, %GFP_ATOMIC, etc) + * + * Allocates a LLC sock and initializes it. Returns the new LLC sock + * or %NULL if there's no memory available for one + */ +struct sock *llc_sk_alloc(int family, int priority) +{ + struct sock *sk = sk_alloc(family, priority, 1, NULL); + + if (!sk) + goto out; + if (llc_sk_init(sk)) + goto outsk; + sock_init_data(NULL, sk); + sk_set_owner(sk, THIS_MODULE); +#ifdef LLC_REFCNT_DEBUG + atomic_inc(&llc_sock_nr); + printk(KERN_DEBUG "LLC socket %p created in %s, now we have %d alive\n", sk, + __FUNCTION__, atomic_read(&llc_sock_nr)); +#endif +out: + return sk; +outsk: + sk_free(sk); + sk = NULL; + goto out; +} + +/** + * llc_sk_free - Frees a LLC socket + * @sk - socket to free + * + * Frees a LLC socket + */ +void llc_sk_free(struct sock *sk) +{ + struct llc_opt *llc = llc_sk(sk); + + llc->state = LLC_CONN_OUT_OF_SVC; + /* Stop all (possibly) running timers */ + llc_conn_ac_stop_all_timers(sk, NULL); +#ifdef DEBUG_LLC_CONN_ALLOC + printk(KERN_INFO "%s: unackq=%d, txq=%d\n", __FUNCTION__, + skb_queue_len(&llc->pdu_unack_q), + skb_queue_len(&sk->sk_write_queue)); +#endif + skb_queue_purge(&sk->sk_receive_queue); + skb_queue_purge(&sk->sk_write_queue); + skb_queue_purge(&llc->pdu_unack_q); +#ifdef LLC_REFCNT_DEBUG + if (atomic_read(&sk->sk_refcnt) != 1) { + printk(KERN_DEBUG "Destruction of LLC sock %p delayed in %s, cnt=%d\n", + sk, __FUNCTION__, atomic_read(&sk->sk_refcnt)); + printk(KERN_DEBUG "%d LLC sockets are still alive\n", + atomic_read(&llc_sock_nr)); + } else { + atomic_dec(&llc_sock_nr); + printk(KERN_DEBUG "LLC socket %p released in %s, %d are still alive\n", sk, + __FUNCTION__, atomic_read(&llc_sock_nr)); + } +#endif + sock_put(sk); +} + +/** + * llc_sk_reset - resets a connection + * @sk: LLC socket to reset + * + * Resets a connection to the out of service state. Stops its timers + * and frees any frames in the queues of the connection. + */ +void llc_sk_reset(struct sock *sk) +{ + struct llc_opt *llc = llc_sk(sk); + + llc_conn_ac_stop_all_timers(sk, NULL); + skb_queue_purge(&sk->sk_write_queue); + skb_queue_purge(&llc->pdu_unack_q); + llc->remote_busy_flag = 0; + llc->cause_flag = 0; + llc->retry_count = 0; + llc_conn_set_p_flag(sk, 0); + llc->f_flag = 0; + llc->s_flag = 0; + llc->ack_pf = 0; + llc->first_pdu_Ns = 0; + llc->ack_must_be_send = 0; + llc->dec_step = 1; + llc->inc_cntr = 2; + llc->dec_cntr = 2; + llc->X = 0; + llc->failed_data_req = 0 ; + llc->last_nr = 0; +} diff -prauN linux-2.6.0-test5/net/llc/llc_core.c wli-2.6.0-test5-bk12-25/net/llc/llc_core.c --- linux-2.6.0-test5/net/llc/llc_core.c 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/net/llc/llc_core.c 2003-09-25 19:16:17.000000000 -0700 @@ -0,0 +1,181 @@ +/* + * llc_core.c - Minimum needed routines for sap handling and module init/exit + * + * Copyright (c) 1997 by Procom Technology, Inc. + * 2001-2003 by Arnaldo Carvalho de Melo + * + * This program can be redistributed or modified under the terms of the + * GNU General Public License as published by the Free Software Foundation. + * This program is distributed without any warranty or implied warranty + * of merchantability or fitness for a particular purpose. + * + * See the GNU General Public License for more details. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +LIST_HEAD(llc_sap_list); +rwlock_t llc_sap_list_lock = RW_LOCK_UNLOCKED; + +unsigned char llc_station_mac_sa[ETH_ALEN]; + +/** + * llc_sap_alloc - allocates and initializes sap. + * + * Allocates and initializes sap. + */ +struct llc_sap *llc_sap_alloc(void) +{ + struct llc_sap *sap = kmalloc(sizeof(*sap), GFP_ATOMIC); + + if (sap) { + memset(sap, 0, sizeof(*sap)); + sap->state = LLC_SAP_STATE_ACTIVE; + memcpy(sap->laddr.mac, llc_station_mac_sa, ETH_ALEN); + rwlock_init(&sap->sk_list.lock); + } + return sap; +} + +/** + * llc_add_sap - add sap to station list + * @sap: Address of the sap + * + * Adds a sap to the LLC's station sap list. + */ +void llc_add_sap(struct llc_sap *sap) +{ + write_lock_bh(&llc_sap_list_lock); + list_add_tail(&sap->node, &llc_sap_list); + write_unlock_bh(&llc_sap_list_lock); +} + +/** + * llc_del_sap - del sap from station list + * @sap: Address of the sap + * + * Removes a sap to the LLC's station sap list. + */ +void llc_del_sap(struct llc_sap *sap) +{ + write_lock_bh(&llc_sap_list_lock); + list_del(&sap->node); + write_unlock_bh(&llc_sap_list_lock); +} + +/** + * llc_sap_find - searchs a SAP in station + * @sap_value: sap to be found + * + * Searchs for a sap in the sap list of the LLC's station upon the sap ID. + * Returns the sap or %NULL if not found. + */ +struct llc_sap *llc_sap_find(unsigned char sap_value) +{ + struct llc_sap* sap; + + read_lock_bh(&llc_sap_list_lock); + list_for_each_entry(sap, &llc_sap_list, node) + if (sap->laddr.lsap == sap_value) + goto out; + sap = NULL; +out: + read_unlock_bh(&llc_sap_list_lock); + return sap; +} + +/** + * llc_sap_open - open interface to the upper layers. + * @lsap: SAP number. + * @func: rcv func for datalink protos + * + * Interface function to upper layer. Each one who wants to get a SAP + * (for example NetBEUI) should call this function. Returns the opened + * SAP for success, NULL for failure. + */ +struct llc_sap *llc_sap_open(unsigned char lsap, + int (*func)(struct sk_buff *skb, + struct net_device *dev, + struct packet_type *pt)) +{ + struct llc_sap *sap = llc_sap_find(lsap); + + if (sap) { /* SAP already exists */ + sap = NULL; + goto out; + } + sap = llc_sap_alloc(); + if (!sap) + goto out; + sap->laddr.lsap = lsap; + sap->rcv_func = func; + llc_add_sap(sap); +out: + return sap; +} + +/** + * llc_sap_close - close interface for upper layers. + * @sap: SAP to be closed. + * + * Close interface function to upper layer. Each one who wants to + * close an open SAP (for example NetBEUI) should call this function. + * Removes this sap from the list of saps in the station and then + * frees the memory for this sap. + */ +void llc_sap_close(struct llc_sap *sap) +{ + WARN_ON(!hlist_empty(&sap->sk_list.list)); + llc_del_sap(sap); + kfree(sap); +} + +static struct packet_type llc_packet_type = { + .type = __constant_htons(ETH_P_802_2), + .func = llc_rcv, + .data = (void *)1, +}; + +static struct packet_type llc_tr_packet_type = { + .type = __constant_htons(ETH_P_TR_802_2), + .func = llc_rcv, + .data = (void *)1, +}; + +static int __init llc_init(void) +{ + if (dev_base->next) + memcpy(llc_station_mac_sa, dev_base->next->dev_addr, ETH_ALEN); + else + memset(llc_station_mac_sa, 0, ETH_ALEN); + dev_add_pack(&llc_packet_type); + dev_add_pack(&llc_tr_packet_type); + return 0; +} + +static void __exit llc_exit(void) +{ + dev_remove_pack(&llc_packet_type); + dev_remove_pack(&llc_tr_packet_type); +} + +module_init(llc_init); +module_exit(llc_exit); + +EXPORT_SYMBOL(llc_station_mac_sa); +EXPORT_SYMBOL(llc_sap_list); +EXPORT_SYMBOL(llc_sap_list_lock); +EXPORT_SYMBOL(llc_sap_find); +EXPORT_SYMBOL(llc_sap_open); +EXPORT_SYMBOL(llc_sap_close); + +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Procom 1997, Jay Schullist 2001, Arnaldo C. Melo 2001-2003"); +MODULE_DESCRIPTION("LLC IEEE 802.2 core support"); diff -prauN linux-2.6.0-test5/net/llc/llc_evnt.c wli-2.6.0-test5-bk12-25/net/llc/llc_evnt.c --- linux-2.6.0-test5/net/llc/llc_evnt.c 2003-09-08 12:49:55.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/llc/llc_evnt.c 1969-12-31 16:00:00.000000000 -0800 @@ -1,125 +0,0 @@ -/* - * llc_evnt.c - LLC station component event match functions - * Description : - * Functions in this module are implementation of station component events. - * Details of events can be found in IEEE-802.2 standard document. - * All functions have one station and one event as input argument. All of - * them return 0 On success and 1 otherwise. - * - * Copyright (c) 1997 by Procom Technology, Inc. - * 2001-2003 by Arnaldo Carvalho de Melo - * - * This program can be redistributed or modified under the terms of the - * GNU General Public License as published by the Free Software Foundation. - * This program is distributed without any warranty or implied warranty - * of merchantability or fitness for a particular purpose. - * - * See the GNU General Public License for more details. - */ -#include -#include -#include -#include -#include -#include - -int llc_stat_ev_enable_with_dup_addr_check(struct llc_station *station, - struct sk_buff *skb) -{ - struct llc_station_state_ev *ev = llc_station_ev(skb); - - return ev->type == LLC_STATION_EV_TYPE_SIMPLE && - ev->prim_type == - LLC_STATION_EV_ENABLE_WITH_DUP_ADDR_CHECK ? 0 : 1; -} - -int llc_stat_ev_enable_without_dup_addr_check(struct llc_station *station, - struct sk_buff *skb) -{ - struct llc_station_state_ev *ev = llc_station_ev(skb); - - return ev->type == LLC_STATION_EV_TYPE_SIMPLE && - ev->prim_type == - LLC_STATION_EV_ENABLE_WITHOUT_DUP_ADDR_CHECK ? 0 : 1; -} - -int llc_stat_ev_ack_tmr_exp_lt_retry_cnt_max_retry(struct llc_station *station, - struct sk_buff *skb) -{ - struct llc_station_state_ev *ev = llc_station_ev(skb); - - return ev->type == LLC_STATION_EV_TYPE_ACK_TMR && - station->retry_count < station->maximum_retry ? 0 : 1; -} - -int llc_stat_ev_ack_tmr_exp_eq_retry_cnt_max_retry(struct llc_station *station, - struct sk_buff *skb) -{ - struct llc_station_state_ev *ev = llc_station_ev(skb); - - return ev->type == LLC_STATION_EV_TYPE_ACK_TMR && - station->retry_count == station->maximum_retry ? 0 : 1; -} - -int llc_stat_ev_rx_null_dsap_xid_c(struct llc_station *station, - struct sk_buff *skb) -{ - struct llc_station_state_ev *ev = llc_station_ev(skb); - struct llc_pdu_un *pdu = llc_pdu_un_hdr(skb); - - return ev->type == LLC_STATION_EV_TYPE_PDU && - LLC_PDU_IS_CMD(pdu) && /* command PDU */ - LLC_PDU_TYPE_IS_U(pdu) && /* U type PDU */ - LLC_U_PDU_CMD(pdu) == LLC_1_PDU_CMD_XID && - !pdu->dsap ? 0 : 1; /* NULL DSAP value */ -} - -int llc_stat_ev_rx_null_dsap_0_xid_r_xid_r_cnt_eq(struct llc_station *station, - struct sk_buff *skb) -{ - struct llc_station_state_ev *ev = llc_station_ev(skb); - struct llc_pdu_un *pdu = llc_pdu_un_hdr(skb); - - return ev->type == LLC_STATION_EV_TYPE_PDU && - LLC_PDU_IS_RSP(pdu) && /* response PDU */ - LLC_PDU_TYPE_IS_U(pdu) && /* U type PDU */ - LLC_U_PDU_RSP(pdu) == LLC_1_PDU_CMD_XID && - !pdu->dsap && /* NULL DSAP value */ - !station->xid_r_count ? 0 : 1; -} - -int llc_stat_ev_rx_null_dsap_1_xid_r_xid_r_cnt_eq(struct llc_station *station, - struct sk_buff *skb) -{ - struct llc_station_state_ev *ev = llc_station_ev(skb); - struct llc_pdu_un *pdu = llc_pdu_un_hdr(skb); - - return ev->type == LLC_STATION_EV_TYPE_PDU && - LLC_PDU_IS_RSP(pdu) && /* response PDU */ - LLC_PDU_TYPE_IS_U(pdu) && /* U type PDU */ - LLC_U_PDU_RSP(pdu) == LLC_1_PDU_CMD_XID && - !pdu->dsap && /* NULL DSAP value */ - station->xid_r_count == 1 ? 0 : 1; -} - -int llc_stat_ev_rx_null_dsap_test_c(struct llc_station *station, - struct sk_buff *skb) -{ - struct llc_station_state_ev *ev = llc_station_ev(skb); - struct llc_pdu_un *pdu = llc_pdu_un_hdr(skb); - - return ev->type == LLC_STATION_EV_TYPE_PDU && - LLC_PDU_IS_CMD(pdu) && /* command PDU */ - LLC_PDU_TYPE_IS_U(pdu) && /* U type PDU */ - LLC_U_PDU_CMD(pdu) == LLC_1_PDU_CMD_TEST && - !pdu->dsap ? 0 : 1; /* NULL DSAP */ -} - -int llc_stat_ev_disable_req(struct llc_station *station, struct sk_buff *skb) -{ - struct llc_station_state_ev *ev = llc_station_ev(skb); - - return ev->type == LLC_STATION_EV_TYPE_PRIM && - ev->prim == LLC_DISABLE_PRIM && - ev->prim_type == LLC_PRIM_TYPE_REQ ? 0 : 1; -} diff -prauN linux-2.6.0-test5/net/llc/llc_if.c wli-2.6.0-test5-bk12-25/net/llc/llc_if.c --- linux-2.6.0-test5/net/llc/llc_if.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/llc/llc_if.c 2003-09-25 19:16:17.000000000 -0700 @@ -25,136 +25,8 @@ #include #include #include -#include -/** - * llc_sap_open - open interface to the upper layers. - * @lsap: SAP number. - * @func: rcv func for datalink protos - * - * Interface function to upper layer. Each one who wants to get a SAP - * (for example NetBEUI) should call this function. Returns the opened - * SAP for success, NULL for failure. - */ -struct llc_sap *llc_sap_open(u8 lsap, int (*func)(struct sk_buff *skb, - struct net_device *dev, - struct packet_type *pt)) -{ - /* verify this SAP is not already open; if so, return error */ - struct llc_sap *sap; - - sap = llc_sap_find(lsap); - if (sap) { /* SAP already exists */ - sap = NULL; - goto out; - } - /* sap requested does not yet exist */ - sap = llc_sap_alloc(); - if (!sap) - goto out; - /* allocated a SAP; initialize it and clear out its memory pool */ - sap->laddr.lsap = lsap; - sap->rcv_func = func; - sap->station = &llc_main_station; - /* initialized SAP; add it to list of SAPs this station manages */ - llc_sap_save(sap); -out: - return sap; -} - -/** - * llc_sap_close - close interface for upper layers. - * @sap: SAP to be closed. - * - * Close interface function to upper layer. Each one who wants to - * close an open SAP (for example NetBEUI) should call this function. - */ -void llc_sap_close(struct llc_sap *sap) -{ - llc_free_sap(sap); -} - -/** - * llc_build_and_send_ui_pkt - unitdata request interface for upper layers - * @sap: sap to use - * @skb: packet to send - * @dmac: destination mac address - * @dsap: destination sap - * - * Upper layers calls this function when upper layer wants to send data - * using connection-less mode communication (UI pdu). - * - * Accept data frame from network layer to be sent using connection- - * less mode communication; timeout/retries handled by network layer; - * package primitive as an event and send to SAP event handler - */ -void llc_build_and_send_ui_pkt(struct llc_sap *sap, struct sk_buff *skb, - u8 *dmac, u8 dsap) -{ - struct llc_sap_state_ev *ev = llc_sap_ev(skb); - - ev->saddr.lsap = sap->laddr.lsap; - ev->daddr.lsap = dsap; - memcpy(ev->saddr.mac, skb->dev->dev_addr, IFHWADDRLEN); - memcpy(ev->daddr.mac, dmac, IFHWADDRLEN); - - ev->type = LLC_SAP_EV_TYPE_PRIM; - ev->prim = LLC_DATAUNIT_PRIM; - ev->prim_type = LLC_PRIM_TYPE_REQ; - llc_sap_state_process(sap, skb); -} - -/** - * llc_build_and_send_test_pkt - TEST interface for upper layers. - * @sap: sap to use - * @skb: packet to send - * @dmac: destination mac address - * @dsap: destination sap - * - * This function is called when upper layer wants to send a TEST pdu. - * Returns 0 for success, 1 otherwise. - */ -void llc_build_and_send_test_pkt(struct llc_sap *sap, - struct sk_buff *skb, u8 *dmac, u8 dsap) -{ - struct llc_sap_state_ev *ev = llc_sap_ev(skb); - - ev->saddr.lsap = sap->laddr.lsap; - ev->daddr.lsap = dsap; - memcpy(ev->saddr.mac, skb->dev->dev_addr, IFHWADDRLEN); - memcpy(ev->daddr.mac, dmac, IFHWADDRLEN); - - ev->type = LLC_SAP_EV_TYPE_PRIM; - ev->prim = LLC_TEST_PRIM; - ev->prim_type = LLC_PRIM_TYPE_REQ; - llc_sap_state_process(sap, skb); -} - -/** - * llc_build_and_send_xid_pkt - XID interface for upper layers - * @sap: sap to use - * @skb: packet to send - * @dmac: destination mac address - * @dsap: destination sap - * - * This function is called when upper layer wants to send a XID pdu. - * Returns 0 for success, 1 otherwise. - */ -void llc_build_and_send_xid_pkt(struct llc_sap *sap, struct sk_buff *skb, - u8 *dmac, u8 dsap) -{ - struct llc_sap_state_ev *ev = llc_sap_ev(skb); - - ev->saddr.lsap = sap->laddr.lsap; - ev->daddr.lsap = dsap; - memcpy(ev->saddr.mac, skb->dev->dev_addr, IFHWADDRLEN); - memcpy(ev->daddr.mac, dmac, IFHWADDRLEN); - - ev->type = LLC_SAP_EV_TYPE_PRIM; - ev->prim = LLC_XID_PRIM; - ev->prim_type = LLC_PRIM_TYPE_REQ; - llc_sap_state_process(sap, skb); -} +u8 llc_mac_null_var[IFHWADDRLEN]; /** * llc_build_and_send_pkt - Connection data sending for upper layers. @@ -307,7 +179,3 @@ int llc_build_and_send_reset_pkt(struct } return rc; } - -EXPORT_SYMBOL(llc_sap_open); -EXPORT_SYMBOL(llc_sap_close); -EXPORT_SYMBOL(llc_build_and_send_ui_pkt); diff -prauN linux-2.6.0-test5/net/llc/llc_input.c wli-2.6.0-test5-bk12-25/net/llc/llc_input.c --- linux-2.6.0-test5/net/llc/llc_input.c 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/net/llc/llc_input.c 2003-09-25 19:16:17.000000000 -0700 @@ -0,0 +1,189 @@ +/* + * llc_input.c - Minimal input path for LLC + * + * Copyright (c) 1997 by Procom Technology, Inc. + * 2001-2003 by Arnaldo Carvalho de Melo + * + * This program can be redistributed or modified under the terms of the + * GNU General Public License as published by the Free Software Foundation. + * This program is distributed without any warranty or implied warranty + * of merchantability or fitness for a particular purpose. + * + * See the GNU General Public License for more details. + */ +#include +#include +#include +#include + +#if 0 +#define dprintk(args...) printk(KERN_DEBUG args) +#else +#define dprintk(args...) +#endif + +/* + * Packet handler for the station, registerable because in the minimal + * LLC core that is taking shape only the very minimal subset of LLC that + * is needed for things like IPX, Appletalk, etc will stay, with all the + * rest in the llc1 and llc2 modules. + */ +static void (*llc_station_handler)(struct sk_buff *skb); + +/* + * Packet handlers for LLC_DEST_SAP and LLC_DEST_CONN. + */ +static void (*llc_type_handlers[2])(struct llc_sap *sap, + struct sk_buff *skb); + +void llc_add_pack(int type, void (*handler)(struct llc_sap *sap, + struct sk_buff *skb)) +{ + if (type == LLC_DEST_SAP || type == LLC_DEST_CONN) + llc_type_handlers[type] = handler; +} + +void llc_remove_pack(int type) +{ + if (type == LLC_DEST_SAP || type == LLC_DEST_CONN) + llc_type_handlers[type] = NULL; +} + +void llc_set_station_handler(void (*handler)(struct sk_buff *skb)) +{ + llc_station_handler = handler; +} + +/** + * llc_pdu_type - returns which LLC component must handle for PDU + * @skb: input skb + * + * This function returns which LLC component must handle this PDU. + */ +static __inline__ int llc_pdu_type(struct sk_buff *skb) +{ + int type = LLC_DEST_CONN; /* I-PDU or S-PDU type */ + struct llc_pdu_sn *pdu = llc_pdu_sn_hdr(skb); + + if ((pdu->ctrl_1 & LLC_PDU_TYPE_MASK) != LLC_PDU_TYPE_U) + goto out; + switch (LLC_U_PDU_CMD(pdu)) { + case LLC_1_PDU_CMD_XID: + case LLC_1_PDU_CMD_UI: + case LLC_1_PDU_CMD_TEST: + type = LLC_DEST_SAP; + break; + case LLC_2_PDU_CMD_SABME: + case LLC_2_PDU_CMD_DISC: + case LLC_2_PDU_RSP_UA: + case LLC_2_PDU_RSP_DM: + case LLC_2_PDU_RSP_FRMR: + break; + default: + type = LLC_DEST_INVALID; + break; + } +out: + return type; +} + +/** + * llc_fixup_skb - initializes skb pointers + * @skb: This argument points to incoming skb + * + * Initializes internal skb pointer to start of network layer by deriving + * length of LLC header; finds length of LLC control field in LLC header + * by looking at the two lowest-order bits of the first control field + * byte; field is either 3 or 4 bytes long. + */ +static inline int llc_fixup_skb(struct sk_buff *skb) +{ + u8 llc_len = 2; + struct llc_pdu_sn *pdu; + + if (!pskb_may_pull(skb, sizeof(*pdu))) + return 0; + + pdu = (struct llc_pdu_sn *)skb->data; + if ((pdu->ctrl_1 & LLC_PDU_TYPE_MASK) == LLC_PDU_TYPE_U) + llc_len = 1; + llc_len += 2; + skb->h.raw += llc_len; + skb_pull(skb, llc_len); + if (skb->protocol == htons(ETH_P_802_2)) { + u16 pdulen = ((struct ethhdr *)skb->mac.raw)->h_proto, + data_size = ntohs(pdulen) - llc_len; + + skb_trim(skb, data_size); + } + return 1; +} + +/** + * llc_rcv - 802.2 entry point from net lower layers + * @skb: received pdu + * @dev: device that receive pdu + * @pt: packet type + * + * When the system receives a 802.2 frame this function is called. It + * checks SAP and connection of received pdu and passes frame to + * llc_{station,sap,conn}_rcv for sending to proper state machine. If + * the frame is related to a busy connection (a connection is sending + * data now), it queues this frame in the connection's backlog. + */ +int llc_rcv(struct sk_buff *skb, struct net_device *dev, + struct packet_type *pt) +{ + struct llc_sap *sap; + struct llc_pdu_sn *pdu; + int dest; + + /* + * When the interface is in promisc. mode, drop all the crap that it + * receives, do not try to analyse it. + */ + if (unlikely(skb->pkt_type == PACKET_OTHERHOST)) { + dprintk("%s: PACKET_OTHERHOST\n", __FUNCTION__); + goto drop; + } + skb = skb_share_check(skb, GFP_ATOMIC); + if (unlikely(!skb)) + goto out; + if (unlikely(!llc_fixup_skb(skb))) + goto drop; + pdu = llc_pdu_sn_hdr(skb); + if (unlikely(!pdu->dsap)) /* NULL DSAP, refer to station */ + goto handle_station; + sap = llc_sap_find(pdu->dsap); + if (unlikely(!sap)) {/* unknown SAP */ + dprintk("%s: llc_sap_find(%02X) failed!\n", __FUNCTION__, + pdu->dsap); + goto drop; + } + /* + * First the upper layer protocols that don't need the full + * LLC functionality + */ + if (sap->rcv_func) { + sap->rcv_func(skb, dev, pt); + goto out; + } + dest = llc_pdu_type(skb); + if (unlikely(!dest || !llc_type_handlers[dest - 1])) + goto drop; + llc_type_handlers[dest - 1](sap, skb); +out: + return 0; +drop: + kfree_skb(skb); + goto out; +handle_station: + if (!llc_station_handler) + goto drop; + llc_station_handler(skb); + goto out; +} + +EXPORT_SYMBOL(llc_add_pack); +EXPORT_SYMBOL(llc_remove_pack); +EXPORT_SYMBOL(llc_set_station_handler); diff -prauN linux-2.6.0-test5/net/llc/llc_mac.c wli-2.6.0-test5-bk12-25/net/llc/llc_mac.c --- linux-2.6.0-test5/net/llc/llc_mac.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/llc/llc_mac.c 1969-12-31 16:00:00.000000000 -0800 @@ -1,302 +0,0 @@ -/* - * llc_mac.c - Manages interface between LLC and MAC - * - * Copyright (c) 1997 by Procom Technology, Inc. - * 2001-2003 by Arnaldo Carvalho de Melo - * - * This program can be redistributed or modified under the terms of the - * GNU General Public License as published by the Free Software Foundation. - * This program is distributed without any warranty or implied warranty - * of merchantability or fitness for a particular purpose. - * - * See the GNU General Public License for more details. - */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#if 0 -#define dprintk(args...) printk(KERN_DEBUG args) -#else -#define dprintk(args...) -#endif - -u8 llc_mac_null_var[IFHWADDRLEN]; - -static int fix_up_incoming_skb(struct sk_buff *skb); -static void llc_station_rcv(struct sk_buff *skb); -static void llc_sap_rcv(struct llc_sap *sap, struct sk_buff *skb); - -/** - * llc_rcv - 802.2 entry point from net lower layers - * @skb: received pdu - * @dev: device that receive pdu - * @pt: packet type - * - * When the system receives a 802.2 frame this function is called. It - * checks SAP and connection of received pdu and passes frame to - * llc_{station,sap,conn}_rcv for sending to proper state machine. If - * the frame is related to a busy connection (a connection is sending - * data now), it queues this frame in the connection's backlog. - */ -int llc_rcv(struct sk_buff *skb, struct net_device *dev, - struct packet_type *pt) -{ - struct llc_sap *sap; - struct llc_pdu_sn *pdu; - u8 dest; - - /* - * When the interface is in promisc. mode, drop all the crap that it - * receives, do not try to analyse it. - */ - if (skb->pkt_type == PACKET_OTHERHOST) { - dprintk("%s: PACKET_OTHERHOST\n", __FUNCTION__); - goto drop; - } - skb = skb_share_check(skb, GFP_ATOMIC); - if (!skb) - goto out; - if (!fix_up_incoming_skb(skb)) - goto drop; - pdu = llc_pdu_sn_hdr(skb); - if (!pdu->dsap) { /* NULL DSAP, refer to station */ - dprintk("%s: calling llc_station_rcv!\n", __FUNCTION__); - llc_station_rcv(skb); - goto out; - } - sap = llc_sap_find(pdu->dsap); - if (!sap) {/* unknown SAP */ - dprintk("%s: llc_sap_find(%02X) failed!\n", __FUNCTION__, - pdu->dsap); - goto drop; - } - llc_decode_pdu_type(skb, &dest); - if (dest == LLC_DEST_SAP) { /* type 1 services */ - if (sap->rcv_func) - sap->rcv_func(skb, dev, pt); - else { - struct llc_addr laddr; - struct sock *sk; - - llc_pdu_decode_da(skb, laddr.mac); - llc_pdu_decode_dsap(skb, &laddr.lsap); - - sk = llc_lookup_dgram(sap, &laddr); - if (!sk) - goto drop; - skb->sk = sk; - llc_sap_rcv(sap, skb); - sock_put(sk); - } - } else if (dest == LLC_DEST_CONN) { - struct llc_addr saddr, daddr; - struct sock *sk; - int rc; - - llc_pdu_decode_sa(skb, saddr.mac); - llc_pdu_decode_ssap(skb, &saddr.lsap); - llc_pdu_decode_da(skb, daddr.mac); - llc_pdu_decode_dsap(skb, &daddr.lsap); - - sk = llc_lookup_established(sap, &saddr, &daddr); - if (!sk) { - /* - * Didn't find an active connection; verify if there - * is a listening socket for this llc addr - */ - struct llc_opt *llc; - struct sock *parent; - - parent = llc_lookup_listener(sap, &daddr); - - if (!parent) { - dprintk("llc_lookup_listener failed!\n"); - goto drop; - } - - sk = llc_sk_alloc(parent->sk_family, GFP_ATOMIC); - if (!sk) { - sock_put(parent); - goto drop; - } - llc = llc_sk(sk); - memcpy(&llc->laddr, &daddr, sizeof(llc->laddr)); - memcpy(&llc->daddr, &saddr, sizeof(llc->daddr)); - llc_sap_assign_sock(sap, sk); - sock_hold(sk); - sock_put(parent); - skb->sk = parent; - } else - skb->sk = sk; - bh_lock_sock(sk); - if (!sock_owned_by_user(sk)) { - /* rc = */ llc_conn_rcv(sk, skb); - rc = 0; - } else { - dprintk("%s: adding to backlog...\n", __FUNCTION__); - llc_set_backlog_type(skb, LLC_PACKET); - sk_add_backlog(sk, skb); - rc = 0; - } - bh_unlock_sock(sk); - sock_put(sk); - if (rc) - goto drop; - } else /* unknown or not supported pdu */ - goto drop; -out: - return 0; -drop: - kfree_skb(skb); - goto out; -} - -/** - * fix_up_incoming_skb - initializes skb pointers - * @skb: This argument points to incoming skb - * - * Initializes internal skb pointer to start of network layer by deriving - * length of LLC header; finds length of LLC control field in LLC header - * by looking at the two lowest-order bits of the first control field - * byte; field is either 3 or 4 bytes long. - */ -static int fix_up_incoming_skb(struct sk_buff *skb) -{ - u8 llc_len = 2; - struct llc_pdu_sn *pdu; - - if (!pskb_may_pull(skb, sizeof(*pdu))) - return 0; - - pdu = (struct llc_pdu_sn *)skb->data; - if ((pdu->ctrl_1 & LLC_PDU_TYPE_MASK) == LLC_PDU_TYPE_U) - llc_len = 1; - llc_len += 2; - skb->h.raw += llc_len; - skb_pull(skb, llc_len); - if (skb->protocol == htons(ETH_P_802_2)) { - u16 pdulen = ((struct ethhdr *)skb->mac.raw)->h_proto, - data_size = ntohs(pdulen) - llc_len; - - skb_trim(skb, data_size); - } - return 1; -} - -/* - * llc_station_rcv - send received pdu to the station state machine - * @skb: received frame. - * - * Sends data unit to station state machine. - */ -static void llc_station_rcv(struct sk_buff *skb) -{ - struct llc_station_state_ev *ev = llc_station_ev(skb); - - ev->type = LLC_STATION_EV_TYPE_PDU; - ev->reason = 0; - llc_station_state_process(&llc_main_station, skb); -} - - -/** - * llc_conn_rcv - sends received pdus to the connection state machine - * @sk: current connection structure. - * @skb: received frame. - * - * Sends received pdus to the connection state machine. - */ -int llc_conn_rcv(struct sock* sk, struct sk_buff *skb) -{ - struct llc_conn_state_ev *ev = llc_conn_ev(skb); - struct llc_opt *llc = llc_sk(sk); - - if (!llc->dev) - llc->dev = skb->dev; - ev->type = LLC_CONN_EV_TYPE_PDU; - ev->reason = 0; - return llc_conn_state_process(sk, skb); -} - -/** - * llc_sap_rcv - sends received pdus to the sap state machine - * @sap: current sap component structure. - * @skb: received frame. - * - * Sends received pdus to the sap state machine. - */ -static void llc_sap_rcv(struct llc_sap *sap, struct sk_buff *skb) -{ - struct llc_sap_state_ev *ev = llc_sap_ev(skb); - - ev->type = LLC_SAP_EV_TYPE_PDU; - ev->reason = 0; - llc_sap_state_process(sap, skb); -} - -/** - * lan_hdrs_init - fills MAC header fields - * @skb: Address of the frame to initialize its MAC header - * @sa: The MAC source address - * @da: The MAC destination address - * - * Fills MAC header fields, depending on MAC type. Returns 0, If MAC type - * is a valid type and initialization completes correctly 1, otherwise. - */ -u16 lan_hdrs_init(struct sk_buff *skb, u8 *sa, u8 *da) -{ - u16 rc = 0; - - switch (skb->dev->type) { -#ifdef CONFIG_TR - case ARPHRD_IEEE802_TR: { - struct trh_hdr *trh; - struct net_device *dev = skb->dev; - - trh = (struct trh_hdr *)skb_push(skb, sizeof(*trh)); - trh->ac = AC; - trh->fc = LLC_FRAME; - if (sa) - memcpy(trh->saddr, sa, dev->addr_len); - else - memset(trh->saddr, 0, dev->addr_len); - if (da) { - memcpy(trh->daddr, da, dev->addr_len); - tr_source_route(skb, trh, dev); - } - skb->mac.raw = skb->data; - break; - } -#endif - case ARPHRD_ETHER: - case ARPHRD_LOOPBACK: { - unsigned short len = skb->len; - struct ethhdr *eth; - - skb->mac.raw = skb_push(skb, sizeof(*eth)); - eth = (struct ethhdr *)skb->mac.raw; - eth->h_proto = htons(len); - memcpy(eth->h_dest, da, ETH_ALEN); - memcpy(eth->h_source, sa, ETH_ALEN); - break; - } - default: - printk(KERN_WARNING "Unknown DEVICE type : %d\n", - skb->dev->type); - rc = 1; - } - return rc; -} diff -prauN linux-2.6.0-test5/net/llc/llc_main.c wli-2.6.0-test5-bk12-25/net/llc/llc_main.c --- linux-2.6.0-test5/net/llc/llc_main.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/llc/llc_main.c 1969-12-31 16:00:00.000000000 -0800 @@ -1,607 +0,0 @@ -/* - * llc_main.c - This module contains main functions to manage station, saps - * and connections of the LLC. - * - * Copyright (c) 1997 by Procom Technology, Inc. - * 2001-2003 by Arnaldo Carvalho de Melo - * - * This program can be redistributed or modified under the terms of the - * GNU General Public License as published by the Free Software Foundation. - * This program is distributed without any warranty or implied warranty - * of merchantability or fitness for a particular purpose. - * - * See the GNU General Public License for more details. - */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/* static function prototypes */ -static void llc_station_service_events(struct llc_station *station); -static void llc_station_free_ev(struct llc_station *station, - struct sk_buff *skb); -static void llc_station_send_pdus(struct llc_station *station); -static u16 llc_station_next_state(struct llc_station *station, - struct sk_buff *skb); -static u16 llc_exec_station_trans_actions(struct llc_station *station, - struct llc_station_state_trans *trans, - struct sk_buff *skb); -static struct llc_station_state_trans * - llc_find_station_trans(struct llc_station *station, - struct sk_buff *skb); -static int llc_rtn_all_conns(struct llc_sap *sap); - -struct llc_station llc_main_station; /* only one of its kind */ - -#undef LLC_REFCNT_DEBUG -#ifdef LLC_REFCNT_DEBUG -static atomic_t llc_sock_nr; -#endif - -/** - * llc_sap_alloc - allocates and initializes sap. - * - * Allocates and initializes sap. - */ -struct llc_sap *llc_sap_alloc(void) -{ - struct llc_sap *sap = kmalloc(sizeof(*sap), GFP_ATOMIC); - - if (sap) { - memset(sap, 0, sizeof(*sap)); - sap->state = LLC_SAP_STATE_ACTIVE; - memcpy(sap->laddr.mac, llc_main_station.mac_sa, ETH_ALEN); - rwlock_init(&sap->sk_list.lock); - } - return sap; -} - -/** - * llc_free_sap - frees a sap - * @sap: Address of the sap - * - * Frees all associated connections (if any), removes this sap from - * the list of saps in te station and them frees the memory for this sap. - */ -void llc_free_sap(struct llc_sap *sap) -{ - llc_rtn_all_conns(sap); - write_lock_bh(&sap->station->sap_list.lock); - list_del(&sap->node); - write_unlock_bh(&sap->station->sap_list.lock); - kfree(sap); -} - -/** - * llc_sap_save - add sap to station list - * @sap: Address of the sap - * - * Adds a sap to the LLC's station sap list. - */ -void llc_sap_save(struct llc_sap *sap) -{ - write_lock_bh(&llc_main_station.sap_list.lock); - list_add_tail(&sap->node, &llc_main_station.sap_list.list); - write_unlock_bh(&llc_main_station.sap_list.lock); -} - -/** - * llc_sap_find - searchs a SAP in station - * @sap_value: sap to be found - * - * Searchs for a sap in the sap list of the LLC's station upon the sap ID. - * Returns the sap or %NULL if not found. - */ -struct llc_sap *llc_sap_find(u8 sap_value) -{ - struct llc_sap* sap = NULL; - struct list_head *entry; - - read_lock_bh(&llc_main_station.sap_list.lock); - list_for_each(entry, &llc_main_station.sap_list.list) { - sap = list_entry(entry, struct llc_sap, node); - if (sap->laddr.lsap == sap_value) - break; - } - if (entry == &llc_main_station.sap_list.list) /* not found */ - sap = NULL; - read_unlock_bh(&llc_main_station.sap_list.lock); - return sap; -} - -/** - * llc_backlog_rcv - Processes rx frames and expired timers. - * @sk: LLC sock (p8022 connection) - * @skb: queued rx frame or event - * - * This function processes frames that has received and timers that has - * expired during sending an I pdu (refer to data_req_handler). frames - * queue by llc_rcv function (llc_mac.c) and timers queue by timer - * callback functions(llc_c_ac.c). - */ -static int llc_backlog_rcv(struct sock *sk, struct sk_buff *skb) -{ - int rc = 0; - struct llc_opt *llc = llc_sk(sk); - - if (llc_backlog_type(skb) == LLC_PACKET) { - if (llc->state > 1) /* not closed */ - rc = llc_conn_rcv(sk, skb); - else - goto out_kfree_skb; - } else if (llc_backlog_type(skb) == LLC_EVENT) { - /* timer expiration event */ - if (llc->state > 1) /* not closed */ - rc = llc_conn_state_process(sk, skb); - else - goto out_kfree_skb; - } else { - printk(KERN_ERR "%s: invalid skb in backlog\n", __FUNCTION__); - goto out_kfree_skb; - } -out: - return rc; -out_kfree_skb: - kfree_skb(skb); - goto out; -} - -/** - * llc_sk_init - Initializes a socket with default llc values. - * @sk: socket to initialize. - * - * Initializes a socket with default llc values. - */ -int llc_sk_init(struct sock* sk) -{ - struct llc_opt *llc = kmalloc(sizeof(*llc), GFP_ATOMIC); - int rc = -ENOMEM; - - if (!llc) - goto out; - memset(llc, 0, sizeof(*llc)); - rc = 0; - - llc->sk = sk; - llc->state = LLC_CONN_STATE_ADM; - llc->inc_cntr = llc->dec_cntr = 2; - llc->dec_step = llc->connect_step = 1; - - init_timer(&llc->ack_timer.timer); - llc->ack_timer.expire = LLC_ACK_TIME; - llc->ack_timer.timer.data = (unsigned long)sk; - llc->ack_timer.timer.function = llc_conn_ack_tmr_cb; - - init_timer(&llc->pf_cycle_timer.timer); - llc->pf_cycle_timer.expire = LLC_P_TIME; - llc->pf_cycle_timer.timer.data = (unsigned long)sk; - llc->pf_cycle_timer.timer.function = llc_conn_pf_cycle_tmr_cb; - - init_timer(&llc->rej_sent_timer.timer); - llc->rej_sent_timer.expire = LLC_REJ_TIME; - llc->rej_sent_timer.timer.data = (unsigned long)sk; - llc->rej_sent_timer.timer.function = llc_conn_rej_tmr_cb; - - init_timer(&llc->busy_state_timer.timer); - llc->busy_state_timer.expire = LLC_BUSY_TIME; - llc->busy_state_timer.timer.data = (unsigned long)sk; - llc->busy_state_timer.timer.function = llc_conn_busy_tmr_cb; - - llc->n2 = 2; /* max retransmit */ - llc->k = 2; /* tx win size, will adjust dynam */ - llc->rw = 128; /* rx win size (opt and equal to - * tx_win of remote LLC) */ - skb_queue_head_init(&llc->pdu_unack_q); - sk->sk_backlog_rcv = llc_backlog_rcv; - llc_sk(sk) = llc; -out: - return rc; -} - -/** - * llc_sk_alloc - Allocates LLC sock - * @family: upper layer protocol family - * @priority: for allocation (%GFP_KERNEL, %GFP_ATOMIC, etc) - * - * Allocates a LLC sock and initializes it. Returns the new LLC sock - * or %NULL if there's no memory available for one - */ -struct sock *llc_sk_alloc(int family, int priority) -{ - struct sock *sk = sk_alloc(family, priority, 1, NULL); - - if (!sk) - goto out; - if (llc_sk_init(sk)) - goto outsk; - sock_init_data(NULL, sk); - sk_set_owner(sk, THIS_MODULE); -#ifdef LLC_REFCNT_DEBUG - atomic_inc(&llc_sock_nr); - printk(KERN_DEBUG "LLC socket %p created in %s, now we have %d alive\n", sk, - __FUNCTION__, atomic_read(&llc_sock_nr)); -#endif -out: - return sk; -outsk: - sk_free(sk); - sk = NULL; - goto out; -} - -/** - * llc_sk_free - Frees a LLC socket - * @sk - socket to free - * - * Frees a LLC socket - */ -void llc_sk_free(struct sock *sk) -{ - struct llc_opt *llc = llc_sk(sk); - - llc->state = LLC_CONN_OUT_OF_SVC; - /* Stop all (possibly) running timers */ - llc_conn_ac_stop_all_timers(sk, NULL); -#ifdef DEBUG_LLC_CONN_ALLOC - printk(KERN_INFO "%s: unackq=%d, txq=%d\n", __FUNCTION__, - skb_queue_len(&llc->pdu_unack_q), - skb_queue_len(&sk->sk_write_queue)); -#endif - skb_queue_purge(&sk->sk_receive_queue); - skb_queue_purge(&sk->sk_write_queue); - skb_queue_purge(&llc->pdu_unack_q); -#ifdef LLC_REFCNT_DEBUG - if (atomic_read(&sk->sk_refcnt) != 1) { - printk(KERN_DEBUG "Destruction of LLC sock %p delayed in %s, cnt=%d\n", - sk, __FUNCTION__, atomic_read(&sk->sk_refcnt)); - printk(KERN_DEBUG "%d LLC sockets are still alive\n", - atomic_read(&llc_sock_nr)); - } else { - atomic_dec(&llc_sock_nr); - printk(KERN_DEBUG "LLC socket %p released in %s, %d are still alive\n", sk, - __FUNCTION__, atomic_read(&llc_sock_nr)); - } -#endif - sock_put(sk); -} - -/** - * llc_sk_reset - resets a connection - * @sk: LLC socket to reset - * - * Resets a connection to the out of service state. Stops its timers - * and frees any frames in the queues of the connection. - */ -void llc_sk_reset(struct sock *sk) -{ - struct llc_opt *llc = llc_sk(sk); - - llc_conn_ac_stop_all_timers(sk, NULL); - skb_queue_purge(&sk->sk_write_queue); - skb_queue_purge(&llc->pdu_unack_q); - llc->remote_busy_flag = 0; - llc->cause_flag = 0; - llc->retry_count = 0; - llc_conn_set_p_flag(sk, 0); - llc->f_flag = 0; - llc->s_flag = 0; - llc->ack_pf = 0; - llc->first_pdu_Ns = 0; - llc->ack_must_be_send = 0; - llc->dec_step = 1; - llc->inc_cntr = 2; - llc->dec_cntr = 2; - llc->X = 0; - llc->failed_data_req = 0 ; - llc->last_nr = 0; -} - -/** - * llc_rtn_all_conns - Closes all connections of a sap - * @sap: sap to close its connections - * - * Closes all connections of a sap. Returns 0 if all actions complete - * successfully, nonzero otherwise - */ -static int llc_rtn_all_conns(struct llc_sap *sap) -{ - int rc = 0; - struct sock *sk; - struct hlist_node *node; - - write_lock_bh(&sap->sk_list.lock); - - sk_for_each(sk, node, &sap->sk_list.list) { - llc_sk(sk)->state = LLC_CONN_STATE_TEMP; - - if (llc_send_disc(sk)) - rc = 1; - } - - write_unlock_bh(&sap->sk_list.lock); - return rc; -} - -/** - * llc_station_state_process: queue event and try to process queue. - * @station: Address of the station - * @skb: Address of the event - * - * Queues an event (on the station event queue) for handling by the - * station state machine and attempts to process any queued-up events. - */ -void llc_station_state_process(struct llc_station *station, struct sk_buff *skb) -{ - spin_lock_bh(&station->ev_q.lock); - skb_queue_tail(&station->ev_q.list, skb); - llc_station_service_events(station); - spin_unlock_bh(&station->ev_q.lock); -} - -/** - * llc_station_send_pdu - queues PDU to send - * @station: Address of the station - * @skb: Address of the PDU - * - * Queues a PDU to send to the MAC layer. - */ -void llc_station_send_pdu(struct llc_station *station, struct sk_buff *skb) -{ - skb_queue_tail(&station->mac_pdu_q, skb); - llc_station_send_pdus(station); -} - -/** - * llc_station_send_pdus - tries to send queued PDUs - * @station: Address of the station - * - * Tries to send any PDUs queued in the station mac_pdu_q to the MAC - * layer. - */ -static void llc_station_send_pdus(struct llc_station *station) -{ - struct sk_buff *skb; - - while ((skb = skb_dequeue(&station->mac_pdu_q)) != NULL) - if (dev_queue_xmit(skb)) - break; -} - -/** - * llc_station_free_ev - frees an event - * @station: Address of the station - * @skb: Address of the event - * - * Frees an event. - */ -static void llc_station_free_ev(struct llc_station *station, - struct sk_buff *skb) -{ - struct llc_station_state_ev *ev = llc_station_ev(skb); - - if (ev->type == LLC_STATION_EV_TYPE_PDU) - kfree_skb(skb); -} - -/** - * llc_station_service_events - service events in the queue - * @station: Address of the station - * - * Get an event from the station event queue (if any); attempt to service - * the event; if event serviced, get the next event (if any) on the event - * queue; if event not service, re-queue the event on the event queue and - * attempt to service the next event; when serviced all events in queue, - * finished; if don't transition to different state, just service all - * events once; if transition to new state, service all events again. - * Caller must hold station->ev_q.lock. - */ -static void llc_station_service_events(struct llc_station *station) -{ - struct sk_buff *skb; - - while ((skb = skb_dequeue(&station->ev_q.list)) != NULL) - llc_station_next_state(station, skb); -} - -/** - * llc_station_next_state - processes event and goes to the next state - * @station: Address of the station - * @skb: Address of the event - * - * Processes an event, executes any transitions related to that event and - * updates the state of the station. - */ -static u16 llc_station_next_state(struct llc_station *station, - struct sk_buff *skb) -{ - u16 rc = 1; - struct llc_station_state_trans *trans; - - if (station->state > LLC_NBR_STATION_STATES) - goto out; - trans = llc_find_station_trans(station, skb); - if (trans) { - /* got the state to which we next transition; perform the - * actions associated with this transition before actually - * transitioning to the next state - */ - rc = llc_exec_station_trans_actions(station, trans, skb); - if (!rc) - /* transition station to next state if all actions - * execute successfully; done; wait for next event - */ - station->state = trans->next_state; - } else - /* event not recognized in current state; re-queue it for - * processing again at a later time; return failure - */ - rc = 0; -out: - llc_station_free_ev(station, skb); - return rc; -} - -/** - * llc_find_station_trans - finds transition for this event - * @station: Address of the station - * @skb: Address of the event - * - * Search thru events of the current state of the station until list - * exhausted or it's obvious that the event is not valid for the current - * state. Returns the address of the transition if cound, %NULL otherwise. - */ -static struct llc_station_state_trans * - llc_find_station_trans(struct llc_station *station, - struct sk_buff *skb) -{ - int i = 0; - struct llc_station_state_trans *rc = NULL; - struct llc_station_state_trans **next_trans; - struct llc_station_state *curr_state = - &llc_station_state_table[station->state - 1]; - - for (next_trans = curr_state->transitions; next_trans[i]->ev; i++) - if (!next_trans[i]->ev(station, skb)) { - rc = next_trans[i]; - break; - } - return rc; -} - -/** - * llc_exec_station_trans_actions - executes actions for transition - * @station: Address of the station - * @trans: Address of the transition - * @skb: Address of the event that caused the transition - * - * Executes actions of a transition of the station state machine. Returns - * 0 if all actions complete successfully, nonzero otherwise. - */ -static u16 llc_exec_station_trans_actions(struct llc_station *station, - struct llc_station_state_trans *trans, - struct sk_buff *skb) -{ - u16 rc = 0; - llc_station_action_t *next_action = trans->ev_actions; - - for (; next_action && *next_action; next_action++) - if ((*next_action)(station, skb)) - rc = 1; - return rc; -} - -/** - * llc_alloc_frame - allocates sk_buff for frame - * - * Allocates an sk_buff for frame and initializes sk_buff fields. - * Returns allocated skb or %NULL when out of memory. - */ -struct sk_buff *llc_alloc_frame(void) -{ - struct sk_buff *skb = alloc_skb(128, GFP_ATOMIC); - - if (skb) { - skb_reserve(skb, 50); - skb->nh.raw = skb->h.raw = skb->data; - skb->protocol = htons(ETH_P_802_2); - skb->dev = dev_base->next; - skb->mac.raw = skb->head; - } - return skb; -} - -static struct packet_type llc_packet_type = { - .type = __constant_htons(ETH_P_802_2), - .func = llc_rcv, - .data = (void *)1, -}; - -static struct packet_type llc_tr_packet_type = { - .type = __constant_htons(ETH_P_TR_802_2), - .func = llc_rcv, - .data = (void *)1, -}; - -static char llc_banner[] __initdata = - KERN_INFO "LLC 2.0 by Procom, 1997, Arnaldo C. Melo, 2001, 2002\n" - KERN_INFO "NET 4.0 IEEE 802.2 extended support\n"; -static char llc_error_msg[] __initdata = - KERN_ERR "LLC install NOT successful.\n"; - -static int __init llc_init(void) -{ - u16 rc = 0; - struct sk_buff *skb; - struct llc_station_state_ev *ev; - - printk(llc_banner); - INIT_LIST_HEAD(&llc_main_station.sap_list.list); - rwlock_init(&llc_main_station.sap_list.lock); - skb_queue_head_init(&llc_main_station.mac_pdu_q); - skb_queue_head_init(&llc_main_station.ev_q.list); - spin_lock_init(&llc_main_station.ev_q.lock); - init_timer(&llc_main_station.ack_timer); - llc_main_station.ack_timer.data = (unsigned long)&llc_main_station; - llc_main_station.ack_timer.function = llc_station_ack_tmr_cb; - - if (llc_proc_init()) - goto err; - skb = alloc_skb(0, GFP_ATOMIC); - if (!skb) - goto err_skb; - llc_build_offset_table(); - ev = llc_station_ev(skb); - memset(ev, 0, sizeof(*ev)); - if (dev_base->next) - memcpy(llc_main_station.mac_sa, - dev_base->next->dev_addr, ETH_ALEN); - else - memset(llc_main_station.mac_sa, 0, ETH_ALEN); - llc_main_station.ack_timer.expires = jiffies + 3 * HZ; - llc_main_station.maximum_retry = 1; - llc_main_station.state = LLC_STATION_STATE_DOWN; - ev->type = LLC_STATION_EV_TYPE_SIMPLE; - ev->prim_type = LLC_STATION_EV_ENABLE_WITHOUT_DUP_ADDR_CHECK; - rc = llc_station_next_state(&llc_main_station, skb); - llc_ui_init(); - dev_add_pack(&llc_packet_type); - dev_add_pack(&llc_tr_packet_type); -out: - return rc; -err_skb: - llc_proc_exit(); -err: - printk(llc_error_msg); - rc = 1; - goto out; -} - -static void __exit llc_exit(void) -{ - llc_ui_exit(); - llc_proc_exit(); - dev_remove_pack(&llc_packet_type); - dev_remove_pack(&llc_tr_packet_type); -} - -module_init(llc_init); -module_exit(llc_exit); - -MODULE_LICENSE("GPL"); -MODULE_AUTHOR("Procom, 1997, Arnaldo C. Melo, Jay Schullist, 2001-2003"); -MODULE_DESCRIPTION("LLC 2.0, IEEE 802.2 extended support"); -MODULE_ALIAS_NETPROTO(PF_LLC); diff -prauN linux-2.6.0-test5/net/llc/llc_output.c wli-2.6.0-test5-bk12-25/net/llc/llc_output.c --- linux-2.6.0-test5/net/llc/llc_output.c 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/net/llc/llc_output.c 2003-09-25 19:16:17.000000000 -0700 @@ -0,0 +1,105 @@ +/* + * llc_output.c - LLC minimal output path + * + * Copyright (c) 1997 by Procom Technology, Inc. + * 2001-2003 by Arnaldo Carvalho de Melo + * + * This program can be redistributed or modified under the terms of the + * GNU General Public License version 2 as published by the Free Software + * Foundation. + * This program is distributed without any warranty or implied warranty + * of merchantability or fitness for a particular purpose. + * + * See the GNU General Public License version 2 for more details. + */ + +#include +#include +#include +#include +#include +#include + +/** + * llc_mac_hdr_init - fills MAC header fields + * @skb: Address of the frame to initialize its MAC header + * @sa: The MAC source address + * @da: The MAC destination address + * + * Fills MAC header fields, depending on MAC type. Returns 0, If MAC type + * is a valid type and initialization completes correctly 1, otherwise. + */ +int llc_mac_hdr_init(struct sk_buff *skb, unsigned char *sa, unsigned char *da) +{ + int rc = 0; + + switch (skb->dev->type) { +#ifdef CONFIG_TR + case ARPHRD_IEEE802_TR: { + struct net_device *dev = skb->dev; + struct trh_hdr *trh; + + trh = (struct trh_hdr *)skb_push(skb, sizeof(*trh)); + trh->ac = AC; + trh->fc = LLC_FRAME; + if (sa) + memcpy(trh->saddr, sa, dev->addr_len); + else + memset(trh->saddr, 0, dev->addr_len); + if (da) { + memcpy(trh->daddr, da, dev->addr_len); + tr_source_route(skb, trh, dev); + } + skb->mac.raw = skb->data; + break; + } +#endif + case ARPHRD_ETHER: + case ARPHRD_LOOPBACK: { + unsigned short len = skb->len; + struct ethhdr *eth; + + skb->mac.raw = skb_push(skb, sizeof(*eth)); + eth = (struct ethhdr *)skb->mac.raw; + eth->h_proto = htons(len); + memcpy(eth->h_dest, da, ETH_ALEN); + memcpy(eth->h_source, sa, ETH_ALEN); + break; + } + default: + printk(KERN_WARNING "device type not supported: %d\n", + skb->dev->type); + rc = -EINVAL; + } + return rc; +} + +/** + * llc_build_and_send_ui_pkt - unitdata request interface for upper layers + * @sap: sap to use + * @skb: packet to send + * @dmac: destination mac address + * @dsap: destination sap + * + * Upper layers calls this function when upper layer wants to send data + * using connection-less mode communication (UI pdu). + * + * Accept data frame from network layer to be sent using connection- + * less mode communication; timeout/retries handled by network layer; + * package primitive as an event and send to SAP event handler + */ +int llc_build_and_send_ui_pkt(struct llc_sap *sap, struct sk_buff *skb, + unsigned char *dmac, unsigned char dsap) +{ + int rc; + llc_pdu_header_init(skb, LLC_PDU_TYPE_U, sap->laddr.lsap, + dsap, LLC_PDU_CMD); + llc_pdu_init_as_ui_cmd(skb); + rc = llc_mac_hdr_init(skb, skb->dev->dev_addr, dmac); + if (!rc) + rc = dev_queue_xmit(skb); + return rc; +} + +EXPORT_SYMBOL(llc_mac_hdr_init); +EXPORT_SYMBOL(llc_build_and_send_ui_pkt); diff -prauN linux-2.6.0-test5/net/llc/llc_output.h wli-2.6.0-test5-bk12-25/net/llc/llc_output.h --- linux-2.6.0-test5/net/llc/llc_output.h 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/net/llc/llc_output.h 2003-09-25 19:16:17.000000000 -0700 @@ -0,0 +1,20 @@ +#ifndef LLC_OUTPUT_H +#define LLC_OUTPUT_H +/* + * Copyright (c) 1997 by Procom Technology, Inc. + * 2001-2003 by Arnaldo Carvalho de Melo + * + * This program can be redistributed or modified under the terms of the + * GNU General Public License version 2 as published by the Free Software + * Foundation. + * This program is distributed without any warranty or implied warranty + * of merchantability or fitness for a particular purpose. + * + * See the GNU General Public License version 2 for more details. + */ + +struct sk_buff; + +int llc_mac_hdr_init(struct sk_buff *skb, unsigned char *sa, unsigned char *da); + +#endif /* LLC_OUTPUT_H */ diff -prauN linux-2.6.0-test5/net/llc/llc_pdu.c wli-2.6.0-test5-bk12-25/net/llc/llc_pdu.c --- linux-2.6.0-test5/net/llc/llc_pdu.c 2003-09-08 12:49:55.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/llc/llc_pdu.c 2003-09-25 19:16:17.000000000 -0700 @@ -11,35 +11,13 @@ * * See the GNU General Public License for more details. */ + #include -#include #include -#include -#include static void llc_pdu_decode_pdu_type(struct sk_buff *skb, u8 *type); -static __inline__ int llc_get_hdr_len(u8 pdu_type); static u8 llc_pdu_get_pf_bit(struct llc_pdu_sn *pdu); -/** - * llc_pdu_header_init - initializes pdu header - * @skb: input skb that header must be set into it. - * @type: type of PDU (U, I or S). - * @ssap: source sap. - * @dsap: destination sap. - * @cr: command/response bit (0 or 1). - * - * This function sets DSAP, SSAP and command/Response bit in LLC header. - */ -void llc_pdu_header_init(struct sk_buff *skb, u8 type, u8 ssap, u8 dsap, u8 cr) -{ - struct llc_pdu_un *pdu = - llc_set_pdu_hdr(skb, skb_push(skb, llc_get_hdr_len(type))); - pdu->dsap = dsap; - pdu->ssap = ssap; - pdu->ssap |= cr; -} - void llc_pdu_set_cmd_rsp(struct sk_buff *skb, u8 pdu_type) { llc_pdu_un_hdr(skb)->ssap |= pdu_type; @@ -115,114 +93,6 @@ void llc_pdu_decode_cr_bit(struct sk_buf } /** - * llc_pdu_decode_sa - extracs source address (MAC) of input frame - * @skb: input skb that source address must be extracted from it. - * @sa: pointer to source address (6 byte array). - * - * This function extracts source address(MAC) of input frame. - */ -void llc_pdu_decode_sa(struct sk_buff *skb, u8 *sa) -{ - if (skb->protocol == ntohs(ETH_P_802_2)) - memcpy(sa, ((struct ethhdr *)skb->mac.raw)->h_source, ETH_ALEN); - else if (skb->protocol == ntohs(ETH_P_TR_802_2)) - memcpy(sa, ((struct trh_hdr *)skb->mac.raw)->saddr, ETH_ALEN); -} - -/** - * llc_pdu_decode_da - extracts dest address of input frame - * @skb: input skb that destination address must be extracted from it - * @sa: pointer to destination address (6 byte array). - * - * This function extracts destination address(MAC) of input frame. - */ -void llc_pdu_decode_da(struct sk_buff *skb, u8 *da) -{ - if (skb->protocol == ntohs(ETH_P_802_2)) - memcpy(da, ((struct ethhdr *)skb->mac.raw)->h_dest, ETH_ALEN); - else if (skb->protocol == ntohs(ETH_P_TR_802_2)) - memcpy(da, ((struct trh_hdr *)skb->mac.raw)->daddr, ETH_ALEN); -} - -/** - * llc_pdu_decode_dsap - extracts dest SAP of input frame - * @skb: input skb that destination SAP must be extracted from it. - * @dsap: destination SAP (output argument). - * - * This function extracts destination SAP of input frame. right bit of - * DSAP designates individual/group SAP. - */ -void llc_pdu_decode_dsap(struct sk_buff *skb, u8 *dsap) -{ - *dsap = llc_pdu_un_hdr(skb)->dsap & 0xFE; -} - -/** - * llc_pdu_decode_ssap - extracts source SAP of input frame - * @skb: input skb that source SAP must be extracted from it. - * @ssap: source SAP (output argument). - * - * This function extracts source SAP of input frame. Right bit of SSAP is - * command/response bit. - */ -void llc_pdu_decode_ssap(struct sk_buff *skb, u8 *ssap) -{ - *ssap = llc_pdu_un_hdr(skb)->ssap & 0xFE; -} - -/** - * llc_pdu_init_as_ui_cmd - sets LLC header as UI PDU - * @skb: input skb that header must be set into it. - * - * This function sets third byte of LLC header as a UI PDU. - */ -void llc_pdu_init_as_ui_cmd(struct sk_buff *skb) -{ - struct llc_pdu_un *pdu = llc_pdu_un_hdr(skb); - - pdu->ctrl_1 = LLC_PDU_TYPE_U; - pdu->ctrl_1 |= LLC_1_PDU_CMD_UI; -} - -/** - * llc_pdu_init_as_xid_cmd - sets bytes 3, 4 & 5 of LLC header as XID - * @skb: input skb that header must be set into it. - * - * This function sets third,fourth,fifth and sixth bytes of LLC header as - * a XID PDU. - */ -void llc_pdu_init_as_xid_cmd(struct sk_buff *skb, u8 svcs_supported, - u8 rx_window) -{ - struct llc_xid_info *xid_info; - struct llc_pdu_un *pdu = llc_pdu_un_hdr(skb); - - pdu->ctrl_1 = LLC_PDU_TYPE_U; - pdu->ctrl_1 |= LLC_1_PDU_CMD_XID; - pdu->ctrl_1 |= LLC_U_PF_BIT_MASK; - xid_info = (struct llc_xid_info *)(((u8 *)&pdu->ctrl_1) + 1); - xid_info->fmt_id = LLC_XID_FMT_ID; /* 0x81 */ - xid_info->type = svcs_supported; - xid_info->rw = rx_window << 1; /* size of receive window */ - skb_put(skb, 3); -} - -/** - * llc_pdu_init_as_test_cmd - sets PDU as TEST - * @skb - Address of the skb to build - * - * Sets a PDU as TEST - */ -void llc_pdu_init_as_test_cmd(struct sk_buff *skb) -{ - struct llc_pdu_un *pdu = llc_pdu_un_hdr(skb); - - pdu->ctrl_1 = LLC_PDU_TYPE_U; - pdu->ctrl_1 |= LLC_1_PDU_CMD_TEST; - pdu->ctrl_1 |= LLC_U_PF_BIT_MASK; -} - -/** * llc_pdu_init_as_disc_cmd - Builds DISC PDU * @skb: Address of the skb to build * @p_bit: The P bit to set in the PDU @@ -350,55 +220,6 @@ void llc_pdu_init_as_dm_rsp(struct sk_bu } /** - * llc_pdu_init_as_xid_rsp - builds XID response PDU - * @skb: Address of the skb to build - * @svcs_supported: The class of the LLC (I or II) - * @rx_window: The size of the receive window of the LLC - * - * Builds a pdu frame as an XID response. - */ -void llc_pdu_init_as_xid_rsp(struct sk_buff *skb, u8 svcs_supported, - u8 rx_window) -{ - struct llc_xid_info *xid_info; - struct llc_pdu_un *pdu = llc_pdu_un_hdr(skb); - - pdu->ctrl_1 = LLC_PDU_TYPE_U; - pdu->ctrl_1 |= LLC_1_PDU_CMD_XID; - pdu->ctrl_1 |= LLC_U_PF_BIT_MASK; - - xid_info = (struct llc_xid_info *)(((u8 *)&pdu->ctrl_1) + 1); - xid_info->fmt_id = LLC_XID_FMT_ID; - xid_info->type = svcs_supported; - xid_info->rw = rx_window << 1; - skb_put(skb, 3); -} - -/** - * llc_pdu_init_as_test_rsp - build TEST response PDU - * @skb: Address of the skb to build - * @ev_skb: The received TEST command PDU frame - * - * Builds a pdu frame as a TEST response. - */ -void llc_pdu_init_as_test_rsp(struct sk_buff *skb, struct sk_buff *ev_skb) -{ - int dsize; - struct llc_pdu_un *pdu = llc_pdu_un_hdr(skb); - - pdu->ctrl_1 = LLC_PDU_TYPE_U; - pdu->ctrl_1 |= LLC_1_PDU_CMD_TEST; - pdu->ctrl_1 |= LLC_U_PF_BIT_MASK; - if (ev_skb->protocol == ntohs(ETH_P_802_2)) { - struct llc_pdu_un *ev_pdu = llc_pdu_un_hdr(ev_skb); - - dsize = ntohs(((struct ethhdr *)ev_skb->mac.raw)->h_proto) - 3; - memcpy(((u8 *)pdu) + 3, ((u8 *)ev_pdu) + 3, dsize); - skb_put(skb, dsize); - } -} - -/** * llc_pdu_init_as_frmr_rsp - builds FRMR response PDU * @skb: Address of the frame to build * @prev_pdu: The rejected PDU frame @@ -533,58 +354,6 @@ static void llc_pdu_decode_pdu_type(stru } /** - * llc_decode_pdu_type - designates component LLC must handle for PDU - * @skb: input skb - * @dest: destination component - * - * This function designates which component of LLC must handle this PDU. - */ -void llc_decode_pdu_type(struct sk_buff *skb, u8 *dest) -{ - u8 type = LLC_DEST_CONN; /* I-PDU or S-PDU type */ - struct llc_pdu_sn *pdu = llc_pdu_sn_hdr(skb); - - if ((pdu->ctrl_1 & LLC_PDU_TYPE_MASK) != LLC_PDU_TYPE_U) - goto out; - switch (LLC_U_PDU_CMD(pdu)) { - case LLC_1_PDU_CMD_XID: - case LLC_1_PDU_CMD_UI: - case LLC_1_PDU_CMD_TEST: - type = LLC_DEST_SAP; - break; - case LLC_2_PDU_CMD_SABME: - case LLC_2_PDU_CMD_DISC: - case LLC_2_PDU_RSP_UA: - case LLC_2_PDU_RSP_DM: - case LLC_2_PDU_RSP_FRMR: - break; - default: - type = LLC_DEST_INVALID; - break; - } -out: - *dest = type; -} - -/** - * llc_get_hdr_len - designates LLC header length - * @type: type of PDU. - * - * This function designates LLC header length of PDU. header length for I - * and S PDU is 4 and for U is 3 bytes. Returns the length of header. - */ -static __inline__ int llc_get_hdr_len(u8 type) -{ - static int hdr_len[] = { - [LLC_PDU_TYPE_U] = 3, - [LLC_PDU_TYPE_I] = 4, - [LLC_PDU_TYPE_S] = 4, - }; - - return hdr_len[type]; -} - -/** * llc_pdu_get_pf_bit - extracts p/f bit of input PDU * @pdu: pointer to LLC header. * diff -prauN linux-2.6.0-test5/net/llc/llc_proc.c wli-2.6.0-test5-bk12-25/net/llc/llc_proc.c --- linux-2.6.0-test5/net/llc/llc_proc.c 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/llc/llc_proc.c 2003-09-25 19:16:17.000000000 -0700 @@ -20,13 +20,11 @@ #include #include #include +#include #include #include #include #include -#include -#include -#include static void llc_ui_format_mac(struct seq_file *seq, unsigned char *mac) { @@ -41,7 +39,7 @@ static struct sock *llc_get_sk_idx(loff_ struct hlist_node *node; struct sock *sk = NULL; - list_for_each(sap_entry, &llc_main_station.sap_list.list) { + list_for_each(sap_entry, &llc_sap_list) { sap = list_entry(sap_entry, struct llc_sap, node); read_lock_bh(&sap->sk_list.lock); @@ -66,8 +64,8 @@ static void *llc_seq_start(struct seq_fi { loff_t l = *pos; - read_lock_bh(&llc_main_station.sap_list.lock); - return l ? llc_get_sk_idx(--l) : (void *)1; + read_lock_bh(&llc_sap_list_lock); + return l ? llc_get_sk_idx(--l) : SEQ_START_TOKEN; } static void *llc_seq_next(struct seq_file *seq, void *v, loff_t *pos) @@ -77,7 +75,7 @@ static void *llc_seq_next(struct seq_fil struct llc_sap *sap; ++*pos; - if (v == (void *)1) { + if (v == SEQ_START_TOKEN) { sk = llc_get_sk_idx(0); goto out; } @@ -92,7 +90,7 @@ static void *llc_seq_next(struct seq_fil read_unlock_bh(&sap->sk_list.lock); sk = NULL; for (;;) { - if (sap->node.next == &llc_main_station.sap_list.list) + if (sap->node.next == &llc_sap_list) break; sap = list_entry(sap->node.next, struct llc_sap, node); read_lock_bh(&sap->sk_list.lock); @@ -115,7 +113,7 @@ static void llc_seq_stop(struct seq_file read_unlock_bh(&sap->sk_list.lock); } - read_unlock_bh(&llc_main_station.sap_list.lock); + read_unlock_bh(&llc_sap_list_lock); } static int llc_seq_socket_show(struct seq_file *seq, void *v) @@ -123,7 +121,7 @@ static int llc_seq_socket_show(struct se struct sock* sk; struct llc_opt *llc; - if (v == (void *)1) { + if (v == SEQ_START_TOKEN) { seq_puts(seq, "SKt Mc local_mac_sap remote_mac_sap " " tx_queue rx_queue st uid link\n"); goto out; @@ -172,7 +170,7 @@ static int llc_seq_core_show(struct seq_ struct sock* sk; struct llc_opt *llc; - if (v == (void *)1) { + if (v == SEQ_START_TOKEN) { seq_puts(seq, "Connection list:\n" "dsap state retr txw rxw pf ff sf df rs cs " "tack tpfc trs tbs blog busr\n"); diff -prauN linux-2.6.0-test5/net/llc/llc_s_ac.c wli-2.6.0-test5-bk12-25/net/llc/llc_s_ac.c --- linux-2.6.0-test5/net/llc/llc_s_ac.c 2003-09-08 12:50:23.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/llc/llc_s_ac.c 2003-09-25 19:16:17.000000000 -0700 @@ -17,13 +17,14 @@ * * See the GNU General Public License for more details. */ + #include -#include -#include -#include -#include +#include #include -#include +#include +#include +#include +#include "llc_output.h" /** * llc_sap_action_unit_data_ind - forward UI PDU to network layer @@ -56,7 +57,7 @@ int llc_sap_action_send_ui(struct llc_sa llc_pdu_header_init(skb, LLC_PDU_TYPE_U, ev->saddr.lsap, ev->daddr.lsap, LLC_PDU_CMD); llc_pdu_init_as_ui_cmd(skb); - rc = lan_hdrs_init(skb, ev->saddr.mac, ev->daddr.mac); + rc = llc_mac_hdr_init(skb, ev->saddr.mac, ev->daddr.mac); if (!rc) rc = dev_queue_xmit(skb); return rc; @@ -79,7 +80,7 @@ int llc_sap_action_send_xid_c(struct llc llc_pdu_header_init(skb, LLC_PDU_TYPE_U, ev->saddr.lsap, ev->daddr.lsap, LLC_PDU_CMD); llc_pdu_init_as_xid_cmd(skb, LLC_XID_NULL_CLASS_2, 0); - rc = lan_hdrs_init(skb, ev->saddr.mac, ev->daddr.mac); + rc = llc_mac_hdr_init(skb, ev->saddr.mac, ev->daddr.mac); if (!rc) rc = dev_queue_xmit(skb); return rc; @@ -109,7 +110,7 @@ int llc_sap_action_send_xid_r(struct llc llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, dsap, LLC_PDU_RSP); llc_pdu_init_as_xid_rsp(nskb, LLC_XID_NULL_CLASS_2, 0); - rc = lan_hdrs_init(nskb, mac_sa, mac_da); + rc = llc_mac_hdr_init(nskb, mac_sa, mac_da); if (!rc) rc = dev_queue_xmit(nskb); out: @@ -133,7 +134,7 @@ int llc_sap_action_send_test_c(struct ll llc_pdu_header_init(skb, LLC_PDU_TYPE_U, ev->saddr.lsap, ev->daddr.lsap, LLC_PDU_CMD); llc_pdu_init_as_test_cmd(skb); - rc = lan_hdrs_init(skb, ev->saddr.mac, ev->daddr.mac); + rc = llc_mac_hdr_init(skb, ev->saddr.mac, ev->daddr.mac); if (!rc) rc = dev_queue_xmit(skb); return rc; @@ -155,7 +156,7 @@ int llc_sap_action_send_test_r(struct ll llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, dsap, LLC_PDU_RSP); llc_pdu_init_as_test_rsp(nskb, skb); - rc = lan_hdrs_init(nskb, mac_sa, mac_da); + rc = llc_mac_hdr_init(nskb, mac_sa, mac_da); if (!rc) rc = dev_queue_xmit(nskb); out: diff -prauN linux-2.6.0-test5/net/llc/llc_sap.c wli-2.6.0-test5-bk12-25/net/llc/llc_sap.c --- linux-2.6.0-test5/net/llc/llc_sap.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/llc/llc_sap.c 2003-09-25 19:16:17.000000000 -0700 @@ -11,46 +11,53 @@ * * See the GNU General Public License for more details. */ -#include + +#include +#include #include +#include #include -#include #include +#include #include #include #include -#include -#include -#include +#include /** - * llc_sap_assign_sock - adds a connection to a SAP - * @sap: pointer to SAP. - * @conn: pointer to connection. + * llc_alloc_frame - allocates sk_buff for frame * - * This function adds a connection to connection_list of a SAP. + * Allocates an sk_buff for frame and initializes sk_buff fields. + * Returns allocated skb or %NULL when out of memory. */ -void llc_sap_assign_sock(struct llc_sap *sap, struct sock *sk) +struct sk_buff *llc_alloc_frame(void) { - write_lock_bh(&sap->sk_list.lock); - llc_sk(sk)->sap = sap; - sk_add_node(sk, &sap->sk_list.list); - write_unlock_bh(&sap->sk_list.lock); + struct sk_buff *skb = alloc_skb(128, GFP_ATOMIC); + + if (skb) { + skb_reserve(skb, 50); + skb->nh.raw = skb->h.raw = skb->data; + skb->protocol = htons(ETH_P_802_2); + skb->dev = dev_base->next; + skb->mac.raw = skb->head; + } + return skb; } -/** - * llc_sap_unassign_sock - removes a connection from SAP - * @sap: SAP - * @sk: pointer to connection - * - * This function removes a connection from sk_list.list of a SAP if - * the connection was in this list. - */ -void llc_sap_unassign_sock(struct llc_sap *sap, struct sock *sk) +void llc_save_primitive(struct sk_buff* skb, u8 prim) { - write_lock_bh(&sap->sk_list.lock); - sk_del_node_init(sk); - write_unlock_bh(&sap->sk_list.lock); + struct sockaddr_llc *addr = llc_ui_skb_cb(skb); + + /* save primitive for use by the user. */ + addr->sllc_family = skb->sk->sk_family; + addr->sllc_arphrd = skb->dev->type; + addr->sllc_test = prim == LLC_TEST_PRIM; + addr->sllc_xid = prim == LLC_XID_PRIM; + addr->sllc_ua = prim == LLC_DATAUNIT_PRIM; + llc_pdu_decode_sa(skb, addr->sllc_smac); + llc_pdu_decode_da(skb, addr->sllc_dmac); + llc_pdu_decode_dsap(skb, &addr->sllc_dsap); + llc_pdu_decode_ssap(skb, &addr->sllc_ssap); } /** @@ -193,3 +200,118 @@ void llc_sap_state_process(struct llc_sa } kfree_skb(skb); } + +/** + * llc_build_and_send_test_pkt - TEST interface for upper layers. + * @sap: sap to use + * @skb: packet to send + * @dmac: destination mac address + * @dsap: destination sap + * + * This function is called when upper layer wants to send a TEST pdu. + * Returns 0 for success, 1 otherwise. + */ +void llc_build_and_send_test_pkt(struct llc_sap *sap, + struct sk_buff *skb, u8 *dmac, u8 dsap) +{ + struct llc_sap_state_ev *ev = llc_sap_ev(skb); + + ev->saddr.lsap = sap->laddr.lsap; + ev->daddr.lsap = dsap; + memcpy(ev->saddr.mac, skb->dev->dev_addr, IFHWADDRLEN); + memcpy(ev->daddr.mac, dmac, IFHWADDRLEN); + + ev->type = LLC_SAP_EV_TYPE_PRIM; + ev->prim = LLC_TEST_PRIM; + ev->prim_type = LLC_PRIM_TYPE_REQ; + llc_sap_state_process(sap, skb); +} + +/** + * llc_build_and_send_xid_pkt - XID interface for upper layers + * @sap: sap to use + * @skb: packet to send + * @dmac: destination mac address + * @dsap: destination sap + * + * This function is called when upper layer wants to send a XID pdu. + * Returns 0 for success, 1 otherwise. + */ +void llc_build_and_send_xid_pkt(struct llc_sap *sap, struct sk_buff *skb, + u8 *dmac, u8 dsap) +{ + struct llc_sap_state_ev *ev = llc_sap_ev(skb); + + ev->saddr.lsap = sap->laddr.lsap; + ev->daddr.lsap = dsap; + memcpy(ev->saddr.mac, skb->dev->dev_addr, IFHWADDRLEN); + memcpy(ev->daddr.mac, dmac, IFHWADDRLEN); + + ev->type = LLC_SAP_EV_TYPE_PRIM; + ev->prim = LLC_XID_PRIM; + ev->prim_type = LLC_PRIM_TYPE_REQ; + llc_sap_state_process(sap, skb); +} + +/** + * llc_sap_rcv - sends received pdus to the sap state machine + * @sap: current sap component structure. + * @skb: received frame. + * + * Sends received pdus to the sap state machine. + */ +static void llc_sap_rcv(struct llc_sap *sap, struct sk_buff *skb) +{ + struct llc_sap_state_ev *ev = llc_sap_ev(skb); + + ev->type = LLC_SAP_EV_TYPE_PDU; + ev->reason = 0; + llc_sap_state_process(sap, skb); +} + +/** + * llc_lookup_dgram - Finds dgram socket for the local sap/mac + * @sap: SAP + * @laddr: address of local LLC (MAC + SAP) + * + * Search socket list of the SAP and finds connection using the local + * mac, and local sap. Returns pointer for socket found, %NULL otherwise. + */ +struct sock *llc_lookup_dgram(struct llc_sap *sap, struct llc_addr *laddr) +{ + struct sock *rc; + struct hlist_node *node; + + read_lock_bh(&sap->sk_list.lock); + sk_for_each(rc, node, &sap->sk_list.list) { + struct llc_opt *llc = llc_sk(rc); + + if (rc->sk_type == SOCK_DGRAM && + llc->laddr.lsap == laddr->lsap && + llc_mac_match(llc->laddr.mac, laddr->mac)) { + sock_hold(rc); + goto found; + } + } + rc = NULL; +found: + read_unlock_bh(&sap->sk_list.lock); + return rc; +} + +void llc_sap_handler(struct llc_sap *sap, struct sk_buff *skb) +{ + struct llc_addr laddr; + struct sock *sk; + + llc_pdu_decode_da(skb, laddr.mac); + llc_pdu_decode_dsap(skb, &laddr.lsap); + + sk = llc_lookup_dgram(sap, &laddr); + if (sk) { + skb->sk = sk; + llc_sap_rcv(sap, skb); + sock_put(sk); + } else + kfree_skb(skb); +} diff -prauN linux-2.6.0-test5/net/llc/llc_stat.c wli-2.6.0-test5-bk12-25/net/llc/llc_stat.c --- linux-2.6.0-test5/net/llc/llc_stat.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/llc/llc_stat.c 1969-12-31 16:00:00.000000000 -0800 @@ -1,218 +0,0 @@ -/* - * llc_stat.c - Implementation of LLC station component state machine - * transitions - * Copyright (c) 1997 by Procom Technology, Inc. - * 2001-2003 by Arnaldo Carvalho de Melo - * - * This program can be redistributed or modified under the terms of the - * GNU General Public License as published by the Free Software Foundation. - * This program is distributed without any warranty or implied warranty - * of merchantability or fitness for a particular purpose. - * - * See the GNU General Public License for more details. - */ -#include -#include -#include -#include -#include -#include - -/* COMMON STATION STATE transitions */ - -/* dummy last-transition indicator; common to all state transition groups - * last entry for this state - * all members are zeros, .bss zeroes it - */ -static struct llc_station_state_trans llc_stat_state_trans_end; - -/* DOWN STATE transitions */ - -/* state transition for LLC_STATION_EV_ENABLE_WITH_DUP_ADDR_CHECK event */ -static llc_station_action_t llc_stat_down_state_actions_1[] = { - [0] = llc_station_ac_start_ack_timer, - [1] = llc_station_ac_set_retry_cnt_0, - [2] = llc_station_ac_set_xid_r_cnt_0, - [3] = llc_station_ac_send_null_dsap_xid_c, - [4] = NULL, -}; - -static struct llc_station_state_trans llc_stat_down_state_trans_1 = { - .ev = llc_stat_ev_enable_with_dup_addr_check, - .next_state = LLC_STATION_STATE_DUP_ADDR_CHK, - .ev_actions = llc_stat_down_state_actions_1, -}; - -/* state transition for LLC_STATION_EV_ENABLE_WITHOUT_DUP_ADDR_CHECK event */ -static llc_station_action_t llc_stat_down_state_actions_2[] = { - [0] = llc_station_ac_report_status, /* STATION UP */ - [1] = NULL, -}; - -static struct llc_station_state_trans llc_stat_down_state_trans_2 = { - .ev = llc_stat_ev_enable_without_dup_addr_check, - .next_state = LLC_STATION_STATE_UP, - .ev_actions = llc_stat_down_state_actions_2, -}; - -/* array of pointers; one to each transition */ -static struct llc_station_state_trans *llc_stat_dwn_state_trans[] = { - [0] = &llc_stat_down_state_trans_1, - [1] = &llc_stat_down_state_trans_2, - [2] = &llc_stat_state_trans_end, -}; - -/* UP STATE transitions */ -/* state transition for LLC_STATION_EV_DISABLE_REQ event */ -static llc_station_action_t llc_stat_up_state_actions_1[] = { - [0] = llc_station_ac_report_status, /* STATION DOWN */ - [1] = NULL, -}; - -static struct llc_station_state_trans llc_stat_up_state_trans_1 = { - .ev = llc_stat_ev_disable_req, - .next_state = LLC_STATION_STATE_DOWN, - .ev_actions = llc_stat_up_state_actions_1, -}; - -/* state transition for LLC_STATION_EV_RX_NULL_DSAP_XID_C event */ -static llc_station_action_t llc_stat_up_state_actions_2[] = { - [0] = llc_station_ac_send_xid_r, - [1] = NULL, -}; - -static struct llc_station_state_trans llc_stat_up_state_trans_2 = { - .ev = llc_stat_ev_rx_null_dsap_xid_c, - .next_state = LLC_STATION_STATE_UP, - .ev_actions = llc_stat_up_state_actions_2, -}; - -/* state transition for LLC_STATION_EV_RX_NULL_DSAP_TEST_C event */ -static llc_station_action_t llc_stat_up_state_actions_3[] = { - [0] = llc_station_ac_send_test_r, - [1] = NULL, -}; - -static struct llc_station_state_trans llc_stat_up_state_trans_3 = { - .ev = llc_stat_ev_rx_null_dsap_test_c, - .next_state = LLC_STATION_STATE_UP, - .ev_actions = llc_stat_up_state_actions_3, -}; - -/* array of pointers; one to each transition */ -static struct llc_station_state_trans *llc_stat_up_state_trans [] = { - [0] = &llc_stat_up_state_trans_1, - [1] = &llc_stat_up_state_trans_2, - [2] = &llc_stat_up_state_trans_3, - [3] = &llc_stat_state_trans_end, -}; - -/* DUP ADDR CHK STATE transitions */ -/* state transition for LLC_STATION_EV_RX_NULL_DSAP_0_XID_R_XID_R_CNT_EQ - * event - */ -static llc_station_action_t llc_stat_dupaddr_state_actions_1[] = { - [0] = llc_station_ac_inc_xid_r_cnt_by_1, - [1] = NULL, -}; - -static struct llc_station_state_trans llc_stat_dupaddr_state_trans_1 = { - .ev = llc_stat_ev_rx_null_dsap_0_xid_r_xid_r_cnt_eq, - .next_state = LLC_STATION_STATE_DUP_ADDR_CHK, - .ev_actions = llc_stat_dupaddr_state_actions_1, -}; - -/* state transition for LLC_STATION_EV_RX_NULL_DSAP_1_XID_R_XID_R_CNT_EQ - * event - */ -static llc_station_action_t llc_stat_dupaddr_state_actions_2[] = { - [0] = llc_station_ac_report_status, /* DUPLICATE ADDRESS FOUND */ - [1] = NULL, -}; - -static struct llc_station_state_trans llc_stat_dupaddr_state_trans_2 = { - .ev = llc_stat_ev_rx_null_dsap_1_xid_r_xid_r_cnt_eq, - .next_state = LLC_STATION_STATE_DOWN, - .ev_actions = llc_stat_dupaddr_state_actions_2, -}; - -/* state transition for LLC_STATION_EV_RX_NULL_DSAP_XID_C event */ -static llc_station_action_t llc_stat_dupaddr_state_actions_3[] = { - [0] = llc_station_ac_send_xid_r, - [1] = NULL, -}; - -static struct llc_station_state_trans llc_stat_dupaddr_state_trans_3 = { - .ev = llc_stat_ev_rx_null_dsap_xid_c, - .next_state = LLC_STATION_STATE_DUP_ADDR_CHK, - .ev_actions = llc_stat_dupaddr_state_actions_3, -}; - -/* state transition for LLC_STATION_EV_ACK_TMR_EXP_LT_RETRY_CNT_MAX_RETRY - * event - */ -static llc_station_action_t llc_stat_dupaddr_state_actions_4[] = { - [0] = llc_station_ac_start_ack_timer, - [1] = llc_station_ac_inc_retry_cnt_by_1, - [2] = llc_station_ac_set_xid_r_cnt_0, - [3] = llc_station_ac_send_null_dsap_xid_c, - [4] = NULL, -}; - -static struct llc_station_state_trans llc_stat_dupaddr_state_trans_4 = { - .ev = llc_stat_ev_ack_tmr_exp_lt_retry_cnt_max_retry, - .next_state = LLC_STATION_STATE_DUP_ADDR_CHK, - .ev_actions = llc_stat_dupaddr_state_actions_4, -}; - -/* state transition for LLC_STATION_EV_ACK_TMR_EXP_EQ_RETRY_CNT_MAX_RETRY - * event - */ -static llc_station_action_t llc_stat_dupaddr_state_actions_5[] = { - [0] = llc_station_ac_report_status, /* STATION UP */ - [1] = NULL, -}; - -static struct llc_station_state_trans llc_stat_dupaddr_state_trans_5 = { - .ev = llc_stat_ev_ack_tmr_exp_eq_retry_cnt_max_retry, - .next_state = LLC_STATION_STATE_UP, - .ev_actions = llc_stat_dupaddr_state_actions_5, -}; - -/* state transition for LLC_STATION_EV_DISABLE_REQ event */ -static llc_station_action_t llc_stat_dupaddr_state_actions_6[] = { - [0] = llc_station_ac_report_status, /* STATION DOWN */ - [1] = NULL, -}; - -static struct llc_station_state_trans llc_stat_dupaddr_state_trans_6 = { - .ev = llc_stat_ev_disable_req, - .next_state = LLC_STATION_STATE_DOWN, - .ev_actions = llc_stat_dupaddr_state_actions_6, -}; - -/* array of pointers; one to each transition */ -static struct llc_station_state_trans *llc_stat_dupaddr_state_trans[] = { - [0] = &llc_stat_dupaddr_state_trans_6, /* Request */ - [1] = &llc_stat_dupaddr_state_trans_4, /* Timer */ - [2] = &llc_stat_dupaddr_state_trans_5, - [3] = &llc_stat_dupaddr_state_trans_1, /* Receive frame */ - [4] = &llc_stat_dupaddr_state_trans_2, - [5] = &llc_stat_dupaddr_state_trans_3, - [6] = &llc_stat_state_trans_end, -}; - -struct llc_station_state llc_station_state_table[LLC_NBR_STATION_STATES] = { - [LLC_STATION_STATE_DOWN - 1] = { - .curr_state = LLC_STATION_STATE_DOWN, - .transitions = llc_stat_dwn_state_trans, - }, - [LLC_STATION_STATE_DUP_ADDR_CHK - 1] = { - .curr_state = LLC_STATION_STATE_DUP_ADDR_CHK, - .transitions = llc_stat_dupaddr_state_trans, - }, - [LLC_STATION_STATE_UP - 1] = { - .curr_state = LLC_STATION_STATE_UP, - .transitions = llc_stat_up_state_trans, - }, -}; diff -prauN linux-2.6.0-test5/net/llc/llc_station.c wli-2.6.0-test5-bk12-25/net/llc/llc_station.c --- linux-2.6.0-test5/net/llc/llc_station.c 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/net/llc/llc_station.c 2003-09-25 19:16:17.000000000 -0700 @@ -0,0 +1,713 @@ +/* + * llc_station.c - station component of LLC + * + * Copyright (c) 1997 by Procom Technology, Inc. + * 2001-2003 by Arnaldo Carvalho de Melo + * + * This program can be redistributed or modified under the terms of the + * GNU General Public License as published by the Free Software Foundation. + * This program is distributed without any warranty or implied warranty + * of merchantability or fitness for a particular purpose. + * + * See the GNU General Public License for more details. + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/** + * struct llc_station - LLC station component + * + * SAP and connection resource manager, one per adapter. + * + * @state - state of station + * @xid_r_count - XID response PDU counter + * @mac_sa - MAC source address + * @sap_list - list of related SAPs + * @ev_q - events entering state mach. + * @mac_pdu_q - PDUs ready to send to MAC + */ +struct llc_station { + u8 state; + u8 xid_r_count; + struct timer_list ack_timer; + u8 retry_count; + u8 maximum_retry; + struct { + struct sk_buff_head list; + spinlock_t lock; + } ev_q; + struct sk_buff_head mac_pdu_q; +}; + +/* Types of events (possible values in 'ev->type') */ +#define LLC_STATION_EV_TYPE_SIMPLE 1 +#define LLC_STATION_EV_TYPE_CONDITION 2 +#define LLC_STATION_EV_TYPE_PRIM 3 +#define LLC_STATION_EV_TYPE_PDU 4 /* command/response PDU */ +#define LLC_STATION_EV_TYPE_ACK_TMR 5 +#define LLC_STATION_EV_TYPE_RPT_STATUS 6 + +/* Events */ +#define LLC_STATION_EV_ENABLE_WITH_DUP_ADDR_CHECK 1 +#define LLC_STATION_EV_ENABLE_WITHOUT_DUP_ADDR_CHECK 2 +#define LLC_STATION_EV_ACK_TMR_EXP_LT_RETRY_CNT_MAX_RETRY 3 +#define LLC_STATION_EV_ACK_TMR_EXP_EQ_RETRY_CNT_MAX_RETRY 4 +#define LLC_STATION_EV_RX_NULL_DSAP_XID_C 5 +#define LLC_STATION_EV_RX_NULL_DSAP_0_XID_R_XID_R_CNT_EQ 6 +#define LLC_STATION_EV_RX_NULL_DSAP_1_XID_R_XID_R_CNT_EQ 7 +#define LLC_STATION_EV_RX_NULL_DSAP_TEST_C 8 +#define LLC_STATION_EV_DISABLE_REQ 9 + +struct llc_station_state_ev { + u8 type; + u8 prim; + u8 prim_type; + u8 reason; + struct list_head node; /* node in station->ev_q.list */ +}; + +static __inline__ struct llc_station_state_ev * + llc_station_ev(struct sk_buff *skb) +{ + return (struct llc_station_state_ev *)skb->cb; +} + +typedef int (*llc_station_ev_t)(struct sk_buff *skb); + +#define LLC_STATION_STATE_DOWN 1 /* initial state */ +#define LLC_STATION_STATE_DUP_ADDR_CHK 2 +#define LLC_STATION_STATE_UP 3 + +#define LLC_NBR_STATION_STATES 3 /* size of state table */ + +typedef int (*llc_station_action_t)(struct sk_buff *skb); + +/* Station component state table structure */ +struct llc_station_state_trans { + llc_station_ev_t ev; + u8 next_state; + llc_station_action_t *ev_actions; +}; + +struct llc_station_state { + u8 curr_state; + struct llc_station_state_trans **transitions; +}; + +static struct llc_station llc_main_station; + +static int llc_stat_ev_enable_with_dup_addr_check(struct sk_buff *skb) +{ + struct llc_station_state_ev *ev = llc_station_ev(skb); + + return ev->type == LLC_STATION_EV_TYPE_SIMPLE && + ev->prim_type == + LLC_STATION_EV_ENABLE_WITH_DUP_ADDR_CHECK ? 0 : 1; +} + +static int llc_stat_ev_enable_without_dup_addr_check(struct sk_buff *skb) +{ + struct llc_station_state_ev *ev = llc_station_ev(skb); + + return ev->type == LLC_STATION_EV_TYPE_SIMPLE && + ev->prim_type == + LLC_STATION_EV_ENABLE_WITHOUT_DUP_ADDR_CHECK ? 0 : 1; +} + +static int llc_stat_ev_ack_tmr_exp_lt_retry_cnt_max_retry(struct sk_buff *skb) +{ + struct llc_station_state_ev *ev = llc_station_ev(skb); + + return ev->type == LLC_STATION_EV_TYPE_ACK_TMR && + llc_main_station.retry_count < + llc_main_station.maximum_retry ? 0 : 1; +} + +static int llc_stat_ev_ack_tmr_exp_eq_retry_cnt_max_retry(struct sk_buff *skb) +{ + struct llc_station_state_ev *ev = llc_station_ev(skb); + + return ev->type == LLC_STATION_EV_TYPE_ACK_TMR && + llc_main_station.retry_count == + llc_main_station.maximum_retry ? 0 : 1; +} + +static int llc_stat_ev_rx_null_dsap_xid_c(struct sk_buff *skb) +{ + struct llc_station_state_ev *ev = llc_station_ev(skb); + struct llc_pdu_un *pdu = llc_pdu_un_hdr(skb); + + return ev->type == LLC_STATION_EV_TYPE_PDU && + LLC_PDU_IS_CMD(pdu) && /* command PDU */ + LLC_PDU_TYPE_IS_U(pdu) && /* U type PDU */ + LLC_U_PDU_CMD(pdu) == LLC_1_PDU_CMD_XID && + !pdu->dsap ? 0 : 1; /* NULL DSAP value */ +} + +static int llc_stat_ev_rx_null_dsap_0_xid_r_xid_r_cnt_eq(struct sk_buff *skb) +{ + struct llc_station_state_ev *ev = llc_station_ev(skb); + struct llc_pdu_un *pdu = llc_pdu_un_hdr(skb); + + return ev->type == LLC_STATION_EV_TYPE_PDU && + LLC_PDU_IS_RSP(pdu) && /* response PDU */ + LLC_PDU_TYPE_IS_U(pdu) && /* U type PDU */ + LLC_U_PDU_RSP(pdu) == LLC_1_PDU_CMD_XID && + !pdu->dsap && /* NULL DSAP value */ + !llc_main_station.xid_r_count ? 0 : 1; +} + +static int llc_stat_ev_rx_null_dsap_1_xid_r_xid_r_cnt_eq(struct sk_buff *skb) +{ + struct llc_station_state_ev *ev = llc_station_ev(skb); + struct llc_pdu_un *pdu = llc_pdu_un_hdr(skb); + + return ev->type == LLC_STATION_EV_TYPE_PDU && + LLC_PDU_IS_RSP(pdu) && /* response PDU */ + LLC_PDU_TYPE_IS_U(pdu) && /* U type PDU */ + LLC_U_PDU_RSP(pdu) == LLC_1_PDU_CMD_XID && + !pdu->dsap && /* NULL DSAP value */ + llc_main_station.xid_r_count == 1 ? 0 : 1; +} + +static int llc_stat_ev_rx_null_dsap_test_c(struct sk_buff *skb) +{ + struct llc_station_state_ev *ev = llc_station_ev(skb); + struct llc_pdu_un *pdu = llc_pdu_un_hdr(skb); + + return ev->type == LLC_STATION_EV_TYPE_PDU && + LLC_PDU_IS_CMD(pdu) && /* command PDU */ + LLC_PDU_TYPE_IS_U(pdu) && /* U type PDU */ + LLC_U_PDU_CMD(pdu) == LLC_1_PDU_CMD_TEST && + !pdu->dsap ? 0 : 1; /* NULL DSAP */ +} + +static int llc_stat_ev_disable_req(struct sk_buff *skb) +{ + struct llc_station_state_ev *ev = llc_station_ev(skb); + + return ev->type == LLC_STATION_EV_TYPE_PRIM && + ev->prim == LLC_DISABLE_PRIM && + ev->prim_type == LLC_PRIM_TYPE_REQ ? 0 : 1; +} + +/** + * llc_station_send_pdu - queues PDU to send + * @skb: Address of the PDU + * + * Queues a PDU to send to the MAC layer. + */ +static void llc_station_send_pdu(struct sk_buff *skb) +{ + skb_queue_tail(&llc_main_station.mac_pdu_q, skb); + while ((skb = skb_dequeue(&llc_main_station.mac_pdu_q)) != NULL) + if (dev_queue_xmit(skb)) + break; +} + +static int llc_station_ac_start_ack_timer(struct sk_buff *skb) +{ + mod_timer(&llc_main_station.ack_timer, jiffies + LLC_ACK_TIME * HZ); + return 0; +} + +static int llc_station_ac_set_retry_cnt_0(struct sk_buff *skb) +{ + llc_main_station.retry_count = 0; + return 0; +} + +static int llc_station_ac_inc_retry_cnt_by_1(struct sk_buff *skb) +{ + llc_main_station.retry_count++; + return 0; +} + +static int llc_station_ac_set_xid_r_cnt_0(struct sk_buff *skb) +{ + llc_main_station.xid_r_count = 0; + return 0; +} + +static int llc_station_ac_inc_xid_r_cnt_by_1(struct sk_buff *skb) +{ + llc_main_station.xid_r_count++; + return 0; +} + +static int llc_station_ac_send_null_dsap_xid_c(struct sk_buff *skb) +{ + int rc = 1; + struct sk_buff *nskb = llc_alloc_frame(); + + if (!nskb) + goto out; + llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, 0, 0, LLC_PDU_CMD); + llc_pdu_init_as_xid_cmd(nskb, LLC_XID_NULL_CLASS_2, 127); + rc = llc_mac_hdr_init(nskb, llc_station_mac_sa, llc_station_mac_sa); + if (rc) + goto free; + llc_station_send_pdu(nskb); +out: + return rc; +free: + kfree_skb(skb); + goto out; +} + +static int llc_station_ac_send_xid_r(struct sk_buff *skb) +{ + u8 mac_da[ETH_ALEN], dsap; + int rc = 1; + struct sk_buff* nskb = llc_alloc_frame(); + + if (!nskb) + goto out; + rc = 0; + nskb->dev = skb->dev; + llc_pdu_decode_sa(skb, mac_da); + llc_pdu_decode_ssap(skb, &dsap); + llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, 0, dsap, LLC_PDU_RSP); + llc_pdu_init_as_xid_rsp(nskb, LLC_XID_NULL_CLASS_2, 127); + rc = llc_mac_hdr_init(nskb, llc_station_mac_sa, mac_da); + if (rc) + goto free; + llc_station_send_pdu(nskb); +out: + return rc; +free: + kfree_skb(skb); + goto out; +} + +static int llc_station_ac_send_test_r(struct sk_buff *skb) +{ + u8 mac_da[ETH_ALEN], dsap; + int rc = 1; + struct sk_buff *nskb = llc_alloc_frame(); + + if (!nskb) + goto out; + rc = 0; + nskb->dev = skb->dev; + llc_pdu_decode_sa(skb, mac_da); + llc_pdu_decode_ssap(skb, &dsap); + llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, 0, dsap, LLC_PDU_RSP); + llc_pdu_init_as_test_rsp(nskb, skb); + rc = llc_mac_hdr_init(nskb, llc_station_mac_sa, mac_da); + if (rc) + goto free; + llc_station_send_pdu(nskb); +out: + return rc; +free: + kfree_skb(skb); + goto out; +} + +static int llc_station_ac_report_status(struct sk_buff *skb) +{ + return 0; +} + +/* COMMON STATION STATE transitions */ + +/* dummy last-transition indicator; common to all state transition groups + * last entry for this state + * all members are zeros, .bss zeroes it + */ +static struct llc_station_state_trans llc_stat_state_trans_end; + +/* DOWN STATE transitions */ + +/* state transition for LLC_STATION_EV_ENABLE_WITH_DUP_ADDR_CHECK event */ +static llc_station_action_t llc_stat_down_state_actions_1[] = { + [0] = llc_station_ac_start_ack_timer, + [1] = llc_station_ac_set_retry_cnt_0, + [2] = llc_station_ac_set_xid_r_cnt_0, + [3] = llc_station_ac_send_null_dsap_xid_c, + [4] = NULL, +}; + +static struct llc_station_state_trans llc_stat_down_state_trans_1 = { + .ev = llc_stat_ev_enable_with_dup_addr_check, + .next_state = LLC_STATION_STATE_DUP_ADDR_CHK, + .ev_actions = llc_stat_down_state_actions_1, +}; + +/* state transition for LLC_STATION_EV_ENABLE_WITHOUT_DUP_ADDR_CHECK event */ +static llc_station_action_t llc_stat_down_state_actions_2[] = { + [0] = llc_station_ac_report_status, /* STATION UP */ + [1] = NULL, +}; + +static struct llc_station_state_trans llc_stat_down_state_trans_2 = { + .ev = llc_stat_ev_enable_without_dup_addr_check, + .next_state = LLC_STATION_STATE_UP, + .ev_actions = llc_stat_down_state_actions_2, +}; + +/* array of pointers; one to each transition */ +static struct llc_station_state_trans *llc_stat_dwn_state_trans[] = { + [0] = &llc_stat_down_state_trans_1, + [1] = &llc_stat_down_state_trans_2, + [2] = &llc_stat_state_trans_end, +}; + +/* UP STATE transitions */ +/* state transition for LLC_STATION_EV_DISABLE_REQ event */ +static llc_station_action_t llc_stat_up_state_actions_1[] = { + [0] = llc_station_ac_report_status, /* STATION DOWN */ + [1] = NULL, +}; + +static struct llc_station_state_trans llc_stat_up_state_trans_1 = { + .ev = llc_stat_ev_disable_req, + .next_state = LLC_STATION_STATE_DOWN, + .ev_actions = llc_stat_up_state_actions_1, +}; + +/* state transition for LLC_STATION_EV_RX_NULL_DSAP_XID_C event */ +static llc_station_action_t llc_stat_up_state_actions_2[] = { + [0] = llc_station_ac_send_xid_r, + [1] = NULL, +}; + +static struct llc_station_state_trans llc_stat_up_state_trans_2 = { + .ev = llc_stat_ev_rx_null_dsap_xid_c, + .next_state = LLC_STATION_STATE_UP, + .ev_actions = llc_stat_up_state_actions_2, +}; + +/* state transition for LLC_STATION_EV_RX_NULL_DSAP_TEST_C event */ +static llc_station_action_t llc_stat_up_state_actions_3[] = { + [0] = llc_station_ac_send_test_r, + [1] = NULL, +}; + +static struct llc_station_state_trans llc_stat_up_state_trans_3 = { + .ev = llc_stat_ev_rx_null_dsap_test_c, + .next_state = LLC_STATION_STATE_UP, + .ev_actions = llc_stat_up_state_actions_3, +}; + +/* array of pointers; one to each transition */ +static struct llc_station_state_trans *llc_stat_up_state_trans [] = { + [0] = &llc_stat_up_state_trans_1, + [1] = &llc_stat_up_state_trans_2, + [2] = &llc_stat_up_state_trans_3, + [3] = &llc_stat_state_trans_end, +}; + +/* DUP ADDR CHK STATE transitions */ +/* state transition for LLC_STATION_EV_RX_NULL_DSAP_0_XID_R_XID_R_CNT_EQ + * event + */ +static llc_station_action_t llc_stat_dupaddr_state_actions_1[] = { + [0] = llc_station_ac_inc_xid_r_cnt_by_1, + [1] = NULL, +}; + +static struct llc_station_state_trans llc_stat_dupaddr_state_trans_1 = { + .ev = llc_stat_ev_rx_null_dsap_0_xid_r_xid_r_cnt_eq, + .next_state = LLC_STATION_STATE_DUP_ADDR_CHK, + .ev_actions = llc_stat_dupaddr_state_actions_1, +}; + +/* state transition for LLC_STATION_EV_RX_NULL_DSAP_1_XID_R_XID_R_CNT_EQ + * event + */ +static llc_station_action_t llc_stat_dupaddr_state_actions_2[] = { + [0] = llc_station_ac_report_status, /* DUPLICATE ADDRESS FOUND */ + [1] = NULL, +}; + +static struct llc_station_state_trans llc_stat_dupaddr_state_trans_2 = { + .ev = llc_stat_ev_rx_null_dsap_1_xid_r_xid_r_cnt_eq, + .next_state = LLC_STATION_STATE_DOWN, + .ev_actions = llc_stat_dupaddr_state_actions_2, +}; + +/* state transition for LLC_STATION_EV_RX_NULL_DSAP_XID_C event */ +static llc_station_action_t llc_stat_dupaddr_state_actions_3[] = { + [0] = llc_station_ac_send_xid_r, + [1] = NULL, +}; + +static struct llc_station_state_trans llc_stat_dupaddr_state_trans_3 = { + .ev = llc_stat_ev_rx_null_dsap_xid_c, + .next_state = LLC_STATION_STATE_DUP_ADDR_CHK, + .ev_actions = llc_stat_dupaddr_state_actions_3, +}; + +/* state transition for LLC_STATION_EV_ACK_TMR_EXP_LT_RETRY_CNT_MAX_RETRY + * event + */ +static llc_station_action_t llc_stat_dupaddr_state_actions_4[] = { + [0] = llc_station_ac_start_ack_timer, + [1] = llc_station_ac_inc_retry_cnt_by_1, + [2] = llc_station_ac_set_xid_r_cnt_0, + [3] = llc_station_ac_send_null_dsap_xid_c, + [4] = NULL, +}; + +static struct llc_station_state_trans llc_stat_dupaddr_state_trans_4 = { + .ev = llc_stat_ev_ack_tmr_exp_lt_retry_cnt_max_retry, + .next_state = LLC_STATION_STATE_DUP_ADDR_CHK, + .ev_actions = llc_stat_dupaddr_state_actions_4, +}; + +/* state transition for LLC_STATION_EV_ACK_TMR_EXP_EQ_RETRY_CNT_MAX_RETRY + * event + */ +static llc_station_action_t llc_stat_dupaddr_state_actions_5[] = { + [0] = llc_station_ac_report_status, /* STATION UP */ + [1] = NULL, +}; + +static struct llc_station_state_trans llc_stat_dupaddr_state_trans_5 = { + .ev = llc_stat_ev_ack_tmr_exp_eq_retry_cnt_max_retry, + .next_state = LLC_STATION_STATE_UP, + .ev_actions = llc_stat_dupaddr_state_actions_5, +}; + +/* state transition for LLC_STATION_EV_DISABLE_REQ event */ +static llc_station_action_t llc_stat_dupaddr_state_actions_6[] = { + [0] = llc_station_ac_report_status, /* STATION DOWN */ + [1] = NULL, +}; + +static struct llc_station_state_trans llc_stat_dupaddr_state_trans_6 = { + .ev = llc_stat_ev_disable_req, + .next_state = LLC_STATION_STATE_DOWN, + .ev_actions = llc_stat_dupaddr_state_actions_6, +}; + +/* array of pointers; one to each transition */ +static struct llc_station_state_trans *llc_stat_dupaddr_state_trans[] = { + [0] = &llc_stat_dupaddr_state_trans_6, /* Request */ + [1] = &llc_stat_dupaddr_state_trans_4, /* Timer */ + [2] = &llc_stat_dupaddr_state_trans_5, + [3] = &llc_stat_dupaddr_state_trans_1, /* Receive frame */ + [4] = &llc_stat_dupaddr_state_trans_2, + [5] = &llc_stat_dupaddr_state_trans_3, + [6] = &llc_stat_state_trans_end, +}; + +static struct llc_station_state + llc_station_state_table[LLC_NBR_STATION_STATES] = { + [LLC_STATION_STATE_DOWN - 1] = { + .curr_state = LLC_STATION_STATE_DOWN, + .transitions = llc_stat_dwn_state_trans, + }, + [LLC_STATION_STATE_DUP_ADDR_CHK - 1] = { + .curr_state = LLC_STATION_STATE_DUP_ADDR_CHK, + .transitions = llc_stat_dupaddr_state_trans, + }, + [LLC_STATION_STATE_UP - 1] = { + .curr_state = LLC_STATION_STATE_UP, + .transitions = llc_stat_up_state_trans, + }, +}; + +/** + * llc_exec_station_trans_actions - executes actions for transition + * @trans: Address of the transition + * @skb: Address of the event that caused the transition + * + * Executes actions of a transition of the station state machine. Returns + * 0 if all actions complete successfully, nonzero otherwise. + */ +static u16 llc_exec_station_trans_actions(struct llc_station_state_trans *trans, + struct sk_buff *skb) +{ + u16 rc = 0; + llc_station_action_t *next_action = trans->ev_actions; + + for (; next_action && *next_action; next_action++) + if ((*next_action)(skb)) + rc = 1; + return rc; +} + +/** + * llc_find_station_trans - finds transition for this event + * @skb: Address of the event + * + * Search thru events of the current state of the station until list + * exhausted or it's obvious that the event is not valid for the current + * state. Returns the address of the transition if cound, %NULL otherwise. + */ +static struct llc_station_state_trans * + llc_find_station_trans(struct sk_buff *skb) +{ + int i = 0; + struct llc_station_state_trans *rc = NULL; + struct llc_station_state_trans **next_trans; + struct llc_station_state *curr_state = + &llc_station_state_table[llc_main_station.state - 1]; + + for (next_trans = curr_state->transitions; next_trans[i]->ev; i++) + if (!next_trans[i]->ev(skb)) { + rc = next_trans[i]; + break; + } + return rc; +} + +/** + * llc_station_free_ev - frees an event + * @skb: Address of the event + * + * Frees an event. + */ +static void llc_station_free_ev(struct sk_buff *skb) +{ + struct llc_station_state_ev *ev = llc_station_ev(skb); + + if (ev->type == LLC_STATION_EV_TYPE_PDU) + kfree_skb(skb); +} + +/** + * llc_station_next_state - processes event and goes to the next state + * @skb: Address of the event + * + * Processes an event, executes any transitions related to that event and + * updates the state of the station. + */ +static u16 llc_station_next_state(struct sk_buff *skb) +{ + u16 rc = 1; + struct llc_station_state_trans *trans; + + if (llc_main_station.state > LLC_NBR_STATION_STATES) + goto out; + trans = llc_find_station_trans(skb); + if (trans) { + /* got the state to which we next transition; perform the + * actions associated with this transition before actually + * transitioning to the next state + */ + rc = llc_exec_station_trans_actions(trans, skb); + if (!rc) + /* transition station to next state if all actions + * execute successfully; done; wait for next event + */ + llc_main_station.state = trans->next_state; + } else + /* event not recognized in current state; re-queue it for + * processing again at a later time; return failure + */ + rc = 0; +out: + llc_station_free_ev(skb); + return rc; +} + +/** + * llc_station_service_events - service events in the queue + * + * Get an event from the station event queue (if any); attempt to service + * the event; if event serviced, get the next event (if any) on the event + * queue; if event not service, re-queue the event on the event queue and + * attempt to service the next event; when serviced all events in queue, + * finished; if don't transition to different state, just service all + * events once; if transition to new state, service all events again. + * Caller must hold llc_main_station.ev_q.lock. + */ +static void llc_station_service_events(void) +{ + struct sk_buff *skb; + + while ((skb = skb_dequeue(&llc_main_station.ev_q.list)) != NULL) + llc_station_next_state(skb); +} + +/** + * llc_station_state_process: queue event and try to process queue. + * @skb: Address of the event + * + * Queues an event (on the station event queue) for handling by the + * station state machine and attempts to process any queued-up events. + */ +void llc_station_state_process(struct sk_buff *skb) +{ + spin_lock_bh(&llc_main_station.ev_q.lock); + skb_queue_tail(&llc_main_station.ev_q.list, skb); + llc_station_service_events(); + spin_unlock_bh(&llc_main_station.ev_q.lock); +} + +static void llc_station_ack_tmr_cb(unsigned long timeout_data) +{ + struct sk_buff *skb = alloc_skb(0, GFP_ATOMIC); + + if (skb) { + struct llc_station_state_ev *ev = llc_station_ev(skb); + + ev->type = LLC_STATION_EV_TYPE_ACK_TMR; + llc_station_state_process(skb); + } +} + +/* + * llc_station_rcv - send received pdu to the station state machine + * @skb: received frame. + * + * Sends data unit to station state machine. + */ +static void llc_station_rcv(struct sk_buff *skb) +{ + struct llc_station_state_ev *ev = llc_station_ev(skb); + + ev->type = LLC_STATION_EV_TYPE_PDU; + ev->reason = 0; + llc_station_state_process(skb); +} + +int __init llc_station_init(void) +{ + u16 rc = -ENOBUFS; + struct sk_buff *skb; + struct llc_station_state_ev *ev; + + skb_queue_head_init(&llc_main_station.mac_pdu_q); + skb_queue_head_init(&llc_main_station.ev_q.list); + spin_lock_init(&llc_main_station.ev_q.lock); + init_timer(&llc_main_station.ack_timer); + llc_main_station.ack_timer.data = (unsigned long)&llc_main_station; + llc_main_station.ack_timer.function = llc_station_ack_tmr_cb; + + skb = alloc_skb(0, GFP_ATOMIC); + if (!skb) + goto out; + rc = 0; + llc_set_station_handler(llc_station_rcv); + ev = llc_station_ev(skb); + memset(ev, 0, sizeof(*ev)); + llc_main_station.ack_timer.expires = jiffies + 3 * HZ; + llc_main_station.maximum_retry = 1; + llc_main_station.state = LLC_STATION_STATE_DOWN; + ev->type = LLC_STATION_EV_TYPE_SIMPLE; + ev->prim_type = LLC_STATION_EV_ENABLE_WITHOUT_DUP_ADDR_CHECK; + rc = llc_station_next_state(skb); +out: + return rc; +} + +void __exit llc_station_exit(void) +{ + llc_set_station_handler(NULL); +} diff -prauN linux-2.6.0-test5/net/netlink/af_netlink.c wli-2.6.0-test5-bk12-25/net/netlink/af_netlink.c --- linux-2.6.0-test5/net/netlink/af_netlink.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/netlink/af_netlink.c 2003-09-25 19:16:17.000000000 -0700 @@ -988,7 +988,7 @@ static struct sock *netlink_seq_socket_i static void *netlink_seq_start(struct seq_file *seq, loff_t *pos) { read_lock(&nl_table_lock); - return *pos ? netlink_seq_socket_idx(seq, *pos - 1) : (void *) 1; + return *pos ? netlink_seq_socket_idx(seq, *pos - 1) : SEQ_START_TOKEN; } static void *netlink_seq_next(struct seq_file *seq, void *v, loff_t *pos) @@ -997,7 +997,7 @@ static void *netlink_seq_next(struct seq ++*pos; - if (v == (void *) 1) + if (v == SEQ_START_TOKEN) return netlink_seq_socket_idx(seq, 0); s = sk_next(v); @@ -1023,7 +1023,7 @@ static void netlink_seq_stop(struct seq_ static int netlink_seq_show(struct seq_file *seq, void *v) { - if (v == (void *)1) + if (v == SEQ_START_TOKEN) seq_puts(seq, "sk Eth Pid Groups " "Rmem Wmem Dump Locks\n"); diff -prauN linux-2.6.0-test5/net/netrom/af_netrom.c wli-2.6.0-test5-bk12-25/net/netrom/af_netrom.c --- linux-2.6.0-test5/net/netrom/af_netrom.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/netrom/af_netrom.c 2003-09-25 19:16:17.000000000 -0700 @@ -62,6 +62,7 @@ static HLIST_HEAD(nr_list); static spinlock_t nr_list_lock = SPIN_LOCK_UNLOCKED; static struct proto_ops nr_proto_ops; +void nr_init_timers(struct sock *sk); static struct sock *nr_alloc_sock(void) { @@ -279,17 +280,12 @@ void nr_destroy_socket(struct sock *sk) kfree_skb(skb); } - while ((skb = skb_dequeue(&sk->sk_write_queue)) != NULL) { - kfree_skb(skb); - } if (atomic_read(&sk->sk_wmem_alloc) || atomic_read(&sk->sk_rmem_alloc)) { /* Defer: outstanding buffers */ - init_timer(&sk->sk_timer); - sk->sk_timer.expires = jiffies + 2 * HZ; sk->sk_timer.function = nr_destroy_timer; - sk->sk_timer.data = (unsigned long)sk; + sk->sk_timer.expires = jiffies + 2 * HZ; add_timer(&sk->sk_timer); } else sock_put(sk); @@ -442,10 +438,7 @@ static int nr_create(struct socket *sock skb_queue_head_init(&nr->reseq_queue); skb_queue_head_init(&nr->frag_queue); - init_timer(&nr->t1timer); - init_timer(&nr->t2timer); - init_timer(&nr->t4timer); - init_timer(&nr->idletimer); + nr_init_timers(sk); nr->t1 = sysctl_netrom_transport_timeout; nr->t2 = sysctl_netrom_transport_acknowledge_delay; @@ -491,10 +484,7 @@ static struct sock *nr_make_new(struct s skb_queue_head_init(&nr->reseq_queue); skb_queue_head_init(&nr->frag_queue); - init_timer(&nr->t1timer); - init_timer(&nr->t2timer); - init_timer(&nr->t4timer); - init_timer(&nr->idletimer); + nr_init_timers(sk); onr = nr_sk(osk); @@ -1241,8 +1231,6 @@ static int nr_ioctl(struct socket *sock, #ifdef CONFIG_PROC_FS -/* Marker for header entry */ -#define NETROM_PROC_START ((void *)1) static void *nr_info_start(struct seq_file *seq, loff_t *pos) { struct sock *s; @@ -1251,7 +1239,7 @@ static void *nr_info_start(struct seq_fi spin_lock_bh(&nr_list_lock); if (*pos == 0) - return NETROM_PROC_START; + return SEQ_START_TOKEN; sk_for_each(s, node, &nr_list) { if (i == *pos) @@ -1265,7 +1253,7 @@ static void *nr_info_next(struct seq_fil { ++*pos; - return (v == NETROM_PROC_START) ? sk_head(&nr_list) + return (v == SEQ_START_TOKEN) ? sk_head(&nr_list) : sk_next((struct sock *)v); } @@ -1281,7 +1269,7 @@ static int nr_info_show(struct seq_file nr_cb *nr; const char *devname; - if (v == NETROM_PROC_START) + if (v == SEQ_START_TOKEN) seq_puts(seq, "user_addr dest_node src_node dev my your st vs vr va t1 t2 t4 idle n2 wnd Snd-Q Rcv-Q inode\n"); diff -prauN linux-2.6.0-test5/net/netrom/nr_loopback.c wli-2.6.0-test5-bk12-25/net/netrom/nr_loopback.c --- linux-2.6.0-test5/net/netrom/nr_loopback.c 2003-09-08 12:50:23.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/netrom/nr_loopback.c 2003-09-25 19:16:17.000000000 -0700 @@ -14,19 +14,17 @@ #include #include -static struct sk_buff_head loopback_queue; -static struct timer_list loopback_timer; +static void nr_loopback_timer(unsigned long); -static void nr_set_loopback_timer(void); +static struct sk_buff_head loopback_queue; +static struct timer_list loopback_timer = TIMER_INITIALIZER(nr_loopback_timer, 0, 0); -void nr_loopback_init(void) +void __init nr_loopback_init(void) { skb_queue_head_init(&loopback_queue); - - init_timer(&loopback_timer); } -static int nr_loopback_running(void) +static inline int nr_loopback_running(void) { return timer_pending(&loopback_timer); } @@ -42,26 +40,13 @@ int nr_loopback_queue(struct sk_buff *sk skb_queue_tail(&loopback_queue, skbn); if (!nr_loopback_running()) - nr_set_loopback_timer(); + mod_timer(&loopback_timer, jiffies + 10); } kfree_skb(skb); return 1; } -static void nr_loopback_timer(unsigned long); - -static void nr_set_loopback_timer(void) -{ - del_timer(&loopback_timer); - - loopback_timer.data = 0; - loopback_timer.function = &nr_loopback_timer; - loopback_timer.expires = jiffies + 10; - - add_timer(&loopback_timer); -} - static void nr_loopback_timer(unsigned long param) { struct sk_buff *skb; @@ -80,12 +65,12 @@ static void nr_loopback_timer(unsigned l dev_put(dev); if (!skb_queue_empty(&loopback_queue) && !nr_loopback_running()) - nr_set_loopback_timer(); + mod_timer(&loopback_timer, jiffies + 10); } } void __exit nr_loopback_clear(void) { - del_timer(&loopback_timer); + del_timer_sync(&loopback_timer); skb_queue_purge(&loopback_queue); } diff -prauN linux-2.6.0-test5/net/netrom/nr_route.c wli-2.6.0-test5-bk12-25/net/netrom/nr_route.c --- linux-2.6.0-test5/net/netrom/nr_route.c 2003-09-08 12:50:41.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/netrom/nr_route.c 2003-09-25 19:16:17.000000000 -0700 @@ -841,7 +841,6 @@ int nr_route_frame(struct sk_buff *skb, } #ifdef CONFIG_PROC_FS -#define NETROM_PROC_START ((void *) 1) static void *nr_node_start(struct seq_file *seq, loff_t *pos) { @@ -851,7 +850,7 @@ static void *nr_node_start(struct seq_fi spin_lock_bh(&nr_node_list_lock); if (*pos == 0) - return NETROM_PROC_START; + return SEQ_START_TOKEN; nr_node_for_each(nr_node, node, &nr_node_list) { if (i == *pos) @@ -867,7 +866,7 @@ static void *nr_node_next(struct seq_fil struct hlist_node *node; ++*pos; - node = (v == NETROM_PROC_START) + node = (v == SEQ_START_TOKEN) ? nr_node_list.first : ((struct nr_node *)v)->node_node.next; @@ -883,7 +882,7 @@ static int nr_node_show(struct seq_file { int i; - if (v == NETROM_PROC_START) + if (v == SEQ_START_TOKEN) seq_puts(seq, "callsign mnemonic w n qual obs neigh qual obs neigh qual obs neigh\n"); else { @@ -936,7 +935,7 @@ static void *nr_neigh_start(struct seq_f spin_lock_bh(&nr_neigh_list_lock); if (*pos == 0) - return NETROM_PROC_START; + return SEQ_START_TOKEN; nr_neigh_for_each(nr_neigh, node, &nr_neigh_list) { if (i == *pos) @@ -950,7 +949,7 @@ static void *nr_neigh_next(struct seq_fi struct hlist_node *node; ++*pos; - node = (v == NETROM_PROC_START) + node = (v == SEQ_START_TOKEN) ? nr_neigh_list.first : ((struct nr_neigh *)v)->neigh_node.next; @@ -966,7 +965,7 @@ static int nr_neigh_show(struct seq_file { int i; - if (v == NETROM_PROC_START) + if (v == SEQ_START_TOKEN) seq_puts(seq, "addr callsign dev qual lock count failed digipeaters\n"); else { struct nr_neigh *nr_neigh = v; diff -prauN linux-2.6.0-test5/net/netrom/nr_timer.c wli-2.6.0-test5-bk12-25/net/netrom/nr_timer.c --- linux-2.6.0-test5/net/netrom/nr_timer.c 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/netrom/nr_timer.c 2003-09-25 19:16:17.000000000 -0700 @@ -36,69 +36,63 @@ static void nr_t2timer_expiry(unsigned l static void nr_t4timer_expiry(unsigned long); static void nr_idletimer_expiry(unsigned long); -void nr_start_t1timer(struct sock *sk) +void nr_init_timers(struct sock *sk) { nr_cb *nr = nr_sk(sk); - del_timer(&nr->t1timer); - + init_timer(&nr->t1timer); nr->t1timer.data = (unsigned long)sk; nr->t1timer.function = &nr_t1timer_expiry; - nr->t1timer.expires = jiffies + nr->t1; + + init_timer(&nr->t2timer); + nr->t2timer.data = (unsigned long)sk; + nr->t2timer.function = &nr_t2timer_expiry; + + init_timer(&nr->t4timer); + nr->t4timer.data = (unsigned long)sk; + nr->t4timer.function = &nr_t4timer_expiry; + + init_timer(&nr->idletimer); + nr->idletimer.data = (unsigned long)sk; + nr->idletimer.function = &nr_idletimer_expiry; - add_timer(&nr->t1timer); + /* initialized by sock_init_data */ + sk->sk_timer.data = (unsigned long)sk; + sk->sk_timer.function = &nr_heartbeat_expiry; } -void nr_start_t2timer(struct sock *sk) +void nr_start_t1timer(struct sock *sk) { nr_cb *nr = nr_sk(sk); - del_timer(&nr->t2timer); + mod_timer(&nr->t1timer, jiffies + nr->t1); +} - nr->t2timer.data = (unsigned long)sk; - nr->t2timer.function = &nr_t2timer_expiry; - nr->t2timer.expires = jiffies + nr->t2; +void nr_start_t2timer(struct sock *sk) +{ + nr_cb *nr = nr_sk(sk); - add_timer(&nr->t2timer); + mod_timer(&nr->t2timer, jiffies + nr->t2); } void nr_start_t4timer(struct sock *sk) { nr_cb *nr = nr_sk(sk); - del_timer(&nr->t4timer); - - nr->t4timer.data = (unsigned long)sk; - nr->t4timer.function = &nr_t4timer_expiry; - nr->t4timer.expires = jiffies + nr->t4; - - add_timer(&nr->t4timer); + mod_timer(&nr->t4timer, jiffies + nr->t4); } void nr_start_idletimer(struct sock *sk) { nr_cb *nr = nr_sk(sk); - del_timer(&nr->idletimer); - - if (nr->idle > 0) { - nr->idletimer.data = (unsigned long)sk; - nr->idletimer.function = &nr_idletimer_expiry; - nr->idletimer.expires = jiffies + nr->idle; - - add_timer(&nr->idletimer); - } + if (nr->idle > 0) + mod_timer(&nr->idletimer, jiffies + nr->idle); } void nr_start_heartbeat(struct sock *sk) { - del_timer(&sk->sk_timer); - - sk->sk_timer.data = (unsigned long)sk; - sk->sk_timer.function = &nr_heartbeat_expiry; - sk->sk_timer.expires = jiffies + 5 * HZ; - - add_timer(&sk->sk_timer); + mod_timer(&sk->sk_timer, jiffies + 5 * HZ); } void nr_stop_t1timer(struct sock *sk) diff -prauN linux-2.6.0-test5/net/netsyms.c wli-2.6.0-test5-bk12-25/net/netsyms.c --- linux-2.6.0-test5/net/netsyms.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/netsyms.c 2003-09-25 19:16:17.000000000 -0700 @@ -511,7 +511,7 @@ EXPORT_SYMBOL(netif_receive_skb); EXPORT_SYMBOL(dev_add_pack); EXPORT_SYMBOL(dev_remove_pack); EXPORT_SYMBOL(__dev_remove_pack); -EXPORT_SYMBOL(dev_get); +EXPORT_SYMBOL(__dev_get); EXPORT_SYMBOL(dev_alloc); EXPORT_SYMBOL(dev_alloc_name); EXPORT_SYMBOL(__netdev_watchdog_up); diff -prauN linux-2.6.0-test5/net/packet/af_packet.c wli-2.6.0-test5-bk12-25/net/packet/af_packet.c --- linux-2.6.0-test5/net/packet/af_packet.c 2003-09-08 12:50:13.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/packet/af_packet.c 2003-09-25 19:16:17.000000000 -0700 @@ -381,6 +381,23 @@ out_unlock: } #endif +static inline unsigned run_filter(struct sk_buff *skb, struct sock *sk, unsigned res) +{ + struct sk_filter *filter; + + bh_lock_sock(sk); + filter = sk->sk_filter; + /* + * Our caller already checked that filter != NULL but we need to + * verify that under bh_lock_sock() to be safe + */ + if (likely(filter != NULL)) + res = sk_run_filter(skb, filter->insns, filter->len); + bh_unlock_sock(sk); + + return res; +} + /* This function makes lazy skb cloning in hope that most of packets are discarded by BPF. @@ -429,15 +446,7 @@ static int packet_rcv(struct sk_buff *sk snaplen = skb->len; if (sk->sk_filter) { - unsigned res = snaplen; - struct sk_filter *filter; - - bh_lock_sock(sk); - if ((filter = sk->sk_filter) != NULL) - res = sk_run_filter(skb, sk->sk_filter->insns, - sk->sk_filter->len); - bh_unlock_sock(sk); - + unsigned res = run_filter(skb, sk, snaplen); if (res == 0) goto drop_n_restore; if (snaplen > res) @@ -533,15 +542,7 @@ static int tpacket_rcv(struct sk_buff *s snaplen = skb->len; if (sk->sk_filter) { - unsigned res = snaplen; - struct sk_filter *filter; - - bh_lock_sock(sk); - if ((filter = sk->sk_filter) != NULL) - res = sk_run_filter(skb, sk->sk_filter->insns, - sk->sk_filter->len); - bh_unlock_sock(sk); - + unsigned res = run_filter(skb, sk, snaplen); if (res == 0) goto drop_n_restore; if (snaplen > res) diff -prauN linux-2.6.0-test5/net/rose/af_rose.c wli-2.6.0-test5-bk12-25/net/rose/af_rose.c --- linux-2.6.0-test5/net/rose/af_rose.c 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/rose/af_rose.c 2003-09-25 19:16:17.000000000 -0700 @@ -1344,7 +1344,7 @@ static void *rose_info_start(struct seq_ spin_lock_bh(&rose_list_lock); if (*pos == 0) - return ROSE_PROC_START; + return SEQ_START_TOKEN; i = 1; sk_for_each(s, node, &rose_list) { @@ -1359,7 +1359,7 @@ static void *rose_info_next(struct seq_f { ++*pos; - return (v == ROSE_PROC_START) ? sk_head(&rose_list) + return (v == SEQ_START_TOKEN) ? sk_head(&rose_list) : sk_next((struct sock *)v); } @@ -1370,7 +1370,7 @@ static void rose_info_stop(struct seq_fi static int rose_info_show(struct seq_file *seq, void *v) { - if (v == ROSE_PROC_START) + if (v == SEQ_START_TOKEN) seq_puts(seq, "dest_addr dest_call src_addr src_call dev lci neigh st vs vr va t t1 t2 t3 hb idle Snd-Q Rcv-Q inode\n"); diff -prauN linux-2.6.0-test5/net/rose/rose_route.c wli-2.6.0-test5-bk12-25/net/rose/rose_route.c --- linux-2.6.0-test5/net/rose/rose_route.c 2003-09-08 12:50:33.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/rose/rose_route.c 2003-09-25 19:16:17.000000000 -0700 @@ -1076,7 +1076,7 @@ static void *rose_node_start(struct seq_ spin_lock_bh(&rose_neigh_list_lock); if (*pos == 0) - return ROSE_PROC_START; + return SEQ_START_TOKEN; for (rose_node = rose_node_list; rose_node && i < *pos; rose_node = rose_node->next, ++i); @@ -1088,7 +1088,7 @@ static void *rose_node_next(struct seq_f { ++*pos; - return (v == ROSE_PROC_START) ? rose_node_list + return (v == SEQ_START_TOKEN) ? rose_node_list : ((struct rose_node *)v)->next; } @@ -1101,7 +1101,7 @@ static int rose_node_show(struct seq_fil { int i; - if (v == ROSE_PROC_START) + if (v == SEQ_START_TOKEN) seq_puts(seq, "address mask n neigh neigh neigh\n"); else { const struct rose_node *rose_node = v; @@ -1152,7 +1152,7 @@ static void *rose_neigh_start(struct seq spin_lock_bh(&rose_neigh_list_lock); if (*pos == 0) - return ROSE_PROC_START; + return SEQ_START_TOKEN; for (rose_neigh = rose_neigh_list; rose_neigh && i < *pos; rose_neigh = rose_neigh->next, ++i); @@ -1164,7 +1164,7 @@ static void *rose_neigh_next(struct seq_ { ++*pos; - return (v == ROSE_PROC_START) ? rose_neigh_list + return (v == SEQ_START_TOKEN) ? rose_neigh_list : ((struct rose_neigh *)v)->next; } @@ -1177,7 +1177,7 @@ static int rose_neigh_show(struct seq_fi { int i; - if (v == ROSE_PROC_START) + if (v == SEQ_START_TOKEN) seq_puts(seq, "addr callsign dev count use mode restart t0 tf digipeaters\n"); else { @@ -1234,7 +1234,7 @@ static void *rose_route_start(struct seq spin_lock_bh(&rose_route_list_lock); if (*pos == 0) - return ROSE_PROC_START; + return SEQ_START_TOKEN; for (rose_route = rose_route_list; rose_route && i < *pos; rose_route = rose_route->next, ++i); @@ -1246,7 +1246,7 @@ static void *rose_route_next(struct seq_ { ++*pos; - return (v == ROSE_PROC_START) ? rose_route_list + return (v == SEQ_START_TOKEN) ? rose_route_list : ((struct rose_route *)v)->next; } @@ -1257,7 +1257,7 @@ static void rose_route_stop(struct seq_f static int rose_route_show(struct seq_file *seq, void *v) { - if (v == ROSE_PROC_START) + if (v == SEQ_START_TOKEN) seq_puts(seq, "lci address callsign neigh <-> lci address callsign neigh\n"); else { diff -prauN linux-2.6.0-test5/net/rxrpc/Makefile wli-2.6.0-test5-bk12-25/net/rxrpc/Makefile --- linux-2.6.0-test5/net/rxrpc/Makefile 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/rxrpc/Makefile 2003-09-25 19:16:17.000000000 -0700 @@ -2,7 +2,9 @@ # Makefile for Linux kernel Rx RPC # -rxrpc-y := \ +#CFLAGS += -finstrument-functions + +rxrpc-objs := \ call.o \ connection.o \ krxiod.o \ @@ -13,7 +15,11 @@ rxrpc-y := \ rxrpc_syms.o \ transport.o -rxrpc-$(CONFIG_PROC_FS) += proc.o -rxrpc-$(CONFIG_SYSCTL) += sysctl.o +ifeq ($(CONFIG_PROC_FS),y) +rxrpc-objs += proc.o +endif +ifeq ($(CONFIG_SYSCTL),y) +rxrpc-objs += sysctl.o +endif obj-$(CONFIG_RXRPC) := rxrpc.o diff -prauN linux-2.6.0-test5/net/rxrpc/call.c wli-2.6.0-test5-bk12-25/net/rxrpc/call.c --- linux-2.6.0-test5/net/rxrpc/call.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/rxrpc/call.c 2003-09-25 19:16:17.000000000 -0700 @@ -53,20 +53,25 @@ const char *rxrpc_call_error_states[] = }; const char *rxrpc_pkts[] = { - "?00", "data", "ack", "busy", "abort", "ackall", "chall", "resp", "debug", + "?00", + "data", "ack", "busy", "abort", "ackall", "chall", "resp", "debug", "?09", "?10", "?11", "?12", "?13", "?14", "?15" }; const char *rxrpc_acks[] = { - "---", "REQ", "DUP", "SEQ", "WIN", "MEM", "PNG", "PNR", "DLY", "IDL", "-?-" + "---", "REQ", "DUP", "SEQ", "WIN", "MEM", "PNG", "PNR", "DLY", "IDL", + "-?-" }; static const char _acktype[] = "NA-"; static void rxrpc_call_receive_packet(struct rxrpc_call *call); -static void rxrpc_call_receive_data_packet(struct rxrpc_call *call, struct rxrpc_message *msg); -static void rxrpc_call_receive_ack_packet(struct rxrpc_call *call, struct rxrpc_message *msg); -static void rxrpc_call_definitively_ACK(struct rxrpc_call *call, rxrpc_seq_t higest); +static void rxrpc_call_receive_data_packet(struct rxrpc_call *call, + struct rxrpc_message *msg); +static void rxrpc_call_receive_ack_packet(struct rxrpc_call *call, + struct rxrpc_message *msg); +static void rxrpc_call_definitively_ACK(struct rxrpc_call *call, + rxrpc_seq_t higest); static void rxrpc_call_resend(struct rxrpc_call *call, rxrpc_seq_t highest); static int __rxrpc_call_read_data(struct rxrpc_call *call); @@ -75,7 +80,7 @@ static int rxrpc_call_record_ACK(struct rxrpc_seq_t seq, size_t count); #define _state(call) \ - _debug("[[[ state %s ]]]",rxrpc_call_states[call->app_call_state]); + _debug("[[[ state %s ]]]", rxrpc_call_states[call->app_call_state]); static void rxrpc_call_default_attn_func(struct rxrpc_call *call) { @@ -103,7 +108,7 @@ static void __rxrpc_call_acks_timeout(un { struct rxrpc_call *call = (struct rxrpc_call *) _call; - _debug("ACKS TIMEOUT %05lu",jiffies - call->cjif); + _debug("ACKS TIMEOUT %05lu", jiffies - call->cjif); call->flags |= RXRPC_CALL_ACKS_TIMO; rxrpc_krxiod_queue_call(call); @@ -113,7 +118,7 @@ static void __rxrpc_call_rcv_timeout(uns { struct rxrpc_call *call = (struct rxrpc_call *) _call; - _debug("RCV TIMEOUT %05lu",jiffies - call->cjif); + _debug("RCV TIMEOUT %05lu", jiffies - call->cjif); call->flags |= RXRPC_CALL_RCV_TIMO; rxrpc_krxiod_queue_call(call); @@ -133,15 +138,18 @@ static void __rxrpc_call_ackr_timeout(un /* * calculate a timeout based on an RTT value */ -static inline unsigned long __rxrpc_rtt_based_timeout(struct rxrpc_call *call, unsigned long val) +static inline unsigned long __rxrpc_rtt_based_timeout(struct rxrpc_call *call, + unsigned long val) { - unsigned long expiry = call->conn->peer->rtt / (1000000/HZ); + unsigned long expiry = call->conn->peer->rtt / (1000000 / HZ); expiry += 10; - if (expiryHZ) expiry = HZ; + if (expiry < HZ / 25) + expiry = HZ / 25; + if (expiry > HZ) + expiry = HZ; - _leave(" = %lu jiffies",expiry); + _leave(" = %lu jiffies", expiry); return jiffies + expiry; } /* end __rxrpc_rtt_based_timeout() */ @@ -154,7 +162,7 @@ static inline int __rxrpc_create_call(st { struct rxrpc_call *call; - _enter("%p",conn); + _enter("%p", conn); /* allocate and initialise a call record */ call = (struct rxrpc_call *) get_zeroed_page(GFP_KERNEL); @@ -163,7 +171,7 @@ static inline int __rxrpc_create_call(st return -ENOMEM; } - atomic_set(&call->usage,1); + atomic_set(&call->usage, 1); init_waitqueue_head(&call->waitq); spin_lock_init(&call->lock); @@ -200,7 +208,7 @@ static inline int __rxrpc_create_call(st call->cjif = jiffies; - _leave(" = 0 (%p)",call); + _leave(" = 0 (%p)", call); *_call = call; @@ -217,34 +225,37 @@ int rxrpc_create_call(struct rxrpc_conne rxrpc_call_aemap_func_t aemap, struct rxrpc_call **_call) { - DECLARE_WAITQUEUE(myself,current); + DECLARE_WAITQUEUE(myself, current); struct rxrpc_call *call; int ret, cix, loop; - _enter("%p",conn); + _enter("%p", conn); /* allocate and initialise a call record */ - ret = __rxrpc_create_call(conn,&call); - if (ret<0) { - _leave(" = %d",ret); + ret = __rxrpc_create_call(conn, &call); + if (ret < 0) { + _leave(" = %d", ret); return ret; } call->app_call_state = RXRPC_CSTATE_CLNT_SND_ARGS; - if (attn) call->app_attn_func = attn; - if (error) call->app_error_func = error; - if (aemap) call->app_aemap_func = aemap; + if (attn) + call->app_attn_func = attn; + if (error) + call->app_error_func = error; + if (aemap) + call->app_aemap_func = aemap; _state(call); spin_lock(&conn->lock); set_current_state(TASK_INTERRUPTIBLE); - add_wait_queue(&conn->chanwait,&myself); + add_wait_queue(&conn->chanwait, &myself); try_again: /* try to find an unused channel */ - for (cix=0; cix<4; cix++) + for (cix = 0; cix < 4; cix++) if (!conn->channels[cix]) goto obtained_chan; @@ -263,14 +274,15 @@ int rxrpc_create_call(struct rxrpc_conne /* got a channel - now attach to the connection */ obtained_chan: - remove_wait_queue(&conn->chanwait,&myself); + remove_wait_queue(&conn->chanwait, &myself); set_current_state(TASK_RUNNING); /* concoct a unique call number */ next_callid: call->call_id = htonl(++conn->call_counter); - for (loop=0; loop<4; loop++) - if (conn->channels[loop] && conn->channels[loop]->call_id==call->call_id) + for (loop = 0; loop < 4; loop++) + if (conn->channels[loop] && + conn->channels[loop]->call_id == call->call_id) goto next_callid; rxrpc_get_connection(conn); @@ -281,24 +293,23 @@ int rxrpc_create_call(struct rxrpc_conne spin_unlock(&conn->lock); down_write(&rxrpc_calls_sem); - list_add_tail(&call->call_link,&rxrpc_calls); + list_add_tail(&call->call_link, &rxrpc_calls); up_write(&rxrpc_calls_sem); __RXACCT(atomic_inc(&rxrpc_call_count)); *_call = call; - _leave(" = 0 (call=%p cix=%u)",call,cix); + _leave(" = 0 (call=%p cix=%u)", call, cix); return 0; error_unwait: - remove_wait_queue(&conn->chanwait,&myself); + remove_wait_queue(&conn->chanwait, &myself); set_current_state(TASK_RUNNING); spin_unlock(&conn->lock); - free_page((unsigned long)call); - _leave(" = %d",ret); + free_page((unsigned long) call); + _leave(" = %d", ret); return ret; - } /* end rxrpc_create_call() */ /*****************************************************************************/ @@ -315,18 +326,18 @@ int rxrpc_incoming_call(struct rxrpc_con cix = ntohl(msg->hdr.cid) & RXRPC_CHANNELMASK; - _enter("%p,%u,%u",conn,ntohl(msg->hdr.callNumber),cix); + _enter("%p,%u,%u", conn, ntohl(msg->hdr.callNumber), cix); /* allocate and initialise a call record */ - ret = __rxrpc_create_call(conn,&call); - if (ret<0) { - _leave(" = %d",ret); + ret = __rxrpc_create_call(conn, &call); + if (ret < 0) { + _leave(" = %d", ret); return ret; } call->pkt_rcv_count = 1; call->app_call_state = RXRPC_CSTATE_SRVR_RCV_OPID; - call->app_mark = sizeof(u32); + call->app_mark = sizeof(uint32_t); _state(call); @@ -348,20 +359,20 @@ int rxrpc_incoming_call(struct rxrpc_con spin_unlock(&conn->lock); - if (ret<0) { - free_page((unsigned long)call); + if (ret < 0) { + free_page((unsigned long) call); call = NULL; } - if (ret==0) { + if (ret == 0) { down_write(&rxrpc_calls_sem); - list_add_tail(&call->call_link,&rxrpc_calls); + list_add_tail(&call->call_link, &rxrpc_calls); up_write(&rxrpc_calls_sem); __RXACCT(atomic_inc(&rxrpc_call_count)); *_call = call; } - _leave(" = %d [%p]",ret,call); + _leave(" = %d [%p]", ret, call); return ret; } /* end rxrpc_incoming_call() */ @@ -377,10 +388,11 @@ void rxrpc_put_call(struct rxrpc_call *c _enter("%p{u=%d}",call,atomic_read(&call->usage)); /* sanity check */ - if (atomic_read(&call->usage)<=0) + if (atomic_read(&call->usage) <= 0) BUG(); - /* to prevent a race, the decrement and the de-list must be effectively atomic */ + /* to prevent a race, the decrement and the de-list must be effectively + * atomic */ spin_lock(&conn->lock); if (likely(!atomic_dec_and_test(&call->usage))) { spin_unlock(&conn->lock); @@ -388,7 +400,7 @@ void rxrpc_put_call(struct rxrpc_call *c return; } - if (conn->channels[ntohl(call->chan_ix)]==call) + if (conn->channels[ntohl(call->chan_ix)] == call) conn->channels[ntohl(call->chan_ix)] = NULL; spin_unlock(&conn->lock); @@ -412,25 +424,29 @@ void rxrpc_put_call(struct rxrpc_call *c rxrpc_put_message(call->snd_ping); while (!list_empty(&call->acks_pendq)) { - msg = list_entry(call->acks_pendq.next,struct rxrpc_message,link); + msg = list_entry(call->acks_pendq.next, + struct rxrpc_message, link); list_del(&msg->link); rxrpc_put_message(msg); } while (!list_empty(&call->rcv_receiveq)) { - msg = list_entry(call->rcv_receiveq.next,struct rxrpc_message,link); + msg = list_entry(call->rcv_receiveq.next, + struct rxrpc_message, link); list_del(&msg->link); rxrpc_put_message(msg); } while (!list_empty(&call->app_readyq)) { - msg = list_entry(call->app_readyq.next,struct rxrpc_message,link); + msg = list_entry(call->app_readyq.next, + struct rxrpc_message, link); list_del(&msg->link); rxrpc_put_message(msg); } while (!list_empty(&call->app_unreadyq)) { - msg = list_entry(call->app_unreadyq.next,struct rxrpc_message,link); + msg = list_entry(call->app_unreadyq.next, + struct rxrpc_message, link); list_del(&msg->link); rxrpc_put_message(msg); } @@ -442,7 +458,7 @@ void rxrpc_put_call(struct rxrpc_call *c up_write(&rxrpc_calls_sem); __RXACCT(atomic_dec(&rxrpc_call_count)); - free_page((unsigned long)call); + free_page((unsigned long) call); _leave(" [destroyed]"); } /* end rxrpc_put_call() */ @@ -451,7 +467,8 @@ void rxrpc_put_call(struct rxrpc_call *c /* * actually generate a normal ACK */ -static inline int __rxrpc_call_gen_normal_ACK(struct rxrpc_call *call, rxrpc_seq_t seq) +static inline int __rxrpc_call_gen_normal_ACK(struct rxrpc_call *call, + rxrpc_seq_t seq) { struct rxrpc_message *msg; struct iovec diov[3]; @@ -478,35 +495,36 @@ static inline int __rxrpc_call_gen_norma diov[0].iov_len = sizeof(struct rxrpc_ackpacket); diov[0].iov_base = &call->ackr; - diov[1].iov_len = (call->ackr_pend_cnt+3); + diov[1].iov_len = call->ackr_pend_cnt + 3; diov[1].iov_base = call->ackr_array; diov[2].iov_len = sizeof(aux); diov[2].iov_base = &aux; /* build and send the message */ - ret = rxrpc_conn_newmsg(call->conn,call,RXRPC_PACKET_TYPE_ACK,3,diov,GFP_KERNEL,&msg); - if (ret<0) + ret = rxrpc_conn_newmsg(call->conn,call, RXRPC_PACKET_TYPE_ACK, + 3, diov, GFP_KERNEL, &msg); + if (ret < 0) goto out; msg->seq = seq; msg->hdr.seq = htonl(seq); msg->hdr.flags |= RXRPC_SLOW_START_OK; - ret = rxrpc_conn_sendmsg(call->conn,msg); + ret = rxrpc_conn_sendmsg(call->conn, msg); rxrpc_put_message(msg); - if (ret<0) + if (ret < 0) goto out; call->pkt_snd_count++; /* count how many actual ACKs there were at the front */ - for (delta=0; deltaackr_pend_cnt; delta++) - if (call->ackr_array[delta]!=RXRPC_ACK_TYPE_ACK) + for (delta = 0; delta < call->ackr_pend_cnt; delta++) + if (call->ackr_array[delta] != RXRPC_ACK_TYPE_ACK) break; call->ackr_pend_cnt -= delta; /* all ACK'd to this point */ /* crank the ACK window around */ - if (delta==0) { + if (delta == 0) { /* un-ACK'd window */ } else if (delta < RXRPC_CALL_ACK_WINDOW_SIZE) { @@ -528,22 +546,26 @@ static inline int __rxrpc_call_gen_norma /* fully ACK'd window * - just clear the whole thing */ - memset(&call->ackr_array,RXRPC_ACK_TYPE_NACK,sizeof(call->ackr_array)); + memset(&call->ackr_array, + RXRPC_ACK_TYPE_NACK, + sizeof(call->ackr_array)); } /* clear this ACK */ - memset(&call->ackr,0,sizeof(call->ackr)); + memset(&call->ackr, 0, sizeof(call->ackr)); out: - if (!call->app_call_state) printk("___ STATE 0 ___\n"); + if (!call->app_call_state) + printk("___ STATE 0 ___\n"); return ret; } /* end __rxrpc_call_gen_normal_ACK() */ /*****************************************************************************/ /* - * note the reception of a packet in the call's ACK records and generate an appropriate ACK packet - * if necessary - * - returns 0 if packet should be processed, 1 if packet should be ignored and -ve on an error + * note the reception of a packet in the call's ACK records and generate an + * appropriate ACK packet if necessary + * - returns 0 if packet should be processed, 1 if packet should be ignored + * and -ve on an error */ static int rxrpc_call_generate_ACK(struct rxrpc_call *call, struct rxrpc_header *hdr, @@ -555,19 +577,20 @@ static int rxrpc_call_generate_ACK(struc int ret = 0, err; u8 special_ACK, do_ACK, force; - _enter("%p,%p { seq=%d tp=%d fl=%02x }",call,hdr,ntohl(hdr->seq),hdr->type,hdr->flags); + _enter("%p,%p { seq=%d tp=%d fl=%02x }", + call, hdr, ntohl(hdr->seq), hdr->type, hdr->flags); seq = ntohl(hdr->seq); offset = seq - call->ackr_win_bot; do_ACK = RXRPC_ACK_DELAY; special_ACK = 0; - force = (seq==1); + force = (seq == 1); if (call->ackr_high_seq < seq) call->ackr_high_seq = seq; /* deal with generation of obvious special ACKs first */ - if (ack && ack->reason==RXRPC_ACK_PING) { + if (ack && ack->reason == RXRPC_ACK_PING) { special_ACK = RXRPC_ACK_PING_RESPONSE; ret = 1; goto gen_ACK; @@ -594,9 +617,9 @@ static int rxrpc_call_generate_ACK(struc /* okay... it's a normal data packet inside the ACK window */ call->ackr_array[offset] = RXRPC_ACK_TYPE_ACK; - if (offsetackr_pend_cnt) { + if (offset < call->ackr_pend_cnt) { } - else if (offset>call->ackr_pend_cnt) { + else if (offset > call->ackr_pend_cnt) { do_ACK = RXRPC_ACK_OUT_OF_SEQUENCE; call->ackr_pend_cnt = offset; goto gen_ACK; @@ -616,8 +639,8 @@ static int rxrpc_call_generate_ACK(struc } /* re-ACK packets previously received out-of-order */ - for (offset++; offsetackr_array[offset]!=RXRPC_ACK_TYPE_ACK) + for (offset++; offset < RXRPC_CALL_ACK_WINDOW_SIZE; offset++) + if (call->ackr_array[offset] != RXRPC_ACK_TYPE_ACK) break; call->ackr_pend_cnt = offset; @@ -629,55 +652,61 @@ static int rxrpc_call_generate_ACK(struc gen_ACK: _debug("%05lu ACKs pend=%u norm=%s special=%s%s", jiffies - call->cjif, - call->ackr_pend_cnt,rxrpc_acks[do_ACK],rxrpc_acks[special_ACK], + call->ackr_pend_cnt, + rxrpc_acks[do_ACK], + rxrpc_acks[special_ACK], force ? " immediate" : - do_ACK==RXRPC_ACK_REQUESTED ? " merge-req" : + do_ACK == RXRPC_ACK_REQUESTED ? " merge-req" : hdr->flags & RXRPC_LAST_PACKET ? " finalise" : " defer" ); /* send any pending normal ACKs if need be */ - if (call->ackr_pend_cnt>0) { + if (call->ackr_pend_cnt > 0) { /* fill out the appropriate form */ - call->ackr.bufferSpace = htons(RXRPC_CALL_ACK_WINDOW_SIZE); - call->ackr.maxSkew = htons(min(call->ackr_high_seq - seq,65535U)); - call->ackr.firstPacket = htonl(call->ackr_win_bot); - call->ackr.previousPacket = call->ackr_prev_seq; - call->ackr.serial = hdr->serial; - call->ackr.nAcks = call->ackr_pend_cnt; + call->ackr.bufferSpace = htons(RXRPC_CALL_ACK_WINDOW_SIZE); + call->ackr.maxSkew = htons(min(call->ackr_high_seq - seq, + 65535U)); + call->ackr.firstPacket = htonl(call->ackr_win_bot); + call->ackr.previousPacket = call->ackr_prev_seq; + call->ackr.serial = hdr->serial; + call->ackr.nAcks = call->ackr_pend_cnt; - if (do_ACK==RXRPC_ACK_REQUESTED) + if (do_ACK == RXRPC_ACK_REQUESTED) call->ackr.reason = do_ACK; /* generate the ACK immediately if necessary */ if (special_ACK || force) { - err = __rxrpc_call_gen_normal_ACK(call,do_ACK==RXRPC_ACK_DELAY ? 0 : seq); - if (err<0) { + err = __rxrpc_call_gen_normal_ACK( + call, do_ACK == RXRPC_ACK_DELAY ? 0 : seq); + if (err < 0) { ret = err; goto out; } } } - if (call->ackr.reason==RXRPC_ACK_REQUESTED) + if (call->ackr.reason == RXRPC_ACK_REQUESTED) call->ackr_dfr_seq = seq; - /* start the ACK timer if not running if there are any pending deferred ACKs */ - if (call->ackr_pend_cnt>0 && - call->ackr.reason!=RXRPC_ACK_REQUESTED && + /* start the ACK timer if not running if there are any pending deferred + * ACKs */ + if (call->ackr_pend_cnt > 0 && + call->ackr.reason != RXRPC_ACK_REQUESTED && !timer_pending(&call->ackr_dfr_timo) ) { unsigned long timo; timo = rxrpc_call_dfr_ack_timeout + jiffies; - _debug("START ACKR TIMER for cj=%lu",timo-call->cjif); + _debug("START ACKR TIMER for cj=%lu", timo-call->cjif); spin_lock(&call->lock); - mod_timer(&call->ackr_dfr_timo,timo); + mod_timer(&call->ackr_dfr_timo, timo); spin_unlock(&call->lock); } - else if ((call->ackr_pend_cnt==0 || call->ackr.reason==RXRPC_ACK_REQUESTED) && + else if ((call->ackr_pend_cnt == 0 || + call->ackr.reason == RXRPC_ACK_REQUESTED) && timer_pending(&call->ackr_dfr_timo) ) { /* stop timer if no pending ACKs */ @@ -689,21 +718,25 @@ static int rxrpc_call_generate_ACK(struc if (special_ACK) { struct rxrpc_ackpacket ack; struct iovec diov[2]; - u8 acks[1] = { RXRPC_ACK_TYPE_ACK }; + uint8_t acks[1] = { RXRPC_ACK_TYPE_ACK }; /* fill out the appropriate form */ - ack.bufferSpace = htons(RXRPC_CALL_ACK_WINDOW_SIZE); - ack.maxSkew = htons(min(call->ackr_high_seq - seq,65535U)); - ack.firstPacket = htonl(call->ackr_win_bot); - ack.previousPacket = call->ackr_prev_seq; - ack.serial = hdr->serial; - ack.reason = special_ACK; - ack.nAcks = 0; - //ack.nAcks = special_ACK==RXRPC_ACK_OUT_OF_SEQUENCE ? 0 : hdr->seq ? 1 : 0; - - _proto("Rx Sending s-ACK { m=%hu f=#%u p=#%u s=%%%u r=%s n=%u }", - ntohs(ack.maxSkew),ntohl(ack.firstPacket),ntohl(ack.previousPacket), - ntohl(ack.serial),rxrpc_acks[ack.reason],ack.nAcks); + ack.bufferSpace = htons(RXRPC_CALL_ACK_WINDOW_SIZE); + ack.maxSkew = htons(min(call->ackr_high_seq - seq,65535U)); + ack.firstPacket = htonl(call->ackr_win_bot); + ack.previousPacket = call->ackr_prev_seq; + ack.serial = hdr->serial; + ack.reason = special_ACK; + ack.nAcks = 0; + + _proto("Rx Sending s-ACK" + " { m=%hu f=#%u p=#%u s=%%%u r=%s n=%u }", + ntohs(ack.maxSkew), + ntohl(ack.firstPacket), + ntohl(ack.previousPacket), + ntohl(ack.serial), + rxrpc_acks[ack.reason], + ack.nAcks); diov[0].iov_len = sizeof(struct rxrpc_ackpacket); diov[0].iov_base = &ack; @@ -711,11 +744,11 @@ static int rxrpc_call_generate_ACK(struc diov[1].iov_base = acks; /* build and send the message */ - err = rxrpc_conn_newmsg(call->conn,call,RXRPC_PACKET_TYPE_ACK, - hdr->seq ? 2 : 1,diov, + err = rxrpc_conn_newmsg(call->conn,call, RXRPC_PACKET_TYPE_ACK, + hdr->seq ? 2 : 1, diov, GFP_KERNEL, &msg); - if (err<0) { + if (err < 0) { ret = err; goto out; } @@ -724,9 +757,9 @@ static int rxrpc_call_generate_ACK(struc msg->hdr.seq = htonl(seq); msg->hdr.flags |= RXRPC_SLOW_START_OK; - err = rxrpc_conn_sendmsg(call->conn,msg); + err = rxrpc_conn_sendmsg(call->conn, msg); rxrpc_put_message(msg); - if (err<0) { + if (err < 0) { ret = err; goto out; } @@ -737,7 +770,7 @@ static int rxrpc_call_generate_ACK(struc if (hdr->seq) call->ackr_prev_seq = hdr->seq; - _leave(" = %d",ret); + _leave(" = %d", ret); return ret; } /* end rxrpc_call_generate_ACK() */ @@ -748,7 +781,7 @@ static int rxrpc_call_generate_ACK(struc */ void rxrpc_call_do_stuff(struct rxrpc_call *call) { - _enter("%p{flags=%lx}",call,call->flags); + _enter("%p{flags=%lx}", call, call->flags); /* handle packet reception */ if (call->flags & RXRPC_CALL_RCV_PKT) { @@ -761,19 +794,19 @@ void rxrpc_call_do_stuff(struct rxrpc_ca if (call->flags & RXRPC_CALL_ACKS_TIMO) { _debug("- overdue ACK timeout"); call->flags &= ~RXRPC_CALL_ACKS_TIMO; - rxrpc_call_resend(call,call->snd_seq_count); + rxrpc_call_resend(call, call->snd_seq_count); } /* handle lack of reception */ if (call->flags & RXRPC_CALL_RCV_TIMO) { _debug("- reception timeout"); call->flags &= ~RXRPC_CALL_RCV_TIMO; - rxrpc_call_abort(call,-EIO); + rxrpc_call_abort(call, -EIO); } /* handle deferred ACKs */ if (call->flags & RXRPC_CALL_ACKR_TIMO || - (call->ackr.nAcks>0 && call->ackr.reason==RXRPC_ACK_REQUESTED) + (call->ackr.nAcks > 0 && call->ackr.reason == RXRPC_ACK_REQUESTED) ) { _debug("- deferred ACK timeout: cj=%05lu r=%s n=%u", jiffies - call->cjif, @@ -782,9 +815,10 @@ void rxrpc_call_do_stuff(struct rxrpc_ca call->flags &= ~RXRPC_CALL_ACKR_TIMO; - if (call->ackr.nAcks>0 && call->app_call_state!=RXRPC_CSTATE_ERROR) { + if (call->ackr.nAcks > 0 && + call->app_call_state != RXRPC_CSTATE_ERROR) { /* generate ACK */ - __rxrpc_call_gen_normal_ACK(call,call->ackr_dfr_seq); + __rxrpc_call_gen_normal_ACK(call, call->ackr_dfr_seq); call->ackr_dfr_seq = 0; } } @@ -807,10 +841,11 @@ static int __rxrpc_call_abort(struct rxr int ret; u32 _error; - _enter("%p{%08x},%p{%d},%d",conn,ntohl(conn->conn_id),call,ntohl(call->call_id),errno); + _enter("%p{%08x},%p{%d},%d", + conn, ntohl(conn->conn_id), call, ntohl(call->call_id), errno); /* if this call is already aborted, then just wake up any waiters */ - if (call->app_call_state==RXRPC_CSTATE_ERROR) { + if (call->app_call_state == RXRPC_CSTATE_ERROR) { spin_unlock(&call->lock); call->app_error_func(call); _leave(" = 0"); @@ -820,12 +855,12 @@ static int __rxrpc_call_abort(struct rxr rxrpc_get_call(call); /* change the state _with_ the lock still held */ - call->app_call_state = RXRPC_CSTATE_ERROR; - call->app_err_state = RXRPC_ESTATE_LOCAL_ABORT; - call->app_errno = errno; - call->app_mark = RXRPC_APP_MARK_EOF; - call->app_read_buf = NULL; - call->app_async_read = 0; + call->app_call_state = RXRPC_CSTATE_ERROR; + call->app_err_state = RXRPC_ESTATE_LOCAL_ABORT; + call->app_errno = errno; + call->app_mark = RXRPC_APP_MARK_EOF; + call->app_read_buf = NULL; + call->app_async_read = 0; _state(call); @@ -840,22 +875,25 @@ static int __rxrpc_call_abort(struct rxr del_timer_sync(&call->ackr_dfr_timo); if (rxrpc_call_is_ack_pending(call)) - __rxrpc_call_gen_normal_ACK(call,0); + __rxrpc_call_gen_normal_ACK(call, 0); - /* send the abort packet only if we actually traded some other packets */ + /* send the abort packet only if we actually traded some other + * packets */ ret = 0; if (call->pkt_snd_count || call->pkt_rcv_count) { /* actually send the abort */ - _proto("Rx Sending Call ABORT { data=%d }",call->app_abort_code); + _proto("Rx Sending Call ABORT { data=%d }", + call->app_abort_code); _error = htonl(call->app_abort_code); diov[0].iov_len = sizeof(_error); diov[0].iov_base = &_error; - ret = rxrpc_conn_newmsg(conn,call,RXRPC_PACKET_TYPE_ABORT,1,diov,GFP_KERNEL,&msg); - if (ret==0) { - ret = rxrpc_conn_sendmsg(conn,msg); + ret = rxrpc_conn_newmsg(conn, call, RXRPC_PACKET_TYPE_ABORT, + 1, diov, GFP_KERNEL, &msg); + if (ret == 0) { + ret = rxrpc_conn_sendmsg(conn, msg); rxrpc_put_message(msg); } } @@ -865,8 +903,7 @@ static int __rxrpc_call_abort(struct rxr rxrpc_put_call(call); - _leave(" = %d",ret); - + _leave(" = %d", ret); return ret; } /* end __rxrpc_call_abort() */ @@ -879,7 +916,7 @@ int rxrpc_call_abort(struct rxrpc_call * { spin_lock(&call->lock); - return __rxrpc_call_abort(call,error); + return __rxrpc_call_abort(call, error); } /* end rxrpc_call_abort() */ @@ -891,11 +928,12 @@ static void rxrpc_call_receive_packet(st { struct rxrpc_message *msg; struct list_head *_p; - u32 data32; + uint32_t data32; - _enter("%p",call); + _enter("%p", call); - rxrpc_get_call(call); /* must not go away too soon if aborted by app-layer */ + rxrpc_get_call(call); /* must not go away too soon if aborted by + * app-layer */ while (!list_empty(&call->rcv_receiveq)) { /* try to get next packet */ @@ -907,9 +945,10 @@ static void rxrpc_call_receive_packet(st } spin_unlock(&call->lock); - if (!_p) break; + if (!_p) + break; - msg = list_entry(_p,struct rxrpc_message,link); + msg = list_entry(_p, struct rxrpc_message, link); _proto("Rx %05lu Received %s packet (%%%u,#%u,%c%c%c%c%c)", jiffies - call->cjif, @@ -927,9 +966,10 @@ static void rxrpc_call_receive_packet(st /* deal with data packets */ case RXRPC_PACKET_TYPE_DATA: /* ACK the packet if necessary */ - switch (rxrpc_call_generate_ACK(call,&msg->hdr,NULL)) { + switch (rxrpc_call_generate_ACK(call, &msg->hdr, + NULL)) { case 0: /* useful packet */ - rxrpc_call_receive_data_packet(call,msg); + rxrpc_call_receive_data_packet(call, msg); break; case 1: /* duplicate or out-of-window packet */ break; @@ -941,29 +981,30 @@ static void rxrpc_call_receive_packet(st /* deal with ACK packets */ case RXRPC_PACKET_TYPE_ACK: - rxrpc_call_receive_ack_packet(call,msg); + rxrpc_call_receive_ack_packet(call, msg); break; /* deal with abort packets */ case RXRPC_PACKET_TYPE_ABORT: data32 = 0; - if (skb_copy_bits(msg->pkt,msg->offset,&data32,sizeof(data32))<0) { + if (skb_copy_bits(msg->pkt, msg->offset, + &data32, sizeof(data32)) < 0) { printk("Rx Received short ABORT packet\n"); } else { data32 = ntohl(data32); } - _proto("Rx Received Call ABORT { data=%d }",data32); + _proto("Rx Received Call ABORT { data=%d }", data32); spin_lock(&call->lock); - call->app_call_state = RXRPC_CSTATE_ERROR; - call->app_err_state = RXRPC_ESTATE_PEER_ABORT; - call->app_abort_code = data32; - call->app_errno = -ECONNABORTED; - call->app_mark = RXRPC_APP_MARK_EOF; - call->app_read_buf = NULL; - call->app_async_read = 0; + call->app_call_state = RXRPC_CSTATE_ERROR; + call->app_err_state = RXRPC_ESTATE_PEER_ABORT; + call->app_abort_code = data32; + call->app_errno = -ECONNABORTED; + call->app_mark = RXRPC_APP_MARK_EOF; + call->app_read_buf = NULL; + call->app_async_read = 0; /* ask the app to translate the error code */ call->app_aemap_func(call); @@ -974,7 +1015,8 @@ static void rxrpc_call_receive_packet(st default: /* deal with other packet types */ - _proto("Rx Unsupported packet type %u (#%u)",msg->hdr.type,msg->seq); + _proto("Rx Unsupported packet type %u (#%u)", + msg->hdr.type, msg->seq); break; } @@ -990,14 +1032,18 @@ static void rxrpc_call_receive_packet(st /* * process next data packet * - as the next data packet arrives: - * - it is queued on app_readyq _if_ it is the next one expected (app_ready_seq+1) + * - it is queued on app_readyq _if_ it is the next one expected + * (app_ready_seq+1) * - it is queued on app_unreadyq _if_ it is not the next one expected - * - if a packet placed on app_readyq completely fills a hole leading up to the first packet - * on app_unreadyq, then packets now in sequence are tranferred to app_readyq - * - the application layer can only see packets on app_readyq (app_ready_qty bytes) + * - if a packet placed on app_readyq completely fills a hole leading up to + * the first packet on app_unreadyq, then packets now in sequence are + * tranferred to app_readyq + * - the application layer can only see packets on app_readyq + * (app_ready_qty bytes) * - the application layer is prodded every time a new packet arrives */ -static void rxrpc_call_receive_data_packet(struct rxrpc_call *call, struct rxrpc_message *msg) +static void rxrpc_call_receive_data_packet(struct rxrpc_call *call, + struct rxrpc_message *msg) { const struct rxrpc_operation *optbl, *op; struct rxrpc_message *pmsg; @@ -1005,22 +1051,23 @@ static void rxrpc_call_receive_data_pack int ret, lo, hi, rmtimo; u32 opid; - _enter("%p{%u},%p{%u}",call,ntohl(call->call_id),msg,msg->seq); + _enter("%p{%u},%p{%u}", call, ntohl(call->call_id), msg, msg->seq); rxrpc_get_message(msg); - /* add to the unready queue if we'd have to create a hole in the ready queue otherwise */ - if (msg->seq != call->app_ready_seq+1) { - _debug("Call add packet %d to unreadyq",msg->seq); + /* add to the unready queue if we'd have to create a hole in the ready + * queue otherwise */ + if (msg->seq != call->app_ready_seq + 1) { + _debug("Call add packet %d to unreadyq", msg->seq); /* insert in seq order */ list_for_each(_p,&call->app_unreadyq) { - pmsg = list_entry(_p,struct rxrpc_message,link); - if (pmsg->seq>msg->seq) + pmsg = list_entry(_p, struct rxrpc_message, link); + if (pmsg->seq > msg->seq) break; } - list_add_tail(&msg->link,_p); + list_add_tail(&msg->link, _p); _leave(" [unreadyq]"); return; @@ -1028,33 +1075,35 @@ static void rxrpc_call_receive_data_pack /* next in sequence - simply append into the call's ready queue */ _debug("Call add packet %d to readyq (+%Zd => %Zd bytes)", - msg->seq,msg->dsize,call->app_ready_qty); + msg->seq, msg->dsize, call->app_ready_qty); spin_lock(&call->lock); call->app_ready_seq = msg->seq; call->app_ready_qty += msg->dsize; - list_add_tail(&msg->link,&call->app_readyq); + list_add_tail(&msg->link, &call->app_readyq); /* move unready packets to the readyq if we got rid of a hole */ while (!list_empty(&call->app_unreadyq)) { - pmsg = list_entry(call->app_unreadyq.next,struct rxrpc_message,link); + pmsg = list_entry(call->app_unreadyq.next, + struct rxrpc_message, link); - if (pmsg->seq != call->app_ready_seq+1) + if (pmsg->seq != call->app_ready_seq + 1) break; /* next in sequence - just move list-to-list */ _debug("Call transfer packet %d to readyq (+%Zd => %Zd bytes)", - pmsg->seq,pmsg->dsize,call->app_ready_qty); + pmsg->seq, pmsg->dsize, call->app_ready_qty); call->app_ready_seq = pmsg->seq; call->app_ready_qty += pmsg->dsize; list_del_init(&pmsg->link); - list_add_tail(&pmsg->link,&call->app_readyq); + list_add_tail(&pmsg->link, &call->app_readyq); } /* see if we've got the last packet yet */ if (!list_empty(&call->app_readyq)) { - pmsg = list_entry(call->app_readyq.prev,struct rxrpc_message,link); + pmsg = list_entry(call->app_readyq.prev, + struct rxrpc_message, link); if (pmsg->hdr.flags & RXRPC_LAST_PACKET) { call->app_last_rcv = 1; _debug("Last packet on readyq"); @@ -1068,25 +1117,27 @@ static void rxrpc_call_receive_data_pack _leave(" [error]"); return; - /* extract the operation ID from an incoming call if that's not yet been done */ + /* extract the operation ID from an incoming call if that's not + * yet been done */ case RXRPC_CSTATE_SRVR_RCV_OPID: spin_unlock(&call->lock); /* handle as yet insufficient data for the operation ID */ - if (call->app_ready_qty<4) { + if (call->app_ready_qty < 4) { if (call->app_last_rcv) - rxrpc_call_abort(call,-EINVAL); /* trouble - last packet seen */ + /* trouble - last packet seen */ + rxrpc_call_abort(call, -EINVAL); _leave(""); return; } /* pull the operation ID out of the buffer */ - ret = rxrpc_call_read_data(call,&opid,sizeof(opid),0); - if (ret<0) { - printk("Unexpected error from read-data: %d\n",ret); - if (call->app_call_state!=RXRPC_CSTATE_ERROR) - rxrpc_call_abort(call,ret); + ret = rxrpc_call_read_data(call, &opid, sizeof(opid), 0); + if (ret < 0) { + printk("Unexpected error from read-data: %d\n", ret); + if (call->app_call_state != RXRPC_CSTATE_ERROR) + rxrpc_call_abort(call, ret); _leave(""); return; } @@ -1097,38 +1148,42 @@ static void rxrpc_call_receive_data_pack lo = 0; hi = call->conn->service->ops_end - optbl; - while (loapp_opcode==op->id) + if (call->app_opcode == op->id) goto found_op; - if (call->app_opcode>op->id) - lo = mid+1; + if (call->app_opcode > op->id) + lo = mid + 1; else hi = mid; } /* search failed */ kproto("Rx Client requested operation %d from %s service", - call->app_opcode,call->conn->service->name); - rxrpc_call_abort(call,-EINVAL); + call->app_opcode, call->conn->service->name); + rxrpc_call_abort(call, -EINVAL); _leave(" [inval]"); return; found_op: _proto("Rx Client requested operation %s from %s service", - op->name,call->conn->service->name); + op->name, call->conn->service->name); - /* we're now waiting for the argument block (unless the call was aborted) */ + /* we're now waiting for the argument block (unless the call + * was aborted) */ spin_lock(&call->lock); - if (call->app_call_state==RXRPC_CSTATE_SRVR_RCV_OPID || - call->app_call_state==RXRPC_CSTATE_SRVR_SND_REPLY) { + if (call->app_call_state == RXRPC_CSTATE_SRVR_RCV_OPID || + call->app_call_state == RXRPC_CSTATE_SRVR_SND_REPLY) { if (!call->app_last_rcv) - call->app_call_state = RXRPC_CSTATE_SRVR_RCV_ARGS; - else if (call->app_ready_qty>0) - call->app_call_state = RXRPC_CSTATE_SRVR_GOT_ARGS; + call->app_call_state = + RXRPC_CSTATE_SRVR_RCV_ARGS; + else if (call->app_ready_qty > 0) + call->app_call_state = + RXRPC_CSTATE_SRVR_GOT_ARGS; else - call->app_call_state = RXRPC_CSTATE_SRVR_SND_REPLY; + call->app_call_state = + RXRPC_CSTATE_SRVR_SND_REPLY; call->app_mark = op->asize; call->app_user = op->user; } @@ -1166,20 +1221,21 @@ static void rxrpc_call_receive_data_pack default: /* deal with data reception in an unexpected state */ - printk("Unexpected state [[[ %u ]]]\n",call->app_call_state); - __rxrpc_call_abort(call,-EBADMSG); + printk("Unexpected state [[[ %u ]]]\n", call->app_call_state); + __rxrpc_call_abort(call, -EBADMSG); _leave(""); return; } - if (call->app_call_state==RXRPC_CSTATE_CLNT_RCV_REPLY && call->app_last_rcv) + if (call->app_call_state == RXRPC_CSTATE_CLNT_RCV_REPLY && + call->app_last_rcv) BUG(); /* otherwise just invoke the data function whenever we can satisfy its desire for more * data */ _proto("Rx Received Op Data: st=%u qty=%Zu mk=%Zu%s", - call->app_call_state,call->app_ready_qty,call->app_mark, + call->app_call_state, call->app_ready_qty, call->app_mark, call->app_last_rcv ? " last-rcvd" : ""); spin_lock(&call->lock); @@ -1196,8 +1252,8 @@ static void rxrpc_call_receive_data_pack case -ECONNABORTED: spin_unlock(&call->lock); break; - default: - __rxrpc_call_abort(call,ret); + default: + __rxrpc_call_abort(call, ret); break; } @@ -1211,17 +1267,18 @@ static void rxrpc_call_receive_data_pack /* * received an ACK packet */ -static void rxrpc_call_receive_ack_packet(struct rxrpc_call *call, struct rxrpc_message *msg) +static void rxrpc_call_receive_ack_packet(struct rxrpc_call *call, + struct rxrpc_message *msg) { struct rxrpc_ackpacket ack; rxrpc_serial_t serial; rxrpc_seq_t seq; int ret; - _enter("%p{%u},%p{%u}",call,ntohl(call->call_id),msg,msg->seq); + _enter("%p{%u},%p{%u}", call, ntohl(call->call_id), msg, msg->seq); /* extract the basic ACK record */ - if (skb_copy_bits(msg->pkt,msg->offset,&ack,sizeof(ack))<0) { + if (skb_copy_bits(msg->pkt, msg->offset, &ack, sizeof(ack)) < 0) { printk("Rx Received short ACK packet\n"); return; } @@ -1241,10 +1298,14 @@ static void rxrpc_call_receive_ack_packe call->ackr.nAcks ); - /* check the other side isn't ACK'ing a sequence number I haven't sent yet */ - if (ack.nAcks>0 && (seq > call->snd_seq_count || seq+ack.nAcks-1 > call->snd_seq_count)) { - printk("Received ACK (#%u-#%u) for unsent packet\n",seq,seq+ack.nAcks-1); - rxrpc_call_abort(call,-EINVAL); + /* check the other side isn't ACK'ing a sequence number I haven't sent + * yet */ + if (ack.nAcks > 0 && + (seq > call->snd_seq_count || + seq + ack.nAcks - 1 > call->snd_seq_count)) { + printk("Received ACK (#%u-#%u) for unsent packet\n", + seq, seq + ack.nAcks - 1); + rxrpc_call_abort(call, -EINVAL); _leave(""); return; } @@ -1255,7 +1316,7 @@ static void rxrpc_call_receive_ack_packe /* find the prompting packet */ spin_lock(&call->lock); - if (call->snd_ping && call->snd_ping->hdr.serial==serial) { + if (call->snd_ping && call->snd_ping->hdr.serial == serial) { /* it was a ping packet */ rttmsg = call->snd_ping; call->snd_ping = NULL; @@ -1263,22 +1324,28 @@ static void rxrpc_call_receive_ack_packe if (rttmsg) { rttmsg->rttdone = 1; - rxrpc_peer_calculate_rtt(call->conn->peer,rttmsg,msg); + rxrpc_peer_calculate_rtt(call->conn->peer, + rttmsg, msg); rxrpc_put_message(rttmsg); } } else { struct list_head *_p; - /* it ought to be a data packet - look in the pending ACK list */ - list_for_each(_p,&call->acks_pendq) { - rttmsg = list_entry(_p,struct rxrpc_message,link); - if (rttmsg->hdr.serial==serial) { + /* it ought to be a data packet - look in the pending + * ACK list */ + list_for_each(_p, &call->acks_pendq) { + rttmsg = list_entry(_p, struct rxrpc_message, + link); + if (rttmsg->hdr.serial == serial) { if (rttmsg->rttdone) - break; /* never do RTT twice without resending */ + /* never do RTT twice without + * resending */ + break; rttmsg->rttdone = 1; - rxrpc_peer_calculate_rtt(call->conn->peer,rttmsg,msg); + rxrpc_peer_calculate_rtt( + call->conn->peer, rttmsg, msg); break; } } @@ -1287,24 +1354,25 @@ static void rxrpc_call_receive_ack_packe } switch (ack.reason) { - /* deal with negative/positive acknowledgement of data packets */ + /* deal with negative/positive acknowledgement of data + * packets */ case RXRPC_ACK_REQUESTED: case RXRPC_ACK_DELAY: case RXRPC_ACK_IDLE: - rxrpc_call_definitively_ACK(call,seq-1); + rxrpc_call_definitively_ACK(call, seq - 1); case RXRPC_ACK_DUPLICATE: case RXRPC_ACK_OUT_OF_SEQUENCE: case RXRPC_ACK_EXCEEDS_WINDOW: call->snd_resend_cnt = 0; - ret = rxrpc_call_record_ACK(call,msg,seq,ack.nAcks); - if (ret<0) - rxrpc_call_abort(call,ret); + ret = rxrpc_call_record_ACK(call, msg, seq, ack.nAcks); + if (ret < 0) + rxrpc_call_abort(call, ret); break; /* respond to ping packets immediately */ case RXRPC_ACK_PING: - rxrpc_call_generate_ACK(call,&msg->hdr,&ack); + rxrpc_call_generate_ACK(call, &msg->hdr, &ack); break; /* only record RTT on ping response packets */ @@ -1312,10 +1380,12 @@ static void rxrpc_call_receive_ack_packe if (call->snd_ping) { struct rxrpc_message *rttmsg; - /* only do RTT stuff if the response matches the retained ping */ + /* only do RTT stuff if the response matches the + * retained ping */ rttmsg = NULL; spin_lock(&call->lock); - if (call->snd_ping && call->snd_ping->hdr.serial==ack.serial) { + if (call->snd_ping && + call->snd_ping->hdr.serial == ack.serial) { rttmsg = call->snd_ping; call->snd_ping = NULL; } @@ -1323,14 +1393,15 @@ static void rxrpc_call_receive_ack_packe if (rttmsg) { rttmsg->rttdone = 1; - rxrpc_peer_calculate_rtt(call->conn->peer,rttmsg,msg); + rxrpc_peer_calculate_rtt(call->conn->peer, + rttmsg, msg); rxrpc_put_message(rttmsg); } } break; default: - printk("Unsupported ACK reason %u\n",ack.reason); + printk("Unsupported ACK reason %u\n", ack.reason); break; } @@ -1339,38 +1410,44 @@ static void rxrpc_call_receive_ack_packe /*****************************************************************************/ /* - * record definitive ACKs for all messages up to and including the one with the 'highest' seq + * record definitive ACKs for all messages up to and including the one with the + * 'highest' seq */ -static void rxrpc_call_definitively_ACK(struct rxrpc_call *call, rxrpc_seq_t highest) +static void rxrpc_call_definitively_ACK(struct rxrpc_call *call, + rxrpc_seq_t highest) { struct rxrpc_message *msg; int now_complete; - _enter("%p{ads=%u},%u",call,call->acks_dftv_seq,highest); + _enter("%p{ads=%u},%u", call, call->acks_dftv_seq, highest); - while (call->acks_dftv_seqacks_dftv_seq < highest) { call->acks_dftv_seq++; - _proto("Definitive ACK on packet #%u",call->acks_dftv_seq); + _proto("Definitive ACK on packet #%u", call->acks_dftv_seq); - /* discard those at front of queue until message with highest ACK is found */ + /* discard those at front of queue until message with highest + * ACK is found */ spin_lock(&call->lock); msg = NULL; if (!list_empty(&call->acks_pendq)) { - msg = list_entry(call->acks_pendq.next,struct rxrpc_message,link); + msg = list_entry(call->acks_pendq.next, + struct rxrpc_message, link); list_del_init(&msg->link); /* dequeue */ - if (msg->state==RXRPC_MSG_SENT) + if (msg->state == RXRPC_MSG_SENT) call->acks_pend_cnt--; } spin_unlock(&call->lock); /* insanity check */ if (!msg) - panic("%s(): acks_pendq unexpectedly empty\n",__FUNCTION__); + panic("%s(): acks_pendq unexpectedly empty\n", + __FUNCTION__); - if (msg->seq!=call->acks_dftv_seq) - panic("%s(): Packet #%u expected at front of acks_pendq (#%u found)\n", - __FUNCTION__,call->acks_dftv_seq,msg->seq); + if (msg->seq != call->acks_dftv_seq) + panic("%s(): Packet #%u expected at front of acks_pendq" + " (#%u found)\n", + __FUNCTION__, call->acks_dftv_seq, msg->seq); /* discard the message */ msg->state = RXRPC_MSG_DONE; @@ -1380,8 +1457,8 @@ static void rxrpc_call_definitively_ACK( /* if all sent packets are definitively ACK'd then prod any sleepers just in case */ now_complete = 0; spin_lock(&call->lock); - if (call->acks_dftv_seq==call->snd_seq_count) { - if (call->app_call_state!=RXRPC_CSTATE_COMPLETE) { + if (call->acks_dftv_seq == call->snd_seq_count) { + if (call->app_call_state != RXRPC_CSTATE_COMPLETE) { call->app_call_state = RXRPC_CSTATE_COMPLETE; _state(call); now_complete = 1; @@ -1417,13 +1494,15 @@ static int rxrpc_call_record_ACK(struct u8 acks[16]; _enter("%p{apc=%u ads=%u},%p,%u,%Zu", - call,call->acks_pend_cnt,call->acks_dftv_seq,msg,seq,count); + call, call->acks_pend_cnt, call->acks_dftv_seq, + msg, seq, count); - /* handle re-ACK'ing of definitively ACK'd packets (may be out-of-order ACKs) */ - if (seq<=call->acks_dftv_seq) { + /* handle re-ACK'ing of definitively ACK'd packets (may be out-of-order + * ACKs) */ + if (seq <= call->acks_dftv_seq) { unsigned delta = call->acks_dftv_seq - seq; - if (count<=delta) { + if (count <= delta) { _leave(" = 0 [all definitively ACK'd]"); return 0; } @@ -1435,14 +1514,14 @@ static int rxrpc_call_record_ACK(struct highest = seq + count - 1; resend = 0; - while (count>0) { + while (count > 0) { /* extract up to 16 ACK slots at a time */ - chunk = min(count,sizeof(acks)); + chunk = min(count, sizeof(acks)); count -= chunk; - memset(acks,2,sizeof(acks)); + memset(acks, 2, sizeof(acks)); - if (skb_copy_bits(msg->pkt,msg->offset,&acks,chunk)<0) { + if (skb_copy_bits(msg->pkt, msg->offset, &acks, chunk) < 0) { printk("Rx Received short ACK packet\n"); _leave(" = -EINVAL"); return -EINVAL; @@ -1450,7 +1529,7 @@ static int rxrpc_call_record_ACK(struct msg->offset += chunk; /* check that the ACK set is valid */ - for (ix=0; ixacks_pend_cnt ); - /* mark the packets in the ACK queue as being provisionally ACK'd */ + /* mark the packets in the ACK queue as being provisionally + * ACK'd */ ix = 0; spin_lock(&call->lock); /* find the first packet ACK'd/NAK'd here */ - list_for_each(_p,&call->acks_pendq) { - dmsg = list_entry(_p,struct rxrpc_message,link); - if (dmsg->seq==seq) + list_for_each(_p, &call->acks_pendq) { + dmsg = list_entry(_p, struct rxrpc_message, link); + if (dmsg->seq == seq) goto found_first; - _debug("- %u: skipping #%u",ix,dmsg->seq); + _debug("- %u: skipping #%u", ix, dmsg->seq); } goto bad_queue; found_first: do { _debug("- %u: processing #%u (%c) apc=%u", - ix,dmsg->seq,_acktype[acks[ix]],call->acks_pend_cnt); + ix, dmsg->seq, _acktype[acks[ix]], + call->acks_pend_cnt); - if (acks[ix]==RXRPC_ACK_TYPE_ACK) { - if (dmsg->state==RXRPC_MSG_SENT) call->acks_pend_cnt--; + if (acks[ix] == RXRPC_ACK_TYPE_ACK) { + if (dmsg->state == RXRPC_MSG_SENT) + call->acks_pend_cnt--; dmsg->state = RXRPC_MSG_ACKED; } else { - if (dmsg->state==RXRPC_MSG_ACKED) call->acks_pend_cnt++; + if (dmsg->state == RXRPC_MSG_ACKED) + call->acks_pend_cnt++; dmsg->state = RXRPC_MSG_SENT; } ix++; seq++; _p = dmsg->link.next; - dmsg = list_entry(_p,struct rxrpc_message,link); - } while(ixacks_pendq && dmsg->seq==seq); + dmsg = list_entry(_p, struct rxrpc_message, link); + } while(ix < chunk && + _p != &call->acks_pendq && + dmsg->seq == seq); - if (ixlock); } if (resend) - rxrpc_call_resend(call,highest); + rxrpc_call_resend(call, highest); - /* if all packets are provisionally ACK'd, then wake up anyone who's waiting for that */ + /* if all packets are provisionally ACK'd, then wake up anyone who's + * waiting for that */ now_complete = 0; spin_lock(&call->lock); - if (call->acks_pend_cnt==0) { - if (call->app_call_state==RXRPC_CSTATE_SRVR_RCV_FINAL_ACK) { + if (call->acks_pend_cnt == 0) { + if (call->app_call_state == RXRPC_CSTATE_SRVR_RCV_FINAL_ACK) { call->app_call_state = RXRPC_CSTATE_COMPLETE; _state(call); } @@ -1547,19 +1635,21 @@ static int rxrpc_call_record_ACK(struct call->app_attn_func(call); } - _leave(" = 0 (apc=%u)",call->acks_pend_cnt); + _leave(" = 0 (apc=%u)", call->acks_pend_cnt); return 0; bad_queue: - panic("%s(): acks_pendq in bad state (packet #%u absent)\n",__FUNCTION__,seq); + panic("%s(): acks_pendq in bad state (packet #%u absent)\n", + __FUNCTION__, seq); } /* end rxrpc_call_record_ACK() */ /*****************************************************************************/ /* * transfer data from the ready packet queue to the asynchronous read buffer - * - since this func is the only one going to look at packets queued on app_readyq, we don't need - * a lock to modify or access them, only to modify the queue pointers + * - since this func is the only one going to look at packets queued on + * app_readyq, we don't need a lock to modify or access them, only to modify + * the queue pointers * - called with call->lock held * - the buffer must be in kernel space * - returns: @@ -1575,16 +1665,20 @@ static int __rxrpc_call_read_data(struct int ret; _enter("%p{as=%d buf=%p qty=%Zu/%Zu}", - call,call->app_async_read,call->app_read_buf,call->app_ready_qty,call->app_mark); + call, + call->app_async_read, call->app_read_buf, + call->app_ready_qty, call->app_mark); /* check the state */ switch (call->app_call_state) { case RXRPC_CSTATE_SRVR_RCV_ARGS: case RXRPC_CSTATE_CLNT_RCV_REPLY: if (call->app_last_rcv) { - printk("%s(%p,%p,%Zd): Inconsistent call state (%s, last pkt)", - __FUNCTION__,call,call->app_read_buf,call->app_mark, - rxrpc_call_states[call->app_call_state]); + printk("%s(%p,%p,%Zd):" + " Inconsistent call state (%s, last pkt)", + __FUNCTION__, + call, call->app_read_buf, call->app_mark, + rxrpc_call_states[call->app_call_state]); BUG(); } break; @@ -1596,9 +1690,11 @@ static int __rxrpc_call_read_data(struct case RXRPC_CSTATE_SRVR_SND_REPLY: if (!call->app_last_rcv) { - printk("%s(%p,%p,%Zd): Inconsistent call state (%s, not last pkt)", - __FUNCTION__,call,call->app_read_buf,call->app_mark, - rxrpc_call_states[call->app_call_state]); + printk("%s(%p,%p,%Zd):" + " Inconsistent call state (%s, not last pkt)", + __FUNCTION__, + call, call->app_read_buf, call->app_mark, + rxrpc_call_states[call->app_call_state]); BUG(); } _debug("Trying to read data from call in SND_REPLY state"); @@ -1609,13 +1705,14 @@ static int __rxrpc_call_read_data(struct return -ECONNABORTED; default: - printk("reading in unexpected state [[[ %u ]]]\n",call->app_call_state); + printk("reading in unexpected state [[[ %u ]]]\n", + call->app_call_state); BUG(); } /* handle the case of not having an async buffer */ if (!call->app_async_read) { - if (call->app_mark==RXRPC_APP_MARK_EOF) { + if (call->app_mark == RXRPC_APP_MARK_EOF) { ret = call->app_last_rcv ? 0 : -EAGAIN; } else { @@ -1628,28 +1725,33 @@ static int __rxrpc_call_read_data(struct } } - _leave(" = %d [no buf]",ret); + _leave(" = %d [no buf]", ret); return 0; } - while (!list_empty(&call->app_readyq) && call->app_mark>0) { - msg = list_entry(call->app_readyq.next,struct rxrpc_message,link); + while (!list_empty(&call->app_readyq) && call->app_mark > 0) { + msg = list_entry(call->app_readyq.next, + struct rxrpc_message, link); /* drag as much data as we need out of this packet */ - qty = min(call->app_mark,msg->dsize); + qty = min(call->app_mark, msg->dsize); - _debug("reading %Zu from skb=%p off=%lu",qty,msg->pkt,msg->offset); + _debug("reading %Zu from skb=%p off=%lu", + qty, msg->pkt, msg->offset); if (call->app_read_buf) - if (skb_copy_bits(msg->pkt,msg->offset,call->app_read_buf,qty)<0) - panic("%s: Failed to copy data from packet: (%p,%p,%Zd)", - __FUNCTION__,call,call->app_read_buf,qty); + if (skb_copy_bits(msg->pkt, msg->offset, + call->app_read_buf, qty) < 0) + panic("%s: Failed to copy data from packet:" + " (%p,%p,%Zd)", + __FUNCTION__, + call, call->app_read_buf, qty); /* if that packet is now empty, discard it */ call->app_ready_qty -= qty; msg->dsize -= qty; - if (msg->dsize==0) { + if (msg->dsize == 0) { list_del_init(&msg->link); rxrpc_put_message(msg); } @@ -1658,10 +1760,11 @@ static int __rxrpc_call_read_data(struct } call->app_mark -= qty; - if (call->app_read_buf) call->app_read_buf += qty; + if (call->app_read_buf) + call->app_read_buf += qty; } - if (call->app_mark==0) { + if (call->app_mark == 0) { call->app_async_read = 0; call->app_mark = RXRPC_APP_MARK_EOF; call->app_read_buf = NULL; @@ -1695,7 +1798,8 @@ static int __rxrpc_call_read_data(struct } if (call->app_last_rcv) { - _debug("Insufficient data (%Zu/%Zu)",call->app_ready_qty,call->app_mark); + _debug("Insufficient data (%Zu/%Zu)", + call->app_ready_qty, call->app_mark); call->app_async_read = 0; call->app_mark = RXRPC_APP_MARK_EOF; call->app_read_buf = NULL; @@ -1710,22 +1814,26 @@ static int __rxrpc_call_read_data(struct /*****************************************************************************/ /* - * attempt to read the specified amount of data from the call's ready queue into the buffer - * provided - * - since this func is the only one going to look at packets queued on app_readyq, we don't need - * a lock to modify or access them, only to modify the queue pointers + * attempt to read the specified amount of data from the call's ready queue + * into the buffer provided + * - since this func is the only one going to look at packets queued on + * app_readyq, we don't need a lock to modify or access them, only to modify + * the queue pointers * - if the buffer pointer is NULL, then data is merely drained, not copied - * - if flags&RXRPC_CALL_READ_BLOCK, then the function will wait until there is enough data or an - * error will be generated - * - note that the caller must have added the calling task to the call's wait queue beforehand - * - if flags&RXRPC_CALL_READ_ALL, then an error will be generated if this function doesn't read - * all available data + * - if flags&RXRPC_CALL_READ_BLOCK, then the function will wait until there is + * enough data or an error will be generated + * - note that the caller must have added the calling task to the call's wait + * queue beforehand + * - if flags&RXRPC_CALL_READ_ALL, then an error will be generated if this + * function doesn't read all available data */ -int rxrpc_call_read_data(struct rxrpc_call *call, void *buffer, size_t size, int flags) +int rxrpc_call_read_data(struct rxrpc_call *call, + void *buffer, size_t size, int flags) { int ret; - _enter("%p{arq=%Zu},%p,%Zd,%x",call,call->app_ready_qty,buffer,size,flags); + _enter("%p{arq=%Zu},%p,%Zd,%x", + call, call->app_ready_qty, buffer, size, flags); spin_lock(&call->lock); @@ -1744,9 +1852,10 @@ int rxrpc_call_read_data(struct rxrpc_ca ret = __rxrpc_call_read_data(call); switch (ret) { case 0: - if (flags&RXRPC_CALL_READ_ALL && (!call->app_last_rcv || call->app_ready_qty>0)) { + if (flags & RXRPC_CALL_READ_ALL && + (!call->app_last_rcv || call->app_ready_qty > 0)) { _leave(" = -EBADMSG"); - __rxrpc_call_abort(call,-EBADMSG); + __rxrpc_call_abort(call, -EBADMSG); return -EBADMSG; } @@ -1757,18 +1866,18 @@ int rxrpc_call_read_data(struct rxrpc_ca case -ECONNABORTED: spin_unlock(&call->lock); - _leave(" = %d [aborted]",ret); + _leave(" = %d [aborted]", ret); return ret; - default: - __rxrpc_call_abort(call,ret); - _leave(" = %d",ret); + default: + __rxrpc_call_abort(call, ret); + _leave(" = %d", ret); return ret; case -EAGAIN: spin_unlock(&call->lock); - if (!(flags&RXRPC_CALL_READ_BLOCK)) { + if (!(flags & RXRPC_CALL_READ_BLOCK)) { _leave(" = -EAGAIN"); return -EAGAIN; } @@ -1789,7 +1898,7 @@ int rxrpc_call_read_data(struct rxrpc_ca return -EINTR; } - if (call->app_call_state==RXRPC_CSTATE_ERROR) { + if (call->app_call_state == RXRPC_CSTATE_ERROR) { _leave(" = -ECONNABORTED"); return -ECONNABORTED; } @@ -1804,8 +1913,8 @@ int rxrpc_call_read_data(struct rxrpc_ca /* * write data to a call * - the data may not be sent immediately if it doesn't fill a buffer - * - if we can't queue all the data for buffering now, siov[] will have been adjusted to take - * account of what has been sent + * - if we can't queue all the data for buffering now, siov[] will have been + * adjusted to take account of what has been sent */ int rxrpc_call_write_data(struct rxrpc_call *call, size_t sioc, @@ -1821,7 +1930,9 @@ int rxrpc_call_write_data(struct rxrpc_c char *buf; int ret; - _enter("%p,%Zu,%p,%02x,%x,%d,%p",call,sioc,siov,rxhdr_flags,alloc_flags,dup_data,size_sent); + _enter("%p,%Zu,%p,%02x,%x,%d,%p", + call, sioc, siov, rxhdr_flags, alloc_flags, dup_data, + size_sent); *size_sent = 0; size = 0; @@ -1840,8 +1951,9 @@ int rxrpc_call_write_data(struct rxrpc_c /* calculate how much data we've been given */ sptr = siov; - for (; sioc>0; sptr++, sioc--) { - if (!sptr->iov_len) continue; + for (; sioc > 0; sptr++, sioc--) { + if (!sptr->iov_len) + continue; if (!sptr->iov_base) goto out; @@ -1849,27 +1961,30 @@ int rxrpc_call_write_data(struct rxrpc_c size += sptr->iov_len; } - _debug("- size=%Zu mtu=%Zu",size,call->conn->mtu_size); + _debug("- size=%Zu mtu=%Zu", size, call->conn->mtu_size); do { /* make sure there's a message under construction */ if (!call->snd_nextmsg) { /* no - allocate a message with no data yet attached */ - ret = rxrpc_conn_newmsg(call->conn,call,RXRPC_PACKET_TYPE_DATA, - 0,NULL,alloc_flags,&call->snd_nextmsg); - if (ret<0) + ret = rxrpc_conn_newmsg(call->conn, call, + RXRPC_PACKET_TYPE_DATA, + 0, NULL, alloc_flags, + &call->snd_nextmsg); + if (ret < 0) goto out; - _debug("- allocated new message [ds=%Zu]",call->snd_nextmsg->dsize); + _debug("- allocated new message [ds=%Zu]", + call->snd_nextmsg->dsize); } msg = call->snd_nextmsg; msg->hdr.flags |= rxhdr_flags; /* deal with zero-length terminal packet */ - if (size==0) { + if (size == 0) { if (rxhdr_flags & RXRPC_LAST_PACKET) { ret = rxrpc_call_flush(call); - if (ret<0) + if (ret < 0) goto out; } break; @@ -1877,24 +1992,27 @@ int rxrpc_call_write_data(struct rxrpc_c /* work out how much space current packet has available */ space = call->conn->mtu_size - msg->dsize; - chunk = min(space,size); + chunk = min(space, size); - _debug("- [before] space=%Zu chunk=%Zu",space,chunk); + _debug("- [before] space=%Zu chunk=%Zu", space, chunk); while (!siov->iov_len) siov++; - /* if we are going to have to duplicate the data then coalesce it too */ + /* if we are going to have to duplicate the data then coalesce + * it too */ if (dup_data) { /* don't allocate more that 1 page at a time */ - if (chunk>PAGE_SIZE) + if (chunk > PAGE_SIZE) chunk = PAGE_SIZE; /* allocate a data buffer and attach to the message */ - buf = kmalloc(chunk,alloc_flags); + buf = kmalloc(chunk, alloc_flags); if (unlikely(!buf)) { - if (msg->dsize==sizeof(struct rxrpc_header)) { - /* discard an empty msg and wind back the seq counter */ + if (msg->dsize == + sizeof(struct rxrpc_header)) { + /* discard an empty msg and wind back + * the seq counter */ rxrpc_put_message(msg); call->snd_nextmsg = NULL; call->snd_seq_count--; @@ -1905,7 +2023,7 @@ int rxrpc_call_write_data(struct rxrpc_c } tmp = msg->dcount++; - set_bit(tmp,&msg->dfree); + set_bit(tmp, &msg->dfree); msg->data[tmp].iov_base = buf; msg->data[tmp].iov_len = chunk; msg->dsize += chunk; @@ -1913,9 +2031,9 @@ int rxrpc_call_write_data(struct rxrpc_c size -= chunk; /* load the buffer with data */ - while (chunk>0) { - tmp = min(chunk,siov->iov_len); - memcpy(buf,siov->iov_base,tmp); + while (chunk > 0) { + tmp = min(chunk, siov->iov_len); + memcpy(buf, siov->iov_base, tmp); buf += tmp; siov->iov_base += tmp; siov->iov_len -= tmp; @@ -1926,7 +2044,8 @@ int rxrpc_call_write_data(struct rxrpc_c } else { /* we want to attach the supplied buffers directly */ - while (chunk>0 && msg->dcount 0 && + msg->dcount < RXRPC_MSG_MAX_IOCS) { tmp = msg->dcount++; msg->data[tmp].iov_base = siov->iov_base; msg->data[tmp].iov_len = siov->iov_len; @@ -1938,20 +2057,20 @@ int rxrpc_call_write_data(struct rxrpc_c } } - _debug("- [loaded] chunk=%Zu size=%Zu",chunk,size); + _debug("- [loaded] chunk=%Zu size=%Zu", chunk, size); /* dispatch the message when full, final or requesting ACK */ - if (msg->dsize>=call->conn->mtu_size || rxhdr_flags) { + if (msg->dsize >= call->conn->mtu_size || rxhdr_flags) { ret = rxrpc_call_flush(call); - if (ret<0) + if (ret < 0) goto out; } - } while(size>0); + } while(size > 0); ret = 0; out: - _leave(" = %d (%Zd queued, %Zd rem)",ret,*size_sent,size); + _leave(" = %d (%Zd queued, %Zd rem)", ret, *size_sent, size); return ret; } /* end rxrpc_call_write_data() */ @@ -1965,7 +2084,7 @@ int rxrpc_call_flush(struct rxrpc_call * struct rxrpc_message *msg; int ret = 0; - _enter("%p",call); + _enter("%p", call); rxrpc_get_call(call); @@ -1983,25 +2102,28 @@ int rxrpc_call_flush(struct rxrpc_call * } _proto("Sending DATA message { ds=%Zu dc=%u df=%02lu }", - msg->dsize,msg->dcount,msg->dfree); + msg->dsize, msg->dcount, msg->dfree); /* queue and adjust call state */ spin_lock(&call->lock); - list_add_tail(&msg->link,&call->acks_pendq); + list_add_tail(&msg->link, &call->acks_pendq); - /* decide what to do depending on current state and if this is the last packet */ + /* decide what to do depending on current state and if this is + * the last packet */ ret = -EINVAL; switch (call->app_call_state) { case RXRPC_CSTATE_SRVR_SND_REPLY: if (msg->hdr.flags & RXRPC_LAST_PACKET) { - call->app_call_state = RXRPC_CSTATE_SRVR_RCV_FINAL_ACK; + call->app_call_state = + RXRPC_CSTATE_SRVR_RCV_FINAL_ACK; _state(call); } break; case RXRPC_CSTATE_CLNT_SND_ARGS: if (msg->hdr.flags & RXRPC_LAST_PACKET) { - call->app_call_state = RXRPC_CSTATE_CLNT_RCV_REPLY; + call->app_call_state = + RXRPC_CSTATE_CLNT_RCV_REPLY; _state(call); } break; @@ -2016,19 +2138,20 @@ int rxrpc_call_flush(struct rxrpc_call * call->acks_pend_cnt++; mod_timer(&call->acks_timeout, - __rxrpc_rtt_based_timeout(call,rxrpc_call_acks_timeout)); + __rxrpc_rtt_based_timeout(call, + rxrpc_call_acks_timeout)); spin_unlock(&call->lock); - ret = rxrpc_conn_sendmsg(call->conn,msg); - if (ret==0) + ret = rxrpc_conn_sendmsg(call->conn, msg); + if (ret == 0) call->pkt_snd_count++; } out: rxrpc_put_call(call); - _leave(" = %d",ret); + _leave(" = %d", ret); return ret; } /* end rxrpc_call_flush() */ @@ -2043,14 +2166,16 @@ static void rxrpc_call_resend(struct rxr struct list_head *_p; rxrpc_seq_t seq = 0; - _enter("%p,%u",call,highest); + _enter("%p,%u", call, highest); _proto("Rx Resend required"); /* handle too many resends */ - if (call->snd_resend_cnt>=rxrpc_call_max_resend) { - _debug("Aborting due to too many resends (rcv=%d)",call->pkt_rcv_count); - rxrpc_call_abort(call,call->pkt_rcv_count>0?-EIO:-ETIMEDOUT); + if (call->snd_resend_cnt >= rxrpc_call_max_resend) { + _debug("Aborting due to too many resends (rcv=%d)", + call->pkt_rcv_count); + rxrpc_call_abort(call, + call->pkt_rcv_count > 0 ? -EIO : -ETIMEDOUT); _leave(""); return; } @@ -2059,35 +2184,38 @@ static void rxrpc_call_resend(struct rxr call->snd_resend_cnt++; for (;;) { /* determine which the next packet we might need to ACK is */ - if (seq<=call->acks_dftv_seq) + if (seq <= call->acks_dftv_seq) seq = call->acks_dftv_seq; seq++; - if (seq>highest) + if (seq > highest) break; /* look for the packet in the pending-ACK queue */ - list_for_each(_p,&call->acks_pendq) { - msg = list_entry(_p,struct rxrpc_message,link); - if (msg->seq==seq) + list_for_each(_p, &call->acks_pendq) { + msg = list_entry(_p, struct rxrpc_message, link); + if (msg->seq == seq) goto found_msg; } - panic("%s(%p,%d): Inconsistent pending-ACK queue (ds=%u sc=%u sq=%u)\n", - __FUNCTION__,call,highest,call->acks_dftv_seq,call->snd_seq_count,seq); + panic("%s(%p,%d):" + " Inconsistent pending-ACK queue (ds=%u sc=%u sq=%u)\n", + __FUNCTION__, call, highest, + call->acks_dftv_seq, call->snd_seq_count, seq); found_msg: - if (msg->state!=RXRPC_MSG_SENT) + if (msg->state != RXRPC_MSG_SENT) continue; /* only un-ACK'd packets */ rxrpc_get_message(msg); spin_unlock(&call->lock); - /* send each message again (and ignore any errors we might incur) */ + /* send each message again (and ignore any errors we might + * incur) */ _proto("Resending DATA message { ds=%Zu dc=%u df=%02lu }", - msg->dsize,msg->dcount,msg->dfree); + msg->dsize, msg->dcount, msg->dfree); - if (rxrpc_conn_sendmsg(call->conn,msg)==0) + if (rxrpc_conn_sendmsg(call->conn, msg) == 0) call->pkt_snd_count++; rxrpc_put_message(msg); @@ -2096,7 +2224,8 @@ static void rxrpc_call_resend(struct rxr } /* reset the timeout */ - mod_timer(&call->acks_timeout,__rxrpc_rtt_based_timeout(call,rxrpc_call_acks_timeout)); + mod_timer(&call->acks_timeout, + __rxrpc_rtt_based_timeout(call, rxrpc_call_acks_timeout)); spin_unlock(&call->lock); @@ -2109,10 +2238,10 @@ static void rxrpc_call_resend(struct rxr */ void rxrpc_call_handle_error(struct rxrpc_call *call, int local, int errno) { - _enter("%p{%u},%d",call,ntohl(call->call_id),errno); + _enter("%p{%u},%d", call, ntohl(call->call_id), errno); /* if this call is already aborted, then just wake up any waiters */ - if (call->app_call_state==RXRPC_CSTATE_ERROR) { + if (call->app_call_state == RXRPC_CSTATE_ERROR) { call->app_error_func(call); } else { @@ -2124,10 +2253,10 @@ void rxrpc_call_handle_error(struct rxrp call->app_err_state = RXRPC_ESTATE_LOCAL_ERROR; else call->app_err_state = RXRPC_ESTATE_REMOTE_ERROR; - call->app_errno = errno; - call->app_mark = RXRPC_APP_MARK_EOF; - call->app_read_buf = NULL; - call->app_async_read = 0; + call->app_errno = errno; + call->app_mark = RXRPC_APP_MARK_EOF; + call->app_read_buf = NULL; + call->app_async_read = 0; /* map the error */ call->app_aemap_func(call); diff -prauN linux-2.6.0-test5/net/rxrpc/connection.c wli-2.6.0-test5-bk12-25/net/rxrpc/connection.c --- linux-2.6.0-test5/net/rxrpc/connection.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/rxrpc/connection.c 2003-09-25 19:16:18.000000000 -0700 @@ -28,18 +28,20 @@ __RXACCT_DECL(atomic_t rxrpc_connection_ LIST_HEAD(rxrpc_conns); DECLARE_RWSEM(rxrpc_conns_sem); +unsigned long rxrpc_conn_timeout = 60 * 60; static void __rxrpc_conn_timeout(rxrpc_timer_t *timer) { - struct rxrpc_connection *conn = list_entry(timer,struct rxrpc_connection,timeout); + struct rxrpc_connection *conn = + list_entry(timer, struct rxrpc_connection, timeout); - _debug("Rx CONN TIMEOUT [%p{u=%d}]",conn,atomic_read(&conn->usage)); + _debug("Rx CONN TIMEOUT [%p{u=%d}]", conn, atomic_read(&conn->usage)); rxrpc_conn_do_timeout(conn); } static const struct rxrpc_timer_ops rxrpc_conn_timer_ops = { - .timed_out = __rxrpc_conn_timeout, + timed_out: __rxrpc_conn_timeout, }; /*****************************************************************************/ @@ -54,19 +56,20 @@ static inline int __rxrpc_create_connect _enter("%p",peer); /* allocate and initialise a connection record */ - conn = kmalloc(sizeof(struct rxrpc_connection),GFP_KERNEL); + conn = kmalloc(sizeof(struct rxrpc_connection), GFP_KERNEL); if (!conn) { _leave(" = -ENOMEM"); return -ENOMEM; } - memset(conn,0,sizeof(struct rxrpc_connection)); - atomic_set(&conn->usage,1); + memset(conn, 0, sizeof(struct rxrpc_connection)); + atomic_set(&conn->usage, 1); INIT_LIST_HEAD(&conn->link); + INIT_LIST_HEAD(&conn->id_link); init_waitqueue_head(&conn->chanwait); spin_lock_init(&conn->lock); - rxrpc_timer_init(&conn->timeout,&rxrpc_conn_timer_ops); + rxrpc_timer_init(&conn->timeout, &rxrpc_conn_timer_ops); do_gettimeofday(&conn->atime); conn->mtu_size = 1024; @@ -75,7 +78,7 @@ static inline int __rxrpc_create_connect __RXACCT(atomic_inc(&rxrpc_connection_count)); *_conn = conn; - _leave(" = 0 (%p)",conn); + _leave(" = 0 (%p)", conn); return 0; } /* end __rxrpc_create_connection() */ @@ -85,61 +88,123 @@ static inline int __rxrpc_create_connect * create a new connection record for outgoing connections */ int rxrpc_create_connection(struct rxrpc_transport *trans, - u16 port, - u32 addr, - unsigned short service_id, + uint16_t port, + uint32_t addr, + uint16_t service_id, void *security, struct rxrpc_connection **_conn) { - struct rxrpc_connection *conn; + struct rxrpc_connection *candidate, *conn; struct rxrpc_peer *peer; + struct list_head *_p; + uint32_t connid; int ret; - _enter("%p{%hu},%u,%hu",trans,trans->port,ntohs(port),service_id); + _enter("%p{%hu},%u,%hu", trans, trans->port, ntohs(port), service_id); /* get a peer record */ - ret = rxrpc_peer_lookup(trans,addr,&peer); - if (ret<0) { - _leave(" = %d",ret); + ret = rxrpc_peer_lookup(trans, addr, &peer); + if (ret < 0) { + _leave(" = %d", ret); return ret; } /* allocate and initialise a connection record */ - ret = __rxrpc_create_connection(peer,&conn); - if (ret<0) { + ret = __rxrpc_create_connection(peer, &candidate); + if (ret < 0) { rxrpc_put_peer(peer); - _leave(" = %d",ret); + _leave(" = %d", ret); return ret; } /* fill in the specific bits */ - conn->addr.sin_family = AF_INET; - conn->addr.sin_port = port; - conn->addr.sin_addr.s_addr = addr; - - conn->in_epoch = rxrpc_epoch; - conn->out_epoch = rxrpc_epoch; - conn->in_clientflag = 0; - conn->out_clientflag = RXRPC_CLIENT_INITIATED; - conn->conn_id = htonl((unsigned long) conn & RXRPC_CIDMASK); - conn->service_id = htons(service_id); + candidate->addr.sin_family = AF_INET; + candidate->addr.sin_port = port; + candidate->addr.sin_addr.s_addr = addr; + + candidate->in_epoch = rxrpc_epoch; + candidate->out_epoch = rxrpc_epoch; + candidate->in_clientflag = 0; + candidate->out_clientflag = RXRPC_CLIENT_INITIATED; + candidate->service_id = htons(service_id); + + /* invent a unique connection ID */ + write_lock(&peer->conn_idlock); + + try_next_id: + connid = htonl(peer->conn_idcounter & RXRPC_CIDMASK); + peer->conn_idcounter += RXRPC_MAXCALLS; + + list_for_each(_p, &peer->conn_idlist) { + conn = list_entry(_p, struct rxrpc_connection, id_link); + if (connid == conn->conn_id) + goto try_next_id; + if (connid > conn->conn_id) + break; + } + + _debug("selected candidate conn ID %x.%u", + ntohl(peer->addr.s_addr), ntohl(connid)); + + candidate->conn_id = connid; + list_add_tail(&candidate->id_link, _p); + + write_unlock(&peer->conn_idlock); /* attach to peer */ - conn->peer = peer; + candidate->peer = peer; write_lock(&peer->conn_lock); - list_add_tail(&conn->link,&peer->conn_active); + + /* search the peer's transport graveyard list */ + spin_lock(&peer->conn_gylock); + list_for_each(_p, &peer->conn_graveyard) { + conn = list_entry(_p, struct rxrpc_connection, link); + if (conn->addr.sin_port == candidate->addr.sin_port && + conn->security_ix == candidate->security_ix && + conn->service_id == candidate->service_id && + conn->in_clientflag == 0) + goto found_in_graveyard; + } + spin_unlock(&peer->conn_gylock); + + /* pick the new candidate */ + _debug("created connection: {%08x} [out]", htonl(candidate->conn_id)); atomic_inc(&peer->conn_count); + conn = candidate; + candidate = NULL; + + make_active: + list_add_tail(&conn->link, &peer->conn_active); write_unlock(&peer->conn_lock); - down_write(&rxrpc_conns_sem); - list_add_tail(&conn->proc_link,&rxrpc_conns); - up_write(&rxrpc_conns_sem); + if (candidate) { + write_lock(&peer->conn_idlock); + list_del(&candidate->id_link); + write_unlock(&peer->conn_idlock); + + __RXACCT(atomic_dec(&rxrpc_connection_count)); + kfree(candidate); + } + else { + down_write(&rxrpc_conns_sem); + list_add_tail(&conn->proc_link, &rxrpc_conns); + up_write(&rxrpc_conns_sem); + } *_conn = conn; - _leave(" = 0 (%p)",conn); + _leave(" = 0 (%p)", conn); return 0; + + /* handle resurrecting a connection from the graveyard */ + found_in_graveyard: + _debug("resurrecting connection: {%08x} [out]", htonl(conn->conn_id)); + rxrpc_get_connection(conn); + rxrpc_krxtimod_del_timer(&conn->timeout); + list_del_init(&conn->link); + spin_unlock(&peer->conn_gylock); + goto make_active; } /* end rxrpc_create_connection() */ /*****************************************************************************/ @@ -159,7 +224,10 @@ int rxrpc_connection_lookup(struct rxrpc u8 x_clflag; _enter("%p{{%hu}},%u,%hu", - peer,peer->trans->port,ntohs(msg->pkt->h.uh->source),ntohs(msg->hdr.serviceId)); + peer, + peer->trans->port, + ntohs(msg->pkt->h.uh->source), + ntohs(msg->hdr.serviceId)); x_port = msg->pkt->h.uh->source; x_epoch = msg->hdr.epoch; @@ -170,8 +238,8 @@ int rxrpc_connection_lookup(struct rxrpc /* [common case] search the transport's active list first */ read_lock(&peer->conn_lock); - list_for_each(_p,&peer->conn_active) { - conn = list_entry(_p,struct rxrpc_connection,link); + list_for_each(_p, &peer->conn_active) { + conn = list_entry(_p, struct rxrpc_connection, link); if (conn->addr.sin_port == x_port && conn->in_epoch == x_epoch && conn->conn_id == x_connid && @@ -187,9 +255,9 @@ int rxrpc_connection_lookup(struct rxrpc * - only examine the graveyard for an outbound connection */ if (x_clflag) { - ret = __rxrpc_create_connection(peer,&candidate); - if (ret<0) { - _leave(" = %d",ret); + ret = __rxrpc_create_connection(peer, &candidate); + if (ret < 0) { + _leave(" = %d", ret); return ret; } @@ -206,10 +274,11 @@ int rxrpc_connection_lookup(struct rxrpc candidate->security_ix = x_secix; } - /* search the active list again, just in case it appeared whilst we were busy */ + /* search the active list again, just in case it appeared whilst we + * were busy */ write_lock(&peer->conn_lock); - list_for_each(_p,&peer->conn_active) { - conn = list_entry(_p,struct rxrpc_connection,link); + list_for_each(_p, &peer->conn_active) { + conn = list_entry(_p, struct rxrpc_connection, link); if (conn->addr.sin_port == x_port && conn->in_epoch == x_epoch && conn->conn_id == x_connid && @@ -221,8 +290,8 @@ int rxrpc_connection_lookup(struct rxrpc /* search the transport's graveyard list */ spin_lock(&peer->conn_gylock); - list_for_each(_p,&peer->conn_graveyard) { - conn = list_entry(_p,struct rxrpc_connection,link); + list_for_each(_p, &peer->conn_graveyard) { + conn = list_entry(_p, struct rxrpc_connection, link); if (conn->addr.sin_port == x_port && conn->in_epoch == x_epoch && conn->conn_id == x_connid && @@ -241,6 +310,7 @@ int rxrpc_connection_lookup(struct rxrpc } /* we can now add the new candidate to the list */ + _debug("created connection: {%08x} [in]", htonl(candidate->conn_id)); rxrpc_get_peer(peer); conn = candidate; candidate = NULL; @@ -248,25 +318,29 @@ int rxrpc_connection_lookup(struct rxrpc fresh = 1; make_active: - list_add_tail(&conn->link,&peer->conn_active); + list_add_tail(&conn->link, &peer->conn_active); success_uwfree: write_unlock(&peer->conn_lock); if (candidate) { + write_lock(&peer->conn_idlock); + list_del(&candidate->id_link); + write_unlock(&peer->conn_idlock); + __RXACCT(atomic_dec(&rxrpc_connection_count)); kfree(candidate); } if (fresh) { down_write(&rxrpc_conns_sem); - list_add_tail(&conn->proc_link,&rxrpc_conns); + list_add_tail(&conn->proc_link, &rxrpc_conns); up_write(&rxrpc_conns_sem); } success: *_conn = conn; - _leave(" = 0 (%p)",conn); + _leave(" = 0 (%p)", conn); return 0; /* handle the connection being found in the active list straight off */ @@ -277,6 +351,7 @@ int rxrpc_connection_lookup(struct rxrpc /* handle resurrecting a connection from the graveyard */ found_in_graveyard: + _debug("resurrecting connection: {%08x} [in]", htonl(conn->conn_id)); rxrpc_get_peer(peer); rxrpc_get_connection(conn); rxrpc_krxtimod_del_timer(&conn->timeout); @@ -284,7 +359,8 @@ int rxrpc_connection_lookup(struct rxrpc spin_unlock(&peer->conn_gylock); goto make_active; - /* handle finding the connection on the second time through the active list */ + /* handle finding the connection on the second time through the active + * list */ found_active_second_chance: rxrpc_get_connection(conn); goto success_uwfree; @@ -294,19 +370,26 @@ int rxrpc_connection_lookup(struct rxrpc /*****************************************************************************/ /* * finish using a connection record - * - it will be transferred to the peer's connection graveyard when refcount reaches 0 + * - it will be transferred to the peer's connection graveyard when refcount + * reaches 0 */ void rxrpc_put_connection(struct rxrpc_connection *conn) { - struct rxrpc_peer *peer = conn->peer; + struct rxrpc_peer *peer; + + if (!conn) + return; + + _enter("%p{u=%d p=%hu}", + conn, atomic_read(&conn->usage), ntohs(conn->addr.sin_port)); - _enter("%p{u=%d p=%hu}",conn,atomic_read(&conn->usage),ntohs(conn->addr.sin_port)); + peer = conn->peer; + spin_lock(&peer->conn_gylock); /* sanity check */ - if (atomic_read(&conn->usage)<=0) + if (atomic_read(&conn->usage) <= 0) BUG(); - spin_lock(&peer->conn_gylock); if (likely(!atomic_dec_and_test(&conn->usage))) { spin_unlock(&peer->conn_gylock); _leave(""); @@ -314,11 +397,11 @@ void rxrpc_put_connection(struct rxrpc_c } /* move to graveyard queue */ + _debug("burying connection: {%08x}", htonl(conn->conn_id)); list_del(&conn->link); - list_add_tail(&conn->link,&peer->conn_graveyard); + list_add_tail(&conn->link, &peer->conn_graveyard); - /* discard in 100 secs */ - rxrpc_krxtimod_add_timer(&conn->timeout,20*HZ); + rxrpc_krxtimod_add_timer(&conn->timeout, rxrpc_conn_timeout * HZ); spin_unlock(&peer->conn_gylock); @@ -335,16 +418,17 @@ void rxrpc_conn_do_timeout(struct rxrpc_ { struct rxrpc_peer *peer; - _enter("%p{u=%d p=%hu}",conn,atomic_read(&conn->usage),ntohs(conn->addr.sin_port)); + _enter("%p{u=%d p=%hu}", + conn, atomic_read(&conn->usage), ntohs(conn->addr.sin_port)); peer = conn->peer; - if (atomic_read(&conn->usage)<0) + if (atomic_read(&conn->usage) < 0) BUG(); /* remove from graveyard if still dead */ spin_lock(&peer->conn_gylock); - if (atomic_read(&conn->usage)==0) { + if (atomic_read(&conn->usage) == 0) { list_del_init(&conn->link); } else { @@ -357,12 +441,17 @@ void rxrpc_conn_do_timeout(struct rxrpc_ return; /* resurrected */ } - _debug("--- Destroying Connection %p ---",conn); + _debug("--- Destroying Connection %p{%08x} ---", + conn, htonl(conn->conn_id)); down_write(&rxrpc_conns_sem); list_del(&conn->proc_link); up_write(&rxrpc_conns_sem); + write_lock(&peer->conn_idlock); + list_del(&conn->id_link); + write_unlock(&peer->conn_idlock); + __RXACCT(atomic_dec(&rxrpc_connection_count)); kfree(conn); @@ -379,12 +468,12 @@ void rxrpc_conn_do_timeout(struct rxrpc_ */ void rxrpc_conn_clearall(struct rxrpc_peer *peer) { - DECLARE_WAITQUEUE(myself,current); + DECLARE_WAITQUEUE(myself, current); struct rxrpc_connection *conn; int err; - _enter("%p",peer); + _enter("%p", peer); /* there shouldn't be any active conns remaining */ if (!list_empty(&peer->conn_active)) @@ -393,11 +482,12 @@ void rxrpc_conn_clearall(struct rxrpc_pe /* manually timeout all conns in the graveyard */ spin_lock(&peer->conn_gylock); while (!list_empty(&peer->conn_graveyard)) { - conn = list_entry(peer->conn_graveyard.next,struct rxrpc_connection,link); + conn = list_entry(peer->conn_graveyard.next, + struct rxrpc_connection, link); err = rxrpc_krxtimod_del_timer(&conn->timeout); spin_unlock(&peer->conn_gylock); - if (err==0) + if (err == 0) rxrpc_conn_do_timeout(conn); spin_lock(&peer->conn_gylock); @@ -406,27 +496,27 @@ void rxrpc_conn_clearall(struct rxrpc_pe /* wait for the the conn graveyard to be completely cleared */ set_current_state(TASK_UNINTERRUPTIBLE); - add_wait_queue(&peer->conn_gy_waitq,&myself); + add_wait_queue(&peer->conn_gy_waitq, &myself); - while (atomic_read(&peer->conn_count)!=0) { + while (atomic_read(&peer->conn_count) != 0) { schedule(); set_current_state(TASK_UNINTERRUPTIBLE); } - remove_wait_queue(&peer->conn_gy_waitq,&myself); + remove_wait_queue(&peer->conn_gy_waitq, &myself); set_current_state(TASK_RUNNING); _leave(""); - } /* end rxrpc_conn_clearall() */ /*****************************************************************************/ /* - * allocate and prepare a message for sending out through the transport endpoint + * allocate and prepare a message for sending out through the transport + * endpoint */ int rxrpc_conn_newmsg(struct rxrpc_connection *conn, struct rxrpc_call *call, - u8 type, + uint8_t type, int dcount, struct iovec diov[], int alloc_flags, @@ -435,21 +525,21 @@ int rxrpc_conn_newmsg(struct rxrpc_conne struct rxrpc_message *msg; int loop; - _enter("%p{%d},%p,%u",conn,ntohs(conn->addr.sin_port),call,type); + _enter("%p{%d},%p,%u", conn, ntohs(conn->addr.sin_port), call, type); - if (dcount>3) { + if (dcount > 3) { _leave(" = -EINVAL"); return -EINVAL; } - msg = kmalloc(sizeof(struct rxrpc_message),alloc_flags); + msg = kmalloc(sizeof(struct rxrpc_message), alloc_flags); if (!msg) { _leave(" = -ENOMEM"); return -ENOMEM; } - memset(msg,0,sizeof(*msg)); - atomic_set(&msg->usage,1); + memset(msg, 0, sizeof(*msg)); + atomic_set(&msg->usage, 1); INIT_LIST_HEAD(&msg->link); @@ -471,7 +561,8 @@ int rxrpc_conn_newmsg(struct rxrpc_conne msg->hdr.seq = htonl(msg->seq); break; case RXRPC_PACKET_TYPE_ACK: - /* ACK sequence numbers are complicated. The following may be wrong: + /* ACK sequence numbers are complicated. The following + * may be wrong: * - jumbo packet ACKs should have a seq number * - normal ACKs should not */ @@ -485,7 +576,7 @@ int rxrpc_conn_newmsg(struct rxrpc_conne msg->data[0].iov_len = sizeof(msg->hdr); msg->data[0].iov_base = &msg->hdr; - for (loop=0; loopdsize += diov[loop].iov_len; msg->data[loop+1].iov_len = diov[loop].iov_len; msg->data[loop+1].iov_base = diov[loop].iov_base; @@ -493,7 +584,7 @@ int rxrpc_conn_newmsg(struct rxrpc_conne __RXACCT(atomic_inc(&rxrpc_message_count)); *_msg = msg; - _leave(" = 0 (%p) #%d",msg,atomic_read(&rxrpc_message_count)); + _leave(" = 0 (%p) #%d", msg, atomic_read(&rxrpc_message_count)); return 0; } /* end rxrpc_conn_newmsg() */ @@ -505,13 +596,14 @@ void __rxrpc_put_message(struct rxrpc_me { int loop; - _enter("%p #%d",msg,atomic_read(&rxrpc_message_count)); + _enter("%p #%d", msg, atomic_read(&rxrpc_message_count)); - if (msg->pkt) kfree_skb(msg->pkt); - if (msg->conn) rxrpc_put_connection(msg->conn); + if (msg->pkt) + kfree_skb(msg->pkt); + rxrpc_put_connection(msg->conn); - for (loop=0; loop<8; loop++) - if (test_bit(loop,&msg->dfree)) + for (loop = 0; loop < 8; loop++) + if (test_bit(loop, &msg->dfree)) kfree(msg->data[loop].iov_base); __RXACCT(atomic_dec(&rxrpc_message_count)); @@ -524,13 +616,14 @@ void __rxrpc_put_message(struct rxrpc_me /* * send a message out through the transport endpoint */ -int rxrpc_conn_sendmsg(struct rxrpc_connection *conn, struct rxrpc_message *msg) +int rxrpc_conn_sendmsg(struct rxrpc_connection *conn, + struct rxrpc_message *msg) { struct msghdr msghdr; mm_segment_t oldfs; int ret; - _enter("%p{%d}",conn,ntohs(conn->addr.sin_port)); + _enter("%p{%d}", conn, ntohs(conn->addr.sin_port)); /* fill in some fields in the header */ spin_lock(&conn->lock); @@ -545,7 +638,7 @@ int rxrpc_conn_sendmsg(struct rxrpc_conn msghdr.msg_iovlen = msg->dcount; msghdr.msg_control = NULL; msghdr.msg_controllen = 0; - msghdr.msg_flags = MSG_CONFIRM|MSG_DONTWAIT; + msghdr.msg_flags = MSG_CONFIRM | MSG_DONTWAIT; _net("Sending message type %d of %Zd bytes to %08x:%d", msg->hdr.type, @@ -556,10 +649,10 @@ int rxrpc_conn_sendmsg(struct rxrpc_conn /* send the message */ oldfs = get_fs(); set_fs(KERNEL_DS); - ret = sock_sendmsg(conn->trans->socket,&msghdr,msg->dsize); + ret = sock_sendmsg(conn->trans->socket, &msghdr, msg->dsize); set_fs(oldfs); - if (ret<0) { + if (ret < 0) { msg->state = RXRPC_MSG_ERROR; } else { @@ -572,7 +665,7 @@ int rxrpc_conn_sendmsg(struct rxrpc_conn spin_unlock(&conn->lock); } - _leave(" = %d",ret); + _leave(" = %d", ret); return ret; } /* end rxrpc_conn_sendmsg() */ @@ -590,7 +683,7 @@ int rxrpc_conn_receive_call_packet(struc unsigned cix, seq; int ret = 0; - _enter("%p,%p,%p",conn,call,msg); + _enter("%p,%p,%p", conn, call, msg); if (!call) { cix = ntohl(msg->hdr.cid) & RXRPC_CHANNELMASK; @@ -600,7 +693,7 @@ int rxrpc_conn_receive_call_packet(struc if (!call || call->call_id != msg->hdr.callNumber) { spin_unlock(&conn->lock); - rxrpc_trans_immediate_abort(conn->trans,msg,-ENOENT); + rxrpc_trans_immediate_abort(conn->trans, msg, -ENOENT); goto out; } else { @@ -622,19 +715,21 @@ int rxrpc_conn_receive_call_packet(struc call->pkt_rcv_count++; if (msg->pkt->dst && msg->pkt->dst->dev) - conn->peer->if_mtu = msg->pkt->dst->dev->mtu - msg->pkt->dst->dev->hard_header_len; + conn->peer->if_mtu = + msg->pkt->dst->dev->mtu - + msg->pkt->dst->dev->hard_header_len; /* queue on the call in seq order */ rxrpc_get_message(msg); seq = msg->seq; spin_lock(&call->lock); - list_for_each(_p,&call->rcv_receiveq) { - pmsg = list_entry(_p,struct rxrpc_message,link); - if (pmsg->seq>seq) + list_for_each(_p, &call->rcv_receiveq) { + pmsg = list_entry(_p, struct rxrpc_message, link); + if (pmsg->seq > seq) break; } - list_add_tail(&msg->link,_p); + list_add_tail(&msg->link, _p); /* reset the activity timeout */ call->flags |= RXRPC_CALL_RCV_PKT; @@ -646,8 +741,7 @@ int rxrpc_conn_receive_call_packet(struc rxrpc_put_call(call); out: - _leave(" = %d",ret); - + _leave(" = %d", ret); return ret; } /* end rxrpc_conn_receive_call_packet() */ @@ -655,18 +749,19 @@ int rxrpc_conn_receive_call_packet(struc /* * handle an ICMP error being applied to a connection */ -void rxrpc_conn_handle_error(struct rxrpc_connection *conn, int local, int errno) +void rxrpc_conn_handle_error(struct rxrpc_connection *conn, + int local, int errno) { struct rxrpc_call *calls[4]; int loop; - _enter("%p{%d},%d",conn,ntohs(conn->addr.sin_port),errno); + _enter("%p{%d},%d", conn, ntohs(conn->addr.sin_port), errno); /* get a ref to all my calls in one go */ - memset(calls,0,sizeof(calls)); + memset(calls, 0, sizeof(calls)); spin_lock(&conn->lock); - for (loop=3; loop>=0; loop--) { + for (loop = 3; loop >= 0; loop--) { if (conn->channels[loop]) { calls[loop] = conn->channels[loop]; rxrpc_get_call(calls[loop]); @@ -676,9 +771,9 @@ void rxrpc_conn_handle_error(struct rxrp spin_unlock(&conn->lock); /* now kick them all */ - for (loop=3; loop>=0; loop--) { + for (loop = 3; loop >= 0; loop--) { if (calls[loop]) { - rxrpc_call_handle_error(calls[loop],local,errno); + rxrpc_call_handle_error(calls[loop], local, errno); rxrpc_put_call(calls[loop]); } } diff -prauN linux-2.6.0-test5/net/rxrpc/internal.h wli-2.6.0-test5-bk12-25/net/rxrpc/internal.h --- linux-2.6.0-test5/net/rxrpc/internal.h 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/rxrpc/internal.h 2003-09-25 19:16:18.000000000 -0700 @@ -55,7 +55,7 @@ static inline void rxrpc_discard_my_sign siginfo_t sinfo; spin_lock_irq(¤t->sighand->siglock); - dequeue_signal(current,¤t->blocked,&sinfo); + dequeue_signal(current, ¤t->blocked, &sinfo); spin_unlock_irq(¤t->sighand->siglock); } } @@ -71,6 +71,7 @@ extern struct rw_semaphore rxrpc_calls_s */ extern struct list_head rxrpc_conns; extern struct rw_semaphore rxrpc_conns_sem; +extern unsigned long rxrpc_conn_timeout; extern void rxrpc_conn_do_timeout(struct rxrpc_connection *conn); extern void rxrpc_conn_clearall(struct rxrpc_peer *peer); @@ -80,6 +81,7 @@ extern void rxrpc_conn_clearall(struct r */ extern struct list_head rxrpc_peers; extern struct rw_semaphore rxrpc_peers_sem; +extern unsigned long rxrpc_peer_timeout; extern void rxrpc_peer_calculate_rtt(struct rxrpc_peer *peer, struct rxrpc_message *msg, diff -prauN linux-2.6.0-test5/net/rxrpc/krxiod.c wli-2.6.0-test5-bk12-25/net/rxrpc/krxiod.c --- linux-2.6.0-test5/net/rxrpc/krxiod.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/rxrpc/krxiod.c 2003-09-25 19:16:18.000000000 -0700 @@ -44,6 +44,12 @@ static int rxrpc_krxiod(void *arg) daemonize("krxiod"); + /* only certain signals are of interest */ + spin_lock_irq(¤t->sighand->siglock); + siginitsetinv(¤t->blocked, 0); + recalc_sigpending(); + spin_unlock_irq(¤t->sighand->siglock); + /* loop around waiting for work to do */ do { /* wait for work or to be told to exit */ @@ -51,7 +57,7 @@ static int rxrpc_krxiod(void *arg) if (!atomic_read(&rxrpc_krxiod_qcount)) { set_current_state(TASK_INTERRUPTIBLE); - add_wait_queue(&rxrpc_krxiod_sleepq,&krxiod); + add_wait_queue(&rxrpc_krxiod_sleepq, &krxiod); for (;;) { set_current_state(TASK_INTERRUPTIBLE); @@ -63,7 +69,7 @@ static int rxrpc_krxiod(void *arg) schedule(); } - remove_wait_queue(&rxrpc_krxiod_sleepq,&krxiod); + remove_wait_queue(&rxrpc_krxiod_sleepq, &krxiod); set_current_state(TASK_RUNNING); } _debug("### End Wait"); @@ -78,12 +84,16 @@ static int rxrpc_krxiod(void *arg) spin_lock_irq(&rxrpc_krxiod_transportq_lock); if (!list_empty(&rxrpc_krxiod_transportq)) { - trans = list_entry(rxrpc_krxiod_transportq.next, - struct rxrpc_transport,krxiodq_link); + trans = list_entry( + rxrpc_krxiod_transportq.next, + struct rxrpc_transport, + krxiodq_link); + list_del_init(&trans->krxiodq_link); atomic_dec(&rxrpc_krxiod_qcount); - /* make sure it hasn't gone away and doesn't go away */ + /* make sure it hasn't gone away and doesn't go + * away */ if (atomic_read(&trans->usage)>0) rxrpc_get_transport(trans); else @@ -106,13 +116,16 @@ static int rxrpc_krxiod(void *arg) if (!list_empty(&rxrpc_krxiod_callq)) { call = list_entry(rxrpc_krxiod_callq.next, - struct rxrpc_call,rcv_krxiodq_lk); + struct rxrpc_call, + rcv_krxiodq_lk); list_del_init(&call->rcv_krxiodq_lk); atomic_dec(&rxrpc_krxiod_qcount); - /* make sure it hasn't gone away and doesn't go away */ - if (atomic_read(&call->usage)>0) { - _debug("@@@ KRXIOD Begin Attend Call %p",call); + /* make sure it hasn't gone away and doesn't go + * away */ + if (atomic_read(&call->usage) > 0) { + _debug("@@@ KRXIOD" + " Begin Attend Call %p",call); rxrpc_get_call(call); } else { @@ -125,7 +138,7 @@ static int rxrpc_krxiod(void *arg) if (call) { rxrpc_call_do_stuff(call); rxrpc_put_call(call); - _debug("@@@ KRXIOD End Attend Call %p",call); + _debug("@@@ KRXIOD End Attend Call %p", call); } } @@ -137,7 +150,7 @@ static int rxrpc_krxiod(void *arg) } while (!rxrpc_krxiod_die); /* and that's all */ - complete_and_exit(&rxrpc_krxiod_dead,0); + complete_and_exit(&rxrpc_krxiod_dead, 0); } /* end rxrpc_krxiod() */ @@ -147,7 +160,7 @@ static int rxrpc_krxiod(void *arg) */ int __init rxrpc_krxiod_init(void) { - return kernel_thread(rxrpc_krxiod,NULL,0); + return kernel_thread(rxrpc_krxiod, NULL, 0); } /* end rxrpc_krxiod_init() */ @@ -174,16 +187,17 @@ void rxrpc_krxiod_queue_transport(struct _enter(""); if (list_empty(&trans->krxiodq_link)) { - spin_lock_irqsave(&rxrpc_krxiod_transportq_lock,flags); + spin_lock_irqsave(&rxrpc_krxiod_transportq_lock, flags); if (list_empty(&trans->krxiodq_link)) { - if (atomic_read(&trans->usage)>0) { - list_add_tail(&trans->krxiodq_link,&rxrpc_krxiod_transportq); + if (atomic_read(&trans->usage) > 0) { + list_add_tail(&trans->krxiodq_link, + &rxrpc_krxiod_transportq); atomic_inc(&rxrpc_krxiod_qcount); } } - spin_unlock_irqrestore(&rxrpc_krxiod_transportq_lock,flags); + spin_unlock_irqrestore(&rxrpc_krxiod_transportq_lock, flags); wake_up_all(&rxrpc_krxiod_sleepq); } @@ -201,12 +215,12 @@ void rxrpc_krxiod_dequeue_transport(stru _enter(""); - spin_lock_irqsave(&rxrpc_krxiod_transportq_lock,flags); + spin_lock_irqsave(&rxrpc_krxiod_transportq_lock, flags); if (!list_empty(&trans->krxiodq_link)) { list_del_init(&trans->krxiodq_link); atomic_dec(&rxrpc_krxiod_qcount); } - spin_unlock_irqrestore(&rxrpc_krxiod_transportq_lock,flags); + spin_unlock_irqrestore(&rxrpc_krxiod_transportq_lock, flags); _leave(""); @@ -221,15 +235,16 @@ void rxrpc_krxiod_queue_call(struct rxrp unsigned long flags; if (list_empty(&call->rcv_krxiodq_lk)) { - spin_lock_irqsave(&rxrpc_krxiod_callq_lock,flags); - if (atomic_read(&call->usage)>0) { - list_add_tail(&call->rcv_krxiodq_lk,&rxrpc_krxiod_callq); + spin_lock_irqsave(&rxrpc_krxiod_callq_lock, flags); + if (atomic_read(&call->usage) > 0) { + list_add_tail(&call->rcv_krxiodq_lk, + &rxrpc_krxiod_callq); atomic_inc(&rxrpc_krxiod_qcount); } - spin_unlock_irqrestore(&rxrpc_krxiod_callq_lock,flags); + spin_unlock_irqrestore(&rxrpc_krxiod_callq_lock, flags); } wake_up_all(&rxrpc_krxiod_sleepq); - + } /* end rxrpc_krxiod_queue_call() */ /*****************************************************************************/ @@ -240,11 +255,11 @@ void rxrpc_krxiod_dequeue_call(struct rx { unsigned long flags; - spin_lock_irqsave(&rxrpc_krxiod_callq_lock,flags); + spin_lock_irqsave(&rxrpc_krxiod_callq_lock, flags); if (!list_empty(&call->rcv_krxiodq_lk)) { list_del_init(&call->rcv_krxiodq_lk); atomic_dec(&rxrpc_krxiod_qcount); } - spin_unlock_irqrestore(&rxrpc_krxiod_callq_lock,flags); + spin_unlock_irqrestore(&rxrpc_krxiod_callq_lock, flags); } /* end rxrpc_krxiod_dequeue_call() */ diff -prauN linux-2.6.0-test5/net/rxrpc/krxsecd.c wli-2.6.0-test5-bk12-25/net/rxrpc/krxsecd.c --- linux-2.6.0-test5/net/rxrpc/krxsecd.c 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/rxrpc/krxsecd.c 2003-09-25 19:16:18.000000000 -0700 @@ -36,7 +36,8 @@ static volatile int rxrpc_krxsecd_die; static atomic_t rxrpc_krxsecd_qcount; -/* queue of unprocessed inbound messages with seqno #1 and RXRPC_CLIENT_INITIATED flag set */ +/* queue of unprocessed inbound messages with seqno #1 and + * RXRPC_CLIENT_INITIATED flag set */ static LIST_HEAD(rxrpc_krxsecd_initmsgq); static spinlock_t rxrpc_krxsecd_initmsgq_lock = SPIN_LOCK_UNLOCKED; @@ -48,14 +49,20 @@ static void rxrpc_krxsecd_process_incomi */ static int rxrpc_krxsecd(void *arg) { - DECLARE_WAITQUEUE(krxsecd,current); + DECLARE_WAITQUEUE(krxsecd, current); int die; - printk("Started krxsecd %d\n",current->pid); + printk("Started krxsecd %d\n", current->pid); daemonize("krxsecd"); + /* only certain signals are of interest */ + spin_lock_irq(¤t->sighand->siglock); + siginitsetinv(¤t->blocked, 0); + recalc_sigpending(); + spin_unlock_irq(¤t->sighand->siglock); + /* loop around waiting for work to do */ do { /* wait for work or to be told to exit */ @@ -63,7 +70,7 @@ static int rxrpc_krxsecd(void *arg) if (!atomic_read(&rxrpc_krxsecd_qcount)) { set_current_state(TASK_INTERRUPTIBLE); - add_wait_queue(&rxrpc_krxsecd_sleepq,&krxsecd); + add_wait_queue(&rxrpc_krxsecd_sleepq, &krxsecd); for (;;) { set_current_state(TASK_INTERRUPTIBLE); @@ -75,7 +82,7 @@ static int rxrpc_krxsecd(void *arg) schedule(); } - remove_wait_queue(&rxrpc_krxsecd_sleepq,&krxsecd); + remove_wait_queue(&rxrpc_krxsecd_sleepq, &krxsecd); set_current_state(TASK_RUNNING); } die = rxrpc_krxsecd_die; @@ -91,7 +98,7 @@ static int rxrpc_krxsecd(void *arg) if (!list_empty(&rxrpc_krxsecd_initmsgq)) { msg = list_entry(rxrpc_krxsecd_initmsgq.next, - struct rxrpc_message,link); + struct rxrpc_message, link); list_del_init(&msg->link); atomic_dec(&rxrpc_krxsecd_qcount); } @@ -112,7 +119,7 @@ static int rxrpc_krxsecd(void *arg) } while (!die); /* and that's all */ - complete_and_exit(&rxrpc_krxsecd_dead,0); + complete_and_exit(&rxrpc_krxsecd_dead, 0); } /* end rxrpc_krxsecd() */ @@ -122,7 +129,7 @@ static int rxrpc_krxsecd(void *arg) */ int __init rxrpc_krxsecd_init(void) { - return kernel_thread(rxrpc_krxsecd,NULL,0); + return kernel_thread(rxrpc_krxsecd, NULL, 0); } /* end rxrpc_krxsecd_init() */ @@ -154,11 +161,11 @@ void rxrpc_krxsecd_clear_transport(struc /* move all the messages for this transport onto a temp list */ spin_lock(&rxrpc_krxsecd_initmsgq_lock); - list_for_each_safe(_p,_n,&rxrpc_krxsecd_initmsgq) { - msg = list_entry(_p,struct rxrpc_message,link); - if (msg->trans==trans) { + list_for_each_safe(_p, _n, &rxrpc_krxsecd_initmsgq) { + msg = list_entry(_p, struct rxrpc_message, link); + if (msg->trans == trans) { list_del(&msg->link); - list_add_tail(&msg->link,&tmp); + list_add_tail(&msg->link, &tmp); atomic_dec(&rxrpc_krxsecd_qcount); } } @@ -167,7 +174,7 @@ void rxrpc_krxsecd_clear_transport(struc /* zap all messages on the temp list */ while (!list_empty(&tmp)) { - msg = list_entry(tmp.next,struct rxrpc_message,link); + msg = list_entry(tmp.next, struct rxrpc_message, link); list_del_init(&msg->link); rxrpc_put_message(msg); } @@ -181,14 +188,14 @@ void rxrpc_krxsecd_clear_transport(struc */ void rxrpc_krxsecd_queue_incoming_call(struct rxrpc_message *msg) { - _enter("%p",msg); + _enter("%p", msg); /* queue for processing by krxsecd */ spin_lock(&rxrpc_krxsecd_initmsgq_lock); if (!rxrpc_krxsecd_die) { rxrpc_get_message(msg); - list_add_tail(&msg->link,&rxrpc_krxsecd_initmsgq); + list_add_tail(&msg->link, &rxrpc_krxsecd_initmsgq); atomic_inc(&rxrpc_krxsecd_qcount); } @@ -212,10 +219,10 @@ void rxrpc_krxsecd_process_incoming_call unsigned short sid; int ret; - _enter("%p{tr=%p}",msg,trans); + _enter("%p{tr=%p}", msg, trans); - ret = rxrpc_incoming_call(msg->conn,msg,&call); - if (ret<0) + ret = rxrpc_incoming_call(msg->conn, msg, &call); + if (ret < 0) goto out; /* find the matching service on the transport */ @@ -223,11 +230,11 @@ void rxrpc_krxsecd_process_incoming_call srv = NULL; spin_lock(&trans->lock); - list_for_each(_p,&trans->services) { - srv = list_entry(_p,struct rxrpc_service,link); - if (srv->service_id==sid && try_module_get(srv->owner)) { + list_for_each(_p, &trans->services) { + srv = list_entry(_p, struct rxrpc_service, link); + if (srv->service_id == sid && try_module_get(srv->owner)) { /* found a match (made sure it won't vanish) */ - _debug("found service '%s'",srv->name); + _debug("found service '%s'", srv->name); call->owner = srv->owner; break; } @@ -238,7 +245,7 @@ void rxrpc_krxsecd_process_incoming_call * - the func must inc the call's usage count to keep it */ ret = -ENOENT; - if (_p!=&trans->services) { + if (_p != &trans->services) { /* attempt to accept the call */ call->conn->service = srv; call->app_attn_func = srv->attn_func; @@ -248,19 +255,20 @@ void rxrpc_krxsecd_process_incoming_call ret = srv->new_call(call); /* send an abort if an error occurred */ - if (ret<0) { - rxrpc_call_abort(call,ret); + if (ret < 0) { + rxrpc_call_abort(call, ret); } else { /* formally receive and ACK the new packet */ - ret = rxrpc_conn_receive_call_packet(call->conn,call,msg); + ret = rxrpc_conn_receive_call_packet(call->conn, + call, msg); } } rxrpc_put_call(call); out: - if (ret<0) - rxrpc_trans_immediate_abort(trans,msg,ret); + if (ret < 0) + rxrpc_trans_immediate_abort(trans, msg, ret); - _leave(" (%d)",ret); + _leave(" (%d)", ret); } /* end rxrpc_krxsecd_process_incoming_call() */ diff -prauN linux-2.6.0-test5/net/rxrpc/krxtimod.c wli-2.6.0-test5-bk12-25/net/rxrpc/krxtimod.c --- linux-2.6.0-test5/net/rxrpc/krxtimod.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/rxrpc/krxtimod.c 2003-09-25 19:16:18.000000000 -0700 @@ -36,8 +36,8 @@ int rxrpc_krxtimod_start(void) { int ret; - ret = kernel_thread(krxtimod,NULL,0); - if (ret<0) + ret = kernel_thread(krxtimod, NULL, 0); + if (ret < 0) return ret; wait_for_completion(&krxtimod_alive); @@ -64,30 +64,36 @@ void rxrpc_krxtimod_kill(void) */ static int krxtimod(void *arg) { - DECLARE_WAITQUEUE(myself,current); + DECLARE_WAITQUEUE(myself, current); rxrpc_timer_t *timer; - printk("Started krxtimod %d\n",current->pid); + printk("Started krxtimod %d\n", current->pid); daemonize("krxtimod"); complete(&krxtimod_alive); + /* only certain signals are of interest */ + spin_lock_irq(¤t->sighand->siglock); + siginitsetinv(¤t->blocked, 0); + recalc_sigpending(); + spin_unlock_irq(¤t->sighand->siglock); + /* loop around looking for things to attend to */ loop: set_current_state(TASK_INTERRUPTIBLE); - add_wait_queue(&krxtimod_sleepq,&myself); + add_wait_queue(&krxtimod_sleepq, &myself); for (;;) { unsigned long jif; - unsigned long timeout; + signed long timeout; /* deal with the server being asked to die */ if (krxtimod_die) { - remove_wait_queue(&krxtimod_sleepq,&myself); + remove_wait_queue(&krxtimod_sleepq, &myself); _leave(""); - complete_and_exit(&krxtimod_dead,0); + complete_and_exit(&krxtimod_dead, 0); } /* discard pending signals */ @@ -97,18 +103,19 @@ static int krxtimod(void *arg) spin_lock(&krxtimod_lock); if (list_empty(&krxtimod_list)) { timeout = MAX_SCHEDULE_TIMEOUT; - } else { - unsigned long tmo; - + } + else { timer = list_entry(krxtimod_list.next, rxrpc_timer_t, link); - tmo = timer->timo_jif; + timeout = timer->timo_jif; jif = jiffies; - if (time_before_eq(tmo,jif)) + if (time_before_eq((unsigned long) timeout, jif)) goto immediate; - timeout = (long)tmo - (long)jiffies; + else { + timeout = (long) timeout - (long) jiffies; + } } spin_unlock(&krxtimod_lock); @@ -118,13 +125,14 @@ static int krxtimod(void *arg) } /* the thing on the front of the queue needs processing - * - we come here with the lock held and timer pointing to the expired entry + * - we come here with the lock held and timer pointing to the expired + * entry */ immediate: - remove_wait_queue(&krxtimod_sleepq,&myself); + remove_wait_queue(&krxtimod_sleepq, &myself); set_current_state(TASK_RUNNING); - _debug("@@@ Begin Timeout of %p",timer); + _debug("@@@ Begin Timeout of %p", timer); /* dequeue the timer */ list_del_init(&timer->link); @@ -147,29 +155,30 @@ void rxrpc_krxtimod_add_timer(rxrpc_time struct list_head *_p; rxrpc_timer_t *ptimer; - _enter("%p,%lu",timer,timeout); + _enter("%p,%lu", timer, timeout); spin_lock(&krxtimod_lock); list_del(&timer->link); - /* the timer was deferred or reset - put it back in the queue at the right place */ + /* the timer was deferred or reset - put it back in the queue at the + * right place */ timer->timo_jif = jiffies + timeout; - list_for_each(_p,&krxtimod_list) { - ptimer = list_entry(_p,rxrpc_timer_t,link); - if (time_before(timer->timo_jif,ptimer->timo_jif)) + list_for_each(_p, &krxtimod_list) { + ptimer = list_entry(_p, rxrpc_timer_t, link); + if (time_before(timer->timo_jif, ptimer->timo_jif)) break; } - list_add_tail(&timer->link,_p); /* insert before stopping point */ + list_add_tail(&timer->link, _p); /* insert before stopping point */ spin_unlock(&krxtimod_lock); wake_up(&krxtimod_sleepq); _leave(""); -} /* end rxrpc_krxtimod_queue_vlocation() */ +} /* end rxrpc_krxtimod_add_timer() */ /*****************************************************************************/ /* @@ -180,7 +189,7 @@ int rxrpc_krxtimod_del_timer(rxrpc_timer { int ret = 0; - _enter("%p",timer); + _enter("%p", timer); spin_lock(&krxtimod_lock); @@ -193,6 +202,6 @@ int rxrpc_krxtimod_del_timer(rxrpc_timer wake_up(&krxtimod_sleepq); - _leave(" = %d",ret); + _leave(" = %d", ret); return ret; } /* end rxrpc_krxtimod_del_timer() */ diff -prauN linux-2.6.0-test5/net/rxrpc/main.c wli-2.6.0-test5-bk12-25/net/rxrpc/main.c --- linux-2.6.0-test5/net/rxrpc/main.c 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/rxrpc/main.c 2003-09-25 19:16:18.000000000 -0700 @@ -32,7 +32,7 @@ MODULE_DESCRIPTION("Rx RPC implementatio MODULE_AUTHOR("Red Hat, Inc."); MODULE_LICENSE("GPL"); -u32 rxrpc_epoch; +uint32_t rxrpc_epoch; /*****************************************************************************/ /* @@ -101,11 +101,16 @@ static void __exit rxrpc_cleanup(void) { kenter(""); - __RXACCT(printk("Outstanding Messages : %d\n",atomic_read(&rxrpc_message_count))); - __RXACCT(printk("Outstanding Calls : %d\n",atomic_read(&rxrpc_call_count))); - __RXACCT(printk("Outstanding Connections: %d\n",atomic_read(&rxrpc_connection_count))); - __RXACCT(printk("Outstanding Peers : %d\n",atomic_read(&rxrpc_peer_count))); - __RXACCT(printk("Outstanding Transports : %d\n",atomic_read(&rxrpc_transport_count))); + __RXACCT(printk("Outstanding Messages : %d\n", + atomic_read(&rxrpc_message_count))); + __RXACCT(printk("Outstanding Calls : %d\n", + atomic_read(&rxrpc_call_count))); + __RXACCT(printk("Outstanding Connections: %d\n", + atomic_read(&rxrpc_connection_count))); + __RXACCT(printk("Outstanding Peers : %d\n", + atomic_read(&rxrpc_peer_count))); + __RXACCT(printk("Outstanding Transports : %d\n", + atomic_read(&rxrpc_transport_count))); rxrpc_krxsecd_kill(); rxrpc_krxiod_kill(); @@ -117,11 +122,61 @@ static void __exit rxrpc_cleanup(void) rxrpc_proc_cleanup(); #endif - __RXACCT(printk("Outstanding Messages : %d\n",atomic_read(&rxrpc_message_count))); - __RXACCT(printk("Outstanding Calls : %d\n",atomic_read(&rxrpc_call_count))); - __RXACCT(printk("Outstanding Connections: %d\n",atomic_read(&rxrpc_connection_count))); - __RXACCT(printk("Outstanding Peers : %d\n",atomic_read(&rxrpc_peer_count))); - __RXACCT(printk("Outstanding Transports : %d\n",atomic_read(&rxrpc_transport_count))); + __RXACCT(printk("Outstanding Messages : %d\n", + atomic_read(&rxrpc_message_count))); + __RXACCT(printk("Outstanding Calls : %d\n", + atomic_read(&rxrpc_call_count))); + __RXACCT(printk("Outstanding Connections: %d\n", + atomic_read(&rxrpc_connection_count))); + __RXACCT(printk("Outstanding Peers : %d\n", + atomic_read(&rxrpc_peer_count))); + __RXACCT(printk("Outstanding Transports : %d\n", + atomic_read(&rxrpc_transport_count))); kleave(""); } /* end rxrpc_cleanup() */ + +/*****************************************************************************/ +/* + * clear the dead space between task_struct and kernel stack + * - called by supplying -finstrument-functions to gcc + */ +#if 0 +void __cyg_profile_func_enter (void *this_fn, void *call_site) +__attribute__((no_instrument_function)); + +void __cyg_profile_func_enter (void *this_fn, void *call_site) +{ + asm volatile(" movl %%esp,%%edi \n" + " andl %0,%%edi \n" + " addl %1,%%edi \n" + " movl %%esp,%%ecx \n" + " subl %%edi,%%ecx \n" + " shrl $2,%%ecx \n" + " movl $0xedededed,%%eax \n" + " rep stosl \n" + : + : "i"(~(THREAD_SIZE-1)), "i"(sizeof(struct thread_info)) + : "eax", "ecx", "edi", "memory", "cc" + ); +} + +void __cyg_profile_func_exit(void *this_fn, void *call_site) +__attribute__((no_instrument_function)); + +void __cyg_profile_func_exit(void *this_fn, void *call_site) +{ + asm volatile(" movl %%esp,%%edi \n" + " andl %0,%%edi \n" + " addl %1,%%edi \n" + " movl %%esp,%%ecx \n" + " subl %%edi,%%ecx \n" + " shrl $2,%%ecx \n" + " movl $0xdadadada,%%eax \n" + " rep stosl \n" + : + : "i"(~(THREAD_SIZE-1)), "i"(sizeof(struct thread_info)) + : "eax", "ecx", "edi", "memory", "cc" + ); +} +#endif diff -prauN linux-2.6.0-test5/net/rxrpc/peer.c wli-2.6.0-test5-bk12-25/net/rxrpc/peer.c --- linux-2.6.0-test5/net/rxrpc/peer.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/rxrpc/peer.c 2003-09-25 19:16:18.000000000 -0700 @@ -28,12 +28,14 @@ __RXACCT_DECL(atomic_t rxrpc_peer_count); LIST_HEAD(rxrpc_peers); DECLARE_RWSEM(rxrpc_peers_sem); +unsigned long rxrpc_peer_timeout = 12 * 60 * 60; static void __rxrpc_peer_timeout(rxrpc_timer_t *timer) { - struct rxrpc_peer *peer = list_entry(timer,struct rxrpc_peer,timeout); + struct rxrpc_peer *peer = + list_entry(timer, struct rxrpc_peer, timeout); - _debug("Rx PEER TIMEOUT [%p{u=%d}]",peer,atomic_read(&peer->usage)); + _debug("Rx PEER TIMEOUT [%p{u=%d}]", peer, atomic_read(&peer->usage)); rxrpc_peer_do_timeout(peer); } @@ -46,32 +48,35 @@ static const struct rxrpc_timer_ops rxrp /* * create a peer record */ -static int __rxrpc_create_peer(struct rxrpc_transport *trans, u32 addr, struct rxrpc_peer **_peer) +static int __rxrpc_create_peer(struct rxrpc_transport *trans, uint32_t addr, + struct rxrpc_peer **_peer) { struct rxrpc_peer *peer; - _enter("%p,%08x",trans,ntohl(addr)); + _enter("%p,%08x", trans, ntohl(addr)); /* allocate and initialise a peer record */ - peer = kmalloc(sizeof(struct rxrpc_peer),GFP_KERNEL); + peer = kmalloc(sizeof(struct rxrpc_peer), GFP_KERNEL); if (!peer) { _leave(" = -ENOMEM"); return -ENOMEM; } - memset(peer,0,sizeof(struct rxrpc_peer)); - atomic_set(&peer->usage,1); + memset(peer, 0, sizeof(struct rxrpc_peer)); + atomic_set(&peer->usage, 1); INIT_LIST_HEAD(&peer->link); INIT_LIST_HEAD(&peer->proc_link); + INIT_LIST_HEAD(&peer->conn_idlist); INIT_LIST_HEAD(&peer->conn_active); INIT_LIST_HEAD(&peer->conn_graveyard); spin_lock_init(&peer->conn_gylock); init_waitqueue_head(&peer->conn_gy_waitq); + rwlock_init(&peer->conn_idlock); rwlock_init(&peer->conn_lock); - atomic_set(&peer->conn_count,0); + atomic_set(&peer->conn_count, 0); spin_lock_init(&peer->lock); - rxrpc_timer_init(&peer->timeout,&rxrpc_peer_timer_ops); + rxrpc_timer_init(&peer->timeout, &rxrpc_peer_timer_ops); peer->addr.s_addr = addr; @@ -80,7 +85,7 @@ static int __rxrpc_create_peer(struct rx __RXACCT(atomic_inc(&rxrpc_peer_count)); *_peer = peer; - _leave(" = 0 (%p)",peer); + _leave(" = 0 (%p)", peer); return 0; } /* end __rxrpc_create_peer() */ @@ -91,43 +96,45 @@ static int __rxrpc_create_peer(struct rx * - returns (if successful) with peer record usage incremented * - resurrects it from the graveyard if found there */ -int rxrpc_peer_lookup(struct rxrpc_transport *trans, u32 addr, struct rxrpc_peer **_peer) +int rxrpc_peer_lookup(struct rxrpc_transport *trans, uint32_t addr, + struct rxrpc_peer **_peer) { struct rxrpc_peer *peer, *candidate = NULL; struct list_head *_p; int ret; - _enter("%p{%hu},%08x",trans,trans->port,ntohl(addr)); + _enter("%p{%hu},%08x", trans, trans->port, ntohl(addr)); /* [common case] search the transport's active list first */ read_lock(&trans->peer_lock); - list_for_each(_p,&trans->peer_active) { - peer = list_entry(_p,struct rxrpc_peer,link); - if (peer->addr.s_addr==addr) + list_for_each(_p, &trans->peer_active) { + peer = list_entry(_p, struct rxrpc_peer, link); + if (peer->addr.s_addr == addr) goto found_active; } read_unlock(&trans->peer_lock); /* [uncommon case] not active - create a candidate for a new record */ - ret = __rxrpc_create_peer(trans,addr,&candidate); - if (ret<0) { - _leave(" = %d",ret); + ret = __rxrpc_create_peer(trans, addr, &candidate); + if (ret < 0) { + _leave(" = %d", ret); return ret; } - /* search the active list again, just in case it appeared whilst we were busy */ + /* search the active list again, just in case it appeared whilst we + * were busy */ write_lock(&trans->peer_lock); - list_for_each(_p,&trans->peer_active) { - peer = list_entry(_p,struct rxrpc_peer,link); - if (peer->addr.s_addr==addr) + list_for_each(_p, &trans->peer_active) { + peer = list_entry(_p, struct rxrpc_peer, link); + if (peer->addr.s_addr == addr) goto found_active_second_chance; } /* search the transport's graveyard list */ spin_lock(&trans->peer_gylock); - list_for_each(_p,&trans->peer_graveyard) { - peer = list_entry(_p,struct rxrpc_peer,link); - if (peer->addr.s_addr==addr) + list_for_each(_p, &trans->peer_graveyard) { + peer = list_entry(_p, struct rxrpc_peer, link); + if (peer->addr.s_addr == addr) goto found_in_graveyard; } spin_unlock(&trans->peer_gylock); @@ -141,12 +148,12 @@ int rxrpc_peer_lookup(struct rxrpc_trans if (peer->ops && peer->ops->adding) { ret = peer->ops->adding(peer); - if (ret<0) { + if (ret < 0) { write_unlock(&trans->peer_lock); __RXACCT(atomic_dec(&rxrpc_peer_count)); kfree(peer); rxrpc_put_transport(trans); - _leave(" = %d",ret); + _leave(" = %d", ret); return ret; } } @@ -154,7 +161,7 @@ int rxrpc_peer_lookup(struct rxrpc_trans atomic_inc(&trans->peer_count); make_active: - list_add_tail(&peer->link,&trans->peer_active); + list_add_tail(&peer->link, &trans->peer_active); success_uwfree: write_unlock(&trans->peer_lock); @@ -166,7 +173,7 @@ int rxrpc_peer_lookup(struct rxrpc_trans if (list_empty(&peer->proc_link)) { down_write(&rxrpc_peers_sem); - list_add_tail(&peer->proc_link,&rxrpc_peers); + list_add_tail(&peer->proc_link, &rxrpc_peers); up_write(&rxrpc_peers_sem); } @@ -174,7 +181,9 @@ int rxrpc_peer_lookup(struct rxrpc_trans *_peer = peer; _leave(" = 0 (%p{u=%d cc=%d})", - peer,atomic_read(&peer->usage),atomic_read(&peer->conn_count)); + peer, + atomic_read(&peer->usage), + atomic_read(&peer->conn_count)); return 0; /* handle the peer being found in the active list straight off */ @@ -192,7 +201,8 @@ int rxrpc_peer_lookup(struct rxrpc_trans spin_unlock(&trans->peer_gylock); goto make_active; - /* handle finding the peer on the second time through the active list */ + /* handle finding the peer on the second time through the active + * list */ found_active_second_chance: rxrpc_get_peer(peer); goto success_uwfree; @@ -202,16 +212,20 @@ int rxrpc_peer_lookup(struct rxrpc_trans /*****************************************************************************/ /* * finish with a peer record - * - it gets sent to the graveyard from where it can be resurrected or timed out + * - it gets sent to the graveyard from where it can be resurrected or timed + * out */ void rxrpc_put_peer(struct rxrpc_peer *peer) { struct rxrpc_transport *trans = peer->trans; - _enter("%p{cc=%d a=%08x}",peer,atomic_read(&peer->conn_count),ntohl(peer->addr.s_addr)); + _enter("%p{cc=%d a=%08x}", + peer, + atomic_read(&peer->conn_count), + ntohl(peer->addr.s_addr)); /* sanity check */ - if (atomic_read(&peer->usage)<=0) + if (atomic_read(&peer->usage) <= 0) BUG(); write_lock(&trans->peer_lock); @@ -227,12 +241,11 @@ void rxrpc_put_peer(struct rxrpc_peer *p list_del(&peer->link); write_unlock(&trans->peer_lock); - list_add_tail(&peer->link,&trans->peer_graveyard); + list_add_tail(&peer->link, &trans->peer_graveyard); - if (!list_empty(&peer->conn_active)) BUG(); + BUG_ON(!list_empty(&peer->conn_active)); - /* discard in 600 secs */ - rxrpc_krxtimod_add_timer(&peer->timeout,100*HZ); + rxrpc_krxtimod_add_timer(&peer->timeout, rxrpc_peer_timeout * HZ); spin_unlock(&trans->peer_gylock); @@ -251,15 +264,16 @@ void rxrpc_peer_do_timeout(struct rxrpc_ struct rxrpc_transport *trans = peer->trans; _enter("%p{u=%d cc=%d a=%08x}", - peer,atomic_read(&peer->usage),atomic_read(&peer->conn_count), + peer, + atomic_read(&peer->usage), + atomic_read(&peer->conn_count), ntohl(peer->addr.s_addr)); - if (atomic_read(&peer->usage)<0) - BUG(); + BUG_ON(atomic_read(&peer->usage) < 0); /* remove from graveyard if still dead */ spin_lock(&trans->peer_gylock); - if (atomic_read(&peer->usage)==0) + if (atomic_read(&peer->usage) == 0) list_del_init(&peer->link); else peer = NULL; @@ -273,8 +287,8 @@ void rxrpc_peer_do_timeout(struct rxrpc_ /* clear all connections on this peer */ rxrpc_conn_clearall(peer); - if (!list_empty(&peer->conn_active)) BUG(); - if (!list_empty(&peer->conn_graveyard)) BUG(); + BUG_ON(!list_empty(&peer->conn_active)); + BUG_ON(!list_empty(&peer->conn_graveyard)); /* inform the application layer */ if (peer->ops && peer->ops->discarding) @@ -310,18 +324,18 @@ void rxrpc_peer_clearall(struct rxrpc_tr _enter("%p",trans); /* there shouldn't be any active peers remaining */ - if (!list_empty(&trans->peer_active)) - BUG(); + BUG_ON(!list_empty(&trans->peer_active)); /* manually timeout all peers in the graveyard */ spin_lock(&trans->peer_gylock); while (!list_empty(&trans->peer_graveyard)) { - peer = list_entry(trans->peer_graveyard.next,struct rxrpc_peer,link); - _debug("Clearing peer %p\n",peer); + peer = list_entry(trans->peer_graveyard.next, + struct rxrpc_peer, link); + _debug("Clearing peer %p\n", peer); err = rxrpc_krxtimod_del_timer(&peer->timeout); spin_unlock(&trans->peer_gylock); - if (err==0) + if (err == 0) rxrpc_peer_do_timeout(peer); spin_lock(&trans->peer_gylock); @@ -330,18 +344,17 @@ void rxrpc_peer_clearall(struct rxrpc_tr /* wait for the the peer graveyard to be completely cleared */ set_current_state(TASK_UNINTERRUPTIBLE); - add_wait_queue(&trans->peer_gy_waitq,&myself); + add_wait_queue(&trans->peer_gy_waitq, &myself); - while (atomic_read(&trans->peer_count)!=0) { + while (atomic_read(&trans->peer_count) != 0) { schedule(); set_current_state(TASK_UNINTERRUPTIBLE); } - remove_wait_queue(&trans->peer_gy_waitq,&myself); + remove_wait_queue(&trans->peer_gy_waitq, &myself); set_current_state(TASK_RUNNING); _leave(""); - } /* end rxrpc_peer_clearall() */ /*****************************************************************************/ @@ -355,7 +368,7 @@ void rxrpc_peer_calculate_rtt(struct rxr unsigned long long rtt; int loop; - _enter("%p,%p,%p",peer,msg,resp); + _enter("%p,%p,%p", peer, msg, resp); /* calculate the latest RTT */ rtt = resp->stamp.tv_sec - msg->stamp.tv_sec; @@ -367,16 +380,18 @@ void rxrpc_peer_calculate_rtt(struct rxr peer->rtt_point++; peer->rtt_point %= RXRPC_RTT_CACHE_SIZE; - if (peer->rtt_usagertt_usage++; + if (peer->rtt_usage < RXRPC_RTT_CACHE_SIZE) + peer->rtt_usage++; /* recalculate RTT */ rtt = 0; - for (loop=peer->rtt_usage-1; loop>=0; loop--) + for (loop = peer->rtt_usage - 1; loop >= 0; loop--) rtt += peer->rtt_cache[loop]; - do_div(rtt,peer->rtt_usage); + do_div(rtt, peer->rtt_usage); peer->rtt = rtt; - _leave(" RTT=%lu.%lums",(long)(peer->rtt/1000),(long)(peer->rtt%1000)); + _leave(" RTT=%lu.%lums", + (long) (peer->rtt / 1000), (long) (peer->rtt % 1000)); } /* end rxrpc_peer_calculate_rtt() */ diff -prauN linux-2.6.0-test5/net/rxrpc/proc.c wli-2.6.0-test5-bk12-25/net/rxrpc/proc.c --- linux-2.6.0-test5/net/rxrpc/proc.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/rxrpc/proc.c 2003-09-25 19:16:18.000000000 -0700 @@ -38,7 +38,6 @@ static struct seq_operations rxrpc_proc_ }; static struct file_operations rxrpc_proc_transports_fops = { - .owner = THIS_MODULE, .open = rxrpc_proc_transports_open, .read = seq_read, .llseek = seq_lseek, @@ -59,7 +58,6 @@ static struct seq_operations rxrpc_proc_ }; static struct file_operations rxrpc_proc_peers_fops = { - .owner = THIS_MODULE, .open = rxrpc_proc_peers_open, .read = seq_read, .llseek = seq_lseek, @@ -80,7 +78,6 @@ static struct seq_operations rxrpc_proc_ }; static struct file_operations rxrpc_proc_conns_fops = { - .owner = THIS_MODULE, .open = rxrpc_proc_conns_open, .read = seq_read, .llseek = seq_lseek, @@ -101,7 +98,6 @@ static struct seq_operations rxrpc_proc_ }; static struct file_operations rxrpc_proc_calls_fops = { - .owner = THIS_MODULE, .open = rxrpc_proc_calls_open, .read = seq_read, .llseek = seq_lseek, @@ -137,30 +133,30 @@ int rxrpc_proc_init(void) { struct proc_dir_entry *p; - proc_rxrpc = proc_mkdir("rxrpc",proc_net); + proc_rxrpc = proc_mkdir("rxrpc", proc_net); if (!proc_rxrpc) goto error; proc_rxrpc->owner = THIS_MODULE; - p = create_proc_entry("calls",0,proc_rxrpc); + p = create_proc_entry("calls", 0, proc_rxrpc); if (!p) goto error_proc; p->proc_fops = &rxrpc_proc_calls_fops; p->owner = THIS_MODULE; - p = create_proc_entry("connections",0,proc_rxrpc); + p = create_proc_entry("connections", 0, proc_rxrpc); if (!p) goto error_calls; p->proc_fops = &rxrpc_proc_conns_fops; p->owner = THIS_MODULE; - p = create_proc_entry("peers",0,proc_rxrpc); + p = create_proc_entry("peers", 0, proc_rxrpc); if (!p) goto error_calls; p->proc_fops = &rxrpc_proc_peers_fops; p->owner = THIS_MODULE; - p = create_proc_entry("transports",0,proc_rxrpc); + p = create_proc_entry("transports", 0, proc_rxrpc); if (!p) goto error_conns; p->proc_fops = &rxrpc_proc_transports_fops; @@ -169,11 +165,11 @@ int rxrpc_proc_init(void) return 0; error_conns: - remove_proc_entry("conns",proc_rxrpc); + remove_proc_entry("connections", proc_rxrpc); error_calls: - remove_proc_entry("calls",proc_rxrpc); + remove_proc_entry("calls", proc_rxrpc); error_proc: - remove_proc_entry("rxrpc",proc_net); + remove_proc_entry("rxrpc", proc_net); error: return -ENOMEM; } /* end rxrpc_proc_init() */ @@ -184,12 +180,12 @@ int rxrpc_proc_init(void) */ void rxrpc_proc_cleanup(void) { - remove_proc_entry("transports",proc_rxrpc); - remove_proc_entry("peers",proc_rxrpc); - remove_proc_entry("connections",proc_rxrpc); - remove_proc_entry("calls",proc_rxrpc); + remove_proc_entry("transports", proc_rxrpc); + remove_proc_entry("peers", proc_rxrpc); + remove_proc_entry("connections", proc_rxrpc); + remove_proc_entry("calls", proc_rxrpc); - remove_proc_entry("rxrpc",proc_net); + remove_proc_entry("rxrpc", proc_net); } /* end rxrpc_proc_cleanup() */ @@ -202,8 +198,8 @@ static int rxrpc_proc_transports_open(st struct seq_file *m; int ret; - ret = seq_open(file,&rxrpc_proc_transports_ops); - if (ret<0) + ret = seq_open(file, &rxrpc_proc_transports_ops); + if (ret < 0) return ret; m = file->private_data; @@ -226,15 +222,15 @@ static void *rxrpc_proc_transports_start /* allow for the header line */ if (!pos) - return (void *)1; + return SEQ_START_TOKEN; pos--; /* find the n'th element in the list */ - list_for_each(_p,&rxrpc_proc_transports) + list_for_each(_p, &rxrpc_proc_transports) if (!pos--) break; - return _p!=&rxrpc_proc_transports ? _p : NULL; + return _p != &rxrpc_proc_transports ? _p : NULL; } /* end rxrpc_proc_transports_start() */ /*****************************************************************************/ @@ -248,9 +244,9 @@ static void *rxrpc_proc_transports_next( (*pos)++; _p = v; - _p = v==(void*)1 ? rxrpc_proc_transports.next : _p->next; + _p = (v == SEQ_START_TOKEN) ? rxrpc_proc_transports.next : _p->next; - return _p!=&rxrpc_proc_transports ? _p : NULL; + return _p != &rxrpc_proc_transports ? _p : NULL; } /* end rxrpc_proc_transports_next() */ /*****************************************************************************/ @@ -269,16 +265,17 @@ static void rxrpc_proc_transports_stop(s */ static int rxrpc_proc_transports_show(struct seq_file *m, void *v) { - struct rxrpc_transport *trans = list_entry(v,struct rxrpc_transport,proc_link); + struct rxrpc_transport *trans = + list_entry(v, struct rxrpc_transport, proc_link); /* display header on line 1 */ - if (v == (void *)1) { + if (v == SEQ_START_TOKEN) { seq_puts(m, "LOCAL USE\n"); return 0; } /* display one transport per line on subsequent lines */ - seq_printf(m,"%5hu %3d\n", + seq_printf(m, "%5hu %3d\n", trans->port, atomic_read(&trans->usage) ); @@ -295,8 +292,8 @@ static int rxrpc_proc_peers_open(struct struct seq_file *m; int ret; - ret = seq_open(file,&rxrpc_proc_peers_ops); - if (ret<0) + ret = seq_open(file, &rxrpc_proc_peers_ops); + if (ret < 0) return ret; m = file->private_data; @@ -307,7 +304,8 @@ static int rxrpc_proc_peers_open(struct /*****************************************************************************/ /* - * set up the iterator to start reading from the peers list and return the first item + * set up the iterator to start reading from the peers list and return the + * first item */ static void *rxrpc_proc_peers_start(struct seq_file *m, loff_t *_pos) { @@ -319,15 +317,15 @@ static void *rxrpc_proc_peers_start(stru /* allow for the header line */ if (!pos) - return (void *)1; + return SEQ_START_TOKEN; pos--; /* find the n'th element in the list */ - list_for_each(_p,&rxrpc_peers) + list_for_each(_p, &rxrpc_peers) if (!pos--) break; - return _p!=&rxrpc_peers ? _p : NULL; + return _p != &rxrpc_peers ? _p : NULL; } /* end rxrpc_proc_peers_start() */ /*****************************************************************************/ @@ -341,9 +339,9 @@ static void *rxrpc_proc_peers_next(struc (*pos)++; _p = v; - _p = v==(void*)1 ? rxrpc_peers.next : _p->next; + _p = (v == SEQ_START_TOKEN) ? rxrpc_peers.next : _p->next; - return _p!=&rxrpc_peers ? _p : NULL; + return _p != &rxrpc_peers ? _p : NULL; } /* end rxrpc_proc_peers_next() */ /*****************************************************************************/ @@ -362,21 +360,23 @@ static void rxrpc_proc_peers_stop(struct */ static int rxrpc_proc_peers_show(struct seq_file *m, void *v) { - struct rxrpc_peer *peer = list_entry(v,struct rxrpc_peer,proc_link); + struct rxrpc_peer *peer = list_entry(v, struct rxrpc_peer, proc_link); signed long timeout; /* display header on line 1 */ - if (v == (void *)1) { - seq_puts(m,"LOCAL REMOTE USAGE CONNS TIMEOUT MTU RTT(uS)\n"); + if (v == SEQ_START_TOKEN) { + seq_puts(m, "LOCAL REMOTE USAGE CONNS TIMEOUT" + " MTU RTT(uS)\n"); return 0; } /* display one peer per line on subsequent lines */ timeout = 0; if (!list_empty(&peer->timeout.link)) - timeout = (signed long)peer->timeout.timo_jif - (signed long)jiffies; + timeout = (signed long) peer->timeout.timo_jif - + (signed long) jiffies; - seq_printf(m,"%5hu %08x %5d %5d %8ld %5Zu %7lu\n", + seq_printf(m, "%5hu %08x %5d %5d %8ld %5Zu %7lu\n", peer->trans->port, ntohl(peer->addr.s_addr), atomic_read(&peer->usage), @@ -391,15 +391,16 @@ static int rxrpc_proc_peers_show(struct /*****************************************************************************/ /* - * open "/proc/net/rxrpc/connections" which provides a summary of extant connections + * open "/proc/net/rxrpc/connections" which provides a summary of extant + * connections */ static int rxrpc_proc_conns_open(struct inode *inode, struct file *file) { struct seq_file *m; int ret; - ret = seq_open(file,&rxrpc_proc_conns_ops); - if (ret<0) + ret = seq_open(file, &rxrpc_proc_conns_ops); + if (ret < 0) return ret; m = file->private_data; @@ -410,7 +411,8 @@ static int rxrpc_proc_conns_open(struct /*****************************************************************************/ /* - * set up the iterator to start reading from the conns list and return the first item + * set up the iterator to start reading from the conns list and return the + * first item */ static void *rxrpc_proc_conns_start(struct seq_file *m, loff_t *_pos) { @@ -422,15 +424,15 @@ static void *rxrpc_proc_conns_start(stru /* allow for the header line */ if (!pos) - return (void *)1; + return SEQ_START_TOKEN; pos--; /* find the n'th element in the list */ - list_for_each(_p,&rxrpc_conns) + list_for_each(_p, &rxrpc_conns) if (!pos--) break; - return _p!=&rxrpc_conns ? _p : NULL; + return _p != &rxrpc_conns ? _p : NULL; } /* end rxrpc_proc_conns_start() */ /*****************************************************************************/ @@ -444,9 +446,9 @@ static void *rxrpc_proc_conns_next(struc (*pos)++; _p = v; - _p = v==(void*)1 ? rxrpc_conns.next : _p->next; + _p = (v == SEQ_START_TOKEN) ? rxrpc_conns.next : _p->next; - return _p!=&rxrpc_conns ? _p : NULL; + return _p != &rxrpc_conns ? _p : NULL; } /* end rxrpc_proc_conns_next() */ /*****************************************************************************/ @@ -465,13 +467,16 @@ static void rxrpc_proc_conns_stop(struct */ static int rxrpc_proc_conns_show(struct seq_file *m, void *v) { - struct rxrpc_connection *conn = list_entry(v,struct rxrpc_connection,proc_link); + struct rxrpc_connection *conn; signed long timeout; + conn = list_entry(v, struct rxrpc_connection, proc_link); + /* display header on line 1 */ - if (v == (void *)1) { + if (v == SEQ_START_TOKEN) { seq_puts(m, - "LOCAL REMOTE RPORT SRVC CONN END SERIALNO CALLNO MTU TIMEOUT" + "LOCAL REMOTE RPORT SRVC CONN END SERIALNO " + "CALLNO MTU TIMEOUT" "\n"); return 0; } @@ -479,9 +484,11 @@ static int rxrpc_proc_conns_show(struct /* display one conn per line on subsequent lines */ timeout = 0; if (!list_empty(&conn->timeout.link)) - timeout = (signed long)conn->timeout.timo_jif - (signed long)jiffies; + timeout = (signed long) conn->timeout.timo_jif - + (signed long) jiffies; - seq_printf(m,"%5hu %08x %5hu %04hx %08x %-3.3s %08x %08x %5Zu %8ld\n", + seq_printf(m, + "%5hu %08x %5hu %04hx %08x %-3.3s %08x %08x %5Zu %8ld\n", conn->trans->port, ntohl(conn->addr.sin_addr.s_addr), ntohs(conn->addr.sin_port), @@ -506,8 +513,8 @@ static int rxrpc_proc_calls_open(struct struct seq_file *m; int ret; - ret = seq_open(file,&rxrpc_proc_calls_ops); - if (ret<0) + ret = seq_open(file, &rxrpc_proc_calls_ops); + if (ret < 0) return ret; m = file->private_data; @@ -518,7 +525,8 @@ static int rxrpc_proc_calls_open(struct /*****************************************************************************/ /* - * set up the iterator to start reading from the calls list and return the first item + * set up the iterator to start reading from the calls list and return the + * first item */ static void *rxrpc_proc_calls_start(struct seq_file *m, loff_t *_pos) { @@ -530,15 +538,15 @@ static void *rxrpc_proc_calls_start(stru /* allow for the header line */ if (!pos) - return (void *)1; + return SEQ_START_TOKEN; pos--; /* find the n'th element in the list */ - list_for_each(_p,&rxrpc_calls) + list_for_each(_p, &rxrpc_calls) if (!pos--) break; - return _p!=&rxrpc_calls ? _p : NULL; + return _p != &rxrpc_calls ? _p : NULL; } /* end rxrpc_proc_calls_start() */ /*****************************************************************************/ @@ -552,9 +560,9 @@ static void *rxrpc_proc_calls_next(struc (*pos)++; _p = v; - _p = v==(void*)1 ? rxrpc_calls.next : _p->next; + _p = (v == SEQ_START_TOKEN) ? rxrpc_calls.next : _p->next; - return _p!=&rxrpc_calls ? _p : NULL; + return _p != &rxrpc_calls ? _p : NULL; } /* end rxrpc_proc_calls_next() */ /*****************************************************************************/ @@ -573,10 +581,10 @@ static void rxrpc_proc_calls_stop(struct */ static int rxrpc_proc_calls_show(struct seq_file *m, void *v) { - struct rxrpc_call *call = list_entry(v,struct rxrpc_call,call_link); + struct rxrpc_call *call = list_entry(v, struct rxrpc_call, call_link); /* display header on line 1 */ - if (v == (void *)1) { + if (v == SEQ_START_TOKEN) { seq_puts(m, "LOCAL REMOT SRVC CONN CALL DIR USE " " L STATE OPCODE ABORT ERRNO\n" diff -prauN linux-2.6.0-test5/net/rxrpc/sysctl.c wli-2.6.0-test5-bk12-25/net/rxrpc/sysctl.c --- linux-2.6.0-test5/net/rxrpc/sysctl.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/rxrpc/sysctl.c 2003-09-25 19:16:18.000000000 -0700 @@ -60,6 +60,22 @@ static ctl_table rxrpc_sysctl_table[] = .mode = 0644, .proc_handler = &proc_dointvec }, + { + .ctl_name = 5, + .procname = "peertimo", + .data = &rxrpc_peer_timeout, + .maxlen = sizeof(unsigned long), + .mode = 0644, + .proc_handler = &proc_doulongvec_minmax + }, + { + .ctl_name = 6, + .procname = "conntimo", + .data = &rxrpc_conn_timeout, + .maxlen = sizeof(unsigned long), + .mode = 0644, + .proc_handler = &proc_doulongvec_minmax + }, { .ctl_name = 0 } }; @@ -67,6 +83,7 @@ static ctl_table rxrpc_dir_sysctl_table[ { .ctl_name = 1, .procname = "rxrpc", + .maxlen = 0, .mode = 0555, .child = rxrpc_sysctl_table }, @@ -81,7 +98,7 @@ static ctl_table rxrpc_dir_sysctl_table[ int rxrpc_sysctl_init(void) { #ifdef CONFIG_SYSCTL - rxrpc_sysctl = register_sysctl_table(rxrpc_dir_sysctl_table,0); + rxrpc_sysctl = register_sysctl_table(rxrpc_dir_sysctl_table, 0); if (!rxrpc_sysctl) return -ENOMEM; #endif /* CONFIG_SYSCTL */ diff -prauN linux-2.6.0-test5/net/rxrpc/transport.c wli-2.6.0-test5-bk12-25/net/rxrpc/transport.c --- linux-2.6.0-test5/net/rxrpc/transport.c 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/rxrpc/transport.c 2003-09-25 19:16:18.000000000 -0700 @@ -56,7 +56,8 @@ static void rxrpc_trans_receive_error_re /* * create a new transport endpoint using the specified UDP port */ -int rxrpc_create_transport(unsigned short port, struct rxrpc_transport **_trans) +int rxrpc_create_transport(unsigned short port, + struct rxrpc_transport **_trans) { struct rxrpc_transport *trans; struct sockaddr_in sin; @@ -64,14 +65,14 @@ int rxrpc_create_transport(unsigned shor struct sock *sock; int ret, opt; - _enter("%hu",port); + _enter("%hu", port); - trans = kmalloc(sizeof(struct rxrpc_transport),GFP_KERNEL); + trans = kmalloc(sizeof(struct rxrpc_transport), GFP_KERNEL); if (!trans) return -ENOMEM; - memset(trans,0,sizeof(struct rxrpc_transport)); - atomic_set(&trans->usage,1); + memset(trans, 0, sizeof(struct rxrpc_transport)); + atomic_set(&trans->usage, 1); INIT_LIST_HEAD(&trans->services); INIT_LIST_HEAD(&trans->link); INIT_LIST_HEAD(&trans->krxiodq_link); @@ -81,58 +82,58 @@ int rxrpc_create_transport(unsigned shor spin_lock_init(&trans->peer_gylock); init_waitqueue_head(&trans->peer_gy_waitq); rwlock_init(&trans->peer_lock); - atomic_set(&trans->peer_count,0); + atomic_set(&trans->peer_count, 0); trans->port = port; /* create a UDP socket to be my actual transport endpoint */ - ret = sock_create(PF_INET,SOCK_DGRAM,IPPROTO_UDP,&trans->socket); - if (ret<0) + ret = sock_create(PF_INET, SOCK_DGRAM, IPPROTO_UDP, &trans->socket); + if (ret < 0) goto error; /* use the specified port */ if (port) { - memset(&sin,0,sizeof(sin)); + memset(&sin, 0, sizeof(sin)); sin.sin_family = AF_INET; sin.sin_port = htons(port); - ret = trans->socket->ops->bind(trans->socket,(struct sockaddr *)&sin,sizeof(sin)); - if (ret<0) + ret = trans->socket->ops->bind(trans->socket, + (struct sockaddr *) &sin, + sizeof(sin)); + if (ret < 0) goto error; } opt = 1; oldfs = get_fs(); set_fs(KERNEL_DS); - ret = trans->socket->ops->setsockopt(trans->socket,SOL_IP,IP_RECVERR, - (char*)&opt,sizeof(opt)); + ret = trans->socket->ops->setsockopt(trans->socket, SOL_IP, IP_RECVERR, + (char *) &opt, sizeof(opt)); set_fs(oldfs); spin_lock(&rxrpc_transports_lock); - list_add(&trans->link,&rxrpc_transports); + list_add(&trans->link, &rxrpc_transports); spin_unlock(&rxrpc_transports_lock); /* set the socket up */ sock = trans->socket->sk; - sock->sk_user_data = trans; - sock->sk_data_ready = rxrpc_data_ready; - sock->sk_error_report = rxrpc_error_report; + sock->sk_user_data = trans; + sock->sk_data_ready = rxrpc_data_ready; + sock->sk_error_report = rxrpc_error_report; down_write(&rxrpc_proc_transports_sem); - list_add_tail(&trans->proc_link,&rxrpc_proc_transports); + list_add_tail(&trans->proc_link, &rxrpc_proc_transports); up_write(&rxrpc_proc_transports_sem); __RXACCT(atomic_inc(&rxrpc_transport_count)); *_trans = trans; - _leave(" = 0 (%p)",trans); + _leave(" = 0 (%p)", trans); return 0; error: rxrpc_put_transport(trans); - _leave(" = %d",ret); - + _leave(" = %d", ret); return ret; - } /* end rxrpc_create_transport() */ /*****************************************************************************/ @@ -151,12 +152,13 @@ void rxrpc_clear_transport(struct rxrpc_ */ void rxrpc_put_transport(struct rxrpc_transport *trans) { - _enter("%p{u=%d p=%hu}",trans,atomic_read(&trans->usage),trans->port); + _enter("%p{u=%d p=%hu}", + trans, atomic_read(&trans->usage), trans->port); - if (atomic_read(&trans->usage)<=0) - BUG(); + BUG_ON(atomic_read(&trans->usage) <= 0); - /* to prevent a race, the decrement and the dequeue must be effectively atomic */ + /* to prevent a race, the decrement and the dequeue must be + * effectively atomic */ spin_lock(&rxrpc_transports_lock); if (likely(!atomic_dec_and_test(&trans->usage))) { spin_unlock(&rxrpc_transports_lock); @@ -169,7 +171,7 @@ void rxrpc_put_transport(struct rxrpc_tr /* finish cleaning up the transport */ if (trans->socket) - trans->socket->ops->shutdown(trans->socket,2); + trans->socket->ops->shutdown(trans->socket, 2); rxrpc_krxsecd_clear_transport(trans); rxrpc_krxiod_dequeue_transport(trans); @@ -192,41 +194,41 @@ void rxrpc_put_transport(struct rxrpc_tr kfree(trans); _leave(""); - } /* end rxrpc_put_transport() */ /*****************************************************************************/ /* * add a service to a transport to be listened upon */ -int rxrpc_add_service(struct rxrpc_transport *trans, struct rxrpc_service *newsrv) +int rxrpc_add_service(struct rxrpc_transport *trans, + struct rxrpc_service *newsrv) { struct rxrpc_service *srv; struct list_head *_p; int ret = -EEXIST; - _enter("%p{%hu},%p{%hu}",trans,trans->port,newsrv,newsrv->service_id); + _enter("%p{%hu},%p{%hu}", + trans, trans->port, newsrv, newsrv->service_id); /* verify that the service ID is not already present */ spin_lock(&trans->lock); - list_for_each(_p,&trans->services) { - srv = list_entry(_p,struct rxrpc_service,link); - if (srv->service_id==newsrv->service_id) + list_for_each(_p, &trans->services) { + srv = list_entry(_p, struct rxrpc_service, link); + if (srv->service_id == newsrv->service_id) goto out; } /* okay - add the transport to the list */ - list_add_tail(&newsrv->link,&trans->services); + list_add_tail(&newsrv->link, &trans->services); rxrpc_get_transport(trans); ret = 0; out: spin_unlock(&trans->lock); - _leave("= %d",ret); + _leave("= %d", ret); return ret; - } /* end rxrpc_add_service() */ /*****************************************************************************/ @@ -235,7 +237,7 @@ int rxrpc_add_service(struct rxrpc_trans */ void rxrpc_del_service(struct rxrpc_transport *trans, struct rxrpc_service *srv) { - _enter("%p{%hu},%p{%hu}",trans,trans->port,srv,srv->service_id); + _enter("%p{%hu},%p{%hu}", trans, trans->port, srv, srv->service_id); spin_lock(&trans->lock); list_del(&srv->link); @@ -244,7 +246,6 @@ void rxrpc_del_service(struct rxrpc_tran rxrpc_put_transport(trans); _leave(""); - } /* end rxrpc_del_service() */ /*****************************************************************************/ @@ -255,7 +256,7 @@ static void rxrpc_data_ready(struct sock { struct rxrpc_transport *trans; - _enter("%p{t=%p},%d",sk,sk->sk_user_data,count); + _enter("%p{t=%p},%d", sk, sk->sk_user_data, count); /* queue the transport for attention by krxiod */ trans = (struct rxrpc_transport *) sk->sk_user_data; @@ -267,7 +268,6 @@ static void rxrpc_data_ready(struct sock wake_up_interruptible(sk->sk_sleep); _leave(""); - } /* end rxrpc_data_ready() */ /*****************************************************************************/ @@ -279,7 +279,7 @@ static void rxrpc_error_report(struct so { struct rxrpc_transport *trans; - _enter("%p{t=%p}",sk,sk->sk_user_data); + _enter("%p{t=%p}", sk, sk->sk_user_data); /* queue the transport for attention by krxiod */ trans = (struct rxrpc_transport *) sk->sk_user_data; @@ -293,13 +293,12 @@ static void rxrpc_error_report(struct so wake_up_interruptible(sk->sk_sleep); _leave(""); - } /* end rxrpc_error_report() */ /*****************************************************************************/ /* - * split a message up, allocating message records and filling them in from the contents of a - * socket buffer + * split a message up, allocating message records and filling them in + * from the contents of a socket buffer */ static int rxrpc_incoming_msg(struct rxrpc_transport *trans, struct sk_buff *pkt, @@ -310,18 +309,19 @@ static int rxrpc_incoming_msg(struct rxr _enter(""); - msg = kmalloc(sizeof(struct rxrpc_message),GFP_KERNEL); + msg = kmalloc(sizeof(struct rxrpc_message), GFP_KERNEL); if (!msg) { _leave(" = -ENOMEM"); return -ENOMEM; } - memset(msg,0,sizeof(*msg)); - atomic_set(&msg->usage,1); + memset(msg, 0, sizeof(*msg)); + atomic_set(&msg->usage, 1); list_add_tail(&msg->link,msgq); /* dig out the Rx routing parameters */ - if (skb_copy_bits(pkt,sizeof(struct udphdr),&msg->hdr,sizeof(msg->hdr))<0) { + if (skb_copy_bits(pkt, sizeof(struct udphdr), + &msg->hdr, sizeof(msg->hdr)) < 0) { ret = -EBADMSG; goto error; } @@ -352,7 +352,9 @@ static int rxrpc_incoming_msg(struct rxr __RXACCT(atomic_inc(&rxrpc_message_count)); /* split off jumbo packets */ - while (msg->hdr.type==RXRPC_PACKET_TYPE_DATA && msg->hdr.flags & RXRPC_JUMBO_PACKET) { + while (msg->hdr.type == RXRPC_PACKET_TYPE_DATA && + msg->hdr.flags & RXRPC_JUMBO_PACKET + ) { struct rxrpc_jumbo_header jumbo; struct rxrpc_message *jumbomsg = msg; @@ -360,23 +362,25 @@ static int rxrpc_incoming_msg(struct rxr /* quick sanity check */ ret = -EBADMSG; - if (msg->dsize < RXRPC_JUMBO_DATALEN+sizeof(struct rxrpc_jumbo_header)) + if (msg->dsize < + RXRPC_JUMBO_DATALEN + sizeof(struct rxrpc_jumbo_header)) goto error; if (msg->hdr.flags & RXRPC_LAST_PACKET) goto error; /* dig out the secondary header */ - if (skb_copy_bits(pkt,msg->offset+RXRPC_JUMBO_DATALEN,&jumbo,sizeof(jumbo))<0) + if (skb_copy_bits(pkt, msg->offset + RXRPC_JUMBO_DATALEN, + &jumbo, sizeof(jumbo)) < 0) goto error; /* allocate a new message record */ ret = -ENOMEM; - msg = kmalloc(sizeof(struct rxrpc_message),GFP_KERNEL); + msg = kmalloc(sizeof(struct rxrpc_message), GFP_KERNEL); if (!msg) goto error; - memcpy(msg,jumbomsg,sizeof(*msg)); - list_add_tail(&msg->link,msgq); + memcpy(msg, jumbomsg, sizeof(*msg)); + list_add_tail(&msg->link, msgq); /* adjust the jumbo packet */ jumbomsg->dsize = RXRPC_JUMBO_DATALEN; @@ -388,12 +392,15 @@ static int rxrpc_incoming_msg(struct rxr msg->seq++; msg->hdr.seq = htonl(msg->seq); msg->hdr.serial = htonl(ntohl(msg->hdr.serial) + 1); - msg->offset += RXRPC_JUMBO_DATALEN + sizeof(struct rxrpc_jumbo_header); - msg->dsize -= RXRPC_JUMBO_DATALEN + sizeof(struct rxrpc_jumbo_header); + msg->offset += RXRPC_JUMBO_DATALEN + + sizeof(struct rxrpc_jumbo_header); + msg->dsize -= RXRPC_JUMBO_DATALEN + + sizeof(struct rxrpc_jumbo_header); msg->hdr.flags = jumbo.flags; msg->hdr._rsvd = jumbo._rsvd; - _net("Rx Split jumbo packet from %s (%08x;%08x,%1x,%d,%s,%02x,%d,%d)", + _net("Rx Split jumbo packet from %s" + " (%08x;%08x,%1x,%d,%s,%02x,%d,%d)", msg->hdr.flags & RXRPC_CLIENT_INITIATED ? "client" : "server", ntohl(msg->hdr.epoch), (ntohl(msg->hdr.cid) & RXRPC_CIDMASK) >> RXRPC_CIDSHIFT, @@ -407,18 +414,18 @@ static int rxrpc_incoming_msg(struct rxr __RXACCT(atomic_inc(&rxrpc_message_count)); } - _leave(" = 0 #%d",atomic_read(&rxrpc_message_count)); + _leave(" = 0 #%d", atomic_read(&rxrpc_message_count)); return 0; error: while (!list_empty(msgq)) { - msg = list_entry(msgq->next,struct rxrpc_message,link); + msg = list_entry(msgq->next, struct rxrpc_message, link); list_del_init(&msg->link); rxrpc_put_message(msg); } - _leave(" = %d",ret); + _leave(" = %d", ret); return ret; } /* end rxrpc_incoming_msg() */ @@ -438,7 +445,7 @@ void rxrpc_trans_receive_packet(struct r LIST_HEAD(msgq); - _enter("%p{%d}",trans,trans->port); + _enter("%p{%d}", trans, trans->port); for (;;) { /* deal with outstanting errors first */ @@ -446,22 +453,25 @@ void rxrpc_trans_receive_packet(struct r rxrpc_trans_receive_error_report(trans); /* attempt to receive a packet */ - pkt = skb_recv_datagram(trans->socket->sk,0,1,&ret); + pkt = skb_recv_datagram(trans->socket->sk, 0, 1, &ret); if (!pkt) { - if (ret==-EAGAIN) { + if (ret == -EAGAIN) { _leave(" EAGAIN"); return; } /* an icmp error may have occurred */ rxrpc_krxiod_queue_transport(trans); - _leave(" error %d\n",ret); + _leave(" error %d\n", ret); return; } - /* we'll probably need to checksum it (didn't call sock_recvmsg) */ + /* we'll probably need to checksum it (didn't call + * sock_recvmsg) */ if (pkt->ip_summed != CHECKSUM_UNNECESSARY) { - if ((unsigned short)csum_fold(skb_checksum(pkt,0,pkt->len,pkt->csum))) { + if ((unsigned short) + csum_fold(skb_checksum(pkt, 0, pkt->len, + pkt->csum))) { kfree_skb(pkt); rxrpc_krxiod_queue_transport(trans); _leave(" CSUM failed"); @@ -472,34 +482,36 @@ void rxrpc_trans_receive_packet(struct r addr = pkt->nh.iph->saddr; port = pkt->h.uh->source; - _net("Rx Received UDP packet from %08x:%04hu",ntohl(addr),ntohs(port)); + _net("Rx Received UDP packet from %08x:%04hu", + ntohl(addr), ntohs(port)); /* unmarshall the Rx parameters and split jumbo packets */ - ret = rxrpc_incoming_msg(trans,pkt,&msgq); - if (ret<0) { + ret = rxrpc_incoming_msg(trans, pkt, &msgq); + if (ret < 0) { kfree_skb(pkt); rxrpc_krxiod_queue_transport(trans); _leave(" bad packet"); return; } - if (list_empty(&msgq)) BUG(); + BUG_ON(list_empty(&msgq)); - msg = list_entry(msgq.next,struct rxrpc_message,link); + msg = list_entry(msgq.next, struct rxrpc_message, link); - /* locate the record for the peer from which it originated */ - ret = rxrpc_peer_lookup(trans,addr,&peer); - if (ret<0) { + /* locate the record for the peer from which it + * originated */ + ret = rxrpc_peer_lookup(trans, addr, &peer); + if (ret < 0) { kdebug("Rx No connections from that peer"); - rxrpc_trans_immediate_abort(trans,msg,-EINVAL); + rxrpc_trans_immediate_abort(trans, msg, -EINVAL); goto finished_msg; } /* try and find a matching connection */ - ret = rxrpc_connection_lookup(peer,msg,&msg->conn); - if (ret<0) { + ret = rxrpc_connection_lookup(peer, msg, &msg->conn); + if (ret < 0) { kdebug("Rx Unknown Connection"); - rxrpc_trans_immediate_abort(trans,msg,-EINVAL); + rxrpc_trans_immediate_abort(trans, msg, -EINVAL); rxrpc_put_peer(peer); goto finished_msg; } @@ -507,23 +519,23 @@ void rxrpc_trans_receive_packet(struct r /* deal with the first packet of a new call */ if (msg->hdr.flags & RXRPC_CLIENT_INITIATED && - msg->hdr.type==RXRPC_PACKET_TYPE_DATA && - ntohl(msg->hdr.seq)==1 + msg->hdr.type == RXRPC_PACKET_TYPE_DATA && + ntohl(msg->hdr.seq) == 1 ) { _debug("Rx New server call"); - rxrpc_trans_receive_new_call(trans,&msgq); + rxrpc_trans_receive_new_call(trans, &msgq); goto finished_msg; } /* deal with subsequent packet(s) of call */ _debug("Rx Call packet"); while (!list_empty(&msgq)) { - msg = list_entry(msgq.next,struct rxrpc_message,link); + msg = list_entry(msgq.next, struct rxrpc_message, link); list_del_init(&msg->link); - ret = rxrpc_conn_receive_call_packet(msg->conn,NULL,msg); - if (ret<0) { - rxrpc_trans_immediate_abort(trans,msg,ret); + ret = rxrpc_conn_receive_call_packet(msg->conn, NULL, msg); + if (ret < 0) { + rxrpc_trans_immediate_abort(trans, msg, ret); rxrpc_put_message(msg); goto finished_msg; } @@ -536,7 +548,7 @@ void rxrpc_trans_receive_packet(struct r /* dispose of the packets */ finished_msg: while (!list_empty(&msgq)) { - msg = list_entry(msgq.next,struct rxrpc_message,link); + msg = list_entry(msgq.next, struct rxrpc_message, link); list_del_init(&msg->link); rxrpc_put_message(msg); @@ -561,7 +573,7 @@ static int rxrpc_trans_receive_new_call( _enter(""); /* only bother with the first packet */ - msg = list_entry(msgq->next,struct rxrpc_message,link); + msg = list_entry(msgq->next, struct rxrpc_message, link); list_del_init(&msg->link); rxrpc_krxsecd_queue_incoming_call(msg); rxrpc_put_message(msg); @@ -584,13 +596,13 @@ int rxrpc_trans_immediate_abort(struct r struct msghdr msghdr; struct iovec iov[2]; mm_segment_t oldfs; + uint32_t _error; int len, ret; - u32 _error; - _enter("%p,%p,%d",trans,msg,error); + _enter("%p,%p,%d", trans, msg, error); /* don't abort an abort packet */ - if (msg->hdr.type==RXRPC_PACKET_TYPE_ABORT) { + if (msg->hdr.type == RXRPC_PACKET_TYPE_ABORT) { _leave(" = 0"); return 0; } @@ -598,12 +610,13 @@ int rxrpc_trans_immediate_abort(struct r _error = htonl(-error); /* set up the message to be transmitted */ - memcpy(&ahdr,&msg->hdr,sizeof(ahdr)); + memcpy(&ahdr, &msg->hdr, sizeof(ahdr)); ahdr.epoch = msg->hdr.epoch; ahdr.serial = htonl(1); ahdr.seq = 0; ahdr.type = RXRPC_PACKET_TYPE_ABORT; - ahdr.flags = RXRPC_LAST_PACKET | (~msg->hdr.flags & RXRPC_CLIENT_INITIATED); + ahdr.flags = RXRPC_LAST_PACKET; + ahdr.flags |= ~msg->hdr.flags & RXRPC_CLIENT_INITIATED; iov[0].iov_len = sizeof(ahdr); iov[0].iov_base = &ahdr; @@ -634,17 +647,17 @@ int rxrpc_trans_immediate_abort(struct r /* send the message */ oldfs = get_fs(); set_fs(KERNEL_DS); - ret = sock_sendmsg(trans->socket,&msghdr,len); + ret = sock_sendmsg(trans->socket, &msghdr, len); set_fs(oldfs); - _leave(" = %d",ret); + _leave(" = %d", ret); return ret; } /* end rxrpc_trans_immediate_abort() */ /*****************************************************************************/ /* - * receive an ICMP error report and percolate it to all connections heading to the affected - * host or port + * receive an ICMP error report and percolate it to all connections + * heading to the affected host or port */ static void rxrpc_trans_receive_error_report(struct rxrpc_transport *trans) { @@ -655,10 +668,10 @@ static void rxrpc_trans_receive_error_re struct errormsg emsg; struct msghdr msg; mm_segment_t oldfs; + uint16_t port; int local, err; - u16 port; - _enter("%p",trans); + _enter("%p", trans); for (;;) { trans->error_rcvd = 0; @@ -674,48 +687,63 @@ static void rxrpc_trans_receive_error_re oldfs = get_fs(); set_fs(KERNEL_DS); - err = sock_recvmsg(trans->socket,&msg,0,MSG_ERRQUEUE|MSG_DONTWAIT|MSG_TRUNC); + err = sock_recvmsg(trans->socket, &msg, 0, + MSG_ERRQUEUE | MSG_DONTWAIT | MSG_TRUNC); set_fs(oldfs); - if (err==-EAGAIN) { + if (err == -EAGAIN) { _leave(""); return; } - if (err<0) { - printk("%s: unable to recv an error report: %d\n",__FUNCTION__,err); + if (err < 0) { + printk("%s: unable to recv an error report: %d\n", + __FUNCTION__, err); _leave(""); return; } - msg.msg_controllen = (char*)msg.msg_control - (char*)&emsg; + msg.msg_controllen = (char *) msg.msg_control - (char *) &emsg; - if (msg.msg_controllenconn_lock); - list_for_each(_p,&peer->conn_active) { - conn = list_entry(_p,struct rxrpc_connection,link); - if (port && conn->addr.sin_port!=port) + list_for_each(_p, &peer->conn_active) { + conn = list_entry(_p, struct rxrpc_connection, + link); + if (port && conn->addr.sin_port != port) continue; if (!list_empty(&conn->err_link)) continue; rxrpc_get_connection(conn); - list_add_tail(&conn->err_link,&connq); + list_add_tail(&conn->err_link, &connq); } read_unlock(&peer->conn_lock); /* service all those connections */ while (!list_empty(&connq)) { - conn = list_entry(connq.next,struct rxrpc_connection,err_link); + conn = list_entry(connq.next, + struct rxrpc_connection, + err_link); list_del(&conn->err_link); - rxrpc_conn_handle_error(conn,local,err); + rxrpc_conn_handle_error(conn, local, err); rxrpc_put_connection(conn); } diff -prauN linux-2.6.0-test5/net/sched/Kconfig wli-2.6.0-test5-bk12-25/net/sched/Kconfig --- linux-2.6.0-test5/net/sched/Kconfig 2003-09-08 12:50:23.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/sched/Kconfig 2003-09-25 19:16:18.000000000 -0700 @@ -21,10 +21,8 @@ config NET_SCH_CBQ is a routine that allows you to sort your outgoing traffic into classes based on a certain criterion. - This code is also available as a module called sch_cbq ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this code as a module, choose M here: the + module will be called sch_cbq. config NET_SCH_HTB tristate "HTB packet scheduler" @@ -38,10 +36,8 @@ config NET_SCH_HTB HTB is very similar to the CBQ regarding its goals however is has different properties and different algorithm. - This code is also available as a module called sch_htb ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this code as a module, choose M here: the + module will be called sch_htb. config NET_SCH_CSZ tristate "CSZ packet scheduler" @@ -55,10 +51,8 @@ config NET_SCH_CSZ Note: this scheduler is currently broken. - This code is also available as a module called sch_csz ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this code as a module, choose M here: the + module will be called sch_csz. #tristate ' H-PFQ packet scheduler' CONFIG_NET_SCH_HPFQ #tristate ' H-FSC packet scheduler' CONFIG_NET_SCH_HFCS @@ -72,10 +66,8 @@ config NET_SCH_ATM the flow(s) it is handling to a given virtual circuit (see the top of ). - This code is also available as a module called sch_atm ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this code as a module, choose M here: the + module will be called sch_atm. config NET_SCH_PRIO tristate "The simplest PRIO pseudoscheduler" @@ -85,10 +77,8 @@ config NET_SCH_PRIO "scheduler" for some of your network devices or as a leaf discipline for the CBQ scheduling algorithm. If unsure, say Y. - This code is also available as a module called sch_prio ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this code as a module, choose M here: the + module will be called sch_prio. config NET_SCH_RED tristate "RED queue" @@ -99,10 +89,8 @@ config NET_SCH_RED the top of for details and references about the algorithm). - This code is also available as a module called sch_red ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this code as a module, choose M here: the + module will be called sch_red. config NET_SCH_SFQ tristate "SFQ queue" @@ -114,10 +102,8 @@ config NET_SCH_SFQ for details and references about the SFQ algorithm). - This code is also available as a module called sch_sfq ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this code as a module, choose M here: the + module will be called sch_sfq. config NET_SCH_TEQL tristate "TEQL queue" @@ -130,10 +116,8 @@ config NET_SCH_TEQL one virtual device. (see the top of for details). - This code is also available as a module called sch_teql ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this code as a module, choose M here: the + module will be called sch_teql. config NET_SCH_TBF tristate "TBF queue" @@ -144,10 +128,8 @@ config NET_SCH_TBF leaf discipline for the CBQ scheduling algorithm (see the top of for a description of the TBF algorithm). - This code is also available as a module called sch_tbf ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this code as a module, choose M here: the + module will be called sch_tbf. config NET_SCH_GRED tristate "GRED queue" @@ -158,10 +140,8 @@ config NET_SCH_GRED (see the top of for details and references about the algorithm). - This code is also available as a module called sch_gred ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this code as a module, choose M here: the + module will be called sch_gred. config NET_SCH_DSMARK tristate "Diffserv field marker" @@ -172,10 +152,8 @@ config NET_SCH_DSMARK Technical information on this method, with pointers to associated RFCs, is available at . - This code is also available as a module called sch_dsmark ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this code as a module, choose M here: the + module will be called sch_dsmark. config NET_SCH_INGRESS tristate "Ingress Qdisc" @@ -185,10 +163,8 @@ config NET_SCH_INGRESS and drop packets when this bandwidth exceeds your desired rate. If unsure, say Y. - This code is also available as a module called cls_ingress - ( = code which can be inserted in and removed from the running - kernel whenever you want). If you want to compile it as a module, - say M here and read . + To compile this code as a module, choose M here: the + module will be called cls_ingress. config NET_QOS bool "QoS support" @@ -240,10 +216,8 @@ config NET_CLS_TCINDEX feature if you want to implement Differentiated Services using sch_dsmark. If unsure, say Y. - This code is also available as a module called cls_tcindex - ( = code which can be inserted in and removed from the running - kernel whenever you want). If you want to compile it as a module, - say M here and read . + To compile this code as a module, choose M here: the + module will be called cls_tcindex. config NET_CLS_ROUTE4 tristate "Routing table based classifier" @@ -252,10 +226,8 @@ config NET_CLS_ROUTE4 If you say Y here, you will be able to classify outgoing packets according to the route table entry they matched. If unsure, say Y. - This code is also available as a module called cls_route ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this code as a module, choose M here: the + module will be called cls_route. config NET_CLS_ROUTE bool @@ -269,10 +241,8 @@ config NET_CLS_FW If you say Y here, you will be able to classify outgoing packets according to firewall criteria you specified. - This code is also available as a module called cls_fw ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this code as a module, choose M here: the + module will be called cls_fw. config NET_CLS_U32 tristate "U32 classifier" @@ -281,10 +251,8 @@ config NET_CLS_U32 If you say Y here, you will be able to classify outgoing packets according to their destination address. If unsure, say Y. - This code is also available as a module called cls_u32 ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this code as a module, choose M here: the + module will be called cls_u32. config NET_CLS_RSVP tristate "Special RSVP classifier" @@ -297,10 +265,8 @@ config NET_CLS_RSVP Say Y here if you want to be able to classify outgoing packets based on their RSVP requests. - This code is also available as a module called cls_rsvp ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this code as a module, choose M here: the + module will be called cls_rsvp. config NET_CLS_RSVP6 tristate "Special RSVP classifier for IPv6" @@ -314,10 +280,8 @@ config NET_CLS_RSVP6 on their RSVP requests and you are using the new Internet Protocol IPv6 as opposed to the older and more common IPv4. - This code is also available as a module called cls_rsvp6 ( = code - which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read . + To compile this code as a module, choose M here: the + module will be called cls_rsvp6. config NET_CLS_POLICE bool "Traffic policing (needed for in/egress)" diff -prauN linux-2.6.0-test5/net/sched/estimator.c wli-2.6.0-test5-bk12-25/net/sched/estimator.c --- linux-2.6.0-test5/net/sched/estimator.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/sched/estimator.c 2003-09-25 19:16:18.000000000 -0700 @@ -26,7 +26,6 @@ #include #include #include -#include #include #include diff -prauN linux-2.6.0-test5/net/sched/police.c wli-2.6.0-test5-bk12-25/net/sched/police.c --- linux-2.6.0-test5/net/sched/police.c 2003-09-08 12:50:28.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/sched/police.c 2003-09-25 19:16:18.000000000 -0700 @@ -27,7 +27,6 @@ #include #include #include -#include #include #include diff -prauN linux-2.6.0-test5/net/sched/sch_api.c wli-2.6.0-test5-bk12-25/net/sched/sch_api.c --- linux-2.6.0-test5/net/sched/sch_api.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/sched/sch_api.c 2003-09-25 19:16:18.000000000 -0700 @@ -32,6 +32,7 @@ #include #include #include +#include #include #include @@ -1059,27 +1060,27 @@ int psched_us_per_tick = 1; int psched_tick_per_us = 1; #ifdef CONFIG_PROC_FS -static int psched_read_proc(char *buffer, char **start, off_t offset, - int length, int *eof, void *data) +static int psched_show(struct seq_file *seq, void *v) { - int len; - - len = sprintf(buffer, "%08x %08x %08x %08x\n", + seq_printf(seq, "%08x %08x %08x %08x\n", psched_tick_per_us, psched_us_per_tick, 1000000, HZ); - len -= offset; - - if (len > length) - len = length; - if(len < 0) - len = 0; - - *start = buffer + offset; - *eof = 1; + return 0; +} - return len; +static int psched_open(struct inode *inode, struct file *file) +{ + return single_open(file, psched_show, PDE(inode)->data); } + +static struct file_operations psched_fops = { + .owner = THIS_MODULE, + .open = psched_open, + .read = seq_read, + .llseek = seq_lseek, + .release = single_release, +}; #endif #if PSCHED_CLOCK_SOURCE == PSCHED_GETTIMEOFDAY @@ -1250,9 +1251,7 @@ int __init pktsched_init(void) tc_filter_init(); #endif -#ifdef CONFIG_PROC_FS - create_proc_read_entry("net/psched", 0, 0, psched_read_proc, NULL); -#endif + proc_net_fops_create("psched", 0, &psched_fops); return 0; } diff -prauN linux-2.6.0-test5/net/sched/sch_atm.c wli-2.6.0-test5-bk12-25/net/sched/sch_atm.c --- linux-2.6.0-test5/net/sched/sch_atm.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/sched/sch_atm.c 2003-09-25 19:16:18.000000000 -0700 @@ -216,6 +216,13 @@ static void sch_atm_pop(struct atm_vcc * tasklet_schedule(&p->task); } +static const u8 llc_oui_ip[] = { + 0xaa, /* DSAP: non-ISO */ + 0xaa, /* SSAP: non-ISO */ + 0x03, /* Ctrl: Unnumbered Information Command PDU */ + 0x00, /* OUI: EtherType */ + 0x00, 0x00, + 0x08, 0x00 }; /* Ethertype IP (0800) */ static int atm_tc_change(struct Qdisc *sch, u32 classid, u32 parent, struct rtattr **tca, unsigned long *arg) @@ -322,11 +329,10 @@ static int atm_tc_change(struct Qdisc *s flow->next = p->link.next; p->link.next = flow; flow->hdr_len = hdr_len; - if (hdr) memcpy(flow->hdr,hdr,hdr_len); - else { - memcpy(flow->hdr,llc_oui,sizeof(llc_oui)); - ((u16 *) flow->hdr)[3] = htons(ETH_P_IP); - } + if (hdr) + memcpy(flow->hdr,hdr,hdr_len); + else + memcpy(flow->hdr,llc_oui_ip,sizeof(llc_oui_ip)); *arg = (unsigned long) flow; return 0; err_out: diff -prauN linux-2.6.0-test5/net/sched/sch_generic.c wli-2.6.0-test5-bk12-25/net/sched/sch_generic.c --- linux-2.6.0-test5/net/sched/sch_generic.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/sched/sch_generic.c 2003-09-25 19:16:18.000000000 -0700 @@ -7,7 +7,7 @@ * 2 of the License, or (at your option) any later version. * * Authors: Alexey Kuznetsov, - * Jamal Hadi Salim, 990601 + * Jamal Hadi Salim, 990601 * - Ingress support */ @@ -278,6 +278,8 @@ pfifo_fast_enqueue(struct sk_buff *skb, if (list->qlen <= qdisc->dev->tx_queue_len) { __skb_queue_tail(list, skb); qdisc->q.qlen++; + qdisc->stats.bytes += skb->len; + qdisc->stats.packets++; return 0; } qdisc->stats.drops++; @@ -326,6 +328,21 @@ pfifo_fast_reset(struct Qdisc* qdisc) qdisc->q.qlen = 0; } +static int pfifo_fast_dump(struct Qdisc *qdisc, struct sk_buff *skb) +{ + unsigned char *b = skb->tail; + struct tc_prio_qopt opt; + + opt.bands = 3; + memcpy(&opt.priomap, prio2band, TC_PRIO_MAX+1); + RTA_PUT(skb, TCA_OPTIONS, sizeof(opt), &opt); + return skb->len; + +rtattr_failure: + skb_trim(skb, b - skb->data); + return -1; +} + static int pfifo_fast_init(struct Qdisc *qdisc, struct rtattr *opt) { int i; @@ -349,6 +366,7 @@ static struct Qdisc_ops pfifo_fast_ops = .requeue = pfifo_fast_requeue, .init = pfifo_fast_init, .reset = pfifo_fast_reset, + .dump = pfifo_fast_dump, .owner = THIS_MODULE, }; @@ -438,6 +456,12 @@ void dev_activate(struct net_device *dev printk(KERN_INFO "%s: activation failed\n", dev->name); return; } + + write_lock(&qdisc_tree_lock); + qdisc->next = dev->qdisc_list; + dev->qdisc_list = qdisc; + write_unlock(&qdisc_tree_lock); + } else { qdisc = &noqueue_qdisc; } diff -prauN linux-2.6.0-test5/net/sched/sch_htb.c wli-2.6.0-test5-bk12-25/net/sched/sch_htb.c --- linux-2.6.0-test5/net/sched/sch_htb.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/sched/sch_htb.c 2003-09-25 19:16:18.000000000 -0700 @@ -32,7 +32,6 @@ #include #include #include -#include #include #include #include diff -prauN linux-2.6.0-test5/net/sunrpc/cache.c wli-2.6.0-test5-bk12-25/net/sunrpc/cache.c --- linux-2.6.0-test5/net/sunrpc/cache.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/sunrpc/cache.c 2003-09-25 19:16:18.000000000 -0700 @@ -1035,7 +1035,7 @@ static void *c_start(struct seq_file *m, read_lock(&cd->hash_lock); if (!n--) - return (void *)1; + return SEQ_START_TOKEN; hash = n >> 32; entry = n & ((1LL<<32) - 1); @@ -1060,7 +1060,7 @@ static void *c_next(struct seq_file *m, int hash = (*pos >> 32); struct cache_detail *cd = ((struct handle*)m->private)->cd; - if (p == (void *)1) + if (p == SEQ_START_TOKEN) hash = 0; else if (ch->next == NULL) { hash++; @@ -1092,7 +1092,7 @@ static int c_show(struct seq_file *m, vo struct cache_head *cp = p; struct cache_detail *cd = ((struct handle*)m->private)->cd; - if (p == (void *)1) + if (p == SEQ_START_TOKEN) return cd->cache_show(m, cd, NULL); ifdebug(CACHE) diff -prauN linux-2.6.0-test5/net/sunrpc/svcsock.c wli-2.6.0-test5-bk12-25/net/sunrpc/svcsock.c --- linux-2.6.0-test5/net/sunrpc/svcsock.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/sunrpc/svcsock.c 2003-09-25 19:16:18.000000000 -0700 @@ -352,9 +352,9 @@ svc_sendto(struct svc_rqst *rqstp, struc struct svc_sock *svsk = rqstp->rq_sock; struct socket *sock = svsk->sk_sock; int slen; - struct { struct cmsghdr cmh; - struct in_pktinfo pki; - } cm; + char buffer[CMSG_SPACE(sizeof(struct in_pktinfo))]; + struct cmsghdr *cmh = (struct cmsghdr *)buffer; + struct in_pktinfo *pki = (struct in_pktinfo *)CMSG_DATA(cmh); int len = 0; int result; int size; @@ -374,13 +374,13 @@ svc_sendto(struct svc_rqst *rqstp, struc msg.msg_iovlen = 0; msg.msg_flags = MSG_MORE; - msg.msg_control = &cm; - msg.msg_controllen = sizeof(cm); - cm.cmh.cmsg_len = sizeof(cm); - cm.cmh.cmsg_level = SOL_IP; - cm.cmh.cmsg_type = IP_PKTINFO; - cm.pki.ipi_ifindex = 0; - cm.pki.ipi_spec_dst.s_addr = rqstp->rq_daddr; + msg.msg_control = cmh; + msg.msg_controllen = sizeof(buffer); + cmh->cmsg_len = CMSG_LEN(sizeof(*pki)); + cmh->cmsg_level = SOL_IP; + cmh->cmsg_type = IP_PKTINFO; + pki->ipi_ifindex = 0; + pki->ipi_spec_dst.s_addr = rqstp->rq_daddr; if (sock_sendmsg(sock, &msg, 0) < 0) goto out; diff -prauN linux-2.6.0-test5/net/wanrouter/af_wanpipe.c wli-2.6.0-test5-bk12-25/net/wanrouter/af_wanpipe.c --- linux-2.6.0-test5/net/wanrouter/af_wanpipe.c 2003-09-08 12:50:38.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/wanrouter/af_wanpipe.c 2003-09-25 19:16:18.000000000 -0700 @@ -32,7 +32,6 @@ * ******************************************************************************/ -#include #include #include #include diff -prauN linux-2.6.0-test5/net/wanrouter/wanmain.c wli-2.6.0-test5-bk12-25/net/wanrouter/wanmain.c --- linux-2.6.0-test5/net/wanrouter/wanmain.c 2003-09-08 12:50:16.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/wanrouter/wanmain.c 2003-09-25 19:16:18.000000000 -0700 @@ -42,7 +42,6 @@ * Jun 02, 1999 Gideon Hack Updates for Linux 2.0.X and 2.2.X kernels. *****************************************************************************/ -#include #include #include /* offsetof(), etc. */ #include /* return codes */ diff -prauN linux-2.6.0-test5/net/wanrouter/wanproc.c wli-2.6.0-test5-bk12-25/net/wanrouter/wanproc.c --- linux-2.6.0-test5/net/wanrouter/wanproc.c 2003-09-08 12:50:03.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/wanrouter/wanproc.c 2003-09-25 19:16:18.000000000 -0700 @@ -86,7 +86,7 @@ static void *r_start(struct seq_file *m, lock_kernel(); if (!l--) - return (void *)1; + return SEQ_START_TOKEN; for (wandev = wanrouter_router_devlist; l-- && wandev; wandev = wandev->next) ; @@ -97,7 +97,7 @@ static void *r_next(struct seq_file *m, { struct wan_device *wandev = v; (*pos)++; - return (v == (void *)1) ? wanrouter_router_devlist : wandev->next; + return (v == SEQ_START_TOKEN) ? wanrouter_router_devlist : wandev->next; } static void r_stop(struct seq_file *m, void *v) @@ -108,7 +108,7 @@ static void r_stop(struct seq_file *m, v static int config_show(struct seq_file *m, void *v) { struct wan_device *p = v; - if (v == (void *)1) { + if (v == SEQ_START_TOKEN) { seq_puts(m, "Device name | port |IRQ|DMA| mem.addr |" "mem.size|option1|option2|option3|option4\n"); return 0; @@ -124,7 +124,7 @@ static int config_show(struct seq_file * static int status_show(struct seq_file *m, void *v) { struct wan_device *p = v; - if (v == (void *)1) { + if (v == SEQ_START_TOKEN) { seq_puts(m, "Device name |protocol|station|interface|" "clocking|baud rate| MTU |ndev|link state\n"); return 0; diff -prauN linux-2.6.0-test5/net/x25/x25_proc.c wli-2.6.0-test5-bk12-25/net/x25/x25_proc.c --- linux-2.6.0-test5/net/x25/x25_proc.c 2003-09-08 12:49:54.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/x25/x25_proc.c 2003-09-25 19:16:18.000000000 -0700 @@ -44,7 +44,7 @@ static void *x25_seq_route_start(struct loff_t l = *pos; read_lock_bh(&x25_route_list_lock); - return l ? x25_get_route_idx(--l) : (void *)1; + return l ? x25_get_route_idx(--l) : SEQ_START_TOKEN; } static void *x25_seq_route_next(struct seq_file *seq, void *v, loff_t *pos) @@ -52,7 +52,7 @@ static void *x25_seq_route_next(struct s struct x25_route *rt; ++*pos; - if (v == (void *)1) { + if (v == SEQ_START_TOKEN) { rt = NULL; if (!list_empty(&x25_route_list)) rt = list_entry(x25_route_list.next, @@ -77,7 +77,7 @@ static int x25_seq_route_show(struct seq { struct x25_route *rt; - if (v == (void *)1) { + if (v == SEQ_START_TOKEN) { seq_puts(seq, "Address Digits Device\n"); goto out; } @@ -108,7 +108,7 @@ static void *x25_seq_socket_start(struct loff_t l = *pos; read_lock_bh(&x25_list_lock); - return l ? x25_get_socket_idx(--l) : (void *)1; + return l ? x25_get_socket_idx(--l) : SEQ_START_TOKEN; } static void *x25_seq_socket_next(struct seq_file *seq, void *v, loff_t *pos) @@ -116,7 +116,7 @@ static void *x25_seq_socket_next(struct struct sock *s; ++*pos; - if (v == (void *)1) { + if (v == SEQ_START_TOKEN) { s = sk_head(&x25_list); goto out; } @@ -137,7 +137,7 @@ static int x25_seq_socket_show(struct se struct net_device *dev; const char *devname; - if (v == (void *)1) { + if (v == SEQ_START_TOKEN) { seq_printf(seq, "dest_addr src_addr dev lci st vs vr " "va t t2 t21 t22 t23 Snd-Q Rcv-Q inode\n"); goto out; diff -prauN linux-2.6.0-test5/net/xfrm/xfrm_user.c wli-2.6.0-test5-bk12-25/net/xfrm/xfrm_user.c --- linux-2.6.0-test5/net/xfrm/xfrm_user.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/net/xfrm/xfrm_user.c 2003-09-25 19:16:18.000000000 -0700 @@ -433,9 +433,9 @@ static int verify_userspi_info(struct xf case IPPROTO_COMP: /* IPCOMP spi is 16-bits. */ - if (p->min >= 0x10000 || - p->max >= 0x10000) + if (p->max >= 0x10000) return -EINVAL; + break; default: return -EINVAL; @@ -470,7 +470,7 @@ static int xfrm_alloc_userspi(struct sk_ spin_lock_bh(&x->lock); if (x->km.state != XFRM_STATE_DEAD) { - xfrm_alloc_spi(x, p->min, p->max); + xfrm_alloc_spi(x, htonl(p->min), htonl(p->max)); if (x->id.spi) resp_skb = xfrm_state_netlink(skb, x, nlh->nlmsg_seq); } diff -prauN linux-2.6.0-test5/scripts/Makefile wli-2.6.0-test5-bk12-25/scripts/Makefile --- linux-2.6.0-test5/scripts/Makefile 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/scripts/Makefile 2003-09-25 19:16:18.000000000 -0700 @@ -9,7 +9,7 @@ # conmakehash: Create arrays for initializing the kernel console tables host-progs := fixdep split-include conmakehash docproc kallsyms modpost \ - mk_elfconfig pnmtologo + mk_elfconfig pnmtologo bin2c always := $(host-progs) empty.o modpost-objs := modpost.o file2alias.o diff -prauN linux-2.6.0-test5/scripts/Makefile.build wli-2.6.0-test5-bk12-25/scripts/Makefile.build --- linux-2.6.0-test5/scripts/Makefile.build 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/scripts/Makefile.build 2003-09-25 19:16:18.000000000 -0700 @@ -14,6 +14,16 @@ include $(obj)/Makefile include scripts/Makefile.lib +ifneq ($(KBUILD_SRC),) +# Create output directory if not already present +_dummy := $(shell [ -d $(obj) ] || mkdir -p $(obj)) + +# Create directories for object files if directory does not exist +# Needed when obj-y := dir/file.o syntax is used +_dummy := $(foreach d,$(obj-dirs), $(shell [ -d $(d) ] || mkdir -p $(d))) +endif + + ifdef EXTRA_TARGETS $(warning kbuild: $(obj)/Makefile - Usage of EXTRA_TARGETS is obsolete in 2.5. Please fix!) endif diff -prauN linux-2.6.0-test5/scripts/Makefile.clean wli-2.6.0-test5-bk12-25/scripts/Makefile.clean --- linux-2.6.0-test5/scripts/Makefile.clean 2003-09-08 12:49:50.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/scripts/Makefile.clean 2003-09-25 19:16:18.000000000 -0700 @@ -63,4 +63,4 @@ cmd = @$(if $($(quiet)cmd_$(1)),echo ' # Shorthand for $(Q)$(MAKE) scripts/Makefile.clean obj=dir # Usage: # $(Q)$(MAKE) $(clean)=dir -clean := -f scripts/Makefile.clean obj +clean := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.clean obj diff -prauN linux-2.6.0-test5/scripts/Makefile.lib wli-2.6.0-test5-bk12-25/scripts/Makefile.lib --- linux-2.6.0-test5/scripts/Makefile.lib 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/scripts/Makefile.lib 2003-09-25 19:16:18.000000000 -0700 @@ -58,6 +58,11 @@ multi-objs := $(multi-objs-y) $(multi- # in the local directory subdir-obj-y := $(foreach o,$(obj-y),$(if $(filter-out $(o),$(notdir $(o))),$(o))) +# $(obj-dirs) is a list of directories that contain object files +obj-dirs := $(dir $(multi-objs) $(subdir-obj-y)) +obj-dirs += $(foreach f,$(host-progs), $(if $(dir $(f)),$(dir $(f)))) +obj-dirs := $(strip $(sort $(filter-out ./,$(obj-dirs)))) + # Replace multi-part objects by their individual parts, look at local dir only real-objs-y := $(foreach m, $(filter-out $(subdir-obj-y), $(obj-y)), $(if $(strip $($(m:.o=-objs)) $($(m:.o=-y))),$($(m:.o=-objs)) $($(m:.o=-y)),$(m))) $(extra-y) real-objs-m := $(foreach m, $(obj-m), $(if $(strip $($(m:.o=-objs)) $($(m:.o=-y))),$($(m:.o=-objs)) $($(m:.o=-y)),$(m))) @@ -107,6 +112,7 @@ multi-used-m := $(addprefix $(obj)/,$(mu multi-objs-y := $(addprefix $(obj)/,$(multi-objs-y)) multi-objs-m := $(addprefix $(obj)/,$(multi-objs-m)) subdir-ym := $(addprefix $(obj)/,$(subdir-ym)) +obj-dirs := $(addprefix $(obj)/,$(obj-dirs)) host-progs := $(addprefix $(obj)/,$(host-progs)) host-csingle := $(addprefix $(obj)/,$(host-csingle)) host-cmulti := $(addprefix $(obj)/,$(host-cmulti)) @@ -129,15 +135,46 @@ depfile = $(subst $(comma),_,$(@D)/.$(@F # where foo and bar are the name of the modules. basename_flags = -DKBUILD_BASENAME=$(subst $(comma),_,$(subst -,_,$(*F))) modname_flags = $(if $(filter 1,$(words $(modname))),-DKBUILD_MODNAME=$(subst $(comma),_,$(subst -,_,$(modname)))) -c_flags = -Wp,-MD,$(depfile) $(CFLAGS) $(NOSTDINC_FLAGS) \ - $(modkern_cflags) $(EXTRA_CFLAGS) $(CFLAGS_$(*F).o) \ - $(basename_flags) $(modname_flags) -a_flags = -Wp,-MD,$(depfile) $(AFLAGS) $(NOSTDINC_FLAGS)\ - $(modkern_aflags) $(EXTRA_AFLAGS) $(AFLAGS_$(*F).o) -hostc_flags = -Wp,-MD,$(depfile) $(HOSTCFLAGS) $(HOST_EXTRACFLAGS)\ - $(HOSTCFLAGS_$(*F).o) -hostcxx_flags = -Wp,-MD,$(depfile) $(HOSTCXXFLAGS) $(HOST_EXTRACXXFLAGS)\ - $(HOSTCXXFLAGS_$(*F).o) + + +_c_flags = $(CFLAGS) $(EXTRA_CFLAGS) $(CFLAGS_$(*F).o) +_a_flags = $(AFLAGS) $(EXTRA_AFLAGS) $(AFLAGS_$(*F).o) +_hostc_flags = $(HOSTCFLAGS) $(HOST_EXTRACFLAGS) $(HOSTCFLAGS_$(*F).o) +_hostcxx_flags = $(HOSTCXXFLAGS) $(HOST_EXTRACXXFLAGS) $(HOSTCXXFLAGS_$(*F).o) + + +# If building the kernel in a separate objtree expand all occurrences +# of -Idir to -Idir -I$(srctree)/dir. +# hereby allowing gcc to locate files in both trees. Local tree first. + +ifeq ($(KBUILD_SRC),) +__c_flags = $(_c_flags) +__a_flags = $(_a_flags) +__hostc_flags = $(_hostc_flags) +__hostcxx_flags = $(_hostcxx_flags) +else +flags = $(foreach o,$($(1)),\ + $(if $(filter -I%,$(o)),$(patsubst -I%,-I$(srctree)/%,$(o)),$(o))) + +# -I$(obj) locate generated .h files +# -I$(srctree)/$(src) locate .h files in srctree, from generated .c files +# FIXME: Replace both with specific EXTRA_CFLAGS statements +__c_flags = -I$(obj) -I$(srctree)/$(src) $(call flags,_c_flags) +__a_flags = $(call flags,_a_flags) +__hostc_flags = -I$(obj) $(call flags,_hostc_flags) +__hostcxx_flags = $(call flags,_hostcxx_flags) +endif + +c_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(CPPFLAGS) \ + $(__c_flags) $(modkern_cflags) \ + $(basename_flags) $(modname_flags) + +a_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(CPPFLAGS) \ + $(__a_flags) $(modkern_aflags) + +hostc_flags = -Wp,-MD,$(depfile) $(__hostc_flags) +hostcxx_flags = -Wp,-MD,$(depfile) $(__hostcxx_flags) + ld_flags = $(LDFLAGS) $(EXTRA_LDFLAGS) # Finds the multi-part object the current object will be linked into @@ -225,14 +262,14 @@ if_changed_rule = $(if $(strip $? \ # If quiet is set, only print short version of command -cmd = @$(if $($(quiet)cmd_$(1)),echo ' $($(quiet)cmd_$(1))' &&) $(cmd_$(1)) +cmd = @$(if $($(quiet)cmd_$(1)),echo ' $(subst ','\'',$($(quiet)cmd_$(1)))' &&) $(cmd_$(1)) # $(call descend,,) # Recursively call a sub-make in with target # Usage is deprecated, because make do not see this as an invocation of make. -descend =$(Q)$(MAKE) -f scripts/Makefile.build obj=$(1) $(2) +descend =$(Q)$(MAKE) -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj=$(1) $(2) # Shorthand for $(Q)$(MAKE) -f scripts/Makefile.build obj= # Usage: # $(Q)$(MAKE) $(build)=dir -build := -f scripts/Makefile.build obj +build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj diff -prauN linux-2.6.0-test5/scripts/Makefile.modpost wli-2.6.0-test5-bk12-25/scripts/Makefile.modpost --- linux-2.6.0-test5/scripts/Makefile.modpost 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/scripts/Makefile.modpost 2003-09-25 19:16:18.000000000 -0700 @@ -35,7 +35,7 @@ targets += $(modules) # Compile version info for unresolved symbols quiet_cmd_cc_o_c = CC $@ - cmd_cc_o_c = $(CC) -Wp,-MD,$(depfile) $(CFLAGS) $(CFLAGS_MODULE) \ + cmd_cc_o_c = $(CC) $(c_flags) $(CFLAGS_MODULE) \ -c -o $@ $< $(modules:.ko=.mod.o): %.mod.o: %.mod.c FORCE diff -prauN linux-2.6.0-test5/scripts/bin2c.c wli-2.6.0-test5-bk12-25/scripts/bin2c.c --- linux-2.6.0-test5/scripts/bin2c.c 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/scripts/bin2c.c 2003-09-25 19:16:18.000000000 -0700 @@ -0,0 +1,27 @@ +#include + +int main(int argc, char *argv[]) +{ + int ch, total=0; + + if (argc > 1) + printf("const char %s[] %s=\n", + argv[1], argc > 2 ? argv[2] : ""); + + do { + printf("\t\""); + while ((ch = getchar()) != EOF) + { + total++; + printf("\\x%02x",ch); + if (total % 16 == 0) + break; + } + printf("\"\n"); + } while (ch != EOF); + + if (argc > 1) + printf("\t;\n\nconst int %s_size = %d;\n", argv[1], total); + + return 0; +} diff -prauN linux-2.6.0-test5/scripts/kconfig/Makefile wli-2.6.0-test5-bk12-25/scripts/kconfig/Makefile --- linux-2.6.0-test5/scripts/kconfig/Makefile 2003-09-08 12:50:42.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/scripts/kconfig/Makefile 2003-09-25 19:16:18.000000000 -0700 @@ -40,6 +40,9 @@ allmodconfig: $(obj)/conf defconfig: $(obj)/conf $< -d arch/$(ARCH)/Kconfig +%_defconfig: $(obj)/conf + $(Q)$< -D arch/$(ARCH)/configs/$@ arch/$(ARCH)/Kconfig + # Help text used by make help help: @echo ' oldconfig - Update current config utilising a line-oriented program' diff -prauN linux-2.6.0-test5/scripts/kconfig/conf.c wli-2.6.0-test5-bk12-25/scripts/kconfig/conf.c --- linux-2.6.0-test5/scripts/kconfig/conf.c 2003-09-08 12:50:27.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/scripts/kconfig/conf.c 2003-09-25 19:16:18.000000000 -0700 @@ -26,6 +26,7 @@ enum { set_no, set_random } input_mode = ask_all; +char *defconfig_file; static int indent = 1; static int valid_stdin = 1; @@ -483,11 +484,12 @@ static void check_conf(struct menu *menu int main(int ac, char **av) { + int i = 1; const char *name; struct stat tmpstat; - if (ac > 1 && av[1][0] == '-') { - switch (av[1][1]) { + if (ac > i && av[i][0] == '-') { + switch (av[i++][1]) { case 'o': input_mode = ask_new; break; @@ -498,6 +500,15 @@ int main(int ac, char **av) case 'd': input_mode = set_default; break; + case 'D': + input_mode = set_default; + defconfig_file = av[i++]; + if (!defconfig_file) { + printf("%s: No default config file specified\n", + av[0]); + exit(1); + } + break; case 'n': input_mode = set_no; break; @@ -516,18 +527,21 @@ int main(int ac, char **av) printf("%s [-o|-s] config\n", av[0]); exit(0); } - name = av[2]; - } else - name = av[1]; + } + name = av[i]; + if (!name) { + printf("%s: Kconfig file missing\n", av[0]); + } conf_parse(name); //zconfdump(stdout); switch (input_mode) { case set_default: - name = conf_get_default_confname(); - if (conf_read(name)) { + if (!defconfig_file) + defconfig_file = conf_get_default_confname(); + if (conf_read(defconfig_file)) { printf("***\n" "*** Can't find default configuration \"%s\"!\n" - "***\n", name); + "***\n", defconfig_file); exit(1); } break; diff -prauN linux-2.6.0-test5/scripts/mkcompile_h wli-2.6.0-test5-bk12-25/scripts/mkcompile_h --- linux-2.6.0-test5/scripts/mkcompile_h 2003-09-08 12:50:59.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/scripts/mkcompile_h 2003-09-25 19:16:18.000000000 -0700 @@ -27,7 +27,7 @@ fi UTS_VERSION="#$VERSION" if [ -n "$SMP" ] ; then UTS_VERSION="$UTS_VERSION SMP"; fi -UTS_VERSION="$UTS_VERSION `LANG=C date`" +UTS_VERSION="$UTS_VERSION `LC_ALL=C LANG=C date`" # Truncate to maximum length @@ -42,7 +42,7 @@ UTS_TRUNCATE="sed -e s/\(.\{1,$UTS_LEN\} echo \#define UTS_VERSION \"`echo $UTS_VERSION | $UTS_TRUNCATE`\" - echo \#define LINUX_COMPILE_TIME \"`LANG=C date +%T`\" + echo \#define LINUX_COMPILE_TIME \"`LC_ALL=C LANG=C date +%T`\" echo \#define LINUX_COMPILE_BY \"`whoami`\" echo \#define LINUX_COMPILE_HOST \"`hostname | $UTS_TRUNCATE`\" diff -prauN linux-2.6.0-test5/scripts/mkconfigs wli-2.6.0-test5-bk12-25/scripts/mkconfigs --- linux-2.6.0-test5/scripts/mkconfigs 2003-09-08 12:49:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/scripts/mkconfigs 2003-09-25 19:16:18.000000000 -0700 @@ -25,12 +25,6 @@ # - Retain lines that begin with "# CONFIG_" # - lines that use double-quotes must \\-escape-quote them - -kernel_version() -{ - KERNVER="`grep VERSION $1 | head -1 | cut -f3 -d' '`.`grep PATCHLEVEL $1 | head -1 | cut -f3 -d' '`.`grep SUBLEVEL $1 | head -1 | cut -f3 -d' '``grep EXTRAVERSION $1 | head -1 | cut -f3 -d' '`" -} - if [ $# -lt 2 ] then echo "Usage: `basename $0` " @@ -66,15 +60,7 @@ echo \ * */" -echo "static char *ikconfig_built_with =" -echo " \"`uname -s` `uname -r` `uname -v` `uname -m`\";" -echo -kernel_version $makefile -echo "#ifdef CONFIG_IKCONFIG_PROC" -echo "static char *ikconfig_config = " -echo "#else" -echo "static char *ikconfig_config __initdata __attribute__((unused)) = " -echo "#endif" +echo "static char const ikconfig_config[] __attribute__((unused)) = " echo "\"CONFIG_BEGIN=n\\n\\" echo "`cat $config | sed 's/\"/\\\\\"/g' | grep "^#\? \?CONFIG_" | awk '{ print $0 "\\\\n\\\\" }' `" echo "CONFIG_END=n\\n\";" diff -prauN linux-2.6.0-test5/scripts/mkspec wli-2.6.0-test5-bk12-25/scripts/mkspec --- linux-2.6.0-test5/scripts/mkspec 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/scripts/mkspec 2003-09-25 19:16:18.000000000 -0700 @@ -27,7 +27,7 @@ echo "Summary: The Linux Kernel" echo "Version: "$VERSION.$PATCHLEVEL.$SUBLEVEL$EXTRAVERSION | sed -e "s/-//g" # we need to determine the NEXT version number so that uname and # rpm -q will agree -echo "Release: `. scripts/mkversion`" +echo "Release: `. $srctree/scripts/mkversion`" echo "License: GPL" echo "Group: System Environment/Kernel" echo "Vendor: The Linux Community" @@ -45,7 +45,7 @@ echo "%prep" echo "%setup -q" echo "" echo "%build" -echo "make clean oldconfig all" +echo "make clean all" echo "" echo "%install" echo 'mkdir -p $RPM_BUILD_ROOT/boot $RPM_BUILD_ROOT/lib $RPM_BUILD_ROOT/lib/modules' diff -prauN linux-2.6.0-test5/scripts/modpost.c wli-2.6.0-test5-bk12-25/scripts/modpost.c --- linux-2.6.0-test5/scripts/modpost.c 2003-09-08 12:49:55.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/scripts/modpost.c 2003-09-25 19:16:18.000000000 -0700 @@ -193,7 +193,7 @@ grab_file(const char *filename, unsigned *size = st.st_size; map = mmap(NULL, *size, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0); - if (mmap == MAP_FAILED) { + if (map == MAP_FAILED) { perror(filename); abort(); } diff -prauN linux-2.6.0-test5/security/Makefile wli-2.6.0-test5-bk12-25/security/Makefile --- linux-2.6.0-test5/security/Makefile 2003-09-08 12:50:17.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/security/Makefile 2003-09-25 19:16:18.000000000 -0700 @@ -6,7 +6,7 @@ subdir-$(CONFIG_SECURITY_SELINUX) += sel # if we don't select a security model, use the default capabilities ifneq ($(CONFIG_SECURITY),y) -obj-y += capability.o +obj-y += commoncap.o capability.o endif # Object file lists @@ -15,5 +15,5 @@ obj-$(CONFIG_SECURITY) += security.o d ifeq ($(CONFIG_SECURITY_SELINUX),y) obj-$(CONFIG_SECURITY_SELINUX) += selinux/built-in.o endif -obj-$(CONFIG_SECURITY_CAPABILITIES) += capability.o -obj-$(CONFIG_SECURITY_ROOTPLUG) += root_plug.o +obj-$(CONFIG_SECURITY_CAPABILITIES) += commoncap.o capability.o +obj-$(CONFIG_SECURITY_ROOTPLUG) += commoncap.o root_plug.o diff -prauN linux-2.6.0-test5/security/capability.c wli-2.6.0-test5-bk12-25/security/capability.c --- linux-2.6.0-test5/security/capability.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/security/capability.c 2003-09-25 19:16:18.000000000 -0700 @@ -23,334 +23,6 @@ #include #include -int cap_capable (struct task_struct *tsk, int cap) -{ - /* Derived from include/linux/sched.h:capable. */ - if (cap_raised (tsk->cap_effective, cap)) - return 0; - else - return -EPERM; -} - -int cap_ptrace (struct task_struct *parent, struct task_struct *child) -{ - /* Derived from arch/i386/kernel/ptrace.c:sys_ptrace. */ - if (!cap_issubset (child->cap_permitted, current->cap_permitted) && - !capable (CAP_SYS_PTRACE)) - return -EPERM; - else - return 0; -} - -int cap_capget (struct task_struct *target, kernel_cap_t *effective, - kernel_cap_t *inheritable, kernel_cap_t *permitted) -{ - /* Derived from kernel/capability.c:sys_capget. */ - *effective = cap_t (target->cap_effective); - *inheritable = cap_t (target->cap_inheritable); - *permitted = cap_t (target->cap_permitted); - return 0; -} - -int cap_capset_check (struct task_struct *target, kernel_cap_t *effective, - kernel_cap_t *inheritable, kernel_cap_t *permitted) -{ - /* Derived from kernel/capability.c:sys_capset. */ - /* verify restrictions on target's new Inheritable set */ - if (!cap_issubset (*inheritable, - cap_combine (target->cap_inheritable, - current->cap_permitted))) { - return -EPERM; - } - - /* verify restrictions on target's new Permitted set */ - if (!cap_issubset (*permitted, - cap_combine (target->cap_permitted, - current->cap_permitted))) { - return -EPERM; - } - - /* verify the _new_Effective_ is a subset of the _new_Permitted_ */ - if (!cap_issubset (*effective, *permitted)) { - return -EPERM; - } - - return 0; -} - -void cap_capset_set (struct task_struct *target, kernel_cap_t *effective, - kernel_cap_t *inheritable, kernel_cap_t *permitted) -{ - target->cap_effective = *effective; - target->cap_inheritable = *inheritable; - target->cap_permitted = *permitted; -} - -int cap_bprm_set_security (struct linux_binprm *bprm) -{ - /* Copied from fs/exec.c:prepare_binprm. */ - - /* We don't have VFS support for capabilities yet */ - cap_clear (bprm->cap_inheritable); - cap_clear (bprm->cap_permitted); - cap_clear (bprm->cap_effective); - - /* To support inheritance of root-permissions and suid-root - * executables under compatibility mode, we raise all three - * capability sets for the file. - * - * If only the real uid is 0, we only raise the inheritable - * and permitted sets of the executable file. - */ - - if (!issecure (SECURE_NOROOT)) { - if (bprm->e_uid == 0 || current->uid == 0) { - cap_set_full (bprm->cap_inheritable); - cap_set_full (bprm->cap_permitted); - } - if (bprm->e_uid == 0) - cap_set_full (bprm->cap_effective); - } - return 0; -} - -/* Copied from fs/exec.c */ -static inline int must_not_trace_exec (struct task_struct *p) -{ - return (p->ptrace & PT_PTRACED) && !(p->ptrace & PT_PTRACE_CAP); -} - -void cap_bprm_compute_creds (struct linux_binprm *bprm) -{ - /* Derived from fs/exec.c:compute_creds. */ - kernel_cap_t new_permitted, working; - - new_permitted = cap_intersect (bprm->cap_permitted, cap_bset); - working = cap_intersect (bprm->cap_inheritable, - current->cap_inheritable); - new_permitted = cap_combine (new_permitted, working); - - task_lock(current); - if (!cap_issubset (new_permitted, current->cap_permitted)) { - current->mm->dumpable = 0; - - if (must_not_trace_exec (current) - || atomic_read (¤t->fs->count) > 1 - || atomic_read (¤t->files->count) > 1 - || atomic_read (¤t->sighand->count) > 1) { - if (!capable (CAP_SETPCAP)) { - new_permitted = cap_intersect (new_permitted, - current-> - cap_permitted); - } - } - } - - /* For init, we want to retain the capabilities set - * in the init_task struct. Thus we skip the usual - * capability rules */ - if (current->pid != 1) { - current->cap_permitted = new_permitted; - current->cap_effective = - cap_intersect (new_permitted, bprm->cap_effective); - } - - /* AUD: Audit candidate if current->cap_effective is set */ - task_unlock(current); - - current->keep_capabilities = 0; -} - -int cap_bprm_secureexec (struct linux_binprm *bprm) -{ - /* If/when this module is enhanced to incorporate capability - bits on files, the test below should be extended to also perform a - test between the old and new capability sets. For now, - it simply preserves the legacy decision algorithm used by - the old userland. */ - return (current->euid != current->uid || - current->egid != current->gid); -} - -/* moved from kernel/sys.c. */ -/* - * cap_emulate_setxuid() fixes the effective / permitted capabilities of - * a process after a call to setuid, setreuid, or setresuid. - * - * 1) When set*uiding _from_ one of {r,e,s}uid == 0 _to_ all of - * {r,e,s}uid != 0, the permitted and effective capabilities are - * cleared. - * - * 2) When set*uiding _from_ euid == 0 _to_ euid != 0, the effective - * capabilities of the process are cleared. - * - * 3) When set*uiding _from_ euid != 0 _to_ euid == 0, the effective - * capabilities are set to the permitted capabilities. - * - * fsuid is handled elsewhere. fsuid == 0 and {r,e,s}uid!= 0 should - * never happen. - * - * -astor - * - * cevans - New behaviour, Oct '99 - * A process may, via prctl(), elect to keep its capabilities when it - * calls setuid() and switches away from uid==0. Both permitted and - * effective sets will be retained. - * Without this change, it was impossible for a daemon to drop only some - * of its privilege. The call to setuid(!=0) would drop all privileges! - * Keeping uid 0 is not an option because uid 0 owns too many vital - * files.. - * Thanks to Olaf Kirch and Peter Benie for spotting this. - */ -static inline void cap_emulate_setxuid (int old_ruid, int old_euid, - int old_suid) -{ - if ((old_ruid == 0 || old_euid == 0 || old_suid == 0) && - (current->uid != 0 && current->euid != 0 && current->suid != 0) && - !current->keep_capabilities) { - cap_clear (current->cap_permitted); - cap_clear (current->cap_effective); - } - if (old_euid == 0 && current->euid != 0) { - cap_clear (current->cap_effective); - } - if (old_euid != 0 && current->euid == 0) { - current->cap_effective = current->cap_permitted; - } -} - -int cap_task_post_setuid (uid_t old_ruid, uid_t old_euid, uid_t old_suid, - int flags) -{ - switch (flags) { - case LSM_SETID_RE: - case LSM_SETID_ID: - case LSM_SETID_RES: - /* Copied from kernel/sys.c:setreuid/setuid/setresuid. */ - if (!issecure (SECURE_NO_SETUID_FIXUP)) { - cap_emulate_setxuid (old_ruid, old_euid, old_suid); - } - break; - case LSM_SETID_FS: - { - uid_t old_fsuid = old_ruid; - - /* Copied from kernel/sys.c:setfsuid. */ - - /* - * FIXME - is fsuser used for all CAP_FS_MASK capabilities? - * if not, we might be a bit too harsh here. - */ - - if (!issecure (SECURE_NO_SETUID_FIXUP)) { - if (old_fsuid == 0 && current->fsuid != 0) { - cap_t (current->cap_effective) &= - ~CAP_FS_MASK; - } - if (old_fsuid != 0 && current->fsuid == 0) { - cap_t (current->cap_effective) |= - (cap_t (current->cap_permitted) & - CAP_FS_MASK); - } - } - break; - } - default: - return -EINVAL; - } - - return 0; -} - -void cap_task_reparent_to_init (struct task_struct *p) -{ - p->cap_effective = CAP_INIT_EFF_SET; - p->cap_inheritable = CAP_INIT_INH_SET; - p->cap_permitted = CAP_FULL_SET; - p->keep_capabilities = 0; - return; -} - -int cap_syslog (int type) -{ - if ((type != 3) && !capable(CAP_SYS_ADMIN)) - return -EPERM; - return 0; -} - -/* - * Check that a process has enough memory to allocate a new virtual - * mapping. 0 means there is enough memory for the allocation to - * succeed and -ENOMEM implies there is not. - * - * We currently support three overcommit policies, which are set via the - * vm.overcommit_memory sysctl. See Documentation/vm/overcommit-acounting - * - * Strict overcommit modes added 2002 Feb 26 by Alan Cox. - * Additional code 2002 Jul 20 by Robert Love. - */ -int cap_vm_enough_memory(long pages) -{ - unsigned long free, allowed; - - vm_acct_memory(pages); - - /* We estimate memory ourselves (common case) */ - if (sysctl_overcommit_memory == 0) { - free = get_page_cache_size(); - free += nr_free_pages(); - free += nr_swap_pages; - - /* - * Any slabs which are created with the - * SLAB_RECLAIM_ACCOUNT flag claim to have contents - * which are reclaimable, under pressure. The dentry - * cache and most inode caches should fall into this - */ - free += atomic_read(&slab_reclaim_pages); - - /* - * Leave the last 3% for root - */ - if (!capable(CAP_SYS_ADMIN)) - free -= free / 32; - - if (free > pages) - return 0; - - vm_unacct_memory(pages); - return -ENOMEM; - } - - /* Kernel assumes allocation */ - if (sysctl_overcommit_memory == 1) - return 0; - - /* sysctl_overcommit_memory must be 2 which means strict_overcommit*/ - allowed = totalram_pages * sysctl_overcommit_ratio / 100; - allowed += total_swap_pages; - - if (atomic_read(&vm_committed_space) < allowed) - return 0; - - vm_unacct_memory(pages); - - return -ENOMEM; -} - -EXPORT_SYMBOL(cap_capable); -EXPORT_SYMBOL(cap_ptrace); -EXPORT_SYMBOL(cap_capget); -EXPORT_SYMBOL(cap_capset_check); -EXPORT_SYMBOL(cap_capset_set); -EXPORT_SYMBOL(cap_bprm_set_security); -EXPORT_SYMBOL(cap_bprm_compute_creds); -EXPORT_SYMBOL(cap_bprm_secureexec); -EXPORT_SYMBOL(cap_task_post_setuid); -EXPORT_SYMBOL(cap_task_reparent_to_init); -EXPORT_SYMBOL(cap_syslog); -EXPORT_SYMBOL(cap_vm_enough_memory); - #ifdef CONFIG_SECURITY diff -prauN linux-2.6.0-test5/security/commoncap.c wli-2.6.0-test5-bk12-25/security/commoncap.c --- linux-2.6.0-test5/security/commoncap.c 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/security/commoncap.c 2003-09-25 19:16:18.000000000 -0700 @@ -0,0 +1,353 @@ +/* Common capabilities, needed by capability.o and root_plug.o + * + * 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 of the License, or + * (at your option) any later version. + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +int cap_capable (struct task_struct *tsk, int cap) +{ + /* Derived from include/linux/sched.h:capable. */ + if (cap_raised (tsk->cap_effective, cap)) + return 0; + else + return -EPERM; +} + +int cap_ptrace (struct task_struct *parent, struct task_struct *child) +{ + /* Derived from arch/i386/kernel/ptrace.c:sys_ptrace. */ + if (!cap_issubset (child->cap_permitted, current->cap_permitted) && + !capable (CAP_SYS_PTRACE)) + return -EPERM; + else + return 0; +} + +int cap_capget (struct task_struct *target, kernel_cap_t *effective, + kernel_cap_t *inheritable, kernel_cap_t *permitted) +{ + /* Derived from kernel/capability.c:sys_capget. */ + *effective = cap_t (target->cap_effective); + *inheritable = cap_t (target->cap_inheritable); + *permitted = cap_t (target->cap_permitted); + return 0; +} + +int cap_capset_check (struct task_struct *target, kernel_cap_t *effective, + kernel_cap_t *inheritable, kernel_cap_t *permitted) +{ + /* Derived from kernel/capability.c:sys_capset. */ + /* verify restrictions on target's new Inheritable set */ + if (!cap_issubset (*inheritable, + cap_combine (target->cap_inheritable, + current->cap_permitted))) { + return -EPERM; + } + + /* verify restrictions on target's new Permitted set */ + if (!cap_issubset (*permitted, + cap_combine (target->cap_permitted, + current->cap_permitted))) { + return -EPERM; + } + + /* verify the _new_Effective_ is a subset of the _new_Permitted_ */ + if (!cap_issubset (*effective, *permitted)) { + return -EPERM; + } + + return 0; +} + +void cap_capset_set (struct task_struct *target, kernel_cap_t *effective, + kernel_cap_t *inheritable, kernel_cap_t *permitted) +{ + target->cap_effective = *effective; + target->cap_inheritable = *inheritable; + target->cap_permitted = *permitted; +} + +int cap_bprm_set_security (struct linux_binprm *bprm) +{ + /* Copied from fs/exec.c:prepare_binprm. */ + + /* We don't have VFS support for capabilities yet */ + cap_clear (bprm->cap_inheritable); + cap_clear (bprm->cap_permitted); + cap_clear (bprm->cap_effective); + + /* To support inheritance of root-permissions and suid-root + * executables under compatibility mode, we raise all three + * capability sets for the file. + * + * If only the real uid is 0, we only raise the inheritable + * and permitted sets of the executable file. + */ + + if (!issecure (SECURE_NOROOT)) { + if (bprm->e_uid == 0 || current->uid == 0) { + cap_set_full (bprm->cap_inheritable); + cap_set_full (bprm->cap_permitted); + } + if (bprm->e_uid == 0) + cap_set_full (bprm->cap_effective); + } + return 0; +} + +/* Copied from fs/exec.c */ +static inline int must_not_trace_exec (struct task_struct *p) +{ + return (p->ptrace & PT_PTRACED) && !(p->ptrace & PT_PTRACE_CAP); +} + +void cap_bprm_compute_creds (struct linux_binprm *bprm) +{ + /* Derived from fs/exec.c:compute_creds. */ + kernel_cap_t new_permitted, working; + + new_permitted = cap_intersect (bprm->cap_permitted, cap_bset); + working = cap_intersect (bprm->cap_inheritable, + current->cap_inheritable); + new_permitted = cap_combine (new_permitted, working); + + task_lock(current); + if (!cap_issubset (new_permitted, current->cap_permitted)) { + current->mm->dumpable = 0; + + if (must_not_trace_exec (current) + || atomic_read (¤t->fs->count) > 1 + || atomic_read (¤t->files->count) > 1 + || atomic_read (¤t->sighand->count) > 1) { + if (!capable (CAP_SETPCAP)) { + new_permitted = cap_intersect (new_permitted, + current-> + cap_permitted); + } + } + } + + /* For init, we want to retain the capabilities set + * in the init_task struct. Thus we skip the usual + * capability rules */ + if (current->pid != 1) { + current->cap_permitted = new_permitted; + current->cap_effective = + cap_intersect (new_permitted, bprm->cap_effective); + } + + /* AUD: Audit candidate if current->cap_effective is set */ + task_unlock(current); + + current->keep_capabilities = 0; +} + +int cap_bprm_secureexec (struct linux_binprm *bprm) +{ + /* If/when this module is enhanced to incorporate capability + bits on files, the test below should be extended to also perform a + test between the old and new capability sets. For now, + it simply preserves the legacy decision algorithm used by + the old userland. */ + return (current->euid != current->uid || + current->egid != current->gid); +} + +/* moved from kernel/sys.c. */ +/* + * cap_emulate_setxuid() fixes the effective / permitted capabilities of + * a process after a call to setuid, setreuid, or setresuid. + * + * 1) When set*uiding _from_ one of {r,e,s}uid == 0 _to_ all of + * {r,e,s}uid != 0, the permitted and effective capabilities are + * cleared. + * + * 2) When set*uiding _from_ euid == 0 _to_ euid != 0, the effective + * capabilities of the process are cleared. + * + * 3) When set*uiding _from_ euid != 0 _to_ euid == 0, the effective + * capabilities are set to the permitted capabilities. + * + * fsuid is handled elsewhere. fsuid == 0 and {r,e,s}uid!= 0 should + * never happen. + * + * -astor + * + * cevans - New behaviour, Oct '99 + * A process may, via prctl(), elect to keep its capabilities when it + * calls setuid() and switches away from uid==0. Both permitted and + * effective sets will be retained. + * Without this change, it was impossible for a daemon to drop only some + * of its privilege. The call to setuid(!=0) would drop all privileges! + * Keeping uid 0 is not an option because uid 0 owns too many vital + * files.. + * Thanks to Olaf Kirch and Peter Benie for spotting this. + */ +static inline void cap_emulate_setxuid (int old_ruid, int old_euid, + int old_suid) +{ + if ((old_ruid == 0 || old_euid == 0 || old_suid == 0) && + (current->uid != 0 && current->euid != 0 && current->suid != 0) && + !current->keep_capabilities) { + cap_clear (current->cap_permitted); + cap_clear (current->cap_effective); + } + if (old_euid == 0 && current->euid != 0) { + cap_clear (current->cap_effective); + } + if (old_euid != 0 && current->euid == 0) { + current->cap_effective = current->cap_permitted; + } +} + +int cap_task_post_setuid (uid_t old_ruid, uid_t old_euid, uid_t old_suid, + int flags) +{ + switch (flags) { + case LSM_SETID_RE: + case LSM_SETID_ID: + case LSM_SETID_RES: + /* Copied from kernel/sys.c:setreuid/setuid/setresuid. */ + if (!issecure (SECURE_NO_SETUID_FIXUP)) { + cap_emulate_setxuid (old_ruid, old_euid, old_suid); + } + break; + case LSM_SETID_FS: + { + uid_t old_fsuid = old_ruid; + + /* Copied from kernel/sys.c:setfsuid. */ + + /* + * FIXME - is fsuser used for all CAP_FS_MASK capabilities? + * if not, we might be a bit too harsh here. + */ + + if (!issecure (SECURE_NO_SETUID_FIXUP)) { + if (old_fsuid == 0 && current->fsuid != 0) { + cap_t (current->cap_effective) &= + ~CAP_FS_MASK; + } + if (old_fsuid != 0 && current->fsuid == 0) { + cap_t (current->cap_effective) |= + (cap_t (current->cap_permitted) & + CAP_FS_MASK); + } + } + break; + } + default: + return -EINVAL; + } + + return 0; +} + +void cap_task_reparent_to_init (struct task_struct *p) +{ + p->cap_effective = CAP_INIT_EFF_SET; + p->cap_inheritable = CAP_INIT_INH_SET; + p->cap_permitted = CAP_FULL_SET; + p->keep_capabilities = 0; + return; +} + +int cap_syslog (int type) +{ + if ((type != 3) && !capable(CAP_SYS_ADMIN)) + return -EPERM; + return 0; +} + +/* + * Check that a process has enough memory to allocate a new virtual + * mapping. 0 means there is enough memory for the allocation to + * succeed and -ENOMEM implies there is not. + * + * We currently support three overcommit policies, which are set via the + * vm.overcommit_memory sysctl. See Documentation/vm/overcommit-acounting + * + * Strict overcommit modes added 2002 Feb 26 by Alan Cox. + * Additional code 2002 Jul 20 by Robert Love. + */ +int cap_vm_enough_memory(long pages) +{ + unsigned long free, allowed; + + vm_acct_memory(pages); + + /* + * Sometimes we want to use more memory than we have + */ + if (sysctl_overcommit_memory == 1) + return 0; + + if (sysctl_overcommit_memory == 0) { + free = get_page_cache_size(); + free += nr_free_pages(); + free += nr_swap_pages; + + /* + * Any slabs which are created with the + * SLAB_RECLAIM_ACCOUNT flag claim to have contents + * which are reclaimable, under pressure. The dentry + * cache and most inode caches should fall into this + */ + free += atomic_read(&slab_reclaim_pages); + + /* + * Leave the last 3% for root + */ + if (!capable(CAP_SYS_ADMIN)) + free -= free / 32; + + if (free > pages) + return 0; + vm_unacct_memory(pages); + return -ENOMEM; + } + + allowed = totalram_pages * sysctl_overcommit_ratio / 100; + allowed += total_swap_pages; + + if (atomic_read(&vm_committed_space) < allowed) + return 0; + + vm_unacct_memory(pages); + + return -ENOMEM; +} + +EXPORT_SYMBOL(cap_capable); +EXPORT_SYMBOL(cap_ptrace); +EXPORT_SYMBOL(cap_capget); +EXPORT_SYMBOL(cap_capset_check); +EXPORT_SYMBOL(cap_capset_set); +EXPORT_SYMBOL(cap_bprm_set_security); +EXPORT_SYMBOL(cap_bprm_compute_creds); +EXPORT_SYMBOL(cap_bprm_secureexec); +EXPORT_SYMBOL(cap_task_post_setuid); +EXPORT_SYMBOL(cap_task_reparent_to_init); +EXPORT_SYMBOL(cap_syslog); +EXPORT_SYMBOL(cap_vm_enough_memory); + +MODULE_DESCRIPTION("Standard Linux Common Capabilities Security Module"); +MODULE_LICENSE("GPL"); diff -prauN linux-2.6.0-test5/security/security.c wli-2.6.0-test5-bk12-25/security/security.c --- linux-2.6.0-test5/security/security.c 2003-09-08 12:49:51.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/security/security.c 2003-09-25 19:16:18.000000000 -0700 @@ -79,9 +79,8 @@ int __init security_scaffolding_startup * value passed to this function. A call to unregister_security() should be * done to remove this security_options structure from the kernel. * - * If the @ops structure does not contain function pointers for all hooks in - * the structure, or there is already a security module registered with the - * kernel, an error will be returned. Otherwise 0 is returned on success. + * If there is already a security module registered with the kernel, + * an error will be returned. Otherwise 0 is returned on success. */ int register_security (struct security_operations *ops) { diff -prauN linux-2.6.0-test5/security/selinux/Kconfig wli-2.6.0-test5-bk12-25/security/selinux/Kconfig --- linux-2.6.0-test5/security/selinux/Kconfig 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/security/selinux/Kconfig 2003-09-25 19:16:18.000000000 -0700 @@ -8,9 +8,20 @@ config SECURITY_SELINUX You can obtain the policy compiler (checkpolicy), the utility for labeling filesystems (setfiles), and an example policy configuration from http://www.nsa.gov/selinux. - SELinux needs to be explicitly enabled on the kernel command line with - selinux=1. If you specify selinux=0 or do not use this parameter, - SELinux will not be enabled. + If you are unsure how to answer this question, answer N. + +config SECURITY_SELINUX_BOOTPARAM + bool "NSA SELinux boot parameter" + depends on SECURITY_SELINUX + default n + help + This option adds a kernel parameter 'selinux', which allows SELinux + to be disabled at boot. If this option is selected, SELinux + functionality can be disabled with selinux=0 on the kernel + command line. The purpose of this option is to allow a single + kernel image to be distributed with SELinux built in, but not + necessarily enabled. + If you are unsure how to answer this question, answer N. config SECURITY_SELINUX_DEVELOP diff -prauN linux-2.6.0-test5/security/selinux/hooks.c wli-2.6.0-test5-bk12-25/security/selinux/hooks.c --- linux-2.6.0-test5/security/selinux/hooks.c 2003-09-08 12:50:31.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/security/selinux/hooks.c 2003-09-25 19:16:18.000000000 -0700 @@ -73,7 +73,8 @@ static int __init enforcing_setup(char * __setup("enforcing=", enforcing_setup); #endif -int selinux_enabled = 0; +#ifdef CONFIG_SECURITY_SELINUX_BOOTPARAM +int selinux_enabled = 1; static int __init selinux_enabled_setup(char *str) { @@ -81,6 +82,7 @@ static int __init selinux_enabled_setup( return 1; } __setup("selinux=", selinux_enabled_setup); +#endif /* Original (dummy) security module. */ static struct security_operations *original_ops = NULL; @@ -3357,7 +3359,7 @@ __init int selinux_init(void) struct task_security_struct *tsec; if (!selinux_enabled) { - printk(KERN_INFO "SELinux: Not enabled at boot.\n"); + printk(KERN_INFO "SELinux: Disabled at boot.\n"); return 0; } diff -prauN linux-2.6.0-test5/security/selinux/include/security.h wli-2.6.0-test5-bk12-25/security/selinux/include/security.h --- linux-2.6.0-test5/security/selinux/include/security.h 2003-09-08 12:49:52.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/security/selinux/include/security.h 2003-09-25 19:16:18.000000000 -0700 @@ -14,6 +14,12 @@ #define SELINUX_MAGIC 0xf97cff8c +#ifdef CONFIG_SECURITY_SELINUX_BOOTPARAM +extern int selinux_enabled; +#else +#define selinux_enabled 1 +#endif + int security_load_policy(void * data, size_t len); struct av_decision { diff -prauN linux-2.6.0-test5/security/selinux/selinuxfs.c wli-2.6.0-test5-bk12-25/security/selinux/selinuxfs.c --- linux-2.6.0-test5/security/selinux/selinuxfs.c 2003-09-08 12:50:58.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/security/selinux/selinuxfs.c 2003-09-25 19:16:18.000000000 -0700 @@ -17,8 +17,6 @@ #include "security.h" #include "objsec.h" -extern int selinux_enabled; - /* Check whether a task is allowed to use a security operation. */ int task_has_security(struct task_struct *tsk, u32 perms) diff -prauN linux-2.6.0-test5/security/selinux/ss/mls.c wli-2.6.0-test5-bk12-25/security/selinux/ss/mls.c --- linux-2.6.0-test5/security/selinux/ss/mls.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/security/selinux/ss/mls.c 2003-09-25 19:16:18.000000000 -0700 @@ -548,8 +548,10 @@ int mls_read_user(struct user_datum *usr memset(r, 0, sizeof(*r)); rc = mls_read_range_helper(&r->range, fp); - if (rc) + if (rc) { + kfree(r); goto out; + } if (l) l->next = r; @@ -581,10 +583,17 @@ int mls_read_trusted(struct policydb *p, goto out; rc = ebitmap_read(&p->trustedwriters, fp); if (rc) - goto out; + goto bad; rc = ebitmap_read(&p->trustedobjects, fp); + if (rc) + goto bad2; out: return rc; +bad2: + ebitmap_destroy(&p->trustedwriters); +bad: + ebitmap_destroy(&p->trustedreaders); + goto out; } int sens_index(void *key, void *datum, void *datap) diff -prauN linux-2.6.0-test5/security/selinux/ss/policydb.c wli-2.6.0-test5-bk12-25/security/selinux/ss/policydb.c --- linux-2.6.0-test5/security/selinux/ss/policydb.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/security/selinux/ss/policydb.c 2003-09-25 19:16:18.000000000 -0700 @@ -390,6 +390,16 @@ static int (*destroy_f[SYM_NUM]) (void * mls_destroy_f }; +void ocontext_destroy(struct ocontext *c, int i) +{ + context_destroy(&c->context[0]); + context_destroy(&c->context[1]); + if (i == OCON_ISID || i == OCON_FS || + i == OCON_NETIF || i == OCON_FSUSE) + kfree(c->u.name); + kfree(c); +} + /* * Free any memory allocated by a policy database structure. */ @@ -423,12 +433,7 @@ void policydb_destroy(struct policydb *p while (c) { ctmp = c; c = c->next; - context_destroy(&ctmp->context[0]); - context_destroy(&ctmp->context[1]); - if (i == OCON_ISID || i == OCON_FS || - i == OCON_NETIF || i == OCON_FSUSE) - kfree(ctmp->u.name); - kfree(ctmp); + ocontext_destroy(ctmp,i); } } @@ -439,9 +444,7 @@ void policydb_destroy(struct policydb *p while (c) { ctmp = c; c = c->next; - context_destroy(&ctmp->context[0]); - kfree(ctmp->u.name); - kfree(ctmp); + ocontext_destroy(ctmp,OCON_FSUSE); } gtmp = g; g = g->next; @@ -762,6 +765,13 @@ static int class_read(struct policydb *p goto bad; } memset(c, 0, sizeof(*c)); + + if (lc) { + lc->next = c; + } else { + cladatum->constraints = c; + } + buf = next_entry(fp, sizeof(u32)*2); if (!buf) goto bad; @@ -776,67 +786,50 @@ static int class_read(struct policydb *p goto bad; } memset(e, 0, sizeof(*e)); + + if (le) { + le->next = e; + } else { + c->expr = e; + } + buf = next_entry(fp, sizeof(u32)*3); - if (!buf) { - kfree(e); + if (!buf) goto bad; - } e->expr_type = le32_to_cpu(buf[0]); e->attr = le32_to_cpu(buf[1]); e->op = le32_to_cpu(buf[2]); switch (e->expr_type) { case CEXPR_NOT: - if (depth < 0) { - kfree(e); + if (depth < 0) goto bad; - } break; case CEXPR_AND: case CEXPR_OR: - if (depth < 1) { - kfree(e); + if (depth < 1) goto bad; - } depth--; break; case CEXPR_ATTR: - if (depth == (CEXPR_MAXDEPTH-1)) { - kfree(e); + if (depth == (CEXPR_MAXDEPTH-1)) goto bad; - } depth++; break; case CEXPR_NAMES: - if (depth == (CEXPR_MAXDEPTH-1)) { - kfree(e); + if (depth == (CEXPR_MAXDEPTH-1)) goto bad; - } depth++; - if (ebitmap_read(&e->names, fp)) { - kfree(e); + if (ebitmap_read(&e->names, fp)) goto bad; - } break; default: - kfree(e); goto bad; - break; - } - if (le) { - le->next = e; - } else { - c->expr = e; } le = e; } if (depth != 0) goto bad; - if (lc) { - lc->next = c; - } else { - cladatum->constraints = c; - } lc = c; } @@ -1331,12 +1324,6 @@ int policydb_read(struct policydb *p, vo genfs_p = NULL; rc = -EINVAL; for (i = 0; i < nel; i++) { - newgenfs = kmalloc(sizeof(*newgenfs), GFP_KERNEL); - if (!newgenfs) { - rc = -ENOMEM; - goto bad; - } - memset(newgenfs, 0, sizeof(*newgenfs)); buf = next_entry(fp, sizeof(u32)); if (!buf) goto bad; @@ -1344,9 +1331,17 @@ int policydb_read(struct policydb *p, vo buf = next_entry(fp, len); if (!buf) goto bad; + newgenfs = kmalloc(sizeof(*newgenfs), GFP_KERNEL); + if (!newgenfs) { + rc = -ENOMEM; + goto bad; + } + memset(newgenfs, 0, sizeof(*newgenfs)); + newgenfs->fstype = kmalloc(len + 1,GFP_KERNEL); if (!newgenfs->fstype) { rc = -ENOMEM; + kfree(newgenfs); goto bad; } memcpy(newgenfs->fstype, buf, len); @@ -1356,6 +1351,8 @@ int policydb_read(struct policydb *p, vo if (strcmp(newgenfs->fstype, genfs->fstype) == 0) { printk(KERN_ERR "security: dup genfs " "fstype %s\n", newgenfs->fstype); + kfree(newgenfs->fstype); + kfree(newgenfs); goto bad; } if (strcmp(newgenfs->fstype, genfs->fstype) < 0) @@ -1371,12 +1368,6 @@ int policydb_read(struct policydb *p, vo goto bad; nel2 = le32_to_cpu(buf[0]); for (j = 0; j < nel2; j++) { - newc = kmalloc(sizeof(*newc), GFP_KERNEL); - if (!newc) { - rc = -ENOMEM; - goto bad; - } - memset(newc, 0, sizeof(*newc)); buf = next_entry(fp, sizeof(u32)); if (!buf) goto bad; @@ -1384,19 +1375,27 @@ int policydb_read(struct policydb *p, vo buf = next_entry(fp, len); if (!buf) goto bad; + + newc = kmalloc(sizeof(*newc), GFP_KERNEL); + if (!newc) { + rc = -ENOMEM; + goto bad; + } + memset(newc, 0, sizeof(*newc)); + newc->u.name = kmalloc(len + 1,GFP_KERNEL); if (!newc->u.name) { rc = -ENOMEM; - goto bad; + goto bad_newc; } memcpy(newc->u.name, buf, len); newc->u.name[len] = 0; buf = next_entry(fp, sizeof(u32)); if (!buf) - goto bad; + goto bad_newc; newc->v.sclass = le32_to_cpu(buf[0]); if (context_read_and_validate(&newc->context[0], p, fp)) - goto bad; + goto bad_newc; for (l = NULL, c = newgenfs->head; c; l = c, c = c->next) { if (!strcmp(newc->u.name, c->u.name) && @@ -1405,13 +1404,14 @@ int policydb_read(struct policydb *p, vo printk(KERN_ERR "security: dup genfs " "entry (%s,%s)\n", newgenfs->fstype, c->u.name); - goto bad; + goto bad_newc; } len = strlen(newc->u.name); len2 = strlen(c->u.name); if (len > len2) break; } + newc->next = c; if (l) l->next = newc; @@ -1425,6 +1425,8 @@ int policydb_read(struct policydb *p, vo goto bad; out: return rc; +bad_newc: + ocontext_destroy(newc,OCON_FSUSE); bad: policydb_destroy(p); goto out; diff -prauN linux-2.6.0-test5/sound/core/ioctl32/ioctl32.c wli-2.6.0-test5-bk12-25/sound/core/ioctl32/ioctl32.c --- linux-2.6.0-test5/sound/core/ioctl32/ioctl32.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/sound/core/ioctl32/ioctl32.c 2003-09-25 19:16:18.000000000 -0700 @@ -25,7 +25,6 @@ #include #include #include -#include #include #include #include diff -prauN linux-2.6.0-test5/sound/oss/Kconfig wli-2.6.0-test5-bk12-25/sound/oss/Kconfig --- linux-2.6.0-test5/sound/oss/Kconfig 2003-09-08 12:50:22.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/sound/oss/Kconfig 2003-09-25 19:16:18.000000000 -0700 @@ -237,13 +237,6 @@ config SOUND_HARMONY tristate "PA Harmony audio driver" depends on GSC_LASI && SOUND -config SOUND_RME96XX - tristate "RME Hammerfall (RME96XX) support (EXPERIMENTAL)" - depends on SOUND_PRIME!=n && SOUND && PCI && EXPERIMENTAL - help - Say Y or M if you have a Hammerfall, Hammerfall light or Hammerfall - DSP card from RME. - config SOUND_SONICVIBES tristate "S3 SonicVibes" depends on SOUND_PRIME!=n && SOUND && SOUND_GAMEPORT diff -prauN linux-2.6.0-test5/sound/oss/ac97_codec.c wli-2.6.0-test5-bk12-25/sound/oss/ac97_codec.c --- linux-2.6.0-test5/sound/oss/ac97_codec.c 2003-09-08 12:49:53.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/sound/oss/ac97_codec.c 2003-09-25 19:16:18.000000000 -0700 @@ -1078,6 +1078,10 @@ static int wolfson_init05(struct ac97_co /* WM9711, WM9712 */ static int wolfson_init11(struct ac97_codec * codec) { + /* stop pop's during suspend/resume */ + codec->codec_write(codec, AC97_WM97XX_TEST, + codec->codec_read(codec, AC97_WM97XX_TEST) & 0xffbf); + /* set out3 volume */ codec->codec_write(codec, AC97_WM9711_OUT3VOL, 0x0808); return 0; diff -prauN linux-2.6.0-test5/sound/oss/dmasound/Kconfig wli-2.6.0-test5-bk12-25/sound/oss/dmasound/Kconfig --- linux-2.6.0-test5/sound/oss/dmasound/Kconfig 2003-09-08 12:50:06.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/sound/oss/dmasound/Kconfig 2003-09-25 19:16:18.000000000 -0700 @@ -12,9 +12,9 @@ config DMASOUND_ATARI want). If you want to compile it as a module, say M here and read . -config DMASOUND_AWACS +config DMASOUND_PMAC tristate "PowerMac DMA sound support" - depends on PPC_PMAC && SOUND + depends on PPC_PMAC && SOUND && I2C help If you want to use the internal audio of your PowerMac in Linux, answer Y to this question. This will provide a Sun-like /dev/audio, diff -prauN linux-2.6.0-test5/sound/oss/dmasound/Makefile wli-2.6.0-test5-bk12-25/sound/oss/dmasound/Makefile --- linux-2.6.0-test5/sound/oss/dmasound/Makefile 2003-09-08 12:49:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/sound/oss/dmasound/Makefile 2003-09-25 19:16:18.000000000 -0700 @@ -2,7 +2,12 @@ # Makefile for the DMA sound driver # -obj-$(CONFIG_DMASOUND_ATARI) += dmasound_core.o dmasound_atari.o -obj-$(CONFIG_DMASOUND_AWACS) += dmasound_core.o dmasound_awacs.o -obj-$(CONFIG_DMASOUND_PAULA) += dmasound_core.o dmasound_paula.o -obj-$(CONFIG_DMASOUND_Q40) += dmasound_core.o dmasound_q40.o +dmasound_pmac-y += dmasound_awacs.o \ + trans_16.o dac3550a.o tas_common.o \ + tas3001c.o tas3001c_tables.o \ + tas3004.o tas3004_tables.o + +obj-$(CONFIG_DMASOUND_ATARI) += dmasound_core.o dmasound_atari.o +obj-$(CONFIG_DMASOUND_PMAC) += dmasound_core.o dmasound_pmac.o +obj-$(CONFIG_DMASOUND_PAULA) += dmasound_core.o dmasound_paula.o +obj-$(CONFIG_DMASOUND_Q40) += dmasound_core.o dmasound_q40.o diff -prauN linux-2.6.0-test5/sound/oss/dmasound/awacs_defs.h wli-2.6.0-test5-bk12-25/sound/oss/dmasound/awacs_defs.h --- linux-2.6.0-test5/sound/oss/dmasound/awacs_defs.h 2003-09-08 12:49:57.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/sound/oss/dmasound/awacs_defs.h 2003-09-25 19:16:18.000000000 -0700 @@ -71,17 +71,20 @@ struct awacs_regs { /* ------- - --- ----- - ------ */ #define MASK_GAINRIGHT (0xf) /* Gain Right Mask */ #define MASK_GAINLEFT (0xf << 4) /* Gain Left Mask */ -#define MASK_GAINLINE (0x1 << 8) /* Change Gain for Line??? */ -#define MASK_GAINMIC (0x0 << 8) /* Change Gain for Mic??? */ +#define MASK_GAINLINE (0x1 << 8) /* Disable Mic preamp */ +#define MASK_GAINMIC (0x0 << 8) /* Enable Mic preamp */ #define MASK_MUX_CD (0x1 << 9) /* Select CD in MUX */ -#define MASK_MUX_AUDIN (0x1 << 10) /* Select Audio In in MUX */ -#define MASK_MUX_MIC (0x1 << 11) /* Select Mic in MUX */ +#define MASK_MUX_MIC (0x1 << 10) /* Select Mic in MUX */ +#define MASK_MUX_AUDIN (0x1 << 11) /* Select Audio In in MUX */ #define MASK_MUX_LINE MASK_MUX_AUDIN #define GAINRIGHT(x) ((x) & MASK_GAINRIGHT) #define GAINLEFT(x) (((x) << 4) & MASK_GAINLEFT) +#define DEF_CD_GAIN 0x00bb +#define DEF_MIC_GAIN 0x00cc + /* Address 1 Bit Masks */ /* ------- - --- ----- */ #define MASK_ADDR1RES1 (0x3) /* Reserved */ @@ -93,7 +96,10 @@ struct awacs_regs { #define MASK_ADDR1RES2 (0x1 << 8) /* Reserved */ #define MASK_AMUTE (0x1 << 9) /* Output A (Headphone) Mute when 1 */ #define MASK_HDMUTE MASK_AMUTE -#define MASK_PAROUT (0x3 << 10) /* Parallel Out (???) */ +#define MASK_PAROUT0 (0x1 << 10) /* Parallel Output 0 */ +#define MASK_PAROUT1 (0x2 << 10) /* Parallel Output 1 */ + +#define MASK_MIC_BOOST (0x4) /* screamer mic boost */ #define SAMPLERATE_48000 (0x0 << 3) /* 48 or 44.1 kHz */ #define SAMPLERATE_32000 (0x1 << 3) /* 32 or 29.4 kHz */ @@ -162,8 +168,9 @@ struct awacs_regs { #define RATE_LOW 1 /* HIGH = 48kHz, etc; LOW = 44.1kHz, etc. */ - +/*******************/ /* Burgundy values */ +/*******************/ #define MASK_ADDR_BURGUNDY_INPSEL21 (0x11 << 12) #define MASK_ADDR_BURGUNDY_INPSEL3 (0x12 << 12) @@ -226,4 +233,19 @@ struct awacs_regs { #define DEF_BURGUNDY_ATTENLINEOUT (0xCC) #define DEF_BURGUNDY_ATTENHP (0xCC) +/*********************/ +/* i2s layout values */ +/*********************/ + +#define I2S_REG_INT_CTL 0x00 +#define I2S_REG_SERIAL_FORMAT 0x10 +#define I2S_REG_CODEC_MSG_OUT 0x20 +#define I2S_REG_CODEC_MSG_IN 0x30 +#define I2S_REG_FRAME_COUNT 0x40 +#define I2S_REG_FRAME_MATCH 0x50 +#define I2S_REG_DATAWORD_SIZES 0x60 +#define I2S_REG_PEAKLEVEL_SEL 0x70 +#define I2S_REG_PEAKLEVEL_IN0 0x80 +#define I2S_REG_PEAKLEVEL_IN1 0x90 + #endif /* _AWACS_DEFS_H_ */ diff -prauN linux-2.6.0-test5/sound/oss/dmasound/dac3550a.c wli-2.6.0-test5-bk12-25/sound/oss/dmasound/dac3550a.c --- linux-2.6.0-test5/sound/oss/dmasound/dac3550a.c 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/sound/oss/dmasound/dac3550a.c 2003-09-25 19:16:18.000000000 -0700 @@ -0,0 +1,222 @@ +/* + * Driver for the i2c/i2s based DAC3550a sound chip used + * on some Apple iBooks. Also known as "DACA". + * + * This file is subject to the terms and conditions of the GNU General Public + * License. See the file COPYING in the main directory of this archive + * for more details. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "dmasound.h" + +/* FYI: This code was derived from the tas3001c.c Texas/Tumbler mixer + * control code, as well as info derived from the AppleDACAAudio driver + * from Darwin CVS (main thing I derived being register numbers and + * values, as well as when to make the calls). */ + +#define I2C_DRIVERID_DACA (0xFDCB) + +#define DACA_VERSION "0.1" +#define DACA_DATE "20010930" + +static int cur_left_vol; +static int cur_right_vol; +static struct i2c_client *daca_client; + +static int daca_attach_adapter(struct i2c_adapter *adapter); +static int daca_detect_client(struct i2c_adapter *adapter, int address); +static int daca_detach_client(struct i2c_client *client); + +/* Unique ID allocation */ +static int daca_id; + +struct daca_data +{ + int arf; /* place holder for furture use */ +}; + +struct i2c_driver daca_driver = { + .owner = THIS_MODULE, + .name = "DAC3550A driver V " DACA_VERSION, + .id = I2C_DRIVERID_DACA, + .flags = I2C_DF_NOTIFY, + .attach_adapter = daca_attach_adapter, + .detach_client = daca_detach_client, +}; + +#define VOL_MAX ((1<<20) - 1) + +void daca_get_volume(uint * left_vol, uint *right_vol) +{ + *left_vol = cur_left_vol >> 5; + *right_vol = cur_right_vol >> 5; +} + +int daca_set_volume(uint left_vol, uint right_vol) +{ + unsigned short voldata; + + if (!daca_client) + return -1; + + /* Derived from experience, not from any specific values */ + left_vol <<= 5; + right_vol <<= 5; + + if (left_vol > VOL_MAX) + left_vol = VOL_MAX; + if (right_vol > VOL_MAX) + right_vol = VOL_MAX; + + voldata = ((left_vol >> 14) & 0x3f) << 8; + voldata |= (right_vol >> 14) & 0x3f; + + if (i2c_smbus_write_word_data(daca_client, 2, voldata) < 0) { + printk("daca: failed to set volume \n"); + return -1; + } + + cur_left_vol = left_vol; + cur_right_vol = right_vol; + + return 0; +} + +int daca_leave_sleep(void) +{ + if (!daca_client) + return -1; + + /* Do a short sleep, just to make sure I2C bus is awake and paying + * attention to us + */ + wait_ms(20); + /* Write the sample rate reg the value it needs */ + i2c_smbus_write_byte_data(daca_client, 1, 8); + daca_set_volume(cur_left_vol >> 5, cur_right_vol >> 5); + /* Another short delay, just to make sure the other I2C bus writes + * have taken... + */ + wait_ms(20); + /* Write the global config reg - invert right power amp, + * DAC on, use 5-volt mode */ + i2c_smbus_write_byte_data(daca_client, 3, 0x45); + + return 0; +} + +int daca_enter_sleep(void) +{ + if (!daca_client) + return -1; + + i2c_smbus_write_byte_data(daca_client, 1, 8); + daca_set_volume(cur_left_vol >> 5, cur_right_vol >> 5); + + /* Write the global config reg - invert right power amp, + * DAC on, enter low-power mode, use 5-volt mode + */ + i2c_smbus_write_byte_data(daca_client, 3, 0x65); + + return 0; +} + +static int daca_attach_adapter(struct i2c_adapter *adapter) +{ + if (!strncmp(adapter->name, "mac-io", 6)) + daca_detect_client(adapter, 0x4d); + return 0; +} + +static int daca_init_client(struct i2c_client * new_client) +{ + /* + * Probe is not working with the current i2c-keywest + * driver. We try to use addr 0x4d on each adapters + * instead, by setting the format register. + * + * FIXME: I'm sure that can be obtained from the + * device-tree. --BenH. + */ + + /* Write the global config reg - invert right power amp, + * DAC on, use 5-volt mode + */ + if (i2c_smbus_write_byte_data(new_client, 3, 0x45)) + return -1; + + i2c_smbus_write_byte_data(new_client, 1, 8); + daca_client = new_client; + daca_set_volume(15000, 15000); + + return 0; +} + +static int daca_detect_client(struct i2c_adapter *adapter, int address) +{ + const char *client_name = "DAC 3550A Digital Equalizer"; + struct i2c_client *new_client; + struct daca_data *data; + int rc = -ENODEV; + + new_client = kmalloc(sizeof(*new_client) + sizeof(*data), GFP_KERNEL); + if (!new_client) + return -ENOMEM; + + new_client->addr = address; + new_client->adapter = adapter; + new_client->driver = &daca_driver; + new_client->flags = 0; + strcpy(new_client->name, client_name); + new_client->id = daca_id++; /* racy... */ + + data = (struct daca_data *)(new_client+1); + dev_set_drvdata(&new_client->dev, data); + + if (daca_init_client(new_client)) + goto bail; + + /* Tell the i2c layer a new client has arrived */ + if (i2c_attach_client(new_client)) + goto bail; + + return 0; + bail: + kfree(new_client); + return rc; +} + + +static int daca_detach_client(struct i2c_client *client) +{ + if (client == daca_client) + daca_client = NULL; + + i2c_detach_client(client); + kfree(client); + return 0; +} + +void daca_cleanup(void) +{ + i2c_del_driver(&daca_driver); +} + +int daca_init(void) +{ + printk("dac3550a driver version %s (%s)\n",DACA_VERSION,DACA_DATE); + return i2c_add_driver(&daca_driver); +} diff -prauN linux-2.6.0-test5/sound/oss/dmasound/dmasound_awacs.c wli-2.6.0-test5-bk12-25/sound/oss/dmasound/dmasound_awacs.c --- linux-2.6.0-test5/sound/oss/dmasound/dmasound_awacs.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/sound/oss/dmasound/dmasound_awacs.c 2003-09-25 19:16:18.000000000 -0700 @@ -45,7 +45,14 @@ * 01/02/2002 [0.7] - BenH * - all sort of minor bits went in since the latest update, I * bumped the version number for that reason -*/ + * + * 07/26/2002 [0.8] - BenH + * - More minor bits since last changelog (I should be more careful + * with those) + * - Support for snapper & better tumbler integration by Toby Sargeant + * - Headphone detect for scremer by Julien Blache + * - More tumbler fixed by Andreas Schwab + */ /* GENERAL FIXME/TODO: check that the assumptions about what is written to mac-io is valid for DACA & Tumbler. @@ -68,6 +75,7 @@ #include #include #include +#include #include #ifdef CONFIG_ADB_CUDA #include @@ -89,10 +97,14 @@ #include "awacs_defs.h" #include "dmasound.h" +#include "tas3001c.h" +#include "tas3004.h" +#include "tas_common.h" #define DMASOUND_AWACS_REVISION 0 #define DMASOUND_AWACS_EDITION 7 +#define AWACS_SNAPPER 110 /* fake revision # for snapper */ #define AWACS_BURGUNDY 100 /* fake revision # for burgundy */ #define AWACS_TUMBLER 90 /* fake revision # for tumbler */ #define AWACS_DACA 80 /* fake revision # for daca (ibook) */ @@ -103,11 +115,13 @@ */ static int awacs_irq, awacs_tx_irq, awacs_rx_irq; static volatile struct awacs_regs *awacs; +static volatile u32 *i2s; static volatile struct dbdma_regs *awacs_txdma, *awacs_rxdma; static int awacs_rate_index; static int awacs_subframe; static int awacs_spkr_vol; static struct device_node* awacs_node; +static struct device_node* i2s_node; static char awacs_name[64]; static int awacs_revision; @@ -164,6 +178,8 @@ static int mic_lev; static int cd_lev = 0x6363 ; /* 99 % */ static int line_lev; +static int hdp_connected; + /* * Stuff for outputting a beep. The values range from -327 to +327 * so we can multiply by an amplitude in the range 0..100 to get a @@ -215,7 +231,6 @@ static int awacs_beep_state; static short *beep_buf; static void *beep_dbdma_cmd_space; static volatile struct dbdma_cmd *beep_dbdma_cmd; -static void (*orig_mksound)(unsigned int, unsigned int); /* Burgundy functions */ static void awacs_burgundy_wcw(unsigned addr,unsigned newval); @@ -286,25 +301,12 @@ extern TRANS transAwacsExpand ; extern TRANS transAwacsNormalRead ; extern int daca_init(void); -extern int daca_cleanup(void); +extern void daca_cleanup(void); extern int daca_set_volume(uint left_vol, uint right_vol); extern void daca_get_volume(uint * left_vol, uint *right_vol); extern int daca_enter_sleep(void); extern int daca_leave_sleep(void); -extern int tas_init(void); -extern int tas_cleanup(void); -extern int tumbler_set_volume(uint left_vol, uint right_vol); -extern void tumbler_get_volume(uint * left_vol, uint *right_vol); -extern void tumbler_set_treble(int treble); -extern void tumbler_get_treble(int *treble); -extern void tumbler_set_bass(int bass); -extern void tumbler_get_bass(int *bass); -extern void tumbler_set_pcm_lvl(int pcm_lvl); -extern void tumbler_get_pcm_lvl(int *pcm_lvl); -extern int tumbler_enter_sleep(void); -extern int tumbler_leave_sleep(void); - #define TRY_LOCK() \ if ((rc = down_interruptible(&dmasound_sem)) != 0) \ return rc; @@ -331,7 +333,7 @@ static inline int ioctl_return2(int *add } -/*** AE - TUMBLER START *********************************************************/ +/*** AE - TUMBLER / SNAPPER START ************************************************/ int gpio_audio_reset, gpio_audio_reset_pol; @@ -393,31 +395,35 @@ read_audio_gpio(int gpio_addr) return ((pmac_call_feature(PMAC_FTR_READ_GPIO, NULL, gpio_addr, 0) & 0x02) !=0); } +/* + * Headphone interrupt via GPIO (Tumbler, Snapper, DACA) + */ static irqreturn_t headphone_intr(int irq, void *devid, struct pt_regs *regs) { - int handled = 0; - spin_lock(&dmasound.lock); + unsigned long flags; + + spin_lock_irqsave(&dmasound.lock, flags); if (read_audio_gpio(gpio_headphone_detect) == gpio_headphone_detect_pol) { - handled = 1; printk(KERN_INFO "Audio jack plugged, muting speakers.\n"); - write_audio_gpio(gpio_amp_mute, gpio_amp_mute_pol); write_audio_gpio(gpio_headphone_mute, !gpio_headphone_mute_pol); + write_audio_gpio(gpio_amp_mute, gpio_amp_mute_pol); + tas_output_device_change(sound_device_id,TAS_OUTPUT_HEADPHONES,0); } else { - handled = 1; printk(KERN_INFO "Audio jack unplugged, enabling speakers.\n"); write_audio_gpio(gpio_amp_mute, !gpio_amp_mute_pol); write_audio_gpio(gpio_headphone_mute, gpio_headphone_mute_pol); + tas_output_device_change(sound_device_id,TAS_OUTPUT_INTERNAL_SPKR,0); } - spin_unlock(&dmasound.lock); - return IRQ_RETVAL(handled); + spin_unlock_irqrestore(&dmasound.lock, flags); + return IRQ_HANDLED; } /* Initialize tumbler */ static int -awacs_tumbler_init(void) +tas_dmasound_init(void) { setup_audio_gpio( "audio-hw-reset", @@ -474,15 +480,124 @@ awacs_tumbler_init(void) static int -awacs_tumbler_cleanup(void) +tas_dmasound_cleanup(void) { if (gpio_headphone_irq) free_irq(gpio_headphone_irq, 0); return 0; } +/* We don't support 48k yet */ +static int tas_freqs[1] = { 44100 } ; +static int tas_freqs_ok[1] = { 1 } ; + +/* don't know what to do really - just have to leave it where + * OF left things +*/ + +static int +tas_set_frame_rate(void) +{ + if (i2s) { + out_le32(i2s + (I2S_REG_SERIAL_FORMAT >> 2), 0x41190000); + out_le32(i2s + (I2S_REG_DATAWORD_SIZES >> 2), 0x02000200); + } + dmasound.hard.speed = 44100 ; + awacs_rate_index = 0 ; + return 44100 ; +} + +static int +tas_mixer_ioctl(u_int cmd, u_long arg) +{ + int data; + int rc; + + rc=tas_device_ioctl(cmd, arg); + if (rc != -EINVAL) { + return rc; + } + + if ((cmd & ~0xff) == MIXER_WRITE(0) && + tas_supported_mixers() & (1<<(cmd & 0xff))) { + rc = get_user(data, (int *)(arg)); + if (rc<0) return rc; + tas_set_mixer_level(cmd & 0xff, data); + tas_get_mixer_level(cmd & 0xff, &data); + return ioctl_return2((int *)(arg), data); + } + if ((cmd & ~0xff) == MIXER_READ(0) && + tas_supported_mixers() & (1<<(cmd & 0xff))) { + tas_get_mixer_level(cmd & 0xff, &data); + return ioctl_return2((int *)(arg), data); + } + + switch(cmd) { + case SOUND_MIXER_READ_DEVMASK: + data = tas_supported_mixers() | SOUND_MASK_SPEAKER; + rc = IOCTL_OUT(arg, data); + break; + case SOUND_MIXER_READ_STEREODEVS: + data = tas_stereo_mixers(); + rc = IOCTL_OUT(arg, data); + break; + case SOUND_MIXER_READ_CAPS: + rc = IOCTL_OUT(arg, 0); + break; + case SOUND_MIXER_READ_RECMASK: + data = 0; + rc = IOCTL_OUT(arg, data); + break; + case SOUND_MIXER_READ_RECSRC: + data = 0; + rc = IOCTL_OUT(arg, data); + break; + case SOUND_MIXER_WRITE_RECSRC: + IOCTL_IN(arg, data); + data =0; + rc = IOCTL_OUT(arg, data); + break; + case SOUND_MIXER_WRITE_SPEAKER: /* really bell volume */ + IOCTL_IN(arg, data); + beep_vol = data & 0xff; + /* fall through */ + case SOUND_MIXER_READ_SPEAKER: + rc = IOCTL_OUT(arg, (beep_vol<<8) | beep_vol); + break; + case SOUND_MIXER_OUTMASK: + case SOUND_MIXER_OUTSRC: + default: + rc = -EINVAL; + } + + return rc; +} + +static void __init +tas_init_frame_rates(unsigned int *prop, unsigned int l) +{ + int i ; + if (prop) { + for (i=0; i<1; i++) + tas_freqs_ok[i] = 0; + for (l /= sizeof(int); l > 0; --l) { + unsigned int r = *prop++; + /* Apple 'Fixed' format */ + if (r >= 0x10000) + r >>= 16; + for (i = 0; i < 1; ++i) { + if (r == tas_freqs[i]) { + tas_freqs_ok[i] = 1; + break; + } + } + } + } + /* else we assume that all the rates are available */ +} + -/*** AE - TUMBLER END *********************************************************/ +/*** AE - TUMBLER / SNAPPER END ************************************************/ @@ -503,8 +618,10 @@ static void PMacFree(void *ptr, unsigned static int __init PMacIrqInit(void) { - if (request_irq(awacs_irq, pmac_awacs_intr, 0, "Built-in Sound misc", 0) - || request_irq(awacs_tx_irq, pmac_awacs_tx_intr, 0, "Built-in Sound out", 0) + if (awacs) + if (request_irq(awacs_irq, pmac_awacs_intr, 0, "Built-in Sound misc", 0)) + return 0; + if (request_irq(awacs_tx_irq, pmac_awacs_tx_intr, 0, "Built-in Sound out", 0) || request_irq(awacs_rx_irq, pmac_awacs_rx_intr, 0, "Built-in Sound in", 0)) return 0; return 1; @@ -517,23 +634,28 @@ static void PMacIrqCleanup(void) DBDMA_DO_STOP(awacs_txdma); DBDMA_DO_STOP(awacs_rxdma); - /* disable interrupts from awacs interface */ - out_le32(&awacs->control, in_le32(&awacs->control) & 0xfff); - + if (awacs) + /* disable interrupts from awacs interface */ + out_le32(&awacs->control, in_le32(&awacs->control) & 0xfff); + /* Switch off the sound clock */ pmac_call_feature(PMAC_FTR_SOUND_CHIP_ENABLE, awacs_node, 0, 0); /* Make sure proper bits are set on pismo & tipb */ - if (machine_is_compatible("PowerBook3,1") || - machine_is_compatible("PowerBook3,2")) { + if ((machine_is_compatible("PowerBook3,1") || + machine_is_compatible("PowerBook3,2")) && awacs) { awacs_reg[1] |= MASK_PAROUT0 | MASK_PAROUT1; awacs_write(MASK_ADDR1 | awacs_reg[1]); wait_ms(200); } - free_irq(awacs_irq, 0); + if (awacs) + free_irq(awacs_irq, 0); free_irq(awacs_tx_irq, 0); free_irq(awacs_rx_irq, 0); - /* all OF versions I've seen use this value */ - iounmap((void *)awacs); + + if (awacs) + iounmap((void *)awacs); + if (i2s) + iounmap((void *)i2s); iounmap((void *)awacs_txdma); iounmap((void *)awacs_rxdma); @@ -547,10 +669,8 @@ static void PMacIrqCleanup(void) kfree(awacs_rx_cmd_space); if (beep_dbdma_cmd_space) kfree(beep_dbdma_cmd_space); - if (beep_buf) { + if (beep_buf) kfree(beep_buf); - kd_mksound = orig_mksound; - } #ifdef CONFIG_PMAC_PBOOK pmu_unregister_sleep_notifier(&awacs_sleep_notifier); #endif @@ -563,26 +683,16 @@ static void PMacSilence(void) DBDMA_DO_STOP(awacs_txdma); } -static int tumbler_freqs[2] = { 48000, 44100 } ; -static int tumbler_freqs_ok[2] = { 1, 1 } ; - -/* don't know what to do really - just have to leave it where - * OF left things -*/ - -static int tumbler_set_frame_rate(void) -{ - dmasound.hard.speed = 44100 ; - awacs_rate_index = 0 ; - return 44100 ; -} - /* don't know what to do really - just have to leave it where * OF left things */ static int daca_set_frame_rate(void) { + if (i2s) { + out_le32(i2s + (I2S_REG_SERIAL_FORMAT >> 2), 0x41190000); + out_le32(i2s + (I2S_REG_DATAWORD_SIZES >> 2), 0x02000200); + } dmasound.hard.speed = 44100 ; awacs_rate_index = 0 ; return 44100 ; @@ -593,7 +703,8 @@ static int awacs_freqs[8] = { }; static int awacs_freqs_ok[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; -static int awacs_set_frame_rate(int desired, int catch_r) +static int +awacs_set_frame_rate(int desired, int catch_r) { int tolerance, i = 8 ; /* @@ -617,13 +728,9 @@ static int awacs_set_frame_rate(int desi return dmasound.hard.speed; } -static int burgundy_frame_rates = 1 ; -static int burgundy_set_frame_rate(void) +static int +burgundy_set_frame_rate(void) { -#ifdef DEBUG_DMASOUND -if (burgundy_frame_rates > 1) - printk("dmasound_pmac: warning Burgundy had more than one frame rate\n"); -#endif awacs_rate_index = 0 ; awacs_reg[1] = (awacs_reg[1] & ~MASK_SAMPLERATE) ; /* XXX disable error interrupt on burgundy for now */ @@ -631,24 +738,24 @@ if (burgundy_frame_rates > 1) return 44100 ; } -static int set_frame_rate(int desired, int catch_r) +static int +set_frame_rate(int desired, int catch_r) { switch (awacs_revision) { case AWACS_BURGUNDY: - dmasound.hard.speed = - burgundy_set_frame_rate(); + dmasound.hard.speed = burgundy_set_frame_rate(); break ; case AWACS_TUMBLER: - dmasound.hard.speed = - tumbler_set_frame_rate(); + case AWACS_SNAPPER: + dmasound.hard.speed = tas_set_frame_rate(); break ; case AWACS_DACA: dmasound.hard.speed = daca_set_frame_rate(); break ; default: - dmasound.hard.speed = - awacs_set_frame_rate(desired, catch_r); + dmasound.hard.speed = awacs_set_frame_rate(desired, + catch_r); break ; } return dmasound.hard.speed ; @@ -698,11 +805,13 @@ static void PMacInit(void) dmasound.trans_write = &transAwacsExpand; dmasound.trans_read = &transAwacsNormalRead; - if (hw_can_byteswap && (dmasound.hard.format == AFMT_S16_LE)) - out_le32(&awacs->byteswap, BS_VAL); - else - out_le32(&awacs->byteswap, 0); - + if (awacs) { + if (hw_can_byteswap && (dmasound.hard.format == AFMT_S16_LE)) + out_le32(&awacs->byteswap, BS_VAL); + else + out_le32(&awacs->byteswap, 0); + } + expand_bal = -dmasound.soft.speed; } @@ -787,18 +896,28 @@ static int awacs_volume_setter(int volum static int PMacSetVolume(int volume) { - return awacs_volume_setter(volume, 2, MASK_AMUTE, 6); + printk(KERN_WARNING "Bogus call to PMacSetVolume !\n"); + return 0; +} + +static void awacs_setup_for_beep(int speed) +{ + out_le32(&awacs->control, + (in_le32(&awacs->control) & ~0x1f00) + | ((speed > 0 ? speed : awacs_rate_index) << 8)); + + if (hw_can_byteswap && (dmasound.hard.format == AFMT_S16_LE) && speed == -1) + out_le32(&awacs->byteswap, BS_VAL); + else + out_le32(&awacs->byteswap, 0); } +/* CHECK: how much of this *really* needs IRQs masked? */ static void __PMacPlay(void) { volatile struct dbdma_cmd *cp; int next_frg, count; - unsigned long flags; - - /* CHECK: how much of this *really* needs IRQs masked? */ - spin_lock_irqsave(&dmasound.lock, flags); count = 300 ; /* > two cycles at the lowest sample rate */ /* what we want to send next */ @@ -810,15 +929,8 @@ static void __PMacPlay(void) out_le32(&awacs_txdma->control, (RUN|PAUSE|FLUSH|WAKE) << 16); while ( (in_le32(&awacs_txdma->status) & RUN) && count--) udelay(1); - /* FIXME: check that this is OK for other chip sets */ - out_le32(&awacs->control, - (in_le32(&awacs->control) & ~0x1f00) - | (awacs_rate_index << 8)); - - if (hw_can_byteswap && (dmasound.hard.format == AFMT_S16_LE)) - out_le32(&awacs->byteswap, BS_VAL); - else - out_le32(&awacs->byteswap, 0); + if (awacs) + awacs_setup_for_beep(-1); out_le32(&awacs_txdma->cmdptr, virt_to_bus(&(awacs_tx_cmds[next_frg]))); @@ -865,14 +977,18 @@ static void __PMacPlay(void) out_le32(&awacs_txdma->control, ((RUN|WAKE) << 16) + (RUN|WAKE)); ++write_sq.active; } - spin_unlock_irqrestore(&dmasound.lock, flags); } static void PMacPlay(void) { LOCK(); - if (!awacs_sleeping) + if (!awacs_sleeping) { + unsigned long flags; + + spin_lock_irqsave(&dmasound.lock, flags); __PMacPlay(); + spin_unlock_irqrestore(&dmasound.lock, flags); + } UNLOCK(); } @@ -919,6 +1035,7 @@ pmac_awacs_tx_intr(int irq, void *devid, { int i = write_sq.front; int stat; + int i_nowrap = write_sq.front; volatile struct dbdma_cmd *cp; /* != 0 when we are dealing with a DEAD xfer */ static int emergency_in_use; @@ -976,6 +1093,7 @@ printk("dmasound_pmac: tx-irq: xfer died emergency_in_use = 0 ; /* done that */ --write_sq.count; --write_sq.active; + i_nowrap++; if (++i >= write_sq.max_count) i = 0; } @@ -988,7 +1106,7 @@ printk("dmasound_pmac: tx-irq: xfer died } /* if we used some data up then wake the writer to supply some more*/ - if (i != write_sq.front) + if (i_nowrap != write_sq.front) WAKE_UP(write_sq.action_queue); write_sq.front = i; @@ -1091,11 +1209,30 @@ static irqreturn_t pmac_awacs_intr(int irq, void *devid, struct pt_regs *regs) { int ctrl; + int status; + int r1; + spin_lock(&dmasound.lock); ctrl = in_le32(&awacs->control); + status = in_le32(&awacs->codec_stat); if (ctrl & MASK_PORTCHG) { - /* do something when headphone is plugged/unplugged? */ + /* tested on Screamer, should work on others too */ + if (awacs_revision == AWACS_SCREAMER) { + if (((status & MASK_HDPCONN) >> 3) && (hdp_connected == 0)) { + hdp_connected = 1; + + r1 = awacs_reg[1] | MASK_SPKMUTE; + awacs_reg[1] = r1; + awacs_write(r1 | MASK_ADDR_MUTE); + } else if (((status & MASK_HDPCONN) >> 3 == 0) && (hdp_connected == 1)) { + hdp_connected = 0; + + r1 = awacs_reg[1] & ~MASK_SPKMUTE; + awacs_reg[1] = r1; + awacs_write(r1 | MASK_ADDR_MUTE); + } + } } if (ctrl & MASK_CNTLERR) { int err = (in_le32(&awacs->codec_stat) & MASK_ERRCODE) >> 16; @@ -1113,7 +1250,7 @@ static void awacs_write(int val) { int count = 300 ; - if (awacs_revision >= AWACS_DACA) + if (awacs_revision >= AWACS_DACA || !awacs) return ; while ((in_le32(&awacs->codec_ctrl) & MASK_NEWECMD) && count--) @@ -1136,22 +1273,16 @@ static void awacs_nosound(unsigned long out_le32(&awacs_txdma->control, (RUN|PAUSE|FLUSH|WAKE) << 16); while ((in_le32(&awacs_txdma->status) & RUN) && count--) udelay(1); - /* FIXME: check this is OK for DACA, Tumbler */ - out_le32(&awacs->control, - (in_le32(&awacs->control) & ~0x1f00) - | (awacs_rate_index << 8)); - if (hw_can_byteswap && (dmasound.hard.format == AFMT_S16_LE)) - out_le32(&awacs->byteswap, BS_VAL); - else - out_le32(&awacs->byteswap, 0); + if (awacs) + awacs_setup_for_beep(-1); beep_playing = 0; } spin_unlock_irqrestore(&dmasound.lock, flags); } static struct timer_list beep_timer = TIMER_INITIALIZER(awacs_nosound, 0, 0); -}; +#if 0 /* would need to go through the input layer in 2.6, later.. --hch */ /* we generate the beep with a single dbdma command that loops a buffer forever - without generating interrupts. So, to stop it you have to stop dma output as per awacs_nosound. @@ -1237,17 +1368,15 @@ static void awacs_mksound(unsigned int h out_le32(&awacs_txdma->control, (RUN|WAKE|FLUSH|PAUSE) << 16); while ((in_le32(&awacs_txdma->status) & RUN) && count--) udelay(1); /* timeout > 2 samples at lowest rate*/ - /* FIXME: check this is OK on DACA, Tumbler */ - out_le32(&awacs->control, - (in_le32(&awacs->control) & ~0x1f00) - | (beep_speed << 8)); - out_le32(&awacs->byteswap, 0); /* force BE */ + if (awacs) + awacs_setup_for_beep(beep_speed); out_le32(&awacs_txdma->cmdptr, virt_to_bus(beep_dbdma_cmd)); (void)in_le32(&awacs_txdma->status); out_le32(&awacs_txdma->control, RUN | (RUN << 16)); } spin_unlock_irqrestore(&dmasound.lock, flags); } +#endif /* used in init and for wake-up */ @@ -1267,10 +1396,12 @@ load_awacs(void) awacs_write(awacs_reg[1] + MASK_ADDR1); awacs_write(awacs_reg[7] + MASK_ADDR7); } - if (hw_can_byteswap && (dmasound.hard.format == AFMT_S16_LE)) - out_le32(&awacs->byteswap, BS_VAL); - else - out_le32(&awacs->byteswap, 0); + if (awacs) { + if (hw_can_byteswap && (dmasound.hard.format == AFMT_S16_LE)) + out_le32(&awacs->byteswap, BS_VAL); + else + out_le32(&awacs->byteswap, 0); + } } #ifdef CONFIG_PMAC_PBOOK @@ -1280,6 +1411,8 @@ load_awacs(void) /* FIXME: sort out disabling/re-enabling of read stuff as well */ static int awacs_sleep_notify(struct pmu_sleep_notifier *self, int when) { + unsigned long flags; + switch (when) { case PBOOK_SLEEP_NOW: LOCK(); @@ -1297,9 +1430,18 @@ static int awacs_sleep_notify(struct pmu /* stop rx - if going - a bit of a daft user... but */ out_le32(&awacs_rxdma->control, (RUN|WAKE|FLUSH << 16)); /* deny interrupts */ + if (awacs) + disable_irq(awacs_irq); + disable_irq(awacs_tx_irq); + disable_irq(awacs_rx_irq); + /* Chip specific sleep code */ switch (awacs_revision) { case AWACS_TUMBLER: - tumbler_enter_sleep(); /* Stub for now */ + case AWACS_SNAPPER: + write_audio_gpio(gpio_headphone_mute, gpio_headphone_mute_pol); + write_audio_gpio(gpio_amp_mute, gpio_amp_mute_pol); + tas_enter_sleep(); + write_audio_gpio(gpio_audio_reset, gpio_audio_reset_pol); break ; case AWACS_DACA: daca_enter_sleep(); @@ -1312,17 +1454,14 @@ static int awacs_sleep_notify(struct pmu out_le32(&awacs->control, 0x11) ; break ; } - disable_irq(awacs_irq); - disable_irq(awacs_tx_irq); - disable_irq(awacs_rx_irq); /* Disable sound clock */ pmac_call_feature(PMAC_FTR_SOUND_CHIP_ENABLE, awacs_node, 0, 0); /* According to Darwin, we do that after turning off the sound * chip clock. All this will have to be cleaned up once we properly * parse the OF sound-objects */ - if (machine_is_compatible("PowerBook3,1") || - machine_is_compatible("PowerBook3,2")) { + if ((machine_is_compatible("PowerBook3,1") || + machine_is_compatible("PowerBook3,2")) && awacs) { awacs_reg[1] |= MASK_PAROUT0 | MASK_PAROUT1; awacs_write(MASK_ADDR1 | awacs_reg[1]); wait_ms(200); @@ -1331,8 +1470,8 @@ static int awacs_sleep_notify(struct pmu case PBOOK_WAKE: /* Enable sound clock */ pmac_call_feature(PMAC_FTR_SOUND_CHIP_ENABLE, awacs_node, 0, 1); - if (machine_is_compatible("PowerBook3,1") || - machine_is_compatible("PowerBook3,2")) { + if ((machine_is_compatible("PowerBook3,1") || + machine_is_compatible("PowerBook3,2")) && awacs) { wait_ms(100); awacs_reg[1] &= ~(MASK_PAROUT0 | MASK_PAROUT1); awacs_write(MASK_ADDR1 | awacs_reg[1]); @@ -1342,13 +1481,20 @@ static int awacs_sleep_notify(struct pmu /* restore settings */ switch (awacs_revision) { case AWACS_TUMBLER: + case AWACS_SNAPPER: + write_audio_gpio(gpio_headphone_mute, gpio_headphone_mute_pol); + write_audio_gpio(gpio_amp_mute, gpio_amp_mute_pol); + write_audio_gpio(gpio_audio_reset, gpio_audio_reset_pol); + wait_ms(100); + write_audio_gpio(gpio_audio_reset, !gpio_audio_reset_pol); + wait_ms(150); + tas_leave_sleep(); /* Stub for now */ headphone_intr(0,0,0); - tumbler_leave_sleep(); /* Stub for now */ break; case AWACS_DACA: wait_ms(10); /* Check this !!! */ daca_leave_sleep(); - break ; /* don't know how yet */ + break ; /* dont know how yet */ case AWACS_BURGUNDY: break ; case AWACS_SCREAMER: @@ -1358,17 +1504,20 @@ static int awacs_sleep_notify(struct pmu break ; } /* Recalibrate chip */ - if (awacs_revision == AWACS_SCREAMER) + if (awacs_revision == AWACS_SCREAMER && awacs) awacs_recalibrate(); /* Make sure dma is stopped */ PMacSilence(); - enable_irq(awacs_irq); + if (awacs) + enable_irq(awacs_irq); enable_irq(awacs_tx_irq); enable_irq(awacs_rx_irq); - /* OK, allow ints back again */ - out_le32(&awacs->control, MASK_IEPC - | (awacs_rate_index << 8) | 0x11 - | (awacs_revision < AWACS_DACA ? MASK_IEE: 0)); + if (awacs) { + /* OK, allow ints back again */ + out_le32(&awacs->control, MASK_IEPC + | (awacs_rate_index << 8) | 0x11 + | (awacs_revision < AWACS_DACA ? MASK_IEE: 0)); + } if (macio_base && is_pbook_g3) { /* FIXME: should restore the setup we had...*/ out_8(macio_base + 0x37, 3); @@ -1384,7 +1533,9 @@ static int awacs_sleep_notify(struct pmu awacs_sleeping = 0; /* Resume pending sounds. */ /* we don't try to restart input... */ + spin_lock_irqsave(&dmasound.lock, flags); __PMacPlay(); + spin_unlock_irqrestore(&dmasound.lock, flags); UNLOCK(); } return PBOOK_SLEEP_OK; @@ -1956,7 +2107,7 @@ static int burgundy_mixer_ioctl(u_int cm case SOUND_MIXER_READ_SPEAKER: data = awacs_burgundy_rcb(MASK_ADDR_BURGUNDY_ATTENSPEAKER); data = (((data & 0xf)*100)/16) + ((((data>>4)*100)/16)<<8); - rc = IOCTL_OUT(arg, ~data); + rc = IOCTL_OUT(arg, (~data) & 0x0000ffff); break; case SOUND_MIXER_WRITE_ALTPCM: /* really bell volume */ IOCTL_IN(arg, data); @@ -2011,89 +2162,6 @@ static int burgundy_mixer_ioctl(u_int cm return rc; } -static int tumbler_mixer_ioctl(u_int cmd, u_long arg) -{ - int data; - int rc; - - /* We are, we are, we are... Tumbler (and very dumb) */ - /* Ok, we're not THAT dumb anymore, but still pretty dumb :-) */ - - switch(cmd) { - case SOUND_MIXER_READ_DEVMASK: - data = SOUND_MASK_VOLUME | SOUND_MASK_ALTPCM | - SOUND_MASK_BASS | SOUND_MASK_TREBLE | - SOUND_MASK_PCM; - rc = IOCTL_OUT(arg, data); - break; - case SOUND_MIXER_READ_RECMASK: - data = 0; - rc = IOCTL_OUT(arg, data); - break; - case SOUND_MIXER_READ_RECSRC: - data = 0; - rc = IOCTL_OUT(arg, data); - break; - case SOUND_MIXER_WRITE_RECSRC: - IOCTL_IN(arg, data); - data =0; - rc = IOCTL_OUT(arg, data); - break; - case SOUND_MIXER_READ_STEREODEVS: - data = SOUND_MASK_VOLUME | SOUND_MASK_PCM; - rc = IOCTL_OUT(arg, data); - break; - case SOUND_MIXER_READ_CAPS: - rc = IOCTL_OUT(arg, 0); - break; - case SOUND_MIXER_WRITE_BASS: - IOCTL_IN(arg, data); - tumbler_set_bass(data); - /* Fall through */ - case SOUND_MIXER_READ_BASS: - tumbler_get_bass(&data); - rc = IOCTL_OUT(arg, data); - break; - case SOUND_MIXER_WRITE_TREBLE: - IOCTL_IN(arg, data); - tumbler_set_treble(data); - /* Fall through */ - case SOUND_MIXER_READ_TREBLE: - tumbler_get_treble(&data); - rc = IOCTL_OUT(arg, data); - break; - case SOUND_MIXER_WRITE_PCM: - IOCTL_IN(arg, data); - tumbler_set_pcm_lvl(data); - /* Fall through */ - case SOUND_MIXER_READ_PCM: - tumbler_get_pcm_lvl(&data); - IOCTL_OUT(arg, data); - break; - case SOUND_MIXER_WRITE_VOLUME: - IOCTL_IN(arg, data); - tumbler_set_volume(data, data); - /* Fall through */ - case SOUND_MIXER_READ_VOLUME: - tumbler_get_volume(& data, &data); - rc = IOCTL_OUT(arg, data); - break; - case SOUND_MIXER_WRITE_ALTPCM: /* really bell volume */ - IOCTL_IN(arg, data); - beep_vol = data & 0xff; - /* fall through */ - case SOUND_MIXER_READ_ALTPCM: - rc = IOCTL_OUT(arg, beep_vol); - break; - case SOUND_MIXER_OUTMASK: - case SOUND_MIXER_OUTSRC: - default: - rc = -EINVAL; - } - - return rc; -} - static int daca_mixer_ioctl(u_int cmd, u_long arg) { int data; @@ -2158,7 +2226,8 @@ static int PMacMixerIoctl(u_int cmd, u_l rc = daca_mixer_ioctl(cmd, arg); break; case AWACS_TUMBLER: - rc = tumbler_mixer_ioctl(cmd, arg); + case AWACS_SNAPPER: + rc = tas_mixer_ioctl(cmd, arg); break ; default: /* ;-)) */ rc = awacs_mixer_ioctl(cmd, arg); @@ -2175,7 +2244,9 @@ static void PMacMixerInit(void) case AWACS_TUMBLER: printk("AE-Init tumbler mixer\n"); break ; - + case AWACS_SNAPPER: + printk("AE-Init snapper mixer\n"); + break ; case AWACS_DACA: case AWACS_BURGUNDY: break ; /* don't know yet */ @@ -2366,12 +2437,12 @@ static int PMacStateInfo(char *b, size_t len += sprintf(b,"44100 ") ; break ; case AWACS_TUMBLER: - for (i=0; i<2; i++){ - if (tumbler_freqs_ok[i]) - len += sprintf(b+len,"%d ", tumbler_freqs[i]) ; + case AWACS_SNAPPER: + for (i=0; i<1; i++){ + if (tas_freqs_ok[i]) + len += sprintf(b+len,"%d ", tas_freqs[i]) ; } break ; - case AWACS_AWACS: case AWACS_SCREAMER: default: @@ -2472,8 +2543,8 @@ set_model(void) code that looks for chip properties knows how to go about it. */ -static struct device_node -__init *get_snd_io_node(void) +static struct device_node* __init +get_snd_io_node(void) { struct device_node *np = NULL; @@ -2494,7 +2565,7 @@ __init *get_snd_io_node(void) * this seems to be what iBooks (& Tumbler) have. */ if (np == NULL) - np = find_devices("i2s-a"); + np = i2s_node = find_devices("i2s-a"); /* if we didn't find this - perhaps we are on an early model * which _only_ has an 'awacs' node @@ -2514,23 +2585,22 @@ __init *get_snd_io_node(void) we have to deduce the info other ways for these. */ -static struct device_node -__init *get_snd_info_node(struct device_node *io) +static struct device_node* __init +get_snd_info_node(struct device_node *io) { struct device_node *info; info = find_devices("sound"); - while (info != 0 && info->parent != io) + while (info && info->parent != io) info = info->next; - - return info ; + return info; } /* Find out what type of codec we have. */ -static int -__init get_codec_type(struct device_node *info) +static int __init +get_codec_type(struct device_node *info) { /* already set if pre-davbus model and info will be NULL */ int codec = awacs_revision ; @@ -2547,14 +2617,16 @@ __init get_codec_type(struct device_node codec = AWACS_DACA; if (device_is_compatible(info, "tumbler")) codec = AWACS_TUMBLER; + if (device_is_compatible(info, "snapper")) + codec = AWACS_SNAPPER; } return codec ; } /* find out what type, if any, of expansion card we have */ -static void -__init get_expansion_type(void) +static void __init +get_expansion_type(void) { if (find_devices("perch") != NULL) has_perch = 1; @@ -2572,8 +2644,8 @@ __init get_expansion_type(void) * Set dmasound.mach.max_dsp_rate on the basis of these routines. */ -static void -__init init_awacs_frame_rates(unsigned int *prop, unsigned int l) +static void __init +awacs_init_frame_rates(unsigned int *prop, unsigned int l) { int i ; if (prop) { @@ -2595,31 +2667,8 @@ __init init_awacs_frame_rates(unsigned i /* else we assume that all the rates are available */ } -static void -__init init_tumbler_frame_rates(unsigned int *prop, unsigned int l) -{ - int i ; - if (prop) { - for (i=0; i<2; i++) - tumbler_freqs_ok[i] = 0; - for (l /= sizeof(int); l > 0; --l) { - unsigned int r = *prop++; - /* Apple 'Fixed' format */ - if (r >= 0x10000) - r >>= 16; - for (i = 0; i < 2; ++i) { - if (r == tumbler_freqs[i]) { - tumbler_freqs_ok[i] = 1; - break; - } - } - } - } - /* else we assume that all the rates are available */ -} - -static void -__init init_burgundy_frame_rates(unsigned int *prop, unsigned int l) +static void __init +burgundy_init_frame_rates(unsigned int *prop, unsigned int l) { int temp[9] ; int i = 0 ; @@ -2644,8 +2693,8 @@ if (i > 1){ #endif } -static void -__init init_daca_frame_rates(unsigned int *prop, unsigned int l) +static void __init +daca_init_frame_rates(unsigned int *prop, unsigned int l) { int temp[9] ; int i = 0 ; @@ -2671,21 +2720,22 @@ if (i > 1){ #endif } -static void -__init init_frame_rates(unsigned int *prop, unsigned int l) +static void __init +init_frame_rates(unsigned int *prop, unsigned int l) { - switch (awacs_revision){ + switch (awacs_revision) { case AWACS_TUMBLER: - init_tumbler_frame_rates(prop, l); + case AWACS_SNAPPER: + tas_init_frame_rates(prop, l); break ; case AWACS_DACA: - init_daca_frame_rates(prop, l); + daca_init_frame_rates(prop, l); break ; case AWACS_BURGUNDY: - init_burgundy_frame_rates(prop, l); + burgundy_init_frame_rates(prop, l); break ; - default: /* ;-))) */ - init_awacs_frame_rates(prop, l); + default: + awacs_init_frame_rates(prop, l); break ; } } @@ -2693,11 +2743,11 @@ __init init_frame_rates(unsigned int *pr /* find things/machines that can't do mac-io byteswap */ -static void -__init set_hw_byteswap(struct device_node *io) +static void __init +set_hw_byteswap(struct device_node *io) { struct device_node *mio ; - unsigned int *p, kl = 0 ; + unsigned int kl = 0 ; /* if seems that Keylargo can't byte-swap */ @@ -2744,9 +2794,6 @@ __init setup_beep(void) if( beep_dbdma_cmd_space ) kfree(beep_dbdma_cmd_space) ; return -ENOMEM ; } - /* OK, we should be safe to claim the mksound vector now */ - orig_mksound = kd_mksound; - kd_mksound = awacs_mksound; return 0 ; } @@ -2842,23 +2889,26 @@ printk("dmasound_pmac: couldn't find a C } /* all OF versions I've seen use this value */ - awacs = (volatile struct awacs_regs *) - ioremap(io->addrs[0].address, 0x1000); + if (i2s_node) + i2s = (u32 *)ioremap(io->addrs[0].address, 0x1000); + else + awacs = (volatile struct awacs_regs *) + ioremap(io->addrs[0].address, 0x1000); awacs_txdma = (volatile struct dbdma_regs *) ioremap(io->addrs[1].address, 0x100); awacs_rxdma = (volatile struct dbdma_regs *) ioremap(io->addrs[2].address, 0x100); -#ifdef CONFIG_PMAC_PBOOK /* first of all make sure that the chip is powered up....*/ pmac_call_feature(PMAC_FTR_SOUND_CHIP_ENABLE, io, 0, 1); - if (awacs_revision == AWACS_SCREAMER) + if (awacs_revision == AWACS_SCREAMER && awacs) awacs_recalibrate(); -#endif + awacs_irq = io->intrs[0].line; awacs_tx_irq = io->intrs[1].line; awacs_rx_irq = io->intrs[2].line; + /* Hack for legacy crap that will be killed someday */ awacs_node = io; /* if we have an awacs or screamer - probe the chip to make @@ -2909,8 +2959,9 @@ printk("dmasound_pmac: Awacs/Screamer Co /* if it's there use it to set up frame rates */ init_frame_rates(prop, l) ; } - - out_le32(&awacs->control, 0x11); /* set everything quiesent */ + + if (awacs) + out_le32(&awacs->control, 0x11); /* set everything quiesent */ set_hw_byteswap(io) ; /* figure out if the h/w can do it */ @@ -2942,25 +2993,27 @@ printk("dmasound_pmac: Awacs/Screamer Co switch (awacs_revision) { case AWACS_TUMBLER: -#ifdef CONFIG_KMOD - request_module("i2c-keywest"); -#endif /* CONFIG_KMOD */ - awacs_tumbler_init(); - tas_init(); - break ; + tas_register_driver(&tas3001c_hooks); + tas_init(I2C_DRIVERID_TAS3001C, I2C_DRIVERNAME_TAS3001C); + tas_dmasound_init(); + tas_post_init(); + break ; + case AWACS_SNAPPER: + tas_register_driver(&tas3004_hooks); + tas_init(I2C_DRIVERID_TAS3004,I2C_DRIVERNAME_TAS3004); + tas_dmasound_init(); + tas_post_init(); + break; case AWACS_DACA: -#ifdef CONFIG_KMOD - request_module("i2c-keywest"); -#endif /* CONFIG_KMOD */ daca_init(); - break ; /* don't know how yet */ + break; case AWACS_BURGUNDY: awacs_burgundy_init(); break ; case AWACS_SCREAMER: case AWACS_AWACS: default: - load_awacs() ; + load_awacs(); break ; } @@ -3031,11 +3084,15 @@ printk("dmasound_pmac: Awacs/Screamer Co dmasound.mach.hardware_afmts = AFMT_S16_BE ; /* shut out chips that do output only. - may need to extend this to machines which have no inputs - even tho' - they use screamer - IIRC one of the powerbooks is like this. - */ + * may need to extend this to machines which have no inputs - even tho' + * they use screamer - IIRC one of the powerbooks is like this. + * + * FIXME: Actually, some TUMBLER and SNAPPER do have inputs... + */ - if (awacs_revision != AWACS_TUMBLER && awacs_revision != AWACS_DACA) { + if (awacs_revision != AWACS_TUMBLER && + awacs_revision != AWACS_SNAPPER && + awacs_revision != AWACS_DACA) { dmasound.mach.capabilities = DSP_CAP_DUPLEX ; dmasound.mach.record = PMacRecord ; } @@ -3053,6 +3110,9 @@ printk("dmasound_pmac: Awacs/Screamer Co case AWACS_TUMBLER: sprintf(awacs_name, "PowerMac Tumbler ") ; break ; + case AWACS_SNAPPER: + sprintf(awacs_name, "PowerMac Snapper ") ; + break ; case AWACS_SCREAMER: sprintf(awacs_name, "PowerMac Screamer ") ; break ; @@ -3069,7 +3129,8 @@ static void __exit dmasound_awacs_cleanu { switch (awacs_revision) { case AWACS_TUMBLER: - awacs_tumbler_cleanup(); + case AWACS_SNAPPER: + tas_dmasound_cleanup(); tas_cleanup(); break ; case AWACS_DACA: diff -prauN linux-2.6.0-test5/sound/oss/dmasound/tas3001c.c wli-2.6.0-test5-bk12-25/sound/oss/dmasound/tas3001c.c --- linux-2.6.0-test5/sound/oss/dmasound/tas3001c.c 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/sound/oss/dmasound/tas3001c.c 2003-09-25 19:16:18.000000000 -0700 @@ -0,0 +1,861 @@ +/* + * Driver for the i2c/i2s based TA3004 sound chip used + * on some Apple hardware. Also known as "snapper". + * + * Tobias Sargeant + * Based upon, tas3001c.c by Christopher C. Chimelis : + * + * TODO: + * ----- + * * Enable control over input line 2 (is this connected?) + * * Implement sleep support (at least mute everything and + * * set gains to minimum during sleep) + * * Look into some of Darwin's tweaks regarding the mute + * * lines (delays & different behaviour on some HW) + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "dmasound.h" +#include "tas_common.h" +#include "tas3001c.h" + +#include "tas_ioctl.h" + +#define TAS3001C_BIQUAD_FILTER_COUNT 6 +#define TAS3001C_BIQUAD_CHANNEL_COUNT 2 + +#define VOL_DEFAULT (100 * 4 / 5) +#define INPUT_DEFAULT (100 * 4 / 5) +#define BASS_DEFAULT (100 / 2) +#define TREBLE_DEFAULT (100 / 2) + +struct tas3001c_data_t { + struct tas_data_t super; + int device_id; + int output_id; + int speaker_id; + struct tas_drce_t drce_state; +}; + + +static const union tas_biquad_t +tas3001c_eq_unity={ + buf: { 0x100000, 0x000000, 0x000000, 0x000000, 0x000000 } +}; + + +static inline unsigned char db_to_regval(short db) { + int r=0; + + r=(db+0x59a0) / 0x60; + + if (r < 0x91) return 0x91; + if (r > 0xef) return 0xef; + return r; +} + +static inline short quantize_db(short db) { + return db_to_regval(db) * 0x60 - 0x59a0; +} + + +static inline int +register_width(enum tas3001c_reg_t r) +{ + switch(r) { + case TAS3001C_REG_MCR: + case TAS3001C_REG_TREBLE: + case TAS3001C_REG_BASS: + return 1; + + case TAS3001C_REG_DRC: + return 2; + + case TAS3001C_REG_MIXER1: + case TAS3001C_REG_MIXER2: + return 3; + + case TAS3001C_REG_VOLUME: + return 6; + + case TAS3001C_REG_LEFT_BIQUAD0: + case TAS3001C_REG_LEFT_BIQUAD1: + case TAS3001C_REG_LEFT_BIQUAD2: + case TAS3001C_REG_LEFT_BIQUAD3: + case TAS3001C_REG_LEFT_BIQUAD4: + case TAS3001C_REG_LEFT_BIQUAD5: + case TAS3001C_REG_LEFT_BIQUAD6: + + case TAS3001C_REG_RIGHT_BIQUAD0: + case TAS3001C_REG_RIGHT_BIQUAD1: + case TAS3001C_REG_RIGHT_BIQUAD2: + case TAS3001C_REG_RIGHT_BIQUAD3: + case TAS3001C_REG_RIGHT_BIQUAD4: + case TAS3001C_REG_RIGHT_BIQUAD5: + case TAS3001C_REG_RIGHT_BIQUAD6: + return 15; + + default: + return 0; + } +} + +static int +tas3001c_write_register( struct tas3001c_data_t *self, + enum tas3001c_reg_t reg_num, + char *data, + uint write_mode) +{ + if (reg_num==TAS3001C_REG_MCR || + reg_num==TAS3001C_REG_BASS || + reg_num==TAS3001C_REG_TREBLE) { + return tas_write_byte_register(&self->super, + (uint)reg_num, + *data, + write_mode); + } else { + return tas_write_register(&self->super, + (uint)reg_num, + register_width(reg_num), + data, + write_mode); + } +} + +static int +tas3001c_sync_register( struct tas3001c_data_t *self, + enum tas3001c_reg_t reg_num) +{ + if (reg_num==TAS3001C_REG_MCR || + reg_num==TAS3001C_REG_BASS || + reg_num==TAS3001C_REG_TREBLE) { + return tas_sync_byte_register(&self->super, + (uint)reg_num, + register_width(reg_num)); + } else { + return tas_sync_register(&self->super, + (uint)reg_num, + register_width(reg_num)); + } +} + +static int +tas3001c_read_register( struct tas3001c_data_t *self, + enum tas3001c_reg_t reg_num, + char *data, + uint write_mode) +{ + return tas_read_register(&self->super, + (uint)reg_num, + register_width(reg_num), + data); +} + +static inline int +tas3001c_fast_load(struct tas3001c_data_t *self, int fast) +{ + if (fast) + self->super.shadow[TAS3001C_REG_MCR][0] |= 0x80; + else + self->super.shadow[TAS3001C_REG_MCR][0] &= 0x7f; + return tas3001c_sync_register(self,TAS3001C_REG_MCR); +} + +static uint +tas3001c_supported_mixers(struct tas3001c_data_t *self) +{ + return SOUND_MASK_VOLUME | + SOUND_MASK_PCM | + SOUND_MASK_ALTPCM | + SOUND_MASK_TREBLE | + SOUND_MASK_BASS; +} + +static int +tas3001c_mixer_is_stereo(struct tas3001c_data_t *self,int mixer) +{ + switch(mixer) { + case SOUND_MIXER_VOLUME: + return 1; + default: + return 0; + } +} + +static uint +tas3001c_stereo_mixers(struct tas3001c_data_t *self) +{ + uint r=tas3001c_supported_mixers(self); + uint i; + + for (i=1; isuper.mixer[mixer]; + + return 0; +} + +static int +tas3001c_set_mixer_level(struct tas3001c_data_t *self,int mixer,uint level) +{ + int rc; + tas_shadow_t *shadow; + + uint temp; + uint offset=0; + + if (!self) + return -1; + + shadow=self->super.shadow; + + if (!tas3001c_mixer_is_stereo(self,mixer)) + level = tas_mono_to_stereo(level); + + switch(mixer) { + case SOUND_MIXER_VOLUME: + temp = tas3001c_gain.master[level&0xff]; + shadow[TAS3001C_REG_VOLUME][0] = (temp >> 16) & 0xff; + shadow[TAS3001C_REG_VOLUME][1] = (temp >> 8) & 0xff; + shadow[TAS3001C_REG_VOLUME][2] = (temp >> 0) & 0xff; + temp = tas3001c_gain.master[(level>>8)&0xff]; + shadow[TAS3001C_REG_VOLUME][3] = (temp >> 16) & 0xff; + shadow[TAS3001C_REG_VOLUME][4] = (temp >> 8) & 0xff; + shadow[TAS3001C_REG_VOLUME][5] = (temp >> 0) & 0xff; + rc = tas3001c_sync_register(self,TAS3001C_REG_VOLUME); + break; + case SOUND_MIXER_ALTPCM: + /* tas3001c_fast_load(self, 1); */ + level = tas_mono_to_stereo(level); + temp = tas3001c_gain.mixer[level&0xff]; + shadow[TAS3001C_REG_MIXER2][offset+0] = (temp >> 16) & 0xff; + shadow[TAS3001C_REG_MIXER2][offset+1] = (temp >> 8) & 0xff; + shadow[TAS3001C_REG_MIXER2][offset+2] = (temp >> 0) & 0xff; + rc = tas3001c_sync_register(self,TAS3001C_REG_MIXER2); + /* tas3001c_fast_load(self, 0); */ + break; + case SOUND_MIXER_PCM: + /* tas3001c_fast_load(self, 1); */ + level = tas_mono_to_stereo(level); + temp = tas3001c_gain.mixer[level&0xff]; + shadow[TAS3001C_REG_MIXER1][offset+0] = (temp >> 16) & 0xff; + shadow[TAS3001C_REG_MIXER1][offset+1] = (temp >> 8) & 0xff; + shadow[TAS3001C_REG_MIXER1][offset+2] = (temp >> 0) & 0xff; + rc = tas3001c_sync_register(self,TAS3001C_REG_MIXER1); + /* tas3001c_fast_load(self, 0); */ + break; + case SOUND_MIXER_TREBLE: + temp = tas3001c_gain.treble[level&0xff]; + shadow[TAS3001C_REG_TREBLE][0]=temp&0xff; + rc = tas3001c_sync_register(self,TAS3001C_REG_TREBLE); + break; + case SOUND_MIXER_BASS: + temp = tas3001c_gain.bass[level&0xff]; + shadow[TAS3001C_REG_BASS][0]=temp&0xff; + rc = tas3001c_sync_register(self,TAS3001C_REG_BASS); + break; + default: + rc = -1; + break; + } + if (rc < 0) + return rc; + self->super.mixer[mixer]=level; + return 0; +} + +static int +tas3001c_leave_sleep(struct tas3001c_data_t *self) +{ + unsigned char mcr = (1<<6)+(2<<4)+(2<<2); + + if (!self) + return -1; + + /* Make sure something answers on the i2c bus */ + if (tas3001c_write_register(self, TAS3001C_REG_MCR, &mcr, + WRITE_NORMAL|FORCE_WRITE) < 0) + return -1; + + tas3001c_fast_load(self, 1); + + (void)tas3001c_sync_register(self,TAS3001C_REG_RIGHT_BIQUAD0); + (void)tas3001c_sync_register(self,TAS3001C_REG_RIGHT_BIQUAD1); + (void)tas3001c_sync_register(self,TAS3001C_REG_RIGHT_BIQUAD2); + (void)tas3001c_sync_register(self,TAS3001C_REG_RIGHT_BIQUAD3); + (void)tas3001c_sync_register(self,TAS3001C_REG_RIGHT_BIQUAD4); + (void)tas3001c_sync_register(self,TAS3001C_REG_RIGHT_BIQUAD5); + + (void)tas3001c_sync_register(self,TAS3001C_REG_LEFT_BIQUAD0); + (void)tas3001c_sync_register(self,TAS3001C_REG_LEFT_BIQUAD1); + (void)tas3001c_sync_register(self,TAS3001C_REG_LEFT_BIQUAD2); + (void)tas3001c_sync_register(self,TAS3001C_REG_LEFT_BIQUAD3); + (void)tas3001c_sync_register(self,TAS3001C_REG_LEFT_BIQUAD4); + (void)tas3001c_sync_register(self,TAS3001C_REG_LEFT_BIQUAD5); + + tas3001c_fast_load(self, 0); + + (void)tas3001c_sync_register(self,TAS3001C_REG_BASS); + (void)tas3001c_sync_register(self,TAS3001C_REG_TREBLE); + (void)tas3001c_sync_register(self,TAS3001C_REG_MIXER1); + (void)tas3001c_sync_register(self,TAS3001C_REG_MIXER2); + (void)tas3001c_sync_register(self,TAS3001C_REG_VOLUME); + + return 0; +} + +static int +tas3001c_enter_sleep(struct tas3001c_data_t *self) +{ + /* Stub for now, but I have the details on low-power mode */ + if (!self) + return -1; + return 0; +} + +static int +tas3001c_sync_biquad( struct tas3001c_data_t *self, + u_int channel, + u_int filter) +{ + enum tas3001c_reg_t reg; + + if (channel >= TAS3001C_BIQUAD_CHANNEL_COUNT || + filter >= TAS3001C_BIQUAD_FILTER_COUNT) return -EINVAL; + + reg=( channel ? TAS3001C_REG_RIGHT_BIQUAD0 : TAS3001C_REG_LEFT_BIQUAD0 ) + filter; + + return tas3001c_sync_register(self,reg); +} + +static int +tas3001c_write_biquad_shadow( struct tas3001c_data_t *self, + u_int channel, + u_int filter, + const union tas_biquad_t *biquad) +{ + tas_shadow_t *shadow=self->super.shadow; + enum tas3001c_reg_t reg; + + if (channel >= TAS3001C_BIQUAD_CHANNEL_COUNT || + filter >= TAS3001C_BIQUAD_FILTER_COUNT) return -EINVAL; + + reg=( channel ? TAS3001C_REG_RIGHT_BIQUAD0 : TAS3001C_REG_LEFT_BIQUAD0 ) + filter; + + SET_4_20(shadow[reg], 0,biquad->coeff.b0); + SET_4_20(shadow[reg], 3,biquad->coeff.b1); + SET_4_20(shadow[reg], 6,biquad->coeff.b2); + SET_4_20(shadow[reg], 9,biquad->coeff.a1); + SET_4_20(shadow[reg],12,biquad->coeff.a2); + + return 0; +} + +static int +tas3001c_write_biquad( struct tas3001c_data_t *self, + u_int channel, + u_int filter, + const union tas_biquad_t *biquad) +{ + int rc; + + rc=tas3001c_write_biquad_shadow(self, channel, filter, biquad); + if (rc < 0) return rc; + + return tas3001c_sync_biquad(self, channel, filter); +} + +static int +tas3001c_write_biquad_list( struct tas3001c_data_t *self, + u_int filter_count, + u_int flags, + struct tas_biquad_ctrl_t *biquads) +{ + int i; + int rc; + + if (flags & TAS_BIQUAD_FAST_LOAD) tas3001c_fast_load(self,1); + + for (i=0; isuper.shadow; + enum tas3001c_reg_t reg; + + if (channel >= TAS3001C_BIQUAD_CHANNEL_COUNT || + filter >= TAS3001C_BIQUAD_FILTER_COUNT) return -EINVAL; + + reg=( channel ? TAS3001C_REG_RIGHT_BIQUAD0 : TAS3001C_REG_LEFT_BIQUAD0 ) + filter; + + biquad->coeff.b0=GET_4_20(shadow[reg], 0); + biquad->coeff.b1=GET_4_20(shadow[reg], 3); + biquad->coeff.b2=GET_4_20(shadow[reg], 6); + biquad->coeff.a1=GET_4_20(shadow[reg], 9); + biquad->coeff.a2=GET_4_20(shadow[reg],12); + + return 0; +} + +static int +tas3001c_eq_rw( struct tas3001c_data_t *self, + u_int cmd, + u_long arg) +{ + int rc; + struct tas_biquad_ctrl_t biquad; + + if (copy_from_user((void *)&biquad, (const void *)arg, sizeof(struct tas_biquad_ctrl_t))) { + return -EFAULT; + } + + if (cmd & SIOC_IN) { + rc=tas3001c_write_biquad(self, biquad.channel, biquad.filter, &biquad.data); + if (rc != 0) return rc; + } + + if (cmd & SIOC_OUT) { + rc=tas3001c_read_biquad(self, biquad.channel, biquad.filter, &biquad.data); + if (rc != 0) return rc; + + if (copy_to_user((void *)arg, (const void *)&biquad, sizeof(struct tas_biquad_ctrl_t))) { + return -EFAULT; + } + + } + return 0; +} + +static int +tas3001c_eq_list_rw( struct tas3001c_data_t *self, + u_int cmd, + u_long arg) +{ + int rc; + int filter_count; + int flags; + int i,j; + char sync_required[2][6]; + struct tas_biquad_ctrl_t biquad; + + memset(sync_required,0,sizeof(sync_required)); + + if (copy_from_user((void *)&filter_count, + (const void *)arg + offsetof(struct tas_biquad_ctrl_list_t,filter_count), + sizeof(int))) { + return -EFAULT; + } + + if (copy_from_user((void *)&flags, + (const void *)arg + offsetof(struct tas_biquad_ctrl_list_t,flags), + sizeof(int))) { + return -EFAULT; + } + + if (cmd & SIOC_IN) { + } + + for (i=0; i < filter_count; i++) { + if (copy_from_user((void *)&biquad, + (const void *)arg + offsetof(struct tas_biquad_ctrl_list_t, biquads[i]), + sizeof(struct tas_biquad_ctrl_t))) { + return -EFAULT; + } + + if (cmd & SIOC_IN) { + sync_required[biquad.channel][biquad.filter]=1; + rc=tas3001c_write_biquad_shadow(self, biquad.channel, biquad.filter, &biquad.data); + if (rc != 0) return rc; + } + + if (cmd & SIOC_OUT) { + rc=tas3001c_read_biquad(self, biquad.channel, biquad.filter, &biquad.data); + if (rc != 0) return rc; + + if (copy_to_user((void *)arg + offsetof(struct tas_biquad_ctrl_list_t, biquads[i]), + (const void *)&biquad, + sizeof(struct tas_biquad_ctrl_t))) { + return -EFAULT; + } + } + } + + if (cmd & SIOC_IN) { + if (flags & TAS_BIQUAD_FAST_LOAD) tas3001c_fast_load(self,1); + for (i=0; i<2; i++) { + for (j=0; j<6; j++) { + if (sync_required[i][j]) { + rc=tas3001c_sync_biquad(self, i, j); + if (rc < 0) return rc; + } + } + } + if (flags & TAS_BIQUAD_FAST_LOAD) { + tas3001c_fast_load(self,0); + /* now we need to set up the mixers again, + because leaving fast mode resets them. */ + (void)tas3001c_sync_register(self,TAS3001C_REG_BASS); + (void)tas3001c_sync_register(self,TAS3001C_REG_TREBLE); + (void)tas3001c_sync_register(self,TAS3001C_REG_MIXER1); + (void)tas3001c_sync_register(self,TAS3001C_REG_MIXER2); + (void)tas3001c_sync_register(self,TAS3001C_REG_VOLUME); + } + } + + return 0; +} + +static int +tas3001c_update_drce( struct tas3001c_data_t *self, + int flags, + struct tas_drce_t *drce) +{ + tas_shadow_t *shadow; + shadow=self->super.shadow; + + shadow[TAS3001C_REG_DRC][1] = 0xc1; + + if (flags & TAS_DRCE_THRESHOLD) { + self->drce_state.threshold=quantize_db(drce->threshold); + shadow[TAS3001C_REG_DRC][2] = db_to_regval(self->drce_state.threshold); + } + + if (flags & TAS_DRCE_ENABLE) { + self->drce_state.enable = drce->enable; + } + + if (!self->drce_state.enable) { + shadow[TAS3001C_REG_DRC][0] = 0xf0; + } + +#ifdef DEBUG_DRCE + printk("DRCE IOCTL: set [ ENABLE:%x THRESH:%x\n", + self->drce_state.enable, + self->drce_state.threshold); + + printk("DRCE IOCTL: reg [ %02x %02x ]\n", + (unsigned char)shadow[TAS3001C_REG_DRC][0], + (unsigned char)shadow[TAS3001C_REG_DRC][1]); +#endif + + return tas3001c_sync_register(self, TAS3001C_REG_DRC); +} + +static int +tas3001c_drce_rw( struct tas3001c_data_t *self, + u_int cmd, + u_long arg) +{ + int rc; + struct tas_drce_ctrl_t drce_ctrl; + + if (copy_from_user((void *)&drce_ctrl, + (const void *)arg, + sizeof(struct tas_drce_ctrl_t))) { + return -EFAULT; + } + +#ifdef DEBUG_DRCE + printk("DRCE IOCTL: input [ FLAGS:%x ENABLE:%x THRESH:%x\n", + drce_ctrl.flags, + drce_ctrl.data.enable, + drce_ctrl.data.threshold); +#endif + + if (cmd & SIOC_IN) { + rc = tas3001c_update_drce(self, drce_ctrl.flags, &drce_ctrl.data); + if (rc < 0) + return rc; + } + + if (cmd & SIOC_OUT) { + if (drce_ctrl.flags & TAS_DRCE_ENABLE) + drce_ctrl.data.enable = self->drce_state.enable; + + if (drce_ctrl.flags & TAS_DRCE_THRESHOLD) + drce_ctrl.data.threshold = self->drce_state.threshold; + + if (copy_to_user((void *)arg, + (const void *)&drce_ctrl, + sizeof(struct tas_drce_ctrl_t))) { + return -EFAULT; + } + } + + return 0; +} + +static void +tas3001c_update_device_parameters(struct tas3001c_data_t *self) +{ + int i,j; + + if (!self) return; + + if (self->output_id == TAS_OUTPUT_HEADPHONES) { + tas3001c_fast_load(self, 1); + + for (i=0; idevice_id == self->device_id && + (eq->output_id == 0 || eq->output_id == self->output_id) && + (eq->speaker_id == 0 || eq->speaker_id == self->speaker_id)) { + + tas3001c_update_drce(self, TAS_DRCE_ALL, eq->drce); + tas3001c_write_biquad_list(self, eq->filter_count, TAS_BIQUAD_FAST_LOAD, eq->biquads); + + break; + } + } +} + +static void +tas3001c_device_change_handler(void *self) +{ + if (self) + tas3001c_update_device_parameters(self); +} + +static struct work_struct device_change; + +static int +tas3001c_output_device_change( struct tas3001c_data_t *self, + int device_id, + int output_id, + int speaker_id) +{ + self->device_id=device_id; + self->output_id=output_id; + self->speaker_id=speaker_id; + + schedule_work(&device_change); + return 0; +} + +static int +tas3001c_device_ioctl( struct tas3001c_data_t *self, + u_int cmd, + u_long arg) +{ + switch (cmd) { + case TAS_READ_EQ: + case TAS_WRITE_EQ: + return tas3001c_eq_rw(self, cmd, arg); + + case TAS_READ_EQ_LIST: + case TAS_WRITE_EQ_LIST: + return tas3001c_eq_list_rw(self, cmd, arg); + + case TAS_READ_EQ_FILTER_COUNT: + put_user(TAS3001C_BIQUAD_FILTER_COUNT, (uint *)(arg)); + return 0; + + case TAS_READ_EQ_CHANNEL_COUNT: + put_user(TAS3001C_BIQUAD_CHANNEL_COUNT, (uint *)(arg)); + return 0; + + case TAS_READ_DRCE: + case TAS_WRITE_DRCE: + return tas3001c_drce_rw(self, cmd, arg); + + case TAS_READ_DRCE_CAPS: + put_user(TAS_DRCE_ENABLE | TAS_DRCE_THRESHOLD, (uint *)(arg)); + return 0; + + case TAS_READ_DRCE_MIN: + case TAS_READ_DRCE_MAX: { + struct tas_drce_ctrl_t drce_ctrl; + + if (copy_from_user((void *)&drce_ctrl, + (const void *)arg, + sizeof(struct tas_drce_ctrl_t))) { + return -EFAULT; + } + + if (drce_ctrl.flags & TAS_DRCE_THRESHOLD) { + if (cmd == TAS_READ_DRCE_MIN) { + drce_ctrl.data.threshold=-36<<8; + } else { + drce_ctrl.data.threshold=-6<<8; + } + } + + if (copy_to_user((void *)arg, + (const void *)&drce_ctrl, + sizeof(struct tas_drce_ctrl_t))) { + return -EFAULT; + } + } + } + + return -EINVAL; +} + +static int +tas3001c_init_mixer(struct tas3001c_data_t *self) +{ + unsigned char mcr = (1<<6)+(2<<4)+(2<<2); + + /* Make sure something answers on the i2c bus */ + if (tas3001c_write_register(self, TAS3001C_REG_MCR, &mcr, + WRITE_NORMAL|FORCE_WRITE) < 0) + return -1; + + tas3001c_fast_load(self, 1); + + (void)tas3001c_sync_register(self,TAS3001C_REG_RIGHT_BIQUAD0); + (void)tas3001c_sync_register(self,TAS3001C_REG_RIGHT_BIQUAD1); + (void)tas3001c_sync_register(self,TAS3001C_REG_RIGHT_BIQUAD2); + (void)tas3001c_sync_register(self,TAS3001C_REG_RIGHT_BIQUAD3); + (void)tas3001c_sync_register(self,TAS3001C_REG_RIGHT_BIQUAD4); + (void)tas3001c_sync_register(self,TAS3001C_REG_RIGHT_BIQUAD5); + (void)tas3001c_sync_register(self,TAS3001C_REG_RIGHT_BIQUAD6); + + (void)tas3001c_sync_register(self,TAS3001C_REG_LEFT_BIQUAD0); + (void)tas3001c_sync_register(self,TAS3001C_REG_LEFT_BIQUAD1); + (void)tas3001c_sync_register(self,TAS3001C_REG_LEFT_BIQUAD2); + (void)tas3001c_sync_register(self,TAS3001C_REG_LEFT_BIQUAD3); + (void)tas3001c_sync_register(self,TAS3001C_REG_LEFT_BIQUAD4); + (void)tas3001c_sync_register(self,TAS3001C_REG_LEFT_BIQUAD5); + (void)tas3001c_sync_register(self,TAS3001C_REG_LEFT_BIQUAD6); + + tas3001c_fast_load(self, 0); + + tas3001c_set_mixer_level(self, SOUND_MIXER_VOLUME, VOL_DEFAULT<<8 | VOL_DEFAULT); + tas3001c_set_mixer_level(self, SOUND_MIXER_PCM, INPUT_DEFAULT<<8 | INPUT_DEFAULT); + tas3001c_set_mixer_level(self, SOUND_MIXER_ALTPCM, 0); + + tas3001c_set_mixer_level(self, SOUND_MIXER_BASS, BASS_DEFAULT); + tas3001c_set_mixer_level(self, SOUND_MIXER_TREBLE, TREBLE_DEFAULT); + + return 0; +} + +static int +tas3001c_uninit_mixer(struct tas3001c_data_t *self) +{ + tas3001c_set_mixer_level(self, SOUND_MIXER_VOLUME, 0); + tas3001c_set_mixer_level(self, SOUND_MIXER_PCM, 0); + tas3001c_set_mixer_level(self, SOUND_MIXER_ALTPCM, 0); + + tas3001c_set_mixer_level(self, SOUND_MIXER_BASS, 0); + tas3001c_set_mixer_level(self, SOUND_MIXER_TREBLE, 0); + + return 0; +} + +static int +tas3001c_init(struct i2c_client *client) +{ + struct tas3001c_data_t *self; + size_t sz = sizeof(*self) + (TAS3001C_REG_MAX*sizeof(tas_shadow_t)); + int i, j; + + self = kmalloc(sz, GFP_KERNEL); + if (!self) + return -ENOMEM; + memset(self, 0, sz); + + self->super.client = client; + self->super.shadow = (tas_shadow_t *)(self+1); + self->output_id = TAS_OUTPUT_HEADPHONES; + + dev_set_drvdata(&client->dev, self); + + for (i = 0; i < TAS3001C_BIQUAD_CHANNEL_COUNT; i++) + for (j = 0; j < TAS3001C_BIQUAD_FILTER_COUNT; j++) + tas3001c_write_biquad_shadow(self, i, j, + &tas3001c_eq_unity); + + INIT_WORK(&device_change, tas3001c_device_change_handler, self); + return 0; +} + +static void +tas3001c_uninit(struct tas3001c_data_t *self) +{ + tas3001c_uninit_mixer(self); + kfree(self); +} + +struct tas_driver_hooks_t tas3001c_hooks = { + .init = (tas_hook_init_t)tas3001c_init, + .post_init = (tas_hook_post_init_t)tas3001c_init_mixer, + .uninit = (tas_hook_uninit_t)tas3001c_uninit, + .get_mixer_level = (tas_hook_get_mixer_level_t)tas3001c_get_mixer_level, + .set_mixer_level = (tas_hook_set_mixer_level_t)tas3001c_set_mixer_level, + .enter_sleep = (tas_hook_enter_sleep_t)tas3001c_enter_sleep, + .leave_sleep = (tas_hook_leave_sleep_t)tas3001c_leave_sleep, + .supported_mixers = (tas_hook_supported_mixers_t)tas3001c_supported_mixers, + .mixer_is_stereo = (tas_hook_mixer_is_stereo_t)tas3001c_mixer_is_stereo, + .stereo_mixers = (tas_hook_stereo_mixers_t)tas3001c_stereo_mixers, + .output_device_change = (tas_hook_output_device_change_t)tas3001c_output_device_change, + .device_ioctl = (tas_hook_device_ioctl_t)tas3001c_device_ioctl +}; diff -prauN linux-2.6.0-test5/sound/oss/dmasound/tas3001c.h wli-2.6.0-test5-bk12-25/sound/oss/dmasound/tas3001c.h --- linux-2.6.0-test5/sound/oss/dmasound/tas3001c.h 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/sound/oss/dmasound/tas3001c.h 2003-09-25 19:16:18.000000000 -0700 @@ -0,0 +1,64 @@ +/* + * Header file for the i2c/i2s based TA3001c sound chip used + * on some Apple hardware. Also known as "tumbler". + * + * This file is subject to the terms and conditions of the GNU General Public + * License. See the file COPYING in the main directory of this archive + * for more details. + * + * Written by Christopher C. Chimelis + */ + +#ifndef _TAS3001C_H_ +#define _TAS3001C_H_ + +#include + +#include "tas_common.h" +#include "tas_eq_prefs.h" + +/* + * Macros that correspond to the registers that we write to + * when setting the various values. + */ + +#define TAS3001C_VERSION "0.3" +#define TAS3001C_DATE "20011214" + +#define I2C_DRIVERNAME_TAS3001C "TAS3001c driver V " TAS3001C_VERSION +#define I2C_DRIVERID_TAS3001C (I2C_DRIVERID_TAS_BASE+0) + +extern struct tas_driver_hooks_t tas3001c_hooks; +extern struct tas_gain_t tas3001c_gain; +extern struct tas_eq_pref_t *tas3001c_eq_prefs[]; + +enum tas3001c_reg_t { + TAS3001C_REG_MCR = 0x01, + TAS3001C_REG_DRC = 0x02, + + TAS3001C_REG_VOLUME = 0x04, + TAS3001C_REG_TREBLE = 0x05, + TAS3001C_REG_BASS = 0x06, + TAS3001C_REG_MIXER1 = 0x07, + TAS3001C_REG_MIXER2 = 0x08, + + TAS3001C_REG_LEFT_BIQUAD0 = 0x0a, + TAS3001C_REG_LEFT_BIQUAD1 = 0x0b, + TAS3001C_REG_LEFT_BIQUAD2 = 0x0c, + TAS3001C_REG_LEFT_BIQUAD3 = 0x0d, + TAS3001C_REG_LEFT_BIQUAD4 = 0x0e, + TAS3001C_REG_LEFT_BIQUAD5 = 0x0f, + TAS3001C_REG_LEFT_BIQUAD6 = 0x10, + + TAS3001C_REG_RIGHT_BIQUAD0 = 0x13, + TAS3001C_REG_RIGHT_BIQUAD1 = 0x14, + TAS3001C_REG_RIGHT_BIQUAD2 = 0x15, + TAS3001C_REG_RIGHT_BIQUAD3 = 0x16, + TAS3001C_REG_RIGHT_BIQUAD4 = 0x17, + TAS3001C_REG_RIGHT_BIQUAD5 = 0x18, + TAS3001C_REG_RIGHT_BIQUAD6 = 0x19, + + TAS3001C_REG_MAX = 0x20 +}; + +#endif /* _TAS3001C_H_ */ diff -prauN linux-2.6.0-test5/sound/oss/dmasound/tas3001c_tables.c wli-2.6.0-test5-bk12-25/sound/oss/dmasound/tas3001c_tables.c --- linux-2.6.0-test5/sound/oss/dmasound/tas3001c_tables.c 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/sound/oss/dmasound/tas3001c_tables.c 2003-09-25 19:16:18.000000000 -0700 @@ -0,0 +1,375 @@ +#include "tas_common.h" +#include "tas_eq_prefs.h" + +static struct tas_drce_t eqp_0e_2_1_drce = { + enable: 1, + above: { val: 3.0 * (1<<8), expand: 0 }, + below: { val: 1.0 * (1<<8), expand: 0 }, + threshold: -15.33 * (1<<8), + energy: 2.4 * (1<<12), + attack: 0.013 * (1<<12), + decay: 0.212 * (1<<12), +}; + +static struct tas_biquad_ctrl_t eqp_0e_2_1_biquads[]={ + { channel: 0, filter: 0, data: { coeff: { 0x0FCAD3, 0xE06A58, 0x0FCAD3, 0xE06B09, 0x0F9657 } } }, + { channel: 0, filter: 1, data: { coeff: { 0x041731, 0x082E63, 0x041731, 0xFD8D08, 0x02CFBD } } }, + { channel: 0, filter: 2, data: { coeff: { 0x0FFDC7, 0xE0524C, 0x0FBFAA, 0xE0524C, 0x0FBD72 } } }, + { channel: 0, filter: 3, data: { coeff: { 0x0F3D35, 0xE228CA, 0x0EC7B2, 0xE228CA, 0x0E04E8 } } }, + { channel: 0, filter: 4, data: { coeff: { 0x0FCEBF, 0xE181C2, 0x0F2656, 0xE181C2, 0x0EF516 } } }, + { channel: 0, filter: 5, data: { coeff: { 0x0EC417, 0x073E22, 0x0B0633, 0x073E22, 0x09CA4A } } }, + + { channel: 1, filter: 0, data: { coeff: { 0x0FCAD3, 0xE06A58, 0x0FCAD3, 0xE06B09, 0x0F9657 } } }, + { channel: 1, filter: 1, data: { coeff: { 0x041731, 0x082E63, 0x041731, 0xFD8D08, 0x02CFBD } } }, + { channel: 1, filter: 2, data: { coeff: { 0x0FFDC7, 0xE0524C, 0x0FBFAA, 0xE0524C, 0x0FBD72 } } }, + { channel: 1, filter: 3, data: { coeff: { 0x0F3D35, 0xE228CA, 0x0EC7B2, 0xE228CA, 0x0E04E8 } } }, + { channel: 1, filter: 4, data: { coeff: { 0x0FCEBF, 0xE181C2, 0x0F2656, 0xE181C2, 0x0EF516 } } }, + { channel: 1, filter: 5, data: { coeff: { 0x0EC417, 0x073E22, 0x0B0633, 0x073E22, 0x09CA4A } } }, +}; + +static struct tas_eq_pref_t eqp_0e_2_1 = { + sample_rate: 44100, + device_id: 0x0e, + output_id: TAS_OUTPUT_EXTERNAL_SPKR, + speaker_id: 0x01, + + drce: &eqp_0e_2_1_drce, + + filter_count: 12, + biquads: eqp_0e_2_1_biquads +}; + +/* ======================================================================== */ + +static struct tas_drce_t eqp_10_1_0_drce={ + enable: 1, + above: { val: 3.0 * (1<<8), expand: 0 }, + below: { val: 1.0 * (1<<8), expand: 0 }, + threshold: -12.46 * (1<<8), + energy: 2.4 * (1<<12), + attack: 0.013 * (1<<12), + decay: 0.212 * (1<<12), +}; + +static struct tas_biquad_ctrl_t eqp_10_1_0_biquads[]={ + { channel: 0, filter: 0, data: { coeff: { 0x0F4A12, 0xE16BDA, 0x0F4A12, 0xE173F0, 0x0E9C3A } } }, + { channel: 0, filter: 1, data: { coeff: { 0x02DD54, 0x05BAA8, 0x02DD54, 0xF8001D, 0x037532 } } }, + { channel: 0, filter: 2, data: { coeff: { 0x0E2FC7, 0xE4D5DC, 0x0D7477, 0xE4D5DC, 0x0BA43F } } }, + { channel: 0, filter: 3, data: { coeff: { 0x0E7899, 0xE67CCA, 0x0D0E93, 0xE67CCA, 0x0B872D } } }, + { channel: 0, filter: 4, data: { coeff: { 0x100000, 0x000000, 0x000000, 0x000000, 0x000000 } } }, + { channel: 0, filter: 5, data: { coeff: { 0x100000, 0x000000, 0x000000, 0x000000, 0x000000 } } }, + + { channel: 1, filter: 0, data: { coeff: { 0x0F4A12, 0xE16BDA, 0x0F4A12, 0xE173F0, 0x0E9C3A } } }, + { channel: 1, filter: 1, data: { coeff: { 0x02DD54, 0x05BAA8, 0x02DD54, 0xF8001D, 0x037532 } } }, + { channel: 1, filter: 2, data: { coeff: { 0x0E2FC7, 0xE4D5DC, 0x0D7477, 0xE4D5DC, 0x0BA43F } } }, + { channel: 1, filter: 3, data: { coeff: { 0x0E7899, 0xE67CCA, 0x0D0E93, 0xE67CCA, 0x0B872D } } }, + { channel: 1, filter: 4, data: { coeff: { 0x100000, 0x000000, 0x000000, 0x000000, 0x000000 } } }, + { channel: 1, filter: 5, data: { coeff: { 0x100000, 0x000000, 0x000000, 0x000000, 0x000000 } } }, +}; + +static struct tas_eq_pref_t eqp_10_1_0 = { + sample_rate: 44100, + device_id: 0x10, + output_id: TAS_OUTPUT_INTERNAL_SPKR, + speaker_id: 0x00, + + drce: &eqp_10_1_0_drce, + + filter_count: 12, + biquads: eqp_10_1_0_biquads +}; + +/* ======================================================================== */ + +static struct tas_drce_t eqp_15_2_1_drce={ + enable: 1, + above: { val: 3.0 * (1<<8), expand: 0 }, + below: { val: 1.0 * (1<<8), expand: 0 }, + threshold: -15.33 * (1<<8), + energy: 2.4 * (1<<12), + attack: 0.013 * (1<<12), + decay: 0.212 * (1<<12), +}; + +static struct tas_biquad_ctrl_t eqp_15_2_1_biquads[]={ + { channel: 0, filter: 0, data: { coeff: { 0x0FE143, 0xE05204, 0x0FCCC5, 0xE05266, 0x0FAE6B } } }, + { channel: 0, filter: 1, data: { coeff: { 0x102383, 0xE03A03, 0x0FA325, 0xE03A03, 0x0FC6A8 } } }, + { channel: 0, filter: 2, data: { coeff: { 0x0FF2AB, 0xE06285, 0x0FB20A, 0xE06285, 0x0FA4B5 } } }, + { channel: 0, filter: 3, data: { coeff: { 0x0F544D, 0xE35971, 0x0D8F3A, 0xE35971, 0x0CE388 } } }, + { channel: 0, filter: 4, data: { coeff: { 0x13E1D3, 0xF3ECB5, 0x042227, 0xF3ECB5, 0x0803FA } } }, + { channel: 0, filter: 5, data: { coeff: { 0x0AC119, 0x034181, 0x078AB1, 0x034181, 0x024BCA } } }, + + { channel: 1, filter: 0, data: { coeff: { 0x0FE143, 0xE05204, 0x0FCCC5, 0xE05266, 0x0FAE6B } } }, + { channel: 1, filter: 1, data: { coeff: { 0x102383, 0xE03A03, 0x0FA325, 0xE03A03, 0x0FC6A8 } } }, + { channel: 1, filter: 2, data: { coeff: { 0x0FF2AB, 0xE06285, 0x0FB20A, 0xE06285, 0x0FA4B5 } } }, + { channel: 1, filter: 3, data: { coeff: { 0x0F544D, 0xE35971, 0x0D8F3A, 0xE35971, 0x0CE388 } } }, + { channel: 1, filter: 4, data: { coeff: { 0x13E1D3, 0xF3ECB5, 0x042227, 0xF3ECB5, 0x0803FA } } }, + { channel: 1, filter: 5, data: { coeff: { 0x0AC119, 0x034181, 0x078AB1, 0x034181, 0x024BCA } } }, +}; + +static struct tas_eq_pref_t eqp_15_2_1 = { + sample_rate: 44100, + device_id: 0x15, + output_id: TAS_OUTPUT_EXTERNAL_SPKR, + speaker_id: 0x01, + + drce: &eqp_15_2_1_drce, + + filter_count: 12, + biquads: eqp_15_2_1_biquads +}; + +/* ======================================================================== */ + +static struct tas_drce_t eqp_15_1_0_drce={ + enable: 1, + above: { val: 3.0 * (1<<8), expand: 0 }, + below: { val: 1.0 * (1<<8), expand: 0 }, + threshold: 0.0 * (1<<8), + energy: 2.4 * (1<<12), + attack: 0.013 * (1<<12), + decay: 0.212 * (1<<12), +}; + +static struct tas_biquad_ctrl_t eqp_15_1_0_biquads[]={ + { channel: 0, filter: 0, data: { coeff: { 0x0FAD08, 0xE0A5EF, 0x0FAD08, 0xE0A79D, 0x0F5BBE } } }, + { channel: 0, filter: 1, data: { coeff: { 0x04B38D, 0x09671B, 0x04B38D, 0x000F71, 0x02BEC5 } } }, + { channel: 0, filter: 2, data: { coeff: { 0x0FDD32, 0xE0A56F, 0x0F8A69, 0xE0A56F, 0x0F679C } } }, + { channel: 0, filter: 3, data: { coeff: { 0x0FD284, 0xE135FB, 0x0F2161, 0xE135FB, 0x0EF3E5 } } }, + { channel: 0, filter: 4, data: { coeff: { 0x0E81B1, 0xE6283F, 0x0CE49D, 0xE6283F, 0x0B664F } } }, + { channel: 0, filter: 5, data: { coeff: { 0x0F2D62, 0xE98797, 0x0D1E19, 0xE98797, 0x0C4B7B } } }, + + { channel: 1, filter: 0, data: { coeff: { 0x0FAD08, 0xE0A5EF, 0x0FAD08, 0xE0A79D, 0x0F5BBE } } }, + { channel: 1, filter: 1, data: { coeff: { 0x04B38D, 0x09671B, 0x04B38D, 0x000F71, 0x02BEC5 } } }, + { channel: 1, filter: 2, data: { coeff: { 0x0FDD32, 0xE0A56F, 0x0F8A69, 0xE0A56F, 0x0F679C } } }, + { channel: 1, filter: 3, data: { coeff: { 0x0FD284, 0xE135FB, 0x0F2161, 0xE135FB, 0x0EF3E5 } } }, + { channel: 1, filter: 4, data: { coeff: { 0x0E81B1, 0xE6283F, 0x0CE49D, 0xE6283F, 0x0B664F } } }, + { channel: 1, filter: 5, data: { coeff: { 0x0F2D62, 0xE98797, 0x0D1E19, 0xE98797, 0x0C4B7B } } }, +}; + +static struct tas_eq_pref_t eqp_15_1_0 = { + sample_rate: 44100, + device_id: 0x15, + output_id: TAS_OUTPUT_INTERNAL_SPKR, + speaker_id: 0x00, + + drce: &eqp_15_1_0_drce, + + filter_count: 12, + biquads: eqp_15_1_0_biquads +}; + +/* ======================================================================== */ + +static struct tas_drce_t eqp_0f_2_1_drce={ + enable: 1, + above: { val: 3.0 * (1<<8), expand: 0 }, + below: { val: 1.0 * (1<<8), expand: 0 }, + threshold: -15.33 * (1<<8), + energy: 2.4 * (1<<12), + attack: 0.013 * (1<<12), + decay: 0.212 * (1<<12), +}; + +static struct tas_biquad_ctrl_t eqp_0f_2_1_biquads[]={ + { channel: 0, filter: 0, data: { coeff: { 0x0FE143, 0xE05204, 0x0FCCC5, 0xE05266, 0x0FAE6B } } }, + { channel: 0, filter: 1, data: { coeff: { 0x102383, 0xE03A03, 0x0FA325, 0xE03A03, 0x0FC6A8 } } }, + { channel: 0, filter: 2, data: { coeff: { 0x0FF2AB, 0xE06285, 0x0FB20A, 0xE06285, 0x0FA4B5 } } }, + { channel: 0, filter: 3, data: { coeff: { 0x0F544D, 0xE35971, 0x0D8F3A, 0xE35971, 0x0CE388 } } }, + { channel: 0, filter: 4, data: { coeff: { 0x13E1D3, 0xF3ECB5, 0x042227, 0xF3ECB5, 0x0803FA } } }, + { channel: 0, filter: 5, data: { coeff: { 0x0AC119, 0x034181, 0x078AB1, 0x034181, 0x024BCA } } }, + + { channel: 1, filter: 0, data: { coeff: { 0x0FE143, 0xE05204, 0x0FCCC5, 0xE05266, 0x0FAE6B } } }, + { channel: 1, filter: 1, data: { coeff: { 0x102383, 0xE03A03, 0x0FA325, 0xE03A03, 0x0FC6A8 } } }, + { channel: 1, filter: 2, data: { coeff: { 0x0FF2AB, 0xE06285, 0x0FB20A, 0xE06285, 0x0FA4B5 } } }, + { channel: 1, filter: 3, data: { coeff: { 0x0F544D, 0xE35971, 0x0D8F3A, 0xE35971, 0x0CE388 } } }, + { channel: 1, filter: 4, data: { coeff: { 0x13E1D3, 0xF3ECB5, 0x042227, 0xF3ECB5, 0x0803FA } } }, + { channel: 1, filter: 5, data: { coeff: { 0x0AC119, 0x034181, 0x078AB1, 0x034181, 0x024BCA } } }, +}; + +static struct tas_eq_pref_t eqp_0f_2_1 = { + sample_rate: 44100, + device_id: 0x0f, + output_id: TAS_OUTPUT_EXTERNAL_SPKR, + speaker_id: 0x01, + + drce: &eqp_0f_2_1_drce, + + filter_count: 12, + biquads: eqp_0f_2_1_biquads +}; + +/* ======================================================================== */ + +static struct tas_drce_t eqp_0f_1_0_drce={ + enable: 1, + above: { val: 3.0 * (1<<8), expand: 0 }, + below: { val: 1.0 * (1<<8), expand: 0 }, + threshold: -15.33 * (1<<8), + energy: 2.4 * (1<<12), + attack: 0.013 * (1<<12), + decay: 0.212 * (1<<12), +}; + +static struct tas_biquad_ctrl_t eqp_0f_1_0_biquads[]={ + { channel: 0, filter: 0, data: { coeff: { 0x0FCAD3, 0xE06A58, 0x0FCAD3, 0xE06B09, 0x0F9657 } } }, + { channel: 0, filter: 1, data: { coeff: { 0x041731, 0x082E63, 0x041731, 0xFD8D08, 0x02CFBD } } }, + { channel: 0, filter: 2, data: { coeff: { 0x0FFDC7, 0xE0524C, 0x0FBFAA, 0xE0524C, 0x0FBD72 } } }, + { channel: 0, filter: 3, data: { coeff: { 0x0F3D35, 0xE228CA, 0x0EC7B2, 0xE228CA, 0x0E04E8 } } }, + { channel: 0, filter: 4, data: { coeff: { 0x0FCEBF, 0xE181C2, 0x0F2656, 0xE181C2, 0x0EF516 } } }, + { channel: 0, filter: 5, data: { coeff: { 0x0EC417, 0x073E22, 0x0B0633, 0x073E22, 0x09CA4A } } }, + + { channel: 1, filter: 0, data: { coeff: { 0x0FCAD3, 0xE06A58, 0x0FCAD3, 0xE06B09, 0x0F9657 } } }, + { channel: 1, filter: 1, data: { coeff: { 0x041731, 0x082E63, 0x041731, 0xFD8D08, 0x02CFBD } } }, + { channel: 1, filter: 2, data: { coeff: { 0x0FFDC7, 0xE0524C, 0x0FBFAA, 0xE0524C, 0x0FBD72 } } }, + { channel: 1, filter: 3, data: { coeff: { 0x0F3D35, 0xE228CA, 0x0EC7B2, 0xE228CA, 0x0E04E8 } } }, + { channel: 1, filter: 4, data: { coeff: { 0x0FCEBF, 0xE181C2, 0x0F2656, 0xE181C2, 0x0EF516 } } }, + { channel: 1, filter: 5, data: { coeff: { 0x0EC417, 0x073E22, 0x0B0633, 0x073E22, 0x09CA4A } } }, +}; + +static struct tas_eq_pref_t eqp_0f_1_0 = { + sample_rate: 44100, + device_id: 0x0f, + output_id: TAS_OUTPUT_INTERNAL_SPKR, + speaker_id: 0x00, + + drce: &eqp_0f_1_0_drce, + + filter_count: 12, + biquads: eqp_0f_1_0_biquads +}; + +/* ======================================================================== */ + +static uint tas3001c_master_tab[]={ + 0x0, 0x75, 0x9c, 0xbb, + 0xdb, 0xfb, 0x11e, 0x143, + 0x16b, 0x196, 0x1c3, 0x1f5, + 0x229, 0x263, 0x29f, 0x2e1, + 0x328, 0x373, 0x3c5, 0x41b, + 0x478, 0x4dc, 0x547, 0x5b8, + 0x633, 0x6b5, 0x740, 0x7d5, + 0x873, 0x91c, 0x9d2, 0xa92, + 0xb5e, 0xc39, 0xd22, 0xe19, + 0xf20, 0x1037, 0x1161, 0x129e, + 0x13ed, 0x1551, 0x16ca, 0x185d, + 0x1a08, 0x1bcc, 0x1dac, 0x1fa7, + 0x21c1, 0x23fa, 0x2655, 0x28d6, + 0x2b7c, 0x2e4a, 0x3141, 0x3464, + 0x37b4, 0x3b35, 0x3ee9, 0x42d3, + 0x46f6, 0x4b53, 0x4ff0, 0x54ce, + 0x59f2, 0x5f5f, 0x6519, 0x6b24, + 0x7183, 0x783c, 0x7f53, 0x86cc, + 0x8ead, 0x96fa, 0x9fba, 0xa8f2, + 0xb2a7, 0xbce1, 0xc7a5, 0xd2fa, + 0xdee8, 0xeb75, 0xf8aa, 0x1068e, + 0x1152a, 0x12487, 0x134ad, 0x145a5, + 0x1577b, 0x16a37, 0x17df5, 0x192bd, + 0x1a890, 0x1bf7b, 0x1d78d, 0x1f0d1, + 0x20b55, 0x22727, 0x24456, 0x262f2, + 0x2830b +}; + +static uint tas3001c_mixer_tab[]={ + 0x0, 0x748, 0x9be, 0xbaf, + 0xda4, 0xfb1, 0x11de, 0x1431, + 0x16ad, 0x1959, 0x1c37, 0x1f4b, + 0x2298, 0x2628, 0x29fb, 0x2e12, + 0x327d, 0x3734, 0x3c47, 0x41b4, + 0x4787, 0x4dbe, 0x546d, 0x5b86, + 0x632e, 0x6b52, 0x7400, 0x7d54, + 0x873b, 0x91c6, 0x9d1a, 0xa920, + 0xb5e5, 0xc38c, 0xd21b, 0xe18f, + 0xf1f5, 0x1036a, 0x1160f, 0x129d6, + 0x13ed0, 0x1550c, 0x16ca0, 0x185c9, + 0x1a07b, 0x1bcc3, 0x1dab9, 0x1fa75, + 0x21c0f, 0x23fa3, 0x26552, 0x28d64, + 0x2b7c9, 0x2e4a2, 0x31411, 0x3463b, + 0x37b44, 0x3b353, 0x3ee94, 0x42d30, + 0x46f55, 0x4b533, 0x4fefc, 0x54ce5, + 0x59f25, 0x5f5f6, 0x65193, 0x6b23c, + 0x71835, 0x783c3, 0x7f52c, 0x86cc0, + 0x8eacc, 0x96fa5, 0x9fba0, 0xa8f1a, + 0xb2a71, 0xbce0a, 0xc7a4a, 0xd2fa0, + 0xdee7b, 0xeb752, 0xf8a9f, 0x1068e4, + 0x1152a3, 0x12486a, 0x134ac8, 0x145a55, + 0x1577ac, 0x16a370, 0x17df51, 0x192bc2, + 0x1a88f8, 0x1bf7b7, 0x1d78c9, 0x1f0d04, + 0x20b542, 0x227268, 0x244564, 0x262f26, + 0x2830af +}; + +static uint tas3001c_treble_tab[]={ + 0x96, 0x95, 0x95, 0x94, + 0x93, 0x92, 0x92, 0x91, + 0x90, 0x90, 0x8f, 0x8e, + 0x8d, 0x8d, 0x8c, 0x8b, + 0x8a, 0x8a, 0x89, 0x88, + 0x88, 0x87, 0x86, 0x85, + 0x85, 0x84, 0x83, 0x83, + 0x82, 0x81, 0x80, 0x80, + 0x7f, 0x7e, 0x7e, 0x7d, + 0x7c, 0x7b, 0x7b, 0x7a, + 0x79, 0x78, 0x78, 0x77, + 0x76, 0x76, 0x75, 0x74, + 0x73, 0x73, 0x72, 0x71, + 0x71, 0x70, 0x6e, 0x6d, + 0x6d, 0x6c, 0x6b, 0x6a, + 0x69, 0x68, 0x67, 0x66, + 0x65, 0x63, 0x62, 0x62, + 0x60, 0x5f, 0x5d, 0x5c, + 0x5a, 0x58, 0x56, 0x55, + 0x53, 0x51, 0x4f, 0x4c, + 0x4a, 0x48, 0x45, 0x43, + 0x40, 0x3d, 0x3a, 0x37, + 0x35, 0x32, 0x2e, 0x2a, + 0x27, 0x22, 0x1e, 0x1a, + 0x15, 0x11, 0xc, 0x7, + 0x1 +}; + +static uint tas3001c_bass_tab[]={ + 0x86, 0x83, 0x81, 0x7f, + 0x7d, 0x7b, 0x79, 0x78, + 0x76, 0x75, 0x74, 0x72, + 0x71, 0x6f, 0x6e, 0x6d, + 0x6c, 0x6b, 0x69, 0x67, + 0x65, 0x64, 0x61, 0x60, + 0x5e, 0x5d, 0x5c, 0x5b, + 0x5a, 0x59, 0x58, 0x57, + 0x56, 0x55, 0x55, 0x54, + 0x53, 0x52, 0x50, 0x4f, + 0x4d, 0x4c, 0x4b, 0x49, + 0x47, 0x45, 0x44, 0x42, + 0x41, 0x3f, 0x3e, 0x3d, + 0x3c, 0x3b, 0x39, 0x38, + 0x37, 0x36, 0x35, 0x34, + 0x33, 0x31, 0x30, 0x2f, + 0x2e, 0x2c, 0x2b, 0x2b, + 0x29, 0x28, 0x27, 0x26, + 0x25, 0x24, 0x22, 0x21, + 0x20, 0x1e, 0x1c, 0x19, + 0x18, 0x18, 0x17, 0x16, + 0x15, 0x14, 0x13, 0x12, + 0x11, 0x10, 0xf, 0xe, + 0xd, 0xb, 0xa, 0x9, + 0x8, 0x6, 0x4, 0x2, + 0x1 +}; + +struct tas_gain_t tas3001c_gain = { + master: tas3001c_master_tab, + treble: tas3001c_treble_tab, + bass: tas3001c_bass_tab, + mixer: tas3001c_mixer_tab +}; + +struct tas_eq_pref_t *tas3001c_eq_prefs[]={ + &eqp_0e_2_1, + &eqp_10_1_0, + &eqp_15_2_1, + &eqp_15_1_0, + &eqp_0f_2_1, + &eqp_0f_1_0, + NULL +}; diff -prauN linux-2.6.0-test5/sound/oss/dmasound/tas3004.c wli-2.6.0-test5-bk12-25/sound/oss/dmasound/tas3004.c --- linux-2.6.0-test5/sound/oss/dmasound/tas3004.c 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/sound/oss/dmasound/tas3004.c 2003-09-25 19:16:18.000000000 -0700 @@ -0,0 +1,1124 @@ +/* + * Driver for the i2c/i2s based TA3004 sound chip used + * on some Apple hardware. Also known as "snapper". + * + * Tobias Sargeant + * Based upon tas3001c.c by Christopher C. Chimelis : + * + * TODO: + * ----- + * * Enable control over input line 2 (is this connected?) + * * Implement sleep support (at least mute everything and + * * set gains to minimum during sleep) + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "dmasound.h" +#include "tas_common.h" +#include "tas3004.h" + +#include "tas_ioctl.h" + +/* #define DEBUG_DRCE */ + +#define TAS3004_BIQUAD_FILTER_COUNT 7 +#define TAS3004_BIQUAD_CHANNEL_COUNT 2 + +#define VOL_DEFAULT (100 * 4 / 5) +#define INPUT_DEFAULT (100 * 4 / 5) +#define BASS_DEFAULT (100 / 2) +#define TREBLE_DEFAULT (100 / 2) + +struct tas3004_data_t { + struct tas_data_t super; + int device_id; + int output_id; + int speaker_id; + struct tas_drce_t drce_state; +}; + +#define MAKE_TIME(sec,usec) (((sec)<<12) + (50000+(usec/10)*(1<<12))/100000) + +#define MAKE_RATIO(i,f) (((i)<<8) + ((500+(f)*(1<<8))/1000)) + + +static const union tas_biquad_t tas3004_eq_unity = { + .buf = { 0x100000, 0x000000, 0x000000, 0x000000, 0x000000 }, +}; + + +static const struct tas_drce_t tas3004_drce_min = { + .enable = 1, + .above = { .val = MAKE_RATIO(16,0), .expand = 0 }, + .below = { .val = MAKE_RATIO(2,0), .expand = 0 }, + .threshold = -0x59a0, + .energy = MAKE_TIME(0, 1700), + .attack = MAKE_TIME(0, 1700), + .decay = MAKE_TIME(0, 1700), +}; + + +static const struct tas_drce_t tas3004_drce_max = { + .enable = 1, + .above = { .val = MAKE_RATIO(1,500), .expand = 1 }, + .below = { .val = MAKE_RATIO(2,0), .expand = 1 }, + .threshold = -0x0, + .energy = MAKE_TIME(2,400000), + .attack = MAKE_TIME(2,400000), + .decay = MAKE_TIME(2,400000), +}; + + +static const unsigned short time_constants[]={ + MAKE_TIME(0, 1700), + MAKE_TIME(0, 3500), + MAKE_TIME(0, 6700), + MAKE_TIME(0, 13000), + MAKE_TIME(0, 26000), + MAKE_TIME(0, 53000), + MAKE_TIME(0,106000), + MAKE_TIME(0,212000), + MAKE_TIME(0,425000), + MAKE_TIME(0,850000), + MAKE_TIME(1,700000), + MAKE_TIME(2,400000), +}; + +static const unsigned short above_threshold_compression_ratio[]={ + MAKE_RATIO( 1, 70), + MAKE_RATIO( 1,140), + MAKE_RATIO( 1,230), + MAKE_RATIO( 1,330), + MAKE_RATIO( 1,450), + MAKE_RATIO( 1,600), + MAKE_RATIO( 1,780), + MAKE_RATIO( 2, 0), + MAKE_RATIO( 2,290), + MAKE_RATIO( 2,670), + MAKE_RATIO( 3,200), + MAKE_RATIO( 4, 0), + MAKE_RATIO( 5,330), + MAKE_RATIO( 8, 0), + MAKE_RATIO(16, 0), +}; + +static const unsigned short above_threshold_expansion_ratio[]={ + MAKE_RATIO(1, 60), + MAKE_RATIO(1,130), + MAKE_RATIO(1,190), + MAKE_RATIO(1,250), + MAKE_RATIO(1,310), + MAKE_RATIO(1,380), + MAKE_RATIO(1,440), + MAKE_RATIO(1,500) +}; + +static const unsigned short below_threshold_compression_ratio[]={ + MAKE_RATIO(1, 70), + MAKE_RATIO(1,140), + MAKE_RATIO(1,230), + MAKE_RATIO(1,330), + MAKE_RATIO(1,450), + MAKE_RATIO(1,600), + MAKE_RATIO(1,780), + MAKE_RATIO(2, 0) +}; + +static const unsigned short below_threshold_expansion_ratio[]={ + MAKE_RATIO(1, 60), + MAKE_RATIO(1,130), + MAKE_RATIO(1,190), + MAKE_RATIO(1,250), + MAKE_RATIO(1,310), + MAKE_RATIO(1,380), + MAKE_RATIO(1,440), + MAKE_RATIO(1,500), + MAKE_RATIO(1,560), + MAKE_RATIO(1,630), + MAKE_RATIO(1,690), + MAKE_RATIO(1,750), + MAKE_RATIO(1,810), + MAKE_RATIO(1,880), + MAKE_RATIO(1,940), + MAKE_RATIO(2, 0) +}; + +static inline int +search( unsigned short val, + const unsigned short *arr, + const int arrsize) { + /* + * This could be a binary search, but for small tables, + * a linear search is likely to be faster + */ + + int i; + + for (i=0; i < arrsize; i++) + if (arr[i] >= val) + goto _1; + return arrsize-1; + _1: + if (i == 0) + return 0; + return (arr[i]-val < val-arr[i-1]) ? i : i-1; +} + +#define SEARCH(a, b) search(a, b, ARRAY_SIZE(b)) + +static inline int +time_index(unsigned short time) +{ + return SEARCH(time, time_constants); +} + + +static inline int +above_threshold_compression_index(unsigned short ratio) +{ + return SEARCH(ratio, above_threshold_compression_ratio); +} + + +static inline int +above_threshold_expansion_index(unsigned short ratio) +{ + return SEARCH(ratio, above_threshold_expansion_ratio); +} + + +static inline int +below_threshold_compression_index(unsigned short ratio) +{ + return SEARCH(ratio, below_threshold_compression_ratio); +} + + +static inline int +below_threshold_expansion_index(unsigned short ratio) +{ + return SEARCH(ratio, below_threshold_expansion_ratio); +} + +static inline unsigned char db_to_regval(short db) { + int r=0; + + r=(db+0x59a0) / 0x60; + + if (r < 0x91) return 0x91; + if (r > 0xef) return 0xef; + return r; +} + +static inline short quantize_db(short db) +{ + return db_to_regval(db) * 0x60 - 0x59a0; +} + +static inline int +register_width(enum tas3004_reg_t r) +{ + switch(r) { + case TAS3004_REG_MCR: + case TAS3004_REG_TREBLE: + case TAS3004_REG_BASS: + case TAS3004_REG_ANALOG_CTRL: + case TAS3004_REG_TEST1: + case TAS3004_REG_TEST2: + case TAS3004_REG_MCR2: + return 1; + + case TAS3004_REG_LEFT_LOUD_BIQUAD_GAIN: + case TAS3004_REG_RIGHT_LOUD_BIQUAD_GAIN: + return 3; + + case TAS3004_REG_DRC: + case TAS3004_REG_VOLUME: + return 6; + + case TAS3004_REG_LEFT_MIXER: + case TAS3004_REG_RIGHT_MIXER: + return 9; + + case TAS3004_REG_TEST: + return 10; + + case TAS3004_REG_LEFT_BIQUAD0: + case TAS3004_REG_LEFT_BIQUAD1: + case TAS3004_REG_LEFT_BIQUAD2: + case TAS3004_REG_LEFT_BIQUAD3: + case TAS3004_REG_LEFT_BIQUAD4: + case TAS3004_REG_LEFT_BIQUAD5: + case TAS3004_REG_LEFT_BIQUAD6: + + case TAS3004_REG_RIGHT_BIQUAD0: + case TAS3004_REG_RIGHT_BIQUAD1: + case TAS3004_REG_RIGHT_BIQUAD2: + case TAS3004_REG_RIGHT_BIQUAD3: + case TAS3004_REG_RIGHT_BIQUAD4: + case TAS3004_REG_RIGHT_BIQUAD5: + case TAS3004_REG_RIGHT_BIQUAD6: + + case TAS3004_REG_LEFT_LOUD_BIQUAD: + case TAS3004_REG_RIGHT_LOUD_BIQUAD: + return 15; + + default: + return 0; + } +} + +static int +tas3004_write_register( struct tas3004_data_t *self, + enum tas3004_reg_t reg_num, + char *data, + uint write_mode) +{ + if (reg_num==TAS3004_REG_MCR || + reg_num==TAS3004_REG_BASS || + reg_num==TAS3004_REG_TREBLE) { + return tas_write_byte_register(&self->super, + (uint)reg_num, + *data, + write_mode); + } else { + return tas_write_register(&self->super, + (uint)reg_num, + register_width(reg_num), + data, + write_mode); + } +} + +static int +tas3004_sync_register( struct tas3004_data_t *self, + enum tas3004_reg_t reg_num) +{ + if (reg_num==TAS3004_REG_MCR || + reg_num==TAS3004_REG_BASS || + reg_num==TAS3004_REG_TREBLE) { + return tas_sync_byte_register(&self->super, + (uint)reg_num, + register_width(reg_num)); + } else { + return tas_sync_register(&self->super, + (uint)reg_num, + register_width(reg_num)); + } +} + +static int +tas3004_read_register( struct tas3004_data_t *self, + enum tas3004_reg_t reg_num, + char *data, + uint write_mode) +{ + return tas_read_register(&self->super, + (uint)reg_num, + register_width(reg_num), + data); +} + +static inline int +tas3004_fast_load(struct tas3004_data_t *self, int fast) +{ + if (fast) + self->super.shadow[TAS3004_REG_MCR][0] |= 0x80; + else + self->super.shadow[TAS3004_REG_MCR][0] &= 0x7f; + return tas3004_sync_register(self,TAS3004_REG_MCR); +} + +static uint +tas3004_supported_mixers(struct tas3004_data_t *self) +{ + return SOUND_MASK_VOLUME | + SOUND_MASK_PCM | + SOUND_MASK_ALTPCM | + SOUND_MASK_IMIX | + SOUND_MASK_TREBLE | + SOUND_MASK_BASS; +} + +static int +tas3004_mixer_is_stereo(struct tas3004_data_t *self, int mixer) +{ + switch(mixer) { + case SOUND_MIXER_VOLUME: + case SOUND_MIXER_PCM: + case SOUND_MIXER_ALTPCM: + case SOUND_MIXER_IMIX: + return 1; + default: + return 0; + } +} + +static uint +tas3004_stereo_mixers(struct tas3004_data_t *self) +{ + uint r = tas3004_supported_mixers(self); + uint i; + + for (i=1; isuper.mixer[mixer]; + + return 0; +} + +static int +tas3004_set_mixer_level(struct tas3004_data_t *self, int mixer, uint level) +{ + int rc; + tas_shadow_t *shadow; + uint temp; + uint offset=0; + + if (!self) + return -1; + + shadow = self->super.shadow; + + if (!tas3004_mixer_is_stereo(self,mixer)) + level = tas_mono_to_stereo(level); + switch(mixer) { + case SOUND_MIXER_VOLUME: + temp = tas3004_gain.master[level&0xff]; + SET_4_20(shadow[TAS3004_REG_VOLUME], 0, temp); + temp = tas3004_gain.master[(level>>8)&0xff]; + SET_4_20(shadow[TAS3004_REG_VOLUME], 3, temp); + rc = tas3004_sync_register(self,TAS3004_REG_VOLUME); + break; + case SOUND_MIXER_IMIX: + offset += 3; + case SOUND_MIXER_ALTPCM: + offset += 3; + case SOUND_MIXER_PCM: + /* + * Don't load these in fast mode. The documentation + * says it can be done in either mode, but testing it + * shows that fast mode produces ugly clicking. + */ + /* tas3004_fast_load(self,1); */ + temp = tas3004_gain.mixer[level&0xff]; + SET_4_20(shadow[TAS3004_REG_LEFT_MIXER], offset, temp); + temp = tas3004_gain.mixer[(level>>8)&0xff]; + SET_4_20(shadow[TAS3004_REG_RIGHT_MIXER], offset, temp); + rc = tas3004_sync_register(self,TAS3004_REG_LEFT_MIXER); + if (rc == 0) + rc=tas3004_sync_register(self,TAS3004_REG_RIGHT_MIXER); + /* tas3004_fast_load(self,0); */ + break; + case SOUND_MIXER_TREBLE: + temp = tas3004_gain.treble[level&0xff]; + shadow[TAS3004_REG_TREBLE][0]=temp&0xff; + rc = tas3004_sync_register(self,TAS3004_REG_TREBLE); + break; + case SOUND_MIXER_BASS: + temp = tas3004_gain.bass[level&0xff]; + shadow[TAS3004_REG_BASS][0]=temp&0xff; + rc = tas3004_sync_register(self,TAS3004_REG_BASS); + break; + default: + rc = -1; + break; + } + if (rc < 0) + return rc; + self->super.mixer[mixer] = level; + + return 0; +} + +static int +tas3004_leave_sleep(struct tas3004_data_t *self) +{ + unsigned char mcr = (1<<6)+(2<<4)+(2<<2); + + if (!self) + return -1; + + /* Make sure something answers on the i2c bus */ + if (tas3004_write_register(self, TAS3004_REG_MCR, &mcr, + WRITE_NORMAL | FORCE_WRITE) < 0) + return -1; + + tas3004_fast_load(self, 1); + + (void)tas3004_sync_register(self,TAS3004_REG_RIGHT_BIQUAD0); + (void)tas3004_sync_register(self,TAS3004_REG_RIGHT_BIQUAD1); + (void)tas3004_sync_register(self,TAS3004_REG_RIGHT_BIQUAD2); + (void)tas3004_sync_register(self,TAS3004_REG_RIGHT_BIQUAD3); + (void)tas3004_sync_register(self,TAS3004_REG_RIGHT_BIQUAD4); + (void)tas3004_sync_register(self,TAS3004_REG_RIGHT_BIQUAD5); + (void)tas3004_sync_register(self,TAS3004_REG_RIGHT_BIQUAD6); + + (void)tas3004_sync_register(self,TAS3004_REG_LEFT_BIQUAD0); + (void)tas3004_sync_register(self,TAS3004_REG_LEFT_BIQUAD1); + (void)tas3004_sync_register(self,TAS3004_REG_LEFT_BIQUAD2); + (void)tas3004_sync_register(self,TAS3004_REG_LEFT_BIQUAD3); + (void)tas3004_sync_register(self,TAS3004_REG_LEFT_BIQUAD4); + (void)tas3004_sync_register(self,TAS3004_REG_LEFT_BIQUAD5); + (void)tas3004_sync_register(self,TAS3004_REG_LEFT_BIQUAD6); + + tas3004_fast_load(self, 0); + + (void)tas3004_sync_register(self,TAS3004_REG_VOLUME); + (void)tas3004_sync_register(self,TAS3004_REG_LEFT_MIXER); + (void)tas3004_sync_register(self,TAS3004_REG_RIGHT_MIXER); + (void)tas3004_sync_register(self,TAS3004_REG_TREBLE); + (void)tas3004_sync_register(self,TAS3004_REG_BASS); + + return 0; +} + +static int +tas3004_enter_sleep(struct tas3004_data_t *self) +{ + if (!self) + return -1; + return 0; +} + +static int +tas3004_sync_biquad( struct tas3004_data_t *self, + u_int channel, + u_int filter) +{ + enum tas3004_reg_t reg; + + if (channel >= TAS3004_BIQUAD_CHANNEL_COUNT || + filter >= TAS3004_BIQUAD_FILTER_COUNT) return -EINVAL; + + reg=( channel ? TAS3004_REG_RIGHT_BIQUAD0 : TAS3004_REG_LEFT_BIQUAD0 ) + filter; + + return tas3004_sync_register(self,reg); +} + +static int +tas3004_write_biquad_shadow( struct tas3004_data_t *self, + u_int channel, + u_int filter, + const union tas_biquad_t *biquad) +{ + tas_shadow_t *shadow=self->super.shadow; + enum tas3004_reg_t reg; + + if (channel >= TAS3004_BIQUAD_CHANNEL_COUNT || + filter >= TAS3004_BIQUAD_FILTER_COUNT) return -EINVAL; + + reg=( channel ? TAS3004_REG_RIGHT_BIQUAD0 : TAS3004_REG_LEFT_BIQUAD0 ) + filter; + + SET_4_20(shadow[reg], 0,biquad->coeff.b0); + SET_4_20(shadow[reg], 3,biquad->coeff.b1); + SET_4_20(shadow[reg], 6,biquad->coeff.b2); + SET_4_20(shadow[reg], 9,biquad->coeff.a1); + SET_4_20(shadow[reg],12,biquad->coeff.a2); + + return 0; +} + +static int +tas3004_write_biquad( struct tas3004_data_t *self, + u_int channel, + u_int filter, + const union tas_biquad_t *biquad) +{ + int rc; + + rc=tas3004_write_biquad_shadow(self, channel, filter, biquad); + if (rc < 0) return rc; + + return tas3004_sync_biquad(self, channel, filter); +} + +static int +tas3004_write_biquad_list( struct tas3004_data_t *self, + u_int filter_count, + u_int flags, + struct tas_biquad_ctrl_t *biquads) +{ + int i; + int rc; + + if (flags & TAS_BIQUAD_FAST_LOAD) tas3004_fast_load(self,1); + + for (i=0; isuper.shadow; + enum tas3004_reg_t reg; + + if (channel >= TAS3004_BIQUAD_CHANNEL_COUNT || + filter >= TAS3004_BIQUAD_FILTER_COUNT) return -EINVAL; + + reg=( channel ? TAS3004_REG_RIGHT_BIQUAD0 : TAS3004_REG_LEFT_BIQUAD0 ) + filter; + + biquad->coeff.b0=GET_4_20(shadow[reg], 0); + biquad->coeff.b1=GET_4_20(shadow[reg], 3); + biquad->coeff.b2=GET_4_20(shadow[reg], 6); + biquad->coeff.a1=GET_4_20(shadow[reg], 9); + biquad->coeff.a2=GET_4_20(shadow[reg],12); + + return 0; +} + +static int +tas3004_eq_rw( struct tas3004_data_t *self, + u_int cmd, + u_long arg) +{ + int rc; + struct tas_biquad_ctrl_t biquad; + + if (copy_from_user((void *)&biquad, (const void *)arg, sizeof(struct tas_biquad_ctrl_t))) { + return -EFAULT; + } + + if (cmd & SIOC_IN) { + rc=tas3004_write_biquad(self, biquad.channel, biquad.filter, &biquad.data); + if (rc != 0) return rc; + } + + if (cmd & SIOC_OUT) { + rc=tas3004_read_biquad(self, biquad.channel, biquad.filter, &biquad.data); + if (rc != 0) return rc; + + if (copy_to_user((void *)arg, (const void *)&biquad, sizeof(struct tas_biquad_ctrl_t))) { + return -EFAULT; + } + + } + return 0; +} + +static int +tas3004_eq_list_rw( struct tas3004_data_t *self, + u_int cmd, + u_long arg) +{ + int rc = 0; + int filter_count; + int flags; + int i,j; + char sync_required[TAS3004_BIQUAD_CHANNEL_COUNT][TAS3004_BIQUAD_FILTER_COUNT]; + struct tas_biquad_ctrl_t biquad; + + memset(sync_required,0,sizeof(sync_required)); + + if (copy_from_user((void *)&filter_count, + (const void *)arg + offsetof(struct tas_biquad_ctrl_list_t,filter_count), + sizeof(int))) { + return -EFAULT; + } + + if (copy_from_user((void *)&flags, + (const void *)arg + offsetof(struct tas_biquad_ctrl_list_t,flags), + sizeof(int))) { + return -EFAULT; + } + + if (cmd & SIOC_IN) { + } + + for (i=0; i < filter_count; i++) { + if (copy_from_user((void *)&biquad, + (const void *)arg + offsetof(struct tas_biquad_ctrl_list_t, biquads[i]), + sizeof(struct tas_biquad_ctrl_t))) { + return -EFAULT; + } + + if (cmd & SIOC_IN) { + sync_required[biquad.channel][biquad.filter]=1; + rc=tas3004_write_biquad_shadow(self, biquad.channel, biquad.filter, &biquad.data); + if (rc != 0) return rc; + } + + if (cmd & SIOC_OUT) { + rc=tas3004_read_biquad(self, biquad.channel, biquad.filter, &biquad.data); + if (rc != 0) return rc; + + if (copy_to_user((void *)arg + offsetof(struct tas_biquad_ctrl_list_t, biquads[i]), + (const void *)&biquad, + sizeof(struct tas_biquad_ctrl_t))) { + return -EFAULT; + } + } + } + + if (cmd & SIOC_IN) { + /* + * This is OK for the tas3004. For the + * tas3001c, going into fast load mode causes + * the treble and bass to be reset to 0dB, and + * volume controls to be muted. + */ + if (flags & TAS_BIQUAD_FAST_LOAD) tas3004_fast_load(self,1); + for (i=0; isuper.shadow; + + if (flags & TAS_DRCE_ABOVE_RATIO) { + self->drce_state.above.expand = drce->above.expand; + if (drce->above.val == (1<<8)) { + self->drce_state.above.val = 1<<8; + shadow[TAS3004_REG_DRC][0] = 0x02; + + } else if (drce->above.expand) { + i=above_threshold_expansion_index(drce->above.val); + self->drce_state.above.val=above_threshold_expansion_ratio[i]; + shadow[TAS3004_REG_DRC][0] = 0x0a + (i<<3); + } else { + i=above_threshold_compression_index(drce->above.val); + self->drce_state.above.val=above_threshold_compression_ratio[i]; + shadow[TAS3004_REG_DRC][0] = 0x08 + (i<<3); + } + } + + if (flags & TAS_DRCE_BELOW_RATIO) { + self->drce_state.below.expand = drce->below.expand; + if (drce->below.val == (1<<8)) { + self->drce_state.below.val = 1<<8; + shadow[TAS3004_REG_DRC][1] = 0x02; + + } else if (drce->below.expand) { + i=below_threshold_expansion_index(drce->below.val); + self->drce_state.below.val=below_threshold_expansion_ratio[i]; + shadow[TAS3004_REG_DRC][1] = 0x08 + (i<<3); + } else { + i=below_threshold_compression_index(drce->below.val); + self->drce_state.below.val=below_threshold_compression_ratio[i]; + shadow[TAS3004_REG_DRC][1] = 0x0a + (i<<3); + } + } + + if (flags & TAS_DRCE_THRESHOLD) { + self->drce_state.threshold=quantize_db(drce->threshold); + shadow[TAS3004_REG_DRC][2] = db_to_regval(self->drce_state.threshold); + } + + if (flags & TAS_DRCE_ENERGY) { + i=time_index(drce->energy); + self->drce_state.energy=time_constants[i]; + shadow[TAS3004_REG_DRC][3] = 0x40 + (i<<4); + } + + if (flags & TAS_DRCE_ATTACK) { + i=time_index(drce->attack); + self->drce_state.attack=time_constants[i]; + shadow[TAS3004_REG_DRC][4] = 0x40 + (i<<4); + } + + if (flags & TAS_DRCE_DECAY) { + i=time_index(drce->decay); + self->drce_state.decay=time_constants[i]; + shadow[TAS3004_REG_DRC][5] = 0x40 + (i<<4); + } + + if (flags & TAS_DRCE_ENABLE) { + self->drce_state.enable = drce->enable; + } + + if (!self->drce_state.enable) { + shadow[TAS3004_REG_DRC][0] |= 0x01; + } + +#ifdef DEBUG_DRCE + printk("DRCE: set [ ENABLE:%x ABOVE:%x/%x BELOW:%x/%x THRESH:%x ENERGY:%x ATTACK:%x DECAY:%x\n", + self->drce_state.enable, + self->drce_state.above.expand,self->drce_state.above.val, + self->drce_state.below.expand,self->drce_state.below.val, + self->drce_state.threshold, + self->drce_state.energy, + self->drce_state.attack, + self->drce_state.decay); + + printk("DRCE: reg [ %02x %02x %02x %02x %02x %02x ]\n", + (unsigned char)shadow[TAS3004_REG_DRC][0], + (unsigned char)shadow[TAS3004_REG_DRC][1], + (unsigned char)shadow[TAS3004_REG_DRC][2], + (unsigned char)shadow[TAS3004_REG_DRC][3], + (unsigned char)shadow[TAS3004_REG_DRC][4], + (unsigned char)shadow[TAS3004_REG_DRC][5]); +#endif + + return tas3004_sync_register(self, TAS3004_REG_DRC); +} + +static int +tas3004_drce_rw( struct tas3004_data_t *self, + u_int cmd, + u_long arg) +{ + int rc; + struct tas_drce_ctrl_t drce_ctrl; + + if (copy_from_user((void *)&drce_ctrl, + (const void *)arg, + sizeof(struct tas_drce_ctrl_t))) { + return -EFAULT; + } + +#ifdef DEBUG_DRCE + printk("DRCE: input [ FLAGS:%x ENABLE:%x ABOVE:%x/%x BELOW:%x/%x THRESH:%x ENERGY:%x ATTACK:%x DECAY:%x\n", + drce_ctrl.flags, + drce_ctrl.data.enable, + drce_ctrl.data.above.expand,drce_ctrl.data.above.val, + drce_ctrl.data.below.expand,drce_ctrl.data.below.val, + drce_ctrl.data.threshold, + drce_ctrl.data.energy, + drce_ctrl.data.attack, + drce_ctrl.data.decay); +#endif + + if (cmd & SIOC_IN) { + rc = tas3004_update_drce(self, drce_ctrl.flags, &drce_ctrl.data); + if (rc < 0) return rc; + } + + if (cmd & SIOC_OUT) { + if (drce_ctrl.flags & TAS_DRCE_ENABLE) + drce_ctrl.data.enable = self->drce_state.enable; + if (drce_ctrl.flags & TAS_DRCE_ABOVE_RATIO) + drce_ctrl.data.above = self->drce_state.above; + if (drce_ctrl.flags & TAS_DRCE_BELOW_RATIO) + drce_ctrl.data.below = self->drce_state.below; + if (drce_ctrl.flags & TAS_DRCE_THRESHOLD) + drce_ctrl.data.threshold = self->drce_state.threshold; + if (drce_ctrl.flags & TAS_DRCE_ENERGY) + drce_ctrl.data.energy = self->drce_state.energy; + if (drce_ctrl.flags & TAS_DRCE_ATTACK) + drce_ctrl.data.attack = self->drce_state.attack; + if (drce_ctrl.flags & TAS_DRCE_DECAY) + drce_ctrl.data.decay = self->drce_state.decay; + + if (copy_to_user((void *)arg, + (const void *)&drce_ctrl, + sizeof(struct tas_drce_ctrl_t))) { + return -EFAULT; + } + } + + return 0; +} + +static void +tas3004_update_device_parameters(struct tas3004_data_t *self) +{ + char data; + int i; + + if (!self) return; + + if (self->output_id == TAS_OUTPUT_HEADPHONES) { + /* turn on allPass when headphones are plugged in */ + data = 0x02; + } else { + data = 0x00; + } + + tas3004_write_register(self, TAS3004_REG_MCR2, &data, WRITE_NORMAL | FORCE_WRITE); + + for (i=0; tas3004_eq_prefs[i]; i++) { + struct tas_eq_pref_t *eq = tas3004_eq_prefs[i]; + + if (eq->device_id == self->device_id && + (eq->output_id == 0 || eq->output_id == self->output_id) && + (eq->speaker_id == 0 || eq->speaker_id == self->speaker_id)) { + + tas3004_update_drce(self, TAS_DRCE_ALL, eq->drce); + tas3004_write_biquad_list(self, eq->filter_count, TAS_BIQUAD_FAST_LOAD, eq->biquads); + + break; + } + } +} + +static void +tas3004_device_change_handler(void *self) +{ + if (!self) return; + + tas3004_update_device_parameters((struct tas3004_data_t *)self); +} + +static struct work_struct device_change; + +static int +tas3004_output_device_change( struct tas3004_data_t *self, + int device_id, + int output_id, + int speaker_id) +{ + self->device_id=device_id; + self->output_id=output_id; + self->speaker_id=speaker_id; + + schedule_work(&device_change); + + return 0; +} + +static int +tas3004_device_ioctl( struct tas3004_data_t *self, + u_int cmd, + u_long arg) +{ + switch (cmd) { + case TAS_READ_EQ: + case TAS_WRITE_EQ: + return tas3004_eq_rw(self, cmd, arg); + + case TAS_READ_EQ_LIST: + case TAS_WRITE_EQ_LIST: + return tas3004_eq_list_rw(self, cmd, arg); + + case TAS_READ_EQ_FILTER_COUNT: + put_user(TAS3004_BIQUAD_FILTER_COUNT, (uint *)(arg)); + return 0; + + case TAS_READ_EQ_CHANNEL_COUNT: + put_user(TAS3004_BIQUAD_CHANNEL_COUNT, (uint *)(arg)); + return 0; + + case TAS_READ_DRCE: + case TAS_WRITE_DRCE: + return tas3004_drce_rw(self, cmd, arg); + + case TAS_READ_DRCE_CAPS: + put_user(TAS_DRCE_ENABLE | + TAS_DRCE_ABOVE_RATIO | + TAS_DRCE_BELOW_RATIO | + TAS_DRCE_THRESHOLD | + TAS_DRCE_ENERGY | + TAS_DRCE_ATTACK | + TAS_DRCE_DECAY, + (uint *)(arg)); + return 0; + + case TAS_READ_DRCE_MIN: + case TAS_READ_DRCE_MAX: { + struct tas_drce_ctrl_t drce_ctrl; + const struct tas_drce_t *drce_copy; + + if (copy_from_user((void *)&drce_ctrl, + (const void *)arg, + sizeof(struct tas_drce_ctrl_t))) { + return -EFAULT; + } + + if (cmd == TAS_READ_DRCE_MIN) { + drce_copy=&tas3004_drce_min; + } else { + drce_copy=&tas3004_drce_max; + } + + if (drce_ctrl.flags & TAS_DRCE_ABOVE_RATIO) { + drce_ctrl.data.above=drce_copy->above; + } + if (drce_ctrl.flags & TAS_DRCE_BELOW_RATIO) { + drce_ctrl.data.below=drce_copy->below; + } + if (drce_ctrl.flags & TAS_DRCE_THRESHOLD) { + drce_ctrl.data.threshold=drce_copy->threshold; + } + if (drce_ctrl.flags & TAS_DRCE_ENERGY) { + drce_ctrl.data.energy=drce_copy->energy; + } + if (drce_ctrl.flags & TAS_DRCE_ATTACK) { + drce_ctrl.data.attack=drce_copy->attack; + } + if (drce_ctrl.flags & TAS_DRCE_DECAY) { + drce_ctrl.data.decay=drce_copy->decay; + } + + if (copy_to_user((void *)arg, + (const void *)&drce_ctrl, + sizeof(struct tas_drce_ctrl_t))) { + return -EFAULT; + } + } + } + + return -EINVAL; +} + +static int +tas3004_init_mixer(struct tas3004_data_t *self) +{ + unsigned char mcr = (1<<6)+(2<<4)+(2<<2); + + /* Make sure something answers on the i2c bus */ + if (tas3004_write_register(self, TAS3004_REG_MCR, &mcr, + WRITE_NORMAL | FORCE_WRITE) < 0) + return -1; + + tas3004_fast_load(self, 1); + + (void)tas3004_sync_register(self,TAS3004_REG_RIGHT_BIQUAD0); + (void)tas3004_sync_register(self,TAS3004_REG_RIGHT_BIQUAD1); + (void)tas3004_sync_register(self,TAS3004_REG_RIGHT_BIQUAD2); + (void)tas3004_sync_register(self,TAS3004_REG_RIGHT_BIQUAD3); + (void)tas3004_sync_register(self,TAS3004_REG_RIGHT_BIQUAD4); + (void)tas3004_sync_register(self,TAS3004_REG_RIGHT_BIQUAD5); + (void)tas3004_sync_register(self,TAS3004_REG_RIGHT_BIQUAD6); + + (void)tas3004_sync_register(self,TAS3004_REG_LEFT_BIQUAD0); + (void)tas3004_sync_register(self,TAS3004_REG_LEFT_BIQUAD1); + (void)tas3004_sync_register(self,TAS3004_REG_LEFT_BIQUAD2); + (void)tas3004_sync_register(self,TAS3004_REG_LEFT_BIQUAD3); + (void)tas3004_sync_register(self,TAS3004_REG_LEFT_BIQUAD4); + (void)tas3004_sync_register(self,TAS3004_REG_LEFT_BIQUAD5); + (void)tas3004_sync_register(self,TAS3004_REG_LEFT_BIQUAD6); + + tas3004_sync_register(self, TAS3004_REG_DRC); + + tas3004_sync_register(self, TAS3004_REG_MCR2); + + tas3004_fast_load(self, 0); + + tas3004_set_mixer_level(self, SOUND_MIXER_VOLUME, VOL_DEFAULT<<8 | VOL_DEFAULT); + tas3004_set_mixer_level(self, SOUND_MIXER_PCM, INPUT_DEFAULT<<8 | INPUT_DEFAULT); + tas3004_set_mixer_level(self, SOUND_MIXER_ALTPCM, 0); + tas3004_set_mixer_level(self, SOUND_MIXER_IMIX, 0); + + tas3004_set_mixer_level(self, SOUND_MIXER_BASS, BASS_DEFAULT); + tas3004_set_mixer_level(self, SOUND_MIXER_TREBLE, TREBLE_DEFAULT); + + return 0; +} + +static int +tas3004_uninit_mixer(struct tas3004_data_t *self) +{ + tas3004_set_mixer_level(self, SOUND_MIXER_VOLUME, 0); + tas3004_set_mixer_level(self, SOUND_MIXER_PCM, 0); + tas3004_set_mixer_level(self, SOUND_MIXER_ALTPCM, 0); + tas3004_set_mixer_level(self, SOUND_MIXER_IMIX, 0); + + tas3004_set_mixer_level(self, SOUND_MIXER_BASS, 0); + tas3004_set_mixer_level(self, SOUND_MIXER_TREBLE, 0); + + return 0; +} + +static int +tas3004_init(struct i2c_client *client) +{ + struct tas3004_data_t *self; + size_t sz = sizeof(*self) + (TAS3004_REG_MAX*sizeof(tas_shadow_t)); + char drce_init[] = { 0x69, 0x22, 0x9f, 0xb0, 0x60, 0xa0 }; + char mcr2 = 0; + int i, j; + + self = kmalloc(sz, GFP_KERNEL); + if (!self) + return -ENOMEM; + memset(self, 0, sz); + + self->super.client = client; + self->super.shadow = (tas_shadow_t *)(self+1); + self->output_id = TAS_OUTPUT_HEADPHONES; + + dev_set_drvdata(&client->dev, self); + + for (i = 0; i < TAS3004_BIQUAD_CHANNEL_COUNT; i++) + for (j = 0; j + */ + +#ifndef _TAS3004_H_ +#define _TAS3004_H_ + +#include + +#include "tas_common.h" +#include "tas_eq_prefs.h" + +/* + * Macros that correspond to the registers that we write to + * when setting the various values. + */ + +#define TAS3004_VERSION "0.3" +#define TAS3004_DATE "20011214" + +#define I2C_DRIVERNAME_TAS3004 "TAS3004 driver V " TAS3004_VERSION +#define I2C_DRIVERID_TAS3004 (I2C_DRIVERID_TAS_BASE+1) + +extern struct tas_driver_hooks_t tas3004_hooks; +extern struct tas_gain_t tas3004_gain; +extern struct tas_eq_pref_t *tas3004_eq_prefs[]; + +enum tas3004_reg_t { + TAS3004_REG_MCR = 0x01, + TAS3004_REG_DRC = 0x02, + + TAS3004_REG_VOLUME = 0x04, + TAS3004_REG_TREBLE = 0x05, + TAS3004_REG_BASS = 0x06, + TAS3004_REG_LEFT_MIXER = 0x07, + TAS3004_REG_RIGHT_MIXER = 0x08, + + TAS3004_REG_LEFT_BIQUAD0 = 0x0a, + TAS3004_REG_LEFT_BIQUAD1 = 0x0b, + TAS3004_REG_LEFT_BIQUAD2 = 0x0c, + TAS3004_REG_LEFT_BIQUAD3 = 0x0d, + TAS3004_REG_LEFT_BIQUAD4 = 0x0e, + TAS3004_REG_LEFT_BIQUAD5 = 0x0f, + TAS3004_REG_LEFT_BIQUAD6 = 0x10, + + TAS3004_REG_RIGHT_BIQUAD0 = 0x13, + TAS3004_REG_RIGHT_BIQUAD1 = 0x14, + TAS3004_REG_RIGHT_BIQUAD2 = 0x15, + TAS3004_REG_RIGHT_BIQUAD3 = 0x16, + TAS3004_REG_RIGHT_BIQUAD4 = 0x17, + TAS3004_REG_RIGHT_BIQUAD5 = 0x18, + TAS3004_REG_RIGHT_BIQUAD6 = 0x19, + + TAS3004_REG_LEFT_LOUD_BIQUAD = 0x21, + TAS3004_REG_RIGHT_LOUD_BIQUAD = 0x22, + + TAS3004_REG_LEFT_LOUD_BIQUAD_GAIN = 0x23, + TAS3004_REG_RIGHT_LOUD_BIQUAD_GAIN = 0x24, + + TAS3004_REG_TEST = 0x29, + + TAS3004_REG_ANALOG_CTRL = 0x40, + TAS3004_REG_TEST1 = 0x41, + TAS3004_REG_TEST2 = 0x42, + TAS3004_REG_MCR2 = 0x43, + + TAS3004_REG_MAX = 0x44 +}; + +#endif /* _TAS3004_H_ */ diff -prauN linux-2.6.0-test5/sound/oss/dmasound/tas3004_tables.c wli-2.6.0-test5-bk12-25/sound/oss/dmasound/tas3004_tables.c --- linux-2.6.0-test5/sound/oss/dmasound/tas3004_tables.c 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/sound/oss/dmasound/tas3004_tables.c 2003-09-25 19:16:18.000000000 -0700 @@ -0,0 +1,301 @@ +#include "tas3004.h" +#include "tas_eq_prefs.h" + +static struct tas_drce_t eqp_17_1_0_drce={ + enable: 1, + above: { val: 3.0 * (1<<8), expand: 0 }, + below: { val: 1.0 * (1<<8), expand: 0 }, + threshold: -19.12 * (1<<8), + energy: 2.4 * (1<<12), + attack: 0.013 * (1<<12), + decay: 0.212 * (1<<12), +}; + +static struct tas_biquad_ctrl_t eqp_17_1_0_biquads[]={ + { channel: 0, filter: 0, data: { coeff: { 0x0fd0d4, 0xe05e56, 0x0fd0d4, 0xe05ee1, 0x0fa234 } } }, + { channel: 0, filter: 1, data: { coeff: { 0x0910d7, 0x088e1a, 0x030651, 0x01dcb1, 0x02c892 } } }, + { channel: 0, filter: 2, data: { coeff: { 0x0ff895, 0xe0970b, 0x0f7f00, 0xe0970b, 0x0f7795 } } }, + { channel: 0, filter: 3, data: { coeff: { 0x0fd1c4, 0xe1ac22, 0x0ec8cf, 0xe1ac22, 0x0e9a94 } } }, + { channel: 0, filter: 4, data: { coeff: { 0x0f7c1c, 0xe3cc03, 0x0df786, 0xe3cc03, 0x0d73a2 } } }, + { channel: 0, filter: 5, data: { coeff: { 0x11fb92, 0xf5a1a0, 0x073cd2, 0xf5a1a0, 0x093865 } } }, + { channel: 0, filter: 6, data: { coeff: { 0x0e17a9, 0x068b6c, 0x08a0e5, 0x068b6c, 0x06b88e } } }, + + { channel: 1, filter: 0, data: { coeff: { 0x0fd0d4, 0xe05e56, 0x0fd0d4, 0xe05ee1, 0x0fa234 } } }, + { channel: 1, filter: 1, data: { coeff: { 0x0910d7, 0x088e1a, 0x030651, 0x01dcb1, 0x02c892 } } }, + { channel: 1, filter: 2, data: { coeff: { 0x0ff895, 0xe0970b, 0x0f7f00, 0xe0970b, 0x0f7795 } } }, + { channel: 1, filter: 3, data: { coeff: { 0x0fd1c4, 0xe1ac22, 0x0ec8cf, 0xe1ac22, 0x0e9a94 } } }, + { channel: 1, filter: 4, data: { coeff: { 0x0f7c1c, 0xe3cc03, 0x0df786, 0xe3cc03, 0x0d73a2 } } }, + { channel: 1, filter: 5, data: { coeff: { 0x11fb92, 0xf5a1a0, 0x073cd2, 0xf5a1a0, 0x093865 } } }, + { channel: 1, filter: 6, data: { coeff: { 0x0e17a9, 0x068b6c, 0x08a0e5, 0x068b6c, 0x06b88e } } } +}; + +static struct tas_eq_pref_t eqp_17_1_0 = { + sample_rate: 44100, + device_id: 0x17, + output_id: TAS_OUTPUT_INTERNAL_SPKR, + speaker_id: 0x00, + + drce: &eqp_17_1_0_drce, + + filter_count: 14, + biquads: eqp_17_1_0_biquads +}; + +/* ======================================================================== */ + +static struct tas_drce_t eqp_18_1_0_drce={ + enable: 1, + above: { val: 3.0 * (1<<8), expand: 0 }, + below: { val: 1.0 * (1<<8), expand: 0 }, + threshold: -13.14 * (1<<8), + energy: 2.4 * (1<<12), + attack: 0.013 * (1<<12), + decay: 0.212 * (1<<12), +}; + +static struct tas_biquad_ctrl_t eqp_18_1_0_biquads[]={ + { channel: 0, filter: 0, data: { coeff: { 0x0f5514, 0xe155d7, 0x0f5514, 0xe15cfa, 0x0eb14b } } }, + { channel: 0, filter: 1, data: { coeff: { 0x06ec33, 0x02abe3, 0x015eef, 0xf764d9, 0x03922d } } }, + { channel: 0, filter: 2, data: { coeff: { 0x0ef5f2, 0xe67d1f, 0x0bcf37, 0xe67d1f, 0x0ac529 } } }, + { channel: 0, filter: 3, data: { coeff: { 0x0db050, 0xe5be4d, 0x0d0c78, 0xe5be4d, 0x0abcc8 } } }, + { channel: 0, filter: 4, data: { coeff: { 0x0f1298, 0xe64ec6, 0x0cc03e, 0xe64ec6, 0x0bd2d7 } } }, + { channel: 0, filter: 5, data: { coeff: { 0x0c641a, 0x06537a, 0x08d155, 0x06537a, 0x053570 } } }, + { channel: 0, filter: 6, data: { coeff: { 0x100000, 0x000000, 0x000000, 0x000000, 0x000000 } } }, + + { channel: 1, filter: 0, data: { coeff: { 0x0f5514, 0xe155d7, 0x0f5514, 0xe15cfa, 0x0eb14b } } }, + { channel: 1, filter: 1, data: { coeff: { 0x06ec33, 0x02abe3, 0x015eef, 0xf764d9, 0x03922d } } }, + { channel: 1, filter: 2, data: { coeff: { 0x0ef5f2, 0xe67d1f, 0x0bcf37, 0xe67d1f, 0x0ac529 } } }, + { channel: 1, filter: 3, data: { coeff: { 0x0db050, 0xe5be4d, 0x0d0c78, 0xe5be4d, 0x0abcc8 } } }, + { channel: 1, filter: 4, data: { coeff: { 0x0f1298, 0xe64ec6, 0x0cc03e, 0xe64ec6, 0x0bd2d7 } } }, + { channel: 1, filter: 5, data: { coeff: { 0x0c641a, 0x06537a, 0x08d155, 0x06537a, 0x053570 } } }, + { channel: 1, filter: 6, data: { coeff: { 0x100000, 0x000000, 0x000000, 0x000000, 0x000000 } } } +}; + +static struct tas_eq_pref_t eqp_18_1_0 = { + sample_rate: 44100, + device_id: 0x18, + output_id: TAS_OUTPUT_INTERNAL_SPKR, + speaker_id: 0x00, + + drce: &eqp_18_1_0_drce, + + filter_count: 14, + biquads: eqp_18_1_0_biquads +}; + +/* ======================================================================== */ + +static struct tas_drce_t eqp_1a_1_0_drce={ + enable: 1, + above: { val: 3.0 * (1<<8), expand: 0 }, + below: { val: 1.0 * (1<<8), expand: 0 }, + threshold: -10.75 * (1<<8), + energy: 2.4 * (1<<12), + attack: 0.013 * (1<<12), + decay: 0.212 * (1<<12), +}; + +static struct tas_biquad_ctrl_t eqp_1a_1_0_biquads[]={ + { channel: 0, filter: 0, data: { coeff: { 0x0fb8fd, 0xe08e04, 0x0fb8fd, 0xe08f40, 0x0f7336 } } }, + { channel: 0, filter: 1, data: { coeff: { 0x06371d, 0x0c6e3a, 0x06371d, 0x05bfd3, 0x031ca2 } } }, + { channel: 0, filter: 2, data: { coeff: { 0x0fa1c0, 0xe18692, 0x0f030e, 0xe18692, 0x0ea4ce } } }, + { channel: 0, filter: 3, data: { coeff: { 0x0fe495, 0xe17eff, 0x0f0452, 0xe17eff, 0x0ee8e7 } } }, + { channel: 0, filter: 4, data: { coeff: { 0x100857, 0xe7e71c, 0x0e9599, 0xe7e71c, 0x0e9df1 } } }, + { channel: 0, filter: 5, data: { coeff: { 0x0fb26e, 0x06a82c, 0x0db2b4, 0x06a82c, 0x0d6522 } } }, + { channel: 0, filter: 6, data: { coeff: { 0x11419d, 0xf06cbf, 0x0a4f6e, 0xf06cbf, 0x0b910c } } }, + + { channel: 1, filter: 0, data: { coeff: { 0x0fb8fd, 0xe08e04, 0x0fb8fd, 0xe08f40, 0x0f7336 } } }, + { channel: 1, filter: 1, data: { coeff: { 0x06371d, 0x0c6e3a, 0x06371d, 0x05bfd3, 0x031ca2 } } }, + { channel: 1, filter: 2, data: { coeff: { 0x0fa1c0, 0xe18692, 0x0f030e, 0xe18692, 0x0ea4ce } } }, + { channel: 1, filter: 3, data: { coeff: { 0x0fe495, 0xe17eff, 0x0f0452, 0xe17eff, 0x0ee8e7 } } }, + { channel: 1, filter: 4, data: { coeff: { 0x100857, 0xe7e71c, 0x0e9599, 0xe7e71c, 0x0e9df1 } } }, + { channel: 1, filter: 5, data: { coeff: { 0x0fb26e, 0x06a82c, 0x0db2b4, 0x06a82c, 0x0d6522 } } }, + { channel: 1, filter: 6, data: { coeff: { 0x11419d, 0xf06cbf, 0x0a4f6e, 0xf06cbf, 0x0b910c } } } +}; + +static struct tas_eq_pref_t eqp_1a_1_0 = { + sample_rate: 44100, + device_id: 0x1a, + output_id: TAS_OUTPUT_INTERNAL_SPKR, + speaker_id: 0x00, + + drce: &eqp_1a_1_0_drce, + + filter_count: 14, + biquads: eqp_1a_1_0_biquads +}; + +/* ======================================================================== */ + +static struct tas_drce_t eqp_1c_1_0_drce={ + enable: 1, + above: { val: 3.0 * (1<<8), expand: 0 }, + below: { val: 1.0 * (1<<8), expand: 0 }, + threshold: -14.34 * (1<<8), + energy: 2.4 * (1<<12), + attack: 0.013 * (1<<12), + decay: 0.212 * (1<<12), +}; + +static struct tas_biquad_ctrl_t eqp_1c_1_0_biquads[]={ + { channel: 0, filter: 0, data: { coeff: { 0x0f4f95, 0xe160d4, 0x0f4f95, 0xe1686e, 0x0ea6c5 } } }, + { channel: 0, filter: 1, data: { coeff: { 0x066b92, 0x0290d4, 0x0148a0, 0xf6853f, 0x03bfc7 } } }, + { channel: 0, filter: 2, data: { coeff: { 0x0f57dc, 0xe51c91, 0x0dd1cb, 0xe51c91, 0x0d29a8 } } }, + { channel: 0, filter: 3, data: { coeff: { 0x0df1cb, 0xe4fa84, 0x0d7cdc, 0xe4fa84, 0x0b6ea7 } } }, + { channel: 0, filter: 4, data: { coeff: { 0x0eba36, 0xe6aa48, 0x0b9f52, 0xe6aa48, 0x0a5989 } } }, + { channel: 0, filter: 5, data: { coeff: { 0x0caf02, 0x05ef9d, 0x084beb, 0x05ef9d, 0x04faee } } }, + { channel: 0, filter: 6, data: { coeff: { 0x0fc686, 0xe22947, 0x0e4b5d, 0xe22947, 0x0e11e4 } } }, + + { channel: 1, filter: 0, data: { coeff: { 0x0f4f95, 0xe160d4, 0x0f4f95, 0xe1686e, 0x0ea6c5 } } }, + { channel: 1, filter: 1, data: { coeff: { 0x066b92, 0x0290d4, 0x0148a0, 0xf6853f, 0x03bfc7 } } }, + { channel: 1, filter: 2, data: { coeff: { 0x0f57dc, 0xe51c91, 0x0dd1cb, 0xe51c91, 0x0d29a8 } } }, + { channel: 1, filter: 3, data: { coeff: { 0x0df1cb, 0xe4fa84, 0x0d7cdc, 0xe4fa84, 0x0b6ea7 } } }, + { channel: 1, filter: 4, data: { coeff: { 0x0eba36, 0xe6aa48, 0x0b9f52, 0xe6aa48, 0x0a5989 } } }, + { channel: 1, filter: 5, data: { coeff: { 0x0caf02, 0x05ef9d, 0x084beb, 0x05ef9d, 0x04faee } } }, + { channel: 1, filter: 6, data: { coeff: { 0x0fc686, 0xe22947, 0x0e4b5d, 0xe22947, 0x0e11e4 } } } +}; + +static struct tas_eq_pref_t eqp_1c_1_0 = { + sample_rate: 44100, + device_id: 0x1c, + output_id: TAS_OUTPUT_INTERNAL_SPKR, + speaker_id: 0x00, + + drce: &eqp_1c_1_0_drce, + + filter_count: 14, + biquads: eqp_1c_1_0_biquads +}; + +/* ======================================================================== */ + +static uint tas3004_master_tab[]={ + 0x0, 0x75, 0x9c, 0xbb, + 0xdb, 0xfb, 0x11e, 0x143, + 0x16b, 0x196, 0x1c3, 0x1f5, + 0x229, 0x263, 0x29f, 0x2e1, + 0x328, 0x373, 0x3c5, 0x41b, + 0x478, 0x4dc, 0x547, 0x5b8, + 0x633, 0x6b5, 0x740, 0x7d5, + 0x873, 0x91c, 0x9d2, 0xa92, + 0xb5e, 0xc39, 0xd22, 0xe19, + 0xf20, 0x1037, 0x1161, 0x129e, + 0x13ed, 0x1551, 0x16ca, 0x185d, + 0x1a08, 0x1bcc, 0x1dac, 0x1fa7, + 0x21c1, 0x23fa, 0x2655, 0x28d6, + 0x2b7c, 0x2e4a, 0x3141, 0x3464, + 0x37b4, 0x3b35, 0x3ee9, 0x42d3, + 0x46f6, 0x4b53, 0x4ff0, 0x54ce, + 0x59f2, 0x5f5f, 0x6519, 0x6b24, + 0x7183, 0x783c, 0x7f53, 0x86cc, + 0x8ead, 0x96fa, 0x9fba, 0xa8f2, + 0xb2a7, 0xbce1, 0xc7a5, 0xd2fa, + 0xdee8, 0xeb75, 0xf8aa, 0x1068e, + 0x1152a, 0x12487, 0x134ad, 0x145a5, + 0x1577b, 0x16a37, 0x17df5, 0x192bd, + 0x1a890, 0x1bf7b, 0x1d78d, 0x1f0d1, + 0x20b55, 0x22727, 0x24456, 0x262f2, + 0x2830b +}; + +static uint tas3004_mixer_tab[]={ + 0x0, 0x748, 0x9be, 0xbaf, + 0xda4, 0xfb1, 0x11de, 0x1431, + 0x16ad, 0x1959, 0x1c37, 0x1f4b, + 0x2298, 0x2628, 0x29fb, 0x2e12, + 0x327d, 0x3734, 0x3c47, 0x41b4, + 0x4787, 0x4dbe, 0x546d, 0x5b86, + 0x632e, 0x6b52, 0x7400, 0x7d54, + 0x873b, 0x91c6, 0x9d1a, 0xa920, + 0xb5e5, 0xc38c, 0xd21b, 0xe18f, + 0xf1f5, 0x1036a, 0x1160f, 0x129d6, + 0x13ed0, 0x1550c, 0x16ca0, 0x185c9, + 0x1a07b, 0x1bcc3, 0x1dab9, 0x1fa75, + 0x21c0f, 0x23fa3, 0x26552, 0x28d64, + 0x2b7c9, 0x2e4a2, 0x31411, 0x3463b, + 0x37b44, 0x3b353, 0x3ee94, 0x42d30, + 0x46f55, 0x4b533, 0x4fefc, 0x54ce5, + 0x59f25, 0x5f5f6, 0x65193, 0x6b23c, + 0x71835, 0x783c3, 0x7f52c, 0x86cc0, + 0x8eacc, 0x96fa5, 0x9fba0, 0xa8f1a, + 0xb2a71, 0xbce0a, 0xc7a4a, 0xd2fa0, + 0xdee7b, 0xeb752, 0xf8a9f, 0x1068e4, + 0x1152a3, 0x12486a, 0x134ac8, 0x145a55, + 0x1577ac, 0x16a370, 0x17df51, 0x192bc2, + 0x1a88f8, 0x1bf7b7, 0x1d78c9, 0x1f0d04, + 0x20b542, 0x227268, 0x244564, 0x262f26, + 0x2830af +}; + +static uint tas3004_treble_tab[]={ + 0x96, 0x95, 0x95, 0x94, + 0x93, 0x92, 0x92, 0x91, + 0x90, 0x90, 0x8f, 0x8e, + 0x8d, 0x8d, 0x8c, 0x8b, + 0x8a, 0x8a, 0x89, 0x88, + 0x88, 0x87, 0x86, 0x85, + 0x85, 0x84, 0x83, 0x83, + 0x82, 0x81, 0x80, 0x80, + 0x7f, 0x7e, 0x7e, 0x7d, + 0x7c, 0x7b, 0x7b, 0x7a, + 0x79, 0x78, 0x78, 0x77, + 0x76, 0x76, 0x75, 0x74, + 0x73, 0x73, 0x72, 0x71, + 0x71, 0x68, 0x45, 0x5b, + 0x6d, 0x6c, 0x6b, 0x6a, + 0x69, 0x68, 0x67, 0x66, + 0x65, 0x63, 0x62, 0x62, + 0x60, 0x5e, 0x5c, 0x5b, + 0x59, 0x57, 0x55, 0x53, + 0x52, 0x4f, 0x4d, 0x4a, + 0x48, 0x46, 0x43, 0x40, + 0x3d, 0x3a, 0x36, 0x33, + 0x2f, 0x2c, 0x27, 0x23, + 0x1f, 0x1a, 0x15, 0xf, + 0x8, 0x5, 0x2, 0x1, + 0x1 +}; + +static uint tas3004_bass_tab[]={ + 0x96, 0x95, 0x95, 0x94, + 0x93, 0x92, 0x92, 0x91, + 0x90, 0x90, 0x8f, 0x8e, + 0x8d, 0x8d, 0x8c, 0x8b, + 0x8a, 0x8a, 0x89, 0x88, + 0x88, 0x87, 0x86, 0x85, + 0x85, 0x84, 0x83, 0x83, + 0x82, 0x81, 0x80, 0x80, + 0x7f, 0x7e, 0x7e, 0x7d, + 0x7c, 0x7b, 0x7b, 0x7a, + 0x79, 0x78, 0x78, 0x77, + 0x76, 0x76, 0x75, 0x74, + 0x73, 0x73, 0x72, 0x71, + 0x70, 0x6f, 0x6e, 0x6d, + 0x6c, 0x6b, 0x6a, 0x6a, + 0x69, 0x67, 0x66, 0x66, + 0x65, 0x63, 0x62, 0x62, + 0x61, 0x60, 0x5e, 0x5d, + 0x5b, 0x59, 0x57, 0x55, + 0x53, 0x51, 0x4f, 0x4c, + 0x4a, 0x48, 0x46, 0x44, + 0x41, 0x3e, 0x3b, 0x38, + 0x36, 0x33, 0x2f, 0x2b, + 0x28, 0x24, 0x20, 0x1c, + 0x17, 0x12, 0xd, 0x7, + 0x1 +}; + +struct tas_gain_t tas3004_gain={ + master: tas3004_master_tab, + treble: tas3004_treble_tab, + bass: tas3004_bass_tab, + mixer: tas3004_mixer_tab +}; + +struct tas_eq_pref_t *tas3004_eq_prefs[]={ + &eqp_17_1_0, + &eqp_18_1_0, + &eqp_1a_1_0, + &eqp_1c_1_0, + NULL +}; diff -prauN linux-2.6.0-test5/sound/oss/dmasound/tas_common.c wli-2.6.0-test5-bk12-25/sound/oss/dmasound/tas_common.c --- linux-2.6.0-test5/sound/oss/dmasound/tas_common.c 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/sound/oss/dmasound/tas_common.c 2003-09-25 19:16:18.000000000 -0700 @@ -0,0 +1,212 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "tas_common.h" + +#define CALL0(proc) \ + do { \ + struct tas_data_t *self; \ + if (!tas_client || driver_hooks == NULL) \ + return -1; \ + self = dev_get_drvdata(&tas_client->dev); \ + if (driver_hooks->proc) \ + return driver_hooks->proc(self); \ + else \ + return -EINVAL; \ + } while (0) + +#define CALL(proc,arg...) \ + do { \ + struct tas_data_t *self; \ + if (!tas_client || driver_hooks == NULL) \ + return -1; \ + self = dev_get_drvdata(&tas_client->dev); \ + if (driver_hooks->proc) \ + return driver_hooks->proc(self, ## arg); \ + else \ + return -EINVAL; \ + } while (0) + + +static u8 tas_i2c_address = 0x34; +static struct i2c_client *tas_client; +static struct device_node* tas_node; + +static int tas_attach_adapter(struct i2c_adapter *); +static int tas_detach_client(struct i2c_client *); + +struct i2c_driver tas_driver = { + .owner = THIS_MODULE, + .name = "tas", + .flags = I2C_DF_NOTIFY, + .attach_adapter = tas_attach_adapter, + .detach_client = tas_detach_client, +}; + +struct tas_driver_hooks_t *driver_hooks; + +int +tas_register_driver(struct tas_driver_hooks_t *hooks) +{ + driver_hooks = hooks; + return 0; +} + +int +tas_get_mixer_level(int mixer, uint *level) +{ + CALL(get_mixer_level,mixer,level); +} + +int +tas_set_mixer_level(int mixer,uint level) +{ + CALL(set_mixer_level,mixer,level); +} + +int +tas_enter_sleep(void) +{ + CALL0(enter_sleep); +} + +int +tas_leave_sleep(void) +{ + CALL0(leave_sleep); +} + +int +tas_supported_mixers(void) +{ + CALL0(supported_mixers); +} + +int +tas_mixer_is_stereo(int mixer) +{ + CALL(mixer_is_stereo,mixer); +} + +int +tas_stereo_mixers(void) +{ + CALL0(stereo_mixers); +} + +int +tas_output_device_change(int device_id,int layout_id,int speaker_id) +{ + CALL(output_device_change,device_id,layout_id,speaker_id); +} + +int +tas_device_ioctl(u_int cmd, u_long arg) +{ + CALL(device_ioctl,cmd,arg); +} + +int +tas_post_init(void) +{ + CALL0(post_init); +} + +static int +tas_detect_client(struct i2c_adapter *adapter, int address) +{ + static const char *client_name = "tas Digital Equalizer"; + struct i2c_client *new_client; + int rc = -ENODEV; + + if (!driver_hooks) { + printk(KERN_ERR "tas_detect_client called with no hooks !\n"); + return -ENODEV; + } + + new_client = kmalloc(sizeof(*new_client), GFP_KERNEL); + if (!new_client) + return -ENOMEM; + memset(new_client, 0, sizeof(*new_client)); + + new_client->addr = address; + new_client->adapter = adapter; + new_client->driver = &tas_driver; + strlcpy(new_client->name, client_name, DEVICE_NAME_SIZE); + + if (driver_hooks->init(new_client)) + goto bail; + + /* Tell the i2c layer a new client has arrived */ + if (i2c_attach_client(new_client)) { + driver_hooks->uninit(dev_get_drvdata(&new_client->dev)); + goto bail; + } + + tas_client = new_client; + return 0; + bail: + tas_client = NULL; + kfree(new_client); + return rc; +} + +static int +tas_attach_adapter(struct i2c_adapter *adapter) +{ + if (!strncmp(adapter->name, "mac-io", 6)) + return tas_detect_client(adapter, tas_i2c_address); + return 0; +} + +static int +tas_detach_client(struct i2c_client *client) +{ + if (client == tas_client) { + driver_hooks->uninit(dev_get_drvdata(&client->dev)); + + i2c_detach_client(client); + kfree(client); + } + return 0; +} + +void +tas_cleanup(void) +{ + i2c_del_driver(&tas_driver); +} + +int __init +tas_init(int driver_id, const char *driver_name) +{ + u32* paddr; + + printk(KERN_INFO "tas driver [%s])\n", driver_name); + + tas_node = find_devices("deq"); + if (tas_node == NULL) + return -ENODEV; + paddr = (u32 *)get_property(tas_node, "i2c-address", NULL); + if (paddr) { + tas_i2c_address = (*paddr) >> 1; + printk(KERN_INFO "using i2c address: 0x%x from device-tree\n", + tas_i2c_address); + } else + printk(KERN_INFO "using i2c address: 0x%x (default)\n", + tas_i2c_address); + + return i2c_add_driver(&tas_driver); +} diff -prauN linux-2.6.0-test5/sound/oss/dmasound/tas_common.h wli-2.6.0-test5-bk12-25/sound/oss/dmasound/tas_common.h --- linux-2.6.0-test5/sound/oss/dmasound/tas_common.h 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/sound/oss/dmasound/tas_common.h 2003-09-25 19:16:18.000000000 -0700 @@ -0,0 +1,284 @@ +#ifndef _TAS_COMMON_H_ +#define _TAS_COMMON_H_ + +#include +#include +#include + +#define I2C_DRIVERID_TAS_BASE (0xFEBA) + +#define SET_4_20(shadow, offset, val) \ + do { \ + (shadow)[(offset)+0] = ((val) >> 16) & 0xff; \ + (shadow)[(offset)+1] = ((val) >> 8) & 0xff; \ + (shadow)[(offset)+2] = ((val) >> 0) & 0xff; \ + } while (0) + +#define GET_4_20(shadow, offset) \ + (((u_int)((shadow)[(offset)+0]) << 16) | \ + ((u_int)((shadow)[(offset)+1]) << 8) | \ + ((u_int)((shadow)[(offset)+2]) << 0)) + + +#define TAS_BIQUAD_FAST_LOAD 0x01 + +#define TAS_DRCE_ENABLE 0x01 +#define TAS_DRCE_ABOVE_RATIO 0x02 +#define TAS_DRCE_BELOW_RATIO 0x04 +#define TAS_DRCE_THRESHOLD 0x08 +#define TAS_DRCE_ENERGY 0x10 +#define TAS_DRCE_ATTACK 0x20 +#define TAS_DRCE_DECAY 0x40 + +#define TAS_DRCE_ALL 0x7f + + +#define TAS_OUTPUT_HEADPHONES 0x00 +#define TAS_OUTPUT_INTERNAL_SPKR 0x01 +#define TAS_OUTPUT_EXTERNAL_SPKR 0x02 + + +union tas_biquad_t { + struct { + int b0,b1,b2,a1,a2; + } coeff; + int buf[5]; +}; + +struct tas_biquad_ctrl_t { + u_int channel:4; + u_int filter:4; + + union tas_biquad_t data; +}; + +struct tas_biquad_ctrl_list_t { + int flags; + int filter_count; + struct tas_biquad_ctrl_t biquads[0]; +}; + +struct tas_ratio_t { + unsigned short val; /* 8.8 */ + unsigned short expand; /* 0 = compress, !0 = expand. */ +}; + +struct tas_drce_t { + unsigned short enable; + struct tas_ratio_t above; + struct tas_ratio_t below; + short threshold; /* dB, 8.8 signed */ + unsigned short energy; /* seconds, 4.12 unsigned */ + unsigned short attack; /* seconds, 4.12 unsigned */ + unsigned short decay; /* seconds, 4.12 unsigned */ +}; + +struct tas_drce_ctrl_t { + uint flags; + + struct tas_drce_t data; +}; + +struct tas_gain_t +{ + unsigned int *master; + unsigned int *treble; + unsigned int *bass; + unsigned int *mixer; +}; + +typedef char tas_shadow_t[16]; + +struct tas_data_t +{ + struct i2c_client *client; + tas_shadow_t *shadow; + uint mixer[SOUND_MIXER_NRDEVICES]; +}; + +typedef int (*tas_hook_init_t)(struct i2c_client *); +typedef int (*tas_hook_post_init_t)(struct tas_data_t *); +typedef void (*tas_hook_uninit_t)(struct tas_data_t *); + +typedef int (*tas_hook_get_mixer_level_t)(struct tas_data_t *,int,uint *); +typedef int (*tas_hook_set_mixer_level_t)(struct tas_data_t *,int,uint); + +typedef int (*tas_hook_enter_sleep_t)(struct tas_data_t *); +typedef int (*tas_hook_leave_sleep_t)(struct tas_data_t *); + +typedef int (*tas_hook_supported_mixers_t)(struct tas_data_t *); +typedef int (*tas_hook_mixer_is_stereo_t)(struct tas_data_t *,int); +typedef int (*tas_hook_stereo_mixers_t)(struct tas_data_t *); + +typedef int (*tas_hook_output_device_change_t)(struct tas_data_t *,int,int,int); +typedef int (*tas_hook_device_ioctl_t)(struct tas_data_t *,u_int,u_long); + +struct tas_driver_hooks_t { + /* + * All hardware initialisation must be performed in + * post_init(), as tas_dmasound_init() does a hardware reset. + * + * init() is called before tas_dmasound_init() so that + * ouput_device_change() is always called after i2c driver + * initialisation. The implication is that + * output_device_change() must cope with the fact that it + * may be called before post_init(). + */ + + tas_hook_init_t init; + tas_hook_post_init_t post_init; + tas_hook_uninit_t uninit; + + tas_hook_get_mixer_level_t get_mixer_level; + tas_hook_set_mixer_level_t set_mixer_level; + + tas_hook_enter_sleep_t enter_sleep; + tas_hook_leave_sleep_t leave_sleep; + + tas_hook_supported_mixers_t supported_mixers; + tas_hook_mixer_is_stereo_t mixer_is_stereo; + tas_hook_stereo_mixers_t stereo_mixers; + + tas_hook_output_device_change_t output_device_change; + tas_hook_device_ioctl_t device_ioctl; +}; + +enum tas_write_mode_t { + WRITE_HW = 0x01, + WRITE_SHADOW = 0x02, + WRITE_NORMAL = 0x03, + FORCE_WRITE = 0x04 +}; + +static inline uint +tas_mono_to_stereo(uint mono) +{ + mono &=0xff; + return mono | (mono<<8); +} + +/* + * Todo: make these functions a bit more efficient ! + */ +static inline int +tas_write_register( struct tas_data_t *self, + uint reg_num, + uint reg_width, + char *data, + uint write_mode) +{ + int rc; + + if (reg_width==0 || data==NULL || self==NULL) + return -EINVAL; + if (!(write_mode & FORCE_WRITE) && + !memcmp(data,self->shadow[reg_num],reg_width)) + return 0; + + if (write_mode & WRITE_SHADOW) + memcpy(self->shadow[reg_num],data,reg_width); + if (write_mode & WRITE_HW) { + rc=i2c_smbus_write_block_data(self->client, + reg_num, + reg_width, + data); + if (rc < 0) { + printk("tas: I2C block write failed \n"); + return rc; + } + } + return 0; +} + +static inline int +tas_sync_register( struct tas_data_t *self, + uint reg_num, + uint reg_width) +{ + int rc; + + if (reg_width==0 || self==NULL) + return -EINVAL; + rc=i2c_smbus_write_block_data(self->client, + reg_num, + reg_width, + self->shadow[reg_num]); + if (rc < 0) { + printk("tas: I2C block write failed \n"); + return rc; + } + return 0; +} + +static inline int +tas_write_byte_register( struct tas_data_t *self, + uint reg_num, + char data, + uint write_mode) +{ + if (self==NULL) + return -1; + if (!(write_mode & FORCE_WRITE) && data != self->shadow[reg_num][0]) + return 0; + if (write_mode & WRITE_SHADOW) + self->shadow[reg_num][0]=data; + if (write_mode & WRITE_HW) { + if (i2c_smbus_write_byte_data(self->client, reg_num, data) < 0) { + printk("tas: I2C byte write failed \n"); + return -1; + } + } + return 0; +} + +static inline int +tas_sync_byte_register( struct tas_data_t *self, + uint reg_num, + uint reg_width) +{ + if (reg_width==0 || self==NULL) + return -1; + if (i2c_smbus_write_byte_data( + self->client, reg_num, self->shadow[reg_num][0]) < 0) { + printk("tas: I2C byte write failed \n"); + return -1; + } + return 0; +} + +static inline int +tas_read_register( struct tas_data_t *self, + uint reg_num, + uint reg_width, + char *data) +{ + if (reg_width==0 || data==NULL || self==NULL) + return -1; + memcpy(data,self->shadow[reg_num],reg_width); + return 0; +} + +extern int tas_register_driver(struct tas_driver_hooks_t *hooks); + +extern int tas_get_mixer_level(int mixer,uint *level); +extern int tas_set_mixer_level(int mixer,uint level); +extern int tas_enter_sleep(void); +extern int tas_leave_sleep(void); +extern int tas_supported_mixers(void); +extern int tas_mixer_is_stereo(int mixer); +extern int tas_stereo_mixers(void); +extern int tas_output_device_change(int,int,int); +extern int tas_device_ioctl(u_int, u_long); + +extern void tas_cleanup(void); +extern int tas_init(int driver_id,const char *driver_name); +extern int tas_post_init(void); + +#endif /* _TAS_COMMON_H_ */ +/* + * Local Variables: + * tab-width: 8 + * indent-tabs-mode: t + * c-basic-offset: 8 + * End: + */ diff -prauN linux-2.6.0-test5/sound/oss/dmasound/tas_eq_prefs.h wli-2.6.0-test5-bk12-25/sound/oss/dmasound/tas_eq_prefs.h --- linux-2.6.0-test5/sound/oss/dmasound/tas_eq_prefs.h 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/sound/oss/dmasound/tas_eq_prefs.h 2003-09-25 19:16:18.000000000 -0700 @@ -0,0 +1,24 @@ +#ifndef _TAS_EQ_PREFS_H_ +#define _TAS_EQ_PREFS_H_ + +struct tas_eq_pref_t { + u_int sample_rate; + u_int device_id; + u_int output_id; + u_int speaker_id; + + struct tas_drce_t *drce; + + u_int filter_count; + struct tas_biquad_ctrl_t *biquads; +}; + +#endif /* _TAS_EQ_PREFS_H_ */ + +/* + * Local Variables: + * tab-width: 8 + * indent-tabs-mode: t + * c-basic-offset: 8 + * End: + */ diff -prauN linux-2.6.0-test5/sound/oss/dmasound/tas_ioctl.h wli-2.6.0-test5-bk12-25/sound/oss/dmasound/tas_ioctl.h --- linux-2.6.0-test5/sound/oss/dmasound/tas_ioctl.h 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/sound/oss/dmasound/tas_ioctl.h 2003-09-25 19:16:18.000000000 -0700 @@ -0,0 +1,24 @@ +#ifndef _TAS_IOCTL_H_ +#define _TAS_IOCTL_H_ + +#include +#include + + +#define TAS_READ_EQ _SIOR('t',0,struct tas_biquad_ctrl_t) +#define TAS_WRITE_EQ _SIOW('t',0,struct tas_biquad_ctrl_t) + +#define TAS_READ_EQ_LIST _SIOR('t',1,struct tas_biquad_ctrl_t) +#define TAS_WRITE_EQ_LIST _SIOW('t',1,struct tas_biquad_ctrl_t) + +#define TAS_READ_EQ_FILTER_COUNT _SIOR('t',2,int) +#define TAS_READ_EQ_CHANNEL_COUNT _SIOR('t',3,int) + +#define TAS_READ_DRCE _SIOR('t',4,struct tas_drce_ctrl_t) +#define TAS_WRITE_DRCE _SIOW('t',4,struct tas_drce_ctrl_t) + +#define TAS_READ_DRCE_CAPS _SIOR('t',5,int) +#define TAS_READ_DRCE_MIN _SIOR('t',6,int) +#define TAS_READ_DRCE_MAX _SIOR('t',7,int) + +#endif diff -prauN linux-2.6.0-test5/sound/oss/dmasound/trans_16.c wli-2.6.0-test5-bk12-25/sound/oss/dmasound/trans_16.c --- linux-2.6.0-test5/sound/oss/dmasound/trans_16.c 1969-12-31 16:00:00.000000000 -0800 +++ wli-2.6.0-test5-bk12-25/sound/oss/dmasound/trans_16.c 2003-09-25 19:16:18.000000000 -0700 @@ -0,0 +1,679 @@ +/* + * linux/drivers/sound/dmasound/trans_16.c + * + * 16 bit translation routines. Only used by Power mac at present. + * + * See linux/drivers/sound/dmasound/dmasound_core.c for copyright and + * history prior to 08/02/2001. + * + * 08/02/2001 Iain Sandoe + * split from dmasound_awacs.c + */ + +#include +#include +#include "dmasound.h" + +static short dmasound_alaw2dma16[] ; +static short dmasound_ulaw2dma16[] ; + +static ssize_t pmac_ct_law(const u_char *userPtr, size_t userCount, + u_char frame[], ssize_t *frameUsed, + ssize_t frameLeft); +static ssize_t pmac_ct_s8(const u_char *userPtr, size_t userCount, + u_char frame[], ssize_t *frameUsed, + ssize_t frameLeft); +static ssize_t pmac_ct_u8(const u_char *userPtr, size_t userCount, + u_char frame[], ssize_t *frameUsed, + ssize_t frameLeft); +static ssize_t pmac_ct_s16(const u_char *userPtr, size_t userCount, + u_char frame[], ssize_t *frameUsed, + ssize_t frameLeft); +static ssize_t pmac_ct_u16(const u_char *userPtr, size_t userCount, + u_char frame[], ssize_t *frameUsed, + ssize_t frameLeft); + +static ssize_t pmac_ctx_law(const u_char *userPtr, size_t userCount, + u_char frame[], ssize_t *frameUsed, + ssize_t frameLeft); +static ssize_t pmac_ctx_s8(const u_char *userPtr, size_t userCount, + u_char frame[], ssize_t *frameUsed, + ssize_t frameLeft); +static ssize_t pmac_ctx_u8(const u_char *userPtr, size_t userCount, + u_char frame[], ssize_t *frameUsed, + ssize_t frameLeft); +static ssize_t pmac_ctx_s16(const u_char *userPtr, size_t userCount, + u_char frame[], ssize_t *frameUsed, + ssize_t frameLeft); +static ssize_t pmac_ctx_u16(const u_char *userPtr, size_t userCount, + u_char frame[], ssize_t *frameUsed, + ssize_t frameLeft); + +static ssize_t pmac_ct_s16_read(const u_char *userPtr, size_t userCount, + u_char frame[], ssize_t *frameUsed, + ssize_t frameLeft); +static ssize_t pmac_ct_u16_read(const u_char *userPtr, size_t userCount, + u_char frame[], ssize_t *frameUsed, + ssize_t frameLeft); + +/*** Translations ************************************************************/ + +extern int expand_bal; /* Balance factor for expanding (not volume!) */ +static int expand_data; /* Data for expanding */ + +static ssize_t pmac_ct_law(const u_char *userPtr, size_t userCount, + u_char frame[], ssize_t *frameUsed, + ssize_t frameLeft) +{ + short *table = dmasound.soft.format == AFMT_MU_LAW + ? dmasound_ulaw2dma16 : dmasound_alaw2dma16; + ssize_t count, used; + short *p = (short *) &frame[*frameUsed]; + int val, stereo = dmasound.soft.stereo; + + frameLeft >>= 2; + if (stereo) + userCount >>= 1; + used = count = min_t(unsigned long, userCount, frameLeft); + while (count > 0) { + u_char data; + if (get_user(data, userPtr++)) + return -EFAULT; + val = table[data]; + *p++ = val; + if (stereo) { + if (get_user(data, userPtr++)) + return -EFAULT; + val = table[data]; + } + *p++ = val; + count--; + } + *frameUsed += used * 4; + return stereo? used * 2: used; +} + + +static ssize_t pmac_ct_s8(const u_char *userPtr, size_t userCount, + u_char frame[], ssize_t *frameUsed, + ssize_t frameLeft) +{ + ssize_t count, used; + short *p = (short *) &frame[*frameUsed]; + int val, stereo = dmasound.soft.stereo; + + frameLeft >>= 2; + if (stereo) + userCount >>= 1; + used = count = min_t(unsigned long, userCount, frameLeft); + while (count > 0) { + u_char data; + if (get_user(data, userPtr++)) + return -EFAULT; + val = data << 8; + *p++ = val; + if (stereo) { + if (get_user(data, userPtr++)) + return -EFAULT; + val = data << 8; + } + *p++ = val; + count--; + } + *frameUsed += used * 4; + return stereo? used * 2: used; +} + + +static ssize_t pmac_ct_u8(const u_char *userPtr, size_t userCount, + u_char frame[], ssize_t *frameUsed, + ssize_t frameLeft) +{ + ssize_t count, used; + short *p = (short *) &frame[*frameUsed]; + int val, stereo = dmasound.soft.stereo; + + frameLeft >>= 2; + if (stereo) + userCount >>= 1; + used = count = min_t(unsigned long, userCount, frameLeft); + while (count > 0) { + u_char data; + if (get_user(data, userPtr++)) + return -EFAULT; + val = (data ^ 0x80) << 8; + *p++ = val; + if (stereo) { + if (get_user(data, userPtr++)) + return -EFAULT; + val = (data ^ 0x80) << 8; + } + *p++ = val; + count--; + } + *frameUsed += used * 4; + return stereo? used * 2: used; +} + + +static ssize_t pmac_ct_s16(const u_char *userPtr, size_t userCount, + u_char frame[], ssize_t *frameUsed, + ssize_t frameLeft) +{ + ssize_t count, used; + int stereo = dmasound.soft.stereo; + short *fp = (short *) &frame[*frameUsed]; + + frameLeft >>= 2; + userCount >>= (stereo? 2: 1); + used = count = min_t(unsigned long, userCount, frameLeft); + if (!stereo) { + short *up = (short *) userPtr; + while (count > 0) { + short data; + if (get_user(data, up++)) + return -EFAULT; + *fp++ = data; + *fp++ = data; + count--; + } + } else { + if (copy_from_user(fp, userPtr, count * 4)) + return -EFAULT; + } + *frameUsed += used * 4; + return stereo? used * 4: used * 2; +} + +static ssize_t pmac_ct_u16(const u_char *userPtr, size_t userCount, + u_char frame[], ssize_t *frameUsed, + ssize_t frameLeft) +{ + ssize_t count, used; + int mask = (dmasound.soft.format == AFMT_U16_LE? 0x0080: 0x8000); + int stereo = dmasound.soft.stereo; + short *fp = (short *) &frame[*frameUsed]; + short *up = (short *) userPtr; + + frameLeft >>= 2; + userCount >>= (stereo? 2: 1); + used = count = min_t(unsigned long, userCount, frameLeft); + while (count > 0) { + short data; + if (get_user(data, up++)) + return -EFAULT; + data ^= mask; + *fp++ = data; + if (stereo) { + if (get_user(data, up++)) + return -EFAULT; + data ^= mask; + } + *fp++ = data; + count--; + } + *frameUsed += used * 4; + return stereo? used * 4: used * 2; +} + + +static ssize_t pmac_ctx_law(const u_char *userPtr, size_t userCount, + u_char frame[], ssize_t *frameUsed, + ssize_t frameLeft) +{ + unsigned short *table = (unsigned short *) + (dmasound.soft.format == AFMT_MU_LAW + ? dmasound_ulaw2dma16 : dmasound_alaw2dma16); + unsigned int data = expand_data; + unsigned int *p = (unsigned int *) &frame[*frameUsed]; + int bal = expand_bal; + int hSpeed = dmasound.hard.speed, sSpeed = dmasound.soft.speed; + int utotal, ftotal; + int stereo = dmasound.soft.stereo; + + frameLeft >>= 2; + if (stereo) + userCount >>= 1; + ftotal = frameLeft; + utotal = userCount; + while (frameLeft) { + u_char c; + if (bal < 0) { + if (userCount == 0) + break; + if (get_user(c, userPtr++)) + return -EFAULT; + data = table[c]; + if (stereo) { + if (get_user(c, userPtr++)) + return -EFAULT; + data = (data << 16) + table[c]; + } else + data = (data << 16) + data; + userCount--; + bal += hSpeed; + } + *p++ = data; + frameLeft--; + bal -= sSpeed; + } + expand_bal = bal; + expand_data = data; + *frameUsed += (ftotal - frameLeft) * 4; + utotal -= userCount; + return stereo? utotal * 2: utotal; +} + +static ssize_t pmac_ctx_s8(const u_char *userPtr, size_t userCount, + u_char frame[], ssize_t *frameUsed, + ssize_t frameLeft) +{ + unsigned int *p = (unsigned int *) &frame[*frameUsed]; + unsigned int data = expand_data; + int bal = expand_bal; + int hSpeed = dmasound.hard.speed, sSpeed = dmasound.soft.speed; + int stereo = dmasound.soft.stereo; + int utotal, ftotal; + + frameLeft >>= 2; + if (stereo) + userCount >>= 1; + ftotal = frameLeft; + utotal = userCount; + while (frameLeft) { + u_char c; + if (bal < 0) { + if (userCount == 0) + break; + if (get_user(c, userPtr++)) + return -EFAULT; + data = c << 8; + if (stereo) { + if (get_user(c, userPtr++)) + return -EFAULT; + data = (data << 16) + (c << 8); + } else + data = (data << 16) + data; + userCount--; + bal += hSpeed; + } + *p++ = data; + frameLeft--; + bal -= sSpeed; + } + expand_bal = bal; + expand_data = data; + *frameUsed += (ftotal - frameLeft) * 4; + utotal -= userCount; + return stereo? utotal * 2: utotal; +} + + +static ssize_t pmac_ctx_u8(const u_char *userPtr, size_t userCount, + u_char frame[], ssize_t *frameUsed, + ssize_t frameLeft) +{ + unsigned int *p = (unsigned int *) &frame[*frameUsed]; + unsigned int data = expand_data; + int bal = expand_bal; + int hSpeed = dmasound.hard.speed, sSpeed = dmasound.soft.speed; + int stereo = dmasound.soft.stereo; + int utotal, ftotal; + + frameLeft >>= 2; + if (stereo) + userCount >>= 1; + ftotal = frameLeft; + utotal = userCount; + while (frameLeft) { + u_char c; + if (bal < 0) { + if (userCount == 0) + break; + if (get_user(c, userPtr++)) + return -EFAULT; + data = (c ^ 0x80) << 8; + if (stereo) { + if (get_user(c, userPtr++)) + return -EFAULT; + data = (data << 16) + ((c ^ 0x80) << 8); + } else + data = (data << 16) + data; + userCount--; + bal += hSpeed; + } + *p++ = data; + frameLeft--; + bal -= sSpeed; + } + expand_bal = bal; + expand_data = data; + *frameUsed += (ftotal - frameLeft) * 4; + utotal -= userCount; + return stereo? utotal * 2: utotal; +} + + +static ssize_t pmac_ctx_s16(const u_char *userPtr, size_t userCount, + u_char frame[], ssize_t *frameUsed, + ssize_t frameLeft) +{ + unsigned int *p = (unsigned int *) &frame[*frameUsed]; + unsigned int data = expand_data; + unsigned short *up = (unsigned short *) userPtr; + int bal = expand_bal; + int hSpeed = dmasound.hard.speed, sSpeed = dmasound.soft.speed; + int stereo = dmasound.soft.stereo; + int utotal, ftotal; + + frameLeft >>= 2; + userCount >>= (stereo? 2: 1); + ftotal = frameLeft; + utotal = userCount; + while (frameLeft) { + unsigned short c; + if (bal < 0) { + if (userCount == 0) + break; + if (get_user(data, up++)) + return -EFAULT; + if (stereo) { + if (get_user(c, up++)) + return -EFAULT; + data = (data << 16) + c; + } else + data = (data << 16) + data; + userCount--; + bal += hSpeed; + } + *p++ = data; + frameLeft--; + bal -= sSpeed; + } + expand_bal = bal; + expand_data = data; + *frameUsed += (ftotal - frameLeft) * 4; + utotal -= userCount; + return stereo? utotal * 4: utotal * 2; +} + + +static ssize_t pmac_ctx_u16(const u_char *userPtr, size_t userCount, + u_char frame[], ssize_t *frameUsed, + ssize_t frameLeft) +{ + int mask = (dmasound.soft.format == AFMT_U16_LE? 0x0080: 0x8000); + unsigned int *p = (unsigned int *) &frame[*frameUsed]; + unsigned int data = expand_data; + unsigned short *up = (unsigned short *) userPtr; + int bal = expand_bal; + int hSpeed = dmasound.hard.speed, sSpeed = dmasound.soft.speed; + int stereo = dmasound.soft.stereo; + int utotal, ftotal; + + frameLeft >>= 2; + userCount >>= (stereo? 2: 1); + ftotal = frameLeft; + utotal = userCount; + while (frameLeft) { + unsigned short c; + if (bal < 0) { + if (userCount == 0) + break; + if (get_user(data, up++)) + return -EFAULT; + data ^= mask; + if (stereo) { + if (get_user(c, up++)) + return -EFAULT; + data = (data << 16) + (c ^ mask); + } else + data = (data << 16) + data; + userCount--; + bal += hSpeed; + } + *p++ = data; + frameLeft--; + bal -= sSpeed; + } + expand_bal = bal; + expand_data = data; + *frameUsed += (ftotal - frameLeft) * 4; + utotal -= userCount; + return stereo? utotal * 4: utotal * 2; +} + +/* data in routines... */ + +static ssize_t pmac_ct_s8_read(const u_char *userPtr, size_t userCount, + u_char frame[], ssize_t *frameUsed, + ssize_t frameLeft) +{ + ssize_t count, used; + short *p = (short *) &frame[*frameUsed]; + int val, stereo = dmasound.soft.stereo; + + frameLeft >>= 2; + if (stereo) + userCount >>= 1; + used = count = min_t(unsigned long, userCount, frameLeft); + while (count > 0) { + u_char data; + + val = *p++; + data = val >> 8; + if (put_user(data, (u_char *)userPtr++)) + return -EFAULT; + if (stereo) { + val = *p; + data = val >> 8; + if (put_user(data, (u_char *)userPtr++)) + return -EFAULT; + } + p++; + count--; + } + *frameUsed += used * 4; + return stereo? used * 2: used; +} + + +static ssize_t pmac_ct_u8_read(const u_char *userPtr, size_t userCount, + u_char frame[], ssize_t *frameUsed, + ssize_t frameLeft) +{ + ssize_t count, used; + short *p = (short *) &frame[*frameUsed]; + int val, stereo = dmasound.soft.stereo; + + frameLeft >>= 2; + if (stereo) + userCount >>= 1; + used = count = min_t(unsigned long, userCount, frameLeft); + while (count > 0) { + u_char data; + + val = *p++; + data = (val >> 8) ^ 0x80; + if (put_user(data, (u_char *)userPtr++)) + return -EFAULT; + if (stereo) { + val = *p; + data = (val >> 8) ^ 0x80; + if (put_user(data, (u_char *)userPtr++)) + return -EFAULT; + } + p++; + count--; + } + *frameUsed += used * 4; + return stereo? used * 2: used; +} + +static ssize_t pmac_ct_s16_read(const u_char *userPtr, size_t userCount, + u_char frame[], ssize_t *frameUsed, + ssize_t frameLeft) +{ + ssize_t count, used; + int stereo = dmasound.soft.stereo; + short *fp = (short *) &frame[*frameUsed]; + + frameLeft >>= 2; + userCount >>= (stereo? 2: 1); + used = count = min_t(unsigned long, userCount, frameLeft); + if (!stereo) { + short *up = (short *) userPtr; + while (count > 0) { + short data; + data = *fp; + if (put_user(data, up++)) + return -EFAULT; + fp+=2; + count--; + } + } else { + if (copy_to_user((u_char *)userPtr, fp, count * 4)) + return -EFAULT; + } + *frameUsed += used * 4; + return stereo? used * 4: used * 2; +} + +static ssize_t pmac_ct_u16_read(const u_char *userPtr, size_t userCount, + u_char frame[], ssize_t *frameUsed, + ssize_t frameLeft) +{ + ssize_t count, used; + int mask = (dmasound.soft.format == AFMT_U16_LE? 0x0080: 0x8000); + int stereo = dmasound.soft.stereo; + short *fp = (short *) &frame[*frameUsed]; + short *up = (short *) userPtr; + + frameLeft >>= 2; + userCount >>= (stereo? 2: 1); + used = count = min_t(unsigned long, userCount, frameLeft); + while (count > 0) { + int data; + + data = *fp++; + data ^= mask; + if (put_user(data, up++)) + return -EFAULT; + if (stereo) { + data = *fp; + data ^= mask; + if (put_user(data, up++)) + return -EFAULT; + } + fp++; + count--; + } + *frameUsed += used * 4; + return stereo? used * 4: used * 2; +} + +TRANS transAwacsNormal = { + ct_ulaw: pmac_ct_law, + ct_alaw: pmac_ct_law, + ct_s8: pmac_ct_s8, + ct_u8: pmac_ct_u8, + ct_s16be: pmac_ct_s16, + ct_u16be: pmac_ct_u16, + ct_s16le: pmac_ct_s16, + ct_u16le: pmac_ct_u16, +}; + +TRANS transAwacsExpand = { + ct_ulaw: pmac_ctx_law, + ct_alaw: pmac_ctx_law, + ct_s8: pmac_ctx_s8, + ct_u8: pmac_ctx_u8, + ct_s16be: pmac_ctx_s16, + ct_u16be: pmac_ctx_u16, + ct_s16le: pmac_ctx_s16, + ct_u16le: pmac_ctx_u16, +}; + +TRANS transAwacsNormalRead = { + ct_s8: pmac_ct_s8_read, + ct_u8: pmac_ct_u8_read, + ct_s16be: pmac_ct_s16_read, + ct_u16be: pmac_ct_u16_read, + ct_s16le: pmac_ct_s16_read, + ct_u16le: pmac_ct_u16_read, +}; + +/* translation tables */ +/* 16 bit mu-law */ + +static short dmasound_ulaw2dma16[] = { + -32124, -31100, -30076, -29052, -28028, -27004, -25980, -24956, + -23932, -22908, -21884, -20860, -19836, -18812, -17788, -16764, + -15996, -15484, -14972, -14460, -13948, -13436, -12924, -12412, + -11900, -11388, -10876, -10364, -9852, -9340, -8828, -8316, + -7932, -7676, -7420, -7164, -6908, -6652, -6396, -6140, + -5884, -5628, -5372, -5116, -4860, -4604, -4348, -4092, + -3900, -3772, -3644, -3516, -3388, -3260, -3132, -3004, + -2876, -2748, -2620, -2492, -2364, -2236, -2108, -1980, + -1884, -1820, -1756, -1692, -1628, -1564, -1500, -1436, + -1372, -1308, -1244, -1180, -1116, -1052, -988, -924, + -876, -844, -812, -780, -748, -716, -684, -652, + -620, -588, -556, -524, -492, -460, -428, -396, + -372, -356, -340, -324, -308, -292, -276, -260, + -244, -228, -212, -196, -180, -164, -148, -132, + -120, -112, -104, -96, -88, -80, -72, -64, + -56, -48, -40, -32, -24, -16, -8, 0, + 32124, 31100, 30076, 29052, 28028, 27004, 25980, 24956, + 23932, 22908, 21884, 20860, 19836, 18812, 17788, 16764, + 15996, 15484, 14972, 14460, 13948, 13436, 12924, 12412, + 11900, 11388, 10876, 10364, 9852, 9340, 8828, 8316, + 7932, 7676, 7420, 7164, 6908, 6652, 6396, 6140, + 5884, 5628, 5372, 5116, 4860, 4604, 4348, 4092, + 3900, 3772, 3644, 3516, 3388, 3260, 3132, 3004, + 2876, 2748, 2620, 2492, 2364, 2236, 2108, 1980, + 1884, 1820, 1756, 1692, 1628, 1564, 1500, 1436, + 1372, 1308, 1244, 1180, 1116, 1052, 988, 924, + 876, 844, 812, 780, 748, 716, 684, 652, + 620, 588, 556, 524, 492, 460, 428, 396, + 372, 356, 340, 324, 308, 292, 276, 260, + 244, 228, 212, 196, 180, 164, 148, 132, + 120, 112, 104, 96, 88, 80, 72, 64, + 56, 48, 40, 32, 24, 16, 8, 0, +}; + +/* 16 bit A-law */ + +static short dmasound_alaw2dma16[] = { + -5504, -5248, -6016, -5760, -4480, -4224, -4992, -4736, + -7552, -7296, -8064, -7808, -6528, -6272, -7040, -6784, + -2752, -2624, -3008, -2880, -2240, -2112, -2496, -2368, + -3776, -3648, -4032, -3904, -3264, -3136, -3520, -3392, + -22016, -20992, -24064, -23040, -17920, -16896, -19968, -18944, + -30208, -29184, -32256, -31232, -26112, -25088, -28160, -27136, + -11008, -10496, -12032, -11520, -8960, -8448, -9984, -9472, + -15104, -14592, -16128, -15616, -13056, -12544, -14080, -13568, + -344, -328, -376, -360, -280, -264, -312, -296, + -472, -456, -504, -488, -408, -392, -440, -424, + -88, -72, -120, -104, -24, -8, -56, -40, + -216, -200, -248, -232, -152, -136, -184, -168, + -1376, -1312, -1504, -1440, -1120, -1056, -1248, -1184, + -1888, -1824, -2016, -1952, -1632, -1568, -1760, -1696, + -688, -656, -752, -720, -560, -528, -624, -592, + -944, -912, -1008, -976, -816, -784, -880, -848, + 5504, 5248, 6016, 5760, 4480, 4224, 4992, 4736, + 7552, 7296, 8064, 7808, 6528, 6272, 7040, 6784, + 2752, 2624, 3008, 2880, 2240, 2112, 2496, 2368, + 3776, 3648, 4032, 3904, 3264, 3136, 3520, 3392, + 22016, 20992, 24064, 23040, 17920, 16896, 19968, 18944, + 30208, 29184, 32256, 31232, 26112, 25088, 28160, 27136, + 11008, 10496, 12032, 11520, 8960, 8448, 9984, 9472, + 15104, 14592, 16128, 15616, 13056, 12544, 14080, 13568, + 344, 328, 376, 360, 280, 264, 312, 296, + 472, 456, 504, 488, 408, 392, 440, 424, + 88, 72, 120, 104, 24, 8, 56, 40, + 216, 200, 248, 232, 152, 136, 184, 168, + 1376, 1312, 1504, 1440, 1120, 1056, 1248, 1184, + 1888, 1824, 2016, 1952, 1632, 1568, 1760, 1696, + 688, 656, 752, 720, 560, 528, 624, 592, + 944, 912, 1008, 976, 816, 784, 880, 848, +}; diff -prauN linux-2.6.0-test5/sound/oss/forte.c wli-2.6.0-test5-bk12-25/sound/oss/forte.c --- linux-2.6.0-test5/sound/oss/forte.c 2003-09-08 12:50:01.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/sound/oss/forte.c 2003-09-25 19:16:18.000000000 -0700 @@ -37,7 +37,6 @@ #include #include -#include #include #include diff -prauN linux-2.6.0-test5/sound/oss/i810_audio.c wli-2.6.0-test5-bk12-25/sound/oss/i810_audio.c --- linux-2.6.0-test5/sound/oss/i810_audio.c 2003-09-08 12:50:20.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/sound/oss/i810_audio.c 2003-09-25 19:16:18.000000000 -0700 @@ -2728,7 +2728,7 @@ static int i810_ac97_probe_and_powerup(s i810_ac97_get(codec, AC97_POWER_CONTROL) & ~0x7f00); /* wait for analog ready */ - for (i=10; i && ((i810_ac97_get(codec, AC97_POWER_CONTROL) & 0xf) != 0xf); i--) + for (i=100; i && ((i810_ac97_get(codec, AC97_POWER_CONTROL) & 0xf) != 0xf); i--) { set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout(HZ/20); @@ -3091,10 +3091,17 @@ static int __init i810_probe(struct pci_ return -EIO; if (pci_set_dma_mask(pci_dev, I810_DMA_MASK)) { - printk(KERN_ERR "intel810: architecture does not support" + printk(KERN_ERR "i810_audio: architecture does not support" " 32bit PCI busmaster DMA\n"); return -ENODEV; } + + if( pci_resource_start(pci_dev, 1) == 0) + { + /* MMIO only ICH5 .. here be dragons .. */ + printk(KERN_ERR "i810_audio: Pure MMIO interfaces not yet supported.\n"); + return -ENODEV; + } if ((card = kmalloc(sizeof(struct i810_card), GFP_KERNEL)) == NULL) { printk(KERN_ERR "i810_audio: out of memory\n"); diff -prauN linux-2.6.0-test5/sound/oss/nec_vrc5477.c wli-2.6.0-test5-bk12-25/sound/oss/nec_vrc5477.c --- linux-2.6.0-test5/sound/oss/nec_vrc5477.c 2003-09-08 12:50:18.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/sound/oss/nec_vrc5477.c 2003-09-25 19:16:18.000000000 -0700 @@ -96,7 +96,6 @@ #endif #if defined(VRC5477_AC97_DEBUG) -#include #define ASSERT(x) if (!(x)) { \ panic("assertion failed at %s:%d: %s\n", __FILE__, __LINE__, #x); } #else diff -prauN linux-2.6.0-test5/sound/oss/rme96xx.c wli-2.6.0-test5-bk12-25/sound/oss/rme96xx.c --- linux-2.6.0-test5/sound/oss/rme96xx.c 2003-09-08 12:50:02.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/sound/oss/rme96xx.c 2003-09-25 19:16:18.000000000 -0700 @@ -54,7 +54,6 @@ TODO: #include #include #include -#include #include #include #include diff -prauN linux-2.6.0-test5/sound/oss/vwsnd.c wli-2.6.0-test5-bk12-25/sound/oss/vwsnd.c --- linux-2.6.0-test5/sound/oss/vwsnd.c 2003-09-08 12:50:07.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/sound/oss/vwsnd.c 2003-09-25 19:16:19.000000000 -0700 @@ -158,8 +158,6 @@ #ifdef VWSND_DEBUG -#include /* for in_interrupt() */ - static int shut_up = 1; /* diff -prauN linux-2.6.0-test5/sound/pci/ens1370.c wli-2.6.0-test5-bk12-25/sound/pci/ens1370.c --- linux-2.6.0-test5/sound/pci/ens1370.c 2003-09-08 12:50:21.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/sound/pci/ens1370.c 2003-09-25 19:16:19.000000000 -0700 @@ -47,6 +47,13 @@ #define CHIP1370 #endif +#ifdef CHIP1370 +#define DRIVER_NAME "ENS1370" +#else +#define DRIVER_NAME "ENS1371" +#endif + + MODULE_AUTHOR("Jaroslav Kysela , Thomas Sailer "); MODULE_LICENSE("GPL"); MODULE_CLASSES("{sound}"); @@ -2324,12 +2331,8 @@ static int __devinit snd_audiopci_probe( snd_card_free(card); return err; } -#ifdef CHIP1370 - strcpy(card->driver, "ENS1370"); -#endif -#ifdef CHIP1371 - strcpy(card->driver, "ENS1371"); -#endif + strcpy(card->driver, DRIVER_NAME); + strcpy(card->shortname, "Ensoniq AudioPCI"); sprintf(card->longname, "%s %s at 0x%lx, irq %i", card->shortname, @@ -2354,7 +2357,7 @@ static void __devexit snd_audiopci_remov } static struct pci_driver driver = { - .name = "Ensoniq AudioPCI", + .name = DRIVER_NAME, .id_table = snd_audiopci_ids, .probe = snd_audiopci_probe, .remove = __devexit_p(snd_audiopci_remove), diff -prauN linux-2.6.0-test5/usr/gen_init_cpio.c wli-2.6.0-test5-bk12-25/usr/gen_init_cpio.c --- linux-2.6.0-test5/usr/gen_init_cpio.c 2003-09-08 12:50:08.000000000 -0700 +++ wli-2.6.0-test5-bk12-25/usr/gen_init_cpio.c 2003-09-25 19:16:19.000000000 -0700 @@ -212,7 +212,7 @@ error: int main (int argc, char *argv[]) { - cpio_mkdir("/dev", 0700, 0, 0); + cpio_mkdir("/dev", 0755, 0, 0); cpio_mknod("/dev/console", 0600, 0, 0, 'c', 5, 1); cpio_mkdir("/root", 0700, 0, 0); cpio_trailer();